You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cloudstack.apache.org by bh...@apache.org on 2012/12/13 18:43:41 UTC

[3/3] api: Revert "Move all the DB view DAOs from cloud-server to cloud-api for future api-server package."

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/88b7af18/server/src/com/cloud/user/AccountManagerImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/user/AccountManagerImpl.java b/server/src/com/cloud/user/AccountManagerImpl.java
index 9bf0de6..e1b806d 100755
--- a/server/src/com/cloud/user/AccountManagerImpl.java
+++ b/server/src/com/cloud/user/AccountManagerImpl.java
@@ -43,8 +43,6 @@ import org.apache.commons.codec.binary.Base64;
 import org.apache.log4j.Logger;
 
 import com.cloud.acl.ControlledEntity;
-
-import org.apache.cloudstack.api.view.dao.UserAccountJoinDao;
 import org.apache.cloudstack.api.view.vo.ControlledViewEntity;
 import org.apache.cloudstack.api.view.vo.UserAccountJoinVO;
 
@@ -112,6 +110,7 @@ import com.cloud.template.VirtualMachineTemplate;
 import com.cloud.user.Account.State;
 import com.cloud.user.dao.AccountDao;
 import com.cloud.user.dao.UserAccountDao;
+import com.cloud.user.dao.UserAccountJoinDao;
 import com.cloud.user.dao.UserDao;
 import com.cloud.utils.NumbersUtil;
 import com.cloud.utils.Pair;

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/88b7af18/server/src/com/cloud/user/dao/UserAccountJoinDao.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/user/dao/UserAccountJoinDao.java b/server/src/com/cloud/user/dao/UserAccountJoinDao.java
new file mode 100644
index 0000000..39a82d0
--- /dev/null
+++ b/server/src/com/cloud/user/dao/UserAccountJoinDao.java
@@ -0,0 +1,40 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//   http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+package com.cloud.user.dao;
+
+import java.util.List;
+
+import org.apache.cloudstack.api.response.UserResponse;
+import org.apache.cloudstack.api.view.vo.UserAccountJoinVO;
+
+import com.cloud.user.User;
+import com.cloud.user.UserAccount;
+import com.cloud.utils.db.GenericDao;
+
+public interface UserAccountJoinDao extends GenericDao<UserAccountJoinVO, Long> {
+
+    UserResponse newUserResponse(UserAccountJoinVO usr);
+
+    UserAccountJoinVO newUserView(User usr);
+
+    UserAccountJoinVO newUserView(UserAccount usr);
+
+    List<UserAccountJoinVO> searchByIds(Long... ids);
+
+    List<UserAccountJoinVO> searchByAccountId(Long accountId);
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/88b7af18/server/src/com/cloud/user/dao/UserAccountJoinDaoImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/user/dao/UserAccountJoinDaoImpl.java b/server/src/com/cloud/user/dao/UserAccountJoinDaoImpl.java
new file mode 100644
index 0000000..e854ae5
--- /dev/null
+++ b/server/src/com/cloud/user/dao/UserAccountJoinDaoImpl.java
@@ -0,0 +1,138 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//   http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+package com.cloud.user.dao;
+
+import java.util.List;
+
+import javax.ejb.Local;
+
+import org.apache.log4j.Logger;
+
+import com.cloud.api.ApiDBUtils;
+import com.cloud.api.ApiResponseHelper;
+import org.apache.cloudstack.api.response.InstanceGroupResponse;
+import org.apache.cloudstack.api.response.UserResponse;
+import org.apache.cloudstack.api.view.vo.InstanceGroupJoinVO;
+import org.apache.cloudstack.api.view.vo.UserAccountJoinVO;
+
+import com.cloud.user.Account;
+import com.cloud.user.User;
+import com.cloud.user.UserAccount;
+import com.cloud.utils.db.GenericDaoBase;
+import com.cloud.utils.db.SearchBuilder;
+import com.cloud.utils.db.SearchCriteria;
+import com.cloud.vm.InstanceGroup;
+
+
+@Local(value={UserAccountJoinDao.class})
+public class UserAccountJoinDaoImpl extends GenericDaoBase<UserAccountJoinVO, Long> implements UserAccountJoinDao {
+    public static final Logger s_logger = Logger.getLogger(UserAccountJoinDaoImpl.class);
+
+    private SearchBuilder<UserAccountJoinVO> vrSearch;
+
+    private SearchBuilder<UserAccountJoinVO> vrIdSearch;
+
+    private SearchBuilder<UserAccountJoinVO> vrAcctIdSearch;
+
+
+    protected UserAccountJoinDaoImpl() {
+
+        vrSearch = createSearchBuilder();
+        vrSearch.and("idIN", vrSearch.entity().getId(), SearchCriteria.Op.IN);
+        vrSearch.done();
+
+        vrIdSearch = createSearchBuilder();
+        vrIdSearch.and("id", vrIdSearch.entity().getId(), SearchCriteria.Op.EQ);
+        vrIdSearch.done();
+
+        vrAcctIdSearch = createSearchBuilder();
+        vrAcctIdSearch.and("accountid", vrAcctIdSearch.entity().getAccountId(), SearchCriteria.Op.EQ);
+        vrAcctIdSearch.done();
+
+
+        this._count = "select count(distinct id) from user_view WHERE ";
+    }
+
+
+
+    @Override
+    public UserResponse newUserResponse(UserAccountJoinVO usr) {
+        UserResponse userResponse = new UserResponse();
+        userResponse.setAccountId(usr.getAccountUuid());
+        userResponse.setAccountName(usr.getAccountName());
+        userResponse.setAccountType(usr.getAccountType());
+        userResponse.setCreated(usr.getCreated());
+        userResponse.setDomainId(usr.getDomainUuid());
+        userResponse.setDomainName(usr.getDomainName());
+        userResponse.setEmail(usr.getEmail());
+        userResponse.setFirstname(usr.getFirstname());
+        userResponse.setId(usr.getUuid());
+        userResponse.setLastname(usr.getLastname());
+        userResponse.setState(usr.getState().toString());
+        userResponse.setTimezone(usr.getTimezone());
+        userResponse.setUsername(usr.getUsername());
+        userResponse.setApiKey(usr.getApiKey());
+        userResponse.setSecretKey(usr.getSecretKey());
+        userResponse.setObjectName("user");
+
+        return userResponse;
+    }
+
+
+    @Override
+    public UserAccountJoinVO newUserView(User usr) {
+        SearchCriteria<UserAccountJoinVO> sc = vrIdSearch.create();
+        sc.setParameters("id", usr.getId());
+        List<UserAccountJoinVO> users = searchIncludingRemoved(sc, null, null, false);
+        assert users != null && users.size() == 1 : "No user found for user id " + usr.getId();
+        return users.get(0);
+    }
+
+
+
+
+    @Override
+    public UserAccountJoinVO newUserView(UserAccount usr) {
+        SearchCriteria<UserAccountJoinVO> sc = vrIdSearch.create();
+        sc.setParameters("id", usr.getId());
+        List<UserAccountJoinVO> users = searchIncludingRemoved(sc, null, null, false);
+        assert users != null && users.size() == 1 : "No user found for user id " + usr.getId();
+        return users.get(0);
+    }
+
+
+
+    @Override
+    public List<UserAccountJoinVO> searchByIds(Long... ids) {
+        SearchCriteria<UserAccountJoinVO> sc = vrSearch.create();
+        sc.setParameters("idIN", ids);
+        return searchIncludingRemoved(sc, null, null, false);
+    }
+
+
+
+    @Override
+    public List<UserAccountJoinVO> searchByAccountId(Long accountId) {
+        SearchCriteria<UserAccountJoinVO> sc = vrAcctIdSearch.create();
+        sc.setParameters("accountId", accountId);
+        return searchIncludingRemoved(sc, null, null, false);
+    }
+
+
+
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/88b7af18/server/src/com/cloud/vm/UserVmManagerImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/vm/UserVmManagerImpl.java b/server/src/com/cloud/vm/UserVmManagerImpl.java
index 2e14655..a8241d0 100755
--- a/server/src/com/cloud/vm/UserVmManagerImpl.java
+++ b/server/src/com/cloud/vm/UserVmManagerImpl.java
@@ -74,7 +74,6 @@ import org.apache.cloudstack.api.command.user.vm.ResetVMPasswordCmd;
 import org.apache.cloudstack.api.command.user.vm.RestoreVMCmd;
 import org.apache.cloudstack.api.command.user.vm.UpdateVMCmd;
 import org.apache.cloudstack.api.command.user.vm.UpgradeVMCmd;
-import org.apache.cloudstack.api.view.dao.UserVmJoinDao;
 import org.apache.cloudstack.api.view.vo.UserVmJoinVO;
 import com.cloud.async.AsyncJobExecutor;
 import com.cloud.async.AsyncJobManager;
@@ -231,6 +230,7 @@ import com.cloud.vm.dao.InstanceGroupVMMapDao;
 import com.cloud.vm.dao.NicDao;
 import com.cloud.vm.dao.UserVmDao;
 import com.cloud.vm.dao.UserVmDetailsDao;
+import com.cloud.vm.dao.UserVmJoinDao;
 import com.cloud.vm.dao.VMInstanceDao;
 
 @Local(value = { UserVmManager.class, UserVmService.class })

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/88b7af18/server/src/com/cloud/vm/dao/DomainRouterJoinDao.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/vm/dao/DomainRouterJoinDao.java b/server/src/com/cloud/vm/dao/DomainRouterJoinDao.java
new file mode 100644
index 0000000..9bb03be
--- /dev/null
+++ b/server/src/com/cloud/vm/dao/DomainRouterJoinDao.java
@@ -0,0 +1,36 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//   http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+package com.cloud.vm.dao;
+
+import java.util.List;
+
+import org.apache.cloudstack.api.response.DomainRouterResponse;
+import org.apache.cloudstack.api.view.vo.DomainRouterJoinVO;
+import com.cloud.network.router.VirtualRouter;
+import com.cloud.user.Account;
+import com.cloud.utils.db.GenericDao;
+
+public interface DomainRouterJoinDao extends GenericDao<DomainRouterJoinVO, Long> {
+
+    DomainRouterResponse newDomainRouterResponse(DomainRouterJoinVO uvo, Account caller);
+
+    DomainRouterResponse setDomainRouterResponse(DomainRouterResponse userVmData, DomainRouterJoinVO uvo);
+
+    List<DomainRouterJoinVO> newDomainRouterView(VirtualRouter vr);
+
+    List<DomainRouterJoinVO> searchByIds(Long... ids);
+}

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/88b7af18/server/src/com/cloud/vm/dao/DomainRouterJoinDaoImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/vm/dao/DomainRouterJoinDaoImpl.java b/server/src/com/cloud/vm/dao/DomainRouterJoinDaoImpl.java
new file mode 100644
index 0000000..38839e3
--- /dev/null
+++ b/server/src/com/cloud/vm/dao/DomainRouterJoinDaoImpl.java
@@ -0,0 +1,202 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//   http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+package com.cloud.vm.dao;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.ejb.Local;
+
+import org.apache.log4j.Logger;
+
+import com.cloud.api.ApiResponseHelper;
+import org.apache.cloudstack.api.response.DomainRouterResponse;
+import org.apache.cloudstack.api.response.NicResponse;
+import org.apache.cloudstack.api.view.vo.DomainRouterJoinVO;
+import com.cloud.network.Networks.TrafficType;
+import com.cloud.network.router.VirtualRouter;
+import com.cloud.user.Account;
+import com.cloud.utils.db.GenericDaoBase;
+import com.cloud.utils.db.SearchBuilder;
+import com.cloud.utils.db.SearchCriteria;
+
+
+@Local(value={DomainRouterJoinDao.class})
+public class DomainRouterJoinDaoImpl extends GenericDaoBase<DomainRouterJoinVO, Long> implements DomainRouterJoinDao {
+    public static final Logger s_logger = Logger.getLogger(DomainRouterJoinDaoImpl.class);
+
+    private SearchBuilder<DomainRouterJoinVO> vrSearch;
+
+    private SearchBuilder<DomainRouterJoinVO> vrIdSearch;
+
+    protected DomainRouterJoinDaoImpl() {
+
+        vrSearch = createSearchBuilder();
+        vrSearch.and("idIN", vrSearch.entity().getId(), SearchCriteria.Op.IN);
+        vrSearch.done();
+
+        vrIdSearch = createSearchBuilder();
+        vrIdSearch.and("id", vrIdSearch.entity().getId(), SearchCriteria.Op.EQ);
+        vrIdSearch.done();
+
+        this._count = "select count(distinct id) from domain_router_view WHERE ";
+    }
+
+
+    @Override
+    public DomainRouterResponse newDomainRouterResponse(DomainRouterJoinVO router, Account caller) {
+        DomainRouterResponse routerResponse = new DomainRouterResponse();
+        routerResponse.setId(router.getUuid());
+        routerResponse.setZoneId(router.getDataCenterUuid());
+        routerResponse.setName(router.getHostName());
+        routerResponse.setTemplateId(router.getTemplateUuid());
+        routerResponse.setCreated(router.getCreated());
+        routerResponse.setState(router.getState());
+        routerResponse.setIsRedundantRouter(router.isRedundantRouter());
+        routerResponse.setRedundantState(router.getRedundantState().toString());
+
+        if (caller.getType() == Account.ACCOUNT_TYPE_RESOURCE_DOMAIN_ADMIN
+                || caller.getType() == Account.ACCOUNT_TYPE_ADMIN) {
+            if (router.getHostId() != null) {
+                routerResponse.setHostId(router.getHostUuid());
+                routerResponse.setHostName(router.getHostName());
+            }
+            routerResponse.setPodId(router.getPodUuid());
+            long nic_id = router.getNicId();
+            if (nic_id > 0) {
+                TrafficType ty = router.getTrafficType();
+                if (ty != null) {
+                    // legacy code, public/control/guest nic info is kept in
+                    // nics response object
+                    if (ty == TrafficType.Public) {
+                        routerResponse.setPublicIp(router.getIpAddress());
+                        routerResponse.setPublicMacAddress(router.getMacAddress());
+                        routerResponse.setPublicNetmask(router.getNetmask());
+                        routerResponse.setGateway(router.getGateway());
+                        routerResponse.setPublicNetworkId(router.getNetworkUuid());
+                    } else if (ty == TrafficType.Control) {
+                        routerResponse.setLinkLocalIp(router.getIpAddress());
+                        routerResponse.setLinkLocalMacAddress(router.getMacAddress());
+                        routerResponse.setLinkLocalNetmask(router.getNetmask());
+                        routerResponse.setLinkLocalNetworkId(router.getNetworkUuid());
+                    } else if (ty == TrafficType.Guest) {
+                        routerResponse.setGuestIpAddress(router.getIpAddress());
+                        routerResponse.setGuestMacAddress(router.getMacAddress());
+                        routerResponse.setGuestNetmask(router.getNetmask());
+                        routerResponse.setGuestNetworkId(router.getNetworkUuid());
+                        routerResponse.setNetworkDomain(router.getNetworkDomain());
+                    }
+                }
+
+                NicResponse nicResponse = new NicResponse();
+                nicResponse.setId(router.getNicUuid());
+                nicResponse.setIpaddress(router.getIpAddress());
+                nicResponse.setGateway(router.getGateway());
+                nicResponse.setNetmask(router.getNetmask());
+                nicResponse.setNetworkid(router.getNetworkUuid());
+                nicResponse.setNetworkName(router.getNetworkName());
+                nicResponse.setMacAddress(router.getMacAddress());
+                if (router.getBroadcastUri() != null) {
+                    nicResponse.setBroadcastUri(router.getBroadcastUri().toString());
+                }
+                if (router.getIsolationUri() != null) {
+                    nicResponse.setIsolationUri(router.getIsolationUri().toString());
+                }
+                if (router.getTrafficType() != null) {
+                    nicResponse.setTrafficType(router.getTrafficType().toString());
+                }
+                if (router.getGuestType() != null) {
+                    nicResponse.setType(router.getGuestType().toString());
+                }
+                nicResponse.setIsDefault(router.isDefaultNic());
+                nicResponse.setObjectName("nic");
+                routerResponse.addNic(nicResponse);
+            }
+        }
+
+        routerResponse.setServiceOfferingId(router.getServiceOfferingUuid());
+        routerResponse.setServiceOfferingName(router.getServiceOfferingName());
+
+        // populate owner.
+        ApiResponseHelper.populateOwner(routerResponse, router);
+
+
+        routerResponse.setDomainId(router.getDomainUuid());
+        routerResponse.setDomainName(router.getDomainName());
+
+        routerResponse.setZoneName(router.getDataCenterName());
+        routerResponse.setDns1(router.getDns1());
+        routerResponse.setDns2(router.getDns2());
+
+        routerResponse.setVpcId(router.getVpcUuid());
+
+        routerResponse.setObjectName("router");
+
+        return routerResponse;
+    }
+
+
+    @Override
+    public DomainRouterResponse setDomainRouterResponse(DomainRouterResponse vrData, DomainRouterJoinVO vr) {
+        long nic_id = vr.getNicId();
+        if (nic_id > 0) {
+            NicResponse nicResponse = new NicResponse();
+            nicResponse.setId(vr.getNicUuid());
+            nicResponse.setIpaddress(vr.getIpAddress());
+            nicResponse.setGateway(vr.getGateway());
+            nicResponse.setNetmask(vr.getNetmask());
+            nicResponse.setNetworkid(vr.getNetworkUuid());
+            nicResponse.setMacAddress(vr.getMacAddress());
+            if (vr.getBroadcastUri() != null) {
+                nicResponse.setBroadcastUri(vr.getBroadcastUri().toString());
+            }
+            if (vr.getIsolationUri() != null) {
+                nicResponse.setIsolationUri(vr.getIsolationUri().toString());
+            }
+            if (vr.getTrafficType() != null) {
+                nicResponse.setTrafficType(vr.getTrafficType().toString());
+            }
+            if (vr.getGuestType() != null) {
+                nicResponse.setType(vr.getGuestType().toString());
+            }
+            nicResponse.setIsDefault(vr.isDefaultNic());
+            nicResponse.setObjectName("nic");
+            vrData.addNic(nicResponse);
+        }
+        return vrData;
+    }
+
+
+
+
+    @Override
+    public List<DomainRouterJoinVO> searchByIds(Long... ids) {
+        SearchCriteria<DomainRouterJoinVO> sc = vrSearch.create();
+        sc.setParameters("idIN", ids);
+        return searchIncludingRemoved(sc, null, null, false);
+    }
+
+
+    @Override
+    public List<DomainRouterJoinVO> newDomainRouterView(VirtualRouter vr) {
+
+        SearchCriteria<DomainRouterJoinVO> sc = vrIdSearch.create();
+        sc.setParameters("id", vr.getId());
+        return searchIncludingRemoved(sc, null, null, false);
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/88b7af18/server/src/com/cloud/vm/dao/InstanceGroupJoinDao.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/vm/dao/InstanceGroupJoinDao.java b/server/src/com/cloud/vm/dao/InstanceGroupJoinDao.java
new file mode 100644
index 0000000..64599be
--- /dev/null
+++ b/server/src/com/cloud/vm/dao/InstanceGroupJoinDao.java
@@ -0,0 +1,35 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//   http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+package com.cloud.vm.dao;
+
+import java.util.List;
+
+import org.apache.cloudstack.api.response.InstanceGroupResponse;
+import org.apache.cloudstack.api.view.vo.InstanceGroupJoinVO;
+
+import com.cloud.utils.db.GenericDao;
+import com.cloud.vm.InstanceGroup;
+
+public interface InstanceGroupJoinDao extends GenericDao<InstanceGroupJoinVO, Long> {
+
+    InstanceGroupResponse newInstanceGroupResponse(InstanceGroupJoinVO group);
+
+    InstanceGroupJoinVO newInstanceGroupView(InstanceGroup group);
+
+    List<InstanceGroupJoinVO> searchByIds(Long... ids);
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/88b7af18/server/src/com/cloud/vm/dao/InstanceGroupJoinDaoImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/vm/dao/InstanceGroupJoinDaoImpl.java b/server/src/com/cloud/vm/dao/InstanceGroupJoinDaoImpl.java
new file mode 100644
index 0000000..aa20b77
--- /dev/null
+++ b/server/src/com/cloud/vm/dao/InstanceGroupJoinDaoImpl.java
@@ -0,0 +1,96 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//   http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+package com.cloud.vm.dao;
+
+import java.util.List;
+
+import javax.ejb.Local;
+
+import org.apache.log4j.Logger;
+
+import com.cloud.api.ApiResponseHelper;
+import org.apache.cloudstack.api.response.InstanceGroupResponse;
+import org.apache.cloudstack.api.view.vo.InstanceGroupJoinVO;
+
+import com.cloud.utils.db.GenericDaoBase;
+import com.cloud.utils.db.SearchBuilder;
+import com.cloud.utils.db.SearchCriteria;
+import com.cloud.vm.InstanceGroup;
+
+
+@Local(value={InstanceGroupJoinDao.class})
+public class InstanceGroupJoinDaoImpl extends GenericDaoBase<InstanceGroupJoinVO, Long> implements InstanceGroupJoinDao {
+    public static final Logger s_logger = Logger.getLogger(InstanceGroupJoinDaoImpl.class);
+
+    private SearchBuilder<InstanceGroupJoinVO> vrSearch;
+
+    private SearchBuilder<InstanceGroupJoinVO> vrIdSearch;
+
+
+    protected InstanceGroupJoinDaoImpl() {
+
+        vrSearch = createSearchBuilder();
+        vrSearch.and("idIN", vrSearch.entity().getId(), SearchCriteria.Op.IN);
+        vrSearch.done();
+
+        vrIdSearch = createSearchBuilder();
+        vrIdSearch.and("id", vrIdSearch.entity().getId(), SearchCriteria.Op.EQ);
+        vrIdSearch.done();
+
+        this._count = "select count(distinct id) from instance_group_view WHERE ";
+    }
+
+
+
+    @Override
+    public InstanceGroupResponse newInstanceGroupResponse(InstanceGroupJoinVO group) {
+        InstanceGroupResponse groupResponse = new InstanceGroupResponse();
+        groupResponse.setId(group.getUuid());
+        groupResponse.setName(group.getName());
+        groupResponse.setCreated(group.getCreated());
+
+        ApiResponseHelper.populateOwner(groupResponse, group);
+
+        groupResponse.setObjectName("instancegroup");
+        return groupResponse;
+    }
+
+
+
+    @Override
+    public InstanceGroupJoinVO newInstanceGroupView(InstanceGroup group) {
+        SearchCriteria<InstanceGroupJoinVO> sc = vrIdSearch.create();
+        sc.setParameters("id", group.getId());
+        List<InstanceGroupJoinVO> grps = searchIncludingRemoved(sc, null, null, false);
+        assert grps != null && grps.size() == 1 : "No vm group found for group id " + group.getId();
+        return grps.get(0);
+
+    }
+
+
+
+    @Override
+    public List<InstanceGroupJoinVO> searchByIds(Long... ids) {
+        SearchCriteria<InstanceGroupJoinVO> sc = vrSearch.create();
+        sc.setParameters("idIN", ids);
+        return searchIncludingRemoved(sc, null, null, false);
+    }
+
+
+
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/88b7af18/server/src/com/cloud/vm/dao/UserVmJoinDao.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/vm/dao/UserVmJoinDao.java b/server/src/com/cloud/vm/dao/UserVmJoinDao.java
new file mode 100644
index 0000000..7788a62
--- /dev/null
+++ b/server/src/com/cloud/vm/dao/UserVmJoinDao.java
@@ -0,0 +1,38 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//   http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+package com.cloud.vm.dao;
+
+import java.util.EnumSet;
+import java.util.List;
+
+import org.apache.cloudstack.api.ApiConstants.VMDetails;
+import org.apache.cloudstack.api.response.UserVmResponse;
+import org.apache.cloudstack.api.view.vo.UserVmJoinVO;
+import com.cloud.user.Account;
+import com.cloud.uservm.UserVm;
+import com.cloud.utils.db.GenericDao;
+
+public interface UserVmJoinDao extends GenericDao<UserVmJoinVO, Long> {
+
+    UserVmResponse newUserVmResponse(String objectName, UserVmJoinVO userVm, EnumSet<VMDetails> details, Account caller);
+
+    UserVmResponse setUserVmResponse(UserVmResponse userVmData, UserVmJoinVO uvo);
+
+    List<UserVmJoinVO> newUserVmView(UserVm... userVms);
+
+    List<UserVmJoinVO> searchByIds(Long... ids);
+}

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/88b7af18/server/src/com/cloud/vm/dao/UserVmJoinDaoImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/vm/dao/UserVmJoinDaoImpl.java b/server/src/com/cloud/vm/dao/UserVmJoinDaoImpl.java
new file mode 100644
index 0000000..b20e53f
--- /dev/null
+++ b/server/src/com/cloud/vm/dao/UserVmJoinDaoImpl.java
@@ -0,0 +1,327 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//   http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+package com.cloud.vm.dao;
+
+import java.text.DecimalFormat;
+import java.util.ArrayList;
+import java.util.EnumSet;
+import java.util.Hashtable;
+import java.util.List;
+
+import javax.ejb.Local;
+
+import org.apache.log4j.Logger;
+
+import com.cloud.api.ApiDBUtils;
+import org.apache.cloudstack.api.ApiConstants.VMDetails;
+import org.apache.cloudstack.api.response.NicResponse;
+import org.apache.cloudstack.api.response.SecurityGroupResponse;
+import org.apache.cloudstack.api.response.UserVmResponse;
+import org.apache.cloudstack.api.view.vo.ResourceTagJoinVO;
+import org.apache.cloudstack.api.view.vo.UserVmJoinVO;
+import com.cloud.user.Account;
+import com.cloud.uservm.UserVm;
+import com.cloud.utils.db.GenericDaoBase;
+import com.cloud.utils.db.SearchBuilder;
+import com.cloud.utils.db.SearchCriteria;
+import com.cloud.vm.VmStats;
+
+
+@Local(value={UserVmJoinDao.class})
+public class UserVmJoinDaoImpl extends GenericDaoBase<UserVmJoinVO, Long> implements UserVmJoinDao {
+    public static final Logger s_logger = Logger.getLogger(UserVmJoinDaoImpl.class);
+
+    private static final int VM_DETAILS_BATCH_SIZE=100;
+
+    private SearchBuilder<UserVmJoinVO> VmDetailSearch;
+
+    protected UserVmJoinDaoImpl() {
+
+        VmDetailSearch = createSearchBuilder();
+        VmDetailSearch.and("idIN", VmDetailSearch.entity().getId(), SearchCriteria.Op.IN);
+        VmDetailSearch.done();
+
+        this._count = "select count(distinct id) from user_vm_view WHERE ";
+    }
+
+    public UserVmResponse newUserVmResponse(String objectName, UserVmJoinVO userVm, EnumSet<VMDetails> details, Account caller) {
+        UserVmResponse userVmResponse = new UserVmResponse();
+
+        if (userVm.getHypervisorType() != null){
+            userVmResponse.setHypervisor(userVm.getHypervisorType().toString());
+        }
+        userVmResponse.setId(userVm.getUuid());
+        userVmResponse.setName(userVm.getName());
+
+        userVmResponse.setDisplayName(userVm.getDisplayName());
+
+        if (userVm.getAccountType() == Account.ACCOUNT_TYPE_PROJECT) {
+            userVmResponse.setProjectId(userVm.getProjectUuid());
+            userVmResponse.setProjectName(userVm.getProjectName());
+        } else {
+            userVmResponse.setAccountName(userVm.getAccountName());
+        }
+
+        userVmResponse.setDomainId(userVm.getDomainUuid());
+        userVmResponse.setDomainName(userVm.getDomainName());
+
+        userVmResponse.setCreated(userVm.getCreated());
+
+        if (userVm.getState() != null) {
+            userVmResponse.setState(userVm.getState().toString());
+        }
+        userVmResponse.setHaEnable(userVm.isHaEnabled());
+        if (details.contains(VMDetails.all) || details.contains(VMDetails.group)) {
+            userVmResponse.setGroupId(userVm.getInstanceGroupUuid());
+            userVmResponse.setGroup(userVm.getInstanceGroupName());
+        }
+        userVmResponse.setZoneId(userVm.getDataCenterUuid());
+        userVmResponse.setZoneName(userVm.getDataCenterName());
+        if ((caller == null) || (caller.getType() == Account.ACCOUNT_TYPE_ADMIN)) {
+            userVmResponse.setInstanceName(userVm.getInstanceName());
+            userVmResponse.setHostId(userVm.getHostUuid());
+            userVmResponse.setHostName(userVm.getHostName());
+        }
+
+        if (details.contains(VMDetails.all) || details.contains(VMDetails.tmpl)) {
+            userVmResponse.setTemplateId(userVm.getTemplateUuid());
+            userVmResponse.setTemplateName(userVm.getTemplateName());
+            userVmResponse.setTemplateDisplayText(userVm.getTemplateDisplayText());
+            userVmResponse.setPasswordEnabled(userVm.isPasswordEnabled());
+        }
+        if (details.contains(VMDetails.all) || details.contains(VMDetails.iso)) {
+            userVmResponse.setIsoId(userVm.getIsoUuid());
+            userVmResponse.setIsoName(userVm.getIsoName());
+            userVmResponse.setIsoDisplayText(userVm.getIsoDisplayText());
+        }
+        if (details.contains(VMDetails.all) || details.contains(VMDetails.servoff)) {
+            userVmResponse.setServiceOfferingId(userVm.getServiceOfferingUuid());
+            userVmResponse.setServiceOfferingName(userVm.getServiceOfferingName());
+            userVmResponse.setCpuNumber(userVm.getCpu());
+            userVmResponse.setCpuSpeed(userVm.getSpeed());
+            userVmResponse.setMemory(userVm.getRamSize());
+        }
+        userVmResponse.setGuestOsId(userVm.getGuestOsUuid());
+        if (details.contains(VMDetails.all) || details.contains(VMDetails.volume)) {
+            userVmResponse.setRootDeviceId(userVm.getVolumeDeviceId());
+            if (userVm.getVolumeType() != null) {
+                userVmResponse.setRootDeviceType(userVm.getVolumeType().toString());
+            }
+        }
+        userVmResponse.setPassword(userVm.getPassword());
+        userVmResponse.setJobUuid(userVm.getJobUuid());
+        userVmResponse.setJobStatus(userVm.getJobStatus());
+        //userVmResponse.setForVirtualNetwork(userVm.getForVirtualNetwork());
+
+        userVmResponse.setPublicIpId(userVm.getPublicIpUuid());
+        userVmResponse.setPublicIp(userVm.getPublicIpAddress());
+        userVmResponse.setKeyPairName(userVm.getKeypairName());
+
+        if (details.contains(VMDetails.all) || details.contains(VMDetails.stats)) {
+            DecimalFormat decimalFormat = new DecimalFormat("#.##");
+            // stats calculation
+            String cpuUsed = null;
+            VmStats vmStats = ApiDBUtils.getVmStatistics(userVm.getId());
+            if (vmStats != null) {
+                float cpuUtil = (float) vmStats.getCPUUtilization();
+                cpuUsed = decimalFormat.format(cpuUtil) + "%";
+                userVmResponse.setCpuUsed(cpuUsed);
+
+                Double networkKbRead = Double.valueOf(vmStats.getNetworkReadKBs());
+                userVmResponse.setNetworkKbsRead(networkKbRead.longValue());
+
+                Double networkKbWrite = Double.valueOf(vmStats.getNetworkWriteKBs());
+                userVmResponse.setNetworkKbsWrite(networkKbWrite.longValue());
+            }
+        }
+
+        if (details.contains(VMDetails.all) || details.contains(VMDetails.secgrp)) {
+            Long securityGroupId = userVm.getSecurityGroupId();
+            if (securityGroupId != null && securityGroupId.longValue() != 0) {
+                SecurityGroupResponse resp = new SecurityGroupResponse();
+                resp.setId(userVm.getSecurityGroupUuid());
+                resp.setName(userVm.getSecurityGroupName());
+                resp.setDescription(userVm.getSecurityGroupDescription());
+                resp.setObjectName("securitygroup");
+                if (userVm.getAccountType() == Account.ACCOUNT_TYPE_PROJECT) {
+                    resp.setProjectId(userVm.getProjectUuid());
+                    resp.setProjectName(userVm.getProjectName());
+                } else {
+                    resp.setAccountName(userVm.getAccountName());
+                }
+                userVmResponse.addSecurityGroup(resp);
+            }
+        }
+
+        if (details.contains(VMDetails.all) || details.contains(VMDetails.nics)) {
+            long nic_id = userVm.getNicId();
+            if (nic_id > 0) {
+                NicResponse nicResponse = new NicResponse();
+                nicResponse.setId(userVm.getNicUuid());
+                nicResponse.setIpaddress(userVm.getIpAddress());
+                nicResponse.setGateway(userVm.getGateway());
+                nicResponse.setNetmask(userVm.getNetmask());
+                nicResponse.setNetworkid(userVm.getNetworkUuid());
+                nicResponse.setMacAddress(userVm.getMacAddress());
+                if (userVm.getBroadcastUri() != null) {
+                    nicResponse.setBroadcastUri(userVm.getBroadcastUri().toString());
+                }
+                if (userVm.getIsolationUri() != null) {
+                    nicResponse.setIsolationUri(userVm.getIsolationUri().toString());
+                }
+                if (userVm.getTrafficType() != null) {
+                    nicResponse.setTrafficType(userVm.getTrafficType().toString());
+                }
+                if (userVm.getGuestType() != null) {
+                    nicResponse.setType(userVm.getGuestType().toString());
+                }
+                nicResponse.setIsDefault(userVm.isDefaultNic());
+                nicResponse.setObjectName("nic");
+                userVmResponse.addNic(nicResponse);
+            }
+        }
+
+        // update tag information
+        long tag_id = userVm.getTagId();
+        if (tag_id > 0) {
+            ResourceTagJoinVO vtag = ApiDBUtils.findResourceTagViewById(tag_id);
+            if ( vtag != null ){
+                userVmResponse.addTag(ApiDBUtils.newResourceTagResponse(vtag, false));
+            }
+        }
+        userVmResponse.setObjectName(objectName);
+
+        return userVmResponse;
+       }
+
+    public UserVmResponse setUserVmResponse(UserVmResponse userVmData, UserVmJoinVO uvo) {
+        Long securityGroupId = uvo.getSecurityGroupId();
+        if (securityGroupId != null && securityGroupId.longValue() != 0) {
+            SecurityGroupResponse resp = new SecurityGroupResponse();
+            resp.setId(uvo.getSecurityGroupUuid());
+            resp.setName(uvo.getSecurityGroupName());
+            resp.setDescription(uvo.getSecurityGroupDescription());
+            resp.setObjectName("securitygroup");
+            if (uvo.getAccountType() == Account.ACCOUNT_TYPE_PROJECT) {
+                resp.setProjectId(uvo.getProjectUuid());
+                resp.setProjectName(uvo.getProjectName());
+            } else {
+                resp.setAccountName(uvo.getAccountName());
+            }
+            userVmData.addSecurityGroup(resp);
+        }
+
+        long nic_id = uvo.getNicId();
+        if (nic_id > 0) {
+            NicResponse nicResponse = new NicResponse();
+            nicResponse.setId(uvo.getNicUuid());
+            nicResponse.setIpaddress(uvo.getIpAddress());
+            nicResponse.setGateway(uvo.getGateway());
+            nicResponse.setNetmask(uvo.getNetmask());
+            nicResponse.setNetworkid(uvo.getNetworkUuid());
+            nicResponse.setMacAddress(uvo.getMacAddress());
+            if (uvo.getBroadcastUri() != null) {
+                nicResponse.setBroadcastUri(uvo.getBroadcastUri().toString());
+            }
+            if (uvo.getIsolationUri() != null) {
+                nicResponse.setIsolationUri(uvo.getIsolationUri().toString());
+            }
+            if (uvo.getTrafficType() != null) {
+                nicResponse.setTrafficType(uvo.getTrafficType().toString());
+            }
+            if (uvo.getGuestType() != null) {
+                nicResponse.setType(uvo.getGuestType().toString());
+            }
+            nicResponse.setIsDefault(uvo.isDefaultNic());
+            nicResponse.setObjectName("nic");
+            userVmData.addNic(nicResponse);
+        }
+
+        long tag_id = uvo.getTagId();
+        if (tag_id > 0) {
+            ResourceTagJoinVO vtag = ApiDBUtils.findResourceTagViewById(tag_id);
+            if ( vtag != null ){
+                userVmData.addTag(ApiDBUtils.newResourceTagResponse(vtag, false));
+            }
+        }
+        return userVmData;
+    }
+
+
+    @Override
+    public List<UserVmJoinVO> searchByIds(Long... vmIds) {
+        SearchCriteria<UserVmJoinVO> sc = VmDetailSearch.create();
+        sc.setParameters("idIN", vmIds);
+        return searchIncludingRemoved(sc, null, null, false);
+    }
+
+    @Override
+    public List<UserVmJoinVO> newUserVmView(UserVm... userVms) {
+
+        int curr_index = 0;
+
+        Hashtable<Long, UserVm> userVmDataHash = new Hashtable<Long, UserVm>();
+        for (UserVm vm : userVms){
+            if ( !userVmDataHash.containsKey(vm.getId())){
+                userVmDataHash.put(vm.getId(), vm);
+            }
+        }
+
+        List<UserVmJoinVO> uvList = new ArrayList<UserVmJoinVO>();
+        List<Long> userVmIdList = new ArrayList(userVmDataHash.keySet());
+         if (userVmIdList.size() > VM_DETAILS_BATCH_SIZE) {
+            while ((curr_index + VM_DETAILS_BATCH_SIZE) <= userVmIdList.size()) {
+                // set current ids
+                Long[] vmIds = new Long[VM_DETAILS_BATCH_SIZE];
+                for (int k = 0, j = curr_index; j < curr_index + VM_DETAILS_BATCH_SIZE; j++, k++) {
+                    vmIds[k] = userVmIdList.get(j);
+                }
+                SearchCriteria<UserVmJoinVO> sc = VmDetailSearch.create();
+                sc.setParameters("idIN", vmIds);
+                List<UserVmJoinVO> vms = searchIncludingRemoved(sc, null, null, false);
+                if (vms != null) {
+                    for (UserVmJoinVO uvm : vms) {
+                        uvList.add(uvm);
+                    }
+                }
+                curr_index += VM_DETAILS_BATCH_SIZE;
+            }
+        }
+
+        if (curr_index < userVmIdList.size()) {
+            int batch_size = (userVmIdList.size() - curr_index);
+            // set the ids value
+            Long[] vmIds = new Long[batch_size];
+            for (int k = 0, j = curr_index; j < curr_index + batch_size; j++, k++) {
+                vmIds[k] = userVmIdList.get(j);
+            }
+            SearchCriteria<UserVmJoinVO> sc = VmDetailSearch.create();
+            sc.setParameters("idIN", vmIds);
+            List<UserVmJoinVO> vms = searchIncludingRemoved(sc, null, null, false);
+            if (vms != null) {
+                for (UserVmJoinVO uvm : vms) {
+                    UserVm vm = userVmDataHash.get(uvm.getId());
+                    assert vm != null : "We should not find details of vm not in the passed UserVm list";
+                    uvList.add(uvm);
+                }
+            }
+        }
+        return uvList;
+
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/88b7af18/server/test/com/cloud/network/security/SecurityGroupManagerImpl2Test.java
----------------------------------------------------------------------
diff --git a/server/test/com/cloud/network/security/SecurityGroupManagerImpl2Test.java b/server/test/com/cloud/network/security/SecurityGroupManagerImpl2Test.java
index 93bccf4..46b7018 100644
--- a/server/test/com/cloud/network/security/SecurityGroupManagerImpl2Test.java
+++ b/server/test/com/cloud/network/security/SecurityGroupManagerImpl2Test.java
@@ -23,7 +23,6 @@ import javax.naming.ConfigurationException;
 
 import junit.framework.TestCase;
 
-import org.apache.cloudstack.api.view.dao.SecurityGroupJoinDaoImpl;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Ignore;
@@ -35,6 +34,7 @@ import com.cloud.domain.dao.DomainDaoImpl;
 import com.cloud.event.dao.UsageEventDaoImpl;
 import com.cloud.network.MockNetworkManagerImpl;
 import com.cloud.network.security.dao.SecurityGroupDaoImpl;
+import com.cloud.network.security.dao.SecurityGroupJoinDaoImpl;
 import com.cloud.network.security.dao.SecurityGroupRuleDaoImpl;
 import com.cloud.network.security.dao.SecurityGroupRulesDaoImpl;
 import com.cloud.network.security.dao.SecurityGroupVMMapDaoImpl;