mirror of https://github.com/apache/cloudstack.git
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>
This commit is contained in:
parent
c59de6cbde
commit
b0ce8fd4ff
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
|
||||
}
|
||||
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
|
|
@ -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",
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -49,6 +49,11 @@ public interface ResponseObject {
|
|||
*/
|
||||
Long getObjectId();
|
||||
|
||||
/**
|
||||
* Returns the object uuid. To replace getObjectId() later.
|
||||
*/
|
||||
String getObjectUuid();
|
||||
|
||||
/**
|
||||
* Returns the job id
|
||||
*
|
||||
|
|
@ -56,6 +61,12 @@ public interface ResponseObject {
|
|||
*/
|
||||
Long getJobId();
|
||||
|
||||
/**
|
||||
* Return the async job uuid. To replace getJobId() later.
|
||||
* @return
|
||||
*/
|
||||
String getJobUuid();
|
||||
|
||||
/**
|
||||
* Sets the job id
|
||||
*
|
||||
|
|
@ -63,6 +74,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
|
||||
*
|
||||
|
|
|
|||
|
|
@ -17,6 +17,7 @@
|
|||
package org.apache.cloudstack.api.admin.router.command;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.EnumSet;
|
||||
import java.util.List;
|
||||
|
||||
import org.apache.log4j.Logger;
|
||||
|
|
@ -26,8 +27,17 @@ import org.apache.cloudstack.api.BaseListProjectAndAccountResourcesCmd;
|
|||
import org.apache.cloudstack.api.IdentityMapper;
|
||||
import org.apache.cloudstack.api.Implementation;
|
||||
import org.apache.cloudstack.api.Parameter;
|
||||
import org.apache.cloudstack.api.ApiConstants.VMDetails;
|
||||
|
||||
import com.cloud.api.response.UserVmResponse;
|
||||
import com.cloud.api.view.vo.DomainRouterJoinVO;
|
||||
import com.cloud.api.view.vo.UserVmJoinVO;
|
||||
|
||||
import com.cloud.api.response.DomainRouterResponse;
|
||||
import com.cloud.api.response.ListResponse;
|
||||
import com.cloud.api.response.UserVmResponse;
|
||||
import com.cloud.api.view.vo.DomainRouterJoinVO;
|
||||
import com.cloud.api.view.vo.UserVmJoinVO;
|
||||
import com.cloud.async.AsyncJob;
|
||||
import com.cloud.network.router.VirtualRouter;
|
||||
import com.cloud.utils.Pair;
|
||||
|
|
@ -130,15 +140,10 @@ public class ListRoutersCmd extends BaseListProjectAndAccountResourcesCmd {
|
|||
|
||||
@Override
|
||||
public void execute(){
|
||||
Pair<List<? extends VirtualRouter>, Integer> result = _mgr.searchForRouters(this);
|
||||
Pair<List<DomainRouterJoinVO>, Integer> result = _mgr.searchForRouters(this);
|
||||
ListResponse<DomainRouterResponse> response = new ListResponse<DomainRouterResponse>();
|
||||
List<DomainRouterResponse> routerResponses = new ArrayList<DomainRouterResponse>();
|
||||
for (VirtualRouter router : result.first()) {
|
||||
DomainRouterResponse routerResponse = _responseGenerator.createDomainRouterResponse(router);
|
||||
routerResponse.setObjectName("router");
|
||||
routerResponses.add(routerResponse);
|
||||
}
|
||||
|
||||
List<DomainRouterResponse> routerResponses = _responseGenerator.createDomainRouterResponse(result.first().toArray(new DomainRouterJoinVO[result.first().size()]));
|
||||
response.setResponses(routerResponses, result.second());
|
||||
response.setResponseName(getCommandName());
|
||||
this.setResponseObject(response);
|
||||
|
|
|
|||
|
|
@ -32,8 +32,8 @@ import com.cloud.api.response.ListResponse;
|
|||
import com.cloud.api.response.UserVmResponse;
|
||||
import com.cloud.async.AsyncJob;
|
||||
import com.cloud.exception.InvalidParameterValueException;
|
||||
import com.cloud.uservm.UserVm;
|
||||
import com.cloud.utils.Pair;
|
||||
import com.cloud.api.view.vo.UserVmJoinVO;
|
||||
|
||||
|
||||
@Implementation(description="List the virtual machines owned by the account.", responseObject=UserVmResponse.class)
|
||||
|
|
@ -199,16 +199,10 @@ public class ListVMsCmd extends BaseListTaggedResourcesCmd {
|
|||
|
||||
@Override
|
||||
public void execute(){
|
||||
Pair<List<? extends UserVm>, Integer> result = _userVmService.searchForUserVMs(this);
|
||||
Pair<List<UserVmJoinVO>, Integer> result = _userVmService.searchForUserVMs(this);
|
||||
ListResponse<UserVmResponse> response = new ListResponse<UserVmResponse>();
|
||||
EnumSet<VMDetails> details = getDetails();
|
||||
List<UserVmResponse> vmResponses;
|
||||
if (details.contains(VMDetails.all)){ // for all use optimized version
|
||||
vmResponses = _responseGenerator.createUserVmResponse("virtualmachine", result.first().toArray(new UserVm[result.first().size()]));
|
||||
}
|
||||
else {
|
||||
vmResponses = _responseGenerator.createUserVmResponse("virtualmachine", getDetails(), result.first().toArray(new UserVm[result.first().size()]));
|
||||
}
|
||||
List<UserVmResponse> vmResponses = _responseGenerator.createUserVmResponse("virtualmachine", getDetails(), result.first().toArray(new UserVmJoinVO[result.first().size()]));
|
||||
response.setResponses(vmResponses, result.second());
|
||||
response.setResponseName(getCommandName());
|
||||
this.setResponseObject(response);
|
||||
|
|
|
|||
|
|
@ -0,0 +1,170 @@
|
|||
// 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 src.com.cloud.api.commands.test;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.UUID;
|
||||
|
||||
import junit.framework.Assert;
|
||||
import junit.framework.TestCase;
|
||||
|
||||
import org.junit.Before;
|
||||
import org.junit.Rule;
|
||||
import org.junit.Test;
|
||||
import org.junit.rules.ExpectedException;
|
||||
import org.mockito.Mockito;
|
||||
|
||||
|
||||
import com.cloud.api.ResponseGenerator;
|
||||
import com.cloud.api.ServerApiException;
|
||||
import com.cloud.api.commands.ListRoutersCmd;
|
||||
import com.cloud.api.response.DomainRouterResponse;
|
||||
import com.cloud.api.response.ListResponse;
|
||||
import com.cloud.api.view.vo.DomainRouterJoinVO;
|
||||
import com.cloud.server.ManagementService;
|
||||
import com.cloud.utils.Pair;
|
||||
|
||||
|
||||
public class ListRoutersCmdTest extends TestCase {
|
||||
|
||||
private ListRoutersCmd listVrCmd;
|
||||
private ManagementService mgrService;
|
||||
private ResponseGenerator responseGenerator;
|
||||
|
||||
@Rule
|
||||
public ExpectedException expectedException = ExpectedException.none();
|
||||
|
||||
@Before
|
||||
public void setUp() {
|
||||
listVrCmd = new ListRoutersCmd();
|
||||
mgrService = Mockito.mock(ManagementService.class);
|
||||
responseGenerator = Mockito.mock(ResponseGenerator.class);
|
||||
|
||||
listVrCmd._mgr = mgrService;
|
||||
listVrCmd._responseGenerator = responseGenerator;
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testExecuteForSingleResult() throws Exception {
|
||||
|
||||
List<DomainRouterJoinVO> vrList = new ArrayList<DomainRouterJoinVO>();
|
||||
DomainRouterJoinVO vr = new DomainRouterJoinVO();
|
||||
String uuid = UUID.randomUUID().toString();
|
||||
vr.setUuid(uuid);
|
||||
vrList.add(vr);
|
||||
|
||||
List<DomainRouterResponse> respList = new ArrayList<DomainRouterResponse>();
|
||||
DomainRouterResponse resp = new DomainRouterResponse();
|
||||
resp.setId(uuid);
|
||||
respList.add(resp);
|
||||
|
||||
Mockito.when(mgrService.searchForRouters(listVrCmd))
|
||||
.thenReturn(new Pair<List<DomainRouterJoinVO>, Integer>(vrList, 1));
|
||||
Mockito.when(responseGenerator.createDomainRouterResponse(vr)).thenReturn(respList);
|
||||
|
||||
|
||||
try {
|
||||
listVrCmd.execute();
|
||||
ListResponse<DomainRouterResponse> listResp = (ListResponse<DomainRouterResponse>)listVrCmd.getResponseObject();
|
||||
assertNotNull(listResp);
|
||||
assertEquals(1, listResp.getCount().intValue());
|
||||
List<DomainRouterResponse> vrResp = listResp.getResponses();
|
||||
assertTrue(vrResp != null && vrResp.size() == 1);
|
||||
DomainRouterResponse v = vrResp.get(0);
|
||||
assertEquals(uuid, v.getId());
|
||||
} catch (ServerApiException exception) {
|
||||
assertEquals("Failed to list domain routers",
|
||||
exception.getDescription());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void testExecuteForPagedResult() throws Exception {
|
||||
|
||||
|
||||
List<DomainRouterJoinVO> vrList = new ArrayList<DomainRouterJoinVO>();
|
||||
DomainRouterJoinVO vr1 = new DomainRouterJoinVO();
|
||||
String uuid1 = UUID.randomUUID().toString();
|
||||
vr1.setUuid(uuid1);
|
||||
vrList.add(vr1);
|
||||
DomainRouterJoinVO vr2 = new DomainRouterJoinVO();
|
||||
String uuid2 = UUID.randomUUID().toString();
|
||||
vrList.add(vr2);
|
||||
|
||||
List<DomainRouterResponse> respList = new ArrayList<DomainRouterResponse>();
|
||||
DomainRouterResponse resp1 = new DomainRouterResponse();
|
||||
resp1.setId(uuid1);
|
||||
respList.add(resp1);
|
||||
DomainRouterResponse resp2 = new DomainRouterResponse();
|
||||
resp2.setId(uuid2);
|
||||
respList.add(resp2);
|
||||
|
||||
// without paging
|
||||
Mockito.when(mgrService.searchForRouters(listVrCmd))
|
||||
.thenReturn(new Pair<List<DomainRouterJoinVO>, Integer>(vrList, 2));
|
||||
Mockito.when(responseGenerator.createDomainRouterResponse(vr1, vr2)).thenReturn(respList);
|
||||
try {
|
||||
listVrCmd.execute();
|
||||
ListResponse<DomainRouterResponse> listResp = (ListResponse<DomainRouterResponse>)listVrCmd.getResponseObject();
|
||||
assertNotNull(listResp);
|
||||
assertEquals(2, listResp.getCount().intValue());
|
||||
List<DomainRouterResponse> vrResp = listResp.getResponses();
|
||||
assertTrue(vrResp != null && vrResp.size() == 2);
|
||||
} catch (ServerApiException exception) {
|
||||
assertEquals("Failed to list domain routers without pagination",
|
||||
exception.getDescription());
|
||||
}
|
||||
|
||||
// with pagination
|
||||
List<DomainRouterJoinVO> pVrList = new ArrayList<DomainRouterJoinVO>();
|
||||
pVrList.add(vr1);
|
||||
|
||||
List<DomainRouterResponse> pRespList = new ArrayList<DomainRouterResponse>();
|
||||
pRespList.add(resp1);
|
||||
|
||||
listVrCmd = new ListRoutersCmd() {
|
||||
public Integer getPage() {
|
||||
return 1;
|
||||
}
|
||||
|
||||
public Integer getPageSize() {
|
||||
return 1;
|
||||
}
|
||||
|
||||
};
|
||||
Mockito.when(mgrService.searchForRouters(listVrCmd))
|
||||
.thenReturn(new Pair<List<DomainRouterJoinVO>, Integer>(pVrList, 2));
|
||||
Mockito.when(responseGenerator.createDomainRouterResponse(vr1)).thenReturn(pRespList);
|
||||
|
||||
try {
|
||||
listVrCmd.execute();
|
||||
ListResponse<DomainRouterResponse> listResp = (ListResponse<DomainRouterResponse>)listVrCmd.getResponseObject();
|
||||
assertNotNull(listResp);
|
||||
assertEquals(2, listResp.getCount().intValue());
|
||||
List<DomainRouterResponse> vmResp = listResp.getResponses();
|
||||
assertTrue(vmResp != null && vmResp.size() == 1);
|
||||
DomainRouterResponse v = vmResp.get(0);
|
||||
assertEquals(uuid1, v.getId());
|
||||
} catch (ServerApiException exception) {
|
||||
assertEquals("Failed to list domain routers with pagination",
|
||||
exception.getDescription());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -0,0 +1,173 @@
|
|||
// 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 src.com.cloud.api.commands.test;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.EnumSet;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.UUID;
|
||||
|
||||
import junit.framework.Assert;
|
||||
import junit.framework.TestCase;
|
||||
|
||||
import org.junit.Before;
|
||||
import org.junit.Rule;
|
||||
import org.junit.Test;
|
||||
import org.junit.rules.ExpectedException;
|
||||
import org.mockito.Mockito;
|
||||
|
||||
import com.cloud.api.ApiConstants;
|
||||
import com.cloud.api.ApiConstants.VMDetails;
|
||||
import com.cloud.api.BaseCmd;
|
||||
import com.cloud.api.ResponseGenerator;
|
||||
import com.cloud.api.ServerApiException;
|
||||
import com.cloud.api.commands.ListVMsCmd;
|
||||
import com.cloud.api.response.ListResponse;
|
||||
import com.cloud.api.response.UserVmResponse;
|
||||
import com.cloud.api.view.vo.UserVmJoinVO;
|
||||
import com.cloud.utils.Pair;
|
||||
import com.cloud.vm.UserVmService;
|
||||
|
||||
public class ListVmsCmdTest extends TestCase {
|
||||
|
||||
private ListVMsCmd listVmCmd;
|
||||
private UserVmService userVmService;
|
||||
private ResponseGenerator responseGenerator;
|
||||
|
||||
@Rule
|
||||
public ExpectedException expectedException = ExpectedException.none();
|
||||
|
||||
@Before
|
||||
public void setUp() {
|
||||
listVmCmd = new ListVMsCmd();
|
||||
userVmService = Mockito.mock(UserVmService.class);
|
||||
responseGenerator = Mockito.mock(ResponseGenerator.class);
|
||||
|
||||
listVmCmd._userVmService = userVmService;
|
||||
listVmCmd._responseGenerator = responseGenerator;
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testExecuteForSingleResult() throws Exception {
|
||||
|
||||
List<UserVmJoinVO> vmList = new ArrayList<UserVmJoinVO>();
|
||||
UserVmJoinVO vm = new UserVmJoinVO();
|
||||
String uuid = UUID.randomUUID().toString();
|
||||
vm.setUuid(uuid);
|
||||
vmList.add(vm);
|
||||
|
||||
List<UserVmResponse> respList = new ArrayList<UserVmResponse>();
|
||||
UserVmResponse resp = new UserVmResponse();
|
||||
resp.setId(uuid);
|
||||
respList.add(resp);
|
||||
|
||||
Mockito.when(userVmService.searchForUserVMs(listVmCmd))
|
||||
.thenReturn(new Pair<List<UserVmJoinVO>, Integer>(vmList, 1));
|
||||
Mockito.when(responseGenerator.createUserVmResponse("virtualmachine", EnumSet.of(VMDetails.all), vm)).thenReturn(respList);
|
||||
|
||||
|
||||
try {
|
||||
listVmCmd.execute();
|
||||
ListResponse<UserVmResponse> listResp = (ListResponse<UserVmResponse>)listVmCmd.getResponseObject();
|
||||
assertNotNull(listResp);
|
||||
assertEquals(1, listResp.getCount().intValue());
|
||||
List<UserVmResponse> vmResp = listResp.getResponses();
|
||||
assertTrue(vmResp != null && vmResp.size() == 1);
|
||||
UserVmResponse v = vmResp.get(0);
|
||||
assertEquals(uuid, v.getId());
|
||||
} catch (ServerApiException exception) {
|
||||
assertEquals("Failed to list user vms",
|
||||
exception.getDescription());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void testExecuteForPagedResult() throws Exception {
|
||||
|
||||
|
||||
List<UserVmJoinVO> vmList = new ArrayList<UserVmJoinVO>();
|
||||
UserVmJoinVO vm1 = new UserVmJoinVO();
|
||||
String uuid1 = UUID.randomUUID().toString();
|
||||
vm1.setUuid(uuid1);
|
||||
vmList.add(vm1);
|
||||
UserVmJoinVO vm2 = new UserVmJoinVO();
|
||||
String uuid2 = UUID.randomUUID().toString();
|
||||
vmList.add(vm2);
|
||||
|
||||
List<UserVmResponse> respList = new ArrayList<UserVmResponse>();
|
||||
UserVmResponse resp1 = new UserVmResponse();
|
||||
resp1.setId(uuid1);
|
||||
respList.add(resp1);
|
||||
UserVmResponse resp2 = new UserVmResponse();
|
||||
resp2.setId(uuid2);
|
||||
respList.add(resp2);
|
||||
|
||||
// without paging
|
||||
Mockito.when(userVmService.searchForUserVMs(listVmCmd))
|
||||
.thenReturn(new Pair<List<UserVmJoinVO>, Integer>(vmList, 2));
|
||||
Mockito.when(responseGenerator.createUserVmResponse("virtualmachine", EnumSet.of(VMDetails.all), vm1, vm2)).thenReturn(respList);
|
||||
try {
|
||||
listVmCmd.execute();
|
||||
ListResponse<UserVmResponse> listResp = (ListResponse<UserVmResponse>)listVmCmd.getResponseObject();
|
||||
assertNotNull(listResp);
|
||||
assertEquals(2, listResp.getCount().intValue());
|
||||
List<UserVmResponse> vmResp = listResp.getResponses();
|
||||
assertTrue(vmResp != null && vmResp.size() == 2);
|
||||
} catch (ServerApiException exception) {
|
||||
assertEquals("Failed to list user vms without pagination",
|
||||
exception.getDescription());
|
||||
}
|
||||
|
||||
// with pagination
|
||||
List<UserVmJoinVO> pVmList = new ArrayList<UserVmJoinVO>();
|
||||
pVmList.add(vm1);
|
||||
|
||||
List<UserVmResponse> pRespList = new ArrayList<UserVmResponse>();
|
||||
pRespList.add(resp1);
|
||||
|
||||
listVmCmd = new ListVMsCmd() {
|
||||
public Integer getPage() {
|
||||
return 1;
|
||||
}
|
||||
|
||||
public Integer getPageSize() {
|
||||
return 1;
|
||||
}
|
||||
|
||||
};
|
||||
Mockito.when(userVmService.searchForUserVMs(listVmCmd))
|
||||
.thenReturn(new Pair<List<UserVmJoinVO>, Integer>(pVmList, 2));
|
||||
Mockito.when(responseGenerator.createUserVmResponse("virtualmachine", EnumSet.of(VMDetails.all), vm1)).thenReturn(pRespList);
|
||||
|
||||
try {
|
||||
listVmCmd.execute();
|
||||
ListResponse<UserVmResponse> listResp = (ListResponse<UserVmResponse>)listVmCmd.getResponseObject();
|
||||
assertNotNull(listResp);
|
||||
assertEquals(2, listResp.getCount().intValue());
|
||||
List<UserVmResponse> vmResp = listResp.getResponses();
|
||||
assertTrue(vmResp != null && vmResp.size() == 1);
|
||||
UserVmResponse v = vmResp.get(0);
|
||||
assertEquals(uuid1, v.getId());
|
||||
} catch (ServerApiException exception) {
|
||||
assertEquals("Failed to list user vms with pagination",
|
||||
exception.getDescription());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -17,11 +17,16 @@
|
|||
package com.cloud.api;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Hashtable;
|
||||
import java.util.EnumSet;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
import org.apache.cloudstack.api.ApiConstants.VMDetails;
|
||||
import com.cloud.api.response.DomainRouterResponse;
|
||||
import com.cloud.api.response.UserVmResponse;
|
||||
import com.cloud.api.view.vo.DomainRouterJoinVO;
|
||||
import com.cloud.api.view.vo.UserVmJoinVO;
|
||||
import com.cloud.async.AsyncJobManager;
|
||||
import com.cloud.async.AsyncJobVO;
|
||||
import com.cloud.capacity.CapacityVO;
|
||||
|
|
@ -84,6 +89,7 @@ import com.cloud.network.dao.NetworkDomainDao;
|
|||
import com.cloud.network.dao.NetworkRuleConfigDao;
|
||||
import com.cloud.network.dao.Site2SiteVpnGatewayDao;
|
||||
import com.cloud.network.dao.Site2SiteCustomerGatewayDao;
|
||||
import com.cloud.network.router.VirtualRouter;
|
||||
import com.cloud.network.security.SecurityGroup;
|
||||
import com.cloud.network.security.SecurityGroupManager;
|
||||
import com.cloud.network.security.SecurityGroupVO;
|
||||
|
|
@ -160,9 +166,11 @@ import com.cloud.vm.VirtualMachine;
|
|||
import com.cloud.vm.VmStats;
|
||||
import com.cloud.vm.dao.ConsoleProxyDao;
|
||||
import com.cloud.vm.dao.DomainRouterDao;
|
||||
import com.cloud.vm.dao.DomainRouterJoinDao;
|
||||
import com.cloud.vm.dao.UserVmDao;
|
||||
import com.cloud.vm.dao.UserVmData;
|
||||
import com.cloud.vm.dao.UserVmDetailsDao;
|
||||
import com.cloud.vm.dao.UserVmJoinDao;
|
||||
import com.cloud.vm.dao.VMInstanceDao;
|
||||
|
||||
public class ApiDBUtils {
|
||||
|
|
@ -181,6 +189,7 @@ public class ApiDBUtils {
|
|||
private static DiskOfferingDao _diskOfferingDao;
|
||||
private static DomainDao _domainDao;
|
||||
private static DomainRouterDao _domainRouterDao;
|
||||
private static DomainRouterJoinDao _domainRouterJoinDao;
|
||||
private static GuestOSDao _guestOSDao;
|
||||
private static GuestOSCategoryDao _guestOSCategoryDao;
|
||||
private static HostDao _hostDao;
|
||||
|
|
@ -200,6 +209,7 @@ public class ApiDBUtils {
|
|||
private static UserDao _userDao;
|
||||
private static UserStatisticsDao _userStatsDao;
|
||||
private static UserVmDao _userVmDao;
|
||||
private static UserVmJoinDao _userVmJoinDao;
|
||||
private static VlanDao _vlanDao;
|
||||
private static VolumeDao _volumeDao;
|
||||
private static Site2SiteVpnGatewayDao _site2SiteVpnGatewayDao;
|
||||
|
|
@ -246,6 +256,7 @@ public class ApiDBUtils {
|
|||
_diskOfferingDao = locator.getDao(DiskOfferingDao.class);
|
||||
_domainDao = locator.getDao(DomainDao.class);
|
||||
_domainRouterDao = locator.getDao(DomainRouterDao.class);
|
||||
_domainRouterJoinDao = locator.getDao(DomainRouterJoinDao.class);
|
||||
_guestOSDao = locator.getDao(GuestOSDao.class);
|
||||
_guestOSCategoryDao = locator.getDao(GuestOSCategoryDao.class);
|
||||
_hostDao = locator.getDao(HostDao.class);
|
||||
|
|
@ -264,6 +275,7 @@ public class ApiDBUtils {
|
|||
_userDao = locator.getDao(UserDao.class);
|
||||
_userStatsDao = locator.getDao(UserStatisticsDao.class);
|
||||
_userVmDao = locator.getDao(UserVmDao.class);
|
||||
_userVmJoinDao = locator.getDao(UserVmJoinDao.class);
|
||||
_vlanDao = locator.getDao(VlanDao.class);
|
||||
_volumeDao = locator.getDao(VolumeDao.class);
|
||||
_site2SiteVpnGatewayDao = locator.getDao(Site2SiteVpnGatewayDao.class);
|
||||
|
|
@ -344,7 +356,7 @@ public class ApiDBUtils {
|
|||
return _ms.getVersion();
|
||||
}
|
||||
|
||||
public static List<UserVmVO> searchForUserVMs(Criteria c, List<Long> permittedAccounts) {
|
||||
public static List<UserVmJoinVO> searchForUserVMs(Criteria c, List<Long> permittedAccounts) {
|
||||
return _userVmMgr.searchForUserVMs(c, _accountDao.findById(Account.ACCOUNT_ID_SYSTEM),
|
||||
null, false, permittedAccounts, false, null, null).first();
|
||||
}
|
||||
|
|
@ -745,10 +757,6 @@ public class ApiDBUtils {
|
|||
return _firewallCidrsDao.getSourceCidrs(id);
|
||||
}
|
||||
|
||||
public static Hashtable<Long, UserVmData> listVmDetails(Hashtable<Long, UserVmData> vmData){
|
||||
return _userVmDao.listVmDetails(vmData);
|
||||
}
|
||||
|
||||
public static Account getProjectOwner(long projectId) {
|
||||
return _projectMgr.getProjectOwner(projectId);
|
||||
}
|
||||
|
|
@ -889,3 +897,33 @@ public class ApiDBUtils {
|
|||
public static CounterVO getCounter(long counterId) {
|
||||
return _counterDao.findById(counterId);
|
||||
}}
|
||||
|
||||
|
||||
///////////////////////////////////////////////////////////////////////
|
||||
// Newly Added Utility Methods for List API refactoring //
|
||||
///////////////////////////////////////////////////////////////////////
|
||||
|
||||
public static DomainRouterResponse newDomainRouterResponse(DomainRouterJoinVO vr, Account caller) {
|
||||
return _domainRouterJoinDao.newDomainRouterResponse(vr, caller);
|
||||
}
|
||||
|
||||
public static DomainRouterResponse fillRouterDetails(DomainRouterResponse vrData, DomainRouterJoinVO vr){
|
||||
return _domainRouterJoinDao.setDomainRouterResponse(vrData, vr);
|
||||
}
|
||||
|
||||
public static List<DomainRouterJoinVO> newDomainRouterView(VirtualRouter vr){
|
||||
return _domainRouterJoinDao.newDomainRouterView(vr);
|
||||
}
|
||||
|
||||
public static UserVmResponse newUserVmResponse(String objectName, UserVmJoinVO userVm, EnumSet<VMDetails> details, Account caller) {
|
||||
return _userVmJoinDao.newUserVmResponse(objectName, userVm, details, caller);
|
||||
}
|
||||
|
||||
public static UserVmResponse fillVmDetails(UserVmResponse vmData, UserVmJoinVO vm){
|
||||
return _userVmJoinDao.setUserVmResponse(vmData, vm);
|
||||
}
|
||||
|
||||
public static List<UserVmJoinVO> newUserVmView(UserVm... userVms){
|
||||
return _userVmJoinDao.newUserVmView(userVms);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -63,6 +63,7 @@ import com.cloud.api.response.FirewallResponse;
|
|||
import com.cloud.api.response.FirewallRuleResponse;
|
||||
import com.cloud.api.response.HostResponse;
|
||||
import com.cloud.api.response.HypervisorCapabilitiesResponse;
|
||||
import com.cloud.api.response.ControlledViewEntityResponse;
|
||||
import com.cloud.api.response.IPAddressResponse;
|
||||
import com.cloud.api.response.InstanceGroupResponse;
|
||||
import com.cloud.api.response.IpForwardingRuleResponse;
|
||||
|
|
@ -115,6 +116,9 @@ import com.cloud.api.response.VpcOfferingResponse;
|
|||
import com.cloud.api.response.VpcResponse;
|
||||
import com.cloud.api.response.VpnUsersResponse;
|
||||
import com.cloud.api.response.ZoneResponse;
|
||||
import com.cloud.api.view.vo.DomainRouterJoinVO;
|
||||
import com.cloud.api.view.vo.ControlledViewEntity;
|
||||
import com.cloud.api.view.vo.UserVmJoinVO;
|
||||
import com.cloud.async.AsyncJob;
|
||||
import com.cloud.capacity.Capacity;
|
||||
import com.cloud.capacity.CapacityVO;
|
||||
|
|
@ -360,12 +364,12 @@ public class ApiResponseHelper implements ResponseGenerator {
|
|||
List<Long> permittedAccounts = new ArrayList<Long>();
|
||||
permittedAccounts.add(account.getId());
|
||||
|
||||
List<? extends UserVm> virtualMachines = ApiDBUtils.searchForUserVMs(new Criteria(), permittedAccounts);
|
||||
List<UserVmJoinVO> virtualMachines = ApiDBUtils.searchForUserVMs(new Criteria(), permittedAccounts);
|
||||
|
||||
// get Running/Stopped VMs
|
||||
for (Iterator<? extends UserVm> iter = virtualMachines.iterator(); iter.hasNext();) {
|
||||
for (Iterator<UserVmJoinVO> iter = virtualMachines.iterator(); iter.hasNext();) {
|
||||
// count how many stopped/running vms we have
|
||||
UserVm vm = iter.next();
|
||||
UserVmJoinVO vm = iter.next();
|
||||
|
||||
if (vm.getState() == State.Stopped) {
|
||||
vmStopped++;
|
||||
|
|
@ -1386,400 +1390,72 @@ public class ApiResponseHelper implements ResponseGenerator {
|
|||
|
||||
@Override
|
||||
public List<UserVmResponse> createUserVmResponse(String objectName, EnumSet<VMDetails> details, UserVm... userVms) {
|
||||
Account caller = UserContext.current().getCaller();
|
||||
Map<Long, DataCenter> dataCenters = new HashMap<Long, DataCenter>();
|
||||
Map<Long, Host> hosts = new HashMap<Long, Host>();
|
||||
Map<Long, VMTemplateVO> templates = new HashMap<Long, VMTemplateVO>();
|
||||
Map<Long, ServiceOffering> serviceOfferings = new HashMap<Long, ServiceOffering>();
|
||||
Map<Long, Network> networks = new HashMap<Long, Network>();
|
||||
List<UserVmJoinVO> viewVms = ApiDBUtils.newUserVmView(userVms);
|
||||
return createUserVmResponse(objectName, details, viewVms.toArray(new UserVmJoinVO[viewVms.size()]));
|
||||
|
||||
List<UserVmResponse> vmResponses = new ArrayList<UserVmResponse>();
|
||||
|
||||
for (UserVm userVm : userVms) {
|
||||
UserVmResponse userVmResponse = new UserVmResponse();
|
||||
Account acct = ApiDBUtils.findAccountById(Long.valueOf(userVm.getAccountId()));
|
||||
if (acct != null) {
|
||||
userVmResponse.setAccountName(acct.getAccountName());
|
||||
userVmResponse.setDomainId(acct.getDomainId());
|
||||
userVmResponse.setDomainName(ApiDBUtils.findDomainById(acct.getDomainId()).getName());
|
||||
}
|
||||
|
||||
userVmResponse.setId(userVm.getId());
|
||||
userVmResponse.setName(userVm.getHostName());
|
||||
userVmResponse.setCreated(userVm.getCreated());
|
||||
|
||||
userVmResponse.setHaEnable(userVm.isHaEnabled());
|
||||
|
||||
if (userVm.getDisplayName() != null) {
|
||||
userVmResponse.setDisplayName(userVm.getDisplayName());
|
||||
} else {
|
||||
userVmResponse.setDisplayName(userVm.getHostName());
|
||||
}
|
||||
|
||||
if (caller.getType() == Account.ACCOUNT_TYPE_ADMIN) {
|
||||
userVmResponse.setInstanceName(userVm.getInstanceName());
|
||||
}
|
||||
|
||||
|
||||
if (userVm.getPassword() != null) {
|
||||
userVmResponse.setPassword(userVm.getPassword());
|
||||
}
|
||||
|
||||
if (details.contains(VMDetails.all) || details.contains(VMDetails.group)) {
|
||||
InstanceGroupVO group = ApiDBUtils.findInstanceGroupForVM(userVm.getId());
|
||||
if (group != null) {
|
||||
userVmResponse.setGroup(group.getName());
|
||||
userVmResponse.setGroupId(group.getId());
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// Data Center Info
|
||||
DataCenter zone = dataCenters.get(userVm.getDataCenterIdToDeployIn());
|
||||
if (zone == null) {
|
||||
zone = ApiDBUtils.findZoneById(userVm.getDataCenterIdToDeployIn());
|
||||
dataCenters.put(zone.getId(), zone);
|
||||
}
|
||||
|
||||
userVmResponse.setZoneId(zone.getId());
|
||||
userVmResponse.setZoneName(zone.getName());
|
||||
|
||||
// if user is an admin, display host id
|
||||
if (((caller == null) || (caller.getType() == Account.ACCOUNT_TYPE_ADMIN)) && (userVm.getHostId() != null)) {
|
||||
Host host = hosts.get(userVm.getHostId());
|
||||
|
||||
if (host == null) {
|
||||
host = ApiDBUtils.findHostById(userVm.getHostId());
|
||||
hosts.put(host.getId(), host);
|
||||
}
|
||||
|
||||
userVmResponse.setHostId(host.getId());
|
||||
userVmResponse.setHostName(host.getName());
|
||||
}
|
||||
|
||||
if (userVm.getState() != null) {
|
||||
if (userVm.getHostId() != null) {
|
||||
Host host = hosts.get(userVm.getHostId());
|
||||
|
||||
if (host == null) {
|
||||
host = ApiDBUtils.findHostById(userVm.getHostId());
|
||||
hosts.put(host.getId(), host);
|
||||
}
|
||||
if (host.getStatus() != com.cloud.host.Status.Up) {
|
||||
userVmResponse.setState(VirtualMachine.State.Unknown.toString());
|
||||
} else {
|
||||
userVmResponse.setState(userVm.getState().toString());
|
||||
}
|
||||
} else {
|
||||
userVmResponse.setState(userVm.getState().toString());
|
||||
}
|
||||
}
|
||||
|
||||
if (userVm.getHypervisorType() != null) {
|
||||
userVmResponse.setHypervisor(userVm.getHypervisorType().toString());
|
||||
}
|
||||
|
||||
if (details.contains(VMDetails.all) || details.contains(VMDetails.tmpl)) {
|
||||
// Template Info
|
||||
VMTemplateVO template = templates.get(userVm.getTemplateId());
|
||||
if (template == null) {
|
||||
template = ApiDBUtils.findTemplateById(userVm.getTemplateId());
|
||||
if (template != null) {
|
||||
templates.put(template.getId(), template);
|
||||
}
|
||||
}
|
||||
|
||||
if (template != null) {
|
||||
userVmResponse.setTemplateId(userVm.getTemplateId());
|
||||
userVmResponse.setTemplateName(template.getName());
|
||||
userVmResponse.setTemplateDisplayText(template.getDisplayText());
|
||||
userVmResponse.setPasswordEnabled(template.getEnablePassword());
|
||||
} else {
|
||||
userVmResponse.setTemplateId(-1L);
|
||||
userVmResponse.setTemplateName("ISO Boot");
|
||||
userVmResponse.setTemplateDisplayText("ISO Boot");
|
||||
userVmResponse.setPasswordEnabled(false);
|
||||
}
|
||||
}
|
||||
|
||||
if (details.contains(VMDetails.all) || details.contains(VMDetails.iso)) {
|
||||
// ISO Info
|
||||
VMTemplateVO iso = templates.get(userVm.getIsoId());
|
||||
if (iso == null) {
|
||||
iso = ApiDBUtils.findTemplateById(userVm.getIsoId());
|
||||
if (iso != null) {
|
||||
templates.put(iso.getId(), iso);
|
||||
}
|
||||
}
|
||||
|
||||
if (iso != null) {
|
||||
userVmResponse.setIsoId(iso.getId());
|
||||
userVmResponse.setIsoName(iso.getName());
|
||||
}
|
||||
}
|
||||
|
||||
if (details.contains(VMDetails.all) || details.contains(VMDetails.servoff)) {
|
||||
// Service Offering Info
|
||||
ServiceOffering offering = serviceOfferings.get(userVm.getServiceOfferingId());
|
||||
|
||||
if (offering == null) {
|
||||
offering = ApiDBUtils.findServiceOfferingById(userVm.getServiceOfferingId());
|
||||
serviceOfferings.put(offering.getId(), offering);
|
||||
}
|
||||
|
||||
userVmResponse.setServiceOfferingId(offering.getId());
|
||||
userVmResponse.setServiceOfferingName(offering.getName());
|
||||
userVmResponse.setCpuNumber(offering.getCpu());
|
||||
userVmResponse.setCpuSpeed(offering.getSpeed());
|
||||
userVmResponse.setMemory(offering.getRamSize());
|
||||
}
|
||||
|
||||
if (details.contains(VMDetails.all) || details.contains(VMDetails.volume)) {
|
||||
VolumeVO rootVolume = ApiDBUtils.findRootVolume(userVm.getId());
|
||||
if (rootVolume != null) {
|
||||
userVmResponse.setRootDeviceId(rootVolume.getDeviceId());
|
||||
String rootDeviceType = "Not created";
|
||||
if (rootVolume.getPoolId() != null) {
|
||||
StoragePoolVO storagePool = ApiDBUtils.findStoragePoolById(rootVolume.getPoolId());
|
||||
rootDeviceType = storagePool.getPoolType().toString();
|
||||
}
|
||||
userVmResponse.setRootDeviceType(rootDeviceType);
|
||||
}
|
||||
}
|
||||
|
||||
if (details.contains(VMDetails.all) || details.contains(VMDetails.stats)) {
|
||||
// stats calculation
|
||||
DecimalFormat decimalFormat = new DecimalFormat("#.##");
|
||||
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());
|
||||
}
|
||||
}
|
||||
|
||||
userVmResponse.setGuestOsId(userVm.getGuestOSId());
|
||||
|
||||
if (details.contains(VMDetails.all) || details.contains(VMDetails.secgrp)) {
|
||||
// security groups - list only when zone is security group enabled
|
||||
if (zone.isSecurityGroupEnabled()) {
|
||||
List<SecurityGroupVO> securityGroups = ApiDBUtils.getSecurityGroupsForVm(userVm.getId());
|
||||
List<SecurityGroupResponse> securityGroupResponse = new ArrayList<SecurityGroupResponse>();
|
||||
for (SecurityGroupVO grp : securityGroups) {
|
||||
SecurityGroupResponse resp = new SecurityGroupResponse();
|
||||
resp.setId(grp.getId());
|
||||
resp.setName(grp.getName());
|
||||
resp.setDescription(grp.getDescription());
|
||||
resp.setObjectName("securitygroup");
|
||||
securityGroupResponse.add(resp);
|
||||
}
|
||||
userVmResponse.setSecurityGroupList(securityGroupResponse);
|
||||
}
|
||||
}
|
||||
|
||||
if (details.contains(VMDetails.all) || details.contains(VMDetails.nics)) {
|
||||
List<NicProfile> nicProfiles = ApiDBUtils.getNics(userVm);
|
||||
List<NicResponse> nicResponses = new ArrayList<NicResponse>();
|
||||
for (NicProfile singleNicProfile : nicProfiles) {
|
||||
NicResponse nicResponse = new NicResponse();
|
||||
nicResponse.setId(singleNicProfile.getId());
|
||||
nicResponse.setIpaddress(singleNicProfile.getIp4Address());
|
||||
nicResponse.setGateway(singleNicProfile.getGateway());
|
||||
nicResponse.setNetmask(singleNicProfile.getNetmask());
|
||||
nicResponse.setNetworkid(singleNicProfile.getNetworkId());
|
||||
nicResponse.setNetworkName(ApiDBUtils.findNetworkById(singleNicProfile.getNetworkId()).getName());
|
||||
if (acct.getType() == Account.ACCOUNT_TYPE_ADMIN) {
|
||||
if (singleNicProfile.getBroadCastUri() != null) {
|
||||
nicResponse.setBroadcastUri(singleNicProfile.getBroadCastUri().toString());
|
||||
}
|
||||
if (singleNicProfile.getIsolationUri() != null) {
|
||||
nicResponse.setIsolationUri(singleNicProfile.getIsolationUri().toString());
|
||||
}
|
||||
}
|
||||
|
||||
// Long networkId = singleNicProfile.getNetworkId();
|
||||
Network network = networks.get(singleNicProfile.getNetworkId());
|
||||
if (network == null) {
|
||||
network = ApiDBUtils.findNetworkById(singleNicProfile.getNetworkId());
|
||||
networks.put(singleNicProfile.getNetworkId(), network);
|
||||
}
|
||||
|
||||
nicResponse.setTrafficType(network.getTrafficType().toString());
|
||||
nicResponse.setType(network.getGuestType().toString());
|
||||
nicResponse.setIsDefault(singleNicProfile.isDefaultNic());
|
||||
nicResponse.setObjectName("nic");
|
||||
nicResponses.add(nicResponse);
|
||||
}
|
||||
userVmResponse.setNics(nicResponses);
|
||||
}
|
||||
|
||||
//set tag information
|
||||
List<? extends ResourceTag> tags = ApiDBUtils.listByResourceTypeAndId(TaggedResourceType.UserVm, userVm.getId());
|
||||
List<ResourceTagResponse> tagResponses = new ArrayList<ResourceTagResponse>();
|
||||
for (ResourceTag tag : tags) {
|
||||
ResourceTagResponse tagResponse = createResourceTagResponse(tag, true);
|
||||
tagResponses.add(tagResponse);
|
||||
}
|
||||
userVmResponse.setTags(tagResponses);
|
||||
|
||||
IpAddress ip = ApiDBUtils.findIpByAssociatedVmId(userVm.getId());
|
||||
if (ip != null) {
|
||||
userVmResponse.setPublicIpId(ip.getId());
|
||||
userVmResponse.setPublicIp(ip.getAddress().addr());
|
||||
}
|
||||
|
||||
userVmResponse.setObjectName(objectName);
|
||||
vmResponses.add(userVmResponse);
|
||||
}
|
||||
|
||||
return vmResponses;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<UserVmResponse> createUserVmResponse(String objectName, UserVm... userVms) {
|
||||
Account caller = UserContext.current().getCaller();
|
||||
boolean caller_is_admin = ((caller == null) || (caller.getType() == Account.ACCOUNT_TYPE_ADMIN));
|
||||
List<UserVmJoinVO> viewVms = ApiDBUtils.newUserVmView(userVms);
|
||||
return createUserVmResponse(objectName, viewVms.toArray(new UserVmJoinVO[viewVms.size()]));
|
||||
}
|
||||
|
||||
Hashtable<Long, UserVmData> vmDataList = new Hashtable<Long, UserVmData>();
|
||||
@Override
|
||||
public List<UserVmResponse> createUserVmResponse(String objectName, UserVmJoinVO... userVms) {
|
||||
return createUserVmResponse(objectName, EnumSet.of(VMDetails.all), userVms);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<UserVmResponse> createUserVmResponse(String objectName, EnumSet<VMDetails> details, UserVmJoinVO... userVms) {
|
||||
Account caller = UserContext.current().getCaller();
|
||||
|
||||
s_logger.debug(">>>Converting UserVm VO to UserVmResponse");
|
||||
Hashtable<Long, UserVmResponse> vmDataList = new Hashtable<Long, UserVmResponse>();
|
||||
// Initialise the vmdatalist with the input data
|
||||
for (UserVm userVm : userVms) {
|
||||
UserVmData userVmData = newUserVmData(userVm);
|
||||
|
||||
|
||||
for (UserVmJoinVO userVm : userVms) {
|
||||
UserVmResponse userVmData = vmDataList.get(userVm.getId());
|
||||
if ( userVmData == null ){
|
||||
// first time encountering this vm
|
||||
userVmData = ApiDBUtils.newUserVmResponse(objectName, userVm, details, caller);
|
||||
} else{
|
||||
// update nics, securitygroups, tags for 1 to many mapping fields
|
||||
userVmData = ApiDBUtils.fillVmDetails(userVmData, userVm);
|
||||
}
|
||||
vmDataList.put(userVm.getId(), userVmData);
|
||||
}
|
||||
|
||||
vmDataList = ApiDBUtils.listVmDetails(vmDataList);
|
||||
|
||||
// initialize vmresponse from vmdatalist
|
||||
List<UserVmResponse> vmResponses = new ArrayList<UserVmResponse>();
|
||||
DecimalFormat decimalFormat = new DecimalFormat("#.##");
|
||||
for (UserVmData uvd : vmDataList.values()) {
|
||||
UserVmResponse userVmResponse = newUserVmResponse(uvd, caller_is_admin);
|
||||
|
||||
// stats calculation
|
||||
String cpuUsed = null;
|
||||
// VmStats vmStats = ApiDBUtils.getVmStatistics(userVmResponse.getId());
|
||||
VmStats vmStats = ApiDBUtils.getVmStatistics(uvd.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());
|
||||
}
|
||||
userVmResponse.setObjectName(objectName);
|
||||
|
||||
vmResponses.add(userVmResponse);
|
||||
}
|
||||
return vmResponses;
|
||||
s_logger.debug(">>>Done with creating vm response");
|
||||
return new ArrayList<UserVmResponse>(vmDataList.values());
|
||||
}
|
||||
|
||||
@Override
|
||||
public DomainRouterResponse createDomainRouterResponse(VirtualRouter router) {
|
||||
List<DomainRouterJoinVO> viewVrs = ApiDBUtils.newDomainRouterView(router);
|
||||
List<DomainRouterResponse> listVrs = createDomainRouterResponse(viewVrs.toArray(new DomainRouterJoinVO[viewVrs.size()]));
|
||||
assert listVrs != null && listVrs.size() == 1 : "There should be one virtual router returned";
|
||||
return listVrs.get(0);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<DomainRouterResponse> createDomainRouterResponse(DomainRouterJoinVO... routers) {
|
||||
Account caller = UserContext.current().getCaller();
|
||||
Map<Long, ServiceOffering> serviceOfferings = new HashMap<Long, ServiceOffering>();
|
||||
|
||||
DomainRouterResponse routerResponse = new DomainRouterResponse();
|
||||
routerResponse.setId(router.getId());
|
||||
routerResponse.setZoneId(router.getDataCenterIdToDeployIn());
|
||||
routerResponse.setName(router.getHostName());
|
||||
routerResponse.setTemplateId(router.getTemplateId());
|
||||
routerResponse.setCreated(router.getCreated());
|
||||
routerResponse.setState(router.getState());
|
||||
routerResponse.setIsRedundantRouter(router.getIsRedundantRouter());
|
||||
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.getHostId());
|
||||
routerResponse.setHostName(ApiDBUtils.findHostById(router.getHostId()).getName());
|
||||
Hashtable<Long, DomainRouterResponse> vrDataList = new Hashtable<Long, DomainRouterResponse>();
|
||||
// Initialise the vrdatalist with the input data
|
||||
for (DomainRouterJoinVO vr : routers) {
|
||||
DomainRouterResponse vrData = vrDataList.get(vr.getId());
|
||||
if ( vrData == null ){
|
||||
// first time encountering this vm
|
||||
vrData = ApiDBUtils.newDomainRouterResponse(vr, caller);
|
||||
}
|
||||
routerResponse.setPodId(router.getPodIdToDeployIn());
|
||||
List<NicProfile> nicProfiles = ApiDBUtils.getNics(router);
|
||||
List<NicResponse> nicResponses = new ArrayList<NicResponse>();
|
||||
for (NicProfile singleNicProfile : nicProfiles) {
|
||||
Network network = ApiDBUtils.findNetworkById(singleNicProfile.getNetworkId());
|
||||
//legacy code, public/control/guest nic info is kept in nics response object
|
||||
if (network != null) {
|
||||
if (network.getTrafficType() == TrafficType.Public) {
|
||||
routerResponse.setPublicIp(singleNicProfile.getIp4Address());
|
||||
routerResponse.setPublicMacAddress(singleNicProfile.getMacAddress());
|
||||
routerResponse.setPublicNetmask(singleNicProfile.getNetmask());
|
||||
routerResponse.setGateway(singleNicProfile.getGateway());
|
||||
routerResponse.setPublicNetworkId(singleNicProfile.getNetworkId());
|
||||
} else if (network.getTrafficType() == TrafficType.Control) {
|
||||
routerResponse.setLinkLocalIp(singleNicProfile.getIp4Address());
|
||||
routerResponse.setLinkLocalMacAddress(singleNicProfile.getMacAddress());
|
||||
routerResponse.setLinkLocalNetmask(singleNicProfile.getNetmask());
|
||||
routerResponse.setLinkLocalNetworkId(singleNicProfile.getNetworkId());
|
||||
} else if (network.getTrafficType() == TrafficType.Guest) {
|
||||
routerResponse.setGuestIpAddress(singleNicProfile.getIp4Address());
|
||||
routerResponse.setGuestMacAddress(singleNicProfile.getMacAddress());
|
||||
routerResponse.setGuestNetmask(singleNicProfile.getNetmask());
|
||||
routerResponse.setGuestNetworkId(singleNicProfile.getNetworkId());
|
||||
routerResponse.setNetworkDomain(network.getNetworkDomain());
|
||||
}
|
||||
|
||||
NicResponse nicResponse = new NicResponse();
|
||||
nicResponse.setId(singleNicProfile.getId());
|
||||
nicResponse.setIpaddress(singleNicProfile.getIp4Address());
|
||||
nicResponse.setGateway(singleNicProfile.getGateway());
|
||||
nicResponse.setNetmask(singleNicProfile.getNetmask());
|
||||
nicResponse.setNetworkid(singleNicProfile.getNetworkId());
|
||||
nicResponse.setNetworkName(network.getName());
|
||||
|
||||
if (singleNicProfile.getBroadCastUri() != null) {
|
||||
nicResponse.setBroadcastUri(singleNicProfile.getBroadCastUri().toString());
|
||||
}
|
||||
if (singleNicProfile.getIsolationUri() != null) {
|
||||
nicResponse.setIsolationUri(singleNicProfile.getIsolationUri().toString());
|
||||
}
|
||||
|
||||
nicResponse.setTrafficType(network.getTrafficType().toString());
|
||||
if (network.getGuestType() != null) {
|
||||
nicResponse.setType(network.getGuestType().toString());
|
||||
}
|
||||
nicResponse.setIsDefault(singleNicProfile.isDefaultNic());
|
||||
nicResponse.setObjectName("nic");
|
||||
nicResponses.add(nicResponse);
|
||||
}
|
||||
else{
|
||||
// update nics for 1 to many mapping fields
|
||||
vrData = ApiDBUtils.fillRouterDetails(vrData, vr);
|
||||
}
|
||||
routerResponse.setNics(nicResponses);
|
||||
vrDataList.put(vr.getId(), vrData);
|
||||
}
|
||||
|
||||
// Service Offering Info
|
||||
ServiceOffering offering = serviceOfferings.get(router.getServiceOfferingId());
|
||||
|
||||
if (offering == null) {
|
||||
offering = ApiDBUtils.findServiceOfferingById(router.getServiceOfferingId());
|
||||
serviceOfferings.put(offering.getId(), offering);
|
||||
}
|
||||
routerResponse.setServiceOfferingId(offering.getId());
|
||||
routerResponse.setServiceOfferingName(offering.getName());
|
||||
|
||||
populateOwner(routerResponse, router);
|
||||
|
||||
DataCenter zone = ApiDBUtils.findZoneById(router.getDataCenterIdToDeployIn());
|
||||
if (zone != null) {
|
||||
routerResponse.setZoneName(zone.getName());
|
||||
routerResponse.setDns1(zone.getDns1());
|
||||
routerResponse.setDns2(zone.getDns2());
|
||||
}
|
||||
|
||||
routerResponse.setVpcId(router.getVpcId());
|
||||
|
||||
routerResponse.setObjectName("domainrouter");
|
||||
return routerResponse;
|
||||
return new ArrayList<DomainRouterResponse>(vrDataList.values());
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
@ -3209,141 +2885,6 @@ public class ApiResponseHelper implements ResponseGenerator {
|
|||
return response;
|
||||
}
|
||||
|
||||
public UserVmData newUserVmData(UserVm userVm) {
|
||||
UserVmData userVmData = new UserVmData();
|
||||
userVmData.setId(userVm.getId());
|
||||
userVmData.setName(userVm.getHostName());
|
||||
userVmData.setCreated(userVm.getCreated());
|
||||
userVmData.setGuestOsId(userVm.getGuestOSId());
|
||||
userVmData.setHaEnable(userVm.isHaEnabled());
|
||||
if (userVm.getState() != null) {
|
||||
userVmData.setState(userVm.getState().toString());
|
||||
}
|
||||
if (userVm.getDisplayName() != null) {
|
||||
userVmData.setDisplayName(userVm.getDisplayName());
|
||||
} else {
|
||||
userVmData.setDisplayName(userVm.getHostName());
|
||||
}
|
||||
userVmData.setInstanceName(userVm.getInstanceName());
|
||||
|
||||
userVmData.setDomainId(userVm.getDomainId());
|
||||
|
||||
if (userVm.getHypervisorType() != null) {
|
||||
userVmData.setHypervisor(userVm.getHypervisorType().toString());
|
||||
}
|
||||
|
||||
if (userVm.getPassword() != null) {
|
||||
userVmData.setPassword(userVm.getPassword());
|
||||
}
|
||||
return userVmData;
|
||||
}
|
||||
|
||||
public UserVmResponse newUserVmResponse(UserVmData userVmData, boolean caller_is_admin) {
|
||||
UserVmResponse userVmResponse = new UserVmResponse();
|
||||
|
||||
userVmResponse.setHypervisor(userVmData.getHypervisor());
|
||||
userVmResponse.setId(userVmData.getId());
|
||||
userVmResponse.setName(userVmData.getName());
|
||||
|
||||
userVmResponse.setDisplayName(userVmData.getDisplayName());
|
||||
|
||||
populateAccount(userVmResponse, userVmData.getAccountId());
|
||||
populateDomain(userVmResponse, userVmData.getDomainId());
|
||||
|
||||
userVmResponse.setCreated(userVmData.getCreated());
|
||||
userVmResponse.setState(userVmData.getState());
|
||||
userVmResponse.setHaEnable(userVmData.getHaEnable());
|
||||
userVmResponse.setGroupId(userVmData.getGroupId());
|
||||
userVmResponse.setGroup(userVmData.getGroup());
|
||||
userVmResponse.setZoneId(userVmData.getZoneId());
|
||||
userVmResponse.setZoneName(userVmData.getZoneName());
|
||||
if (caller_is_admin) {
|
||||
userVmResponse.setInstanceName(userVmData.getInstanceName());
|
||||
userVmResponse.setHostId(userVmData.getHostId());
|
||||
userVmResponse.setHostName(userVmData.getHostName());
|
||||
}
|
||||
userVmResponse.setTemplateId(userVmData.getTemplateId());
|
||||
userVmResponse.setTemplateName(userVmData.getTemplateName());
|
||||
userVmResponse.setTemplateDisplayText(userVmData.getTemplateDisplayText());
|
||||
userVmResponse.setPasswordEnabled(userVmData.getPasswordEnabled());
|
||||
userVmResponse.setIsoId(userVmData.getIsoId());
|
||||
userVmResponse.setIsoName(userVmData.getIsoName());
|
||||
userVmResponse.setIsoDisplayText(userVmData.getIsoDisplayText());
|
||||
userVmResponse.setServiceOfferingId(userVmData.getServiceOfferingId());
|
||||
userVmResponse.setServiceOfferingName(userVmData.getServiceOfferingName());
|
||||
userVmResponse.setCpuNumber(userVmData.getCpuNumber());
|
||||
userVmResponse.setCpuSpeed(userVmData.getCpuSpeed());
|
||||
userVmResponse.setMemory(userVmData.getMemory());
|
||||
userVmResponse.setCpuUsed(userVmData.getCpuUsed());
|
||||
userVmResponse.setNetworkKbsRead(userVmData.getNetworkKbsRead());
|
||||
userVmResponse.setNetworkKbsWrite(userVmData.getNetworkKbsWrite());
|
||||
userVmResponse.setGuestOsId(userVmData.getGuestOsId());
|
||||
userVmResponse.setRootDeviceId(userVmData.getRootDeviceId());
|
||||
userVmResponse.setRootDeviceType(userVmData.getRootDeviceType());
|
||||
userVmResponse.setPassword(userVmData.getPassword());
|
||||
userVmResponse.setJobId(userVmData.getJobId());
|
||||
userVmResponse.setJobStatus(userVmData.getJobStatus());
|
||||
userVmResponse.setForVirtualNetwork(userVmData.getForVirtualNetwork());
|
||||
|
||||
Set<SecurityGroupResponse> securityGroupResponse = new HashSet<SecurityGroupResponse>();
|
||||
for (SecurityGroupData sgd : userVmData.getSecurityGroupList()) {
|
||||
if (sgd.getId() != null) {
|
||||
SecurityGroupResponse sgr = new SecurityGroupResponse();
|
||||
sgr.setId(sgd.getId());
|
||||
sgr.setName(sgd.getName());
|
||||
sgr.setDescription(sgd.getDescription());
|
||||
|
||||
Account account = ApiDBUtils.findAccountByNameDomain(sgd.getAccountName(), sgd.getDomainId());
|
||||
if (account != null) {
|
||||
populateAccount(sgr, account.getId());
|
||||
populateDomain(sgr, account.getDomainId());
|
||||
}
|
||||
|
||||
sgr.setObjectName(sgd.getObjectName());
|
||||
securityGroupResponse.add(sgr);
|
||||
}
|
||||
}
|
||||
userVmResponse.setSecurityGroupList(new ArrayList<SecurityGroupResponse>(securityGroupResponse));
|
||||
|
||||
Set<NicResponse> nicResponses = new HashSet<NicResponse>();
|
||||
for (NicData nd : userVmData.getNics()) {
|
||||
NicResponse nr = new NicResponse();
|
||||
nr.setId(nd.getId());
|
||||
nr.setNetworkid(nd.getNetworkid());
|
||||
nr.setNetmask(nd.getNetmask());
|
||||
nr.setGateway(nd.getGateway());
|
||||
nr.setIpaddress(nd.getIpaddress());
|
||||
nr.setIsolationUri(nd.getIsolationUri());
|
||||
nr.setBroadcastUri(nd.getBroadcastUri());
|
||||
nr.setTrafficType(nd.getTrafficType());
|
||||
nr.setType(nd.getType());
|
||||
nr.setIsDefault(nd.getIsDefault());
|
||||
nr.setMacAddress(nd.getMacAddress());
|
||||
nr.setObjectName(nd.getObjectName());
|
||||
nicResponses.add(nr);
|
||||
}
|
||||
userVmResponse.setNics(new ArrayList<NicResponse>(nicResponses));
|
||||
userVmResponse.setPublicIpId(userVmData.getPublicIpId());
|
||||
userVmResponse.setPublicIp(userVmData.getPublicIp());
|
||||
|
||||
//set tag information
|
||||
List<? extends ResourceTag> tags = ApiDBUtils.listByResourceTypeAndId(TaggedResourceType.UserVm, userVmData.getId());
|
||||
List<ResourceTagResponse> tagResponses = new ArrayList<ResourceTagResponse>();
|
||||
for (ResourceTag tag : tags) {
|
||||
ResourceTagResponse tagResponse = createResourceTagResponse(tag, true);
|
||||
tagResponses.add(tagResponse);
|
||||
}
|
||||
userVmResponse.setTags(tagResponses);
|
||||
|
||||
UserVmDetailVO userVmDetail = ApiDBUtils.findPublicKeyByVmId(userVmData.getId());
|
||||
if (userVmDetail != null && userVmDetail.getValue() != null) {
|
||||
String keyPairName = ApiDBUtils.getKeyPairName(userVmDetail.getValue());
|
||||
userVmResponse.setKeyPairName(keyPairName);
|
||||
}
|
||||
|
||||
return userVmResponse;
|
||||
}
|
||||
|
||||
@Override
|
||||
public HypervisorCapabilitiesResponse createHypervisorCapabilitiesResponse(HypervisorCapabilities hpvCapabilities) {
|
||||
HypervisorCapabilitiesResponse hpvCapabilitiesResponse = new HypervisorCapabilitiesResponse();
|
||||
|
|
@ -3355,6 +2896,8 @@ public class ApiResponseHelper implements ResponseGenerator {
|
|||
return hpvCapabilitiesResponse;
|
||||
}
|
||||
|
||||
// TODO: we may need to refactor once ControlledEntityResponse and ControlledEntity id to uuid conversion are all done.
|
||||
// currently code is scattered in
|
||||
private void populateOwner(ControlledEntityResponse response, ControlledEntity object) {
|
||||
Account account = ApiDBUtils.findAccountByIdIncludingRemoved(object.getAccountId());
|
||||
|
||||
|
|
@ -3372,6 +2915,19 @@ public class ApiResponseHelper implements ResponseGenerator {
|
|||
response.setDomainName(domain.getName());
|
||||
}
|
||||
|
||||
public static void populateOwner(ControlledViewEntityResponse response, ControlledViewEntity object) {
|
||||
|
||||
if (object.getAccountType() == Account.ACCOUNT_TYPE_PROJECT) {
|
||||
response.setProjectId(object.getProjectUuid());
|
||||
response.setProjectName(object.getProjectName());
|
||||
} else {
|
||||
response.setAccountName(object.getAccountName());
|
||||
}
|
||||
|
||||
response.setDomainId(object.getDomainUuid());
|
||||
response.setDomainName(object.getDomainName());
|
||||
}
|
||||
|
||||
private void populateAccount(ControlledEntityResponse response, long accountId) {
|
||||
Account account = ApiDBUtils.findAccountByIdIncludingRemoved(accountId);
|
||||
if (account.getType() == Account.ACCOUNT_TYPE_PROJECT) {
|
||||
|
|
|
|||
|
|
@ -78,6 +78,8 @@ import org.apache.http.protocol.ResponseDate;
|
|||
import org.apache.http.protocol.ResponseServer;
|
||||
import org.apache.log4j.Logger;
|
||||
|
||||
import org.apache.cloudstack.api.admin.router.command.ListRoutersCmd;
|
||||
import org.apache.cloudstack.api.user.vm.command.ListVMsCmd;
|
||||
import com.cloud.acl.ControlledEntity;
|
||||
import com.cloud.api.response.ApiResponseSerializer;
|
||||
import com.cloud.api.response.ExceptionResponse;
|
||||
|
|
@ -435,7 +437,7 @@ public class ApiServer implements HttpRequestHandler {
|
|||
|
||||
// if the command is of the listXXXCommand, we will need to also return the
|
||||
// the job id and status if possible
|
||||
if (cmdObj instanceof BaseListCmd) {
|
||||
if (cmdObj instanceof BaseListCmd && !(cmdObj instanceof ListVMsCmd) && !(cmdObj instanceof ListRoutersCmd)) {
|
||||
buildAsyncListResponse((BaseListCmd) cmdObj, caller);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -21,6 +21,7 @@ import java.lang.reflect.Method;
|
|||
import java.lang.reflect.Modifier;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collection;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.regex.Matcher;
|
||||
|
|
@ -210,8 +211,8 @@ public class ApiResponseSerializer {
|
|||
if (isAsync) {
|
||||
sb.append("</jobresult>");
|
||||
}
|
||||
} else if (fieldValue instanceof List<?>) {
|
||||
List<?> subResponseList = (List<Object>) fieldValue;
|
||||
} else if (fieldValue instanceof Collection<?>) {
|
||||
Collection<?> subResponseList = (Collection<Object>) fieldValue;
|
||||
boolean usedUuidList = false;
|
||||
for (Object value : subResponseList) {
|
||||
if (value instanceof ResponseObject) {
|
||||
|
|
|
|||
|
|
@ -198,11 +198,13 @@ import com.cloud.vm.ItWorkDaoImpl;
|
|||
import com.cloud.vm.UserVmManagerImpl;
|
||||
import com.cloud.vm.dao.ConsoleProxyDaoImpl;
|
||||
import com.cloud.vm.dao.DomainRouterDaoImpl;
|
||||
import com.cloud.vm.dao.DomainRouterJoinDaoImpl;
|
||||
import com.cloud.vm.dao.InstanceGroupDaoImpl;
|
||||
import com.cloud.vm.dao.InstanceGroupVMMapDaoImpl;
|
||||
import com.cloud.vm.dao.NicDaoImpl;
|
||||
import com.cloud.vm.dao.SecondaryStorageVmDaoImpl;
|
||||
import com.cloud.vm.dao.UserVmDaoImpl;
|
||||
import com.cloud.vm.dao.UserVmJoinDaoImpl;
|
||||
import com.cloud.vm.dao.UserVmDetailsDaoImpl;
|
||||
import com.cloud.vm.dao.VMInstanceDaoImpl;
|
||||
|
||||
|
|
@ -216,6 +218,8 @@ public class DefaultComponentLibrary extends ComponentLibraryBase implements Com
|
|||
addDao("HostDao", HostDaoImpl.class);
|
||||
addDao("VMInstanceDao", VMInstanceDaoImpl.class);
|
||||
addDao("UserVmDao", UserVmDaoImpl.class);
|
||||
addDao("UserVmJoinDao", UserVmJoinDaoImpl.class);
|
||||
addDao("DomainRouterJoinDao", DomainRouterJoinDaoImpl.class);
|
||||
ComponentInfo<? extends GenericDao<?, ? extends Serializable>> info = addDao("ServiceOfferingDao", ServiceOfferingDaoImpl.class);
|
||||
info.addParameter("cache.size", "50");
|
||||
info.addParameter("cache.time.to.live", "600");
|
||||
|
|
@ -359,6 +363,7 @@ public class DefaultComponentLibrary extends ComponentLibraryBase implements Com
|
|||
if (_daos.size() == 0) {
|
||||
populateDaos();
|
||||
}
|
||||
//FIXME: Incorrect method return definition
|
||||
return _daos;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -98,6 +98,8 @@ 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.response.ExtractResponse;
|
||||
import com.cloud.api.view.vo.DomainRouterJoinVO;
|
||||
import com.cloud.api.view.vo.UserVmJoinVO;
|
||||
import com.cloud.async.AsyncJob;
|
||||
import com.cloud.async.AsyncJobExecutor;
|
||||
import com.cloud.async.AsyncJobManager;
|
||||
|
|
@ -236,6 +238,7 @@ import com.cloud.utils.db.Filter;
|
|||
import com.cloud.utils.db.GlobalLock;
|
||||
import com.cloud.utils.db.JoinBuilder;
|
||||
import com.cloud.utils.db.JoinBuilder.JoinType;
|
||||
import com.cloud.utils.db.SearchCriteria.Func;
|
||||
import com.cloud.utils.db.SearchBuilder;
|
||||
import com.cloud.utils.db.SearchCriteria;
|
||||
import com.cloud.utils.db.Transaction;
|
||||
|
|
@ -258,6 +261,7 @@ import com.cloud.vm.VirtualMachineProfile;
|
|||
import com.cloud.vm.VirtualMachineProfileImpl;
|
||||
import com.cloud.vm.dao.ConsoleProxyDao;
|
||||
import com.cloud.vm.dao.DomainRouterDao;
|
||||
import com.cloud.vm.dao.DomainRouterJoinDao;
|
||||
import com.cloud.vm.dao.InstanceGroupDao;
|
||||
import com.cloud.vm.dao.NicDao;
|
||||
import com.cloud.vm.dao.SecondaryStorageVmDao;
|
||||
|
|
@ -275,6 +279,7 @@ public class ManagementServerImpl implements ManagementServer {
|
|||
private final AlertManager _alertMgr;
|
||||
private final IPAddressDao _publicIpAddressDao;
|
||||
private final DomainRouterDao _routerDao;
|
||||
private final DomainRouterJoinDao _routerJoinDao;
|
||||
private final ConsoleProxyDao _consoleProxyDao;
|
||||
private final ClusterDao _clusterDao;
|
||||
private final SecondaryStorageVmDao _secStorageVmDao;
|
||||
|
|
@ -349,6 +354,7 @@ public class ManagementServerImpl implements ManagementServer {
|
|||
ComponentLocator locator = ComponentLocator.getLocator(Name);
|
||||
_configDao = locator.getDao(ConfigurationDao.class);
|
||||
_routerDao = locator.getDao(DomainRouterDao.class);
|
||||
_routerJoinDao = locator.getDao(DomainRouterJoinDao.class);
|
||||
_eventDao = locator.getDao(EventDao.class);
|
||||
_dcDao = locator.getDao(DataCenterDao.class);
|
||||
_vlanDao = locator.getDao(VlanDao.class);
|
||||
|
|
@ -1635,7 +1641,7 @@ public class ManagementServerImpl implements ManagementServer {
|
|||
}
|
||||
|
||||
@Override
|
||||
public Pair<List<? extends VirtualRouter>, Integer> searchForRouters(ListRoutersCmd cmd) {
|
||||
public Pair<List<DomainRouterJoinVO>, Integer> searchForRouters(ListRoutersCmd cmd) {
|
||||
Long id = cmd.getId();
|
||||
String name = cmd.getRouterName();
|
||||
String state = cmd.getState();
|
||||
|
|
@ -1655,16 +1661,19 @@ public class ManagementServerImpl implements ManagementServer {
|
|||
Long domainId = domainIdRecursiveListProject.first();
|
||||
Boolean isRecursive = domainIdRecursiveListProject.second();
|
||||
ListProjectResourcesCriteria listProjectResourcesCriteria = domainIdRecursiveListProject.third();
|
||||
Filter searchFilter = new Filter(DomainRouterVO.class, "id", true, cmd.getStartIndex(), cmd.getPageSizeVal());
|
||||
SearchBuilder<DomainRouterVO> sb = _routerDao.createSearchBuilder();
|
||||
_accountMgr.buildACLSearchBuilder(sb, domainId, isRecursive, permittedAccounts, listProjectResourcesCriteria);
|
||||
// no default orderBy
|
||||
//Filter searchFilter = new Filter(DomainRouterJoinVO.class, "id", true, cmd.getStartIndex(), cmd.getPageSizeVal());
|
||||
Filter searchFilter = new Filter(DomainRouterJoinVO.class, null, true, cmd.getStartIndex(), cmd.getPageSizeVal());
|
||||
SearchBuilder<DomainRouterJoinVO> sb = _routerJoinDao.createSearchBuilder();
|
||||
sb.select(null, Func.DISTINCT, sb.entity().getId()); // select distinct ids to get number of records with pagination
|
||||
_accountMgr.buildACLViewSearchBuilder(sb, domainId, isRecursive, permittedAccounts, listProjectResourcesCriteria);
|
||||
|
||||
sb.and("name", sb.entity().getHostName(), SearchCriteria.Op.LIKE);
|
||||
sb.and("id", sb.entity().getId(), SearchCriteria.Op.EQ);
|
||||
sb.and("accountId", sb.entity().getAccountId(), SearchCriteria.Op.IN);
|
||||
sb.and("state", sb.entity().getState(), SearchCriteria.Op.EQ);
|
||||
sb.and("dataCenterId", sb.entity().getDataCenterIdToDeployIn(), SearchCriteria.Op.EQ);
|
||||
sb.and("podId", sb.entity().getPodIdToDeployIn(), SearchCriteria.Op.EQ);
|
||||
sb.and("dataCenterId", sb.entity().getDataCenterId(), SearchCriteria.Op.EQ);
|
||||
sb.and("podId", sb.entity().getPodId(), SearchCriteria.Op.EQ);
|
||||
sb.and("hostId", sb.entity().getHostId(), SearchCriteria.Op.EQ);
|
||||
sb.and("vpcId", sb.entity().getVpcId(), SearchCriteria.Op.EQ);
|
||||
|
||||
|
|
@ -1677,20 +1686,14 @@ public class ManagementServerImpl implements ManagementServer {
|
|||
}
|
||||
|
||||
if (networkId != null) {
|
||||
SearchBuilder<NicVO> nicSearch = _nicDao.createSearchBuilder();
|
||||
nicSearch.and("networkId", nicSearch.entity().getNetworkId(), SearchCriteria.Op.EQ);
|
||||
SearchBuilder<NetworkVO> networkSearch = _networkDao.createSearchBuilder();
|
||||
networkSearch.and("networkId", networkSearch.entity().getId(), SearchCriteria.Op.EQ);
|
||||
nicSearch.join("networkSearch", networkSearch, nicSearch.entity().getNetworkId(), networkSearch.entity().getId(), JoinBuilder.JoinType.INNER);
|
||||
|
||||
sb.join("nicSearch", nicSearch, sb.entity().getId(), nicSearch.entity().getInstanceId(), JoinBuilder.JoinType.INNER);
|
||||
sb.and("networkId", sb.entity().getNetworkId(), SearchCriteria.Op.EQ);
|
||||
}
|
||||
|
||||
SearchCriteria<DomainRouterVO> sc = sb.create();
|
||||
_accountMgr.buildACLSearchCriteria(sc, domainId, isRecursive, permittedAccounts, listProjectResourcesCriteria);
|
||||
|
||||
SearchCriteria<DomainRouterJoinVO> sc = sb.create();
|
||||
_accountMgr.buildACLViewSearchCriteria(sc, domainId, isRecursive, permittedAccounts, listProjectResourcesCriteria);
|
||||
|
||||
if (keyword != null) {
|
||||
SearchCriteria<DomainRouterVO> ssc = _routerDao.createSearchCriteria();
|
||||
SearchCriteria<DomainRouterJoinVO> ssc = _routerJoinDao.createSearchCriteria();
|
||||
ssc.addOr("hostName", SearchCriteria.Op.LIKE, "%" + keyword + "%");
|
||||
ssc.addOr("instanceName", SearchCriteria.Op.LIKE, "%" + keyword + "%");
|
||||
ssc.addOr("state", SearchCriteria.Op.LIKE, "%" + keyword + "%");
|
||||
|
|
@ -1730,8 +1733,21 @@ public class ManagementServerImpl implements ManagementServer {
|
|||
sc.setParameters("vpcId", vpcId);
|
||||
}
|
||||
|
||||
Pair<List<DomainRouterVO>, Integer> result = _routerDao.searchAndCount(sc, searchFilter);
|
||||
return new Pair<List<? extends VirtualRouter>, Integer>(result.first(), result.second());
|
||||
// search VR details by ids
|
||||
Pair<List<DomainRouterJoinVO>, Integer> uniqueVrPair = _routerJoinDao.searchAndCount(sc, searchFilter);
|
||||
Integer count = uniqueVrPair.second();
|
||||
if ( count.intValue() == 0 ) {
|
||||
// empty result
|
||||
return uniqueVrPair;
|
||||
}
|
||||
List<DomainRouterJoinVO> uniqueVrs = uniqueVrPair.first();
|
||||
Long[] vrIds = new Long[uniqueVrs.size()];
|
||||
int i = 0;
|
||||
for (DomainRouterJoinVO v : uniqueVrs ){
|
||||
vrIds[i++] = v.getId();
|
||||
}
|
||||
List<DomainRouterJoinVO> vrs = _routerJoinDao.searchByIds(vrIds);
|
||||
return new Pair<List<DomainRouterJoinVO>, Integer>(vrs, count);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
|||
|
|
@ -21,6 +21,7 @@ import java.util.Map;
|
|||
|
||||
import com.cloud.acl.ControlledEntity;
|
||||
import com.cloud.acl.SecurityChecker.AccessType;
|
||||
import com.cloud.api.view.vo.ControlledViewEntity;
|
||||
import com.cloud.domain.Domain;
|
||||
import com.cloud.exception.ConcurrentOperationException;
|
||||
import com.cloud.exception.PermissionDeniedException;
|
||||
|
|
@ -93,9 +94,15 @@ public interface AccountManager extends AccountService {
|
|||
void buildACLSearchBuilder(SearchBuilder<? extends ControlledEntity> sb, Long domainId,
|
||||
boolean isRecursive, List<Long> permittedAccounts, ListProjectResourcesCriteria listProjectResourcesCriteria);
|
||||
|
||||
void buildACLViewSearchBuilder(SearchBuilder<? extends ControlledViewEntity> sb, Long domainId,
|
||||
boolean isRecursive, List<Long> permittedAccounts, ListProjectResourcesCriteria listProjectResourcesCriteria);
|
||||
|
||||
void buildACLSearchCriteria(SearchCriteria<? extends ControlledEntity> sc,
|
||||
Long domainId, boolean isRecursive, List<Long> permittedAccounts, ListProjectResourcesCriteria listProjectResourcesCriteria);
|
||||
|
||||
void buildACLViewSearchCriteria(SearchCriteria<? extends ControlledViewEntity> sc,
|
||||
Long domainId, boolean isRecursive, List<Long> permittedAccounts, ListProjectResourcesCriteria listProjectResourcesCriteria);
|
||||
|
||||
void buildACLSearchParameters(Account caller, Long id,
|
||||
String accountName, Long projectId, List<Long> permittedAccounts, Ternary<Long, Boolean, ListProjectResourcesCriteria> domainIdRecursiveListProject, boolean listAll, boolean forProjectInvitation);
|
||||
|
||||
|
|
|
|||
|
|
@ -41,6 +41,7 @@ import org.apache.commons.codec.binary.Base64;
|
|||
import org.apache.log4j.Logger;
|
||||
|
||||
import com.cloud.acl.ControlledEntity;
|
||||
import com.cloud.api.view.vo.ControlledViewEntity;
|
||||
import com.cloud.acl.SecurityChecker;
|
||||
import com.cloud.acl.SecurityChecker.AccessType;
|
||||
import com.cloud.api.ApiDBUtils;
|
||||
|
|
@ -2380,8 +2381,51 @@ public class AccountManagerImpl implements AccountManager, AccountService, Manag
|
|||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public UserAccount getUserByApiKey(String apiKey) {
|
||||
return _userAccountDao.getUserByApiKey(apiKey);
|
||||
}
|
||||
@Override
|
||||
public void buildACLViewSearchBuilder(SearchBuilder<? extends ControlledViewEntity> sb, Long domainId,
|
||||
boolean isRecursive, List<Long> permittedAccounts, ListProjectResourcesCriteria listProjectResourcesCriteria) {
|
||||
|
||||
sb.and("accountIdIN", sb.entity().getAccountId(), SearchCriteria.Op.IN);
|
||||
sb.and("domainId", sb.entity().getDomainId(), SearchCriteria.Op.EQ);
|
||||
|
||||
if (((permittedAccounts.isEmpty()) && (domainId != null) && isRecursive)) {
|
||||
// if accountId isn't specified, we can do a domain match for the
|
||||
// admin case if isRecursive is true
|
||||
sb.and("domainPath", sb.entity().getDomainPath(), SearchCriteria.Op.LIKE);
|
||||
}
|
||||
|
||||
if (listProjectResourcesCriteria != null) {
|
||||
if (listProjectResourcesCriteria == Project.ListProjectResourcesCriteria.ListProjectResourcesOnly) {
|
||||
sb.and("accountType", sb.entity().getAccountType(), SearchCriteria.Op.EQ);
|
||||
} else if (listProjectResourcesCriteria == Project.ListProjectResourcesCriteria.SkipProjectResources) {
|
||||
sb.and("accountType", sb.entity().getAccountType(), SearchCriteria.Op.NEQ);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void buildACLViewSearchCriteria(SearchCriteria<? extends ControlledViewEntity> sc,
|
||||
Long domainId, boolean isRecursive, List<Long> permittedAccounts, ListProjectResourcesCriteria listProjectResourcesCriteria) {
|
||||
|
||||
if (listProjectResourcesCriteria != null) {
|
||||
sc.setParameters("accountType", Account.ACCOUNT_TYPE_PROJECT);
|
||||
}
|
||||
|
||||
if (!permittedAccounts.isEmpty()) {
|
||||
sc.setParameters("accountIdIN", permittedAccounts.toArray());
|
||||
} else if (domainId != null) {
|
||||
DomainVO domain = _domainDao.findById(domainId);
|
||||
if (isRecursive) {
|
||||
sc.setParameters("domainPath", domain.getPath() + "%");
|
||||
} else {
|
||||
sc.setParameters("domainId", domainId);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public UserAccount getUserByApiKey(String apiKey) {
|
||||
return _userAccountDao.getUserByApiKey(apiKey);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -21,6 +21,7 @@ import java.util.List;
|
|||
import java.util.Map;
|
||||
|
||||
import com.cloud.agent.api.VmStatsEntry;
|
||||
import com.cloud.api.view.vo.UserVmJoinVO;
|
||||
import com.cloud.exception.ConcurrentOperationException;
|
||||
import com.cloud.exception.InsufficientCapacityException;
|
||||
import com.cloud.exception.ResourceUnavailableException;
|
||||
|
|
@ -98,7 +99,7 @@ public interface UserVmManager extends VirtualMachineGuru<UserVmVO>, UserVmServi
|
|||
* @param tags TODO
|
||||
* @return List of UserVMs + count
|
||||
*/
|
||||
Pair<List<UserVmVO>, Integer> searchForUserVMs(Criteria c, Account caller, Long domainId, boolean isRecursive, List<Long> permittedAccounts, boolean listAll, ListProjectResourcesCriteria listProjectResourcesCriteria, Map<String, String> tags);
|
||||
Pair<List<UserVmJoinVO>, Integer> searchForUserVMs(Criteria c, Account caller, Long domainId, boolean isRecursive, List<Long> permittedAccounts, boolean listAll, ListProjectResourcesCriteria listProjectResourcesCriteria, Map<String, String> tags);
|
||||
|
||||
String getChecksum(Long hostId, String templatePath);
|
||||
|
||||
|
|
|
|||
|
|
@ -74,6 +74,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.async.AsyncJobExecutor;
|
||||
import com.cloud.async.AsyncJobManager;
|
||||
import com.cloud.async.AsyncJobVO;
|
||||
|
|
@ -151,6 +152,8 @@ import com.cloud.offerings.dao.NetworkOfferingDao;
|
|||
import com.cloud.org.Cluster;
|
||||
import com.cloud.org.Grouping;
|
||||
import com.cloud.projects.Project.ListProjectResourcesCriteria;
|
||||
import com.cloud.projects.Project;
|
||||
import com.cloud.projects.ProjectInvitationVO;
|
||||
import com.cloud.projects.ProjectManager;
|
||||
import com.cloud.resource.ResourceManager;
|
||||
import com.cloud.resource.ResourceState;
|
||||
|
|
@ -222,6 +225,7 @@ import com.cloud.utils.db.JoinBuilder;
|
|||
import com.cloud.utils.db.SearchBuilder;
|
||||
import com.cloud.utils.db.SearchCriteria;
|
||||
import com.cloud.utils.db.Transaction;
|
||||
import com.cloud.utils.db.SearchCriteria.Func;
|
||||
import com.cloud.utils.exception.CloudRuntimeException;
|
||||
import com.cloud.utils.exception.ExecutionException;
|
||||
import com.cloud.utils.fsm.NoTransitionException;
|
||||
|
|
@ -232,6 +236,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 })
|
||||
|
|
@ -259,6 +264,8 @@ public class UserVmManagerImpl implements UserVmManager, UserVmService, Manager
|
|||
@Inject
|
||||
protected UserVmDao _vmDao = null;
|
||||
@Inject
|
||||
protected UserVmJoinDao _vmJoinDao = null;
|
||||
@Inject
|
||||
protected VolumeDao _volsDao = null;
|
||||
@Inject
|
||||
protected DataCenterDao _dcDao = null;
|
||||
|
|
@ -3040,7 +3047,7 @@ public class UserVmManagerImpl implements UserVmManager, UserVmService, Manager
|
|||
}
|
||||
|
||||
@Override
|
||||
public Pair<List<? extends UserVm>, Integer> searchForUserVMs(ListVMsCmd cmd) {
|
||||
public Pair<List<UserVmJoinVO>, Integer> searchForUserVMs(ListVMsCmd cmd) {
|
||||
Account caller = UserContext.current().getCaller();
|
||||
List<Long> permittedAccounts = new ArrayList<Long>();
|
||||
String hypervisor = cmd.getHypervisor();
|
||||
|
|
@ -3054,7 +3061,9 @@ public class UserVmManagerImpl implements UserVmManager, UserVmService, Manager
|
|||
Boolean isRecursive = domainIdRecursiveListProject.second();
|
||||
ListProjectResourcesCriteria listProjectResourcesCriteria = domainIdRecursiveListProject.third();
|
||||
|
||||
Criteria c = new Criteria("id", Boolean.TRUE, cmd.getStartIndex(), cmd.getPageSizeVal());
|
||||
// removing order by, orderBy shouold be specified in ListVMsCmd parameters
|
||||
//Criteria c = new Criteria("id", Boolean.TRUE, cmd.getStartIndex(), cmd.getPageSizeVal());
|
||||
Criteria c = new Criteria(null, Boolean.FALSE, cmd.getStartIndex(), cmd.getPageSizeVal());
|
||||
c.addCriteria(Criteria.KEYWORD, cmd.getKeyword());
|
||||
c.addCriteria(Criteria.ID, cmd.getId());
|
||||
c.addCriteria(Criteria.NAME, cmd.getInstanceName());
|
||||
|
|
@ -3089,18 +3098,19 @@ public class UserVmManagerImpl implements UserVmManager, UserVmService, Manager
|
|||
}
|
||||
c.addCriteria(Criteria.ISADMIN, _accountMgr.isAdmin(caller.getType()));
|
||||
|
||||
Pair<List<UserVmVO>, Integer> result = searchForUserVMs(c, caller, domainId, isRecursive,
|
||||
return searchForUserVMs(c, caller, domainId, isRecursive,
|
||||
permittedAccounts, listAll, listProjectResourcesCriteria, tags);
|
||||
return new Pair<List<? extends UserVm>, Integer>(result.first(), result.second());
|
||||
}
|
||||
|
||||
@Override
|
||||
public Pair<List<UserVmVO>, Integer> searchForUserVMs(Criteria c, Account caller, Long domainId, boolean isRecursive,
|
||||
public Pair<List<UserVmJoinVO>, Integer> searchForUserVMs(Criteria c, Account caller, Long domainId, boolean isRecursive,
|
||||
List<Long> permittedAccounts, boolean listAll, ListProjectResourcesCriteria listProjectResourcesCriteria, Map<String, String> tags) {
|
||||
Filter searchFilter = new Filter(UserVmVO.class, c.getOrderBy(), c.getAscending(), c.getOffset(), c.getLimit());
|
||||
Filter searchFilter = new Filter(UserVmJoinVO.class, c.getOrderBy(), c.getAscending(), c.getOffset(), c.getLimit());
|
||||
|
||||
SearchBuilder<UserVmVO> sb = _vmDao.createSearchBuilder();
|
||||
_accountMgr.buildACLSearchBuilder(sb, domainId, isRecursive, permittedAccounts, listProjectResourcesCriteria);
|
||||
//first search distinct vm id by using query criteria and pagination
|
||||
SearchBuilder<UserVmJoinVO> sb = _vmJoinDao.createSearchBuilder();
|
||||
sb.select(null, Func.DISTINCT, sb.entity().getId()); // select distinct ids
|
||||
_accountMgr.buildACLViewSearchBuilder(sb, domainId, isRecursive, permittedAccounts, listProjectResourcesCriteria);
|
||||
|
||||
Object id = c.getCriteria(Criteria.ID);
|
||||
Object name = c.getCriteria(Criteria.NAME);
|
||||
|
|
@ -3127,88 +3137,60 @@ public class UserVmManagerImpl implements UserVmManager, UserVmService, Manager
|
|||
sb.and("stateEQ", sb.entity().getState(), SearchCriteria.Op.EQ);
|
||||
sb.and("stateNEQ", sb.entity().getState(), SearchCriteria.Op.NEQ);
|
||||
sb.and("stateNIN", sb.entity().getState(), SearchCriteria.Op.NIN);
|
||||
sb.and("dataCenterId", sb.entity().getDataCenterIdToDeployIn(), SearchCriteria.Op.EQ);
|
||||
sb.and("podId", sb.entity().getPodIdToDeployIn(), SearchCriteria.Op.EQ);
|
||||
sb.and("dataCenterId", sb.entity().getDataCenterId(), SearchCriteria.Op.EQ);
|
||||
sb.and("podId", sb.entity().getPodId(), SearchCriteria.Op.EQ);
|
||||
sb.and("hypervisorType", sb.entity().getHypervisorType(), SearchCriteria.Op.EQ);
|
||||
sb.and("hostIdEQ", sb.entity().getHostId(), SearchCriteria.Op.EQ);
|
||||
sb.and("hostIdIN", sb.entity().getHostId(), SearchCriteria.Op.IN);
|
||||
sb.and("hostName", sb.entity().getHostName(), SearchCriteria.Op.LIKE);
|
||||
sb.and("templateId", sb.entity().getTemplateId(), SearchCriteria.Op.EQ);
|
||||
sb.and("isoId", sb.entity().getTemplateId(), SearchCriteria.Op.EQ);
|
||||
sb.and("isoId", sb.entity().getIsoId(), SearchCriteria.Op.EQ);
|
||||
sb.and("instanceGroupId", sb.entity().getInstanceGroupId(), SearchCriteria.Op.EQ);
|
||||
|
||||
if (groupId != null && (Long) groupId == -1) {
|
||||
SearchBuilder<InstanceGroupVMMapVO> vmSearch = _groupVMMapDao.createSearchBuilder();
|
||||
vmSearch.and("instanceId", vmSearch.entity().getInstanceId(), SearchCriteria.Op.EQ);
|
||||
sb.join("vmSearch", vmSearch, sb.entity().getId(), vmSearch.entity().getInstanceId(), JoinBuilder.JoinType.LEFTOUTER);
|
||||
} else if (groupId != null) {
|
||||
SearchBuilder<InstanceGroupVMMapVO> groupSearch = _groupVMMapDao.createSearchBuilder();
|
||||
groupSearch.and("groupId", groupSearch.entity().getGroupId(), SearchCriteria.Op.EQ);
|
||||
sb.join("groupSearch", groupSearch, sb.entity().getId(), groupSearch.entity().getInstanceId(), JoinBuilder.JoinType.INNER);
|
||||
if (groupId != null && (Long) groupId != -1) {
|
||||
sb.and("instanceGroupId", sb.entity().getInstanceGroupId(), SearchCriteria.Op.EQ);
|
||||
}
|
||||
|
||||
if (tags != null && !tags.isEmpty()) {
|
||||
SearchBuilder<ResourceTagVO> tagSearch = _resourceTagDao.createSearchBuilder();
|
||||
for (int count=0; count < tags.size(); count++) {
|
||||
tagSearch.or().op("key" + String.valueOf(count), tagSearch.entity().getKey(), SearchCriteria.Op.EQ);
|
||||
tagSearch.and("value" + String.valueOf(count), tagSearch.entity().getValue(), SearchCriteria.Op.EQ);
|
||||
tagSearch.cp();
|
||||
sb.or().op("key" + String.valueOf(count), sb.entity().getTagKey(), SearchCriteria.Op.EQ);
|
||||
sb.and("value" + String.valueOf(count), sb.entity().getTagValue(), SearchCriteria.Op.EQ);
|
||||
sb.cp();
|
||||
}
|
||||
tagSearch.and("resourceType", tagSearch.entity().getResourceType(), SearchCriteria.Op.EQ);
|
||||
sb.groupBy(sb.entity().getId());
|
||||
sb.join("tagSearch", tagSearch, sb.entity().getId(), tagSearch.entity().getResourceId(), JoinBuilder.JoinType.INNER);
|
||||
}
|
||||
|
||||
if (networkId != null) {
|
||||
SearchBuilder<NicVO> nicSearch = _nicDao.createSearchBuilder();
|
||||
nicSearch.and("networkId", nicSearch.entity().getNetworkId(), SearchCriteria.Op.EQ);
|
||||
|
||||
SearchBuilder<NetworkVO> networkSearch = _networkDao.createSearchBuilder();
|
||||
networkSearch.and("networkId", networkSearch.entity().getId(), SearchCriteria.Op.EQ);
|
||||
nicSearch.join("networkSearch", networkSearch, nicSearch.entity().getNetworkId(), networkSearch.entity().getId(), JoinBuilder.JoinType.INNER);
|
||||
|
||||
sb.join("nicSearch", nicSearch, sb.entity().getId(), nicSearch.entity().getInstanceId(), JoinBuilder.JoinType.INNER);
|
||||
sb.and("networkId", sb.entity().getNetworkId(), SearchCriteria.Op.EQ);
|
||||
}
|
||||
|
||||
if(vpcId != null && networkId == null){
|
||||
SearchBuilder<NicVO> nicSearch = _nicDao.createSearchBuilder();
|
||||
|
||||
SearchBuilder<NetworkVO> networkSearch = _networkDao.createSearchBuilder();
|
||||
nicSearch.join("networkSearch", networkSearch, nicSearch.entity().getNetworkId(), networkSearch.entity().getId(), JoinBuilder.JoinType.INNER);
|
||||
|
||||
SearchBuilder<VpcVO> vpcSearch = _vpcDao.createSearchBuilder();
|
||||
vpcSearch.and("vpcId", vpcSearch.entity().getId(), SearchCriteria.Op.EQ);
|
||||
networkSearch.join("vpcSearch", vpcSearch, networkSearch.entity().getVpcId(), vpcSearch.entity().getId(), JoinBuilder.JoinType.INNER);
|
||||
|
||||
sb.join("nicSearch", nicSearch, sb.entity().getId(), nicSearch.entity().getInstanceId(), JoinBuilder.JoinType.INNER);
|
||||
sb.and("vpcId", sb.entity().getVpcId(), SearchCriteria.Op.EQ);
|
||||
}
|
||||
|
||||
if (storageId != null) {
|
||||
SearchBuilder<VolumeVO> volumeSearch = _volsDao.createSearchBuilder();
|
||||
volumeSearch.and("poolId", volumeSearch.entity().getPoolId(), SearchCriteria.Op.EQ);
|
||||
sb.join("volumeSearch", volumeSearch, sb.entity().getId(), volumeSearch.entity().getInstanceId(), JoinBuilder.JoinType.INNER);
|
||||
sb.and("poolId", sb.entity().getPoolId(), SearchCriteria.Op.EQ);
|
||||
}
|
||||
|
||||
// populate the search criteria with the values passed in
|
||||
SearchCriteria<UserVmVO> sc = sb.create();
|
||||
_accountMgr.buildACLSearchCriteria(sc, domainId, isRecursive, permittedAccounts, listProjectResourcesCriteria);
|
||||
SearchCriteria<UserVmJoinVO> sc = sb.create();
|
||||
|
||||
// building ACL condition
|
||||
_accountMgr.buildACLViewSearchCriteria(sc, domainId, isRecursive, permittedAccounts, listProjectResourcesCriteria);
|
||||
|
||||
if (tags != null && !tags.isEmpty()) {
|
||||
int count = 0;
|
||||
sc.setJoinParameters("tagSearch", "resourceType", TaggedResourceType.UserVm.toString());
|
||||
for (String key : tags.keySet()) {
|
||||
sc.setJoinParameters("tagSearch", "key" + String.valueOf(count), key);
|
||||
sc.setJoinParameters("tagSearch", "value" + String.valueOf(count), tags.get(key));
|
||||
for (String key : tags.keySet()) {
|
||||
sc.setParameters("key" + String.valueOf(count), key);
|
||||
sc.setParameters("value" + String.valueOf(count), tags.get(key));
|
||||
count++;
|
||||
}
|
||||
}
|
||||
|
||||
if (groupId != null && (Long) groupId == -1) {
|
||||
sc.setJoinParameters("vmSearch", "instanceId", (Object) null);
|
||||
} else if (groupId != null) {
|
||||
sc.setJoinParameters("groupSearch", "groupId", groupId);
|
||||
if (groupId != null && (Long)groupId != -1) {
|
||||
sc.setParameters("instanceGroupId", groupId);
|
||||
}
|
||||
|
||||
if (keyword != null) {
|
||||
SearchCriteria<UserVmVO> ssc = _vmDao.createSearchCriteria();
|
||||
SearchCriteria<UserVmJoinVO> ssc = _vmJoinDao.createSearchCriteria();
|
||||
ssc.addOr("displayName", SearchCriteria.Op.LIKE, "%" + keyword + "%");
|
||||
ssc.addOr("hostName", SearchCriteria.Op.LIKE, "%" + keyword + "%");
|
||||
ssc.addOr("instanceName", SearchCriteria.Op.LIKE, "%" + keyword + "%");
|
||||
|
|
@ -3230,11 +3212,11 @@ public class UserVmManagerImpl implements UserVmManager, UserVmService, Manager
|
|||
}
|
||||
|
||||
if (networkId != null) {
|
||||
sc.setJoinParameters("nicSearch", "networkId", networkId);
|
||||
sc.setParameters("networkId", networkId);
|
||||
}
|
||||
|
||||
if(vpcId != null && networkId == null){
|
||||
sc.setJoinParameters("vpcSearch", "vpcId", vpcId);
|
||||
sc.setParameters("vpcId", vpcId);
|
||||
}
|
||||
|
||||
if (name != null) {
|
||||
|
|
@ -3277,25 +3259,29 @@ public class UserVmManagerImpl implements UserVmManager, UserVmService, Manager
|
|||
sc.setParameters("hostIdEQ", hostId);
|
||||
} else {
|
||||
if (hostName != null) {
|
||||
List<HostVO> hosts = _resourceMgr.listHostsByNameLike((String) hostName);
|
||||
if (hosts != null & !hosts.isEmpty()) {
|
||||
Long[] hostIds = new Long[hosts.size()];
|
||||
for (int i = 0; i < hosts.size(); i++) {
|
||||
HostVO host = hosts.get(i);
|
||||
hostIds[i] = host.getId();
|
||||
}
|
||||
sc.setParameters("hostIdIN", (Object[]) hostIds);
|
||||
} else {
|
||||
return new Pair<List<UserVmVO>, Integer>(new ArrayList<UserVmVO>(), 0);
|
||||
}
|
||||
sc.setParameters("hostName", hostName);
|
||||
}
|
||||
}
|
||||
|
||||
if (storageId != null) {
|
||||
sc.setJoinParameters("volumeSearch", "poolId", storageId);
|
||||
sc.setParameters("poolId", storageId);
|
||||
}
|
||||
|
||||
return _vmDao.searchAndCount(sc, searchFilter);
|
||||
|
||||
// search vm details by ids
|
||||
Pair<List<UserVmJoinVO>, Integer> uniqueVmPair = _vmJoinDao.searchAndCount(sc, searchFilter);
|
||||
Integer count = uniqueVmPair.second();
|
||||
if ( count.intValue() == 0 ){
|
||||
// handle empty result cases
|
||||
return uniqueVmPair;
|
||||
}
|
||||
List<UserVmJoinVO> uniqueVms = uniqueVmPair.first();
|
||||
Long[] vmIds = new Long[uniqueVms.size()];
|
||||
int i = 0;
|
||||
for (UserVmJoinVO v : uniqueVms ){
|
||||
vmIds[i++] = v.getId();
|
||||
}
|
||||
List<UserVmJoinVO> vms = _vmJoinDao.searchByIds(vmIds);
|
||||
return new Pair<List<UserVmJoinVO>, Integer>(vms, count);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
|||
|
|
@ -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 com.cloud.api.response.DomainRouterResponse;
|
||||
import com.cloud.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);
|
||||
}
|
||||
|
|
@ -0,0 +1,231 @@
|
|||
// 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.sql.PreparedStatement;
|
||||
import java.sql.ResultSet;
|
||||
import java.sql.SQLException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.Hashtable;
|
||||
import java.util.List;
|
||||
|
||||
import javax.ejb.Local;
|
||||
|
||||
import org.apache.log4j.Logger;
|
||||
|
||||
import com.cloud.api.ApiDBUtils;
|
||||
import com.cloud.api.ApiResponseHelper;
|
||||
import com.cloud.api.response.DomainRouterResponse;
|
||||
import com.cloud.api.response.NicResponse;
|
||||
import com.cloud.api.response.ResourceTagResponse;
|
||||
import com.cloud.api.response.SecurityGroupResponse;
|
||||
import com.cloud.api.response.UserVmResponse;
|
||||
import com.cloud.api.view.vo.DomainRouterJoinVO;
|
||||
import com.cloud.dc.DataCenter;
|
||||
import com.cloud.network.Network;
|
||||
import com.cloud.network.Networks.TrafficType;
|
||||
import com.cloud.network.router.VirtualRouter;
|
||||
import com.cloud.offering.ServiceOffering;
|
||||
import com.cloud.user.Account;
|
||||
import com.cloud.uservm.UserVm;
|
||||
import com.cloud.utils.Pair;
|
||||
import com.cloud.utils.db.Attribute;
|
||||
import com.cloud.utils.db.DB;
|
||||
import com.cloud.utils.db.Filter;
|
||||
import com.cloud.utils.db.GenericDaoBase;
|
||||
import com.cloud.utils.db.JoinBuilder;
|
||||
import com.cloud.utils.db.SearchBuilder;
|
||||
import com.cloud.utils.db.SearchCriteria;
|
||||
import com.cloud.utils.db.Transaction;
|
||||
import com.cloud.utils.exception.CloudRuntimeException;
|
||||
import com.cloud.vm.NicProfile;
|
||||
|
||||
|
||||
@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) {
|
||||
|
||||
List<DomainRouterJoinVO> uvList = new ArrayList<DomainRouterJoinVO>();
|
||||
SearchCriteria<DomainRouterJoinVO> sc = vrIdSearch.create();
|
||||
sc.setParameters("id", vr.getId());
|
||||
List<DomainRouterJoinVO> vms = searchIncludingRemoved(sc, null, null, false);
|
||||
if (vms != null) {
|
||||
for (DomainRouterJoinVO uvm : vms) {
|
||||
uvList.add(uvm);
|
||||
}
|
||||
}
|
||||
return uvList;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -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 com.cloud.api.ApiConstants.VMDetails;
|
||||
import com.cloud.api.response.UserVmResponse;
|
||||
import com.cloud.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);
|
||||
}
|
||||
|
|
@ -0,0 +1,384 @@
|
|||
// 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.sql.PreparedStatement;
|
||||
import java.sql.ResultSet;
|
||||
import java.sql.SQLException;
|
||||
import java.text.DecimalFormat;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
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 com.cloud.api.ApiConstants.VMDetails;
|
||||
import com.cloud.api.response.NicResponse;
|
||||
import com.cloud.api.response.ResourceTagResponse;
|
||||
import com.cloud.api.response.SecurityGroupResponse;
|
||||
import com.cloud.api.response.UserVmResponse;
|
||||
import com.cloud.api.view.vo.UserVmJoinVO;
|
||||
import com.cloud.user.Account;
|
||||
import com.cloud.uservm.UserVm;
|
||||
import com.cloud.utils.Pair;
|
||||
import com.cloud.utils.db.Attribute;
|
||||
import com.cloud.utils.db.DB;
|
||||
import com.cloud.utils.db.Filter;
|
||||
import com.cloud.utils.db.GenericDaoBase;
|
||||
import com.cloud.utils.db.JoinBuilder;
|
||||
import com.cloud.utils.db.SearchBuilder;
|
||||
import com.cloud.utils.db.SearchCriteria;
|
||||
import com.cloud.utils.db.Transaction;
|
||||
import com.cloud.utils.exception.CloudRuntimeException;
|
||||
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.getSecurityGroupId()); // TODO: change
|
||||
// SecurityGroupResponse
|
||||
// IdentityProxy
|
||||
resp.setName(userVm.getSecurityGroupName());
|
||||
resp.setDescription(userVm.getSecurityGroupDescription());
|
||||
resp.setObjectName("securitygroup");
|
||||
if (userVm.getAccountType() == Account.ACCOUNT_TYPE_PROJECT) {
|
||||
resp.setProjectId(userVm.getProjectId()); // TODO: pending
|
||||
// SecurityGroupResponse
|
||||
// uuid change
|
||||
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) {
|
||||
ResourceTagResponse tag = new ResourceTagResponse();
|
||||
tag.setKey(userVm.getTagKey());
|
||||
tag.setValue(userVm.getTagValue());
|
||||
if (userVm.getTagResourceType() != null) {
|
||||
tag.setResourceType(userVm.getTagResourceType().toString());
|
||||
}
|
||||
tag.setId(userVm.getTagResourceUuid()); // tag resource uuid
|
||||
tag.setCustomer(userVm.getTagCustomer());
|
||||
// TODO: assuming tagAccountId and tagDomainId are the same as VM
|
||||
// accountId and domainId
|
||||
tag.setDomainId(userVm.getTagDomainId());
|
||||
if (userVm.getAccountType() == Account.ACCOUNT_TYPE_PROJECT) {
|
||||
tag.setProjectId(userVm.getProjectId());
|
||||
tag.setProjectName(userVm.getProjectName());
|
||||
} else {
|
||||
tag.setAccountName(userVm.getAccountName());
|
||||
}
|
||||
tag.setDomainId(userVm.getDomainId()); // TODO: pending tag resource
|
||||
// response uuid change
|
||||
tag.setDomainName(userVm.getDomainName());
|
||||
|
||||
tag.setObjectName("tag");
|
||||
userVmResponse.addTag(tag);
|
||||
}
|
||||
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.getSecurityGroupId()); // TODO: change
|
||||
// SecurityGroupResponse
|
||||
// IdentityProxy
|
||||
resp.setName(uvo.getSecurityGroupName());
|
||||
resp.setDescription(uvo.getSecurityGroupDescription());
|
||||
resp.setObjectName("securitygroup");
|
||||
if (uvo.getAccountType() == Account.ACCOUNT_TYPE_PROJECT) {
|
||||
resp.setProjectId(uvo.getProjectId()); // TODO: pending
|
||||
// SecurityGroupResponse
|
||||
// uuid change
|
||||
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) {
|
||||
ResourceTagResponse tag = new ResourceTagResponse();
|
||||
tag.setKey(uvo.getTagKey());
|
||||
tag.setValue(uvo.getTagValue());
|
||||
if (uvo.getTagResourceType() != null) {
|
||||
tag.setResourceType(uvo.getTagResourceType().toString());
|
||||
}
|
||||
tag.setId(uvo.getTagResourceUuid()); // tag resource uuid
|
||||
tag.setCustomer(uvo.getTagCustomer());
|
||||
// TODO: assuming tagAccountId and tagDomainId are the same as VM
|
||||
// accountId and domainId
|
||||
tag.setDomainId(uvo.getTagDomainId());
|
||||
if (uvo.getAccountType() == Account.ACCOUNT_TYPE_PROJECT) {
|
||||
tag.setProjectId(uvo.getProjectId());
|
||||
tag.setProjectName(uvo.getProjectName());
|
||||
} else {
|
||||
tag.setAccountName(uvo.getAccountName());
|
||||
}
|
||||
tag.setDomainId(uvo.getDomainId()); // TODO: pending tag resource
|
||||
// response uuid change
|
||||
tag.setDomainName(uvo.getDomainName());
|
||||
|
||||
tag.setObjectName("tag");
|
||||
userVmData.addTag(tag);
|
||||
}
|
||||
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;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -153,7 +153,7 @@ public class KeystoreTest extends TestCase {
|
|||
*/
|
||||
public void testUuid() {
|
||||
UserVmResponse vm = new UserVmResponse();
|
||||
vm.setId(3L);
|
||||
vm.setId(Long.toString(3L));
|
||||
/*
|
||||
vm.setAccountName("admin");
|
||||
vm.setName("i-2-3-KY");
|
||||
|
|
|
|||
|
|
@ -30,6 +30,7 @@ import org.apache.cloudstack.api.user.account.command.ListAccountsCmd;
|
|||
import com.cloud.api.commands.RegisterCmd;
|
||||
import com.cloud.api.commands.UpdateAccountCmd;
|
||||
import org.apache.cloudstack.api.admin.user.command.UpdateUserCmd;
|
||||
import com.cloud.api.view.vo.ControlledViewEntity;
|
||||
import com.cloud.domain.Domain;
|
||||
import com.cloud.exception.ConcurrentOperationException;
|
||||
import com.cloud.exception.PermissionDeniedException;
|
||||
|
|
@ -334,6 +335,18 @@ public class MockAccountManagerImpl implements Manager, AccountManager, AccountS
|
|||
// TODO Auto-generated method stub
|
||||
}
|
||||
|
||||
@Override
|
||||
public void buildACLViewSearchBuilder(SearchBuilder<? extends ControlledViewEntity> sb, Long domainId,
|
||||
boolean isRecursive, List<Long> permittedAccounts, ListProjectResourcesCriteria listProjectResourcesCriteria) {
|
||||
// TODO Auto-generated method stub
|
||||
}
|
||||
|
||||
@Override
|
||||
public void buildACLViewSearchCriteria(SearchCriteria<? extends ControlledViewEntity> sc, Long domainId,
|
||||
boolean isRecursive, List<Long> permittedAccounts, ListProjectResourcesCriteria listProjectResourcesCriteria) {
|
||||
// TODO Auto-generated method stub
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see com.cloud.user.AccountService#getUserByApiKey(java.lang.String)
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -44,6 +44,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.deploy.DeployDestination;
|
||||
import com.cloud.exception.ConcurrentOperationException;
|
||||
|
|
@ -192,7 +193,7 @@ public class MockUserVmManagerImpl implements UserVmManager, UserVmService, Mana
|
|||
}
|
||||
|
||||
@Override
|
||||
public Pair<List<UserVmVO>, Integer> searchForUserVMs(Criteria c, Account caller, Long domainId, boolean isRecursive, List<Long> permittedAccounts, boolean listAll, ListProjectResourcesCriteria listProjectResourcesCriteria, Map<String, String> tags) {
|
||||
public Pair<List<UserVmJoinVO>, Integer> searchForUserVMs(Criteria c, Account caller, Long domainId, boolean isRecursive, List<Long> permittedAccounts, boolean listAll, ListProjectResourcesCriteria listProjectResourcesCriteria, Map<String, String> tags) {
|
||||
// TODO Auto-generated method stub
|
||||
return null;
|
||||
}
|
||||
|
|
@ -401,7 +402,7 @@ public class MockUserVmManagerImpl implements UserVmManager, UserVmService, Mana
|
|||
}
|
||||
|
||||
@Override
|
||||
public Pair<List<? extends UserVm>, Integer> searchForUserVMs(ListVMsCmd cmd) {
|
||||
public Pair<List<UserVmJoinVO>, Integer> searchForUserVMs(ListVMsCmd cmd) {
|
||||
// TODO Auto-generated method stub
|
||||
return null;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2510,3 +2510,218 @@ INSERT INTO `cloud`.`counter` (id, source, name, value,created) VALUES (3,'snmp'
|
|||
INSERT INTO `cloud`.`counter` (id, source, name, value,created) VALUES (100,'netscaler','Response Time - microseconds', 'RESPTIME', now());
|
||||
|
||||
SET foreign_key_checks = 1;
|
||||
|
||||
|
||||
--- DB views for list api ---
|
||||
DROP VIEW IF EXISTS `cloud`.`user_vm_view`;
|
||||
CREATE VIEW `cloud`.`user_vm_view` AS
|
||||
select
|
||||
vm_instance.id id,
|
||||
vm_instance.name name,
|
||||
user_vm.display_name display_name,
|
||||
user_vm.user_data user_data,
|
||||
account.id account_id,
|
||||
account.uuid account_uuid,
|
||||
account.account_name account_name,
|
||||
account.type account_type,
|
||||
domain.id domain_id,
|
||||
domain.uuid domain_uuid,
|
||||
domain.name domain_name,
|
||||
domain.path domain_path,
|
||||
projects.id project_id,
|
||||
projects.uuid project_uuid,
|
||||
projects.name project_name,
|
||||
instance_group.id instance_group_id,
|
||||
instance_group.uuid instance_group_uuid,
|
||||
instance_group.name instance_group_name,
|
||||
vm_instance.uuid uuid,
|
||||
vm_instance.last_host_id last_host_id,
|
||||
vm_instance.vm_type type,
|
||||
vm_instance.vnc_password vnc_password,
|
||||
vm_instance.limit_cpu_use limit_cpu_use,
|
||||
vm_instance.created created,
|
||||
vm_instance.state state,
|
||||
vm_instance.removed removed,
|
||||
vm_instance.ha_enabled ha_enabled,
|
||||
vm_instance.hypervisor_type hypervisor_type,
|
||||
vm_instance.instance_name instance_name,
|
||||
vm_instance.guest_os_id guest_os_id,
|
||||
guest_os.uuid guest_os_uuid,
|
||||
vm_instance.pod_id pod_id,
|
||||
host_pod_ref.uuid pod_uuid,
|
||||
vm_instance.private_ip_address private_ip_address,
|
||||
vm_instance.private_mac_address private_mac_address,
|
||||
vm_instance.vm_type vm_type,
|
||||
data_center.id data_center_id,
|
||||
data_center.uuid data_center_uuid,
|
||||
data_center.name data_center_name,
|
||||
data_center.is_security_group_enabled security_group_enabled,
|
||||
host.id host_id,
|
||||
host.uuid host_uuid,
|
||||
host.name host_name,
|
||||
vm_template.id template_id,
|
||||
vm_template.uuid template_uuid,
|
||||
vm_template.name template_name,
|
||||
vm_template.display_text template_display_text,
|
||||
vm_template.enable_password password_enabled,
|
||||
iso.id iso_id,
|
||||
iso.uuid iso_uuid,
|
||||
iso.name iso_name,
|
||||
iso.display_text iso_display_text,
|
||||
service_offering.id service_offering_id,
|
||||
disk_offering.uuid service_offering_uuid,
|
||||
service_offering.cpu cpu,
|
||||
service_offering.speed speed,
|
||||
service_offering.ram_size ram_size,
|
||||
disk_offering.name service_offering_name,
|
||||
storage_pool.id pool_id,
|
||||
storage_pool.uuid pool_uuid,
|
||||
storage_pool.pool_type pool_type,
|
||||
volumes.id volume_id,
|
||||
volumes.uuid volume_uuid,
|
||||
volumes.device_id volume_device_id,
|
||||
volumes.volume_type volume_type,
|
||||
security_group.id security_group_id,
|
||||
security_group.uuid security_group_uuid,
|
||||
security_group.name security_group_name,
|
||||
security_group.description security_group_description,
|
||||
nics.id nic_id,
|
||||
nics.uuid nic_uuid,
|
||||
nics.network_id network_id,
|
||||
nics.ip4_address ip_address,
|
||||
nics.default_nic is_default_nic,
|
||||
nics.gateway gateway,
|
||||
nics.netmask netmask,
|
||||
nics.mac_address mac_address,
|
||||
nics.broadcast_uri broadcast_uri,
|
||||
nics.isolation_uri isolation_uri,
|
||||
vpc.id vpc_id,
|
||||
vpc.uuid vpc_uuid,
|
||||
networks.uuid network_uuid,
|
||||
networks.traffic_type traffic_type,
|
||||
networks.guest_type guest_type,
|
||||
user_ip_address.id public_ip_id,
|
||||
user_ip_address.uuid public_ip_uuid,
|
||||
user_ip_address.public_ip_address public_ip_address,
|
||||
ssh_keypairs.keypair_name keypair_name,
|
||||
resource_tags.id tag_id,
|
||||
resource_tags.uuid tag_uuid,
|
||||
resource_tags.key tag_key,
|
||||
resource_tags.value tag_value,
|
||||
resource_tags.domain_id tag_domain_id,
|
||||
resource_tags.account_id tag_account_id,
|
||||
resource_tags.resource_id tag_resource_id,
|
||||
resource_tags.resource_uuid tag_resource_uuid,
|
||||
resource_tags.resource_type tag_resource_type,
|
||||
resource_tags.customer tag_customer,
|
||||
async_job.id job_id,
|
||||
async_job.uuid job_uuid,
|
||||
async_job.job_status job_status,
|
||||
async_job.account_id job_account_id
|
||||
from user_vm
|
||||
inner join vm_instance on vm_instance.id = user_vm.id and vm_instance.removed is NULL
|
||||
inner join account on vm_instance.account_id=account.id
|
||||
inner join domain on vm_instance.domain_id=domain.id
|
||||
left join guest_os on vm_instance.guest_os_id = guest_os.id
|
||||
left join host_pod_ref on vm_instance.pod_id = host_pod_ref.id
|
||||
left join projects on projects.project_account_id = account.id
|
||||
left join instance_group_vm_map on vm_instance.id=instance_group_vm_map.instance_id
|
||||
left join instance_group on instance_group_vm_map.group_id=instance_group.id
|
||||
left join data_center on vm_instance.data_center_id=data_center.id
|
||||
left join host on vm_instance.host_id=host.id
|
||||
left join vm_template on vm_instance.vm_template_id=vm_template.id
|
||||
left join vm_template iso on iso.id=user_vm.iso_id
|
||||
left join service_offering on vm_instance.service_offering_id=service_offering.id
|
||||
left join disk_offering on vm_instance.service_offering_id=disk_offering.id
|
||||
left join volumes on vm_instance.id=volumes.instance_id
|
||||
left join storage_pool on volumes.pool_id=storage_pool.id
|
||||
left join security_group_vm_map on vm_instance.id=security_group_vm_map.instance_id
|
||||
left join security_group on security_group_vm_map.security_group_id=security_group.id
|
||||
left join nics on vm_instance.id=nics.instance_id
|
||||
left join networks on nics.network_id=networks.id
|
||||
left join vpc on networks.vpc_id = vpc.id
|
||||
left join user_ip_address on user_ip_address.vm_id=vm_instance.id
|
||||
left join user_vm_details on user_vm_details.vm_id=vm_instance.id and user_vm_details.name = "SSH.PublicKey"
|
||||
left join ssh_keypairs on ssh_keypairs.public_key = user_vm_details.value
|
||||
left join resource_tags on resource_tags.resource_id = vm_instance.id and resource_tags.resource_type = "UserVm"
|
||||
left join async_job on async_job.instance_id = vm_instance.id and async_job.instance_type = "VirtualMachine" and async_job.job_status = 0;
|
||||
|
||||
DROP VIEW IF EXISTS `cloud`.`domain_router_view`;
|
||||
CREATE VIEW domain_router_view AS
|
||||
select
|
||||
vm_instance.id id,
|
||||
vm_instance.name name,
|
||||
account.id account_id,
|
||||
account.uuid account_uuid,
|
||||
account.account_name account_name,
|
||||
account.type account_type,
|
||||
domain.id domain_id,
|
||||
domain.uuid domain_uuid,
|
||||
domain.name domain_name,
|
||||
domain.path domain_path,
|
||||
projects.id project_id,
|
||||
projects.uuid project_uuid,
|
||||
projects.name project_name,
|
||||
vm_instance.uuid uuid,
|
||||
vm_instance.created created,
|
||||
vm_instance.state state,
|
||||
vm_instance.removed removed,
|
||||
vm_instance.pod_id pod_id,
|
||||
vm_instance.instance_name instance_name,
|
||||
host_pod_ref.uuid pod_uuid,
|
||||
data_center.id data_center_id,
|
||||
data_center.uuid data_center_uuid,
|
||||
data_center.name data_center_name,
|
||||
data_center.dns1 dns1,
|
||||
data_center.dns2 dns2,
|
||||
host.id host_id,
|
||||
host.uuid host_uuid,
|
||||
host.name host_name,
|
||||
vm_template.id template_id,
|
||||
vm_template.uuid template_uuid,
|
||||
service_offering.id service_offering_id,
|
||||
disk_offering.uuid service_offering_uuid,
|
||||
disk_offering.name service_offering_name,
|
||||
nics.id nic_id,
|
||||
nics.uuid nic_uuid,
|
||||
nics.network_id network_id,
|
||||
nics.ip4_address ip_address,
|
||||
nics.default_nic is_default_nic,
|
||||
nics.gateway gateway,
|
||||
nics.netmask netmask,
|
||||
nics.mac_address mac_address,
|
||||
nics.broadcast_uri broadcast_uri,
|
||||
nics.isolation_uri isolation_uri,
|
||||
vpc.id vpc_id,
|
||||
vpc.uuid vpc_uuid,
|
||||
networks.uuid network_uuid,
|
||||
networks.name network_name,
|
||||
networks.network_domain network_domain,
|
||||
networks.traffic_type traffic_type,
|
||||
networks.guest_type guest_type,
|
||||
async_job.id job_id,
|
||||
async_job.uuid job_uuid,
|
||||
async_job.job_status job_status,
|
||||
async_job.account_id job_account_id,
|
||||
domain_router.template_version template_version,
|
||||
domain_router.scripts_version scripts_version,
|
||||
domain_router.is_redundant_router is_redundant_router,
|
||||
domain_router.redundant_state redundant_state,
|
||||
domain_router.stop_pending stop_pending
|
||||
from domain_router
|
||||
inner join vm_instance on vm_instance.id = domain_router.id
|
||||
inner join account on vm_instance.account_id=account.id
|
||||
inner join domain on vm_instance.domain_id=domain.id
|
||||
left join host_pod_ref on vm_instance.pod_id = host_pod_ref.id
|
||||
left join projects on projects.project_account_id = account.id
|
||||
left join data_center on vm_instance.data_center_id=data_center.id
|
||||
left join host on vm_instance.host_id=host.id
|
||||
left join vm_template on vm_instance.vm_template_id=vm_template.id
|
||||
left join service_offering on vm_instance.service_offering_id=service_offering.id
|
||||
left join disk_offering on vm_instance.service_offering_id=disk_offering.id
|
||||
left join volumes on vm_instance.id=volumes.instance_id
|
||||
left join storage_pool on volumes.pool_id=storage_pool.id
|
||||
left join nics on vm_instance.id=nics.instance_id
|
||||
left join networks on nics.network_id=networks.id
|
||||
left join vpc on networks.vpc_id = vpc.id
|
||||
left join async_job on async_job.instance_id = vm_instance.id and async_job.instance_type = "DomainRouter" and async_job.job_status = 0;
|
||||
|
|
|
|||
|
|
@ -50,6 +50,7 @@ import javax.persistence.EmbeddedId;
|
|||
import javax.persistence.EntityExistsException;
|
||||
import javax.persistence.EnumType;
|
||||
import javax.persistence.Enumerated;
|
||||
import javax.persistence.Table;
|
||||
import javax.persistence.TableGenerator;
|
||||
|
||||
import net.sf.cglib.proxy.Callback;
|
||||
|
|
@ -1653,6 +1654,13 @@ public abstract class GenericDaoBase<T, ID extends Serializable> implements Gene
|
|||
@DB(txn=false)
|
||||
protected void setField(final Object entity, final ResultSet rs, ResultSetMetaData meta, final int index) throws SQLException {
|
||||
Attribute attr = _allColumns.get(new Pair<String, String>(meta.getTableName(index), meta.getColumnName(index)));
|
||||
if ( attr == null ){
|
||||
// work around for mysql bug to return original table name instead of view name in db view case
|
||||
Table tbl = entity.getClass().getSuperclass().getAnnotation(Table.class);
|
||||
if ( tbl != null ){
|
||||
attr = _allColumns.get(new Pair<String, String>(tbl.name(), meta.getColumnLabel(index)));
|
||||
}
|
||||
}
|
||||
assert (attr != null) : "How come I can't find " + meta.getCatalogName(index) + "." + meta.getColumnName(index);
|
||||
setField(entity, attr.field, rs, index);
|
||||
}
|
||||
|
|
@ -1798,7 +1806,8 @@ public abstract class GenericDaoBase<T, ID extends Serializable> implements Gene
|
|||
}
|
||||
}
|
||||
|
||||
List<Object> groupByValues = addGroupBy(str, sc);
|
||||
// we have to disable group by in getting count, since count for groupBy clause will be different.
|
||||
//List<Object> groupByValues = addGroupBy(str, sc);
|
||||
final Transaction txn = Transaction.currentTxn();
|
||||
final String sql = str.toString();
|
||||
|
||||
|
|
@ -1816,11 +1825,13 @@ public abstract class GenericDaoBase<T, ID extends Serializable> implements Gene
|
|||
i = addJoinAttributes(i, pstmt, joins);
|
||||
}
|
||||
|
||||
/*
|
||||
if (groupByValues != null) {
|
||||
for (Object value : groupByValues) {
|
||||
pstmt.setObject(i++, value);
|
||||
}
|
||||
}
|
||||
*/
|
||||
|
||||
final ResultSet rs = pstmt.executeQuery();
|
||||
while (rs.next()) {
|
||||
|
|
|
|||
Loading…
Reference in New Issue