incubator-cloudstack-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From bhais...@apache.org
Subject [1/3] git commit: api: Optimize and improve api, db call perfomance
Date Thu, 06 Dec 2012 04:08:20 GMT
Updated Branches:
  refs/heads/api_refactoring c59de6cbd -> b0ce8fd4f


api: Optimize and improve api, db call perfomance

This is part 1 of list API refactoring. Commands covered:
listVmsCmd, listRoutersCmd Response covered:
UserVmResponse, DomainRouterResponse. DB views created:
user_vm_view, domain_router_view.

Signed-off-by: Rohit Yadav <bhaisaab@apache.org>


Project: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/commit/b0ce8fd4
Tree: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/tree/b0ce8fd4
Diff: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/diff/b0ce8fd4

Branch: refs/heads/api_refactoring
Commit: b0ce8fd4ff512c7a7da0a71671c4477492e854e7
Parents: c59de6c
Author: Min Chen <min.chen@citrix.com>
Authored: Wed Dec 5 16:18:38 2012 -0800
Committer: Rohit Yadav <bhaisaab@apache.org>
Committed: Wed Dec 5 20:06:20 2012 -0800

----------------------------------------------------------------------
 api/src/com/cloud/api/response/BaseResponse.java   |   19 +-
 .../api/response/ControlledViewEntityResponse.java |   31 +
 .../cloud/api/response/DomainRouterResponse.java   |   97 +-
 api/src/com/cloud/api/response/NicResponse.java    |   32 +-
 api/src/com/cloud/api/response/UserVmResponse.java |  132 +-
 .../cloud/api/view/vo/ControlledViewEntity.java    |   45 +
 .../com/cloud/api/view/vo/DomainRouterJoinVO.java  |  928 +++++++++
 api/src/com/cloud/api/view/vo/UserVmJoinVO.java    | 1623 +++++++++++++++
 api/src/com/cloud/server/ManagementService.java    |    3 +-
 api/src/com/cloud/vm/UserVmService.java            |    3 +-
 .../apache/cloudstack/api/ResponseGenerator.java   |    8 +
 .../org/apache/cloudstack/api/ResponseObject.java  |   17 +
 .../api/admin/router/command/ListRoutersCmd.java   |   19 +-
 .../cloudstack/api/user/vm/command/ListVMsCmd.java |   12 +-
 .../api/commands/test/ListRoutersCmdTest.java      |  170 ++
 .../cloud/api/commands/test/ListVmsCmdTest.java    |  173 ++
 server/src/com/cloud/api/ApiDBUtils.java           |   50 +-
 server/src/com/cloud/api/ApiResponseHelper.java    |  580 +-----
 server/src/com/cloud/api/ApiServer.java            |    4 +-
 .../cloud/api/response/ApiResponseSerializer.java  |    5 +-
 .../configuration/DefaultComponentLibrary.java     |    5 +
 .../src/com/cloud/server/ManagementServerImpl.java |   54 +-
 server/src/com/cloud/user/AccountManager.java      |    7 +
 server/src/com/cloud/user/AccountManagerImpl.java  |   52 +-
 server/src/com/cloud/vm/UserVmManager.java         |    3 +-
 server/src/com/cloud/vm/UserVmManagerImpl.java     |  136 +-
 .../src/com/cloud/vm/dao/DomainRouterJoinDao.java  |   36 +
 .../com/cloud/vm/dao/DomainRouterJoinDaoImpl.java  |  231 ++
 server/src/com/cloud/vm/dao/UserVmJoinDao.java     |   38 +
 server/src/com/cloud/vm/dao/UserVmJoinDaoImpl.java |  384 ++++
 server/test/com/cloud/keystore/KeystoreTest.java   |    2 +-
 .../com/cloud/user/MockAccountManagerImpl.java     |   13 +
 .../test/com/cloud/vm/MockUserVmManagerImpl.java   |    5 +-
 setup/db/create-schema.sql                         |  215 ++
 utils/src/com/cloud/utils/db/GenericDaoBase.java   |   13 +-
 35 files changed, 4394 insertions(+), 751 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/b0ce8fd4/api/src/com/cloud/api/response/BaseResponse.java
----------------------------------------------------------------------
diff --git a/api/src/com/cloud/api/response/BaseResponse.java b/api/src/com/cloud/api/response/BaseResponse.java
index 14aa2b9..dbe8420 100755
--- a/api/src/com/cloud/api/response/BaseResponse.java
+++ b/api/src/com/cloud/api/response/BaseResponse.java
@@ -46,17 +46,26 @@ public abstract class BaseResponse implements ResponseObject {
         this.objectName = objectName;
     }
 
+    //TODO: TO be replaced by getObjectUuid() after all response refactoring
     public Long getObjectId() {
         return null;
     }
 
+    public String getObjectUuid(){
+        return null;
+    }
+
     // For use by list commands with pending async jobs
-    @SerializedName(ApiConstants.JOB_ID) @Param(description="the ID of the latest async job acting on this object")
+    //TODO: To be replaced by jobUuid after all response refactoring
     protected IdentityProxy jobId = new IdentityProxy("async_job");
 
+    @SerializedName(ApiConstants.JOB_ID) @Param(description="the UUID of the latest async job acting on this object")
+    protected String jobUuid;
+
     @SerializedName(ApiConstants.JOB_STATUS) @Param(description="the current status of the latest async job acting on this object")
     private Integer jobStatus;
 
+    //TODO: TO be replaced by getter and setters for jobUuid.
     public Long getJobId() {
         return jobId.getValue();
     }
@@ -65,6 +74,14 @@ public abstract class BaseResponse implements ResponseObject {
         this.jobId.setValue(jobId);
     }
 
+    public String getJobUuid() {
+        return jobUuid;
+    }
+
+    public void setJobUuid(String jobUuid) {
+        this.jobUuid = jobUuid;
+    }
+
     public Integer getJobStatus() {
         return jobStatus;
     }

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/b0ce8fd4/api/src/com/cloud/api/response/ControlledViewEntityResponse.java
----------------------------------------------------------------------
diff --git a/api/src/com/cloud/api/response/ControlledViewEntityResponse.java b/api/src/com/cloud/api/response/ControlledViewEntityResponse.java
new file mode 100644
index 0000000..471a8d1
--- /dev/null
+++ b/api/src/com/cloud/api/response/ControlledViewEntityResponse.java
@@ -0,0 +1,31 @@
+// 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.api.response;
+
+public interface ControlledViewEntityResponse {
+
+    public void setAccountName(String accountName);
+
+    public void setProjectId(String projectId);
+
+    public void setProjectName(String projectName);
+
+    public void setDomainId(String domainId);
+
+    public void setDomainName(String domainName);
+}
+

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/b0ce8fd4/api/src/com/cloud/api/response/DomainRouterResponse.java
----------------------------------------------------------------------
diff --git a/api/src/com/cloud/api/response/DomainRouterResponse.java b/api/src/com/cloud/api/response/DomainRouterResponse.java
index 8170b2e..6db46fa 100644
--- a/api/src/com/cloud/api/response/DomainRouterResponse.java
+++ b/api/src/com/cloud/api/response/DomainRouterResponse.java
@@ -18,6 +18,9 @@ package com.cloud.api.response;
 
 import java.util.Date;
 import java.util.List;
+import java.util.HashSet;
+import java.util.Set;
+
 
 import org.apache.cloudstack.api.ApiConstants;
 import com.cloud.serializer.Param;
@@ -26,12 +29,12 @@ import com.cloud.vm.VirtualMachine.State;
 import com.google.gson.annotations.SerializedName;
 
 @SuppressWarnings("unused")
-public class DomainRouterResponse extends BaseResponse implements ControlledEntityResponse{
+public class DomainRouterResponse extends BaseResponse implements ControlledViewEntityResponse{
     @SerializedName(ApiConstants.ID) @Param(description="the id of the router")
-    private IdentityProxy id = new IdentityProxy("vm_instance");
+    private String id;
 
     @SerializedName(ApiConstants.ZONE_ID) @Param(description="the Zone ID for the router")
-    private IdentityProxy zoneId = new IdentityProxy("data_center");
+    private String zoneId;
 
     @SerializedName(ApiConstants.ZONE_NAME) @Param(description="the Zone name for the router")
     private String zoneName;
@@ -52,10 +55,10 @@ public class DomainRouterResponse extends BaseResponse implements ControlledEnti
     private String name;
 
     @SerializedName(ApiConstants.POD_ID) @Param(description="the Pod ID for the router")
-    private IdentityProxy podId = new IdentityProxy("host_pod_ref");
+    private String podId;
 
     @SerializedName(ApiConstants.HOST_ID) @Param(description="the host ID for the router")
-    private IdentityProxy hostId = new IdentityProxy("host");
+    private String hostId;
 
     @SerializedName("hostname") @Param(description="the hostname for the router")
     private String hostName;
@@ -70,7 +73,7 @@ public class DomainRouterResponse extends BaseResponse implements ControlledEnti
     private String linkLocalNetmask;
 
     @SerializedName(ApiConstants.LINK_LOCAL_NETWORK_ID) @Param(description="the ID of the corresponding link local network")
-    private IdentityProxy linkLocalNetworkId = new IdentityProxy("networks");
+    private String linkLocalNetworkId;
 
     @SerializedName(ApiConstants.PUBLIC_IP) @Param(description="the public IP address for the router")
     private String publicIp;
@@ -82,7 +85,7 @@ public class DomainRouterResponse extends BaseResponse implements ControlledEnti
     private String publicNetmask;
 
     @SerializedName("publicnetworkid") @Param(description="the ID of the corresponding public network")
-    private IdentityProxy publicNetworkId = new IdentityProxy("networks");
+    private String publicNetworkId;
 
     @SerializedName("guestipaddress") @Param(description="the guest IP address for the router")
     private String guestIpAddress;
@@ -94,10 +97,10 @@ public class DomainRouterResponse extends BaseResponse implements ControlledEnti
     private String guestNetmask;
 
     @SerializedName("guestnetworkid") @Param(description="the ID of the corresponding guest network")
-    private IdentityProxy guestNetworkId = new IdentityProxy("networks");
+    private String guestNetworkId;
 
     @SerializedName(ApiConstants.TEMPLATE_ID) @Param(description="the template ID for the router")
-    private IdentityProxy templateId = new IdentityProxy("vm_template");
+    private String templateId;
 
     @SerializedName(ApiConstants.CREATED) @Param(description="the date and time the router was created")
     private Date created;
@@ -109,19 +112,19 @@ public class DomainRouterResponse extends BaseResponse implements ControlledEnti
     private String accountName;
 
     @SerializedName(ApiConstants.PROJECT_ID) @Param(description="the project id of the ipaddress")
-    private IdentityProxy projectId = new IdentityProxy("projects");
+    private String projectId;
 
     @SerializedName(ApiConstants.PROJECT) @Param(description="the project name of the address")
     private String projectName;
 
     @SerializedName(ApiConstants.DOMAIN_ID) @Param(description="the domain ID associated with the router")
-    private IdentityProxy domainId = new IdentityProxy("domain");
+    private String domainId;
 
     @SerializedName(ApiConstants.DOMAIN) @Param(description="the domain associated with the router")
     private String domainName;
 
     @SerializedName(ApiConstants.SERVICE_OFFERING_ID) @Param(description="the ID of the service offering of the virtual machine")
-    private IdentityProxy serviceOfferingId = new IdentityProxy("disk_offering");
+    private String serviceOfferingId;
 
     @SerializedName("serviceofferingname") @Param(description="the name of the service offering of the virtual machine")
     private String serviceOfferingName;
@@ -139,27 +142,31 @@ public class DomainRouterResponse extends BaseResponse implements ControlledEnti
     private String scriptsVersion;
 
     @SerializedName(ApiConstants.VPC_ID) @Param(description="VPC the network belongs to")
-    private IdentityProxy vpcId = new IdentityProxy("vpc");
+    private String vpcId;
 
     @SerializedName("nic")  @Param(description="the list of nics associated with the router",
             responseObject = NicResponse.class, since="4.0")
-    private List<NicResponse> nics;
+    private Set<NicResponse> nics;
+
+    public DomainRouterResponse(){
+        nics = new HashSet<NicResponse>();
+    }
 
     @Override
-    public Long getObjectId() {
-        return getId();
+    public String getObjectUuid() {
+        return this.getId();
     }
 
-    public Long getId() {
-        return id.getValue();
+    public String getId() {
+        return id;
     }
 
-    public void setId(Long id) {
-        this.id.setValue(id);
+    public void setId(String id) {
+        this.id = id;
     }
 
-    public void setZoneId(Long zoneId) {
-        this.zoneId.setValue(zoneId);
+    public void setZoneId(String zoneId) {
+        this.zoneId = zoneId;
     }
 
     public void setZoneName(String zoneName) {
@@ -186,12 +193,12 @@ public class DomainRouterResponse extends BaseResponse implements ControlledEnti
         this.name = name;
     }
 
-    public void setPodId(Long podId) {
-        this.podId.setValue(podId);
+    public void setPodId(String podId) {
+        this.podId = podId;
     }
 
-    public void setHostId(Long hostId) {
-        this.hostId.setValue(hostId);
+    public void setHostId(String hostId) {
+        this.hostId = hostId;
     }
 
     public void setHostName(String hostName) {
@@ -222,8 +229,8 @@ public class DomainRouterResponse extends BaseResponse implements ControlledEnti
         this.guestNetmask = guestNetmask;
     }
 
-    public void setTemplateId(Long templateId) {
-        this.templateId.setValue(templateId);
+    public void setTemplateId(String templateId) {
+        this.templateId = templateId;
     }
 
     public void setCreated(Date created) {
@@ -240,8 +247,8 @@ public class DomainRouterResponse extends BaseResponse implements ControlledEnti
     }
 
     @Override
-    public void setDomainId(Long domainId) {
-        this.domainId.setValue(domainId);
+    public void setDomainId(String domainId) {
+        this.domainId = domainId;
     }
 
     @Override
@@ -249,12 +256,12 @@ public class DomainRouterResponse extends BaseResponse implements ControlledEnti
         this.domainName = domainName;
     }
 
-    public void setPublicNetworkId(Long publicNetworkId) {
-        this.publicNetworkId.setValue(publicNetworkId);
+    public void setPublicNetworkId(String publicNetworkId) {
+        this.publicNetworkId = publicNetworkId;
     }
 
-    public void setGuestNetworkId(Long guestNetworkId) {
-        this.guestNetworkId.setValue(guestNetworkId);
+    public void setGuestNetworkId(String guestNetworkId) {
+        this.guestNetworkId = guestNetworkId;
     }
 
     public void setLinkLocalIp(String linkLocalIp) {
@@ -269,12 +276,12 @@ public class DomainRouterResponse extends BaseResponse implements ControlledEnti
         this.linkLocalNetmask = linkLocalNetmask;
     }
 
-    public void setLinkLocalNetworkId(Long linkLocalNetworkId) {
-        this.linkLocalNetworkId.setValue(linkLocalNetworkId);
+    public void setLinkLocalNetworkId(String linkLocalNetworkId) {
+        this.linkLocalNetworkId = linkLocalNetworkId;
     }
 
-    public void setServiceOfferingId(Long serviceOfferingId) {
-        this.serviceOfferingId.setValue(serviceOfferingId);
+    public void setServiceOfferingId(String serviceOfferingId) {
+        this.serviceOfferingId = serviceOfferingId;
     }
 
     public void setServiceOfferingName(String serviceOfferingName) {
@@ -305,8 +312,8 @@ public class DomainRouterResponse extends BaseResponse implements ControlledEnti
         this.scriptsVersion = scriptsVersion;
     }
     @Override
-    public void setProjectId(Long projectId) {
-        this.projectId.setValue(projectId);
+    public void setProjectId(String projectId) {
+        this.projectId = projectId;
     }
 
     @Override
@@ -314,11 +321,15 @@ public class DomainRouterResponse extends BaseResponse implements ControlledEnti
         this.projectName = projectName;
     }
 
-    public void setVpcId(Long vpcId) {
-        this.vpcId.setValue(vpcId);
+    public void setVpcId(String vpcId) {
+        this.vpcId = vpcId;
     }
 
-    public void setNics(List<NicResponse> nics) {
+    public void setNics(Set<NicResponse> nics) {
         this.nics = nics;
     }
+
+    public void addNic(NicResponse nic) {
+        this.nics.add(nic);
+    }
 }

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/b0ce8fd4/api/src/com/cloud/api/response/NicResponse.java
----------------------------------------------------------------------
diff --git a/api/src/com/cloud/api/response/NicResponse.java b/api/src/com/cloud/api/response/NicResponse.java
index e27a8cf..7001e12 100755
--- a/api/src/com/cloud/api/response/NicResponse.java
+++ b/api/src/com/cloud/api/response/NicResponse.java
@@ -17,7 +17,6 @@
 package com.cloud.api.response;
 
 import org.apache.cloudstack.api.ApiConstants;
-import com.cloud.utils.IdentityProxy;
 import com.cloud.serializer.Param;
 import com.google.gson.annotations.SerializedName;
 
@@ -25,10 +24,10 @@ import com.google.gson.annotations.SerializedName;
 public class NicResponse extends BaseResponse {
 
     @SerializedName("id") @Param(description="the ID of the nic")
-    private final IdentityProxy id = new IdentityProxy("nics");
+    private String id;
 
     @SerializedName("networkid") @Param(description="the ID of the corresponding network")
-    private final IdentityProxy networkId = new IdentityProxy("networks");
+    private String networkId;
 
     @SerializedName("networkname") @Param(description="the name of the corresponding network")
     private String  networkName ;
@@ -60,16 +59,21 @@ public class NicResponse extends BaseResponse {
     @SerializedName("macaddress") @Param(description="true if nic is default, false otherwise")
     private String macAddress;
 
-    public Long getId() {
-        return id.getValue();
+    public String getId() {
+        return id;
     }
 
-    public void setId(Long id) {
-        this.id.setValue(id);
+    public void setId(String id) {
+        this.id = id;
     }
 
-    public void setNetworkid(Long networkid) {
-        this.networkId.setValue(networkid);
+    @Override
+    public String getObjectUuid() {
+        return this.getId();
+    }
+
+    public void setNetworkid(String networkid) {
+        this.networkId = networkid;
     }
 
     public void setNetworkName(String networkname) {
@@ -116,7 +120,8 @@ public class NicResponse extends BaseResponse {
     public int hashCode() {
         final int prime = 31;
         int result = 1;
-        result = prime * result + ((id == null) ? 0 : id.hashCode());
+        String oid = this.getId();
+        result = prime * result + ((oid== null) ? 0 : oid.hashCode());
         return result;
     }
 
@@ -129,10 +134,11 @@ public class NicResponse extends BaseResponse {
         if (getClass() != obj.getClass())
             return false;
         NicResponse other = (NicResponse) obj;
-        if (id == null) {
-            if (other.id != null)
+        String oid = this.getId();
+        if (oid == null) {
+            if (other.getId() != null)
                 return false;
-        } else if (!id.equals(other.id))
+        } else if (!oid.equals(other.getId()))
             return false;
         return true;
     }

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/b0ce8fd4/api/src/com/cloud/api/response/UserVmResponse.java
----------------------------------------------------------------------
diff --git a/api/src/com/cloud/api/response/UserVmResponse.java b/api/src/com/cloud/api/response/UserVmResponse.java
index e7665b5..572d4ed 100755
--- a/api/src/com/cloud/api/response/UserVmResponse.java
+++ b/api/src/com/cloud/api/response/UserVmResponse.java
@@ -17,20 +17,21 @@
 package com.cloud.api.response;
 
 import java.util.Date;
+import java.util.HashSet;
 import java.util.List;
+import java.util.Set;
 
 import org.apache.cloudstack.api.ApiConstants;
 import org.apache.cloudstack.api.Entity;
 import com.cloud.vm.VirtualMachine;
 import com.cloud.serializer.Param;
-import com.cloud.utils.IdentityProxy;
 import com.google.gson.annotations.SerializedName;
 
 @SuppressWarnings("unused")
 @Entity(value = VirtualMachine.class)
 public class UserVmResponse extends BaseResponse implements ControlledEntityResponse {
     @SerializedName(ApiConstants.ID) @Param(description="the ID of the virtual machine")
-    private IdentityProxy id = new IdentityProxy("vm_instance");
+    private String id;
 
     @SerializedName(ApiConstants.NAME) @Param(description="the name of the virtual machine")
     private String name;
@@ -42,13 +43,13 @@ public class UserVmResponse extends BaseResponse implements ControlledEntityResp
     private String accountName;
 
     @SerializedName(ApiConstants.PROJECT_ID) @Param(description="the project id of the vm")
-    private IdentityProxy projectId = new IdentityProxy("projects");
+    private String projectId;
 
     @SerializedName(ApiConstants.PROJECT) @Param(description="the project name of the vm")
     private String projectName;
 
     @SerializedName(ApiConstants.DOMAIN_ID) @Param(description="the ID of the domain in which the virtual machine exists")
-    private IdentityProxy domainId = new IdentityProxy("domain");
+    private String domainId;
 
     @SerializedName(ApiConstants.DOMAIN) @Param(description="the name of the domain in which the virtual machine exists")
     private String domainName;
@@ -63,25 +64,25 @@ public class UserVmResponse extends BaseResponse implements ControlledEntityResp
     private Boolean haEnable;
 
     @SerializedName(ApiConstants.GROUP_ID) @Param(description="the group ID of the virtual machine")
-    private IdentityProxy groupId = new IdentityProxy("instance_group");
+    private String groupId;
 
     @SerializedName(ApiConstants.GROUP) @Param(description="the group name of the virtual machine")
     private String group;
 
     @SerializedName(ApiConstants.ZONE_ID) @Param(description="the ID of the availablility zone for the virtual machine")
-    private IdentityProxy zoneId = new IdentityProxy("data_center");
+    private String zoneId;
 
     @SerializedName(ApiConstants.ZONE_NAME) @Param(description="the name of the availability zone for the virtual machine")
     private String zoneName;
 
     @SerializedName(ApiConstants.HOST_ID) @Param(description="the ID of the host for the virtual machine")
-    private IdentityProxy hostId = new IdentityProxy("host");
+    private String hostId;
 
     @SerializedName("hostname") @Param(description="the name of the host for the virtual machine")
     private String hostName;
 
     @SerializedName(ApiConstants.TEMPLATE_ID) @Param(description="the ID of the template for the virtual machine. A -1 is returned if the virtual machine was created from an ISO file.")
-    private IdentityProxy templateId = new IdentityProxy("vm_template");
+    private String templateId;
 
     @SerializedName("templatename") @Param(description="the name of the template for the virtual machine")
     private String templateName;
@@ -93,7 +94,7 @@ public class UserVmResponse extends BaseResponse implements ControlledEntityResp
     private Boolean passwordEnabled;
 
     @SerializedName("isoid") @Param(description="the ID of the ISO attached to the virtual machine")
-    private IdentityProxy isoId = new IdentityProxy("vm_template");
+    private String isoId;
 
     @SerializedName("isoname") @Param(description="the name of the ISO attached to the virtual machine")
     private String isoName;
@@ -102,7 +103,7 @@ public class UserVmResponse extends BaseResponse implements ControlledEntityResp
     private String isoDisplayText;
 
     @SerializedName(ApiConstants.SERVICE_OFFERING_ID) @Param(description="the ID of the service offering of the virtual machine")
-    private IdentityProxy serviceOfferingId = new IdentityProxy("disk_offering");
+    private String serviceOfferingId;
 
     @SerializedName("serviceofferingname") @Param(description="the name of the service offering of the virtual machine")
     private String serviceOfferingName;
@@ -129,7 +130,7 @@ public class UserVmResponse extends BaseResponse implements ControlledEntityResp
     private Long networkKbsWrite;
 
     @SerializedName("guestosid") @Param(description="Os type ID of the virtual machine")
-    private IdentityProxy guestOsId = new IdentityProxy("guest_os");
+    private String guestOsId;
 
     @SerializedName("rootdeviceid") @Param(description="device ID of the root volume")
     private Long rootDeviceId;
@@ -138,19 +139,19 @@ public class UserVmResponse extends BaseResponse implements ControlledEntityResp
     private String rootDeviceType;
 
     @SerializedName("securitygroup") @Param(description="list of security groups associated with the virtual machine", responseObject = SecurityGroupResponse.class)
-    private List<SecurityGroupResponse> securityGroupList;
+    private Set<SecurityGroupResponse> securityGroupList;
 
     @SerializedName(ApiConstants.PASSWORD) @Param(description="the password (if exists) of the virtual machine")
     private String password;
 
     @SerializedName("nic")  @Param(description="the list of nics associated with vm", responseObject = NicResponse.class)
-    private List<NicResponse> nics;
+    private Set<NicResponse> nics;
 
     @SerializedName("hypervisor") @Param(description="the hypervisor on which the template runs")
     private String hypervisor;
 
     @SerializedName(ApiConstants.PUBLIC_IP_ID) @Param(description="public IP address id associated with vm via Static nat rule")
-    private IdentityProxy publicIpId = new IdentityProxy("user_ip_address");
+    private String publicIpId;
 
     @SerializedName(ApiConstants.PUBLIC_IP) @Param(description="public IP address id associated with vm via Static nat rule")
     private String publicIp;
@@ -159,21 +160,32 @@ public class UserVmResponse extends BaseResponse implements ControlledEntityResp
     private String instanceName;
 
     @SerializedName(ApiConstants.TAGS)  @Param(description="the list of resource tags associated with vm", responseObject = ResourceTagResponse.class)
-    private List<ResourceTagResponse> tags;
+    private Set<ResourceTagResponse> tags;
 
     @SerializedName(ApiConstants.SSH_KEYPAIR) @Param(description="ssh key-pair")
     private String keyPairName;
 
+    public UserVmResponse(){
+        securityGroupList = new HashSet<SecurityGroupResponse>();
+        nics = new HashSet<NicResponse>();
+        tags = new HashSet<ResourceTagResponse>();
+    }
+
     public void setHypervisor(String hypervisor) {
         this.hypervisor = hypervisor;
     }
 
-    public void setId(Long id) {
-        this.id.setValue(id);
+    public void setId(String id) {
+        this.id = id;
     }
 
-    public Long getId() {
-        return this.id.getValue();
+    public String getId() {
+        return this.id;
+    }
+
+    @Override
+    public String getObjectUuid() {
+        return this.getId();
     }
 
     public void setName(String name) {
@@ -188,8 +200,8 @@ public class UserVmResponse extends BaseResponse implements ControlledEntityResp
         this.accountName = accountName;
     }
 
-    public void setDomainId(Long domainId) {
-        this.domainId.setValue(domainId);
+    public void setDomainId(String domainId) {
+        this.domainId = domainId;
     }
 
     public void setDomainName(String domainName) {
@@ -208,32 +220,32 @@ public class UserVmResponse extends BaseResponse implements ControlledEntityResp
         this.haEnable = haEnable;
     }
 
-    public void setGroupId(Long groupId) {
-        this.groupId.setValue(groupId);
+    public void setGroupId(String groupId) {
+        this.groupId = groupId;
     }
 
     public void setGroup(String group) {
         this.group = group;
     }
 
-    public void setZoneId(Long zoneId) {
-        this.zoneId.setValue(zoneId);
+    public void setZoneId(String zoneId) {
+        this.zoneId = zoneId;
     }
 
     public void setZoneName(String zoneName) {
         this.zoneName = zoneName;
     }
 
-    public void setHostId(Long hostId) {
-        this.hostId.setValue(hostId);
+    public void setHostId(String hostId) {
+        this.hostId = hostId;
     }
 
     public void setHostName(String hostName) {
         this.hostName = hostName;
     }
 
-    public void setTemplateId(Long templateId) {
-        this.templateId.setValue(templateId);
+    public void setTemplateId(String templateId) {
+        this.templateId = templateId;
     }
 
     public void setTemplateName(String templateName) {
@@ -248,8 +260,8 @@ public class UserVmResponse extends BaseResponse implements ControlledEntityResp
         this.passwordEnabled = passwordEnabled;
     }
 
-    public void setIsoId(Long isoId) {
-        this.isoId.setValue(isoId);
+    public void setIsoId(String isoId) {
+        this.isoId = isoId;
     }
 
     public void setIsoName(String isoName) {
@@ -260,8 +272,8 @@ public class UserVmResponse extends BaseResponse implements ControlledEntityResp
         this.isoDisplayText = isoDisplayText;
     }
 
-    public void setServiceOfferingId(Long serviceOfferingId) {
-        this.serviceOfferingId.setValue(serviceOfferingId);
+    public void setServiceOfferingId(String serviceOfferingId) {
+        this.serviceOfferingId = serviceOfferingId;
     }
 
     public void setServiceOfferingName(String serviceOfferingName) {
@@ -292,8 +304,8 @@ public class UserVmResponse extends BaseResponse implements ControlledEntityResp
         this.networkKbsWrite = networkKbsWrite;
     }
 
-    public void setGuestOsId(Long guestOsId) {
-        this.guestOsId.setValue(guestOsId);
+    public void setGuestOsId(String guestOsId) {
+        this.guestOsId = guestOsId;
     }
 
     public void setRootDeviceId(Long rootDeviceId) {
@@ -308,30 +320,24 @@ public class UserVmResponse extends BaseResponse implements ControlledEntityResp
         this.password = password;
     }
 
-/*
-    public void setJobId(Long jobId) {
-        super.setJobId(jobId);
-    }
-
-    public void setJobStatus(Integer jobStatus) {
-        this.jobStatus = jobStatus;
-    }
-*/
     public void setForVirtualNetwork(Boolean forVirtualNetwork) {
         this.forVirtualNetwork = forVirtualNetwork;
     }
 
-    public void setNics(List<NicResponse> nics) {
+    public void setNics(Set<NicResponse> nics) {
         this.nics = nics;
     }
 
-    public void setSecurityGroupList(List<SecurityGroupResponse> securityGroups) {
+    public void addNic(NicResponse nic) {
+        this.nics.add(nic);
+    }
+
+    public void setSecurityGroupList(Set<SecurityGroupResponse> securityGroups) {
         this.securityGroupList = securityGroups;
     }
 
-    @Override
-    public void setProjectId(Long projectId) {
-        this.projectId.setValue(projectId);
+    public void setProjectId(String projectId) {
+        this.projectId = projectId;
     }
 
     @Override
@@ -339,8 +345,8 @@ public class UserVmResponse extends BaseResponse implements ControlledEntityResp
         this.projectName = projectName;
     }
 
-    public void setPublicIpId(Long publicIpId) {
-        this.publicIpId.setValue(publicIpId);
+    public void setPublicIpId(String publicIpId) {
+        this.publicIpId = publicIpId;
     }
 
     public void setPublicIp(String publicIp) {
@@ -351,11 +357,33 @@ public class UserVmResponse extends BaseResponse implements ControlledEntityResp
         this.instanceName = instanceName;
     }
 
-    public void setTags(List<ResourceTagResponse> tags) {
+    public void setTags(Set<ResourceTagResponse> tags) {
         this.tags = tags;
     }
 
+    public void addTag(ResourceTagResponse tag){
+        this.tags.add(tag);
+    }
+
     public void setKeyPairName(String keyPairName) {
         this.keyPairName = keyPairName;
     }
+
+    @Override
+    public void setProjectId(Long projectId) {
+        // TODO: remove this later
+    }
+
+    @Override
+    public void setDomainId(Long domainId) {
+        // TODO: remove this later
+    }
+
+    public void setProjectUuid(String projectUuid){
+        this.projectId = projectUuid;
+    }
+
+    public void setDomainUuid(String domainUuid){
+        this.domainId = domainUuid;
+    }
 }

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/b0ce8fd4/api/src/com/cloud/api/view/vo/ControlledViewEntity.java
----------------------------------------------------------------------
diff --git a/api/src/com/cloud/api/view/vo/ControlledViewEntity.java b/api/src/com/cloud/api/view/vo/ControlledViewEntity.java
new file mode 100644
index 0000000..163e001
--- /dev/null
+++ b/api/src/com/cloud/api/view/vo/ControlledViewEntity.java
@@ -0,0 +1,45 @@
+// 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.api.view.vo;
+
+import com.cloud.acl.ControlledEntity;
+
+/**
+ * This is the interface for all VO classes representing DB views created for previous ControlledEntity.
+ *
+ * @author minc
+ *
+ */
+public interface ControlledViewEntity extends ControlledEntity {
+
+    public String getDomainPath();
+
+    public short getAccountType();
+
+    public String getAccountUuid();
+
+    public String getAccountName();
+
+    public String getDomainUuid();
+
+    public String getDomainName();
+
+    public String getProjectUuid();
+
+    public String getProjectName();
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/b0ce8fd4/api/src/com/cloud/api/view/vo/DomainRouterJoinVO.java
----------------------------------------------------------------------
diff --git a/api/src/com/cloud/api/view/vo/DomainRouterJoinVO.java b/api/src/com/cloud/api/view/vo/DomainRouterJoinVO.java
new file mode 100644
index 0000000..58e69bf
--- /dev/null
+++ b/api/src/com/cloud/api/view/vo/DomainRouterJoinVO.java
@@ -0,0 +1,928 @@
+// 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.api.view.vo;
+
+import java.net.URI;
+import java.util.Date;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.EnumType;
+import javax.persistence.Enumerated;
+import javax.persistence.Table;
+
+import com.cloud.network.Network.GuestType;
+import com.cloud.network.Networks.TrafficType;
+import com.cloud.network.router.VirtualRouter.RedundantState;
+import com.cloud.utils.db.GenericDao;
+import com.cloud.vm.VirtualMachine.State;
+
+@Entity
+@Table(name="domain_router_view")
+public class DomainRouterJoinVO implements ControlledViewEntity {
+
+    @Column(name="id", updatable=false, nullable = false)
+ private long id;
+
+    @Column(name="name", updatable=false, nullable=false, length=255)
+ private String name = null;
+
+
+    @Column(name="account_id")
+    private long accountId;
+
+    @Column(name="account_uuid")
+    private String accountUuid;
+
+    @Column(name="account_name")
+    private String accountName = null;
+
+    @Column(name="account_type")
+    private short accountType;
+
+    @Column(name="domain_id")
+    private long domainId;
+
+    @Column(name="domain_uuid")
+    private String domainUuid;
+
+    @Column(name="domain_name")
+    private String domainName = null;
+
+    @Column(name="domain_path")
+    private String domainPath = null;
+
+    /**
+     * Note that state is intentionally missing the setter.  Any updates to
+     * the state machine needs to go through the DAO object because someone
+     * else could be updating it as well.
+     */
+    @Enumerated(value=EnumType.STRING)
+    @Column(name="state", updatable=true, nullable=false, length=32)
+    private State state = null;
+
+    @Column(name=GenericDao.CREATED_COLUMN)
+    private Date created;
+
+    @Column(name=GenericDao.REMOVED_COLUMN)
+    private Date removed;
+
+    @Column(name="instance_name", updatable=true, nullable=false)
+    private String instanceName;
+
+    @Column(name="pod_id", updatable=true, nullable=false)
+    private Long podId;
+
+    @Column(name="pod_uuid")
+    private String podUuid;
+
+    @Column(name="data_center_id")
+    private long dataCenterId;
+
+    @Column(name="data_center_uuid")
+    private String dataCenterUuid;
+
+    @Column(name="data_center_name")
+    private String dataCenterName = null;
+
+    @Column(name="dns1")
+    private String dns1 = null;
+
+    @Column(name="dns2")
+    private String dns2 = null;
+
+
+    @Column(name="host_id", updatable=true, nullable=true)
+    private long hostId;
+
+    @Column(name="host_uuid")
+    private String hostUuid;
+
+    @Column(name="host_name", nullable=false)
+    private String hostName;
+
+    @Column(name="template_id", updatable=true, nullable=true, length=17)
+    private long templateId;
+
+    @Column(name="template_uuid")
+    private String templateUuid;
+
+    @Column(name="service_offering_id")
+    private long serviceOfferingId;
+
+    @Column(name="service_offering_uuid")
+    private String serviceOfferingUuid;
+
+    @Column(name="service_offering_name")
+    private String serviceOfferingName;
+
+
+    @Column(name = "vpc_id")
+    private long vpcId;
+
+    @Column(name = "vpc_uuid")
+    private String vpcUuid;
+
+    @Column(name = "nic_id")
+    private long nicId;
+
+    @Column(name = "nic_uuid")
+    private String nicUuid;
+
+    @Column(name = "is_default_nic")
+    private boolean isDefaultNic;
+
+    @Column(name = "ip_address")
+    private String ipAddress;
+
+    @Column(name = "gateway")
+    private String gateway;
+
+    @Column(name = "netmask")
+    private String netmask;
+
+    @Column(name = "mac_address")
+    private String macAddress;
+
+    @Column(name = "broadcast_uri")
+    private URI broadcastUri;
+
+    @Column(name = "isolation_uri")
+    private URI isolationUri;
+
+    @Column(name="network_id")
+    private long networkId;
+
+    @Column(name="network_uuid")
+    private String networkUuid;
+
+    @Column(name="network_name")
+    private String networkName;
+
+    @Column(name="network_domain")
+    private String networkDomain;
+
+    @Column(name="traffic_type")
+    @Enumerated(value=EnumType.STRING)
+    private TrafficType trafficType;
+
+
+    @Column(name="project_id")
+    private long projectId;
+
+    @Column(name="project_uuid")
+    private String projectUuid;
+
+    @Column(name="project_name")
+    private String projectName;
+
+    @Column(name="job_id")
+    private long jobId;
+
+    @Column(name="job_uuid")
+    private String jobUuid;
+
+    @Column(name="job_status")
+    private int jobStatus;
+
+
+    @Column(name="uuid")
+    private String uuid;
+
+    @Column(name="template_version")
+    private String templateVersion;
+
+    @Column(name="scripts_version")
+    private String scriptsVersion;
+
+    @Column(name="redundant_state")
+    @Enumerated(EnumType.STRING)
+    private RedundantState redundantState;
+
+    @Column(name="is_redundant_router")
+    boolean isRedundantRouter;
+
+    @Column(name="guest_type")
+    @Enumerated(value=EnumType.STRING)
+    private GuestType guestType;
+
+
+    public DomainRouterJoinVO() {
+    }
+
+
+
+
+ public String getUuid() {
+        return uuid;
+    }
+
+
+
+
+    public void setUuid(String uuid) {
+        this.uuid = uuid;
+    }
+
+
+     public long getId() {
+        return id;
+    }
+
+
+    public void setId(long id) {
+        this.id = id;
+    }
+
+
+    public String getName() {
+        return name;
+    }
+
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+
+
+
+    public long getAccountId() {
+        return accountId;
+    }
+
+
+    public void setAccountId(long accountId) {
+        this.accountId = accountId;
+    }
+
+
+    public String getAccountUuid() {
+        return accountUuid;
+    }
+
+
+
+
+    public void setAccountUuid(String accountUuid) {
+        this.accountUuid = accountUuid;
+    }
+
+
+
+
+    public String getAccountName() {
+        return accountName;
+    }
+
+
+    public void setAccountName(String accountName) {
+        this.accountName = accountName;
+    }
+
+
+    public short getAccountType() {
+        return accountType;
+    }
+
+
+    public void setAccountType(short accountType) {
+        this.accountType = accountType;
+    }
+
+
+    public long getDomainId() {
+        return domainId;
+    }
+
+
+    public void setDomainId(long domainId) {
+        this.domainId = domainId;
+    }
+
+    @Override
+    public String getDomainUuid() {
+        return domainUuid;
+    }
+
+
+
+
+    public void setDomainUuid(String domainUuid) {
+        this.domainUuid = domainUuid;
+    }
+
+
+
+
+    public String getDomainName() {
+        return domainName;
+    }
+
+
+    public void setDomainName(String domainName) {
+        this.domainName = domainName;
+    }
+
+    public String getDomainPath() {
+        return domainPath;
+    }
+
+
+    public void setDomainPath(String domainPath) {
+        this.domainPath = domainPath;
+    }
+
+
+    public State getState() {
+        return state;
+    }
+
+
+    public void setState(State state) {
+        this.state = state;
+    }
+
+
+    public Date getCreated() {
+        return created;
+    }
+
+
+    public void setCreated(Date created) {
+        this.created = created;
+    }
+
+
+    public Date getRemoved() {
+        return removed;
+    }
+
+
+    public void setRemoved(Date removed) {
+        this.removed = removed;
+    }
+
+
+    public String getInstanceName() {
+        return instanceName;
+    }
+
+
+    public void setInstanceName(String instanceName) {
+        this.instanceName = instanceName;
+    }
+
+
+    public String getPodUuid() {
+        return podUuid;
+    }
+
+
+
+
+    public void setPodUuid(String podUuid) {
+        this.podUuid = podUuid;
+    }
+
+
+    public String getDataCenterUuid() {
+        return dataCenterUuid;
+    }
+
+    public void setDataCenterUuid(String zoneUuid) {
+        this.dataCenterUuid = zoneUuid;
+    }
+
+    public String getDataCenterName() {
+        return dataCenterName;
+    }
+
+
+    public void setDataCenterName(String zoneName) {
+        this.dataCenterName = zoneName;
+    }
+
+
+    public Long getHostId() {
+        return hostId;
+    }
+
+
+    public void setHostId(long hostId) {
+        this.hostId = hostId;
+    }
+
+
+    public String getHostUuid() {
+        return hostUuid;
+    }
+
+
+
+
+    public void setHostUuid(String hostUuid) {
+        this.hostUuid = hostUuid;
+    }
+
+
+
+
+    public String getHostName() {
+        return hostName;
+    }
+
+
+    public void setHostName(String hostName) {
+        this.hostName = hostName;
+    }
+
+
+    public long getTemplateId() {
+        return templateId;
+    }
+
+
+    public void setTemplateId(long templateId) {
+        this.templateId = templateId;
+    }
+
+
+
+    public String getTemplateUuid() {
+        return templateUuid;
+    }
+
+
+
+
+    public void setTemplateUuid(String templateUuid) {
+        this.templateUuid = templateUuid;
+    }
+
+
+
+
+
+    public String getServiceOfferingUuid() {
+        return serviceOfferingUuid;
+    }
+
+
+    public void setServiceOfferingUuid(String serviceOfferingUuid) {
+        this.serviceOfferingUuid = serviceOfferingUuid;
+    }
+
+
+
+
+    public String getServiceOfferingName() {
+        return serviceOfferingName;
+    }
+
+
+    public void setServiceOfferingName(String serviceOfferingName) {
+        this.serviceOfferingName = serviceOfferingName;
+    }
+
+    public long getVpcId() {
+        return vpcId;
+    }
+
+    public void setVpcId(long vpcId) {
+        this.vpcId = vpcId;
+    }
+
+
+
+
+    public long getNicId() {
+        return nicId;
+    }
+
+
+    public void setNicId(long nicId) {
+        this.nicId = nicId;
+    }
+
+
+    public boolean isDefaultNic() {
+        return isDefaultNic;
+    }
+
+
+    public void setDefaultNic(boolean isDefaultNic) {
+        this.isDefaultNic = isDefaultNic;
+    }
+
+
+    public String getIpAddress() {
+        return ipAddress;
+    }
+
+
+    public void setIpAddress(String ipAddress) {
+        this.ipAddress = ipAddress;
+    }
+
+
+    public String getGateway() {
+        return gateway;
+    }
+
+
+    public void setGateway(String gateway) {
+        this.gateway = gateway;
+    }
+
+
+    public String getNetmask() {
+        return netmask;
+    }
+
+
+    public void setNetmask(String netmask) {
+        this.netmask = netmask;
+    }
+
+
+    public String getMacAddress() {
+        return macAddress;
+    }
+
+
+    public void setMacAddress(String macAddress) {
+        this.macAddress = macAddress;
+    }
+
+
+    public URI getBroadcastUri() {
+        return broadcastUri;
+    }
+
+
+    public void setBroadcastUri(URI broadcastUri) {
+        this.broadcastUri = broadcastUri;
+    }
+
+
+    public URI getIsolationUri() {
+        return isolationUri;
+    }
+
+
+    public void setIsolationUri(URI isolationUri) {
+        this.isolationUri = isolationUri;
+    }
+
+
+    public long getNetworkId() {
+        return networkId;
+    }
+
+
+    public void setNetworkId(long networkId) {
+        this.networkId = networkId;
+    }
+
+
+    public String getNetworkName() {
+        return networkName;
+    }
+
+
+
+
+    public void setNetworkName(String networkName) {
+        this.networkName = networkName;
+    }
+
+
+
+
+    public String getNetworkDomain() {
+        return networkDomain;
+    }
+
+
+
+
+    public void setNetworkDomain(String networkDomain) {
+        this.networkDomain = networkDomain;
+    }
+
+
+
+
+    public TrafficType getTrafficType() {
+        return trafficType;
+    }
+
+
+    public void setTrafficType(TrafficType trafficType) {
+        this.trafficType = trafficType;
+    }
+
+
+
+    public long getServiceOfferingId() {
+        return serviceOfferingId;
+    }
+
+
+
+
+    public void setServiceOfferingId(long serviceOfferingId) {
+        this.serviceOfferingId = serviceOfferingId;
+    }
+
+
+
+
+    public long getProjectId() {
+        return projectId;
+    }
+
+
+
+
+    public void setProjectId(long projectId) {
+        this.projectId = projectId;
+    }
+
+
+
+
+    public String getProjectUuid() {
+        return projectUuid;
+    }
+
+
+
+
+    public void setProjectUuid(String projectUuid) {
+        this.projectUuid = projectUuid;
+    }
+
+
+
+
+    public String getProjectName() {
+        return projectName;
+    }
+
+
+
+
+    public void setProjectName(String projectName) {
+        this.projectName = projectName;
+    }
+
+
+
+
+
+
+    public String getVpcUuid() {
+        return vpcUuid;
+    }
+
+
+
+
+    public void setVpcUuid(String vpcUuid) {
+        this.vpcUuid = vpcUuid;
+    }
+
+
+
+
+    public String getNicUuid() {
+        return nicUuid;
+    }
+
+
+
+
+    public void setNicUuid(String nicUuid) {
+        this.nicUuid = nicUuid;
+    }
+
+
+
+
+    public String getNetworkUuid() {
+        return networkUuid;
+    }
+
+
+
+
+    public void setNetworkUuid(String networkUuid) {
+        this.networkUuid = networkUuid;
+    }
+
+
+    public long getJobId() {
+        return jobId;
+    }
+
+
+
+
+    public void setJobId(long jobId) {
+        this.jobId = jobId;
+    }
+
+
+
+
+    public String getJobUuid() {
+        return jobUuid;
+    }
+
+
+
+
+    public void setJobUuid(String jobUuid) {
+        this.jobUuid = jobUuid;
+    }
+
+
+
+
+    public int getJobStatus() {
+        return jobStatus;
+    }
+
+
+
+
+    public void setJobStatus(int jobStatus) {
+        this.jobStatus = jobStatus;
+    }
+
+
+
+    public Long getPodId() {
+        return podId;
+    }
+
+
+
+
+    public void setPodId(Long podId) {
+        this.podId = podId;
+    }
+
+
+
+
+    public long getDataCenterId() {
+        return dataCenterId;
+    }
+
+
+
+
+    public void setDataCenterId(long zoneId) {
+        this.dataCenterId = zoneId;
+    }
+
+
+
+
+    public String getDns1() {
+        return dns1;
+    }
+
+
+
+
+    public void setDns1(String dns1) {
+        this.dns1 = dns1;
+    }
+
+
+
+
+    public String getDns2() {
+        return dns2;
+    }
+
+
+
+
+    public void setDns2(String dns2) {
+        this.dns2 = dns2;
+    }
+
+
+
+
+    public String getTemplateVersion() {
+        return templateVersion;
+    }
+
+
+
+
+    public void setTemplateVersion(String templateVersion) {
+        this.templateVersion = templateVersion;
+    }
+
+
+
+
+    public String getScriptsVersion() {
+        return scriptsVersion;
+    }
+
+
+
+
+    public void setScriptsVersion(String scriptsVersion) {
+        this.scriptsVersion = scriptsVersion;
+    }
+
+
+
+
+    public RedundantState getRedundantState() {
+        return redundantState;
+    }
+
+
+
+
+    public void setRedundantState(RedundantState redundantState) {
+        this.redundantState = redundantState;
+    }
+
+
+
+
+    public boolean isRedundantRouter() {
+        return isRedundantRouter;
+    }
+
+
+
+
+    public void setRedundantRouter(boolean isRedundantRouter) {
+        this.isRedundantRouter = isRedundantRouter;
+    }
+
+
+
+
+    public GuestType getGuestType() {
+        return guestType;
+    }
+
+
+
+
+    public void setGuestType(GuestType guestType) {
+        this.guestType = guestType;
+    }
+
+
+
+
+    @Override
+    public int hashCode() {
+        final int prime = 31;
+        int result = 1;
+        result = prime * result + (int) (id ^ (id >>> 32));
+        return result;
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (this == obj)
+            return true;
+        if (obj == null)
+            return false;
+        if (getClass() != obj.getClass())
+            return false;
+        DomainRouterJoinVO other = (DomainRouterJoinVO) obj;
+        if (id != other.id)
+            return false;
+        return true;
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/b0ce8fd4/api/src/com/cloud/api/view/vo/UserVmJoinVO.java
----------------------------------------------------------------------
diff --git a/api/src/com/cloud/api/view/vo/UserVmJoinVO.java b/api/src/com/cloud/api/view/vo/UserVmJoinVO.java
new file mode 100644
index 0000000..1aa137b
--- /dev/null
+++ b/api/src/com/cloud/api/view/vo/UserVmJoinVO.java
@@ -0,0 +1,1623 @@
+// 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.api.view.vo;
+
+import java.net.URI;
+import java.util.Date;
+import java.util.Map;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.EnumType;
+import javax.persistence.Enumerated;
+import javax.persistence.Table;
+import javax.persistence.Transient;
+
+import com.cloud.hypervisor.Hypervisor.HypervisorType;
+import com.cloud.network.Network.GuestType;
+import com.cloud.network.Networks.TrafficType;
+import com.cloud.server.ResourceTag.TaggedResourceType;
+import com.cloud.storage.Volume;
+import com.cloud.storage.Storage.StoragePoolType;
+import com.cloud.utils.db.Encrypt;
+import com.cloud.utils.db.GenericDao;
+import com.cloud.vm.VirtualMachine;
+import com.cloud.vm.VirtualMachine.State;
+
+@Entity
+@Table(name="user_vm_view")
+public class UserVmJoinVO implements ControlledViewEntity {
+
+    @Column(name="id", updatable=false, nullable = false)
+    private long id;
+
+    @Column(name="name", updatable=false, nullable=false, length=255)
+    private String name = null;
+
+    @Column(name="display_name", updatable=false, nullable=false, length=255)
+    private String displayName = null;
+
+    @Column(name="account_id")
+    private long accountId;
+
+    @Column(name="account_uuid")
+    private String accountUuid;
+
+    @Column(name="account_name")
+    private String accountName = null;
+
+    @Column(name="account_type")
+    private short accountType;
+
+    @Column(name="domain_id")
+    private long domainId;
+
+    @Column(name="domain_uuid")
+    private String domainUuid;
+
+    @Column(name="domain_name")
+    private String domainName = null;
+
+    @Column(name="domain_path")
+    private String domainPath = null;
+
+    @Column(name="instance_group_id")
+    private long instanceGroupId;
+
+    @Column(name="instance_group_uuid")
+    private String instanceGroupUuid;
+
+    @Column(name="instance_group_name")
+    private String instanceGroupName;
+
+    @Column(name="vm_type", updatable=false, nullable=false, length=32)
+    @Enumerated(value=EnumType.STRING)
+    protected VirtualMachine.Type type;
+
+    /**
+     * Note that state is intentionally missing the setter.  Any updates to
+     * the state machine needs to go through the DAO object because someone
+     * else could be updating it as well.
+     */
+    @Enumerated(value=EnumType.STRING)
+    @Column(name="state", updatable=true, nullable=false, length=32)
+    private State state = null;
+
+    @Column(name=GenericDao.CREATED_COLUMN)
+    private Date created;
+
+    @Column(name=GenericDao.REMOVED_COLUMN)
+    private Date removed;
+
+    @Column(name="instance_name", updatable=true, nullable=false)
+    private String instanceName;
+
+    @Column(name="guest_os_id", nullable=false, length=17)
+    private long guestOsId;
+
+    @Column(name="guest_os_uuid")
+    private String guestOsUuid;
+
+    @Column(name="hypervisor_type")
+    @Enumerated(value=EnumType.STRING)
+    private HypervisorType hypervisorType;
+
+    @Column(name="ha_enabled", updatable=true, nullable=true)
+    private boolean haEnabled;
+
+    @Encrypt
+    @Column(name="vnc_password", updatable=true, nullable=false, length=255)
+    protected String vncPassword;
+
+    @Column(name="limit_cpu_use", updatable=true, nullable=true)
+    private boolean limitCpuUse;
+
+    @Column(name="last_host_id", updatable=true, nullable=true)
+    private Long lastHostId;
+
+    @Column(name="private_ip_address", updatable=true)
+    private String privateIpAddress;
+
+
+    @Column(name="private_mac_address", updatable=true, nullable=true)
+    private String privateMacAddress;
+
+    @Column(name="pod_id", updatable=true, nullable=false)
+    private Long podId;
+
+    @Column(name="pod_uuid")
+    private String podUuid;
+
+    @Column(name="data_center_id")
+    private long dataCenterId;
+
+    @Column(name="data_center_uuid")
+    private String dataCenterUuid;
+
+    @Column(name="data_center_name")
+    private String dataCenterName = null;
+
+    @Column(name="security_group_enabled")
+    private boolean securityGroupEnabled;
+
+    @Column(name="host_id", updatable=true, nullable=true)
+    private long hostId;
+
+    @Column(name="host_uuid")
+    private String hostUuid;
+
+    @Column(name="host_name", nullable=false)
+    private String hostName;
+
+    @Column(name="template_id", updatable=true, nullable=true, length=17)
+    private long templateId;
+
+    @Column(name="template_uuid")
+    private String templateUuid;
+
+    @Column(name="template_name")
+    private String templateName;
+
+    @Column(name="template_display_text", length=4096)
+    private String templateDisplayText;
+
+    @Column(name="password_enabled")
+    private boolean passwordEnabled;
+
+    @Column(name="iso_id", updatable=true, nullable=true, length=17)
+    private long isoId;
+
+    @Column(name="iso_uuid")
+    private String isoUuid;
+
+    @Column(name="iso_name")
+    private String isoName;
+
+    @Column(name="iso_display_text", length=4096)
+    private String isoDisplayText;
+
+    @Column(name="service_offering_id")
+    private long serviceOfferingId;
+
+    @Column(name="service_offering_uuid")
+    private String serviceOfferingUuid;
+
+    @Column(name="service_offering_name")
+    private String serviceOfferingName;
+
+    @Column(name="cpu")
+    private int cpu;
+
+    @Column(name="speed")
+    private int speed;
+
+    @Column(name="ram_size")
+    private int ramSize;
+
+    @Column(name="pool_id", updatable=false, nullable = false)
+    private long poolId;
+
+    @Column(name="pool_uuid")
+    private String poolUuid;
+
+    @Column(name="pool_type", updatable=false, nullable=false, length=32)
+    @Enumerated(value=EnumType.STRING)
+    private StoragePoolType poolType;
+
+    @Column(name = "volume_id")
+    private long volume_id;
+
+    @Column(name = "volume_uuid")
+    private String volume_uuid;
+
+    @Column(name = "volume_device_id")
+    private Long volumeDeviceId = null;
+
+    @Column(name = "volume_type")
+    @Enumerated(EnumType.STRING)
+    private Volume.Type volumeType;
+
+    @Column(name = "security_group_id")
+    private long securityGroupId;
+
+    @Column(name = "security_group_uuid")
+    private String securityGroupUuid;
+
+    @Column(name = "security_group_name")
+    private String securityGroupName;
+
+    @Column(name = "security_group_description")
+    private String securityGroupDescription;
+
+    @Column(name = "vpc_id")
+    private long vpcId;
+
+    @Column(name = "vpc_uuid")
+    private String vpcUuid;
+
+    @Column(name = "nic_id")
+    private long nicId;
+
+    @Column(name = "nic_uuid")
+    private String nicUuid;
+
+    @Column(name = "is_default_nic")
+    private boolean isDefaultNic;
+
+    @Column(name = "ip_address")
+    private String ipAddress;
+
+    @Column(name = "gateway")
+    private String gateway;
+
+    @Column(name = "netmask")
+    private String netmask;
+
+    @Column(name = "mac_address")
+    private String macAddress;
+
+    @Column(name = "broadcast_uri")
+    private URI broadcastUri;
+
+    @Column(name = "isolation_uri")
+    private URI isolationUri;
+
+    @Column(name="network_id")
+    private long networkId;
+
+    @Column(name="network_uuid")
+    private String networkUuid;
+
+    @Column(name="traffic_type")
+    @Enumerated(value=EnumType.STRING)
+    private TrafficType trafficType;
+
+    @Column(name="guest_type")
+    @Enumerated(value=EnumType.STRING)
+    private GuestType guestType;
+
+    @Column(name = "public_ip_id")
+    private long publicIpId;
+
+    @Column(name = "public_ip_uuid")
+    private String publicIpUuid;
+
+    @Column(name = "public_ip_address")
+    private String publicIpAddress;
+
+    @Column(name="user_data", updatable=true, nullable=true, length=2048)
+    private String userData;
+
+    @Column(name="project_id")
+    private long projectId;
+
+    @Column(name="project_uuid")
+    private String projectUuid;
+
+    @Column(name="project_name")
+    private String projectName;
+
+    @Column(name="keypair_name")
+    private String keypairName;
+
+    @Column(name="job_id")
+    private long jobId;
+
+    @Column(name="job_uuid")
+    private String jobUuid;
+
+    @Column(name="job_status")
+    private int jobStatus;
+
+    @Column(name="tag_id")
+    private long tagId;
+
+    @Column(name="tag_uuid")
+    private String tagUuid;
+
+    @Column(name="tag_key")
+    private String tagKey;
+
+    @Column(name="tag_value")
+    private String tagValue;
+
+    @Column(name="tag_domain_id")
+    private long tagDomainId;
+
+    @Column(name="tag_account_id")
+    private long tagAccountId;
+
+    @Column(name="tag_resource_id")
+    private long tagResourceId;
+
+    @Column(name="tag_resource_uuid")
+    private String tagResourceUuid;
+
+    @Column(name="tag_resource_type")
+    @Enumerated(value=EnumType.STRING)
+    private TaggedResourceType tagResourceType;
+
+    @Column(name="tag_customer")
+    private String tagCustomer;
+
+    transient String password;
+
+    @Transient
+    Map<String, String> details;
+
+    @Column(name="uuid")
+    private String uuid;
+
+    public UserVmJoinVO() {
+    }
+
+
+
+
+    public String getUuid() {
+        return uuid;
+    }
+
+
+
+
+    public void setUuid(String uuid) {
+        this.uuid = uuid;
+    }
+
+
+    public String getPassword() {
+        return password;
+    }
+
+    public void setPassword(String password) {
+        this.password = password;
+    }
+
+    public long getId() {
+        return id;
+    }
+
+
+    public void setId(long id) {
+        this.id = id;
+    }
+
+
+    public String getName() {
+        return name;
+    }
+
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+
+    public String getDisplayName() {
+        return displayName;
+    }
+
+
+    public void setDisplayName(String displayName) {
+        this.displayName = displayName;
+    }
+
+
+    public long getAccountId() {
+        return accountId;
+    }
+
+
+    public void setAccountId(long accountId) {
+        this.accountId = accountId;
+    }
+
+
+    public String getAccountUuid() {
+        return accountUuid;
+    }
+
+
+
+
+    public void setAccountUuid(String accountUuid) {
+        this.accountUuid = accountUuid;
+    }
+
+
+
+
+    public String getAccountName() {
+        return accountName;
+    }
+
+
+    public void setAccountName(String accountName) {
+        this.accountName = accountName;
+    }
+
+
+    public short getAccountType() {
+        return accountType;
+    }
+
+
+    public void setAccountType(short accountType) {
+        this.accountType = accountType;
+    }
+
+
+    public long getDomainId() {
+        return domainId;
+    }
+
+
+    public void setDomainId(long domainId) {
+        this.domainId = domainId;
+    }
+
+
+    public String getDomainUuid() {
+        return domainUuid;
+    }
+
+
+
+
+    public void setDomainUuid(String domainUuid) {
+        this.domainUuid = domainUuid;
+    }
+
+
+
+
+    public String getDomainName() {
+        return domainName;
+    }
+
+
+    public void setDomainName(String domainName) {
+        this.domainName = domainName;
+    }
+
+
+    public String getDomainPath() {
+        return domainPath;
+    }
+
+
+    public void setDomainPath(String domainPath) {
+        this.domainPath = domainPath;
+    }
+
+
+
+
+    public long getInstanceGroupId() {
+        return instanceGroupId;
+    }
+
+
+    public void setInstanceGroupId(long instanceGroupId) {
+        this.instanceGroupId = instanceGroupId;
+    }
+
+
+    public String getInstanceGroupUuid() {
+        return instanceGroupUuid;
+    }
+
+
+
+
+    public void setInstanceGroupUuid(String instanceGroupUuid) {
+        this.instanceGroupUuid = instanceGroupUuid;
+    }
+
+
+
+
+    public String getInstanceGroupName() {
+        return instanceGroupName;
+    }
+
+
+    public void setInstanceGroupName(String instanceGroupName) {
+        this.instanceGroupName = instanceGroupName;
+    }
+
+
+    public VirtualMachine.Type getType() {
+        return type;
+    }
+
+
+
+
+    public void setType(VirtualMachine.Type type) {
+        this.type = type;
+    }
+
+
+
+
+    public State getState() {
+        return state;
+    }
+
+
+    public void setState(State state) {
+        this.state = state;
+    }
+
+
+    public Date getCreated() {
+        return created;
+    }
+
+
+    public void setCreated(Date created) {
+        this.created = created;
+    }
+
+
+    public Date getRemoved() {
+        return removed;
+    }
+
+
+    public void setRemoved(Date removed) {
+        this.removed = removed;
+    }
+
+
+    public String getInstanceName() {
+        return instanceName;
+    }
+
+
+    public void setInstanceName(String instanceName) {
+        this.instanceName = instanceName;
+    }
+
+
+    public long getGuestOSId() {
+        return guestOsId;
+    }
+
+
+    public void setGuestOSId(long guestOSId) {
+        this.guestOsId = guestOSId;
+    }
+
+
+    public String getGuestOsUuid() {
+        return guestOsUuid;
+    }
+
+
+
+
+    public void setGuestOsUuid(String guestOsUuid) {
+        this.guestOsUuid = guestOsUuid;
+    }
+
+
+
+
+    public HypervisorType getHypervisorType() {
+        return hypervisorType;
+    }
+
+
+    public void setHypervisorType(HypervisorType hypervisorType) {
+        this.hypervisorType = hypervisorType;
+    }
+
+
+    public boolean isHaEnabled() {
+        return haEnabled;
+    }
+
+
+    public void setHaEnabled(boolean haEnabled) {
+        this.haEnabled = haEnabled;
+    }
+
+    public void setVncPassword(String vncPassword) {
+        this.vncPassword = vncPassword;
+    }
+
+    public String getVncPassword() {
+        return vncPassword;
+    }
+
+
+
+
+    public String getPrivateIpAddress() {
+        return privateIpAddress;
+    }
+
+
+
+
+    public void setPrivateIpAddress(String privateIpAddress) {
+        this.privateIpAddress = privateIpAddress;
+    }
+
+
+
+
+    public String getPrivateMacAddress() {
+        return privateMacAddress;
+    }
+
+
+
+
+    public void setPrivateMacAddress(String privateMacAddress) {
+        this.privateMacAddress = privateMacAddress;
+    }
+
+
+
+
+    public Long getLastHostId() {
+        return lastHostId;
+    }
+
+
+
+
+    public void setLastHostId(Long lastHostId) {
+        this.lastHostId = lastHostId;
+    }
+
+
+
+
+
+
+    public Long getPodId() {
+        return podId;
+    }
+
+
+
+
+    public void setPodId(Long podIdToDeployIn) {
+        this.podId = podIdToDeployIn;
+    }
+
+
+
+
+    public String getPodUuid() {
+        return podUuid;
+    }
+
+
+
+
+    public void setPodUuid(String podUuid) {
+        this.podUuid = podUuid;
+    }
+
+
+
+
+    public long getDataCenterId() {
+        return dataCenterId;
+    }
+
+
+
+
+    public void setDataCenterId(long dataCenterIdToDeployIn) {
+        this.dataCenterId = dataCenterIdToDeployIn;
+    }
+
+
+    public boolean limitCpuUse() {
+        return limitCpuUse;
+    }
+
+    public void setLimitCpuUse(boolean value) {
+        limitCpuUse = value;
+    }
+
+
+    public String getDataCenterUuid() {
+        return dataCenterUuid;
+    }
+
+
+
+
+    public void setDataCenterUuid(String zoneUuid) {
+        this.dataCenterUuid = zoneUuid;
+    }
+
+
+
+
+    public String getDataCenterName() {
+        return dataCenterName;
+    }
+
+
+    public void setDataCenterName(String zoneName) {
+        this.dataCenterName = zoneName;
+    }
+
+
+    public boolean isSecurityGroupEnabled() {
+        return securityGroupEnabled;
+    }
+
+
+    public void setSecurityGroupEnabled(boolean securityGroupEnabled) {
+        this.securityGroupEnabled = securityGroupEnabled;
+    }
+
+
+    public Long getHostId() {
+        return hostId;
+    }
+
+
+    public void setHostId(long hostId) {
+        this.hostId = hostId;
+    }
+
+
+    public String getHostUuid() {
+        return hostUuid;
+    }
+
+
+
+
+    public void setHostUuid(String hostUuid) {
+        this.hostUuid = hostUuid;
+    }
+
+
+
+
+    public String getHostName() {
+        return hostName;
+    }
+
+
+    public void setHostName(String hostName) {
+        this.hostName = hostName;
+    }
+
+
+    public long getTemplateId() {
+        return templateId;
+    }
+
+
+    public void setTemplateId(long templateId) {
+        this.templateId = templateId;
+    }
+
+
+
+    public String getTemplateUuid() {
+        return templateUuid;
+    }
+
+
+
+
+    public void setTemplateUuid(String templateUuid) {
+        this.templateUuid = templateUuid;
+    }
+
+
+
+
+    public String getTemplateName() {
+        return templateName;
+    }
+
+
+    public void setTemplateName(String templateName) {
+        this.templateName = templateName;
+    }
+
+
+    public String getTemplateDisplayText() {
+        return templateDisplayText;
+    }
+
+
+    public void setTemplateDisplayText(String templateDisplayText) {
+        this.templateDisplayText = templateDisplayText;
+    }
+
+
+    public boolean isPasswordEnabled() {
+        return passwordEnabled;
+    }
+
+
+    public void setPasswordEnabled(boolean passwordEnabled) {
+        this.passwordEnabled = passwordEnabled;
+    }
+
+
+    public Long getIsoId() {
+        return isoId;
+    }
+
+
+    public void setIsoId(long isoId) {
+        this.isoId = isoId;
+    }
+
+
+    public String getIsoUuid() {
+        return isoUuid;
+    }
+
+
+
+
+    public void setIsoUuid(String isoUuid) {
+        this.isoUuid = isoUuid;
+    }
+
+
+
+
+    public String getIsoName() {
+        return isoName;
+    }
+
+
+    public void setIsoName(String isoName) {
+        this.isoName = isoName;
+    }
+
+
+    public String getIsoDisplayText() {
+        return isoDisplayText;
+    }
+
+    public void setIsoDisplayText(String isoDisplayText) {
+        this.isoDisplayText = isoDisplayText;
+    }
+
+
+
+
+    public String getServiceOfferingUuid() {
+        return serviceOfferingUuid;
+    }
+
+
+
+
+    public void setServiceOfferingUuid(String serviceOfferingUuid) {
+        this.serviceOfferingUuid = serviceOfferingUuid;
+    }
+
+
+
+
+    public String getServiceOfferingName() {
+        return serviceOfferingName;
+    }
+
+
+    public void setServiceOfferingName(String serviceOfferingName) {
+        this.serviceOfferingName = serviceOfferingName;
+    }
+
+
+    public int getCpu() {
+        return cpu;
+    }
+
+
+    public void setCpu(int cpu) {
+        this.cpu = cpu;
+    }
+
+
+    public int getSpeed() {
+        return speed;
+    }
+
+
+    public void setSpeed(int speed) {
+        this.speed = speed;
+    }
+
+
+    public int getRamSize() {
+        return ramSize;
+    }
+
+
+    public void setRamSize(int ramSize) {
+        this.ramSize = ramSize;
+    }
+
+
+    public long getPoolId() {
+        return poolId;
+    }
+
+
+    public void setPoolId(long poolId) {
+        this.poolId = poolId;
+    }
+
+
+    public StoragePoolType getPoolType() {
+        return poolType;
+    }
+
+
+    public void setPoolType(StoragePoolType poolType) {
+        this.poolType = poolType;
+    }
+
+
+    public long getVolume_id() {
+        return volume_id;
+    }
+
+
+    public void setVolume_id(long volume_id) {
+        this.volume_id = volume_id;
+    }
+
+
+    public Long getVolumeDeviceId() {
+        return volumeDeviceId;
+    }
+
+
+    public void setVolumeDeviceId(Long volumeDeviceId) {
+        this.volumeDeviceId = volumeDeviceId;
+    }
+
+
+    public Volume.Type getVolumeType() {
+        return volumeType;
+    }
+
+
+    public void setVolumeType(Volume.Type volumeType) {
+        this.volumeType = volumeType;
+    }
+
+
+    public long getSecurityGroupId() {
+        return securityGroupId;
+    }
+
+
+    public void setSecurityGroupId(long securityGroupId) {
+        this.securityGroupId = securityGroupId;
+    }
+
+
+    public String getSecurityGroupName() {
+        return securityGroupName;
+    }
+
+
+    public void setSecurityGroupName(String securityGroupName) {
+        this.securityGroupName = securityGroupName;
+    }
+
+
+    public String getSecurityGroupDescription() {
+        return securityGroupDescription;
+    }
+
+
+    public void setSecurityGroupDescription(String securityGroupDescription) {
+        this.securityGroupDescription = securityGroupDescription;
+    }
+
+
+    public long getVpcId() {
+        return vpcId;
+    }
+
+
+
+    public void setVpcId(long vpcId) {
+        this.vpcId = vpcId;
+    }
+
+
+
+
+    public long getNicId() {
+        return nicId;
+    }
+
+
+    public void setNicId(long nicId) {
+        this.nicId = nicId;
+    }
+
+
+    public boolean isDefaultNic() {
+        return isDefaultNic;
+    }
+
+
+    public void setDefaultNic(boolean isDefaultNic) {
+        this.isDefaultNic = isDefaultNic;
+    }
+
+
+    public String getIpAddress() {
+        return ipAddress;
+    }
+
+
+    public void setIpAddress(String ipAddress) {
+        this.ipAddress = ipAddress;
+    }
+
+
+    public String getGateway() {
+        return gateway;
+    }
+
+
+    public void setGateway(String gateway) {
+        this.gateway = gateway;
+    }
+
+
+    public String getNetmask() {
+        return netmask;
+    }
+
+
+    public void setNetmask(String netmask) {
+        this.netmask = netmask;
+    }
+
+
+    public String getMacAddress() {
+        return macAddress;
+    }
+
+
+    public void setMacAddress(String macAddress) {
+        this.macAddress = macAddress;
+    }
+
+
+    public URI getBroadcastUri() {
+        return broadcastUri;
+    }
+
+
+    public void setBroadcastUri(URI broadcastUri) {
+        this.broadcastUri = broadcastUri;
+    }
+
+
+    public URI getIsolationUri() {
+        return isolationUri;
+    }
+
+
+    public void setIsolationUri(URI isolationUri) {
+        this.isolationUri = isolationUri;
+    }
+
+
+    public long getNetworkId() {
+        return networkId;
+    }
+
+
+    public void setNetworkId(long networkId) {
+        this.networkId = networkId;
+    }
+
+
+    public TrafficType getTrafficType() {
+        return trafficType;
+    }
+
+
+    public void setTrafficType(TrafficType trafficType) {
+        this.trafficType = trafficType;
+    }
+
+
+    public GuestType getGuestType() {
+        return guestType;
+    }
+
+
+    public void setGuestType(GuestType guestType) {
+        this.guestType = guestType;
+    }
+
+
+    public long getPublicIpId() {
+        return publicIpId;
+    }
+
+
+
+
+    public void setPublicIpId(long publicIpId) {
+        this.publicIpId = publicIpId;
+    }
+
+
+
+
+    public String getPublicIpAddress() {
+        return publicIpAddress;
+    }
+
+
+    public void setPublicIpAddress(String publicIpAddress) {
+        this.publicIpAddress = publicIpAddress;
+    }
+
+
+
+    public long getServiceOfferingId() {
+        return serviceOfferingId;
+    }
+
+
+
+
+    public void setServiceOfferingId(long serviceOfferingId) {
+        this.serviceOfferingId = serviceOfferingId;
+    }
+
+
+    public Map<String, String> getDetails() {
+        return details;
+    }
+
+    public String getDetail(String name) {
+        assert (details != null) : "Did you forget to load the details?";
+
+        return details != null ? details.get(name) : null;
+    }
+
+    public void setDetail(String name, String value) {
+        assert (details != null) : "Did you forget to load the details?";
+
+        details.put(name, value);
+    }
+
+    public void setDetails(Map<String, String> details) {
+        this.details = details;
+    }
+
+    public void setUserData(String userData) {
+        this.userData = userData;
+    }
+
+    public String getUserData() {
+        return userData;
+    }
+
+
+
+    public long getGuestOsId() {
+        return guestOsId;
+    }
+
+
+
+
+    public void setGuestOsId(long guestOsId) {
+        this.guestOsId = guestOsId;
+    }
+
+
+
+
+    public long getProjectId() {
+        return projectId;
+    }
+
+
+
+
+    public void setProjectId(long projectId) {
+        this.projectId = projectId;
+    }
+
+
+
+
+    public String getProjectUuid() {
+        return projectUuid;
+    }
+
+
+
+
+    public void setProjectUuid(String projectUuid) {
+        this.projectUuid = projectUuid;
+    }
+
+
+
+
+    public String getProjectName() {
+        return projectName;
+    }
+
+
+
+
+    public void setProjectName(String projectName) {
+        this.projectName = projectName;
+    }
+
+
+
+
+    public String getKeypairName() {
+        return keypairName;
+    }
+
+
+
+
+    public void setKeypairName(String keypairName) {
+        this.keypairName = keypairName;
+    }
+
+
+
+
+    public long getTagId() {
+        return tagId;
+    }
+
+
+
+
+    public void setTagId(long tagId) {
+        this.tagId = tagId;
+    }
+
+
+
+
+    public String getTagUuid() {
+        return tagUuid;
+    }
+
+
+
+
+    public void setTagUuid(String tagUuid) {
+        this.tagUuid = tagUuid;
+    }
+
+
+
+
+    public String getTagKey() {
+        return tagKey;
+    }
+
+
+
+
+    public void setTagKey(String tagKey) {
+        this.tagKey = tagKey;
+    }
+
+
+
+
+    public String getTagValue() {
+        return tagValue;
+    }
+
+
+
+
+    public void setTagValue(String tagValue) {
+        this.tagValue = tagValue;
+    }
+
+
+
+
+    public long getTagDomainId() {
+        return tagDomainId;
+    }
+
+
+
+
+    public void setTagDomainId(long tagDomainId) {
+        this.tagDomainId = tagDomainId;
+    }
+
+
+
+
+    public long getTagAccountId() {
+        return tagAccountId;
+    }
+
+
+
+
+    public void setTagAccountId(long tagAccountId) {
+        this.tagAccountId = tagAccountId;
+    }
+
+
+
+
+    public long getTagResourceId() {
+        return tagResourceId;
+    }
+
+
+
+
+    public void setTagResourceId(long tagResourceId) {
+        this.tagResourceId = tagResourceId;
+    }
+
+
+
+
+    public String getTagResourceUuid() {
+        return tagResourceUuid;
+    }
+
+
+
+
+    public void setTagResourceUuid(String tagResourceUuid) {
+        this.tagResourceUuid = tagResourceUuid;
+    }
+
+
+
+
+    public TaggedResourceType getTagResourceType() {
+        return tagResourceType;
+    }
+
+
+
+
+    public void setTagResourceType(TaggedResourceType tagResourceType) {
+        this.tagResourceType = tagResourceType;
+    }
+
+
+
+
+    public String getTagCustomer() {
+        return tagCustomer;
+    }
+
+
+
+
+    public void setTagCustomer(String tagCustomer) {
+        this.tagCustomer = tagCustomer;
+    }
+
+
+
+
+    public boolean isLimitCpuUse() {
+        return limitCpuUse;
+    }
+
+
+
+    public String getPoolUuid() {
+        return poolUuid;
+    }
+
+
+
+
+    public void setPoolUuid(String poolUuid) {
+        this.poolUuid = poolUuid;
+    }
+
+
+
+
+    public String getVolume_uuid() {
+        return volume_uuid;
+    }
+
+
+
+
+    public void setVolume_uuid(String volume_uuid) {
+        this.volume_uuid = volume_uuid;
+    }
+
+
+
+
+    public String getSecurityGroupUuid() {
+        return securityGroupUuid;
+    }
+
+
+
+
+    public void setSecurityGroupUuid(String securityGroupUuid) {
+        this.securityGroupUuid = securityGroupUuid;
+    }
+
+
+
+
+    public String getVpcUuid() {
+        return vpcUuid;
+    }
+
+
+
+
+    public void setVpcUuid(String vpcUuid) {
+        this.vpcUuid = vpcUuid;
+    }
+
+
+
+
+    public String getNicUuid() {
+        return nicUuid;
+    }
+
+
+
+
+    public void setNicUuid(String nicUuid) {
+        this.nicUuid = nicUuid;
+    }
+
+
+
+
+    public String getNetworkUuid() {
+        return networkUuid;
+    }
+
+
+
+
+    public void setNetworkUuid(String networkUuid) {
+        this.networkUuid = networkUuid;
+    }
+
+
+
+
+    public String getPublicIpUuid() {
+        return publicIpUuid;
+    }
+
+
+
+
+    public void setPublicIpUuid(String publicIpUuid) {
+        this.publicIpUuid = publicIpUuid;
+    }
+
+
+
+    public long getJobId() {
+        return jobId;
+    }
+
+
+
+
+    public void setJobId(long jobId) {
+        this.jobId = jobId;
+    }
+
+
+
+
+    public String getJobUuid() {
+        return jobUuid;
+    }
+
+
+
+
+    public void setJobUuid(String jobUuid) {
+        this.jobUuid = jobUuid;
+    }
+
+
+
+
+    public int getJobStatus() {
+        return jobStatus;
+    }
+
+
+
+
+    public void setJobStatus(int jobStatus) {
+        this.jobStatus = jobStatus;
+    }
+
+
+
+    transient String toString;
+    @Override
+    public String toString() {
+        if (toString == null) {
+            toString = new StringBuilder("VM[").append(id).append("|").append(hostName).append("]").toString();
+        }
+        return toString;
+    }
+
+
+    @Override
+    public int hashCode() {
+        final int prime = 31;
+        int result = 1;
+        result = prime * result + (int) (id ^ (id >>> 32));
+        return result;
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (this == obj)
+            return true;
+        if (obj == null)
+            return false;
+        if (getClass() != obj.getClass())
+            return false;
+        UserVmJoinVO other = (UserVmJoinVO) obj;
+        if (id != other.id)
+            return false;
+        return true;
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/b0ce8fd4/api/src/com/cloud/server/ManagementService.java
----------------------------------------------------------------------
diff --git a/api/src/com/cloud/server/ManagementService.java b/api/src/com/cloud/server/ManagementService.java
index 78f2cb5..1b43662 100755
--- a/api/src/com/cloud/server/ManagementService.java
+++ b/api/src/com/cloud/server/ManagementService.java
@@ -62,6 +62,7 @@ import org.apache.cloudstack.api.user.iso.command.UpdateIsoCmd;
 import org.apache.cloudstack.api.user.vmgroup.command.UpdateVMGroupCmd;
 import com.cloud.api.commands.UpgradeSystemVMCmd;
 import com.cloud.api.commands.UploadCustomCertificateCmd;
+import com.cloud.api.view.vo.DomainRouterJoinVO;
 import com.cloud.async.AsyncJob;
 import com.cloud.capacity.Capacity;
 import com.cloud.configuration.Configuration;
@@ -184,7 +185,7 @@ public interface ManagementService {
      * @param cmd
      * @return List of DomainRouters.
      */
-    Pair<List<? extends VirtualRouter>, Integer> searchForRouters(ListRoutersCmd cmd);
+    Pair<List<DomainRouterJoinVO>, Integer> searchForRouters(ListRoutersCmd cmd);
 
     /**
      * Obtains a list of IP Addresses by the specified search criteria. Can search by: "userId", "dataCenterId",

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/b0ce8fd4/api/src/com/cloud/vm/UserVmService.java
----------------------------------------------------------------------
diff --git a/api/src/com/cloud/vm/UserVmService.java b/api/src/com/cloud/vm/UserVmService.java
index 04fa600..4568944 100755
--- a/api/src/com/cloud/vm/UserVmService.java
+++ b/api/src/com/cloud/vm/UserVmService.java
@@ -37,6 +37,7 @@ import org.apache.cloudstack.api.user.vm.command.RestoreVMCmd;
 import org.apache.cloudstack.api.user.vm.command.StartVMCmd;
 import org.apache.cloudstack.api.user.vm.command.UpdateVMCmd;
 import org.apache.cloudstack.api.user.vm.command.UpgradeVMCmd;
+import com.cloud.api.view.vo.UserVmJoinVO;
 import com.cloud.dc.DataCenter;
 import com.cloud.exception.ConcurrentOperationException;
 import com.cloud.exception.InsufficientCapacityException;
@@ -379,7 +380,7 @@ public interface UserVmService {
      *            the API command that wraps the search criteria
      * @return List of UserVMs.
      */
-    Pair<List<? extends UserVm>, Integer> searchForUserVMs(ListVMsCmd cmd);
+    Pair<List<UserVmJoinVO>, Integer> searchForUserVMs(ListVMsCmd cmd);
 
     HypervisorType getHypervisorTypeOfUserVM(long vmid);
 

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/b0ce8fd4/api/src/org/apache/cloudstack/api/ResponseGenerator.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/ResponseGenerator.java b/api/src/org/apache/cloudstack/api/ResponseGenerator.java
index 9939855..aeafe6a 100755
--- a/api/src/org/apache/cloudstack/api/ResponseGenerator.java
+++ b/api/src/org/apache/cloudstack/api/ResponseGenerator.java
@@ -152,6 +152,8 @@ import com.cloud.user.User;
 import com.cloud.user.UserAccount;
 import com.cloud.uservm.UserVm;
 import com.cloud.vm.InstanceGroup;
+import com.cloud.api.view.vo.DomainRouterJoinVO;
+import com.cloud.api.view.vo.UserVmJoinVO;
 import com.cloud.vm.VirtualMachine;
 
 public interface ResponseGenerator {
@@ -175,6 +177,10 @@ public interface ResponseGenerator {
 
     SnapshotPolicyResponse createSnapshotPolicyResponse(SnapshotPolicy policy);
 
+    List<UserVmResponse> createUserVmResponse(String objectName, UserVmJoinVO... userVms);
+
+    List<UserVmResponse> createUserVmResponse(String objectName, EnumSet<VMDetails> details, UserVmJoinVO... userVms);
+
     List<UserVmResponse> createUserVmResponse(String objectName, UserVm... userVms);
 
     List<UserVmResponse> createUserVmResponse(String objectName, EnumSet<VMDetails> details, UserVm... userVms);
@@ -183,6 +189,8 @@ public interface ResponseGenerator {
 
     DomainRouterResponse createDomainRouterResponse(VirtualRouter router);
 
+    List<DomainRouterResponse> createDomainRouterResponse(DomainRouterJoinVO... router);
+
     HostResponse createHostResponse(Host host, EnumSet<HostDetails> details);
 
     HostResponse createHostResponse(Host host);

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/b0ce8fd4/api/src/org/apache/cloudstack/api/ResponseObject.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/ResponseObject.java b/api/src/org/apache/cloudstack/api/ResponseObject.java
index ff03c20..fd327fa 100644
--- a/api/src/org/apache/cloudstack/api/ResponseObject.java
+++ b/api/src/org/apache/cloudstack/api/ResponseObject.java
@@ -50,6 +50,11 @@ public interface ResponseObject {
     Long getObjectId();
 
     /**
+    * Returns the object uuid. To replace getObjectId() later.
+    */
+    String getObjectUuid();
+
+    /**
      * Returns the job id
      *
      * @return
@@ -57,6 +62,12 @@ public interface ResponseObject {
     Long getJobId();
 
     /**
+     * Return the async job uuid. To replace getJobId() later.
+     * @return
+     */
+    String getJobUuid();
+
+    /**
      * Sets the job id
      *
      * @param jobId
@@ -64,6 +75,12 @@ public interface ResponseObject {
     void setJobId(Long jobId);
 
     /**
+     * Set the job uuid. To replace setJobId() later.
+     * @param jobUuid job uuid
+     */
+    void setJobUuid(String jobUuid);
+
+    /**
      * Returns the job status
      *
      * @return


Mime
View raw message