From 073863249abf36b6879359889f5731984391fa41 Mon Sep 17 00:00:00 2001 From: Prachi Damle Date: Thu, 29 Nov 2012 16:09:47 -0800 Subject: [PATCH 001/421] Some ACL POC work Conflicts: server/src/com/cloud/api/ApiDispatcher.java --- api/src/com/cloud/api/ACL.java | 31 +++++ .../com/cloud/api/commands/DeployVMCmd.java | 9 ++ server/src/com/cloud/api/ApiDispatcher.java | 127 +++++++++++++++++- server/src/com/cloud/api/ApiServer.java | 11 +- 4 files changed, 173 insertions(+), 5 deletions(-) create mode 100644 api/src/com/cloud/api/ACL.java diff --git a/api/src/com/cloud/api/ACL.java b/api/src/com/cloud/api/ACL.java new file mode 100644 index 00000000000..1f376e9c3a6 --- /dev/null +++ b/api/src/com/cloud/api/ACL.java @@ -0,0 +1,31 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. +package com.cloud.api; + +import static java.lang.annotation.ElementType.FIELD; + +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +@Retention(RetentionPolicy.RUNTIME) +@Target({ FIELD }) +public @interface ACL { + + + Class resourceType(); +} diff --git a/api/src/com/cloud/api/commands/DeployVMCmd.java b/api/src/com/cloud/api/commands/DeployVMCmd.java index f67ee8f6003..da9f3ea7431 100644 --- a/api/src/com/cloud/api/commands/DeployVMCmd.java +++ b/api/src/com/cloud/api/commands/DeployVMCmd.java @@ -26,6 +26,7 @@ import java.util.Map; import org.apache.log4j.Logger; +import com.cloud.api.ACL; import com.cloud.api.ApiConstants; import com.cloud.api.BaseAsyncCreateCmd; import com.cloud.api.BaseCmd; @@ -43,7 +44,10 @@ import com.cloud.exception.InsufficientCapacityException; import com.cloud.exception.InvalidParameterValueException; import com.cloud.exception.ResourceAllocationException; import com.cloud.exception.ResourceUnavailableException; +import com.cloud.host.Host; import com.cloud.hypervisor.Hypervisor.HypervisorType; +import com.cloud.network.Network; +import com.cloud.network.security.SecurityGroup; import com.cloud.offering.DiskOffering; import com.cloud.offering.ServiceOffering; import com.cloud.template.VirtualMachineTemplate; @@ -69,6 +73,7 @@ public class DeployVMCmd extends BaseAsyncCreateCmd { @Parameter(name=ApiConstants.SERVICE_OFFERING_ID, type=CommandType.LONG, required=true, description="the ID of the service offering for the virtual machine") private Long serviceOfferingId; + @ACL(resourceType=VirtualMachineTemplate.class) @IdentityMapper(entityTableName="vm_template") @Parameter(name=ApiConstants.TEMPLATE_ID, type=CommandType.LONG, required=true, description="the ID of the template for the virtual machine") private Long templateId; @@ -88,6 +93,7 @@ public class DeployVMCmd extends BaseAsyncCreateCmd { private Long domainId; //Network information + @ACL(resourceType=Network.class) @IdentityMapper(entityTableName="networks") @Parameter(name=ApiConstants.NETWORK_IDS, type=CommandType.LIST, collectionType=CommandType.LONG, description="list of network ids used by virtual machine. Can't be specified with ipToNetworkList parameter") private List networkIds; @@ -112,14 +118,17 @@ public class DeployVMCmd extends BaseAsyncCreateCmd { @Parameter(name=ApiConstants.SSH_KEYPAIR, type=CommandType.STRING, description="name of the ssh key pair used to login to the virtual machine") private String sshKeyPairName; + //@ACL(resourceType=Host.class) @IdentityMapper(entityTableName="host") @Parameter(name=ApiConstants.HOST_ID, type=CommandType.LONG, description="destination Host ID to deploy the VM to - parameter available for root admin only") private Long hostId; + //@ACL(resourceType=SecurityGroup.class) @IdentityMapper(entityTableName="security_group") @Parameter(name=ApiConstants.SECURITY_GROUP_IDS, type=CommandType.LIST, collectionType=CommandType.LONG, description="comma separated list of security groups id that going to be applied to the virtual machine. Should be passed only when vm is created from a zone with Basic Network support. Mutually exclusive with securitygroupnames parameter") private List securityGroupIdList; + //@ACL(resourceType=SecurityGroup.class) @Parameter(name=ApiConstants.SECURITY_GROUP_NAMES, type=CommandType.LIST, collectionType=CommandType.STRING, description="comma separated list of security groups names that going to be applied to the virtual machine. Should be passed only when vm is created from a zone with Basic Network support. Mutually exclusive with securitygroupids parameter") private List securityGroupNameList; diff --git a/server/src/com/cloud/api/ApiDispatcher.java b/server/src/com/cloud/api/ApiDispatcher.java index dfe4a1fc789..471dfc4b641 100755 --- a/server/src/com/cloud/api/ApiDispatcher.java +++ b/server/src/com/cloud/api/ApiDispatcher.java @@ -22,6 +22,7 @@ import java.text.ParseException; import java.util.ArrayList; import java.util.Calendar; import java.util.Date; +import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.StringTokenizer; @@ -29,6 +30,7 @@ import java.util.regex.Matcher; import org.apache.log4j.Logger; +import com.cloud.acl.ControlledEntity; import com.cloud.api.BaseCmd.CommandType; import com.cloud.api.commands.ListEventsCmd; import com.cloud.async.AsyncCommandQueued; @@ -42,14 +44,19 @@ import com.cloud.exception.PermissionDeniedException; import com.cloud.exception.ResourceAllocationException; import com.cloud.exception.ResourceUnavailableException; import com.cloud.utils.IdentityProxy; +import com.cloud.network.dao.NetworkDao; import com.cloud.server.ManagementServer; +import com.cloud.storage.dao.VMTemplateDao; import com.cloud.user.Account; +import com.cloud.user.AccountManager; +import com.cloud.user.AccountService; import com.cloud.user.UserContext; import com.cloud.utils.DateUtil; import com.cloud.utils.IdentityProxy; import com.cloud.utils.NumbersUtil; import com.cloud.utils.component.ComponentLocator; import com.cloud.utils.component.PluggableService; +import com.cloud.utils.db.GenericDao; import com.cloud.utils.exception.CSExceptionErrorCode; import com.cloud.utils.exception.CloudRuntimeException; import com.cloud.uuididentity.dao.IdentityDao; @@ -64,7 +71,10 @@ public class ApiDispatcher { AsyncJobManager _asyncMgr; IdentityDao _identityDao; Long _createSnapshotQueueSizeLimit; + AccountManager _accountMgr; + + Map> _daoNameMap = new HashMap>(); // singleton class private static ApiDispatcher s_instance = new ApiDispatcher(); @@ -76,6 +86,7 @@ public class ApiDispatcher { _locator = ComponentLocator.getLocator(ManagementServer.Name); _asyncMgr = _locator.getManager(AsyncJobManager.class); _identityDao = _locator.getDao(IdentityDao.class); + ConfigurationDao configDao = _locator.getDao(ConfigurationDao.class); Map configs = configDao.getConfiguration(); String strSnapshotLimit = configs.get(Config.ConcurrentSnapshotsThresholdPerHost.key()); @@ -88,13 +99,30 @@ public class ApiDispatcher { _createSnapshotQueueSizeLimit = snapshotLimit; } } + _accountMgr = _locator.getManager(AccountManager.class); + + _daoNameMap.put("com.cloud.network.Network", NetworkDao.class); + _daoNameMap.put("com.cloud.template.VirtualMachineTemplate", VMTemplateDao.class); + + } public void dispatchCreateCmd(BaseAsyncCreateCmd cmd, Map params) { - setupParameters(cmd, params); + List entitiesToAccess = new ArrayList(); + setupParameters(cmd, params, entitiesToAccess); plugService(cmd); + if(!entitiesToAccess.isEmpty()){ + //owner + Account caller = UserContext.current().getCaller(); + Account owner = s_instance._accountMgr.getActiveAccountById(cmd.getEntityOwnerId()); + s_instance._accountMgr.checkAccess(caller, null, true, owner); + + for(ControlledEntity entity : entitiesToAccess) + s_instance._accountMgr.checkAccess(caller, null, true, entity); + } + try { UserContext ctx = UserContext.current(); ctx.setAccountId(cmd.getEntityOwnerId()); @@ -135,8 +163,19 @@ public class ApiDispatcher { } public void dispatch(BaseCmd cmd, Map params) { - setupParameters(cmd, params); + List entitiesToAccess = new ArrayList(); + setupParameters(cmd, params, entitiesToAccess); ApiDispatcher.plugService(cmd); + + if(!entitiesToAccess.isEmpty()){ + //owner + Account caller = UserContext.current().getCaller(); + Account owner = s_instance._accountMgr.getActiveAccountById(cmd.getEntityOwnerId()); + s_instance._accountMgr.checkAccess(caller, null, true, owner); + for(ControlledEntity entity : entitiesToAccess) + s_instance._accountMgr.checkAccess(caller, null, true, entity); + } + try { UserContext ctx = UserContext.current(); ctx.setAccountId(cmd.getEntityOwnerId()); @@ -299,8 +338,10 @@ public class ApiDispatcher { } } - public static void setupParameters(BaseCmd cmd, Map params) { + @SuppressWarnings({ "unchecked", "rawtypes" }) + public static void setupParameters(BaseCmd cmd, Map params, List entitiesToAccess) { Map unpackedParams = cmd.unpackParams(params); + if (cmd instanceof BaseListCmd) { Object pageSizeObj = unpackedParams.get(ApiConstants.PAGE_SIZE); @@ -368,12 +409,90 @@ public class ApiDispatcher { throw new ServerApiException(BaseCmd.PARAM_ERROR, "Unable to execute API command " + cmd.getCommandName().substring(0, cmd.getCommandName().length() - 8) + " due to invalid value. " + invEx.getMessage()); } catch (CloudRuntimeException cloudEx) { // FIXME: Better error message? This only happens if the API command is not executable, which typically -// means + //means // there was // and IllegalAccessException setting one of the parameters. throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Internal error executing API command " + cmd.getCommandName().substring(0, cmd.getCommandName().length() - 8)); } + + + //check access on the resource this field points to + try { + ACL checkAccess = field.getAnnotation(ACL.class); + CommandType fieldType = parameterAnnotation.type(); + + + if(checkAccess != null){ + // Verify that caller can perform actions in behalf of vm owner + //acumulate all Controlled Entities together. + if(checkAccess.resourceType() != null){ + Class entity = checkAccess.resourceType(); + + if(ControlledEntity.class.isAssignableFrom(entity)){ + if (s_logger.isDebugEnabled()) { + s_logger.debug("entity name is:" + entity.getName()); + } + + if(s_instance._daoNameMap.containsKey(entity.getName())){ + Class daoClass = s_instance._daoNameMap.get(entity.getName()); + GenericDao daoClassInstance = s_instance._locator.getDao(daoClass); + + //Check if the parameter type is a single Id or list of id's/name's + switch (fieldType) { + case LIST: + CommandType listType = parameterAnnotation.collectionType(); + switch (listType) { + case LONG: + List listParam = new ArrayList(); + listParam = (List)field.get(cmd); + + for(Long entityId : listParam){ + ControlledEntity entityObj = (ControlledEntity)daoClassInstance.findById(entityId); + entitiesToAccess.add(entityObj); + } + break; + /*case STRING: + List listParam = new ArrayList(); + listParam = (List)field.get(cmd); + for(String entityName: listParam){ + ControlledEntity entityObj = (ControlledEntity)daoClassInstance(entityId); + entitiesToAccess.add(entityObj); + } + break; + */ + default: + break; + } + break; + case LONG: + Long entityId = (Long)field.get(cmd); + ControlledEntity entityObj = (ControlledEntity)daoClassInstance.findById(entityId); + entitiesToAccess.add(entityObj); + break; + default: + break; + } + + + } + + } + + } + + } + + } catch (IllegalArgumentException e) { + s_logger.error("Error initializing command " + cmd.getCommandName() + ", field " + field.getName() + " is not accessible."); + throw new CloudRuntimeException("Internal error initializing parameters for command " + cmd.getCommandName() + " [field " + field.getName() + " is not accessible]"); + } catch (IllegalAccessException e) { + s_logger.error("Error initializing command " + cmd.getCommandName() + ", field " + field.getName() + " is not accessible."); + throw new CloudRuntimeException("Internal error initializing parameters for command " + cmd.getCommandName() + " [field " + field.getName() + " is not accessible]"); + } + } + + //check access on the entities. } @SuppressWarnings({ "unchecked", "rawtypes" }) diff --git a/server/src/com/cloud/api/ApiServer.java b/server/src/com/cloud/api/ApiServer.java index a5c9ea5b1ee..cfd3b2594d8 100755 --- a/server/src/com/cloud/api/ApiServer.java +++ b/server/src/com/cloud/api/ApiServer.java @@ -81,6 +81,7 @@ import org.apache.http.protocol.ResponseDate; import org.apache.http.protocol.ResponseServer; import org.apache.log4j.Logger; +import com.cloud.acl.ControlledEntity; import com.cloud.api.response.ApiResponseSerializer; import com.cloud.api.response.ExceptionResponse; import com.cloud.api.response.ListResponse; @@ -487,8 +488,16 @@ public class ApiServer implements HttpRequestHandler { objectEntityTable = createCmd.getEntityTable(); params.put("id", objectId.toString()); } else { - ApiDispatcher.setupParameters(cmdObj, params); + List entitiesToAccess = new ArrayList(); + ApiDispatcher.setupParameters(cmdObj, params, entitiesToAccess); ApiDispatcher.plugService(cmdObj); + + if(!entitiesToAccess.isEmpty()){ + Account owner = s_instance._accountMgr.getActiveAccountById(cmdObj.getEntityOwnerId()); + s_instance._accountMgr.checkAccess(caller, null, true, owner); + + s_instance._accountMgr.checkAccess(caller, null, true, (ControlledEntity[])entitiesToAccess.toArray()); + } } BaseAsyncCmd asyncCmd = (BaseAsyncCmd) cmdObj; From a2306f4917a6705819b0112fcb085ebafe752ed0 Mon Sep 17 00:00:00 2001 From: Prachi Damle Date: Tue, 13 Nov 2012 11:47:38 -0800 Subject: [PATCH 002/421] some more poc work --- api/src/com/cloud/acl/APIAccessChecker.java | 14 ++ api/src/com/cloud/acl/Role.java | 20 ++ api/src/com/cloud/api/ACL.java | 4 +- api/src/com/cloud/api/Parameter.java | 4 + .../com/cloud/api/commands/DeployVMCmd.java | 31 +-- api/src/com/cloud/domain/Domain.java | 1 + .../cloud/network/security/SecurityGroup.java | 1 + api/src/com/cloud/user/Account.java | 2 + .../acl/StaticRoleBasedAPIAccessChecker.java | 188 ++++++++++++++++++ server/src/com/cloud/api/ApiDispatcher.java | 130 +++++++----- server/src/com/cloud/api/ApiServer.java | 159 ++------------- .../src/com/cloud/host/dao/HostDaoImpl.java | 2 +- 12 files changed, 350 insertions(+), 206 deletions(-) create mode 100644 api/src/com/cloud/acl/APIAccessChecker.java create mode 100644 api/src/com/cloud/acl/Role.java create mode 100644 server/src/com/cloud/acl/StaticRoleBasedAPIAccessChecker.java diff --git a/api/src/com/cloud/acl/APIAccessChecker.java b/api/src/com/cloud/acl/APIAccessChecker.java new file mode 100644 index 00000000000..c0f8fd444da --- /dev/null +++ b/api/src/com/cloud/acl/APIAccessChecker.java @@ -0,0 +1,14 @@ +package com.cloud.acl; + +import com.cloud.exception.PermissionDeniedException; +import com.cloud.user.Account; +import com.cloud.user.User; +import com.cloud.utils.component.Adapter; + +/** + * APIAccessChecker checks the ownership and access control to API requests + */ +public interface APIAccessChecker extends Adapter { + + boolean canAccessAPI(User user, String apiCommandName) throws PermissionDeniedException; +} diff --git a/api/src/com/cloud/acl/Role.java b/api/src/com/cloud/acl/Role.java new file mode 100644 index 00000000000..932a43b820d --- /dev/null +++ b/api/src/com/cloud/acl/Role.java @@ -0,0 +1,20 @@ +package com.cloud.acl; + +//metadata - consists of default dynamic roles in CS + any custom roles added by user +public interface Role { + + public static final short ROOT_ADMIN = 0; + public static final short DOMAIN_ADMIN = 1; + public static final short DOMAIN_USER = 2; + public static final short OWNER = 3; + public static final short PARENT_DOMAIN_ADMIN = 4; + public static final short PARENT_DOMAIN_USER = 5; + public static final short CHILD_DOMAIN_ADMIN = 6; + public static final short CHILD_DOMAIN_USER = 7; + + public long getId(); + + public short getRoleType(); + + + } diff --git a/api/src/com/cloud/api/ACL.java b/api/src/com/cloud/api/ACL.java index 1f376e9c3a6..bd02c06d0b0 100644 --- a/api/src/com/cloud/api/ACL.java +++ b/api/src/com/cloud/api/ACL.java @@ -26,6 +26,6 @@ import java.lang.annotation.Target; @Target({ FIELD }) public @interface ACL { - - Class resourceType(); + boolean checkKeyAccess() default false; + boolean checkValueAccess() default false; } diff --git a/api/src/com/cloud/api/Parameter.java b/api/src/com/cloud/api/Parameter.java index 2da3c400f07..e3563699891 100644 --- a/api/src/com/cloud/api/Parameter.java +++ b/api/src/com/cloud/api/Parameter.java @@ -44,4 +44,8 @@ public @interface Parameter { int length() default 255; String since() default ""; + + Class[] resourceType() default Object.class; + + String retrieveMethod() default "getById"; } diff --git a/api/src/com/cloud/api/commands/DeployVMCmd.java b/api/src/com/cloud/api/commands/DeployVMCmd.java index da9f3ea7431..3d00849e910 100644 --- a/api/src/com/cloud/api/commands/DeployVMCmd.java +++ b/api/src/com/cloud/api/commands/DeployVMCmd.java @@ -46,6 +46,7 @@ import com.cloud.exception.ResourceAllocationException; import com.cloud.exception.ResourceUnavailableException; import com.cloud.host.Host; import com.cloud.hypervisor.Hypervisor.HypervisorType; +import com.cloud.network.IpAddress; import com.cloud.network.Network; import com.cloud.network.security.SecurityGroup; import com.cloud.offering.DiskOffering; @@ -55,6 +56,7 @@ import com.cloud.user.Account; import com.cloud.user.UserContext; import com.cloud.uservm.UserVm; + @Implementation(description="Creates and automatically starts a virtual machine based on a service offering, disk offering, and template.", responseObject=UserVmResponse.class) public class DeployVMCmd extends BaseAsyncCreateCmd { public static final Logger s_logger = Logger.getLogger(DeployVMCmd.class.getName()); @@ -69,13 +71,14 @@ public class DeployVMCmd extends BaseAsyncCreateCmd { @Parameter(name=ApiConstants.ZONE_ID, type=CommandType.LONG, required=true, description="availability zone for the virtual machine") private Long zoneId; + @ACL @IdentityMapper(entityTableName="disk_offering") - @Parameter(name=ApiConstants.SERVICE_OFFERING_ID, type=CommandType.LONG, required=true, description="the ID of the service offering for the virtual machine") + @Parameter(name=ApiConstants.SERVICE_OFFERING_ID, type=CommandType.LONG, required=true, description="the ID of the service offering for the virtual machine", resourceType=ServiceOffering.class) private Long serviceOfferingId; - @ACL(resourceType=VirtualMachineTemplate.class) + @ACL @IdentityMapper(entityTableName="vm_template") - @Parameter(name=ApiConstants.TEMPLATE_ID, type=CommandType.LONG, required=true, description="the ID of the template for the virtual machine") + @Parameter(name=ApiConstants.TEMPLATE_ID, type=CommandType.LONG, required=true, description="the ID of the template for the virtual machine",resourceType=VirtualMachineTemplate.class) private Long templateId; @Parameter(name=ApiConstants.NAME, type=CommandType.STRING, description="host name for the virtual machine") @@ -89,18 +92,19 @@ public class DeployVMCmd extends BaseAsyncCreateCmd { private String accountName; @IdentityMapper(entityTableName="domain") - @Parameter(name=ApiConstants.DOMAIN_ID, type=CommandType.LONG, description="an optional domainId for the virtual machine. If the account parameter is used, domainId must also be used.") + @Parameter(name=ApiConstants.DOMAIN_ID, type=CommandType.LONG, description="an optional domainId for the virtual machine. If the account parameter is used, domainId must also be used.", entityType=Domain.class) private Long domainId; //Network information - @ACL(resourceType=Network.class) + @ACL @IdentityMapper(entityTableName="networks") - @Parameter(name=ApiConstants.NETWORK_IDS, type=CommandType.LIST, collectionType=CommandType.LONG, description="list of network ids used by virtual machine. Can't be specified with ipToNetworkList parameter") + @Parameter(name=ApiConstants.NETWORK_IDS, type=CommandType.LIST, collectionType=CommandType.LONG, description="list of network ids used by virtual machine. Can't be specified with ipToNetworkList parameter", resourceType=Network.class) private List networkIds; //DataDisk information + @ACL @IdentityMapper(entityTableName="disk_offering") - @Parameter(name=ApiConstants.DISK_OFFERING_ID, type=CommandType.LONG, description="the ID of the disk offering for the virtual machine. If the template is of ISO format, the diskOfferingId is for the root disk volume. Otherwise this parameter is used to indicate the offering for the data disk volume. If the templateId parameter passed is from a Template object, the diskOfferingId refers to a DATA Disk Volume created. If the templateId parameter passed is from an ISO object, the diskOfferingId refers to a ROOT Disk Volume created.") + @Parameter(name=ApiConstants.DISK_OFFERING_ID, type=CommandType.LONG, description="the ID of the disk offering for the virtual machine. If the template is of ISO format, the diskOfferingId is for the root disk volume. Otherwise this parameter is used to indicate the offering for the data disk volume. If the templateId parameter passed is from a Template object, the diskOfferingId refers to a DATA Disk Volume created. If the templateId parameter passed is from an ISO object, the diskOfferingId refers to a ROOT Disk Volume created.", resourceType=DiskOffering.class) private Long diskOfferingId; @Parameter(name=ApiConstants.SIZE, type=CommandType.LONG, description="the arbitrary size for the DATADISK volume. Mutually exclusive with diskOfferingId") @@ -118,21 +122,22 @@ public class DeployVMCmd extends BaseAsyncCreateCmd { @Parameter(name=ApiConstants.SSH_KEYPAIR, type=CommandType.STRING, description="name of the ssh key pair used to login to the virtual machine") private String sshKeyPairName; - //@ACL(resourceType=Host.class) + @IdentityMapper(entityTableName="host") @Parameter(name=ApiConstants.HOST_ID, type=CommandType.LONG, description="destination Host ID to deploy the VM to - parameter available for root admin only") private Long hostId; - //@ACL(resourceType=SecurityGroup.class) + @ACL @IdentityMapper(entityTableName="security_group") - @Parameter(name=ApiConstants.SECURITY_GROUP_IDS, type=CommandType.LIST, collectionType=CommandType.LONG, description="comma separated list of security groups id that going to be applied to the virtual machine. Should be passed only when vm is created from a zone with Basic Network support. Mutually exclusive with securitygroupnames parameter") + @Parameter(name=ApiConstants.SECURITY_GROUP_IDS, type=CommandType.LIST, collectionType=CommandType.LONG, description="comma separated list of security groups id that going to be applied to the virtual machine. Should be passed only when vm is created from a zone with Basic Network support. Mutually exclusive with securitygroupnames parameter", resourceType=SecurityGroup.class) private List securityGroupIdList; - //@ACL(resourceType=SecurityGroup.class) - @Parameter(name=ApiConstants.SECURITY_GROUP_NAMES, type=CommandType.LIST, collectionType=CommandType.STRING, description="comma separated list of security groups names that going to be applied to the virtual machine. Should be passed only when vm is created from a zone with Basic Network support. Mutually exclusive with securitygroupids parameter") + @ACL + @Parameter(name=ApiConstants.SECURITY_GROUP_NAMES, type=CommandType.LIST, collectionType=CommandType.STRING, description="comma separated list of security groups names that going to be applied to the virtual machine. Should be passed only when vm is created from a zone with Basic Network support. Mutually exclusive with securitygroupids parameter", resourceType=SecurityGroup.class) private List securityGroupNameList; - @Parameter(name = ApiConstants.IP_NETWORK_LIST, type = CommandType.MAP, description = "ip to network mapping. Can't be specified with networkIds parameter. Example: iptonetworklist[0].ip=10.10.10.11&iptonetworklist[0].networkid=204 - requests to use ip 10.10.10.11 in network id=204") + @ACL(checkKeyAccess=true) + @Parameter(name = ApiConstants.IP_NETWORK_LIST, type = CommandType.MAP, description = "ip to network mapping. Can't be specified with networkIds parameter. Example: iptonetworklist[0].ip=10.10.10.11&iptonetworklist[0].networkid=204 - requests to use ip 10.10.10.11 in network id=204",resourceType={Network.class,IpAddress.class}) private Map ipToNetworkList; @Parameter(name=ApiConstants.IP_ADDRESS, type=CommandType.STRING, description="the ip address for default vm's network") diff --git a/api/src/com/cloud/domain/Domain.java b/api/src/com/cloud/domain/Domain.java index a7b4031dce5..8884749d358 100644 --- a/api/src/com/cloud/domain/Domain.java +++ b/api/src/com/cloud/domain/Domain.java @@ -23,6 +23,7 @@ import com.cloud.user.OwnedBy; /** * Domain defines the Domain object. */ + public interface Domain extends OwnedBy { public static final long ROOT_DOMAIN = 1L; diff --git a/api/src/com/cloud/network/security/SecurityGroup.java b/api/src/com/cloud/network/security/SecurityGroup.java index 68467407f3d..db9d043694b 100644 --- a/api/src/com/cloud/network/security/SecurityGroup.java +++ b/api/src/com/cloud/network/security/SecurityGroup.java @@ -18,6 +18,7 @@ package com.cloud.network.security; import com.cloud.acl.ControlledEntity; +@doc("") public interface SecurityGroup extends ControlledEntity { long getId(); diff --git a/api/src/com/cloud/user/Account.java b/api/src/com/cloud/user/Account.java index 18f585be75b..fc45698c683 100755 --- a/api/src/com/cloud/user/Account.java +++ b/api/src/com/cloud/user/Account.java @@ -34,6 +34,7 @@ public interface Account extends ControlledEntity { enabled, locked } + public static final short ACCOUNT_TYPE_NORMAL = 0; public static final short ACCOUNT_TYPE_ADMIN = 1; @@ -61,4 +62,5 @@ public interface Account extends ControlledEntity { public String getNetworkDomain(); public Long getDefaultZoneId(); + } diff --git a/server/src/com/cloud/acl/StaticRoleBasedAPIAccessChecker.java b/server/src/com/cloud/acl/StaticRoleBasedAPIAccessChecker.java new file mode 100644 index 00000000000..73a26468a26 --- /dev/null +++ b/server/src/com/cloud/acl/StaticRoleBasedAPIAccessChecker.java @@ -0,0 +1,188 @@ +package com.cloud.acl; + +import java.io.File; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.IOException; +import java.io.InputStream; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.Properties; + +import javax.ejb.Local; +import javax.naming.ConfigurationException; + +import org.apache.log4j.Logger; + +import com.cloud.exception.PermissionDeniedException; +import com.cloud.server.ManagementServer; +import com.cloud.user.Account; +import com.cloud.user.AccountManager; +import com.cloud.user.User; +import com.cloud.utils.PropertiesUtil; +import com.cloud.utils.component.AdapterBase; +import com.cloud.utils.component.ComponentLocator; +import com.cloud.utils.component.Inject; +import com.cloud.utils.component.PluggableService; + +/* + * This is the default API access checker that grab's the user's account + * based on the account type, access is granted referring to commands in all *.properties files. + */ + +@Local(value=APIAccessChecker.class) +public class StaticRoleBasedAPIAccessChecker extends AdapterBase implements APIAccessChecker { + + protected static final Logger s_logger = Logger.getLogger(StaticRoleBasedAPIAccessChecker.class); + public static final short ADMIN_COMMAND = 1; + public static final short DOMAIN_ADMIN_COMMAND = 4; + public static final short RESOURCE_DOMAIN_ADMIN_COMMAND = 2; + public static final short USER_COMMAND = 8; + private static List s_userCommands = null; + private static List s_resellerCommands = null; // AKA domain-admin + private static List s_adminCommands = null; + private static List s_resourceDomainAdminCommands = null; + private static List s_allCommands = null; + private static List s_pluggableServiceCommands = null; + + protected @Inject AccountManager _accountMgr; + + static { + s_allCommands = new ArrayList(); + s_userCommands = new ArrayList(); + s_resellerCommands = new ArrayList(); + s_adminCommands = new ArrayList(); + s_resourceDomainAdminCommands = new ArrayList(); + s_pluggableServiceCommands = new ArrayList(); + } + + @Override + public boolean canAccessAPI(User user, String apiCommandName) + throws PermissionDeniedException{ + + boolean commandExists = s_allCommands.contains(apiCommandName); + + if(commandExists && user != null){ + Long accountId = user.getAccountId(); + Account userAccount = _accountMgr.getAccount(accountId); + short accountType = userAccount.getType(); + return isCommandAvailableForAccount(accountType, apiCommandName); + } + + return commandExists; + } + + private static boolean isCommandAvailableForAccount(short accountType, String commandName) { + boolean isCommandAvailable = false; + switch (accountType) { + case Account.ACCOUNT_TYPE_ADMIN: + isCommandAvailable = s_adminCommands.contains(commandName); + break; + case Account.ACCOUNT_TYPE_DOMAIN_ADMIN: + isCommandAvailable = s_resellerCommands.contains(commandName); + break; + case Account.ACCOUNT_TYPE_RESOURCE_DOMAIN_ADMIN: + isCommandAvailable = s_resourceDomainAdminCommands.contains(commandName); + break; + case Account.ACCOUNT_TYPE_NORMAL: + isCommandAvailable = s_userCommands.contains(commandName); + break; + } + return isCommandAvailable; + } + + + @Override + public boolean configure(String name, Map params) throws ConfigurationException { + super.configure(name, params); + + //load command.properties to build the static map per role. + ComponentLocator locator = ComponentLocator.getLocator(ManagementServer.Name); + String[] apiConfig = ((ManagementServer) ComponentLocator.getComponent(ManagementServer.Name)).getApiConfig(); + + processConfigFiles(apiConfig, false); + + // get commands for all pluggable services + String[] pluggableServicesApiConfigs = getPluggableServicesApiConfigs(); + processConfigFiles(pluggableServicesApiConfigs, true); + + return true; + } + + + private String[] getPluggableServicesApiConfigs() { + List pluggableServicesApiConfigs = new ArrayList(); + + ComponentLocator locator = ComponentLocator.getLocator(ManagementServer.Name); + List services = locator.getAllPluggableServices(); + for (PluggableService service : services) { + pluggableServicesApiConfigs.add(service.getPropertiesFile()); + } + return pluggableServicesApiConfigs.toArray(new String[0]); + } + + private void processConfigFiles(String[] apiConfig, boolean pluggableServicesConfig) { + try { + Properties preProcessedCommands = new Properties(); + if (apiConfig != null) { + for (String configFile : apiConfig) { + File commandsFile = PropertiesUtil.findConfigFile(configFile); + if (commandsFile != null) { + try { + preProcessedCommands.load(new FileInputStream(commandsFile)); + } catch (FileNotFoundException fnfex) { + // in case of a file within a jar in classpath, try to open stream using url + InputStream stream = PropertiesUtil.openStreamFromURL(configFile); + if (stream != null) { + preProcessedCommands.load(stream); + } else { + s_logger.error("Unable to find properites file", fnfex); + } + } + } + } + for (Object key : preProcessedCommands.keySet()) { + String preProcessedCommand = preProcessedCommands.getProperty((String) key); + String[] commandParts = preProcessedCommand.split(";"); + + + if (pluggableServicesConfig) { + s_pluggableServiceCommands.add(commandParts[0]); + } + + if (commandParts.length > 1) { + try { + short cmdPermissions = Short.parseShort(commandParts[1]); + if ((cmdPermissions & ADMIN_COMMAND) != 0) { + s_adminCommands.add((String) key); + } + if ((cmdPermissions & RESOURCE_DOMAIN_ADMIN_COMMAND) != 0) { + s_resourceDomainAdminCommands.add((String) key); + } + if ((cmdPermissions & DOMAIN_ADMIN_COMMAND) != 0) { + s_resellerCommands.add((String) key); + } + if ((cmdPermissions & USER_COMMAND) != 0) { + s_userCommands.add((String) key); + } + s_allCommands.addAll(s_adminCommands); + s_allCommands.addAll(s_resourceDomainAdminCommands); + s_allCommands.addAll(s_userCommands); + s_allCommands.addAll(s_resellerCommands); + } catch (NumberFormatException nfe) { + s_logger.info("Malformed command.properties permissions value, key = " + key + ", value = " + preProcessedCommand); + } + } + } + + } + } catch (FileNotFoundException fnfex) { + s_logger.error("Unable to find properites file", fnfex); + } catch (IOException ioex) { + s_logger.error("Exception loading properties file", ioex); + } + } + + +} diff --git a/server/src/com/cloud/api/ApiDispatcher.java b/server/src/com/cloud/api/ApiDispatcher.java index 471dfc4b641..4f94961e84f 100755 --- a/server/src/com/cloud/api/ApiDispatcher.java +++ b/server/src/com/cloud/api/ApiDispatcher.java @@ -31,6 +31,7 @@ import java.util.regex.Matcher; import org.apache.log4j.Logger; import com.cloud.acl.ControlledEntity; +import com.cloud.acl.Role; import com.cloud.api.BaseCmd.CommandType; import com.cloud.api.commands.ListEventsCmd; import com.cloud.async.AsyncCommandQueued; @@ -111,17 +112,8 @@ public class ApiDispatcher { List entitiesToAccess = new ArrayList(); setupParameters(cmd, params, entitiesToAccess); - plugService(cmd); - if(!entitiesToAccess.isEmpty()){ - //owner - Account caller = UserContext.current().getCaller(); - Account owner = s_instance._accountMgr.getActiveAccountById(cmd.getEntityOwnerId()); - s_instance._accountMgr.checkAccess(caller, null, true, owner); - - for(ControlledEntity entity : entitiesToAccess) - s_instance._accountMgr.checkAccess(caller, null, true, entity); - } + doAccessChecks(cmd, entitiesToAccess); try { UserContext ctx = UserContext.current(); @@ -162,10 +154,54 @@ public class ApiDispatcher { } } - public void dispatch(BaseCmd cmd, Map params) { + private void doAccessChecks(BaseAsyncCreateCmd cmd, + List entitiesToAccess) { + + //owner + Account caller = UserContext.current().getCaller(); + Account owner = s_instance._accountMgr.getActiveAccountById(cmd.getEntityOwnerId()); + + List callerRoles = determineRole(caller); + + List ownerRoles = determineRole(owner); + + //check permission to call this command for the caller + //this needs checking of static roles of the caller + checkACLOnCommand(cmd); + + //check that caller can access the owner account. + s_instance._accountMgr.checkAccess(caller, null, true, owner); + + checkACLOnEntities(caller, entitiesToAccess); + + } + + + private void checkACLOnCommand(BaseAsyncCreateCmd cmd) { + // TODO Auto-generated method stub + //need to write an commandACLChecker adapter framework to check ACL on commands - default one will use the static roles by referring to commands.properties. + //one can write another commandACLChecker to check access via custom roles. + } + + private List determineRole(Account caller) { + // TODO Auto-generated method stub + List effectiveRoles = new ArrayList(); + return effectiveRoles; + + } + + private void checkACLOnEntities(Account caller, List entitiesToAccess){ + //checkACLOnEntities + if(!entitiesToAccess.isEmpty()){ + for(ControlledEntity entity : entitiesToAccess) + s_instance._accountMgr.checkAccess(caller, null, true, entity); + } + + } + + public void dispatch(BaseCmd cmd, Map params) { List entitiesToAccess = new ArrayList(); setupParameters(cmd, params, entitiesToAccess); - ApiDispatcher.plugService(cmd); if(!entitiesToAccess.isEmpty()){ //owner @@ -373,6 +409,13 @@ public class ApiDispatcher { } for (Field field : fields) { + + //plug Services + PlugService plugServiceAnnotation = field.getAnnotation(PlugService.class); + if(plugServiceAnnotation != null){ + plugService(field, cmd); + } + Parameter parameterAnnotation = field.getAnnotation(Parameter.class); if ((parameterAnnotation == null) || !parameterAnnotation.expose()) { continue; @@ -425,8 +468,13 @@ public class ApiDispatcher { if(checkAccess != null){ // Verify that caller can perform actions in behalf of vm owner //acumulate all Controlled Entities together. - if(checkAccess.resourceType() != null){ - Class entity = checkAccess.resourceType(); + + //parse the array of resource types and in case of map check access on key or value or both as specified in @acl + //implement external dao for classes that need findByName + //for maps, specify access to be checkd on key or value. + + if(parameterAnnotation.resourceType() != null){ + Class[] entity = parameterAnnotation.resourceType(); if(ControlledEntity.class.isAssignableFrom(entity)){ if (s_logger.isDebugEnabled()) { @@ -614,43 +662,29 @@ public class ApiDispatcher { return cal.getTime(); } - public static void plugService(BaseCmd cmd) { - - if (!ApiServer.isPluggableServiceCommand(cmd.getClass().getName())) { - return; - } - Class clazz = cmd.getClass(); + public static void plugService(Field field, BaseCmd cmd) { ComponentLocator locator = ComponentLocator.getLocator(ManagementServer.Name); - do { - Field[] fields = clazz.getDeclaredFields(); - for (Field field : fields) { - PlugService plugService = field.getAnnotation(PlugService.class); - if (plugService == null) { - continue; - } - Class fc = field.getType(); - Object instance = null; - if (PluggableService.class.isAssignableFrom(fc)) { - instance = locator.getPluggableService(fc); - } - if (instance == null) { - throw new CloudRuntimeException("Unable to plug service " + fc.getSimpleName() + " in command " + clazz.getSimpleName()); - } + Class fc = field.getType(); + Object instance = null; + if (PluggableService.class.isAssignableFrom(fc)) { + instance = locator.getPluggableService(fc); + } - try { - field.setAccessible(true); - field.set(cmd, instance); - } catch (IllegalArgumentException e) { - s_logger.error("IllegalArgumentException at plugService for command " + cmd.getCommandName() + ", field " + field.getName()); - throw new CloudRuntimeException("Internal error at plugService for command " + cmd.getCommandName() + " [Illegal argumet at field " + field.getName() + "]"); - } catch (IllegalAccessException e) { - s_logger.error("Error at plugService for command " + cmd.getCommandName() + ", field " + field.getName() + " is not accessible."); - throw new CloudRuntimeException("Internal error at plugService for command " + cmd.getCommandName() + " [field " + field.getName() + " is not accessible]"); - } - } - clazz = clazz.getSuperclass(); - } while (clazz != Object.class && clazz != null); + if (instance == null) { + throw new CloudRuntimeException("Unable to plug service " + fc.getSimpleName() + " in command " + cmd.getClass().getSimpleName()); + } + + try { + field.setAccessible(true); + field.set(cmd, instance); + } catch (IllegalArgumentException e) { + s_logger.error("IllegalArgumentException at plugService for command " + cmd.getCommandName() + ", field " + field.getName()); + throw new CloudRuntimeException("Internal error at plugService for command " + cmd.getCommandName() + " [Illegal argumet at field " + field.getName() + "]"); + } catch (IllegalAccessException e) { + s_logger.error("Error at plugService for command " + cmd.getCommandName() + ", field " + field.getName() + " is not accessible."); + throw new CloudRuntimeException("Internal error at plugService for command " + cmd.getCommandName() + " [field " + field.getName() + " is not accessible]"); + } } diff --git a/server/src/com/cloud/api/ApiServer.java b/server/src/com/cloud/api/ApiServer.java index cfd3b2594d8..9ae68d4d157 100755 --- a/server/src/com/cloud/api/ApiServer.java +++ b/server/src/com/cloud/api/ApiServer.java @@ -82,6 +82,7 @@ import org.apache.http.protocol.ResponseServer; import org.apache.log4j.Logger; import com.cloud.acl.ControlledEntity; +import com.cloud.agent.manager.allocator.HostAllocator; import com.cloud.api.response.ApiResponseSerializer; import com.cloud.api.response.ExceptionResponse; import com.cloud.api.response.ListResponse; @@ -109,23 +110,22 @@ import com.cloud.user.UserVO; import com.cloud.utils.IdentityProxy; import com.cloud.utils.Pair; import com.cloud.utils.PropertiesUtil; +import com.cloud.utils.component.Adapters; import com.cloud.utils.component.ComponentLocator; +import com.cloud.utils.component.Inject; import com.cloud.utils.component.PluggableService; import com.cloud.utils.concurrency.NamedThreadFactory; import com.cloud.utils.db.SearchCriteria; import com.cloud.utils.db.Transaction; import com.cloud.utils.exception.CSExceptionErrorCode; import com.cloud.uuididentity.dao.IdentityDao; +import com.cloud.acl.APIAccessChecker; public class ApiServer implements HttpRequestHandler { private static final Logger s_logger = Logger.getLogger(ApiServer.class.getName()); private static final Logger s_accessLogger = Logger.getLogger("apiserver." + ApiServer.class.getName()); - public static final short ADMIN_COMMAND = 1; - public static final short DOMAIN_ADMIN_COMMAND = 4; - public static final short RESOURCE_DOMAIN_ADMIN_COMMAND = 2; - public static final short USER_COMMAND = 8; public static boolean encodeApiResponse = false; public static String jsonContentType = "text/javascript"; private Properties _apiCommands = null; @@ -135,28 +135,14 @@ public class ApiServer implements HttpRequestHandler { private AsyncJobManager _asyncMgr = null; private Account _systemAccount = null; private User _systemUser = null; - private static int _workerCount = 0; - private static ApiServer s_instance = null; - private static List s_userCommands = null; - private static List s_resellerCommands = null; // AKA domain-admin - private static List s_adminCommands = null; - private static List s_resourceDomainAdminCommands = null; - private static List s_allCommands = null; - private static List s_pluggableServiceCommands = null; private static final DateFormat _dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ"); - + @Inject(adapter = APIAccessChecker.class) + protected Adapters _apiAccessCheckers; + private static ExecutorService _executor = new ThreadPoolExecutor(10, 150, 60, TimeUnit.SECONDS, new LinkedBlockingQueue(), new NamedThreadFactory("ApiServer")); - static { - s_userCommands = new ArrayList(); - s_resellerCommands = new ArrayList(); - s_adminCommands = new ArrayList(); - s_resourceDomainAdminCommands = new ArrayList(); - s_allCommands = new ArrayList(); - s_pluggableServiceCommands = new ArrayList(); - } private ApiServer() { } @@ -173,103 +159,10 @@ public class ApiServer implements HttpRequestHandler { return s_instance; } - public Properties get_apiCommands() { - return _apiCommands; - } - - public static boolean isPluggableServiceCommand(String cmdClassName) { - if (s_pluggableServiceCommands != null) { - if (s_pluggableServiceCommands.contains(cmdClassName)) { - return true; - } - } - return false; - } - - private String[] getPluggableServicesApiConfigs() { - List pluggableServicesApiConfigs = new ArrayList(); - - ComponentLocator locator = ComponentLocator.getLocator(ManagementServer.Name); - List services = locator.getAllPluggableServices(); - for (PluggableService service : services) { - pluggableServicesApiConfigs.add(service.getPropertiesFile()); - } - return pluggableServicesApiConfigs.toArray(new String[0]); - } - - private void processConfigFiles(String[] apiConfig, boolean pluggableServicesConfig) { - try { - if (_apiCommands == null) { - _apiCommands = new Properties(); - } - Properties preProcessedCommands = new Properties(); - if (apiConfig != null) { - for (String configFile : apiConfig) { - File commandsFile = PropertiesUtil.findConfigFile(configFile); - if (commandsFile != null) { - try { - preProcessedCommands.load(new FileInputStream(commandsFile)); - } catch (FileNotFoundException fnfex) { - // in case of a file within a jar in classpath, try to open stream using url - InputStream stream = PropertiesUtil.openStreamFromURL(configFile); - if (stream != null) { - preProcessedCommands.load(stream); - } else { - s_logger.error("Unable to find properites file", fnfex); - } - } - } - } - for (Object key : preProcessedCommands.keySet()) { - String preProcessedCommand = preProcessedCommands.getProperty((String) key); - String[] commandParts = preProcessedCommand.split(";"); - _apiCommands.put(key, commandParts[0]); - - if (pluggableServicesConfig) { - s_pluggableServiceCommands.add(commandParts[0]); - } - - if (commandParts.length > 1) { - try { - short cmdPermissions = Short.parseShort(commandParts[1]); - if ((cmdPermissions & ADMIN_COMMAND) != 0) { - s_adminCommands.add((String) key); - } - if ((cmdPermissions & RESOURCE_DOMAIN_ADMIN_COMMAND) != 0) { - s_resourceDomainAdminCommands.add((String) key); - } - if ((cmdPermissions & DOMAIN_ADMIN_COMMAND) != 0) { - s_resellerCommands.add((String) key); - } - if ((cmdPermissions & USER_COMMAND) != 0) { - s_userCommands.add((String) key); - } - } catch (NumberFormatException nfe) { - s_logger.info("Malformed command.properties permissions value, key = " + key + ", value = " + preProcessedCommand); - } - } - } - - s_allCommands.addAll(s_adminCommands); - s_allCommands.addAll(s_resourceDomainAdminCommands); - s_allCommands.addAll(s_userCommands); - s_allCommands.addAll(s_resellerCommands); - } - } catch (FileNotFoundException fnfex) { - s_logger.error("Unable to find properites file", fnfex); - } catch (IOException ioex) { - s_logger.error("Exception loading properties file", ioex); - } - } public void init(String[] apiConfig) { BaseCmd.setComponents(new ApiResponseHelper()); BaseListCmd.configure(); - processConfigFiles(apiConfig, false); - - // get commands for all pluggable services - String[] pluggableServicesApiConfigs = getPluggableServicesApiConfigs(); - processConfigFiles(pluggableServicesApiConfigs, true); ComponentLocator locator = ComponentLocator.getLocator(ManagementServer.Name); _accountMgr = locator.getManager(AccountManager.class); @@ -490,7 +383,6 @@ public class ApiServer implements HttpRequestHandler { } else { List entitiesToAccess = new ArrayList(); ApiDispatcher.setupParameters(cmdObj, params, entitiesToAccess); - ApiDispatcher.plugService(cmdObj); if(!entitiesToAccess.isEmpty()){ Account owner = s_instance._accountMgr.getActiveAccountById(cmdObj.getEntityOwnerId()); @@ -610,11 +502,6 @@ public class ApiServer implements HttpRequestHandler { */ } - private static boolean isCommandAvailable(String commandName) { - boolean isCommandAvailable = false; - isCommandAvailable = s_allCommands.contains(commandName); - return isCommandAvailable; - } public boolean verifyRequest(Map requestParameters, Long userId) throws ServerApiException { try { @@ -633,18 +520,15 @@ public class ApiServer implements HttpRequestHandler { // if userId not null, that mean that user is logged in if (userId != null) { - Long accountId = ApiDBUtils.findUserById(userId).getAccountId(); - Account userAccount = _accountMgr.getAccount(accountId); - short accountType = userAccount.getType(); - - if (!isCommandAvailable(accountType, commandName)) { + User user = ApiDBUtils.findUserById(userId); + if (!isCommandAvailable(user, commandName)) { s_logger.warn("The given command:" + commandName + " does not exist"); throw new ServerApiException(BaseCmd.UNSUPPORTED_ACTION_ERROR, "The given command does not exist"); } return true; } else { // check against every available command to see if the command exists or not - if (!isCommandAvailable(commandName) && !commandName.equals("login") && !commandName.equals("logout")) { + if (!isCommandAvailable(null, commandName) && !commandName.equals("login") && !commandName.equals("logout")) { s_logger.warn("The given command:" + commandName + " does not exist"); throw new ServerApiException(BaseCmd.UNSUPPORTED_ACTION_ERROR, "The given command does not exist"); } @@ -738,7 +622,7 @@ public class ApiServer implements HttpRequestHandler { UserContext.updateContext(user.getId(), account, null); - if (!isCommandAvailable(account.getType(), commandName)) { + if (!isCommandAvailable(user, commandName)) { s_logger.warn("The given command:" + commandName + " does not exist"); throw new ServerApiException(BaseCmd.UNSUPPORTED_ACTION_ERROR, "The given command:" + commandName + " does not exist"); } @@ -876,25 +760,16 @@ public class ApiServer implements HttpRequestHandler { return true; } - public static boolean isCommandAvailable(short accountType, String commandName) { + private boolean isCommandAvailable(User user, String commandName) { boolean isCommandAvailable = false; - switch (accountType) { - case Account.ACCOUNT_TYPE_ADMIN: - isCommandAvailable = s_adminCommands.contains(commandName); - break; - case Account.ACCOUNT_TYPE_DOMAIN_ADMIN: - isCommandAvailable = s_resellerCommands.contains(commandName); - break; - case Account.ACCOUNT_TYPE_RESOURCE_DOMAIN_ADMIN: - isCommandAvailable = s_resourceDomainAdminCommands.contains(commandName); - break; - case Account.ACCOUNT_TYPE_NORMAL: - isCommandAvailable = s_userCommands.contains(commandName); - break; + + for(APIAccessChecker apichecker : _apiAccessCheckers){ + isCommandAvailable = apichecker.canAccessAPI(user, commandName); } + return isCommandAvailable; } - + // FIXME: rather than isError, we might was to pass in the status code to give more flexibility private void writeResponse(HttpResponse resp, final String responseText, final int statusCode, String responseType, String reasonPhrase) { try { diff --git a/server/src/com/cloud/host/dao/HostDaoImpl.java b/server/src/com/cloud/host/dao/HostDaoImpl.java index ab1e77eb7f4..05d5b4bac73 100755 --- a/server/src/com/cloud/host/dao/HostDaoImpl.java +++ b/server/src/com/cloud/host/dao/HostDaoImpl.java @@ -63,7 +63,7 @@ import com.cloud.utils.exception.CloudRuntimeException; @Local(value = { HostDao.class }) @DB(txn = false) @TableGenerator(name = "host_req_sq", table = "op_host", pkColumnName = "id", valueColumnName = "sequence", allocationSize = 1) -public class HostDaoImpl extends GenericDaoBase implements HostDao { +public class HostDaoImpl extends GenericDaoBase implements HostDao, ExternalIdDao { private static final Logger s_logger = Logger.getLogger(HostDaoImpl.class); private static final Logger status_logger = Logger.getLogger(Status.class); private static final Logger state_logger = Logger.getLogger(ResourceState.class); From 5edfc2760a99e3c62709cdb8bf50c04664726d43 Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Mon, 3 Dec 2012 13:54:37 -0800 Subject: [PATCH 003/421] refactor: remove redundant imports, fix trailing chars --- api/src/com/cloud/api/ServerApiException.java | 1 - .../api/commands/ActivateProjectCmd.java | 1 - .../api/commands/AddAccountToProjectCmd.java | 1 - .../com/cloud/api/commands/AssignVMCmd.java | 7 - .../com/cloud/api/commands/CreateTagsCmd.java | 1 - .../api/commands/CreateVPCOfferingCmd.java | 1 - .../api/commands/CreateVpnConnectionCmd.java | 4 - .../commands/CreateVpnCustomerGatewayCmd.java | 1 - .../api/commands/CreateVpnGatewayCmd.java | 2 - .../DeleteStorageNetworkIpRangeCmd.java | 1 - .../api/commands/DeleteVpnConnectionCmd.java | 1 - .../com/cloud/api/commands/DeployVMCmd.java | 1 - .../com/cloud/api/commands/LDAPRemoveCmd.java | 10 - .../api/commands/ListNetworkACLsCmd.java | 1 - .../cloud/api/commands/ReconnectHostCmd.java | 1 - .../cloud/api/commands/RegisterIsoCmd.java | 3 - .../api/commands/RegisterTemplateCmd.java | 1 - .../com/cloud/api/commands/UpdateHostCmd.java | 1 - .../UpdateHypervisorCapabilitiesCmd.java | 2 - .../api/commands/UpdateTemplateOrIsoCmd.java | 1 - .../commands/UpdateVpnCustomerGatewayCmd.java | 1 - .../com/cloud/api/response/AlertResponse.java | 1 - .../cloud/api/response/ClusterResponse.java | 2 - .../api/response/LDAPRemoveResponse.java | 4 - .../StorageNetworkIpRangeResponse.java | 1 - .../com/cloud/api/response/UserResponse.java | 1 - .../cloud/network/as/AutoScaleService.java | 37 ++- .../network/security/SecurityGroupRuleVO.java | 1 - .../resource/NfsSecondaryStorageResource.java | 1 - .../api/commands/netapp/DestroyLunCmd.java | 1 - .../api/commands/DeleteCiscoNexusVSMCmd.java | 1 - .../api/response/CiscoNexusVSMResponse.java | 2 - .../CiscoNexusVSMDeviceManagerImpl.java | 5 - .../network/element/CiscoNexusVSMElement.java | 1 - .../ConfigureNetscalerLoadBalancerCmd.java | 1 - .../NetscalerLoadBalancerResponse.java | 2 - .../api/commands/AddNiciraNvpDeviceCmd.java | 3 - .../ListNiciraNvpDeviceNetworksCmd.java | 2 - .../network/element/NiciraNvpElement.java | 5 - .../server/auth/LDAPUserAuthenticator.java | 4 - .../src/com/cloud/alert/AlertManagerImpl.java | 1 - server/src/com/cloud/api/ApiDispatcher.java | 2 - .../src/com/cloud/api/ApiResponseHelper.java | 1 - server/src/com/cloud/api/ApiServer.java | 7 - .../com/cloud/api/IdentityTypeAdapter.java | 1 - .../com/cloud/api/doc/ApiXmlDocWriter.java | 2 - .../src/com/cloud/deploy/FirstFitPlanner.java | 2 - .../ExternalFirewallDeviceManagerImpl.java | 4 - .../ExternalNetworkDeviceManagerImpl.java | 4 - .../com/cloud/network/NetworkManagerImpl.java | 2 - .../network/StorageNetworkManagerImpl.java | 4 - .../network/firewall/FirewallManagerImpl.java | 1 - .../lb/LoadBalancingRulesManagerImpl.java | 1 - .../VirtualNetworkApplianceManagerImpl.java | 3 - .../cloud/network/rules/RulesManagerImpl.java | 1 - .../network/vpc/NetworkACLManagerImpl.java | 1 - .../network/vpn/Site2SiteVpnManagerImpl.java | 1 - .../cloud/resource/ResourceManagerImpl.java | 2 - .../cloud/server/ManagementServerImpl.java | 1 - .../response/ExternalFirewallResponse.java | 1 - .../ExternalLoadBalancerResponse.java | 1 - .../response/netapp/DeleteLUNCmdResponse.java | 3 - .../DeleteVolumeOnFilerCmdResponse.java | 3 - .../netapp/DissociateLunCmdResponse.java | 3 - .../netapp/ModifyVolumePoolCmdResponse.java | 3 - .../snapshot/SnapshotSchedulerImpl.java | 1 - .../cloud/storage/upload/UploadListener.java | 2 - .../test/com/cloud/keystore/KeystoreTest.java | 12 - .../vpc/MockConfigurationManagerImpl.java | 40 ++-- .../com/cloud/vpc/MockNetworkManagerImpl.java | 8 +- .../vpc/MockSite2SiteVpnManagerImpl.java | 22 +- .../com/cloud/vpc/MockVpcManagerImpl.java | 4 +- .../utils/exception/CSExceptionErrorCode.java | 217 +++++++++--------- 73 files changed, 161 insertions(+), 318 deletions(-) diff --git a/api/src/com/cloud/api/ServerApiException.java b/api/src/com/cloud/api/ServerApiException.java index 721cf13d353..25190a6ba09 100644 --- a/api/src/com/cloud/api/ServerApiException.java +++ b/api/src/com/cloud/api/ServerApiException.java @@ -15,7 +15,6 @@ // specific language governing permissions and limitations // under the License. package com.cloud.api; -import com.cloud.utils.IdentityProxy; import com.cloud.utils.exception.RuntimeCloudException; @SuppressWarnings("serial") diff --git a/api/src/com/cloud/api/commands/ActivateProjectCmd.java b/api/src/com/cloud/api/commands/ActivateProjectCmd.java index b8c4721a8f9..b9961070491 100644 --- a/api/src/com/cloud/api/commands/ActivateProjectCmd.java +++ b/api/src/com/cloud/api/commands/ActivateProjectCmd.java @@ -22,7 +22,6 @@ import com.cloud.api.ApiConstants; import com.cloud.api.BaseAsyncCmd; import com.cloud.api.BaseCmd; import com.cloud.api.IdentityMapper; -import com.cloud.api.BaseCmd.CommandType; import com.cloud.api.Implementation; import com.cloud.api.Parameter; import com.cloud.api.ServerApiException; diff --git a/api/src/com/cloud/api/commands/AddAccountToProjectCmd.java b/api/src/com/cloud/api/commands/AddAccountToProjectCmd.java index 73609fb52ef..7376b018cd8 100644 --- a/api/src/com/cloud/api/commands/AddAccountToProjectCmd.java +++ b/api/src/com/cloud/api/commands/AddAccountToProjectCmd.java @@ -30,7 +30,6 @@ import com.cloud.event.EventTypes; import com.cloud.exception.InvalidParameterValueException; import com.cloud.projects.Project; import com.cloud.user.UserContext; -import com.cloud.utils.AnnotationHelper; @Implementation(description="Adds acoount to a project", responseObject=SuccessResponse.class, since="3.0.0") diff --git a/api/src/com/cloud/api/commands/AssignVMCmd.java b/api/src/com/cloud/api/commands/AssignVMCmd.java index be28cc037d4..99656d0937f 100644 --- a/api/src/com/cloud/api/commands/AssignVMCmd.java +++ b/api/src/com/cloud/api/commands/AssignVMCmd.java @@ -17,24 +17,17 @@ package com.cloud.api.commands; -import java.util.ArrayList; import java.util.List; import org.apache.log4j.Logger; import com.cloud.api.ApiConstants; -import com.cloud.api.BaseAsyncCmd; import com.cloud.api.BaseCmd; import com.cloud.api.IdentityMapper; import com.cloud.api.Implementation; import com.cloud.api.Parameter; import com.cloud.api.ServerApiException; -import com.cloud.api.BaseCmd.CommandType; import com.cloud.api.response.UserVmResponse; -import com.cloud.api.response.ZoneResponse; -import com.cloud.async.AsyncJob; -import com.cloud.event.EventTypes; -import com.cloud.exception.InvalidParameterValueException; import com.cloud.user.Account; import com.cloud.uservm.UserVm; diff --git a/api/src/com/cloud/api/commands/CreateTagsCmd.java b/api/src/com/cloud/api/commands/CreateTagsCmd.java index d52c52fdd6b..7e9bfb15440 100644 --- a/api/src/com/cloud/api/commands/CreateTagsCmd.java +++ b/api/src/com/cloud/api/commands/CreateTagsCmd.java @@ -33,7 +33,6 @@ import com.cloud.api.Parameter; import com.cloud.api.ServerApiException; import com.cloud.api.response.SuccessResponse; import com.cloud.event.EventTypes; -import com.cloud.exception.InvalidParameterValueException; import com.cloud.server.ResourceTag; import com.cloud.server.ResourceTag.TaggedResourceType; @Implementation(description = "Creates resource tag(s)", responseObject = SuccessResponse.class, since = "Burbank") diff --git a/api/src/com/cloud/api/commands/CreateVPCOfferingCmd.java b/api/src/com/cloud/api/commands/CreateVPCOfferingCmd.java index 78ce2856679..6b1e9f96044 100644 --- a/api/src/com/cloud/api/commands/CreateVPCOfferingCmd.java +++ b/api/src/com/cloud/api/commands/CreateVPCOfferingCmd.java @@ -23,7 +23,6 @@ import org.apache.log4j.Logger; import com.cloud.api.ApiConstants; import com.cloud.api.BaseAsyncCreateCmd; import com.cloud.api.BaseCmd; -import com.cloud.api.BaseCmd.CommandType; import com.cloud.api.Implementation; import com.cloud.api.Parameter; import com.cloud.api.ServerApiException; diff --git a/api/src/com/cloud/api/commands/CreateVpnConnectionCmd.java b/api/src/com/cloud/api/commands/CreateVpnConnectionCmd.java index 61af0fa01b1..7a506b1648b 100644 --- a/api/src/com/cloud/api/commands/CreateVpnConnectionCmd.java +++ b/api/src/com/cloud/api/commands/CreateVpnConnectionCmd.java @@ -28,15 +28,11 @@ import com.cloud.api.Parameter; import com.cloud.api.ServerApiException; import com.cloud.api.response.Site2SiteVpnConnectionResponse; import com.cloud.event.EventTypes; -import com.cloud.exception.InvalidParameterValueException; import com.cloud.exception.NetworkRuleConflictException; import com.cloud.exception.ResourceUnavailableException; -import com.cloud.network.IpAddress; import com.cloud.network.Site2SiteVpnConnection; import com.cloud.network.Site2SiteVpnGateway; import com.cloud.network.vpc.Vpc; -import com.cloud.user.Account; -import com.cloud.user.UserContext; @Implementation(description="Create site to site vpn connection", responseObject=Site2SiteVpnConnectionResponse.class) public class CreateVpnConnectionCmd extends BaseAsyncCreateCmd { diff --git a/api/src/com/cloud/api/commands/CreateVpnCustomerGatewayCmd.java b/api/src/com/cloud/api/commands/CreateVpnCustomerGatewayCmd.java index 9754f1c0f2c..1120026da12 100644 --- a/api/src/com/cloud/api/commands/CreateVpnCustomerGatewayCmd.java +++ b/api/src/com/cloud/api/commands/CreateVpnCustomerGatewayCmd.java @@ -28,7 +28,6 @@ import com.cloud.api.ServerApiException; import com.cloud.api.response.Site2SiteCustomerGatewayResponse; import com.cloud.event.EventTypes; import com.cloud.network.Site2SiteCustomerGateway; -import com.cloud.user.Account; import com.cloud.user.UserContext; @Implementation(description="Creates site to site vpn customer gateway", responseObject=Site2SiteCustomerGatewayResponse.class) diff --git a/api/src/com/cloud/api/commands/CreateVpnGatewayCmd.java b/api/src/com/cloud/api/commands/CreateVpnGatewayCmd.java index 445c52a4734..83558c0413b 100644 --- a/api/src/com/cloud/api/commands/CreateVpnGatewayCmd.java +++ b/api/src/com/cloud/api/commands/CreateVpnGatewayCmd.java @@ -29,8 +29,6 @@ import com.cloud.api.response.Site2SiteVpnGatewayResponse; import com.cloud.event.EventTypes; import com.cloud.network.Site2SiteVpnGateway; import com.cloud.network.vpc.Vpc; -import com.cloud.user.Account; -import com.cloud.user.UserContext; @Implementation(description="Creates site to site vpn local gateway", responseObject=Site2SiteVpnGatewayResponse.class) public class CreateVpnGatewayCmd extends BaseAsyncCmd { diff --git a/api/src/com/cloud/api/commands/DeleteStorageNetworkIpRangeCmd.java b/api/src/com/cloud/api/commands/DeleteStorageNetworkIpRangeCmd.java index cfecd5e1f84..6067bf8693b 100755 --- a/api/src/com/cloud/api/commands/DeleteStorageNetworkIpRangeCmd.java +++ b/api/src/com/cloud/api/commands/DeleteStorageNetworkIpRangeCmd.java @@ -25,7 +25,6 @@ import com.cloud.api.IdentityMapper; import com.cloud.api.Implementation; import com.cloud.api.Parameter; import com.cloud.api.ServerApiException; -import com.cloud.api.BaseCmd.CommandType; import com.cloud.api.response.SuccessResponse; import com.cloud.event.EventTypes; import com.cloud.exception.ConcurrentOperationException; diff --git a/api/src/com/cloud/api/commands/DeleteVpnConnectionCmd.java b/api/src/com/cloud/api/commands/DeleteVpnConnectionCmd.java index afcd562fbda..e4b527500f5 100644 --- a/api/src/com/cloud/api/commands/DeleteVpnConnectionCmd.java +++ b/api/src/com/cloud/api/commands/DeleteVpnConnectionCmd.java @@ -30,7 +30,6 @@ import com.cloud.event.EventTypes; import com.cloud.exception.ResourceUnavailableException; import com.cloud.network.Site2SiteVpnConnection; import com.cloud.user.Account; -import com.cloud.user.UserContext; @Implementation(description="Delete site to site vpn connection", responseObject=SuccessResponse.class) public class DeleteVpnConnectionCmd extends BaseAsyncCmd { diff --git a/api/src/com/cloud/api/commands/DeployVMCmd.java b/api/src/com/cloud/api/commands/DeployVMCmd.java index 3d00849e910..95a676db5a0 100644 --- a/api/src/com/cloud/api/commands/DeployVMCmd.java +++ b/api/src/com/cloud/api/commands/DeployVMCmd.java @@ -44,7 +44,6 @@ import com.cloud.exception.InsufficientCapacityException; import com.cloud.exception.InvalidParameterValueException; import com.cloud.exception.ResourceAllocationException; import com.cloud.exception.ResourceUnavailableException; -import com.cloud.host.Host; import com.cloud.hypervisor.Hypervisor.HypervisorType; import com.cloud.network.IpAddress; import com.cloud.network.Network; diff --git a/api/src/com/cloud/api/commands/LDAPRemoveCmd.java b/api/src/com/cloud/api/commands/LDAPRemoveCmd.java index 43d9a0a399c..4858e67bd47 100644 --- a/api/src/com/cloud/api/commands/LDAPRemoveCmd.java +++ b/api/src/com/cloud/api/commands/LDAPRemoveCmd.java @@ -17,22 +17,12 @@ package com.cloud.api.commands; -import javax.naming.NamingException; - import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; import com.cloud.api.BaseCmd; import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.ServerApiException; -import com.cloud.api.response.BaseResponse; import com.cloud.api.response.LDAPConfigResponse; import com.cloud.api.response.LDAPRemoveResponse; -import com.cloud.exception.ConcurrentOperationException; -import com.cloud.exception.InsufficientCapacityException; -import com.cloud.exception.ResourceAllocationException; -import com.cloud.exception.ResourceUnavailableException; import com.cloud.user.Account; @Implementation(description="Remove the LDAP context for this site.", responseObject=LDAPConfigResponse.class, since="3.0.1") diff --git a/api/src/com/cloud/api/commands/ListNetworkACLsCmd.java b/api/src/com/cloud/api/commands/ListNetworkACLsCmd.java index bdb3c3b733b..40267787332 100644 --- a/api/src/com/cloud/api/commands/ListNetworkACLsCmd.java +++ b/api/src/com/cloud/api/commands/ListNetworkACLsCmd.java @@ -23,7 +23,6 @@ import java.util.List; import org.apache.log4j.Logger; import com.cloud.api.ApiConstants; -import com.cloud.api.BaseCmd.CommandType; import com.cloud.api.BaseListTaggedResourcesCmd; import com.cloud.api.IdentityMapper; import com.cloud.api.Implementation; diff --git a/api/src/com/cloud/api/commands/ReconnectHostCmd.java b/api/src/com/cloud/api/commands/ReconnectHostCmd.java index b74ac70f882..3851e980060 100755 --- a/api/src/com/cloud/api/commands/ReconnectHostCmd.java +++ b/api/src/com/cloud/api/commands/ReconnectHostCmd.java @@ -28,7 +28,6 @@ import com.cloud.api.ServerApiException; import com.cloud.api.response.HostResponse; import com.cloud.async.AsyncJob; import com.cloud.event.EventTypes; -import com.cloud.exception.AgentUnavailableException; import com.cloud.host.Host; import com.cloud.user.Account; import com.cloud.user.UserContext; diff --git a/api/src/com/cloud/api/commands/RegisterIsoCmd.java b/api/src/com/cloud/api/commands/RegisterIsoCmd.java index 34554772c4b..3d7b4fa134f 100755 --- a/api/src/com/cloud/api/commands/RegisterIsoCmd.java +++ b/api/src/com/cloud/api/commands/RegisterIsoCmd.java @@ -26,13 +26,10 @@ import com.cloud.api.IdentityMapper; import com.cloud.api.Implementation; import com.cloud.api.Parameter; import com.cloud.api.ServerApiException; -import com.cloud.api.BaseCmd.CommandType; import com.cloud.api.response.ListResponse; import com.cloud.api.response.TemplateResponse; -import com.cloud.exception.InvalidParameterValueException; import com.cloud.exception.ResourceAllocationException; import com.cloud.template.VirtualMachineTemplate; -import com.cloud.user.Account; import com.cloud.user.UserContext; @Implementation(responseObject=TemplateResponse.class, description="Registers an existing ISO into the CloudStack Cloud.") diff --git a/api/src/com/cloud/api/commands/RegisterTemplateCmd.java b/api/src/com/cloud/api/commands/RegisterTemplateCmd.java index d33f5048feb..b224fa14bd0 100755 --- a/api/src/com/cloud/api/commands/RegisterTemplateCmd.java +++ b/api/src/com/cloud/api/commands/RegisterTemplateCmd.java @@ -29,7 +29,6 @@ import com.cloud.api.IdentityMapper; import com.cloud.api.Implementation; import com.cloud.api.Parameter; import com.cloud.api.ServerApiException; -import com.cloud.api.BaseCmd.CommandType; import com.cloud.api.response.ListResponse; import com.cloud.api.response.TemplateResponse; import com.cloud.async.AsyncJob; diff --git a/api/src/com/cloud/api/commands/UpdateHostCmd.java b/api/src/com/cloud/api/commands/UpdateHostCmd.java index fae596f9015..234d0c6c7e7 100755 --- a/api/src/com/cloud/api/commands/UpdateHostCmd.java +++ b/api/src/com/cloud/api/commands/UpdateHostCmd.java @@ -29,7 +29,6 @@ import com.cloud.api.ServerApiException; import com.cloud.api.response.HostResponse; import com.cloud.host.Host; import com.cloud.user.Account; -import com.cloud.utils.fsm.NoTransitionException; @Implementation(description="Updates a host.", responseObject=HostResponse.class) public class UpdateHostCmd extends BaseCmd { diff --git a/api/src/com/cloud/api/commands/UpdateHypervisorCapabilitiesCmd.java b/api/src/com/cloud/api/commands/UpdateHypervisorCapabilitiesCmd.java index 3173775891a..08c0beabb79 100644 --- a/api/src/com/cloud/api/commands/UpdateHypervisorCapabilitiesCmd.java +++ b/api/src/com/cloud/api/commands/UpdateHypervisorCapabilitiesCmd.java @@ -16,8 +16,6 @@ // under the License. package com.cloud.api.commands; -import java.util.UUID; - import org.apache.log4j.Logger; import com.cloud.api.ApiConstants; diff --git a/api/src/com/cloud/api/commands/UpdateTemplateOrIsoCmd.java b/api/src/com/cloud/api/commands/UpdateTemplateOrIsoCmd.java index 89c4ee93f5e..74c1d6e731e 100755 --- a/api/src/com/cloud/api/commands/UpdateTemplateOrIsoCmd.java +++ b/api/src/com/cloud/api/commands/UpdateTemplateOrIsoCmd.java @@ -22,7 +22,6 @@ import com.cloud.api.ApiConstants; import com.cloud.api.BaseCmd; import com.cloud.api.IdentityMapper; import com.cloud.api.Parameter; -import com.cloud.api.BaseCmd.CommandType; public abstract class UpdateTemplateOrIsoCmd extends BaseCmd { public static final Logger s_logger = Logger.getLogger(UpdateIsoCmd.class.getName()); diff --git a/api/src/com/cloud/api/commands/UpdateVpnCustomerGatewayCmd.java b/api/src/com/cloud/api/commands/UpdateVpnCustomerGatewayCmd.java index 491c1f6e49b..f19dd23926d 100644 --- a/api/src/com/cloud/api/commands/UpdateVpnCustomerGatewayCmd.java +++ b/api/src/com/cloud/api/commands/UpdateVpnCustomerGatewayCmd.java @@ -28,7 +28,6 @@ import com.cloud.api.ServerApiException; import com.cloud.api.response.Site2SiteCustomerGatewayResponse; import com.cloud.event.EventTypes; import com.cloud.network.Site2SiteCustomerGateway; -import com.cloud.user.Account; import com.cloud.user.UserContext; @Implementation(description="Update site to site vpn customer gateway", responseObject=Site2SiteCustomerGatewayResponse.class) diff --git a/api/src/com/cloud/api/response/AlertResponse.java b/api/src/com/cloud/api/response/AlertResponse.java index c54919e542e..ab1101ed733 100644 --- a/api/src/com/cloud/api/response/AlertResponse.java +++ b/api/src/com/cloud/api/response/AlertResponse.java @@ -17,7 +17,6 @@ package com.cloud.api.response; import java.util.Date; -import java.util.List; import com.cloud.api.ApiConstants; import com.cloud.utils.IdentityProxy; diff --git a/api/src/com/cloud/api/response/ClusterResponse.java b/api/src/com/cloud/api/response/ClusterResponse.java index 329f1f0e784..a32fd23dcb5 100755 --- a/api/src/com/cloud/api/response/ClusterResponse.java +++ b/api/src/com/cloud/api/response/ClusterResponse.java @@ -21,8 +21,6 @@ import java.util.List; import com.cloud.api.ApiConstants; import com.cloud.utils.IdentityProxy; -import com.cloud.api.Parameter; -import com.cloud.api.BaseCmd.CommandType; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; diff --git a/api/src/com/cloud/api/response/LDAPRemoveResponse.java b/api/src/com/cloud/api/response/LDAPRemoveResponse.java index b3cdd9c4da0..aaa529738b4 100644 --- a/api/src/com/cloud/api/response/LDAPRemoveResponse.java +++ b/api/src/com/cloud/api/response/LDAPRemoveResponse.java @@ -16,10 +16,6 @@ // under the License. package com.cloud.api.response; -import com.cloud.api.ApiConstants; -import com.cloud.serializer.Param; -import com.google.gson.annotations.SerializedName; - public class LDAPRemoveResponse extends BaseResponse { public LDAPRemoveResponse(){ diff --git a/api/src/com/cloud/api/response/StorageNetworkIpRangeResponse.java b/api/src/com/cloud/api/response/StorageNetworkIpRangeResponse.java index 68a939778cf..8db19d8e443 100755 --- a/api/src/com/cloud/api/response/StorageNetworkIpRangeResponse.java +++ b/api/src/com/cloud/api/response/StorageNetworkIpRangeResponse.java @@ -17,7 +17,6 @@ package com.cloud.api.response; import com.cloud.api.ApiConstants; -import com.cloud.utils.IdentityProxy; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; diff --git a/api/src/com/cloud/api/response/UserResponse.java b/api/src/com/cloud/api/response/UserResponse.java index 920eb598f5a..d6afa71abc1 100644 --- a/api/src/com/cloud/api/response/UserResponse.java +++ b/api/src/com/cloud/api/response/UserResponse.java @@ -18,7 +18,6 @@ package com.cloud.api.response; import java.util.Date; -import com.cloud.api.ApiConstants; import com.cloud.utils.IdentityProxy; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; diff --git a/api/src/com/cloud/network/as/AutoScaleService.java b/api/src/com/cloud/network/as/AutoScaleService.java index c1ca804bd68..f62a4d65b0a 100644 --- a/api/src/com/cloud/network/as/AutoScaleService.java +++ b/api/src/com/cloud/network/as/AutoScaleService.java @@ -1,19 +1,19 @@ -// 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. +// 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.network.as; import java.util.List; @@ -33,11 +33,6 @@ import com.cloud.api.commands.UpdateAutoScaleVmGroupCmd; import com.cloud.api.commands.UpdateAutoScaleVmProfileCmd; import com.cloud.exception.ResourceInUseException; import com.cloud.exception.ResourceUnavailableException; -import com.cloud.network.as.AutoScalePolicy; -import com.cloud.network.as.AutoScaleVmGroup; -import com.cloud.network.as.AutoScaleVmProfile; -import com.cloud.network.as.Condition; -import com.cloud.network.as.Counter; public interface AutoScaleService { diff --git a/core/src/com/cloud/network/security/SecurityGroupRuleVO.java b/core/src/com/cloud/network/security/SecurityGroupRuleVO.java index 7d38af853db..7c223ee817f 100644 --- a/core/src/com/cloud/network/security/SecurityGroupRuleVO.java +++ b/core/src/com/cloud/network/security/SecurityGroupRuleVO.java @@ -27,7 +27,6 @@ import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.Table; -import com.cloud.api.Identity; import com.cloud.async.AsyncInstanceCreateStatus; import com.google.gson.annotations.Expose; diff --git a/core/src/com/cloud/storage/resource/NfsSecondaryStorageResource.java b/core/src/com/cloud/storage/resource/NfsSecondaryStorageResource.java index 155210df499..3b4cc8f4da9 100755 --- a/core/src/com/cloud/storage/resource/NfsSecondaryStorageResource.java +++ b/core/src/com/cloud/storage/resource/NfsSecondaryStorageResource.java @@ -76,7 +76,6 @@ import com.cloud.agent.api.storage.ListVolumeCommand; import com.cloud.agent.api.storage.UploadCommand; import com.cloud.agent.api.storage.ssCommand; import com.cloud.agent.api.to.SwiftTO; -import com.cloud.api.commands.DeleteVolumeCmd; import com.cloud.exception.InternalErrorException; import com.cloud.host.Host; import com.cloud.host.Host.Type; diff --git a/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/DestroyLunCmd.java b/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/DestroyLunCmd.java index 76ccd0e5c3d..ece9dac2d8b 100644 --- a/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/DestroyLunCmd.java +++ b/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/DestroyLunCmd.java @@ -29,7 +29,6 @@ import com.cloud.exception.ConcurrentOperationException; import com.cloud.exception.InsufficientCapacityException; import com.cloud.exception.InvalidParameterValueException; import com.cloud.exception.ResourceAllocationException; -import com.cloud.exception.ResourceInUseException; import com.cloud.exception.ResourceUnavailableException; import com.cloud.netapp.NetappManager; import com.cloud.server.ManagementService; diff --git a/plugins/hypervisors/vmware/src/com/cloud/api/commands/DeleteCiscoNexusVSMCmd.java b/plugins/hypervisors/vmware/src/com/cloud/api/commands/DeleteCiscoNexusVSMCmd.java index 601ec9d6f4d..2c3778336da 100644 --- a/plugins/hypervisors/vmware/src/com/cloud/api/commands/DeleteCiscoNexusVSMCmd.java +++ b/plugins/hypervisors/vmware/src/com/cloud/api/commands/DeleteCiscoNexusVSMCmd.java @@ -34,7 +34,6 @@ import com.cloud.exception.ResourceAllocationException; import com.cloud.exception.ResourceUnavailableException; import com.cloud.network.element.CiscoNexusVSMElementService; import com.cloud.user.Account; -import com.cloud.user.UserContext; @Implementation(responseObject=SuccessResponse.class, description=" delete a Cisco Nexus VSM device") public class DeleteCiscoNexusVSMCmd extends BaseAsyncCmd { diff --git a/plugins/hypervisors/vmware/src/com/cloud/api/response/CiscoNexusVSMResponse.java b/plugins/hypervisors/vmware/src/com/cloud/api/response/CiscoNexusVSMResponse.java index e0169d3c8e3..0088018fff1 100644 --- a/plugins/hypervisors/vmware/src/com/cloud/api/response/CiscoNexusVSMResponse.java +++ b/plugins/hypervisors/vmware/src/com/cloud/api/response/CiscoNexusVSMResponse.java @@ -16,8 +16,6 @@ // under the License. package com.cloud.api.response; -import javax.persistence.Column; - import com.cloud.api.ApiConstants; import com.cloud.utils.IdentityProxy; import com.cloud.serializer.Param; diff --git a/plugins/hypervisors/vmware/src/com/cloud/network/CiscoNexusVSMDeviceManagerImpl.java b/plugins/hypervisors/vmware/src/com/cloud/network/CiscoNexusVSMDeviceManagerImpl.java index 05214f5c912..d3dcb772af2 100644 --- a/plugins/hypervisors/vmware/src/com/cloud/network/CiscoNexusVSMDeviceManagerImpl.java +++ b/plugins/hypervisors/vmware/src/com/cloud/network/CiscoNexusVSMDeviceManagerImpl.java @@ -16,15 +16,11 @@ // under the License. package com.cloud.network; -import java.util.HashMap; - import java.util.List; -import java.util.Map; import org.apache.log4j.Logger; import com.cloud.agent.api.StartupCommand; -import com.cloud.api.ApiConstants; import com.cloud.configuration.Config; import com.cloud.configuration.dao.ConfigurationDao; import com.cloud.dc.ClusterDetailsDao; @@ -33,7 +29,6 @@ import com.cloud.dc.ClusterVSMMapVO; import com.cloud.dc.dao.ClusterDao; import com.cloud.dc.dao.ClusterVSMMapDao; import com.cloud.exception.InvalidParameterValueException; -import com.cloud.host.DetailVO; import com.cloud.host.Host; import com.cloud.host.HostVO; import com.cloud.host.dao.HostDetailsDao; diff --git a/plugins/hypervisors/vmware/src/com/cloud/network/element/CiscoNexusVSMElement.java b/plugins/hypervisors/vmware/src/com/cloud/network/element/CiscoNexusVSMElement.java index bdb235dc761..78c704451fc 100644 --- a/plugins/hypervisors/vmware/src/com/cloud/network/element/CiscoNexusVSMElement.java +++ b/plugins/hypervisors/vmware/src/com/cloud/network/element/CiscoNexusVSMElement.java @@ -51,7 +51,6 @@ import com.cloud.vm.NicProfile; import com.cloud.vm.ReservationContext; import com.cloud.vm.VirtualMachine; import com.cloud.vm.VirtualMachineProfile; -import com.cloud.network.element.NetworkElement; import com.cloud.offering.NetworkOffering; import com.cloud.org.Cluster; import com.cloud.utils.component.Manager; diff --git a/plugins/network-elements/netscaler/src/com/cloud/api/commands/ConfigureNetscalerLoadBalancerCmd.java b/plugins/network-elements/netscaler/src/com/cloud/api/commands/ConfigureNetscalerLoadBalancerCmd.java index de1a7c84ef5..b6e5155967d 100644 --- a/plugins/network-elements/netscaler/src/com/cloud/api/commands/ConfigureNetscalerLoadBalancerCmd.java +++ b/plugins/network-elements/netscaler/src/com/cloud/api/commands/ConfigureNetscalerLoadBalancerCmd.java @@ -26,7 +26,6 @@ import com.cloud.api.Implementation; import com.cloud.api.Parameter; import com.cloud.api.PlugService; import com.cloud.api.ServerApiException; -import com.cloud.api.BaseCmd.CommandType; import com.cloud.api.response.NetscalerLoadBalancerResponse; import com.cloud.event.EventTypes; import com.cloud.exception.ConcurrentOperationException; diff --git a/plugins/network-elements/netscaler/src/com/cloud/api/response/NetscalerLoadBalancerResponse.java b/plugins/network-elements/netscaler/src/com/cloud/api/response/NetscalerLoadBalancerResponse.java index bbbfca515a1..013119a9e15 100644 --- a/plugins/network-elements/netscaler/src/com/cloud/api/response/NetscalerLoadBalancerResponse.java +++ b/plugins/network-elements/netscaler/src/com/cloud/api/response/NetscalerLoadBalancerResponse.java @@ -19,8 +19,6 @@ package com.cloud.api.response; import java.util.List; import com.cloud.api.ApiConstants; -import com.cloud.api.Parameter; -import com.cloud.api.BaseCmd.CommandType; import com.cloud.utils.IdentityProxy; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; diff --git a/plugins/network-elements/nicira-nvp/src/com/cloud/api/commands/AddNiciraNvpDeviceCmd.java b/plugins/network-elements/nicira-nvp/src/com/cloud/api/commands/AddNiciraNvpDeviceCmd.java index ef12bf62605..44e8477cc4d 100644 --- a/plugins/network-elements/nicira-nvp/src/com/cloud/api/commands/AddNiciraNvpDeviceCmd.java +++ b/plugins/network-elements/nicira-nvp/src/com/cloud/api/commands/AddNiciraNvpDeviceCmd.java @@ -26,16 +26,13 @@ import com.cloud.api.Implementation; import com.cloud.api.Parameter; import com.cloud.api.PlugService; import com.cloud.api.ServerApiException; -import com.cloud.api.BaseCmd.CommandType; import com.cloud.api.response.NiciraNvpDeviceResponse; import com.cloud.event.EventTypes; import com.cloud.exception.ConcurrentOperationException; import com.cloud.exception.InsufficientCapacityException; import com.cloud.exception.InvalidParameterValueException; -import com.cloud.exception.NetworkRuleConflictException; import com.cloud.exception.ResourceAllocationException; import com.cloud.exception.ResourceUnavailableException; -import com.cloud.network.ExternalLoadBalancerDeviceVO; import com.cloud.network.NiciraNvpDeviceVO; import com.cloud.network.element.NiciraNvpElementService; import com.cloud.user.UserContext; diff --git a/plugins/network-elements/nicira-nvp/src/com/cloud/api/commands/ListNiciraNvpDeviceNetworksCmd.java b/plugins/network-elements/nicira-nvp/src/com/cloud/api/commands/ListNiciraNvpDeviceNetworksCmd.java index e8456cfa8f7..1f30657b8a6 100644 --- a/plugins/network-elements/nicira-nvp/src/com/cloud/api/commands/ListNiciraNvpDeviceNetworksCmd.java +++ b/plugins/network-elements/nicira-nvp/src/com/cloud/api/commands/ListNiciraNvpDeviceNetworksCmd.java @@ -29,13 +29,11 @@ import com.cloud.api.Implementation; import com.cloud.api.Parameter; import com.cloud.api.PlugService; import com.cloud.api.ServerApiException; -import com.cloud.api.BaseCmd.CommandType; import com.cloud.api.response.ListResponse; import com.cloud.api.response.NetworkResponse; import com.cloud.exception.ConcurrentOperationException; import com.cloud.exception.InsufficientCapacityException; import com.cloud.exception.InvalidParameterValueException; -import com.cloud.exception.NetworkRuleConflictException; import com.cloud.exception.ResourceAllocationException; import com.cloud.exception.ResourceUnavailableException; import com.cloud.network.Network; diff --git a/plugins/network-elements/nicira-nvp/src/com/cloud/network/element/NiciraNvpElement.java b/plugins/network-elements/nicira-nvp/src/com/cloud/network/element/NiciraNvpElement.java index b1e9af2fd52..46167364306 100644 --- a/plugins/network-elements/nicira-nvp/src/com/cloud/network/element/NiciraNvpElement.java +++ b/plugins/network-elements/nicira-nvp/src/com/cloud/network/element/NiciraNvpElement.java @@ -48,7 +48,6 @@ import com.cloud.agent.api.FindLogicalSwitchPortAnswer; import com.cloud.agent.api.FindLogicalSwitchPortCommand; import com.cloud.agent.api.StartupCommand; import com.cloud.agent.api.StartupNiciraNvpCommand; -import com.cloud.agent.api.UpdateLogicalSwitchPortAnswer; import com.cloud.agent.api.UpdateLogicalSwitchPortCommand; import com.cloud.agent.api.to.PortForwardingRuleTO; import com.cloud.agent.api.to.StaticNatRuleTO; @@ -95,13 +94,9 @@ import com.cloud.network.dao.NiciraNvpRouterMappingDao; import com.cloud.network.dao.PhysicalNetworkDao; import com.cloud.network.dao.PhysicalNetworkServiceProviderDao; import com.cloud.network.dao.PhysicalNetworkServiceProviderVO; -import com.cloud.network.guru.NiciraNvpGuestNetworkGuru; import com.cloud.network.resource.NiciraNvpResource; -import com.cloud.network.rules.FirewallRule; import com.cloud.network.rules.PortForwardingRule; import com.cloud.network.rules.StaticNat; -import com.cloud.network.rules.StaticNatRule; -import com.cloud.network.rules.FirewallRule.Purpose; import com.cloud.offering.NetworkOffering; import com.cloud.resource.ResourceManager; import com.cloud.resource.ResourceState; diff --git a/plugins/user-authenticators/ldap/src/com/cloud/server/auth/LDAPUserAuthenticator.java b/plugins/user-authenticators/ldap/src/com/cloud/server/auth/LDAPUserAuthenticator.java index 43874f61cb7..2ff419cdff6 100644 --- a/plugins/user-authenticators/ldap/src/com/cloud/server/auth/LDAPUserAuthenticator.java +++ b/plugins/user-authenticators/ldap/src/com/cloud/server/auth/LDAPUserAuthenticator.java @@ -17,12 +17,10 @@ package com.cloud.server.auth; import java.security.NoSuchAlgorithmException; import java.security.SecureRandom; -import java.util.HashMap; import java.util.Hashtable; import java.util.Map; import javax.ejb.Local; -import javax.naming.AuthenticationException; import javax.naming.ConfigurationException; import javax.naming.Context; import javax.naming.NamingEnumeration; @@ -36,13 +34,11 @@ import org.apache.log4j.Logger; import org.bouncycastle.util.encoders.Base64; import com.cloud.api.ApiConstants.LDAPParams; -import com.cloud.configuration.Config; import com.cloud.configuration.dao.ConfigurationDao; import com.cloud.server.ManagementServer; import com.cloud.user.UserAccount; import com.cloud.user.dao.UserAccountDao; import com.cloud.utils.component.ComponentLocator; -import com.cloud.utils.crypt.DBEncryptionUtil; import com.cloud.utils.exception.CloudRuntimeException; diff --git a/server/src/com/cloud/alert/AlertManagerImpl.java b/server/src/com/cloud/alert/AlertManagerImpl.java index 3909f13ea94..a4c0facc97d 100755 --- a/server/src/com/cloud/alert/AlertManagerImpl.java +++ b/server/src/com/cloud/alert/AlertManagerImpl.java @@ -70,7 +70,6 @@ import com.cloud.storage.StoragePoolVO; import com.cloud.storage.dao.StoragePoolDao; import com.cloud.storage.dao.VolumeDao; import com.cloud.utils.NumbersUtil; -import com.cloud.utils.Pair; import com.cloud.utils.component.ComponentLocator; import com.cloud.utils.component.Inject; import com.cloud.utils.db.DB; diff --git a/server/src/com/cloud/api/ApiDispatcher.java b/server/src/com/cloud/api/ApiDispatcher.java index 4f94961e84f..9a4705926b2 100755 --- a/server/src/com/cloud/api/ApiDispatcher.java +++ b/server/src/com/cloud/api/ApiDispatcher.java @@ -50,10 +50,8 @@ import com.cloud.server.ManagementServer; import com.cloud.storage.dao.VMTemplateDao; import com.cloud.user.Account; import com.cloud.user.AccountManager; -import com.cloud.user.AccountService; import com.cloud.user.UserContext; import com.cloud.utils.DateUtil; -import com.cloud.utils.IdentityProxy; import com.cloud.utils.NumbersUtil; import com.cloud.utils.component.ComponentLocator; import com.cloud.utils.component.PluggableService; diff --git a/server/src/com/cloud/api/ApiResponseHelper.java b/server/src/com/cloud/api/ApiResponseHelper.java index ebe8415048b..54884b99f73 100755 --- a/server/src/com/cloud/api/ApiResponseHelper.java +++ b/server/src/com/cloud/api/ApiResponseHelper.java @@ -131,7 +131,6 @@ import com.cloud.dc.Vlan.VlanType; import com.cloud.dc.VlanVO; import com.cloud.domain.Domain; import com.cloud.event.Event; -import com.cloud.exception.InvalidParameterValueException; import com.cloud.host.Host; import com.cloud.host.HostStats; import com.cloud.host.HostVO; diff --git a/server/src/com/cloud/api/ApiServer.java b/server/src/com/cloud/api/ApiServer.java index 9ae68d4d157..73aa524bb0d 100755 --- a/server/src/com/cloud/api/ApiServer.java +++ b/server/src/com/cloud/api/ApiServer.java @@ -17,11 +17,7 @@ package com.cloud.api; import java.io.ByteArrayInputStream; -import java.io.File; -import java.io.FileInputStream; -import java.io.FileNotFoundException; import java.io.IOException; -import java.io.InputStream; import java.io.InterruptedIOException; import java.io.UnsupportedEncodingException; import java.net.InetAddress; @@ -82,7 +78,6 @@ import org.apache.http.protocol.ResponseServer; import org.apache.log4j.Logger; import com.cloud.acl.ControlledEntity; -import com.cloud.agent.manager.allocator.HostAllocator; import com.cloud.api.response.ApiResponseSerializer; import com.cloud.api.response.ExceptionResponse; import com.cloud.api.response.ListResponse; @@ -109,11 +104,9 @@ import com.cloud.user.UserContext; import com.cloud.user.UserVO; import com.cloud.utils.IdentityProxy; import com.cloud.utils.Pair; -import com.cloud.utils.PropertiesUtil; import com.cloud.utils.component.Adapters; import com.cloud.utils.component.ComponentLocator; import com.cloud.utils.component.Inject; -import com.cloud.utils.component.PluggableService; import com.cloud.utils.concurrency.NamedThreadFactory; import com.cloud.utils.db.SearchCriteria; import com.cloud.utils.db.Transaction; diff --git a/server/src/com/cloud/api/IdentityTypeAdapter.java b/server/src/com/cloud/api/IdentityTypeAdapter.java index 0e91a4ee444..369c2020c24 100644 --- a/server/src/com/cloud/api/IdentityTypeAdapter.java +++ b/server/src/com/cloud/api/IdentityTypeAdapter.java @@ -17,7 +17,6 @@ package com.cloud.api; import java.lang.reflect.Type; -import java.util.ArrayList; import com.cloud.uuididentity.dao.IdentityDao; import com.cloud.uuididentity.dao.IdentityDaoImpl; diff --git a/server/src/com/cloud/api/doc/ApiXmlDocWriter.java b/server/src/com/cloud/api/doc/ApiXmlDocWriter.java index d31ef5a8a5f..b2c815b7178 100644 --- a/server/src/com/cloud/api/doc/ApiXmlDocWriter.java +++ b/server/src/com/cloud/api/doc/ApiXmlDocWriter.java @@ -49,7 +49,6 @@ import com.cloud.api.response.AsyncJobResponse; import com.cloud.api.response.BaseResponse; import com.cloud.api.response.HostResponse; import com.cloud.api.response.IPAddressResponse; -import com.cloud.api.response.LoadBalancerResponse; import com.cloud.api.response.SecurityGroupResponse; import com.cloud.api.response.SnapshotResponse; import com.cloud.api.response.StoragePoolResponse; @@ -57,7 +56,6 @@ import com.cloud.api.response.TemplateResponse; import com.cloud.api.response.UserVmResponse; import com.cloud.api.response.VolumeResponse; import com.cloud.serializer.Param; -import com.cloud.server.api.response.ExternalLoadBalancerResponse; import com.google.gson.annotations.SerializedName; import com.thoughtworks.xstream.XStream; diff --git a/server/src/com/cloud/deploy/FirstFitPlanner.java b/server/src/com/cloud/deploy/FirstFitPlanner.java index 88b0cbd8965..06e46fb9837 100755 --- a/server/src/com/cloud/deploy/FirstFitPlanner.java +++ b/server/src/com/cloud/deploy/FirstFitPlanner.java @@ -35,7 +35,6 @@ import com.cloud.capacity.Capacity; import com.cloud.capacity.CapacityManager; import com.cloud.capacity.CapacityVO; import com.cloud.capacity.dao.CapacityDao; -import com.cloud.capacity.dao.CapacityDaoImpl.SummedCapacity; import com.cloud.configuration.Config; import com.cloud.configuration.dao.ConfigurationDao; import com.cloud.dc.ClusterVO; @@ -73,7 +72,6 @@ import com.cloud.storage.dao.VolumeDao; import com.cloud.user.AccountManager; import com.cloud.utils.NumbersUtil; import com.cloud.utils.Pair; -import com.cloud.utils.StringUtils; import com.cloud.utils.component.Adapters; import com.cloud.utils.component.Inject; import com.cloud.vm.DiskProfile; diff --git a/server/src/com/cloud/network/ExternalFirewallDeviceManagerImpl.java b/server/src/com/cloud/network/ExternalFirewallDeviceManagerImpl.java index 1629dd5e5f3..9a06462f01f 100644 --- a/server/src/com/cloud/network/ExternalFirewallDeviceManagerImpl.java +++ b/server/src/com/cloud/network/ExternalFirewallDeviceManagerImpl.java @@ -30,7 +30,6 @@ import com.cloud.agent.AgentManager; import com.cloud.agent.api.Answer; import com.cloud.agent.api.StartupCommand; import com.cloud.agent.api.StartupExternalFirewallCommand; -import com.cloud.agent.api.StartupExternalLoadBalancerCommand; import com.cloud.agent.api.routing.IpAssocCommand; import com.cloud.agent.api.routing.NetworkElementCommand; import com.cloud.agent.api.routing.RemoteAccessVpnCfgCommand; @@ -59,10 +58,7 @@ import com.cloud.host.Host; import com.cloud.host.HostVO; import com.cloud.host.dao.HostDao; import com.cloud.host.dao.HostDetailsDao; -import com.cloud.network.ExternalFirewallDeviceVO.FirewallDeviceState; import com.cloud.network.ExternalNetworkDeviceManager.NetworkDevice; -import com.cloud.network.Network.Capability; -import com.cloud.network.Network.Service; import com.cloud.network.Networks.TrafficType; import com.cloud.network.dao.ExternalFirewallDeviceDao; import com.cloud.network.dao.IPAddressDao; diff --git a/server/src/com/cloud/network/ExternalNetworkDeviceManagerImpl.java b/server/src/com/cloud/network/ExternalNetworkDeviceManagerImpl.java index dfe720e08a2..4ddaeb0afb3 100755 --- a/server/src/com/cloud/network/ExternalNetworkDeviceManagerImpl.java +++ b/server/src/com/cloud/network/ExternalNetworkDeviceManagerImpl.java @@ -31,7 +31,6 @@ import org.apache.log4j.Logger; import com.cloud.agent.AgentManager; import com.cloud.api.ApiConstants; import com.cloud.api.IdentityService; -import com.cloud.api.PlugService; import com.cloud.api.commands.AddNetworkDeviceCmd; import com.cloud.api.commands.DeleteNetworkDeviceCmd; import com.cloud.api.commands.ListNetworkDeviceCmd; @@ -44,9 +43,7 @@ import com.cloud.dc.dao.DataCenterDao; import com.cloud.dc.dao.VlanDao; import com.cloud.host.Host; import com.cloud.host.HostVO; -import com.cloud.host.Host.Type; import com.cloud.host.dao.HostDao; -import com.cloud.host.dao.HostDetailsDao; import com.cloud.network.dao.ExternalFirewallDeviceDao; import com.cloud.network.dao.ExternalLoadBalancerDeviceDao; import com.cloud.network.dao.IPAddressDao; @@ -60,7 +57,6 @@ import com.cloud.network.dao.PhysicalNetworkServiceProviderDao; import com.cloud.network.dao.VpnUserDao; import com.cloud.network.rules.dao.PortForwardingRulesDao; import com.cloud.offerings.dao.NetworkOfferingDao; -import com.cloud.resource.ServerResource; import com.cloud.server.ManagementServer; import com.cloud.server.api.response.NetworkDeviceResponse; import com.cloud.server.api.response.NwDeviceDhcpResponse; diff --git a/server/src/com/cloud/network/NetworkManagerImpl.java b/server/src/com/cloud/network/NetworkManagerImpl.java index ec0ca79e89a..f4868e7fc39 100755 --- a/server/src/com/cloud/network/NetworkManagerImpl.java +++ b/server/src/com/cloud/network/NetworkManagerImpl.java @@ -184,7 +184,6 @@ import com.cloud.user.User; import com.cloud.user.UserContext; import com.cloud.user.dao.AccountDao; import com.cloud.user.dao.UserStatisticsDao; -import com.cloud.uservm.UserVm; import com.cloud.utils.AnnotationHelper; import com.cloud.utils.NumbersUtil; import com.cloud.utils.Pair; @@ -204,7 +203,6 @@ import com.cloud.utils.exception.CloudRuntimeException; import com.cloud.utils.net.Ip; import com.cloud.utils.net.NetUtils; import com.cloud.vm.Nic; -import com.cloud.vm.Nic.ReservationStrategy; import com.cloud.vm.NicProfile; import com.cloud.vm.NicVO; import com.cloud.vm.ReservationContext; diff --git a/server/src/com/cloud/network/StorageNetworkManagerImpl.java b/server/src/com/cloud/network/StorageNetworkManagerImpl.java index 598ade6342c..3772f55e5da 100755 --- a/server/src/com/cloud/network/StorageNetworkManagerImpl.java +++ b/server/src/com/cloud/network/StorageNetworkManagerImpl.java @@ -38,12 +38,9 @@ import com.cloud.dc.StorageNetworkIpRangeVO; import com.cloud.dc.dao.HostPodDao; import com.cloud.dc.dao.StorageNetworkIpAddressDao; import com.cloud.dc.dao.StorageNetworkIpRangeDao; -import com.cloud.exception.InsufficientAddressCapacityException; import com.cloud.exception.InvalidParameterValueException; -import com.cloud.host.HostVO; import com.cloud.network.Networks.TrafficType; import com.cloud.network.dao.NetworkDao; -import com.cloud.utils.Pair; import com.cloud.utils.component.Inject; import com.cloud.utils.db.DB; import com.cloud.utils.db.SearchCriteria2; @@ -55,7 +52,6 @@ import com.cloud.utils.net.NetUtils; import com.cloud.vm.SecondaryStorageVmVO; import com.cloud.vm.VirtualMachine; import com.cloud.vm.dao.SecondaryStorageVmDao; -import com.cloud.vm.dao.VMInstanceDao; @Local(value = {StorageNetworkManager.class, StorageNetworkService.class}) public class StorageNetworkManagerImpl implements StorageNetworkManager, StorageNetworkService { diff --git a/server/src/com/cloud/network/firewall/FirewallManagerImpl.java b/server/src/com/cloud/network/firewall/FirewallManagerImpl.java index 6e3805bac59..9511a9e0566 100644 --- a/server/src/com/cloud/network/firewall/FirewallManagerImpl.java +++ b/server/src/com/cloud/network/firewall/FirewallManagerImpl.java @@ -66,7 +66,6 @@ import com.cloud.user.Account; import com.cloud.user.AccountManager; import com.cloud.user.DomainManager; import com.cloud.user.UserContext; -import com.cloud.utils.IdentityProxy; import com.cloud.utils.Pair; import com.cloud.utils.Ternary; import com.cloud.utils.component.Inject; diff --git a/server/src/com/cloud/network/lb/LoadBalancingRulesManagerImpl.java b/server/src/com/cloud/network/lb/LoadBalancingRulesManagerImpl.java index 6346bc3fd6a..6d1041a659d 100755 --- a/server/src/com/cloud/network/lb/LoadBalancingRulesManagerImpl.java +++ b/server/src/com/cloud/network/lb/LoadBalancingRulesManagerImpl.java @@ -125,7 +125,6 @@ import com.cloud.user.UserContext; import com.cloud.user.dao.AccountDao; import com.cloud.user.dao.UserDao; import com.cloud.uservm.UserVm; -import com.cloud.utils.IdentityProxy; import com.cloud.utils.Pair; import com.cloud.utils.Ternary; import com.cloud.utils.component.Inject; diff --git a/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java b/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java index a7f4b5e3479..5d0892ab60a 100755 --- a/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java +++ b/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java @@ -17,7 +17,6 @@ package com.cloud.network.router; -import java.net.URI; import java.util.ArrayList; import java.util.Calendar; import java.util.Collections; @@ -67,7 +66,6 @@ import com.cloud.agent.api.routing.NetworkElementCommand; import com.cloud.agent.api.routing.RemoteAccessVpnCfgCommand; import com.cloud.agent.api.routing.SavePasswordCommand; import com.cloud.agent.api.routing.SetFirewallRulesCommand; -import com.cloud.agent.api.routing.SetNetworkACLCommand; import com.cloud.agent.api.routing.SetPortForwardingRulesCommand; import com.cloud.agent.api.routing.SetPortForwardingRulesVpcCommand; import com.cloud.agent.api.routing.SetStaticNatRulesCommand; @@ -76,7 +74,6 @@ import com.cloud.agent.api.routing.VpnUsersCfgCommand; import com.cloud.agent.api.to.FirewallRuleTO; import com.cloud.agent.api.to.IpAddressTO; import com.cloud.agent.api.to.LoadBalancerTO; -import com.cloud.agent.api.to.NetworkACLTO; import com.cloud.agent.api.to.NicTO; import com.cloud.agent.api.to.PortForwardingRuleTO; import com.cloud.agent.api.to.StaticNatRuleTO; diff --git a/server/src/com/cloud/network/rules/RulesManagerImpl.java b/server/src/com/cloud/network/rules/RulesManagerImpl.java index a4e0722c0b2..8e44e82c28d 100755 --- a/server/src/com/cloud/network/rules/RulesManagerImpl.java +++ b/server/src/com/cloud/network/rules/RulesManagerImpl.java @@ -61,7 +61,6 @@ import com.cloud.user.AccountManager; import com.cloud.user.DomainManager; import com.cloud.user.UserContext; import com.cloud.uservm.UserVm; -import com.cloud.utils.IdentityProxy; import com.cloud.utils.Pair; import com.cloud.utils.Ternary; import com.cloud.utils.component.Inject; diff --git a/server/src/com/cloud/network/vpc/NetworkACLManagerImpl.java b/server/src/com/cloud/network/vpc/NetworkACLManagerImpl.java index ce1b768e9f8..b126c0e6a96 100644 --- a/server/src/com/cloud/network/vpc/NetworkACLManagerImpl.java +++ b/server/src/com/cloud/network/vpc/NetworkACLManagerImpl.java @@ -51,7 +51,6 @@ import com.cloud.tags.dao.ResourceTagDao; import com.cloud.user.Account; import com.cloud.user.AccountManager; import com.cloud.user.UserContext; -import com.cloud.utils.IdentityProxy; import com.cloud.utils.Pair; import com.cloud.utils.Ternary; import com.cloud.utils.component.Inject; diff --git a/server/src/com/cloud/network/vpn/Site2SiteVpnManagerImpl.java b/server/src/com/cloud/network/vpn/Site2SiteVpnManagerImpl.java index da993d0b754..2f23b211426 100644 --- a/server/src/com/cloud/network/vpn/Site2SiteVpnManagerImpl.java +++ b/server/src/com/cloud/network/vpn/Site2SiteVpnManagerImpl.java @@ -65,7 +65,6 @@ import com.cloud.user.Account; import com.cloud.user.AccountManager; import com.cloud.user.UserContext; import com.cloud.user.dao.AccountDao; -import com.cloud.user.dao.UserStatisticsDao; import com.cloud.utils.NumbersUtil; import com.cloud.utils.Pair; import com.cloud.utils.Ternary; diff --git a/server/src/com/cloud/resource/ResourceManagerImpl.java b/server/src/com/cloud/resource/ResourceManagerImpl.java index ced601b179b..bc2eb60802d 100755 --- a/server/src/com/cloud/resource/ResourceManagerImpl.java +++ b/server/src/com/cloud/resource/ResourceManagerImpl.java @@ -69,7 +69,6 @@ import com.cloud.configuration.ConfigurationManager; import com.cloud.configuration.dao.ConfigurationDao; import com.cloud.dc.ClusterDetailsDao; import com.cloud.dc.ClusterVO; -import com.cloud.dc.ClusterVSMMapVO; import com.cloud.dc.DataCenterIpAddressVO; import com.cloud.dc.DataCenterVO; import com.cloud.dc.HostPodVO; @@ -130,7 +129,6 @@ import com.cloud.user.UserContext; import com.cloud.utils.Pair; import com.cloud.utils.StringUtils; import com.cloud.utils.UriUtils; -import com.cloud.utils.cisco.n1kv.vsm.NetconfHelper; import com.cloud.utils.component.Adapters; import com.cloud.utils.component.Inject; import com.cloud.utils.component.Manager; diff --git a/server/src/com/cloud/server/ManagementServerImpl.java b/server/src/com/cloud/server/ManagementServerImpl.java index 117be5797b0..343ece794a5 100755 --- a/server/src/com/cloud/server/ManagementServerImpl.java +++ b/server/src/com/cloud/server/ManagementServerImpl.java @@ -216,7 +216,6 @@ import com.cloud.user.AccountVO; import com.cloud.user.SSHKeyPair; import com.cloud.user.SSHKeyPairVO; import com.cloud.user.User; -import com.cloud.user.UserAccount; import com.cloud.user.UserContext; import com.cloud.user.UserVO; import com.cloud.user.dao.AccountDao; diff --git a/server/src/com/cloud/server/api/response/ExternalFirewallResponse.java b/server/src/com/cloud/server/api/response/ExternalFirewallResponse.java index 728db4b8c01..05d605bca85 100644 --- a/server/src/com/cloud/server/api/response/ExternalFirewallResponse.java +++ b/server/src/com/cloud/server/api/response/ExternalFirewallResponse.java @@ -18,7 +18,6 @@ package com.cloud.server.api.response; import com.cloud.api.ApiConstants; import com.cloud.utils.IdentityProxy; -import com.cloud.api.response.BaseResponse; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; diff --git a/server/src/com/cloud/server/api/response/ExternalLoadBalancerResponse.java b/server/src/com/cloud/server/api/response/ExternalLoadBalancerResponse.java index 5eb7a96a134..7359570aafc 100644 --- a/server/src/com/cloud/server/api/response/ExternalLoadBalancerResponse.java +++ b/server/src/com/cloud/server/api/response/ExternalLoadBalancerResponse.java @@ -18,7 +18,6 @@ package com.cloud.server.api.response; import com.cloud.api.ApiConstants; import com.cloud.utils.IdentityProxy; -import com.cloud.api.response.BaseResponse; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; diff --git a/server/src/com/cloud/server/api/response/netapp/DeleteLUNCmdResponse.java b/server/src/com/cloud/server/api/response/netapp/DeleteLUNCmdResponse.java index d4dc5747556..57af127ae58 100644 --- a/server/src/com/cloud/server/api/response/netapp/DeleteLUNCmdResponse.java +++ b/server/src/com/cloud/server/api/response/netapp/DeleteLUNCmdResponse.java @@ -16,10 +16,7 @@ // under the License. package com.cloud.server.api.response.netapp; -import com.cloud.api.ApiConstants; import com.cloud.api.response.BaseResponse; -import com.cloud.serializer.Param; -import com.google.gson.annotations.SerializedName; public class DeleteLUNCmdResponse extends BaseResponse{ } diff --git a/server/src/com/cloud/server/api/response/netapp/DeleteVolumeOnFilerCmdResponse.java b/server/src/com/cloud/server/api/response/netapp/DeleteVolumeOnFilerCmdResponse.java index 455caa00dcd..6d6f367302c 100644 --- a/server/src/com/cloud/server/api/response/netapp/DeleteVolumeOnFilerCmdResponse.java +++ b/server/src/com/cloud/server/api/response/netapp/DeleteVolumeOnFilerCmdResponse.java @@ -16,10 +16,7 @@ // under the License. package com.cloud.server.api.response.netapp; -import com.cloud.api.ApiConstants; import com.cloud.api.response.BaseResponse; -import com.cloud.serializer.Param; -import com.google.gson.annotations.SerializedName; public class DeleteVolumeOnFilerCmdResponse extends BaseResponse { } diff --git a/server/src/com/cloud/server/api/response/netapp/DissociateLunCmdResponse.java b/server/src/com/cloud/server/api/response/netapp/DissociateLunCmdResponse.java index 6756b5d2c23..fd9cd606038 100644 --- a/server/src/com/cloud/server/api/response/netapp/DissociateLunCmdResponse.java +++ b/server/src/com/cloud/server/api/response/netapp/DissociateLunCmdResponse.java @@ -16,10 +16,7 @@ // under the License. package com.cloud.server.api.response.netapp; -import com.cloud.api.ApiConstants; import com.cloud.api.response.BaseResponse; -import com.cloud.serializer.Param; -import com.google.gson.annotations.SerializedName; public class DissociateLunCmdResponse extends BaseResponse { } diff --git a/server/src/com/cloud/server/api/response/netapp/ModifyVolumePoolCmdResponse.java b/server/src/com/cloud/server/api/response/netapp/ModifyVolumePoolCmdResponse.java index 33b2b788e83..444c2e7f5a0 100644 --- a/server/src/com/cloud/server/api/response/netapp/ModifyVolumePoolCmdResponse.java +++ b/server/src/com/cloud/server/api/response/netapp/ModifyVolumePoolCmdResponse.java @@ -16,10 +16,7 @@ // under the License. package com.cloud.server.api.response.netapp; -import com.cloud.api.ApiConstants; import com.cloud.api.response.BaseResponse; -import com.cloud.serializer.Param; -import com.google.gson.annotations.SerializedName; public class ModifyVolumePoolCmdResponse extends BaseResponse { } diff --git a/server/src/com/cloud/storage/snapshot/SnapshotSchedulerImpl.java b/server/src/com/cloud/storage/snapshot/SnapshotSchedulerImpl.java index 80c6a236a42..5920aeec078 100644 --- a/server/src/com/cloud/storage/snapshot/SnapshotSchedulerImpl.java +++ b/server/src/com/cloud/storage/snapshot/SnapshotSchedulerImpl.java @@ -37,7 +37,6 @@ import com.cloud.async.AsyncJobManager; import com.cloud.async.AsyncJobResult; import com.cloud.async.AsyncJobVO; import com.cloud.async.dao.AsyncJobDao; -import com.cloud.configuration.Config; import com.cloud.configuration.dao.ConfigurationDao; import com.cloud.event.EventTypes; import com.cloud.event.EventUtils; diff --git a/server/src/com/cloud/storage/upload/UploadListener.java b/server/src/com/cloud/storage/upload/UploadListener.java index 5e8e3e0a8ab..d07802f8b82 100755 --- a/server/src/com/cloud/storage/upload/UploadListener.java +++ b/server/src/com/cloud/storage/upload/UploadListener.java @@ -44,8 +44,6 @@ import com.cloud.api.commands.ExtractVolumeCmd; import com.cloud.api.response.ExtractResponse; import com.cloud.async.AsyncJobManager; import com.cloud.async.AsyncJobResult; -import com.cloud.async.executor.ExtractJobResultObject; -import com.cloud.event.EventVO; import com.cloud.exception.AgentUnavailableException; import com.cloud.host.HostVO; import com.cloud.storage.Storage; diff --git a/server/test/com/cloud/keystore/KeystoreTest.java b/server/test/com/cloud/keystore/KeystoreTest.java index e0e21268184..3a1409b8a78 100644 --- a/server/test/com/cloud/keystore/KeystoreTest.java +++ b/server/test/com/cloud/keystore/KeystoreTest.java @@ -16,27 +16,15 @@ // under the License. package com.cloud.keystore; -import java.security.KeyStore; -import java.util.Date; -import java.util.HashMap; -import java.util.regex.Matcher; -import java.util.regex.Pattern; - import junit.framework.TestCase; import org.apache.log4j.Logger; import org.junit.After; import org.junit.Before; -import com.cloud.api.ApiResponseHelper; import com.cloud.api.ApiSerializerHelper; import com.cloud.api.response.AlertResponse; -import com.cloud.api.response.ApiResponseSerializer; import com.cloud.api.response.UserVmResponse; -import com.cloud.configuration.DefaultInterceptorLibrary; -import com.cloud.utils.component.ComponentLocator; -import com.cloud.utils.component.MockComponentLocator; -import com.cloud.utils.security.CertificateHelper; public class KeystoreTest extends TestCase { private final static Logger s_logger = Logger.getLogger(KeystoreTest.class); diff --git a/server/test/com/cloud/vpc/MockConfigurationManagerImpl.java b/server/test/com/cloud/vpc/MockConfigurationManagerImpl.java index 2a2588629b6..f8fc6a78c51 100644 --- a/server/test/com/cloud/vpc/MockConfigurationManagerImpl.java +++ b/server/test/com/cloud/vpc/MockConfigurationManagerImpl.java @@ -84,7 +84,7 @@ public class MockConfigurationManagerImpl implements ConfigurationManager, Confi NetworkOfferingDao _ntwkOffDao; /* (non-Javadoc) - * @see com.cloud.configuration.ConfigurationService#updateConfiguration(com.cloud.api.commands.UpdateCfgCmd) + * @see com.cloud.configuration.ConfigurationService#updateConfiguration(org.apache.cloudstack.api.commands.UpdateCfgCmd) */ @Override public Configuration updateConfiguration(UpdateCfgCmd cmd) { @@ -93,7 +93,7 @@ public class MockConfigurationManagerImpl implements ConfigurationManager, Confi } /* (non-Javadoc) - * @see com.cloud.configuration.ConfigurationService#createServiceOffering(com.cloud.api.commands.CreateServiceOfferingCmd) + * @see com.cloud.configuration.ConfigurationService#createServiceOffering(org.apache.cloudstack.api.commands.CreateServiceOfferingCmd) */ @Override public ServiceOffering createServiceOffering(CreateServiceOfferingCmd cmd) { @@ -102,7 +102,7 @@ public class MockConfigurationManagerImpl implements ConfigurationManager, Confi } /* (non-Javadoc) - * @see com.cloud.configuration.ConfigurationService#updateServiceOffering(com.cloud.api.commands.UpdateServiceOfferingCmd) + * @see com.cloud.configuration.ConfigurationService#updateServiceOffering(org.apache.cloudstack.api.commands.UpdateServiceOfferingCmd) */ @Override public ServiceOffering updateServiceOffering(UpdateServiceOfferingCmd cmd) { @@ -111,7 +111,7 @@ public class MockConfigurationManagerImpl implements ConfigurationManager, Confi } /* (non-Javadoc) - * @see com.cloud.configuration.ConfigurationService#deleteServiceOffering(com.cloud.api.commands.DeleteServiceOfferingCmd) + * @see com.cloud.configuration.ConfigurationService#deleteServiceOffering(org.apache.cloudstack.api.commands.DeleteServiceOfferingCmd) */ @Override public boolean deleteServiceOffering(DeleteServiceOfferingCmd cmd) { @@ -120,7 +120,7 @@ public class MockConfigurationManagerImpl implements ConfigurationManager, Confi } /* (non-Javadoc) - * @see com.cloud.configuration.ConfigurationService#updateDiskOffering(com.cloud.api.commands.UpdateDiskOfferingCmd) + * @see com.cloud.configuration.ConfigurationService#updateDiskOffering(org.apache.cloudstack.api.commands.UpdateDiskOfferingCmd) */ @Override public DiskOffering updateDiskOffering(UpdateDiskOfferingCmd cmd) { @@ -129,7 +129,7 @@ public class MockConfigurationManagerImpl implements ConfigurationManager, Confi } /* (non-Javadoc) - * @see com.cloud.configuration.ConfigurationService#deleteDiskOffering(com.cloud.api.commands.DeleteDiskOfferingCmd) + * @see com.cloud.configuration.ConfigurationService#deleteDiskOffering(org.apache.cloudstack.api.commands.DeleteDiskOfferingCmd) */ @Override public boolean deleteDiskOffering(DeleteDiskOfferingCmd cmd) { @@ -138,7 +138,7 @@ public class MockConfigurationManagerImpl implements ConfigurationManager, Confi } /* (non-Javadoc) - * @see com.cloud.configuration.ConfigurationService#createDiskOffering(com.cloud.api.commands.CreateDiskOfferingCmd) + * @see com.cloud.configuration.ConfigurationService#createDiskOffering(org.apache.cloudstack.api.commands.CreateDiskOfferingCmd) */ @Override public DiskOffering createDiskOffering(CreateDiskOfferingCmd cmd) { @@ -156,7 +156,7 @@ public class MockConfigurationManagerImpl implements ConfigurationManager, Confi } /* (non-Javadoc) - * @see com.cloud.configuration.ConfigurationService#editPod(com.cloud.api.commands.UpdatePodCmd) + * @see com.cloud.configuration.ConfigurationService#editPod(org.apache.cloudstack.api.commands.UpdatePodCmd) */ @Override public Pod editPod(UpdatePodCmd cmd) { @@ -165,7 +165,7 @@ public class MockConfigurationManagerImpl implements ConfigurationManager, Confi } /* (non-Javadoc) - * @see com.cloud.configuration.ConfigurationService#deletePod(com.cloud.api.commands.DeletePodCmd) + * @see com.cloud.configuration.ConfigurationService#deletePod(org.apache.cloudstack.api.commands.DeletePodCmd) */ @Override public boolean deletePod(DeletePodCmd cmd) { @@ -174,7 +174,7 @@ public class MockConfigurationManagerImpl implements ConfigurationManager, Confi } /* (non-Javadoc) - * @see com.cloud.configuration.ConfigurationService#createZone(com.cloud.api.commands.CreateZoneCmd) + * @see com.cloud.configuration.ConfigurationService#createZone(org.apache.cloudstack.api.commands.CreateZoneCmd) */ @Override public DataCenter createZone(CreateZoneCmd cmd) { @@ -183,7 +183,7 @@ public class MockConfigurationManagerImpl implements ConfigurationManager, Confi } /* (non-Javadoc) - * @see com.cloud.configuration.ConfigurationService#editZone(com.cloud.api.commands.UpdateZoneCmd) + * @see com.cloud.configuration.ConfigurationService#editZone(org.apache.cloudstack.api.commands.UpdateZoneCmd) */ @Override public DataCenter editZone(UpdateZoneCmd cmd) { @@ -192,7 +192,7 @@ public class MockConfigurationManagerImpl implements ConfigurationManager, Confi } /* (non-Javadoc) - * @see com.cloud.configuration.ConfigurationService#deleteZone(com.cloud.api.commands.DeleteZoneCmd) + * @see com.cloud.configuration.ConfigurationService#deleteZone(org.apache.cloudstack.api.commands.DeleteZoneCmd) */ @Override public boolean deleteZone(DeleteZoneCmd cmd) { @@ -201,7 +201,7 @@ public class MockConfigurationManagerImpl implements ConfigurationManager, Confi } /* (non-Javadoc) - * @see com.cloud.configuration.ConfigurationService#createVlanAndPublicIpRange(com.cloud.api.commands.CreateVlanIpRangeCmd) + * @see com.cloud.configuration.ConfigurationService#createVlanAndPublicIpRange(org.apache.cloudstack.api.commands.CreateVlanIpRangeCmd) */ @Override public Vlan createVlanAndPublicIpRange(CreateVlanIpRangeCmd cmd) throws InsufficientCapacityException, ConcurrentOperationException, ResourceUnavailableException, ResourceAllocationException { @@ -219,7 +219,7 @@ public class MockConfigurationManagerImpl implements ConfigurationManager, Confi } /* (non-Javadoc) - * @see com.cloud.configuration.ConfigurationService#deleteVlanIpRange(com.cloud.api.commands.DeleteVlanIpRangeCmd) + * @see com.cloud.configuration.ConfigurationService#deleteVlanIpRange(org.apache.cloudstack.api.commands.DeleteVlanIpRangeCmd) */ @Override public boolean deleteVlanIpRange(DeleteVlanIpRangeCmd cmd) { @@ -228,7 +228,7 @@ public class MockConfigurationManagerImpl implements ConfigurationManager, Confi } /* (non-Javadoc) - * @see com.cloud.configuration.ConfigurationService#createNetworkOffering(com.cloud.api.commands.CreateNetworkOfferingCmd) + * @see com.cloud.configuration.ConfigurationService#createNetworkOffering(org.apache.cloudstack.api.commands.CreateNetworkOfferingCmd) */ @Override public NetworkOffering createNetworkOffering(CreateNetworkOfferingCmd cmd) { @@ -237,7 +237,7 @@ public class MockConfigurationManagerImpl implements ConfigurationManager, Confi } /* (non-Javadoc) - * @see com.cloud.configuration.ConfigurationService#updateNetworkOffering(com.cloud.api.commands.UpdateNetworkOfferingCmd) + * @see com.cloud.configuration.ConfigurationService#updateNetworkOffering(org.apache.cloudstack.api.commands.UpdateNetworkOfferingCmd) */ @Override public NetworkOffering updateNetworkOffering(UpdateNetworkOfferingCmd cmd) { @@ -246,7 +246,7 @@ public class MockConfigurationManagerImpl implements ConfigurationManager, Confi } /* (non-Javadoc) - * @see com.cloud.configuration.ConfigurationService#searchForNetworkOfferings(com.cloud.api.commands.ListNetworkOfferingsCmd) + * @see com.cloud.configuration.ConfigurationService#searchForNetworkOfferings(org.apache.cloudstack.api.commands.ListNetworkOfferingsCmd) */ @Override public List searchForNetworkOfferings(ListNetworkOfferingsCmd cmd) { @@ -255,7 +255,7 @@ public class MockConfigurationManagerImpl implements ConfigurationManager, Confi } /* (non-Javadoc) - * @see com.cloud.configuration.ConfigurationService#deleteNetworkOffering(com.cloud.api.commands.DeleteNetworkOfferingCmd) + * @see com.cloud.configuration.ConfigurationService#deleteNetworkOffering(org.apache.cloudstack.api.commands.DeleteNetworkOfferingCmd) */ @Override public boolean deleteNetworkOffering(DeleteNetworkOfferingCmd cmd) { @@ -344,7 +344,7 @@ public class MockConfigurationManagerImpl implements ConfigurationManager, Confi } /* (non-Javadoc) - * @see com.cloud.configuration.ConfigurationService#updateLDAP(com.cloud.api.commands.LDAPConfigCmd) + * @see com.cloud.configuration.ConfigurationService#updateLDAP(org.apache.cloudstack.api.commands.LDAPConfigCmd) */ @Override public boolean updateLDAP(LDAPConfigCmd cmd) throws NamingException { @@ -353,7 +353,7 @@ public class MockConfigurationManagerImpl implements ConfigurationManager, Confi } /* (non-Javadoc) - * @see com.cloud.configuration.ConfigurationService#removeLDAP(com.cloud.api.commands.LDAPRemoveCmd) + * @see com.cloud.configuration.ConfigurationService#removeLDAP(org.apache.cloudstack.api.commands.LDAPRemoveCmd) */ @Override public boolean removeLDAP(LDAPRemoveCmd cmd) { diff --git a/server/test/com/cloud/vpc/MockNetworkManagerImpl.java b/server/test/com/cloud/vpc/MockNetworkManagerImpl.java index dc0e880996e..2ac39f0eb0f 100644 --- a/server/test/com/cloud/vpc/MockNetworkManagerImpl.java +++ b/server/test/com/cloud/vpc/MockNetworkManagerImpl.java @@ -121,7 +121,7 @@ public class MockNetworkManagerImpl implements NetworkManager, Manager{ } /* (non-Javadoc) - * @see com.cloud.network.NetworkService#createGuestNetwork(com.cloud.api.commands.CreateNetworkCmd) + * @see com.cloud.network.NetworkService#createGuestNetwork(org.apache.cloudstack.api.commands.CreateNetworkCmd) */ @Override public Network createGuestNetwork(CreateNetworkCmd cmd) throws InsufficientCapacityException, ConcurrentOperationException, ResourceAllocationException { @@ -130,7 +130,7 @@ public class MockNetworkManagerImpl implements NetworkManager, Manager{ } /* (non-Javadoc) - * @see com.cloud.network.NetworkService#searchForNetworks(com.cloud.api.commands.ListNetworksCmd) + * @see com.cloud.network.NetworkService#searchForNetworks(org.apache.cloudstack.api.commands.ListNetworksCmd) */ @Override public List searchForNetworks(ListNetworksCmd cmd) { @@ -148,7 +148,7 @@ public class MockNetworkManagerImpl implements NetworkManager, Manager{ } /* (non-Javadoc) - * @see com.cloud.network.NetworkService#restartNetwork(com.cloud.api.commands.RestartNetworkCmd, boolean) + * @see com.cloud.network.NetworkService#restartNetwork(org.apache.cloudstack.api.commands.RestartNetworkCmd, boolean) */ @Override public boolean restartNetwork(RestartNetworkCmd cmd, boolean cleanup) throws ConcurrentOperationException, ResourceUnavailableException, InsufficientCapacityException { @@ -454,7 +454,7 @@ public class MockNetworkManagerImpl implements NetworkManager, Manager{ } /* (non-Javadoc) - * @see com.cloud.network.NetworkService#listTrafficTypeImplementor(com.cloud.api.commands.ListTrafficTypeImplementorsCmd) + * @see com.cloud.network.NetworkService#listTrafficTypeImplementor(org.apache.cloudstack.api.commands.ListTrafficTypeImplementorsCmd) */ @Override public List> listTrafficTypeImplementor(ListTrafficTypeImplementorsCmd cmd) { diff --git a/server/test/com/cloud/vpc/MockSite2SiteVpnManagerImpl.java b/server/test/com/cloud/vpc/MockSite2SiteVpnManagerImpl.java index 64db5bbfb79..ff778c09dff 100644 --- a/server/test/com/cloud/vpc/MockSite2SiteVpnManagerImpl.java +++ b/server/test/com/cloud/vpc/MockSite2SiteVpnManagerImpl.java @@ -49,7 +49,7 @@ import com.cloud.vm.DomainRouterVO; public class MockSite2SiteVpnManagerImpl implements Site2SiteVpnManager, Site2SiteVpnService, Manager{ /* (non-Javadoc) - * @see com.cloud.network.vpn.Site2SiteVpnService#createVpnGateway(com.cloud.api.commands.CreateVpnGatewayCmd) + * @see com.cloud.network.vpn.Site2SiteVpnService#createVpnGateway(org.apache.cloudstack.api.commands.CreateVpnGatewayCmd) */ @Override public Site2SiteVpnGateway createVpnGateway(CreateVpnGatewayCmd cmd) { @@ -58,7 +58,7 @@ public class MockSite2SiteVpnManagerImpl implements Site2SiteVpnManager, Site2Si } /* (non-Javadoc) - * @see com.cloud.network.vpn.Site2SiteVpnService#createCustomerGateway(com.cloud.api.commands.CreateVpnCustomerGatewayCmd) + * @see com.cloud.network.vpn.Site2SiteVpnService#createCustomerGateway(org.apache.cloudstack.api.commands.CreateVpnCustomerGatewayCmd) */ @Override public Site2SiteCustomerGateway createCustomerGateway(CreateVpnCustomerGatewayCmd cmd) { @@ -85,7 +85,7 @@ public class MockSite2SiteVpnManagerImpl implements Site2SiteVpnManager, Site2Si } /* (non-Javadoc) - * @see com.cloud.network.vpn.Site2SiteVpnService#createVpnConnection(com.cloud.api.commands.CreateVpnConnectionCmd) + * @see com.cloud.network.vpn.Site2SiteVpnService#createVpnConnection(org.apache.cloudstack.api.commands.CreateVpnConnectionCmd) */ @Override public Site2SiteVpnConnection createVpnConnection(CreateVpnConnectionCmd cmd) throws NetworkRuleConflictException { @@ -94,7 +94,7 @@ public class MockSite2SiteVpnManagerImpl implements Site2SiteVpnManager, Site2Si } /* (non-Javadoc) - * @see com.cloud.network.vpn.Site2SiteVpnService#deleteCustomerGateway(com.cloud.api.commands.DeleteVpnCustomerGatewayCmd) + * @see com.cloud.network.vpn.Site2SiteVpnService#deleteCustomerGateway(org.apache.cloudstack.api.commands.DeleteVpnCustomerGatewayCmd) */ @Override public boolean deleteCustomerGateway(DeleteVpnCustomerGatewayCmd deleteVpnCustomerGatewayCmd) { @@ -103,7 +103,7 @@ public class MockSite2SiteVpnManagerImpl implements Site2SiteVpnManager, Site2Si } /* (non-Javadoc) - * @see com.cloud.network.vpn.Site2SiteVpnService#deleteVpnGateway(com.cloud.api.commands.DeleteVpnGatewayCmd) + * @see com.cloud.network.vpn.Site2SiteVpnService#deleteVpnGateway(org.apache.cloudstack.api.commands.DeleteVpnGatewayCmd) */ @Override public boolean deleteVpnGateway(DeleteVpnGatewayCmd deleteVpnGatewayCmd) { @@ -112,7 +112,7 @@ public class MockSite2SiteVpnManagerImpl implements Site2SiteVpnManager, Site2Si } /* (non-Javadoc) - * @see com.cloud.network.vpn.Site2SiteVpnService#deleteVpnConnection(com.cloud.api.commands.DeleteVpnConnectionCmd) + * @see com.cloud.network.vpn.Site2SiteVpnService#deleteVpnConnection(org.apache.cloudstack.api.commands.DeleteVpnConnectionCmd) */ @Override public boolean deleteVpnConnection(DeleteVpnConnectionCmd deleteVpnConnectionCmd) throws ResourceUnavailableException { @@ -121,7 +121,7 @@ public class MockSite2SiteVpnManagerImpl implements Site2SiteVpnManager, Site2Si } /* (non-Javadoc) - * @see com.cloud.network.vpn.Site2SiteVpnService#resetVpnConnection(com.cloud.api.commands.ResetVpnConnectionCmd) + * @see com.cloud.network.vpn.Site2SiteVpnService#resetVpnConnection(org.apache.cloudstack.api.commands.ResetVpnConnectionCmd) */ @Override public Site2SiteVpnConnection resetVpnConnection(ResetVpnConnectionCmd resetVpnConnectionCmd) throws ResourceUnavailableException { @@ -130,7 +130,7 @@ public class MockSite2SiteVpnManagerImpl implements Site2SiteVpnManager, Site2Si } /* (non-Javadoc) - * @see com.cloud.network.vpn.Site2SiteVpnService#searchForCustomerGateways(com.cloud.api.commands.ListVpnCustomerGatewaysCmd) + * @see com.cloud.network.vpn.Site2SiteVpnService#searchForCustomerGateways(org.apache.cloudstack.api.commands.ListVpnCustomerGatewaysCmd) */ @Override public Pair, Integer> searchForCustomerGateways(ListVpnCustomerGatewaysCmd listVpnCustomerGatewaysCmd) { @@ -139,7 +139,7 @@ public class MockSite2SiteVpnManagerImpl implements Site2SiteVpnManager, Site2Si } /* (non-Javadoc) - * @see com.cloud.network.vpn.Site2SiteVpnService#searchForVpnGateways(com.cloud.api.commands.ListVpnGatewaysCmd) + * @see com.cloud.network.vpn.Site2SiteVpnService#searchForVpnGateways(org.apache.cloudstack.api.commands.ListVpnGatewaysCmd) */ @Override public Pair, Integer> searchForVpnGateways(ListVpnGatewaysCmd listVpnGatewaysCmd) { @@ -148,7 +148,7 @@ public class MockSite2SiteVpnManagerImpl implements Site2SiteVpnManager, Site2Si } /* (non-Javadoc) - * @see com.cloud.network.vpn.Site2SiteVpnService#searchForVpnConnections(com.cloud.api.commands.ListVpnConnectionsCmd) + * @see com.cloud.network.vpn.Site2SiteVpnService#searchForVpnConnections(org.apache.cloudstack.api.commands.ListVpnConnectionsCmd) */ @Override public Pair, Integer> searchForVpnConnections(ListVpnConnectionsCmd listVpnConnectionsCmd) { @@ -157,7 +157,7 @@ public class MockSite2SiteVpnManagerImpl implements Site2SiteVpnManager, Site2Si } /* (non-Javadoc) - * @see com.cloud.network.vpn.Site2SiteVpnService#updateCustomerGateway(com.cloud.api.commands.UpdateVpnCustomerGatewayCmd) + * @see com.cloud.network.vpn.Site2SiteVpnService#updateCustomerGateway(org.apache.cloudstack.api.commands.UpdateVpnCustomerGatewayCmd) */ @Override public Site2SiteCustomerGateway updateCustomerGateway(UpdateVpnCustomerGatewayCmd updateVpnCustomerGatewayCmd) { diff --git a/server/test/com/cloud/vpc/MockVpcManagerImpl.java b/server/test/com/cloud/vpc/MockVpcManagerImpl.java index 1f41395b16a..7880402de7b 100644 --- a/server/test/com/cloud/vpc/MockVpcManagerImpl.java +++ b/server/test/com/cloud/vpc/MockVpcManagerImpl.java @@ -242,7 +242,7 @@ public class MockVpcManagerImpl implements VpcManager, Manager{ } /* (non-Javadoc) - * @see com.cloud.network.vpc.VpcService#listPrivateGateway(com.cloud.api.commands.ListPrivateGatewaysCmd) + * @see com.cloud.network.vpc.VpcService#listPrivateGateway(org.apache.cloudstack.api.commands.ListPrivateGatewaysCmd) */ @Override public Pair, Integer> listPrivateGateway(ListPrivateGatewaysCmd listPrivateGatewaysCmd) { @@ -287,7 +287,7 @@ public class MockVpcManagerImpl implements VpcManager, Manager{ } /* (non-Javadoc) - * @see com.cloud.network.vpc.VpcService#listStaticRoutes(com.cloud.api.commands.ListStaticRoutesCmd) + * @see com.cloud.network.vpc.VpcService#listStaticRoutes(org.apache.cloudstack.api.commands.ListStaticRoutesCmd) */ @Override public Pair, Integer> listStaticRoutes(ListStaticRoutesCmd cmd) { diff --git a/utils/src/com/cloud/utils/exception/CSExceptionErrorCode.java b/utils/src/com/cloud/utils/exception/CSExceptionErrorCode.java index ab8d4b1a875..bcd69781efa 100755 --- a/utils/src/com/cloud/utils/exception/CSExceptionErrorCode.java +++ b/utils/src/com/cloud/utils/exception/CSExceptionErrorCode.java @@ -14,115 +14,114 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. - - -package com.cloud.utils.exception; - + + +package com.cloud.utils.exception; import java.util.HashMap; import org.apache.log4j.Logger; - -/** - * CSExceptionErrorCode lists the CloudStack error codes that correspond - * to a each exception thrown by the CloudStack API. - */ - -public class CSExceptionErrorCode { - - public static final Logger s_logger = Logger.getLogger(CSExceptionErrorCode.class.getName()); - - // Declare a hashmap of CloudStack Error Codes for Exceptions. - protected static final HashMap ExceptionErrorCodeMap; - - static { - try { - ExceptionErrorCodeMap = new HashMap(); - ExceptionErrorCodeMap.put("com.cloud.utils.exception.CloudRuntimeException", 4250); - ExceptionErrorCodeMap.put("com.cloud.utils.exception.ExceptionUtil", 4255); - ExceptionErrorCodeMap.put("com.cloud.utils.exception.ExecutionException", 4260); - ExceptionErrorCodeMap.put("com.cloud.utils.exception.HypervisorVersionChangedException", 4265); - ExceptionErrorCodeMap.put("com.cloud.utils.exception.RuntimeCloudException", 4270); - ExceptionErrorCodeMap.put("com.cloud.exception.CloudException", 4275); - ExceptionErrorCodeMap.put("com.cloud.exception.AccountLimitException", 4280); - ExceptionErrorCodeMap.put("com.cloud.exception.AgentUnavailableException", 4285); - ExceptionErrorCodeMap.put("com.cloud.exception.CloudAuthenticationException", 4290); - ExceptionErrorCodeMap.put("com.cloud.exception.CloudExecutionException", 4295); - ExceptionErrorCodeMap.put("com.cloud.exception.ConcurrentOperationException", 4300); - ExceptionErrorCodeMap.put("com.cloud.exception.ConflictingNetworkSettingsException", 4305); - ExceptionErrorCodeMap.put("com.cloud.exception.DiscoveredWithErrorException", 4310); - ExceptionErrorCodeMap.put("com.cloud.exception.HAStateException", 4315); - ExceptionErrorCodeMap.put("com.cloud.exception.InsufficientAddressCapacityException", 4320); - ExceptionErrorCodeMap.put("com.cloud.exception.InsufficientCapacityException", 4325); - ExceptionErrorCodeMap.put("com.cloud.exception.InsufficientNetworkCapacityException", 4330); - ExceptionErrorCodeMap.put("com.cloud.exception.InsufficientServerCapacityException", 4335); - ExceptionErrorCodeMap.put("com.cloud.exception.InsufficientStorageCapacityException", 4340); - ExceptionErrorCodeMap.put("com.cloud.exception.InternalErrorException", 4345); - ExceptionErrorCodeMap.put("com.cloud.exception.InvalidParameterValueException", 4350); - ExceptionErrorCodeMap.put("com.cloud.exception.ManagementServerException", 4355); - ExceptionErrorCodeMap.put("com.cloud.exception.NetworkRuleConflictException", 4360); - ExceptionErrorCodeMap.put("com.cloud.exception.PermissionDeniedException", 4365); - ExceptionErrorCodeMap.put("com.cloud.exception.ResourceAllocationException", 4370); - ExceptionErrorCodeMap.put("com.cloud.exception.ResourceInUseException", 4375); - ExceptionErrorCodeMap.put("com.cloud.exception.ResourceUnavailableException", 4380); - ExceptionErrorCodeMap.put("com.cloud.exception.StorageUnavailableException", 4385); - ExceptionErrorCodeMap.put("com.cloud.exception.UnsupportedServiceException", 4390); - ExceptionErrorCodeMap.put("com.cloud.exception.VirtualMachineMigrationException", 4395); - - ExceptionErrorCodeMap.put("com.cloud.exception.AccountLimitException", 4400); - ExceptionErrorCodeMap.put("com.cloud.exception.AgentUnavailableException", 4405); - ExceptionErrorCodeMap.put("com.cloud.exception.CloudAuthenticationException", 4410); - ExceptionErrorCodeMap.put("com.cloud.exception.CloudException", 4415); - ExceptionErrorCodeMap.put("com.cloud.exception.CloudExecutionException", 4420); - ExceptionErrorCodeMap.put("com.cloud.exception.ConcurrentOperationException", 4425); - ExceptionErrorCodeMap.put("com.cloud.exception.ConflictingNetworkSettingsException", 4430); - ExceptionErrorCodeMap.put("com.cloud.exception.ConnectionException", 4435); - ExceptionErrorCodeMap.put("com.cloud.exception.DiscoveredWithErrorException", 4440); - ExceptionErrorCodeMap.put("com.cloud.exception.DiscoveryException", 4445); - ExceptionErrorCodeMap.put("com.cloud.exception.HAStateException", 4450); - ExceptionErrorCodeMap.put("com.cloud.exception.InsufficientAddressCapacityException", 4455); - ExceptionErrorCodeMap.put("com.cloud.exception.InsufficientCapacityException", 4460); - ExceptionErrorCodeMap.put("com.cloud.exception.InsufficientNetworkCapacityException", 4465); - ExceptionErrorCodeMap.put("com.cloud.exception.InsufficientServerCapacityException", 4470); - ExceptionErrorCodeMap.put("com.cloud.exception.InsufficientStorageCapacityException", 4475); - ExceptionErrorCodeMap.put("com.cloud.exception.InsufficientVirtualNetworkCapcityException", 4480); - ExceptionErrorCodeMap.put("com.cloud.exception.InternalErrorException", 4485); - ExceptionErrorCodeMap.put("com.cloud.exception.InvalidParameterValueException", 4490); - ExceptionErrorCodeMap.put("com.cloud.exception.ManagementServerException", 4495); - ExceptionErrorCodeMap.put("com.cloud.exception.NetworkRuleConflictException", 4500); - ExceptionErrorCodeMap.put("com.cloud.exception.PermissionDeniedException", 4505); - ExceptionErrorCodeMap.put("com.cloud.exception.ResourceAllocationException", 4510); - ExceptionErrorCodeMap.put("com.cloud.exception.ResourceInUseException", 4515); - ExceptionErrorCodeMap.put("com.cloud.exception.ResourceUnavailableException", 4520); - ExceptionErrorCodeMap.put("com.cloud.exception.StorageUnavailableException", 4525); - ExceptionErrorCodeMap.put("com.cloud.exception.UnsupportedServiceException", 4530); - ExceptionErrorCodeMap.put("com.cloud.exception.VirtualMachineMigrationException", 4535); - ExceptionErrorCodeMap.put("com.cloud.async.AsyncCommandQueued", 4540); - - // Have a special error code for ServerApiException when it is - // thrown in a standalone manner when failing to detect any of the above - // standard exceptions. - ExceptionErrorCodeMap.put("com.cloud.api.ServerApiException", 9999); - } catch (Exception e) { - e.printStackTrace(); - throw new ExceptionInInitializerError(e); - } - } - - public static HashMap getErrCodeList() { - return ExceptionErrorCodeMap; - } - - public static int getCSErrCode(String exceptionName) { - if (ExceptionErrorCodeMap.containsKey(exceptionName)) { - return ExceptionErrorCodeMap.get(exceptionName); - } else { - s_logger.info("Could not find exception: " + exceptionName + " in error code list for exceptions"); - return -1; - } - } - - public static String getCurMethodName() { - StackTraceElement stackTraceCalls[] = (new Throwable()).getStackTrace(); - return stackTraceCalls[1].toString(); - } -} + +/** + * CSExceptionErrorCode lists the CloudStack error codes that correspond + * to a each exception thrown by the CloudStack API. + */ + +public class CSExceptionErrorCode { + + public static final Logger s_logger = Logger.getLogger(CSExceptionErrorCode.class.getName()); + + // Declare a hashmap of CloudStack Error Codes for Exceptions. + protected static final HashMap ExceptionErrorCodeMap; + + static { + try { + ExceptionErrorCodeMap = new HashMap(); + ExceptionErrorCodeMap.put("com.cloud.utils.exception.CloudRuntimeException", 4250); + ExceptionErrorCodeMap.put("com.cloud.utils.exception.ExceptionUtil", 4255); + ExceptionErrorCodeMap.put("com.cloud.utils.exception.ExecutionException", 4260); + ExceptionErrorCodeMap.put("com.cloud.utils.exception.HypervisorVersionChangedException", 4265); + ExceptionErrorCodeMap.put("com.cloud.utils.exception.RuntimeCloudException", 4270); + ExceptionErrorCodeMap.put("com.cloud.exception.CloudException", 4275); + ExceptionErrorCodeMap.put("com.cloud.exception.AccountLimitException", 4280); + ExceptionErrorCodeMap.put("com.cloud.exception.AgentUnavailableException", 4285); + ExceptionErrorCodeMap.put("com.cloud.exception.CloudAuthenticationException", 4290); + ExceptionErrorCodeMap.put("com.cloud.exception.CloudExecutionException", 4295); + ExceptionErrorCodeMap.put("com.cloud.exception.ConcurrentOperationException", 4300); + ExceptionErrorCodeMap.put("com.cloud.exception.ConflictingNetworkSettingsException", 4305); + ExceptionErrorCodeMap.put("com.cloud.exception.DiscoveredWithErrorException", 4310); + ExceptionErrorCodeMap.put("com.cloud.exception.HAStateException", 4315); + ExceptionErrorCodeMap.put("com.cloud.exception.InsufficientAddressCapacityException", 4320); + ExceptionErrorCodeMap.put("com.cloud.exception.InsufficientCapacityException", 4325); + ExceptionErrorCodeMap.put("com.cloud.exception.InsufficientNetworkCapacityException", 4330); + ExceptionErrorCodeMap.put("com.cloud.exception.InsufficientServerCapacityException", 4335); + ExceptionErrorCodeMap.put("com.cloud.exception.InsufficientStorageCapacityException", 4340); + ExceptionErrorCodeMap.put("com.cloud.exception.InternalErrorException", 4345); + ExceptionErrorCodeMap.put("com.cloud.exception.InvalidParameterValueException", 4350); + ExceptionErrorCodeMap.put("com.cloud.exception.ManagementServerException", 4355); + ExceptionErrorCodeMap.put("com.cloud.exception.NetworkRuleConflictException", 4360); + ExceptionErrorCodeMap.put("com.cloud.exception.PermissionDeniedException", 4365); + ExceptionErrorCodeMap.put("com.cloud.exception.ResourceAllocationException", 4370); + ExceptionErrorCodeMap.put("com.cloud.exception.ResourceInUseException", 4375); + ExceptionErrorCodeMap.put("com.cloud.exception.ResourceUnavailableException", 4380); + ExceptionErrorCodeMap.put("com.cloud.exception.StorageUnavailableException", 4385); + ExceptionErrorCodeMap.put("com.cloud.exception.UnsupportedServiceException", 4390); + ExceptionErrorCodeMap.put("com.cloud.exception.VirtualMachineMigrationException", 4395); + + ExceptionErrorCodeMap.put("com.cloud.exception.AccountLimitException", 4400); + ExceptionErrorCodeMap.put("com.cloud.exception.AgentUnavailableException", 4405); + ExceptionErrorCodeMap.put("com.cloud.exception.CloudAuthenticationException", 4410); + ExceptionErrorCodeMap.put("com.cloud.exception.CloudException", 4415); + ExceptionErrorCodeMap.put("com.cloud.exception.CloudExecutionException", 4420); + ExceptionErrorCodeMap.put("com.cloud.exception.ConcurrentOperationException", 4425); + ExceptionErrorCodeMap.put("com.cloud.exception.ConflictingNetworkSettingsException", 4430); + ExceptionErrorCodeMap.put("com.cloud.exception.ConnectionException", 4435); + ExceptionErrorCodeMap.put("com.cloud.exception.DiscoveredWithErrorException", 4440); + ExceptionErrorCodeMap.put("com.cloud.exception.DiscoveryException", 4445); + ExceptionErrorCodeMap.put("com.cloud.exception.HAStateException", 4450); + ExceptionErrorCodeMap.put("com.cloud.exception.InsufficientAddressCapacityException", 4455); + ExceptionErrorCodeMap.put("com.cloud.exception.InsufficientCapacityException", 4460); + ExceptionErrorCodeMap.put("com.cloud.exception.InsufficientNetworkCapacityException", 4465); + ExceptionErrorCodeMap.put("com.cloud.exception.InsufficientServerCapacityException", 4470); + ExceptionErrorCodeMap.put("com.cloud.exception.InsufficientStorageCapacityException", 4475); + ExceptionErrorCodeMap.put("com.cloud.exception.InsufficientVirtualNetworkCapcityException", 4480); + ExceptionErrorCodeMap.put("com.cloud.exception.InternalErrorException", 4485); + ExceptionErrorCodeMap.put("com.cloud.exception.InvalidParameterValueException", 4490); + ExceptionErrorCodeMap.put("com.cloud.exception.ManagementServerException", 4495); + ExceptionErrorCodeMap.put("com.cloud.exception.NetworkRuleConflictException", 4500); + ExceptionErrorCodeMap.put("com.cloud.exception.PermissionDeniedException", 4505); + ExceptionErrorCodeMap.put("com.cloud.exception.ResourceAllocationException", 4510); + ExceptionErrorCodeMap.put("com.cloud.exception.ResourceInUseException", 4515); + ExceptionErrorCodeMap.put("com.cloud.exception.ResourceUnavailableException", 4520); + ExceptionErrorCodeMap.put("com.cloud.exception.StorageUnavailableException", 4525); + ExceptionErrorCodeMap.put("com.cloud.exception.UnsupportedServiceException", 4530); + ExceptionErrorCodeMap.put("com.cloud.exception.VirtualMachineMigrationException", 4535); + ExceptionErrorCodeMap.put("com.cloud.async.AsyncCommandQueued", 4540); + + // Have a special error code for ServerApiException when it is + // thrown in a standalone manner when failing to detect any of the above + // standard exceptions. + ExceptionErrorCodeMap.put("com.cloud.api.ServerApiException", 9999); + } catch (Exception e) { + e.printStackTrace(); + throw new ExceptionInInitializerError(e); + } + } + + public static HashMap getErrCodeList() { + return ExceptionErrorCodeMap; + } + + public static int getCSErrCode(String exceptionName) { + if (ExceptionErrorCodeMap.containsKey(exceptionName)) { + return ExceptionErrorCodeMap.get(exceptionName); + } else { + s_logger.info("Could not find exception: " + exceptionName + " in error code list for exceptions"); + return -1; + } + } + + public static String getCurMethodName() { + StackTraceElement stackTraceCalls[] = (new Throwable()).getStackTrace(); + return stackTraceCalls[1].toString(); + } +} From 6fc3bc3760b35236cc005790abea766d308c23ae Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Mon, 3 Dec 2012 21:15:53 -0800 Subject: [PATCH 004/421] api_refactor: refactor vpn and vm apis - Refactor VPN and VM APIs to admin and user pkgs - Names space, org.apache.cloudstack - Fix refactored apis in commands*.in - Fix comments etc. - Expand tabs, remove trailing whitespace Signed-off-by: Rohit Yadav --- .../api/commands/ActivateProjectCmd.java | 14 +- .../api/commands/AddAccountToProjectCmd.java | 14 +- .../com/cloud/api/commands/AddClusterCmd.java | 160 +++---- .../com/cloud/api/commands/AddHostCmd.java | 12 +- .../AddNetworkServiceProviderCmd.java | 14 +- .../api/commands/AddSecondaryStorageCmd.java | 12 +- .../com/cloud/api/commands/AddSwiftCmd.java | 10 +- .../cloud/api/commands/AddTrafficTypeCmd.java | 14 +- .../com/cloud/api/commands/AddVpnUserCmd.java | 14 +- .../commands/AssignToLoadBalancerRuleCmd.java | 14 +- .../api/commands/AssociateIPAddrCmd.java | 16 +- .../com/cloud/api/commands/AttachIsoCmd.java | 17 +- .../cloud/api/commands/AttachVolumeCmd.java | 14 +- .../AuthorizeSecurityGroupEgressCmd.java | 14 +- .../AuthorizeSecurityGroupIngressCmd.java | 14 +- .../api/commands/CancelMaintenanceCmd.java | 14 +- .../CancelPrimaryStorageMaintenanceCmd.java | 14 +- .../ConfigureVirtualRouterElementCmd.java | 16 +- .../cloud/api/commands/CopyTemplateCmd.java | 14 +- .../cloud/api/commands/CreateAccountCmd.java | 12 +- .../commands/CreateAutoScalePolicyCmd.java | 48 +- .../commands/CreateAutoScaleVmGroupCmd.java | 46 +- .../commands/CreateAutoScaleVmProfileCmd.java | 46 +- .../api/commands/CreateConditionCmd.java | 14 +- .../cloud/api/commands/CreateCounterCmd.java | 12 +- .../api/commands/CreateDiskOfferingCmd.java | 12 +- .../cloud/api/commands/CreateDomainCmd.java | 12 +- .../api/commands/CreateFirewallRuleCmd.java | 16 +- .../commands/CreateIpForwardingRuleCmd.java | 16 +- .../commands/CreateLBStickinessPolicyCmd.java | 14 +- .../commands/CreateLoadBalancerRuleCmd.java | 14 +- .../api/commands/CreateNetworkACLCmd.java | 16 +- .../cloud/api/commands/CreateNetworkCmd.java | 12 +- .../commands/CreateNetworkOfferingCmd.java | 12 +- .../commands/CreatePhysicalNetworkCmd.java | 14 +- .../com/cloud/api/commands/CreatePodCmd.java | 12 +- .../commands/CreatePortForwardingRuleCmd.java | 16 +- .../api/commands/CreatePrivateGatewayCmd.java | 16 +- .../api/commands/CreatePrivateNetworkCmd.java | 14 +- .../cloud/api/commands/CreateProjectCmd.java | 14 +- .../api/commands/CreateSSHKeyPairCmd.java | 10 +- .../api/commands/CreateSecurityGroupCmd.java | 12 +- .../commands/CreateServiceOfferingCmd.java | 12 +- .../cloud/api/commands/CreateSnapshotCmd.java | 16 +- .../api/commands/CreateSnapshotPolicyCmd.java | 12 +- .../api/commands/CreateStaticRouteCmd.java | 16 +- .../CreateStorageNetworkIpRangeCmd.java | 14 +- .../api/commands/CreateStoragePoolCmd.java | 12 +- .../com/cloud/api/commands/CreateTagsCmd.java | 12 +- .../cloud/api/commands/CreateTemplateCmd.java | 14 +- .../com/cloud/api/commands/CreateUserCmd.java | 12 +- .../cloud/api/commands/CreateVMGroupCmd.java | 12 +- .../com/cloud/api/commands/CreateVPCCmd.java | 14 +- .../api/commands/CreateVPCOfferingCmd.java | 12 +- .../CreateVirtualRouterElementCmd.java | 16 +- .../api/commands/CreateVlanIpRangeCmd.java | 12 +- .../cloud/api/commands/CreateVolumeCmd.java | 14 +- .../com/cloud/api/commands/CreateZoneCmd.java | 12 +- .../cloud/api/commands/DeleteAccountCmd.java | 14 +- .../commands/DeleteAccountFromProjectCmd.java | 14 +- .../commands/DeleteAutoScalePolicyCmd.java | 46 +- .../commands/DeleteAutoScaleVmGroupCmd.java | 46 +- .../commands/DeleteAutoScaleVmProfileCmd.java | 46 +- .../cloud/api/commands/DeleteClusterCmd.java | 12 +- .../api/commands/DeleteConditionCmd.java | 14 +- .../cloud/api/commands/DeleteCounterCmd.java | 14 +- .../api/commands/DeleteDiskOfferingCmd.java | 12 +- .../cloud/api/commands/DeleteDomainCmd.java | 14 +- .../api/commands/DeleteFirewallRuleCmd.java | 14 +- .../com/cloud/api/commands/DeleteHostCmd.java | 12 +- .../commands/DeleteIpForwardingRuleCmd.java | 14 +- .../com/cloud/api/commands/DeleteIsoCmd.java | 14 +- .../commands/DeleteLBStickinessPolicyCmd.java | 14 +- .../commands/DeleteLoadBalancerRuleCmd.java | 14 +- .../api/commands/DeleteNetworkACLCmd.java | 14 +- .../cloud/api/commands/DeleteNetworkCmd.java | 14 +- .../commands/DeleteNetworkOfferingCmd.java | 12 +- .../DeleteNetworkServiceProviderCmd.java | 14 +- .../commands/DeletePhysicalNetworkCmd.java | 14 +- .../com/cloud/api/commands/DeletePodCmd.java | 12 +- .../com/cloud/api/commands/DeletePoolCmd.java | 12 +- .../commands/DeletePortForwardingRuleCmd.java | 14 +- .../api/commands/DeletePrivateGatewayCmd.java | 14 +- .../cloud/api/commands/DeleteProjectCmd.java | 14 +- .../commands/DeleteProjectInvitationCmd.java | 14 +- .../api/commands/DeleteSSHKeyPairCmd.java | 10 +- .../api/commands/DeleteSecurityGroupCmd.java | 12 +- .../commands/DeleteServiceOfferingCmd.java | 12 +- .../cloud/api/commands/DeleteSnapshotCmd.java | 14 +- .../commands/DeleteSnapshotPoliciesCmd.java | 12 +- .../api/commands/DeleteStaticRouteCmd.java | 14 +- .../DeleteStorageNetworkIpRangeCmd.java | 14 +- .../com/cloud/api/commands/DeleteTagsCmd.java | 12 +- .../cloud/api/commands/DeleteTemplateCmd.java | 14 +- .../api/commands/DeleteTrafficTypeCmd.java | 14 +- .../com/cloud/api/commands/DeleteUserCmd.java | 12 +- .../cloud/api/commands/DeleteVMGroupCmd.java | 12 +- .../com/cloud/api/commands/DeleteVPCCmd.java | 14 +- .../api/commands/DeleteVPCOfferingCmd.java | 14 +- .../api/commands/DeleteVlanIpRangeCmd.java | 12 +- .../cloud/api/commands/DeleteVolumeCmd.java | 12 +- .../com/cloud/api/commands/DeleteZoneCmd.java | 12 +- .../api/commands/DestroyConsoleProxyCmd.java | 12 +- .../cloud/api/commands/DestroyRouterCmd.java | 14 +- .../api/commands/DestroySystemVmCmd.java | 14 +- .../com/cloud/api/commands/DetachIsoCmd.java | 17 +- .../cloud/api/commands/DetachVolumeCmd.java | 14 +- .../cloud/api/commands/DisableAccountCmd.java | 14 +- .../commands/DisableAutoScaleVmGroupCmd.java | 14 +- .../api/commands/DisableStaticNatCmd.java | 14 +- .../cloud/api/commands/DisableUserCmd.java | 14 +- .../api/commands/DisassociateIPAddrCmd.java | 14 +- .../cloud/api/commands/EnableAccountCmd.java | 12 +- .../commands/EnableAutoScaleVmGroupCmd.java | 14 +- .../api/commands/EnableStaticNatCmd.java | 12 +- .../com/cloud/api/commands/EnableUserCmd.java | 12 +- .../com/cloud/api/commands/ExtractIsoCmd.java | 14 +- .../api/commands/ExtractTemplateCmd.java | 14 +- .../cloud/api/commands/ExtractVolumeCmd.java | 14 +- .../api/commands/GetCloudIdentifierCmd.java | 12 +- .../com/cloud/api/commands/GetUserCmd.java | 8 +- .../com/cloud/api/commands/LDAPConfigCmd.java | 10 +- .../com/cloud/api/commands/LDAPRemoveCmd.java | 4 +- .../cloud/api/commands/ListAccountsCmd.java | 10 +- .../com/cloud/api/commands/ListAlertsCmd.java | 10 +- .../cloud/api/commands/ListAsyncJobsCmd.java | 8 +- .../commands/ListAutoScalePoliciesCmd.java | 42 +- .../commands/ListAutoScaleVmGroupsCmd.java | 42 +- .../commands/ListAutoScaleVmProfilesCmd.java | 42 +- .../api/commands/ListCapabilitiesCmd.java | 4 +- .../cloud/api/commands/ListCapacityCmd.java | 10 +- .../com/cloud/api/commands/ListCfgsByCmd.java | 8 +- .../cloud/api/commands/ListClustersCmd.java | 10 +- .../cloud/api/commands/ListConditionsCmd.java | 10 +- .../cloud/api/commands/ListCountersCmd.java | 10 +- .../api/commands/ListDiskOfferingsCmd.java | 10 +- .../api/commands/ListDomainChildrenCmd.java | 10 +- .../cloud/api/commands/ListDomainsCmd.java | 10 +- .../cloud/api/commands/ListEventTypesCmd.java | 4 +- .../com/cloud/api/commands/ListEventsCmd.java | 10 +- .../api/commands/ListFirewallRulesCmd.java | 10 +- .../commands/ListGuestOsCategoriesCmd.java | 10 +- .../cloud/api/commands/ListGuestOsCmd.java | 10 +- .../com/cloud/api/commands/ListHostsCmd.java | 12 +- .../ListHypervisorCapabilitiesCmd.java | 10 +- .../api/commands/ListHypervisorsCmd.java | 10 +- .../commands/ListIpForwardingRulesCmd.java | 10 +- .../com/cloud/api/commands/ListIsosCmd.java | 10 +- .../commands/ListLBStickinessPoliciesCmd.java | 10 +- .../ListLoadBalancerRuleInstancesCmd.java | 10 +- .../commands/ListLoadBalancerRulesCmd.java | 10 +- .../api/commands/ListNetworkACLsCmd.java | 10 +- .../api/commands/ListNetworkOfferingsCmd.java | 10 +- .../ListNetworkServiceProvidersCmd.java | 10 +- .../cloud/api/commands/ListNetworksCmd.java | 10 +- .../api/commands/ListPhysicalNetworksCmd.java | 14 +- .../com/cloud/api/commands/ListPodsByCmd.java | 10 +- .../commands/ListPortForwardingRulesCmd.java | 22 +- .../api/commands/ListPrivateGatewaysCmd.java | 10 +- .../api/commands/ListProjectAccountsCmd.java | 10 +- .../commands/ListProjectInvitationsCmd.java | 10 +- .../cloud/api/commands/ListProjectsCmd.java | 10 +- .../commands/ListPublicIpAddressesCmd.java | 12 +- .../ListRecurringSnapshotScheduleCmd.java | 8 +- .../api/commands/ListResourceLimitsCmd.java | 8 +- .../cloud/api/commands/ListRoutersCmd.java | 10 +- .../api/commands/ListSSHKeyPairsCmd.java | 8 +- .../api/commands/ListSecurityGroupsCmd.java | 38 +- .../api/commands/ListServiceOfferingsCmd.java | 10 +- .../api/commands/ListSnapshotPoliciesCmd.java | 10 +- .../cloud/api/commands/ListSnapshotsCmd.java | 22 +- .../api/commands/ListStaticRoutesCmd.java | 10 +- .../api/commands/ListStoragePoolsCmd.java | 10 +- .../ListSupportedNetworkServicesCmd.java | 8 +- .../com/cloud/api/commands/ListSwiftsCmd.java | 8 +- .../cloud/api/commands/ListSystemVMsCmd.java | 10 +- .../com/cloud/api/commands/ListTagsCmd.java | 8 +- .../ListTemplateOrIsoPermissionsCmd.java | 10 +- .../cloud/api/commands/ListTemplatesCmd.java | 10 +- .../ListTrafficTypeImplementorsCmd.java | 10 +- .../api/commands/ListTrafficTypesCmd.java | 10 +- .../com/cloud/api/commands/ListUsersCmd.java | 10 +- .../cloud/api/commands/ListVMGroupsCmd.java | 10 +- .../api/commands/ListVPCOfferingsCmd.java | 10 +- .../com/cloud/api/commands/ListVPCsCmd.java | 10 +- .../ListVirtualRouterElementsCmd.java | 14 +- .../api/commands/ListVlanIpRangesCmd.java | 10 +- .../cloud/api/commands/ListVolumesCmd.java | 22 +- .../cloud/api/commands/ListVpnUsersCmd.java | 10 +- .../cloud/api/commands/ListZonesByCmd.java | 10 +- .../cloud/api/commands/LockAccountCmd.java | 10 +- .../com/cloud/api/commands/LockUserCmd.java | 12 +- .../MarkDefaultZoneForAccountCmd.java | 14 +- .../api/commands/MigrateSystemVMCmd.java | 14 +- .../cloud/api/commands/MigrateVolumeCmd.java | 14 +- .../commands/PrepareForMaintenanceCmd.java | 14 +- ...reparePrimaryStorageForMaintenanceCmd.java | 14 +- .../api/commands/PrepareTemplateCmd.java | 10 +- .../api/commands/QueryAsyncJobResultCmd.java | 10 +- .../cloud/api/commands/RebootRouterCmd.java | 14 +- .../cloud/api/commands/RebootSystemVmCmd.java | 14 +- .../cloud/api/commands/ReconnectHostCmd.java | 14 +- .../com/cloud/api/commands/RegisterCmd.java | 10 +- .../cloud/api/commands/RegisterIsoCmd.java | 12 +- .../api/commands/RegisterSSHKeyPairCmd.java | 10 +- .../api/commands/RegisterTemplateCmd.java | 12 +- .../RemoveFromLoadBalancerRuleCmd.java | 14 +- .../cloud/api/commands/RemoveVpnUserCmd.java | 14 +- .../cloud/api/commands/RestartNetworkCmd.java | 14 +- .../com/cloud/api/commands/RestartVPCCmd.java | 14 +- .../RevokeSecurityGroupEgressCmd.java | 14 +- .../RevokeSecurityGroupIngressCmd.java | 14 +- .../cloud/api/commands/StartRouterCmd.java | 14 +- .../cloud/api/commands/StartSystemVMCmd.java | 14 +- .../com/cloud/api/commands/StopRouterCmd.java | 14 +- .../cloud/api/commands/StopSystemVmCmd.java | 14 +- .../cloud/api/commands/SuspendProjectCmd.java | 14 +- .../cloud/api/commands/UpdateAccountCmd.java | 12 +- .../commands/UpdateAutoScalePolicyCmd.java | 14 +- .../commands/UpdateAutoScaleVmGroupCmd.java | 14 +- .../commands/UpdateAutoScaleVmProfileCmd.java | 14 +- .../com/cloud/api/commands/UpdateCfgCmd.java | 10 +- .../cloud/api/commands/UpdateClusterCmd.java | 12 +- .../api/commands/UpdateDiskOfferingCmd.java | 12 +- .../cloud/api/commands/UpdateDomainCmd.java | 12 +- .../com/cloud/api/commands/UpdateHostCmd.java | 12 +- .../api/commands/UpdateHostPasswordCmd.java | 10 +- .../UpdateHypervisorCapabilitiesCmd.java | 12 +- .../com/cloud/api/commands/UpdateIsoCmd.java | 6 +- .../api/commands/UpdateIsoPermissionsCmd.java | 2 +- .../commands/UpdateLoadBalancerRuleCmd.java | 14 +- .../cloud/api/commands/UpdateNetworkCmd.java | 14 +- .../commands/UpdateNetworkOfferingCmd.java | 12 +- .../UpdateNetworkServiceProviderCmd.java | 14 +- .../commands/UpdatePhysicalNetworkCmd.java | 10 +- .../com/cloud/api/commands/UpdatePodCmd.java | 12 +- .../commands/UpdatePortForwardingRuleCmd.java | 10 +- .../cloud/api/commands/UpdateProjectCmd.java | 14 +- .../commands/UpdateProjectInvitationCmd.java | 14 +- .../api/commands/UpdateResourceCountCmd.java | 12 +- .../api/commands/UpdateResourceLimitCmd.java | 12 +- .../commands/UpdateServiceOfferingCmd.java | 12 +- .../UpdateStorageNetworkIpRangeCmd.java | 14 +- .../api/commands/UpdateStoragePoolCmd.java | 12 +- .../cloud/api/commands/UpdateTemplateCmd.java | 6 +- .../api/commands/UpdateTemplateOrIsoCmd.java | 8 +- .../UpdateTemplateOrIsoPermissionsCmd.java | 10 +- .../UpdateTemplatePermissionsCmd.java | 2 +- .../api/commands/UpdateTrafficTypeCmd.java | 14 +- .../com/cloud/api/commands/UpdateUserCmd.java | 12 +- .../cloud/api/commands/UpdateVMGroupCmd.java | 12 +- .../com/cloud/api/commands/UpdateVPCCmd.java | 14 +- .../api/commands/UpdateVPCOfferingCmd.java | 14 +- .../com/cloud/api/commands/UpdateZoneCmd.java | 12 +- .../cloud/api/commands/UpgradeRouterCmd.java | 12 +- .../api/commands/UpgradeSystemVMCmd.java | 13 +- .../commands/UploadCustomCertificateCmd.java | 12 +- .../cloud/api/commands/UploadVolumeCmd.java | 48 +- .../listStorageNetworkIpRangeCmd.java | 14 +- .../cloud/api/response/AccountResponse.java | 2 +- .../com/cloud/api/response/AlertResponse.java | 2 +- .../cloud/api/response/AsyncJobResponse.java | 4 +- .../api/response/AutoScalePolicyResponse.java | 34 +- .../response/AutoScaleVmGroupResponse.java | 34 +- .../response/AutoScaleVmProfileResponse.java | 38 +- .../com/cloud/api/response/BaseResponse.java | 4 +- .../api/response/CapabilitiesResponse.java | 2 +- .../api/response/CapabilityResponse.java | 2 +- .../cloud/api/response/CapacityResponse.java | 2 +- .../api/response/CloudIdentifierResponse.java | 2 +- .../cloud/api/response/ClusterResponse.java | 2 +- .../cloud/api/response/ConditionResponse.java | 2 +- .../api/response/ConfigurationResponse.java | 2 +- .../cloud/api/response/CounterResponse.java | 2 +- .../cloud/api/response/CreateCmdResponse.java | 2 +- .../api/response/DiskOfferingResponse.java | 2 +- .../cloud/api/response/DomainResponse.java | 2 +- .../api/response/DomainRouterResponse.java | 2 +- .../com/cloud/api/response/EventResponse.java | 2 +- .../cloud/api/response/EventTypeResponse.java | 2 +- .../cloud/api/response/ExtractResponse.java | 2 +- .../cloud/api/response/FirewallResponse.java | 2 +- .../api/response/FirewallRuleResponse.java | 2 +- .../api/response/GuestOSCategoryResponse.java | 2 +- .../cloud/api/response/GuestOSResponse.java | 2 +- .../com/cloud/api/response/HostResponse.java | 2 +- .../HypervisorCapabilitiesResponse.java | 2 +- .../api/response/HypervisorResponse.java | 2 +- .../cloud/api/response/IPAddressResponse.java | 2 +- .../api/response/InstanceGroupResponse.java | 2 +- .../response/IpForwardingRuleResponse.java | 2 +- .../api/response/LBStickinessResponse.java | 2 +- .../api/response/LDAPConfigResponse.java | 2 +- .../com/cloud/api/response/ListResponse.java | 2 +- .../api/response/LoadBalancerResponse.java | 2 +- .../api/response/NetworkACLResponse.java | 2 +- .../api/response/NetworkOfferingResponse.java | 2 +- .../cloud/api/response/NetworkResponse.java | 2 +- .../com/cloud/api/response/NicResponse.java | 2 +- .../api/response/PhysicalNetworkResponse.java | 2 +- .../com/cloud/api/response/PodResponse.java | 2 +- .../api/response/PrivateGatewayResponse.java | 2 +- .../api/response/ProjectAccountResponse.java | 2 +- .../response/ProjectInvitationResponse.java | 2 +- .../cloud/api/response/ProjectResponse.java | 2 +- .../cloud/api/response/ProviderResponse.java | 2 +- .../api/response/RemoteAccessVpnResponse.java | 2 +- .../api/response/ResourceCountResponse.java | 2 +- .../api/response/ResourceLimitResponse.java | 2 +- .../api/response/ResourceTagResponse.java | 2 +- .../api/response/SSHKeyPairResponse.java | 2 +- .../api/response/SecurityGroupResponse.java | 2 +- .../response/SecurityGroupRuleResponse.java | 2 +- .../api/response/ServiceOfferingResponse.java | 2 +- .../cloud/api/response/ServiceResponse.java | 2 +- .../Site2SiteCustomerGatewayResponse.java | 2 +- .../Site2SiteVpnConnectionResponse.java | 2 +- .../response/Site2SiteVpnGatewayResponse.java | 2 +- .../cloud/api/response/SnapshotResponse.java | 2 +- .../api/response/StaticRouteResponse.java | 2 +- .../StorageNetworkIpRangeResponse.java | 2 +- .../api/response/StoragePoolResponse.java | 2 +- .../com/cloud/api/response/SwiftResponse.java | 2 +- .../cloud/api/response/SystemVmResponse.java | 2 +- .../response/TemplatePermissionsResponse.java | 2 +- .../cloud/api/response/TemplateResponse.java | 2 +- .../TrafficTypeImplementorResponse.java | 2 +- .../api/response/TrafficTypeResponse.java | 2 +- .../cloud/api/response/UpgradeVmResponse.java | 2 +- .../cloud/api/response/UserVmResponse.java | 2 +- .../VirtualRouterProviderResponse.java | 2 +- .../api/response/VlanIpRangeResponse.java | 2 +- .../cloud/api/response/VolumeResponse.java | 2 +- .../api/response/VpcOfferingResponse.java | 2 +- .../com/cloud/api/response/VpcResponse.java | 2 +- .../cloud/api/response/VpnUsersResponse.java | 2 +- .../com/cloud/api/response/ZoneResponse.java | 2 +- api/src/com/cloud/async/AsyncJob.java | 2 +- api/src/com/cloud/network/vpc/VpcGateway.java | 2 +- .../network/vpn/RemoteAccessVpnService.java | 2 +- .../network/vpn/Site2SiteVpnService.java | 22 +- api/src/com/cloud/projects/Project.java | 2 +- .../com/cloud/server/ManagementService.java | 4 +- api/src/com/cloud/vm/UserVmService.java | 22 +- api/src/com/cloud/vm/VirtualMachine.java | 2 +- .../apache/cloudstack}/api/ACL.java | 8 +- .../apache/cloudstack}/api/ApiConstants.java | 8 +- .../apache/cloudstack}/api/BaseAsyncCmd.java | 10 +- .../cloudstack}/api/BaseAsyncCreateCmd.java | 2 +- .../apache/cloudstack}/api/BaseCmd.java | 4 +- .../api/BaseListAccountResourcesCmd.java | 2 +- .../apache/cloudstack}/api/BaseListCmd.java | 2 +- .../api/BaseListDomainResourcesCmd.java | 8 +- ...BaseListProjectAndAccountResourcesCmd.java | 2 +- .../api/BaseListTaggedResourcesCmd.java | 4 +- .../apache/cloudstack}/api/Identity.java | 2 +- .../cloudstack}/api/IdentityMapper.java | 2 +- .../cloudstack}/api/IdentityService.java | 2 +- .../cloudstack}/api/Implementation.java | 2 +- .../apache/cloudstack}/api/Parameter.java | 8 +- .../apache/cloudstack}/api/PlugService.java | 2 +- .../cloudstack}/api/ResponseGenerator.java | 12 +- .../cloudstack}/api/ResponseObject.java | 18 +- .../cloudstack}/api/ServerApiException.java | 4 +- .../api/admin/vm/command}/AssignVMCmd.java | 53 +-- .../api/admin/vm/command}/MigrateVMCmd.java | 92 ++-- .../api/admin/vm/command}/RecoverVMCmd.java | 20 +- .../api/user/vm/command}/DeployVMCmd.java | 62 +-- .../api/user/vm/command}/DestroyVMCmd.java | 30 +- .../user/vm/command}/GetVMPasswordCmd.java | 48 +- .../api/user/vm/command}/ListVMsCmd.java | 56 +-- .../api/user/vm/command}/RebootVMCmd.java | 34 +- .../user/vm/command}/ResetVMPasswordCmd.java | 40 +- .../api/user/vm/command}/RestoreVMCmd.java | 94 ++-- .../api/user/vm/command}/StartVMCmd.java | 24 +- .../api/user/vm/command}/StopVMCmd.java | 16 +- .../api/user/vm/command}/UpdateVMCmd.java | 28 +- .../api/user/vm/command}/UpgradeVMCmd.java | 28 +- .../command}/CreateRemoteAccessVpnCmd.java | 128 +++--- .../vpn/command}/CreateVpnConnectionCmd.java | 28 +- .../command}/CreateVpnCustomerGatewayCmd.java | 50 +-- .../vpn/command}/CreateVpnGatewayCmd.java | 20 +- .../command}/DeleteRemoteAccessVpnCmd.java | 60 +-- .../vpn/command}/DeleteVpnConnectionCmd.java | 42 +- .../command}/DeleteVpnCustomerGatewayCmd.java | 42 +- .../vpn/command}/DeleteVpnGatewayCmd.java | 42 +- .../vpn/command}/ListRemoteAccessVpnsCmd.java | 14 +- .../vpn/command}/ListVpnConnectionsCmd.java | 22 +- .../command}/ListVpnCustomerGatewaysCmd.java | 20 +- .../user/vpn/command}/ListVpnGatewaysCmd.java | 42 +- .../vpn/command}/ResetVpnConnectionCmd.java | 48 +- .../command}/UpdateVpnCustomerGatewayCmd.java | 56 +-- .../api/commands/test/AddClusterCmdTest.java | 4 +- .../api/commands/test/AddHostCmdTest.java | 4 +- .../AddNetworkServiceProviderCmdTest.java | 2 +- .../test/AddSecondaryStorageCmdTest.java | 4 +- .../api/commands/test/AddSwiftCmdTest.java | 4 +- .../api/commands/test/AddVpnUserCmdTest.java | 2 +- client/tomcatconf/commands.properties.in | 56 +-- core/src/com/cloud/alert/AlertVO.java | 2 +- core/src/com/cloud/event/EventVO.java | 2 +- core/src/com/cloud/host/HostVO.java | 2 +- .../hypervisor/HypervisorCapabilitiesVO.java | 2 +- core/src/com/cloud/network/VpnUserVO.java | 2 +- .../network/security/SecurityGroupVO.java | 2 +- .../src/com/cloud/storage/DiskOfferingVO.java | 2 +- .../com/cloud/storage/GuestOSCategoryVO.java | 2 +- core/src/com/cloud/storage/GuestOSVO.java | 2 +- .../com/cloud/storage/SnapshotPolicyVO.java | 2 +- .../com/cloud/storage/SnapshotScheduleVO.java | 2 +- core/src/com/cloud/storage/SnapshotVO.java | 2 +- core/src/com/cloud/storage/StoragePoolVO.java | 2 +- core/src/com/cloud/storage/SwiftVO.java | 2 +- core/src/com/cloud/storage/VMTemplateVO.java | 2 +- core/src/com/cloud/storage/VolumeVO.java | 2 +- core/src/com/cloud/user/AccountVO.java | 2 +- core/src/com/cloud/user/UserVO.java | 2 +- core/src/com/cloud/vm/InstanceGroupVO.java | 2 +- docs/en-US/added-error-codes.xml | 2 +- .../api/commands/netapp/AssociateLunCmd.java | 10 +- .../api/commands/netapp/CreateLunCmd.java | 10 +- .../netapp/CreateVolumeOnFilerCmd.java | 10 +- .../commands/netapp/CreateVolumePoolCmd.java | 10 +- .../commands/netapp/DeleteVolumePoolCmd.java | 10 +- .../api/commands/netapp/DestroyLunCmd.java | 10 +- .../netapp/DestroyVolumeOnFilerCmd.java | 10 +- .../api/commands/netapp/DissociateLunCmd.java | 10 +- .../api/commands/netapp/ListLunsCmd.java | 10 +- .../commands/netapp/ListVolumePoolsCmd.java | 6 +- .../netapp/ListVolumesOnFilerCmd.java | 10 +- .../commands/netapp/ModifyVolumePoolCmd.java | 10 +- .../api/commands/DeleteCiscoNexusVSMCmd.java | 14 +- .../api/commands/DisableCiscoNexusVSMCmd.java | 14 +- .../api/commands/EnableCiscoNexusVSMCmd.java | 14 +- .../api/commands/ListCiscoNexusVSMsCmd.java | 14 +- .../api/response/CiscoNexusVSMResponse.java | 2 +- .../cloud/network/CiscoNexusVSMDeviceVO.java | 2 +- .../commands/AddExternalLoadBalancerCmd.java | 14 +- .../api/commands/AddF5LoadBalancerCmd.java | 16 +- .../commands/ConfigureF5LoadBalancerCmd.java | 16 +- .../DeleteExternalLoadBalancerCmd.java | 14 +- .../api/commands/DeleteF5LoadBalancerCmd.java | 16 +- .../ListExternalLoadBalancersCmd.java | 12 +- .../ListF5LoadBalancerNetworksCmd.java | 16 +- .../api/commands/ListF5LoadBalancersCmd.java | 16 +- .../api/response/F5LoadBalancerResponse.java | 2 +- .../api/commands/AddExternalFirewallCmd.java | 14 +- .../cloud/api/commands/AddSrxFirewallCmd.java | 16 +- .../api/commands/ConfigureSrxFirewallCmd.java | 16 +- .../commands/DeleteExternalFirewallCmd.java | 14 +- .../api/commands/DeleteSrxFirewallCmd.java | 16 +- .../commands/ListExternalFirewallsCmd.java | 12 +- .../commands/ListSrxFirewallNetworksCmd.java | 16 +- .../api/commands/ListSrxFirewallsCmd.java | 16 +- .../api/response/SrxFirewallResponse.java | 2 +- .../commands/AddNetscalerLoadBalancerCmd.java | 16 +- .../ConfigureNetscalerLoadBalancerCmd.java | 16 +- .../DeleteNetscalerLoadBalancerCmd.java | 16 +- .../ListNetscalerLoadBalancerNetworksCmd.java | 16 +- .../ListNetscalerLoadBalancersCmd.java | 16 +- .../NetscalerLoadBalancerResponse.java | 2 +- .../network/element/NetscalerElement.java | 2 +- .../network/resource/NetscalerResource.java | 2 +- .../api/commands/AddNiciraNvpDeviceCmd.java | 16 +- .../commands/DeleteNiciraNvpDeviceCmd.java | 16 +- .../ListNiciraNvpDeviceNetworksCmd.java | 16 +- .../api/commands/ListNiciraNvpDevicesCmd.java | 16 +- .../api/response/NiciraNvpDeviceResponse.java | 2 +- .../server/auth/LDAPUserAuthenticator.java | 2 +- server/src/com/cloud/acl/DomainChecker.java | 2 +- server/src/com/cloud/api/ApiDispatcher.java | 3 +- server/src/com/cloud/api/ApiGsonHelper.java | 2 + .../com/cloud/api/ApiResponseGsonHelper.java | 1 + .../src/com/cloud/api/ApiResponseHelper.java | 8 +- .../com/cloud/api/ApiSerializerHelper.java | 1 + server/src/com/cloud/api/ApiServer.java | 1 + server/src/com/cloud/api/ApiServlet.java | 2 + .../cloud/api/ResponseObjectTypeAdapter.java | 1 + .../api/commands/AddNetworkDeviceCmd.java | 10 +- .../api/commands/AddTrafficMonitorCmd.java | 12 +- .../api/commands/DeleteNetworkDeviceCmd.java | 12 +- .../api/commands/DeleteTrafficMonitorCmd.java | 12 +- .../api/commands/GenerateUsageRecordsCmd.java | 12 +- .../api/commands/GetUsageRecordsCmd.java | 10 +- .../api/commands/ListNetworkDeviceCmd.java | 12 +- .../api/commands/ListTrafficMonitorsCmd.java | 10 +- .../cloud/api/commands/ListUsageTypesCmd.java | 4 +- .../com/cloud/api/doc/ApiXmlDocWriter.java | 10 +- .../api/response/ApiResponseSerializer.java | 6 +- .../com/cloud/async/AsyncJobManagerImpl.java | 420 +++++++++--------- .../cloud/baremetal/BareMetalDiscoverer.java | 2 +- .../baremetal/BareMetalResourceBase.java | 2 +- .../baremetal/BareMetalVmManagerImpl.java | 6 +- .../cloud/baremetal/DhcpServerResponse.java | 2 +- .../cloud/baremetal/PxeServerResponse.java | 2 +- .../ConfigurationManagerImpl.java | 2 +- .../consoleproxy/ConsoleProxyManagerImpl.java | 2 +- server/src/com/cloud/dc/ClusterVO.java | 2 +- server/src/com/cloud/dc/DataCenterVO.java | 4 +- server/src/com/cloud/dc/HostPodVO.java | 2 +- server/src/com/cloud/dc/VlanVO.java | 2 +- server/src/com/cloud/domain/DomainVO.java | 2 +- .../ExternalFirewallDeviceManagerImpl.java | 2 +- ...ExternalLoadBalancerDeviceManagerImpl.java | 2 +- .../ExternalNetworkDeviceManagerImpl.java | 4 +- server/src/com/cloud/network/IPAddressVO.java | 6 +- server/src/com/cloud/network/NetworkVO.java | 2 +- .../network/as/AutoScaleManagerImpl.java | 6 +- .../network/as/AutoScaleVmProfileVO.java | 34 +- .../src/com/cloud/network/as/ConditionVO.java | 2 +- .../src/com/cloud/network/as/CounterVO.java | 2 +- .../cloud/network/rules/FirewallRuleVO.java | 2 +- .../com/cloud/network/vpc/StaticRouteVO.java | 2 +- server/src/com/cloud/network/vpc/VpcVO.java | 2 +- .../vpn/RemoteAccessVpnManagerImpl.java | 2 +- .../network/vpn/Site2SiteVpnManagerImpl.java | 22 +- .../cloud/offerings/NetworkOfferingVO.java | 2 +- .../cloud/projects/ProjectInvitationVO.java | 2 +- server/src/com/cloud/projects/ProjectVO.java | 2 +- .../cloud/resource/ResourceManagerImpl.java | 2 +- .../cloud/server/ManagementServerImpl.java | 4 +- .../response/ExternalFirewallResponse.java | 2 +- .../ExternalLoadBalancerResponse.java | 2 +- .../api/response/NetworkDeviceResponse.java | 2 +- .../api/response/NwDeviceDhcpResponse.java | 2 +- .../response/NwDevicePxeServerResponse.java | 2 +- .../server/api/response/PxePingResponse.java | 2 +- .../api/response/TrafficMonitorResponse.java | 2 +- .../api/response/UsageRecordResponse.java | 2 +- .../api/response/UsageTypeResponse.java | 2 +- .../netapp/AssociateLunCmdResponse.java | 2 +- .../response/netapp/CreateLunCmdResponse.java | 2 +- .../response/netapp/ListLunsCmdResponse.java | 2 +- .../netapp/ListVolumePoolsCmdResponse.java | 2 +- .../netapp/ListVolumesOnFilerCmdResponse.java | 2 +- .../cloud/servlet/ConsoleProxyServlet.java | 2 +- .../cloud/storage/dao/VMTemplateDaoImpl.java | 20 +- .../snapshot/SnapshotSchedulerImpl.java | 2 +- server/src/com/cloud/tags/ResourceTagVO.java | 2 +- .../cloud/template/TemplateAdapterBase.java | 2 +- .../uuididentity/IdentityServiceImpl.java | 4 +- .../cloud/uuididentity/dao/IdentityDao.java | 6 +- .../uuididentity/dao/IdentityDaoImpl.java | 2 +- server/src/com/cloud/vm/NicVO.java | 2 +- .../src/com/cloud/vm/UserVmManagerImpl.java | 24 +- .../test/com/cloud/keystore/KeystoreTest.java | 2 +- .../com/cloud/vm/MockUserVmManagerImpl.java | 22 +- .../vpc/MockSite2SiteVpnManagerImpl.java | 22 +- .../utils/exception/CSExceptionErrorCode.java | 2 +- 549 files changed, 3428 insertions(+), 3411 deletions(-) rename api/src/{com/cloud => org/apache/cloudstack}/api/ACL.java (89%) rename api/src/{com/cloud => org/apache/cloudstack}/api/ApiConstants.java (99%) rename api/src/{com/cloud => org/apache/cloudstack}/api/BaseAsyncCmd.java (98%) rename api/src/{com/cloud => org/apache/cloudstack}/api/BaseAsyncCreateCmd.java (98%) rename api/src/{com/cloud => org/apache/cloudstack}/api/BaseCmd.java (99%) rename api/src/{com/cloud => org/apache/cloudstack}/api/BaseListAccountResourcesCmd.java (97%) rename api/src/{com/cloud => org/apache/cloudstack}/api/BaseListCmd.java (99%) rename api/src/{com/cloud => org/apache/cloudstack}/api/BaseListDomainResourcesCmd.java (81%) rename api/src/{com/cloud => org/apache/cloudstack}/api/BaseListProjectAndAccountResourcesCmd.java (97%) rename api/src/{com/cloud => org/apache/cloudstack}/api/BaseListTaggedResourcesCmd.java (98%) rename api/src/{com/cloud => org/apache/cloudstack}/api/Identity.java (96%) rename api/src/{com/cloud => org/apache/cloudstack}/api/IdentityMapper.java (96%) rename api/src/{com/cloud => org/apache/cloudstack}/api/IdentityService.java (96%) rename api/src/{com/cloud => org/apache/cloudstack}/api/Implementation.java (97%) rename api/src/{com/cloud => org/apache/cloudstack}/api/Parameter.java (94%) rename api/src/{com/cloud => org/apache/cloudstack}/api/PlugService.java (97%) rename api/src/{com/cloud => org/apache/cloudstack}/api/ResponseGenerator.java (98%) rename api/src/{com/cloud => org/apache/cloudstack}/api/ResponseObject.java (94%) rename api/src/{com/cloud => org/apache/cloudstack}/api/ServerApiException.java (97%) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/admin/vm/command}/AssignVMCmd.java (85%) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/admin/vm/command}/MigrateVMCmd.java (70%) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/admin/vm/command}/RecoverVMCmd.java (89%) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/user/vm/command}/DeployVMCmd.java (97%) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/user/vm/command}/DestroyVMCmd.java (86%) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/user/vm/command}/GetVMPasswordCmd.java (77%) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/user/vm/command}/ListVMsCmd.java (89%) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/user/vm/command}/RebootVMCmd.java (86%) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/user/vm/command}/ResetVMPasswordCmd.java (78%) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/user/vm/command}/RestoreVMCmd.java (51%) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/user/vm/command}/StartVMCmd.java (92%) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/user/vm/command}/StopVMCmd.java (91%) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/user/vm/command}/UpdateVMCmd.java (92%) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/user/vm/command}/UpgradeVMCmd.java (85%) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/user/vpn/command}/CreateRemoteAccessVpnCmd.java (79%) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/user/vpn/command}/CreateVpnConnectionCmd.java (91%) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/user/vpn/command}/CreateVpnCustomerGatewayCmd.java (86%) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/user/vpn/command}/CreateVpnGatewayCmd.java (89%) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/user/vpn/command}/DeleteRemoteAccessVpnCmd.java (74%) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/user/vpn/command}/DeleteVpnConnectionCmd.java (81%) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/user/vpn/command}/DeleteVpnCustomerGatewayCmd.java (79%) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/user/vpn/command}/DeleteVpnGatewayCmd.java (79%) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/user/vpn/command}/ListRemoteAccessVpnsCmd.java (90%) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/user/vpn/command}/ListVpnConnectionsCmd.java (86%) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/user/vpn/command}/ListVpnCustomerGatewaysCmd.java (85%) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/user/vpn/command}/ListVpnGatewaysCmd.java (86%) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/user/vpn/command}/ResetVpnConnectionCmd.java (84%) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/user/vpn/command}/UpdateVpnCustomerGatewayCmd.java (86%) diff --git a/api/src/com/cloud/api/commands/ActivateProjectCmd.java b/api/src/com/cloud/api/commands/ActivateProjectCmd.java index b9961070491..24a3510849a 100644 --- a/api/src/com/cloud/api/commands/ActivateProjectCmd.java +++ b/api/src/com/cloud/api/commands/ActivateProjectCmd.java @@ -18,13 +18,13 @@ package com.cloud.api.commands; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseAsyncCmd; -import com.cloud.api.BaseCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseAsyncCmd; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.api.response.ProjectResponse; import com.cloud.event.EventTypes; import com.cloud.exception.InvalidParameterValueException; diff --git a/api/src/com/cloud/api/commands/AddAccountToProjectCmd.java b/api/src/com/cloud/api/commands/AddAccountToProjectCmd.java index 7376b018cd8..22b36b88eac 100644 --- a/api/src/com/cloud/api/commands/AddAccountToProjectCmd.java +++ b/api/src/com/cloud/api/commands/AddAccountToProjectCmd.java @@ -18,13 +18,13 @@ package com.cloud.api.commands; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseAsyncCmd; -import com.cloud.api.BaseCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseAsyncCmd; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.api.response.SuccessResponse; import com.cloud.event.EventTypes; import com.cloud.exception.InvalidParameterValueException; diff --git a/api/src/com/cloud/api/commands/AddClusterCmd.java b/api/src/com/cloud/api/commands/AddClusterCmd.java index 0e10f23455c..4191554f88b 100755 --- a/api/src/com/cloud/api/commands/AddClusterCmd.java +++ b/api/src/com/cloud/api/commands/AddClusterCmd.java @@ -1,40 +1,40 @@ -// Licensed to the Apache Software Foundation (ASF) under one -// or more contributor license agreements. See the NOTICE file -// distributed with this work for additional information -// regarding copyright ownership. The ASF licenses this file -// to you under the Apache License, Version 2.0 (the -// "License"); you may not use this file except in compliance -// with the License. You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, -// software distributed under the License is distributed on an -// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -// KIND, either express or implied. See the License for the -// specific language governing permissions and limitations -// under the License. - +// 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.commands; - -import java.util.ArrayList; -import java.util.List; - -import org.apache.log4j.Logger; - -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.ServerApiException; -import com.cloud.api.response.ClusterResponse; -import com.cloud.api.response.ListResponse; -import com.cloud.exception.DiscoveryException; -import com.cloud.exception.ResourceInUseException; -import com.cloud.org.Cluster; -import com.cloud.user.Account; -import com.cloud.utils.IdentityProxy; + +import java.util.ArrayList; +import java.util.List; + +import org.apache.log4j.Logger; + +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ServerApiException; +import com.cloud.api.response.ClusterResponse; +import com.cloud.api.response.ListResponse; +import com.cloud.exception.DiscoveryException; +import com.cloud.exception.ResourceInUseException; +import com.cloud.org.Cluster; +import com.cloud.user.Account; +import com.cloud.utils.IdentityProxy; @Implementation(description="Adds a new cluster", responseObject=ClusterResponse.class) public class AddClusterCmd extends BaseCmd { @@ -47,19 +47,19 @@ public class AddClusterCmd extends BaseCmd { @Parameter(name=ApiConstants.PASSWORD, type=CommandType.STRING, required=false, description="the password for the host") private String password; - - @IdentityMapper(entityTableName="host_pod_ref") - @Parameter(name=ApiConstants.POD_ID, type=CommandType.LONG, required=true, description="the Pod ID for the host") - private Long podId; - - @Parameter(name=ApiConstants.URL, type=CommandType.STRING, required=false, description="the URL") - private String url; - - @Parameter(name=ApiConstants.USERNAME, type=CommandType.STRING, required=false, description="the username for the cluster") - private String username; - - @IdentityMapper(entityTableName="data_center") - + + @IdentityMapper(entityTableName="host_pod_ref") + @Parameter(name=ApiConstants.POD_ID, type=CommandType.LONG, required=true, description="the Pod ID for the host") + private Long podId; + + @Parameter(name=ApiConstants.URL, type=CommandType.STRING, required=false, description="the URL") + private String url; + + @Parameter(name=ApiConstants.USERNAME, type=CommandType.STRING, required=false, description="the username for the cluster") + private String username; + + @IdentityMapper(entityTableName="data_center") + @Parameter(name=ApiConstants.ZONE_ID, type=CommandType.LONG, required=true, description="the Zone ID for the cluster") private Long zoneId; @@ -70,28 +70,28 @@ public class AddClusterCmd extends BaseCmd { private String clusterType; @Parameter(name=ApiConstants.ALLOCATION_STATE, type=CommandType.STRING, description="Allocation state of this cluster for allocation of new resources") - private String allocationState; - - @Parameter(name = ApiConstants.VSM_USERNAME, type = CommandType.STRING, required = false, description = "the username for the VSM associated with this cluster") - private String vsmusername; - - @Parameter(name = ApiConstants.VSM_PASSWORD, type = CommandType.STRING, required = false, description = "the password for the VSM associated with this cluster") - private String vsmpassword; - - @Parameter(name = ApiConstants.VSM_IPADDRESS, type = CommandType.STRING, required = false, description = "the ipaddress of the VSM associated with this cluster") - private String vsmipaddress; - - public String getVSMIpaddress() { - return vsmipaddress; - } - - public String getVSMPassword() { - return vsmpassword; - } - - public String getVSMUsername() { - return vsmusername; - } + private String allocationState; + + @Parameter(name = ApiConstants.VSM_USERNAME, type = CommandType.STRING, required = false, description = "the username for the VSM associated with this cluster") + private String vsmusername; + + @Parameter(name = ApiConstants.VSM_PASSWORD, type = CommandType.STRING, required = false, description = "the password for the VSM associated with this cluster") + private String vsmpassword; + + @Parameter(name = ApiConstants.VSM_IPADDRESS, type = CommandType.STRING, required = false, description = "the ipaddress of the VSM associated with this cluster") + private String vsmipaddress; + + public String getVSMIpaddress() { + return vsmipaddress; + } + + public String getVSMPassword() { + return vsmpassword; + } + + public String getVSMUsername() { + return vsmusername; + } public String getClusterName() { return clusterName; @@ -168,14 +168,14 @@ public class AddClusterCmd extends BaseCmd { this.setResponseObject(response); } catch (DiscoveryException ex) { s_logger.warn("Exception: ", ex); - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, ex.getMessage()); - } catch (ResourceInUseException ex) { - s_logger.warn("Exception: ", ex); - ServerApiException e = new ServerApiException(BaseCmd.INTERNAL_ERROR, ex.getMessage()); - for (IdentityProxy proxyObj : ex.getIdProxyList()) { - e.addProxyObject(proxyObj.getTableName(), proxyObj.getValue(), proxyObj.getidFieldName()); - } - throw e; + throw new ServerApiException(BaseCmd.INTERNAL_ERROR, ex.getMessage()); + } catch (ResourceInUseException ex) { + s_logger.warn("Exception: ", ex); + ServerApiException e = new ServerApiException(BaseCmd.INTERNAL_ERROR, ex.getMessage()); + for (IdentityProxy proxyObj : ex.getIdProxyList()) { + e.addProxyObject(proxyObj.getTableName(), proxyObj.getValue(), proxyObj.getidFieldName()); + } + throw e; } } -} +} diff --git a/api/src/com/cloud/api/commands/AddHostCmd.java b/api/src/com/cloud/api/commands/AddHostCmd.java index a4646a26904..8afe6be2310 100755 --- a/api/src/com/cloud/api/commands/AddHostCmd.java +++ b/api/src/com/cloud/api/commands/AddHostCmd.java @@ -21,12 +21,12 @@ import java.util.List; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.api.response.HostResponse; import com.cloud.api.response.ListResponse; import com.cloud.exception.DiscoveryException; diff --git a/api/src/com/cloud/api/commands/AddNetworkServiceProviderCmd.java b/api/src/com/cloud/api/commands/AddNetworkServiceProviderCmd.java index 1e4339766c0..a382f98c7b7 100644 --- a/api/src/com/cloud/api/commands/AddNetworkServiceProviderCmd.java +++ b/api/src/com/cloud/api/commands/AddNetworkServiceProviderCmd.java @@ -20,13 +20,13 @@ import java.util.List; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseAsyncCreateCmd; -import com.cloud.api.BaseCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseAsyncCreateCmd; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.api.response.ProviderResponse; import com.cloud.async.AsyncJob; import com.cloud.event.EventTypes; diff --git a/api/src/com/cloud/api/commands/AddSecondaryStorageCmd.java b/api/src/com/cloud/api/commands/AddSecondaryStorageCmd.java index 04f84c148f2..85b79b92b54 100644 --- a/api/src/com/cloud/api/commands/AddSecondaryStorageCmd.java +++ b/api/src/com/cloud/api/commands/AddSecondaryStorageCmd.java @@ -20,12 +20,12 @@ import java.util.List; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.api.response.HostResponse; import com.cloud.exception.DiscoveryException; import com.cloud.host.Host; diff --git a/api/src/com/cloud/api/commands/AddSwiftCmd.java b/api/src/com/cloud/api/commands/AddSwiftCmd.java index 0be4d5ffde8..d953be7524e 100644 --- a/api/src/com/cloud/api/commands/AddSwiftCmd.java +++ b/api/src/com/cloud/api/commands/AddSwiftCmd.java @@ -18,11 +18,11 @@ package com.cloud.api.commands; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseCmd; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.api.response.HostResponse; import com.cloud.api.response.SwiftResponse; import com.cloud.exception.DiscoveryException; diff --git a/api/src/com/cloud/api/commands/AddTrafficTypeCmd.java b/api/src/com/cloud/api/commands/AddTrafficTypeCmd.java index 7f3f07eb02f..13dfad6c3c3 100644 --- a/api/src/com/cloud/api/commands/AddTrafficTypeCmd.java +++ b/api/src/com/cloud/api/commands/AddTrafficTypeCmd.java @@ -18,13 +18,13 @@ package com.cloud.api.commands; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseAsyncCreateCmd; -import com.cloud.api.BaseCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseAsyncCreateCmd; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.api.response.TrafficTypeResponse; import com.cloud.async.AsyncJob; import com.cloud.event.EventTypes; diff --git a/api/src/com/cloud/api/commands/AddVpnUserCmd.java b/api/src/com/cloud/api/commands/AddVpnUserCmd.java index 10dc11a6e43..15964dd20e2 100644 --- a/api/src/com/cloud/api/commands/AddVpnUserCmd.java +++ b/api/src/com/cloud/api/commands/AddVpnUserCmd.java @@ -18,13 +18,13 @@ package com.cloud.api.commands; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseAsyncCreateCmd; -import com.cloud.api.BaseCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseAsyncCreateCmd; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.api.response.VpnUsersResponse; import com.cloud.domain.Domain; import com.cloud.event.EventTypes; diff --git a/api/src/com/cloud/api/commands/AssignToLoadBalancerRuleCmd.java b/api/src/com/cloud/api/commands/AssignToLoadBalancerRuleCmd.java index 2a88e878597..04026d3401d 100644 --- a/api/src/com/cloud/api/commands/AssignToLoadBalancerRuleCmd.java +++ b/api/src/com/cloud/api/commands/AssignToLoadBalancerRuleCmd.java @@ -20,13 +20,13 @@ import java.util.List; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseAsyncCmd; -import com.cloud.api.BaseCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseAsyncCmd; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.api.response.SuccessResponse; import com.cloud.event.EventTypes; import com.cloud.exception.InvalidParameterValueException; diff --git a/api/src/com/cloud/api/commands/AssociateIPAddrCmd.java b/api/src/com/cloud/api/commands/AssociateIPAddrCmd.java index 7aaa5b5790b..0356bc127f3 100644 --- a/api/src/com/cloud/api/commands/AssociateIPAddrCmd.java +++ b/api/src/com/cloud/api/commands/AssociateIPAddrCmd.java @@ -20,14 +20,14 @@ import java.util.List; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseAsyncCmd; -import com.cloud.api.BaseAsyncCreateCmd; -import com.cloud.api.BaseCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseAsyncCmd; +import org.apache.cloudstack.api.BaseAsyncCreateCmd; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.api.response.IPAddressResponse; import com.cloud.async.AsyncJob; import com.cloud.dc.DataCenter; diff --git a/api/src/com/cloud/api/commands/AttachIsoCmd.java b/api/src/com/cloud/api/commands/AttachIsoCmd.java index 75f2ac71e99..8bd97e7da12 100755 --- a/api/src/com/cloud/api/commands/AttachIsoCmd.java +++ b/api/src/com/cloud/api/commands/AttachIsoCmd.java @@ -16,15 +16,16 @@ // under the License. package com.cloud.api.commands; +import org.apache.cloudstack.api.user.vm.command.DeployVMCmd; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseAsyncCmd; -import com.cloud.api.BaseCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseAsyncCmd; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.api.response.UserVmResponse; import com.cloud.event.EventTypes; import com.cloud.exception.InvalidParameterValueException; @@ -100,7 +101,7 @@ public class AttachIsoCmd extends BaseAsyncCmd { UserVm userVm = _responseGenerator.findUserVmById(virtualMachineId); if (userVm != null) { UserVmResponse response = _responseGenerator.createUserVmResponse("virtualmachine", userVm).get(0); - response.setResponseName(DeployVMCmd.getResultObjectName()); + response.setResponseName(DeployVMCmd.getResultObjectName()); this.setResponseObject(response); } else { throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to attach iso"); diff --git a/api/src/com/cloud/api/commands/AttachVolumeCmd.java b/api/src/com/cloud/api/commands/AttachVolumeCmd.java index bfd1a84865e..fd9403cc3e3 100755 --- a/api/src/com/cloud/api/commands/AttachVolumeCmd.java +++ b/api/src/com/cloud/api/commands/AttachVolumeCmd.java @@ -18,13 +18,13 @@ package com.cloud.api.commands; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseAsyncCmd; -import com.cloud.api.BaseCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseAsyncCmd; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.api.response.VolumeResponse; import com.cloud.async.AsyncJob; import com.cloud.event.EventTypes; diff --git a/api/src/com/cloud/api/commands/AuthorizeSecurityGroupEgressCmd.java b/api/src/com/cloud/api/commands/AuthorizeSecurityGroupEgressCmd.java index a6088d0b959..13303a4b769 100644 --- a/api/src/com/cloud/api/commands/AuthorizeSecurityGroupEgressCmd.java +++ b/api/src/com/cloud/api/commands/AuthorizeSecurityGroupEgressCmd.java @@ -22,13 +22,13 @@ import java.util.Iterator; import java.util.List; import java.util.Map; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseAsyncCmd; -import com.cloud.api.BaseCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseAsyncCmd; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.api.response.SecurityGroupRuleResponse; import com.cloud.api.response.SecurityGroupResponse; import com.cloud.async.AsyncJob; diff --git a/api/src/com/cloud/api/commands/AuthorizeSecurityGroupIngressCmd.java b/api/src/com/cloud/api/commands/AuthorizeSecurityGroupIngressCmd.java index e8f8b986b4b..21b4eb08430 100644 --- a/api/src/com/cloud/api/commands/AuthorizeSecurityGroupIngressCmd.java +++ b/api/src/com/cloud/api/commands/AuthorizeSecurityGroupIngressCmd.java @@ -24,13 +24,13 @@ import java.util.Map; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseAsyncCmd; -import com.cloud.api.BaseCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseAsyncCmd; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.api.response.SecurityGroupResponse; import com.cloud.api.response.SecurityGroupRuleResponse; import com.cloud.async.AsyncJob; diff --git a/api/src/com/cloud/api/commands/CancelMaintenanceCmd.java b/api/src/com/cloud/api/commands/CancelMaintenanceCmd.java index def0c2d75cd..155a07128dc 100644 --- a/api/src/com/cloud/api/commands/CancelMaintenanceCmd.java +++ b/api/src/com/cloud/api/commands/CancelMaintenanceCmd.java @@ -18,13 +18,13 @@ package com.cloud.api.commands; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseAsyncCmd; -import com.cloud.api.BaseCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseAsyncCmd; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.api.response.HostResponse; import com.cloud.async.AsyncJob; import com.cloud.event.EventTypes; diff --git a/api/src/com/cloud/api/commands/CancelPrimaryStorageMaintenanceCmd.java b/api/src/com/cloud/api/commands/CancelPrimaryStorageMaintenanceCmd.java index c4d97aeb985..585490f8ae9 100644 --- a/api/src/com/cloud/api/commands/CancelPrimaryStorageMaintenanceCmd.java +++ b/api/src/com/cloud/api/commands/CancelPrimaryStorageMaintenanceCmd.java @@ -18,13 +18,13 @@ package com.cloud.api.commands; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseAsyncCmd; -import com.cloud.api.BaseCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseAsyncCmd; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.api.response.StoragePoolResponse; import com.cloud.async.AsyncJob; import com.cloud.event.EventTypes; diff --git a/api/src/com/cloud/api/commands/ConfigureVirtualRouterElementCmd.java b/api/src/com/cloud/api/commands/ConfigureVirtualRouterElementCmd.java index 967994051bb..923cd1ae580 100644 --- a/api/src/com/cloud/api/commands/ConfigureVirtualRouterElementCmd.java +++ b/api/src/com/cloud/api/commands/ConfigureVirtualRouterElementCmd.java @@ -18,14 +18,14 @@ package com.cloud.api.commands; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseAsyncCmd; -import com.cloud.api.BaseCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.PlugService; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseAsyncCmd; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.PlugService; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.api.response.VirtualRouterProviderResponse; import com.cloud.network.VirtualRouterProvider; import com.cloud.network.element.VirtualRouterElementService; diff --git a/api/src/com/cloud/api/commands/CopyTemplateCmd.java b/api/src/com/cloud/api/commands/CopyTemplateCmd.java index d825bbce68c..fc5d09d467b 100755 --- a/api/src/com/cloud/api/commands/CopyTemplateCmd.java +++ b/api/src/com/cloud/api/commands/CopyTemplateCmd.java @@ -20,13 +20,13 @@ import java.util.List; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseAsyncCmd; -import com.cloud.api.BaseCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseAsyncCmd; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.api.response.TemplateResponse; import com.cloud.async.AsyncJob; import com.cloud.event.EventTypes; diff --git a/api/src/com/cloud/api/commands/CreateAccountCmd.java b/api/src/com/cloud/api/commands/CreateAccountCmd.java index 00e87761c5d..57f61499414 100755 --- a/api/src/com/cloud/api/commands/CreateAccountCmd.java +++ b/api/src/com/cloud/api/commands/CreateAccountCmd.java @@ -21,12 +21,12 @@ import java.util.Map; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.api.response.AccountResponse; import com.cloud.api.response.UserResponse; import com.cloud.user.Account; diff --git a/api/src/com/cloud/api/commands/CreateAutoScalePolicyCmd.java b/api/src/com/cloud/api/commands/CreateAutoScalePolicyCmd.java index 4d9374791ed..a921a9b2439 100644 --- a/api/src/com/cloud/api/commands/CreateAutoScalePolicyCmd.java +++ b/api/src/com/cloud/api/commands/CreateAutoScalePolicyCmd.java @@ -1,32 +1,32 @@ -// 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.commands; +// 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.commands; import java.util.List; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseAsyncCreateCmd; -import com.cloud.api.BaseCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseAsyncCreateCmd; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.api.response.AutoScalePolicyResponse; import com.cloud.async.AsyncJob; import com.cloud.domain.Domain; diff --git a/api/src/com/cloud/api/commands/CreateAutoScaleVmGroupCmd.java b/api/src/com/cloud/api/commands/CreateAutoScaleVmGroupCmd.java index 83d76072d83..30a7d01eb3b 100644 --- a/api/src/com/cloud/api/commands/CreateAutoScaleVmGroupCmd.java +++ b/api/src/com/cloud/api/commands/CreateAutoScaleVmGroupCmd.java @@ -1,32 +1,32 @@ -// 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. +// 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.commands; import java.util.List; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseAsyncCreateCmd; -import com.cloud.api.BaseCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseAsyncCreateCmd; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.api.response.AutoScaleVmGroupResponse; import com.cloud.async.AsyncJob; import com.cloud.event.EventTypes; diff --git a/api/src/com/cloud/api/commands/CreateAutoScaleVmProfileCmd.java b/api/src/com/cloud/api/commands/CreateAutoScaleVmProfileCmd.java index 68c85d09199..7d16973fee1 100644 --- a/api/src/com/cloud/api/commands/CreateAutoScaleVmProfileCmd.java +++ b/api/src/com/cloud/api/commands/CreateAutoScaleVmProfileCmd.java @@ -1,19 +1,19 @@ -// 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. +// 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.commands; import java.util.HashMap; @@ -21,13 +21,13 @@ import java.util.Map; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseAsyncCreateCmd; -import com.cloud.api.BaseCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseAsyncCreateCmd; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.api.response.AutoScaleVmProfileResponse; import com.cloud.async.AsyncJob; import com.cloud.event.EventTypes; diff --git a/api/src/com/cloud/api/commands/CreateConditionCmd.java b/api/src/com/cloud/api/commands/CreateConditionCmd.java index eafd8a05ab9..3c0cf299cf5 100644 --- a/api/src/com/cloud/api/commands/CreateConditionCmd.java +++ b/api/src/com/cloud/api/commands/CreateConditionCmd.java @@ -19,13 +19,13 @@ package com.cloud.api.commands; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseAsyncCreateCmd; -import com.cloud.api.BaseCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseAsyncCreateCmd; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.api.response.ConditionResponse; import com.cloud.async.AsyncJob; import com.cloud.event.EventTypes; diff --git a/api/src/com/cloud/api/commands/CreateCounterCmd.java b/api/src/com/cloud/api/commands/CreateCounterCmd.java index cc7d78cc31b..f446519e2b8 100644 --- a/api/src/com/cloud/api/commands/CreateCounterCmd.java +++ b/api/src/com/cloud/api/commands/CreateCounterCmd.java @@ -19,12 +19,12 @@ package com.cloud.api.commands; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseAsyncCreateCmd; -import com.cloud.api.BaseCmd; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseAsyncCreateCmd; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.api.response.CounterResponse; import com.cloud.async.AsyncJob; import com.cloud.event.EventTypes; diff --git a/api/src/com/cloud/api/commands/CreateDiskOfferingCmd.java b/api/src/com/cloud/api/commands/CreateDiskOfferingCmd.java index 779221ee416..bbe3f17eed0 100755 --- a/api/src/com/cloud/api/commands/CreateDiskOfferingCmd.java +++ b/api/src/com/cloud/api/commands/CreateDiskOfferingCmd.java @@ -18,12 +18,12 @@ package com.cloud.api.commands; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.api.response.DiskOfferingResponse; import com.cloud.offering.DiskOffering; import com.cloud.offering.ServiceOffering; diff --git a/api/src/com/cloud/api/commands/CreateDomainCmd.java b/api/src/com/cloud/api/commands/CreateDomainCmd.java index 92ee7ecefe9..6e59ae98aab 100644 --- a/api/src/com/cloud/api/commands/CreateDomainCmd.java +++ b/api/src/com/cloud/api/commands/CreateDomainCmd.java @@ -18,12 +18,12 @@ package com.cloud.api.commands; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.api.response.DomainResponse; import com.cloud.domain.Domain; import com.cloud.user.Account; diff --git a/api/src/com/cloud/api/commands/CreateFirewallRuleCmd.java b/api/src/com/cloud/api/commands/CreateFirewallRuleCmd.java index 937e9aa91e5..d01d92de308 100644 --- a/api/src/com/cloud/api/commands/CreateFirewallRuleCmd.java +++ b/api/src/com/cloud/api/commands/CreateFirewallRuleCmd.java @@ -21,14 +21,14 @@ import java.util.List; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseAsyncCmd; -import com.cloud.api.BaseAsyncCreateCmd; -import com.cloud.api.BaseCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseAsyncCmd; +import org.apache.cloudstack.api.BaseAsyncCreateCmd; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.api.response.FirewallResponse; import com.cloud.async.AsyncJob; import com.cloud.event.EventTypes; diff --git a/api/src/com/cloud/api/commands/CreateIpForwardingRuleCmd.java b/api/src/com/cloud/api/commands/CreateIpForwardingRuleCmd.java index a688d134352..3df3155ed87 100644 --- a/api/src/com/cloud/api/commands/CreateIpForwardingRuleCmd.java +++ b/api/src/com/cloud/api/commands/CreateIpForwardingRuleCmd.java @@ -20,14 +20,14 @@ import java.util.List; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseAsyncCmd; -import com.cloud.api.BaseAsyncCreateCmd; -import com.cloud.api.BaseCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseAsyncCmd; +import org.apache.cloudstack.api.BaseAsyncCreateCmd; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.api.response.FirewallRuleResponse; import com.cloud.api.response.IpForwardingRuleResponse; import com.cloud.async.AsyncJob; diff --git a/api/src/com/cloud/api/commands/CreateLBStickinessPolicyCmd.java b/api/src/com/cloud/api/commands/CreateLBStickinessPolicyCmd.java index c2410c882fa..c98dc66e39b 100644 --- a/api/src/com/cloud/api/commands/CreateLBStickinessPolicyCmd.java +++ b/api/src/com/cloud/api/commands/CreateLBStickinessPolicyCmd.java @@ -21,13 +21,13 @@ import java.util.Map; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseAsyncCreateCmd; -import com.cloud.api.BaseCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseAsyncCreateCmd; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.event.EventTypes; import com.cloud.exception.NetworkRuleConflictException; import com.cloud.exception.ResourceAllocationException; diff --git a/api/src/com/cloud/api/commands/CreateLoadBalancerRuleCmd.java b/api/src/com/cloud/api/commands/CreateLoadBalancerRuleCmd.java index 80a86847a7e..0088ca64741 100644 --- a/api/src/com/cloud/api/commands/CreateLoadBalancerRuleCmd.java +++ b/api/src/com/cloud/api/commands/CreateLoadBalancerRuleCmd.java @@ -20,13 +20,13 @@ import java.util.List; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseAsyncCreateCmd; -import com.cloud.api.BaseCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseAsyncCreateCmd; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.api.response.LoadBalancerResponse; import com.cloud.async.AsyncJob; import com.cloud.dc.DataCenter; diff --git a/api/src/com/cloud/api/commands/CreateNetworkACLCmd.java b/api/src/com/cloud/api/commands/CreateNetworkACLCmd.java index 033a496d35d..da1229c193f 100644 --- a/api/src/com/cloud/api/commands/CreateNetworkACLCmd.java +++ b/api/src/com/cloud/api/commands/CreateNetworkACLCmd.java @@ -21,14 +21,14 @@ import java.util.List; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseAsyncCmd; -import com.cloud.api.BaseAsyncCreateCmd; -import com.cloud.api.BaseCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseAsyncCmd; +import org.apache.cloudstack.api.BaseAsyncCreateCmd; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.api.response.NetworkACLResponse; import com.cloud.async.AsyncJob; import com.cloud.event.EventTypes; diff --git a/api/src/com/cloud/api/commands/CreateNetworkCmd.java b/api/src/com/cloud/api/commands/CreateNetworkCmd.java index a53635722ef..3a3c02958ef 100644 --- a/api/src/com/cloud/api/commands/CreateNetworkCmd.java +++ b/api/src/com/cloud/api/commands/CreateNetworkCmd.java @@ -18,12 +18,12 @@ package com.cloud.api.commands; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.api.response.NetworkResponse; import com.cloud.exception.ConcurrentOperationException; import com.cloud.exception.InsufficientCapacityException; diff --git a/api/src/com/cloud/api/commands/CreateNetworkOfferingCmd.java b/api/src/com/cloud/api/commands/CreateNetworkOfferingCmd.java index 748f96eb263..f62cf8f21db 100644 --- a/api/src/com/cloud/api/commands/CreateNetworkOfferingCmd.java +++ b/api/src/com/cloud/api/commands/CreateNetworkOfferingCmd.java @@ -25,12 +25,12 @@ import java.util.Map; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.api.response.NetworkOfferingResponse; import com.cloud.exception.InvalidParameterValueException; import com.cloud.network.Network.Capability; diff --git a/api/src/com/cloud/api/commands/CreatePhysicalNetworkCmd.java b/api/src/com/cloud/api/commands/CreatePhysicalNetworkCmd.java index 537b9bec56d..bf6f7385105 100644 --- a/api/src/com/cloud/api/commands/CreatePhysicalNetworkCmd.java +++ b/api/src/com/cloud/api/commands/CreatePhysicalNetworkCmd.java @@ -20,13 +20,13 @@ import java.util.List; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseAsyncCreateCmd; -import com.cloud.api.BaseCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseAsyncCreateCmd; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.api.response.PhysicalNetworkResponse; import com.cloud.async.AsyncJob; import com.cloud.event.EventTypes; diff --git a/api/src/com/cloud/api/commands/CreatePodCmd.java b/api/src/com/cloud/api/commands/CreatePodCmd.java index 99a161bb211..55dcfae0b04 100755 --- a/api/src/com/cloud/api/commands/CreatePodCmd.java +++ b/api/src/com/cloud/api/commands/CreatePodCmd.java @@ -18,12 +18,12 @@ package com.cloud.api.commands; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.api.response.PodResponse; import com.cloud.dc.Pod; import com.cloud.user.Account; diff --git a/api/src/com/cloud/api/commands/CreatePortForwardingRuleCmd.java b/api/src/com/cloud/api/commands/CreatePortForwardingRuleCmd.java index 3f3915a705d..472ccfe4936 100644 --- a/api/src/com/cloud/api/commands/CreatePortForwardingRuleCmd.java +++ b/api/src/com/cloud/api/commands/CreatePortForwardingRuleCmd.java @@ -20,14 +20,14 @@ import java.util.List; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseAsyncCmd; -import com.cloud.api.BaseAsyncCreateCmd; -import com.cloud.api.BaseCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseAsyncCmd; +import org.apache.cloudstack.api.BaseAsyncCreateCmd; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.api.response.FirewallRuleResponse; import com.cloud.async.AsyncJob; import com.cloud.event.EventTypes; diff --git a/api/src/com/cloud/api/commands/CreatePrivateGatewayCmd.java b/api/src/com/cloud/api/commands/CreatePrivateGatewayCmd.java index c56f9affc4b..79c2c5fbd0e 100644 --- a/api/src/com/cloud/api/commands/CreatePrivateGatewayCmd.java +++ b/api/src/com/cloud/api/commands/CreatePrivateGatewayCmd.java @@ -18,14 +18,14 @@ package com.cloud.api.commands; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseAsyncCmd; -import com.cloud.api.BaseAsyncCreateCmd; -import com.cloud.api.BaseCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseAsyncCmd; +import org.apache.cloudstack.api.BaseAsyncCreateCmd; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.api.response.PrivateGatewayResponse; import com.cloud.async.AsyncJob; import com.cloud.event.EventTypes; diff --git a/api/src/com/cloud/api/commands/CreatePrivateNetworkCmd.java b/api/src/com/cloud/api/commands/CreatePrivateNetworkCmd.java index 99fd48f82d2..8b0aaae9ddc 100644 --- a/api/src/com/cloud/api/commands/CreatePrivateNetworkCmd.java +++ b/api/src/com/cloud/api/commands/CreatePrivateNetworkCmd.java @@ -18,13 +18,13 @@ package com.cloud.api.commands; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseAsyncCreateCmd; -import com.cloud.api.BaseCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseAsyncCreateCmd; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.api.response.NetworkResponse; import com.cloud.event.EventTypes; import com.cloud.exception.ConcurrentOperationException; diff --git a/api/src/com/cloud/api/commands/CreateProjectCmd.java b/api/src/com/cloud/api/commands/CreateProjectCmd.java index 12d1a2c6ea9..0d7bbe8aec1 100644 --- a/api/src/com/cloud/api/commands/CreateProjectCmd.java +++ b/api/src/com/cloud/api/commands/CreateProjectCmd.java @@ -18,13 +18,13 @@ package com.cloud.api.commands; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseAsyncCreateCmd; -import com.cloud.api.BaseCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseAsyncCreateCmd; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.api.response.ProjectResponse; import com.cloud.event.EventTypes; import com.cloud.exception.InvalidParameterValueException; diff --git a/api/src/com/cloud/api/commands/CreateSSHKeyPairCmd.java b/api/src/com/cloud/api/commands/CreateSSHKeyPairCmd.java index f750ee88d88..6ba5db6f128 100644 --- a/api/src/com/cloud/api/commands/CreateSSHKeyPairCmd.java +++ b/api/src/com/cloud/api/commands/CreateSSHKeyPairCmd.java @@ -18,11 +18,11 @@ package com.cloud.api.commands; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; import com.cloud.api.response.SSHKeyPairResponse; import com.cloud.user.SSHKeyPair; import com.cloud.user.UserContext; diff --git a/api/src/com/cloud/api/commands/CreateSecurityGroupCmd.java b/api/src/com/cloud/api/commands/CreateSecurityGroupCmd.java index 62fae921f7d..ddd4bfb000d 100644 --- a/api/src/com/cloud/api/commands/CreateSecurityGroupCmd.java +++ b/api/src/com/cloud/api/commands/CreateSecurityGroupCmd.java @@ -18,12 +18,12 @@ package com.cloud.api.commands; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.api.response.SecurityGroupResponse; import com.cloud.network.security.SecurityGroup; import com.cloud.user.Account; diff --git a/api/src/com/cloud/api/commands/CreateServiceOfferingCmd.java b/api/src/com/cloud/api/commands/CreateServiceOfferingCmd.java index 1aa43e67dc3..ab15334784b 100644 --- a/api/src/com/cloud/api/commands/CreateServiceOfferingCmd.java +++ b/api/src/com/cloud/api/commands/CreateServiceOfferingCmd.java @@ -18,12 +18,12 @@ package com.cloud.api.commands; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.api.response.ServiceOfferingResponse; import com.cloud.offering.ServiceOffering; import com.cloud.user.Account; diff --git a/api/src/com/cloud/api/commands/CreateSnapshotCmd.java b/api/src/com/cloud/api/commands/CreateSnapshotCmd.java index e78dbdabe67..cb4e3ba21a8 100755 --- a/api/src/com/cloud/api/commands/CreateSnapshotCmd.java +++ b/api/src/com/cloud/api/commands/CreateSnapshotCmd.java @@ -18,14 +18,14 @@ package com.cloud.api.commands; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseAsyncCmd; -import com.cloud.api.BaseAsyncCreateCmd; -import com.cloud.api.BaseCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseAsyncCmd; +import org.apache.cloudstack.api.BaseAsyncCreateCmd; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.api.response.SnapshotResponse; import com.cloud.async.AsyncJob; import com.cloud.event.EventTypes; diff --git a/api/src/com/cloud/api/commands/CreateSnapshotPolicyCmd.java b/api/src/com/cloud/api/commands/CreateSnapshotPolicyCmd.java index 6708bf9e8b2..3e9c3ce03e6 100644 --- a/api/src/com/cloud/api/commands/CreateSnapshotPolicyCmd.java +++ b/api/src/com/cloud/api/commands/CreateSnapshotPolicyCmd.java @@ -18,12 +18,12 @@ package com.cloud.api.commands; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.api.response.SnapshotPolicyResponse; import com.cloud.exception.InvalidParameterValueException; import com.cloud.exception.PermissionDeniedException; diff --git a/api/src/com/cloud/api/commands/CreateStaticRouteCmd.java b/api/src/com/cloud/api/commands/CreateStaticRouteCmd.java index bf287e97200..446116c3569 100644 --- a/api/src/com/cloud/api/commands/CreateStaticRouteCmd.java +++ b/api/src/com/cloud/api/commands/CreateStaticRouteCmd.java @@ -17,14 +17,14 @@ package com.cloud.api.commands; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseAsyncCmd; -import com.cloud.api.BaseAsyncCreateCmd; -import com.cloud.api.BaseCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseAsyncCmd; +import org.apache.cloudstack.api.BaseAsyncCreateCmd; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.api.response.StaticRouteResponse; import com.cloud.async.AsyncJob; import com.cloud.event.EventTypes; diff --git a/api/src/com/cloud/api/commands/CreateStorageNetworkIpRangeCmd.java b/api/src/com/cloud/api/commands/CreateStorageNetworkIpRangeCmd.java index 8299ec94693..c3b25dc032e 100755 --- a/api/src/com/cloud/api/commands/CreateStorageNetworkIpRangeCmd.java +++ b/api/src/com/cloud/api/commands/CreateStorageNetworkIpRangeCmd.java @@ -18,13 +18,13 @@ package com.cloud.api.commands; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseAsyncCmd; -import com.cloud.api.BaseCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseAsyncCmd; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.api.response.StorageNetworkIpRangeResponse; import com.cloud.dc.StorageNetworkIpRange; import com.cloud.event.EventTypes; diff --git a/api/src/com/cloud/api/commands/CreateStoragePoolCmd.java b/api/src/com/cloud/api/commands/CreateStoragePoolCmd.java index 8926ea71b13..9c8245a4253 100644 --- a/api/src/com/cloud/api/commands/CreateStoragePoolCmd.java +++ b/api/src/com/cloud/api/commands/CreateStoragePoolCmd.java @@ -21,12 +21,12 @@ import java.util.Map; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.api.response.StoragePoolResponse; import com.cloud.exception.ResourceInUseException; import com.cloud.exception.ResourceUnavailableException; diff --git a/api/src/com/cloud/api/commands/CreateTagsCmd.java b/api/src/com/cloud/api/commands/CreateTagsCmd.java index 7e9bfb15440..04c159da6ae 100644 --- a/api/src/com/cloud/api/commands/CreateTagsCmd.java +++ b/api/src/com/cloud/api/commands/CreateTagsCmd.java @@ -25,12 +25,12 @@ import java.util.Map; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseAsyncCmd; -import com.cloud.api.BaseCmd; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseAsyncCmd; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.api.response.SuccessResponse; import com.cloud.event.EventTypes; import com.cloud.server.ResourceTag; diff --git a/api/src/com/cloud/api/commands/CreateTemplateCmd.java b/api/src/com/cloud/api/commands/CreateTemplateCmd.java index 05f18fb9a49..d43eadce30a 100755 --- a/api/src/com/cloud/api/commands/CreateTemplateCmd.java +++ b/api/src/com/cloud/api/commands/CreateTemplateCmd.java @@ -22,13 +22,13 @@ import java.util.Map; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseAsyncCreateCmd; -import com.cloud.api.BaseCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseAsyncCreateCmd; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.api.response.StoragePoolResponse; import com.cloud.api.response.TemplateResponse; import com.cloud.async.AsyncJob; diff --git a/api/src/com/cloud/api/commands/CreateUserCmd.java b/api/src/com/cloud/api/commands/CreateUserCmd.java index fc10437e257..de060e6822f 100644 --- a/api/src/com/cloud/api/commands/CreateUserCmd.java +++ b/api/src/com/cloud/api/commands/CreateUserCmd.java @@ -18,12 +18,12 @@ package com.cloud.api.commands; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.api.response.UserResponse; import com.cloud.user.Account; import com.cloud.user.User; diff --git a/api/src/com/cloud/api/commands/CreateVMGroupCmd.java b/api/src/com/cloud/api/commands/CreateVMGroupCmd.java index a5cdcd757f2..45d67bcdc4d 100644 --- a/api/src/com/cloud/api/commands/CreateVMGroupCmd.java +++ b/api/src/com/cloud/api/commands/CreateVMGroupCmd.java @@ -18,12 +18,12 @@ package com.cloud.api.commands; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.api.response.InstanceGroupResponse; import com.cloud.user.UserContext; import com.cloud.vm.InstanceGroup; diff --git a/api/src/com/cloud/api/commands/CreateVPCCmd.java b/api/src/com/cloud/api/commands/CreateVPCCmd.java index 35b526dc5af..b07a7146fb2 100644 --- a/api/src/com/cloud/api/commands/CreateVPCCmd.java +++ b/api/src/com/cloud/api/commands/CreateVPCCmd.java @@ -18,13 +18,13 @@ package com.cloud.api.commands; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseAsyncCreateCmd; -import com.cloud.api.BaseCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseAsyncCreateCmd; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.api.response.VpcResponse; import com.cloud.event.EventTypes; import com.cloud.exception.ConcurrentOperationException; diff --git a/api/src/com/cloud/api/commands/CreateVPCOfferingCmd.java b/api/src/com/cloud/api/commands/CreateVPCOfferingCmd.java index 6b1e9f96044..a5bb0e0a2c0 100644 --- a/api/src/com/cloud/api/commands/CreateVPCOfferingCmd.java +++ b/api/src/com/cloud/api/commands/CreateVPCOfferingCmd.java @@ -20,12 +20,12 @@ import java.util.List; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseAsyncCreateCmd; -import com.cloud.api.BaseCmd; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseAsyncCreateCmd; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.api.response.VpcOfferingResponse; import com.cloud.event.EventTypes; import com.cloud.exception.ResourceAllocationException; diff --git a/api/src/com/cloud/api/commands/CreateVirtualRouterElementCmd.java b/api/src/com/cloud/api/commands/CreateVirtualRouterElementCmd.java index 2c44663a382..bf4e2c9f716 100644 --- a/api/src/com/cloud/api/commands/CreateVirtualRouterElementCmd.java +++ b/api/src/com/cloud/api/commands/CreateVirtualRouterElementCmd.java @@ -18,14 +18,14 @@ package com.cloud.api.commands; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseAsyncCreateCmd; -import com.cloud.api.BaseCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.PlugService; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseAsyncCreateCmd; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.PlugService; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.api.response.VirtualRouterProviderResponse; import com.cloud.event.EventTypes; import com.cloud.exception.ResourceAllocationException; diff --git a/api/src/com/cloud/api/commands/CreateVlanIpRangeCmd.java b/api/src/com/cloud/api/commands/CreateVlanIpRangeCmd.java index 63eda633858..bc0ba6c3812 100644 --- a/api/src/com/cloud/api/commands/CreateVlanIpRangeCmd.java +++ b/api/src/com/cloud/api/commands/CreateVlanIpRangeCmd.java @@ -18,12 +18,12 @@ package com.cloud.api.commands; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.api.response.VlanIpRangeResponse; import com.cloud.dc.Vlan; import com.cloud.exception.ConcurrentOperationException; diff --git a/api/src/com/cloud/api/commands/CreateVolumeCmd.java b/api/src/com/cloud/api/commands/CreateVolumeCmd.java index d0585fe1547..be9451c9e41 100644 --- a/api/src/com/cloud/api/commands/CreateVolumeCmd.java +++ b/api/src/com/cloud/api/commands/CreateVolumeCmd.java @@ -18,13 +18,13 @@ package com.cloud.api.commands; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseAsyncCreateCmd; -import com.cloud.api.BaseCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseAsyncCreateCmd; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.api.response.VolumeResponse; import com.cloud.async.AsyncJob; import com.cloud.event.EventTypes; diff --git a/api/src/com/cloud/api/commands/CreateZoneCmd.java b/api/src/com/cloud/api/commands/CreateZoneCmd.java index 1e9170d45e2..bf2ed2f4dcb 100755 --- a/api/src/com/cloud/api/commands/CreateZoneCmd.java +++ b/api/src/com/cloud/api/commands/CreateZoneCmd.java @@ -18,12 +18,12 @@ package com.cloud.api.commands; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.api.response.ZoneResponse; import com.cloud.dc.DataCenter; import com.cloud.user.Account; diff --git a/api/src/com/cloud/api/commands/DeleteAccountCmd.java b/api/src/com/cloud/api/commands/DeleteAccountCmd.java index a7bfca78359..127a7d30781 100755 --- a/api/src/com/cloud/api/commands/DeleteAccountCmd.java +++ b/api/src/com/cloud/api/commands/DeleteAccountCmd.java @@ -18,13 +18,13 @@ package com.cloud.api.commands; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseAsyncCmd; -import com.cloud.api.BaseCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseAsyncCmd; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.api.response.SuccessResponse; import com.cloud.async.AsyncJob; import com.cloud.event.EventTypes; diff --git a/api/src/com/cloud/api/commands/DeleteAccountFromProjectCmd.java b/api/src/com/cloud/api/commands/DeleteAccountFromProjectCmd.java index d9b3bf19bee..4e3db7e9eea 100644 --- a/api/src/com/cloud/api/commands/DeleteAccountFromProjectCmd.java +++ b/api/src/com/cloud/api/commands/DeleteAccountFromProjectCmd.java @@ -18,13 +18,13 @@ package com.cloud.api.commands; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseAsyncCmd; -import com.cloud.api.BaseCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseAsyncCmd; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.api.response.SuccessResponse; import com.cloud.event.EventTypes; import com.cloud.exception.InvalidParameterValueException; diff --git a/api/src/com/cloud/api/commands/DeleteAutoScalePolicyCmd.java b/api/src/com/cloud/api/commands/DeleteAutoScalePolicyCmd.java index 6d7ce5e8861..6cf22c55074 100644 --- a/api/src/com/cloud/api/commands/DeleteAutoScalePolicyCmd.java +++ b/api/src/com/cloud/api/commands/DeleteAutoScalePolicyCmd.java @@ -1,30 +1,30 @@ -// 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. +// 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.commands; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseAsyncCmd; -import com.cloud.api.BaseCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseAsyncCmd; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.api.response.SuccessResponse; import com.cloud.async.AsyncJob; import com.cloud.event.EventTypes; diff --git a/api/src/com/cloud/api/commands/DeleteAutoScaleVmGroupCmd.java b/api/src/com/cloud/api/commands/DeleteAutoScaleVmGroupCmd.java index 0acc09f14c0..852b351c70b 100644 --- a/api/src/com/cloud/api/commands/DeleteAutoScaleVmGroupCmd.java +++ b/api/src/com/cloud/api/commands/DeleteAutoScaleVmGroupCmd.java @@ -1,30 +1,30 @@ -// 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. +// 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.commands; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseAsyncCmd; -import com.cloud.api.BaseCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseAsyncCmd; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.api.response.SuccessResponse; import com.cloud.async.AsyncJob; import com.cloud.event.EventTypes; diff --git a/api/src/com/cloud/api/commands/DeleteAutoScaleVmProfileCmd.java b/api/src/com/cloud/api/commands/DeleteAutoScaleVmProfileCmd.java index e248c8e2050..f48112b8a51 100644 --- a/api/src/com/cloud/api/commands/DeleteAutoScaleVmProfileCmd.java +++ b/api/src/com/cloud/api/commands/DeleteAutoScaleVmProfileCmd.java @@ -1,30 +1,30 @@ -// 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. +// 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.commands; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseAsyncCmd; -import com.cloud.api.BaseCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseAsyncCmd; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.api.response.SuccessResponse; import com.cloud.async.AsyncJob; import com.cloud.event.EventTypes; diff --git a/api/src/com/cloud/api/commands/DeleteClusterCmd.java b/api/src/com/cloud/api/commands/DeleteClusterCmd.java index 2e08b1c9100..5e347c6eb38 100755 --- a/api/src/com/cloud/api/commands/DeleteClusterCmd.java +++ b/api/src/com/cloud/api/commands/DeleteClusterCmd.java @@ -18,12 +18,12 @@ package com.cloud.api.commands; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.api.response.SuccessResponse; import com.cloud.user.Account; diff --git a/api/src/com/cloud/api/commands/DeleteConditionCmd.java b/api/src/com/cloud/api/commands/DeleteConditionCmd.java index 4f4914dd511..d09ed6dfeb0 100644 --- a/api/src/com/cloud/api/commands/DeleteConditionCmd.java +++ b/api/src/com/cloud/api/commands/DeleteConditionCmd.java @@ -19,13 +19,13 @@ package com.cloud.api.commands; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseAsyncCmd; -import com.cloud.api.BaseCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseAsyncCmd; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.api.response.SuccessResponse; import com.cloud.async.AsyncJob; import com.cloud.event.EventTypes; diff --git a/api/src/com/cloud/api/commands/DeleteCounterCmd.java b/api/src/com/cloud/api/commands/DeleteCounterCmd.java index e9b92ef28ac..2b2d7b24e15 100644 --- a/api/src/com/cloud/api/commands/DeleteCounterCmd.java +++ b/api/src/com/cloud/api/commands/DeleteCounterCmd.java @@ -19,13 +19,13 @@ package com.cloud.api.commands; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseAsyncCmd; -import com.cloud.api.BaseCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseAsyncCmd; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.api.response.SuccessResponse; import com.cloud.async.AsyncJob; import com.cloud.event.EventTypes; diff --git a/api/src/com/cloud/api/commands/DeleteDiskOfferingCmd.java b/api/src/com/cloud/api/commands/DeleteDiskOfferingCmd.java index 12fcac7ac1a..b3ed874a40e 100644 --- a/api/src/com/cloud/api/commands/DeleteDiskOfferingCmd.java +++ b/api/src/com/cloud/api/commands/DeleteDiskOfferingCmd.java @@ -18,12 +18,12 @@ package com.cloud.api.commands; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.api.response.SuccessResponse; import com.cloud.user.Account; diff --git a/api/src/com/cloud/api/commands/DeleteDomainCmd.java b/api/src/com/cloud/api/commands/DeleteDomainCmd.java index 3908256a192..90e119c8639 100644 --- a/api/src/com/cloud/api/commands/DeleteDomainCmd.java +++ b/api/src/com/cloud/api/commands/DeleteDomainCmd.java @@ -18,13 +18,13 @@ package com.cloud.api.commands; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseAsyncCmd; -import com.cloud.api.BaseCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseAsyncCmd; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.api.response.SuccessResponse; import com.cloud.domain.Domain; import com.cloud.event.EventTypes; diff --git a/api/src/com/cloud/api/commands/DeleteFirewallRuleCmd.java b/api/src/com/cloud/api/commands/DeleteFirewallRuleCmd.java index 36ae4aa3a15..469ff9c50c1 100644 --- a/api/src/com/cloud/api/commands/DeleteFirewallRuleCmd.java +++ b/api/src/com/cloud/api/commands/DeleteFirewallRuleCmd.java @@ -18,13 +18,13 @@ package com.cloud.api.commands; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseAsyncCmd; -import com.cloud.api.BaseCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseAsyncCmd; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.api.response.SuccessResponse; import com.cloud.async.AsyncJob; import com.cloud.event.EventTypes; diff --git a/api/src/com/cloud/api/commands/DeleteHostCmd.java b/api/src/com/cloud/api/commands/DeleteHostCmd.java index 60e61b99f30..3485be85885 100644 --- a/api/src/com/cloud/api/commands/DeleteHostCmd.java +++ b/api/src/com/cloud/api/commands/DeleteHostCmd.java @@ -18,12 +18,12 @@ package com.cloud.api.commands; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.api.response.SuccessResponse; import com.cloud.user.Account; diff --git a/api/src/com/cloud/api/commands/DeleteIpForwardingRuleCmd.java b/api/src/com/cloud/api/commands/DeleteIpForwardingRuleCmd.java index 475e09a017b..3d390d8a1d6 100644 --- a/api/src/com/cloud/api/commands/DeleteIpForwardingRuleCmd.java +++ b/api/src/com/cloud/api/commands/DeleteIpForwardingRuleCmd.java @@ -18,13 +18,13 @@ package com.cloud.api.commands; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseAsyncCmd; -import com.cloud.api.BaseCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseAsyncCmd; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.api.response.SuccessResponse; import com.cloud.async.AsyncJob; import com.cloud.event.EventTypes; diff --git a/api/src/com/cloud/api/commands/DeleteIsoCmd.java b/api/src/com/cloud/api/commands/DeleteIsoCmd.java index 70ce7312c49..389984313a4 100755 --- a/api/src/com/cloud/api/commands/DeleteIsoCmd.java +++ b/api/src/com/cloud/api/commands/DeleteIsoCmd.java @@ -18,13 +18,13 @@ package com.cloud.api.commands; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseAsyncCmd; -import com.cloud.api.BaseCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseAsyncCmd; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.api.response.SuccessResponse; import com.cloud.async.AsyncJob; import com.cloud.event.EventTypes; diff --git a/api/src/com/cloud/api/commands/DeleteLBStickinessPolicyCmd.java b/api/src/com/cloud/api/commands/DeleteLBStickinessPolicyCmd.java index 55195f7180e..b889baebad5 100644 --- a/api/src/com/cloud/api/commands/DeleteLBStickinessPolicyCmd.java +++ b/api/src/com/cloud/api/commands/DeleteLBStickinessPolicyCmd.java @@ -18,13 +18,13 @@ package com.cloud.api.commands; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseAsyncCmd; -import com.cloud.api.BaseCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseAsyncCmd; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.api.response.SuccessResponse; import com.cloud.event.EventTypes; import com.cloud.exception.InvalidParameterValueException; diff --git a/api/src/com/cloud/api/commands/DeleteLoadBalancerRuleCmd.java b/api/src/com/cloud/api/commands/DeleteLoadBalancerRuleCmd.java index 72330c20912..c2d77f7ca74 100644 --- a/api/src/com/cloud/api/commands/DeleteLoadBalancerRuleCmd.java +++ b/api/src/com/cloud/api/commands/DeleteLoadBalancerRuleCmd.java @@ -18,13 +18,13 @@ package com.cloud.api.commands; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseAsyncCmd; -import com.cloud.api.BaseCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseAsyncCmd; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.api.response.SuccessResponse; import com.cloud.async.AsyncJob; import com.cloud.event.EventTypes; diff --git a/api/src/com/cloud/api/commands/DeleteNetworkACLCmd.java b/api/src/com/cloud/api/commands/DeleteNetworkACLCmd.java index 0499f531c11..e5826766d57 100644 --- a/api/src/com/cloud/api/commands/DeleteNetworkACLCmd.java +++ b/api/src/com/cloud/api/commands/DeleteNetworkACLCmd.java @@ -18,13 +18,13 @@ package com.cloud.api.commands; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseAsyncCmd; -import com.cloud.api.BaseCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseAsyncCmd; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.api.response.SuccessResponse; import com.cloud.async.AsyncJob; import com.cloud.event.EventTypes; diff --git a/api/src/com/cloud/api/commands/DeleteNetworkCmd.java b/api/src/com/cloud/api/commands/DeleteNetworkCmd.java index 5e1350ff15b..4e4da1e9272 100644 --- a/api/src/com/cloud/api/commands/DeleteNetworkCmd.java +++ b/api/src/com/cloud/api/commands/DeleteNetworkCmd.java @@ -18,13 +18,13 @@ package com.cloud.api.commands; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseAsyncCmd; -import com.cloud.api.BaseCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseAsyncCmd; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.api.response.SuccessResponse; import com.cloud.event.EventTypes; import com.cloud.exception.InvalidParameterValueException; diff --git a/api/src/com/cloud/api/commands/DeleteNetworkOfferingCmd.java b/api/src/com/cloud/api/commands/DeleteNetworkOfferingCmd.java index 9d60e34e201..897ade0865f 100644 --- a/api/src/com/cloud/api/commands/DeleteNetworkOfferingCmd.java +++ b/api/src/com/cloud/api/commands/DeleteNetworkOfferingCmd.java @@ -18,12 +18,12 @@ package com.cloud.api.commands; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.api.response.SuccessResponse; import com.cloud.user.Account; diff --git a/api/src/com/cloud/api/commands/DeleteNetworkServiceProviderCmd.java b/api/src/com/cloud/api/commands/DeleteNetworkServiceProviderCmd.java index 815657bd9dc..ecbf0c26a90 100644 --- a/api/src/com/cloud/api/commands/DeleteNetworkServiceProviderCmd.java +++ b/api/src/com/cloud/api/commands/DeleteNetworkServiceProviderCmd.java @@ -18,13 +18,13 @@ package com.cloud.api.commands; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseAsyncCmd; -import com.cloud.api.BaseCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseAsyncCmd; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.api.response.SuccessResponse; import com.cloud.async.AsyncJob; import com.cloud.event.EventTypes; diff --git a/api/src/com/cloud/api/commands/DeletePhysicalNetworkCmd.java b/api/src/com/cloud/api/commands/DeletePhysicalNetworkCmd.java index c2814386a36..2f0f5a8b097 100644 --- a/api/src/com/cloud/api/commands/DeletePhysicalNetworkCmd.java +++ b/api/src/com/cloud/api/commands/DeletePhysicalNetworkCmd.java @@ -18,13 +18,13 @@ package com.cloud.api.commands; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseAsyncCmd; -import com.cloud.api.BaseCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseAsyncCmd; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.api.response.SuccessResponse; import com.cloud.async.AsyncJob; import com.cloud.event.EventTypes; diff --git a/api/src/com/cloud/api/commands/DeletePodCmd.java b/api/src/com/cloud/api/commands/DeletePodCmd.java index ed951242ab3..3be838ba37c 100644 --- a/api/src/com/cloud/api/commands/DeletePodCmd.java +++ b/api/src/com/cloud/api/commands/DeletePodCmd.java @@ -18,12 +18,12 @@ package com.cloud.api.commands; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.api.response.SuccessResponse; import com.cloud.user.Account; diff --git a/api/src/com/cloud/api/commands/DeletePoolCmd.java b/api/src/com/cloud/api/commands/DeletePoolCmd.java index ba2f73fdb24..687bb563630 100644 --- a/api/src/com/cloud/api/commands/DeletePoolCmd.java +++ b/api/src/com/cloud/api/commands/DeletePoolCmd.java @@ -18,12 +18,12 @@ package com.cloud.api.commands; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.api.response.SuccessResponse; import com.cloud.storage.StoragePool; import com.cloud.storage.StoragePoolStatus; diff --git a/api/src/com/cloud/api/commands/DeletePortForwardingRuleCmd.java b/api/src/com/cloud/api/commands/DeletePortForwardingRuleCmd.java index ed2c32a279f..19112a7cd48 100644 --- a/api/src/com/cloud/api/commands/DeletePortForwardingRuleCmd.java +++ b/api/src/com/cloud/api/commands/DeletePortForwardingRuleCmd.java @@ -18,13 +18,13 @@ package com.cloud.api.commands; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseAsyncCmd; -import com.cloud.api.BaseCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseAsyncCmd; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.api.response.SuccessResponse; import com.cloud.async.AsyncJob; import com.cloud.event.EventTypes; diff --git a/api/src/com/cloud/api/commands/DeletePrivateGatewayCmd.java b/api/src/com/cloud/api/commands/DeletePrivateGatewayCmd.java index 2767efdae65..005b47165c1 100644 --- a/api/src/com/cloud/api/commands/DeletePrivateGatewayCmd.java +++ b/api/src/com/cloud/api/commands/DeletePrivateGatewayCmd.java @@ -18,13 +18,13 @@ package com.cloud.api.commands; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseAsyncCmd; -import com.cloud.api.BaseCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseAsyncCmd; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.api.response.SuccessResponse; import com.cloud.async.AsyncJob; import com.cloud.event.EventTypes; diff --git a/api/src/com/cloud/api/commands/DeleteProjectCmd.java b/api/src/com/cloud/api/commands/DeleteProjectCmd.java index fb1b508826a..b9e7685107d 100644 --- a/api/src/com/cloud/api/commands/DeleteProjectCmd.java +++ b/api/src/com/cloud/api/commands/DeleteProjectCmd.java @@ -18,13 +18,13 @@ package com.cloud.api.commands; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseAsyncCmd; -import com.cloud.api.BaseCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseAsyncCmd; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.api.response.SuccessResponse; import com.cloud.event.EventTypes; import com.cloud.exception.InvalidParameterValueException; diff --git a/api/src/com/cloud/api/commands/DeleteProjectInvitationCmd.java b/api/src/com/cloud/api/commands/DeleteProjectInvitationCmd.java index a13bbda8cf0..620d22f5b93 100644 --- a/api/src/com/cloud/api/commands/DeleteProjectInvitationCmd.java +++ b/api/src/com/cloud/api/commands/DeleteProjectInvitationCmd.java @@ -18,13 +18,13 @@ package com.cloud.api.commands; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseAsyncCmd; -import com.cloud.api.BaseCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseAsyncCmd; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.api.response.SuccessResponse; import com.cloud.event.EventTypes; import com.cloud.user.Account; diff --git a/api/src/com/cloud/api/commands/DeleteSSHKeyPairCmd.java b/api/src/com/cloud/api/commands/DeleteSSHKeyPairCmd.java index d4f6b472f6d..029915c4a91 100644 --- a/api/src/com/cloud/api/commands/DeleteSSHKeyPairCmd.java +++ b/api/src/com/cloud/api/commands/DeleteSSHKeyPairCmd.java @@ -18,11 +18,11 @@ package com.cloud.api.commands; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; import com.cloud.api.response.SuccessResponse; import com.cloud.user.Account; import com.cloud.user.UserContext; diff --git a/api/src/com/cloud/api/commands/DeleteSecurityGroupCmd.java b/api/src/com/cloud/api/commands/DeleteSecurityGroupCmd.java index 924e8a83d0f..20863695101 100644 --- a/api/src/com/cloud/api/commands/DeleteSecurityGroupCmd.java +++ b/api/src/com/cloud/api/commands/DeleteSecurityGroupCmd.java @@ -18,12 +18,12 @@ package com.cloud.api.commands; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.api.response.SuccessResponse; import com.cloud.exception.InvalidParameterValueException; import com.cloud.exception.ResourceInUseException; diff --git a/api/src/com/cloud/api/commands/DeleteServiceOfferingCmd.java b/api/src/com/cloud/api/commands/DeleteServiceOfferingCmd.java index b76ad0cc5ea..1e3ef863349 100644 --- a/api/src/com/cloud/api/commands/DeleteServiceOfferingCmd.java +++ b/api/src/com/cloud/api/commands/DeleteServiceOfferingCmd.java @@ -18,12 +18,12 @@ package com.cloud.api.commands; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.api.response.SuccessResponse; import com.cloud.user.Account; diff --git a/api/src/com/cloud/api/commands/DeleteSnapshotCmd.java b/api/src/com/cloud/api/commands/DeleteSnapshotCmd.java index 97c25a50df0..33d76f83e46 100644 --- a/api/src/com/cloud/api/commands/DeleteSnapshotCmd.java +++ b/api/src/com/cloud/api/commands/DeleteSnapshotCmd.java @@ -18,13 +18,13 @@ package com.cloud.api.commands; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseAsyncCmd; -import com.cloud.api.BaseCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseAsyncCmd; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.api.response.SuccessResponse; import com.cloud.async.AsyncJob; import com.cloud.event.EventTypes; diff --git a/api/src/com/cloud/api/commands/DeleteSnapshotPoliciesCmd.java b/api/src/com/cloud/api/commands/DeleteSnapshotPoliciesCmd.java index ebd4d40d401..5ff9d4d049c 100755 --- a/api/src/com/cloud/api/commands/DeleteSnapshotPoliciesCmd.java +++ b/api/src/com/cloud/api/commands/DeleteSnapshotPoliciesCmd.java @@ -20,12 +20,12 @@ import java.util.List; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.api.response.SuccessResponse; import com.cloud.user.Account; diff --git a/api/src/com/cloud/api/commands/DeleteStaticRouteCmd.java b/api/src/com/cloud/api/commands/DeleteStaticRouteCmd.java index fa3c04dd257..e2f2c523b9f 100644 --- a/api/src/com/cloud/api/commands/DeleteStaticRouteCmd.java +++ b/api/src/com/cloud/api/commands/DeleteStaticRouteCmd.java @@ -18,13 +18,13 @@ package com.cloud.api.commands; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseAsyncCmd; -import com.cloud.api.BaseCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseAsyncCmd; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.api.response.SuccessResponse; import com.cloud.async.AsyncJob; import com.cloud.event.EventTypes; diff --git a/api/src/com/cloud/api/commands/DeleteStorageNetworkIpRangeCmd.java b/api/src/com/cloud/api/commands/DeleteStorageNetworkIpRangeCmd.java index 6067bf8693b..9ad8a13d7b4 100755 --- a/api/src/com/cloud/api/commands/DeleteStorageNetworkIpRangeCmd.java +++ b/api/src/com/cloud/api/commands/DeleteStorageNetworkIpRangeCmd.java @@ -18,13 +18,13 @@ package com.cloud.api.commands; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseAsyncCmd; -import com.cloud.api.BaseCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseAsyncCmd; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.api.response.SuccessResponse; import com.cloud.event.EventTypes; import com.cloud.exception.ConcurrentOperationException; diff --git a/api/src/com/cloud/api/commands/DeleteTagsCmd.java b/api/src/com/cloud/api/commands/DeleteTagsCmd.java index 03f734523e2..25f62945212 100644 --- a/api/src/com/cloud/api/commands/DeleteTagsCmd.java +++ b/api/src/com/cloud/api/commands/DeleteTagsCmd.java @@ -25,12 +25,12 @@ import java.util.Map; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseAsyncCmd; -import com.cloud.api.BaseCmd; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseAsyncCmd; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.api.response.SuccessResponse; import com.cloud.event.EventTypes; import com.cloud.server.ResourceTag.TaggedResourceType; diff --git a/api/src/com/cloud/api/commands/DeleteTemplateCmd.java b/api/src/com/cloud/api/commands/DeleteTemplateCmd.java index bdbb95ba7e7..49881e20835 100755 --- a/api/src/com/cloud/api/commands/DeleteTemplateCmd.java +++ b/api/src/com/cloud/api/commands/DeleteTemplateCmd.java @@ -18,13 +18,13 @@ package com.cloud.api.commands; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseAsyncCmd; -import com.cloud.api.BaseCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseAsyncCmd; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.api.response.SuccessResponse; import com.cloud.async.AsyncJob; import com.cloud.event.EventTypes; diff --git a/api/src/com/cloud/api/commands/DeleteTrafficTypeCmd.java b/api/src/com/cloud/api/commands/DeleteTrafficTypeCmd.java index 35089d37f3d..b1fbca5d9e6 100644 --- a/api/src/com/cloud/api/commands/DeleteTrafficTypeCmd.java +++ b/api/src/com/cloud/api/commands/DeleteTrafficTypeCmd.java @@ -18,13 +18,13 @@ package com.cloud.api.commands; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseAsyncCmd; -import com.cloud.api.BaseCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseAsyncCmd; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.api.response.SuccessResponse; import com.cloud.async.AsyncJob; import com.cloud.event.EventTypes; diff --git a/api/src/com/cloud/api/commands/DeleteUserCmd.java b/api/src/com/cloud/api/commands/DeleteUserCmd.java index e43649591fc..2b6e3c97b30 100644 --- a/api/src/com/cloud/api/commands/DeleteUserCmd.java +++ b/api/src/com/cloud/api/commands/DeleteUserCmd.java @@ -18,12 +18,12 @@ package com.cloud.api.commands; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.api.response.SuccessResponse; import com.cloud.api.response.UserResponse; import com.cloud.user.Account; diff --git a/api/src/com/cloud/api/commands/DeleteVMGroupCmd.java b/api/src/com/cloud/api/commands/DeleteVMGroupCmd.java index 18983fb20fa..c41a78d7568 100644 --- a/api/src/com/cloud/api/commands/DeleteVMGroupCmd.java +++ b/api/src/com/cloud/api/commands/DeleteVMGroupCmd.java @@ -18,12 +18,12 @@ package com.cloud.api.commands; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.api.response.SuccessResponse; import com.cloud.user.Account; import com.cloud.vm.InstanceGroup; diff --git a/api/src/com/cloud/api/commands/DeleteVPCCmd.java b/api/src/com/cloud/api/commands/DeleteVPCCmd.java index 21b84020b99..d12c9fa4696 100644 --- a/api/src/com/cloud/api/commands/DeleteVPCCmd.java +++ b/api/src/com/cloud/api/commands/DeleteVPCCmd.java @@ -18,13 +18,13 @@ package com.cloud.api.commands; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseAsyncCmd; -import com.cloud.api.BaseCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseAsyncCmd; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.api.response.SuccessResponse; import com.cloud.event.EventTypes; import com.cloud.exception.ConcurrentOperationException; diff --git a/api/src/com/cloud/api/commands/DeleteVPCOfferingCmd.java b/api/src/com/cloud/api/commands/DeleteVPCOfferingCmd.java index 88d40e58b4c..3e4806b23f2 100644 --- a/api/src/com/cloud/api/commands/DeleteVPCOfferingCmd.java +++ b/api/src/com/cloud/api/commands/DeleteVPCOfferingCmd.java @@ -18,13 +18,13 @@ package com.cloud.api.commands; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseAsyncCmd; -import com.cloud.api.BaseCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseAsyncCmd; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.api.response.SuccessResponse; import com.cloud.event.EventTypes; import com.cloud.user.Account; diff --git a/api/src/com/cloud/api/commands/DeleteVlanIpRangeCmd.java b/api/src/com/cloud/api/commands/DeleteVlanIpRangeCmd.java index f44c92ee3f9..be4498cdb13 100644 --- a/api/src/com/cloud/api/commands/DeleteVlanIpRangeCmd.java +++ b/api/src/com/cloud/api/commands/DeleteVlanIpRangeCmd.java @@ -18,12 +18,12 @@ package com.cloud.api.commands; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.api.response.SuccessResponse; import com.cloud.user.Account; diff --git a/api/src/com/cloud/api/commands/DeleteVolumeCmd.java b/api/src/com/cloud/api/commands/DeleteVolumeCmd.java index 6364e0bdf55..495fb2ec092 100644 --- a/api/src/com/cloud/api/commands/DeleteVolumeCmd.java +++ b/api/src/com/cloud/api/commands/DeleteVolumeCmd.java @@ -18,12 +18,12 @@ package com.cloud.api.commands; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.api.response.SuccessResponse; import com.cloud.exception.ConcurrentOperationException; import com.cloud.storage.Volume; diff --git a/api/src/com/cloud/api/commands/DeleteZoneCmd.java b/api/src/com/cloud/api/commands/DeleteZoneCmd.java index c695d8fdf83..fa76367cd9c 100644 --- a/api/src/com/cloud/api/commands/DeleteZoneCmd.java +++ b/api/src/com/cloud/api/commands/DeleteZoneCmd.java @@ -18,12 +18,12 @@ package com.cloud.api.commands; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.api.response.SuccessResponse; import com.cloud.user.Account; import com.cloud.user.UserContext; diff --git a/api/src/com/cloud/api/commands/DestroyConsoleProxyCmd.java b/api/src/com/cloud/api/commands/DestroyConsoleProxyCmd.java index 3ae61c1118b..c9a1043a98a 100644 --- a/api/src/com/cloud/api/commands/DestroyConsoleProxyCmd.java +++ b/api/src/com/cloud/api/commands/DestroyConsoleProxyCmd.java @@ -18,12 +18,12 @@ package com.cloud.api.commands; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseAsyncCmd; -import com.cloud.api.BaseCmd; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseAsyncCmd; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.api.response.SuccessResponse; import com.cloud.event.EventTypes; import com.cloud.user.Account; diff --git a/api/src/com/cloud/api/commands/DestroyRouterCmd.java b/api/src/com/cloud/api/commands/DestroyRouterCmd.java index f5286d6a6ad..7c52479baf0 100644 --- a/api/src/com/cloud/api/commands/DestroyRouterCmd.java +++ b/api/src/com/cloud/api/commands/DestroyRouterCmd.java @@ -18,13 +18,13 @@ package com.cloud.api.commands; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseAsyncCmd; -import com.cloud.api.BaseCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseAsyncCmd; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.api.response.DomainRouterResponse; import com.cloud.async.AsyncJob; import com.cloud.event.EventTypes; diff --git a/api/src/com/cloud/api/commands/DestroySystemVmCmd.java b/api/src/com/cloud/api/commands/DestroySystemVmCmd.java index 44626e1ad46..3b0232e0a5c 100644 --- a/api/src/com/cloud/api/commands/DestroySystemVmCmd.java +++ b/api/src/com/cloud/api/commands/DestroySystemVmCmd.java @@ -18,13 +18,13 @@ package com.cloud.api.commands; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseAsyncCmd; -import com.cloud.api.BaseCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseAsyncCmd; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.api.response.SystemVmResponse; import com.cloud.async.AsyncJob; import com.cloud.event.EventTypes; diff --git a/api/src/com/cloud/api/commands/DetachIsoCmd.java b/api/src/com/cloud/api/commands/DetachIsoCmd.java index af318d7537c..4bdc9ddce4d 100755 --- a/api/src/com/cloud/api/commands/DetachIsoCmd.java +++ b/api/src/com/cloud/api/commands/DetachIsoCmd.java @@ -16,15 +16,16 @@ // under the License. package com.cloud.api.commands; +import org.apache.cloudstack.api.user.vm.command.DeployVMCmd; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseAsyncCmd; -import com.cloud.api.BaseCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseAsyncCmd; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.api.response.UserVmResponse; import com.cloud.event.EventTypes; import com.cloud.exception.InvalidParameterValueException; @@ -87,7 +88,7 @@ public class DetachIsoCmd extends BaseAsyncCmd { if (result) { UserVm userVm = _entityMgr.findById(UserVm.class, virtualMachineId); UserVmResponse response = _responseGenerator.createUserVmResponse("virtualmachine", userVm).get(0); - response.setResponseName(DeployVMCmd.getResultObjectName()); + response.setResponseName(DeployVMCmd.getResultObjectName()); this.setResponseObject(response); } else { throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to detach iso"); diff --git a/api/src/com/cloud/api/commands/DetachVolumeCmd.java b/api/src/com/cloud/api/commands/DetachVolumeCmd.java index 3a3557da8e9..d086159bd0c 100755 --- a/api/src/com/cloud/api/commands/DetachVolumeCmd.java +++ b/api/src/com/cloud/api/commands/DetachVolumeCmd.java @@ -18,13 +18,13 @@ package com.cloud.api.commands; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseAsyncCmd; -import com.cloud.api.BaseCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseAsyncCmd; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.api.response.VolumeResponse; import com.cloud.async.AsyncJob; import com.cloud.event.EventTypes; diff --git a/api/src/com/cloud/api/commands/DisableAccountCmd.java b/api/src/com/cloud/api/commands/DisableAccountCmd.java index 7c5e5e38331..539eaa56bc8 100644 --- a/api/src/com/cloud/api/commands/DisableAccountCmd.java +++ b/api/src/com/cloud/api/commands/DisableAccountCmd.java @@ -18,13 +18,13 @@ package com.cloud.api.commands; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseAsyncCmd; -import com.cloud.api.BaseCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseAsyncCmd; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.api.response.AccountResponse; import com.cloud.async.AsyncJob; import com.cloud.event.EventTypes; diff --git a/api/src/com/cloud/api/commands/DisableAutoScaleVmGroupCmd.java b/api/src/com/cloud/api/commands/DisableAutoScaleVmGroupCmd.java index bd37d0a2479..3ca52ed23fd 100644 --- a/api/src/com/cloud/api/commands/DisableAutoScaleVmGroupCmd.java +++ b/api/src/com/cloud/api/commands/DisableAutoScaleVmGroupCmd.java @@ -19,13 +19,13 @@ package com.cloud.api.commands; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseAsyncCmd; -import com.cloud.api.BaseCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseAsyncCmd; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.api.response.AutoScaleVmGroupResponse; import com.cloud.async.AsyncJob; import com.cloud.event.EventTypes; diff --git a/api/src/com/cloud/api/commands/DisableStaticNatCmd.java b/api/src/com/cloud/api/commands/DisableStaticNatCmd.java index 5983264d4c3..d594991ed25 100644 --- a/api/src/com/cloud/api/commands/DisableStaticNatCmd.java +++ b/api/src/com/cloud/api/commands/DisableStaticNatCmd.java @@ -18,13 +18,13 @@ package com.cloud.api.commands; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseAsyncCmd; -import com.cloud.api.BaseCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseAsyncCmd; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.api.response.SuccessResponse; import com.cloud.event.EventTypes; import com.cloud.exception.InsufficientAddressCapacityException; diff --git a/api/src/com/cloud/api/commands/DisableUserCmd.java b/api/src/com/cloud/api/commands/DisableUserCmd.java index 407042dfc40..9a5b6149a32 100644 --- a/api/src/com/cloud/api/commands/DisableUserCmd.java +++ b/api/src/com/cloud/api/commands/DisableUserCmd.java @@ -18,13 +18,13 @@ package com.cloud.api.commands; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseAsyncCmd; -import com.cloud.api.BaseCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseAsyncCmd; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.api.response.UserResponse; import com.cloud.async.AsyncJob; import com.cloud.event.EventTypes; diff --git a/api/src/com/cloud/api/commands/DisassociateIPAddrCmd.java b/api/src/com/cloud/api/commands/DisassociateIPAddrCmd.java index 2f2addb3f9b..9ba3cd13308 100644 --- a/api/src/com/cloud/api/commands/DisassociateIPAddrCmd.java +++ b/api/src/com/cloud/api/commands/DisassociateIPAddrCmd.java @@ -18,13 +18,13 @@ package com.cloud.api.commands; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseAsyncCmd; -import com.cloud.api.BaseCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseAsyncCmd; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.api.response.SuccessResponse; import com.cloud.async.AsyncJob; import com.cloud.event.EventTypes; diff --git a/api/src/com/cloud/api/commands/EnableAccountCmd.java b/api/src/com/cloud/api/commands/EnableAccountCmd.java index 576f9354892..d476ed65b5c 100644 --- a/api/src/com/cloud/api/commands/EnableAccountCmd.java +++ b/api/src/com/cloud/api/commands/EnableAccountCmd.java @@ -18,12 +18,12 @@ package com.cloud.api.commands; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.api.response.AccountResponse; import com.cloud.user.Account; diff --git a/api/src/com/cloud/api/commands/EnableAutoScaleVmGroupCmd.java b/api/src/com/cloud/api/commands/EnableAutoScaleVmGroupCmd.java index dee1d27e29c..329998ac074 100644 --- a/api/src/com/cloud/api/commands/EnableAutoScaleVmGroupCmd.java +++ b/api/src/com/cloud/api/commands/EnableAutoScaleVmGroupCmd.java @@ -19,13 +19,13 @@ package com.cloud.api.commands; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseAsyncCmd; -import com.cloud.api.BaseCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseAsyncCmd; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.api.response.AutoScaleVmGroupResponse; import com.cloud.async.AsyncJob; import com.cloud.event.EventTypes; diff --git a/api/src/com/cloud/api/commands/EnableStaticNatCmd.java b/api/src/com/cloud/api/commands/EnableStaticNatCmd.java index 9e21b8378ff..f211366f28e 100644 --- a/api/src/com/cloud/api/commands/EnableStaticNatCmd.java +++ b/api/src/com/cloud/api/commands/EnableStaticNatCmd.java @@ -18,12 +18,12 @@ package com.cloud.api.commands; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.api.response.SuccessResponse; import com.cloud.exception.InvalidParameterValueException; import com.cloud.exception.NetworkRuleConflictException; diff --git a/api/src/com/cloud/api/commands/EnableUserCmd.java b/api/src/com/cloud/api/commands/EnableUserCmd.java index 914d59bb4ea..90843e26966 100644 --- a/api/src/com/cloud/api/commands/EnableUserCmd.java +++ b/api/src/com/cloud/api/commands/EnableUserCmd.java @@ -18,12 +18,12 @@ package com.cloud.api.commands; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.api.response.UserResponse; import com.cloud.user.Account; import com.cloud.user.User; diff --git a/api/src/com/cloud/api/commands/ExtractIsoCmd.java b/api/src/com/cloud/api/commands/ExtractIsoCmd.java index a9fb606bb08..cb180f2424a 100755 --- a/api/src/com/cloud/api/commands/ExtractIsoCmd.java +++ b/api/src/com/cloud/api/commands/ExtractIsoCmd.java @@ -18,13 +18,13 @@ package com.cloud.api.commands; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseAsyncCmd; -import com.cloud.api.BaseCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseAsyncCmd; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.api.response.ExtractResponse; import com.cloud.async.AsyncJob; import com.cloud.event.EventTypes; diff --git a/api/src/com/cloud/api/commands/ExtractTemplateCmd.java b/api/src/com/cloud/api/commands/ExtractTemplateCmd.java index 975897e3789..c2e22d0737d 100755 --- a/api/src/com/cloud/api/commands/ExtractTemplateCmd.java +++ b/api/src/com/cloud/api/commands/ExtractTemplateCmd.java @@ -18,13 +18,13 @@ package com.cloud.api.commands; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseAsyncCmd; -import com.cloud.api.BaseCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseAsyncCmd; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.api.response.ExtractResponse; import com.cloud.async.AsyncJob; import com.cloud.event.EventTypes; diff --git a/api/src/com/cloud/api/commands/ExtractVolumeCmd.java b/api/src/com/cloud/api/commands/ExtractVolumeCmd.java index 2a9dbff9e70..2b82b060f29 100755 --- a/api/src/com/cloud/api/commands/ExtractVolumeCmd.java +++ b/api/src/com/cloud/api/commands/ExtractVolumeCmd.java @@ -20,13 +20,13 @@ import java.net.URISyntaxException; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseAsyncCmd; -import com.cloud.api.BaseCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseAsyncCmd; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.api.response.ExtractResponse; import com.cloud.async.AsyncJob; import com.cloud.dc.DataCenter; diff --git a/api/src/com/cloud/api/commands/GetCloudIdentifierCmd.java b/api/src/com/cloud/api/commands/GetCloudIdentifierCmd.java index e1f7cd3e217..e934ddfdc4f 100644 --- a/api/src/com/cloud/api/commands/GetCloudIdentifierCmd.java +++ b/api/src/com/cloud/api/commands/GetCloudIdentifierCmd.java @@ -20,12 +20,12 @@ import java.util.ArrayList; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.api.response.CloudIdentifierResponse; import com.cloud.user.Account; diff --git a/api/src/com/cloud/api/commands/GetUserCmd.java b/api/src/com/cloud/api/commands/GetUserCmd.java index 465e440a0f3..8f5d6b4dd27 100644 --- a/api/src/com/cloud/api/commands/GetUserCmd.java +++ b/api/src/com/cloud/api/commands/GetUserCmd.java @@ -18,10 +18,10 @@ package com.cloud.api.commands; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseCmd; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; import com.cloud.api.response.UserResponse; import com.cloud.exception.InvalidParameterValueException; import com.cloud.user.UserAccount; diff --git a/api/src/com/cloud/api/commands/LDAPConfigCmd.java b/api/src/com/cloud/api/commands/LDAPConfigCmd.java index d7ff5b5a8de..b0a9e5bdf4c 100644 --- a/api/src/com/cloud/api/commands/LDAPConfigCmd.java +++ b/api/src/com/cloud/api/commands/LDAPConfigCmd.java @@ -21,11 +21,11 @@ import javax.naming.NamingException; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseCmd; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.api.response.LDAPConfigResponse; import com.cloud.exception.ConcurrentOperationException; import com.cloud.exception.InsufficientCapacityException; diff --git a/api/src/com/cloud/api/commands/LDAPRemoveCmd.java b/api/src/com/cloud/api/commands/LDAPRemoveCmd.java index 4858e67bd47..9d5a5d8cfb0 100644 --- a/api/src/com/cloud/api/commands/LDAPRemoveCmd.java +++ b/api/src/com/cloud/api/commands/LDAPRemoveCmd.java @@ -19,8 +19,8 @@ package com.cloud.api.commands; import org.apache.log4j.Logger; -import com.cloud.api.BaseCmd; -import com.cloud.api.Implementation; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.Implementation; import com.cloud.api.response.LDAPConfigResponse; import com.cloud.api.response.LDAPRemoveResponse; import com.cloud.user.Account; diff --git a/api/src/com/cloud/api/commands/ListAccountsCmd.java b/api/src/com/cloud/api/commands/ListAccountsCmd.java index 6e0a524cc93..cf4bcd04441 100755 --- a/api/src/com/cloud/api/commands/ListAccountsCmd.java +++ b/api/src/com/cloud/api/commands/ListAccountsCmd.java @@ -21,11 +21,11 @@ import java.util.List; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseListDomainResourcesCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseListDomainResourcesCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; import com.cloud.api.response.AccountResponse; import com.cloud.api.response.ListResponse; import com.cloud.user.Account; diff --git a/api/src/com/cloud/api/commands/ListAlertsCmd.java b/api/src/com/cloud/api/commands/ListAlertsCmd.java index 1f6c7b3e413..00ee59f3826 100644 --- a/api/src/com/cloud/api/commands/ListAlertsCmd.java +++ b/api/src/com/cloud/api/commands/ListAlertsCmd.java @@ -22,11 +22,11 @@ import java.util.List; import org.apache.log4j.Logger; import com.cloud.alert.Alert; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseListCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseListCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; import com.cloud.api.response.AlertResponse; import com.cloud.api.response.ListResponse; import com.cloud.utils.Pair; diff --git a/api/src/com/cloud/api/commands/ListAsyncJobsCmd.java b/api/src/com/cloud/api/commands/ListAsyncJobsCmd.java index e0520cd63a9..734b578a6e7 100644 --- a/api/src/com/cloud/api/commands/ListAsyncJobsCmd.java +++ b/api/src/com/cloud/api/commands/ListAsyncJobsCmd.java @@ -20,10 +20,10 @@ import java.util.ArrayList; import java.util.Date; import java.util.List; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseListAccountResourcesCmd; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseListAccountResourcesCmd; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; import com.cloud.api.response.AsyncJobResponse; import com.cloud.api.response.ListResponse; import com.cloud.async.AsyncJob; diff --git a/api/src/com/cloud/api/commands/ListAutoScalePoliciesCmd.java b/api/src/com/cloud/api/commands/ListAutoScalePoliciesCmd.java index edab908977f..06424d07799 100644 --- a/api/src/com/cloud/api/commands/ListAutoScalePoliciesCmd.java +++ b/api/src/com/cloud/api/commands/ListAutoScalePoliciesCmd.java @@ -1,19 +1,19 @@ -// 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. +// 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.commands; import java.util.ArrayList; @@ -21,11 +21,11 @@ import java.util.List; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseListAccountResourcesCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseListAccountResourcesCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; import com.cloud.api.response.AutoScalePolicyResponse; import com.cloud.api.response.ListResponse; import com.cloud.network.as.AutoScalePolicy; diff --git a/api/src/com/cloud/api/commands/ListAutoScaleVmGroupsCmd.java b/api/src/com/cloud/api/commands/ListAutoScaleVmGroupsCmd.java index 0d1b2e00b11..6cb3d567ea4 100644 --- a/api/src/com/cloud/api/commands/ListAutoScaleVmGroupsCmd.java +++ b/api/src/com/cloud/api/commands/ListAutoScaleVmGroupsCmd.java @@ -1,19 +1,19 @@ -// 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. +// 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.commands; import java.util.ArrayList; @@ -21,11 +21,11 @@ import java.util.List; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseListProjectAndAccountResourcesCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; +import org.apache.cloudstack.api.ApiConstants; +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 com.cloud.api.response.AutoScaleVmGroupResponse; import com.cloud.api.response.ListResponse; import com.cloud.exception.InvalidParameterValueException; diff --git a/api/src/com/cloud/api/commands/ListAutoScaleVmProfilesCmd.java b/api/src/com/cloud/api/commands/ListAutoScaleVmProfilesCmd.java index 80348006b85..987c18c8bc4 100644 --- a/api/src/com/cloud/api/commands/ListAutoScaleVmProfilesCmd.java +++ b/api/src/com/cloud/api/commands/ListAutoScaleVmProfilesCmd.java @@ -1,19 +1,19 @@ -// 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. +// 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.commands; import java.util.ArrayList; @@ -21,11 +21,11 @@ import java.util.List; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseListProjectAndAccountResourcesCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; +import org.apache.cloudstack.api.ApiConstants; +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 com.cloud.api.response.AutoScaleVmProfileResponse; import com.cloud.api.response.ListResponse; import com.cloud.network.as.AutoScaleVmProfile; diff --git a/api/src/com/cloud/api/commands/ListCapabilitiesCmd.java b/api/src/com/cloud/api/commands/ListCapabilitiesCmd.java index 108b268ae5d..6218323deac 100644 --- a/api/src/com/cloud/api/commands/ListCapabilitiesCmd.java +++ b/api/src/com/cloud/api/commands/ListCapabilitiesCmd.java @@ -20,8 +20,8 @@ import java.util.Map; import org.apache.log4j.Logger; -import com.cloud.api.BaseCmd; -import com.cloud.api.Implementation; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.Implementation; import com.cloud.api.response.CapabilitiesResponse; import com.cloud.user.Account; diff --git a/api/src/com/cloud/api/commands/ListCapacityCmd.java b/api/src/com/cloud/api/commands/ListCapacityCmd.java index 5e3ca5e1511..a7899f6242e 100755 --- a/api/src/com/cloud/api/commands/ListCapacityCmd.java +++ b/api/src/com/cloud/api/commands/ListCapacityCmd.java @@ -21,11 +21,11 @@ import java.util.List; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseListCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseListCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; import com.cloud.api.response.CapacityResponse; import com.cloud.api.response.ListResponse; import com.cloud.capacity.Capacity; diff --git a/api/src/com/cloud/api/commands/ListCfgsByCmd.java b/api/src/com/cloud/api/commands/ListCfgsByCmd.java index 6e07ca9f519..e539338fff3 100644 --- a/api/src/com/cloud/api/commands/ListCfgsByCmd.java +++ b/api/src/com/cloud/api/commands/ListCfgsByCmd.java @@ -21,10 +21,10 @@ import java.util.List; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseListCmd; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseListCmd; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; import com.cloud.api.response.ConfigurationResponse; import com.cloud.api.response.ListResponse; import com.cloud.configuration.Configuration; diff --git a/api/src/com/cloud/api/commands/ListClustersCmd.java b/api/src/com/cloud/api/commands/ListClustersCmd.java index e571bf52e8e..1953325ab02 100755 --- a/api/src/com/cloud/api/commands/ListClustersCmd.java +++ b/api/src/com/cloud/api/commands/ListClustersCmd.java @@ -21,11 +21,11 @@ import java.util.List; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseListCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseListCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; import com.cloud.api.response.ClusterResponse; import com.cloud.api.response.ListResponse; import com.cloud.org.Cluster; diff --git a/api/src/com/cloud/api/commands/ListConditionsCmd.java b/api/src/com/cloud/api/commands/ListConditionsCmd.java index 4d50b8bf368..c99d627ae6a 100644 --- a/api/src/com/cloud/api/commands/ListConditionsCmd.java +++ b/api/src/com/cloud/api/commands/ListConditionsCmd.java @@ -22,11 +22,11 @@ import java.util.List; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseListAccountResourcesCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseListAccountResourcesCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; import com.cloud.api.response.ConditionResponse; import com.cloud.api.response.CounterResponse; import com.cloud.api.response.ListResponse; diff --git a/api/src/com/cloud/api/commands/ListCountersCmd.java b/api/src/com/cloud/api/commands/ListCountersCmd.java index 60108ca22b8..b70a03fc481 100644 --- a/api/src/com/cloud/api/commands/ListCountersCmd.java +++ b/api/src/com/cloud/api/commands/ListCountersCmd.java @@ -22,11 +22,11 @@ import java.util.List; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseListCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseListCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; import com.cloud.api.response.CounterResponse; import com.cloud.api.response.ListResponse; import com.cloud.network.as.Counter; diff --git a/api/src/com/cloud/api/commands/ListDiskOfferingsCmd.java b/api/src/com/cloud/api/commands/ListDiskOfferingsCmd.java index fbf655d7e88..7f30d06b329 100644 --- a/api/src/com/cloud/api/commands/ListDiskOfferingsCmd.java +++ b/api/src/com/cloud/api/commands/ListDiskOfferingsCmd.java @@ -21,11 +21,11 @@ import java.util.List; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseListCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseListCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; import com.cloud.api.response.DiskOfferingResponse; import com.cloud.api.response.ListResponse; import com.cloud.offering.DiskOffering; diff --git a/api/src/com/cloud/api/commands/ListDomainChildrenCmd.java b/api/src/com/cloud/api/commands/ListDomainChildrenCmd.java index bb0dd7f7e83..f014d349a34 100644 --- a/api/src/com/cloud/api/commands/ListDomainChildrenCmd.java +++ b/api/src/com/cloud/api/commands/ListDomainChildrenCmd.java @@ -21,11 +21,11 @@ import java.util.List; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseListCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseListCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; import com.cloud.api.response.DomainResponse; import com.cloud.api.response.ListResponse; import com.cloud.domain.Domain; diff --git a/api/src/com/cloud/api/commands/ListDomainsCmd.java b/api/src/com/cloud/api/commands/ListDomainsCmd.java index 93d1570d6df..492fbdf842c 100644 --- a/api/src/com/cloud/api/commands/ListDomainsCmd.java +++ b/api/src/com/cloud/api/commands/ListDomainsCmd.java @@ -21,11 +21,11 @@ import java.util.List; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseListCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseListCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; import com.cloud.api.response.DomainResponse; import com.cloud.api.response.ListResponse; import com.cloud.domain.Domain; diff --git a/api/src/com/cloud/api/commands/ListEventTypesCmd.java b/api/src/com/cloud/api/commands/ListEventTypesCmd.java index cd1d1291f21..8d6f21f0575 100644 --- a/api/src/com/cloud/api/commands/ListEventTypesCmd.java +++ b/api/src/com/cloud/api/commands/ListEventTypesCmd.java @@ -20,8 +20,8 @@ import java.util.ArrayList; import org.apache.log4j.Logger; -import com.cloud.api.BaseCmd; -import com.cloud.api.Implementation; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.Implementation; import com.cloud.api.response.EventTypeResponse; import com.cloud.api.response.ListResponse; import com.cloud.user.Account; diff --git a/api/src/com/cloud/api/commands/ListEventsCmd.java b/api/src/com/cloud/api/commands/ListEventsCmd.java index 512d377fabd..eca145f9405 100755 --- a/api/src/com/cloud/api/commands/ListEventsCmd.java +++ b/api/src/com/cloud/api/commands/ListEventsCmd.java @@ -22,11 +22,11 @@ import java.util.List; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseListProjectAndAccountResourcesCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; +import org.apache.cloudstack.api.ApiConstants; +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 com.cloud.api.response.EventResponse; import com.cloud.api.response.ListResponse; import com.cloud.event.Event; diff --git a/api/src/com/cloud/api/commands/ListFirewallRulesCmd.java b/api/src/com/cloud/api/commands/ListFirewallRulesCmd.java index c136266b85f..232f5a241c0 100644 --- a/api/src/com/cloud/api/commands/ListFirewallRulesCmd.java +++ b/api/src/com/cloud/api/commands/ListFirewallRulesCmd.java @@ -21,11 +21,11 @@ import java.util.List; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseListTaggedResourcesCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseListTaggedResourcesCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; import com.cloud.api.response.FirewallResponse; import com.cloud.api.response.ListResponse; import com.cloud.network.rules.FirewallRule; diff --git a/api/src/com/cloud/api/commands/ListGuestOsCategoriesCmd.java b/api/src/com/cloud/api/commands/ListGuestOsCategoriesCmd.java index 79ce7097d8a..e0af2f63703 100644 --- a/api/src/com/cloud/api/commands/ListGuestOsCategoriesCmd.java +++ b/api/src/com/cloud/api/commands/ListGuestOsCategoriesCmd.java @@ -21,11 +21,11 @@ import java.util.List; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseListCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseListCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; import com.cloud.api.response.GuestOSCategoryResponse; import com.cloud.api.response.ListResponse; import com.cloud.storage.GuestOsCategory; diff --git a/api/src/com/cloud/api/commands/ListGuestOsCmd.java b/api/src/com/cloud/api/commands/ListGuestOsCmd.java index 61ec453b83c..f64e89a7588 100644 --- a/api/src/com/cloud/api/commands/ListGuestOsCmd.java +++ b/api/src/com/cloud/api/commands/ListGuestOsCmd.java @@ -21,11 +21,11 @@ import java.util.List; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseListCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseListCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; import com.cloud.api.response.GuestOSResponse; import com.cloud.api.response.ListResponse; import com.cloud.storage.GuestOS; diff --git a/api/src/com/cloud/api/commands/ListHostsCmd.java b/api/src/com/cloud/api/commands/ListHostsCmd.java index 87f13302a97..09e7179862f 100755 --- a/api/src/com/cloud/api/commands/ListHostsCmd.java +++ b/api/src/com/cloud/api/commands/ListHostsCmd.java @@ -22,12 +22,12 @@ import java.util.List; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.ApiConstants.HostDetails; -import com.cloud.api.BaseListCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiConstants.HostDetails; +import org.apache.cloudstack.api.BaseListCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; import com.cloud.api.response.HostResponse; import com.cloud.api.response.ListResponse; import com.cloud.async.AsyncJob; diff --git a/api/src/com/cloud/api/commands/ListHypervisorCapabilitiesCmd.java b/api/src/com/cloud/api/commands/ListHypervisorCapabilitiesCmd.java index 9afd3eb2903..29a56a3fa07 100644 --- a/api/src/com/cloud/api/commands/ListHypervisorCapabilitiesCmd.java +++ b/api/src/com/cloud/api/commands/ListHypervisorCapabilitiesCmd.java @@ -21,11 +21,11 @@ import java.util.List; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseListCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseListCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; import com.cloud.api.response.HypervisorCapabilitiesResponse; import com.cloud.api.response.ListResponse; import com.cloud.hypervisor.Hypervisor.HypervisorType; diff --git a/api/src/com/cloud/api/commands/ListHypervisorsCmd.java b/api/src/com/cloud/api/commands/ListHypervisorsCmd.java index e058df68bc2..ec460f377e9 100644 --- a/api/src/com/cloud/api/commands/ListHypervisorsCmd.java +++ b/api/src/com/cloud/api/commands/ListHypervisorsCmd.java @@ -21,11 +21,11 @@ import java.util.List; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; import com.cloud.api.response.HypervisorResponse; import com.cloud.api.response.ListResponse; import com.cloud.user.Account; diff --git a/api/src/com/cloud/api/commands/ListIpForwardingRulesCmd.java b/api/src/com/cloud/api/commands/ListIpForwardingRulesCmd.java index fedbac0d177..a3e1479671d 100644 --- a/api/src/com/cloud/api/commands/ListIpForwardingRulesCmd.java +++ b/api/src/com/cloud/api/commands/ListIpForwardingRulesCmd.java @@ -21,11 +21,11 @@ import java.util.List; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseListProjectAndAccountResourcesCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; +import org.apache.cloudstack.api.ApiConstants; +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 com.cloud.api.response.FirewallRuleResponse; import com.cloud.api.response.IpForwardingRuleResponse; import com.cloud.api.response.ListResponse; diff --git a/api/src/com/cloud/api/commands/ListIsosCmd.java b/api/src/com/cloud/api/commands/ListIsosCmd.java index 752c834f81b..970b6d40f1a 100755 --- a/api/src/com/cloud/api/commands/ListIsosCmd.java +++ b/api/src/com/cloud/api/commands/ListIsosCmd.java @@ -22,11 +22,11 @@ import java.util.Set; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseListTaggedResourcesCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseListTaggedResourcesCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; import com.cloud.api.response.ListResponse; import com.cloud.api.response.TemplateResponse; import com.cloud.async.AsyncJob; diff --git a/api/src/com/cloud/api/commands/ListLBStickinessPoliciesCmd.java b/api/src/com/cloud/api/commands/ListLBStickinessPoliciesCmd.java index 6be47c13221..9f695e67e4c 100644 --- a/api/src/com/cloud/api/commands/ListLBStickinessPoliciesCmd.java +++ b/api/src/com/cloud/api/commands/ListLBStickinessPoliciesCmd.java @@ -21,11 +21,11 @@ import java.util.List; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseListCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseListCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; import com.cloud.api.response.LBStickinessResponse; import com.cloud.api.response.ListResponse; import com.cloud.network.rules.LoadBalancer; diff --git a/api/src/com/cloud/api/commands/ListLoadBalancerRuleInstancesCmd.java b/api/src/com/cloud/api/commands/ListLoadBalancerRuleInstancesCmd.java index d721914f5f9..6e0de6cb3ce 100644 --- a/api/src/com/cloud/api/commands/ListLoadBalancerRuleInstancesCmd.java +++ b/api/src/com/cloud/api/commands/ListLoadBalancerRuleInstancesCmd.java @@ -21,11 +21,11 @@ import java.util.List; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseListCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseListCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; import com.cloud.api.response.ListResponse; import com.cloud.api.response.UserVmResponse; import com.cloud.uservm.UserVm; diff --git a/api/src/com/cloud/api/commands/ListLoadBalancerRulesCmd.java b/api/src/com/cloud/api/commands/ListLoadBalancerRulesCmd.java index 8413f607a6b..63d24de31c0 100644 --- a/api/src/com/cloud/api/commands/ListLoadBalancerRulesCmd.java +++ b/api/src/com/cloud/api/commands/ListLoadBalancerRulesCmd.java @@ -21,11 +21,11 @@ import java.util.List; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseListTaggedResourcesCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseListTaggedResourcesCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; import com.cloud.api.response.ListResponse; import com.cloud.api.response.LoadBalancerResponse; import com.cloud.network.rules.LoadBalancer; diff --git a/api/src/com/cloud/api/commands/ListNetworkACLsCmd.java b/api/src/com/cloud/api/commands/ListNetworkACLsCmd.java index 40267787332..1b2ed14ae5c 100644 --- a/api/src/com/cloud/api/commands/ListNetworkACLsCmd.java +++ b/api/src/com/cloud/api/commands/ListNetworkACLsCmd.java @@ -22,11 +22,11 @@ import java.util.List; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseListTaggedResourcesCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseListTaggedResourcesCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; import com.cloud.api.response.ListResponse; import com.cloud.api.response.NetworkACLResponse; import com.cloud.network.rules.FirewallRule; diff --git a/api/src/com/cloud/api/commands/ListNetworkOfferingsCmd.java b/api/src/com/cloud/api/commands/ListNetworkOfferingsCmd.java index 70dd1be2e74..ee8084712b4 100644 --- a/api/src/com/cloud/api/commands/ListNetworkOfferingsCmd.java +++ b/api/src/com/cloud/api/commands/ListNetworkOfferingsCmd.java @@ -21,11 +21,11 @@ import java.util.List; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseListCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseListCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; import com.cloud.api.response.ListResponse; import com.cloud.api.response.NetworkOfferingResponse; import com.cloud.offering.NetworkOffering; diff --git a/api/src/com/cloud/api/commands/ListNetworkServiceProvidersCmd.java b/api/src/com/cloud/api/commands/ListNetworkServiceProvidersCmd.java index 97bfd77f463..f77e4182cf3 100644 --- a/api/src/com/cloud/api/commands/ListNetworkServiceProvidersCmd.java +++ b/api/src/com/cloud/api/commands/ListNetworkServiceProvidersCmd.java @@ -21,11 +21,11 @@ import java.util.List; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseListCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseListCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; import com.cloud.api.response.ListResponse; import com.cloud.api.response.ProviderResponse; import com.cloud.network.PhysicalNetworkServiceProvider; diff --git a/api/src/com/cloud/api/commands/ListNetworksCmd.java b/api/src/com/cloud/api/commands/ListNetworksCmd.java index 61aff018edf..0a52618ab24 100644 --- a/api/src/com/cloud/api/commands/ListNetworksCmd.java +++ b/api/src/com/cloud/api/commands/ListNetworksCmd.java @@ -21,11 +21,11 @@ import java.util.List; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseListTaggedResourcesCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseListTaggedResourcesCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; import com.cloud.api.response.ListResponse; import com.cloud.api.response.NetworkResponse; import com.cloud.network.Network; diff --git a/api/src/com/cloud/api/commands/ListPhysicalNetworksCmd.java b/api/src/com/cloud/api/commands/ListPhysicalNetworksCmd.java index ed2968fffe9..923b20df317 100644 --- a/api/src/com/cloud/api/commands/ListPhysicalNetworksCmd.java +++ b/api/src/com/cloud/api/commands/ListPhysicalNetworksCmd.java @@ -21,13 +21,13 @@ import java.util.List; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseCmd; -import com.cloud.api.BaseListCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.BaseListCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.api.response.ListResponse; import com.cloud.api.response.PhysicalNetworkResponse; import com.cloud.network.PhysicalNetwork; diff --git a/api/src/com/cloud/api/commands/ListPodsByCmd.java b/api/src/com/cloud/api/commands/ListPodsByCmd.java index 37b8e29d6f6..e071dc7dfd7 100755 --- a/api/src/com/cloud/api/commands/ListPodsByCmd.java +++ b/api/src/com/cloud/api/commands/ListPodsByCmd.java @@ -21,11 +21,11 @@ import java.util.List; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseListCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseListCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; import com.cloud.api.response.ListResponse; import com.cloud.api.response.PodResponse; import com.cloud.dc.Pod; diff --git a/api/src/com/cloud/api/commands/ListPortForwardingRulesCmd.java b/api/src/com/cloud/api/commands/ListPortForwardingRulesCmd.java index 0315a12d1a5..6a44bddc099 100644 --- a/api/src/com/cloud/api/commands/ListPortForwardingRulesCmd.java +++ b/api/src/com/cloud/api/commands/ListPortForwardingRulesCmd.java @@ -21,22 +21,22 @@ import java.util.List; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseListTaggedResourcesCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseListTaggedResourcesCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; import com.cloud.api.response.FirewallRuleResponse; import com.cloud.api.response.ListResponse; import com.cloud.network.rules.PortForwardingRule; import com.cloud.utils.Pair; -@Implementation(description="Lists all port forwarding rules for an IP address.", responseObject=FirewallRuleResponse.class) -public class ListPortForwardingRulesCmd extends BaseListTaggedResourcesCmd { - public static final Logger s_logger = Logger.getLogger(ListPortForwardingRulesCmd.class.getName()); - - private static final String s_name = "listportforwardingrulesresponse"; - +@Implementation(description="Lists all port forwarding rules for an IP address.", responseObject=FirewallRuleResponse.class) +public class ListPortForwardingRulesCmd extends BaseListTaggedResourcesCmd { + public static final Logger s_logger = Logger.getLogger(ListPortForwardingRulesCmd.class.getName()); + + private static final String s_name = "listportforwardingrulesresponse"; + ///////////////////////////////////////////////////// //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// diff --git a/api/src/com/cloud/api/commands/ListPrivateGatewaysCmd.java b/api/src/com/cloud/api/commands/ListPrivateGatewaysCmd.java index 389df5e3880..b6a02f3decf 100644 --- a/api/src/com/cloud/api/commands/ListPrivateGatewaysCmd.java +++ b/api/src/com/cloud/api/commands/ListPrivateGatewaysCmd.java @@ -21,11 +21,11 @@ import java.util.List; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseListProjectAndAccountResourcesCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; +import org.apache.cloudstack.api.ApiConstants; +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 com.cloud.api.response.ListResponse; import com.cloud.api.response.PrivateGatewayResponse; import com.cloud.network.vpc.PrivateGateway; diff --git a/api/src/com/cloud/api/commands/ListProjectAccountsCmd.java b/api/src/com/cloud/api/commands/ListProjectAccountsCmd.java index 088363377c7..0ba1fae697c 100644 --- a/api/src/com/cloud/api/commands/ListProjectAccountsCmd.java +++ b/api/src/com/cloud/api/commands/ListProjectAccountsCmd.java @@ -21,11 +21,11 @@ import java.util.List; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseListCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseListCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; import com.cloud.api.response.ListResponse; import com.cloud.api.response.ProjectAccountResponse; import com.cloud.api.response.ProjectResponse; diff --git a/api/src/com/cloud/api/commands/ListProjectInvitationsCmd.java b/api/src/com/cloud/api/commands/ListProjectInvitationsCmd.java index fe697808b4b..c87ddfa801f 100644 --- a/api/src/com/cloud/api/commands/ListProjectInvitationsCmd.java +++ b/api/src/com/cloud/api/commands/ListProjectInvitationsCmd.java @@ -21,11 +21,11 @@ import java.util.List; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseListAccountResourcesCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseListAccountResourcesCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; import com.cloud.api.response.ListResponse; import com.cloud.api.response.ProjectInvitationResponse; import com.cloud.projects.ProjectInvitation; diff --git a/api/src/com/cloud/api/commands/ListProjectsCmd.java b/api/src/com/cloud/api/commands/ListProjectsCmd.java index b7a04eb4e33..6758c1e30cd 100644 --- a/api/src/com/cloud/api/commands/ListProjectsCmd.java +++ b/api/src/com/cloud/api/commands/ListProjectsCmd.java @@ -25,11 +25,11 @@ import java.util.Map; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseListAccountResourcesCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseListAccountResourcesCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; import com.cloud.api.response.ListResponse; import com.cloud.api.response.ProjectResponse; import com.cloud.exception.InvalidParameterValueException; diff --git a/api/src/com/cloud/api/commands/ListPublicIpAddressesCmd.java b/api/src/com/cloud/api/commands/ListPublicIpAddressesCmd.java index a49c5fe6b79..be4805df38f 100644 --- a/api/src/com/cloud/api/commands/ListPublicIpAddressesCmd.java +++ b/api/src/com/cloud/api/commands/ListPublicIpAddressesCmd.java @@ -21,11 +21,11 @@ import java.util.List; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseListTaggedResourcesCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseListTaggedResourcesCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; import com.cloud.api.response.IPAddressResponse; import com.cloud.api.response.ListResponse; import com.cloud.async.AsyncJob; @@ -34,7 +34,7 @@ import com.cloud.utils.Pair; @Implementation(description="Lists all public ip addresses", responseObject=IPAddressResponse.class) -public class ListPublicIpAddressesCmd extends BaseListTaggedResourcesCmd { +public class ListPublicIpAddressesCmd extends BaseListTaggedResourcesCmd { public static final Logger s_logger = Logger.getLogger(ListPublicIpAddressesCmd.class.getName()); private static final String s_name = "listpublicipaddressesresponse"; diff --git a/api/src/com/cloud/api/commands/ListRecurringSnapshotScheduleCmd.java b/api/src/com/cloud/api/commands/ListRecurringSnapshotScheduleCmd.java index 7583cc06a05..e9f0052552a 100644 --- a/api/src/com/cloud/api/commands/ListRecurringSnapshotScheduleCmd.java +++ b/api/src/com/cloud/api/commands/ListRecurringSnapshotScheduleCmd.java @@ -19,10 +19,10 @@ package com.cloud.api.commands; import java.util.ArrayList; import java.util.List; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseListCmd; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseListCmd; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; import com.cloud.api.response.ListResponse; import com.cloud.api.response.SnapshotScheduleResponse; import com.cloud.storage.snapshot.SnapshotSchedule; diff --git a/api/src/com/cloud/api/commands/ListResourceLimitsCmd.java b/api/src/com/cloud/api/commands/ListResourceLimitsCmd.java index 58d03b3c8dd..1782fdaea65 100644 --- a/api/src/com/cloud/api/commands/ListResourceLimitsCmd.java +++ b/api/src/com/cloud/api/commands/ListResourceLimitsCmd.java @@ -21,10 +21,10 @@ import java.util.List; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseListProjectAndAccountResourcesCmd; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseListProjectAndAccountResourcesCmd; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; import com.cloud.api.response.ListResponse; import com.cloud.api.response.ResourceLimitResponse; import com.cloud.configuration.ResourceLimit; diff --git a/api/src/com/cloud/api/commands/ListRoutersCmd.java b/api/src/com/cloud/api/commands/ListRoutersCmd.java index 8bf9ba818dd..681c13a09b7 100644 --- a/api/src/com/cloud/api/commands/ListRoutersCmd.java +++ b/api/src/com/cloud/api/commands/ListRoutersCmd.java @@ -21,11 +21,11 @@ import java.util.List; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseListProjectAndAccountResourcesCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; +import org.apache.cloudstack.api.ApiConstants; +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 com.cloud.api.response.DomainRouterResponse; import com.cloud.api.response.ListResponse; import com.cloud.async.AsyncJob; diff --git a/api/src/com/cloud/api/commands/ListSSHKeyPairsCmd.java b/api/src/com/cloud/api/commands/ListSSHKeyPairsCmd.java index 8a6cb2730a4..398a8182b67 100644 --- a/api/src/com/cloud/api/commands/ListSSHKeyPairsCmd.java +++ b/api/src/com/cloud/api/commands/ListSSHKeyPairsCmd.java @@ -21,10 +21,10 @@ import java.util.List; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseListProjectAndAccountResourcesCmd; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseListProjectAndAccountResourcesCmd; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; import com.cloud.api.response.ListResponse; import com.cloud.api.response.SSHKeyPairResponse; import com.cloud.user.SSHKeyPair; diff --git a/api/src/com/cloud/api/commands/ListSecurityGroupsCmd.java b/api/src/com/cloud/api/commands/ListSecurityGroupsCmd.java index 6da023af848..53889a7bf45 100644 --- a/api/src/com/cloud/api/commands/ListSecurityGroupsCmd.java +++ b/api/src/com/cloud/api/commands/ListSecurityGroupsCmd.java @@ -20,30 +20,30 @@ import java.util.List; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseListTaggedResourcesCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseListTaggedResourcesCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; import com.cloud.api.response.ListResponse; import com.cloud.api.response.SecurityGroupResponse; import com.cloud.async.AsyncJob; import com.cloud.network.security.SecurityGroupRules; - -@Implementation(description="Lists security groups", responseObject=SecurityGroupResponse.class) -public class ListSecurityGroupsCmd extends BaseListTaggedResourcesCmd { - public static final Logger s_logger = Logger.getLogger(ListSecurityGroupsCmd.class.getName()); - - private static final String s_name = "listsecuritygroupsresponse"; - - ///////////////////////////////////////////////////// - //////////////// API parameters ///////////////////// - ///////////////////////////////////////////////////// - - @Parameter(name=ApiConstants.SECURITY_GROUP_NAME, type=CommandType.STRING, description="lists security groups by name") - private String securityGroupName; - + +@Implementation(description="Lists security groups", responseObject=SecurityGroupResponse.class) +public class ListSecurityGroupsCmd extends BaseListTaggedResourcesCmd { + public static final Logger s_logger = Logger.getLogger(ListSecurityGroupsCmd.class.getName()); + + private static final String s_name = "listsecuritygroupsresponse"; + + ///////////////////////////////////////////////////// + //////////////// API parameters ///////////////////// + ///////////////////////////////////////////////////// + + @Parameter(name=ApiConstants.SECURITY_GROUP_NAME, type=CommandType.STRING, description="lists security groups by name") + private String securityGroupName; + @IdentityMapper(entityTableName="vm_instance") @Parameter(name=ApiConstants.VIRTUAL_MACHINE_ID, type=CommandType.LONG, description="lists security groups by virtual machine id") private Long virtualMachineId; diff --git a/api/src/com/cloud/api/commands/ListServiceOfferingsCmd.java b/api/src/com/cloud/api/commands/ListServiceOfferingsCmd.java index 39cc7c80948..b1ad2e9d3a9 100644 --- a/api/src/com/cloud/api/commands/ListServiceOfferingsCmd.java +++ b/api/src/com/cloud/api/commands/ListServiceOfferingsCmd.java @@ -21,11 +21,11 @@ import java.util.List; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseListCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseListCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; import com.cloud.api.response.ListResponse; import com.cloud.api.response.ServiceOfferingResponse; import com.cloud.offering.ServiceOffering; diff --git a/api/src/com/cloud/api/commands/ListSnapshotPoliciesCmd.java b/api/src/com/cloud/api/commands/ListSnapshotPoliciesCmd.java index c19924be627..b1bc0f43811 100644 --- a/api/src/com/cloud/api/commands/ListSnapshotPoliciesCmd.java +++ b/api/src/com/cloud/api/commands/ListSnapshotPoliciesCmd.java @@ -21,11 +21,11 @@ import java.util.List; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseListCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseListCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; import com.cloud.api.response.ListResponse; import com.cloud.api.response.SnapshotPolicyResponse; import com.cloud.storage.snapshot.SnapshotPolicy; diff --git a/api/src/com/cloud/api/commands/ListSnapshotsCmd.java b/api/src/com/cloud/api/commands/ListSnapshotsCmd.java index cc2aad8f0e1..7e49c328411 100644 --- a/api/src/com/cloud/api/commands/ListSnapshotsCmd.java +++ b/api/src/com/cloud/api/commands/ListSnapshotsCmd.java @@ -21,11 +21,11 @@ import java.util.List; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseListTaggedResourcesCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseListTaggedResourcesCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; import com.cloud.api.response.ListResponse; import com.cloud.api.response.SnapshotResponse; import com.cloud.async.AsyncJob; @@ -33,12 +33,12 @@ import com.cloud.storage.Snapshot; import com.cloud.utils.Pair; -@Implementation(description="Lists all available snapshots for the account.", responseObject=SnapshotResponse.class) -public class ListSnapshotsCmd extends BaseListTaggedResourcesCmd { - public static final Logger s_logger = Logger.getLogger(ListSnapshotsCmd.class.getName()); - - private static final String s_name = "listsnapshotsresponse"; - +@Implementation(description="Lists all available snapshots for the account.", responseObject=SnapshotResponse.class) +public class ListSnapshotsCmd extends BaseListTaggedResourcesCmd { + public static final Logger s_logger = Logger.getLogger(ListSnapshotsCmd.class.getName()); + + private static final String s_name = "listsnapshotsresponse"; + ///////////////////////////////////////////////////// //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// diff --git a/api/src/com/cloud/api/commands/ListStaticRoutesCmd.java b/api/src/com/cloud/api/commands/ListStaticRoutesCmd.java index 93b533e6f6f..e397c6cc1c2 100644 --- a/api/src/com/cloud/api/commands/ListStaticRoutesCmd.java +++ b/api/src/com/cloud/api/commands/ListStaticRoutesCmd.java @@ -18,11 +18,11 @@ package com.cloud.api.commands; import java.util.ArrayList; import java.util.List; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseListTaggedResourcesCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseListTaggedResourcesCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; import com.cloud.api.response.ListResponse; import com.cloud.api.response.StaticRouteResponse; import com.cloud.network.vpc.StaticRoute; diff --git a/api/src/com/cloud/api/commands/ListStoragePoolsCmd.java b/api/src/com/cloud/api/commands/ListStoragePoolsCmd.java index 7199b0b25ec..154013a1dac 100644 --- a/api/src/com/cloud/api/commands/ListStoragePoolsCmd.java +++ b/api/src/com/cloud/api/commands/ListStoragePoolsCmd.java @@ -21,11 +21,11 @@ import java.util.List; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseListCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseListCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; import com.cloud.api.response.ListResponse; import com.cloud.api.response.StoragePoolResponse; import com.cloud.async.AsyncJob; diff --git a/api/src/com/cloud/api/commands/ListSupportedNetworkServicesCmd.java b/api/src/com/cloud/api/commands/ListSupportedNetworkServicesCmd.java index ef949da8fa3..517ed54954e 100644 --- a/api/src/com/cloud/api/commands/ListSupportedNetworkServicesCmd.java +++ b/api/src/com/cloud/api/commands/ListSupportedNetworkServicesCmd.java @@ -21,10 +21,10 @@ import java.util.List; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseListCmd; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseListCmd; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; import com.cloud.api.response.ListResponse; import com.cloud.api.response.ServiceResponse; import com.cloud.exception.InvalidParameterValueException; diff --git a/api/src/com/cloud/api/commands/ListSwiftsCmd.java b/api/src/com/cloud/api/commands/ListSwiftsCmd.java index 587ceee10b9..ec030c8f6fb 100644 --- a/api/src/com/cloud/api/commands/ListSwiftsCmd.java +++ b/api/src/com/cloud/api/commands/ListSwiftsCmd.java @@ -21,10 +21,10 @@ import java.util.List; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseListCmd; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseListCmd; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; import com.cloud.api.response.HostResponse; import com.cloud.api.response.ListResponse; import com.cloud.api.response.SwiftResponse; diff --git a/api/src/com/cloud/api/commands/ListSystemVMsCmd.java b/api/src/com/cloud/api/commands/ListSystemVMsCmd.java index 44391971469..e8c01ccc6a2 100644 --- a/api/src/com/cloud/api/commands/ListSystemVMsCmd.java +++ b/api/src/com/cloud/api/commands/ListSystemVMsCmd.java @@ -21,11 +21,11 @@ import java.util.List; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseListCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseListCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; import com.cloud.api.response.ListResponse; import com.cloud.api.response.SystemVmResponse; import com.cloud.async.AsyncJob; diff --git a/api/src/com/cloud/api/commands/ListTagsCmd.java b/api/src/com/cloud/api/commands/ListTagsCmd.java index b832b423fd0..5fe49d447e4 100644 --- a/api/src/com/cloud/api/commands/ListTagsCmd.java +++ b/api/src/com/cloud/api/commands/ListTagsCmd.java @@ -20,10 +20,10 @@ package com.cloud.api.commands; import java.util.ArrayList; import java.util.List; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseListProjectAndAccountResourcesCmd; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseListProjectAndAccountResourcesCmd; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; import com.cloud.api.response.ListResponse; import com.cloud.api.response.ResourceTagResponse; import com.cloud.server.ResourceTag; diff --git a/api/src/com/cloud/api/commands/ListTemplateOrIsoPermissionsCmd.java b/api/src/com/cloud/api/commands/ListTemplateOrIsoPermissionsCmd.java index cacb41f405d..bb3be6a4324 100644 --- a/api/src/com/cloud/api/commands/ListTemplateOrIsoPermissionsCmd.java +++ b/api/src/com/cloud/api/commands/ListTemplateOrIsoPermissionsCmd.java @@ -20,11 +20,11 @@ import java.util.List; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; import com.cloud.api.response.TemplatePermissionsResponse; import com.cloud.template.VirtualMachineTemplate; import com.cloud.user.Account; diff --git a/api/src/com/cloud/api/commands/ListTemplatesCmd.java b/api/src/com/cloud/api/commands/ListTemplatesCmd.java index 6e1e0b4b754..362a27cde51 100755 --- a/api/src/com/cloud/api/commands/ListTemplatesCmd.java +++ b/api/src/com/cloud/api/commands/ListTemplatesCmd.java @@ -22,11 +22,11 @@ import java.util.Set; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseListTaggedResourcesCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseListTaggedResourcesCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; import com.cloud.api.response.ListResponse; import com.cloud.api.response.TemplateResponse; import com.cloud.async.AsyncJob; diff --git a/api/src/com/cloud/api/commands/ListTrafficTypeImplementorsCmd.java b/api/src/com/cloud/api/commands/ListTrafficTypeImplementorsCmd.java index 8b6bde43055..afff055a1ea 100755 --- a/api/src/com/cloud/api/commands/ListTrafficTypeImplementorsCmd.java +++ b/api/src/com/cloud/api/commands/ListTrafficTypeImplementorsCmd.java @@ -21,11 +21,11 @@ import java.util.List; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseListCmd; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseListCmd; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.api.response.ListResponse; import com.cloud.api.response.TrafficTypeImplementorResponse; import com.cloud.exception.ConcurrentOperationException; diff --git a/api/src/com/cloud/api/commands/ListTrafficTypesCmd.java b/api/src/com/cloud/api/commands/ListTrafficTypesCmd.java index 671d406e289..5f77dd4f1f4 100755 --- a/api/src/com/cloud/api/commands/ListTrafficTypesCmd.java +++ b/api/src/com/cloud/api/commands/ListTrafficTypesCmd.java @@ -21,11 +21,11 @@ import java.util.List; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseListCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseListCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; import com.cloud.api.response.ListResponse; import com.cloud.api.response.ProviderResponse; import com.cloud.api.response.TrafficTypeResponse; diff --git a/api/src/com/cloud/api/commands/ListUsersCmd.java b/api/src/com/cloud/api/commands/ListUsersCmd.java index 03db56d7187..53ad1d52a41 100644 --- a/api/src/com/cloud/api/commands/ListUsersCmd.java +++ b/api/src/com/cloud/api/commands/ListUsersCmd.java @@ -21,11 +21,11 @@ import java.util.List; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseListAccountResourcesCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseListAccountResourcesCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; import com.cloud.api.response.ListResponse; import com.cloud.api.response.UserResponse; import com.cloud.user.UserAccount; diff --git a/api/src/com/cloud/api/commands/ListVMGroupsCmd.java b/api/src/com/cloud/api/commands/ListVMGroupsCmd.java index 34a5e195a3e..25b36e7c1c9 100644 --- a/api/src/com/cloud/api/commands/ListVMGroupsCmd.java +++ b/api/src/com/cloud/api/commands/ListVMGroupsCmd.java @@ -21,11 +21,11 @@ import java.util.List; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseListProjectAndAccountResourcesCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; +import org.apache.cloudstack.api.ApiConstants; +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 com.cloud.api.response.InstanceGroupResponse; import com.cloud.api.response.ListResponse; import com.cloud.utils.Pair; diff --git a/api/src/com/cloud/api/commands/ListVPCOfferingsCmd.java b/api/src/com/cloud/api/commands/ListVPCOfferingsCmd.java index 397c04a5ce2..ecca2ddb148 100644 --- a/api/src/com/cloud/api/commands/ListVPCOfferingsCmd.java +++ b/api/src/com/cloud/api/commands/ListVPCOfferingsCmd.java @@ -21,11 +21,11 @@ import java.util.List; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseListCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseListCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; import com.cloud.api.response.ListResponse; import com.cloud.api.response.VpcOfferingResponse; import com.cloud.network.vpc.VpcOffering; diff --git a/api/src/com/cloud/api/commands/ListVPCsCmd.java b/api/src/com/cloud/api/commands/ListVPCsCmd.java index 6f9acc16fec..fec3eeab425 100644 --- a/api/src/com/cloud/api/commands/ListVPCsCmd.java +++ b/api/src/com/cloud/api/commands/ListVPCsCmd.java @@ -21,11 +21,11 @@ import java.util.List; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseListTaggedResourcesCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseListTaggedResourcesCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; import com.cloud.api.response.ListResponse; import com.cloud.api.response.VpcResponse; import com.cloud.network.vpc.Vpc; diff --git a/api/src/com/cloud/api/commands/ListVirtualRouterElementsCmd.java b/api/src/com/cloud/api/commands/ListVirtualRouterElementsCmd.java index 937a01e2d80..a8e2f0af511 100644 --- a/api/src/com/cloud/api/commands/ListVirtualRouterElementsCmd.java +++ b/api/src/com/cloud/api/commands/ListVirtualRouterElementsCmd.java @@ -21,13 +21,13 @@ import java.util.List; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseListCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.PlugService; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseListCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.PlugService; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.api.response.ListResponse; import com.cloud.api.response.VirtualRouterProviderResponse; import com.cloud.exception.ConcurrentOperationException; diff --git a/api/src/com/cloud/api/commands/ListVlanIpRangesCmd.java b/api/src/com/cloud/api/commands/ListVlanIpRangesCmd.java index 5cefa65cb24..0df43036372 100644 --- a/api/src/com/cloud/api/commands/ListVlanIpRangesCmd.java +++ b/api/src/com/cloud/api/commands/ListVlanIpRangesCmd.java @@ -21,11 +21,11 @@ import java.util.List; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseListCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseListCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; import com.cloud.api.response.ListResponse; import com.cloud.api.response.VlanIpRangeResponse; import com.cloud.dc.Vlan; diff --git a/api/src/com/cloud/api/commands/ListVolumesCmd.java b/api/src/com/cloud/api/commands/ListVolumesCmd.java index 7875c83aced..5849602d2aa 100755 --- a/api/src/com/cloud/api/commands/ListVolumesCmd.java +++ b/api/src/com/cloud/api/commands/ListVolumesCmd.java @@ -21,11 +21,11 @@ import java.util.List; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseListTaggedResourcesCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseListTaggedResourcesCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; import com.cloud.api.response.ListResponse; import com.cloud.api.response.VolumeResponse; import com.cloud.async.AsyncJob; @@ -33,12 +33,12 @@ import com.cloud.storage.Volume; import com.cloud.utils.Pair; -@Implementation(description="Lists all volumes.", responseObject=VolumeResponse.class) -public class ListVolumesCmd extends BaseListTaggedResourcesCmd { - public static final Logger s_logger = Logger.getLogger(ListVolumesCmd.class.getName()); - - private static final String s_name = "listvolumesresponse"; - +@Implementation(description="Lists all volumes.", responseObject=VolumeResponse.class) +public class ListVolumesCmd extends BaseListTaggedResourcesCmd { + public static final Logger s_logger = Logger.getLogger(ListVolumesCmd.class.getName()); + + private static final String s_name = "listvolumesresponse"; + ///////////////////////////////////////////////////// //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// diff --git a/api/src/com/cloud/api/commands/ListVpnUsersCmd.java b/api/src/com/cloud/api/commands/ListVpnUsersCmd.java index 9280ed59f0a..fbfc3e5ae19 100644 --- a/api/src/com/cloud/api/commands/ListVpnUsersCmd.java +++ b/api/src/com/cloud/api/commands/ListVpnUsersCmd.java @@ -21,11 +21,11 @@ import java.util.List; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseListProjectAndAccountResourcesCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; +import org.apache.cloudstack.api.ApiConstants; +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 com.cloud.api.response.ListResponse; import com.cloud.api.response.VpnUsersResponse; import com.cloud.network.VpnUser; diff --git a/api/src/com/cloud/api/commands/ListZonesByCmd.java b/api/src/com/cloud/api/commands/ListZonesByCmd.java index f3016e98cff..8d9ccb3f3b9 100755 --- a/api/src/com/cloud/api/commands/ListZonesByCmd.java +++ b/api/src/com/cloud/api/commands/ListZonesByCmd.java @@ -21,11 +21,11 @@ import java.util.List; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseListCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseListCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; import com.cloud.api.response.ListResponse; import com.cloud.api.response.ZoneResponse; import com.cloud.dc.DataCenter; diff --git a/api/src/com/cloud/api/commands/LockAccountCmd.java b/api/src/com/cloud/api/commands/LockAccountCmd.java index 8c47dbc9d83..2138ad9b3ed 100644 --- a/api/src/com/cloud/api/commands/LockAccountCmd.java +++ b/api/src/com/cloud/api/commands/LockAccountCmd.java @@ -18,11 +18,11 @@ package com.cloud.api.commands; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; import com.cloud.api.response.AccountResponse; import com.cloud.user.Account; diff --git a/api/src/com/cloud/api/commands/LockUserCmd.java b/api/src/com/cloud/api/commands/LockUserCmd.java index 5d2f58cd3dd..5a56bcb7b42 100644 --- a/api/src/com/cloud/api/commands/LockUserCmd.java +++ b/api/src/com/cloud/api/commands/LockUserCmd.java @@ -18,12 +18,12 @@ package com.cloud.api.commands; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.api.response.UserResponse; import com.cloud.user.Account; import com.cloud.user.User; diff --git a/api/src/com/cloud/api/commands/MarkDefaultZoneForAccountCmd.java b/api/src/com/cloud/api/commands/MarkDefaultZoneForAccountCmd.java index 7f06926070c..09f0e1c05d2 100644 --- a/api/src/com/cloud/api/commands/MarkDefaultZoneForAccountCmd.java +++ b/api/src/com/cloud/api/commands/MarkDefaultZoneForAccountCmd.java @@ -19,17 +19,17 @@ package com.cloud.api.commands; import org.apache.log4j.Logger; -import com.cloud.api.BaseAsyncCmd; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.ApiConstants; -import com.cloud.api.IdentityMapper; +import org.apache.cloudstack.api.BaseAsyncCmd; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.IdentityMapper; import com.cloud.user.Account; import com.cloud.event.EventTypes; import com.cloud.async.AsyncJob; import com.cloud.api.response.AccountResponse; -import com.cloud.api.ServerApiException; -import com.cloud.api.BaseCmd; +import org.apache.cloudstack.api.ServerApiException; +import org.apache.cloudstack.api.BaseCmd; @Implementation(description="Marks a default zone for this account", responseObject=AccountResponse.class, since="4.0") public class MarkDefaultZoneForAccountCmd extends BaseAsyncCmd { diff --git a/api/src/com/cloud/api/commands/MigrateSystemVMCmd.java b/api/src/com/cloud/api/commands/MigrateSystemVMCmd.java index 13bb208ad6d..a919795d9c2 100644 --- a/api/src/com/cloud/api/commands/MigrateSystemVMCmd.java +++ b/api/src/com/cloud/api/commands/MigrateSystemVMCmd.java @@ -18,13 +18,13 @@ package com.cloud.api.commands; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseAsyncCmd; -import com.cloud.api.BaseCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseAsyncCmd; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.api.response.SystemVmInstanceResponse; import com.cloud.event.EventTypes; import com.cloud.exception.ConcurrentOperationException; diff --git a/api/src/com/cloud/api/commands/MigrateVolumeCmd.java b/api/src/com/cloud/api/commands/MigrateVolumeCmd.java index 58f5d917ff2..ee6145733ad 100644 --- a/api/src/com/cloud/api/commands/MigrateVolumeCmd.java +++ b/api/src/com/cloud/api/commands/MigrateVolumeCmd.java @@ -16,13 +16,13 @@ // under the License. package com.cloud.api.commands; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseAsyncCmd; -import com.cloud.api.BaseCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseAsyncCmd; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.api.response.VolumeResponse; import com.cloud.event.EventTypes; import com.cloud.exception.ConcurrentOperationException; diff --git a/api/src/com/cloud/api/commands/PrepareForMaintenanceCmd.java b/api/src/com/cloud/api/commands/PrepareForMaintenanceCmd.java index 5a4abd0c244..ab7a66766bc 100644 --- a/api/src/com/cloud/api/commands/PrepareForMaintenanceCmd.java +++ b/api/src/com/cloud/api/commands/PrepareForMaintenanceCmd.java @@ -18,13 +18,13 @@ package com.cloud.api.commands; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseAsyncCmd; -import com.cloud.api.BaseCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseAsyncCmd; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.api.response.HostResponse; import com.cloud.async.AsyncJob; import com.cloud.event.EventTypes; diff --git a/api/src/com/cloud/api/commands/PreparePrimaryStorageForMaintenanceCmd.java b/api/src/com/cloud/api/commands/PreparePrimaryStorageForMaintenanceCmd.java index 31e181e56d7..488bc024524 100644 --- a/api/src/com/cloud/api/commands/PreparePrimaryStorageForMaintenanceCmd.java +++ b/api/src/com/cloud/api/commands/PreparePrimaryStorageForMaintenanceCmd.java @@ -18,13 +18,13 @@ package com.cloud.api.commands; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseAsyncCmd; -import com.cloud.api.BaseCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseAsyncCmd; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.api.response.StoragePoolResponse; import com.cloud.async.AsyncJob; import com.cloud.event.EventTypes; diff --git a/api/src/com/cloud/api/commands/PrepareTemplateCmd.java b/api/src/com/cloud/api/commands/PrepareTemplateCmd.java index cb2cd2fa3f4..e1adcb71fb4 100644 --- a/api/src/com/cloud/api/commands/PrepareTemplateCmd.java +++ b/api/src/com/cloud/api/commands/PrepareTemplateCmd.java @@ -20,11 +20,11 @@ import java.util.List; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; import com.cloud.api.response.ListResponse; import com.cloud.api.response.TemplateResponse; import com.cloud.template.VirtualMachineTemplate; diff --git a/api/src/com/cloud/api/commands/QueryAsyncJobResultCmd.java b/api/src/com/cloud/api/commands/QueryAsyncJobResultCmd.java index d011a7eb571..e6428b1da0f 100644 --- a/api/src/com/cloud/api/commands/QueryAsyncJobResultCmd.java +++ b/api/src/com/cloud/api/commands/QueryAsyncJobResultCmd.java @@ -18,11 +18,11 @@ package com.cloud.api.commands; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; import com.cloud.api.response.AsyncJobResponse; import com.cloud.user.Account; diff --git a/api/src/com/cloud/api/commands/RebootRouterCmd.java b/api/src/com/cloud/api/commands/RebootRouterCmd.java index 58577b7ffb9..e1e30e8ec75 100644 --- a/api/src/com/cloud/api/commands/RebootRouterCmd.java +++ b/api/src/com/cloud/api/commands/RebootRouterCmd.java @@ -18,13 +18,13 @@ package com.cloud.api.commands; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseAsyncCmd; -import com.cloud.api.BaseCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseAsyncCmd; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.api.response.DomainRouterResponse; import com.cloud.async.AsyncJob; import com.cloud.event.EventTypes; diff --git a/api/src/com/cloud/api/commands/RebootSystemVmCmd.java b/api/src/com/cloud/api/commands/RebootSystemVmCmd.java index 03a95756a82..98bb5e232e5 100644 --- a/api/src/com/cloud/api/commands/RebootSystemVmCmd.java +++ b/api/src/com/cloud/api/commands/RebootSystemVmCmd.java @@ -18,13 +18,13 @@ package com.cloud.api.commands; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseAsyncCmd; -import com.cloud.api.BaseCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseAsyncCmd; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.api.response.SystemVmResponse; import com.cloud.async.AsyncJob; import com.cloud.event.EventTypes; diff --git a/api/src/com/cloud/api/commands/ReconnectHostCmd.java b/api/src/com/cloud/api/commands/ReconnectHostCmd.java index 3851e980060..ba4e80616f0 100755 --- a/api/src/com/cloud/api/commands/ReconnectHostCmd.java +++ b/api/src/com/cloud/api/commands/ReconnectHostCmd.java @@ -18,13 +18,13 @@ package com.cloud.api.commands; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseAsyncCmd; -import com.cloud.api.BaseCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseAsyncCmd; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.api.response.HostResponse; import com.cloud.async.AsyncJob; import com.cloud.event.EventTypes; diff --git a/api/src/com/cloud/api/commands/RegisterCmd.java b/api/src/com/cloud/api/commands/RegisterCmd.java index dff8ec9ae32..4f6e6ea1220 100644 --- a/api/src/com/cloud/api/commands/RegisterCmd.java +++ b/api/src/com/cloud/api/commands/RegisterCmd.java @@ -18,11 +18,11 @@ package com.cloud.api.commands; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; import com.cloud.api.response.RegisterResponse; import com.cloud.user.Account; import com.cloud.user.User; diff --git a/api/src/com/cloud/api/commands/RegisterIsoCmd.java b/api/src/com/cloud/api/commands/RegisterIsoCmd.java index 3d7b4fa134f..47a45145f88 100755 --- a/api/src/com/cloud/api/commands/RegisterIsoCmd.java +++ b/api/src/com/cloud/api/commands/RegisterIsoCmd.java @@ -20,12 +20,12 @@ import java.util.List; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.api.response.ListResponse; import com.cloud.api.response.TemplateResponse; import com.cloud.exception.ResourceAllocationException; diff --git a/api/src/com/cloud/api/commands/RegisterSSHKeyPairCmd.java b/api/src/com/cloud/api/commands/RegisterSSHKeyPairCmd.java index 321be365fa4..4eb0abcd87b 100644 --- a/api/src/com/cloud/api/commands/RegisterSSHKeyPairCmd.java +++ b/api/src/com/cloud/api/commands/RegisterSSHKeyPairCmd.java @@ -18,11 +18,11 @@ package com.cloud.api.commands; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; import com.cloud.api.response.SSHKeyPairResponse; import com.cloud.user.SSHKeyPair; import com.cloud.user.UserContext; diff --git a/api/src/com/cloud/api/commands/RegisterTemplateCmd.java b/api/src/com/cloud/api/commands/RegisterTemplateCmd.java index b224fa14bd0..c6d9b668014 100755 --- a/api/src/com/cloud/api/commands/RegisterTemplateCmd.java +++ b/api/src/com/cloud/api/commands/RegisterTemplateCmd.java @@ -23,12 +23,12 @@ import java.util.Map; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.api.response.ListResponse; import com.cloud.api.response.TemplateResponse; import com.cloud.async.AsyncJob; diff --git a/api/src/com/cloud/api/commands/RemoveFromLoadBalancerRuleCmd.java b/api/src/com/cloud/api/commands/RemoveFromLoadBalancerRuleCmd.java index abc850f7471..9e6fc6c5f03 100644 --- a/api/src/com/cloud/api/commands/RemoveFromLoadBalancerRuleCmd.java +++ b/api/src/com/cloud/api/commands/RemoveFromLoadBalancerRuleCmd.java @@ -20,13 +20,13 @@ import java.util.List; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseAsyncCmd; -import com.cloud.api.BaseCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseAsyncCmd; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.api.response.SuccessResponse; import com.cloud.event.EventTypes; import com.cloud.exception.InvalidParameterValueException; diff --git a/api/src/com/cloud/api/commands/RemoveVpnUserCmd.java b/api/src/com/cloud/api/commands/RemoveVpnUserCmd.java index 151b3512273..8e98c930eab 100644 --- a/api/src/com/cloud/api/commands/RemoveVpnUserCmd.java +++ b/api/src/com/cloud/api/commands/RemoveVpnUserCmd.java @@ -18,13 +18,13 @@ package com.cloud.api.commands; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseAsyncCmd; -import com.cloud.api.BaseCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseAsyncCmd; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.api.response.SuccessResponse; import com.cloud.event.EventTypes; import com.cloud.user.Account; diff --git a/api/src/com/cloud/api/commands/RestartNetworkCmd.java b/api/src/com/cloud/api/commands/RestartNetworkCmd.java index 0141d24f438..978ad447cbb 100644 --- a/api/src/com/cloud/api/commands/RestartNetworkCmd.java +++ b/api/src/com/cloud/api/commands/RestartNetworkCmd.java @@ -18,13 +18,13 @@ package com.cloud.api.commands; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseAsyncCmd; -import com.cloud.api.BaseCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseAsyncCmd; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.api.response.IPAddressResponse; import com.cloud.api.response.SuccessResponse; import com.cloud.event.EventTypes; diff --git a/api/src/com/cloud/api/commands/RestartVPCCmd.java b/api/src/com/cloud/api/commands/RestartVPCCmd.java index bbb5cddbd63..dc7d8970981 100644 --- a/api/src/com/cloud/api/commands/RestartVPCCmd.java +++ b/api/src/com/cloud/api/commands/RestartVPCCmd.java @@ -18,13 +18,13 @@ package com.cloud.api.commands; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseAsyncCmd; -import com.cloud.api.BaseCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseAsyncCmd; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.api.response.SuccessResponse; import com.cloud.api.response.VpcResponse; import com.cloud.event.EventTypes; diff --git a/api/src/com/cloud/api/commands/RevokeSecurityGroupEgressCmd.java b/api/src/com/cloud/api/commands/RevokeSecurityGroupEgressCmd.java index 273c145bdbd..d6b6f6cc20d 100644 --- a/api/src/com/cloud/api/commands/RevokeSecurityGroupEgressCmd.java +++ b/api/src/com/cloud/api/commands/RevokeSecurityGroupEgressCmd.java @@ -18,13 +18,13 @@ package com.cloud.api.commands; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseAsyncCmd; -import com.cloud.api.BaseCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseAsyncCmd; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.api.response.SuccessResponse; import com.cloud.async.AsyncJob; import com.cloud.event.EventTypes; diff --git a/api/src/com/cloud/api/commands/RevokeSecurityGroupIngressCmd.java b/api/src/com/cloud/api/commands/RevokeSecurityGroupIngressCmd.java index 9782c1d03f6..5818580e3f7 100644 --- a/api/src/com/cloud/api/commands/RevokeSecurityGroupIngressCmd.java +++ b/api/src/com/cloud/api/commands/RevokeSecurityGroupIngressCmd.java @@ -18,13 +18,13 @@ package com.cloud.api.commands; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseAsyncCmd; -import com.cloud.api.BaseCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseAsyncCmd; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.api.response.SuccessResponse; import com.cloud.async.AsyncJob; import com.cloud.event.EventTypes; diff --git a/api/src/com/cloud/api/commands/StartRouterCmd.java b/api/src/com/cloud/api/commands/StartRouterCmd.java index 233e34f0a05..fc0115e54d5 100644 --- a/api/src/com/cloud/api/commands/StartRouterCmd.java +++ b/api/src/com/cloud/api/commands/StartRouterCmd.java @@ -18,13 +18,13 @@ package com.cloud.api.commands; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseAsyncCmd; -import com.cloud.api.BaseCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseAsyncCmd; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.api.response.DomainRouterResponse; import com.cloud.async.AsyncJob; import com.cloud.event.EventTypes; diff --git a/api/src/com/cloud/api/commands/StartSystemVMCmd.java b/api/src/com/cloud/api/commands/StartSystemVMCmd.java index 9cd78f3c1fd..9e010f01f70 100644 --- a/api/src/com/cloud/api/commands/StartSystemVMCmd.java +++ b/api/src/com/cloud/api/commands/StartSystemVMCmd.java @@ -18,13 +18,13 @@ package com.cloud.api.commands; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseAsyncCmd; -import com.cloud.api.BaseCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseAsyncCmd; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.api.response.SystemVmResponse; import com.cloud.async.AsyncJob; import com.cloud.event.EventTypes; diff --git a/api/src/com/cloud/api/commands/StopRouterCmd.java b/api/src/com/cloud/api/commands/StopRouterCmd.java index 84a8bc50d52..eb93bb6f107 100644 --- a/api/src/com/cloud/api/commands/StopRouterCmd.java +++ b/api/src/com/cloud/api/commands/StopRouterCmd.java @@ -18,13 +18,13 @@ package com.cloud.api.commands; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseAsyncCmd; -import com.cloud.api.BaseCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseAsyncCmd; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.api.response.DomainRouterResponse; import com.cloud.async.AsyncJob; import com.cloud.event.EventTypes; diff --git a/api/src/com/cloud/api/commands/StopSystemVmCmd.java b/api/src/com/cloud/api/commands/StopSystemVmCmd.java index 91e48c8a35d..98a799c583a 100644 --- a/api/src/com/cloud/api/commands/StopSystemVmCmd.java +++ b/api/src/com/cloud/api/commands/StopSystemVmCmd.java @@ -18,13 +18,13 @@ package com.cloud.api.commands; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseAsyncCmd; -import com.cloud.api.BaseCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseAsyncCmd; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.api.response.SystemVmResponse; import com.cloud.async.AsyncJob; import com.cloud.event.EventTypes; diff --git a/api/src/com/cloud/api/commands/SuspendProjectCmd.java b/api/src/com/cloud/api/commands/SuspendProjectCmd.java index 62f6da68cbc..0ce454ae35f 100644 --- a/api/src/com/cloud/api/commands/SuspendProjectCmd.java +++ b/api/src/com/cloud/api/commands/SuspendProjectCmd.java @@ -18,13 +18,13 @@ package com.cloud.api.commands; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseAsyncCmd; -import com.cloud.api.BaseCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseAsyncCmd; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.api.response.ProjectResponse; import com.cloud.event.EventTypes; import com.cloud.exception.ConcurrentOperationException; diff --git a/api/src/com/cloud/api/commands/UpdateAccountCmd.java b/api/src/com/cloud/api/commands/UpdateAccountCmd.java index 8e3ef4364b3..bfe8e46e60a 100755 --- a/api/src/com/cloud/api/commands/UpdateAccountCmd.java +++ b/api/src/com/cloud/api/commands/UpdateAccountCmd.java @@ -21,12 +21,12 @@ import java.util.Map; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.api.response.AccountResponse; import com.cloud.user.Account; diff --git a/api/src/com/cloud/api/commands/UpdateAutoScalePolicyCmd.java b/api/src/com/cloud/api/commands/UpdateAutoScalePolicyCmd.java index baefcffd164..00781261a0c 100644 --- a/api/src/com/cloud/api/commands/UpdateAutoScalePolicyCmd.java +++ b/api/src/com/cloud/api/commands/UpdateAutoScalePolicyCmd.java @@ -21,13 +21,13 @@ import java.util.List; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseAsyncCmd; -import com.cloud.api.BaseCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseAsyncCmd; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.api.response.AutoScalePolicyResponse; import com.cloud.async.AsyncJob; import com.cloud.event.EventTypes; diff --git a/api/src/com/cloud/api/commands/UpdateAutoScaleVmGroupCmd.java b/api/src/com/cloud/api/commands/UpdateAutoScaleVmGroupCmd.java index f71a9880f33..600f9c88b03 100644 --- a/api/src/com/cloud/api/commands/UpdateAutoScaleVmGroupCmd.java +++ b/api/src/com/cloud/api/commands/UpdateAutoScaleVmGroupCmd.java @@ -21,13 +21,13 @@ import java.util.List; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseAsyncCmd; -import com.cloud.api.BaseCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseAsyncCmd; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.api.response.AutoScaleVmGroupResponse; import com.cloud.async.AsyncJob; import com.cloud.event.EventTypes; diff --git a/api/src/com/cloud/api/commands/UpdateAutoScaleVmProfileCmd.java b/api/src/com/cloud/api/commands/UpdateAutoScaleVmProfileCmd.java index c94dad4dd3e..ff2135ab5c2 100644 --- a/api/src/com/cloud/api/commands/UpdateAutoScaleVmProfileCmd.java +++ b/api/src/com/cloud/api/commands/UpdateAutoScaleVmProfileCmd.java @@ -21,13 +21,13 @@ import java.util.Map; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseAsyncCmd; -import com.cloud.api.BaseCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseAsyncCmd; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.api.response.AutoScaleVmProfileResponse; import com.cloud.async.AsyncJob; import com.cloud.event.EventTypes; diff --git a/api/src/com/cloud/api/commands/UpdateCfgCmd.java b/api/src/com/cloud/api/commands/UpdateCfgCmd.java index f2d9fe92cac..41720d89bdc 100644 --- a/api/src/com/cloud/api/commands/UpdateCfgCmd.java +++ b/api/src/com/cloud/api/commands/UpdateCfgCmd.java @@ -18,11 +18,11 @@ package com.cloud.api.commands; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseCmd; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.api.response.ConfigurationResponse; import com.cloud.configuration.Configuration; import com.cloud.user.Account; diff --git a/api/src/com/cloud/api/commands/UpdateClusterCmd.java b/api/src/com/cloud/api/commands/UpdateClusterCmd.java index 9a2d66865b4..6d901e31c46 100755 --- a/api/src/com/cloud/api/commands/UpdateClusterCmd.java +++ b/api/src/com/cloud/api/commands/UpdateClusterCmd.java @@ -18,12 +18,12 @@ package com.cloud.api.commands; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.api.response.ClusterResponse; import com.cloud.exception.InvalidParameterValueException; import com.cloud.org.Cluster; diff --git a/api/src/com/cloud/api/commands/UpdateDiskOfferingCmd.java b/api/src/com/cloud/api/commands/UpdateDiskOfferingCmd.java index 882f90e090b..8f58ac0f99d 100755 --- a/api/src/com/cloud/api/commands/UpdateDiskOfferingCmd.java +++ b/api/src/com/cloud/api/commands/UpdateDiskOfferingCmd.java @@ -17,12 +17,12 @@ package com.cloud.api.commands; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.api.response.DiskOfferingResponse; import com.cloud.offering.DiskOffering; import com.cloud.user.Account; diff --git a/api/src/com/cloud/api/commands/UpdateDomainCmd.java b/api/src/com/cloud/api/commands/UpdateDomainCmd.java index 739ae87ca05..5989e87f29a 100644 --- a/api/src/com/cloud/api/commands/UpdateDomainCmd.java +++ b/api/src/com/cloud/api/commands/UpdateDomainCmd.java @@ -18,12 +18,12 @@ package com.cloud.api.commands; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.api.response.DomainResponse; import com.cloud.domain.Domain; import com.cloud.user.Account; diff --git a/api/src/com/cloud/api/commands/UpdateHostCmd.java b/api/src/com/cloud/api/commands/UpdateHostCmd.java index 234d0c6c7e7..020a3246ddc 100755 --- a/api/src/com/cloud/api/commands/UpdateHostCmd.java +++ b/api/src/com/cloud/api/commands/UpdateHostCmd.java @@ -20,12 +20,12 @@ import java.util.List; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.api.response.HostResponse; import com.cloud.host.Host; import com.cloud.user.Account; diff --git a/api/src/com/cloud/api/commands/UpdateHostPasswordCmd.java b/api/src/com/cloud/api/commands/UpdateHostPasswordCmd.java index 426b51c0ed0..e71c63d9cb2 100644 --- a/api/src/com/cloud/api/commands/UpdateHostPasswordCmd.java +++ b/api/src/com/cloud/api/commands/UpdateHostPasswordCmd.java @@ -19,11 +19,11 @@ package com.cloud.api.commands; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; import com.cloud.api.response.SuccessResponse; import com.cloud.user.Account; diff --git a/api/src/com/cloud/api/commands/UpdateHypervisorCapabilitiesCmd.java b/api/src/com/cloud/api/commands/UpdateHypervisorCapabilitiesCmd.java index 08c0beabb79..4f47f48c617 100644 --- a/api/src/com/cloud/api/commands/UpdateHypervisorCapabilitiesCmd.java +++ b/api/src/com/cloud/api/commands/UpdateHypervisorCapabilitiesCmd.java @@ -18,12 +18,12 @@ package com.cloud.api.commands; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.api.response.HypervisorCapabilitiesResponse; import com.cloud.api.response.ServiceOfferingResponse; import com.cloud.hypervisor.HypervisorCapabilities; diff --git a/api/src/com/cloud/api/commands/UpdateIsoCmd.java b/api/src/com/cloud/api/commands/UpdateIsoCmd.java index 92417912cc9..de3a69b31fe 100755 --- a/api/src/com/cloud/api/commands/UpdateIsoCmd.java +++ b/api/src/com/cloud/api/commands/UpdateIsoCmd.java @@ -18,9 +18,9 @@ package com.cloud.api.commands; import org.apache.log4j.Logger; -import com.cloud.api.BaseCmd; -import com.cloud.api.Implementation; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.api.response.TemplateResponse; import com.cloud.template.VirtualMachineTemplate; import com.cloud.user.Account; diff --git a/api/src/com/cloud/api/commands/UpdateIsoPermissionsCmd.java b/api/src/com/cloud/api/commands/UpdateIsoPermissionsCmd.java index 7173d91bb87..7b55769c607 100644 --- a/api/src/com/cloud/api/commands/UpdateIsoPermissionsCmd.java +++ b/api/src/com/cloud/api/commands/UpdateIsoPermissionsCmd.java @@ -18,7 +18,7 @@ package com.cloud.api.commands; import org.apache.log4j.Logger; -import com.cloud.api.Implementation; +import org.apache.cloudstack.api.Implementation; import com.cloud.api.response.SuccessResponse; import com.cloud.template.VirtualMachineTemplate; import com.cloud.user.Account; diff --git a/api/src/com/cloud/api/commands/UpdateLoadBalancerRuleCmd.java b/api/src/com/cloud/api/commands/UpdateLoadBalancerRuleCmd.java index a110a8d9af1..8cb2ca52bd3 100644 --- a/api/src/com/cloud/api/commands/UpdateLoadBalancerRuleCmd.java +++ b/api/src/com/cloud/api/commands/UpdateLoadBalancerRuleCmd.java @@ -18,13 +18,13 @@ package com.cloud.api.commands; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseAsyncCmd; -import com.cloud.api.BaseCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseAsyncCmd; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.api.response.LoadBalancerResponse; import com.cloud.event.EventTypes; import com.cloud.network.rules.LoadBalancer; diff --git a/api/src/com/cloud/api/commands/UpdateNetworkCmd.java b/api/src/com/cloud/api/commands/UpdateNetworkCmd.java index 15d8451a81b..c801e8977a0 100644 --- a/api/src/com/cloud/api/commands/UpdateNetworkCmd.java +++ b/api/src/com/cloud/api/commands/UpdateNetworkCmd.java @@ -18,13 +18,13 @@ package com.cloud.api.commands; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseAsyncCmd; -import com.cloud.api.BaseCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseAsyncCmd; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.api.response.NetworkResponse; import com.cloud.event.EventTypes; import com.cloud.exception.ConcurrentOperationException; diff --git a/api/src/com/cloud/api/commands/UpdateNetworkOfferingCmd.java b/api/src/com/cloud/api/commands/UpdateNetworkOfferingCmd.java index c30361944cb..2521dea0fed 100755 --- a/api/src/com/cloud/api/commands/UpdateNetworkOfferingCmd.java +++ b/api/src/com/cloud/api/commands/UpdateNetworkOfferingCmd.java @@ -18,12 +18,12 @@ package com.cloud.api.commands; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.api.response.NetworkOfferingResponse; import com.cloud.offering.NetworkOffering; import com.cloud.user.Account; diff --git a/api/src/com/cloud/api/commands/UpdateNetworkServiceProviderCmd.java b/api/src/com/cloud/api/commands/UpdateNetworkServiceProviderCmd.java index bd52f35c48b..be385232500 100644 --- a/api/src/com/cloud/api/commands/UpdateNetworkServiceProviderCmd.java +++ b/api/src/com/cloud/api/commands/UpdateNetworkServiceProviderCmd.java @@ -20,13 +20,13 @@ import java.util.List; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseAsyncCmd; -import com.cloud.api.BaseCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseAsyncCmd; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.api.response.ProviderResponse; import com.cloud.async.AsyncJob; import com.cloud.event.EventTypes; diff --git a/api/src/com/cloud/api/commands/UpdatePhysicalNetworkCmd.java b/api/src/com/cloud/api/commands/UpdatePhysicalNetworkCmd.java index a6abc039042..19dd9aef7c0 100644 --- a/api/src/com/cloud/api/commands/UpdatePhysicalNetworkCmd.java +++ b/api/src/com/cloud/api/commands/UpdatePhysicalNetworkCmd.java @@ -20,11 +20,11 @@ import java.util.List; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseAsyncCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseAsyncCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; import com.cloud.api.response.PhysicalNetworkResponse; import com.cloud.async.AsyncJob; import com.cloud.event.EventTypes; diff --git a/api/src/com/cloud/api/commands/UpdatePodCmd.java b/api/src/com/cloud/api/commands/UpdatePodCmd.java index f575c7cf1dd..48207b9b665 100755 --- a/api/src/com/cloud/api/commands/UpdatePodCmd.java +++ b/api/src/com/cloud/api/commands/UpdatePodCmd.java @@ -18,12 +18,12 @@ package com.cloud.api.commands; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.api.response.PodResponse; import com.cloud.dc.Pod; import com.cloud.user.Account; diff --git a/api/src/com/cloud/api/commands/UpdatePortForwardingRuleCmd.java b/api/src/com/cloud/api/commands/UpdatePortForwardingRuleCmd.java index 37da43a2200..52668973cb3 100644 --- a/api/src/com/cloud/api/commands/UpdatePortForwardingRuleCmd.java +++ b/api/src/com/cloud/api/commands/UpdatePortForwardingRuleCmd.java @@ -18,11 +18,11 @@ package com.cloud.api.commands; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseAsyncCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseAsyncCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; import com.cloud.api.response.FirewallRuleResponse; import com.cloud.event.EventTypes; import com.cloud.network.IpAddress; diff --git a/api/src/com/cloud/api/commands/UpdateProjectCmd.java b/api/src/com/cloud/api/commands/UpdateProjectCmd.java index 0c90e165d6a..54320d58b4b 100644 --- a/api/src/com/cloud/api/commands/UpdateProjectCmd.java +++ b/api/src/com/cloud/api/commands/UpdateProjectCmd.java @@ -18,13 +18,13 @@ package com.cloud.api.commands; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseAsyncCmd; -import com.cloud.api.BaseCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseAsyncCmd; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.api.response.ProjectResponse; import com.cloud.event.EventTypes; import com.cloud.exception.InvalidParameterValueException; diff --git a/api/src/com/cloud/api/commands/UpdateProjectInvitationCmd.java b/api/src/com/cloud/api/commands/UpdateProjectInvitationCmd.java index 20cb8c1cad3..83aa03d2e86 100644 --- a/api/src/com/cloud/api/commands/UpdateProjectInvitationCmd.java +++ b/api/src/com/cloud/api/commands/UpdateProjectInvitationCmd.java @@ -18,13 +18,13 @@ package com.cloud.api.commands; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseAsyncCmd; -import com.cloud.api.BaseCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseAsyncCmd; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.api.response.SuccessResponse; import com.cloud.event.EventTypes; import com.cloud.user.Account; diff --git a/api/src/com/cloud/api/commands/UpdateResourceCountCmd.java b/api/src/com/cloud/api/commands/UpdateResourceCountCmd.java index 6a71a4c7231..30cc5db218c 100644 --- a/api/src/com/cloud/api/commands/UpdateResourceCountCmd.java +++ b/api/src/com/cloud/api/commands/UpdateResourceCountCmd.java @@ -21,12 +21,12 @@ import java.util.List; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.api.response.ListResponse; import com.cloud.api.response.ResourceCountResponse; import com.cloud.configuration.ResourceCount; diff --git a/api/src/com/cloud/api/commands/UpdateResourceLimitCmd.java b/api/src/com/cloud/api/commands/UpdateResourceLimitCmd.java index 4c2801d4e5b..4459518ce09 100644 --- a/api/src/com/cloud/api/commands/UpdateResourceLimitCmd.java +++ b/api/src/com/cloud/api/commands/UpdateResourceLimitCmd.java @@ -18,12 +18,12 @@ package com.cloud.api.commands; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.api.response.ResourceLimitResponse; import com.cloud.configuration.ResourceLimit; import com.cloud.user.UserContext; diff --git a/api/src/com/cloud/api/commands/UpdateServiceOfferingCmd.java b/api/src/com/cloud/api/commands/UpdateServiceOfferingCmd.java index b7c2cf69fbd..30cecc9a4db 100755 --- a/api/src/com/cloud/api/commands/UpdateServiceOfferingCmd.java +++ b/api/src/com/cloud/api/commands/UpdateServiceOfferingCmd.java @@ -18,12 +18,12 @@ package com.cloud.api.commands; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.api.response.ServiceOfferingResponse; import com.cloud.offering.ServiceOffering; import com.cloud.user.Account; diff --git a/api/src/com/cloud/api/commands/UpdateStorageNetworkIpRangeCmd.java b/api/src/com/cloud/api/commands/UpdateStorageNetworkIpRangeCmd.java index 7e0b05bad23..8d8ace355c3 100755 --- a/api/src/com/cloud/api/commands/UpdateStorageNetworkIpRangeCmd.java +++ b/api/src/com/cloud/api/commands/UpdateStorageNetworkIpRangeCmd.java @@ -18,13 +18,13 @@ package com.cloud.api.commands; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseAsyncCmd; -import com.cloud.api.BaseCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseAsyncCmd; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.api.response.StorageNetworkIpRangeResponse; import com.cloud.dc.StorageNetworkIpRange; import com.cloud.event.EventTypes; diff --git a/api/src/com/cloud/api/commands/UpdateStoragePoolCmd.java b/api/src/com/cloud/api/commands/UpdateStoragePoolCmd.java index 52b5a047dbf..d4c7630c02d 100644 --- a/api/src/com/cloud/api/commands/UpdateStoragePoolCmd.java +++ b/api/src/com/cloud/api/commands/UpdateStoragePoolCmd.java @@ -20,12 +20,12 @@ import java.util.List; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.api.response.StoragePoolResponse; import com.cloud.storage.StoragePool; import com.cloud.user.Account; diff --git a/api/src/com/cloud/api/commands/UpdateTemplateCmd.java b/api/src/com/cloud/api/commands/UpdateTemplateCmd.java index 47440e2b0d7..339fce9f860 100755 --- a/api/src/com/cloud/api/commands/UpdateTemplateCmd.java +++ b/api/src/com/cloud/api/commands/UpdateTemplateCmd.java @@ -18,9 +18,9 @@ package com.cloud.api.commands; import org.apache.log4j.Logger; -import com.cloud.api.BaseCmd; -import com.cloud.api.Implementation; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.api.response.TemplateResponse; import com.cloud.template.VirtualMachineTemplate; import com.cloud.user.Account; diff --git a/api/src/com/cloud/api/commands/UpdateTemplateOrIsoCmd.java b/api/src/com/cloud/api/commands/UpdateTemplateOrIsoCmd.java index 74c1d6e731e..50cf136de87 100755 --- a/api/src/com/cloud/api/commands/UpdateTemplateOrIsoCmd.java +++ b/api/src/com/cloud/api/commands/UpdateTemplateOrIsoCmd.java @@ -18,10 +18,10 @@ package com.cloud.api.commands; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Parameter; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Parameter; public abstract class UpdateTemplateOrIsoCmd extends BaseCmd { public static final Logger s_logger = Logger.getLogger(UpdateIsoCmd.class.getName()); diff --git a/api/src/com/cloud/api/commands/UpdateTemplateOrIsoPermissionsCmd.java b/api/src/com/cloud/api/commands/UpdateTemplateOrIsoPermissionsCmd.java index 38a2e394145..565e0a1fd27 100755 --- a/api/src/com/cloud/api/commands/UpdateTemplateOrIsoPermissionsCmd.java +++ b/api/src/com/cloud/api/commands/UpdateTemplateOrIsoPermissionsCmd.java @@ -20,11 +20,11 @@ import java.util.List; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Parameter; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.api.response.SuccessResponse; import com.cloud.exception.InvalidParameterValueException; diff --git a/api/src/com/cloud/api/commands/UpdateTemplatePermissionsCmd.java b/api/src/com/cloud/api/commands/UpdateTemplatePermissionsCmd.java index b71ed98ab4d..c05e8fff727 100644 --- a/api/src/com/cloud/api/commands/UpdateTemplatePermissionsCmd.java +++ b/api/src/com/cloud/api/commands/UpdateTemplatePermissionsCmd.java @@ -18,7 +18,7 @@ package com.cloud.api.commands; import org.apache.log4j.Logger; -import com.cloud.api.Implementation; +import org.apache.cloudstack.api.Implementation; import com.cloud.api.response.SuccessResponse; import com.cloud.template.VirtualMachineTemplate; import com.cloud.user.Account; diff --git a/api/src/com/cloud/api/commands/UpdateTrafficTypeCmd.java b/api/src/com/cloud/api/commands/UpdateTrafficTypeCmd.java index e23967a173c..edd82f279af 100644 --- a/api/src/com/cloud/api/commands/UpdateTrafficTypeCmd.java +++ b/api/src/com/cloud/api/commands/UpdateTrafficTypeCmd.java @@ -18,13 +18,13 @@ package com.cloud.api.commands; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseAsyncCmd; -import com.cloud.api.BaseCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseAsyncCmd; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.api.response.TrafficTypeResponse; import com.cloud.async.AsyncJob; import com.cloud.event.EventTypes; diff --git a/api/src/com/cloud/api/commands/UpdateUserCmd.java b/api/src/com/cloud/api/commands/UpdateUserCmd.java index 634b5d6cc14..1f2f61d9160 100644 --- a/api/src/com/cloud/api/commands/UpdateUserCmd.java +++ b/api/src/com/cloud/api/commands/UpdateUserCmd.java @@ -18,12 +18,12 @@ package com.cloud.api.commands; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.api.response.UserResponse; import com.cloud.user.Account; import com.cloud.user.User; diff --git a/api/src/com/cloud/api/commands/UpdateVMGroupCmd.java b/api/src/com/cloud/api/commands/UpdateVMGroupCmd.java index 27057d48e73..0dab5a1cf87 100644 --- a/api/src/com/cloud/api/commands/UpdateVMGroupCmd.java +++ b/api/src/com/cloud/api/commands/UpdateVMGroupCmd.java @@ -18,12 +18,12 @@ package com.cloud.api.commands; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.api.response.InstanceGroupResponse; import com.cloud.user.Account; import com.cloud.vm.InstanceGroup; diff --git a/api/src/com/cloud/api/commands/UpdateVPCCmd.java b/api/src/com/cloud/api/commands/UpdateVPCCmd.java index 0331be66bc4..abe66fe8bb1 100644 --- a/api/src/com/cloud/api/commands/UpdateVPCCmd.java +++ b/api/src/com/cloud/api/commands/UpdateVPCCmd.java @@ -18,13 +18,13 @@ package com.cloud.api.commands; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseAsyncCmd; -import com.cloud.api.BaseCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseAsyncCmd; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.api.response.VpcResponse; import com.cloud.event.EventTypes; import com.cloud.network.vpc.Vpc; diff --git a/api/src/com/cloud/api/commands/UpdateVPCOfferingCmd.java b/api/src/com/cloud/api/commands/UpdateVPCOfferingCmd.java index 77f2c030cdb..eb6da59e4f5 100644 --- a/api/src/com/cloud/api/commands/UpdateVPCOfferingCmd.java +++ b/api/src/com/cloud/api/commands/UpdateVPCOfferingCmd.java @@ -18,13 +18,13 @@ package com.cloud.api.commands; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseAsyncCmd; -import com.cloud.api.BaseCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseAsyncCmd; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.api.response.VpcOfferingResponse; import com.cloud.event.EventTypes; import com.cloud.network.vpc.VpcOffering; diff --git a/api/src/com/cloud/api/commands/UpdateZoneCmd.java b/api/src/com/cloud/api/commands/UpdateZoneCmd.java index 1fa0f79da6b..cd9891fa59a 100755 --- a/api/src/com/cloud/api/commands/UpdateZoneCmd.java +++ b/api/src/com/cloud/api/commands/UpdateZoneCmd.java @@ -21,12 +21,12 @@ import java.util.Map; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.api.response.ZoneResponse; import com.cloud.dc.DataCenter; import com.cloud.user.Account; diff --git a/api/src/com/cloud/api/commands/UpgradeRouterCmd.java b/api/src/com/cloud/api/commands/UpgradeRouterCmd.java index a5168761d8f..1b928e0cebf 100644 --- a/api/src/com/cloud/api/commands/UpgradeRouterCmd.java +++ b/api/src/com/cloud/api/commands/UpgradeRouterCmd.java @@ -18,12 +18,12 @@ package com.cloud.api.commands; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.api.response.DomainRouterResponse; import com.cloud.network.router.VirtualRouter; import com.cloud.user.Account; diff --git a/api/src/com/cloud/api/commands/UpgradeSystemVMCmd.java b/api/src/com/cloud/api/commands/UpgradeSystemVMCmd.java index a36844aeb3b..0b46048031f 100644 --- a/api/src/com/cloud/api/commands/UpgradeSystemVMCmd.java +++ b/api/src/com/cloud/api/commands/UpgradeSystemVMCmd.java @@ -16,14 +16,15 @@ // under the License. package com.cloud.api.commands; +import org.apache.cloudstack.api.user.vm.command.UpgradeVMCmd; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.api.response.SystemVmResponse; import com.cloud.exception.InvalidParameterValueException; import com.cloud.offering.ServiceOffering; diff --git a/api/src/com/cloud/api/commands/UploadCustomCertificateCmd.java b/api/src/com/cloud/api/commands/UploadCustomCertificateCmd.java index d6eca303910..38f1ff242d8 100644 --- a/api/src/com/cloud/api/commands/UploadCustomCertificateCmd.java +++ b/api/src/com/cloud/api/commands/UploadCustomCertificateCmd.java @@ -18,12 +18,12 @@ package com.cloud.api.commands; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseAsyncCmd; -import com.cloud.api.BaseCmd; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseAsyncCmd; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.api.response.CustomCertificateResponse; import com.cloud.event.EventTypes; import com.cloud.user.Account; diff --git a/api/src/com/cloud/api/commands/UploadVolumeCmd.java b/api/src/com/cloud/api/commands/UploadVolumeCmd.java index 299b04df386..b67c0c7d1f2 100755 --- a/api/src/com/cloud/api/commands/UploadVolumeCmd.java +++ b/api/src/com/cloud/api/commands/UploadVolumeCmd.java @@ -1,32 +1,32 @@ -// 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. +// 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.commands; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseAsyncCmd; -import com.cloud.api.BaseCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseAsyncCmd; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.api.response.VolumeResponse; -import com.cloud.event.EventTypes; +import com.cloud.event.EventTypes; import com.cloud.exception.ConcurrentOperationException; import com.cloud.exception.InsufficientCapacityException; import com.cloud.exception.NetworkRuleConflictException; diff --git a/api/src/com/cloud/api/commands/listStorageNetworkIpRangeCmd.java b/api/src/com/cloud/api/commands/listStorageNetworkIpRangeCmd.java index f0b3a53fcb1..fa7d99bf8f9 100755 --- a/api/src/com/cloud/api/commands/listStorageNetworkIpRangeCmd.java +++ b/api/src/com/cloud/api/commands/listStorageNetworkIpRangeCmd.java @@ -21,13 +21,13 @@ import java.util.List; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseCmd; -import com.cloud.api.BaseListCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.BaseListCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.api.response.ListResponse; import com.cloud.api.response.StorageNetworkIpRangeResponse; import com.cloud.dc.StorageNetworkIpRange; diff --git a/api/src/com/cloud/api/response/AccountResponse.java b/api/src/com/cloud/api/response/AccountResponse.java index dd69024dfbe..5a3a9288ee8 100755 --- a/api/src/com/cloud/api/response/AccountResponse.java +++ b/api/src/com/cloud/api/response/AccountResponse.java @@ -19,7 +19,7 @@ package com.cloud.api.response; import java.util.List; import java.util.Map; -import com.cloud.api.ApiConstants; +import org.apache.cloudstack.api.ApiConstants; import com.cloud.serializer.Param; import com.cloud.utils.IdentityProxy; import com.google.gson.annotations.SerializedName; diff --git a/api/src/com/cloud/api/response/AlertResponse.java b/api/src/com/cloud/api/response/AlertResponse.java index ab1101ed733..dc97dc8a8dd 100644 --- a/api/src/com/cloud/api/response/AlertResponse.java +++ b/api/src/com/cloud/api/response/AlertResponse.java @@ -18,7 +18,7 @@ package com.cloud.api.response; import java.util.Date; -import com.cloud.api.ApiConstants; +import org.apache.cloudstack.api.ApiConstants; import com.cloud.utils.IdentityProxy; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; diff --git a/api/src/com/cloud/api/response/AsyncJobResponse.java b/api/src/com/cloud/api/response/AsyncJobResponse.java index 45aee122cdb..ba76522ac9f 100644 --- a/api/src/com/cloud/api/response/AsyncJobResponse.java +++ b/api/src/com/cloud/api/response/AsyncJobResponse.java @@ -18,8 +18,8 @@ package com.cloud.api.response; import java.util.Date; -import com.cloud.api.ApiConstants; -import com.cloud.api.ResponseObject; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ResponseObject; import com.cloud.async.AsyncJob; import com.cloud.serializer.Param; import com.cloud.utils.IdentityProxy; diff --git a/api/src/com/cloud/api/response/AutoScalePolicyResponse.java b/api/src/com/cloud/api/response/AutoScalePolicyResponse.java index 2fa3ad312fc..52a2f93ef94 100644 --- a/api/src/com/cloud/api/response/AutoScalePolicyResponse.java +++ b/api/src/com/cloud/api/response/AutoScalePolicyResponse.java @@ -1,22 +1,22 @@ -// 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. +// 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; -import com.cloud.api.ApiConstants; +import org.apache.cloudstack.api.ApiConstants; import com.cloud.utils.IdentityProxy; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; diff --git a/api/src/com/cloud/api/response/AutoScaleVmGroupResponse.java b/api/src/com/cloud/api/response/AutoScaleVmGroupResponse.java index d0d249d6f71..e3955778575 100644 --- a/api/src/com/cloud/api/response/AutoScaleVmGroupResponse.java +++ b/api/src/com/cloud/api/response/AutoScaleVmGroupResponse.java @@ -1,22 +1,22 @@ -// 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. +// 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; -import com.cloud.api.ApiConstants; +import org.apache.cloudstack.api.ApiConstants; import com.cloud.utils.IdentityProxy; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; diff --git a/api/src/com/cloud/api/response/AutoScaleVmProfileResponse.java b/api/src/com/cloud/api/response/AutoScaleVmProfileResponse.java index 08d95261715..1d0525b475f 100644 --- a/api/src/com/cloud/api/response/AutoScaleVmProfileResponse.java +++ b/api/src/com/cloud/api/response/AutoScaleVmProfileResponse.java @@ -1,28 +1,28 @@ -// 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. +// 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; import java.util.HashMap; import java.util.List; import java.util.Map; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseCmd.CommandType; -import com.cloud.api.Parameter; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseCmd.CommandType; +import org.apache.cloudstack.api.Parameter; import com.cloud.serializer.Param; import com.cloud.utils.IdentityProxy; import com.cloud.utils.Pair; diff --git a/api/src/com/cloud/api/response/BaseResponse.java b/api/src/com/cloud/api/response/BaseResponse.java index e343a104887..e873d4c0ae3 100755 --- a/api/src/com/cloud/api/response/BaseResponse.java +++ b/api/src/com/cloud/api/response/BaseResponse.java @@ -16,9 +16,9 @@ // under the License. package com.cloud.api.response; -import com.cloud.api.ApiConstants; +import org.apache.cloudstack.api.ApiConstants; import com.cloud.utils.IdentityProxy; -import com.cloud.api.ResponseObject; +import org.apache.cloudstack.api.ResponseObject; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; diff --git a/api/src/com/cloud/api/response/CapabilitiesResponse.java b/api/src/com/cloud/api/response/CapabilitiesResponse.java index 4d98e173469..85c97b22308 100644 --- a/api/src/com/cloud/api/response/CapabilitiesResponse.java +++ b/api/src/com/cloud/api/response/CapabilitiesResponse.java @@ -16,7 +16,7 @@ // under the License. package com.cloud.api.response; -import com.cloud.api.ApiConstants; +import org.apache.cloudstack.api.ApiConstants; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; diff --git a/api/src/com/cloud/api/response/CapabilityResponse.java b/api/src/com/cloud/api/response/CapabilityResponse.java index 0281c180452..9875fe0f60b 100644 --- a/api/src/com/cloud/api/response/CapabilityResponse.java +++ b/api/src/com/cloud/api/response/CapabilityResponse.java @@ -16,7 +16,7 @@ // under the License. package com.cloud.api.response; -import com.cloud.api.ApiConstants; +import org.apache.cloudstack.api.ApiConstants; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; diff --git a/api/src/com/cloud/api/response/CapacityResponse.java b/api/src/com/cloud/api/response/CapacityResponse.java index d38d9ad0746..d5ff3ebd3f3 100755 --- a/api/src/com/cloud/api/response/CapacityResponse.java +++ b/api/src/com/cloud/api/response/CapacityResponse.java @@ -16,7 +16,7 @@ // under the License. package com.cloud.api.response; -import com.cloud.api.ApiConstants; +import org.apache.cloudstack.api.ApiConstants; import com.cloud.utils.IdentityProxy; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; diff --git a/api/src/com/cloud/api/response/CloudIdentifierResponse.java b/api/src/com/cloud/api/response/CloudIdentifierResponse.java index 11d2b0be7d8..91f4d59ab05 100644 --- a/api/src/com/cloud/api/response/CloudIdentifierResponse.java +++ b/api/src/com/cloud/api/response/CloudIdentifierResponse.java @@ -16,7 +16,7 @@ // under the License. package com.cloud.api.response; -import com.cloud.api.ApiConstants; +import org.apache.cloudstack.api.ApiConstants; import com.cloud.utils.IdentityProxy; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; diff --git a/api/src/com/cloud/api/response/ClusterResponse.java b/api/src/com/cloud/api/response/ClusterResponse.java index a32fd23dcb5..3c0049696bc 100755 --- a/api/src/com/cloud/api/response/ClusterResponse.java +++ b/api/src/com/cloud/api/response/ClusterResponse.java @@ -19,7 +19,7 @@ package com.cloud.api.response; import java.util.ArrayList; import java.util.List; -import com.cloud.api.ApiConstants; +import org.apache.cloudstack.api.ApiConstants; import com.cloud.utils.IdentityProxy; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; diff --git a/api/src/com/cloud/api/response/ConditionResponse.java b/api/src/com/cloud/api/response/ConditionResponse.java index a68e17935e0..3f846ed54c2 100644 --- a/api/src/com/cloud/api/response/ConditionResponse.java +++ b/api/src/com/cloud/api/response/ConditionResponse.java @@ -19,7 +19,7 @@ package com.cloud.api.response; import java.util.List; -import com.cloud.api.ApiConstants; +import org.apache.cloudstack.api.ApiConstants; import com.cloud.serializer.Param; import com.cloud.utils.IdentityProxy; import com.google.gson.annotations.SerializedName; diff --git a/api/src/com/cloud/api/response/ConfigurationResponse.java b/api/src/com/cloud/api/response/ConfigurationResponse.java index bcfac826cb6..9a21f00ae04 100644 --- a/api/src/com/cloud/api/response/ConfigurationResponse.java +++ b/api/src/com/cloud/api/response/ConfigurationResponse.java @@ -16,7 +16,7 @@ // under the License. package com.cloud.api.response; -import com.cloud.api.ApiConstants; +import org.apache.cloudstack.api.ApiConstants; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; diff --git a/api/src/com/cloud/api/response/CounterResponse.java b/api/src/com/cloud/api/response/CounterResponse.java index c005f13824e..3aca3fcd90f 100644 --- a/api/src/com/cloud/api/response/CounterResponse.java +++ b/api/src/com/cloud/api/response/CounterResponse.java @@ -17,7 +17,7 @@ package com.cloud.api.response; -import com.cloud.api.ApiConstants; +import org.apache.cloudstack.api.ApiConstants; import com.cloud.serializer.Param; import com.cloud.utils.IdentityProxy; import com.google.gson.annotations.SerializedName; diff --git a/api/src/com/cloud/api/response/CreateCmdResponse.java b/api/src/com/cloud/api/response/CreateCmdResponse.java index 5fa3b38ab31..66f4923900d 100644 --- a/api/src/com/cloud/api/response/CreateCmdResponse.java +++ b/api/src/com/cloud/api/response/CreateCmdResponse.java @@ -16,7 +16,7 @@ // under the License. package com.cloud.api.response; -import com.cloud.api.ApiConstants; +import org.apache.cloudstack.api.ApiConstants; import com.cloud.utils.IdentityProxy; import com.google.gson.annotations.SerializedName; diff --git a/api/src/com/cloud/api/response/DiskOfferingResponse.java b/api/src/com/cloud/api/response/DiskOfferingResponse.java index 9b37431df94..c267f6ccb91 100644 --- a/api/src/com/cloud/api/response/DiskOfferingResponse.java +++ b/api/src/com/cloud/api/response/DiskOfferingResponse.java @@ -18,7 +18,7 @@ package com.cloud.api.response; import java.util.Date; -import com.cloud.api.ApiConstants; +import org.apache.cloudstack.api.ApiConstants; import com.cloud.utils.IdentityProxy; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; diff --git a/api/src/com/cloud/api/response/DomainResponse.java b/api/src/com/cloud/api/response/DomainResponse.java index 52ba884ff55..90997be5f0e 100644 --- a/api/src/com/cloud/api/response/DomainResponse.java +++ b/api/src/com/cloud/api/response/DomainResponse.java @@ -16,7 +16,7 @@ // under the License. package com.cloud.api.response; -import com.cloud.api.ApiConstants; +import org.apache.cloudstack.api.ApiConstants; import com.cloud.utils.IdentityProxy; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; diff --git a/api/src/com/cloud/api/response/DomainRouterResponse.java b/api/src/com/cloud/api/response/DomainRouterResponse.java index d710aadb2e7..c284982e90b 100644 --- a/api/src/com/cloud/api/response/DomainRouterResponse.java +++ b/api/src/com/cloud/api/response/DomainRouterResponse.java @@ -19,7 +19,7 @@ package com.cloud.api.response; import java.util.Date; import java.util.List; -import com.cloud.api.ApiConstants; +import org.apache.cloudstack.api.ApiConstants; import com.cloud.serializer.Param; import com.cloud.utils.IdentityProxy; import com.cloud.vm.VirtualMachine.State; diff --git a/api/src/com/cloud/api/response/EventResponse.java b/api/src/com/cloud/api/response/EventResponse.java index 61292214fee..dd1dc0414cd 100644 --- a/api/src/com/cloud/api/response/EventResponse.java +++ b/api/src/com/cloud/api/response/EventResponse.java @@ -18,7 +18,7 @@ package com.cloud.api.response; import java.util.Date; -import com.cloud.api.ApiConstants; +import org.apache.cloudstack.api.ApiConstants; import com.cloud.utils.IdentityProxy; import com.cloud.event.Event; import com.cloud.serializer.Param; diff --git a/api/src/com/cloud/api/response/EventTypeResponse.java b/api/src/com/cloud/api/response/EventTypeResponse.java index 9f6f84f4840..72adcd8f215 100644 --- a/api/src/com/cloud/api/response/EventTypeResponse.java +++ b/api/src/com/cloud/api/response/EventTypeResponse.java @@ -16,7 +16,7 @@ // under the License. package com.cloud.api.response; -import com.cloud.api.ApiConstants; +import org.apache.cloudstack.api.ApiConstants; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; diff --git a/api/src/com/cloud/api/response/ExtractResponse.java b/api/src/com/cloud/api/response/ExtractResponse.java index b285b454cc1..9f4cf6a3c09 100755 --- a/api/src/com/cloud/api/response/ExtractResponse.java +++ b/api/src/com/cloud/api/response/ExtractResponse.java @@ -18,7 +18,7 @@ package com.cloud.api.response; import java.util.Date; -import com.cloud.api.ApiConstants; +import org.apache.cloudstack.api.ApiConstants; import com.cloud.utils.IdentityProxy; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; diff --git a/api/src/com/cloud/api/response/FirewallResponse.java b/api/src/com/cloud/api/response/FirewallResponse.java index bcb78e2f8f6..c3d2f755412 100644 --- a/api/src/com/cloud/api/response/FirewallResponse.java +++ b/api/src/com/cloud/api/response/FirewallResponse.java @@ -18,7 +18,7 @@ package com.cloud.api.response; import java.util.List; -import com.cloud.api.ApiConstants; +import org.apache.cloudstack.api.ApiConstants; import com.cloud.serializer.Param; import com.cloud.utils.IdentityProxy; import com.google.gson.annotations.SerializedName; diff --git a/api/src/com/cloud/api/response/FirewallRuleResponse.java b/api/src/com/cloud/api/response/FirewallRuleResponse.java index 252ad0dafe6..4c1ffb5a7f4 100644 --- a/api/src/com/cloud/api/response/FirewallRuleResponse.java +++ b/api/src/com/cloud/api/response/FirewallRuleResponse.java @@ -18,7 +18,7 @@ package com.cloud.api.response; import java.util.List; -import com.cloud.api.ApiConstants; +import org.apache.cloudstack.api.ApiConstants; import com.cloud.serializer.Param; import com.cloud.utils.IdentityProxy; import com.google.gson.annotations.SerializedName; diff --git a/api/src/com/cloud/api/response/GuestOSCategoryResponse.java b/api/src/com/cloud/api/response/GuestOSCategoryResponse.java index 9e98f3e2e3e..f458abaa450 100644 --- a/api/src/com/cloud/api/response/GuestOSCategoryResponse.java +++ b/api/src/com/cloud/api/response/GuestOSCategoryResponse.java @@ -16,7 +16,7 @@ // under the License. package com.cloud.api.response; -import com.cloud.api.ApiConstants; +import org.apache.cloudstack.api.ApiConstants; import com.cloud.utils.IdentityProxy; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; diff --git a/api/src/com/cloud/api/response/GuestOSResponse.java b/api/src/com/cloud/api/response/GuestOSResponse.java index 8efa8d8f4eb..c747df4e735 100644 --- a/api/src/com/cloud/api/response/GuestOSResponse.java +++ b/api/src/com/cloud/api/response/GuestOSResponse.java @@ -16,7 +16,7 @@ // under the License. package com.cloud.api.response; -import com.cloud.api.ApiConstants; +import org.apache.cloudstack.api.ApiConstants; import com.cloud.utils.IdentityProxy; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; diff --git a/api/src/com/cloud/api/response/HostResponse.java b/api/src/com/cloud/api/response/HostResponse.java index 52c96fb0482..a593cdf80c2 100755 --- a/api/src/com/cloud/api/response/HostResponse.java +++ b/api/src/com/cloud/api/response/HostResponse.java @@ -18,7 +18,7 @@ package com.cloud.api.response; import java.util.Date; -import com.cloud.api.ApiConstants; +import org.apache.cloudstack.api.ApiConstants; import com.cloud.utils.IdentityProxy; import com.cloud.host.Host; import com.cloud.host.Status; diff --git a/api/src/com/cloud/api/response/HypervisorCapabilitiesResponse.java b/api/src/com/cloud/api/response/HypervisorCapabilitiesResponse.java index 4c3ea44c6c2..d06cceaece9 100644 --- a/api/src/com/cloud/api/response/HypervisorCapabilitiesResponse.java +++ b/api/src/com/cloud/api/response/HypervisorCapabilitiesResponse.java @@ -16,7 +16,7 @@ // under the License. package com.cloud.api.response; -import com.cloud.api.ApiConstants; +import org.apache.cloudstack.api.ApiConstants; import com.cloud.utils.IdentityProxy; import com.cloud.hypervisor.Hypervisor.HypervisorType; import com.cloud.serializer.Param; diff --git a/api/src/com/cloud/api/response/HypervisorResponse.java b/api/src/com/cloud/api/response/HypervisorResponse.java index c3ce693f647..1270a58e031 100644 --- a/api/src/com/cloud/api/response/HypervisorResponse.java +++ b/api/src/com/cloud/api/response/HypervisorResponse.java @@ -16,7 +16,7 @@ // under the License. package com.cloud.api.response; -import com.cloud.api.ApiConstants; +import org.apache.cloudstack.api.ApiConstants; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; diff --git a/api/src/com/cloud/api/response/IPAddressResponse.java b/api/src/com/cloud/api/response/IPAddressResponse.java index ea5b793b7fb..fb89bec8f21 100644 --- a/api/src/com/cloud/api/response/IPAddressResponse.java +++ b/api/src/com/cloud/api/response/IPAddressResponse.java @@ -19,7 +19,7 @@ package com.cloud.api.response; import java.util.Date; import java.util.List; -import com.cloud.api.ApiConstants; +import org.apache.cloudstack.api.ApiConstants; import com.cloud.serializer.Param; import com.cloud.utils.IdentityProxy; import com.google.gson.annotations.SerializedName; diff --git a/api/src/com/cloud/api/response/InstanceGroupResponse.java b/api/src/com/cloud/api/response/InstanceGroupResponse.java index 3b1e3585934..18607c7cf1c 100644 --- a/api/src/com/cloud/api/response/InstanceGroupResponse.java +++ b/api/src/com/cloud/api/response/InstanceGroupResponse.java @@ -18,7 +18,7 @@ package com.cloud.api.response; import java.util.Date; -import com.cloud.api.ApiConstants; +import org.apache.cloudstack.api.ApiConstants; import com.cloud.utils.IdentityProxy; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; diff --git a/api/src/com/cloud/api/response/IpForwardingRuleResponse.java b/api/src/com/cloud/api/response/IpForwardingRuleResponse.java index 2017a3feac8..87e95900263 100644 --- a/api/src/com/cloud/api/response/IpForwardingRuleResponse.java +++ b/api/src/com/cloud/api/response/IpForwardingRuleResponse.java @@ -16,7 +16,7 @@ // under the License. package com.cloud.api.response; -import com.cloud.api.ApiConstants; +import org.apache.cloudstack.api.ApiConstants; import com.cloud.utils.IdentityProxy; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; diff --git a/api/src/com/cloud/api/response/LBStickinessResponse.java b/api/src/com/cloud/api/response/LBStickinessResponse.java index 278fdf3bc03..8a66c8979d7 100644 --- a/api/src/com/cloud/api/response/LBStickinessResponse.java +++ b/api/src/com/cloud/api/response/LBStickinessResponse.java @@ -16,7 +16,7 @@ // under the License. package com.cloud.api.response; -import com.cloud.api.ApiConstants; +import org.apache.cloudstack.api.ApiConstants; import com.cloud.utils.IdentityProxy; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; diff --git a/api/src/com/cloud/api/response/LDAPConfigResponse.java b/api/src/com/cloud/api/response/LDAPConfigResponse.java index 3e56c9566a3..cf62698c1b4 100644 --- a/api/src/com/cloud/api/response/LDAPConfigResponse.java +++ b/api/src/com/cloud/api/response/LDAPConfigResponse.java @@ -16,7 +16,7 @@ // under the License. package com.cloud.api.response; -import com.cloud.api.ApiConstants; +import org.apache.cloudstack.api.ApiConstants; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; diff --git a/api/src/com/cloud/api/response/ListResponse.java b/api/src/com/cloud/api/response/ListResponse.java index ebba4020ccb..3cf98608464 100644 --- a/api/src/com/cloud/api/response/ListResponse.java +++ b/api/src/com/cloud/api/response/ListResponse.java @@ -18,7 +18,7 @@ package com.cloud.api.response; import java.util.List; -import com.cloud.api.ResponseObject; +import org.apache.cloudstack.api.ResponseObject; public class ListResponse extends BaseResponse { List responses; diff --git a/api/src/com/cloud/api/response/LoadBalancerResponse.java b/api/src/com/cloud/api/response/LoadBalancerResponse.java index 016bccc7188..a4ad57a3b06 100644 --- a/api/src/com/cloud/api/response/LoadBalancerResponse.java +++ b/api/src/com/cloud/api/response/LoadBalancerResponse.java @@ -18,7 +18,7 @@ package com.cloud.api.response; import java.util.List; -import com.cloud.api.ApiConstants; +import org.apache.cloudstack.api.ApiConstants; import com.cloud.serializer.Param; import com.cloud.utils.IdentityProxy; import com.google.gson.annotations.SerializedName; diff --git a/api/src/com/cloud/api/response/NetworkACLResponse.java b/api/src/com/cloud/api/response/NetworkACLResponse.java index 10f312b7631..fcd40d16152 100644 --- a/api/src/com/cloud/api/response/NetworkACLResponse.java +++ b/api/src/com/cloud/api/response/NetworkACLResponse.java @@ -18,7 +18,7 @@ package com.cloud.api.response; import java.util.List; -import com.cloud.api.ApiConstants; +import org.apache.cloudstack.api.ApiConstants; import com.cloud.serializer.Param; import com.cloud.utils.IdentityProxy; import com.google.gson.annotations.SerializedName; diff --git a/api/src/com/cloud/api/response/NetworkOfferingResponse.java b/api/src/com/cloud/api/response/NetworkOfferingResponse.java index 4b8abf921fa..310afe9cbfe 100644 --- a/api/src/com/cloud/api/response/NetworkOfferingResponse.java +++ b/api/src/com/cloud/api/response/NetworkOfferingResponse.java @@ -19,7 +19,7 @@ package com.cloud.api.response; import java.util.Date; import java.util.List; -import com.cloud.api.ApiConstants; +import org.apache.cloudstack.api.ApiConstants; import com.cloud.utils.IdentityProxy; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; diff --git a/api/src/com/cloud/api/response/NetworkResponse.java b/api/src/com/cloud/api/response/NetworkResponse.java index 0917cfafdef..9cf27db17a3 100644 --- a/api/src/com/cloud/api/response/NetworkResponse.java +++ b/api/src/com/cloud/api/response/NetworkResponse.java @@ -18,7 +18,7 @@ package com.cloud.api.response; import java.util.List; -import com.cloud.api.ApiConstants; +import org.apache.cloudstack.api.ApiConstants; import com.cloud.utils.IdentityProxy; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; diff --git a/api/src/com/cloud/api/response/NicResponse.java b/api/src/com/cloud/api/response/NicResponse.java index 69d5c31f66c..e02256d358e 100755 --- a/api/src/com/cloud/api/response/NicResponse.java +++ b/api/src/com/cloud/api/response/NicResponse.java @@ -16,7 +16,7 @@ // under the License. package com.cloud.api.response; -import com.cloud.api.ApiConstants; +import org.apache.cloudstack.api.ApiConstants; import com.cloud.utils.IdentityProxy; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; diff --git a/api/src/com/cloud/api/response/PhysicalNetworkResponse.java b/api/src/com/cloud/api/response/PhysicalNetworkResponse.java index 72f10755371..a9ba43517b2 100644 --- a/api/src/com/cloud/api/response/PhysicalNetworkResponse.java +++ b/api/src/com/cloud/api/response/PhysicalNetworkResponse.java @@ -18,7 +18,7 @@ package com.cloud.api.response; import java.util.List; -import com.cloud.api.ApiConstants; +import org.apache.cloudstack.api.ApiConstants; import com.cloud.utils.IdentityProxy; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; diff --git a/api/src/com/cloud/api/response/PodResponse.java b/api/src/com/cloud/api/response/PodResponse.java index df4a70f0970..b2c44e110e4 100755 --- a/api/src/com/cloud/api/response/PodResponse.java +++ b/api/src/com/cloud/api/response/PodResponse.java @@ -18,7 +18,7 @@ package com.cloud.api.response; import java.util.List; -import com.cloud.api.ApiConstants; +import org.apache.cloudstack.api.ApiConstants; import com.cloud.utils.IdentityProxy; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; diff --git a/api/src/com/cloud/api/response/PrivateGatewayResponse.java b/api/src/com/cloud/api/response/PrivateGatewayResponse.java index e901a70933f..97df61d63a7 100644 --- a/api/src/com/cloud/api/response/PrivateGatewayResponse.java +++ b/api/src/com/cloud/api/response/PrivateGatewayResponse.java @@ -15,7 +15,7 @@ // specific language governing permissions and limitations // under the License. package com.cloud.api.response; -import com.cloud.api.ApiConstants; +import org.apache.cloudstack.api.ApiConstants; import com.cloud.serializer.Param; import com.cloud.utils.IdentityProxy; import com.google.gson.annotations.SerializedName; diff --git a/api/src/com/cloud/api/response/ProjectAccountResponse.java b/api/src/com/cloud/api/response/ProjectAccountResponse.java index e613466634a..61fb7f31aca 100644 --- a/api/src/com/cloud/api/response/ProjectAccountResponse.java +++ b/api/src/com/cloud/api/response/ProjectAccountResponse.java @@ -18,7 +18,7 @@ package com.cloud.api.response; import java.util.List; -import com.cloud.api.ApiConstants; +import org.apache.cloudstack.api.ApiConstants; import com.cloud.utils.IdentityProxy; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; diff --git a/api/src/com/cloud/api/response/ProjectInvitationResponse.java b/api/src/com/cloud/api/response/ProjectInvitationResponse.java index abb47a7a664..5f10251f7fc 100644 --- a/api/src/com/cloud/api/response/ProjectInvitationResponse.java +++ b/api/src/com/cloud/api/response/ProjectInvitationResponse.java @@ -16,7 +16,7 @@ // under the License. package com.cloud.api.response; -import com.cloud.api.ApiConstants; +import org.apache.cloudstack.api.ApiConstants; import com.cloud.utils.IdentityProxy; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; diff --git a/api/src/com/cloud/api/response/ProjectResponse.java b/api/src/com/cloud/api/response/ProjectResponse.java index 2735980a6e4..8600dafab61 100644 --- a/api/src/com/cloud/api/response/ProjectResponse.java +++ b/api/src/com/cloud/api/response/ProjectResponse.java @@ -18,7 +18,7 @@ package com.cloud.api.response; import java.util.List; -import com.cloud.api.ApiConstants; +import org.apache.cloudstack.api.ApiConstants; import com.cloud.serializer.Param; import com.cloud.utils.IdentityProxy; import com.google.gson.annotations.SerializedName; diff --git a/api/src/com/cloud/api/response/ProviderResponse.java b/api/src/com/cloud/api/response/ProviderResponse.java index d8a5eb6bd62..28e0a85457e 100644 --- a/api/src/com/cloud/api/response/ProviderResponse.java +++ b/api/src/com/cloud/api/response/ProviderResponse.java @@ -18,7 +18,7 @@ package com.cloud.api.response; import java.util.List; -import com.cloud.api.ApiConstants; +import org.apache.cloudstack.api.ApiConstants; import com.cloud.utils.IdentityProxy; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; diff --git a/api/src/com/cloud/api/response/RemoteAccessVpnResponse.java b/api/src/com/cloud/api/response/RemoteAccessVpnResponse.java index c6fe4d43fb6..40f0f3f2062 100644 --- a/api/src/com/cloud/api/response/RemoteAccessVpnResponse.java +++ b/api/src/com/cloud/api/response/RemoteAccessVpnResponse.java @@ -16,7 +16,7 @@ // under the License. package com.cloud.api.response; -import com.cloud.api.ApiConstants; +import org.apache.cloudstack.api.ApiConstants; import com.cloud.utils.IdentityProxy; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; diff --git a/api/src/com/cloud/api/response/ResourceCountResponse.java b/api/src/com/cloud/api/response/ResourceCountResponse.java index 73fe44fe92d..afd4d21a66b 100644 --- a/api/src/com/cloud/api/response/ResourceCountResponse.java +++ b/api/src/com/cloud/api/response/ResourceCountResponse.java @@ -16,7 +16,7 @@ // under the License. package com.cloud.api.response; -import com.cloud.api.ApiConstants; +import org.apache.cloudstack.api.ApiConstants; import com.cloud.utils.IdentityProxy; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; diff --git a/api/src/com/cloud/api/response/ResourceLimitResponse.java b/api/src/com/cloud/api/response/ResourceLimitResponse.java index f41feca554a..7ba4ffdab61 100644 --- a/api/src/com/cloud/api/response/ResourceLimitResponse.java +++ b/api/src/com/cloud/api/response/ResourceLimitResponse.java @@ -16,7 +16,7 @@ // under the License. package com.cloud.api.response; -import com.cloud.api.ApiConstants; +import org.apache.cloudstack.api.ApiConstants; import com.cloud.utils.IdentityProxy; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; diff --git a/api/src/com/cloud/api/response/ResourceTagResponse.java b/api/src/com/cloud/api/response/ResourceTagResponse.java index 13566a73732..d60b069308a 100644 --- a/api/src/com/cloud/api/response/ResourceTagResponse.java +++ b/api/src/com/cloud/api/response/ResourceTagResponse.java @@ -16,7 +16,7 @@ // under the License. package com.cloud.api.response; -import com.cloud.api.ApiConstants; +import org.apache.cloudstack.api.ApiConstants; import com.cloud.serializer.Param; import com.cloud.utils.IdentityProxy; import com.google.gson.annotations.SerializedName; diff --git a/api/src/com/cloud/api/response/SSHKeyPairResponse.java b/api/src/com/cloud/api/response/SSHKeyPairResponse.java index 16a29974338..45b8cd436ac 100644 --- a/api/src/com/cloud/api/response/SSHKeyPairResponse.java +++ b/api/src/com/cloud/api/response/SSHKeyPairResponse.java @@ -16,7 +16,7 @@ // under the License. package com.cloud.api.response; -import com.cloud.api.ApiConstants; +import org.apache.cloudstack.api.ApiConstants; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; diff --git a/api/src/com/cloud/api/response/SecurityGroupResponse.java b/api/src/com/cloud/api/response/SecurityGroupResponse.java index 5c6deedfb34..6846187e214 100644 --- a/api/src/com/cloud/api/response/SecurityGroupResponse.java +++ b/api/src/com/cloud/api/response/SecurityGroupResponse.java @@ -18,7 +18,7 @@ package com.cloud.api.response; import java.util.List; -import com.cloud.api.ApiConstants; +import org.apache.cloudstack.api.ApiConstants; import com.cloud.serializer.Param; import com.cloud.utils.IdentityProxy; import com.google.gson.annotations.SerializedName; diff --git a/api/src/com/cloud/api/response/SecurityGroupRuleResponse.java b/api/src/com/cloud/api/response/SecurityGroupRuleResponse.java index f55b810ac33..abc3dea200d 100644 --- a/api/src/com/cloud/api/response/SecurityGroupRuleResponse.java +++ b/api/src/com/cloud/api/response/SecurityGroupRuleResponse.java @@ -16,7 +16,7 @@ // under the License. package com.cloud.api.response; -import com.cloud.api.ApiConstants; +import org.apache.cloudstack.api.ApiConstants; import com.cloud.utils.IdentityProxy; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; diff --git a/api/src/com/cloud/api/response/ServiceOfferingResponse.java b/api/src/com/cloud/api/response/ServiceOfferingResponse.java index fe0efc07df9..3f1235010ef 100644 --- a/api/src/com/cloud/api/response/ServiceOfferingResponse.java +++ b/api/src/com/cloud/api/response/ServiceOfferingResponse.java @@ -18,7 +18,7 @@ package com.cloud.api.response; import java.util.Date; -import com.cloud.api.ApiConstants; +import org.apache.cloudstack.api.ApiConstants; import com.cloud.utils.IdentityProxy; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; diff --git a/api/src/com/cloud/api/response/ServiceResponse.java b/api/src/com/cloud/api/response/ServiceResponse.java index 3c73e927053..7e72b51b734 100644 --- a/api/src/com/cloud/api/response/ServiceResponse.java +++ b/api/src/com/cloud/api/response/ServiceResponse.java @@ -18,7 +18,7 @@ package com.cloud.api.response; import java.util.List; -import com.cloud.api.ApiConstants; +import org.apache.cloudstack.api.ApiConstants; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; diff --git a/api/src/com/cloud/api/response/Site2SiteCustomerGatewayResponse.java b/api/src/com/cloud/api/response/Site2SiteCustomerGatewayResponse.java index 7c706f3452a..b17a46d1ff3 100644 --- a/api/src/com/cloud/api/response/Site2SiteCustomerGatewayResponse.java +++ b/api/src/com/cloud/api/response/Site2SiteCustomerGatewayResponse.java @@ -18,7 +18,7 @@ package com.cloud.api.response; import java.util.Date; -import com.cloud.api.ApiConstants; +import org.apache.cloudstack.api.ApiConstants; import com.cloud.utils.IdentityProxy; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; diff --git a/api/src/com/cloud/api/response/Site2SiteVpnConnectionResponse.java b/api/src/com/cloud/api/response/Site2SiteVpnConnectionResponse.java index 1af50178172..86a7f3162b3 100644 --- a/api/src/com/cloud/api/response/Site2SiteVpnConnectionResponse.java +++ b/api/src/com/cloud/api/response/Site2SiteVpnConnectionResponse.java @@ -18,7 +18,7 @@ package com.cloud.api.response; import java.util.Date; -import com.cloud.api.ApiConstants; +import org.apache.cloudstack.api.ApiConstants; import com.cloud.utils.IdentityProxy; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; diff --git a/api/src/com/cloud/api/response/Site2SiteVpnGatewayResponse.java b/api/src/com/cloud/api/response/Site2SiteVpnGatewayResponse.java index b1eaffdced6..a7b9c32e197 100644 --- a/api/src/com/cloud/api/response/Site2SiteVpnGatewayResponse.java +++ b/api/src/com/cloud/api/response/Site2SiteVpnGatewayResponse.java @@ -18,7 +18,7 @@ package com.cloud.api.response; import java.util.Date; -import com.cloud.api.ApiConstants; +import org.apache.cloudstack.api.ApiConstants; import com.cloud.utils.IdentityProxy; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; diff --git a/api/src/com/cloud/api/response/SnapshotResponse.java b/api/src/com/cloud/api/response/SnapshotResponse.java index 71b1b14b8b5..ba29fdbaa92 100644 --- a/api/src/com/cloud/api/response/SnapshotResponse.java +++ b/api/src/com/cloud/api/response/SnapshotResponse.java @@ -19,7 +19,7 @@ package com.cloud.api.response; import java.util.Date; import java.util.List; -import com.cloud.api.ApiConstants; +import org.apache.cloudstack.api.ApiConstants; import com.cloud.serializer.Param; import com.cloud.storage.Snapshot; import com.cloud.utils.IdentityProxy; diff --git a/api/src/com/cloud/api/response/StaticRouteResponse.java b/api/src/com/cloud/api/response/StaticRouteResponse.java index 0b950ecffe0..dabae1c1380 100644 --- a/api/src/com/cloud/api/response/StaticRouteResponse.java +++ b/api/src/com/cloud/api/response/StaticRouteResponse.java @@ -18,7 +18,7 @@ package com.cloud.api.response; import java.util.List; -import com.cloud.api.ApiConstants; +import org.apache.cloudstack.api.ApiConstants; import com.cloud.serializer.Param; import com.cloud.utils.IdentityProxy; import com.google.gson.annotations.SerializedName; diff --git a/api/src/com/cloud/api/response/StorageNetworkIpRangeResponse.java b/api/src/com/cloud/api/response/StorageNetworkIpRangeResponse.java index 8db19d8e443..f072dd9462c 100755 --- a/api/src/com/cloud/api/response/StorageNetworkIpRangeResponse.java +++ b/api/src/com/cloud/api/response/StorageNetworkIpRangeResponse.java @@ -16,7 +16,7 @@ // under the License. package com.cloud.api.response; -import com.cloud.api.ApiConstants; +import org.apache.cloudstack.api.ApiConstants; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; diff --git a/api/src/com/cloud/api/response/StoragePoolResponse.java b/api/src/com/cloud/api/response/StoragePoolResponse.java index 3b6a5792127..4dbe104bef2 100755 --- a/api/src/com/cloud/api/response/StoragePoolResponse.java +++ b/api/src/com/cloud/api/response/StoragePoolResponse.java @@ -18,7 +18,7 @@ package com.cloud.api.response; import java.util.Date; -import com.cloud.api.ApiConstants; +import org.apache.cloudstack.api.ApiConstants; import com.cloud.utils.IdentityProxy; import com.cloud.serializer.Param; import com.cloud.storage.StoragePoolStatus; diff --git a/api/src/com/cloud/api/response/SwiftResponse.java b/api/src/com/cloud/api/response/SwiftResponse.java index 81171defdf0..7471f82016d 100755 --- a/api/src/com/cloud/api/response/SwiftResponse.java +++ b/api/src/com/cloud/api/response/SwiftResponse.java @@ -18,7 +18,7 @@ package com.cloud.api.response; import java.util.Date; -import com.cloud.api.ApiConstants; +import org.apache.cloudstack.api.ApiConstants; import com.cloud.utils.IdentityProxy; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; diff --git a/api/src/com/cloud/api/response/SystemVmResponse.java b/api/src/com/cloud/api/response/SystemVmResponse.java index ea0025852cf..86b8493d077 100644 --- a/api/src/com/cloud/api/response/SystemVmResponse.java +++ b/api/src/com/cloud/api/response/SystemVmResponse.java @@ -18,7 +18,7 @@ package com.cloud.api.response; import java.util.Date; -import com.cloud.api.ApiConstants; +import org.apache.cloudstack.api.ApiConstants; import com.cloud.utils.IdentityProxy; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; diff --git a/api/src/com/cloud/api/response/TemplatePermissionsResponse.java b/api/src/com/cloud/api/response/TemplatePermissionsResponse.java index 1f801462e2d..9058afb743c 100644 --- a/api/src/com/cloud/api/response/TemplatePermissionsResponse.java +++ b/api/src/com/cloud/api/response/TemplatePermissionsResponse.java @@ -18,7 +18,7 @@ package com.cloud.api.response; import java.util.List; -import com.cloud.api.ApiConstants; +import org.apache.cloudstack.api.ApiConstants; import com.cloud.utils.IdentityProxy; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; diff --git a/api/src/com/cloud/api/response/TemplateResponse.java b/api/src/com/cloud/api/response/TemplateResponse.java index 5c3d3399799..950071a374d 100755 --- a/api/src/com/cloud/api/response/TemplateResponse.java +++ b/api/src/com/cloud/api/response/TemplateResponse.java @@ -20,7 +20,7 @@ import java.util.Date; import java.util.List; import java.util.Map; -import com.cloud.api.ApiConstants; +import org.apache.cloudstack.api.ApiConstants; import com.cloud.serializer.Param; import com.cloud.storage.Storage.ImageFormat; import com.cloud.utils.IdentityProxy; diff --git a/api/src/com/cloud/api/response/TrafficTypeImplementorResponse.java b/api/src/com/cloud/api/response/TrafficTypeImplementorResponse.java index 3a5d4f71aa3..29d6b950e9b 100755 --- a/api/src/com/cloud/api/response/TrafficTypeImplementorResponse.java +++ b/api/src/com/cloud/api/response/TrafficTypeImplementorResponse.java @@ -16,7 +16,7 @@ // under the License. package com.cloud.api.response; -import com.cloud.api.ApiConstants; +import org.apache.cloudstack.api.ApiConstants; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; diff --git a/api/src/com/cloud/api/response/TrafficTypeResponse.java b/api/src/com/cloud/api/response/TrafficTypeResponse.java index f64fbb1dd24..3b63683be4a 100644 --- a/api/src/com/cloud/api/response/TrafficTypeResponse.java +++ b/api/src/com/cloud/api/response/TrafficTypeResponse.java @@ -16,7 +16,7 @@ // under the License. package com.cloud.api.response; -import com.cloud.api.ApiConstants; +import org.apache.cloudstack.api.ApiConstants; import com.cloud.utils.IdentityProxy; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; diff --git a/api/src/com/cloud/api/response/UpgradeVmResponse.java b/api/src/com/cloud/api/response/UpgradeVmResponse.java index e48ec08fe7c..9e272fb9e91 100644 --- a/api/src/com/cloud/api/response/UpgradeVmResponse.java +++ b/api/src/com/cloud/api/response/UpgradeVmResponse.java @@ -18,7 +18,7 @@ package com.cloud.api.response; import java.util.Date; -import com.cloud.api.ApiConstants; +import org.apache.cloudstack.api.ApiConstants; import com.cloud.utils.IdentityProxy; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; diff --git a/api/src/com/cloud/api/response/UserVmResponse.java b/api/src/com/cloud/api/response/UserVmResponse.java index f74c07254c7..6f8f0809c8b 100755 --- a/api/src/com/cloud/api/response/UserVmResponse.java +++ b/api/src/com/cloud/api/response/UserVmResponse.java @@ -19,7 +19,7 @@ package com.cloud.api.response; import java.util.Date; import java.util.List; -import com.cloud.api.ApiConstants; +import org.apache.cloudstack.api.ApiConstants; import com.cloud.serializer.Param; import com.cloud.utils.IdentityProxy; import com.google.gson.annotations.SerializedName; diff --git a/api/src/com/cloud/api/response/VirtualRouterProviderResponse.java b/api/src/com/cloud/api/response/VirtualRouterProviderResponse.java index 3e3e33dee16..15710b29e9b 100644 --- a/api/src/com/cloud/api/response/VirtualRouterProviderResponse.java +++ b/api/src/com/cloud/api/response/VirtualRouterProviderResponse.java @@ -16,7 +16,7 @@ // under the License. package com.cloud.api.response; -import com.cloud.api.ApiConstants; +import org.apache.cloudstack.api.ApiConstants; import com.cloud.utils.IdentityProxy; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; diff --git a/api/src/com/cloud/api/response/VlanIpRangeResponse.java b/api/src/com/cloud/api/response/VlanIpRangeResponse.java index 63358161eaf..197e3fb87f8 100644 --- a/api/src/com/cloud/api/response/VlanIpRangeResponse.java +++ b/api/src/com/cloud/api/response/VlanIpRangeResponse.java @@ -16,7 +16,7 @@ // under the License. package com.cloud.api.response; -import com.cloud.api.ApiConstants; +import org.apache.cloudstack.api.ApiConstants; import com.cloud.utils.IdentityProxy; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; diff --git a/api/src/com/cloud/api/response/VolumeResponse.java b/api/src/com/cloud/api/response/VolumeResponse.java index b5633908a81..2d9728713e0 100755 --- a/api/src/com/cloud/api/response/VolumeResponse.java +++ b/api/src/com/cloud/api/response/VolumeResponse.java @@ -19,7 +19,7 @@ package com.cloud.api.response; import java.util.Date; import java.util.List; -import com.cloud.api.ApiConstants; +import org.apache.cloudstack.api.ApiConstants; import com.cloud.serializer.Param; import com.cloud.utils.IdentityProxy; import com.google.gson.annotations.SerializedName; diff --git a/api/src/com/cloud/api/response/VpcOfferingResponse.java b/api/src/com/cloud/api/response/VpcOfferingResponse.java index 51c5fc2c9ba..6c20c3415f9 100644 --- a/api/src/com/cloud/api/response/VpcOfferingResponse.java +++ b/api/src/com/cloud/api/response/VpcOfferingResponse.java @@ -19,7 +19,7 @@ package com.cloud.api.response; import java.util.Date; import java.util.List; -import com.cloud.api.ApiConstants; +import org.apache.cloudstack.api.ApiConstants; import com.cloud.serializer.Param; import com.cloud.utils.IdentityProxy; import com.google.gson.annotations.SerializedName; diff --git a/api/src/com/cloud/api/response/VpcResponse.java b/api/src/com/cloud/api/response/VpcResponse.java index bb79e53e942..d94a796e298 100644 --- a/api/src/com/cloud/api/response/VpcResponse.java +++ b/api/src/com/cloud/api/response/VpcResponse.java @@ -19,7 +19,7 @@ package com.cloud.api.response; import java.util.Date; import java.util.List; -import com.cloud.api.ApiConstants; +import org.apache.cloudstack.api.ApiConstants; import com.cloud.serializer.Param; import com.cloud.utils.IdentityProxy; import com.google.gson.annotations.SerializedName; diff --git a/api/src/com/cloud/api/response/VpnUsersResponse.java b/api/src/com/cloud/api/response/VpnUsersResponse.java index d1e05803c9b..97f2686f47b 100644 --- a/api/src/com/cloud/api/response/VpnUsersResponse.java +++ b/api/src/com/cloud/api/response/VpnUsersResponse.java @@ -16,7 +16,7 @@ // under the License. package com.cloud.api.response; -import com.cloud.api.ApiConstants; +import org.apache.cloudstack.api.ApiConstants; import com.cloud.utils.IdentityProxy; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; diff --git a/api/src/com/cloud/api/response/ZoneResponse.java b/api/src/com/cloud/api/response/ZoneResponse.java index 98f808d7044..69c83cbe577 100755 --- a/api/src/com/cloud/api/response/ZoneResponse.java +++ b/api/src/com/cloud/api/response/ZoneResponse.java @@ -18,7 +18,7 @@ package com.cloud.api.response; import java.util.List; -import com.cloud.api.ApiConstants; +import org.apache.cloudstack.api.ApiConstants; import com.cloud.utils.IdentityProxy; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; diff --git a/api/src/com/cloud/async/AsyncJob.java b/api/src/com/cloud/async/AsyncJob.java index b8551edc83e..50ca9062942 100644 --- a/api/src/com/cloud/async/AsyncJob.java +++ b/api/src/com/cloud/async/AsyncJob.java @@ -18,7 +18,7 @@ package com.cloud.async; import java.util.Date; -import com.cloud.api.Identity; +import org.apache.cloudstack.api.Identity; public interface AsyncJob extends Identity { public enum Type { diff --git a/api/src/com/cloud/network/vpc/VpcGateway.java b/api/src/com/cloud/network/vpc/VpcGateway.java index c972c35c3fb..23f31fbca7e 100644 --- a/api/src/com/cloud/network/vpc/VpcGateway.java +++ b/api/src/com/cloud/network/vpc/VpcGateway.java @@ -17,7 +17,7 @@ package com.cloud.network.vpc; import com.cloud.acl.ControlledEntity; -import com.cloud.api.Identity; +import org.apache.cloudstack.api.Identity; public interface VpcGateway extends Identity, ControlledEntity { public enum Type { diff --git a/api/src/com/cloud/network/vpn/RemoteAccessVpnService.java b/api/src/com/cloud/network/vpn/RemoteAccessVpnService.java index 4d820a7a258..b74611b9e72 100644 --- a/api/src/com/cloud/network/vpn/RemoteAccessVpnService.java +++ b/api/src/com/cloud/network/vpn/RemoteAccessVpnService.java @@ -18,7 +18,7 @@ package com.cloud.network.vpn; import java.util.List; -import com.cloud.api.commands.ListRemoteAccessVpnsCmd; +import org.apache.cloudstack.api.user.vpn.command.ListRemoteAccessVpnsCmd; import com.cloud.api.commands.ListVpnUsersCmd; import com.cloud.exception.NetworkRuleConflictException; import com.cloud.exception.ResourceUnavailableException; diff --git a/api/src/com/cloud/network/vpn/Site2SiteVpnService.java b/api/src/com/cloud/network/vpn/Site2SiteVpnService.java index 69eab1a13f6..94863cf45f7 100644 --- a/api/src/com/cloud/network/vpn/Site2SiteVpnService.java +++ b/api/src/com/cloud/network/vpn/Site2SiteVpnService.java @@ -18,17 +18,17 @@ package com.cloud.network.vpn; import java.util.List; -import com.cloud.api.commands.CreateVpnConnectionCmd; -import com.cloud.api.commands.CreateVpnCustomerGatewayCmd; -import com.cloud.api.commands.CreateVpnGatewayCmd; -import com.cloud.api.commands.DeleteVpnConnectionCmd; -import com.cloud.api.commands.DeleteVpnCustomerGatewayCmd; -import com.cloud.api.commands.DeleteVpnGatewayCmd; -import com.cloud.api.commands.ListVpnConnectionsCmd; -import com.cloud.api.commands.ListVpnCustomerGatewaysCmd; -import com.cloud.api.commands.ListVpnGatewaysCmd; -import com.cloud.api.commands.ResetVpnConnectionCmd; -import com.cloud.api.commands.UpdateVpnCustomerGatewayCmd; +import org.apache.cloudstack.api.user.vpn.command.CreateVpnConnectionCmd; +import org.apache.cloudstack.api.user.vpn.command.CreateVpnCustomerGatewayCmd; +import org.apache.cloudstack.api.user.vpn.command.CreateVpnGatewayCmd; +import org.apache.cloudstack.api.user.vpn.command.DeleteVpnConnectionCmd; +import org.apache.cloudstack.api.user.vpn.command.DeleteVpnCustomerGatewayCmd; +import org.apache.cloudstack.api.user.vpn.command.DeleteVpnGatewayCmd; +import org.apache.cloudstack.api.user.vpn.command.ListVpnConnectionsCmd; +import org.apache.cloudstack.api.user.vpn.command.ListVpnCustomerGatewaysCmd; +import org.apache.cloudstack.api.user.vpn.command.ListVpnGatewaysCmd; +import org.apache.cloudstack.api.user.vpn.command.ResetVpnConnectionCmd; +import org.apache.cloudstack.api.user.vpn.command.UpdateVpnCustomerGatewayCmd; import com.cloud.exception.NetworkRuleConflictException; import com.cloud.exception.ResourceUnavailableException; import com.cloud.network.Site2SiteCustomerGateway; diff --git a/api/src/com/cloud/projects/Project.java b/api/src/com/cloud/projects/Project.java index f67506e4997..f861a5bd982 100644 --- a/api/src/com/cloud/projects/Project.java +++ b/api/src/com/cloud/projects/Project.java @@ -18,7 +18,7 @@ package com.cloud.projects; import java.util.Date; -import com.cloud.api.Identity; +import org.apache.cloudstack.api.Identity; import com.cloud.domain.PartOf; public interface Project extends PartOf, Identity { diff --git a/api/src/com/cloud/server/ManagementService.java b/api/src/com/cloud/server/ManagementService.java index 7532cae2a64..c97b67b0284 100755 --- a/api/src/com/cloud/server/ManagementService.java +++ b/api/src/com/cloud/server/ManagementService.java @@ -23,12 +23,12 @@ import java.util.Map; import java.util.Set; import com.cloud.alert.Alert; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.api.commands.CreateSSHKeyPairCmd; import com.cloud.api.commands.DeleteSSHKeyPairCmd; import com.cloud.api.commands.DestroySystemVmCmd; import com.cloud.api.commands.ExtractVolumeCmd; -import com.cloud.api.commands.GetVMPasswordCmd; +import org.apache.cloudstack.api.user.vm.command.GetVMPasswordCmd; import com.cloud.api.commands.ListAlertsCmd; import com.cloud.api.commands.ListAsyncJobsCmd; import com.cloud.api.commands.ListCapabilitiesCmd; diff --git a/api/src/com/cloud/vm/UserVmService.java b/api/src/com/cloud/vm/UserVmService.java index 98d02dbebdd..adc1ac5f8ff 100755 --- a/api/src/com/cloud/vm/UserVmService.java +++ b/api/src/com/cloud/vm/UserVmService.java @@ -21,22 +21,22 @@ import java.util.Map; import javax.naming.InsufficientResourcesException; -import com.cloud.api.commands.AssignVMCmd; +import org.apache.cloudstack.api.admin.vm.command.AssignVMCmd; import com.cloud.api.commands.AttachVolumeCmd; import com.cloud.api.commands.CreateTemplateCmd; import com.cloud.api.commands.CreateVMGroupCmd; import com.cloud.api.commands.DeleteVMGroupCmd; -import com.cloud.api.commands.DeployVMCmd; -import com.cloud.api.commands.DestroyVMCmd; +import org.apache.cloudstack.api.user.vm.command.DeployVMCmd; +import org.apache.cloudstack.api.user.vm.command.DestroyVMCmd; import com.cloud.api.commands.DetachVolumeCmd; -import com.cloud.api.commands.ListVMsCmd; -import com.cloud.api.commands.RebootVMCmd; -import com.cloud.api.commands.RecoverVMCmd; -import com.cloud.api.commands.ResetVMPasswordCmd; -import com.cloud.api.commands.RestoreVMCmd; -import com.cloud.api.commands.StartVMCmd; -import com.cloud.api.commands.UpdateVMCmd; -import com.cloud.api.commands.UpgradeVMCmd; +import org.apache.cloudstack.api.user.vm.command.ListVMsCmd; +import org.apache.cloudstack.api.user.vm.command.RebootVMCmd; +import org.apache.cloudstack.api.admin.vm.command.RecoverVMCmd; +import org.apache.cloudstack.api.user.vm.command.ResetVMPasswordCmd; +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.dc.DataCenter; import com.cloud.exception.ConcurrentOperationException; import com.cloud.exception.InsufficientCapacityException; diff --git a/api/src/com/cloud/vm/VirtualMachine.java b/api/src/com/cloud/vm/VirtualMachine.java index 1fa16c32fa0..af6d102aebc 100755 --- a/api/src/com/cloud/vm/VirtualMachine.java +++ b/api/src/com/cloud/vm/VirtualMachine.java @@ -20,7 +20,7 @@ import java.util.Date; import java.util.Map; import com.cloud.acl.ControlledEntity; -import com.cloud.api.Identity; +import org.apache.cloudstack.api.Identity; import com.cloud.hypervisor.Hypervisor.HypervisorType; import com.cloud.utils.fsm.StateMachine2; import com.cloud.utils.fsm.StateObject; diff --git a/api/src/com/cloud/api/ACL.java b/api/src/org/apache/cloudstack/api/ACL.java similarity index 89% rename from api/src/com/cloud/api/ACL.java rename to api/src/org/apache/cloudstack/api/ACL.java index bd02c06d0b0..3623d1ac523 100644 --- a/api/src/com/cloud/api/ACL.java +++ b/api/src/org/apache/cloudstack/api/ACL.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api; +package org.apache.cloudstack.api; import static java.lang.annotation.ElementType.FIELD; @@ -25,7 +25,7 @@ import java.lang.annotation.Target; @Retention(RetentionPolicy.RUNTIME) @Target({ FIELD }) public @interface ACL { - - boolean checkKeyAccess() default false; - boolean checkValueAccess() default false; + + boolean checkKeyAccess() default false; + boolean checkValueAccess() default false; } diff --git a/api/src/com/cloud/api/ApiConstants.java b/api/src/org/apache/cloudstack/api/ApiConstants.java similarity index 99% rename from api/src/com/cloud/api/ApiConstants.java rename to api/src/org/apache/cloudstack/api/ApiConstants.java index 78a3deda578..8b05f1d9c11 100755 --- a/api/src/com/cloud/api/ApiConstants.java +++ b/api/src/org/apache/cloudstack/api/ApiConstants.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api; +package org.apache.cloudstack.api; public class ApiConstants { public static final String ACCOUNT = "account"; @@ -382,8 +382,8 @@ public class ApiConstants { public static final String NICIRA_NVP_DEVICE_ID = "nvpdeviceid"; public static final String NICIRA_NVP_TRANSPORT_ZONE_UUID = "transportzoneuuid"; public static final String NICIRA_NVP_DEVICE_NAME = "niciradevicename"; - public static final String NICIRA_NVP_GATEWAYSERVICE_UUID = "l3gatewayserviceuuid"; - + public static final String NICIRA_NVP_GATEWAYSERVICE_UUID = "l3gatewayserviceuuid"; + public static final String SOURCE = "source"; public static final String COUNTER_ID = "counterid"; public static final String AGGR_OPERATOR = "aggroperator"; @@ -417,7 +417,7 @@ public class ApiConstants { public enum VMDetails { all, group, nics, stats, secgrp, tmpl, servoff, iso, volume, min; } - + public enum LDAPParams { hostname, port, usessl, queryfilter, searchbase, dn, passwd, truststore, truststorepass; diff --git a/api/src/com/cloud/api/BaseAsyncCmd.java b/api/src/org/apache/cloudstack/api/BaseAsyncCmd.java similarity index 98% rename from api/src/com/cloud/api/BaseAsyncCmd.java rename to api/src/org/apache/cloudstack/api/BaseAsyncCmd.java index cf6d0bdbb93..4bcd9ebc40d 100644 --- a/api/src/com/cloud/api/BaseAsyncCmd.java +++ b/api/src/org/apache/cloudstack/api/BaseAsyncCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api; +package org.apache.cloudstack.api; import com.cloud.api.response.AsyncJobResponse; import com.cloud.async.AsyncJob; @@ -25,7 +25,7 @@ import com.cloud.user.UserContext; * queryAsyncJobResult API command. */ public abstract class BaseAsyncCmd extends BaseCmd { - + public static final String ipAddressSyncObject = "ipaddress"; public static final String networkSyncObject = "network"; public static final String vpcSyncObject = "vpc"; @@ -40,7 +40,7 @@ public abstract class BaseAsyncCmd extends BaseCmd { * For proper tracking of async commands through the system, events must be generated when the command is * scheduled, started, and completed. Commands should specify the type of event so that when the scheduled, * started, and completed events are saved to the events table, they have the proper type information. - * + * * @return a string representing the type of event, e.g. VM.START, VOLUME.CREATE. */ public abstract String getEventType(); @@ -49,7 +49,7 @@ public abstract class BaseAsyncCmd extends BaseCmd { * For proper tracking of async commands through the system, events must be generated when the command is * scheduled, started, and completed. Commands should specify a description for these events so that when * the scheduled, started, and completed events are saved to the events table, they have a meaningful description. - * + * * @return a string representing a description of the event */ public abstract String getEventDescription(); @@ -77,7 +77,7 @@ public abstract class BaseAsyncCmd extends BaseCmd { /** * Async commands that want to be tracked as part of the listXXX commands need to * provide implementations of the two following methods, getInstanceId() and getInstanceType() - * + * * getObjectId() should return the id of the object the async command is executing on * getObjectType() should return a type from the AsyncJob.Type enumeration */ diff --git a/api/src/com/cloud/api/BaseAsyncCreateCmd.java b/api/src/org/apache/cloudstack/api/BaseAsyncCreateCmd.java similarity index 98% rename from api/src/com/cloud/api/BaseAsyncCreateCmd.java rename to api/src/org/apache/cloudstack/api/BaseAsyncCreateCmd.java index 586c9c9e023..44b05ed4785 100644 --- a/api/src/com/cloud/api/BaseAsyncCreateCmd.java +++ b/api/src/org/apache/cloudstack/api/BaseAsyncCreateCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api; +package org.apache.cloudstack.api; import com.cloud.api.response.CreateCmdResponse; import com.cloud.exception.ResourceAllocationException; diff --git a/api/src/com/cloud/api/BaseCmd.java b/api/src/org/apache/cloudstack/api/BaseCmd.java similarity index 99% rename from api/src/com/cloud/api/BaseCmd.java rename to api/src/org/apache/cloudstack/api/BaseCmd.java index 12a2176fb2e..e7701fb0107 100755 --- a/api/src/com/cloud/api/BaseCmd.java +++ b/api/src/org/apache/cloudstack/api/BaseCmd.java @@ -15,7 +15,7 @@ // specific language governing permissions and limitations // under the License. -package com.cloud.api; +package org.apache.cloudstack.api; import java.text.DateFormat; import java.text.SimpleDateFormat; @@ -192,7 +192,7 @@ public abstract class BaseCmd { /** * For commands the API framework needs to know the owner of the object being acted upon. This method is * used to determine that information. - * + * * @return the id of the account that owns the object being acted upon */ public abstract long getEntityOwnerId(); diff --git a/api/src/com/cloud/api/BaseListAccountResourcesCmd.java b/api/src/org/apache/cloudstack/api/BaseListAccountResourcesCmd.java similarity index 97% rename from api/src/com/cloud/api/BaseListAccountResourcesCmd.java rename to api/src/org/apache/cloudstack/api/BaseListAccountResourcesCmd.java index 37010054526..038da63ec4c 100644 --- a/api/src/com/cloud/api/BaseListAccountResourcesCmd.java +++ b/api/src/org/apache/cloudstack/api/BaseListAccountResourcesCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api; +package org.apache.cloudstack.api; public abstract class BaseListAccountResourcesCmd extends BaseListDomainResourcesCmd { diff --git a/api/src/com/cloud/api/BaseListCmd.java b/api/src/org/apache/cloudstack/api/BaseListCmd.java similarity index 99% rename from api/src/com/cloud/api/BaseListCmd.java rename to api/src/org/apache/cloudstack/api/BaseListCmd.java index d5ece6b14b3..19cf7180c52 100755 --- a/api/src/com/cloud/api/BaseListCmd.java +++ b/api/src/org/apache/cloudstack/api/BaseListCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api; +package org.apache.cloudstack.api; import com.cloud.async.AsyncJob; import com.cloud.exception.InvalidParameterValueException; diff --git a/api/src/com/cloud/api/BaseListDomainResourcesCmd.java b/api/src/org/apache/cloudstack/api/BaseListDomainResourcesCmd.java similarity index 81% rename from api/src/com/cloud/api/BaseListDomainResourcesCmd.java rename to api/src/org/apache/cloudstack/api/BaseListDomainResourcesCmd.java index 9571e1263c1..709d107387a 100644 --- a/api/src/com/cloud/api/BaseListDomainResourcesCmd.java +++ b/api/src/org/apache/cloudstack/api/BaseListDomainResourcesCmd.java @@ -14,21 +14,21 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api; +package org.apache.cloudstack.api; public abstract class BaseListDomainResourcesCmd extends BaseListCmd { @Parameter(name = ApiConstants.LIST_ALL, type = CommandType.BOOLEAN, description = "If set to false, " + - "list only resources belonging to the command's caller; if set to true - list resources that the caller is authorized to see. Default value is false") + "list only resources belonging to the command's caller; if set to true - list resources that the caller is authorized to see. Default value is false") private Boolean listAll; @IdentityMapper(entityTableName = "domain") @Parameter(name = ApiConstants.DOMAIN_ID, type = CommandType.LONG, description = "list only resources" + - " belonging to the domain specified") + " belonging to the domain specified") private Long domainId; @Parameter(name = ApiConstants.IS_RECURSIVE, type = CommandType.BOOLEAN, description = "defaults to false," + - " but if true, lists all resources from the parent specified by the domainId till leaves.") + " but if true, lists all resources from the parent specified by the domainId till leaves.") private Boolean recursive; public boolean listAll() { diff --git a/api/src/com/cloud/api/BaseListProjectAndAccountResourcesCmd.java b/api/src/org/apache/cloudstack/api/BaseListProjectAndAccountResourcesCmd.java similarity index 97% rename from api/src/com/cloud/api/BaseListProjectAndAccountResourcesCmd.java rename to api/src/org/apache/cloudstack/api/BaseListProjectAndAccountResourcesCmd.java index 78e70019c9b..d5232bc0a72 100644 --- a/api/src/com/cloud/api/BaseListProjectAndAccountResourcesCmd.java +++ b/api/src/org/apache/cloudstack/api/BaseListProjectAndAccountResourcesCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api; +package org.apache.cloudstack.api; public abstract class BaseListProjectAndAccountResourcesCmd extends BaseListAccountResourcesCmd { diff --git a/api/src/com/cloud/api/BaseListTaggedResourcesCmd.java b/api/src/org/apache/cloudstack/api/BaseListTaggedResourcesCmd.java similarity index 98% rename from api/src/com/cloud/api/BaseListTaggedResourcesCmd.java rename to api/src/org/apache/cloudstack/api/BaseListTaggedResourcesCmd.java index 9b188d8ed25..88176a536ea 100644 --- a/api/src/com/cloud/api/BaseListTaggedResourcesCmd.java +++ b/api/src/org/apache/cloudstack/api/BaseListTaggedResourcesCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api; +package org.apache.cloudstack.api; import java.util.Collection; import java.util.HashMap; @@ -26,7 +26,7 @@ import com.cloud.exception.InvalidParameterValueException; public abstract class BaseListTaggedResourcesCmd extends BaseListProjectAndAccountResourcesCmd{ @Parameter(name = ApiConstants.TAGS, type = CommandType.MAP, description = "List resources by tags (key/value pairs)") private Map tags; - + public Map getTags() { Map tagsMap = null; if (tags != null && !tags.isEmpty()) { diff --git a/api/src/com/cloud/api/Identity.java b/api/src/org/apache/cloudstack/api/Identity.java similarity index 96% rename from api/src/com/cloud/api/Identity.java rename to api/src/org/apache/cloudstack/api/Identity.java index 09ce7a8ac04..22d23b70017 100644 --- a/api/src/com/cloud/api/Identity.java +++ b/api/src/org/apache/cloudstack/api/Identity.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api; +package org.apache.cloudstack.api; public interface Identity { String getUuid(); diff --git a/api/src/com/cloud/api/IdentityMapper.java b/api/src/org/apache/cloudstack/api/IdentityMapper.java similarity index 96% rename from api/src/com/cloud/api/IdentityMapper.java rename to api/src/org/apache/cloudstack/api/IdentityMapper.java index 4515b805d05..0403ff75f00 100644 --- a/api/src/com/cloud/api/IdentityMapper.java +++ b/api/src/org/apache/cloudstack/api/IdentityMapper.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api; +package org.apache.cloudstack.api; import static java.lang.annotation.ElementType.FIELD; diff --git a/api/src/com/cloud/api/IdentityService.java b/api/src/org/apache/cloudstack/api/IdentityService.java similarity index 96% rename from api/src/com/cloud/api/IdentityService.java rename to api/src/org/apache/cloudstack/api/IdentityService.java index 1c53a1dfcd4..51608843e9f 100644 --- a/api/src/com/cloud/api/IdentityService.java +++ b/api/src/org/apache/cloudstack/api/IdentityService.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api; +package org.apache.cloudstack.api; public interface IdentityService { Long getIdentityId(IdentityMapper mapper, String identityString); diff --git a/api/src/com/cloud/api/Implementation.java b/api/src/org/apache/cloudstack/api/Implementation.java similarity index 97% rename from api/src/com/cloud/api/Implementation.java rename to api/src/org/apache/cloudstack/api/Implementation.java index 6f0b965c3ec..ec8e867f256 100644 --- a/api/src/com/cloud/api/Implementation.java +++ b/api/src/org/apache/cloudstack/api/Implementation.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api; +package org.apache.cloudstack.api; import static java.lang.annotation.ElementType.TYPE; diff --git a/api/src/com/cloud/api/Parameter.java b/api/src/org/apache/cloudstack/api/Parameter.java similarity index 94% rename from api/src/com/cloud/api/Parameter.java rename to api/src/org/apache/cloudstack/api/Parameter.java index e3563699891..2364d4f97c2 100644 --- a/api/src/com/cloud/api/Parameter.java +++ b/api/src/org/apache/cloudstack/api/Parameter.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api; +package org.apache.cloudstack.api; import static java.lang.annotation.ElementType.FIELD; @@ -22,7 +22,7 @@ import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; -import com.cloud.api.BaseCmd.CommandType; +import org.apache.cloudstack.api.BaseCmd.CommandType; @Retention(RetentionPolicy.RUNTIME) @Target({ FIELD }) @@ -44,8 +44,8 @@ public @interface Parameter { int length() default 255; String since() default ""; - + Class[] resourceType() default Object.class; - + String retrieveMethod() default "getById"; } diff --git a/api/src/com/cloud/api/PlugService.java b/api/src/org/apache/cloudstack/api/PlugService.java similarity index 97% rename from api/src/com/cloud/api/PlugService.java rename to api/src/org/apache/cloudstack/api/PlugService.java index 7df86f9394f..00032e3abdd 100644 --- a/api/src/com/cloud/api/PlugService.java +++ b/api/src/org/apache/cloudstack/api/PlugService.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api; +package org.apache.cloudstack.api; import static java.lang.annotation.ElementType.FIELD; import static java.lang.annotation.RetentionPolicy.RUNTIME; diff --git a/api/src/com/cloud/api/ResponseGenerator.java b/api/src/org/apache/cloudstack/api/ResponseGenerator.java similarity index 98% rename from api/src/com/cloud/api/ResponseGenerator.java rename to api/src/org/apache/cloudstack/api/ResponseGenerator.java index 4e8fbd824a9..d711fcf65c3 100755 --- a/api/src/com/cloud/api/ResponseGenerator.java +++ b/api/src/org/apache/cloudstack/api/ResponseGenerator.java @@ -14,14 +14,14 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api; +package org.apache.cloudstack.api; import java.text.DecimalFormat; import java.util.EnumSet; import java.util.List; -import com.cloud.api.ApiConstants.HostDetails; -import com.cloud.api.ApiConstants.VMDetails; +import org.apache.cloudstack.api.ApiConstants.HostDetails; +import org.apache.cloudstack.api.ApiConstants.VMDetails; import com.cloud.api.commands.QueryAsyncJobResultCmd; import com.cloud.api.response.AccountResponse; import com.cloud.api.response.AsyncJobResponse; @@ -300,7 +300,7 @@ public interface ResponseGenerator { LDAPConfigResponse createLDAPConfigResponse(String hostname, Integer port, Boolean useSSL, String queryFilter, String baseSearch, String dn); StorageNetworkIpRangeResponse createStorageNetworkIpRangeResponse(StorageNetworkIpRange result); - + /** * @param tableName TODO * @param token @@ -316,7 +316,7 @@ public interface ResponseGenerator { ResourceTagResponse createResourceTagResponse(ResourceTag resourceTag, boolean keyValueOnly); Site2SiteVpnGatewayResponse createSite2SiteVpnGatewayResponse(Site2SiteVpnGateway result); - + /** * @param offering @@ -353,7 +353,7 @@ public interface ResponseGenerator { Site2SiteVpnConnectionResponse createSite2SiteVpnConnectionResponse(Site2SiteVpnConnection result); CounterResponse createCounterResponse(Counter ctr); - + ConditionResponse createConditionResponse(Condition cndn); AutoScalePolicyResponse createAutoScalePolicyResponse(AutoScalePolicy policy); diff --git a/api/src/com/cloud/api/ResponseObject.java b/api/src/org/apache/cloudstack/api/ResponseObject.java similarity index 94% rename from api/src/com/cloud/api/ResponseObject.java rename to api/src/org/apache/cloudstack/api/ResponseObject.java index 2d08fb975b5..ff03c204149 100644 --- a/api/src/com/cloud/api/ResponseObject.java +++ b/api/src/org/apache/cloudstack/api/ResponseObject.java @@ -14,32 +14,32 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api; +package org.apache.cloudstack.api; public interface ResponseObject { /** * Get the name of the API response - * + * * @return the name of the API response */ String getResponseName(); /** * Set the name of the API response - * + * * @param name */ void setResponseName(String name); /** * Get the name of the API object - * + * * @return the name of the API object */ String getObjectName(); /** - * + * * @param name */ void setObjectName(String name); @@ -51,27 +51,27 @@ public interface ResponseObject { /** * Returns the job id - * + * * @return */ Long getJobId(); /** * Sets the job id - * + * * @param jobId */ void setJobId(Long jobId); /** * Returns the job status - * + * * @return */ Integer getJobStatus(); /** - * + * * @param jobStatus */ void setJobStatus(Integer jobStatus); diff --git a/api/src/com/cloud/api/ServerApiException.java b/api/src/org/apache/cloudstack/api/ServerApiException.java similarity index 97% rename from api/src/com/cloud/api/ServerApiException.java rename to api/src/org/apache/cloudstack/api/ServerApiException.java index 25190a6ba09..70fd34e5cf7 100644 --- a/api/src/com/cloud/api/ServerApiException.java +++ b/api/src/org/apache/cloudstack/api/ServerApiException.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api; +package org.apache.cloudstack.api; import com.cloud.utils.exception.RuntimeCloudException; @SuppressWarnings("serial") @@ -47,5 +47,5 @@ public class ServerApiException extends RuntimeCloudException { public void setDescription(String description) { _description = description; } - + } diff --git a/api/src/com/cloud/api/commands/AssignVMCmd.java b/api/src/org/apache/cloudstack/api/admin/vm/command/AssignVMCmd.java similarity index 85% rename from api/src/com/cloud/api/commands/AssignVMCmd.java rename to api/src/org/apache/cloudstack/api/admin/vm/command/AssignVMCmd.java index 99656d0937f..57b87fa6a47 100644 --- a/api/src/com/cloud/api/commands/AssignVMCmd.java +++ b/api/src/org/apache/cloudstack/api/admin/vm/command/AssignVMCmd.java @@ -14,19 +14,20 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.admin.vm.command; import java.util.List; +import org.apache.cloudstack.api.user.vm.command.DeployVMCmd; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.api.response.UserVmResponse; import com.cloud.user.Account; import com.cloud.uservm.UserVm; @@ -40,14 +41,14 @@ public class AssignVMCmd extends BaseCmd { ///////////////////////////////////////////////////// //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - + @IdentityMapper(entityTableName="vm_instance") @Parameter(name=ApiConstants.VIRTUAL_MACHINE_ID, type=CommandType.LONG, required=true, description="the vm ID of the user VM to be moved") private Long virtualMachineId; - + @Parameter(name=ApiConstants.ACCOUNT, type=CommandType.STRING, required=true, description="account name of the new VM owner.") private String accountName; - + @IdentityMapper(entityTableName="domain") @Parameter(name=ApiConstants.DOMAIN_ID, type=CommandType.LONG, required=true, description="domain id of the new VM owner.") private Long domainId; @@ -60,7 +61,7 @@ public class AssignVMCmd extends BaseCmd { @IdentityMapper(entityTableName="security_group") @Parameter(name=ApiConstants.SECURITY_GROUP_IDS, type=CommandType.LIST, collectionType=CommandType.LONG, description="comma separated list of security groups id that going to be applied to the virtual machine. Should be passed only when vm is moved in a zone with Basic Network support.") private List securityGroupIdList; - + ///////////////////////////////////////////////////// /////////////////// Accessors /////////////////////// ///////////////////////////////////////////////////// @@ -73,17 +74,17 @@ public class AssignVMCmd extends BaseCmd { return accountName; } - public Long getDomainId() { - return domainId; - } - - public List getNetworkIds() { - return networkIds; - } + public Long getDomainId() { + return domainId; + } - public List getSecurityGroupIdList() { - return securityGroupIdList; - } + public List getNetworkIds() { + return networkIds; + } + + public List getSecurityGroupIdList() { + return securityGroupIdList; + } ///////////////////////////////////////////////////// @@ -94,22 +95,22 @@ public class AssignVMCmd extends BaseCmd { public String getCommandName() { return s_name; } - + @Override public void execute(){ try { UserVm userVm = _userVmService.moveVMToUser(this); if (userVm == null){ throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to move vm"); - } - UserVmResponse response = _responseGenerator.createUserVmResponse("virtualmachine", userVm).get(0); - response.setResponseName(DeployVMCmd.getResultObjectName()); + } + UserVmResponse response = _responseGenerator.createUserVmResponse("virtualmachine", userVm).get(0); + response.setResponseName(DeployVMCmd.getResultObjectName()); this.setResponseObject(response); }catch (Exception e){ e.printStackTrace(); throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to move vm " + e.getMessage()); } - + } @Override diff --git a/api/src/com/cloud/api/commands/MigrateVMCmd.java b/api/src/org/apache/cloudstack/api/admin/vm/command/MigrateVMCmd.java similarity index 70% rename from api/src/com/cloud/api/commands/MigrateVMCmd.java rename to api/src/org/apache/cloudstack/api/admin/vm/command/MigrateVMCmd.java index c292a2e4e1b..57cd8fe7361 100644 --- a/api/src/com/cloud/api/commands/MigrateVMCmd.java +++ b/api/src/org/apache/cloudstack/api/admin/vm/command/MigrateVMCmd.java @@ -14,17 +14,17 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.admin.vm.command; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseAsyncCmd; -import com.cloud.api.BaseCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseAsyncCmd; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.api.response.UserVmResponse; import com.cloud.event.EventTypes; import com.cloud.exception.ConcurrentOperationException; @@ -72,9 +72,9 @@ public class MigrateVMCmd extends BaseAsyncCmd { public Long getVirtualMachineId() { return virtualMachineId; } - + public Long getStoragePoolId() { - return storageId; + return storageId; } @@ -86,7 +86,7 @@ public class MigrateVMCmd extends BaseAsyncCmd { public String getCommandName() { return s_name; } - + @Override public long getEntityOwnerId() { UserVm userVm = _entityMgr.findById(UserVm.class, getVirtualMachineId()); @@ -106,66 +106,66 @@ public class MigrateVMCmd extends BaseAsyncCmd { public String getEventDescription() { return "Attempting to migrate VM Id: " + getVirtualMachineId() + " to host Id: "+ getHostId(); } - + @Override public void execute(){ - if (getHostId() == null && getStoragePoolId() == null) { - throw new InvalidParameterValueException("either hostId or storageId must be specified"); - } - - if (getHostId() != null && getStoragePoolId() != null) { - throw new InvalidParameterValueException("only one of hostId and storageId can be specified"); - } - + if (getHostId() == null && getStoragePoolId() == null) { + throw new InvalidParameterValueException("either hostId or storageId must be specified"); + } + + if (getHostId() != null && getStoragePoolId() != null) { + throw new InvalidParameterValueException("only one of hostId and storageId can be specified"); + } + UserVm userVm = _userVmService.getUserVm(getVirtualMachineId()); if (userVm == null) { throw new InvalidParameterValueException("Unable to find the VM by id=" + getVirtualMachineId()); } - + Host destinationHost = null; if (getHostId() != null) { - destinationHost = _resourceService.getHost(getHostId()); - if (destinationHost == null) { - throw new InvalidParameterValueException("Unable to find the host to migrate the VM, host id=" + getHostId()); - } - UserContext.current().setEventDetails("VM Id: " + getVirtualMachineId() + " to host Id: "+ getHostId()); + destinationHost = _resourceService.getHost(getHostId()); + if (destinationHost == null) { + throw new InvalidParameterValueException("Unable to find the host to migrate the VM, host id=" + getHostId()); + } + UserContext.current().setEventDetails("VM Id: " + getVirtualMachineId() + " to host Id: "+ getHostId()); } - + StoragePool destStoragePool = null; if (getStoragePoolId() != null) { - destStoragePool = _storageService.getStoragePool(getStoragePoolId()); - if (destStoragePool == null) { - throw new InvalidParameterValueException("Unable to find the storage pool to migrate the VM"); - } - UserContext.current().setEventDetails("VM Id: " + getVirtualMachineId() + " to storage pool Id: "+ getStoragePoolId()); + destStoragePool = _storageService.getStoragePool(getStoragePoolId()); + if (destStoragePool == null) { + throw new InvalidParameterValueException("Unable to find the storage pool to migrate the VM"); + } + UserContext.current().setEventDetails("VM Id: " + getVirtualMachineId() + " to storage pool Id: "+ getStoragePoolId()); } - + try{ - VirtualMachine migratedVm = null; - if (getHostId() != null) { - migratedVm = _userVmService.migrateVirtualMachine(getVirtualMachineId(), destinationHost); - } else if (getStoragePoolId() != null) { - migratedVm = _userVmService.vmStorageMigration(getVirtualMachineId(), destStoragePool); - } - if (migratedVm != null) { + VirtualMachine migratedVm = null; + if (getHostId() != null) { + migratedVm = _userVmService.migrateVirtualMachine(getVirtualMachineId(), destinationHost); + } else if (getStoragePoolId() != null) { + migratedVm = _userVmService.vmStorageMigration(getVirtualMachineId(), destStoragePool); + } + if (migratedVm != null) { UserVmResponse response = _responseGenerator.createUserVmResponse("virtualmachine", (UserVm)migratedVm).get(0); response.setResponseName(getCommandName()); this.setResponseObject(response); - } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to migrate vm"); - } + } else { + throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to migrate vm"); + } } catch (ResourceUnavailableException ex) { s_logger.warn("Exception: ", ex); throw new ServerApiException(BaseCmd.RESOURCE_UNAVAILABLE_ERROR, ex.getMessage()); } catch (ConcurrentOperationException e) { s_logger.warn("Exception: ", e); throw new ServerApiException(BaseCmd.INTERNAL_ERROR, e.getMessage()); - } catch (ManagementServerException e) { + } catch (ManagementServerException e) { s_logger.warn("Exception: ", e); throw new ServerApiException(BaseCmd.INTERNAL_ERROR, e.getMessage()); - } catch (VirtualMachineMigrationException e) { + } catch (VirtualMachineMigrationException e) { s_logger.warn("Exception: ", e); throw new ServerApiException(BaseCmd.INTERNAL_ERROR, e.getMessage()); - } + } } } diff --git a/api/src/com/cloud/api/commands/RecoverVMCmd.java b/api/src/org/apache/cloudstack/api/admin/vm/command/RecoverVMCmd.java similarity index 89% rename from api/src/com/cloud/api/commands/RecoverVMCmd.java rename to api/src/org/apache/cloudstack/api/admin/vm/command/RecoverVMCmd.java index 50dd5e7c820..5baa67fdafb 100644 --- a/api/src/com/cloud/api/commands/RecoverVMCmd.java +++ b/api/src/org/apache/cloudstack/api/admin/vm/command/RecoverVMCmd.java @@ -14,16 +14,16 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.admin.vm.command; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.api.response.UserVmResponse; import com.cloud.exception.ResourceAllocationException; import com.cloud.user.Account; @@ -59,7 +59,7 @@ public class RecoverVMCmd extends BaseCmd { public String getCommandName() { return s_name; } - + @Override public long getEntityOwnerId() { UserVm userVm = _entityMgr.findById(UserVm.class, getId()); @@ -69,7 +69,7 @@ public class RecoverVMCmd extends BaseCmd { return Account.ACCOUNT_ID_SYSTEM; // no account info given, parent this command to SYSTEM so ERROR events are tracked } - + @Override public void execute() throws ResourceAllocationException{ UserVm result = _userVmService.recoverVirtualMachine(this); @@ -80,6 +80,6 @@ public class RecoverVMCmd extends BaseCmd { } else { throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to recover vm"); } - + } } diff --git a/api/src/com/cloud/api/commands/DeployVMCmd.java b/api/src/org/apache/cloudstack/api/user/vm/command/DeployVMCmd.java similarity index 97% rename from api/src/com/cloud/api/commands/DeployVMCmd.java rename to api/src/org/apache/cloudstack/api/user/vm/command/DeployVMCmd.java index 95a676db5a0..b06241d285f 100644 --- a/api/src/com/cloud/api/commands/DeployVMCmd.java +++ b/api/src/org/apache/cloudstack/api/user/vm/command/DeployVMCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.user.vm.command; import java.util.ArrayList; import java.util.Collection; @@ -26,14 +26,14 @@ import java.util.Map; import org.apache.log4j.Logger; -import com.cloud.api.ACL; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseAsyncCreateCmd; -import com.cloud.api.BaseCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ACL; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseAsyncCreateCmd; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.api.response.UserVmResponse; import com.cloud.async.AsyncJob; import com.cloud.dc.DataCenter; @@ -121,46 +121,46 @@ public class DeployVMCmd extends BaseAsyncCreateCmd { @Parameter(name=ApiConstants.SSH_KEYPAIR, type=CommandType.STRING, description="name of the ssh key pair used to login to the virtual machine") private String sshKeyPairName; - + @IdentityMapper(entityTableName="host") @Parameter(name=ApiConstants.HOST_ID, type=CommandType.LONG, description="destination Host ID to deploy the VM to - parameter available for root admin only") private Long hostId; - + @ACL @IdentityMapper(entityTableName="security_group") @Parameter(name=ApiConstants.SECURITY_GROUP_IDS, type=CommandType.LIST, collectionType=CommandType.LONG, description="comma separated list of security groups id that going to be applied to the virtual machine. Should be passed only when vm is created from a zone with Basic Network support. Mutually exclusive with securitygroupnames parameter", resourceType=SecurityGroup.class) private List securityGroupIdList; - + @ACL @Parameter(name=ApiConstants.SECURITY_GROUP_NAMES, type=CommandType.LIST, collectionType=CommandType.STRING, description="comma separated list of security groups names that going to be applied to the virtual machine. Should be passed only when vm is created from a zone with Basic Network support. Mutually exclusive with securitygroupids parameter", resourceType=SecurityGroup.class) private List securityGroupNameList; - + @ACL(checkKeyAccess=true) @Parameter(name = ApiConstants.IP_NETWORK_LIST, type = CommandType.MAP, description = "ip to network mapping. Can't be specified with networkIds parameter. Example: iptonetworklist[0].ip=10.10.10.11&iptonetworklist[0].networkid=204 - requests to use ip 10.10.10.11 in network id=204",resourceType={Network.class,IpAddress.class}) private Map ipToNetworkList; - + @Parameter(name=ApiConstants.IP_ADDRESS, type=CommandType.STRING, description="the ip address for default vm's network") private String ipAddress; - + @Parameter(name=ApiConstants.KEYBOARD, type=CommandType.STRING, description="an optional keyboard device type for the virtual machine. valid value can be one of de,de-ch,es,fi,fr,fr-be,fr-ch,is,it,jp,nl-be,no,pt,uk,us") private String keyboard; - + @IdentityMapper(entityTableName="projects") @Parameter(name=ApiConstants.PROJECT_ID, type=CommandType.LONG, description="Deploy vm for the project") private Long projectId; - + @Parameter(name=ApiConstants.START_VM, type=CommandType.BOOLEAN, description="true if network offering supports specifying ip ranges; defaulted to true if not specified") private Boolean startVm; - + ///////////////////////////////////////////////////// /////////////////// Accessors /////////////////////// ///////////////////////////////////////////////////// public String getEntityTable() { - return "vm_instance"; + return "vm_instance"; } - + public String getAccountName() { if (accountName == null) { return UserContext.current().getCaller().getAccountName(); @@ -187,7 +187,7 @@ public class DeployVMCmd extends BaseAsyncCreateCmd { return group; } - public HypervisorType getHypervisor() { + public HypervisorType getHypervisor() { return HypervisorType.getType(hypervisor); } @@ -195,7 +195,7 @@ public class DeployVMCmd extends BaseAsyncCreateCmd { if (securityGroupNameList != null && securityGroupIdList != null) { throw new InvalidParameterValueException("securitygroupids parameter is mutually exclusive with securitygroupnames parameter"); } - + //transform group names to ids here if (securityGroupNameList != null) { List securityGroupIds = new ArrayList(); @@ -206,7 +206,7 @@ public class DeployVMCmd extends BaseAsyncCreateCmd { } else { securityGroupIds.add(groupId); } - } + } return securityGroupIds; } else { return securityGroupIdList; @@ -257,11 +257,11 @@ public class DeployVMCmd extends BaseAsyncCreateCmd { public Long getHostId() { return hostId; } - + public boolean getStartVm() { return startVm == null ? true : startVm; } - + private Map getIpToNetworkMap() { if ((networkIds != null || ipAddress != null) && ipToNetworkList != null) { throw new InvalidParameterValueException("NetworkIds and ipAddress can't be specified along with ipToNetworkMap parameter"); @@ -278,7 +278,7 @@ public class DeployVMCmd extends BaseAsyncCreateCmd { ipToNetworkMap.put(networkId, requestedIp); } } - + return ipToNetworkMap; } @@ -301,7 +301,7 @@ public class DeployVMCmd extends BaseAsyncCreateCmd { if (accountId == null) { return UserContext.current().getCaller().getId(); } - + return accountId; } @@ -333,7 +333,7 @@ public class DeployVMCmd extends BaseAsyncCreateCmd { @Override public void execute(){ UserVm result; - + if (getStartVm()) { try { UserContext.current().setEventDetails("Vm Id: "+getEntityId()); @@ -347,7 +347,7 @@ public class DeployVMCmd extends BaseAsyncCreateCmd { throw new ServerApiException(BaseCmd.RESOURCE_UNAVAILABLE_ERROR, ex.getMessage()); } catch (ConcurrentOperationException ex) { s_logger.warn("Exception: ", ex); - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, ex.getMessage()); + throw new ServerApiException(BaseCmd.INTERNAL_ERROR, ex.getMessage()); } catch (InsufficientCapacityException ex) { s_logger.info(ex); s_logger.trace(ex); @@ -356,7 +356,7 @@ public class DeployVMCmd extends BaseAsyncCreateCmd { } else { result = _userVmService.getUserVm(getEntityId()); } - + if (result != null) { UserVmResponse response = _responseGenerator.createUserVmResponse("virtualmachine", result).get(0); response.setResponseName(getCommandName()); @@ -445,7 +445,7 @@ public class DeployVMCmd extends BaseAsyncCreateCmd { } catch (ConcurrentOperationException ex) { s_logger.warn("Exception: ", ex); throw new ServerApiException(BaseCmd.INTERNAL_ERROR, ex.getMessage()); - } + } } } diff --git a/api/src/com/cloud/api/commands/DestroyVMCmd.java b/api/src/org/apache/cloudstack/api/user/vm/command/DestroyVMCmd.java similarity index 86% rename from api/src/com/cloud/api/commands/DestroyVMCmd.java rename to api/src/org/apache/cloudstack/api/user/vm/command/DestroyVMCmd.java index 1f7a2bf68a7..a308b69a9dd 100644 --- a/api/src/com/cloud/api/commands/DestroyVMCmd.java +++ b/api/src/org/apache/cloudstack/api/user/vm/command/DestroyVMCmd.java @@ -14,17 +14,17 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.user.vm.command; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseAsyncCmd; -import com.cloud.api.BaseCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseAsyncCmd; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.api.response.UserVmResponse; import com.cloud.async.AsyncJob; import com.cloud.event.EventTypes; @@ -85,13 +85,13 @@ public class DestroyVMCmd extends BaseAsyncCmd { public String getEventDescription() { return "destroying vm: " + getId(); } - + public AsyncJob.Type getInstanceType() { - return AsyncJob.Type.VirtualMachine; + return AsyncJob.Type.VirtualMachine; } - + public Long getInstanceId() { - return getId(); + return getId(); } @Override @@ -99,11 +99,11 @@ public class DestroyVMCmd extends BaseAsyncCmd { UserContext.current().setEventDetails("Vm Id: "+getId()); UserVm result; if (_userVmService.getHypervisorTypeOfUserVM(getId()) == HypervisorType.BareMetal) { - result = _bareMetalVmService.destroyVm(this); + result = _bareMetalVmService.destroyVm(this); } else { - result = _userVmService.destroyVm(this); + result = _userVmService.destroyVm(this); } - + if (result != null) { UserVmResponse response = _responseGenerator.createUserVmResponse("virtualmachine", result).get(0); response.setResponseName("virtualmachine"); diff --git a/api/src/com/cloud/api/commands/GetVMPasswordCmd.java b/api/src/org/apache/cloudstack/api/user/vm/command/GetVMPasswordCmd.java similarity index 77% rename from api/src/com/cloud/api/commands/GetVMPasswordCmd.java rename to api/src/org/apache/cloudstack/api/user/vm/command/GetVMPasswordCmd.java index a6a3c6d011c..54464eed2fb 100644 --- a/api/src/com/cloud/api/commands/GetVMPasswordCmd.java +++ b/api/src/org/apache/cloudstack/api/user/vm/command/GetVMPasswordCmd.java @@ -14,17 +14,17 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.user.vm.command; import java.security.InvalidParameterException; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; import com.cloud.api.response.GetVMPasswordResponse; import com.cloud.user.Account; import com.cloud.uservm.UserVm; @@ -34,7 +34,7 @@ public class GetVMPasswordCmd extends BaseCmd { public static final Logger s_logger = Logger.getLogger(GetVMPasswordCmd.class.getName()); private static final String s_name = "getvmpasswordresponse"; - + ///////////////////////////////////////////////////// //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// @@ -42,8 +42,8 @@ public class GetVMPasswordCmd extends BaseCmd { @IdentityMapper(entityTableName="vm_instance") @Parameter(name=ApiConstants.ID, type=CommandType.LONG, required=true, description="The ID of the virtual machine") private Long id; - - + + ///////////////////////////////////////////////////// /////////////////// Accessors /////////////////////// ///////////////////////////////////////////////////// @@ -52,20 +52,20 @@ public class GetVMPasswordCmd extends BaseCmd { return id; } - + ///////////////////////////////////////////////////// /////////////// API Implementation/////////////////// ///////////////////////////////////////////////////// - - @Override - public void execute() { - String passwd = _mgr.getVMPassword(this); - if (passwd == null || passwd.equals("")) - throw new InvalidParameterException("No password for VM with id '" + getId() + "' found."); - - this.setResponseObject(new GetVMPasswordResponse(getCommandName(), passwd)); - } - + + @Override + public void execute() { + String passwd = _mgr.getVMPassword(this); + if (passwd == null || passwd.equals("")) + throw new InvalidParameterException("No password for VM with id '" + getId() + "' found."); + + this.setResponseObject(new GetVMPasswordResponse(getCommandName(), passwd)); + } + @Override public long getEntityOwnerId() { UserVm userVm = _entityMgr.findById(UserVm.class, getId()); @@ -76,9 +76,9 @@ public class GetVMPasswordCmd extends BaseCmd { return Account.ACCOUNT_ID_SYSTEM; // no account info given, parent this command to SYSTEM so ERROR events are tracked } - @Override - public String getCommandName() { - return s_name; - } + @Override + public String getCommandName() { + return s_name; + } } diff --git a/api/src/com/cloud/api/commands/ListVMsCmd.java b/api/src/org/apache/cloudstack/api/user/vm/command/ListVMsCmd.java similarity index 89% rename from api/src/com/cloud/api/commands/ListVMsCmd.java rename to api/src/org/apache/cloudstack/api/user/vm/command/ListVMsCmd.java index 2f6f9886563..4acee5cc72f 100755 --- a/api/src/com/cloud/api/commands/ListVMsCmd.java +++ b/api/src/org/apache/cloudstack/api/user/vm/command/ListVMsCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.user.vm.command; import java.util.ArrayList; import java.util.EnumSet; @@ -22,12 +22,12 @@ import java.util.List; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.ApiConstants.VMDetails; -import com.cloud.api.BaseListTaggedResourcesCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiConstants.VMDetails; +import org.apache.cloudstack.api.BaseListTaggedResourcesCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; import com.cloud.api.response.ListResponse; import com.cloud.api.response.UserVmResponse; import com.cloud.async.AsyncJob; @@ -71,29 +71,29 @@ public class ListVMsCmd extends BaseListTaggedResourcesCmd { @IdentityMapper(entityTableName="data_center") @Parameter(name=ApiConstants.ZONE_ID, type=CommandType.LONG, description="the availability zone ID") private Long zoneId; - + @Parameter(name=ApiConstants.FOR_VIRTUAL_NETWORK, type=CommandType.BOOLEAN, description="list by network type; true if need to list vms using Virtual Network, false otherwise") private Boolean forVirtualNetwork; - + @IdentityMapper(entityTableName="networks") @Parameter(name=ApiConstants.NETWORK_ID, type=CommandType.LONG, description="list by network id") private Long networkId; @Parameter(name=ApiConstants.HYPERVISOR, type=CommandType.STRING, description="the target hypervisor for the template") private String hypervisor; - + @IdentityMapper(entityTableName="storage_pool") @Parameter(name=ApiConstants.STORAGE_ID, type=CommandType.LONG, description="the storage ID where vm's volumes belong to") private Long storageId; @Parameter(name=ApiConstants.DETAILS, type=CommandType.LIST, collectionType=CommandType.STRING, description="comma separated list of host details requested, " + - "value can be a list of [all, group, nics, stats, secgrp, tmpl, servoff, iso, volume, min]. If no parameter is passed in, the details will be defaulted to all" ) - private List viewDetails; + "value can be a list of [all, group, nics, stats, secgrp, tmpl, servoff, iso, volume, min]. If no parameter is passed in, the details will be defaulted to all" ) + private List viewDetails; @IdentityMapper(entityTableName="vm_template") @Parameter(name=ApiConstants.TEMPLATE_ID, type=CommandType.LONG, description="list vms by template") private Long templateId; - + @IdentityMapper(entityTableName="vm_template") @Parameter(name=ApiConstants.ISO_ID, type=CommandType.LONG, description="list vms by iso") private Long isoId; @@ -132,7 +132,7 @@ public class ListVMsCmd extends BaseListTaggedResourcesCmd { public Long getZoneId() { return zoneId; } - + public Boolean getForVirtualNetwork() { return forVirtualNetwork; } @@ -140,15 +140,15 @@ public class ListVMsCmd extends BaseListTaggedResourcesCmd { public void setForVirtualNetwork(Boolean forVirtualNetwork) { this.forVirtualNetwork = forVirtualNetwork; } - + public Long getNetworkId() { return networkId; } - + public String getHypervisor() { - return hypervisor; - } - + return hypervisor; + } + public Long getStorageId() { return storageId; } @@ -156,7 +156,7 @@ public class ListVMsCmd extends BaseListTaggedResourcesCmd { public Long getTemplateId() { return templateId; } - + public Long getIsoId() { return isoId; } @@ -164,7 +164,7 @@ public class ListVMsCmd extends BaseListTaggedResourcesCmd { public Long getVpcId(){ return vpcId; } - + public EnumSet getDetails() throws InvalidParameterValueException { EnumSet dv; if (viewDetails==null || viewDetails.size() <=0){ @@ -184,20 +184,20 @@ public class ListVMsCmd extends BaseListTaggedResourcesCmd { } return dv; } - + ///////////////////////////////////////////////////// /////////////// API Implementation/////////////////// ///////////////////////////////////////////////////// @Override - public String getCommandName() { + public String getCommandName() { return s_name; } - + public AsyncJob.Type getInstanceType() { - return AsyncJob.Type.VirtualMachine; + return AsyncJob.Type.VirtualMachine; } - @Override + @Override public void execute(){ Pair, Integer> result = _userVmService.searchForUserVMs(this); ListResponse response = new ListResponse(); @@ -207,11 +207,11 @@ public class ListVMsCmd extends BaseListTaggedResourcesCmd { 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()])); + vmResponses = _responseGenerator.createUserVmResponse("virtualmachine", getDetails(), result.first().toArray(new UserVm[result.first().size()])); } response.setResponses(vmResponses, result.second()); response.setResponseName(getCommandName()); this.setResponseObject(response); } - + } diff --git a/api/src/com/cloud/api/commands/RebootVMCmd.java b/api/src/org/apache/cloudstack/api/user/vm/command/RebootVMCmd.java similarity index 86% rename from api/src/com/cloud/api/commands/RebootVMCmd.java rename to api/src/org/apache/cloudstack/api/user/vm/command/RebootVMCmd.java index 9d8a18c0450..3d496b57039 100644 --- a/api/src/com/cloud/api/commands/RebootVMCmd.java +++ b/api/src/org/apache/cloudstack/api/user/vm/command/RebootVMCmd.java @@ -14,17 +14,17 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.user.vm.command; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseAsyncCmd; -import com.cloud.api.BaseCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseAsyncCmd; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.api.response.UserVmResponse; import com.cloud.async.AsyncJob; import com.cloud.event.EventTypes; @@ -39,7 +39,7 @@ import com.cloud.uservm.UserVm; public class RebootVMCmd extends BaseAsyncCmd { public static final Logger s_logger = Logger.getLogger(RebootVMCmd.class.getName()); private static final String s_name = "rebootvirtualmachineresponse"; - + ///////////////////////////////////////////////////// //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// @@ -84,25 +84,25 @@ public class RebootVMCmd extends BaseAsyncCmd { public String getEventDescription() { return "rebooting user vm: " + getId(); } - + public AsyncJob.Type getInstanceType() { - return AsyncJob.Type.VirtualMachine; + return AsyncJob.Type.VirtualMachine; } - + public Long getInstanceId() { - return getId(); + return getId(); } - + @Override public void execute() throws ResourceUnavailableException, InsufficientCapacityException{ UserContext.current().setEventDetails("Vm Id: "+getId()); UserVm result; if (_userVmService.getHypervisorTypeOfUserVM(getId()) == HypervisorType.BareMetal) { - result = _bareMetalVmService.rebootVirtualMachine(this); + result = _bareMetalVmService.rebootVirtualMachine(this); } else { - result = _userVmService.rebootVirtualMachine(this); + result = _userVmService.rebootVirtualMachine(this); } - + if (result !=null){ UserVmResponse response = _responseGenerator.createUserVmResponse("virtualmachine", result).get(0); response.setResponseName(getCommandName()); diff --git a/api/src/com/cloud/api/commands/ResetVMPasswordCmd.java b/api/src/org/apache/cloudstack/api/user/vm/command/ResetVMPasswordCmd.java similarity index 78% rename from api/src/com/cloud/api/commands/ResetVMPasswordCmd.java rename to api/src/org/apache/cloudstack/api/user/vm/command/ResetVMPasswordCmd.java index 1c036c81b20..d3fab261cb2 100644 --- a/api/src/com/cloud/api/commands/ResetVMPasswordCmd.java +++ b/api/src/org/apache/cloudstack/api/user/vm/command/ResetVMPasswordCmd.java @@ -14,17 +14,17 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.user.vm.command; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseAsyncCmd; -import com.cloud.api.BaseCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseAsyncCmd; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.api.response.UserVmResponse; import com.cloud.async.AsyncJob; import com.cloud.event.EventTypes; @@ -35,13 +35,13 @@ import com.cloud.user.UserContext; import com.cloud.uservm.UserVm; @Implementation(responseObject=UserVmResponse.class, description="Resets the password for virtual machine. " + - "The virtual machine must be in a \"Stopped\" state and the template must already " + - "support this feature for this command to take effect. [async]") + "The virtual machine must be in a \"Stopped\" state and the template must already " + + "support this feature for this command to take effect. [async]") public class ResetVMPasswordCmd extends BaseAsyncCmd { - public static final Logger s_logger = Logger.getLogger(ResetVMPasswordCmd.class.getName()); + public static final Logger s_logger = Logger.getLogger(ResetVMPasswordCmd.class.getName()); + + private static final String s_name = "resetpasswordforvirtualmachineresponse"; - private static final String s_name = "resetpasswordforvirtualmachineresponse"; - ///////////////////////////////////////////////////// //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// @@ -75,9 +75,9 @@ public class ResetVMPasswordCmd extends BaseAsyncCmd { ///////////////////////////////////////////////////// @Override - public String getCommandName() { - return s_name; - } + public String getCommandName() { + return s_name; + } @Override public long getEntityOwnerId() { @@ -98,13 +98,13 @@ public class ResetVMPasswordCmd extends BaseAsyncCmd { public String getEventDescription() { return "resetting password for vm: " + getId(); } - + public AsyncJob.Type getInstanceType() { - return AsyncJob.Type.VirtualMachine; + return AsyncJob.Type.VirtualMachine; } - + public Long getInstanceId() { - return getId(); + return getId(); } @Override diff --git a/api/src/com/cloud/api/commands/RestoreVMCmd.java b/api/src/org/apache/cloudstack/api/user/vm/command/RestoreVMCmd.java similarity index 51% rename from api/src/com/cloud/api/commands/RestoreVMCmd.java rename to api/src/org/apache/cloudstack/api/user/vm/command/RestoreVMCmd.java index 31d2c229dee..c4ff9aad485 100755 --- a/api/src/com/cloud/api/commands/RestoreVMCmd.java +++ b/api/src/org/apache/cloudstack/api/user/vm/command/RestoreVMCmd.java @@ -14,17 +14,17 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.user.vm.command; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseAsyncCmd; -import com.cloud.api.BaseCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseAsyncCmd; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.api.response.UserVmResponse; import com.cloud.event.EventTypes; import com.cloud.exception.ConcurrentOperationException; @@ -37,54 +37,54 @@ import com.cloud.uservm.UserVm; @Implementation(description="Restore a VM to original template or specific snapshot", responseObject=UserVmResponse.class, since="3.0.0") public class RestoreVMCmd extends BaseAsyncCmd { - public static final Logger s_logger = Logger.getLogger(RestoreVMCmd.class); - private static final String s_name = "restorevmresponse"; - + public static final Logger s_logger = Logger.getLogger(RestoreVMCmd.class); + private static final String s_name = "restorevmresponse"; + @IdentityMapper(entityTableName="vm_instance") @Parameter(name=ApiConstants.VIRTUAL_MACHINE_ID, type=CommandType.LONG, required=true, description="Virtual Machine ID") private Long vmId; - - @Override - public String getEventType() { - return EventTypes.EVENT_VM_RESTORE; - } - @Override - public String getEventDescription() { - return "Restore a VM to orignal template or specific snapshot"; - } + @Override + public String getEventType() { + return EventTypes.EVENT_VM_RESTORE; + } - @Override - public void execute() throws ResourceUnavailableException, InsufficientCapacityException, ServerApiException, ConcurrentOperationException, - ResourceAllocationException { - UserVm result; - UserContext.current().setEventDetails("Vm Id: " + getVmId()); - result = _userVmService.restoreVM(this); - if (result != null) { + @Override + public String getEventDescription() { + return "Restore a VM to orignal template or specific snapshot"; + } + + @Override + public void execute() throws ResourceUnavailableException, InsufficientCapacityException, ServerApiException, ConcurrentOperationException, + ResourceAllocationException { + UserVm result; + UserContext.current().setEventDetails("Vm Id: " + getVmId()); + result = _userVmService.restoreVM(this); + if (result != null) { UserVmResponse response = _responseGenerator.createUserVmResponse("virtualmachine", result).get(0); response.setResponseName(getCommandName()); this.setResponseObject(response); - } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to restore vm " + getVmId()); - } - } + } else { + throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to restore vm " + getVmId()); + } + } - @Override - public String getCommandName() { - return s_name; - } + @Override + public String getCommandName() { + return s_name; + } - @Override - public long getEntityOwnerId() { - UserVm vm = _responseGenerator.findUserVmById(getVmId()); - if (vm == null) { - return Account.ACCOUNT_ID_SYSTEM; // bad id given, parent this command to SYSTEM so ERROR events are tracked - } - return vm.getAccountId(); - } - - public long getVmId() { - return vmId; - } + @Override + public long getEntityOwnerId() { + UserVm vm = _responseGenerator.findUserVmById(getVmId()); + if (vm == null) { + return Account.ACCOUNT_ID_SYSTEM; // bad id given, parent this command to SYSTEM so ERROR events are tracked + } + return vm.getAccountId(); + } + + public long getVmId() { + return vmId; + } } diff --git a/api/src/com/cloud/api/commands/StartVMCmd.java b/api/src/org/apache/cloudstack/api/user/vm/command/StartVMCmd.java similarity index 92% rename from api/src/com/cloud/api/commands/StartVMCmd.java rename to api/src/org/apache/cloudstack/api/user/vm/command/StartVMCmd.java index c77213fd5f9..406ffb9f799 100644 --- a/api/src/com/cloud/api/commands/StartVMCmd.java +++ b/api/src/org/apache/cloudstack/api/user/vm/command/StartVMCmd.java @@ -14,17 +14,17 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.user.vm.command; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseAsyncCmd; -import com.cloud.api.BaseCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseAsyncCmd; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.api.response.UserVmResponse; import com.cloud.async.AsyncJob; import com.cloud.event.EventTypes; @@ -52,7 +52,7 @@ public class StartVMCmd extends BaseAsyncCmd { @IdentityMapper(entityTableName = "vm_instance") @Parameter(name = ApiConstants.ID, type = CommandType.LONG, required = true, description = "The ID of the virtual machine") private Long id; - + @IdentityMapper(entityTableName="host") @Parameter(name=ApiConstants.HOST_ID, type=CommandType.LONG, description="destination Host ID to deploy the VM to - parameter available for root admin only", since="3.0.1") private Long hostId; @@ -64,10 +64,10 @@ public class StartVMCmd extends BaseAsyncCmd { public Long getId() { return id; } - + public Long getHostId() { return hostId; - } + } // /////////////////////////////////////////////////// // ///////////// API Implementation/////////////////// @@ -115,7 +115,7 @@ public class StartVMCmd extends BaseAsyncCmd { public void execute() throws ResourceUnavailableException, InsufficientCapacityException, ResourceAllocationException { try { UserContext.current().setEventDetails("Vm Id: " + getId()); - + UserVm result ; if (_userVmService.getHypervisorTypeOfUserVM(getId()) == HypervisorType.BareMetal) { result = _bareMetalVmService.startVirtualMachine(this); diff --git a/api/src/com/cloud/api/commands/StopVMCmd.java b/api/src/org/apache/cloudstack/api/user/vm/command/StopVMCmd.java similarity index 91% rename from api/src/com/cloud/api/commands/StopVMCmd.java rename to api/src/org/apache/cloudstack/api/user/vm/command/StopVMCmd.java index eaa617a4c69..2de20577b0a 100644 --- a/api/src/com/cloud/api/commands/StopVMCmd.java +++ b/api/src/org/apache/cloudstack/api/user/vm/command/StopVMCmd.java @@ -14,17 +14,17 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.user.vm.command; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseAsyncCmd; -import com.cloud.api.BaseCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseAsyncCmd; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.api.response.UserVmResponse; import com.cloud.async.AsyncJob; import com.cloud.event.EventTypes; diff --git a/api/src/com/cloud/api/commands/UpdateVMCmd.java b/api/src/org/apache/cloudstack/api/user/vm/command/UpdateVMCmd.java similarity index 92% rename from api/src/com/cloud/api/commands/UpdateVMCmd.java rename to api/src/org/apache/cloudstack/api/user/vm/command/UpdateVMCmd.java index 462fe194a8a..2a8dfca847e 100644 --- a/api/src/com/cloud/api/commands/UpdateVMCmd.java +++ b/api/src/org/apache/cloudstack/api/user/vm/command/UpdateVMCmd.java @@ -14,16 +14,16 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.user.vm.command; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.api.response.UserVmResponse; import com.cloud.exception.InsufficientCapacityException; import com.cloud.exception.ResourceUnavailableException; @@ -55,14 +55,14 @@ public class UpdateVMCmd extends BaseCmd{ @IdentityMapper(entityTableName="vm_instance") @Parameter(name=ApiConstants.ID, type=CommandType.LONG, required=true, description="The ID of the virtual machine") private Long id; - + @IdentityMapper(entityTableName="guest_os") @Parameter(name=ApiConstants.OS_TYPE_ID, type=CommandType.LONG, description="the ID of the OS type that best represents this VM.") private Long osTypeId; - + @Parameter(name=ApiConstants.USER_DATA, type=CommandType.STRING, description="an optional binary data that can be sent to the virtual machine upon a successful deployment. This binary data must be base64 encoded before adding it to the request. Currently only HTTP GET is supported. Using HTTP GET (via querystring), you can send up to 2KB of data after base64 encoding.", length=2048) private String userData; - + ///////////////////////////////////////////////////// /////////////////// Accessors /////////////////////// @@ -83,7 +83,7 @@ public class UpdateVMCmd extends BaseCmd{ public Long getId() { return id; } - + public String getUserData() { return userData; } @@ -100,11 +100,11 @@ public class UpdateVMCmd extends BaseCmd{ public String getCommandName() { return s_name; } - + public static String getResultObjectName() { - return "virtualmachine"; + return "virtualmachine"; } - + @Override public long getEntityOwnerId() { UserVm userVm = _entityMgr.findById(UserVm.class, getId()); diff --git a/api/src/com/cloud/api/commands/UpgradeVMCmd.java b/api/src/org/apache/cloudstack/api/user/vm/command/UpgradeVMCmd.java similarity index 85% rename from api/src/com/cloud/api/commands/UpgradeVMCmd.java rename to api/src/org/apache/cloudstack/api/user/vm/command/UpgradeVMCmd.java index 56ddb820cb2..32ff9189710 100644 --- a/api/src/com/cloud/api/commands/UpgradeVMCmd.java +++ b/api/src/org/apache/cloudstack/api/user/vm/command/UpgradeVMCmd.java @@ -14,16 +14,16 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.user.vm.command; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.api.response.UserVmResponse; import com.cloud.exception.InvalidParameterValueException; import com.cloud.offering.ServiceOffering; @@ -32,8 +32,8 @@ import com.cloud.user.UserContext; import com.cloud.uservm.UserVm; @Implementation(responseObject=UserVmResponse.class, description="Changes the service offering for a virtual machine. " + - "The virtual machine must be in a \"Stopped\" state for " + - "this command to take effect.") + "The virtual machine must be in a \"Stopped\" state for " + + "this command to take effect.") public class UpgradeVMCmd extends BaseCmd { public static final Logger s_logger = Logger.getLogger(UpgradeVMCmd.class.getName()); private static final String s_name = "changeserviceforvirtualmachineresponse"; @@ -72,9 +72,9 @@ public class UpgradeVMCmd extends BaseCmd { } public static String getResultObjectName() { - return "virtualmachine"; + return "virtualmachine"; } - + @Override public long getEntityOwnerId() { UserVm userVm = _entityMgr.findById(UserVm.class, getId()); @@ -84,16 +84,16 @@ public class UpgradeVMCmd extends BaseCmd { return Account.ACCOUNT_ID_SYSTEM; // no account info given, parent this command to SYSTEM so ERROR events are tracked } - + @Override public void execute(){ UserContext.current().setEventDetails("Vm Id: "+getId()); - + ServiceOffering serviceOffering = _configService.getServiceOffering(serviceOfferingId); if (serviceOffering == null) { throw new InvalidParameterValueException("Unable to find service offering: " + serviceOfferingId); } - + UserVm result = _userVmService.upgradeVirtualMachine(this); if (result != null){ UserVmResponse response = _responseGenerator.createUserVmResponse("virtualmachine", result).get(0); diff --git a/api/src/com/cloud/api/commands/CreateRemoteAccessVpnCmd.java b/api/src/org/apache/cloudstack/api/user/vpn/command/CreateRemoteAccessVpnCmd.java similarity index 79% rename from api/src/com/cloud/api/commands/CreateRemoteAccessVpnCmd.java rename to api/src/org/apache/cloudstack/api/user/vpn/command/CreateRemoteAccessVpnCmd.java index 6787d1fb78f..161c064096f 100644 --- a/api/src/com/cloud/api/commands/CreateRemoteAccessVpnCmd.java +++ b/api/src/org/apache/cloudstack/api/user/vpn/command/CreateRemoteAccessVpnCmd.java @@ -14,18 +14,18 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.user.vpn.command; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseAsyncCmd; -import com.cloud.api.BaseAsyncCreateCmd; -import com.cloud.api.BaseCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseAsyncCmd; +import org.apache.cloudstack.api.BaseAsyncCreateCmd; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.api.response.RemoteAccessVpnResponse; import com.cloud.event.EventTypes; import com.cloud.exception.InvalidParameterValueException; @@ -49,7 +49,7 @@ public class CreateRemoteAccessVpnCmd extends BaseAsyncCreateCmd { @Parameter(name="iprange", type=CommandType.STRING, required=false, description="the range of ip addresses to allocate to vpn clients. The first ip in the range will be taken by the vpn server") private String ipRange; - + @Deprecated @Parameter(name=ApiConstants.ACCOUNT, type=CommandType.STRING, description="an optional account for the VPN. Must be used with domainId.") private String accountName; @@ -58,46 +58,46 @@ public class CreateRemoteAccessVpnCmd extends BaseAsyncCreateCmd { @IdentityMapper(entityTableName="domain") @Parameter(name=ApiConstants.DOMAIN_ID, type=CommandType.LONG, description="an optional domainId for the VPN. If the account parameter is used, domainId must also be used.") private Long domainId; - + @Parameter(name = ApiConstants.OPEN_FIREWALL, type = CommandType.BOOLEAN, description = "if true, firewall rule for source/end pubic port is automatically created; if false - firewall rule has to be created explicitely. Has value true by default") private Boolean openFirewall; - + ///////////////////////////////////////////////////// /////////////////// Accessors /////////////////////// ///////////////////////////////////////////////////// public String getEntityTable() { - return "user_ip_address"; + return "user_ip_address"; } - + public Long getPublicIpId() { - return publicIpId; - } - - public String getAccountName() { - return accountName; - } - - public Long getDomainId() { - return domainId; - } - - public String getIpRange() { - return ipRange; - } - - public void setIpRange(String ipRange) { - this.ipRange = ipRange; - } - - public Boolean getOpenFirewall() { - if (openFirewall != null) { - return openFirewall; - } else { - return true; - } + return publicIpId; } - + + public String getAccountName() { + return accountName; + } + + public Long getDomainId() { + return domainId; + } + + public String getIpRange() { + return ipRange; + } + + public void setIpRange(String ipRange) { + this.ipRange = ipRange; + } + + public Boolean getOpenFirewall() { + if (openFirewall != null) { + return openFirewall; + } else { + return true; + } + } + ///////////////////////////////////////////////////// /////////////// API Implementation/////////////////// ///////////////////////////////////////////////////// @@ -108,42 +108,42 @@ public class CreateRemoteAccessVpnCmd extends BaseAsyncCreateCmd { return s_name; } - @Override - public long getEntityOwnerId() { - IpAddress ip = _networkService.getIp(publicIpId); - - if (ip == null) { - throw new InvalidParameterValueException("Unable to find ip address by id=" + publicIpId); - } - - return ip.getAccountId(); + @Override + public long getEntityOwnerId() { + IpAddress ip = _networkService.getIp(publicIpId); + + if (ip == null) { + throw new InvalidParameterValueException("Unable to find ip address by id=" + publicIpId); + } + + return ip.getAccountId(); } - @Override - public String getEventDescription() { - return "Create Remote Access VPN for account " + getEntityOwnerId() + " using public ip id=" + publicIpId; - } + @Override + public String getEventDescription() { + return "Create Remote Access VPN for account " + getEntityOwnerId() + " using public ip id=" + publicIpId; + } + + @Override + public String getEventType() { + return EventTypes.EVENT_REMOTE_ACCESS_VPN_CREATE; + } - @Override - public String getEventType() { - return EventTypes.EVENT_REMOTE_ACCESS_VPN_CREATE; - } - public long getNetworkId() { IpAddress ip = _entityMgr.findById(IpAddress.class, getPublicIpId()); Long ntwkId = null; - + if (ip.getAssociatedWithNetworkId() != null) { ntwkId = ip.getAssociatedWithNetworkId(); } - + if (ntwkId == null) { - throw new InvalidParameterValueException("Unable to create remote access vpn for the ipAddress id=" + getPublicIpId() + + throw new InvalidParameterValueException("Unable to create remote access vpn for the ipAddress id=" + getPublicIpId() + " as ip is not associated with any network and no networkId is passed in"); } return ntwkId; } - + @Override public void create() { try { @@ -176,8 +176,8 @@ public class CreateRemoteAccessVpnCmd extends BaseAsyncCreateCmd { throw new ServerApiException(BaseCmd.RESOURCE_UNAVAILABLE_ERROR, ex.getMessage()); } } - - + + @Override public String getSyncObjType() { return BaseAsyncCmd.networkSyncObject; diff --git a/api/src/com/cloud/api/commands/CreateVpnConnectionCmd.java b/api/src/org/apache/cloudstack/api/user/vpn/command/CreateVpnConnectionCmd.java similarity index 91% rename from api/src/com/cloud/api/commands/CreateVpnConnectionCmd.java rename to api/src/org/apache/cloudstack/api/user/vpn/command/CreateVpnConnectionCmd.java index 7a506b1648b..b3d2824e90a 100644 --- a/api/src/com/cloud/api/commands/CreateVpnConnectionCmd.java +++ b/api/src/org/apache/cloudstack/api/user/vpn/command/CreateVpnConnectionCmd.java @@ -14,18 +14,18 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.user.vpn.command; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseAsyncCmd; -import com.cloud.api.BaseAsyncCreateCmd; -import com.cloud.api.BaseCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseAsyncCmd; +import org.apache.cloudstack.api.BaseAsyncCreateCmd; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.api.response.Site2SiteVpnConnectionResponse; import com.cloud.event.EventTypes; import com.cloud.exception.NetworkRuleConflictException; @@ -56,13 +56,13 @@ public class CreateVpnConnectionCmd extends BaseAsyncCreateCmd { ///////////////////////////////////////////////////// public String getEntityTable() { - return "s2s_vpn_connection"; + return "s2s_vpn_connection"; } - + public Long getVpnGatewayId() { return vpnGatewayId; } - + public Long getCustomerGatewayId() { return customerGatewayId; } @@ -125,8 +125,8 @@ public class CreateVpnConnectionCmd extends BaseAsyncCreateCmd { throw new ServerApiException(BaseCmd.RESOURCE_UNAVAILABLE_ERROR, ex.getMessage()); } } - - + + @Override public String getSyncObjType() { return BaseAsyncCmd.vpcSyncObject; diff --git a/api/src/com/cloud/api/commands/CreateVpnCustomerGatewayCmd.java b/api/src/org/apache/cloudstack/api/user/vpn/command/CreateVpnCustomerGatewayCmd.java similarity index 86% rename from api/src/com/cloud/api/commands/CreateVpnCustomerGatewayCmd.java rename to api/src/org/apache/cloudstack/api/user/vpn/command/CreateVpnCustomerGatewayCmd.java index 1120026da12..99cb62b1f15 100644 --- a/api/src/com/cloud/api/commands/CreateVpnCustomerGatewayCmd.java +++ b/api/src/org/apache/cloudstack/api/user/vpn/command/CreateVpnCustomerGatewayCmd.java @@ -14,17 +14,17 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.user.vpn.command; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseAsyncCmd; -import com.cloud.api.BaseCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseAsyncCmd; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.api.response.Site2SiteCustomerGatewayResponse; import com.cloud.event.EventTypes; import com.cloud.network.Site2SiteCustomerGateway; @@ -59,7 +59,7 @@ public class CreateVpnCustomerGatewayCmd extends BaseAsyncCmd { @Parameter(name=ApiConstants.IKE_LIFETIME, type=CommandType.LONG, required=false, description="Lifetime of phase 1 VPN connection to the customer gateway, in seconds") private Long ikeLifetime; - + @Parameter(name=ApiConstants.ESP_LIFETIME, type=CommandType.LONG, required=false, description="Lifetime of phase 2 VPN connection to the customer gateway, in seconds") private Long espLifetime; @@ -68,20 +68,20 @@ public class CreateVpnCustomerGatewayCmd extends BaseAsyncCmd { @Parameter(name=ApiConstants.ACCOUNT, type=CommandType.STRING, description="the account associated with the gateway. Must be used with the domainId parameter.") private String accountName; - + @IdentityMapper(entityTableName="domain") @Parameter(name=ApiConstants.DOMAIN_ID, type=CommandType.LONG, description="the domain ID associated with the gateway. " + - "If used with the account parameter returns the gateway associated with the account for the specified domain.") + "If used with the account parameter returns the gateway associated with the account for the specified domain.") private Long domainId; - + ///////////////////////////////////////////////////// /////////////////// Accessors /////////////////////// ///////////////////////////////////////////////////// public String getEntityTable() { - return "s2s_customer_gateway"; + return "s2s_customer_gateway"; } - + public String getName() { return name; } @@ -136,8 +136,8 @@ public class CreateVpnCustomerGatewayCmd extends BaseAsyncCmd { return s_name; } - @Override - public long getEntityOwnerId() { + @Override + public long getEntityOwnerId() { Long accountId = finalyzeAccountId(accountName, domainId, null, true); if (accountId == null) { accountId = UserContext.current().getCaller().getId(); @@ -145,16 +145,16 @@ public class CreateVpnCustomerGatewayCmd extends BaseAsyncCmd { return accountId; } - @Override - public String getEventDescription() { - return "Create site-to-site VPN customer gateway for account " + getEntityOwnerId(); - } + @Override + public String getEventDescription() { + return "Create site-to-site VPN customer gateway for account " + getEntityOwnerId(); + } + + @Override + public String getEventType() { + return EventTypes.EVENT_S2S_VPN_CUSTOMER_GATEWAY_CREATE; + } - @Override - public String getEventType() { - return EventTypes.EVENT_S2S_VPN_CUSTOMER_GATEWAY_CREATE; - } - @Override public void execute(){ Site2SiteCustomerGateway result = _s2sVpnService.createCustomerGateway(this); diff --git a/api/src/com/cloud/api/commands/CreateVpnGatewayCmd.java b/api/src/org/apache/cloudstack/api/user/vpn/command/CreateVpnGatewayCmd.java similarity index 89% rename from api/src/com/cloud/api/commands/CreateVpnGatewayCmd.java rename to api/src/org/apache/cloudstack/api/user/vpn/command/CreateVpnGatewayCmd.java index 83558c0413b..7a13c028c64 100644 --- a/api/src/com/cloud/api/commands/CreateVpnGatewayCmd.java +++ b/api/src/org/apache/cloudstack/api/user/vpn/command/CreateVpnGatewayCmd.java @@ -14,17 +14,17 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.user.vpn.command; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseAsyncCmd; -import com.cloud.api.BaseCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseAsyncCmd; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.api.response.Site2SiteVpnGatewayResponse; import com.cloud.event.EventTypes; import com.cloud.network.Site2SiteVpnGateway; @@ -33,7 +33,7 @@ import com.cloud.network.vpc.Vpc; @Implementation(description="Creates site to site vpn local gateway", responseObject=Site2SiteVpnGatewayResponse.class) public class CreateVpnGatewayCmd extends BaseAsyncCmd { public static final Logger s_logger = Logger.getLogger(CreateVpnGatewayCmd.class.getName()); - + private static final String s_name = "createvpngatewayresponse"; ///////////////////////////////////////////////////// @@ -93,7 +93,7 @@ public class CreateVpnGatewayCmd extends BaseAsyncCmd { throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to create VPN gateway"); } } - + @Override public String getSyncObjType() { return BaseAsyncCmd.vpcSyncObject; diff --git a/api/src/com/cloud/api/commands/DeleteRemoteAccessVpnCmd.java b/api/src/org/apache/cloudstack/api/user/vpn/command/DeleteRemoteAccessVpnCmd.java similarity index 74% rename from api/src/com/cloud/api/commands/DeleteRemoteAccessVpnCmd.java rename to api/src/org/apache/cloudstack/api/user/vpn/command/DeleteRemoteAccessVpnCmd.java index 899142b357f..03baf97d47b 100644 --- a/api/src/com/cloud/api/commands/DeleteRemoteAccessVpnCmd.java +++ b/api/src/org/apache/cloudstack/api/user/vpn/command/DeleteRemoteAccessVpnCmd.java @@ -14,22 +14,22 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.user.vpn.command; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseAsyncCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseAsyncCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; import com.cloud.api.response.SuccessResponse; import com.cloud.event.EventTypes; import com.cloud.exception.InvalidParameterValueException; import com.cloud.exception.ResourceUnavailableException; import com.cloud.network.RemoteAccessVpn; import com.cloud.user.UserContext; - + @Implementation(description="Destroys a l2tp/ipsec remote access vpn", responseObject=SuccessResponse.class) public class DeleteRemoteAccessVpnCmd extends BaseAsyncCmd { public static final Logger s_logger = Logger.getLogger(DeleteRemoteAccessVpnCmd.class.getName()); @@ -42,7 +42,7 @@ public class DeleteRemoteAccessVpnCmd extends BaseAsyncCmd { @IdentityMapper(entityTableName="user_ip_address") @Parameter(name=ApiConstants.PUBLIC_IP_ID, type=CommandType.LONG, required=true, description="public ip address id of the vpn server") private Long publicIpId; - + // unexposed parameter needed for events logging @IdentityMapper(entityTableName="account") @Parameter(name=ApiConstants.ACCOUNT_ID, type=CommandType.LONG, expose=false) @@ -50,43 +50,43 @@ public class DeleteRemoteAccessVpnCmd extends BaseAsyncCmd { ///////////////////////////////////////////////////// /////////////////// Accessors /////////////////////// ///////////////////////////////////////////////////// - + ///////////////////////////////////////////////////// /////////////// API Implementation/////////////////// ///////////////////////////////////////////////////// - @Override + @Override public String getCommandName() { return s_name; } - @Override - public long getEntityOwnerId() { - if (ownerId == null) { - RemoteAccessVpn vpnEntity = _entityMgr.findById(RemoteAccessVpn.class, publicIpId); - if(vpnEntity != null) - return vpnEntity.getAccountId(); - - throw new InvalidParameterValueException("The specified public ip is not allocated to any account"); - } - return ownerId; + @Override + public long getEntityOwnerId() { + if (ownerId == null) { + RemoteAccessVpn vpnEntity = _entityMgr.findById(RemoteAccessVpn.class, publicIpId); + if(vpnEntity != null) + return vpnEntity.getAccountId(); + + throw new InvalidParameterValueException("The specified public ip is not allocated to any account"); + } + return ownerId; } - @Override - public String getEventDescription() { - return "Delete Remote Access VPN for account " + getEntityOwnerId() + " for ip id=" + publicIpId; - } + @Override + public String getEventDescription() { + return "Delete Remote Access VPN for account " + getEntityOwnerId() + " for ip id=" + publicIpId; + } - @Override - public String getEventType() { - return EventTypes.EVENT_REMOTE_ACCESS_VPN_DESTROY; - } + @Override + public String getEventType() { + return EventTypes.EVENT_REMOTE_ACCESS_VPN_DESTROY; + } @Override public void execute() throws ResourceUnavailableException { _ravService.destroyRemoteAccessVpn(publicIpId, UserContext.current().getCaller()); } - + @Override public String getSyncObjType() { return BaseAsyncCmd.networkSyncObject; @@ -96,5 +96,5 @@ public class DeleteRemoteAccessVpnCmd extends BaseAsyncCmd { public Long getSyncObjId() { return _ravService.getRemoteAccessVpn(publicIpId).getNetworkId(); } - + } diff --git a/api/src/com/cloud/api/commands/DeleteVpnConnectionCmd.java b/api/src/org/apache/cloudstack/api/user/vpn/command/DeleteVpnConnectionCmd.java similarity index 81% rename from api/src/com/cloud/api/commands/DeleteVpnConnectionCmd.java rename to api/src/org/apache/cloudstack/api/user/vpn/command/DeleteVpnConnectionCmd.java index e4b527500f5..19603bc33b2 100644 --- a/api/src/com/cloud/api/commands/DeleteVpnConnectionCmd.java +++ b/api/src/org/apache/cloudstack/api/user/vpn/command/DeleteVpnConnectionCmd.java @@ -14,17 +14,17 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.user.vpn.command; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseAsyncCmd; -import com.cloud.api.BaseCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseAsyncCmd; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.api.response.SuccessResponse; import com.cloud.event.EventTypes; import com.cloud.exception.ResourceUnavailableException; @@ -49,9 +49,9 @@ public class DeleteVpnConnectionCmd extends BaseAsyncCmd { ///////////////////////////////////////////////////// public String getEntityTable() { - return "s2s_vpn_connection"; + return "s2s_vpn_connection"; } - + public Long getId() { return id; } @@ -66,8 +66,8 @@ public class DeleteVpnConnectionCmd extends BaseAsyncCmd { return s_name; } - @Override - public long getEntityOwnerId() { + @Override + public long getEntityOwnerId() { Site2SiteVpnConnection conn = _entityMgr.findById(Site2SiteVpnConnection.class, getId()); if (conn != null) { return conn.getAccountId(); @@ -75,16 +75,16 @@ public class DeleteVpnConnectionCmd extends BaseAsyncCmd { return Account.ACCOUNT_ID_SYSTEM; } - @Override - public String getEventDescription() { - return "Delete site-to-site VPN connection for account " + getEntityOwnerId(); - } + @Override + public String getEventDescription() { + return "Delete site-to-site VPN connection for account " + getEntityOwnerId(); + } + + @Override + public String getEventType() { + return EventTypes.EVENT_S2S_VPN_CONNECTION_DELETE; + } - @Override - public String getEventType() { - return EventTypes.EVENT_S2S_VPN_CONNECTION_DELETE; - } - @Override public void execute(){ try { diff --git a/api/src/com/cloud/api/commands/DeleteVpnCustomerGatewayCmd.java b/api/src/org/apache/cloudstack/api/user/vpn/command/DeleteVpnCustomerGatewayCmd.java similarity index 79% rename from api/src/com/cloud/api/commands/DeleteVpnCustomerGatewayCmd.java rename to api/src/org/apache/cloudstack/api/user/vpn/command/DeleteVpnCustomerGatewayCmd.java index df853234dd2..7002d93e261 100644 --- a/api/src/com/cloud/api/commands/DeleteVpnCustomerGatewayCmd.java +++ b/api/src/org/apache/cloudstack/api/user/vpn/command/DeleteVpnCustomerGatewayCmd.java @@ -14,17 +14,17 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.user.vpn.command; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseAsyncCmd; -import com.cloud.api.BaseCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseAsyncCmd; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.api.response.SuccessResponse; import com.cloud.event.EventTypes; import com.cloud.network.Site2SiteCustomerGateway; @@ -48,9 +48,9 @@ public class DeleteVpnCustomerGatewayCmd extends BaseAsyncCmd { ///////////////////////////////////////////////////// public String getEntityTable() { - return "s2s_customer_gateway"; + return "s2s_customer_gateway"; } - + public Long getId() { return id; } @@ -65,8 +65,8 @@ public class DeleteVpnCustomerGatewayCmd extends BaseAsyncCmd { return s_name; } - @Override - public long getEntityOwnerId() { + @Override + public long getEntityOwnerId() { Site2SiteCustomerGateway gw = _entityMgr.findById(Site2SiteCustomerGateway.class, getId()); if (gw != null) { return gw.getAccountId(); @@ -74,16 +74,16 @@ public class DeleteVpnCustomerGatewayCmd extends BaseAsyncCmd { return Account.ACCOUNT_ID_SYSTEM; } - @Override - public String getEventDescription() { - return "Delete site-to-site VPN customer gateway for account " + getEntityOwnerId(); - } + @Override + public String getEventDescription() { + return "Delete site-to-site VPN customer gateway for account " + getEntityOwnerId(); + } + + @Override + public String getEventType() { + return EventTypes.EVENT_S2S_VPN_CUSTOMER_GATEWAY_DELETE; + } - @Override - public String getEventType() { - return EventTypes.EVENT_S2S_VPN_CUSTOMER_GATEWAY_DELETE; - } - @Override public void execute(){ boolean result = _s2sVpnService.deleteCustomerGateway(this); diff --git a/api/src/com/cloud/api/commands/DeleteVpnGatewayCmd.java b/api/src/org/apache/cloudstack/api/user/vpn/command/DeleteVpnGatewayCmd.java similarity index 79% rename from api/src/com/cloud/api/commands/DeleteVpnGatewayCmd.java rename to api/src/org/apache/cloudstack/api/user/vpn/command/DeleteVpnGatewayCmd.java index b29f193ac71..b5c4c9f35d2 100644 --- a/api/src/com/cloud/api/commands/DeleteVpnGatewayCmd.java +++ b/api/src/org/apache/cloudstack/api/user/vpn/command/DeleteVpnGatewayCmd.java @@ -14,17 +14,17 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.user.vpn.command; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseAsyncCmd; -import com.cloud.api.BaseCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseAsyncCmd; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.api.response.SuccessResponse; import com.cloud.event.EventTypes; import com.cloud.network.Site2SiteVpnGateway; @@ -48,9 +48,9 @@ public class DeleteVpnGatewayCmd extends BaseAsyncCmd { ///////////////////////////////////////////////////// public String getEntityTable() { - return "s2s_vpn_gateway"; + return "s2s_vpn_gateway"; } - + public Long getId() { return id; } @@ -65,8 +65,8 @@ public class DeleteVpnGatewayCmd extends BaseAsyncCmd { return s_name; } - @Override - public long getEntityOwnerId() { + @Override + public long getEntityOwnerId() { Site2SiteVpnGateway gw = _entityMgr.findById(Site2SiteVpnGateway.class, getId()); if (gw != null) { return gw.getAccountId(); @@ -74,16 +74,16 @@ public class DeleteVpnGatewayCmd extends BaseAsyncCmd { return Account.ACCOUNT_ID_SYSTEM; } - @Override - public String getEventDescription() { - return "Delete site-to-site VPN gateway for account " + getEntityOwnerId(); - } + @Override + public String getEventDescription() { + return "Delete site-to-site VPN gateway for account " + getEntityOwnerId(); + } + + @Override + public String getEventType() { + return EventTypes.EVENT_S2S_VPN_GATEWAY_DELETE; + } - @Override - public String getEventType() { - return EventTypes.EVENT_S2S_VPN_GATEWAY_DELETE; - } - @Override public void execute(){ boolean result = false; diff --git a/api/src/com/cloud/api/commands/ListRemoteAccessVpnsCmd.java b/api/src/org/apache/cloudstack/api/user/vpn/command/ListRemoteAccessVpnsCmd.java similarity index 90% rename from api/src/com/cloud/api/commands/ListRemoteAccessVpnsCmd.java rename to api/src/org/apache/cloudstack/api/user/vpn/command/ListRemoteAccessVpnsCmd.java index 9dd16448086..1125fbab981 100644 --- a/api/src/com/cloud/api/commands/ListRemoteAccessVpnsCmd.java +++ b/api/src/org/apache/cloudstack/api/user/vpn/command/ListRemoteAccessVpnsCmd.java @@ -14,18 +14,18 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.user.vpn.command; import java.util.ArrayList; import java.util.List; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseListProjectAndAccountResourcesCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; +import org.apache.cloudstack.api.ApiConstants; +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 com.cloud.api.response.ListResponse; import com.cloud.api.response.RemoteAccessVpnResponse; import com.cloud.network.RemoteAccessVpn; @@ -49,7 +49,7 @@ public class ListRemoteAccessVpnsCmd extends BaseListProjectAndAccountResourcesC /////////////////// Accessors /////////////////////// ///////////////////////////////////////////////////// - + public Long getPublicIpId() { return publicIpId; } diff --git a/api/src/com/cloud/api/commands/ListVpnConnectionsCmd.java b/api/src/org/apache/cloudstack/api/user/vpn/command/ListVpnConnectionsCmd.java similarity index 86% rename from api/src/com/cloud/api/commands/ListVpnConnectionsCmd.java rename to api/src/org/apache/cloudstack/api/user/vpn/command/ListVpnConnectionsCmd.java index c7d5523d7b2..276cbc0a8ee 100644 --- a/api/src/com/cloud/api/commands/ListVpnConnectionsCmd.java +++ b/api/src/org/apache/cloudstack/api/user/vpn/command/ListVpnConnectionsCmd.java @@ -14,18 +14,18 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.user.vpn.command; import java.util.ArrayList; import java.util.List; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseListProjectAndAccountResourcesCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; +import org.apache.cloudstack.api.ApiConstants; +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 com.cloud.api.response.ListResponse; import com.cloud.api.response.Site2SiteVpnConnectionResponse; import com.cloud.network.Site2SiteVpnConnection; @@ -44,7 +44,7 @@ public class ListVpnConnectionsCmd extends BaseListProjectAndAccountResourcesCmd @IdentityMapper(entityTableName="s2s_vpn_connection") @Parameter(name=ApiConstants.ID, type=CommandType.LONG, description="id of the vpn connection") private Long id; - + @IdentityMapper(entityTableName="vpc") @Parameter(name=ApiConstants.VPC_ID, type=CommandType.LONG, description="id of vpc") private Long vpcId; @@ -53,7 +53,7 @@ public class ListVpnConnectionsCmd extends BaseListProjectAndAccountResourcesCmd /////////////////// Accessors /////////////////////// ///////////////////////////////////////////////////// - + public Long getId() { return id; } @@ -80,11 +80,11 @@ public class ListVpnConnectionsCmd extends BaseListProjectAndAccountResourcesCmd if (conn == null) { continue; } - Site2SiteVpnConnectionResponse site2SiteVpnConnectonRes = _responseGenerator.createSite2SiteVpnConnectionResponse(conn); - site2SiteVpnConnectonRes.setObjectName("vpnconnection"); + Site2SiteVpnConnectionResponse site2SiteVpnConnectonRes = _responseGenerator.createSite2SiteVpnConnectionResponse(conn); + site2SiteVpnConnectonRes.setObjectName("vpnconnection"); connResponses.add(site2SiteVpnConnectonRes); } - + response.setResponses(connResponses, conns.second()); response.setResponseName(getCommandName()); this.setResponseObject(response); diff --git a/api/src/com/cloud/api/commands/ListVpnCustomerGatewaysCmd.java b/api/src/org/apache/cloudstack/api/user/vpn/command/ListVpnCustomerGatewaysCmd.java similarity index 85% rename from api/src/com/cloud/api/commands/ListVpnCustomerGatewaysCmd.java rename to api/src/org/apache/cloudstack/api/user/vpn/command/ListVpnCustomerGatewaysCmd.java index 51fde93976e..474cc151906 100644 --- a/api/src/com/cloud/api/commands/ListVpnCustomerGatewaysCmd.java +++ b/api/src/org/apache/cloudstack/api/user/vpn/command/ListVpnCustomerGatewaysCmd.java @@ -14,18 +14,18 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.user.vpn.command; import java.util.ArrayList; import java.util.List; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseListProjectAndAccountResourcesCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; +import org.apache.cloudstack.api.ApiConstants; +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 com.cloud.api.response.ListResponse; import com.cloud.api.response.Site2SiteCustomerGatewayResponse; import com.cloud.network.Site2SiteCustomerGateway; @@ -49,7 +49,7 @@ public class ListVpnCustomerGatewaysCmd extends BaseListProjectAndAccountResourc /////////////////// Accessors /////////////////////// ///////////////////////////////////////////////////// - + public Long getId() { return id; } @@ -72,11 +72,11 @@ public class ListVpnCustomerGatewaysCmd extends BaseListProjectAndAccountResourc if (gw == null) { continue; } - Site2SiteCustomerGatewayResponse site2SiteCustomerGatewayRes = _responseGenerator.createSite2SiteCustomerGatewayResponse(gw); - site2SiteCustomerGatewayRes.setObjectName("vpncustomergateway"); + Site2SiteCustomerGatewayResponse site2SiteCustomerGatewayRes = _responseGenerator.createSite2SiteCustomerGatewayResponse(gw); + site2SiteCustomerGatewayRes.setObjectName("vpncustomergateway"); gwResponses.add(site2SiteCustomerGatewayRes); } - + response.setResponses(gwResponses, gws.second()); response.setResponseName(getCommandName()); this.setResponseObject(response); diff --git a/api/src/com/cloud/api/commands/ListVpnGatewaysCmd.java b/api/src/org/apache/cloudstack/api/user/vpn/command/ListVpnGatewaysCmd.java similarity index 86% rename from api/src/com/cloud/api/commands/ListVpnGatewaysCmd.java rename to api/src/org/apache/cloudstack/api/user/vpn/command/ListVpnGatewaysCmd.java index ec0c054fdb7..05075025250 100644 --- a/api/src/com/cloud/api/commands/ListVpnGatewaysCmd.java +++ b/api/src/org/apache/cloudstack/api/user/vpn/command/ListVpnGatewaysCmd.java @@ -14,29 +14,29 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; - +package org.apache.cloudstack.api.user.vpn.command; + import java.util.ArrayList; import java.util.List; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseListProjectAndAccountResourcesCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; +import org.apache.cloudstack.api.ApiConstants; +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 com.cloud.api.response.ListResponse; import com.cloud.api.response.Site2SiteVpnGatewayResponse; import com.cloud.network.Site2SiteVpnGateway; import com.cloud.utils.Pair; -@Implementation(description="Lists site 2 site vpn gateways", responseObject=Site2SiteVpnGatewayResponse.class) -public class ListVpnGatewaysCmd extends BaseListProjectAndAccountResourcesCmd { - public static final Logger s_logger = Logger.getLogger (ListVpnGatewaysCmd.class.getName()); - - private static final String s_name = "listvpngatewaysresponse"; - +@Implementation(description="Lists site 2 site vpn gateways", responseObject=Site2SiteVpnGatewayResponse.class) +public class ListVpnGatewaysCmd extends BaseListProjectAndAccountResourcesCmd { + public static final Logger s_logger = Logger.getLogger (ListVpnGatewaysCmd.class.getName()); + + private static final String s_name = "listvpngatewaysresponse"; + ///////////////////////////////////////////////////// //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// @@ -48,7 +48,7 @@ public class ListVpnGatewaysCmd extends BaseListProjectAndAccountResourcesCmd { @IdentityMapper(entityTableName="vpc") @Parameter(name=ApiConstants.VPC_ID, type=CommandType.LONG, description="id of vpc") private Long vpcId; - + ///////////////////////////////////////////////////// /////////////////// Accessors /////////////////////// ///////////////////////////////////////////////////// @@ -66,8 +66,8 @@ public class ListVpnGatewaysCmd extends BaseListProjectAndAccountResourcesCmd { ///////////////////////////////////////////////////// @Override - public String getCommandName() { - return s_name; + public String getCommandName() { + return s_name; } @Override @@ -79,13 +79,13 @@ public class ListVpnGatewaysCmd extends BaseListProjectAndAccountResourcesCmd { if (gw == null) { continue; } - Site2SiteVpnGatewayResponse site2SiteVpnGatewayRes = _responseGenerator.createSite2SiteVpnGatewayResponse(gw); - site2SiteVpnGatewayRes.setObjectName("vpngateway"); + Site2SiteVpnGatewayResponse site2SiteVpnGatewayRes = _responseGenerator.createSite2SiteVpnGatewayResponse(gw); + site2SiteVpnGatewayRes.setObjectName("vpngateway"); gwResponses.add(site2SiteVpnGatewayRes); } - + response.setResponses(gwResponses, gws.second()); response.setResponseName(getCommandName()); this.setResponseObject(response); - } -} + } +} diff --git a/api/src/com/cloud/api/commands/ResetVpnConnectionCmd.java b/api/src/org/apache/cloudstack/api/user/vpn/command/ResetVpnConnectionCmd.java similarity index 84% rename from api/src/com/cloud/api/commands/ResetVpnConnectionCmd.java rename to api/src/org/apache/cloudstack/api/user/vpn/command/ResetVpnConnectionCmd.java index a2ceedbabdd..8be9d9296c5 100644 --- a/api/src/com/cloud/api/commands/ResetVpnConnectionCmd.java +++ b/api/src/org/apache/cloudstack/api/user/vpn/command/ResetVpnConnectionCmd.java @@ -14,17 +14,17 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.user.vpn.command; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseAsyncCmd; -import com.cloud.api.BaseCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseAsyncCmd; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.api.response.Site2SiteVpnConnectionResponse; import com.cloud.event.EventTypes; import com.cloud.exception.ResourceUnavailableException; @@ -51,23 +51,23 @@ public class ResetVpnConnectionCmd extends BaseAsyncCmd { @IdentityMapper(entityTableName="domain") @Parameter(name=ApiConstants.DOMAIN_ID, type=CommandType.LONG, description="an optional domainId for connection. If the account parameter is used, domainId must also be used.") private Long domainId; - + ///////////////////////////////////////////////////// /////////////////// Accessors /////////////////////// ///////////////////////////////////////////////////// public String getEntityTable() { - return "s2s_vpn_connection"; + return "s2s_vpn_connection"; } - + public Long getDomainId() { return domainId; } - + public Long getAccountId() { return getEntityOwnerId(); } - + public Long getId() { return id; } @@ -82,8 +82,8 @@ public class ResetVpnConnectionCmd extends BaseAsyncCmd { return s_name; } - @Override - public long getEntityOwnerId() { + @Override + public long getEntityOwnerId() { Long accountId = finalyzeAccountId(accountName, domainId, null, true); if (accountId == null) { return UserContext.current().getCaller().getId(); @@ -91,16 +91,16 @@ public class ResetVpnConnectionCmd extends BaseAsyncCmd { return Account.ACCOUNT_ID_SYSTEM; } - @Override - public String getEventDescription() { - return "Reset site-to-site VPN connection for account " + getEntityOwnerId(); - } + @Override + public String getEventDescription() { + return "Reset site-to-site VPN connection for account " + getEntityOwnerId(); + } + + @Override + public String getEventType() { + return EventTypes.EVENT_S2S_VPN_CONNECTION_RESET; + } - @Override - public String getEventType() { - return EventTypes.EVENT_S2S_VPN_CONNECTION_RESET; - } - @Override public void execute(){ try { diff --git a/api/src/com/cloud/api/commands/UpdateVpnCustomerGatewayCmd.java b/api/src/org/apache/cloudstack/api/user/vpn/command/UpdateVpnCustomerGatewayCmd.java similarity index 86% rename from api/src/com/cloud/api/commands/UpdateVpnCustomerGatewayCmd.java rename to api/src/org/apache/cloudstack/api/user/vpn/command/UpdateVpnCustomerGatewayCmd.java index f19dd23926d..760599896f9 100644 --- a/api/src/com/cloud/api/commands/UpdateVpnCustomerGatewayCmd.java +++ b/api/src/org/apache/cloudstack/api/user/vpn/command/UpdateVpnCustomerGatewayCmd.java @@ -14,17 +14,17 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.user.vpn.command; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseAsyncCmd; -import com.cloud.api.BaseCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseAsyncCmd; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.api.response.Site2SiteCustomerGatewayResponse; import com.cloud.event.EventTypes; import com.cloud.network.Site2SiteCustomerGateway; @@ -42,10 +42,10 @@ public class UpdateVpnCustomerGatewayCmd extends BaseAsyncCmd { @IdentityMapper(entityTableName="s2s_customer_gateway") @Parameter(name=ApiConstants.ID, type=CommandType.LONG, required=true, description="id of customer gateway") private Long id; - + @Parameter(name=ApiConstants.NAME, type=CommandType.STRING, required=false, description="name of this customer gateway") private String name; - + @Parameter(name=ApiConstants.GATEWAY, type=CommandType.STRING, required=true, description="public ip address id of the customer gateway") private String gatewayIp; @@ -63,7 +63,7 @@ public class UpdateVpnCustomerGatewayCmd extends BaseAsyncCmd { @Parameter(name=ApiConstants.IKE_LIFETIME, type=CommandType.LONG, required=false, description="Lifetime of phase 1 VPN connection to the customer gateway, in seconds") private Long ikeLifetime; - + @Parameter(name=ApiConstants.ESP_LIFETIME, type=CommandType.LONG, required=false, description="Lifetime of phase 2 VPN connection to the customer gateway, in seconds") private Long espLifetime; @@ -72,24 +72,24 @@ public class UpdateVpnCustomerGatewayCmd extends BaseAsyncCmd { @Parameter(name=ApiConstants.ACCOUNT, type=CommandType.STRING, description="the account associated with the gateway. Must be used with the domainId parameter.") private String accountName; - + @IdentityMapper(entityTableName="domain") @Parameter(name=ApiConstants.DOMAIN_ID, type=CommandType.LONG, description="the domain ID associated with the gateway. " + - "If used with the account parameter returns the gateway associated with the account for the specified domain.") + "If used with the account parameter returns the gateway associated with the account for the specified domain.") private Long domainId; - + ///////////////////////////////////////////////////// /////////////////// Accessors /////////////////////// ///////////////////////////////////////////////////// public String getEntityTable() { - return "s2s_customer_gateway"; + return "s2s_customer_gateway"; } - + public Long getId() { return id; } - + public String getName() { return name; } @@ -136,8 +136,8 @@ public class UpdateVpnCustomerGatewayCmd extends BaseAsyncCmd { return s_name; } - @Override - public long getEntityOwnerId() { + @Override + public long getEntityOwnerId() { Long accountId = finalyzeAccountId(accountName, domainId, null, true); if (accountId == null) { accountId = UserContext.current().getCaller().getId(); @@ -145,16 +145,16 @@ public class UpdateVpnCustomerGatewayCmd extends BaseAsyncCmd { return accountId; } - @Override - public String getEventDescription() { - return "Update site-to-site VPN customer gateway"; - } + @Override + public String getEventDescription() { + return "Update site-to-site VPN customer gateway"; + } + + @Override + public String getEventType() { + return EventTypes.EVENT_S2S_VPN_CUSTOMER_GATEWAY_UPDATE; + } - @Override - public String getEventType() { - return EventTypes.EVENT_S2S_VPN_CUSTOMER_GATEWAY_UPDATE; - } - @Override public void execute(){ Site2SiteCustomerGateway result = _s2sVpnService.updateCustomerGateway(this); diff --git a/api/test/src/com/cloud/api/commands/test/AddClusterCmdTest.java b/api/test/src/com/cloud/api/commands/test/AddClusterCmdTest.java index 933eef5fcd6..d1dae7c0e52 100644 --- a/api/test/src/com/cloud/api/commands/test/AddClusterCmdTest.java +++ b/api/test/src/com/cloud/api/commands/test/AddClusterCmdTest.java @@ -25,8 +25,8 @@ import org.junit.Test; import org.junit.rules.ExpectedException; import org.mockito.Mockito; -import com.cloud.api.ResponseGenerator; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ResponseGenerator; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.api.commands.AddClusterCmd; import com.cloud.exception.DiscoveryException; import com.cloud.exception.ResourceInUseException; diff --git a/api/test/src/com/cloud/api/commands/test/AddHostCmdTest.java b/api/test/src/com/cloud/api/commands/test/AddHostCmdTest.java index 476d1be63dd..4d8e5ea65a7 100644 --- a/api/test/src/com/cloud/api/commands/test/AddHostCmdTest.java +++ b/api/test/src/com/cloud/api/commands/test/AddHostCmdTest.java @@ -25,8 +25,8 @@ import org.junit.Test; import org.junit.rules.ExpectedException; import org.mockito.Mockito; -import com.cloud.api.ResponseGenerator; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ResponseGenerator; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.api.commands.AddHostCmd; import com.cloud.api.response.HostResponse; import com.cloud.api.response.ListResponse; diff --git a/api/test/src/com/cloud/api/commands/test/AddNetworkServiceProviderCmdTest.java b/api/test/src/com/cloud/api/commands/test/AddNetworkServiceProviderCmdTest.java index d4c5e614732..446a1614220 100644 --- a/api/test/src/com/cloud/api/commands/test/AddNetworkServiceProviderCmdTest.java +++ b/api/test/src/com/cloud/api/commands/test/AddNetworkServiceProviderCmdTest.java @@ -28,7 +28,7 @@ import org.junit.Test; import org.junit.rules.ExpectedException; import org.mockito.Mockito; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.api.commands.AddNetworkServiceProviderCmd; import com.cloud.exception.ResourceAllocationException; import com.cloud.network.NetworkService; diff --git a/api/test/src/com/cloud/api/commands/test/AddSecondaryStorageCmdTest.java b/api/test/src/com/cloud/api/commands/test/AddSecondaryStorageCmdTest.java index fb5ec4b827f..87e03fa3275 100644 --- a/api/test/src/com/cloud/api/commands/test/AddSecondaryStorageCmdTest.java +++ b/api/test/src/com/cloud/api/commands/test/AddSecondaryStorageCmdTest.java @@ -25,8 +25,8 @@ import org.junit.Test; import org.junit.rules.ExpectedException; import org.mockito.Mockito; -import com.cloud.api.ResponseGenerator; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ResponseGenerator; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.api.commands.AddSecondaryStorageCmd; import com.cloud.api.response.HostResponse; import com.cloud.host.Host; diff --git a/api/test/src/com/cloud/api/commands/test/AddSwiftCmdTest.java b/api/test/src/com/cloud/api/commands/test/AddSwiftCmdTest.java index b5376b34daf..fe553bbbd1f 100644 --- a/api/test/src/com/cloud/api/commands/test/AddSwiftCmdTest.java +++ b/api/test/src/com/cloud/api/commands/test/AddSwiftCmdTest.java @@ -25,8 +25,8 @@ import org.junit.Test; import org.junit.rules.ExpectedException; import org.mockito.Mockito; -import com.cloud.api.ResponseGenerator; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ResponseGenerator; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.api.commands.AddSwiftCmd; import com.cloud.api.response.SwiftResponse; import com.cloud.exception.DiscoveryException; diff --git a/api/test/src/com/cloud/api/commands/test/AddVpnUserCmdTest.java b/api/test/src/com/cloud/api/commands/test/AddVpnUserCmdTest.java index 63d1e2b7ff5..e91abbe71fb 100644 --- a/api/test/src/com/cloud/api/commands/test/AddVpnUserCmdTest.java +++ b/api/test/src/com/cloud/api/commands/test/AddVpnUserCmdTest.java @@ -25,7 +25,7 @@ import org.junit.Test; import org.junit.rules.ExpectedException; import org.mockito.Mockito; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.api.commands.AddVpnUserCmd; import com.cloud.network.VpnUser; import com.cloud.network.vpn.RemoteAccessVpnService; diff --git a/client/tomcatconf/commands.properties.in b/client/tomcatconf/commands.properties.in index 149547ee575..32848b64ffd 100755 --- a/client/tomcatconf/commands.properties.in +++ b/client/tomcatconf/commands.properties.in @@ -54,20 +54,20 @@ updateResourceCount=com.cloud.api.commands.UpdateResourceCountCmd;7 listResourceLimits=com.cloud.api.commands.ListResourceLimitsCmd;15 #### VM commands -deployVirtualMachine=com.cloud.api.commands.DeployVMCmd;15 -destroyVirtualMachine=com.cloud.api.commands.DestroyVMCmd;15 -rebootVirtualMachine=com.cloud.api.commands.RebootVMCmd;15 -startVirtualMachine=com.cloud.api.commands.StartVMCmd;15 -stopVirtualMachine=com.cloud.api.commands.StopVMCmd;15 -resetPasswordForVirtualMachine=com.cloud.api.commands.ResetVMPasswordCmd;15 -changeServiceForVirtualMachine=com.cloud.api.commands.UpgradeVMCmd;15 -updateVirtualMachine=com.cloud.api.commands.UpdateVMCmd;15 -recoverVirtualMachine=com.cloud.api.commands.RecoverVMCmd;7 -listVirtualMachines=com.cloud.api.commands.ListVMsCmd;15 -getVMPassword=com.cloud.api.commands.GetVMPasswordCmd;15 -migrateVirtualMachine=com.cloud.api.commands.MigrateVMCmd;1 -assignVirtualMachine=com.cloud.api.commands.AssignVMCmd;1 -restoreVirtualMachine=com.cloud.api.commands.RestoreVMCmd;15 +deployVirtualMachine=org.apache.cloudstack.api.user.vm.command.DeployVMCmd;15 +destroyVirtualMachine=org.apache.cloudstack.api.user.vm.command.DestroyVMCmd;15 +rebootVirtualMachine=org.apache.cloudstack.api.user.vm.command.RebootVMCmd;15 +startVirtualMachine=org.apache.cloudstack.api.user.vm.command.StartVMCmd;15 +stopVirtualMachine=org.apache.cloudstack.api.user.vm.command.StopVMCmd;15 +resetPasswordForVirtualMachine=org.apache.cloudstack.api.user.vm.command.ResetVMPasswordCmd;15 +updateVirtualMachine=org.apache.cloudstack.api.user.vm.command.UpdateVMCmd;15 +listVirtualMachines=org.apache.cloudstack.api.user.vm.command.ListVMsCmd;15 +getVMPassword=org.apache.cloudstack.api.user.vm.command.GetVMPasswordCmd;15 +restoreVirtualMachine=org.apache.cloudstack.api.user.vm.command.RestoreVMCmd;15 +changeServiceForVirtualMachine=org.apache.cloudstack.api.user.vm.command.UpgradeVMCmd;15 +assignVirtualMachine=org.apache.cloudstack.api.admin.vm.command.AssignVMCmd;1 +migrateVirtualMachine=org.apache.cloudstack.api.admin.vm.command.MigrateVMCmd;1 +recoverVirtualMachine=org.apache.cloudstack.api.admin.vm.command.RecoverVMCmd;7 #### snapshot commands createSnapshot=com.cloud.api.commands.CreateSnapshotCmd;15 @@ -294,9 +294,9 @@ uploadCustomCertificate=com.cloud.api.commands.UploadCustomCertificateCmd;1 listHypervisors=com.cloud.api.commands.ListHypervisorsCmd;15 ### VPN -createRemoteAccessVpn=com.cloud.api.commands.CreateRemoteAccessVpnCmd;15 -deleteRemoteAccessVpn=com.cloud.api.commands.DeleteRemoteAccessVpnCmd;15 -listRemoteAccessVpns=com.cloud.api.commands.ListRemoteAccessVpnsCmd;15 +createRemoteAccessVpn=org.apache.cloudstack.api.user.vpn.command.CreateRemoteAccessVpnCmd;15 +deleteRemoteAccessVpn=org.apache.cloudstack.api.user.vpn.command.DeleteRemoteAccessVpnCmd;15 +listRemoteAccessVpns=org.apache.cloudstack.api.user.vpn.command.ListRemoteAccessVpnsCmd;15 addVpnUser=com.cloud.api.commands.AddVpnUserCmd;15 removeVpnUser=com.cloud.api.commands.RemoveVpnUserCmd;15 @@ -414,14 +414,14 @@ deleteTags=com.cloud.api.commands.DeleteTagsCmd;15 listTags=com.cloud.api.commands.ListTagsCmd;15 ### Site-to-site VPN commands -createVpnCustomerGateway=com.cloud.api.commands.CreateVpnCustomerGatewayCmd;15 -createVpnGateway=com.cloud.api.commands.CreateVpnGatewayCmd;15 -createVpnConnection=com.cloud.api.commands.CreateVpnConnectionCmd;15 -deleteVpnCustomerGateway=com.cloud.api.commands.DeleteVpnCustomerGatewayCmd;15 -deleteVpnGateway=com.cloud.api.commands.DeleteVpnGatewayCmd;15 -deleteVpnConnection=com.cloud.api.commands.DeleteVpnConnectionCmd;15 -updateVpnCustomerGateway=com.cloud.api.commands.UpdateVpnCustomerGatewayCmd;15 -resetVpnConnection=com.cloud.api.commands.ResetVpnConnectionCmd;15 -listVpnCustomerGateways=com.cloud.api.commands.ListVpnCustomerGatewaysCmd;15 -listVpnGateways=com.cloud.api.commands.ListVpnGatewaysCmd;15 -listVpnConnections=com.cloud.api.commands.ListVpnConnectionsCmd;15 +createVpnCustomerGateway=org.apache.cloudstack.api.user.vpn.command.CreateVpnCustomerGatewayCmd;15 +createVpnGateway=org.apache.cloudstack.api.user.vpn.command.CreateVpnGatewayCmd;15 +createVpnConnection=org.apache.cloudstack.api.user.vpn.command.CreateVpnConnectionCmd;15 +deleteVpnCustomerGateway=org.apache.cloudstack.api.user.vpn.command.DeleteVpnCustomerGatewayCmd;15 +deleteVpnGateway=org.apache.cloudstack.api.user.vpn.command.DeleteVpnGatewayCmd;15 +deleteVpnConnection=org.apache.cloudstack.api.user.vpn.command.DeleteVpnConnectionCmd;15 +updateVpnCustomerGateway=org.apache.cloudstack.api.user.vpn.command.UpdateVpnCustomerGatewayCmd;15 +resetVpnConnection=org.apache.cloudstack.api.user.vpn.command.ResetVpnConnectionCmd;15 +listVpnCustomerGateways=org.apache.cloudstack.api.user.vpn.command.ListVpnCustomerGatewaysCmd;15 +listVpnGateways=org.apache.cloudstack.api.user.vpn.command.ListVpnGatewaysCmd;15 +listVpnConnections=org.apache.cloudstack.api.user.vpn.command.ListVpnConnectionsCmd;15 diff --git a/core/src/com/cloud/alert/AlertVO.java b/core/src/com/cloud/alert/AlertVO.java index 2399e7fd8ea..7769d2d9e5f 100755 --- a/core/src/com/cloud/alert/AlertVO.java +++ b/core/src/com/cloud/alert/AlertVO.java @@ -28,7 +28,7 @@ import javax.persistence.Table; import javax.persistence.Temporal; import javax.persistence.TemporalType; -import com.cloud.api.Identity; +import org.apache.cloudstack.api.Identity; import com.cloud.utils.db.GenericDao; @Entity diff --git a/core/src/com/cloud/event/EventVO.java b/core/src/com/cloud/event/EventVO.java index 79787888eba..5867e921eed 100644 --- a/core/src/com/cloud/event/EventVO.java +++ b/core/src/com/cloud/event/EventVO.java @@ -29,7 +29,7 @@ import javax.persistence.Id; import javax.persistence.Table; import javax.persistence.Transient; -import com.cloud.api.Identity; +import org.apache.cloudstack.api.Identity; import com.cloud.utils.db.GenericDao; @Entity diff --git a/core/src/com/cloud/host/HostVO.java b/core/src/com/cloud/host/HostVO.java index dab9768a943..b8a26b7e79c 100755 --- a/core/src/com/cloud/host/HostVO.java +++ b/core/src/com/cloud/host/HostVO.java @@ -37,7 +37,7 @@ import javax.persistence.Temporal; import javax.persistence.TemporalType; import javax.persistence.Transient; -import com.cloud.api.Identity; +import org.apache.cloudstack.api.Identity; import com.cloud.hypervisor.Hypervisor.HypervisorType; import com.cloud.resource.ResourceState; import com.cloud.storage.Storage.StoragePoolType; diff --git a/core/src/com/cloud/hypervisor/HypervisorCapabilitiesVO.java b/core/src/com/cloud/hypervisor/HypervisorCapabilitiesVO.java index 75eebeb0dbc..c5c67f96f5f 100644 --- a/core/src/com/cloud/hypervisor/HypervisorCapabilitiesVO.java +++ b/core/src/com/cloud/hypervisor/HypervisorCapabilitiesVO.java @@ -27,7 +27,7 @@ import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.Table; -import com.cloud.api.Identity; +import org.apache.cloudstack.api.Identity; import com.cloud.hypervisor.Hypervisor.HypervisorType; import com.cloud.utils.NumbersUtil; diff --git a/core/src/com/cloud/network/VpnUserVO.java b/core/src/com/cloud/network/VpnUserVO.java index f376e704187..02c53683394 100644 --- a/core/src/com/cloud/network/VpnUserVO.java +++ b/core/src/com/cloud/network/VpnUserVO.java @@ -27,7 +27,7 @@ import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.Table; -import com.cloud.api.Identity; +import org.apache.cloudstack.api.Identity; import com.cloud.utils.db.Encrypt; @Entity diff --git a/core/src/com/cloud/network/security/SecurityGroupVO.java b/core/src/com/cloud/network/security/SecurityGroupVO.java index b059e8c67f1..3d4aceaab13 100644 --- a/core/src/com/cloud/network/security/SecurityGroupVO.java +++ b/core/src/com/cloud/network/security/SecurityGroupVO.java @@ -25,7 +25,7 @@ import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.Table; -import com.cloud.api.Identity; +import org.apache.cloudstack.api.Identity; @Entity @Table(name = ("security_group")) diff --git a/core/src/com/cloud/storage/DiskOfferingVO.java b/core/src/com/cloud/storage/DiskOfferingVO.java index 02198407ba6..10ce0a1d92a 100755 --- a/core/src/com/cloud/storage/DiskOfferingVO.java +++ b/core/src/com/cloud/storage/DiskOfferingVO.java @@ -34,7 +34,7 @@ import javax.persistence.Temporal; import javax.persistence.TemporalType; import javax.persistence.Transient; -import com.cloud.api.Identity; +import org.apache.cloudstack.api.Identity; import com.cloud.offering.DiskOffering; import com.cloud.utils.db.GenericDao; diff --git a/core/src/com/cloud/storage/GuestOSCategoryVO.java b/core/src/com/cloud/storage/GuestOSCategoryVO.java index cbe242eef5d..76b557c654c 100644 --- a/core/src/com/cloud/storage/GuestOSCategoryVO.java +++ b/core/src/com/cloud/storage/GuestOSCategoryVO.java @@ -25,7 +25,7 @@ import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.Table; -import com.cloud.api.Identity; +import org.apache.cloudstack.api.Identity; @Entity @Table(name="guest_os_category") diff --git a/core/src/com/cloud/storage/GuestOSVO.java b/core/src/com/cloud/storage/GuestOSVO.java index 85db94e29f6..547b2b70659 100644 --- a/core/src/com/cloud/storage/GuestOSVO.java +++ b/core/src/com/cloud/storage/GuestOSVO.java @@ -25,7 +25,7 @@ import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.Table; -import com.cloud.api.Identity; +import org.apache.cloudstack.api.Identity; @Entity @Table(name="guest_os") diff --git a/core/src/com/cloud/storage/SnapshotPolicyVO.java b/core/src/com/cloud/storage/SnapshotPolicyVO.java index d059fcbc6da..5ba2c64edc4 100644 --- a/core/src/com/cloud/storage/SnapshotPolicyVO.java +++ b/core/src/com/cloud/storage/SnapshotPolicyVO.java @@ -25,7 +25,7 @@ import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.Table; -import com.cloud.api.Identity; +import org.apache.cloudstack.api.Identity; import com.cloud.storage.snapshot.SnapshotPolicy; import com.cloud.utils.DateUtil.IntervalType; diff --git a/core/src/com/cloud/storage/SnapshotScheduleVO.java b/core/src/com/cloud/storage/SnapshotScheduleVO.java index 80216e48a55..1ec3217917a 100644 --- a/core/src/com/cloud/storage/SnapshotScheduleVO.java +++ b/core/src/com/cloud/storage/SnapshotScheduleVO.java @@ -28,7 +28,7 @@ import javax.persistence.Table; import javax.persistence.Temporal; import javax.persistence.TemporalType; -import com.cloud.api.Identity; +import org.apache.cloudstack.api.Identity; import com.cloud.storage.snapshot.SnapshotSchedule; @Entity diff --git a/core/src/com/cloud/storage/SnapshotVO.java b/core/src/com/cloud/storage/SnapshotVO.java index 08dfafa6bac..9bf1924ec33 100644 --- a/core/src/com/cloud/storage/SnapshotVO.java +++ b/core/src/com/cloud/storage/SnapshotVO.java @@ -28,7 +28,7 @@ import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.Table; -import com.cloud.api.Identity; +import org.apache.cloudstack.api.Identity; import com.cloud.hypervisor.Hypervisor.HypervisorType; import com.cloud.utils.db.GenericDao; import com.google.gson.annotations.Expose; diff --git a/core/src/com/cloud/storage/StoragePoolVO.java b/core/src/com/cloud/storage/StoragePoolVO.java index 5fecefb756d..9ed9f7e3176 100644 --- a/core/src/com/cloud/storage/StoragePoolVO.java +++ b/core/src/com/cloud/storage/StoragePoolVO.java @@ -30,7 +30,7 @@ import javax.persistence.Temporal; import javax.persistence.TemporalType; import javax.persistence.Transient; -import com.cloud.api.Identity; +import org.apache.cloudstack.api.Identity; import com.cloud.storage.Storage.StoragePoolType; import com.cloud.utils.db.GenericDao; diff --git a/core/src/com/cloud/storage/SwiftVO.java b/core/src/com/cloud/storage/SwiftVO.java index 7e07629e72b..6389002e596 100644 --- a/core/src/com/cloud/storage/SwiftVO.java +++ b/core/src/com/cloud/storage/SwiftVO.java @@ -27,7 +27,7 @@ import javax.persistence.Id; import javax.persistence.Table; import com.cloud.agent.api.to.SwiftTO; -import com.cloud.api.Identity; +import org.apache.cloudstack.api.Identity; import com.cloud.utils.db.GenericDao; @Entity diff --git a/core/src/com/cloud/storage/VMTemplateVO.java b/core/src/com/cloud/storage/VMTemplateVO.java index cd17bc9bf5a..8ad768dd1fd 100755 --- a/core/src/com/cloud/storage/VMTemplateVO.java +++ b/core/src/com/cloud/storage/VMTemplateVO.java @@ -31,7 +31,7 @@ import javax.persistence.Temporal; import javax.persistence.TemporalType; import javax.persistence.Transient; -import com.cloud.api.Identity; +import org.apache.cloudstack.api.Identity; import com.cloud.hypervisor.Hypervisor.HypervisorType; import com.cloud.storage.Storage.ImageFormat; import com.cloud.storage.Storage.TemplateType; diff --git a/core/src/com/cloud/storage/VolumeVO.java b/core/src/com/cloud/storage/VolumeVO.java index ef0fedaf651..d541b9427ea 100755 --- a/core/src/com/cloud/storage/VolumeVO.java +++ b/core/src/com/cloud/storage/VolumeVO.java @@ -31,7 +31,7 @@ import javax.persistence.TableGenerator; import javax.persistence.Temporal; import javax.persistence.TemporalType; -import com.cloud.api.Identity; +import org.apache.cloudstack.api.Identity; import com.cloud.storage.Storage.StoragePoolType; import com.cloud.utils.NumbersUtil; import com.cloud.utils.db.GenericDao; diff --git a/core/src/com/cloud/user/AccountVO.java b/core/src/com/cloud/user/AccountVO.java index b0418de5867..329a3312878 100644 --- a/core/src/com/cloud/user/AccountVO.java +++ b/core/src/com/cloud/user/AccountVO.java @@ -28,7 +28,7 @@ import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.Table; -import com.cloud.api.Identity; +import org.apache.cloudstack.api.Identity; import com.cloud.utils.db.GenericDao; @Entity diff --git a/core/src/com/cloud/user/UserVO.java b/core/src/com/cloud/user/UserVO.java index f5fd5da8f96..99dd51bff9b 100644 --- a/core/src/com/cloud/user/UserVO.java +++ b/core/src/com/cloud/user/UserVO.java @@ -28,7 +28,7 @@ import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.Table; -import com.cloud.api.Identity; +import org.apache.cloudstack.api.Identity; import com.cloud.user.Account.State; import com.cloud.utils.db.Encrypt; import com.cloud.utils.db.GenericDao; diff --git a/core/src/com/cloud/vm/InstanceGroupVO.java b/core/src/com/cloud/vm/InstanceGroupVO.java index da1efa897da..f87676a2487 100644 --- a/core/src/com/cloud/vm/InstanceGroupVO.java +++ b/core/src/com/cloud/vm/InstanceGroupVO.java @@ -28,7 +28,7 @@ import javax.persistence.PrimaryKeyJoinColumn; import javax.persistence.SecondaryTable; import javax.persistence.Table; -import com.cloud.api.Identity; +import org.apache.cloudstack.api.Identity; import com.cloud.utils.db.GenericDao; @Entity diff --git a/docs/en-US/added-error-codes.xml b/docs/en-US/added-error-codes.xml index 4436bf381e0..dbfea263598 100644 --- a/docs/en-US/added-error-codes.xml +++ b/docs/en-US/added-error-codes.xml @@ -128,7 +128,7 @@ 4535 : "com.cloud.exception.VirtualMachineMigrationException" - 9999 : "com.cloud.api.ServerApiException" + 9999 : "org.apache.cloudstack.api.ServerApiException" diff --git a/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/AssociateLunCmd.java b/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/AssociateLunCmd.java index db317e06d65..bf8fc50b283 100644 --- a/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/AssociateLunCmd.java +++ b/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/AssociateLunCmd.java @@ -20,11 +20,11 @@ import java.rmi.ServerException; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseCmd; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.exception.InvalidParameterValueException; import com.cloud.netapp.NetappManager; import com.cloud.server.ManagementService; diff --git a/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/CreateLunCmd.java b/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/CreateLunCmd.java index 2e0eb86eb1b..84ef5e29bc5 100644 --- a/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/CreateLunCmd.java +++ b/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/CreateLunCmd.java @@ -20,11 +20,11 @@ import java.rmi.ServerException; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseCmd; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.exception.ConcurrentOperationException; import com.cloud.exception.InsufficientCapacityException; import com.cloud.exception.InvalidParameterValueException; diff --git a/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/CreateVolumeOnFilerCmd.java b/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/CreateVolumeOnFilerCmd.java index a301deeed4a..d37e2d40323 100644 --- a/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/CreateVolumeOnFilerCmd.java +++ b/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/CreateVolumeOnFilerCmd.java @@ -19,11 +19,11 @@ package com.cloud.api.commands.netapp; import java.net.UnknownHostException; import java.rmi.ServerException; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseCmd; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.exception.ConcurrentOperationException; import com.cloud.exception.InsufficientCapacityException; import com.cloud.exception.InvalidParameterValueException; diff --git a/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/CreateVolumePoolCmd.java b/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/CreateVolumePoolCmd.java index 020493b98d4..e0cff197d1a 100644 --- a/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/CreateVolumePoolCmd.java +++ b/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/CreateVolumePoolCmd.java @@ -18,11 +18,11 @@ package com.cloud.api.commands.netapp; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseCmd; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.exception.ConcurrentOperationException; import com.cloud.exception.InsufficientCapacityException; import com.cloud.exception.InvalidParameterValueException; diff --git a/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/DeleteVolumePoolCmd.java b/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/DeleteVolumePoolCmd.java index de12511f0dd..11c408fe68d 100644 --- a/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/DeleteVolumePoolCmd.java +++ b/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/DeleteVolumePoolCmd.java @@ -19,11 +19,11 @@ package com.cloud.api.commands.netapp; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseCmd; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.exception.ConcurrentOperationException; import com.cloud.exception.InsufficientCapacityException; import com.cloud.exception.InvalidParameterValueException; diff --git a/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/DestroyLunCmd.java b/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/DestroyLunCmd.java index ece9dac2d8b..ecf09ced1b6 100644 --- a/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/DestroyLunCmd.java +++ b/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/DestroyLunCmd.java @@ -20,11 +20,11 @@ import java.rmi.ServerException; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseCmd; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.exception.ConcurrentOperationException; import com.cloud.exception.InsufficientCapacityException; import com.cloud.exception.InvalidParameterValueException; diff --git a/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/DestroyVolumeOnFilerCmd.java b/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/DestroyVolumeOnFilerCmd.java index 4bde7f519b8..c1223336446 100644 --- a/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/DestroyVolumeOnFilerCmd.java +++ b/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/DestroyVolumeOnFilerCmd.java @@ -20,11 +20,11 @@ import java.rmi.ServerException; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseCmd; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.exception.ConcurrentOperationException; import com.cloud.exception.InsufficientCapacityException; import com.cloud.exception.InvalidParameterValueException; diff --git a/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/DissociateLunCmd.java b/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/DissociateLunCmd.java index 77425cbe5ce..217c4d68700 100644 --- a/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/DissociateLunCmd.java +++ b/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/DissociateLunCmd.java @@ -20,11 +20,11 @@ import java.rmi.ServerException; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseCmd; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.exception.ConcurrentOperationException; import com.cloud.exception.InsufficientCapacityException; import com.cloud.exception.InvalidParameterValueException; diff --git a/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/ListLunsCmd.java b/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/ListLunsCmd.java index 1101648219a..03d431218dc 100644 --- a/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/ListLunsCmd.java +++ b/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/ListLunsCmd.java @@ -21,11 +21,11 @@ import java.util.List; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseCmd; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.api.response.ListResponse; import com.cloud.exception.ConcurrentOperationException; import com.cloud.exception.InsufficientCapacityException; diff --git a/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/ListVolumePoolsCmd.java b/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/ListVolumePoolsCmd.java index e6467393386..bd3669eb640 100644 --- a/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/ListVolumePoolsCmd.java +++ b/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/ListVolumePoolsCmd.java @@ -21,9 +21,9 @@ import java.util.List; import org.apache.log4j.Logger; -import com.cloud.api.BaseCmd; -import com.cloud.api.Implementation; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.api.response.ListResponse; import com.cloud.exception.ConcurrentOperationException; import com.cloud.exception.InsufficientCapacityException; diff --git a/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/ListVolumesOnFilerCmd.java b/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/ListVolumesOnFilerCmd.java index 389053a36dc..0006a2f8b33 100644 --- a/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/ListVolumesOnFilerCmd.java +++ b/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/ListVolumesOnFilerCmd.java @@ -21,11 +21,11 @@ import java.util.List; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseCmd; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.api.response.ListResponse; import com.cloud.exception.ConcurrentOperationException; import com.cloud.exception.InsufficientCapacityException; diff --git a/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/ModifyVolumePoolCmd.java b/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/ModifyVolumePoolCmd.java index 0bca2901dc7..b6186bdb849 100644 --- a/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/ModifyVolumePoolCmd.java +++ b/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/ModifyVolumePoolCmd.java @@ -19,11 +19,11 @@ package com.cloud.api.commands.netapp; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseCmd; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.exception.ConcurrentOperationException; import com.cloud.exception.InsufficientCapacityException; import com.cloud.exception.ResourceAllocationException; diff --git a/plugins/hypervisors/vmware/src/com/cloud/api/commands/DeleteCiscoNexusVSMCmd.java b/plugins/hypervisors/vmware/src/com/cloud/api/commands/DeleteCiscoNexusVSMCmd.java index 2c3778336da..4b9b196c2ce 100644 --- a/plugins/hypervisors/vmware/src/com/cloud/api/commands/DeleteCiscoNexusVSMCmd.java +++ b/plugins/hypervisors/vmware/src/com/cloud/api/commands/DeleteCiscoNexusVSMCmd.java @@ -19,13 +19,13 @@ package com.cloud.api.commands; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseAsyncCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.PlugService; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseAsyncCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.PlugService; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.api.response.SuccessResponse; import com.cloud.event.EventTypes; import com.cloud.exception.ConcurrentOperationException; diff --git a/plugins/hypervisors/vmware/src/com/cloud/api/commands/DisableCiscoNexusVSMCmd.java b/plugins/hypervisors/vmware/src/com/cloud/api/commands/DisableCiscoNexusVSMCmd.java index 5f911f45c8e..4048e88af19 100644 --- a/plugins/hypervisors/vmware/src/com/cloud/api/commands/DisableCiscoNexusVSMCmd.java +++ b/plugins/hypervisors/vmware/src/com/cloud/api/commands/DisableCiscoNexusVSMCmd.java @@ -19,13 +19,13 @@ package com.cloud.api.commands; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseAsyncCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.PlugService; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseAsyncCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.PlugService; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.exception.ConcurrentOperationException; import com.cloud.exception.InsufficientCapacityException; import com.cloud.exception.ResourceAllocationException; diff --git a/plugins/hypervisors/vmware/src/com/cloud/api/commands/EnableCiscoNexusVSMCmd.java b/plugins/hypervisors/vmware/src/com/cloud/api/commands/EnableCiscoNexusVSMCmd.java index 67c0ae3aba4..5706b901d6e 100644 --- a/plugins/hypervisors/vmware/src/com/cloud/api/commands/EnableCiscoNexusVSMCmd.java +++ b/plugins/hypervisors/vmware/src/com/cloud/api/commands/EnableCiscoNexusVSMCmd.java @@ -19,13 +19,13 @@ package com.cloud.api.commands; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseAsyncCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.PlugService; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseAsyncCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.PlugService; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.event.EventTypes; import com.cloud.exception.ConcurrentOperationException; import com.cloud.exception.InsufficientCapacityException; diff --git a/plugins/hypervisors/vmware/src/com/cloud/api/commands/ListCiscoNexusVSMsCmd.java b/plugins/hypervisors/vmware/src/com/cloud/api/commands/ListCiscoNexusVSMsCmd.java index bd25258b546..a075d27cc70 100755 --- a/plugins/hypervisors/vmware/src/com/cloud/api/commands/ListCiscoNexusVSMsCmd.java +++ b/plugins/hypervisors/vmware/src/com/cloud/api/commands/ListCiscoNexusVSMsCmd.java @@ -18,13 +18,13 @@ package com.cloud.api.commands; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseListCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.PlugService; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseListCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.PlugService; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.api.response.CiscoNexusVSMResponse; import com.cloud.api.response.ListResponse; import com.cloud.exception.ConcurrentOperationException; diff --git a/plugins/hypervisors/vmware/src/com/cloud/api/response/CiscoNexusVSMResponse.java b/plugins/hypervisors/vmware/src/com/cloud/api/response/CiscoNexusVSMResponse.java index 0088018fff1..5bab173f158 100644 --- a/plugins/hypervisors/vmware/src/com/cloud/api/response/CiscoNexusVSMResponse.java +++ b/plugins/hypervisors/vmware/src/com/cloud/api/response/CiscoNexusVSMResponse.java @@ -16,7 +16,7 @@ // under the License. package com.cloud.api.response; -import com.cloud.api.ApiConstants; +import org.apache.cloudstack.api.ApiConstants; import com.cloud.utils.IdentityProxy; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; diff --git a/plugins/hypervisors/vmware/src/com/cloud/network/CiscoNexusVSMDeviceVO.java b/plugins/hypervisors/vmware/src/com/cloud/network/CiscoNexusVSMDeviceVO.java index af9ff0e1d7c..81dc277f1bf 100644 --- a/plugins/hypervisors/vmware/src/com/cloud/network/CiscoNexusVSMDeviceVO.java +++ b/plugins/hypervisors/vmware/src/com/cloud/network/CiscoNexusVSMDeviceVO.java @@ -26,7 +26,7 @@ import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.Table; -import com.cloud.api.Identity; +import org.apache.cloudstack.api.Identity; import com.cloud.utils.db.Encrypt; /** diff --git a/plugins/network-elements/f5/src/com/cloud/api/commands/AddExternalLoadBalancerCmd.java b/plugins/network-elements/f5/src/com/cloud/api/commands/AddExternalLoadBalancerCmd.java index 3fa61167efa..8e404b02fa2 100644 --- a/plugins/network-elements/f5/src/com/cloud/api/commands/AddExternalLoadBalancerCmd.java +++ b/plugins/network-elements/f5/src/com/cloud/api/commands/AddExternalLoadBalancerCmd.java @@ -19,13 +19,13 @@ package com.cloud.api.commands; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.PlugService; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.PlugService; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.exception.InvalidParameterValueException; import com.cloud.host.Host; import com.cloud.network.element.F5ExternalLoadBalancerElementService; diff --git a/plugins/network-elements/f5/src/com/cloud/api/commands/AddF5LoadBalancerCmd.java b/plugins/network-elements/f5/src/com/cloud/api/commands/AddF5LoadBalancerCmd.java index 13c443e7cf0..a2f7b6b6285 100644 --- a/plugins/network-elements/f5/src/com/cloud/api/commands/AddF5LoadBalancerCmd.java +++ b/plugins/network-elements/f5/src/com/cloud/api/commands/AddF5LoadBalancerCmd.java @@ -19,14 +19,14 @@ package com.cloud.api.commands; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseAsyncCmd; -import com.cloud.api.BaseCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.PlugService; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseAsyncCmd; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.PlugService; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.api.response.F5LoadBalancerResponse; import com.cloud.event.EventTypes; import com.cloud.exception.ConcurrentOperationException; diff --git a/plugins/network-elements/f5/src/com/cloud/api/commands/ConfigureF5LoadBalancerCmd.java b/plugins/network-elements/f5/src/com/cloud/api/commands/ConfigureF5LoadBalancerCmd.java index 9f5217c3280..737fbb98d5d 100644 --- a/plugins/network-elements/f5/src/com/cloud/api/commands/ConfigureF5LoadBalancerCmd.java +++ b/plugins/network-elements/f5/src/com/cloud/api/commands/ConfigureF5LoadBalancerCmd.java @@ -19,14 +19,14 @@ package com.cloud.api.commands; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseAsyncCmd; -import com.cloud.api.BaseCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.PlugService; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseAsyncCmd; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.PlugService; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.api.response.F5LoadBalancerResponse; import com.cloud.event.EventTypes; import com.cloud.exception.ConcurrentOperationException; diff --git a/plugins/network-elements/f5/src/com/cloud/api/commands/DeleteExternalLoadBalancerCmd.java b/plugins/network-elements/f5/src/com/cloud/api/commands/DeleteExternalLoadBalancerCmd.java index 2c89a4a6a9d..d579ff25057 100644 --- a/plugins/network-elements/f5/src/com/cloud/api/commands/DeleteExternalLoadBalancerCmd.java +++ b/plugins/network-elements/f5/src/com/cloud/api/commands/DeleteExternalLoadBalancerCmd.java @@ -19,13 +19,13 @@ package com.cloud.api.commands; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.PlugService; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.PlugService; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.api.response.SuccessResponse; import com.cloud.exception.InvalidParameterValueException; import com.cloud.network.element.F5ExternalLoadBalancerElementService; diff --git a/plugins/network-elements/f5/src/com/cloud/api/commands/DeleteF5LoadBalancerCmd.java b/plugins/network-elements/f5/src/com/cloud/api/commands/DeleteF5LoadBalancerCmd.java index 959819b1588..5c4a4698a2a 100644 --- a/plugins/network-elements/f5/src/com/cloud/api/commands/DeleteF5LoadBalancerCmd.java +++ b/plugins/network-elements/f5/src/com/cloud/api/commands/DeleteF5LoadBalancerCmd.java @@ -19,15 +19,15 @@ package com.cloud.api.commands; import org.apache.log4j.Logger; -import com.cloud.api.BaseAsyncCmd; +import org.apache.cloudstack.api.BaseAsyncCmd; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.PlugService; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.PlugService; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.api.response.SuccessResponse; import com.cloud.event.EventTypes; import com.cloud.exception.ConcurrentOperationException; diff --git a/plugins/network-elements/f5/src/com/cloud/api/commands/ListExternalLoadBalancersCmd.java b/plugins/network-elements/f5/src/com/cloud/api/commands/ListExternalLoadBalancersCmd.java index acb71b06c0a..b31ea4fef9a 100644 --- a/plugins/network-elements/f5/src/com/cloud/api/commands/ListExternalLoadBalancersCmd.java +++ b/plugins/network-elements/f5/src/com/cloud/api/commands/ListExternalLoadBalancersCmd.java @@ -22,12 +22,12 @@ import java.util.List; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseListCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.PlugService; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseListCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.PlugService; import com.cloud.api.response.HostResponse; import com.cloud.api.response.ListResponse; import com.cloud.host.Host; diff --git a/plugins/network-elements/f5/src/com/cloud/api/commands/ListF5LoadBalancerNetworksCmd.java b/plugins/network-elements/f5/src/com/cloud/api/commands/ListF5LoadBalancerNetworksCmd.java index f2fa071b53e..f974bdbbc01 100644 --- a/plugins/network-elements/f5/src/com/cloud/api/commands/ListF5LoadBalancerNetworksCmd.java +++ b/plugins/network-elements/f5/src/com/cloud/api/commands/ListF5LoadBalancerNetworksCmd.java @@ -22,14 +22,14 @@ import java.util.List; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseCmd; -import com.cloud.api.BaseListCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.PlugService; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.BaseListCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.PlugService; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.api.response.ListResponse; import com.cloud.api.response.NetworkResponse; import com.cloud.exception.ConcurrentOperationException; diff --git a/plugins/network-elements/f5/src/com/cloud/api/commands/ListF5LoadBalancersCmd.java b/plugins/network-elements/f5/src/com/cloud/api/commands/ListF5LoadBalancersCmd.java index fe4cb67bd01..827aba3e590 100644 --- a/plugins/network-elements/f5/src/com/cloud/api/commands/ListF5LoadBalancersCmd.java +++ b/plugins/network-elements/f5/src/com/cloud/api/commands/ListF5LoadBalancersCmd.java @@ -22,14 +22,14 @@ import java.util.List; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseCmd; -import com.cloud.api.BaseListCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.PlugService; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.BaseListCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.PlugService; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.api.response.F5LoadBalancerResponse; import com.cloud.api.response.ListResponse; import com.cloud.exception.ConcurrentOperationException; diff --git a/plugins/network-elements/f5/src/com/cloud/api/response/F5LoadBalancerResponse.java b/plugins/network-elements/f5/src/com/cloud/api/response/F5LoadBalancerResponse.java index dbb962fff03..03c8faf8df6 100644 --- a/plugins/network-elements/f5/src/com/cloud/api/response/F5LoadBalancerResponse.java +++ b/plugins/network-elements/f5/src/com/cloud/api/response/F5LoadBalancerResponse.java @@ -16,7 +16,7 @@ // under the License. package com.cloud.api.response; -import com.cloud.api.ApiConstants; +import org.apache.cloudstack.api.ApiConstants; import com.cloud.utils.IdentityProxy; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; diff --git a/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/AddExternalFirewallCmd.java b/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/AddExternalFirewallCmd.java index 9b55af644ac..99104618527 100644 --- a/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/AddExternalFirewallCmd.java +++ b/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/AddExternalFirewallCmd.java @@ -18,13 +18,13 @@ package com.cloud.api.commands; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.PlugService; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.PlugService; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.exception.InvalidParameterValueException; import com.cloud.host.Host; import com.cloud.network.element.JuniperSRXFirewallElementService; diff --git a/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/AddSrxFirewallCmd.java b/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/AddSrxFirewallCmd.java index 6872c8eabfe..d0d7d1184f5 100644 --- a/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/AddSrxFirewallCmd.java +++ b/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/AddSrxFirewallCmd.java @@ -18,14 +18,14 @@ package com.cloud.api.commands; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseAsyncCmd; -import com.cloud.api.BaseCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.PlugService; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseAsyncCmd; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.PlugService; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.api.response.SrxFirewallResponse; import com.cloud.event.EventTypes; import com.cloud.exception.ConcurrentOperationException; diff --git a/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/ConfigureSrxFirewallCmd.java b/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/ConfigureSrxFirewallCmd.java index d5d90ff1196..da560786c7c 100644 --- a/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/ConfigureSrxFirewallCmd.java +++ b/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/ConfigureSrxFirewallCmd.java @@ -18,14 +18,14 @@ package com.cloud.api.commands; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseAsyncCmd; -import com.cloud.api.BaseCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.PlugService; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseAsyncCmd; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.PlugService; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.api.response.SrxFirewallResponse; import com.cloud.event.EventTypes; import com.cloud.exception.ConcurrentOperationException; diff --git a/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/DeleteExternalFirewallCmd.java b/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/DeleteExternalFirewallCmd.java index 8a0af1f05bb..f9b27cbd3bc 100644 --- a/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/DeleteExternalFirewallCmd.java +++ b/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/DeleteExternalFirewallCmd.java @@ -18,13 +18,13 @@ package com.cloud.api.commands; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.PlugService; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.PlugService; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.api.response.SuccessResponse; import com.cloud.exception.InvalidParameterValueException; import com.cloud.network.element.JuniperSRXFirewallElementService; diff --git a/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/DeleteSrxFirewallCmd.java b/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/DeleteSrxFirewallCmd.java index d741c0ca3b9..5870d4c8f05 100644 --- a/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/DeleteSrxFirewallCmd.java +++ b/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/DeleteSrxFirewallCmd.java @@ -18,14 +18,14 @@ package com.cloud.api.commands; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseAsyncCmd; -import com.cloud.api.BaseCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.PlugService; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseAsyncCmd; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.PlugService; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.api.response.SuccessResponse; import com.cloud.event.EventTypes; import com.cloud.exception.ConcurrentOperationException; diff --git a/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/ListExternalFirewallsCmd.java b/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/ListExternalFirewallsCmd.java index 111df728095..29bf3d26e64 100644 --- a/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/ListExternalFirewallsCmd.java +++ b/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/ListExternalFirewallsCmd.java @@ -21,12 +21,12 @@ import java.util.List; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseListCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.PlugService; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseListCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.PlugService; import com.cloud.api.response.ListResponse; import com.cloud.host.Host; import com.cloud.network.element.JuniperSRXFirewallElementService; diff --git a/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/ListSrxFirewallNetworksCmd.java b/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/ListSrxFirewallNetworksCmd.java index 43a5dff0508..a352fa15f75 100644 --- a/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/ListSrxFirewallNetworksCmd.java +++ b/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/ListSrxFirewallNetworksCmd.java @@ -21,14 +21,14 @@ import java.util.List; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseCmd; -import com.cloud.api.BaseListCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.PlugService; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.BaseListCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.PlugService; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.api.response.ListResponse; import com.cloud.api.response.NetworkResponse; import com.cloud.exception.ConcurrentOperationException; diff --git a/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/ListSrxFirewallsCmd.java b/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/ListSrxFirewallsCmd.java index a4f68566a25..3acbc806e62 100644 --- a/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/ListSrxFirewallsCmd.java +++ b/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/ListSrxFirewallsCmd.java @@ -21,14 +21,14 @@ import java.util.List; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseCmd; -import com.cloud.api.BaseListCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.PlugService; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.BaseListCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.PlugService; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.api.response.ListResponse; import com.cloud.api.response.SrxFirewallResponse; import com.cloud.exception.ConcurrentOperationException; diff --git a/plugins/network-elements/juniper-srx/src/com/cloud/api/response/SrxFirewallResponse.java b/plugins/network-elements/juniper-srx/src/com/cloud/api/response/SrxFirewallResponse.java index 08242bdb372..4382b5e84b1 100644 --- a/plugins/network-elements/juniper-srx/src/com/cloud/api/response/SrxFirewallResponse.java +++ b/plugins/network-elements/juniper-srx/src/com/cloud/api/response/SrxFirewallResponse.java @@ -16,7 +16,7 @@ // under the License. package com.cloud.api.response; -import com.cloud.api.ApiConstants; +import org.apache.cloudstack.api.ApiConstants; import com.cloud.utils.IdentityProxy; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; diff --git a/plugins/network-elements/netscaler/src/com/cloud/api/commands/AddNetscalerLoadBalancerCmd.java b/plugins/network-elements/netscaler/src/com/cloud/api/commands/AddNetscalerLoadBalancerCmd.java index 1a88de2cb6c..64214423152 100644 --- a/plugins/network-elements/netscaler/src/com/cloud/api/commands/AddNetscalerLoadBalancerCmd.java +++ b/plugins/network-elements/netscaler/src/com/cloud/api/commands/AddNetscalerLoadBalancerCmd.java @@ -16,14 +16,14 @@ package com.cloud.api.commands; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseAsyncCmd; -import com.cloud.api.BaseCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.PlugService; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseAsyncCmd; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.PlugService; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.api.response.NetscalerLoadBalancerResponse; import com.cloud.event.EventTypes; import com.cloud.exception.ConcurrentOperationException; diff --git a/plugins/network-elements/netscaler/src/com/cloud/api/commands/ConfigureNetscalerLoadBalancerCmd.java b/plugins/network-elements/netscaler/src/com/cloud/api/commands/ConfigureNetscalerLoadBalancerCmd.java index b6e5155967d..28f052484e6 100644 --- a/plugins/network-elements/netscaler/src/com/cloud/api/commands/ConfigureNetscalerLoadBalancerCmd.java +++ b/plugins/network-elements/netscaler/src/com/cloud/api/commands/ConfigureNetscalerLoadBalancerCmd.java @@ -18,14 +18,14 @@ import java.util.List; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseAsyncCmd; -import com.cloud.api.BaseCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.PlugService; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseAsyncCmd; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.PlugService; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.api.response.NetscalerLoadBalancerResponse; import com.cloud.event.EventTypes; import com.cloud.exception.ConcurrentOperationException; diff --git a/plugins/network-elements/netscaler/src/com/cloud/api/commands/DeleteNetscalerLoadBalancerCmd.java b/plugins/network-elements/netscaler/src/com/cloud/api/commands/DeleteNetscalerLoadBalancerCmd.java index b063fdf6396..b5620323bf1 100644 --- a/plugins/network-elements/netscaler/src/com/cloud/api/commands/DeleteNetscalerLoadBalancerCmd.java +++ b/plugins/network-elements/netscaler/src/com/cloud/api/commands/DeleteNetscalerLoadBalancerCmd.java @@ -17,14 +17,14 @@ package com.cloud.api.commands; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseAsyncCmd; -import com.cloud.api.BaseCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.PlugService; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseAsyncCmd; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.PlugService; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.api.response.SuccessResponse; import com.cloud.event.EventTypes; import com.cloud.exception.ConcurrentOperationException; diff --git a/plugins/network-elements/netscaler/src/com/cloud/api/commands/ListNetscalerLoadBalancerNetworksCmd.java b/plugins/network-elements/netscaler/src/com/cloud/api/commands/ListNetscalerLoadBalancerNetworksCmd.java index c0c5950d57e..2877f3c5071 100644 --- a/plugins/network-elements/netscaler/src/com/cloud/api/commands/ListNetscalerLoadBalancerNetworksCmd.java +++ b/plugins/network-elements/netscaler/src/com/cloud/api/commands/ListNetscalerLoadBalancerNetworksCmd.java @@ -19,14 +19,14 @@ import java.util.List; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseCmd; -import com.cloud.api.BaseListCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.PlugService; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.BaseListCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.PlugService; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.api.response.ListResponse; import com.cloud.api.response.NetworkResponse; import com.cloud.exception.ConcurrentOperationException; diff --git a/plugins/network-elements/netscaler/src/com/cloud/api/commands/ListNetscalerLoadBalancersCmd.java b/plugins/network-elements/netscaler/src/com/cloud/api/commands/ListNetscalerLoadBalancersCmd.java index 98fe6e95df7..4e5e3d59626 100644 --- a/plugins/network-elements/netscaler/src/com/cloud/api/commands/ListNetscalerLoadBalancersCmd.java +++ b/plugins/network-elements/netscaler/src/com/cloud/api/commands/ListNetscalerLoadBalancersCmd.java @@ -19,14 +19,14 @@ import java.util.List; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseCmd; -import com.cloud.api.BaseListCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.PlugService; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.BaseListCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.PlugService; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.api.response.ListResponse; import com.cloud.api.response.NetscalerLoadBalancerResponse; import com.cloud.exception.ConcurrentOperationException; diff --git a/plugins/network-elements/netscaler/src/com/cloud/api/response/NetscalerLoadBalancerResponse.java b/plugins/network-elements/netscaler/src/com/cloud/api/response/NetscalerLoadBalancerResponse.java index 013119a9e15..428cdc18513 100644 --- a/plugins/network-elements/netscaler/src/com/cloud/api/response/NetscalerLoadBalancerResponse.java +++ b/plugins/network-elements/netscaler/src/com/cloud/api/response/NetscalerLoadBalancerResponse.java @@ -18,7 +18,7 @@ package com.cloud.api.response; import java.util.List; -import com.cloud.api.ApiConstants; +import org.apache.cloudstack.api.ApiConstants; import com.cloud.utils.IdentityProxy; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; diff --git a/plugins/network-elements/netscaler/src/com/cloud/network/element/NetscalerElement.java b/plugins/network-elements/netscaler/src/com/cloud/network/element/NetscalerElement.java index 4ec1c072991..455dcbd8063 100644 --- a/plugins/network-elements/netscaler/src/com/cloud/network/element/NetscalerElement.java +++ b/plugins/network-elements/netscaler/src/com/cloud/network/element/NetscalerElement.java @@ -35,7 +35,7 @@ import com.cloud.agent.api.routing.SetStaticNatRulesAnswer; import com.cloud.agent.api.routing.SetStaticNatRulesCommand; import com.cloud.agent.api.to.LoadBalancerTO; import com.cloud.agent.api.to.StaticNatRuleTO; -import com.cloud.api.ApiConstants; +import org.apache.cloudstack.api.ApiConstants; import com.cloud.api.commands.AddNetscalerLoadBalancerCmd; import com.cloud.api.commands.ConfigureNetscalerLoadBalancerCmd; import com.cloud.api.commands.DeleteNetscalerLoadBalancerCmd; diff --git a/plugins/network-elements/netscaler/src/com/cloud/network/resource/NetscalerResource.java b/plugins/network-elements/netscaler/src/com/cloud/network/resource/NetscalerResource.java index d11d16a5c9f..afb01353e1e 100644 --- a/plugins/network-elements/netscaler/src/com/cloud/network/resource/NetscalerResource.java +++ b/plugins/network-elements/netscaler/src/com/cloud/network/resource/NetscalerResource.java @@ -86,7 +86,7 @@ import com.cloud.agent.api.to.LoadBalancerTO.CounterTO; import com.cloud.agent.api.to.LoadBalancerTO.DestinationTO; import com.cloud.agent.api.to.LoadBalancerTO.StickinessPolicyTO; import com.cloud.agent.api.to.StaticNatRuleTO; -import com.cloud.api.ApiConstants; +import org.apache.cloudstack.api.ApiConstants; import com.cloud.host.Host; import com.cloud.host.Host.Type; import com.cloud.network.rules.LbStickinessMethod.StickinessMethodType; diff --git a/plugins/network-elements/nicira-nvp/src/com/cloud/api/commands/AddNiciraNvpDeviceCmd.java b/plugins/network-elements/nicira-nvp/src/com/cloud/api/commands/AddNiciraNvpDeviceCmd.java index 44e8477cc4d..40b1327064d 100644 --- a/plugins/network-elements/nicira-nvp/src/com/cloud/api/commands/AddNiciraNvpDeviceCmd.java +++ b/plugins/network-elements/nicira-nvp/src/com/cloud/api/commands/AddNiciraNvpDeviceCmd.java @@ -18,14 +18,14 @@ package com.cloud.api.commands; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseAsyncCmd; -import com.cloud.api.BaseCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.PlugService; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseAsyncCmd; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.PlugService; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.api.response.NiciraNvpDeviceResponse; import com.cloud.event.EventTypes; import com.cloud.exception.ConcurrentOperationException; diff --git a/plugins/network-elements/nicira-nvp/src/com/cloud/api/commands/DeleteNiciraNvpDeviceCmd.java b/plugins/network-elements/nicira-nvp/src/com/cloud/api/commands/DeleteNiciraNvpDeviceCmd.java index 9cc8d626bb5..8bce91cf989 100644 --- a/plugins/network-elements/nicira-nvp/src/com/cloud/api/commands/DeleteNiciraNvpDeviceCmd.java +++ b/plugins/network-elements/nicira-nvp/src/com/cloud/api/commands/DeleteNiciraNvpDeviceCmd.java @@ -18,14 +18,14 @@ package com.cloud.api.commands; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseAsyncCmd; -import com.cloud.api.BaseCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.PlugService; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseAsyncCmd; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.PlugService; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.api.response.SuccessResponse; import com.cloud.event.EventTypes; import com.cloud.exception.ConcurrentOperationException; diff --git a/plugins/network-elements/nicira-nvp/src/com/cloud/api/commands/ListNiciraNvpDeviceNetworksCmd.java b/plugins/network-elements/nicira-nvp/src/com/cloud/api/commands/ListNiciraNvpDeviceNetworksCmd.java index 1f30657b8a6..e3236463bf9 100644 --- a/plugins/network-elements/nicira-nvp/src/com/cloud/api/commands/ListNiciraNvpDeviceNetworksCmd.java +++ b/plugins/network-elements/nicira-nvp/src/com/cloud/api/commands/ListNiciraNvpDeviceNetworksCmd.java @@ -21,14 +21,14 @@ import java.util.List; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseCmd; -import com.cloud.api.BaseListCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.PlugService; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.BaseListCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.PlugService; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.api.response.ListResponse; import com.cloud.api.response.NetworkResponse; import com.cloud.exception.ConcurrentOperationException; diff --git a/plugins/network-elements/nicira-nvp/src/com/cloud/api/commands/ListNiciraNvpDevicesCmd.java b/plugins/network-elements/nicira-nvp/src/com/cloud/api/commands/ListNiciraNvpDevicesCmd.java index f38cb16c8e9..b2c3238320e 100644 --- a/plugins/network-elements/nicira-nvp/src/com/cloud/api/commands/ListNiciraNvpDevicesCmd.java +++ b/plugins/network-elements/nicira-nvp/src/com/cloud/api/commands/ListNiciraNvpDevicesCmd.java @@ -21,14 +21,14 @@ import java.util.List; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseCmd; -import com.cloud.api.BaseListCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.PlugService; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.BaseListCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.PlugService; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.api.response.ListResponse; import com.cloud.api.response.NiciraNvpDeviceResponse; import com.cloud.exception.ConcurrentOperationException; diff --git a/plugins/network-elements/nicira-nvp/src/com/cloud/api/response/NiciraNvpDeviceResponse.java b/plugins/network-elements/nicira-nvp/src/com/cloud/api/response/NiciraNvpDeviceResponse.java index e50be813879..ca41e7f68e7 100644 --- a/plugins/network-elements/nicira-nvp/src/com/cloud/api/response/NiciraNvpDeviceResponse.java +++ b/plugins/network-elements/nicira-nvp/src/com/cloud/api/response/NiciraNvpDeviceResponse.java @@ -16,7 +16,7 @@ // under the License. package com.cloud.api.response; -import com.cloud.api.ApiConstants; +import org.apache.cloudstack.api.ApiConstants; import com.cloud.serializer.Param; import com.cloud.utils.IdentityProxy; import com.google.gson.annotations.SerializedName; diff --git a/plugins/user-authenticators/ldap/src/com/cloud/server/auth/LDAPUserAuthenticator.java b/plugins/user-authenticators/ldap/src/com/cloud/server/auth/LDAPUserAuthenticator.java index 2ff419cdff6..358605a8c2e 100644 --- a/plugins/user-authenticators/ldap/src/com/cloud/server/auth/LDAPUserAuthenticator.java +++ b/plugins/user-authenticators/ldap/src/com/cloud/server/auth/LDAPUserAuthenticator.java @@ -33,7 +33,7 @@ import javax.naming.directory.SearchResult; import org.apache.log4j.Logger; import org.bouncycastle.util.encoders.Base64; -import com.cloud.api.ApiConstants.LDAPParams; +import org.apache.cloudstack.api.ApiConstants.LDAPParams; import com.cloud.configuration.dao.ConfigurationDao; import com.cloud.server.ManagementServer; import com.cloud.user.UserAccount; diff --git a/server/src/com/cloud/acl/DomainChecker.java b/server/src/com/cloud/acl/DomainChecker.java index 6bc2cd39814..5ae296ea6bd 100755 --- a/server/src/com/cloud/acl/DomainChecker.java +++ b/server/src/com/cloud/acl/DomainChecker.java @@ -18,7 +18,7 @@ package com.cloud.acl; import javax.ejb.Local; -import com.cloud.api.BaseCmd; +import org.apache.cloudstack.api.BaseCmd; import com.cloud.dc.DataCenter; import com.cloud.domain.Domain; import com.cloud.domain.DomainVO; diff --git a/server/src/com/cloud/api/ApiDispatcher.java b/server/src/com/cloud/api/ApiDispatcher.java index 9a4705926b2..184a071e490 100755 --- a/server/src/com/cloud/api/ApiDispatcher.java +++ b/server/src/com/cloud/api/ApiDispatcher.java @@ -28,11 +28,12 @@ import java.util.Map; import java.util.StringTokenizer; import java.util.regex.Matcher; +import org.apache.cloudstack.api.*; import org.apache.log4j.Logger; import com.cloud.acl.ControlledEntity; import com.cloud.acl.Role; -import com.cloud.api.BaseCmd.CommandType; +import org.apache.cloudstack.api.BaseCmd.CommandType; import com.cloud.api.commands.ListEventsCmd; import com.cloud.async.AsyncCommandQueued; import com.cloud.async.AsyncJobManager; diff --git a/server/src/com/cloud/api/ApiGsonHelper.java b/server/src/com/cloud/api/ApiGsonHelper.java index 503ff13db3a..6e64f7124e0 100644 --- a/server/src/com/cloud/api/ApiGsonHelper.java +++ b/server/src/com/cloud/api/ApiGsonHelper.java @@ -18,6 +18,8 @@ package com.cloud.api; import com.google.gson.GsonBuilder; import com.cloud.utils.IdentityProxy; +import org.apache.cloudstack.api.ResponseObject; + import java.util.Map; public class ApiGsonHelper { diff --git a/server/src/com/cloud/api/ApiResponseGsonHelper.java b/server/src/com/cloud/api/ApiResponseGsonHelper.java index 0b578793344..c71193e8908 100644 --- a/server/src/com/cloud/api/ApiResponseGsonHelper.java +++ b/server/src/com/cloud/api/ApiResponseGsonHelper.java @@ -18,6 +18,7 @@ package com.cloud.api; import com.google.gson.GsonBuilder; import com.cloud.utils.IdentityProxy; +import org.apache.cloudstack.api.ResponseObject; /** * The ApiResonseGsonHelper is different from ApiGsonHelper - it registeres one more adapter for String type required for api response encoding diff --git a/server/src/com/cloud/api/ApiResponseHelper.java b/server/src/com/cloud/api/ApiResponseHelper.java index 54884b99f73..f4d0eeb7953 100755 --- a/server/src/com/cloud/api/ApiResponseHelper.java +++ b/server/src/com/cloud/api/ApiResponseHelper.java @@ -29,12 +29,16 @@ import java.util.Map; import java.util.Set; import java.util.StringTokenizer; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.ResponseGenerator; +import org.apache.cloudstack.api.ResponseObject; +import org.apache.cloudstack.api.ServerApiException; import org.apache.log4j.Logger; import com.cloud.acl.ControlledEntity; import com.cloud.acl.ControlledEntity.ACLType; -import com.cloud.api.ApiConstants.HostDetails; -import com.cloud.api.ApiConstants.VMDetails; +import org.apache.cloudstack.api.ApiConstants.HostDetails; +import org.apache.cloudstack.api.ApiConstants.VMDetails; import com.cloud.api.commands.QueryAsyncJobResultCmd; import com.cloud.api.response.AccountResponse; import com.cloud.api.response.ApiResponseSerializer; diff --git a/server/src/com/cloud/api/ApiSerializerHelper.java b/server/src/com/cloud/api/ApiSerializerHelper.java index e2e1547491d..735330d261c 100644 --- a/server/src/com/cloud/api/ApiSerializerHelper.java +++ b/server/src/com/cloud/api/ApiSerializerHelper.java @@ -16,6 +16,7 @@ // under the License. package com.cloud.api; +import org.apache.cloudstack.api.ResponseObject; import org.apache.log4j.Logger; import com.google.gson.Gson; diff --git a/server/src/com/cloud/api/ApiServer.java b/server/src/com/cloud/api/ApiServer.java index 73aa524bb0d..2c4f7cf60d4 100755 --- a/server/src/com/cloud/api/ApiServer.java +++ b/server/src/com/cloud/api/ApiServer.java @@ -49,6 +49,7 @@ import javax.crypto.spec.SecretKeySpec; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; +import org.apache.cloudstack.api.*; import org.apache.commons.codec.binary.Base64; import org.apache.http.ConnectionClosedException; import org.apache.http.HttpException; diff --git a/server/src/com/cloud/api/ApiServlet.java b/server/src/com/cloud/api/ApiServlet.java index b5c42725104..4c2739cb323 100755 --- a/server/src/com/cloud/api/ApiServlet.java +++ b/server/src/com/cloud/api/ApiServlet.java @@ -28,6 +28,8 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.ServerApiException; import org.apache.log4j.Logger; import com.cloud.cluster.StackMaid; diff --git a/server/src/com/cloud/api/ResponseObjectTypeAdapter.java b/server/src/com/cloud/api/ResponseObjectTypeAdapter.java index 9c768dc9de6..be2a5384e80 100644 --- a/server/src/com/cloud/api/ResponseObjectTypeAdapter.java +++ b/server/src/com/cloud/api/ResponseObjectTypeAdapter.java @@ -19,6 +19,7 @@ package com.cloud.api; import java.lang.reflect.Method; import java.lang.reflect.Type; +import org.apache.cloudstack.api.ResponseObject; import org.apache.log4j.Logger; import com.cloud.api.response.ExceptionResponse; diff --git a/server/src/com/cloud/api/commands/AddNetworkDeviceCmd.java b/server/src/com/cloud/api/commands/AddNetworkDeviceCmd.java index 6edd2ab2aec..20fd7f10f7e 100644 --- a/server/src/com/cloud/api/commands/AddNetworkDeviceCmd.java +++ b/server/src/com/cloud/api/commands/AddNetworkDeviceCmd.java @@ -20,11 +20,11 @@ import java.util.Map; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseCmd; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.exception.ConcurrentOperationException; import com.cloud.exception.InsufficientCapacityException; import com.cloud.exception.InvalidParameterValueException; diff --git a/server/src/com/cloud/api/commands/AddTrafficMonitorCmd.java b/server/src/com/cloud/api/commands/AddTrafficMonitorCmd.java index 6bbdde7ecc3..cfc20d06913 100644 --- a/server/src/com/cloud/api/commands/AddTrafficMonitorCmd.java +++ b/server/src/com/cloud/api/commands/AddTrafficMonitorCmd.java @@ -18,12 +18,12 @@ package com.cloud.api.commands; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.exception.InvalidParameterValueException; import com.cloud.host.Host; import com.cloud.network.NetworkUsageManager; diff --git a/server/src/com/cloud/api/commands/DeleteNetworkDeviceCmd.java b/server/src/com/cloud/api/commands/DeleteNetworkDeviceCmd.java index 7d07a3b0901..cd0c0b7649f 100644 --- a/server/src/com/cloud/api/commands/DeleteNetworkDeviceCmd.java +++ b/server/src/com/cloud/api/commands/DeleteNetworkDeviceCmd.java @@ -18,12 +18,12 @@ package com.cloud.api.commands; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.api.response.SuccessResponse; import com.cloud.exception.ConcurrentOperationException; import com.cloud.exception.InsufficientCapacityException; diff --git a/server/src/com/cloud/api/commands/DeleteTrafficMonitorCmd.java b/server/src/com/cloud/api/commands/DeleteTrafficMonitorCmd.java index 1a4d1ab825d..3c6d9f6b805 100644 --- a/server/src/com/cloud/api/commands/DeleteTrafficMonitorCmd.java +++ b/server/src/com/cloud/api/commands/DeleteTrafficMonitorCmd.java @@ -18,12 +18,12 @@ package com.cloud.api.commands; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.api.response.SuccessResponse; import com.cloud.exception.InvalidParameterValueException; import com.cloud.network.NetworkUsageManager; diff --git a/server/src/com/cloud/api/commands/GenerateUsageRecordsCmd.java b/server/src/com/cloud/api/commands/GenerateUsageRecordsCmd.java index b285775313c..71f555d0d53 100644 --- a/server/src/com/cloud/api/commands/GenerateUsageRecordsCmd.java +++ b/server/src/com/cloud/api/commands/GenerateUsageRecordsCmd.java @@ -20,12 +20,12 @@ import java.util.Date; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.api.response.SuccessResponse; import com.cloud.server.ManagementServerExt; import com.cloud.user.Account; diff --git a/server/src/com/cloud/api/commands/GetUsageRecordsCmd.java b/server/src/com/cloud/api/commands/GetUsageRecordsCmd.java index 4edcb25760d..a0af93b90f1 100644 --- a/server/src/com/cloud/api/commands/GetUsageRecordsCmd.java +++ b/server/src/com/cloud/api/commands/GetUsageRecordsCmd.java @@ -25,12 +25,12 @@ import java.util.TimeZone; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; +import org.apache.cloudstack.api.ApiConstants; import com.cloud.api.ApiDBUtils; -import com.cloud.api.BaseListCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; +import org.apache.cloudstack.api.BaseListCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; import com.cloud.api.response.ListResponse; import com.cloud.projects.Project; import com.cloud.server.ManagementServerExt; diff --git a/server/src/com/cloud/api/commands/ListNetworkDeviceCmd.java b/server/src/com/cloud/api/commands/ListNetworkDeviceCmd.java index fc583c15f7b..c3f206caf15 100644 --- a/server/src/com/cloud/api/commands/ListNetworkDeviceCmd.java +++ b/server/src/com/cloud/api/commands/ListNetworkDeviceCmd.java @@ -22,12 +22,12 @@ import java.util.Map; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseCmd; -import com.cloud.api.BaseListCmd; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.BaseListCmd; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.api.response.ListResponse; import com.cloud.exception.ConcurrentOperationException; import com.cloud.exception.InsufficientCapacityException; diff --git a/server/src/com/cloud/api/commands/ListTrafficMonitorsCmd.java b/server/src/com/cloud/api/commands/ListTrafficMonitorsCmd.java index 78338d86710..59683dce3aa 100644 --- a/server/src/com/cloud/api/commands/ListTrafficMonitorsCmd.java +++ b/server/src/com/cloud/api/commands/ListTrafficMonitorsCmd.java @@ -21,11 +21,11 @@ import java.util.List; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; -import com.cloud.api.BaseListCmd; -import com.cloud.api.IdentityMapper; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseListCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; import com.cloud.api.response.ListResponse; import com.cloud.host.Host; import com.cloud.network.NetworkUsageManager; diff --git a/server/src/com/cloud/api/commands/ListUsageTypesCmd.java b/server/src/com/cloud/api/commands/ListUsageTypesCmd.java index b60807c24a8..8c21d4f088e 100644 --- a/server/src/com/cloud/api/commands/ListUsageTypesCmd.java +++ b/server/src/com/cloud/api/commands/ListUsageTypesCmd.java @@ -20,8 +20,8 @@ import java.util.List; import org.apache.log4j.Logger; -import com.cloud.api.BaseCmd; -import com.cloud.api.Implementation; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.Implementation; import com.cloud.api.response.ListResponse; import com.cloud.server.ManagementServerExt; import com.cloud.server.api.response.UsageTypeResponse; diff --git a/server/src/com/cloud/api/doc/ApiXmlDocWriter.java b/server/src/com/cloud/api/doc/ApiXmlDocWriter.java index b2c815b7178..46836f8799f 100644 --- a/server/src/com/cloud/api/doc/ApiXmlDocWriter.java +++ b/server/src/com/cloud/api/doc/ApiXmlDocWriter.java @@ -40,11 +40,11 @@ import java.util.zip.ZipOutputStream; import org.apache.log4j.Logger; import com.cloud.alert.AlertManager; -import com.cloud.api.BaseAsyncCmd; -import com.cloud.api.BaseAsyncCreateCmd; -import com.cloud.api.BaseCmd; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; +import org.apache.cloudstack.api.BaseAsyncCmd; +import org.apache.cloudstack.api.BaseAsyncCreateCmd; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; import com.cloud.api.response.AsyncJobResponse; import com.cloud.api.response.BaseResponse; import com.cloud.api.response.HostResponse; diff --git a/server/src/com/cloud/api/response/ApiResponseSerializer.java b/server/src/com/cloud/api/response/ApiResponseSerializer.java index 4be5dfab9d5..70d7edd1d15 100644 --- a/server/src/com/cloud/api/response/ApiResponseSerializer.java +++ b/server/src/com/cloud/api/response/ApiResponseSerializer.java @@ -28,12 +28,12 @@ import java.util.regex.Pattern; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; +import org.apache.cloudstack.api.ApiConstants; import com.cloud.api.ApiDBUtils; import com.cloud.api.ApiResponseGsonHelper; import com.cloud.api.ApiServer; -import com.cloud.api.BaseCmd; -import com.cloud.api.ResponseObject; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.ResponseObject; import com.cloud.utils.IdentityProxy; import com.cloud.utils.encoding.URLEncoder; import com.cloud.utils.exception.CloudRuntimeException; diff --git a/server/src/com/cloud/async/AsyncJobManagerImpl.java b/server/src/com/cloud/async/AsyncJobManagerImpl.java index 5fb5105857c..a90d4435885 100644 --- a/server/src/com/cloud/async/AsyncJobManagerImpl.java +++ b/server/src/com/cloud/async/AsyncJobManagerImpl.java @@ -15,8 +15,8 @@ // specific language governing permissions and limitations // under the License. -package com.cloud.async; - +package com.cloud.async; + import java.io.File; import java.io.FileInputStream; import java.lang.reflect.Type; @@ -40,9 +40,9 @@ import org.apache.log4j.NDC; import com.cloud.api.ApiDispatcher; import com.cloud.api.ApiGsonHelper; import com.cloud.api.ApiSerializerHelper; -import com.cloud.api.BaseAsyncCmd; -import com.cloud.api.BaseCmd; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.BaseAsyncCmd; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.api.commands.QueryAsyncJobResultCmd; import com.cloud.api.response.ExceptionResponse; import com.cloud.async.dao.AsyncJobDao; @@ -73,22 +73,22 @@ import com.cloud.utils.mgmt.JmxUtil; import com.cloud.utils.net.MacAddress; import com.google.gson.Gson; import com.google.gson.reflect.TypeToken; - -@Local(value={AsyncJobManager.class}) -public class AsyncJobManagerImpl implements AsyncJobManager, ClusterManagerListener { - public static final Logger s_logger = Logger.getLogger(AsyncJobManagerImpl.class.getName()); + +@Local(value={AsyncJobManager.class}) +public class AsyncJobManagerImpl implements AsyncJobManager, ClusterManagerListener { + public static final Logger s_logger = Logger.getLogger(AsyncJobManagerImpl.class.getName()); private static final int ACQUIRE_GLOBAL_LOCK_TIMEOUT_FOR_COOPERATION = 3; // 3 seconds - - private static final int MAX_ONETIME_SCHEDULE_SIZE = 50; + + private static final int MAX_ONETIME_SCHEDULE_SIZE = 50; private static final int HEARTBEAT_INTERVAL = 2000; private static final int GC_INTERVAL = 10000; // 10 seconds - - private String _name; - - private AsyncJobExecutorContext _context; - private SyncQueueManager _queueMgr; + + private String _name; + + private AsyncJobExecutorContext _context; + private SyncQueueManager _queueMgr; private ClusterManager _clusterMgr; - private AccountManager _accountMgr; + private AccountManager _accountMgr; private AccountDao _accountDao; private AsyncJobDao _jobDao; private long _jobExpireSeconds = 86400; // 1 day @@ -118,100 +118,100 @@ public class AsyncJobManagerImpl implements AsyncJobManager, ClusterManagerListe @Override public List findInstancePendingAsyncJobs(AsyncJob.Type instanceType, Long accountId) { return _jobDao.findInstancePendingAsyncJobs(instanceType, accountId); - } - - @Override - public long submitAsyncJob(AsyncJobVO job) { - return submitAsyncJob(job, false); - } + } + + @Override + public long submitAsyncJob(AsyncJobVO job) { + return submitAsyncJob(job, false); + } - @Override @DB + @Override @DB public long submitAsyncJob(AsyncJobVO job, boolean scheduleJobExecutionInContext) { - Transaction txt = Transaction.currentTxn(); - try { - txt.start(); + Transaction txt = Transaction.currentTxn(); + try { + txt.start(); job.setInitMsid(getMsid()); - _jobDao.persist(job); - txt.commit(); + _jobDao.persist(job); + txt.commit(); // no sync source originally - job.setSyncSource(null); + job.setSyncSource(null); scheduleExecution(job, scheduleJobExecutionInContext); if(s_logger.isDebugEnabled()) { s_logger.debug("submit async job-" + job.getId() + ", details: " + job.toString()); } - return job.getId(); + return job.getId(); } catch(Exception e) { txt.rollback(); String errMsg = "Unable to schedule async job for command " + job.getCmd() + ", unexpected exception."; s_logger.warn(errMsg, e); throw new CloudRuntimeException(errMsg); - } - } - - @Override @DB - public void completeAsyncJob(long jobId, int jobStatus, int resultCode, Object resultObject) { + } + } + + @Override @DB + public void completeAsyncJob(long jobId, int jobStatus, int resultCode, Object resultObject) { if(s_logger.isDebugEnabled()) { - s_logger.debug("Complete async job-" + jobId + ", jobStatus: " + jobStatus + + s_logger.debug("Complete async job-" + jobId + ", jobStatus: " + jobStatus + ", resultCode: " + resultCode + ", result: " + resultObject); - } - - Transaction txt = Transaction.currentTxn(); - try { - txt.start(); - AsyncJobVO job = _jobDao.findById(jobId); - if(job == null) { + } + + Transaction txt = Transaction.currentTxn(); + try { + txt.start(); + AsyncJobVO job = _jobDao.findById(jobId); + if(job == null) { if(s_logger.isDebugEnabled()) { - s_logger.debug("job-" + jobId + " no longer exists, we just log completion info here. " + jobStatus + + s_logger.debug("job-" + jobId + " no longer exists, we just log completion info here. " + jobStatus + ", resultCode: " + resultCode + ", result: " + resultObject); - } - - txt.rollback(); - return; - } + } + + txt.rollback(); + return; + } - job.setCompleteMsid(getMsid()); - job.setStatus(jobStatus); - job.setResultCode(resultCode); + job.setCompleteMsid(getMsid()); + job.setStatus(jobStatus); + job.setResultCode(resultCode); - // reset attached object - job.setInstanceType(null); - job.setInstanceId(null); + // reset attached object + job.setInstanceType(null); + job.setInstanceId(null); if (resultObject != null) { job.setResult(ApiSerializerHelper.toSerializedStringOld(resultObject)); - } + } - job.setLastUpdated(DateUtil.currentGMTTime()); - _jobDao.update(jobId, job); - txt.commit(); - } catch(Exception e) { - s_logger.error("Unexpected exception while completing async job-" + jobId, e); - txt.rollback(); - } - } + job.setLastUpdated(DateUtil.currentGMTTime()); + _jobDao.update(jobId, job); + txt.commit(); + } catch(Exception e) { + s_logger.error("Unexpected exception while completing async job-" + jobId, e); + txt.rollback(); + } + } - @Override @DB - public void updateAsyncJobStatus(long jobId, int processStatus, Object resultObject) { + @Override @DB + public void updateAsyncJobStatus(long jobId, int processStatus, Object resultObject) { if(s_logger.isDebugEnabled()) { - s_logger.debug("Update async-job progress, job-" + jobId + ", processStatus: " + processStatus + + s_logger.debug("Update async-job progress, job-" + jobId + ", processStatus: " + processStatus + ", result: " + resultObject); - } - - Transaction txt = Transaction.currentTxn(); - try { - txt.start(); - AsyncJobVO job = _jobDao.findById(jobId); - if(job == null) { + } + + Transaction txt = Transaction.currentTxn(); + try { + txt.start(); + AsyncJobVO job = _jobDao.findById(jobId); + if(job == null) { if(s_logger.isDebugEnabled()) { s_logger.debug("job-" + jobId + " no longer exists, we just log progress info here. progress status: " + processStatus); - } - - txt.rollback(); - return; - } - - job.setProcessStatus(processStatus); + } + + txt.rollback(); + return; + } + + job.setProcessStatus(processStatus); if(resultObject != null) { job.setResult(ApiSerializerHelper.toSerializedStringOld(resultObject)); } @@ -315,60 +315,60 @@ public class AsyncJobManagerImpl implements AsyncJobManager, ClusterManagerListe return _jobDao.findById(cmd.getId()); } - @Override @DB - public AsyncJobResult queryAsyncJobResult(long jobId) { + @Override @DB + public AsyncJobResult queryAsyncJobResult(long jobId) { if(s_logger.isTraceEnabled()) { s_logger.trace("Query async-job status, job-" + jobId); - } - - Transaction txt = Transaction.currentTxn(); - AsyncJobResult jobResult = new AsyncJobResult(jobId); - - try { - txt.start(); - AsyncJobVO job = _jobDao.findById(jobId); - if(job != null) { - jobResult.setCmdOriginator(job.getCmdOriginator()); - jobResult.setJobStatus(job.getStatus()); - jobResult.setProcessStatus(job.getProcessStatus()); - jobResult.setResult(job.getResult()); + } + + Transaction txt = Transaction.currentTxn(); + AsyncJobResult jobResult = new AsyncJobResult(jobId); + + try { + txt.start(); + AsyncJobVO job = _jobDao.findById(jobId); + if(job != null) { + jobResult.setCmdOriginator(job.getCmdOriginator()); + jobResult.setJobStatus(job.getStatus()); + jobResult.setProcessStatus(job.getProcessStatus()); + jobResult.setResult(job.getResult()); jobResult.setResultCode(job.getResultCode()); - jobResult.setUuid(job.getUuid()); - - if(job.getStatus() == AsyncJobResult.STATUS_SUCCEEDED || - job.getStatus() == AsyncJobResult.STATUS_FAILED) { - + jobResult.setUuid(job.getUuid()); + + if(job.getStatus() == AsyncJobResult.STATUS_SUCCEEDED || + job.getStatus() == AsyncJobResult.STATUS_FAILED) { + if(s_logger.isDebugEnabled()) { s_logger.debug("Async job-" + jobId + " completed"); - } - } else { - job.setLastPolled(DateUtil.currentGMTTime()); - _jobDao.update(jobId, job); - } - } else { + } + } else { + job.setLastPolled(DateUtil.currentGMTTime()); + _jobDao.update(jobId, job); + } + } else { if(s_logger.isDebugEnabled()) { s_logger.debug("Async job-" + jobId + " does not exist, invalid job id?"); - } - - jobResult.setJobStatus(AsyncJobResult.STATUS_FAILED); - jobResult.setResult("job-" + jobId + " does not exist"); - } - txt.commit(); - } catch(Exception e) { - s_logger.error("Unexpected exception while querying async job-" + jobId + " status: ", e); - - jobResult.setJobStatus(AsyncJobResult.STATUS_FAILED); - jobResult.setResult("Exception: " + e.toString()); - txt.rollback(); - } - + } + + jobResult.setJobStatus(AsyncJobResult.STATUS_FAILED); + jobResult.setResult("job-" + jobId + " does not exist"); + } + txt.commit(); + } catch(Exception e) { + s_logger.error("Unexpected exception while querying async job-" + jobId + " status: ", e); + + jobResult.setJobStatus(AsyncJobResult.STATUS_FAILED); + jobResult.setResult("Exception: " + e.toString()); + txt.rollback(); + } + if(s_logger.isTraceEnabled()) { s_logger.trace("Job status: " + jobResult.toString()); - } - - return jobResult; + } + + return jobResult; } - + private void scheduleExecution(final AsyncJobVO job) { scheduleExecution(job, false); } @@ -506,7 +506,7 @@ public class AsyncJobManagerImpl implements AsyncJobManager, ClusterManagerListe } }; } - + private void executeQueueItem(SyncQueueItemVO item, boolean fromPreviousSession) { AsyncJobVO job = _jobDao.findById(item.getContentId()); if (job != null) { @@ -536,61 +536,61 @@ public class AsyncJobManagerImpl implements AsyncJobManager, ClusterManagerListe } } - @Override - public void releaseSyncSource(AsyncJobExecutor executor) { - if(executor.getSyncSource() != null) { + @Override + public void releaseSyncSource(AsyncJobExecutor executor) { + if(executor.getSyncSource() != null) { if(s_logger.isDebugEnabled()) { - s_logger.debug("Release sync source for job-" + executor.getJob().getId() + " sync source: " - + executor.getSyncSource().getContentType() + "-" + s_logger.debug("Release sync source for job-" + executor.getJob().getId() + " sync source: " + + executor.getSyncSource().getContentType() + "-" + executor.getSyncSource().getContentId()); - } - - _queueMgr.purgeItem(executor.getSyncSource().getId()); - checkQueue(executor.getSyncSource().getQueueId()); - } - } - - private void checkQueue(long queueId) { - while(true) { - try { - SyncQueueItemVO item = _queueMgr.dequeueFromOne(queueId, getMsid()); - if(item != null) { + } + + _queueMgr.purgeItem(executor.getSyncSource().getId()); + checkQueue(executor.getSyncSource().getQueueId()); + } + } + + private void checkQueue(long queueId) { + while(true) { + try { + SyncQueueItemVO item = _queueMgr.dequeueFromOne(queueId, getMsid()); + if(item != null) { if(s_logger.isDebugEnabled()) { s_logger.debug("Executing sync queue item: " + item.toString()); - } - - executeQueueItem(item, false); - } else { - break; - } - } catch(Throwable e) { - s_logger.error("Unexpected exception when kicking sync queue-" + queueId, e); - break; - } - } - } - - private Runnable getHeartbeatTask() { - return new Runnable() { + } + + executeQueueItem(item, false); + } else { + break; + } + } catch(Throwable e) { + s_logger.error("Unexpected exception when kicking sync queue-" + queueId, e); + break; + } + } + } + + private Runnable getHeartbeatTask() { + return new Runnable() { @Override - public void run() { + public void run() { try { - List l = _queueMgr.dequeueFromAny(getMsid(), MAX_ONETIME_SCHEDULE_SIZE); - if(l != null && l.size() > 0) { - for(SyncQueueItemVO item: l) { + List l = _queueMgr.dequeueFromAny(getMsid(), MAX_ONETIME_SCHEDULE_SIZE); + if(l != null && l.size() > 0) { + for(SyncQueueItemVO item: l) { if(s_logger.isDebugEnabled()) { s_logger.debug("Execute sync-queue item: " + item.toString()); } executeQueueItem(item, false); - } - } - } catch(Throwable e) { - s_logger.error("Unexpected exception when trying to execute queue item, ", e); + } + } + } catch(Throwable e) { + s_logger.error("Unexpected exception when trying to execute queue item, ", e); } finally { StackMaid.current().exitCleanup(); - } - } - }; + } + } + }; } @DB @@ -666,10 +666,10 @@ public class AsyncJobManagerImpl implements AsyncJobManager, ClusterManagerListe private long getMsid() { if(_clusterMgr != null) { return _clusterMgr.getManagementNodeId(); - } - - return MacAddress.getMacAddress().toLong(); - } + } + + return MacAddress.getMacAddress().toLong(); + } private void cleanupPendingJobs(List l) { if(l != null && l.size() > 0) { @@ -713,25 +713,25 @@ public class AsyncJobManagerImpl implements AsyncJobManager, ClusterManagerListe _accountDao = locator.getDao(AccountDao.class); if (_accountDao == null) { throw new ConfigurationException("Unable to get " + AccountDao.class.getName()); - } - _jobDao = locator.getDao(AsyncJobDao.class); - if (_jobDao == null) { - throw new ConfigurationException("Unable to get " - + AsyncJobDao.class.getName()); - } - - _context = locator.getManager(AsyncJobExecutorContext.class); - if (_context == null) { - throw new ConfigurationException("Unable to get " - + AsyncJobExecutorContext.class.getName()); - } - - _queueMgr = locator.getManager(SyncQueueManager.class); - if(_queueMgr == null) { - throw new ConfigurationException("Unable to get " - + SyncQueueManager.class.getName()); - } - + } + _jobDao = locator.getDao(AsyncJobDao.class); + if (_jobDao == null) { + throw new ConfigurationException("Unable to get " + + AsyncJobDao.class.getName()); + } + + _context = locator.getManager(AsyncJobExecutorContext.class); + if (_context == null) { + throw new ConfigurationException("Unable to get " + + AsyncJobExecutorContext.class.getName()); + } + + _queueMgr = locator.getManager(SyncQueueManager.class); + if(_queueMgr == null) { + throw new ConfigurationException("Unable to get " + + SyncQueueManager.class.getName()); + } + _clusterMgr = locator.getManager(ClusterManager.class); _accountMgr = locator.getManager(AccountManager.class); @@ -754,7 +754,7 @@ public class AsyncJobManagerImpl implements AsyncJobManager, ClusterManagerListe throw new ConfigurationException("Unable to load db.properties to configure AsyncJobManagerImpl"); } - return true; + return true; } @Override @@ -783,8 +783,8 @@ public class AsyncJobManagerImpl implements AsyncJobManager, ClusterManagerListe @Override public void onManagementNodeIsolated() { } - - @Override + + @Override public boolean start() { try { List l = _queueMgr.getActiveQueueItems(getMsid(), false); @@ -811,17 +811,17 @@ public class AsyncJobManagerImpl implements AsyncJobManager, ClusterManagerListe private static String getSerializedErrorMessage(String errorMessage) { return ApiSerializerHelper.toSerializedStringOld(getResetResultResponse(errorMessage)); - } - - @Override - public boolean stop() { - _heartbeatScheduler.shutdown(); - _executor.shutdown(); - return true; - } - - @Override - public String getName() { - return _name; - } -} + } + + @Override + public boolean stop() { + _heartbeatScheduler.shutdown(); + _executor.shutdown(); + return true; + } + + @Override + public String getName() { + return _name; + } +} diff --git a/server/src/com/cloud/baremetal/BareMetalDiscoverer.java b/server/src/com/cloud/baremetal/BareMetalDiscoverer.java index 944e3714550..7d368688783 100755 --- a/server/src/com/cloud/baremetal/BareMetalDiscoverer.java +++ b/server/src/com/cloud/baremetal/BareMetalDiscoverer.java @@ -30,7 +30,7 @@ import org.apache.log4j.Logger; import com.cloud.agent.api.StartupCommand; import com.cloud.agent.api.StartupRoutingCommand; -import com.cloud.api.ApiConstants; +import org.apache.cloudstack.api.ApiConstants; import com.cloud.dc.ClusterVO; import com.cloud.dc.DataCenterVO; import com.cloud.dc.dao.ClusterDao; diff --git a/server/src/com/cloud/baremetal/BareMetalResourceBase.java b/server/src/com/cloud/baremetal/BareMetalResourceBase.java index 8c14ccecf2e..a922db911ef 100755 --- a/server/src/com/cloud/baremetal/BareMetalResourceBase.java +++ b/server/src/com/cloud/baremetal/BareMetalResourceBase.java @@ -53,7 +53,7 @@ import com.cloud.agent.api.baremetal.IpmISetBootDevCommand; import com.cloud.agent.api.baremetal.IpmISetBootDevCommand.BootDev; import com.cloud.agent.api.baremetal.IpmiBootorResetCommand; import com.cloud.agent.api.to.VirtualMachineTO; -import com.cloud.api.ApiConstants; +import org.apache.cloudstack.api.ApiConstants; import com.cloud.host.Host.Type; import com.cloud.hypervisor.Hypervisor; import com.cloud.resource.ServerResource; diff --git a/server/src/com/cloud/baremetal/BareMetalVmManagerImpl.java b/server/src/com/cloud/baremetal/BareMetalVmManagerImpl.java index 3972728d5db..fc0ecb578aa 100755 --- a/server/src/com/cloud/baremetal/BareMetalVmManagerImpl.java +++ b/server/src/com/cloud/baremetal/BareMetalVmManagerImpl.java @@ -34,10 +34,10 @@ import com.cloud.agent.api.baremetal.IpmiBootorResetCommand; import com.cloud.agent.manager.Commands; import com.cloud.api.commands.AttachVolumeCmd; import com.cloud.api.commands.CreateTemplateCmd; -import com.cloud.api.commands.DeployVMCmd; +import org.apache.cloudstack.api.user.vm.command.DeployVMCmd; import com.cloud.api.commands.DetachVolumeCmd; -import com.cloud.api.commands.StartVMCmd; -import com.cloud.api.commands.UpgradeVMCmd; +import org.apache.cloudstack.api.user.vm.command.StartVMCmd; +import org.apache.cloudstack.api.user.vm.command.UpgradeVMCmd; import com.cloud.baremetal.PxeServerManager.PxeServerType; import com.cloud.configuration.Resource.ResourceType; import com.cloud.configuration.dao.ConfigurationDao; diff --git a/server/src/com/cloud/baremetal/DhcpServerResponse.java b/server/src/com/cloud/baremetal/DhcpServerResponse.java index 761f604e8f3..dafc78114e5 100644 --- a/server/src/com/cloud/baremetal/DhcpServerResponse.java +++ b/server/src/com/cloud/baremetal/DhcpServerResponse.java @@ -16,7 +16,7 @@ // under the License. package com.cloud.baremetal; -import com.cloud.api.ApiConstants; +import org.apache.cloudstack.api.ApiConstants; import com.cloud.utils.IdentityProxy; import com.cloud.api.response.BaseResponse; import com.cloud.serializer.Param; diff --git a/server/src/com/cloud/baremetal/PxeServerResponse.java b/server/src/com/cloud/baremetal/PxeServerResponse.java index 26ea865e825..30e809c4980 100644 --- a/server/src/com/cloud/baremetal/PxeServerResponse.java +++ b/server/src/com/cloud/baremetal/PxeServerResponse.java @@ -16,7 +16,7 @@ // under the License. package com.cloud.baremetal; -import com.cloud.api.ApiConstants; +import org.apache.cloudstack.api.ApiConstants; import com.cloud.utils.IdentityProxy; import com.cloud.api.response.BaseResponse; import com.cloud.serializer.Param; diff --git a/server/src/com/cloud/configuration/ConfigurationManagerImpl.java b/server/src/com/cloud/configuration/ConfigurationManagerImpl.java index ef940e89f61..467f7e07264 100755 --- a/server/src/com/cloud/configuration/ConfigurationManagerImpl.java +++ b/server/src/com/cloud/configuration/ConfigurationManagerImpl.java @@ -42,7 +42,7 @@ import org.apache.log4j.Logger; import com.cloud.acl.SecurityChecker; import com.cloud.alert.AlertManager; -import com.cloud.api.ApiConstants.LDAPParams; +import org.apache.cloudstack.api.ApiConstants.LDAPParams; import com.cloud.api.ApiDBUtils; import com.cloud.api.commands.CreateDiskOfferingCmd; import com.cloud.api.commands.CreateNetworkOfferingCmd; diff --git a/server/src/com/cloud/consoleproxy/ConsoleProxyManagerImpl.java b/server/src/com/cloud/consoleproxy/ConsoleProxyManagerImpl.java index d7875f72ee5..4994f4f526b 100755 --- a/server/src/com/cloud/consoleproxy/ConsoleProxyManagerImpl.java +++ b/server/src/com/cloud/consoleproxy/ConsoleProxyManagerImpl.java @@ -52,7 +52,7 @@ import com.cloud.agent.api.proxy.StartConsoleProxyAgentHttpHandlerCommand; import com.cloud.agent.api.to.NicTO; import com.cloud.agent.api.to.VirtualMachineTO; import com.cloud.agent.manager.Commands; -import com.cloud.api.ServerApiException; +import org.apache.cloudstack.api.ServerApiException; import com.cloud.api.commands.DestroyConsoleProxyCmd; import com.cloud.certificate.dao.CertificateDao; import com.cloud.cluster.ClusterManager; diff --git a/server/src/com/cloud/dc/ClusterVO.java b/server/src/com/cloud/dc/ClusterVO.java index c2368016db7..ce74fb8e277 100644 --- a/server/src/com/cloud/dc/ClusterVO.java +++ b/server/src/com/cloud/dc/ClusterVO.java @@ -28,7 +28,7 @@ import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.Table; -import com.cloud.api.Identity; +import org.apache.cloudstack.api.Identity; import com.cloud.hypervisor.Hypervisor.HypervisorType; import com.cloud.org.Cluster; import com.cloud.org.Managed.ManagedState; diff --git a/server/src/com/cloud/dc/DataCenterVO.java b/server/src/com/cloud/dc/DataCenterVO.java index 7b5280cc2d3..088d44f75b9 100644 --- a/server/src/com/cloud/dc/DataCenterVO.java +++ b/server/src/com/cloud/dc/DataCenterVO.java @@ -31,7 +31,7 @@ import javax.persistence.Table; import javax.persistence.TableGenerator; import javax.persistence.Transient; -import com.cloud.api.Identity; +import org.apache.cloudstack.api.Identity; import com.cloud.network.Network.Provider; import com.cloud.org.Grouping; import com.cloud.utils.NumbersUtil; @@ -430,4 +430,4 @@ public class DataCenterVO implements DataCenter, Identity { public void setMacAddress(long macAddress) { this.macAddress = macAddress; } -} +} diff --git a/server/src/com/cloud/dc/HostPodVO.java b/server/src/com/cloud/dc/HostPodVO.java index 549e27eda3f..731b6b58f81 100644 --- a/server/src/com/cloud/dc/HostPodVO.java +++ b/server/src/com/cloud/dc/HostPodVO.java @@ -28,7 +28,7 @@ import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.Table; -import com.cloud.api.Identity; +import org.apache.cloudstack.api.Identity; import com.cloud.org.Grouping; import com.cloud.utils.NumbersUtil; import com.cloud.utils.db.GenericDao; diff --git a/server/src/com/cloud/dc/VlanVO.java b/server/src/com/cloud/dc/VlanVO.java index ff57f5e3d6f..f6eb750a25f 100644 --- a/server/src/com/cloud/dc/VlanVO.java +++ b/server/src/com/cloud/dc/VlanVO.java @@ -27,7 +27,7 @@ import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.Table; -import com.cloud.api.Identity; +import org.apache.cloudstack.api.Identity; @Entity @Table(name="vlan") diff --git a/server/src/com/cloud/domain/DomainVO.java b/server/src/com/cloud/domain/DomainVO.java index 02d3efe7ac3..a0bba31fb2b 100644 --- a/server/src/com/cloud/domain/DomainVO.java +++ b/server/src/com/cloud/domain/DomainVO.java @@ -28,7 +28,7 @@ import javax.persistence.Table; import org.apache.log4j.Logger; -import com.cloud.api.Identity; +import org.apache.cloudstack.api.Identity; import com.cloud.utils.db.GenericDao; @Entity diff --git a/server/src/com/cloud/network/ExternalFirewallDeviceManagerImpl.java b/server/src/com/cloud/network/ExternalFirewallDeviceManagerImpl.java index 9a06462f01f..c7d131290ae 100644 --- a/server/src/com/cloud/network/ExternalFirewallDeviceManagerImpl.java +++ b/server/src/com/cloud/network/ExternalFirewallDeviceManagerImpl.java @@ -39,7 +39,7 @@ import com.cloud.agent.api.routing.VpnUsersCfgCommand; import com.cloud.agent.api.to.IpAddressTO; import com.cloud.agent.api.to.PortForwardingRuleTO; import com.cloud.agent.api.to.StaticNatRuleTO; -import com.cloud.api.ApiConstants; +import org.apache.cloudstack.api.ApiConstants; import com.cloud.configuration.Config; import com.cloud.configuration.dao.ConfigurationDao; import com.cloud.dc.DataCenter; diff --git a/server/src/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java b/server/src/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java index 8c69bf6d852..448474fcfb4 100644 --- a/server/src/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java +++ b/server/src/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java @@ -40,7 +40,7 @@ import com.cloud.agent.api.routing.SetStaticNatRulesCommand; import com.cloud.agent.api.to.IpAddressTO; import com.cloud.agent.api.to.LoadBalancerTO; import com.cloud.agent.api.to.StaticNatRuleTO; -import com.cloud.api.ApiConstants; +import org.apache.cloudstack.api.ApiConstants; import com.cloud.configuration.Config; import com.cloud.configuration.dao.ConfigurationDao; import com.cloud.dc.DataCenter; diff --git a/server/src/com/cloud/network/ExternalNetworkDeviceManagerImpl.java b/server/src/com/cloud/network/ExternalNetworkDeviceManagerImpl.java index 4ddaeb0afb3..3c1f87aa994 100755 --- a/server/src/com/cloud/network/ExternalNetworkDeviceManagerImpl.java +++ b/server/src/com/cloud/network/ExternalNetworkDeviceManagerImpl.java @@ -29,8 +29,8 @@ import javax.naming.ConfigurationException; import org.apache.log4j.Logger; import com.cloud.agent.AgentManager; -import com.cloud.api.ApiConstants; -import com.cloud.api.IdentityService; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.IdentityService; import com.cloud.api.commands.AddNetworkDeviceCmd; import com.cloud.api.commands.DeleteNetworkDeviceCmd; import com.cloud.api.commands.ListNetworkDeviceCmd; diff --git a/server/src/com/cloud/network/IPAddressVO.java b/server/src/com/cloud/network/IPAddressVO.java index 9be624e6554..f9c20fb2088 100644 --- a/server/src/com/cloud/network/IPAddressVO.java +++ b/server/src/com/cloud/network/IPAddressVO.java @@ -31,7 +31,7 @@ import javax.persistence.Temporal; import javax.persistence.TemporalType; import javax.persistence.Transient; -import com.cloud.api.Identity; +import org.apache.cloudstack.api.Identity; import com.cloud.utils.net.Ip; /** @@ -107,7 +107,7 @@ public class IPAddressVO implements IpAddress, Identity { @Column(name="vpc_id") private Long vpcId; - + protected IPAddressVO() { this.uuid = UUID.randomUUID().toString(); } @@ -288,4 +288,4 @@ public class IPAddressVO implements IpAddress, Identity { public void setVpcId(Long vpcId) { this.vpcId = vpcId; } -} +} diff --git a/server/src/com/cloud/network/NetworkVO.java b/server/src/com/cloud/network/NetworkVO.java index 39dd66e77b0..8118e40ec16 100644 --- a/server/src/com/cloud/network/NetworkVO.java +++ b/server/src/com/cloud/network/NetworkVO.java @@ -30,7 +30,7 @@ import javax.persistence.TableGenerator; import javax.persistence.Transient; import com.cloud.acl.ControlledEntity; -import com.cloud.api.Identity; +import org.apache.cloudstack.api.Identity; import com.cloud.network.Networks.BroadcastDomainType; import com.cloud.network.Networks.Mode; import com.cloud.network.Networks.TrafficType; diff --git a/server/src/com/cloud/network/as/AutoScaleManagerImpl.java b/server/src/com/cloud/network/as/AutoScaleManagerImpl.java index e739aec82ed..651625b594f 100644 --- a/server/src/com/cloud/network/as/AutoScaleManagerImpl.java +++ b/server/src/com/cloud/network/as/AutoScaleManagerImpl.java @@ -28,16 +28,16 @@ import javax.naming.ConfigurationException; import org.apache.log4j.Logger; import com.cloud.acl.ControlledEntity; -import com.cloud.api.ApiConstants; +import org.apache.cloudstack.api.ApiConstants; import com.cloud.api.ApiDBUtils; import com.cloud.api.ApiDispatcher; -import com.cloud.api.BaseListAccountResourcesCmd; +import org.apache.cloudstack.api.BaseListAccountResourcesCmd; import com.cloud.api.commands.CreateAutoScalePolicyCmd; import com.cloud.api.commands.CreateAutoScaleVmGroupCmd; import com.cloud.api.commands.CreateAutoScaleVmProfileCmd; import com.cloud.api.commands.CreateConditionCmd; import com.cloud.api.commands.CreateCounterCmd; -import com.cloud.api.commands.DeployVMCmd; +import org.apache.cloudstack.api.user.vm.command.DeployVMCmd; import com.cloud.api.commands.ListAutoScalePoliciesCmd; import com.cloud.api.commands.ListAutoScaleVmGroupsCmd; import com.cloud.api.commands.ListAutoScaleVmProfilesCmd; diff --git a/server/src/com/cloud/network/as/AutoScaleVmProfileVO.java b/server/src/com/cloud/network/as/AutoScaleVmProfileVO.java index ea2fc767850..d0a6f8e3145 100644 --- a/server/src/com/cloud/network/as/AutoScaleVmProfileVO.java +++ b/server/src/com/cloud/network/as/AutoScaleVmProfileVO.java @@ -1,19 +1,19 @@ -// 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. +// 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.network.as; import java.util.ArrayList; @@ -33,7 +33,7 @@ import javax.persistence.Inheritance; import javax.persistence.InheritanceType; import javax.persistence.Table; -import com.cloud.api.Identity; +import org.apache.cloudstack.api.Identity; import com.cloud.utils.Pair; import com.cloud.utils.db.GenericDao; import com.cloud.utils.net.NetUtils; diff --git a/server/src/com/cloud/network/as/ConditionVO.java b/server/src/com/cloud/network/as/ConditionVO.java index 45b61d859da..d6dee3376b0 100644 --- a/server/src/com/cloud/network/as/ConditionVO.java +++ b/server/src/com/cloud/network/as/ConditionVO.java @@ -29,7 +29,7 @@ import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.Table; -import com.cloud.api.Identity; +import org.apache.cloudstack.api.Identity; import com.cloud.utils.db.GenericDao; @Entity diff --git a/server/src/com/cloud/network/as/CounterVO.java b/server/src/com/cloud/network/as/CounterVO.java index fd7bf3651f9..0970b0e02c3 100644 --- a/server/src/com/cloud/network/as/CounterVO.java +++ b/server/src/com/cloud/network/as/CounterVO.java @@ -29,7 +29,7 @@ import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.Table; -import com.cloud.api.Identity; +import org.apache.cloudstack.api.Identity; import com.cloud.utils.db.GenericDao; @Entity diff --git a/server/src/com/cloud/network/rules/FirewallRuleVO.java b/server/src/com/cloud/network/rules/FirewallRuleVO.java index c2539310d6e..464ff426d69 100644 --- a/server/src/com/cloud/network/rules/FirewallRuleVO.java +++ b/server/src/com/cloud/network/rules/FirewallRuleVO.java @@ -34,7 +34,7 @@ import javax.persistence.InheritanceType; import javax.persistence.Table; import javax.persistence.Transient; -import com.cloud.api.Identity; +import org.apache.cloudstack.api.Identity; import com.cloud.network.dao.FirewallRulesCidrsDaoImpl; import com.cloud.utils.component.ComponentLocator; import com.cloud.utils.db.GenericDao; diff --git a/server/src/com/cloud/network/vpc/StaticRouteVO.java b/server/src/com/cloud/network/vpc/StaticRouteVO.java index 8f6dd03bb79..099fb479d6a 100644 --- a/server/src/com/cloud/network/vpc/StaticRouteVO.java +++ b/server/src/com/cloud/network/vpc/StaticRouteVO.java @@ -28,7 +28,7 @@ import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.Table; -import com.cloud.api.Identity; +import org.apache.cloudstack.api.Identity; import com.cloud.utils.db.GenericDao; diff --git a/server/src/com/cloud/network/vpc/VpcVO.java b/server/src/com/cloud/network/vpc/VpcVO.java index 4691b0508a9..c0baa95315b 100644 --- a/server/src/com/cloud/network/vpc/VpcVO.java +++ b/server/src/com/cloud/network/vpc/VpcVO.java @@ -26,7 +26,7 @@ import javax.persistence.Enumerated; import javax.persistence.Id; import javax.persistence.Table; -import com.cloud.api.Identity; +import org.apache.cloudstack.api.Identity; import com.cloud.utils.db.GenericDao; @Entity diff --git a/server/src/com/cloud/network/vpn/RemoteAccessVpnManagerImpl.java b/server/src/com/cloud/network/vpn/RemoteAccessVpnManagerImpl.java index a1345910bce..94388f2f3b2 100755 --- a/server/src/com/cloud/network/vpn/RemoteAccessVpnManagerImpl.java +++ b/server/src/com/cloud/network/vpn/RemoteAccessVpnManagerImpl.java @@ -25,7 +25,7 @@ import javax.naming.ConfigurationException; import org.apache.log4j.Logger; -import com.cloud.api.commands.ListRemoteAccessVpnsCmd; +import org.apache.cloudstack.api.user.vpn.command.ListRemoteAccessVpnsCmd; import com.cloud.api.commands.ListVpnUsersCmd; import com.cloud.configuration.Config; import com.cloud.configuration.dao.ConfigurationDao; diff --git a/server/src/com/cloud/network/vpn/Site2SiteVpnManagerImpl.java b/server/src/com/cloud/network/vpn/Site2SiteVpnManagerImpl.java index 2f23b211426..95ce099b5a5 100644 --- a/server/src/com/cloud/network/vpn/Site2SiteVpnManagerImpl.java +++ b/server/src/com/cloud/network/vpn/Site2SiteVpnManagerImpl.java @@ -25,17 +25,17 @@ import javax.naming.ConfigurationException; import org.apache.log4j.Logger; -import com.cloud.api.commands.CreateVpnConnectionCmd; -import com.cloud.api.commands.CreateVpnCustomerGatewayCmd; -import com.cloud.api.commands.CreateVpnGatewayCmd; -import com.cloud.api.commands.DeleteVpnConnectionCmd; -import com.cloud.api.commands.DeleteVpnCustomerGatewayCmd; -import com.cloud.api.commands.DeleteVpnGatewayCmd; -import com.cloud.api.commands.ListVpnConnectionsCmd; -import com.cloud.api.commands.ListVpnCustomerGatewaysCmd; -import com.cloud.api.commands.ListVpnGatewaysCmd; -import com.cloud.api.commands.ResetVpnConnectionCmd; -import com.cloud.api.commands.UpdateVpnCustomerGatewayCmd; +import org.apache.cloudstack.api.user.vpn.command.CreateVpnConnectionCmd; +import org.apache.cloudstack.api.user.vpn.command.CreateVpnCustomerGatewayCmd; +import org.apache.cloudstack.api.user.vpn.command.CreateVpnGatewayCmd; +import org.apache.cloudstack.api.user.vpn.command.DeleteVpnConnectionCmd; +import org.apache.cloudstack.api.user.vpn.command.DeleteVpnCustomerGatewayCmd; +import org.apache.cloudstack.api.user.vpn.command.DeleteVpnGatewayCmd; +import org.apache.cloudstack.api.user.vpn.command.ListVpnConnectionsCmd; +import org.apache.cloudstack.api.user.vpn.command.ListVpnCustomerGatewaysCmd; +import org.apache.cloudstack.api.user.vpn.command.ListVpnGatewaysCmd; +import org.apache.cloudstack.api.user.vpn.command.ResetVpnConnectionCmd; +import org.apache.cloudstack.api.user.vpn.command.UpdateVpnCustomerGatewayCmd; import com.cloud.configuration.Config; import com.cloud.configuration.dao.ConfigurationDao; import com.cloud.event.ActionEvent; diff --git a/server/src/com/cloud/offerings/NetworkOfferingVO.java b/server/src/com/cloud/offerings/NetworkOfferingVO.java index 77407560c7e..f73c372d2ad 100755 --- a/server/src/com/cloud/offerings/NetworkOfferingVO.java +++ b/server/src/com/cloud/offerings/NetworkOfferingVO.java @@ -28,7 +28,7 @@ import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.Table; -import com.cloud.api.Identity; +import org.apache.cloudstack.api.Identity; import com.cloud.network.Network; import com.cloud.network.Networks.TrafficType; import com.cloud.offering.NetworkOffering; diff --git a/server/src/com/cloud/projects/ProjectInvitationVO.java b/server/src/com/cloud/projects/ProjectInvitationVO.java index 7dc8f7daf54..8ce06ab32a8 100644 --- a/server/src/com/cloud/projects/ProjectInvitationVO.java +++ b/server/src/com/cloud/projects/ProjectInvitationVO.java @@ -28,7 +28,7 @@ import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.Table; -import com.cloud.api.Identity; +import org.apache.cloudstack.api.Identity; import com.cloud.utils.db.GenericDao; @Entity diff --git a/server/src/com/cloud/projects/ProjectVO.java b/server/src/com/cloud/projects/ProjectVO.java index 9a84a213da7..1fcfe1812fe 100644 --- a/server/src/com/cloud/projects/ProjectVO.java +++ b/server/src/com/cloud/projects/ProjectVO.java @@ -28,7 +28,7 @@ import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.Table; -import com.cloud.api.Identity; +import org.apache.cloudstack.api.Identity; import com.cloud.utils.db.GenericDao; @Entity diff --git a/server/src/com/cloud/resource/ResourceManagerImpl.java b/server/src/com/cloud/resource/ResourceManagerImpl.java index bc2eb60802d..f3afd905aab 100755 --- a/server/src/com/cloud/resource/ResourceManagerImpl.java +++ b/server/src/com/cloud/resource/ResourceManagerImpl.java @@ -46,7 +46,7 @@ import com.cloud.agent.api.UpdateHostPasswordCommand; import com.cloud.agent.manager.AgentAttache; import com.cloud.agent.manager.allocator.PodAllocator; import com.cloud.agent.transport.Request; -import com.cloud.api.ApiConstants; +import org.apache.cloudstack.api.ApiConstants; import com.cloud.api.ApiDBUtils; import com.cloud.api.commands.AddClusterCmd; import com.cloud.api.commands.AddHostCmd; diff --git a/server/src/com/cloud/server/ManagementServerImpl.java b/server/src/com/cloud/server/ManagementServerImpl.java index 343ece794a5..93a9361c186 100755 --- a/server/src/com/cloud/server/ManagementServerImpl.java +++ b/server/src/com/cloud/server/ManagementServerImpl.java @@ -56,13 +56,13 @@ import com.cloud.alert.Alert; import com.cloud.alert.AlertManager; import com.cloud.alert.AlertVO; import com.cloud.alert.dao.AlertDao; -import com.cloud.api.ApiConstants; +import org.apache.cloudstack.api.ApiConstants; import com.cloud.api.ApiDBUtils; import com.cloud.api.commands.CreateSSHKeyPairCmd; import com.cloud.api.commands.DeleteSSHKeyPairCmd; import com.cloud.api.commands.DestroySystemVmCmd; import com.cloud.api.commands.ExtractVolumeCmd; -import com.cloud.api.commands.GetVMPasswordCmd; +import org.apache.cloudstack.api.user.vm.command.GetVMPasswordCmd; import com.cloud.api.commands.ListAlertsCmd; import com.cloud.api.commands.ListAsyncJobsCmd; import com.cloud.api.commands.ListCapabilitiesCmd; diff --git a/server/src/com/cloud/server/api/response/ExternalFirewallResponse.java b/server/src/com/cloud/server/api/response/ExternalFirewallResponse.java index 05d605bca85..c419f23978e 100644 --- a/server/src/com/cloud/server/api/response/ExternalFirewallResponse.java +++ b/server/src/com/cloud/server/api/response/ExternalFirewallResponse.java @@ -16,7 +16,7 @@ // under the License. package com.cloud.server.api.response; -import com.cloud.api.ApiConstants; +import org.apache.cloudstack.api.ApiConstants; import com.cloud.utils.IdentityProxy; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; diff --git a/server/src/com/cloud/server/api/response/ExternalLoadBalancerResponse.java b/server/src/com/cloud/server/api/response/ExternalLoadBalancerResponse.java index 7359570aafc..c1e8ca47aff 100644 --- a/server/src/com/cloud/server/api/response/ExternalLoadBalancerResponse.java +++ b/server/src/com/cloud/server/api/response/ExternalLoadBalancerResponse.java @@ -16,7 +16,7 @@ // under the License. package com.cloud.server.api.response; -import com.cloud.api.ApiConstants; +import org.apache.cloudstack.api.ApiConstants; import com.cloud.utils.IdentityProxy; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; diff --git a/server/src/com/cloud/server/api/response/NetworkDeviceResponse.java b/server/src/com/cloud/server/api/response/NetworkDeviceResponse.java index 3cf76de1ab7..1c64a94fdf2 100644 --- a/server/src/com/cloud/server/api/response/NetworkDeviceResponse.java +++ b/server/src/com/cloud/server/api/response/NetworkDeviceResponse.java @@ -16,7 +16,7 @@ // under the License. package com.cloud.server.api.response; -import com.cloud.api.ApiConstants; +import org.apache.cloudstack.api.ApiConstants; import com.cloud.utils.IdentityProxy; import com.cloud.api.response.BaseResponse; import com.cloud.serializer.Param; diff --git a/server/src/com/cloud/server/api/response/NwDeviceDhcpResponse.java b/server/src/com/cloud/server/api/response/NwDeviceDhcpResponse.java index cfde632b134..d53fe1cfae3 100644 --- a/server/src/com/cloud/server/api/response/NwDeviceDhcpResponse.java +++ b/server/src/com/cloud/server/api/response/NwDeviceDhcpResponse.java @@ -16,7 +16,7 @@ // under the License. package com.cloud.server.api.response; -import com.cloud.api.ApiConstants; +import org.apache.cloudstack.api.ApiConstants; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; diff --git a/server/src/com/cloud/server/api/response/NwDevicePxeServerResponse.java b/server/src/com/cloud/server/api/response/NwDevicePxeServerResponse.java index 8240c9cb4a8..61371ad7ee8 100644 --- a/server/src/com/cloud/server/api/response/NwDevicePxeServerResponse.java +++ b/server/src/com/cloud/server/api/response/NwDevicePxeServerResponse.java @@ -16,7 +16,7 @@ // under the License. package com.cloud.server.api.response; -import com.cloud.api.ApiConstants; +import org.apache.cloudstack.api.ApiConstants; import com.cloud.utils.IdentityProxy; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; diff --git a/server/src/com/cloud/server/api/response/PxePingResponse.java b/server/src/com/cloud/server/api/response/PxePingResponse.java index 93d76907cc7..c37bd42774b 100644 --- a/server/src/com/cloud/server/api/response/PxePingResponse.java +++ b/server/src/com/cloud/server/api/response/PxePingResponse.java @@ -16,7 +16,7 @@ // under the License. package com.cloud.server.api.response; -import com.cloud.api.ApiConstants; +import org.apache.cloudstack.api.ApiConstants; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; diff --git a/server/src/com/cloud/server/api/response/TrafficMonitorResponse.java b/server/src/com/cloud/server/api/response/TrafficMonitorResponse.java index 9271c04bb5d..70732fbcc80 100644 --- a/server/src/com/cloud/server/api/response/TrafficMonitorResponse.java +++ b/server/src/com/cloud/server/api/response/TrafficMonitorResponse.java @@ -16,7 +16,7 @@ // under the License. package com.cloud.server.api.response; -import com.cloud.api.ApiConstants; +import org.apache.cloudstack.api.ApiConstants; import com.cloud.utils.IdentityProxy; import com.cloud.api.response.BaseResponse; import com.cloud.serializer.Param; diff --git a/server/src/com/cloud/server/api/response/UsageRecordResponse.java b/server/src/com/cloud/server/api/response/UsageRecordResponse.java index e80e262b716..65361a11add 100644 --- a/server/src/com/cloud/server/api/response/UsageRecordResponse.java +++ b/server/src/com/cloud/server/api/response/UsageRecordResponse.java @@ -16,7 +16,7 @@ // under the License. package com.cloud.server.api.response; -import com.cloud.api.ApiConstants; +import org.apache.cloudstack.api.ApiConstants; import com.cloud.utils.IdentityProxy; import com.cloud.api.response.BaseResponse; import com.cloud.api.response.ControlledEntityResponse; diff --git a/server/src/com/cloud/server/api/response/UsageTypeResponse.java b/server/src/com/cloud/server/api/response/UsageTypeResponse.java index cb927e1c106..068f43c6a66 100644 --- a/server/src/com/cloud/server/api/response/UsageTypeResponse.java +++ b/server/src/com/cloud/server/api/response/UsageTypeResponse.java @@ -16,7 +16,7 @@ // under the License. package com.cloud.server.api.response; -import com.cloud.api.ApiConstants; +import org.apache.cloudstack.api.ApiConstants; import com.cloud.api.response.BaseResponse; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; diff --git a/server/src/com/cloud/server/api/response/netapp/AssociateLunCmdResponse.java b/server/src/com/cloud/server/api/response/netapp/AssociateLunCmdResponse.java index 3b18f879189..4093cf2a588 100644 --- a/server/src/com/cloud/server/api/response/netapp/AssociateLunCmdResponse.java +++ b/server/src/com/cloud/server/api/response/netapp/AssociateLunCmdResponse.java @@ -16,7 +16,7 @@ // under the License. package com.cloud.server.api.response.netapp; -import com.cloud.api.ApiConstants; +import org.apache.cloudstack.api.ApiConstants; import com.cloud.api.response.BaseResponse; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; diff --git a/server/src/com/cloud/server/api/response/netapp/CreateLunCmdResponse.java b/server/src/com/cloud/server/api/response/netapp/CreateLunCmdResponse.java index d0033ab0312..e87f6a117a4 100644 --- a/server/src/com/cloud/server/api/response/netapp/CreateLunCmdResponse.java +++ b/server/src/com/cloud/server/api/response/netapp/CreateLunCmdResponse.java @@ -16,7 +16,7 @@ // under the License. package com.cloud.server.api.response.netapp; -import com.cloud.api.ApiConstants; +import org.apache.cloudstack.api.ApiConstants; import com.cloud.api.response.BaseResponse; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; diff --git a/server/src/com/cloud/server/api/response/netapp/ListLunsCmdResponse.java b/server/src/com/cloud/server/api/response/netapp/ListLunsCmdResponse.java index eb95c6d0a00..ed907265bb0 100644 --- a/server/src/com/cloud/server/api/response/netapp/ListLunsCmdResponse.java +++ b/server/src/com/cloud/server/api/response/netapp/ListLunsCmdResponse.java @@ -16,7 +16,7 @@ // under the License. package com.cloud.server.api.response.netapp; -import com.cloud.api.ApiConstants; +import org.apache.cloudstack.api.ApiConstants; import com.cloud.api.response.BaseResponse; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; diff --git a/server/src/com/cloud/server/api/response/netapp/ListVolumePoolsCmdResponse.java b/server/src/com/cloud/server/api/response/netapp/ListVolumePoolsCmdResponse.java index ae6ef3e1237..56359e52ee3 100644 --- a/server/src/com/cloud/server/api/response/netapp/ListVolumePoolsCmdResponse.java +++ b/server/src/com/cloud/server/api/response/netapp/ListVolumePoolsCmdResponse.java @@ -16,7 +16,7 @@ // under the License. package com.cloud.server.api.response.netapp; -import com.cloud.api.ApiConstants; +import org.apache.cloudstack.api.ApiConstants; import com.cloud.api.response.BaseResponse; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; diff --git a/server/src/com/cloud/server/api/response/netapp/ListVolumesOnFilerCmdResponse.java b/server/src/com/cloud/server/api/response/netapp/ListVolumesOnFilerCmdResponse.java index 95e77b17a97..8c9ccba6b87 100644 --- a/server/src/com/cloud/server/api/response/netapp/ListVolumesOnFilerCmdResponse.java +++ b/server/src/com/cloud/server/api/response/netapp/ListVolumesOnFilerCmdResponse.java @@ -16,7 +16,7 @@ // under the License. package com.cloud.server.api.response.netapp; -import com.cloud.api.ApiConstants; +import org.apache.cloudstack.api.ApiConstants; import com.cloud.api.response.BaseResponse; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; diff --git a/server/src/com/cloud/servlet/ConsoleProxyServlet.java b/server/src/com/cloud/servlet/ConsoleProxyServlet.java index 7f073f1a74f..afa5c407316 100644 --- a/server/src/com/cloud/servlet/ConsoleProxyServlet.java +++ b/server/src/com/cloud/servlet/ConsoleProxyServlet.java @@ -35,7 +35,7 @@ import javax.servlet.http.HttpSession; import org.apache.commons.codec.binary.Base64; import org.apache.log4j.Logger; -import com.cloud.api.IdentityService; +import org.apache.cloudstack.api.IdentityService; import com.cloud.exception.PermissionDeniedException; import com.cloud.host.HostVO; import com.cloud.server.ManagementServer; diff --git a/server/src/com/cloud/storage/dao/VMTemplateDaoImpl.java b/server/src/com/cloud/storage/dao/VMTemplateDaoImpl.java index 2a0dfc85559..0d9f5723f58 100755 --- a/server/src/com/cloud/storage/dao/VMTemplateDaoImpl.java +++ b/server/src/com/cloud/storage/dao/VMTemplateDaoImpl.java @@ -32,7 +32,7 @@ import javax.naming.ConfigurationException; import org.apache.log4j.Logger; -import com.cloud.api.BaseCmd; +import org.apache.cloudstack.api.BaseCmd; import com.cloud.configuration.dao.ConfigurationDao; import com.cloud.dc.dao.DataCenterDao; import com.cloud.domain.DomainVO; @@ -109,13 +109,13 @@ public class VMTemplateDaoImpl extends GenericDaoBase implem ResourceTagsDaoImpl _tagsDao = ComponentLocator.inject(ResourceTagsDaoImpl.class); - - private String routerTmpltName; - private String consoleProxyTmpltName; - - protected VMTemplateDaoImpl() { - } - + + private String routerTmpltName; + private String consoleProxyTmpltName; + + protected VMTemplateDaoImpl() { + } + @Override public List listByPublic() { SearchCriteria sc = PublicSearch.create(); @@ -489,8 +489,8 @@ public class VMTemplateDaoImpl extends GenericDaoBase implem return templateZonePairList; } - - @Override + + @Override public Set> searchTemplates(String name, String keyword, TemplateFilter templateFilter, boolean isIso, List hypers, Boolean bootable, DomainVO domain, Long pageSize, Long startIndex, Long zoneId, HypervisorType hyperType, boolean onlyReady, boolean showDomr,List permittedAccounts, diff --git a/server/src/com/cloud/storage/snapshot/SnapshotSchedulerImpl.java b/server/src/com/cloud/storage/snapshot/SnapshotSchedulerImpl.java index 5920aeec078..16de2e1493c 100644 --- a/server/src/com/cloud/storage/snapshot/SnapshotSchedulerImpl.java +++ b/server/src/com/cloud/storage/snapshot/SnapshotSchedulerImpl.java @@ -28,7 +28,7 @@ import javax.naming.ConfigurationException; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; +import org.apache.cloudstack.api.ApiConstants; import com.cloud.api.ApiDispatcher; import com.cloud.api.ApiGsonHelper; import com.cloud.api.commands.CreateSnapshotCmd; diff --git a/server/src/com/cloud/tags/ResourceTagVO.java b/server/src/com/cloud/tags/ResourceTagVO.java index 4a4a22b44ae..100fe6fdd55 100644 --- a/server/src/com/cloud/tags/ResourceTagVO.java +++ b/server/src/com/cloud/tags/ResourceTagVO.java @@ -27,7 +27,7 @@ import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.Table; -import com.cloud.api.Identity; +import org.apache.cloudstack.api.Identity; import com.cloud.server.ResourceTag; diff --git a/server/src/com/cloud/template/TemplateAdapterBase.java b/server/src/com/cloud/template/TemplateAdapterBase.java index 4a379b1e808..3d07a03634a 100755 --- a/server/src/com/cloud/template/TemplateAdapterBase.java +++ b/server/src/com/cloud/template/TemplateAdapterBase.java @@ -23,7 +23,7 @@ import javax.naming.ConfigurationException; import org.apache.log4j.Logger; -import com.cloud.api.ApiConstants; +import org.apache.cloudstack.api.ApiConstants; import com.cloud.api.ApiDBUtils; import com.cloud.api.commands.DeleteIsoCmd; import com.cloud.api.commands.DeleteTemplateCmd; diff --git a/server/src/com/cloud/uuididentity/IdentityServiceImpl.java b/server/src/com/cloud/uuididentity/IdentityServiceImpl.java index 6ec3f253fd6..d2427a146cc 100644 --- a/server/src/com/cloud/uuididentity/IdentityServiceImpl.java +++ b/server/src/com/cloud/uuididentity/IdentityServiceImpl.java @@ -21,8 +21,8 @@ import java.util.Map; import javax.ejb.Local; import javax.naming.ConfigurationException; -import com.cloud.api.IdentityMapper; -import com.cloud.api.IdentityService; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.IdentityService; import com.cloud.utils.component.Inject; import com.cloud.utils.component.Manager; import com.cloud.uuididentity.dao.IdentityDao; diff --git a/server/src/com/cloud/uuididentity/dao/IdentityDao.java b/server/src/com/cloud/uuididentity/dao/IdentityDao.java index e2758fbe88b..9429d1e47d0 100644 --- a/server/src/com/cloud/uuididentity/dao/IdentityDao.java +++ b/server/src/com/cloud/uuididentity/dao/IdentityDao.java @@ -17,7 +17,7 @@ package com.cloud.uuididentity.dao; -import com.cloud.api.IdentityMapper; +import org.apache.cloudstack.api.IdentityMapper; import com.cloud.server.ResourceTag.TaggedResourceType; import com.cloud.utils.Pair; import com.cloud.utils.db.GenericDao; @@ -33,5 +33,5 @@ public interface IdentityDao extends GenericDao { * @param resourceType TODO * @return */ - Pair getAccountDomainInfo(String tableName, Long identityId, TaggedResourceType resourceType); -} + Pair getAccountDomainInfo(String tableName, Long identityId, TaggedResourceType resourceType); +} diff --git a/server/src/com/cloud/uuididentity/dao/IdentityDaoImpl.java b/server/src/com/cloud/uuididentity/dao/IdentityDaoImpl.java index ce0ca1307fc..b50cc52ddf3 100644 --- a/server/src/com/cloud/uuididentity/dao/IdentityDaoImpl.java +++ b/server/src/com/cloud/uuididentity/dao/IdentityDaoImpl.java @@ -27,7 +27,7 @@ import javax.ejb.Local; import org.apache.log4j.Logger; -import com.cloud.api.IdentityMapper; +import org.apache.cloudstack.api.IdentityMapper; import com.cloud.exception.InvalidParameterValueException; import com.cloud.server.ResourceTag.TaggedResourceType; import com.cloud.utils.Pair; diff --git a/server/src/com/cloud/vm/NicVO.java b/server/src/com/cloud/vm/NicVO.java index 3e9b4dc45b3..77fe4c377e0 100644 --- a/server/src/com/cloud/vm/NicVO.java +++ b/server/src/com/cloud/vm/NicVO.java @@ -29,7 +29,7 @@ import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.Table; -import com.cloud.api.Identity; +import org.apache.cloudstack.api.Identity; import com.cloud.network.Networks.AddressFormat; import com.cloud.network.Networks.Mode; import com.cloud.utils.db.GenericDao; diff --git a/server/src/com/cloud/vm/UserVmManagerImpl.java b/server/src/com/cloud/vm/UserVmManagerImpl.java index 687f521e08c..8d9bd5acdb0 100755 --- a/server/src/com/cloud/vm/UserVmManagerImpl.java +++ b/server/src/com/cloud/vm/UserVmManagerImpl.java @@ -57,23 +57,23 @@ import com.cloud.agent.api.to.VolumeTO; import com.cloud.agent.manager.Commands; import com.cloud.alert.AlertManager; import com.cloud.api.ApiDBUtils; -import com.cloud.api.BaseCmd; -import com.cloud.api.commands.AssignVMCmd; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.admin.vm.command.AssignVMCmd; import com.cloud.api.commands.AttachVolumeCmd; import com.cloud.api.commands.CreateTemplateCmd; import com.cloud.api.commands.CreateVMGroupCmd; import com.cloud.api.commands.DeleteVMGroupCmd; -import com.cloud.api.commands.DeployVMCmd; -import com.cloud.api.commands.DestroyVMCmd; +import org.apache.cloudstack.api.user.vm.command.DeployVMCmd; +import org.apache.cloudstack.api.user.vm.command.DestroyVMCmd; import com.cloud.api.commands.DetachVolumeCmd; -import com.cloud.api.commands.ListVMsCmd; -import com.cloud.api.commands.RebootVMCmd; -import com.cloud.api.commands.RecoverVMCmd; -import com.cloud.api.commands.ResetVMPasswordCmd; -import com.cloud.api.commands.RestoreVMCmd; -import com.cloud.api.commands.StartVMCmd; -import com.cloud.api.commands.UpdateVMCmd; -import com.cloud.api.commands.UpgradeVMCmd; +import org.apache.cloudstack.api.user.vm.command.ListVMsCmd; +import org.apache.cloudstack.api.user.vm.command.RebootVMCmd; +import org.apache.cloudstack.api.admin.vm.command.RecoverVMCmd; +import org.apache.cloudstack.api.user.vm.command.ResetVMPasswordCmd; +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.async.AsyncJobExecutor; import com.cloud.async.AsyncJobManager; import com.cloud.async.AsyncJobVO; diff --git a/server/test/com/cloud/keystore/KeystoreTest.java b/server/test/com/cloud/keystore/KeystoreTest.java index 3a1409b8a78..3a0bb71d49f 100644 --- a/server/test/com/cloud/keystore/KeystoreTest.java +++ b/server/test/com/cloud/keystore/KeystoreTest.java @@ -169,7 +169,7 @@ public class KeystoreTest extends TestCase { vm.setObjectName("virtualmachine"); */ String result = ApiSerializerHelper.toSerializedStringOld(vm); - // String result = "com.cloud.api.response.UserVmResponse/virtualmachine/{\"id\":{\"_tableName\":\"vm_instance\",\"_value\":3},\"name\":\"i-2-3-KY\",\"displayname\":\"i-2-3-KY\",\"account\":\"admin\",\"projectid\":{\"_tableName\":\"projects\"},\"domainid\":{\"_tableName\":\"domain\",\"_value\":1},\"domain\":\"ROOT\",\"created\":\"2011-11-02T21:54:07-0700\",\"state\":\"Running\",\"haenable\":false,\"groupid\":{\"_tableName\":\"instance_group\"},\"zoneid\":{\"_tableName\":\"data_center\",\"_value\":1},\"zonename\":\"KY\",\"hostid\":{\"_tableName\":\"host\",\"_value\":1},\"hostname\":\"xenserver-basic\",\"templateid\":{\"_tableName\":\"vm_template\",\"_value\":2},\"templatename\":\"CentOS 5.3(64-bit) no GUI (XenServer)\",\"templatedisplaytext\":\"CentOS 5.3(64-bit) no GUI (XenServer)\",\"passwordenabled\":false,\"isoid\":{\"_tableName\":\"vm_template\"},\"serviceofferingid\":{\"_tableName\":\"disk_offering\",\"_value\":7},\"serviceofferingname\":\"Small Instance\",\"cpunumber\":1,\"cpuspeed\":500,\"memory\":512,\"guestosid\":{\"_tableName\":\"guest_os\",\"_value\":12},\"rootdeviceid\":0,\"rootdevicetype\":\"NetworkFilesystem\",\"securitygroup\":[],\"jobid\":{\"_tableName\":\"async_job\"},\"nic\":[{\"id\":7,\"networkid\":200,\"netmask\":\"255.255.255.0\",\"gateway\":\"10.1.1.1\",\"ipaddress\":\"10.1.1.116\",\"isolationuri\":\"vlan://1699\",\"broadcasturi\":\"vlan://1699\",\"traffictype\":\"Guest\",\"type\":\"Virtual\",\"isdefault\":true,\"macaddress\":\"02:00:39:a7:00:01\"}],\"hypervisor\":\"XenServer\"}"; + // String result = "org.apache.cloudstack.api.response.UserVmResponse/virtualmachine/{\"id\":{\"_tableName\":\"vm_instance\",\"_value\":3},\"name\":\"i-2-3-KY\",\"displayname\":\"i-2-3-KY\",\"account\":\"admin\",\"projectid\":{\"_tableName\":\"projects\"},\"domainid\":{\"_tableName\":\"domain\",\"_value\":1},\"domain\":\"ROOT\",\"created\":\"2011-11-02T21:54:07-0700\",\"state\":\"Running\",\"haenable\":false,\"groupid\":{\"_tableName\":\"instance_group\"},\"zoneid\":{\"_tableName\":\"data_center\",\"_value\":1},\"zonename\":\"KY\",\"hostid\":{\"_tableName\":\"host\",\"_value\":1},\"hostname\":\"xenserver-basic\",\"templateid\":{\"_tableName\":\"vm_template\",\"_value\":2},\"templatename\":\"CentOS 5.3(64-bit) no GUI (XenServer)\",\"templatedisplaytext\":\"CentOS 5.3(64-bit) no GUI (XenServer)\",\"passwordenabled\":false,\"isoid\":{\"_tableName\":\"vm_template\"},\"serviceofferingid\":{\"_tableName\":\"disk_offering\",\"_value\":7},\"serviceofferingname\":\"Small Instance\",\"cpunumber\":1,\"cpuspeed\":500,\"memory\":512,\"guestosid\":{\"_tableName\":\"guest_os\",\"_value\":12},\"rootdeviceid\":0,\"rootdevicetype\":\"NetworkFilesystem\",\"securitygroup\":[],\"jobid\":{\"_tableName\":\"async_job\"},\"nic\":[{\"id\":7,\"networkid\":200,\"netmask\":\"255.255.255.0\",\"gateway\":\"10.1.1.1\",\"ipaddress\":\"10.1.1.116\",\"isolationuri\":\"vlan://1699\",\"broadcasturi\":\"vlan://1699\",\"traffictype\":\"Guest\",\"type\":\"Virtual\",\"isdefault\":true,\"macaddress\":\"02:00:39:a7:00:01\"}],\"hypervisor\":\"XenServer\"}"; System.out.println(result); //Object obj = ApiSerializerHelper.fromSerializedString(result); diff --git a/server/test/com/cloud/vm/MockUserVmManagerImpl.java b/server/test/com/cloud/vm/MockUserVmManagerImpl.java index 35ee1396504..16f01948113 100644 --- a/server/test/com/cloud/vm/MockUserVmManagerImpl.java +++ b/server/test/com/cloud/vm/MockUserVmManagerImpl.java @@ -28,22 +28,22 @@ import com.cloud.agent.api.VmStatsEntry; import com.cloud.agent.api.to.NicTO; import com.cloud.agent.api.to.VirtualMachineTO; import com.cloud.agent.manager.Commands; -import com.cloud.api.commands.AssignVMCmd; +import org.apache.cloudstack.api.admin.vm.command.AssignVMCmd; import com.cloud.api.commands.AttachVolumeCmd; import com.cloud.api.commands.CreateTemplateCmd; import com.cloud.api.commands.CreateVMGroupCmd; import com.cloud.api.commands.DeleteVMGroupCmd; -import com.cloud.api.commands.DeployVMCmd; -import com.cloud.api.commands.DestroyVMCmd; +import org.apache.cloudstack.api.user.vm.command.DeployVMCmd; +import org.apache.cloudstack.api.user.vm.command.DestroyVMCmd; import com.cloud.api.commands.DetachVolumeCmd; -import com.cloud.api.commands.ListVMsCmd; -import com.cloud.api.commands.RebootVMCmd; -import com.cloud.api.commands.RecoverVMCmd; -import com.cloud.api.commands.ResetVMPasswordCmd; -import com.cloud.api.commands.RestoreVMCmd; -import com.cloud.api.commands.StartVMCmd; -import com.cloud.api.commands.UpdateVMCmd; -import com.cloud.api.commands.UpgradeVMCmd; +import org.apache.cloudstack.api.user.vm.command.ListVMsCmd; +import org.apache.cloudstack.api.user.vm.command.RebootVMCmd; +import org.apache.cloudstack.api.admin.vm.command.RecoverVMCmd; +import org.apache.cloudstack.api.user.vm.command.ResetVMPasswordCmd; +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.dc.DataCenter; import com.cloud.deploy.DeployDestination; import com.cloud.exception.ConcurrentOperationException; diff --git a/server/test/com/cloud/vpc/MockSite2SiteVpnManagerImpl.java b/server/test/com/cloud/vpc/MockSite2SiteVpnManagerImpl.java index ff778c09dff..59ec5ce16f9 100644 --- a/server/test/com/cloud/vpc/MockSite2SiteVpnManagerImpl.java +++ b/server/test/com/cloud/vpc/MockSite2SiteVpnManagerImpl.java @@ -22,17 +22,17 @@ import java.util.Map; import javax.ejb.Local; import javax.naming.ConfigurationException; -import com.cloud.api.commands.CreateVpnConnectionCmd; -import com.cloud.api.commands.CreateVpnCustomerGatewayCmd; -import com.cloud.api.commands.CreateVpnGatewayCmd; -import com.cloud.api.commands.DeleteVpnConnectionCmd; -import com.cloud.api.commands.DeleteVpnCustomerGatewayCmd; -import com.cloud.api.commands.DeleteVpnGatewayCmd; -import com.cloud.api.commands.ListVpnConnectionsCmd; -import com.cloud.api.commands.ListVpnCustomerGatewaysCmd; -import com.cloud.api.commands.ListVpnGatewaysCmd; -import com.cloud.api.commands.ResetVpnConnectionCmd; -import com.cloud.api.commands.UpdateVpnCustomerGatewayCmd; +import org.apache.cloudstack.api.user.vpn.command.CreateVpnConnectionCmd; +import org.apache.cloudstack.api.user.vpn.command.CreateVpnCustomerGatewayCmd; +import org.apache.cloudstack.api.user.vpn.command.CreateVpnGatewayCmd; +import org.apache.cloudstack.api.user.vpn.command.DeleteVpnConnectionCmd; +import org.apache.cloudstack.api.user.vpn.command.DeleteVpnCustomerGatewayCmd; +import org.apache.cloudstack.api.user.vpn.command.DeleteVpnGatewayCmd; +import org.apache.cloudstack.api.user.vpn.command.ListVpnConnectionsCmd; +import org.apache.cloudstack.api.user.vpn.command.ListVpnCustomerGatewaysCmd; +import org.apache.cloudstack.api.user.vpn.command.ListVpnGatewaysCmd; +import org.apache.cloudstack.api.user.vpn.command.ResetVpnConnectionCmd; +import org.apache.cloudstack.api.user.vpn.command.UpdateVpnCustomerGatewayCmd; import com.cloud.exception.NetworkRuleConflictException; import com.cloud.exception.ResourceUnavailableException; import com.cloud.network.Site2SiteCustomerGateway; diff --git a/utils/src/com/cloud/utils/exception/CSExceptionErrorCode.java b/utils/src/com/cloud/utils/exception/CSExceptionErrorCode.java index bcd69781efa..303e0d681fa 100755 --- a/utils/src/com/cloud/utils/exception/CSExceptionErrorCode.java +++ b/utils/src/com/cloud/utils/exception/CSExceptionErrorCode.java @@ -100,7 +100,7 @@ public class CSExceptionErrorCode { // Have a special error code for ServerApiException when it is // thrown in a standalone manner when failing to detect any of the above // standard exceptions. - ExceptionErrorCodeMap.put("com.cloud.api.ServerApiException", 9999); + ExceptionErrorCodeMap.put("org.apache.cloudstack.api.ServerApiException", 9999); } catch (Exception e) { e.printStackTrace(); throw new ExceptionInInitializerError(e); From ac1ea7616abbb89b1f1b8525572ed470037cca28 Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Mon, 3 Dec 2012 21:44:40 -0800 Subject: [PATCH 005/421] api_refactor: refactor vpc apis - Fix refactored apis in commands*.in - Fix comments etc. - Expand tabs, remove trailing whitespace Signed-off-by: Rohit Yadav --- api/src/com/cloud/network/vpc/VpcService.java | 4 +- .../vpc/command}/CreateStaticRouteCmd.java | 16 +++---- .../api/user/vpc/command}/CreateVPCCmd.java | 46 +++++++++---------- .../vpc/command}/DeleteStaticRouteCmd.java | 18 ++++---- .../api/user/vpc/command}/DeleteVPCCmd.java | 6 +-- .../vpc/command}/ListPrivateGatewaysCmd.java | 22 ++++----- .../vpc/command}/ListStaticRoutesCmd.java | 16 +++---- .../vpc/command}/ListVPCOfferingsCmd.java | 28 +++++------ .../api/user/vpc/command}/ListVPCsCmd.java | 44 +++++++++--------- .../api/user/vpc/command}/RestartVPCCmd.java | 14 +++--- .../api/user/vpc/command}/UpdateVPCCmd.java | 16 +++---- client/tomcatconf/commands.properties.in | 20 ++++---- .../com/cloud/network/vpc/VpcManagerImpl.java | 8 ++-- .../com/cloud/vpc/MockVpcManagerImpl.java | 4 +- 14 files changed, 131 insertions(+), 131 deletions(-) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/user/vpc/command}/CreateStaticRouteCmd.java (98%) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/user/vpc/command}/CreateVPCCmd.java (94%) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/user/vpc/command}/DeleteStaticRouteCmd.java (98%) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/user/vpc/command}/DeleteVPCCmd.java (97%) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/user/vpc/command}/ListPrivateGatewaysCmd.java (97%) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/user/vpc/command}/ListStaticRoutesCmd.java (96%) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/user/vpc/command}/ListVPCOfferingsCmd.java (96%) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/user/vpc/command}/ListVPCsCmd.java (95%) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/user/vpc/command}/RestartVPCCmd.java (97%) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/user/vpc/command}/UpdateVPCCmd.java (98%) diff --git a/api/src/com/cloud/network/vpc/VpcService.java b/api/src/com/cloud/network/vpc/VpcService.java index c13e37f1b55..3d6c2b78fd0 100644 --- a/api/src/com/cloud/network/vpc/VpcService.java +++ b/api/src/com/cloud/network/vpc/VpcService.java @@ -20,8 +20,8 @@ import java.util.List; import java.util.Map; import java.util.Set; -import com.cloud.api.commands.ListPrivateGatewaysCmd; -import com.cloud.api.commands.ListStaticRoutesCmd; +import org.apache.cloudstack.api.user.vpc.command.ListPrivateGatewaysCmd; +import org.apache.cloudstack.api.user.vpc.command.ListStaticRoutesCmd; import com.cloud.exception.ConcurrentOperationException; import com.cloud.exception.InsufficientAddressCapacityException; import com.cloud.exception.InsufficientCapacityException; diff --git a/api/src/com/cloud/api/commands/CreateStaticRouteCmd.java b/api/src/org/apache/cloudstack/api/user/vpc/command/CreateStaticRouteCmd.java similarity index 98% rename from api/src/com/cloud/api/commands/CreateStaticRouteCmd.java rename to api/src/org/apache/cloudstack/api/user/vpc/command/CreateStaticRouteCmd.java index 446116c3569..bcd1bbb38b9 100644 --- a/api/src/com/cloud/api/commands/CreateStaticRouteCmd.java +++ b/api/src/org/apache/cloudstack/api/user/vpc/command/CreateStaticRouteCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.user.vpc.command; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; @@ -40,12 +40,12 @@ import com.cloud.user.UserContext; public class CreateStaticRouteCmd extends BaseAsyncCreateCmd{ private static final String s_name = "createstaticrouteresponse"; public static final Logger s_logger = Logger.getLogger(CreateStaticRouteCmd.class.getName()); - + @IdentityMapper(entityTableName="vpc_gateways") - @Parameter(name=ApiConstants.GATEWAY_ID, type=CommandType.LONG, required=true, + @Parameter(name=ApiConstants.GATEWAY_ID, type=CommandType.LONG, required=true, description="the gateway id we are creating static route for") private Long gatewayId; - + @Parameter(name = ApiConstants.CIDR, required = true, type = CommandType.STRING, description = "static route cidr") private String cidr; @@ -100,7 +100,7 @@ public class CreateStaticRouteCmd extends BaseAsyncCreateCmd{ // State is different after the route is applied, so get new object here route = _entityMgr.findById(StaticRoute.class, getEntityId()); - StaticRouteResponse routeResponse = new StaticRouteResponse(); + StaticRouteResponse routeResponse = new StaticRouteResponse(); if (route != null) { routeResponse = _responseGenerator.createStaticRouteResponse(route); setResponseObject(routeResponse); @@ -113,7 +113,7 @@ public class CreateStaticRouteCmd extends BaseAsyncCreateCmd{ } } } - + @Override public String getCommandName() { return s_name; @@ -127,7 +127,7 @@ public class CreateStaticRouteCmd extends BaseAsyncCreateCmd{ } return _vpcService.getVpc(gateway.getVpcId()).getAccountId(); } - + @Override public String getSyncObjType() { return BaseAsyncCmd.vpcSyncObject; @@ -141,7 +141,7 @@ public class CreateStaticRouteCmd extends BaseAsyncCreateCmd{ } return gateway.getVpcId(); } - + @Override public AsyncJob.Type getInstanceType() { return AsyncJob.Type.StaticRoute; diff --git a/api/src/com/cloud/api/commands/CreateVPCCmd.java b/api/src/org/apache/cloudstack/api/user/vpc/command/CreateVPCCmd.java similarity index 94% rename from api/src/com/cloud/api/commands/CreateVPCCmd.java rename to api/src/org/apache/cloudstack/api/user/vpc/command/CreateVPCCmd.java index b07a7146fb2..c56f71587b7 100644 --- a/api/src/com/cloud/api/commands/CreateVPCCmd.java +++ b/api/src/org/apache/cloudstack/api/user/vpc/command/CreateVPCCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.user.vpc.command; import org.apache.log4j.Logger; @@ -38,52 +38,52 @@ import com.cloud.user.UserContext; public class CreateVPCCmd extends BaseAsyncCreateCmd{ public static final Logger s_logger = Logger.getLogger(CreateVPCCmd.class.getName()); private static final String s_name = "createvpcresponse"; - + ///////////////////////////////////////////////////// //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// @Parameter(name=ApiConstants.ACCOUNT, type=CommandType.STRING, description="the account associated with the VPC. " + - "Must be used with the domainId parameter.") + "Must be used with the domainId parameter.") private String accountName; - + @IdentityMapper(entityTableName="domain") @Parameter(name=ApiConstants.DOMAIN_ID, type=CommandType.LONG, description="the domain ID associated with the VPC. " + - "If used with the account parameter returns the VPC associated with the account for the specified domain.") + "If used with the account parameter returns the VPC associated with the account for the specified domain.") private Long domainId; - + @IdentityMapper(entityTableName="projects") @Parameter(name=ApiConstants.PROJECT_ID, type=CommandType.LONG, description="create VPC for the project") private Long projectId; - + @IdentityMapper(entityTableName="data_center") @Parameter(name=ApiConstants.ZONE_ID, type=CommandType.LONG, required=true, description="the ID of the availability zone") private Long zoneId; @Parameter(name=ApiConstants.NAME, type=CommandType.STRING, required=true, description="the name of the VPC") private String vpcName; - + @Parameter(name=ApiConstants.DISPLAY_TEXT, type=CommandType.STRING, required=true, description="the display text of " + "the VPC") private String displayText; - + @Parameter(name=ApiConstants.CIDR, type=CommandType.STRING, required=true, description="the cidr of the VPC. All VPC " + - "guest networks' cidrs should be within this CIDR") + "guest networks' cidrs should be within this CIDR") private String cidr; - - + + @IdentityMapper(entityTableName="vpc_offerings") @Parameter(name=ApiConstants.VPC_OFF_ID, type=CommandType.LONG, required=true, description="the ID of the VPC offering") private Long vpcOffering; - - @Parameter(name=ApiConstants.NETWORK_DOMAIN, type=CommandType.STRING, + + @Parameter(name=ApiConstants.NETWORK_DOMAIN, type=CommandType.STRING, description="VPC network domain. All networks inside the VPC will belong to this domain") private String networkDomain; - + ///////////////////////////////////////////////////// /////////////////// Accessors /////////////////////// ///////////////////////////////////////////////////// - + public String getAccountName() { return accountName; } @@ -103,7 +103,7 @@ public class CreateVPCCmd extends BaseAsyncCreateCmd{ public String getCidr() { return cidr; } - + public String getDisplayText() { return displayText; } @@ -111,7 +111,7 @@ public class CreateVPCCmd extends BaseAsyncCreateCmd{ public Long getVpcOffering() { return vpcOffering; } - + public String getNetworkDomain() { return networkDomain; } @@ -126,7 +126,7 @@ public class CreateVPCCmd extends BaseAsyncCreateCmd{ throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to create a VPC"); } } - + @Override public void execute() { Vpc vpc = null; @@ -139,13 +139,13 @@ public class CreateVPCCmd extends BaseAsyncCreateCmd{ throw new ServerApiException(BaseCmd.RESOURCE_UNAVAILABLE_ERROR, ex.getMessage()); } catch (ConcurrentOperationException ex) { s_logger.warn("Exception: ", ex); - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, ex.getMessage()); + throw new ServerApiException(BaseCmd.INTERNAL_ERROR, ex.getMessage()); } catch (InsufficientCapacityException ex) { s_logger.info(ex); s_logger.trace(ex); throw new ServerApiException(BaseCmd.INSUFFICIENT_CAPACITY_ERROR, ex.getMessage()); } - + if (vpc != null) { VpcResponse response = _responseGenerator.createVpcResponse(vpc); response.setResponseName(getCommandName()); @@ -171,7 +171,7 @@ public class CreateVPCCmd extends BaseAsyncCreateCmd{ public String getEventDescription() { return "creating VPC. Id: " + getEntityId(); } - + @Override public String getCommandName() { return s_name; @@ -183,7 +183,7 @@ public class CreateVPCCmd extends BaseAsyncCreateCmd{ if (accountId == null) { return UserContext.current().getCaller().getId(); } - + return accountId; } } diff --git a/api/src/com/cloud/api/commands/DeleteStaticRouteCmd.java b/api/src/org/apache/cloudstack/api/user/vpc/command/DeleteStaticRouteCmd.java similarity index 98% rename from api/src/com/cloud/api/commands/DeleteStaticRouteCmd.java rename to api/src/org/apache/cloudstack/api/user/vpc/command/DeleteStaticRouteCmd.java index e2f2c523b9f..1235729016d 100644 --- a/api/src/com/cloud/api/commands/DeleteStaticRouteCmd.java +++ b/api/src/org/apache/cloudstack/api/user/vpc/command/DeleteStaticRouteCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.user.vpc.command; import org.apache.log4j.Logger; @@ -57,7 +57,7 @@ public class DeleteStaticRouteCmd extends BaseAsyncCmd{ public Long getId() { return id; } - + ///////////////////////////////////////////////////// /////////////// API Implementation/////////////////// ///////////////////////////////////////////////////// @@ -65,7 +65,7 @@ public class DeleteStaticRouteCmd extends BaseAsyncCmd{ public String getCommandName() { return s_name; } - + @Override public String getEventType() { return EventTypes.EVENT_STATIC_ROUTE_DELETE; @@ -75,7 +75,7 @@ public class DeleteStaticRouteCmd extends BaseAsyncCmd{ public String getEventDescription() { return ("Deleting static route id=" + id); } - + @Override public long getEntityOwnerId() { if (ownerId == null) { @@ -88,12 +88,12 @@ public class DeleteStaticRouteCmd extends BaseAsyncCmd{ } return ownerId; } - + @Override public void execute() throws ResourceUnavailableException { UserContext.current().setEventDetails("Route Id: " + id); boolean result = _vpcService.revokeStaticRoute(id); - + if (result) { SuccessResponse response = new SuccessResponse(getCommandName()); this.setResponseObject(response); @@ -101,8 +101,8 @@ public class DeleteStaticRouteCmd extends BaseAsyncCmd{ throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to delete static route"); } } - - + + @Override public String getSyncObjType() { return BaseAsyncCmd.vpcSyncObject; @@ -116,7 +116,7 @@ public class DeleteStaticRouteCmd extends BaseAsyncCmd{ } return route.getVpcId(); } - + @Override public AsyncJob.Type getInstanceType() { return AsyncJob.Type.StaticRoute; diff --git a/api/src/com/cloud/api/commands/DeleteVPCCmd.java b/api/src/org/apache/cloudstack/api/user/vpc/command/DeleteVPCCmd.java similarity index 97% rename from api/src/com/cloud/api/commands/DeleteVPCCmd.java rename to api/src/org/apache/cloudstack/api/user/vpc/command/DeleteVPCCmd.java index d12c9fa4696..78dbfc1499e 100644 --- a/api/src/com/cloud/api/commands/DeleteVPCCmd.java +++ b/api/src/org/apache/cloudstack/api/user/vpc/command/DeleteVPCCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.user.vpc.command; import org.apache.log4j.Logger; @@ -79,13 +79,13 @@ public class DeleteVPCCmd extends BaseAsyncCmd{ this.setResponseObject(response); } else { throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to delete VPC"); - } + } }catch (ResourceUnavailableException ex) { s_logger.warn("Exception: ", ex); throw new ServerApiException(BaseCmd.RESOURCE_UNAVAILABLE_ERROR, ex.getMessage()); } catch (ConcurrentOperationException ex) { s_logger.warn("Exception: ", ex); - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, ex.getMessage()); + throw new ServerApiException(BaseCmd.INTERNAL_ERROR, ex.getMessage()); } } diff --git a/api/src/com/cloud/api/commands/ListPrivateGatewaysCmd.java b/api/src/org/apache/cloudstack/api/user/vpc/command/ListPrivateGatewaysCmd.java similarity index 97% rename from api/src/com/cloud/api/commands/ListPrivateGatewaysCmd.java rename to api/src/org/apache/cloudstack/api/user/vpc/command/ListPrivateGatewaysCmd.java index b6a02f3decf..a76b07f51f8 100644 --- a/api/src/com/cloud/api/commands/ListPrivateGatewaysCmd.java +++ b/api/src/org/apache/cloudstack/api/user/vpc/command/ListPrivateGatewaysCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.user.vpc.command; import java.util.ArrayList; import java.util.List; @@ -43,20 +43,20 @@ public class ListPrivateGatewaysCmd extends BaseListProjectAndAccountResourcesCm @IdentityMapper(entityTableName="vpc_gateways") @Parameter(name=ApiConstants.ID, type=CommandType.LONG, description="list private gateway by id") private Long id; - + @Parameter(name=ApiConstants.IP_ADDRESS, type=CommandType.STRING, description="list gateways by ip address") private String ipAddress; - + @Parameter(name=ApiConstants.VLAN, type=CommandType.STRING, description="list gateways by vlan") private String vlan; - + @IdentityMapper(entityTableName="vpc") @Parameter(name=ApiConstants.VPC_ID, type=CommandType.LONG, description="list gateways by vpc") private Long vpcId; - + @Parameter(name=ApiConstants.STATE, type=CommandType.STRING, description="list gateways by state") private String state; - + ///////////////////////////////////////////////////// /////////////////// Accessors /////////////////////// ///////////////////////////////////////////////////// @@ -69,15 +69,15 @@ public class ListPrivateGatewaysCmd extends BaseListProjectAndAccountResourcesCm public String getIpAddress() { return ipAddress; } - + public Long getVpcId() { return vpcId; } - + public Long getId() { return id; } - + public String getState() { return state; } @@ -89,7 +89,7 @@ public class ListPrivateGatewaysCmd extends BaseListProjectAndAccountResourcesCm public String getCommandName() { return s_name; } - + @Override public void execute() { Pair, Integer> gateways = _vpcService.listPrivateGateway(this); @@ -101,7 +101,7 @@ public class ListPrivateGatewaysCmd extends BaseListProjectAndAccountResourcesCm } response.setResponses(projectResponses, gateways.second()); response.setResponseName(getCommandName()); - + this.setResponseObject(response); } } diff --git a/api/src/com/cloud/api/commands/ListStaticRoutesCmd.java b/api/src/org/apache/cloudstack/api/user/vpc/command/ListStaticRoutesCmd.java similarity index 96% rename from api/src/com/cloud/api/commands/ListStaticRoutesCmd.java rename to api/src/org/apache/cloudstack/api/user/vpc/command/ListStaticRoutesCmd.java index e397c6cc1c2..e5ae9f07ffa 100644 --- a/api/src/com/cloud/api/commands/ListStaticRoutesCmd.java +++ b/api/src/org/apache/cloudstack/api/user/vpc/command/ListStaticRoutesCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.user.vpc.command; import java.util.ArrayList; import java.util.List; @@ -31,18 +31,18 @@ import com.cloud.utils.Pair; @Implementation(description="Lists all static routes", responseObject=StaticRouteResponse.class) public class ListStaticRoutesCmd extends BaseListTaggedResourcesCmd { private static final String s_name = "liststaticroutesresponse"; - + ///////////////////////////////////////////////////// //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// @IdentityMapper(entityTableName="static_routes") @Parameter(name=ApiConstants.ID, type=CommandType.LONG, description="list static route by id") private Long id; - + @IdentityMapper(entityTableName="vpc") @Parameter(name=ApiConstants.VPC_ID, type=CommandType.LONG, description="list static routes by vpc id") private Long vpcId; - + @IdentityMapper(entityTableName="vpc_gateways") @Parameter(name=ApiConstants.GATEWAY_ID, type=CommandType.LONG, description="list static routes by gateway id") private Long gatewayId; @@ -58,7 +58,7 @@ public class ListStaticRoutesCmd extends BaseListTaggedResourcesCmd { public Long getGatewayId() { return gatewayId; } - + ///////////////////////////////////////////////////// /////////////////// Accessors /////////////////////// ///////////////////////////////////////////////////// @@ -66,20 +66,20 @@ public class ListStaticRoutesCmd extends BaseListTaggedResourcesCmd { public String getCommandName() { return s_name; } - + @Override public void execute(){ Pair, Integer> result = _vpcService.listStaticRoutes(this); ListResponse response = new ListResponse(); List routeResponses = new ArrayList(); - + for (StaticRoute route : result.first()) { StaticRouteResponse ruleData = _responseGenerator.createStaticRouteResponse(route); routeResponses.add(ruleData); } response.setResponses(routeResponses, result.second()); response.setResponseName(getCommandName()); - this.setResponseObject(response); + this.setResponseObject(response); } diff --git a/api/src/com/cloud/api/commands/ListVPCOfferingsCmd.java b/api/src/org/apache/cloudstack/api/user/vpc/command/ListVPCOfferingsCmd.java similarity index 96% rename from api/src/com/cloud/api/commands/ListVPCOfferingsCmd.java rename to api/src/org/apache/cloudstack/api/user/vpc/command/ListVPCOfferingsCmd.java index ecca2ddb148..727b43c33f7 100644 --- a/api/src/com/cloud/api/commands/ListVPCOfferingsCmd.java +++ b/api/src/org/apache/cloudstack/api/user/vpc/command/ListVPCOfferingsCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.user.vpc.command; import java.util.ArrayList; import java.util.List; @@ -34,32 +34,32 @@ import com.cloud.network.vpc.VpcOffering; public class ListVPCOfferingsCmd extends BaseListCmd{ public static final Logger s_logger = Logger.getLogger(ListVPCOfferingsCmd.class.getName()); private static final String _name = "listvpcofferingsresponse"; - + ///////////////////////////////////////////////////// //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// @IdentityMapper(entityTableName="vpc_offerings") @Parameter(name=ApiConstants.ID, type=CommandType.LONG, description="list VPC offerings by id") private Long id; - + @Parameter(name=ApiConstants.NAME, type=CommandType.STRING, description="list VPC offerings by name") private String vpcOffName; - + @Parameter(name=ApiConstants.DISPLAY_TEXT, type=CommandType.STRING, description="list VPC offerings by display text") private String displayText; - + @Parameter(name=ApiConstants.IS_DEFAULT, type=CommandType.BOOLEAN, description="true if need to list only default " + - "VPC offerings. Default value is false") + "VPC offerings. Default value is false") private Boolean isDefault; - - @Parameter(name=ApiConstants.SUPPORTED_SERVICES, type=CommandType.LIST, collectionType=CommandType.STRING, + + @Parameter(name=ApiConstants.SUPPORTED_SERVICES, type=CommandType.LIST, collectionType=CommandType.STRING, description="list VPC offerings supporting certain services") private List supportedServices; - + @Parameter(name=ApiConstants.STATE, type=CommandType.STRING, description="list VPC offerings by state") private String state; - - + + ///////////////////////////////////////////////////// /////////////////// Accessors /////////////////////// ///////////////////////////////////////////////////// @@ -82,11 +82,11 @@ public class ListVPCOfferingsCmd extends BaseListCmd{ public List getSupportedServices() { return supportedServices; } - + public String getState() { return state; } - + ///////////////////////////////////////////////////// /////////////// API Implementation/////////////////// ///////////////////////////////////////////////////// @@ -107,7 +107,7 @@ public class ListVPCOfferingsCmd extends BaseListCmd{ this.setResponseObject(response); } - + @Override public String getCommandName() { return _name; diff --git a/api/src/com/cloud/api/commands/ListVPCsCmd.java b/api/src/org/apache/cloudstack/api/user/vpc/command/ListVPCsCmd.java similarity index 95% rename from api/src/com/cloud/api/commands/ListVPCsCmd.java rename to api/src/org/apache/cloudstack/api/user/vpc/command/ListVPCsCmd.java index fec3eeab425..657dbd84be7 100644 --- a/api/src/com/cloud/api/commands/ListVPCsCmd.java +++ b/api/src/org/apache/cloudstack/api/user/vpc/command/ListVPCsCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.user.vpc.command; import java.util.ArrayList; import java.util.List; @@ -35,56 +35,56 @@ import com.cloud.network.vpc.Vpc; public class ListVPCsCmd extends BaseListTaggedResourcesCmd{ public static final Logger s_logger = Logger.getLogger(ListVPCsCmd.class.getName()); private static final String s_name = "listvpcsresponse"; - + ///////////////////////////////////////////////////// //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// @IdentityMapper(entityTableName="vpc") @Parameter(name=ApiConstants.ID, type=CommandType.LONG, description="list VPC by id") private Long id; - + @IdentityMapper(entityTableName="data_center") @Parameter(name=ApiConstants.ZONE_ID, type=CommandType.LONG, description="list by zone") private Long zoneId; @Parameter(name=ApiConstants.NAME, type=CommandType.STRING, description="list by name of the VPC") private String vpcName; - + @Parameter(name=ApiConstants.DISPLAY_TEXT, type=CommandType.STRING, description="List by display text of " + "the VPC") private String displayText; - + @Parameter(name=ApiConstants.CIDR, type=CommandType.STRING, description="list by cidr of the VPC. All VPC " + "guest networks' cidrs should be within this CIDR") private String cidr; - + @IdentityMapper(entityTableName="vpc_offerings") @Parameter(name=ApiConstants.VPC_OFF_ID, type=CommandType.LONG, description="list by ID of the VPC offering") private Long VpcOffId; - + @Parameter(name=ApiConstants.ACCOUNT, type=CommandType.STRING, description="list by account associated with the VPC. " + "Must be used with the domainId parameter.") private String accountName; - + @IdentityMapper(entityTableName="domain") @Parameter(name=ApiConstants.DOMAIN_ID, type=CommandType.LONG, description="list by domain ID associated with the VPC. " + "If used with the account parameter returns the VPC associated with the account for the specified domain.") private Long domainId; - - @Parameter(name=ApiConstants.SUPPORTED_SERVICES, type=CommandType.LIST, collectionType=CommandType.STRING, + + @Parameter(name=ApiConstants.SUPPORTED_SERVICES, type=CommandType.LIST, collectionType=CommandType.STRING, description="list VPC supporting certain services") private List supportedServices; - + @Parameter(name=ApiConstants.STATE, type=CommandType.STRING, description="list VPCs by state") private String state; - + @Parameter(name=ApiConstants.RESTART_REQUIRED, type=CommandType.BOOLEAN, description="list VPCs by restartRequired option") private Boolean restartRequired; - + ///////////////////////////////////////////////////// /////////////////// Accessors /////////////////////// ///////////////////////////////////////////////////// - + public String getAccountName() { return accountName; } @@ -104,7 +104,7 @@ public class ListVPCsCmd extends BaseListTaggedResourcesCmd{ public String getCidr() { return cidr; } - + public String getDisplayText() { return displayText; } @@ -112,23 +112,23 @@ public class ListVPCsCmd extends BaseListTaggedResourcesCmd{ public Long getVpcOffId() { return VpcOffId; } - + public Long getId() { return id; } - + public List getSupportedServices() { return supportedServices; } - + public String getState() { return state; } - + public Boolean getRestartRequired() { return restartRequired; } - + ///////////////////////////////////////////////////// /////////////// API Implementation/////////////////// ///////////////////////////////////////////////////// @@ -136,8 +136,8 @@ public class ListVPCsCmd extends BaseListTaggedResourcesCmd{ @Override public void execute() { List vpcs = _vpcService.listVpcs(getId(), getVpcName(), getDisplayText(), - getSupportedServices(), getCidr(), getVpcOffId(), getState(), getAccountName(), getDomainId(), - this.getKeyword(), this.getStartIndex(), this.getPageSizeVal(), getZoneId(), this.isRecursive(), + getSupportedServices(), getCidr(), getVpcOffId(), getState(), getAccountName(), getDomainId(), + this.getKeyword(), this.getStartIndex(), this.getPageSizeVal(), getZoneId(), this.isRecursive(), this.listAll(), getRestartRequired(), getTags(), getProjectId()); ListResponse response = new ListResponse(); List offeringResponses = new ArrayList(); diff --git a/api/src/com/cloud/api/commands/RestartVPCCmd.java b/api/src/org/apache/cloudstack/api/user/vpc/command/RestartVPCCmd.java similarity index 97% rename from api/src/com/cloud/api/commands/RestartVPCCmd.java rename to api/src/org/apache/cloudstack/api/user/vpc/command/RestartVPCCmd.java index dc7d8970981..8421cdeef94 100644 --- a/api/src/com/cloud/api/commands/RestartVPCCmd.java +++ b/api/src/org/apache/cloudstack/api/user/vpc/command/RestartVPCCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.user.vpc.command; import org.apache.log4j.Logger; @@ -42,7 +42,7 @@ public class RestartVPCCmd extends BaseAsyncCmd{ ///////////////////////////////////////////////////// //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - + @IdentityMapper(entityTableName="vpc") @Parameter(name=ApiConstants.ID, type=CommandType.LONG, description="the id of the VPC") private Long id; @@ -51,11 +51,11 @@ public class RestartVPCCmd extends BaseAsyncCmd{ ///////////////////////////////////////////////////// /////////////////// Accessors /////////////////////// ///////////////////////////////////////////////////// - + public Long getId() { return id; } - + ///////////////////////////////////////////////////// /////////////// API Implementation/////////////////// @@ -64,7 +64,7 @@ public class RestartVPCCmd extends BaseAsyncCmd{ public String getCommandName() { return _name; } - + @Override public long getEntityOwnerId() { Vpc vpc = _entityMgr.findById(Vpc.class, getId()); @@ -84,13 +84,13 @@ public class RestartVPCCmd extends BaseAsyncCmd{ this.setResponseObject(response); } else { throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to restart VPC"); - } + } } catch (ResourceUnavailableException ex) { s_logger.warn("Exception: ", ex); throw new ServerApiException(BaseCmd.RESOURCE_UNAVAILABLE_ERROR, ex.getMessage()); } catch (ConcurrentOperationException ex) { s_logger.warn("Exception: ", ex); - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, ex.getMessage()); + throw new ServerApiException(BaseCmd.INTERNAL_ERROR, ex.getMessage()); } catch (InsufficientCapacityException ex) { s_logger.info(ex); s_logger.trace(ex); diff --git a/api/src/com/cloud/api/commands/UpdateVPCCmd.java b/api/src/org/apache/cloudstack/api/user/vpc/command/UpdateVPCCmd.java similarity index 98% rename from api/src/com/cloud/api/commands/UpdateVPCCmd.java rename to api/src/org/apache/cloudstack/api/user/vpc/command/UpdateVPCCmd.java index abe66fe8bb1..14b8ce7b97a 100644 --- a/api/src/com/cloud/api/commands/UpdateVPCCmd.java +++ b/api/src/org/apache/cloudstack/api/user/vpc/command/UpdateVPCCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.user.vpc.command; import org.apache.log4j.Logger; @@ -38,14 +38,14 @@ public class UpdateVPCCmd extends BaseAsyncCmd{ ///////////////////////////////////////////////////// //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - + @IdentityMapper(entityTableName="vpc") @Parameter(name=ApiConstants.ID, type=CommandType.LONG, description="the id of the VPC") private Long id; @Parameter(name=ApiConstants.NAME, type=CommandType.STRING, description="the name of the VPC") private String vpcName; - + @Parameter(name=ApiConstants.DISPLAY_TEXT, type=CommandType.STRING, description="the display text of the VPC") private String displayText; @@ -53,19 +53,19 @@ public class UpdateVPCCmd extends BaseAsyncCmd{ ///////////////////////////////////////////////////// /////////////////// Accessors /////////////////////// ///////////////////////////////////////////////////// - + public String getVpcName() { return vpcName; } - + public String getDisplayText() { return displayText; } - + public Long getId() { return id; } - + ///////////////////////////////////////////////////// /////////////// API Implementation/////////////////// @@ -74,7 +74,7 @@ public class UpdateVPCCmd extends BaseAsyncCmd{ public String getCommandName() { return _name; } - + @Override public long getEntityOwnerId() { Vpc vpc = _entityMgr.findById(Vpc.class, getId()); diff --git a/client/tomcatconf/commands.properties.in b/client/tomcatconf/commands.properties.in index 32848b64ffd..2dd9c164b98 100755 --- a/client/tomcatconf/commands.properties.in +++ b/client/tomcatconf/commands.properties.in @@ -381,21 +381,21 @@ listNetworkDevice=com.cloud.api.commands.ListNetworkDeviceCmd;1 deleteNetworkDevice=com.cloud.api.commands.DeleteNetworkDeviceCmd;1 ### VPC commands -createVPC=com.cloud.api.commands.CreateVPCCmd;15 -listVPCs=com.cloud.api.commands.ListVPCsCmd;15 -deleteVPC=com.cloud.api.commands.DeleteVPCCmd;15 -updateVPC=com.cloud.api.commands.UpdateVPCCmd;15 -restartVPC=com.cloud.api.commands.RestartVPCCmd;15 +createVPC=org.apache.cloudstack.api.user.vpc.command.CreateVPCCmd;15 +listVPCs=org.apache.cloudstack.api.user.vpc.command.ListVPCsCmd;15 +deleteVPC=org.apache.cloudstack.api.user.vpc.command.DeleteVPCCmd;15 +updateVPC=org.apache.cloudstack.api.user.vpc.command.UpdateVPCCmd;15 +restartVPC=org.apache.cloudstack.api.user.vpc.command.RestartVPCCmd;15 #### VPC offering commands createVPCOffering=com.cloud.api.commands.CreateVPCOfferingCmd;1 updateVPCOffering=com.cloud.api.commands.UpdateVPCOfferingCmd;1 deleteVPCOffering=com.cloud.api.commands.DeleteVPCOfferingCmd;1 -listVPCOfferings=com.cloud.api.commands.ListVPCOfferingsCmd;15 +listVPCOfferings=org.apache.cloudstack.api.user.vpc.command.ListVPCOfferingsCmd;15 #### Private gateway commands createPrivateGateway=com.cloud.api.commands.CreatePrivateGatewayCmd;1 -listPrivateGateways=com.cloud.api.commands.ListPrivateGatewaysCmd;15 +listPrivateGateways=org.apache.cloudstack.api.user.vpc.command.ListPrivateGatewaysCmd;15 deletePrivateGateway=com.cloud.api.commands.DeletePrivateGatewayCmd;1 #### Network ACL commands @@ -404,9 +404,9 @@ deleteNetworkACL=com.cloud.api.commands.DeleteNetworkACLCmd;15 listNetworkACLs=com.cloud.api.commands.ListNetworkACLsCmd;15 #### Static route commands -createStaticRoute=com.cloud.api.commands.CreateStaticRouteCmd;15 -deleteStaticRoute=com.cloud.api.commands.DeleteStaticRouteCmd;15 -listStaticRoutes=com.cloud.api.commands.ListStaticRoutesCmd;15 +createStaticRoute=org.apache.cloudstack.api.user.vpc.command.CreateStaticRouteCmd;15 +deleteStaticRoute=org.apache.cloudstack.api.user.vpc.command.DeleteStaticRouteCmd;15 +listStaticRoutes=org.apache.cloudstack.api.user.vpc.command.ListStaticRoutesCmd;15 #### Tags commands createTags=com.cloud.api.commands.CreateTagsCmd;15 diff --git a/server/src/com/cloud/network/vpc/VpcManagerImpl.java b/server/src/com/cloud/network/vpc/VpcManagerImpl.java index dbaecbbc3cb..5a8d2851170 100644 --- a/server/src/com/cloud/network/vpc/VpcManagerImpl.java +++ b/server/src/com/cloud/network/vpc/VpcManagerImpl.java @@ -33,8 +33,8 @@ import javax.naming.ConfigurationException; import org.apache.log4j.Logger; import com.cloud.acl.ControlledEntity.ACLType; -import com.cloud.api.commands.ListPrivateGatewaysCmd; -import com.cloud.api.commands.ListStaticRoutesCmd; +import org.apache.cloudstack.api.user.vpc.command.ListPrivateGatewaysCmd; +import org.apache.cloudstack.api.user.vpc.command.ListStaticRoutesCmd; import com.cloud.configuration.Config; import com.cloud.configuration.ConfigurationManager; import com.cloud.configuration.Resource.ResourceType; @@ -983,7 +983,7 @@ public class VpcManagerImpl implements VpcManager, Manager{ } else { if (_ntwkMgr.areServicesSupportedInNetwork(network.getId(), Service.Lb)) { throw new InvalidParameterValueException("LB service is already supported " + - "by network " + network + " in VPC " + vpc); + "by network " + network + " in VPC " + vpc); } } } @@ -1070,7 +1070,7 @@ public class VpcManagerImpl implements VpcManager, Manager{ //5) network domain should be the same as VPC's if (!networkDomain.equalsIgnoreCase(vpc.getNetworkDomain())) { throw new InvalidParameterValueException("Network domain of the new network should match network" + - " domain of vpc " + vpc); + " domain of vpc " + vpc); } //6) gateway should never be equal to the cidr subnet diff --git a/server/test/com/cloud/vpc/MockVpcManagerImpl.java b/server/test/com/cloud/vpc/MockVpcManagerImpl.java index 7880402de7b..27ca4c1b607 100644 --- a/server/test/com/cloud/vpc/MockVpcManagerImpl.java +++ b/server/test/com/cloud/vpc/MockVpcManagerImpl.java @@ -24,8 +24,8 @@ import javax.ejb.Local; import javax.naming.ConfigurationException; import com.cloud.acl.ControlledEntity.ACLType; -import com.cloud.api.commands.ListPrivateGatewaysCmd; -import com.cloud.api.commands.ListStaticRoutesCmd; +import org.apache.cloudstack.api.user.vpc.command.ListPrivateGatewaysCmd; +import org.apache.cloudstack.api.user.vpc.command.ListStaticRoutesCmd; import com.cloud.exception.ConcurrentOperationException; import com.cloud.exception.InsufficientAddressCapacityException; import com.cloud.exception.InsufficientCapacityException; From 5e0501d116e03d69fa4f50dcfae0f618730b4984 Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Mon, 3 Dec 2012 22:06:41 -0800 Subject: [PATCH 006/421] api_refactor: refactor project apis - Fix refactored apis in commands*.in - Fix comments etc. - Expand tabs, remove trailing whitespace - Fix trailing whitespaces for all *.java Signed-off-by: Rohit Yadav --- api/src/com/cloud/acl/APIAccessChecker.java | 28 +- api/src/com/cloud/acl/ControlledEntity.java | 2 +- api/src/com/cloud/acl/Role.java | 40 +- api/src/com/cloud/acl/SecurityChecker.java | 8 +- .../cloud/agent/api/AgentControlAnswer.java | 4 +- .../cloud/agent/api/AgentControlCommand.java | 4 +- api/src/com/cloud/agent/api/Answer.java | 18 +- .../com/cloud/agent/api/AttachIsoCommand.java | 4 +- .../cloud/agent/api/AttachVolumeAnswer.java | 16 +- .../cloud/agent/api/AttachVolumeCommand.java | 24 +- .../cloud/agent/api/BackupSnapshotAnswer.java | 8 +- .../agent/api/BackupSnapshotCommand.java | 20 +- .../com/cloud/agent/api/CancelCommand.java | 8 +- .../cloud/agent/api/ChangeAgentAnswer.java | 2 +- .../cloud/agent/api/ChangeAgentCommand.java | 8 +- .../cloud/agent/api/CheckHealthCommand.java | 2 +- .../cloud/agent/api/CheckNetworkAnswer.java | 4 +- .../cloud/agent/api/CheckOnHostAnswer.java | 6 +- .../cloud/agent/api/CheckOnHostCommand.java | 8 +- .../cloud/agent/api/CheckRouterAnswer.java | 14 +- .../api/CheckS2SVpnConnectionsAnswer.java | 12 +- .../api/CheckS2SVpnConnectionsCommand.java | 8 +- .../com/cloud/agent/api/CheckStateAnswer.java | 6 +- .../cloud/agent/api/CheckStateCommand.java | 6 +- .../agent/api/CheckVirtualMachineAnswer.java | 16 +- .../agent/api/CheckVirtualMachineCommand.java | 10 +- .../agent/api/CleanupNetworkRulesCmd.java | 10 +- .../api/CleanupSnapshotBackupCommand.java | 18 +- .../cloud/agent/api/ClusterSyncAnswer.java | 14 +- .../cloud/agent/api/ClusterSyncCommand.java | 10 +- api/src/com/cloud/agent/api/Command.java | 6 +- .../agent/api/ComputeChecksumCommand.java | 6 +- .../ConsoleAccessAuthenticationAnswer.java | 62 +-- .../ConsoleAccessAuthenticationCommand.java | 32 +- .../api/ConsoleProxyLoadReportCommand.java | 10 +- ...atePrivateTemplateFromSnapshotCommand.java | 18 +- .../agent/api/CreateStoragePoolCommand.java | 4 +- .../api/CreateVolumeFromSnapshotAnswer.java | 6 +- .../api/CreateVolumeFromSnapshotCommand.java | 14 +- .../api/DeleteObjectFromSwiftCommand.java | 10 +- .../agent/api/DeleteSnapshotBackupAnswer.java | 10 +- .../api/DeleteSnapshotBackupCommand.java | 28 +- .../agent/api/DeleteSnapshotsDirCommand.java | 10 +- .../agent/api/DeleteStoragePoolCommand.java | 14 +- api/src/com/cloud/agent/api/FenceAnswer.java | 6 +- api/src/com/cloud/agent/api/FenceCommand.java | 14 +- .../cloud/agent/api/GetDomRVersionAnswer.java | 10 +- .../com/cloud/agent/api/GetVncPortAnswer.java | 12 +- .../cloud/agent/api/GetVncPortCommand.java | 8 +- .../com/cloud/agent/api/HostStatsEntry.java | 26 +- .../com/cloud/agent/api/MaintainAnswer.java | 12 +- .../com/cloud/agent/api/MaintainCommand.java | 2 +- .../cloud/agent/api/ManageSnapshotAnswer.java | 6 +- .../agent/api/ManageSnapshotCommand.java | 22 +- .../com/cloud/agent/api/MigrateAnswer.java | 6 +- .../com/cloud/agent/api/MigrateCommand.java | 12 +- .../agent/api/ModifyStoragePoolAnswer.java | 8 +- .../agent/api/ModifyStoragePoolCommand.java | 16 +- .../cloud/agent/api/NetworkUsageAnswer.java | 2 +- .../cloud/agent/api/NetworkUsageCommand.java | 4 +- api/src/com/cloud/agent/api/PingAnswer.java | 2 +- api/src/com/cloud/agent/api/PingCommand.java | 10 +- .../cloud/agent/api/PingRoutingCommand.java | 6 +- .../agent/api/PingRoutingWithOvsCommand.java | 6 +- .../cloud/agent/api/PingStorageCommand.java | 4 +- .../com/cloud/agent/api/PlugNicCommand.java | 10 +- .../com/cloud/agent/api/PoolEjectCommand.java | 8 +- .../agent/api/PrepareForMigrationAnswer.java | 6 +- .../agent/api/PrepareForMigrationCommand.java | 8 +- .../agent/api/PrepareOCFS2NodesCommand.java | 6 +- .../api/PropagateResourceEventCommand.java | 12 +- api/src/com/cloud/agent/api/ReadyAnswer.java | 4 +- api/src/com/cloud/agent/api/ReadyCommand.java | 12 +- api/src/com/cloud/agent/api/RebootAnswer.java | 10 +- .../com/cloud/agent/api/RebootCommand.java | 12 +- .../cloud/agent/api/RebootRouterCommand.java | 2 +- .../api/SecStorageFirewallCfgCommand.java | 20 +- .../agent/api/SecStorageSetupAnswer.java | 4 +- .../agent/api/SecStorageSetupCommand.java | 22 +- .../agent/api/SecStorageVMSetupCommand.java | 4 +- .../agent/api/SecurityGroupRuleAnswer.java | 10 +- .../agent/api/SecurityGroupRulesCmd.java | 16 +- api/src/com/cloud/agent/api/SetupAnswer.java | 2 +- api/src/com/cloud/agent/api/SetupCommand.java | 10 +- .../agent/api/SetupGuestNetworkCommand.java | 10 +- .../com/cloud/agent/api/ShutdownCommand.java | 12 +- .../com/cloud/agent/api/SnapshotCommand.java | 2 +- api/src/com/cloud/agent/api/StartAnswer.java | 10 +- api/src/com/cloud/agent/api/StartCommand.java | 4 +- .../com/cloud/agent/api/StartupAnswer.java | 10 +- .../com/cloud/agent/api/StartupCommand.java | 50 +-- .../api/StartupExternalFirewallCommand.java | 2 +- .../cloud/agent/api/StartupProxyCommand.java | 4 +- .../agent/api/StartupRoutingCommand.java | 10 +- .../api/StartupSecondaryStorageCommand.java | 4 +- .../agent/api/StartupStorageCommand.java | 14 +- api/src/com/cloud/agent/api/StopAnswer.java | 12 +- api/src/com/cloud/agent/api/StopCommand.java | 18 +- .../com/cloud/agent/api/StoragePoolInfo.java | 8 +- .../cloud/agent/api/TransferAgentCommand.java | 4 +- .../com/cloud/agent/api/UnPlugNicCommand.java | 6 +- .../cloud/agent/api/UnsupportedAnswer.java | 2 +- .../com/cloud/agent/api/UpgradeAnswer.java | 2 +- .../com/cloud/agent/api/UpgradeCommand.java | 8 +- .../agent/api/UpgradeSnapshotCommand.java | 10 +- .../agent/api/ValidateSnapshotAnswer.java | 10 +- .../agent/api/ValidateSnapshotCommand.java | 20 +- api/src/com/cloud/agent/api/VmStatsEntry.java | 26 +- .../api/baremetal/IpmISetBootDevCommand.java | 10 +- .../api/baremetal/PreparePxeServerAnswer.java | 4 +- .../baremetal/PreparePxeServerCommand.java | 10 +- .../prepareCreateTemplateCommand.java | 14 +- .../cloud/agent/api/check/CheckSshAnswer.java | 8 +- .../agent/api/check/CheckSshCommand.java | 6 +- .../api/downloadSnapshotFromSwiftCommand.java | 8 +- ...ateFromSwiftToSecondaryStorageCommand.java | 10 +- .../proxy/CheckConsoleProxyLoadCommand.java | 14 +- .../api/proxy/ConsoleProxyLoadAnswer.java | 10 +- ...rtConsoleProxyAgentHttpHandlerCommand.java | 8 +- .../proxy/WatchConsoleProxyLoadCommand.java | 16 +- .../CreateLoadBalancerApplianceCommand.java | 4 +- .../agent/api/routing/DhcpEntryCommand.java | 26 +- .../agent/api/routing/IpAssocAnswer.java | 8 +- .../agent/api/routing/IpAssocCommand.java | 4 +- .../agent/api/routing/IpAssocVpcCommand.java | 2 +- .../routing/LoadBalancerConfigCommand.java | 10 +- .../api/routing/NetworkElementCommand.java | 10 +- .../routing/RemoteAccessVpnCfgCommand.java | 12 +- .../api/routing/SavePasswordCommand.java | 18 +- .../api/routing/SetFirewallRulesAnswer.java | 6 +- .../api/routing/SetFirewallRulesCommand.java | 30 +- .../api/routing/SetNetworkACLAnswer.java | 8 +- .../api/routing/SetNetworkACLCommand.java | 26 +- .../routing/SetPortForwardingRulesAnswer.java | 6 +- .../SetPortForwardingRulesCommand.java | 4 +- .../SetPortForwardingRulesVpcCommand.java | 2 +- .../api/routing/SetSourceNatCommand.java | 6 +- .../api/routing/SetStaticNatRulesAnswer.java | 6 +- .../api/routing/SetStaticNatRulesCommand.java | 6 +- .../api/routing/SetStaticRouteAnswer.java | 6 +- .../api/routing/SetStaticRouteCommand.java | 6 +- .../api/routing/Site2SiteVpnCfgCommand.java | 12 +- .../agent/api/routing/UserDataCommand.java | 16 +- .../agent/api/routing/VmDataCommand.java | 20 +- .../agent/api/routing/VpnUsersCfgCommand.java | 12 +- .../api/storage/AbstractDownloadCommand.java | 20 +- .../api/storage/AbstractUploadCommand.java | 16 +- .../agent/api/storage/CopyVolumeAnswer.java | 8 +- .../agent/api/storage/CopyVolumeCommand.java | 24 +- .../cloud/agent/api/storage/CreateAnswer.java | 12 +- .../agent/api/storage/CreateCommand.java | 22 +- .../CreateEntityDownloadURLAnswer.java | 10 +- .../CreateEntityDownloadURLCommand.java | 6 +- .../storage/CreatePrivateTemplateAnswer.java | 14 +- .../storage/CreatePrivateTemplateCommand.java | 16 +- .../DeleteEntityDownloadURLAnswer.java | 10 +- .../DeleteEntityDownloadURLCommand.java | 4 +- .../api/storage/DeleteTemplateCommand.java | 8 +- .../api/storage/DeleteVolumeCommand.java | 44 +-- .../agent/api/storage/DestroyAnswer.java | 2 +- .../agent/api/storage/DestroyCommand.java | 14 +- .../agent/api/storage/DownloadAnswer.java | 30 +- .../agent/api/storage/DownloadCommand.java | 44 +-- .../api/storage/DownloadProgressCommand.java | 2 +- .../agent/api/storage/ListTemplateAnswer.java | 10 +- .../api/storage/ListTemplateCommand.java | 6 +- .../agent/api/storage/ListVolumeAnswer.java | 74 ++-- .../agent/api/storage/ListVolumeCommand.java | 54 +-- .../ManageVolumeAvailabilityAnswer.java | 6 +- .../ManageVolumeAvailabilityCommand.java | 20 +- .../storage/PrimaryStorageDownloadAnswer.java | 14 +- .../PrimaryStorageDownloadCommand.java | 20 +- .../cloud/agent/api/storage/UploadAnswer.java | 26 +- .../agent/api/storage/UploadCommand.java | 12 +- .../api/storage/UploadProgressCommand.java | 6 +- .../cloud/agent/api/storage/ssCommand.java | 10 +- .../cloud/agent/api/to/FirewallRuleTO.java | 42 +- api/src/com/cloud/agent/api/to/HostTO.java | 4 +- .../com/cloud/agent/api/to/NetworkACLTO.java | 30 +- api/src/com/cloud/agent/api/to/NetworkTO.java | 4 +- api/src/com/cloud/agent/api/to/NicTO.java | 20 +- .../agent/api/to/PortForwardingRuleTO.java | 10 +- .../cloud/agent/api/to/StaticNatRuleTO.java | 14 +- .../cloud/agent/api/to/StorageFilerTO.java | 8 +- api/src/com/cloud/agent/api/to/SwiftTO.java | 10 +- .../com/cloud/agent/api/to/TemplateTO.java | 6 +- .../cloud/agent/api/to/VirtualMachineTO.java | 14 +- ...ateToSwiftFromSecondaryStorageCommand.java | 10 +- api/src/com/cloud/api/commands/.gitignore | 4 +- .../api/commands/AddAccountToProjectCmd.java | 28 +- .../com/cloud/api/commands/AddClusterCmd.java | 362 +++++++++--------- .../com/cloud/api/commands/AddHostCmd.java | 28 +- .../AddNetworkServiceProviderCmd.java | 18 +- .../api/commands/AddSecondaryStorageCmd.java | 8 +- .../com/cloud/api/commands/AddSwiftCmd.java | 8 +- .../cloud/api/commands/AddTrafficTypeCmd.java | 30 +- .../com/cloud/api/commands/AddVpnUserCmd.java | 82 ++-- .../commands/AssignToLoadBalancerRuleCmd.java | 12 +- .../api/commands/AssociateIPAddrCmd.java | 74 ++-- .../com/cloud/api/commands/AttachIsoCmd.java | 12 +- .../cloud/api/commands/AttachVolumeCmd.java | 34 +- .../AuthorizeSecurityGroupEgressCmd.java | 18 +- .../AuthorizeSecurityGroupIngressCmd.java | 20 +- .../api/commands/CancelMaintenanceCmd.java | 14 +- .../CancelPrimaryStorageMaintenanceCmd.java | 14 +- .../ConfigureVirtualRouterElementCmd.java | 20 +- .../cloud/api/commands/CopyTemplateCmd.java | 20 +- .../cloud/api/commands/CreateAccountCmd.java | 30 +- .../api/commands/CreateDiskOfferingCmd.java | 16 +- .../cloud/api/commands/CreateDomainCmd.java | 6 +- .../api/commands/CreateFirewallRuleCmd.java | 54 +-- .../commands/CreateIpForwardingRuleCmd.java | 74 ++-- .../commands/CreateLBStickinessPolicyCmd.java | 8 +- .../commands/CreateLoadBalancerRuleCmd.java | 120 +++--- .../api/commands/CreateNetworkACLCmd.java | 44 +-- .../cloud/api/commands/CreateNetworkCmd.java | 72 ++-- .../commands/CreateNetworkOfferingCmd.java | 62 +-- .../commands/CreatePhysicalNetworkCmd.java | 32 +- .../com/cloud/api/commands/CreatePodCmd.java | 16 +- .../commands/CreatePortForwardingRuleCmd.java | 70 ++-- .../api/commands/CreatePrivateGatewayCmd.java | 38 +- .../api/commands/CreatePrivateNetworkCmd.java | 40 +- .../api/commands/CreateSSHKeyPairCmd.java | 66 ++-- .../commands/CreateServiceOfferingCmd.java | 28 +- .../cloud/api/commands/CreateSnapshotCmd.java | 24 +- .../api/commands/CreateSnapshotPolicyCmd.java | 24 +- .../CreateStorageNetworkIpRangeCmd.java | 88 ++--- .../api/commands/CreateStoragePoolCmd.java | 4 +- .../com/cloud/api/commands/CreateTagsCmd.java | 24 +- .../cloud/api/commands/CreateTemplateCmd.java | 38 +- .../com/cloud/api/commands/CreateUserCmd.java | 6 +- .../api/commands/CreateVPCOfferingCmd.java | 16 +- .../CreateVirtualRouterElementCmd.java | 14 +- .../api/commands/CreateVlanIpRangeCmd.java | 18 +- .../cloud/api/commands/CreateVolumeCmd.java | 28 +- .../com/cloud/api/commands/CreateZoneCmd.java | 28 +- .../cloud/api/commands/DeleteAccountCmd.java | 20 +- .../commands/DeleteAccountFromProjectCmd.java | 21 +- .../cloud/api/commands/DeleteClusterCmd.java | 4 +- .../api/commands/DeleteDiskOfferingCmd.java | 4 +- .../cloud/api/commands/DeleteDomainCmd.java | 2 +- .../api/commands/DeleteFirewallRuleCmd.java | 16 +- .../com/cloud/api/commands/DeleteHostCmd.java | 6 +- .../commands/DeleteIpForwardingRuleCmd.java | 10 +- .../com/cloud/api/commands/DeleteIsoCmd.java | 16 +- .../commands/DeleteLBStickinessPolicyCmd.java | 4 +- .../commands/DeleteLoadBalancerRuleCmd.java | 16 +- .../api/commands/DeleteNetworkACLCmd.java | 16 +- .../cloud/api/commands/DeleteNetworkCmd.java | 12 +- .../commands/DeleteNetworkOfferingCmd.java | 4 +- .../DeleteNetworkServiceProviderCmd.java | 8 +- .../commands/DeletePhysicalNetworkCmd.java | 6 +- .../com/cloud/api/commands/DeletePodCmd.java | 2 +- .../com/cloud/api/commands/DeletePoolCmd.java | 4 +- .../commands/DeletePortForwardingRuleCmd.java | 18 +- .../api/commands/DeletePrivateGatewayCmd.java | 20 +- .../api/commands/DeleteSSHKeyPairCmd.java | 64 ++-- .../api/commands/DeleteSecurityGroupCmd.java | 18 +- .../commands/DeleteServiceOfferingCmd.java | 4 +- .../cloud/api/commands/DeleteSnapshotCmd.java | 8 +- .../commands/DeleteSnapshotPoliciesCmd.java | 4 +- .../DeleteStorageNetworkIpRangeCmd.java | 64 ++-- .../com/cloud/api/commands/DeleteTagsCmd.java | 18 +- .../cloud/api/commands/DeleteTemplateCmd.java | 16 +- .../api/commands/DeleteTrafficTypeCmd.java | 12 +- .../com/cloud/api/commands/DeleteUserCmd.java | 6 +- .../cloud/api/commands/DeleteVMGroupCmd.java | 4 +- .../api/commands/DeleteVPCOfferingCmd.java | 10 +- .../api/commands/DeleteVlanIpRangeCmd.java | 8 +- .../cloud/api/commands/DeleteVolumeCmd.java | 8 +- .../com/cloud/api/commands/DeleteZoneCmd.java | 6 +- .../api/commands/DestroyConsoleProxyCmd.java | 6 +- .../api/commands/DestroySystemVmCmd.java | 16 +- .../com/cloud/api/commands/DetachIsoCmd.java | 8 +- .../cloud/api/commands/DetachVolumeCmd.java | 16 +- .../cloud/api/commands/DisableAccountCmd.java | 20 +- .../api/commands/DisableStaticNatCmd.java | 16 +- .../cloud/api/commands/DisableUserCmd.java | 8 +- .../api/commands/DisassociateIPAddrCmd.java | 18 +- .../cloud/api/commands/EnableAccountCmd.java | 6 +- .../api/commands/EnableStaticNatCmd.java | 20 +- .../com/cloud/api/commands/EnableUserCmd.java | 6 +- .../com/cloud/api/commands/ExtractIsoCmd.java | 16 +- .../api/commands/ExtractTemplateCmd.java | 30 +- .../cloud/api/commands/ExtractVolumeCmd.java | 28 +- .../api/commands/GetCloudIdentifierCmd.java | 8 +- .../com/cloud/api/commands/GetUserCmd.java | 26 +- .../com/cloud/api/commands/LDAPConfigCmd.java | 12 +- .../com/cloud/api/commands/LDAPRemoveCmd.java | 10 +- .../cloud/api/commands/ListAccountsCmd.java | 8 +- .../api/commands/ListCapabilitiesCmd.java | 6 +- .../cloud/api/commands/ListCapacityCmd.java | 50 +-- .../cloud/api/commands/ListClustersCmd.java | 26 +- .../api/commands/ListDomainChildrenCmd.java | 12 +- .../cloud/api/commands/ListDomainsCmd.java | 8 +- .../com/cloud/api/commands/ListEventsCmd.java | 4 +- .../api/commands/ListFirewallRulesCmd.java | 12 +- .../commands/ListGuestOsCategoriesCmd.java | 4 +- .../cloud/api/commands/ListGuestOsCmd.java | 6 +- .../com/cloud/api/commands/ListHostsCmd.java | 36 +- .../commands/ListIpForwardingRulesCmd.java | 22 +- .../api/commands/ListIsoPermissionsCmd.java | 8 +- .../com/cloud/api/commands/ListIsosCmd.java | 30 +- .../commands/ListLBStickinessPoliciesCmd.java | 14 +- .../ListLoadBalancerRuleInstancesCmd.java | 4 +- .../commands/ListLoadBalancerRulesCmd.java | 2 +- .../api/commands/ListNetworkACLsCmd.java | 16 +- .../api/commands/ListNetworkOfferingsCmd.java | 56 +-- .../ListNetworkServiceProvidersCmd.java | 24 +- .../cloud/api/commands/ListNetworksCmd.java | 54 +-- .../api/commands/ListPhysicalNetworksCmd.java | 16 +- .../com/cloud/api/commands/ListPodsByCmd.java | 20 +- .../commands/ListPortForwardingRulesCmd.java | 14 +- .../api/commands/ListProjectAccountsCmd.java | 12 +- .../commands/ListPublicIpAddressesCmd.java | 44 +-- .../ListRecurringSnapshotScheduleCmd.java | 2 +- .../api/commands/ListResourceLimitsCmd.java | 16 +- .../cloud/api/commands/ListRoutersCmd.java | 20 +- .../api/commands/ListSSHKeyPairsCmd.java | 72 ++-- .../api/commands/ListSecurityGroupsCmd.java | 10 +- .../api/commands/ListServiceOfferingsCmd.java | 12 +- .../api/commands/ListSnapshotPoliciesCmd.java | 2 +- .../cloud/api/commands/ListSnapshotsCmd.java | 10 +- .../api/commands/ListStoragePoolsCmd.java | 8 +- .../ListSupportedNetworkServicesCmd.java | 22 +- .../com/cloud/api/commands/ListSwiftsCmd.java | 8 +- .../cloud/api/commands/ListSystemVMsCmd.java | 10 +- .../com/cloud/api/commands/ListTagsCmd.java | 20 +- .../ListTemplateOrIsoPermissionsCmd.java | 18 +- .../commands/ListTemplatePermissionsCmd.java | 8 +- .../cloud/api/commands/ListTemplatesCmd.java | 18 +- .../ListTrafficTypeImplementorsCmd.java | 62 +-- .../api/commands/ListTrafficTypesCmd.java | 6 +- .../com/cloud/api/commands/ListUsersCmd.java | 4 +- .../cloud/api/commands/ListVMGroupsCmd.java | 2 +- .../ListVirtualRouterElementsCmd.java | 12 +- .../api/commands/ListVlanIpRangesCmd.java | 30 +- .../cloud/api/commands/ListVolumesCmd.java | 10 +- .../cloud/api/commands/ListVpnUsersCmd.java | 4 +- .../cloud/api/commands/ListZonesByCmd.java | 18 +- .../cloud/api/commands/LockAccountCmd.java | 4 +- .../com/cloud/api/commands/LockUserCmd.java | 4 +- .../MarkDefaultZoneForAccountCmd.java | 36 +- .../api/commands/MigrateSystemVMCmd.java | 30 +- .../cloud/api/commands/MigrateVolumeCmd.java | 42 +- .../commands/PrepareForMaintenanceCmd.java | 18 +- ...reparePrimaryStorageForMaintenanceCmd.java | 10 +- .../api/commands/PrepareTemplateCmd.java | 20 +- .../api/commands/QueryAsyncJobResultCmd.java | 4 +- .../cloud/api/commands/RebootRouterCmd.java | 18 +- .../cloud/api/commands/RebootSystemVmCmd.java | 16 +- .../cloud/api/commands/ReconnectHostCmd.java | 16 +- .../com/cloud/api/commands/RegisterCmd.java | 4 +- .../cloud/api/commands/RegisterIsoCmd.java | 42 +- .../api/commands/RegisterSSHKeyPairCmd.java | 80 ++-- .../api/commands/RegisterTemplateCmd.java | 34 +- .../RemoveFromLoadBalancerRuleCmd.java | 12 +- .../cloud/api/commands/RemoveVpnUserCmd.java | 64 ++-- .../cloud/api/commands/RestartNetworkCmd.java | 16 +- .../cloud/api/commands/StartRouterCmd.java | 18 +- .../cloud/api/commands/StartSystemVMCmd.java | 18 +- .../cloud/api/commands/StopSystemVmCmd.java | 14 +- .../cloud/api/commands/UpdateAccountCmd.java | 34 +- .../com/cloud/api/commands/UpdateCfgCmd.java | 4 +- .../cloud/api/commands/UpdateClusterCmd.java | 40 +- .../api/commands/UpdateDiskOfferingCmd.java | 12 +- .../cloud/api/commands/UpdateDomainCmd.java | 8 +- .../com/cloud/api/commands/UpdateHostCmd.java | 14 +- .../api/commands/UpdateHostPasswordCmd.java | 8 +- .../com/cloud/api/commands/UpdateIsoCmd.java | 8 +- .../api/commands/UpdateIsoPermissionsCmd.java | 10 +- .../commands/UpdateLoadBalancerRuleCmd.java | 2 +- .../cloud/api/commands/UpdateNetworkCmd.java | 34 +- .../commands/UpdateNetworkOfferingCmd.java | 22 +- .../UpdateNetworkServiceProviderCmd.java | 20 +- .../commands/UpdatePhysicalNetworkCmd.java | 18 +- .../com/cloud/api/commands/UpdatePodCmd.java | 12 +- .../api/commands/UpdateResourceCountCmd.java | 20 +- .../api/commands/UpdateResourceLimitCmd.java | 20 +- .../commands/UpdateServiceOfferingCmd.java | 16 +- .../UpdateStorageNetworkIpRangeCmd.java | 82 ++-- .../api/commands/UpdateStoragePoolCmd.java | 6 +- .../cloud/api/commands/UpdateTemplateCmd.java | 12 +- .../api/commands/UpdateTemplateOrIsoCmd.java | 14 +- .../UpdateTemplateOrIsoPermissionsCmd.java | 18 +- .../UpdateTemplatePermissionsCmd.java | 20 +- .../api/commands/UpdateTrafficTypeCmd.java | 24 +- .../com/cloud/api/commands/UpdateUserCmd.java | 6 +- .../cloud/api/commands/UpdateVMGroupCmd.java | 4 +- .../api/commands/UpdateVPCOfferingCmd.java | 18 +- .../com/cloud/api/commands/UpdateZoneCmd.java | 32 +- .../cloud/api/commands/UpgradeRouterCmd.java | 16 +- .../api/commands/UpgradeSystemVMCmd.java | 10 +- .../commands/UploadCustomCertificateCmd.java | 30 +- .../cloud/api/commands/UploadVolumeCmd.java | 294 +++++++------- .../listStorageNetworkIpRangeCmd.java | 82 ++-- .../cloud/api/response/AccountResponse.java | 26 +- .../cloud/api/response/AsyncJobResponse.java | 62 +-- .../com/cloud/api/response/BaseResponse.java | 28 +- .../api/response/CapabilitiesResponse.java | 24 +- .../api/response/CapabilityResponse.java | 2 +- .../cloud/api/response/CapacityResponse.java | 26 +- .../api/response/CloudIdentifierResponse.java | 12 +- .../cloud/api/response/ClusterResponse.java | 46 +-- .../response/ControlledEntityResponse.java | 6 +- .../cloud/api/response/CreateCmdResponse.java | 4 +- .../api/response/DiskOfferingResponse.java | 2 +- .../cloud/api/response/DomainResponse.java | 18 +- .../api/response/DomainRouterResponse.java | 46 +-- .../com/cloud/api/response/EventResponse.java | 4 +- .../cloud/api/response/ExceptionResponse.java | 4 +- .../cloud/api/response/ExtractResponse.java | 36 +- .../cloud/api/response/FirewallResponse.java | 6 +- .../api/response/FirewallRuleResponse.java | 42 +- .../api/response/GetVMPasswordResponse.java | 8 +- .../api/response/GuestOSCategoryResponse.java | 2 +- .../com/cloud/api/response/HostResponse.java | 10 +- .../cloud/api/response/IPAddressResponse.java | 56 +-- .../api/response/InstanceGroupResponse.java | 6 +- .../response/IpForwardingRuleResponse.java | 34 +- .../com/cloud/api/response/IsoVmResponse.java | 2 +- .../response/LBStickinessPolicyResponse.java | 14 +- .../api/response/LBStickinessResponse.java | 12 +- .../api/response/LDAPConfigResponse.java | 2 +- .../com/cloud/api/response/ListResponse.java | 8 +- .../api/response/LoadBalancerResponse.java | 12 +- .../api/response/NetworkACLResponse.java | 8 +- .../api/response/NetworkOfferingResponse.java | 42 +- .../cloud/api/response/NetworkResponse.java | 128 +++---- .../com/cloud/api/response/NicResponse.java | 30 +- .../api/response/PhysicalNetworkResponse.java | 36 +- .../com/cloud/api/response/PodResponse.java | 26 +- .../api/response/PrivateGatewayResponse.java | 40 +- .../response/ProjectInvitationResponse.java | 16 +- .../cloud/api/response/ProjectResponse.java | 18 +- .../cloud/api/response/ProviderResponse.java | 26 +- .../api/response/RemoteAccessVpnResponse.java | 54 +-- .../api/response/ResourceCountResponse.java | 8 +- .../api/response/ResourceLimitResponse.java | 12 +- .../api/response/ResourceTagResponse.java | 28 +- .../api/response/SSHKeyPairResponse.java | 56 +-- .../api/response/SecurityGroupResponse.java | 16 +- .../api/response/ServiceOfferingResponse.java | 68 ++-- .../cloud/api/response/ServiceResponse.java | 6 +- .../Site2SiteCustomerGatewayResponse.java | 54 +-- .../Site2SiteVpnConnectionResponse.java | 70 ++-- .../response/Site2SiteVpnGatewayResponse.java | 36 +- .../cloud/api/response/SnapshotResponse.java | 14 +- .../api/response/StaticRouteResponse.java | 22 +- .../cloud/api/response/StatusResponse.java | 2 +- .../StorageNetworkIpRangeResponse.java | 36 +- .../api/response/StoragePoolResponse.java | 16 +- .../cloud/api/response/SuccessResponse.java | 8 +- .../com/cloud/api/response/SwiftResponse.java | 2 +- .../response/SystemVmInstanceResponse.java | 10 +- .../cloud/api/response/SystemVmResponse.java | 14 +- .../response/TemplatePermissionsResponse.java | 4 +- .../cloud/api/response/TemplateResponse.java | 32 +- .../TrafficTypeImplementorResponse.java | 26 +- .../api/response/TrafficTypeResponse.java | 20 +- .../cloud/api/response/UpgradeVmResponse.java | 4 +- .../com/cloud/api/response/UserResponse.java | 2 +- .../cloud/api/response/UserVmResponse.java | 36 +- .../VirtualRouterProviderResponse.java | 10 +- .../api/response/VlanIpRangeResponse.java | 18 +- .../cloud/api/response/VolumeResponse.java | 22 +- .../api/response/VpcOfferingResponse.java | 14 +- .../com/cloud/api/response/VpcResponse.java | 44 +-- .../cloud/api/response/VpnUsersResponse.java | 14 +- .../com/cloud/api/response/ZoneResponse.java | 32 +- api/src/com/cloud/capacity/Capacity.java | 4 +- api/src/com/cloud/capacity/CapacityState.java | 6 +- .../configuration/ConfigurationService.java | 28 +- api/src/com/cloud/dao/EntityManager.java | 14 +- api/src/com/cloud/dc/Pod.java | 2 +- .../com/cloud/dc/StorageNetworkIpRange.java | 4 +- .../cloud/deploy/DataCenterDeployment.java | 4 +- .../com/cloud/deploy/DeploymentPlanner.java | 8 +- api/src/com/cloud/event/Event.java | 2 +- api/src/com/cloud/event/EventTypes.java | 12 +- .../exception/AgentUnavailableException.java | 8 +- .../com/cloud/exception/CloudException.java | 24 +- .../exception/CloudExecutionException.java | 10 +- .../ConcurrentOperationException.java | 4 +- .../ConflictingNetworkSettingsException.java | 2 +- .../cloud/exception/ConnectionException.java | 10 +- .../DiscoveredWithErrorException.java | 4 +- .../cloud/exception/DiscoveryException.java | 4 +- api/src/com/cloud/exception/ErrorCode.java | 12 +- .../com/cloud/exception/HAStateException.java | 4 +- .../InsufficientCapacityException.java | 2 +- .../InsufficientNetworkCapacityException.java | 4 +- .../InsufficientServerCapacityException.java | 6 +- .../InsufficientStorageCapacityException.java | 6 +- ...ficientVirtualNetworkCapcityException.java | 4 +- .../ResourceUnavailableException.java | 8 +- .../StorageUnavailableException.java | 8 +- api/src/com/cloud/host/Host.java | 4 +- api/src/com/cloud/host/HostEnvironment.java | 12 +- api/src/com/cloud/host/HostStats.java | 6 +- api/src/com/cloud/host/Status.java | 18 +- api/src/com/cloud/hypervisor/Hypervisor.java | 2 +- .../com/cloud/hypervisor/HypervisorGuru.java | 14 +- api/src/com/cloud/network/IpAddress.java | 6 +- api/src/com/cloud/network/Network.java | 6 +- api/src/com/cloud/network/NetworkService.java | 30 +- api/src/com/cloud/network/Networks.java | 2 +- .../com/cloud/network/PhysicalNetwork.java | 2 +- .../PhysicalNetworkServiceProvider.java | 2 +- .../network/PhysicalNetworkTrafficType.java | 2 +- .../com/cloud/network/PublicIpAddress.java | 10 +- .../com/cloud/network/RemoteAccessVpn.java | 2 +- .../network/Site2SiteCustomerGateway.java | 2 +- .../cloud/network/Site2SiteVpnConnection.java | 2 +- .../cloud/network/Site2SiteVpnGateway.java | 2 +- .../VirtualNetworkApplianceService.java | 10 +- .../VpcVirtualNetworkApplianceService.java | 4 +- .../cloud/network/as/AutoScaleVmProfile.java | 36 +- .../element/LoadBalancingServiceProvider.java | 2 +- .../cloud/network/element/NetworkElement.java | 40 +- .../RemoteAccessVPNServiceProvider.java | 4 +- .../element/Site2SiteVpnServiceProvider.java | 4 +- .../cloud/network/element/VpcProvider.java | 8 +- .../network/firewall/FirewallService.java | 2 +- .../network/firewall/NetworkACLService.java | 4 +- .../com/cloud/network/guru/NetworkGuru.java | 64 ++-- .../cloud/network/lb/LoadBalancingRule.java | 2 +- .../network/lb/LoadBalancingRulesService.java | 14 +- .../com/cloud/network/rules/FirewallRule.java | 26 +- .../network/rules/LbStickinessMethod.java | 20 +- .../network/rules/PortForwardingRule.java | 14 +- .../com/cloud/network/rules/RulesService.java | 6 +- .../com/cloud/network/rules/StaticNat.java | 8 +- .../network/security/SecurityGroupRules.java | 2 +- .../security/SecurityGroupService.java | 4 +- .../cloud/network/security/SecurityRule.java | 12 +- api/src/com/cloud/network/vpc/PrivateIp.java | 2 +- .../com/cloud/network/vpc/StaticRoute.java | 2 +- .../cloud/network/vpc/StaticRouteProfile.java | 6 +- api/src/com/cloud/network/vpc/Vpc.java | 8 +- api/src/com/cloud/network/vpc/VpcGateway.java | 4 +- .../com/cloud/network/vpc/VpcOffering.java | 4 +- api/src/com/cloud/network/vpc/VpcService.java | 70 ++-- .../network/vpn/RemoteAccessVpnService.java | 8 +- api/src/com/cloud/offering/DiskOffering.java | 2 +- .../com/cloud/offering/NetworkOffering.java | 4 +- .../com/cloud/offering/OfferingManager.java | 10 +- .../com/cloud/projects/ProjectService.java | 10 +- .../com/cloud/resource/ResourceService.java | 12 +- api/src/com/cloud/serializer/Param.java | 2 +- .../com/cloud/server/ManagementService.java | 78 ++-- api/src/com/cloud/server/ResourceTag.java | 2 +- .../cloud/server/TaggedResourceService.java | 4 +- api/src/com/cloud/storage/StoragePool.java | 2 +- api/src/com/cloud/storage/StorageService.java | 24 +- api/src/com/cloud/storage/StorageStats.java | 2 +- api/src/com/cloud/storage/Volume.java | 10 +- .../storage/snapshot/SnapshotService.java | 14 +- api/src/com/cloud/template/BasedOn.java | 2 +- .../com/cloud/template/TemplateService.java | 8 +- api/src/com/cloud/user/Account.java | 6 +- api/src/com/cloud/user/AccountService.java | 26 +- api/src/com/cloud/user/DomainService.java | 2 +- .../com/cloud/user/ResourceLimitService.java | 20 +- api/src/com/cloud/vm/Nic.java | 2 +- api/src/com/cloud/vm/NicProfile.java | 2 +- api/src/com/cloud/vm/RunningOn.java | 2 +- api/src/com/cloud/vm/UserVmService.java | 38 +- api/src/com/cloud/vm/VirtualMachine.java | 6 +- .../com/cloud/vm/VirtualMachineProfile.java | 2 +- .../project/command}/ActivateProjectCmd.java | 22 +- .../project/command}/CreateProjectCmd.java | 4 +- .../project/command}/DeleteProjectCmd.java | 18 +- .../command}/DeleteProjectInvitationCmd.java | 2 +- .../command}/ListProjectInvitationsCmd.java | 2 +- .../project/command}/ListProjectsCmd.java | 18 +- .../project/command}/SuspendProjectCmd.java | 18 +- .../project/command}/UpdateProjectCmd.java | 22 +- .../command}/UpdateProjectInvitationCmd.java | 2 +- .../api/user/vm/command/ListVMsCmd.java | 0 .../api/user/vm/command/RestoreVMCmd.java | 0 .../commands/test/ActivateProjectCmdTest.java | 2 +- client/tomcatconf/commands.properties.in | 18 +- 583 files changed, 5111 insertions(+), 5110 deletions(-) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/user/project/command}/ActivateProjectCmd.java (97%) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/user/project/command}/CreateProjectCmd.java (98%) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/user/project/command}/DeleteProjectCmd.java (96%) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/user/project/command}/DeleteProjectInvitationCmd.java (98%) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/user/project/command}/ListProjectInvitationsCmd.java (98%) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/user/project/command}/ListProjectsCmd.java (97%) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/user/project/command}/SuspendProjectCmd.java (96%) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/user/project/command}/UpdateProjectCmd.java (96%) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/user/project/command}/UpdateProjectInvitationCmd.java (98%) mode change 100755 => 100644 api/src/org/apache/cloudstack/api/user/vm/command/ListVMsCmd.java mode change 100755 => 100644 api/src/org/apache/cloudstack/api/user/vm/command/RestoreVMCmd.java diff --git a/api/src/com/cloud/acl/APIAccessChecker.java b/api/src/com/cloud/acl/APIAccessChecker.java index c0f8fd444da..e54e036f2ec 100644 --- a/api/src/com/cloud/acl/APIAccessChecker.java +++ b/api/src/com/cloud/acl/APIAccessChecker.java @@ -1,14 +1,14 @@ -package com.cloud.acl; - -import com.cloud.exception.PermissionDeniedException; -import com.cloud.user.Account; -import com.cloud.user.User; -import com.cloud.utils.component.Adapter; - -/** - * APIAccessChecker checks the ownership and access control to API requests - */ -public interface APIAccessChecker extends Adapter { - - boolean canAccessAPI(User user, String apiCommandName) throws PermissionDeniedException; -} +package com.cloud.acl; + +import com.cloud.exception.PermissionDeniedException; +import com.cloud.user.Account; +import com.cloud.user.User; +import com.cloud.utils.component.Adapter; + +/** + * APIAccessChecker checks the ownership and access control to API requests + */ +public interface APIAccessChecker extends Adapter { + + boolean canAccessAPI(User user, String apiCommandName) throws PermissionDeniedException; +} diff --git a/api/src/com/cloud/acl/ControlledEntity.java b/api/src/com/cloud/acl/ControlledEntity.java index 190dd41eea4..5ccd8fb2953 100644 --- a/api/src/com/cloud/acl/ControlledEntity.java +++ b/api/src/com/cloud/acl/ControlledEntity.java @@ -22,7 +22,7 @@ import com.cloud.user.OwnedBy; /** * ControlledEntity defines an object for which the access from an * access must inherit this interface. - * + * */ public interface ControlledEntity extends OwnedBy, PartOf { public enum ACLType { diff --git a/api/src/com/cloud/acl/Role.java b/api/src/com/cloud/acl/Role.java index 932a43b820d..0ab69e90db5 100644 --- a/api/src/com/cloud/acl/Role.java +++ b/api/src/com/cloud/acl/Role.java @@ -1,20 +1,20 @@ -package com.cloud.acl; - -//metadata - consists of default dynamic roles in CS + any custom roles added by user -public interface Role { - - public static final short ROOT_ADMIN = 0; - public static final short DOMAIN_ADMIN = 1; - public static final short DOMAIN_USER = 2; - public static final short OWNER = 3; - public static final short PARENT_DOMAIN_ADMIN = 4; - public static final short PARENT_DOMAIN_USER = 5; - public static final short CHILD_DOMAIN_ADMIN = 6; - public static final short CHILD_DOMAIN_USER = 7; - - public long getId(); - - public short getRoleType(); - - - } +package com.cloud.acl; + +//metadata - consists of default dynamic roles in CS + any custom roles added by user +public interface Role { + + public static final short ROOT_ADMIN = 0; + public static final short DOMAIN_ADMIN = 1; + public static final short DOMAIN_USER = 2; + public static final short OWNER = 3; + public static final short PARENT_DOMAIN_ADMIN = 4; + public static final short PARENT_DOMAIN_USER = 5; + public static final short CHILD_DOMAIN_ADMIN = 6; + public static final short CHILD_DOMAIN_USER = 7; + + public long getId(); + + public short getRoleType(); + + + } diff --git a/api/src/com/cloud/acl/SecurityChecker.java b/api/src/com/cloud/acl/SecurityChecker.java index 3f76da97809..4559641683d 100644 --- a/api/src/com/cloud/acl/SecurityChecker.java +++ b/api/src/com/cloud/acl/SecurityChecker.java @@ -39,7 +39,7 @@ public interface SecurityChecker extends Adapter { /** * Checks if the account owns the object. - * + * * @param caller * account to check against. * @param object @@ -52,7 +52,7 @@ public interface SecurityChecker extends Adapter { /** * Checks if the user belongs to an account that owns the object. - * + * * @param user * user to check against. * @param object @@ -65,7 +65,7 @@ public interface SecurityChecker extends Adapter { /** * Checks if the account can access the object. - * + * * @param caller * account to check against. * @param entity @@ -80,7 +80,7 @@ public interface SecurityChecker extends Adapter { /** * Checks if the user belongs to an account that can access the object. - * + * * @param user * user to check against. * @param entity diff --git a/api/src/com/cloud/agent/api/AgentControlAnswer.java b/api/src/com/cloud/agent/api/AgentControlAnswer.java index 1cdcc1e8322..7dbf7b509eb 100644 --- a/api/src/com/cloud/agent/api/AgentControlAnswer.java +++ b/api/src/com/cloud/agent/api/AgentControlAnswer.java @@ -19,11 +19,11 @@ package com.cloud.agent.api; public class AgentControlAnswer extends Answer { public AgentControlAnswer() { } - + public AgentControlAnswer(Command command) { super(command); } - + public AgentControlAnswer(Command command, boolean success, String details) { super(command, success, details); } diff --git a/api/src/com/cloud/agent/api/AgentControlCommand.java b/api/src/com/cloud/agent/api/AgentControlCommand.java index 6cc8e6fde9b..da187ac4ca8 100644 --- a/api/src/com/cloud/agent/api/AgentControlCommand.java +++ b/api/src/com/cloud/agent/api/AgentControlCommand.java @@ -17,10 +17,10 @@ package com.cloud.agent.api; public class AgentControlCommand extends Command { - + public AgentControlCommand() { } - + public boolean executeInSequence() { return false; } diff --git a/api/src/com/cloud/agent/api/Answer.java b/api/src/com/cloud/agent/api/Answer.java index 932da233a05..655f4470097 100755 --- a/api/src/com/cloud/agent/api/Answer.java +++ b/api/src/com/cloud/agent/api/Answer.java @@ -21,40 +21,40 @@ import com.cloud.utils.exception.ExceptionUtil; public class Answer extends Command { protected boolean result; protected String details; - + protected Answer() { } - + public Answer(Command command) { this(command, true, null); } - + public Answer(Command command, boolean success, String details) { result = success; this.details = details; } - + public Answer(Command command, Exception e) { this(command, false, ExceptionUtil.toString(e)); } - + public boolean getResult() { return result; } - + public String getDetails() { return details; } - + @Override public boolean executeInSequence() { return false; } - + public static UnsupportedAnswer createUnsupportedCommandAnswer(Command cmd) { return new UnsupportedAnswer(cmd, "Unsupported command issued:" + cmd.toString() + ". Are you sure you got the right type of server?"); } - + public static UnsupportedAnswer createUnsupportedVersionAnswer(Command cmd) { return new UnsupportedAnswer(cmd, "Unsuppored Version."); } diff --git a/api/src/com/cloud/agent/api/AttachIsoCommand.java b/api/src/com/cloud/agent/api/AttachIsoCommand.java index ff9da83669e..c6f0b6124b7 100644 --- a/api/src/com/cloud/agent/api/AttachIsoCommand.java +++ b/api/src/com/cloud/agent/api/AttachIsoCommand.java @@ -48,11 +48,11 @@ public class AttachIsoCommand extends Command { public boolean isAttach() { return attach; } - + public String getStoreUrl() { return storeUrl; } - + public void setStoreUrl(String url) { storeUrl = url; } diff --git a/api/src/com/cloud/agent/api/AttachVolumeAnswer.java b/api/src/com/cloud/agent/api/AttachVolumeAnswer.java index 253b4445667..b377b7c1386 100644 --- a/api/src/com/cloud/agent/api/AttachVolumeAnswer.java +++ b/api/src/com/cloud/agent/api/AttachVolumeAnswer.java @@ -20,38 +20,38 @@ package com.cloud.agent.api; public class AttachVolumeAnswer extends Answer { private Long deviceId; private String chainInfo; - + protected AttachVolumeAnswer() { - + } - + public AttachVolumeAnswer(AttachVolumeCommand cmd, String result) { super(cmd, false, result); this.deviceId = null; } - + public AttachVolumeAnswer(AttachVolumeCommand cmd, Long deviceId) { super(cmd); this.deviceId = deviceId; } - + public AttachVolumeAnswer(AttachVolumeCommand cmd) { super(cmd); this.deviceId = null; } - + /** * @return the deviceId */ public Long getDeviceId() { return deviceId; } - + public void setChainInfo(String chainInfo) { this.chainInfo = chainInfo; } - + public String getChainInfo() { return chainInfo; } diff --git a/api/src/com/cloud/agent/api/AttachVolumeCommand.java b/api/src/com/cloud/agent/api/AttachVolumeCommand.java index 98bfb2e485e..302b8f80af3 100644 --- a/api/src/com/cloud/agent/api/AttachVolumeCommand.java +++ b/api/src/com/cloud/agent/api/AttachVolumeCommand.java @@ -19,7 +19,7 @@ package com.cloud.agent.api; import com.cloud.storage.Storage.StoragePoolType; public class AttachVolumeCommand extends Command { - + boolean attach; String vmName; StoragePoolType pooltype; @@ -29,10 +29,10 @@ public class AttachVolumeCommand extends Command { String volumeName; Long deviceId; String chainInfo; - + protected AttachVolumeCommand() { } - + public AttachVolumeCommand(boolean attach, String vmName, StoragePoolType pooltype, String volumeFolder, String volumePath, String volumeName, Long deviceId, String chainInfo) { this.attach = attach; this.vmName = vmName; @@ -43,20 +43,20 @@ public class AttachVolumeCommand extends Command { this.deviceId = deviceId; this.chainInfo = chainInfo; } - + @Override public boolean executeInSequence() { return true; } - + public boolean getAttach() { return attach; } - + public String getVmName() { return vmName; } - + public StoragePoolType getPooltype() { return pooltype; } @@ -68,11 +68,11 @@ public class AttachVolumeCommand extends Command { public String getVolumeFolder() { return volumeFolder; } - + public String getVolumePath() { return volumePath; } - + public String getVolumeName() { return volumeName; } @@ -84,15 +84,15 @@ public class AttachVolumeCommand extends Command { public void setDeviceId(Long deviceId) { this.deviceId = deviceId; } - + public String getPoolUuid() { return poolUuid; } - + public void setPoolUuid(String poolUuid) { this.poolUuid = poolUuid; } - + public String getChainInfo() { return chainInfo; } diff --git a/api/src/com/cloud/agent/api/BackupSnapshotAnswer.java b/api/src/com/cloud/agent/api/BackupSnapshotAnswer.java index 707092fff07..9e35db66f57 100644 --- a/api/src/com/cloud/agent/api/BackupSnapshotAnswer.java +++ b/api/src/com/cloud/agent/api/BackupSnapshotAnswer.java @@ -20,11 +20,11 @@ package com.cloud.agent.api; public class BackupSnapshotAnswer extends Answer { private String backupSnapshotName; private boolean full; - + protected BackupSnapshotAnswer() { - + } - + public BackupSnapshotAnswer(BackupSnapshotCommand cmd, boolean success, String result, String backupSnapshotName, boolean full) { super(cmd, success, result); this.backupSnapshotName = backupSnapshotName; @@ -37,7 +37,7 @@ public class BackupSnapshotAnswer extends Answer { public String getBackupSnapshotName() { return backupSnapshotName; } - + public boolean isFull() { return full; } diff --git a/api/src/com/cloud/agent/api/BackupSnapshotCommand.java b/api/src/com/cloud/agent/api/BackupSnapshotCommand.java index 9476d7d7065..f6c02337e8d 100644 --- a/api/src/com/cloud/agent/api/BackupSnapshotCommand.java +++ b/api/src/com/cloud/agent/api/BackupSnapshotCommand.java @@ -22,7 +22,7 @@ import com.cloud.agent.api.to.SwiftTO; import com.cloud.storage.StoragePool; /** - * This currently assumes that both primary and secondary storage are mounted on the XenServer. + * This currently assumes that both primary and secondary storage are mounted on the XenServer. */ public class BackupSnapshotCommand extends SnapshotCommand { private String prevSnapshotUuid; @@ -35,18 +35,18 @@ public class BackupSnapshotCommand extends SnapshotCommand { StorageFilerTO pool; protected BackupSnapshotCommand() { - + } - + /** * @param primaryStoragePoolNameLabel The UUID of the primary storage Pool * @param secondaryStoragePoolURL This is what shows up in the UI when you click on Secondary storage. * @param snapshotUuid The UUID of the snapshot which is going to be backed up * @param prevSnapshotUuid The UUID of the previous snapshot for this volume. This will be destroyed on the primary storage. * @param prevBackupUuid This is the UUID of the vhd file which was last backed up on secondary storage. - * @param firstBackupUuid This is the backup of the first ever snapshot taken by the volume. + * @param firstBackupUuid This is the backup of the first ever snapshot taken by the volume. * @param isFirstSnapshotOfRootVolume true if this is the first snapshot of a root volume. Set the parent of the backup to null. - * @param isVolumeInactive True if the volume belongs to a VM that is not running or is detached. + * @param isVolumeInactive True if the volume belongs to a VM that is not running or is detached. */ public BackupSnapshotCommand(String primaryStoragePoolNameLabel, String secondaryStoragePoolURL, @@ -62,7 +62,7 @@ public class BackupSnapshotCommand extends SnapshotCommand { String prevBackupUuid, boolean isVolumeInactive, String vmName, - int wait) + int wait) { super(primaryStoragePoolNameLabel, secondaryStoragePoolURL, snapshotUuid, snapshotName, dcId, accountId, volumeId); this.snapshotId = snapshotId; @@ -74,7 +74,7 @@ public class BackupSnapshotCommand extends SnapshotCommand { setVolumePath(volumePath); setWait(wait); } - + public String getPrevSnapshotUuid() { return prevSnapshotUuid; } @@ -82,11 +82,11 @@ public class BackupSnapshotCommand extends SnapshotCommand { public String getPrevBackupUuid() { return prevBackupUuid; } - + public boolean isVolumeInactive() { return isVolumeInactive; } - + public String getVmName() { return vmName; } @@ -106,4 +106,4 @@ public class BackupSnapshotCommand extends SnapshotCommand { public StorageFilerTO getPool() { return pool; } -} \ No newline at end of file +} diff --git a/api/src/com/cloud/agent/api/CancelCommand.java b/api/src/com/cloud/agent/api/CancelCommand.java index 76382736148..0692055ae5a 100644 --- a/api/src/com/cloud/agent/api/CancelCommand.java +++ b/api/src/com/cloud/agent/api/CancelCommand.java @@ -21,19 +21,19 @@ package com.cloud.agent.api; public class CancelCommand extends Command { protected long sequence; protected String reason; - + protected CancelCommand() { } - + public CancelCommand(long sequence, String reason) { this.sequence = sequence; this.reason = reason; } - + public long getSequence() { return sequence; } - + public String getReason() { return reason; } diff --git a/api/src/com/cloud/agent/api/ChangeAgentAnswer.java b/api/src/com/cloud/agent/api/ChangeAgentAnswer.java index 4b3f103a8e2..537eabef2b0 100644 --- a/api/src/com/cloud/agent/api/ChangeAgentAnswer.java +++ b/api/src/com/cloud/agent/api/ChangeAgentAnswer.java @@ -19,7 +19,7 @@ package com.cloud.agent.api; public class ChangeAgentAnswer extends Answer { protected ChangeAgentAnswer() { } - + public ChangeAgentAnswer(ChangeAgentCommand cmd, boolean result) { super(cmd, result, null); } diff --git a/api/src/com/cloud/agent/api/ChangeAgentCommand.java b/api/src/com/cloud/agent/api/ChangeAgentCommand.java index 1b7f8c8507c..abdb60a619e 100644 --- a/api/src/com/cloud/agent/api/ChangeAgentCommand.java +++ b/api/src/com/cloud/agent/api/ChangeAgentCommand.java @@ -21,19 +21,19 @@ import com.cloud.host.Status.Event; public class ChangeAgentCommand extends Command { long agentId; Event event; - + protected ChangeAgentCommand() { } - + public ChangeAgentCommand(long agentId, Event event) { this.agentId = agentId; this.event = event; } - + public long getAgentId() { return agentId; } - + public Event getEvent() { return event; } diff --git a/api/src/com/cloud/agent/api/CheckHealthCommand.java b/api/src/com/cloud/agent/api/CheckHealthCommand.java index 5298f5a76c8..ff4227678a9 100644 --- a/api/src/com/cloud/agent/api/CheckHealthCommand.java +++ b/api/src/com/cloud/agent/api/CheckHealthCommand.java @@ -22,7 +22,7 @@ public class CheckHealthCommand extends Command { setWait(50); } - + @Override public boolean executeInSequence() { return false; diff --git a/api/src/com/cloud/agent/api/CheckNetworkAnswer.java b/api/src/com/cloud/agent/api/CheckNetworkAnswer.java index 2188fa632d9..52825fd1140 100644 --- a/api/src/com/cloud/agent/api/CheckNetworkAnswer.java +++ b/api/src/com/cloud/agent/api/CheckNetworkAnswer.java @@ -20,7 +20,7 @@ public class CheckNetworkAnswer extends Answer { // indicate if agent reconnect is needed after setupNetworkNames command private boolean _reconnect; public CheckNetworkAnswer() {} - + public CheckNetworkAnswer(CheckNetworkCommand cmd, boolean result, String details, boolean reconnect) { super(cmd, result, details); @@ -34,5 +34,5 @@ public class CheckNetworkAnswer extends Answer { public boolean needReconnect() { return _reconnect; } - + } diff --git a/api/src/com/cloud/agent/api/CheckOnHostAnswer.java b/api/src/com/cloud/agent/api/CheckOnHostAnswer.java index 2a053fdad1b..e5325e3e9dd 100644 --- a/api/src/com/cloud/agent/api/CheckOnHostAnswer.java +++ b/api/src/com/cloud/agent/api/CheckOnHostAnswer.java @@ -19,10 +19,10 @@ package com.cloud.agent.api; public class CheckOnHostAnswer extends Answer { boolean determined; boolean alive; - + protected CheckOnHostAnswer() { } - + public CheckOnHostAnswer(CheckOnHostCommand cmd, Boolean alive, String details) { super(cmd, true, details); if (alive == null) { @@ -32,7 +32,7 @@ public class CheckOnHostAnswer extends Answer { this.alive = alive; } } - + public CheckOnHostAnswer(CheckOnHostCommand cmd, String details) { super(cmd, false, details); } diff --git a/api/src/com/cloud/agent/api/CheckOnHostCommand.java b/api/src/com/cloud/agent/api/CheckOnHostCommand.java index 3aadebd464d..596a53299a8 100644 --- a/api/src/com/cloud/agent/api/CheckOnHostCommand.java +++ b/api/src/com/cloud/agent/api/CheckOnHostCommand.java @@ -24,17 +24,17 @@ public class CheckOnHostCommand extends Command { protected CheckOnHostCommand() { } - - + + public CheckOnHostCommand(Host host) { this.host = new HostTO(host); setWait(20); } - + public HostTO getHost() { return host; } - + @Override public boolean executeInSequence() { return false; diff --git a/api/src/com/cloud/agent/api/CheckRouterAnswer.java b/api/src/com/cloud/agent/api/CheckRouterAnswer.java index 7240ba10cd5..da8189f552b 100644 --- a/api/src/com/cloud/agent/api/CheckRouterAnswer.java +++ b/api/src/com/cloud/agent/api/CheckRouterAnswer.java @@ -23,10 +23,10 @@ public class CheckRouterAnswer extends Answer { public static final String ROUTER_IP = "router.ip"; RedundantState state; boolean isBumped; - + protected CheckRouterAnswer() { } - + public CheckRouterAnswer(CheckRouterCommand cmd, String details, boolean parse) { super(cmd, true, details); if (parse) { @@ -35,7 +35,7 @@ public class CheckRouterAnswer extends Answer { } } } - + public CheckRouterAnswer(CheckRouterCommand cmd, String details) { super(cmd, false, details); } @@ -61,11 +61,11 @@ public class CheckRouterAnswer extends Answer { } return true; } - + public void setState(RedundantState state) { this.state = state; } - + public RedundantState getState() { return state; } @@ -73,9 +73,9 @@ public class CheckRouterAnswer extends Answer { public boolean isBumped() { return isBumped; } - + public void setIsBumped(boolean isBumped) { this.isBumped = isBumped; } - + } diff --git a/api/src/com/cloud/agent/api/CheckS2SVpnConnectionsAnswer.java b/api/src/com/cloud/agent/api/CheckS2SVpnConnectionsAnswer.java index ef3be811870..0e9db96fb36 100644 --- a/api/src/com/cloud/agent/api/CheckS2SVpnConnectionsAnswer.java +++ b/api/src/com/cloud/agent/api/CheckS2SVpnConnectionsAnswer.java @@ -5,7 +5,7 @@ // 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, @@ -23,12 +23,12 @@ public class CheckS2SVpnConnectionsAnswer extends Answer { Map ipToConnected; Map ipToDetail; String details; - + protected CheckS2SVpnConnectionsAnswer() { ipToConnected = new HashMap(); ipToDetail = new HashMap(); } - + public CheckS2SVpnConnectionsAnswer(CheckS2SVpnConnectionsCommand cmd, boolean result, String details) { super(cmd, result, details); ipToConnected = new HashMap(); @@ -38,7 +38,7 @@ public class CheckS2SVpnConnectionsAnswer extends Answer { parseDetails(details); } } - + protected void parseDetails(String details) { String[] lines = details.split("&"); for (String line : lines) { @@ -54,14 +54,14 @@ public class CheckS2SVpnConnectionsAnswer extends Answer { ipToDetail.put(ip, detail); } } - + public boolean isConnected(String ip) { if (this.getResult()) { return ipToConnected.get(ip); } return false; } - + public String getDetail(String ip) { if (this.getResult()) { return ipToDetail.get(ip); diff --git a/api/src/com/cloud/agent/api/CheckS2SVpnConnectionsCommand.java b/api/src/com/cloud/agent/api/CheckS2SVpnConnectionsCommand.java index a736eab35ea..9cfb53b0828 100644 --- a/api/src/com/cloud/agent/api/CheckS2SVpnConnectionsCommand.java +++ b/api/src/com/cloud/agent/api/CheckS2SVpnConnectionsCommand.java @@ -5,7 +5,7 @@ // 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, @@ -22,17 +22,17 @@ import com.cloud.agent.api.routing.NetworkElementCommand; public class CheckS2SVpnConnectionsCommand extends NetworkElementCommand { List vpnIps; - + @Override public boolean executeInSequence() { return true; } - + public CheckS2SVpnConnectionsCommand(List vpnIps) { super(); this.vpnIps = vpnIps; } - + public List getVpnIps() { return vpnIps; } diff --git a/api/src/com/cloud/agent/api/CheckStateAnswer.java b/api/src/com/cloud/agent/api/CheckStateAnswer.java index 4864e390201..bf8ae0f330c 100755 --- a/api/src/com/cloud/agent/api/CheckStateAnswer.java +++ b/api/src/com/cloud/agent/api/CheckStateAnswer.java @@ -28,17 +28,17 @@ public class CheckStateAnswer extends Answer { public CheckStateAnswer(CheckStateCommand cmd, State state) { this(cmd, state, null); } - + public CheckStateAnswer(CheckStateCommand cmd, String details) { super(cmd, false, details); this.state = null; } - + public CheckStateAnswer(CheckStateCommand cmd, State state, String details) { super(cmd, true, details); this.state = state; } - + public State getState() { return state; } diff --git a/api/src/com/cloud/agent/api/CheckStateCommand.java b/api/src/com/cloud/agent/api/CheckStateCommand.java index 31c341db448..89fc7731f01 100755 --- a/api/src/com/cloud/agent/api/CheckStateCommand.java +++ b/api/src/com/cloud/agent/api/CheckStateCommand.java @@ -17,7 +17,7 @@ package com.cloud.agent.api; /** - * + * * */ public class CheckStateCommand extends Command { @@ -28,12 +28,12 @@ public class CheckStateCommand extends Command { public CheckStateCommand(String vmName) { this.vmName = vmName; } - + @Override public boolean executeInSequence() { return true; } - + public String getVmName() { return vmName; } diff --git a/api/src/com/cloud/agent/api/CheckVirtualMachineAnswer.java b/api/src/com/cloud/agent/api/CheckVirtualMachineAnswer.java index 555b0ff79ed..3f0ffdbcea1 100644 --- a/api/src/com/cloud/agent/api/CheckVirtualMachineAnswer.java +++ b/api/src/com/cloud/agent/api/CheckVirtualMachineAnswer.java @@ -19,33 +19,33 @@ package com.cloud.agent.api; import com.cloud.vm.VirtualMachine.State; public class CheckVirtualMachineAnswer extends Answer { - + Integer vncPort; State state; - - + + protected CheckVirtualMachineAnswer() { } - + public CheckVirtualMachineAnswer(CheckVirtualMachineCommand cmd, State state, Integer vncPort, String detail) { super(cmd, true, detail); this.state = state; this.vncPort = vncPort; } - + public CheckVirtualMachineAnswer(CheckVirtualMachineCommand cmd, State state, Integer vncPort) { this(cmd, state, vncPort, null); } - + public CheckVirtualMachineAnswer(CheckVirtualMachineCommand cmd, String detail) { super(cmd, false, detail); } - + public Integer getVncPort() { return vncPort; } - + public State getState() { return state; } diff --git a/api/src/com/cloud/agent/api/CheckVirtualMachineCommand.java b/api/src/com/cloud/agent/api/CheckVirtualMachineCommand.java index 9e63a935af1..62f4420a586 100644 --- a/api/src/com/cloud/agent/api/CheckVirtualMachineCommand.java +++ b/api/src/com/cloud/agent/api/CheckVirtualMachineCommand.java @@ -17,18 +17,18 @@ package com.cloud.agent.api; public class CheckVirtualMachineCommand extends Command { - + private String vmName; - + protected CheckVirtualMachineCommand() { - + } - + public CheckVirtualMachineCommand(String vmName) { this.vmName = vmName; setWait(20); } - + public String getVmName() { return vmName; } diff --git a/api/src/com/cloud/agent/api/CleanupNetworkRulesCmd.java b/api/src/com/cloud/agent/api/CleanupNetworkRulesCmd.java index 6302443b011..8b5172dfe2d 100644 --- a/api/src/com/cloud/agent/api/CleanupNetworkRulesCmd.java +++ b/api/src/com/cloud/agent/api/CleanupNetworkRulesCmd.java @@ -20,22 +20,22 @@ package com.cloud.agent.api; public class CleanupNetworkRulesCmd extends Command implements CronCommand { private int interval = 10*60; - + @Override public boolean executeInSequence() { return false; } - - + + public CleanupNetworkRulesCmd(int intervalSecs) { super(); interval = intervalSecs; } - + public CleanupNetworkRulesCmd() { - + } diff --git a/api/src/com/cloud/agent/api/CleanupSnapshotBackupCommand.java b/api/src/com/cloud/agent/api/CleanupSnapshotBackupCommand.java index aa85c3d2ec7..ae65a529c52 100644 --- a/api/src/com/cloud/agent/api/CleanupSnapshotBackupCommand.java +++ b/api/src/com/cloud/agent/api/CleanupSnapshotBackupCommand.java @@ -26,20 +26,20 @@ public class CleanupSnapshotBackupCommand extends Command { private List validBackupUUIDs; protected CleanupSnapshotBackupCommand() { - + } - - /* - * @param secondaryStoragePoolURL This is what shows up in the UI when you click on Secondary storage. + + /* + * @param secondaryStoragePoolURL This is what shows up in the UI when you click on Secondary storage. * In the code, it is present as: In the vmops.host_details table, there is a field mount.parent. This is the value of that field - * If you have better ideas on how to get it, you are welcome. - * @param validBackupUUID The VHD which are valid + * If you have better ideas on how to get it, you are welcome. + * @param validBackupUUID The VHD which are valid */ public CleanupSnapshotBackupCommand(String secondaryStoragePoolURL, Long dcId, Long accountId, Long volumeId, - List validBackupUUIDs) + List validBackupUUIDs) { this.secondaryStoragePoolURL = secondaryStoragePoolURL; this.dcId = dcId; @@ -67,9 +67,9 @@ public class CleanupSnapshotBackupCommand extends Command { public List getValidBackupUUIDs() { return validBackupUUIDs; } - + @Override public boolean executeInSequence() { return false; } -} \ No newline at end of file +} diff --git a/api/src/com/cloud/agent/api/ClusterSyncAnswer.java b/api/src/com/cloud/agent/api/ClusterSyncAnswer.java index ea83109fbcb..99fee2a9dd1 100644 --- a/api/src/com/cloud/agent/api/ClusterSyncAnswer.java +++ b/api/src/com/cloud/agent/api/ClusterSyncAnswer.java @@ -25,31 +25,31 @@ public class ClusterSyncAnswer extends Answer { private long _clusterId; private HashMap> _newStates; private boolean _isExecuted=false; - + // this is here because a cron command answer is being sent twice // AgentAttache.processAnswers // AgentManagerImpl.notifyAnswersToMonitors public boolean isExceuted(){ return _isExecuted; } - + public void setExecuted(){ _isExecuted = true; } - + public ClusterSyncAnswer(long clusterId, HashMap> newStates){ _clusterId = clusterId; _newStates = newStates; result = true; } - + public long getClusterId() { return _clusterId; } - + public HashMap> getNewStates() { return _newStates; - } + } -} \ No newline at end of file +} diff --git a/api/src/com/cloud/agent/api/ClusterSyncCommand.java b/api/src/com/cloud/agent/api/ClusterSyncCommand.java index e3a0da57669..17dbbd8dd7b 100644 --- a/api/src/com/cloud/agent/api/ClusterSyncCommand.java +++ b/api/src/com/cloud/agent/api/ClusterSyncCommand.java @@ -21,10 +21,10 @@ public class ClusterSyncCommand extends Command implements CronCommand { int _interval; long _clusterId; - + public ClusterSyncCommand() { } - + public ClusterSyncCommand(int interval, long clusterId){ _interval = interval; _clusterId = clusterId; @@ -34,7 +34,7 @@ public class ClusterSyncCommand extends Command implements CronCommand { public int getInterval() { return _interval; } - + public long getClusterId() { return _clusterId; } @@ -43,5 +43,5 @@ public class ClusterSyncCommand extends Command implements CronCommand { public boolean executeInSequence() { return false; } - -} \ No newline at end of file + +} diff --git a/api/src/com/cloud/agent/api/Command.java b/api/src/com/cloud/agent/api/Command.java index 4c3810ef2dd..9cd67495e04 100755 --- a/api/src/com/cloud/agent/api/Command.java +++ b/api/src/com/cloud/agent/api/Command.java @@ -23,9 +23,9 @@ import com.cloud.agent.api.LogLevel.Log4jLevel; /** * implemented by classes that extends the Command class. Command specifies - * + * */ -public abstract class Command { +public abstract class Command { // allow command to carry over hypervisor or other environment related context info @LogLevel(Log4jLevel.Trace) @@ -63,7 +63,7 @@ public abstract class Command { public String getContextParam(String name) { return contextMap.get(name); } - + public boolean allowCaching() { return true; } diff --git a/api/src/com/cloud/agent/api/ComputeChecksumCommand.java b/api/src/com/cloud/agent/api/ComputeChecksumCommand.java index f0771a89de4..a2c88c440a8 100755 --- a/api/src/com/cloud/agent/api/ComputeChecksumCommand.java +++ b/api/src/com/cloud/agent/api/ComputeChecksumCommand.java @@ -26,12 +26,12 @@ public class ComputeChecksumCommand extends ssCommand { public ComputeChecksumCommand() { super(); } - + public ComputeChecksumCommand(String secUrl, String templatePath) { super(secUrl); this.templatePath = templatePath; - } - + } + public String getTemplatePath() { return templatePath; } diff --git a/api/src/com/cloud/agent/api/ConsoleAccessAuthenticationAnswer.java b/api/src/com/cloud/agent/api/ConsoleAccessAuthenticationAnswer.java index 53a975f4874..9f50a2f3b53 100644 --- a/api/src/com/cloud/agent/api/ConsoleAccessAuthenticationAnswer.java +++ b/api/src/com/cloud/agent/api/ConsoleAccessAuthenticationAnswer.java @@ -14,75 +14,75 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.agent.api; - -public class ConsoleAccessAuthenticationAnswer extends AgentControlAnswer { - +package com.cloud.agent.api; + +public class ConsoleAccessAuthenticationAnswer extends AgentControlAnswer { + private boolean _success; - + private boolean _isReauthenticating; private String _host; private int _port; - + private String _tunnelUrl; private String _tunnelSession; - + public ConsoleAccessAuthenticationAnswer() { _success = false; _isReauthenticating = false; - _port = 0; - } - - public ConsoleAccessAuthenticationAnswer(Command cmd, boolean success) { - super(cmd); - _success = success; - } - - public boolean succeeded() { - return _success; + _port = 0; } - + + public ConsoleAccessAuthenticationAnswer(Command cmd, boolean success) { + super(cmd); + _success = success; + } + + public boolean succeeded() { + return _success; + } + public void setSuccess(boolean value) { _success = value; } - + public boolean isReauthenticating() { return _isReauthenticating; } - + public void setReauthenticating(boolean value) { _isReauthenticating = value; } - + public String getHost() { return _host; } - + public void setHost(String host) { _host = host; } - + public int getPort() { return _port; } - + public void setPort(int port) { _port = port; } - + public String getTunnelUrl() { return _tunnelUrl; } - + public void setTunnelUrl(String tunnelUrl) { - _tunnelUrl = tunnelUrl; + _tunnelUrl = tunnelUrl; } - + public String getTunnelSession() { return _tunnelSession; } - + public void setTunnelSession(String tunnelSession) { _tunnelSession = tunnelSession; - } -} + } +} diff --git a/api/src/com/cloud/agent/api/ConsoleAccessAuthenticationCommand.java b/api/src/com/cloud/agent/api/ConsoleAccessAuthenticationCommand.java index acbc181c5b1..bd8093c7e7b 100644 --- a/api/src/com/cloud/agent/api/ConsoleAccessAuthenticationCommand.java +++ b/api/src/com/cloud/agent/api/ConsoleAccessAuthenticationCommand.java @@ -17,19 +17,19 @@ package com.cloud.agent.api; public class ConsoleAccessAuthenticationCommand extends AgentControlCommand { - + private String _host; private String _port; private String _vmId; private String _sid; private String _ticket; - - private boolean _isReauthenticating; - + + private boolean _isReauthenticating; + public ConsoleAccessAuthenticationCommand() { - _isReauthenticating = false; - } - + _isReauthenticating = false; + } + public ConsoleAccessAuthenticationCommand(String host, String port, String vmId, String sid, String ticket) { _host = host; _port = port; @@ -37,32 +37,32 @@ public class ConsoleAccessAuthenticationCommand extends AgentControlCommand { _sid = sid; _ticket = ticket; } - + public String getHost() { return _host; } - + public String getPort() { return _port; } - + public String getVmId() { return _vmId; } - + public String getSid() { return _sid; } - + public String getTicket() { return _ticket; } - + public boolean isReauthenticating() { return _isReauthenticating; } - + public void setReauthenticating(boolean value) { _isReauthenticating = value; - } -} + } +} diff --git a/api/src/com/cloud/agent/api/ConsoleProxyLoadReportCommand.java b/api/src/com/cloud/agent/api/ConsoleProxyLoadReportCommand.java index d4b101ae0d1..ebb06b64dc6 100644 --- a/api/src/com/cloud/agent/api/ConsoleProxyLoadReportCommand.java +++ b/api/src/com/cloud/agent/api/ConsoleProxyLoadReportCommand.java @@ -17,22 +17,22 @@ package com.cloud.agent.api; public class ConsoleProxyLoadReportCommand extends AgentControlCommand { - + private long _proxyVmId; private String _loadInfo; - + public ConsoleProxyLoadReportCommand() { } - + public ConsoleProxyLoadReportCommand(long proxyVmId, String loadInfo) { _proxyVmId = proxyVmId; _loadInfo = loadInfo; } - + public long getProxyVmId() { return _proxyVmId; } - + public String getLoadInfo() { return _loadInfo; } diff --git a/api/src/com/cloud/agent/api/CreatePrivateTemplateFromSnapshotCommand.java b/api/src/com/cloud/agent/api/CreatePrivateTemplateFromSnapshotCommand.java index bf6f2604cdd..504198c28cf 100644 --- a/api/src/com/cloud/agent/api/CreatePrivateTemplateFromSnapshotCommand.java +++ b/api/src/com/cloud/agent/api/CreatePrivateTemplateFromSnapshotCommand.java @@ -17,28 +17,28 @@ package com.cloud.agent.api; /** - * This currently assumes that both primary and secondary storage are mounted on the XenServer. + * This currently assumes that both primary and secondary storage are mounted on the XenServer. */ public class CreatePrivateTemplateFromSnapshotCommand extends SnapshotCommand { private String origTemplateInstallPath; private Long newTemplateId; private String templateName; - + protected CreatePrivateTemplateFromSnapshotCommand() { - + } - + /** * Given the UUID of a backed up snapshot VHD file on the secondary storage, the execute of this command does * 1) Get the parent chain of this VHD all the way up to the root, say VHDList * 2) Copy all the files in the VHDlist to some temp location * 3) Coalesce all the VHDs to one VHD which contains all the data of the volume. This invokes the DeletePreviousBackupCommand for each VHD * 4) Rename the UUID of this VHD - * @param secondaryStoragePoolURL This is what shows up in the UI when you click on Secondary storage. + * @param secondaryStoragePoolURL This is what shows up in the UI when you click on Secondary storage. * In the code, it is present as: In the vmops.host_details table, there is a field mount.parent. This is the value of that field * If you have better ideas on how to get it, you are welcome. * It may not be the UUID of the base copy of the snapshot, if no data was written since last snapshot. - * @param origTemplateInstallPath The install path of the original template VHD on the secondary + * @param origTemplateInstallPath The install path of the original template VHD on the secondary */ public CreatePrivateTemplateFromSnapshotCommand(String primaryStoragePoolNameLabel, String secondaryStoragePoolURL, @@ -50,7 +50,7 @@ public class CreatePrivateTemplateFromSnapshotCommand extends SnapshotCommand { String origTemplateInstallPath, Long newTemplateId, String templateName, - int wait) + int wait) { super(primaryStoragePoolNameLabel, secondaryStoragePoolURL, backedUpSnapshotUuid, backedUpSnapshotName, dcId, accountId, volumeId); this.origTemplateInstallPath = origTemplateInstallPath; @@ -65,7 +65,7 @@ public class CreatePrivateTemplateFromSnapshotCommand extends SnapshotCommand { public String getOrigTemplateInstallPath() { return origTemplateInstallPath; } - + public Long getNewTemplateId() { return newTemplateId; } @@ -76,4 +76,4 @@ public class CreatePrivateTemplateFromSnapshotCommand extends SnapshotCommand { public String getTemplateName() { return templateName; } -} \ No newline at end of file +} diff --git a/api/src/com/cloud/agent/api/CreateStoragePoolCommand.java b/api/src/com/cloud/agent/api/CreateStoragePoolCommand.java index ecba6c232e2..7a4d768e5cb 100644 --- a/api/src/com/cloud/agent/api/CreateStoragePoolCommand.java +++ b/api/src/com/cloud/agent/api/CreateStoragePoolCommand.java @@ -20,10 +20,10 @@ import com.cloud.storage.StoragePool; public class CreateStoragePoolCommand extends ModifyStoragePoolCommand { - + public CreateStoragePoolCommand() { } - + public CreateStoragePoolCommand(boolean add, StoragePool pool) { super(add, pool); } diff --git a/api/src/com/cloud/agent/api/CreateVolumeFromSnapshotAnswer.java b/api/src/com/cloud/agent/api/CreateVolumeFromSnapshotAnswer.java index a57d6fa3c50..2f7cd9446e8 100644 --- a/api/src/com/cloud/agent/api/CreateVolumeFromSnapshotAnswer.java +++ b/api/src/com/cloud/agent/api/CreateVolumeFromSnapshotAnswer.java @@ -19,11 +19,11 @@ package com.cloud.agent.api; public class CreateVolumeFromSnapshotAnswer extends Answer { private String vdiUUID; - + protected CreateVolumeFromSnapshotAnswer() { - + } - + public CreateVolumeFromSnapshotAnswer(CreateVolumeFromSnapshotCommand cmd, boolean success, String result, String vdiUUID) { super(cmd, success, result); this.vdiUUID = vdiUUID; diff --git a/api/src/com/cloud/agent/api/CreateVolumeFromSnapshotCommand.java b/api/src/com/cloud/agent/api/CreateVolumeFromSnapshotCommand.java index f0063299415..955c81abc97 100644 --- a/api/src/com/cloud/agent/api/CreateVolumeFromSnapshotCommand.java +++ b/api/src/com/cloud/agent/api/CreateVolumeFromSnapshotCommand.java @@ -17,14 +17,14 @@ package com.cloud.agent.api; /** - * This currently assumes that both primary and secondary storage are mounted on the XenServer. + * This currently assumes that both primary and secondary storage are mounted on the XenServer. */ public class CreateVolumeFromSnapshotCommand extends SnapshotCommand { - + protected CreateVolumeFromSnapshotCommand() { - + } - + /** * Given the UUID of a backed up snapshot VHD file on the secondary storage, the execute of this command does * 1) Get the parent chain of this VHD all the way up to the root, say VHDList @@ -33,11 +33,11 @@ public class CreateVolumeFromSnapshotCommand extends SnapshotCommand { * 4) Rename the UUID of this VHD * 5) Move this VHD to primary storage * @param primaryStoragePoolNameLabel The primary storage Pool - * @param secondaryStoragePoolURL This is what shows up in the UI when you click on Secondary storage. + * @param secondaryStoragePoolURL This is what shows up in the UI when you click on Secondary storage. * In the code, it is present as: In the vmops.host_details table, there is a field mount.parent. This is the value of that field * If you have better ideas on how to get it, you are welcome. * It may not be the UUID of the base copy of the snapshot, if no data was written since last snapshot. - * @param templatePath The install path of the template VHD on the secondary, if this a root volume + * @param templatePath The install path of the template VHD on the secondary, if this a root volume */ public CreateVolumeFromSnapshotCommand(String primaryStoragePoolNameLabel, String secondaryStoragePoolURL, @@ -51,4 +51,4 @@ public class CreateVolumeFromSnapshotCommand extends SnapshotCommand { super(primaryStoragePoolNameLabel, secondaryStoragePoolURL, backedUpSnapshotUuid, backedUpSnapshotName, dcId, accountId, volumeId); setWait(wait); } -} \ No newline at end of file +} diff --git a/api/src/com/cloud/agent/api/DeleteObjectFromSwiftCommand.java b/api/src/com/cloud/agent/api/DeleteObjectFromSwiftCommand.java index 01de89163a8..3d62c507b89 100644 --- a/api/src/com/cloud/agent/api/DeleteObjectFromSwiftCommand.java +++ b/api/src/com/cloud/agent/api/DeleteObjectFromSwiftCommand.java @@ -20,8 +20,8 @@ import com.cloud.agent.api.LogLevel.Log4jLevel; import com.cloud.agent.api.to.SwiftTO; /** - * - * + * + * */ public class DeleteObjectFromSwiftCommand extends Command { @@ -31,9 +31,9 @@ public class DeleteObjectFromSwiftCommand extends Command { private String object; protected DeleteObjectFromSwiftCommand() { - + } - + public DeleteObjectFromSwiftCommand(SwiftTO swift, String container, String object) { this.swift = swift; this.container = container; @@ -58,4 +58,4 @@ public class DeleteObjectFromSwiftCommand extends Command { return true; } -} \ No newline at end of file +} diff --git a/api/src/com/cloud/agent/api/DeleteSnapshotBackupAnswer.java b/api/src/com/cloud/agent/api/DeleteSnapshotBackupAnswer.java index b458aa0edb0..9a895d8471a 100644 --- a/api/src/com/cloud/agent/api/DeleteSnapshotBackupAnswer.java +++ b/api/src/com/cloud/agent/api/DeleteSnapshotBackupAnswer.java @@ -18,15 +18,15 @@ package com.cloud.agent.api; public class DeleteSnapshotBackupAnswer extends Answer { - + protected DeleteSnapshotBackupAnswer() { - + } public DeleteSnapshotBackupAnswer(DeleteSnapshotBackupCommand cmd, boolean success, String details) { super(cmd, success, details); } - - - + + + } diff --git a/api/src/com/cloud/agent/api/DeleteSnapshotBackupCommand.java b/api/src/com/cloud/agent/api/DeleteSnapshotBackupCommand.java index 3fa8c2b7eb4..6ea19458212 100644 --- a/api/src/com/cloud/agent/api/DeleteSnapshotBackupCommand.java +++ b/api/src/com/cloud/agent/api/DeleteSnapshotBackupCommand.java @@ -21,7 +21,7 @@ import com.cloud.agent.api.to.SwiftTO; /** * This command encapsulates a primitive operation which enables coalescing the backed up VHD snapshots on the secondary server - * This currently assumes that the secondary storage are mounted on the XenServer. + * This currently assumes that the secondary storage are mounted on the XenServer. */ public class DeleteSnapshotBackupCommand extends SnapshotCommand { @LogLevel(Log4jLevel.Off) @@ -46,31 +46,31 @@ public class DeleteSnapshotBackupCommand extends SnapshotCommand { protected DeleteSnapshotBackupCommand() { } - + /** * Given 2 VHD files on the secondary storage which are linked in a parent chain as follows: * backupUUID = parent(childUUID) - * It gets another VHD + * It gets another VHD * previousBackupVHD = parent(backupUUID) - * + * * And * 1) it coalesces backupUuid into its parent. * 2) It deletes the VHD file corresponding to backupUuid * 3) It sets the parent VHD of childUUID to that of previousBackupUuid - * + * * It takes care of the cases when * 1) childUUID is null. - Step 3 is not done. - * 2) previousBackupUUID is null + * 2) previousBackupUUID is null * - Merge childUUID into its parent backupUUID * - Set the UUID of the resultant VHD to childUUID - * - Essentially we are deleting the oldest VHD file and setting the current oldest VHD to childUUID - * - * @param volumeName The name of the volume whose snapshot was taken (something like i-3-SV-ROOT) - * @param secondaryStoragePoolURL This is what shows up in the UI when you click on Secondary storage. + * - Essentially we are deleting the oldest VHD file and setting the current oldest VHD to childUUID + * + * @param volumeName The name of the volume whose snapshot was taken (something like i-3-SV-ROOT) + * @param secondaryStoragePoolURL This is what shows up in the UI when you click on Secondary storage. * In the code, it is present as: In the vmops.host_details table, there is a field mount.parent. This is the value of that field - * If you have better ideas on how to get it, you are welcome. - * @param backupUUID The VHD which has to be deleted - * @param childUUID The child VHD file of the backup whose parent is reset to its grandparent. + * If you have better ideas on how to get it, you are welcome. + * @param backupUUID The VHD which has to be deleted + * @param childUUID The child VHD file of the backup whose parent is reset to its grandparent. */ public DeleteSnapshotBackupCommand(SwiftTO swift, String secondaryStoragePoolURL, @@ -83,4 +83,4 @@ public class DeleteSnapshotBackupCommand extends SnapshotCommand { setSwift(swift); setAll(all); } -} \ No newline at end of file +} diff --git a/api/src/com/cloud/agent/api/DeleteSnapshotsDirCommand.java b/api/src/com/cloud/agent/api/DeleteSnapshotsDirCommand.java index 6879d2343e8..e2071d7f746 100644 --- a/api/src/com/cloud/agent/api/DeleteSnapshotsDirCommand.java +++ b/api/src/com/cloud/agent/api/DeleteSnapshotsDirCommand.java @@ -18,18 +18,18 @@ package com.cloud.agent.api; /** * This command encapsulates a primitive operation which enables coalescing the backed up VHD snapshots on the secondary server - * This currently assumes that the secondary storage are mounted on the XenServer. + * This currently assumes that the secondary storage are mounted on the XenServer. */ public class DeleteSnapshotsDirCommand extends Command { String secondaryStorageUrl; Long dcId; Long accountId; Long volumeId; - + protected DeleteSnapshotsDirCommand() { - + } - + public DeleteSnapshotsDirCommand(String secondaryStorageUrl, Long dcId, Long accountId, Long volumeId) { @@ -60,4 +60,4 @@ public class DeleteSnapshotsDirCommand extends Command { return volumeId; } -} \ No newline at end of file +} diff --git a/api/src/com/cloud/agent/api/DeleteStoragePoolCommand.java b/api/src/com/cloud/agent/api/DeleteStoragePoolCommand.java index 7fa60adb0fe..4618d59da26 100644 --- a/api/src/com/cloud/agent/api/DeleteStoragePoolCommand.java +++ b/api/src/com/cloud/agent/api/DeleteStoragePoolCommand.java @@ -23,20 +23,20 @@ import com.cloud.agent.api.to.StorageFilerTO; import com.cloud.storage.StoragePool; public class DeleteStoragePoolCommand extends Command { - + StorageFilerTO pool; public static final String LOCAL_PATH_PREFIX="/mnt/"; String localPath; - + public DeleteStoragePoolCommand() { - + } - + public DeleteStoragePoolCommand(StoragePool pool, String localPath) { this.pool = new StorageFilerTO(pool); this.localPath = localPath; } - + public DeleteStoragePoolCommand(StoragePool pool) { this(pool, LOCAL_PATH_PREFIX + File.separator + UUID.nameUUIDFromBytes((pool.getHostAddress() + pool.getPath()).getBytes())); } @@ -48,7 +48,7 @@ public class DeleteStoragePoolCommand extends Command { public void setPool(StoragePool pool) { this.pool = new StorageFilerTO(pool); } - + @Override public boolean executeInSequence() { return false; @@ -57,5 +57,5 @@ public class DeleteStoragePoolCommand extends Command { public String getLocalPath() { return localPath; } - + } diff --git a/api/src/com/cloud/agent/api/FenceAnswer.java b/api/src/com/cloud/agent/api/FenceAnswer.java index 13ee3017660..7af18f5e7b3 100644 --- a/api/src/com/cloud/agent/api/FenceAnswer.java +++ b/api/src/com/cloud/agent/api/FenceAnswer.java @@ -20,15 +20,15 @@ public class FenceAnswer extends Answer { public FenceAnswer() { super(); } - + public FenceAnswer(FenceCommand cmd) { super(cmd, true, null); } - + public FenceAnswer(FenceCommand cmd, String details) { super(cmd, true, details); } - + public FenceAnswer(FenceCommand cmd, boolean result, String details) { super(cmd, result, details); } diff --git a/api/src/com/cloud/agent/api/FenceCommand.java b/api/src/com/cloud/agent/api/FenceCommand.java index 5ba293af1a3..a89194442ab 100644 --- a/api/src/com/cloud/agent/api/FenceCommand.java +++ b/api/src/com/cloud/agent/api/FenceCommand.java @@ -20,16 +20,16 @@ import com.cloud.host.Host; import com.cloud.vm.VirtualMachine; public class FenceCommand extends Command { - + public FenceCommand() { super(); } - + String vmName; String hostGuid; String hostIp; boolean inSeq; - + public FenceCommand(VirtualMachine vm, Host host) { super(); vmName = vm.getInstanceName(); @@ -37,19 +37,19 @@ public class FenceCommand extends Command { hostIp = host.getPrivateIpAddress(); inSeq = false; } - + public void setSeq(boolean inseq) { inSeq = inseq; } - + public String getVmName() { return vmName; } - + public String getHostGuid() { return hostGuid; } - + public String getHostIp() { return hostIp; } diff --git a/api/src/com/cloud/agent/api/GetDomRVersionAnswer.java b/api/src/com/cloud/agent/api/GetDomRVersionAnswer.java index 992b5076db7..7487b57c73c 100644 --- a/api/src/com/cloud/agent/api/GetDomRVersionAnswer.java +++ b/api/src/com/cloud/agent/api/GetDomRVersionAnswer.java @@ -21,24 +21,24 @@ public class GetDomRVersionAnswer extends Answer { public static final String ROUTER_IP = "router.ip"; String templateVersion; String scriptsVersion; - + protected GetDomRVersionAnswer() { } - + public GetDomRVersionAnswer(GetDomRVersionCmd cmd, String details, String templateVersion, String scriptsVersion) { super(cmd, true, details); this.templateVersion = templateVersion; this.scriptsVersion = scriptsVersion; } - + public GetDomRVersionAnswer(GetDomRVersionCmd cmd, String details) { super(cmd, false, details); } - + public String getTemplateVersion() { return this.templateVersion; } - + public String getScriptsVersion() { return this.scriptsVersion; } diff --git a/api/src/com/cloud/agent/api/GetVncPortAnswer.java b/api/src/com/cloud/agent/api/GetVncPortAnswer.java index da464264c5b..5e94a18d3d9 100644 --- a/api/src/com/cloud/agent/api/GetVncPortAnswer.java +++ b/api/src/com/cloud/agent/api/GetVncPortAnswer.java @@ -19,29 +19,29 @@ package com.cloud.agent.api; public class GetVncPortAnswer extends Answer { String address; int port; - + protected GetVncPortAnswer() { } - + public GetVncPortAnswer(GetVncPortCommand cmd, int port) { super(cmd, true, null); this.port = port; } - + public GetVncPortAnswer(GetVncPortCommand cmd, String address, int port) { super(cmd, true, null); this.address = address; this.port = port; } - + public GetVncPortAnswer(GetVncPortCommand cmd, String details) { super(cmd, false, details); } - + public String getAddress() { return address; } - + public int getPort() { return port; } diff --git a/api/src/com/cloud/agent/api/GetVncPortCommand.java b/api/src/com/cloud/agent/api/GetVncPortCommand.java index cff787e595b..06165dce8ff 100644 --- a/api/src/com/cloud/agent/api/GetVncPortCommand.java +++ b/api/src/com/cloud/agent/api/GetVncPortCommand.java @@ -22,21 +22,21 @@ public class GetVncPortCommand extends Command { public GetVncPortCommand() { } - + public GetVncPortCommand(long id, String name) { this.id = id; this.name = name; } - + @Override public boolean executeInSequence() { return false; } - + public String getName() { return name; } - + public long getId() { return id; } diff --git a/api/src/com/cloud/agent/api/HostStatsEntry.java b/api/src/com/cloud/agent/api/HostStatsEntry.java index d34e0d76f5c..0d8cfb2d349 100644 --- a/api/src/com/cloud/agent/api/HostStatsEntry.java +++ b/api/src/com/cloud/agent/api/HostStatsEntry.java @@ -19,7 +19,7 @@ package com.cloud.agent.api; import com.cloud.host.HostStats; public class HostStatsEntry implements HostStats { - + long hostId; String entityType; double cpuUtilization; @@ -27,12 +27,12 @@ public class HostStatsEntry implements HostStats { double networkWriteKBs; double totalMemoryKBs; double freeMemoryKBs; - + public HostStatsEntry() { } - + public HostStatsEntry(long hostId,double cpuUtilization, double networkReadKBs, double networkWriteKBs, String entityType, - double totalMemoryKBs, double freeMemoryKBs, double xapiMemoryUsageKBs, double averageLoad) + double totalMemoryKBs, double freeMemoryKBs, double xapiMemoryUsageKBs, double averageLoad) { this.hostId = hostId; this.entityType = entityType; @@ -47,16 +47,16 @@ public class HostStatsEntry implements HostStats { public double getNetworkReadKBs() { return networkReadKBs; } - + public void setNetworkReadKBs(double networkReadKBs) { this.networkReadKBs = networkReadKBs; } - + @Override public double getNetworkWriteKBs() { return networkWriteKBs; } - + public void setNetworkWriteKBs(double networkWriteKBs) { this.networkWriteKBs = networkWriteKBs; } @@ -65,16 +65,16 @@ public class HostStatsEntry implements HostStats { public String getEntityType(){ return this.entityType; } - + public void setEntityType(String entityType){ this.entityType = entityType; } - + @Override public double getTotalMemoryKBs(){ return this.totalMemoryKBs; } - + public void setTotalMemoryKBs(double totalMemoryKBs){ this.totalMemoryKBs = totalMemoryKBs; } @@ -83,11 +83,11 @@ public class HostStatsEntry implements HostStats { public double getFreeMemoryKBs(){ return this.freeMemoryKBs; } - + public void setFreeMemoryKBs(double freeMemoryKBs){ this.freeMemoryKBs = freeMemoryKBs; } - + @Override public double getCpuUtilization() { return this.cpuUtilization; @@ -106,7 +106,7 @@ public class HostStatsEntry implements HostStats { public HostStats getHostStats() { return this; } - + public void setHostId(long hostId) { this.hostId = hostId; } diff --git a/api/src/com/cloud/agent/api/MaintainAnswer.java b/api/src/com/cloud/agent/api/MaintainAnswer.java index c36286934ee..dcfdab31708 100644 --- a/api/src/com/cloud/agent/api/MaintainAnswer.java +++ b/api/src/com/cloud/agent/api/MaintainAnswer.java @@ -18,28 +18,28 @@ package com.cloud.agent.api; public class MaintainAnswer extends Answer { boolean willMigrate; - + public MaintainAnswer() { } - + public MaintainAnswer(MaintainCommand cmd) { this(cmd, true, null); } - + public MaintainAnswer(MaintainCommand cmd, boolean willMigrate) { this(cmd, true, null); this.willMigrate = willMigrate; } - + public MaintainAnswer(MaintainCommand cmd, String details) { this(cmd, true, details); } - + public MaintainAnswer(MaintainCommand cmd, boolean result, String details) { super(cmd, result, details); this.willMigrate = true; } - + public boolean getMigrate() { return this.willMigrate; } diff --git a/api/src/com/cloud/agent/api/MaintainCommand.java b/api/src/com/cloud/agent/api/MaintainCommand.java index 654476a58b6..2a9b9a5ae7d 100644 --- a/api/src/com/cloud/agent/api/MaintainCommand.java +++ b/api/src/com/cloud/agent/api/MaintainCommand.java @@ -20,7 +20,7 @@ public class MaintainCommand extends Command { public MaintainCommand() { } - + @Override public boolean executeInSequence() { return true; diff --git a/api/src/com/cloud/agent/api/ManageSnapshotAnswer.java b/api/src/com/cloud/agent/api/ManageSnapshotAnswer.java index 6dd757505b1..e490bdf076b 100644 --- a/api/src/com/cloud/agent/api/ManageSnapshotAnswer.java +++ b/api/src/com/cloud/agent/api/ManageSnapshotAnswer.java @@ -20,13 +20,13 @@ package com.cloud.agent.api; public class ManageSnapshotAnswer extends Answer { // For create Snapshot private String _snapshotPath; - + public ManageSnapshotAnswer() {} public ManageSnapshotAnswer(Command cmd, boolean success, String result) { super(cmd, success, result); } - + // For XenServer public ManageSnapshotAnswer(ManageSnapshotCommand cmd, long snapshotId, String snapshotPath, boolean success, String result) { super(cmd, success, result); @@ -36,5 +36,5 @@ public class ManageSnapshotAnswer extends Answer { public String getSnapshotPath() { return _snapshotPath; } - + } diff --git a/api/src/com/cloud/agent/api/ManageSnapshotCommand.java b/api/src/com/cloud/agent/api/ManageSnapshotCommand.java index 9a5f424167c..5effc542c5b 100644 --- a/api/src/com/cloud/agent/api/ManageSnapshotCommand.java +++ b/api/src/com/cloud/agent/api/ManageSnapshotCommand.java @@ -25,9 +25,9 @@ public class ManageSnapshotCommand extends Command { // XXX: Anyway there is something called inheritance in Java public static String CREATE_SNAPSHOT = "-c"; public static String DESTROY_SNAPSHOT = "-d"; - + private String _commandSwitch; - + // Information about the volume that the snapshot is based on private String _volumePath = null; StorageFilerTO _pool; @@ -43,7 +43,7 @@ public class ManageSnapshotCommand extends Command { public ManageSnapshotCommand(long snapshotId, String volumePath, StoragePool pool, String preSnapshotPath ,String snapshotName, String vmName) { _commandSwitch = ManageSnapshotCommand.CREATE_SNAPSHOT; _volumePath = volumePath; - _pool = new StorageFilerTO(pool); + _pool = new StorageFilerTO(pool); _snapshotPath = preSnapshotPath; _snapshotName = snapshotName; _snapshotId = snapshotId; @@ -54,8 +54,8 @@ public class ManageSnapshotCommand extends Command { _commandSwitch = ManageSnapshotCommand.DESTROY_SNAPSHOT; _snapshotPath = snapshotPath; } - - + + @Override public boolean executeInSequence() { return false; @@ -64,15 +64,15 @@ public class ManageSnapshotCommand extends Command { public String getCommandSwitch() { return _commandSwitch; } - + public String getVolumePath() { return _volumePath; } - + public StorageFilerTO getPool() { return _pool; } - + public String getSnapshotPath() { return _snapshotPath; } @@ -84,9 +84,9 @@ public class ManageSnapshotCommand extends Command { public long getSnapshotId() { return _snapshotId; } - + public String getVmName() { return _vmName; } - -} \ No newline at end of file + +} diff --git a/api/src/com/cloud/agent/api/MigrateAnswer.java b/api/src/com/cloud/agent/api/MigrateAnswer.java index 4b5dd19d06f..19d690a2d99 100644 --- a/api/src/com/cloud/agent/api/MigrateAnswer.java +++ b/api/src/com/cloud/agent/api/MigrateAnswer.java @@ -18,15 +18,15 @@ package com.cloud.agent.api; public class MigrateAnswer extends Answer { Integer vncPort = null; - + protected MigrateAnswer() { } - + public MigrateAnswer(MigrateCommand cmd, boolean result, String detail, Integer vncPort) { super(cmd, result, detail); this.vncPort = vncPort; } - + public Integer getVncPort() { return vncPort; } diff --git a/api/src/com/cloud/agent/api/MigrateCommand.java b/api/src/com/cloud/agent/api/MigrateCommand.java index 18a2be19d88..5042b8c1971 100644 --- a/api/src/com/cloud/agent/api/MigrateCommand.java +++ b/api/src/com/cloud/agent/api/MigrateCommand.java @@ -25,29 +25,29 @@ public class MigrateCommand extends Command { protected MigrateCommand() { } - + public MigrateCommand(String vmName, String destIp, boolean isWindows) { this.vmName = vmName; this.destIp = destIp; this.isWindows = isWindows; } - + public boolean isWindows() { return isWindows; } - + public String getDestinationIp() { return destIp; } - + public String getVmName() { return vmName; } - + public void setHostGuid(String guid) { this.hostGuid = guid; } - + public String getHostGuid() { return this.hostGuid; } diff --git a/api/src/com/cloud/agent/api/ModifyStoragePoolAnswer.java b/api/src/com/cloud/agent/api/ModifyStoragePoolAnswer.java index a8ab78dec99..df77985248f 100644 --- a/api/src/com/cloud/agent/api/ModifyStoragePoolAnswer.java +++ b/api/src/com/cloud/agent/api/ModifyStoragePoolAnswer.java @@ -30,13 +30,13 @@ public class ModifyStoragePoolAnswer extends Answer { public ModifyStoragePoolAnswer(ModifyStoragePoolCommand cmd, long capacityBytes, long availableBytes, Map tInfo) { super(cmd); this.result = true; - this.poolInfo = new StoragePoolInfo(null, - cmd.getPool().getHost(), cmd.getPool().getPath(), cmd.getLocalPath(), + this.poolInfo = new StoragePoolInfo(null, + cmd.getPool().getHost(), cmd.getPool().getPath(), cmd.getLocalPath(), cmd.getPool().getType(), capacityBytes, availableBytes ); - + this.templateInfo = tInfo; } - + public StoragePoolInfo getPoolInfo() { return poolInfo; } diff --git a/api/src/com/cloud/agent/api/ModifyStoragePoolCommand.java b/api/src/com/cloud/agent/api/ModifyStoragePoolCommand.java index 04f14e3de8f..8bc956d54d0 100644 --- a/api/src/com/cloud/agent/api/ModifyStoragePoolCommand.java +++ b/api/src/com/cloud/agent/api/ModifyStoragePoolCommand.java @@ -23,25 +23,25 @@ import com.cloud.agent.api.to.StorageFilerTO; import com.cloud.storage.StoragePool; public class ModifyStoragePoolCommand extends Command { - + boolean add; StorageFilerTO pool; String localPath; String [] options; public static final String LOCAL_PATH_PREFIX="/mnt/"; - + public ModifyStoragePoolCommand() { - + } - + public ModifyStoragePoolCommand(boolean add, StoragePool pool, String localPath) { this.add = add; this.pool = new StorageFilerTO(pool); this.localPath = localPath; } - + public ModifyStoragePoolCommand(boolean add, StoragePool pool) { this(add, pool, LOCAL_PATH_PREFIX + File.separator + UUID.nameUUIDFromBytes((pool.getHostAddress() + pool.getPath()).getBytes())); } @@ -53,11 +53,11 @@ public class ModifyStoragePoolCommand extends Command { public void setPool(StoragePool pool) { this.pool = new StorageFilerTO(pool); } - + public boolean getAdd() { return add; } - + @Override public boolean executeInSequence() { return false; @@ -71,5 +71,5 @@ public class ModifyStoragePoolCommand extends Command { this.options = options; } - + } diff --git a/api/src/com/cloud/agent/api/NetworkUsageAnswer.java b/api/src/com/cloud/agent/api/NetworkUsageAnswer.java index 7d5d49b3a71..fd8ebda4d2a 100644 --- a/api/src/com/cloud/agent/api/NetworkUsageAnswer.java +++ b/api/src/com/cloud/agent/api/NetworkUsageAnswer.java @@ -33,7 +33,7 @@ public class NetworkUsageAnswer extends Answer { this.bytesSent = bytesSent; routerName = cmd.getDomRName(); } - + public NetworkUsageAnswer(Command command, Exception e) { super(command, e); } diff --git a/api/src/com/cloud/agent/api/NetworkUsageCommand.java b/api/src/com/cloud/agent/api/NetworkUsageCommand.java index acb23cf61d8..6cbf93b3ef2 100644 --- a/api/src/com/cloud/agent/api/NetworkUsageCommand.java +++ b/api/src/com/cloud/agent/api/NetworkUsageCommand.java @@ -57,7 +57,7 @@ public class NetworkUsageCommand extends Command { this.option = "create"; this.vpcCIDR = vpcCIDR; } - + public NetworkUsageCommand(String privateIP, String domRName, String option, boolean forVpc, String gatewayIP) { this.privateIP = privateIP; @@ -66,7 +66,7 @@ public class NetworkUsageCommand extends Command { this.gatewayIP = gatewayIP; this.option = option; } - + public String getPrivateIP() { return privateIP; } diff --git a/api/src/com/cloud/agent/api/PingAnswer.java b/api/src/com/cloud/agent/api/PingAnswer.java index 388d67db0fb..d9ed89cc5df 100644 --- a/api/src/com/cloud/agent/api/PingAnswer.java +++ b/api/src/com/cloud/agent/api/PingAnswer.java @@ -21,7 +21,7 @@ public class PingAnswer extends Answer { protected PingAnswer() { } - + public PingAnswer(PingCommand cmd) { super(cmd); _command = cmd; diff --git a/api/src/com/cloud/agent/api/PingCommand.java b/api/src/com/cloud/agent/api/PingCommand.java index 3b3ca61685a..8d9681f9fa9 100755 --- a/api/src/com/cloud/agent/api/PingCommand.java +++ b/api/src/com/cloud/agent/api/PingCommand.java @@ -21,23 +21,23 @@ import com.cloud.host.Host; public class PingCommand extends Command { Host.Type hostType; long hostId; - + protected PingCommand() { } - + public PingCommand(Host.Type type, long id) { hostType = type; hostId = id; } - + public Host.Type getHostType() { return hostType; } - + public long getHostId() { return hostId; } - + @Override public boolean executeInSequence() { return false; diff --git a/api/src/com/cloud/agent/api/PingRoutingCommand.java b/api/src/com/cloud/agent/api/PingRoutingCommand.java index eebe041ff21..e25ac62786f 100755 --- a/api/src/com/cloud/agent/api/PingRoutingCommand.java +++ b/api/src/com/cloud/agent/api/PingRoutingCommand.java @@ -25,15 +25,15 @@ public class PingRoutingCommand extends PingCommand { Map newStates; boolean _gatewayAccessible = true; boolean _vnetAccessible = true; - + protected PingRoutingCommand() { } - + public PingRoutingCommand(Host.Type type, long id, Map states) { super(type, id); this.newStates = states; } - + public Map getNewStates() { return newStates; } diff --git a/api/src/com/cloud/agent/api/PingRoutingWithOvsCommand.java b/api/src/com/cloud/agent/api/PingRoutingWithOvsCommand.java index 5842f385402..d44987b20fd 100644 --- a/api/src/com/cloud/agent/api/PingRoutingWithOvsCommand.java +++ b/api/src/com/cloud/agent/api/PingRoutingWithOvsCommand.java @@ -25,17 +25,17 @@ import com.cloud.vm.VirtualMachine.State; public class PingRoutingWithOvsCommand extends PingRoutingCommand { List> states; - + protected PingRoutingWithOvsCommand() { super(); } - + public PingRoutingWithOvsCommand(Host.Type type, long id, Map states, List> ovsStates) { super(type, id, states); this.states = ovsStates; } - + public List> getStates() { return states; } diff --git a/api/src/com/cloud/agent/api/PingStorageCommand.java b/api/src/com/cloud/agent/api/PingStorageCommand.java index 963bc7b2a6b..438ab507852 100755 --- a/api/src/com/cloud/agent/api/PingStorageCommand.java +++ b/api/src/com/cloud/agent/api/PingStorageCommand.java @@ -25,12 +25,12 @@ public class PingStorageCommand extends PingCommand { protected PingStorageCommand() { } - + public PingStorageCommand(Host.Type type, long id, Map changes) { super(type, id); this.changes = changes; } - + public Map getChanges() { return changes; } diff --git a/api/src/com/cloud/agent/api/PlugNicCommand.java b/api/src/com/cloud/agent/api/PlugNicCommand.java index aa5141eab8e..b896e4540cb 100644 --- a/api/src/com/cloud/agent/api/PlugNicCommand.java +++ b/api/src/com/cloud/agent/api/PlugNicCommand.java @@ -19,22 +19,22 @@ package com.cloud.agent.api; import com.cloud.agent.api.to.NicTO; public class PlugNicCommand extends Command { - + NicTO nic; String instanceName; - + public NicTO getNic() { return nic; } - + @Override public boolean executeInSequence() { return true; } - + protected PlugNicCommand() { } - + public PlugNicCommand(NicTO nic, String instanceName) { this.nic = nic; this.instanceName = instanceName; diff --git a/api/src/com/cloud/agent/api/PoolEjectCommand.java b/api/src/com/cloud/agent/api/PoolEjectCommand.java index faea30e3f86..3085042eeb4 100644 --- a/api/src/com/cloud/agent/api/PoolEjectCommand.java +++ b/api/src/com/cloud/agent/api/PoolEjectCommand.java @@ -18,22 +18,22 @@ package com.cloud.agent.api; public class PoolEjectCommand extends Command { private String hostuuid; - + public String getHostuuid() { return hostuuid; } - + public void setHostuuid(String hostuuid) { this.hostuuid = hostuuid; } public PoolEjectCommand() { super(); } - public PoolEjectCommand(String hostuuid) { + public PoolEjectCommand(String hostuuid) { super(); setHostuuid(hostuuid); } - + @Override public boolean executeInSequence() { return true; diff --git a/api/src/com/cloud/agent/api/PrepareForMigrationAnswer.java b/api/src/com/cloud/agent/api/PrepareForMigrationAnswer.java index bbd63cc2cea..1b215bc086e 100644 --- a/api/src/com/cloud/agent/api/PrepareForMigrationAnswer.java +++ b/api/src/com/cloud/agent/api/PrepareForMigrationAnswer.java @@ -19,15 +19,15 @@ package com.cloud.agent.api; public class PrepareForMigrationAnswer extends Answer { protected PrepareForMigrationAnswer() { } - + public PrepareForMigrationAnswer(PrepareForMigrationCommand cmd, String detail) { super(cmd, false, detail); } - + public PrepareForMigrationAnswer(PrepareForMigrationCommand cmd, Exception ex) { super(cmd, ex); } - + public PrepareForMigrationAnswer(PrepareForMigrationCommand cmd) { super(cmd, true, null); } diff --git a/api/src/com/cloud/agent/api/PrepareForMigrationCommand.java b/api/src/com/cloud/agent/api/PrepareForMigrationCommand.java index e10bca0ba72..c0e136883f9 100644 --- a/api/src/com/cloud/agent/api/PrepareForMigrationCommand.java +++ b/api/src/com/cloud/agent/api/PrepareForMigrationCommand.java @@ -20,18 +20,18 @@ import com.cloud.agent.api.to.VirtualMachineTO; public class PrepareForMigrationCommand extends Command { VirtualMachineTO vm; - + protected PrepareForMigrationCommand() { } - + public PrepareForMigrationCommand(VirtualMachineTO vm) { this.vm = vm; } - + public VirtualMachineTO getVirtualMachine() { return vm; } - + @Override public boolean executeInSequence() { return true; diff --git a/api/src/com/cloud/agent/api/PrepareOCFS2NodesCommand.java b/api/src/com/cloud/agent/api/PrepareOCFS2NodesCommand.java index eda0fd9740f..0c80bfa6f08 100755 --- a/api/src/com/cloud/agent/api/PrepareOCFS2NodesCommand.java +++ b/api/src/com/cloud/agent/api/PrepareOCFS2NodesCommand.java @@ -23,7 +23,7 @@ import com.cloud.utils.Ternary; public class PrepareOCFS2NodesCommand extends Command { List> nodes; String clusterName; - + @Override public boolean executeInSequence() { return true; @@ -33,11 +33,11 @@ public class PrepareOCFS2NodesCommand extends Command { this.nodes = nodes; this.clusterName = clusterName; } - + public List> getNodes() { return nodes; } - + public String getClusterName() { return clusterName; } diff --git a/api/src/com/cloud/agent/api/PropagateResourceEventCommand.java b/api/src/com/cloud/agent/api/PropagateResourceEventCommand.java index 3442c7715e1..45cd4b30ef1 100755 --- a/api/src/com/cloud/agent/api/PropagateResourceEventCommand.java +++ b/api/src/com/cloud/agent/api/PropagateResourceEventCommand.java @@ -21,24 +21,24 @@ import com.cloud.resource.ResourceState; public class PropagateResourceEventCommand extends Command { long hostId; ResourceState.Event event; - + protected PropagateResourceEventCommand() { - + } - + public PropagateResourceEventCommand(long hostId, ResourceState.Event event) { this.hostId = hostId; this.event = event; } - + public long getHostId() { return hostId; } - + public ResourceState.Event getEvent() { return event; } - + @Override public boolean executeInSequence() { // TODO Auto-generated method stub diff --git a/api/src/com/cloud/agent/api/ReadyAnswer.java b/api/src/com/cloud/agent/api/ReadyAnswer.java index 3f8172c39e5..b5dd0b7d360 100644 --- a/api/src/com/cloud/agent/api/ReadyAnswer.java +++ b/api/src/com/cloud/agent/api/ReadyAnswer.java @@ -19,11 +19,11 @@ package com.cloud.agent.api; public class ReadyAnswer extends Answer { protected ReadyAnswer() { } - + public ReadyAnswer(ReadyCommand cmd) { super(cmd, true, null); } - + public ReadyAnswer(ReadyCommand cmd, String details) { super(cmd, false, details); } diff --git a/api/src/com/cloud/agent/api/ReadyCommand.java b/api/src/com/cloud/agent/api/ReadyCommand.java index 0c91a2555fa..c6ca799a132 100644 --- a/api/src/com/cloud/agent/api/ReadyCommand.java +++ b/api/src/com/cloud/agent/api/ReadyCommand.java @@ -24,29 +24,29 @@ public class ReadyCommand extends Command { private Long dcId; private Long hostId; - + public ReadyCommand(Long dcId) { super(); this.dcId = dcId; } - + public ReadyCommand(Long dcId, Long hostId) { this(dcId); this.hostId = hostId; } - + public void setDetails(String details) { _details = details; } - + public String getDetails() { return _details; } - + public Long getDataCenterId() { return dcId; } - + @Override public boolean executeInSequence() { return true; diff --git a/api/src/com/cloud/agent/api/RebootAnswer.java b/api/src/com/cloud/agent/api/RebootAnswer.java index da53b4fb1a3..244bf1e21ce 100644 --- a/api/src/com/cloud/agent/api/RebootAnswer.java +++ b/api/src/com/cloud/agent/api/RebootAnswer.java @@ -18,24 +18,24 @@ package com.cloud.agent.api; public class RebootAnswer extends Answer { Integer vncPort; - + protected RebootAnswer() { } - + public RebootAnswer(RebootCommand cmd, String details, Integer vncport) { super(cmd, true, details); this.vncPort = vncport; } - + public RebootAnswer(RebootCommand cmd, String details, boolean success) { super(cmd, success, details); this.vncPort = null; } - + public RebootAnswer(RebootCommand cmd, Exception e) { super(cmd, e); } - + public Integer getVncPort() { return vncPort; } diff --git a/api/src/com/cloud/agent/api/RebootCommand.java b/api/src/com/cloud/agent/api/RebootCommand.java index 2925e2a8a2b..299e61b76af 100755 --- a/api/src/com/cloud/agent/api/RebootCommand.java +++ b/api/src/com/cloud/agent/api/RebootCommand.java @@ -20,25 +20,25 @@ import com.cloud.vm.VirtualMachine; public class RebootCommand extends Command { String vmName; - + protected RebootCommand() { } - + public RebootCommand(VirtualMachine vm) { vmName = vm.getInstanceName(); } - + public RebootCommand(String vmName) { this.vmName = vmName; } - + public String getVmName() { return vmName; } - + @Override public boolean executeInSequence() { return true; } - + } diff --git a/api/src/com/cloud/agent/api/RebootRouterCommand.java b/api/src/com/cloud/agent/api/RebootRouterCommand.java index bf5d866b0dc..c5027b326a3 100644 --- a/api/src/com/cloud/agent/api/RebootRouterCommand.java +++ b/api/src/com/cloud/agent/api/RebootRouterCommand.java @@ -18,7 +18,7 @@ package com.cloud.agent.api; public class RebootRouterCommand extends RebootCommand { - + protected String privateIp; protected RebootRouterCommand() { diff --git a/api/src/com/cloud/agent/api/SecStorageFirewallCfgCommand.java b/api/src/com/cloud/agent/api/SecStorageFirewallCfgCommand.java index 276ed065182..41a779b7d7a 100755 --- a/api/src/com/cloud/agent/api/SecStorageFirewallCfgCommand.java +++ b/api/src/com/cloud/agent/api/SecStorageFirewallCfgCommand.java @@ -33,7 +33,7 @@ public class SecStorageFirewallCfgCommand extends Command { this.intf = intf; } public PortConfig() { - + } public boolean isAdd() { return add; @@ -48,28 +48,28 @@ public class SecStorageFirewallCfgCommand extends Command { return intf; } } - + private List portConfigs = new ArrayList(); - private boolean isAppendAIp = false; - + private boolean isAppendAIp = false; + public SecStorageFirewallCfgCommand() { - + } - + public SecStorageFirewallCfgCommand(boolean isAppend) { this.isAppendAIp = isAppend; - } - + } + public void addPortConfig(String sourceIp, String port, boolean add, String intf) { PortConfig pc = new PortConfig(sourceIp, port, add, intf); this.portConfigs.add(pc); - + } public boolean getIsAppendAIp() { return isAppendAIp; } - + @Override public boolean executeInSequence() { return false; diff --git a/api/src/com/cloud/agent/api/SecStorageSetupAnswer.java b/api/src/com/cloud/agent/api/SecStorageSetupAnswer.java index 494bce53c3b..bb0c01652d5 100644 --- a/api/src/com/cloud/agent/api/SecStorageSetupAnswer.java +++ b/api/src/com/cloud/agent/api/SecStorageSetupAnswer.java @@ -20,12 +20,12 @@ public class SecStorageSetupAnswer extends Answer { private String _dir; protected SecStorageSetupAnswer() { } - + public SecStorageSetupAnswer(String dir) { super(null, true, "success"); this._dir = dir; } - + public String get_dir() { return _dir; } diff --git a/api/src/com/cloud/agent/api/SecStorageSetupCommand.java b/api/src/com/cloud/agent/api/SecStorageSetupCommand.java index 208b8a6cd5b..50c06cffa43 100644 --- a/api/src/com/cloud/agent/api/SecStorageSetupCommand.java +++ b/api/src/com/cloud/agent/api/SecStorageSetupCommand.java @@ -21,7 +21,7 @@ import com.cloud.agent.api.LogLevel.Log4jLevel; public class SecStorageSetupCommand extends Command { private String secUrl; private Certificates certs; - + public static class Certificates { @LogLevel(Log4jLevel.Off) private String privKey; @@ -29,30 +29,30 @@ public class SecStorageSetupCommand extends Command { private String privCert; @LogLevel(Log4jLevel.Off) private String certChain; - + public Certificates() { - + } - + public Certificates(String prvKey, String privCert, String certChain) { this.privKey = prvKey; this.privCert = privCert; this.certChain = certChain; } - + public String getPrivKey() { return this.privKey; } - + public String getPrivCert() { return this.privCert; } - + public String getCertChain() { return this.certChain; } } - + public SecStorageSetupCommand() { super(); } @@ -62,7 +62,7 @@ public class SecStorageSetupCommand extends Command { this.secUrl = secUrl; this.certs = certs; } - + @Override public boolean executeInSequence() { return true; @@ -71,13 +71,13 @@ public class SecStorageSetupCommand extends Command { public String getSecUrl() { return secUrl; } - + public Certificates getCerts() { return this.certs; } public void setSecUrl(String secUrl) { this.secUrl = secUrl; - + } } diff --git a/api/src/com/cloud/agent/api/SecStorageVMSetupCommand.java b/api/src/com/cloud/agent/api/SecStorageVMSetupCommand.java index 03f2321a355..be977097f06 100644 --- a/api/src/com/cloud/agent/api/SecStorageVMSetupCommand.java +++ b/api/src/com/cloud/agent/api/SecStorageVMSetupCommand.java @@ -20,11 +20,11 @@ public class SecStorageVMSetupCommand extends Command { String [] allowedInternalSites = new String[0]; String copyUserName; String copyPassword; - + public SecStorageVMSetupCommand() { super(); } - + @Override public boolean executeInSequence() { return true; diff --git a/api/src/com/cloud/agent/api/SecurityGroupRuleAnswer.java b/api/src/com/cloud/agent/api/SecurityGroupRuleAnswer.java index 00cdbe83ffd..144fea2ae87 100644 --- a/api/src/com/cloud/agent/api/SecurityGroupRuleAnswer.java +++ b/api/src/com/cloud/agent/api/SecurityGroupRuleAnswer.java @@ -26,24 +26,24 @@ public class SecurityGroupRuleAnswer extends Answer { Long logSequenceNumber = null; Long vmId = null; FailureReason reason = FailureReason.NONE; - - + + protected SecurityGroupRuleAnswer() { } - + public SecurityGroupRuleAnswer(SecurityGroupRulesCmd cmd) { super(cmd); this.logSequenceNumber = cmd.getSeqNum(); this.vmId = cmd.getVmId(); } - + public SecurityGroupRuleAnswer(SecurityGroupRulesCmd cmd, boolean result, String detail) { super(cmd, result, detail); this.logSequenceNumber = cmd.getSeqNum(); this.vmId = cmd.getVmId(); reason = FailureReason.PROGRAMMING_FAILED; } - + public SecurityGroupRuleAnswer(SecurityGroupRulesCmd cmd, boolean result, String detail, FailureReason r) { super(cmd, result, detail); this.logSequenceNumber = cmd.getSeqNum(); diff --git a/api/src/com/cloud/agent/api/SecurityGroupRulesCmd.java b/api/src/com/cloud/agent/api/SecurityGroupRulesCmd.java index 32550df8448..affad1f9b9d 100644 --- a/api/src/com/cloud/agent/api/SecurityGroupRulesCmd.java +++ b/api/src/com/cloud/agent/api/SecurityGroupRulesCmd.java @@ -126,7 +126,7 @@ public class SecurityGroupRulesCmd extends Command { public void setEgressRuleSet(IpPortAndProto[] egressRuleSet) { this.egressRuleSet = egressRuleSet; } - + public String getGuestIp() { return guestIp; } @@ -156,15 +156,15 @@ public class SecurityGroupRulesCmd extends Command { } return ruleBuilder.toString(); } - + //convert cidrs in the form "a.b.c.d/e" to "hexvalue of 32bit ip/e" private String compressCidr(String cidr) { String [] toks = cidr.split("/"); long ipnum = NetUtils.ip2Long(toks[0]); return Long.toHexString(ipnum) + "/" + toks[1]; } - - + + public String stringifyCompressedRules() { StringBuilder ruleBuilder = new StringBuilder(); for (SecurityGroupRulesCmd.IpPortAndProto ipPandP : getIngressRuleSet()) { @@ -187,7 +187,7 @@ public class SecurityGroupRulesCmd extends Command { } return ruleBuilder.toString(); } - + /* * Compress the security group rules using zlib compression to allow the call to the hypervisor * to scale beyond 8k cidrs. @@ -243,7 +243,7 @@ public class SecurityGroupRulesCmd extends Command { public Long getVmId() { return vmId; } - + public int getTotalNumCidrs() { //useful for logging int count = 0; @@ -255,11 +255,11 @@ public class SecurityGroupRulesCmd extends Command { } return count; } - + public void setMsId(long msId) { this.msId = msId; } - + public Long getMsId() { return msId; } diff --git a/api/src/com/cloud/agent/api/SetupAnswer.java b/api/src/com/cloud/agent/api/SetupAnswer.java index beee79fb84c..97252a2708e 100644 --- a/api/src/com/cloud/agent/api/SetupAnswer.java +++ b/api/src/com/cloud/agent/api/SetupAnswer.java @@ -33,5 +33,5 @@ public class SetupAnswer extends Answer { public boolean needReconnect() { return _reconnect; } - + } diff --git a/api/src/com/cloud/agent/api/SetupCommand.java b/api/src/com/cloud/agent/api/SetupCommand.java index 0397813b9aa..ee43c5933da 100644 --- a/api/src/com/cloud/agent/api/SetupCommand.java +++ b/api/src/com/cloud/agent/api/SetupCommand.java @@ -23,7 +23,7 @@ public class SetupCommand extends Command { HostEnvironment env; boolean multipath; boolean needSetup; - + public boolean needSetup() { return needSetup; } @@ -37,18 +37,18 @@ public class SetupCommand extends Command { this.multipath = false; this.needSetup = false; } - + public HostEnvironment getEnvironment() { return env; } - + protected SetupCommand() { } - + public void setMultipathOn() { this.multipath = true; } - + public boolean useMultipath() { return multipath; } diff --git a/api/src/com/cloud/agent/api/SetupGuestNetworkCommand.java b/api/src/com/cloud/agent/api/SetupGuestNetworkCommand.java index 10dab557bf5..2cf5bf8ffaa 100644 --- a/api/src/com/cloud/agent/api/SetupGuestNetworkCommand.java +++ b/api/src/com/cloud/agent/api/SetupGuestNetworkCommand.java @@ -28,7 +28,7 @@ public class SetupGuestNetworkCommand extends NetworkElementCommand{ Integer priority; boolean add = true; NicTO nic; - + public NicTO getNic() { return nic; } @@ -53,12 +53,12 @@ public class SetupGuestNetworkCommand extends NetworkElementCommand{ public boolean executeInSequence() { return true; } - + protected SetupGuestNetworkCommand() { } - - - public SetupGuestNetworkCommand(String dhcpRange, String networkDomain, boolean isRedundant, Integer priority, + + + public SetupGuestNetworkCommand(String dhcpRange, String networkDomain, boolean isRedundant, Integer priority, String defaultDns1, String defaultDns2, boolean add, NicTO nic) { this.dhcpRange = dhcpRange; this.networkDomain = networkDomain; diff --git a/api/src/com/cloud/agent/api/ShutdownCommand.java b/api/src/com/cloud/agent/api/ShutdownCommand.java index fa66e34b176..5412f35c583 100644 --- a/api/src/com/cloud/agent/api/ShutdownCommand.java +++ b/api/src/com/cloud/agent/api/ShutdownCommand.java @@ -24,31 +24,31 @@ public class ShutdownCommand extends Command { public static final String Update = "update"; public static final String Unknown = "unknown"; public static final String DeleteHost = "deleteHost"; - + private String reason; private String detail; protected ShutdownCommand() { super(); } - + public ShutdownCommand(String reason, String detail) { super(); this.reason = reason; this.detail = detail; } - + /** - * @return return the reason the agent shutdown. If Unknown, call getDetail() for any details. + * @return return the reason the agent shutdown. If Unknown, call getDetail() for any details. */ public String getReason() { return reason; } - + public String getDetail() { return detail; } - + @Override public boolean executeInSequence() { return true; diff --git a/api/src/com/cloud/agent/api/SnapshotCommand.java b/api/src/com/cloud/agent/api/SnapshotCommand.java index 892db37c0d7..dceb461e3b6 100644 --- a/api/src/com/cloud/agent/api/SnapshotCommand.java +++ b/api/src/com/cloud/agent/api/SnapshotCommand.java @@ -111,4 +111,4 @@ public class SnapshotCommand extends Command { return false; } -} \ No newline at end of file +} diff --git a/api/src/com/cloud/agent/api/StartAnswer.java b/api/src/com/cloud/agent/api/StartAnswer.java index d4a3f63bc96..922d060cfae 100644 --- a/api/src/com/cloud/agent/api/StartAnswer.java +++ b/api/src/com/cloud/agent/api/StartAnswer.java @@ -21,20 +21,20 @@ import com.cloud.agent.api.to.VirtualMachineTO; public class StartAnswer extends Answer { VirtualMachineTO vm; String host_guid; - + protected StartAnswer() { } - + public StartAnswer(StartCommand cmd, String msg) { super(cmd, false, msg); this.vm = cmd.getVirtualMachine(); } - + public StartAnswer(StartCommand cmd, Exception e) { super(cmd, false, e.getMessage()); this.vm = cmd.getVirtualMachine(); } - + public StartAnswer(StartCommand cmd) { super(cmd, true, null); this.vm = cmd.getVirtualMachine(); @@ -46,7 +46,7 @@ public class StartAnswer extends Answer { this.vm = cmd.getVirtualMachine(); this.host_guid = guid; } - + public VirtualMachineTO getVirtualMachine() { return vm; } diff --git a/api/src/com/cloud/agent/api/StartCommand.java b/api/src/com/cloud/agent/api/StartCommand.java index 4d871389836..ec707d6e851 100644 --- a/api/src/com/cloud/agent/api/StartCommand.java +++ b/api/src/com/cloud/agent/api/StartCommand.java @@ -28,12 +28,12 @@ public class StartCommand extends Command { public VirtualMachineTO getVirtualMachine() { return vm; } - + @Override public boolean executeInSequence() { return true; } - + protected StartCommand() { } diff --git a/api/src/com/cloud/agent/api/StartupAnswer.java b/api/src/com/cloud/agent/api/StartupAnswer.java index a078c2dc4df..c0925cbdd6f 100755 --- a/api/src/com/cloud/agent/api/StartupAnswer.java +++ b/api/src/com/cloud/agent/api/StartupAnswer.java @@ -20,24 +20,24 @@ package com.cloud.agent.api; public class StartupAnswer extends Answer { long hostId; int pingInterval; - + protected StartupAnswer() { } - + public StartupAnswer(StartupCommand cmd, long hostId, int pingInterval) { super(cmd); this.hostId = hostId; this.pingInterval = pingInterval; } - + public StartupAnswer(StartupCommand cmd, String details) { super(cmd, false, details); } - + public long getHostId() { return hostId; } - + public int getPingInterval() { return pingInterval; } diff --git a/api/src/com/cloud/agent/api/StartupCommand.java b/api/src/com/cloud/agent/api/StartupCommand.java index 6088beac785..dd2d3907e7b 100755 --- a/api/src/com/cloud/agent/api/StartupCommand.java +++ b/api/src/com/cloud/agent/api/StartupCommand.java @@ -43,11 +43,11 @@ public class StartupCommand extends Command { String agentTag; String resourceName; String gatewayIpAddress; - + public StartupCommand(Host.Type type) { this.type = type; } - + public StartupCommand(Long id, Host.Type type, String name, String dataCenter, String pod, String guid, String version) { super(); this.id = id; @@ -58,48 +58,48 @@ public class StartupCommand extends Command { this.version = version; this.type = type; } - + public StartupCommand(Long id, Host.Type type, String name, String dataCenter, String pod, String guid, String version, String gatewayIpAddress) { this(id, type, name, dataCenter, pod, guid, version); this.gatewayIpAddress = gatewayIpAddress; - } - + } + public Host.Type getHostType() { return type; } - + public void setHostType(Host.Type type) { this.type = type; } - + public String getIqn() { return iqn; } - + public void setCluster(String cluster) { this.cluster = cluster; } - + public String getCluster() { return cluster; } - + public void setIqn(String iqn) { this.iqn = iqn; } - + public String getDataCenter() { return dataCenter; } - + public String getPod() { return pod; } - + public Long getId() { return id; } - + public String getStorageIpAddressDeux() { return storageIpAddressDeux; } @@ -131,11 +131,11 @@ public class StartupCommand extends Command { public String getName() { return name; } - + public String getVersion() { return version; } - + public void setDataCenter(String dataCenter) { this.dataCenter = dataCenter; } @@ -147,7 +147,7 @@ public class StartupCommand extends Command { public void setGuid(String guid) { this.guid = guid; } - + public void setGuid(String guid, String resourceName) { this.resourceName = resourceName; this.guid = guid + "-" + resourceName; @@ -232,15 +232,15 @@ public class StartupCommand extends Command { public void setVersion(String version) { this.version = version; } - + public void setPublicIpAddress(String publicIpAddress) { this.publicIpAddress = publicIpAddress; } - + public String getAgentTag() { return agentTag; } - + public void setAgentTag(String tag) { agentTag = tag; } @@ -248,7 +248,7 @@ public class StartupCommand extends Command { public void setResourceName(String resourceName) { this.resourceName = resourceName; } - + public String getGuidWithoutResource() { if (resourceName == null) { return guid; @@ -265,11 +265,11 @@ public class StartupCommand extends Command { } } } - + public String getResourceName() { return resourceName; } - + public String getGatewayIpAddress() { return gatewayIpAddress; } @@ -277,8 +277,8 @@ public class StartupCommand extends Command { public void setGatewayIpAddress(String gatewayIpAddress) { this.gatewayIpAddress = gatewayIpAddress; } - - + + @Override public boolean executeInSequence() { return false; diff --git a/api/src/com/cloud/agent/api/StartupExternalFirewallCommand.java b/api/src/com/cloud/agent/api/StartupExternalFirewallCommand.java index 2ba4ab9eb40..c4ed10729fe 100644 --- a/api/src/com/cloud/agent/api/StartupExternalFirewallCommand.java +++ b/api/src/com/cloud/agent/api/StartupExternalFirewallCommand.java @@ -19,7 +19,7 @@ package com.cloud.agent.api; import com.cloud.host.Host; public class StartupExternalFirewallCommand extends StartupCommand { - + public StartupExternalFirewallCommand() { super(Host.Type.ExternalFirewall); } diff --git a/api/src/com/cloud/agent/api/StartupProxyCommand.java b/api/src/com/cloud/agent/api/StartupProxyCommand.java index 63991573bea..25cd769e650 100644 --- a/api/src/com/cloud/agent/api/StartupProxyCommand.java +++ b/api/src/com/cloud/agent/api/StartupProxyCommand.java @@ -21,12 +21,12 @@ import com.cloud.host.Host; public class StartupProxyCommand extends StartupCommand { private int proxyPort; private long proxyVmId; - + public StartupProxyCommand() { super(Host.Type.ConsoleProxy); setIqn("NoIqn"); } - + @Override public boolean executeInSequence() { return true; diff --git a/api/src/com/cloud/agent/api/StartupRoutingCommand.java b/api/src/com/cloud/agent/api/StartupRoutingCommand.java index e6989403c11..5961ab0017e 100755 --- a/api/src/com/cloud/agent/api/StartupRoutingCommand.java +++ b/api/src/com/cloud/agent/api/StartupRoutingCommand.java @@ -90,7 +90,7 @@ getHostDetails().put(RouterPrivateIpStrategy.class.getCanonicalName(), privIpStr long memory, long dom0MinMemory, final String caps, - final HypervisorType hypervisorType, + final HypervisorType hypervisorType, final Map hostDetails, Map vms) { super(Host.Type.Routing); @@ -114,7 +114,7 @@ getHostDetails().put(RouterPrivateIpStrategy.class.getCanonicalName(), privIpStr public StartupRoutingCommand(int cpus, long speed, long memory, long dom0MinMemory, final String caps, final HypervisorType hypervisorType, final Map hostDetails, Map vms, String hypervisorVersion) { this(cpus, speed, memory, dom0MinMemory, caps, hypervisorType, hostDetails, vms); this.hypervisorVersion = hypervisorVersion; - } + } public void setChanges(Map vms) { this.vms = vms; @@ -128,7 +128,7 @@ getHostDetails().put(RouterPrivateIpStrategy.class.getCanonicalName(), privIpStr this.vms.put(vm_name, new VmState(vms.get(vm_name), null)); } } - + public void setClusterVMStateChanges(HashMap> allStates){ _clusterVMStates = allStates; } @@ -156,7 +156,7 @@ getHostDetails().put(RouterPrivateIpStrategy.class.getCanonicalName(), privIpStr public Map getVmStates() { return vms; } - + public HashMap> getClusterVMStateChanges() { return _clusterVMStates; } @@ -219,6 +219,6 @@ getHostDetails().put(RouterPrivateIpStrategy.class.getCanonicalName(), privIpStr public void setHypervisorVersion(String hypervisorVersion) { this.hypervisorVersion = hypervisorVersion; - } + } } diff --git a/api/src/com/cloud/agent/api/StartupSecondaryStorageCommand.java b/api/src/com/cloud/agent/api/StartupSecondaryStorageCommand.java index 35896fb6e48..c19ea99e9e1 100644 --- a/api/src/com/cloud/agent/api/StartupSecondaryStorageCommand.java +++ b/api/src/com/cloud/agent/api/StartupSecondaryStorageCommand.java @@ -19,12 +19,12 @@ package com.cloud.agent.api; import com.cloud.host.Host; public class StartupSecondaryStorageCommand extends StartupCommand { - + public StartupSecondaryStorageCommand() { super(Host.Type.SecondaryStorage); setIqn("NoIqn"); } - + @Override public boolean executeInSequence() { return true; diff --git a/api/src/com/cloud/agent/api/StartupStorageCommand.java b/api/src/com/cloud/agent/api/StartupStorageCommand.java index d1e67d48800..3c3b058ce39 100755 --- a/api/src/com/cloud/agent/api/StartupStorageCommand.java +++ b/api/src/com/cloud/agent/api/StartupStorageCommand.java @@ -26,7 +26,7 @@ import com.cloud.storage.template.TemplateInfo; public class StartupStorageCommand extends StartupCommand { - + String parent; Map templateInfo; long totalSize; @@ -39,7 +39,7 @@ public class StartupStorageCommand extends StartupCommand { public StartupStorageCommand() { super(Host.Type.Storage); } - + public StartupStorageCommand(String parent, StoragePoolType fsType, long totalSize, Map info) { super(Host.Type.Storage); this.parent = parent; @@ -48,7 +48,7 @@ public class StartupStorageCommand extends StartupCommand { this.poolInfo = null; this.fsType = fsType; } - + public StartupStorageCommand(String parent, StoragePoolType fsType, Map templateInfo, StoragePoolInfo poolInfo) { super(Host.Type.Storage); @@ -62,7 +62,7 @@ public class StartupStorageCommand extends StartupCommand { public String getParent() { return parent; } - + public void setParent(String parent) { this.parent = parent; } @@ -70,15 +70,15 @@ public class StartupStorageCommand extends StartupCommand { public void setNfsShare(String nfsShare) { this.nfsShare = nfsShare; } - + public String getNfsShare() { return nfsShare; } - + public long getTotalSize() { return totalSize; } - + public Map getTemplateInfo() { return templateInfo; } diff --git a/api/src/com/cloud/agent/api/StopAnswer.java b/api/src/com/cloud/agent/api/StopAnswer.java index 52f28f165f2..1111fed1375 100755 --- a/api/src/com/cloud/agent/api/StopAnswer.java +++ b/api/src/com/cloud/agent/api/StopAnswer.java @@ -18,28 +18,28 @@ package com.cloud.agent.api; public class StopAnswer extends RebootAnswer { Integer vncPort; - + protected StopAnswer() { } - + public StopAnswer(StopCommand cmd, String details, Integer vncPort, boolean success) { super(cmd, details, success); this.vncPort = vncPort; } - + public StopAnswer(StopCommand cmd, String details, boolean success) { super(cmd, details, success); vncPort = null; } - + public StopAnswer(StopCommand cmd, Exception e) { super(cmd, e); } - + @Override public Integer getVncPort() { return vncPort; } - + } diff --git a/api/src/com/cloud/agent/api/StopCommand.java b/api/src/com/cloud/agent/api/StopCommand.java index 176a7fb86ee..9ee7ce3c874 100755 --- a/api/src/com/cloud/agent/api/StopCommand.java +++ b/api/src/com/cloud/agent/api/StopCommand.java @@ -23,35 +23,35 @@ public class StopCommand extends RebootCommand { private boolean isProxy=false; private String urlPort=null; private String publicConsoleProxyIpAddress=null; - + protected StopCommand() { } - + public StopCommand(VirtualMachine vm, boolean isProxy, String urlPort, String publicConsoleProxyIpAddress) { super(vm); this.isProxy = isProxy; this.urlPort = urlPort; this.publicConsoleProxyIpAddress = publicConsoleProxyIpAddress; } - + public StopCommand(VirtualMachine vm, String vnet) { super(vm); this.vnet = vnet; } - + public StopCommand(VirtualMachine vm, String vmName, String vnet) { super(vmName); this.vnet = vnet; } - + public StopCommand(String vmName) { super(vmName); } - + public String getVnet() { return vnet; } - + @Override public boolean executeInSequence() { return true; @@ -60,11 +60,11 @@ public class StopCommand extends RebootCommand { public boolean isProxy() { return this.isProxy; } - + public String getURLPort() { return this.urlPort; } - + public String getPublicConsoleProxyIpAddress() { return this.publicConsoleProxyIpAddress; } diff --git a/api/src/com/cloud/agent/api/StoragePoolInfo.java b/api/src/com/cloud/agent/api/StoragePoolInfo.java index 4ac6b296ba3..475205f2704 100644 --- a/api/src/com/cloud/agent/api/StoragePoolInfo.java +++ b/api/src/com/cloud/agent/api/StoragePoolInfo.java @@ -29,7 +29,7 @@ public class StoragePoolInfo { long capacityBytes; long availableBytes; Map details; - + protected StoragePoolInfo() { super(); } @@ -46,14 +46,14 @@ public class StoragePoolInfo { this.capacityBytes = capacityBytes; this.availableBytes = availableBytes; } - + public StoragePoolInfo(String uuid, String host, String hostPath, String localPath, StoragePoolType poolType, long capacityBytes, long availableBytes, Map details) { this(uuid, host, hostPath, localPath, poolType, capacityBytes, availableBytes); this.details = details; } - + public long getCapacityBytes() { return capacityBytes; } @@ -84,4 +84,4 @@ public class StoragePoolInfo { public Map getDetails() { return details; } -} \ No newline at end of file +} diff --git a/api/src/com/cloud/agent/api/TransferAgentCommand.java b/api/src/com/cloud/agent/api/TransferAgentCommand.java index f6f63b79361..0dfde7eea0c 100644 --- a/api/src/com/cloud/agent/api/TransferAgentCommand.java +++ b/api/src/com/cloud/agent/api/TransferAgentCommand.java @@ -23,10 +23,10 @@ public class TransferAgentCommand extends Command { protected long futureOwner; protected long currentOwner; Event event; - + protected TransferAgentCommand() { } - + public TransferAgentCommand(long agentId, long currentOwner, long futureOwner, Event event) { this.agentId = agentId; this.currentOwner = currentOwner; diff --git a/api/src/com/cloud/agent/api/UnPlugNicCommand.java b/api/src/com/cloud/agent/api/UnPlugNicCommand.java index 0530527d5ba..b6cab8872f5 100644 --- a/api/src/com/cloud/agent/api/UnPlugNicCommand.java +++ b/api/src/com/cloud/agent/api/UnPlugNicCommand.java @@ -21,7 +21,7 @@ import com.cloud.agent.api.to.NicTO; public class UnPlugNicCommand extends Command{ NicTO nic; String instanceName; - + public NicTO getNic() { return nic; } @@ -30,10 +30,10 @@ public class UnPlugNicCommand extends Command{ public boolean executeInSequence() { return true; } - + protected UnPlugNicCommand() { } - + public UnPlugNicCommand(NicTO nic, String instanceName) { this.nic = nic; this.instanceName = instanceName; diff --git a/api/src/com/cloud/agent/api/UnsupportedAnswer.java b/api/src/com/cloud/agent/api/UnsupportedAnswer.java index 10a2b8addb8..7d0f24460d4 100644 --- a/api/src/com/cloud/agent/api/UnsupportedAnswer.java +++ b/api/src/com/cloud/agent/api/UnsupportedAnswer.java @@ -20,7 +20,7 @@ public class UnsupportedAnswer extends Answer { protected UnsupportedAnswer() { super(); } - + public UnsupportedAnswer(Command cmd, String details) { super(cmd, false, details); } diff --git a/api/src/com/cloud/agent/api/UpgradeAnswer.java b/api/src/com/cloud/agent/api/UpgradeAnswer.java index b93131bdd37..00b0f25b050 100644 --- a/api/src/com/cloud/agent/api/UpgradeAnswer.java +++ b/api/src/com/cloud/agent/api/UpgradeAnswer.java @@ -19,7 +19,7 @@ package com.cloud.agent.api; public class UpgradeAnswer extends Answer { protected UpgradeAnswer() { } - + public UpgradeAnswer(UpgradeCommand cmd, String failure) { super(cmd, false, failure); } diff --git a/api/src/com/cloud/agent/api/UpgradeCommand.java b/api/src/com/cloud/agent/api/UpgradeCommand.java index e85e72c8ea8..0e1b6d2e7c4 100644 --- a/api/src/com/cloud/agent/api/UpgradeCommand.java +++ b/api/src/com/cloud/agent/api/UpgradeCommand.java @@ -22,18 +22,18 @@ package com.cloud.agent.api; public class UpgradeCommand extends Command { String url; - + protected UpgradeCommand() { } - + public UpgradeCommand(String url) { this.url = url; } - + public String getUpgradeUrl() { return url; } - + @Override public boolean executeInSequence() { return true; diff --git a/api/src/com/cloud/agent/api/UpgradeSnapshotCommand.java b/api/src/com/cloud/agent/api/UpgradeSnapshotCommand.java index e4517686491..1b3ff745985 100644 --- a/api/src/com/cloud/agent/api/UpgradeSnapshotCommand.java +++ b/api/src/com/cloud/agent/api/UpgradeSnapshotCommand.java @@ -19,16 +19,16 @@ public class UpgradeSnapshotCommand extends SnapshotCommand { private String version; private Long templateId; private Long tmpltAccountId; - + protected UpgradeSnapshotCommand() { - + } - + /** * @param primaryStoragePoolNameLabel The UUID of the primary storage Pool * @param secondaryStoragePoolURL This is what shows up in the UI when you click on Secondary storage. * @param snapshotUuid The UUID of the snapshot which is going to be upgraded - * @param _version version for this snapshot + * @param _version version for this snapshot */ public UpgradeSnapshotCommand(String primaryStoragePoolNameLabel, String secondaryStoragePoolURL, @@ -58,5 +58,5 @@ public class UpgradeSnapshotCommand extends SnapshotCommand { public Long getTmpltAccountId() { return tmpltAccountId; - } + } } diff --git a/api/src/com/cloud/agent/api/ValidateSnapshotAnswer.java b/api/src/com/cloud/agent/api/ValidateSnapshotAnswer.java index d9b0e61cda0..f5bb5448be0 100644 --- a/api/src/com/cloud/agent/api/ValidateSnapshotAnswer.java +++ b/api/src/com/cloud/agent/api/ValidateSnapshotAnswer.java @@ -21,11 +21,11 @@ public class ValidateSnapshotAnswer extends Answer { private String expectedSnapshotBackupUuid; private String actualSnapshotBackupUuid; private String actualSnapshotUuid; - + protected ValidateSnapshotAnswer() { - + } - + public ValidateSnapshotAnswer(ValidateSnapshotCommand cmd, boolean success, String result, String expectedSnapshotBackupUuid, String actualSnapshotBackupUuid, String actualSnapshotUuid) { super(cmd, success, result); this.expectedSnapshotBackupUuid = expectedSnapshotBackupUuid; @@ -39,14 +39,14 @@ public class ValidateSnapshotAnswer extends Answer { public String getExpectedSnapshotBackupUuid() { return expectedSnapshotBackupUuid; } - + /** * @return the actualSnapshotBackupUuid */ public String getActualSnapshotBackupUuid() { return actualSnapshotBackupUuid; } - + public String getActualSnapshotUuid() { return actualSnapshotUuid; } diff --git a/api/src/com/cloud/agent/api/ValidateSnapshotCommand.java b/api/src/com/cloud/agent/api/ValidateSnapshotCommand.java index 527502c28b3..9ffbf292281 100644 --- a/api/src/com/cloud/agent/api/ValidateSnapshotCommand.java +++ b/api/src/com/cloud/agent/api/ValidateSnapshotCommand.java @@ -22,24 +22,24 @@ public class ValidateSnapshotCommand extends Command { private String firstBackupUuid; private String previousSnapshotUuid; private String templateUuid; - + protected ValidateSnapshotCommand() { - + } - + /** * @param primaryStoragePoolNameLabel The primary storage Pool Name Label * @param volumeUuid The UUID of the volume for which the snapshot was taken * @param firstBackupUuid This UUID of the first snapshot that was ever taken for this volume, even it was deleted. * @param previousSnapshotUuid The UUID of the previous snapshot on the primary. - * @param templateUuid If this is a root volume and no snapshot has been taken for it, - * this is the UUID of the template VDI. + * @param templateUuid If this is a root volume and no snapshot has been taken for it, + * this is the UUID of the template VDI. */ public ValidateSnapshotCommand(String primaryStoragePoolNameLabel, String volumeUuid, String firstBackupUuid, String previousSnapshotUuid, - String templateUuid) + String templateUuid) { this.primaryStoragePoolNameLabel = primaryStoragePoolNameLabel; this.volumeUuid = volumeUuid; @@ -51,7 +51,7 @@ public class ValidateSnapshotCommand extends Command { public String getPrimaryStoragePoolNameLabel() { return primaryStoragePoolNameLabel; } - + /** * @return the volumeUuid */ @@ -65,11 +65,11 @@ public class ValidateSnapshotCommand extends Command { public String getFirstBackupUuid() { return firstBackupUuid; } - + public String getPreviousSnapshotUuid() { return previousSnapshotUuid; } - + /** * @return the templateUuid */ @@ -81,4 +81,4 @@ public class ValidateSnapshotCommand extends Command { public boolean executeInSequence() { return false; } -} \ No newline at end of file +} diff --git a/api/src/com/cloud/agent/api/VmStatsEntry.java b/api/src/com/cloud/agent/api/VmStatsEntry.java index 55694f86054..8828e9114f4 100755 --- a/api/src/com/cloud/agent/api/VmStatsEntry.java +++ b/api/src/com/cloud/agent/api/VmStatsEntry.java @@ -19,17 +19,17 @@ package com.cloud.agent.api; import com.cloud.vm.VmStats; public class VmStatsEntry implements VmStats { - + double cpuUtilization; double networkReadKBs; double networkWriteKBs; - int numCPUs; + int numCPUs; String entityType; - + public VmStatsEntry() { } - - public VmStatsEntry(double cpuUtilization, double networkReadKBs, double networkWriteKBs, int numCPUs, String entityType) + + public VmStatsEntry(double cpuUtilization, double networkReadKBs, double networkWriteKBs, int numCPUs, String entityType) { this.cpuUtilization = cpuUtilization; this.networkReadKBs = networkReadKBs; @@ -41,7 +41,7 @@ public class VmStatsEntry implements VmStats { public double getCPUUtilization() { return cpuUtilization; } - + public void setCPUUtilization(double cpuUtilization) { this.cpuUtilization = cpuUtilization; } @@ -49,23 +49,23 @@ public class VmStatsEntry implements VmStats { public double getNetworkReadKBs() { return networkReadKBs; } - + public void setNetworkReadKBs(double networkReadKBs) { this.networkReadKBs = networkReadKBs; } - + public double getNetworkWriteKBs() { return networkWriteKBs; } - + public void setNetworkWriteKBs(double networkWriteKBs) { this.networkWriteKBs = networkWriteKBs; } - + public int getNumCPUs() { return numCPUs; } - + public void setNumCPUs(int numCPUs) { this.numCPUs = numCPUs; } @@ -73,10 +73,10 @@ public class VmStatsEntry implements VmStats { public String getEntityType(){ return this.entityType; } - + public void setEntityType(String entityType){ this.entityType = entityType; } - + } diff --git a/api/src/com/cloud/agent/api/baremetal/IpmISetBootDevCommand.java b/api/src/com/cloud/agent/api/baremetal/IpmISetBootDevCommand.java index e0f4a28a156..fdd1fe910e9 100644 --- a/api/src/com/cloud/agent/api/baremetal/IpmISetBootDevCommand.java +++ b/api/src/com/cloud/agent/api/baremetal/IpmISetBootDevCommand.java @@ -18,23 +18,23 @@ package com.cloud.agent.api.baremetal; import com.cloud.agent.api.Command; -public class IpmISetBootDevCommand extends Command { +public class IpmISetBootDevCommand extends Command { public enum BootDev { pxe(), disk(), cdrom(), } - + BootDev bootDev; - + public BootDev getBootDev() { return bootDev; } - + public IpmISetBootDevCommand(BootDev dev) { bootDev = dev; } - + @Override public boolean executeInSequence() { return true; diff --git a/api/src/com/cloud/agent/api/baremetal/PreparePxeServerAnswer.java b/api/src/com/cloud/agent/api/baremetal/PreparePxeServerAnswer.java index 1190cb30033..d8f0529b44e 100644 --- a/api/src/com/cloud/agent/api/baremetal/PreparePxeServerAnswer.java +++ b/api/src/com/cloud/agent/api/baremetal/PreparePxeServerAnswer.java @@ -22,8 +22,8 @@ public class PreparePxeServerAnswer extends Answer { public PreparePxeServerAnswer(PreparePxeServerCommand cmd) { super(cmd, true, "SUCCESS"); } - + public PreparePxeServerAnswer(PreparePxeServerCommand cmd, String details) { super(cmd, false, details); - } + } } diff --git a/api/src/com/cloud/agent/api/baremetal/PreparePxeServerCommand.java b/api/src/com/cloud/agent/api/baremetal/PreparePxeServerCommand.java index 0cda0f11464..6c735637034 100644 --- a/api/src/com/cloud/agent/api/baremetal/PreparePxeServerCommand.java +++ b/api/src/com/cloud/agent/api/baremetal/PreparePxeServerCommand.java @@ -28,12 +28,12 @@ public class PreparePxeServerCommand extends Command { String template; String vmName; String hostName; - + @Override public boolean executeInSequence() { return true; } - + public PreparePxeServerCommand(String ip, String mac, String netMask, String gateway, String dns, String template, String vmName, String hostName) { this.ip = ip; this.mac = mac; @@ -44,7 +44,7 @@ public class PreparePxeServerCommand extends Command { this.vmName = vmName; this.hostName = hostName; } - + public String getIp() { return ip; } @@ -68,11 +68,11 @@ public class PreparePxeServerCommand extends Command { public String getTemplate() { return template; } - + public String getVmName() { return vmName; } - + public String getHostName() { return hostName; } diff --git a/api/src/com/cloud/agent/api/baremetal/prepareCreateTemplateCommand.java b/api/src/com/cloud/agent/api/baremetal/prepareCreateTemplateCommand.java index 03d178e309a..b18742055df 100644 --- a/api/src/com/cloud/agent/api/baremetal/prepareCreateTemplateCommand.java +++ b/api/src/com/cloud/agent/api/baremetal/prepareCreateTemplateCommand.java @@ -25,12 +25,12 @@ public class prepareCreateTemplateCommand extends Command { String gateway; String dns; String template; - + @Override public boolean executeInSequence() { return true; } - + public prepareCreateTemplateCommand(String ip, String mac, String netMask, String gateway, String dns, String template) { this.ip = ip; this.mac = mac; @@ -43,23 +43,23 @@ public class prepareCreateTemplateCommand extends Command { public String getIp() { return ip; } - + public String getMac() { return mac; } - + public String getNetMask() { return netMask; } - + public String getGateWay() { return gateway; } - + public String getDns() { return dns; } - + public String getTemplate() { return template; } diff --git a/api/src/com/cloud/agent/api/check/CheckSshAnswer.java b/api/src/com/cloud/agent/api/check/CheckSshAnswer.java index 7618159e63e..3414eb07c14 100644 --- a/api/src/com/cloud/agent/api/check/CheckSshAnswer.java +++ b/api/src/com/cloud/agent/api/check/CheckSshAnswer.java @@ -20,17 +20,17 @@ import com.cloud.agent.api.Answer; public class CheckSshAnswer extends Answer { protected CheckSshAnswer() { - + } - + public CheckSshAnswer(CheckSshCommand cmd) { super(cmd, true, null); } - + public CheckSshAnswer(CheckSshCommand cmd, String details) { super(cmd, false, details); } - + public CheckSshAnswer(CheckSshCommand cmd, Throwable th) { super(cmd, false, th.getMessage()); } diff --git a/api/src/com/cloud/agent/api/check/CheckSshCommand.java b/api/src/com/cloud/agent/api/check/CheckSshCommand.java index fb4210fc725..e384983e206 100644 --- a/api/src/com/cloud/agent/api/check/CheckSshCommand.java +++ b/api/src/com/cloud/agent/api/check/CheckSshCommand.java @@ -24,11 +24,11 @@ public class CheckSshCommand extends Command { int interval; int retries; String name; - + protected CheckSshCommand() { super(); } - + public CheckSshCommand(String instanceName, String ip, int port) { super(); this.ip = ip; @@ -37,7 +37,7 @@ public class CheckSshCommand extends Command { this.retries = 100; this.name = instanceName; } - + public String getName() { return name; } diff --git a/api/src/com/cloud/agent/api/downloadSnapshotFromSwiftCommand.java b/api/src/com/cloud/agent/api/downloadSnapshotFromSwiftCommand.java index 0586f8cdcfd..0937dada16e 100644 --- a/api/src/com/cloud/agent/api/downloadSnapshotFromSwiftCommand.java +++ b/api/src/com/cloud/agent/api/downloadSnapshotFromSwiftCommand.java @@ -20,7 +20,7 @@ import com.cloud.agent.api.LogLevel.Log4jLevel; import com.cloud.agent.api.to.SwiftTO; /** - * This currently assumes that both primary and secondary storage are mounted on the XenServer. + * This currently assumes that both primary and secondary storage are mounted on the XenServer. */ public class downloadSnapshotFromSwiftCommand extends SnapshotCommand { @LogLevel(Log4jLevel.Off) @@ -29,9 +29,9 @@ public class downloadSnapshotFromSwiftCommand extends SnapshotCommand { private String _parent; protected downloadSnapshotFromSwiftCommand() { - + } - + public downloadSnapshotFromSwiftCommand(SwiftTO swift, String secondaryStorageUrl, Long dcId, Long accountId, Long volumeId, String parent, String BackupUuid, int wait) { super("", secondaryStorageUrl, BackupUuid, "", dcId, accountId, volumeId); @@ -57,4 +57,4 @@ public class downloadSnapshotFromSwiftCommand extends SnapshotCommand { this._parent = parent; } -} \ No newline at end of file +} diff --git a/api/src/com/cloud/agent/api/downloadTemplateFromSwiftToSecondaryStorageCommand.java b/api/src/com/cloud/agent/api/downloadTemplateFromSwiftToSecondaryStorageCommand.java index 0bf6e98e7cb..82290656095 100644 --- a/api/src/com/cloud/agent/api/downloadTemplateFromSwiftToSecondaryStorageCommand.java +++ b/api/src/com/cloud/agent/api/downloadTemplateFromSwiftToSecondaryStorageCommand.java @@ -20,8 +20,8 @@ import com.cloud.agent.api.LogLevel.Log4jLevel; import com.cloud.agent.api.to.SwiftTO; /** - * - * + * + * */ public class downloadTemplateFromSwiftToSecondaryStorageCommand extends Command { @@ -35,9 +35,9 @@ public class downloadTemplateFromSwiftToSecondaryStorageCommand extends Command private String path; protected downloadTemplateFromSwiftToSecondaryStorageCommand() { - + } - + public downloadTemplateFromSwiftToSecondaryStorageCommand(SwiftTO swift, String secondaryStorageUrl, Long dcId, Long accountId, Long templateId, String path, int wait) { this.swift = swift; @@ -87,4 +87,4 @@ public class downloadTemplateFromSwiftToSecondaryStorageCommand extends Command return true; } -} \ No newline at end of file +} diff --git a/api/src/com/cloud/agent/api/proxy/CheckConsoleProxyLoadCommand.java b/api/src/com/cloud/agent/api/proxy/CheckConsoleProxyLoadCommand.java index 318d9398d83..7582b0d880c 100644 --- a/api/src/com/cloud/agent/api/proxy/CheckConsoleProxyLoadCommand.java +++ b/api/src/com/cloud/agent/api/proxy/CheckConsoleProxyLoadCommand.java @@ -26,33 +26,33 @@ public class CheckConsoleProxyLoadCommand extends ProxyCommand { private String proxyVmName; private String proxyManagementIp; private int proxyCmdPort; - + public CheckConsoleProxyLoadCommand() { } - + public CheckConsoleProxyLoadCommand(long proxyVmId, String proxyVmName, String proxyManagementIp, int proxyCmdPort) { this.proxyVmId = proxyVmId; this.proxyVmName = proxyVmName; this.proxyManagementIp = proxyManagementIp; this.proxyCmdPort = proxyCmdPort; } - + public long getProxyVmId() { return proxyVmId; } - + public String getProxyVmName() { return proxyVmName; } - + public String getProxyManagementIp() { return proxyManagementIp; } - + public int getProxyCmdPort() { return proxyCmdPort; } - + @Override public boolean executeInSequence() { return false; diff --git a/api/src/com/cloud/agent/api/proxy/ConsoleProxyLoadAnswer.java b/api/src/com/cloud/agent/api/proxy/ConsoleProxyLoadAnswer.java index df8f47d3557..ae93f51789b 100644 --- a/api/src/com/cloud/agent/api/proxy/ConsoleProxyLoadAnswer.java +++ b/api/src/com/cloud/agent/api/proxy/ConsoleProxyLoadAnswer.java @@ -23,21 +23,21 @@ public class ConsoleProxyLoadAnswer extends Answer { private long proxyVmId; private String proxyVmName; - + protected ConsoleProxyLoadAnswer() { } - + public ConsoleProxyLoadAnswer(Command command, long proxyVmId, String proxyVmName, boolean success, String details) { super(command, success, details); - + this.proxyVmId = proxyVmId; this.proxyVmName = proxyVmName; } - + public long getProxyVmId() { return proxyVmId; } - + public String getProxyVmName() { return proxyVmName; } diff --git a/api/src/com/cloud/agent/api/proxy/StartConsoleProxyAgentHttpHandlerCommand.java b/api/src/com/cloud/agent/api/proxy/StartConsoleProxyAgentHttpHandlerCommand.java index fd306ff2a92..c5af38eb724 100644 --- a/api/src/com/cloud/agent/api/proxy/StartConsoleProxyAgentHttpHandlerCommand.java +++ b/api/src/com/cloud/agent/api/proxy/StartConsoleProxyAgentHttpHandlerCommand.java @@ -27,21 +27,21 @@ public class StartConsoleProxyAgentHttpHandlerCommand extends Command { private String keystorePassword; @LogLevel(Log4jLevel.Off) private String encryptorPassword; - + public StartConsoleProxyAgentHttpHandlerCommand() { super(); } - + public StartConsoleProxyAgentHttpHandlerCommand(byte[] ksBits, String ksPassword) { this.keystoreBits = ksBits; this.keystorePassword = ksPassword; } - + @Override public boolean executeInSequence() { return true; } - + public byte[] getKeystoreBits() { return keystoreBits; } diff --git a/api/src/com/cloud/agent/api/proxy/WatchConsoleProxyLoadCommand.java b/api/src/com/cloud/agent/api/proxy/WatchConsoleProxyLoadCommand.java index b918ba49f84..ef4a549daf3 100644 --- a/api/src/com/cloud/agent/api/proxy/WatchConsoleProxyLoadCommand.java +++ b/api/src/com/cloud/agent/api/proxy/WatchConsoleProxyLoadCommand.java @@ -25,7 +25,7 @@ public class WatchConsoleProxyLoadCommand extends ProxyCommand implements CronCo private String proxyManagementIp; private int proxyCmdPort; int interval; - + public WatchConsoleProxyLoadCommand(int interval, long proxyVmId, String proxyVmName, String proxyManagementIp, int proxyCmdPort) { this.interval = interval; @@ -34,30 +34,30 @@ public class WatchConsoleProxyLoadCommand extends ProxyCommand implements CronCo this.proxyManagementIp = proxyManagementIp; this.proxyCmdPort = proxyCmdPort; } - + protected WatchConsoleProxyLoadCommand() { } - + public long getProxyVmId() { return proxyVmId; } - + public String getProxyVmName() { return proxyVmName; } - + public String getProxyManagementIp() { return proxyManagementIp; } - + public int getProxyCmdPort() { return proxyCmdPort; } - + public int getInterval() { return interval; } - + @Override public boolean executeInSequence() { return false; diff --git a/api/src/com/cloud/agent/api/routing/CreateLoadBalancerApplianceCommand.java b/api/src/com/cloud/agent/api/routing/CreateLoadBalancerApplianceCommand.java index ed972a22f51..dc7f1a188fd 100644 --- a/api/src/com/cloud/agent/api/routing/CreateLoadBalancerApplianceCommand.java +++ b/api/src/com/cloud/agent/api/routing/CreateLoadBalancerApplianceCommand.java @@ -27,7 +27,7 @@ public class CreateLoadBalancerApplianceCommand extends NetworkElementCommand { String password; String publicInterface; String privateInterface; - + public CreateLoadBalancerApplianceCommand(String ip, String netmask, String gateway) { this.ip = ip; this.netmask = netmask; @@ -45,4 +45,4 @@ public class CreateLoadBalancerApplianceCommand extends NetworkElementCommand { public String getGateway() { return gateway; } -} \ No newline at end of file +} diff --git a/api/src/com/cloud/agent/api/routing/DhcpEntryCommand.java b/api/src/com/cloud/agent/api/routing/DhcpEntryCommand.java index ff38941f0a2..5c2cd582d4c 100644 --- a/api/src/com/cloud/agent/api/routing/DhcpEntryCommand.java +++ b/api/src/com/cloud/agent/api/routing/DhcpEntryCommand.java @@ -29,56 +29,56 @@ public class DhcpEntryCommand extends NetworkElementCommand { String staticRoutes; String defaultDns; - + protected DhcpEntryCommand() { - + } - + @Override public boolean executeInSequence() { return true; } - + public DhcpEntryCommand(String vmMac, String vmIpAddress, String vmName) { this.vmMac = vmMac; this.vmIpAddress = vmIpAddress; this.vmName = vmName; } - + public DhcpEntryCommand(String vmMac, String vmIpAddress, String vmName, String dns, String gateway) { this(vmMac, vmIpAddress, vmName); this.dns = dns; this.gateway = gateway; } - + public String getDns() { return dns; } - + public String getGateway() { return gateway; } - + public String getVmMac() { return vmMac; } - + public String getVmIpAddress() { return vmIpAddress; } - + public String getVmName() { return vmName; } - + public void setNextServer(String ip) { nextServer = ip; } - + public String getNextServer() { return nextServer; } - + public String getDefaultRouter() { return defaultRouter; } diff --git a/api/src/com/cloud/agent/api/routing/IpAssocAnswer.java b/api/src/com/cloud/agent/api/routing/IpAssocAnswer.java index 18921969f75..194923c497e 100644 --- a/api/src/com/cloud/agent/api/routing/IpAssocAnswer.java +++ b/api/src/com/cloud/agent/api/routing/IpAssocAnswer.java @@ -20,13 +20,13 @@ import com.cloud.agent.api.Answer; public class IpAssocAnswer extends Answer{ String[] results; - + public static final String errorResult = "Failed"; - + protected IpAssocAnswer() { super(); } - + public IpAssocAnswer(IpAssocCommand cmd, String[] results) { boolean finalResult = true; @@ -41,7 +41,7 @@ public class IpAssocAnswer extends Answer{ assert(cmd.getIpAddresses().length == results.length) : "Shouldn't the results match the commands?"; this.results = results; } - + String[] getResults() { return results; } diff --git a/api/src/com/cloud/agent/api/routing/IpAssocCommand.java b/api/src/com/cloud/agent/api/routing/IpAssocCommand.java index 5326b119352..5cdc2da2efa 100644 --- a/api/src/com/cloud/agent/api/routing/IpAssocCommand.java +++ b/api/src/com/cloud/agent/api/routing/IpAssocCommand.java @@ -19,12 +19,12 @@ package com.cloud.agent.api.routing; import com.cloud.agent.api.to.IpAddressTO; public class IpAssocCommand extends NetworkElementCommand { - + IpAddressTO[] ipAddresses; protected IpAssocCommand() { } - + public IpAssocCommand(IpAddressTO[] ips) { this.ipAddresses = ips; } diff --git a/api/src/com/cloud/agent/api/routing/IpAssocVpcCommand.java b/api/src/com/cloud/agent/api/routing/IpAssocVpcCommand.java index cc7fcb00f09..e5c900d19e2 100644 --- a/api/src/com/cloud/agent/api/routing/IpAssocVpcCommand.java +++ b/api/src/com/cloud/agent/api/routing/IpAssocVpcCommand.java @@ -22,7 +22,7 @@ public class IpAssocVpcCommand extends IpAssocCommand{ protected IpAssocVpcCommand() { super(); } - + public IpAssocVpcCommand(IpAddressTO[] ips) { super(ips); } diff --git a/api/src/com/cloud/agent/api/routing/LoadBalancerConfigCommand.java b/api/src/com/cloud/agent/api/routing/LoadBalancerConfigCommand.java index a5505e1e688..1c1fb914da3 100644 --- a/api/src/com/cloud/agent/api/routing/LoadBalancerConfigCommand.java +++ b/api/src/com/cloud/agent/api/routing/LoadBalancerConfigCommand.java @@ -31,13 +31,13 @@ public class LoadBalancerConfigCommand extends NetworkElementCommand { public String lbStatsPort = "8081"; /*load balancer listen on this port for stats */ public String lbStatsSrcCidrs = "0/0" ; /* TODO : currently there is no filtering based on the source ip */ public String lbStatsAuth = "admin1:AdMiN123"; - public String lbStatsUri = "/admin?stats"; + public String lbStatsUri = "/admin?stats"; NicTO nic; Long vpcId; - + protected LoadBalancerConfigCommand() { } - + public LoadBalancerConfigCommand(LoadBalancerTO[] loadBalancers, Long vpcId) { this.loadBalancers = loadBalancers; this.vpcId = vpcId; @@ -51,11 +51,11 @@ public class LoadBalancerConfigCommand extends NetworkElementCommand { this.nic = nic; this.vpcId = vpcId; } - + public NicTO getNic() { return nic; } - + public LoadBalancerTO[] getLoadBalancers() { return loadBalancers; } diff --git a/api/src/com/cloud/agent/api/routing/NetworkElementCommand.java b/api/src/com/cloud/agent/api/routing/NetworkElementCommand.java index 61e41e8f424..41ae80fe223 100644 --- a/api/src/com/cloud/agent/api/routing/NetworkElementCommand.java +++ b/api/src/com/cloud/agent/api/routing/NetworkElementCommand.java @@ -22,7 +22,7 @@ import com.cloud.agent.api.Command; public abstract class NetworkElementCommand extends Command { HashMap accessDetails = new HashMap(0); - + public static final String ACCOUNT_ID = "account.id"; public static final String GUEST_NETWORK_CIDR = "guest.network.cidr"; public static final String GUEST_NETWORK_GATEWAY = "guest.network.gateway"; @@ -32,19 +32,19 @@ public abstract class NetworkElementCommand extends Command { public static final String ROUTER_GUEST_IP = "router.guest.ip"; public static final String ZONE_NETWORK_TYPE = "zone.network.type"; public static final String GUEST_BRIDGE = "guest.bridge"; - + protected NetworkElementCommand() { super(); } - + public void setAccessDetail(String name, String value) { accessDetails.put(name, value); } - + public String getAccessDetail(String name) { return accessDetails.get(name); } - + @Override public boolean executeInSequence() { return false; diff --git a/api/src/com/cloud/agent/api/routing/RemoteAccessVpnCfgCommand.java b/api/src/com/cloud/agent/api/routing/RemoteAccessVpnCfgCommand.java index 8cf3ba2f89c..68d7caf016f 100644 --- a/api/src/com/cloud/agent/api/routing/RemoteAccessVpnCfgCommand.java +++ b/api/src/com/cloud/agent/api/routing/RemoteAccessVpnCfgCommand.java @@ -18,17 +18,17 @@ package com.cloud.agent.api.routing; public class RemoteAccessVpnCfgCommand extends NetworkElementCommand { - + boolean create; String vpnServerIp; String ipRange; String presharedKey; String localIp; - + protected RemoteAccessVpnCfgCommand() { this.create = false; } - + public boolean isCreate() { return create; } @@ -37,12 +37,12 @@ public class RemoteAccessVpnCfgCommand extends NetworkElementCommand { public boolean executeInSequence() { return true; } - - + + public RemoteAccessVpnCfgCommand(boolean create, String vpnServerAddress, String localIp, String ipRange, String ipsecPresharedKey) { this.vpnServerIp = vpnServerAddress; this.ipRange = ipRange; - this.presharedKey = ipsecPresharedKey; + this.presharedKey = ipsecPresharedKey; this.localIp = localIp; this.create = create; } diff --git a/api/src/com/cloud/agent/api/routing/SavePasswordCommand.java b/api/src/com/cloud/agent/api/routing/SavePasswordCommand.java index 92cf671db6f..6dac1488e11 100644 --- a/api/src/com/cloud/agent/api/routing/SavePasswordCommand.java +++ b/api/src/com/cloud/agent/api/routing/SavePasswordCommand.java @@ -22,25 +22,25 @@ public class SavePasswordCommand extends NetworkElementCommand { String password; String vmIpAddress; String vmName; - - protected SavePasswordCommand() { + + protected SavePasswordCommand() { } - + @Override public boolean executeInSequence() { return true; } - + public SavePasswordCommand(String password, String vmIpAddress, String vmName) { this.password = password; this.vmIpAddress = vmIpAddress; this.vmName = vmName; } - + public String getPassword() { return password; } - + public String getVmIpAddress() { return vmIpAddress; } @@ -48,7 +48,7 @@ public class SavePasswordCommand extends NetworkElementCommand { public String getVmName() { return vmName; } - - - + + + } diff --git a/api/src/com/cloud/agent/api/routing/SetFirewallRulesAnswer.java b/api/src/com/cloud/agent/api/routing/SetFirewallRulesAnswer.java index 82730bd7ea2..5268c3dda76 100644 --- a/api/src/com/cloud/agent/api/routing/SetFirewallRulesAnswer.java +++ b/api/src/com/cloud/agent/api/routing/SetFirewallRulesAnswer.java @@ -20,16 +20,16 @@ import com.cloud.agent.api.Answer; public class SetFirewallRulesAnswer extends Answer { String[] results; - + protected SetFirewallRulesAnswer() { } - + public SetFirewallRulesAnswer(SetFirewallRulesCommand cmd, boolean success, String[] results) { super(cmd, success, null); assert (cmd.getRules().length == results.length) : "rules and their results should be the same length don't you think?"; this.results = results; } - + public String[] getResults() { return results; } diff --git a/api/src/com/cloud/agent/api/routing/SetFirewallRulesCommand.java b/api/src/com/cloud/agent/api/routing/SetFirewallRulesCommand.java index 528f36bfa81..3841bd7a157 100644 --- a/api/src/com/cloud/agent/api/routing/SetFirewallRulesCommand.java +++ b/api/src/com/cloud/agent/api/routing/SetFirewallRulesCommand.java @@ -23,7 +23,7 @@ import java.util.Set; import com.cloud.agent.api.to.FirewallRuleTO; /** - * + * * AccessDetails allow different components to put in information about * how to access the components inside the command. */ @@ -32,11 +32,11 @@ public class SetFirewallRulesCommand extends NetworkElementCommand { protected SetFirewallRulesCommand() { } - + public SetFirewallRulesCommand(List rules) { - this.rules = rules.toArray(new FirewallRuleTO[rules.size()]); + this.rules = rules.toArray(new FirewallRuleTO[rules.size()]); } - + public FirewallRuleTO[] getRules() { return rules; } @@ -45,34 +45,34 @@ public class SetFirewallRulesCommand extends NetworkElementCommand { String [][] result = new String [2][]; Set toAdd = new HashSet(); - + for (FirewallRuleTO fwTO: rules) { - /* example : 172.16.92.44:tcp:80:80:0.0.0.0/0:,200.16.92.44:tcp:220:220:0.0.0.0/0:, + /* example : 172.16.92.44:tcp:80:80:0.0.0.0/0:,200.16.92.44:tcp:220:220:0.0.0.0/0:, * each entry format :protocol:srcport:destport:scidr: * reverted entry format :reverted:0:0:0: */ - if (fwTO.revoked() == true) + if (fwTO.revoked() == true) { StringBuilder sb = new StringBuilder(); /* This entry is added just to make sure atleast there will one entry in the list to get the ipaddress */ - sb.append(fwTO.getSrcIp()).append(":reverted:0:0:0:"); + sb.append(fwTO.getSrcIp()).append(":reverted:0:0:0:"); String fwRuleEntry = sb.toString(); toAdd.add(fwRuleEntry); continue; } - + List cidr; StringBuilder sb = new StringBuilder(); sb.append(fwTO.getSrcIp()).append(":").append(fwTO.getProtocol()).append(":"); if ("icmp".compareTo(fwTO.getProtocol()) == 0) { sb.append(fwTO.getIcmpType()).append(":").append(fwTO.getIcmpCode()).append(":"); - + }else if (fwTO.getStringSrcPortRange() == null) sb.append("0:0").append(":"); else sb.append(fwTO.getStringSrcPortRange()).append(":"); - + cidr = fwTO.getSourceCidrList(); if (cidr == null || cidr.isEmpty()) { @@ -80,19 +80,19 @@ public class SetFirewallRulesCommand extends NetworkElementCommand { }else{ Boolean firstEntry = true; for (String tag : cidr) { - if (!firstEntry) sb.append("-"); + if (!firstEntry) sb.append("-"); sb.append(tag); firstEntry = false; } } sb.append(":"); String fwRuleEntry = sb.toString(); - + toAdd.add(fwRuleEntry); - + } result[0] = toAdd.toArray(new String[toAdd.size()]); - + return result; } } diff --git a/api/src/com/cloud/agent/api/routing/SetNetworkACLAnswer.java b/api/src/com/cloud/agent/api/routing/SetNetworkACLAnswer.java index cc14295e227..dc192add20b 100644 --- a/api/src/com/cloud/agent/api/routing/SetNetworkACLAnswer.java +++ b/api/src/com/cloud/agent/api/routing/SetNetworkACLAnswer.java @@ -20,17 +20,17 @@ import com.cloud.agent.api.Answer; public class SetNetworkACLAnswer extends Answer { String[] results; - + protected SetNetworkACLAnswer() { } - + public SetNetworkACLAnswer(SetNetworkACLCommand cmd, boolean success, String[] results) { super(cmd, success, null); assert (cmd.getRules().length == results.length) : "ACLs and their results should be the same length"; this.results = results; } - + public String[] getResults() { return results; } -} \ No newline at end of file +} diff --git a/api/src/com/cloud/agent/api/routing/SetNetworkACLCommand.java b/api/src/com/cloud/agent/api/routing/SetNetworkACLCommand.java index b8fe119176f..dba7354c8f2 100644 --- a/api/src/com/cloud/agent/api/routing/SetNetworkACLCommand.java +++ b/api/src/com/cloud/agent/api/routing/SetNetworkACLCommand.java @@ -30,12 +30,12 @@ public class SetNetworkACLCommand extends NetworkElementCommand{ protected SetNetworkACLCommand() { } - + public SetNetworkACLCommand(List rules, NicTO nic) { - this.rules = rules.toArray(new NetworkACLTO[rules.size()]); + this.rules = rules.toArray(new NetworkACLTO[rules.size()]); this.nic = nic; } - + public NetworkACLTO[] getRules() { return rules; } @@ -43,22 +43,22 @@ public class SetNetworkACLCommand extends NetworkElementCommand{ String [][] result = new String [2][]; Set toAdd = new HashSet(); - + for (NetworkACLTO aclTO: rules) { - /* example : Ingress:tcp:80:80:0.0.0.0/0:,Egress:tcp:220:220:0.0.0.0/0:, + /* example : Ingress:tcp:80:80:0.0.0.0/0:,Egress:tcp:220:220:0.0.0.0/0:, * each entry format Ingress/Egress:protocol:start port: end port:scidrs: * reverted entry format Ingress/Egress:reverted:0:0:0: */ - if (aclTO.revoked() == true) + if (aclTO.revoked() == true) { StringBuilder sb = new StringBuilder(); /* This entry is added just to make sure atleast there will one entry in the list to get the ipaddress */ - sb.append(aclTO.getTrafficType().toString()).append(":reverted:0:0:0:"); + sb.append(aclTO.getTrafficType().toString()).append(":reverted:0:0:0:"); String aclRuleEntry = sb.toString(); toAdd.add(aclRuleEntry); continue; } - + List cidr; StringBuilder sb = new StringBuilder(); sb.append(aclTO.getTrafficType().toString()).append(":").append(aclTO.getProtocol()).append(":"); @@ -75,22 +75,22 @@ public class SetNetworkACLCommand extends NetworkElementCommand{ }else{ Boolean firstEntry = true; for (String tag : cidr) { - if (!firstEntry) sb.append("-"); + if (!firstEntry) sb.append("-"); sb.append(tag); firstEntry = false; } } sb.append(":"); String aclRuleEntry = sb.toString(); - + toAdd.add(aclRuleEntry); - + } result[0] = toAdd.toArray(new String[toAdd.size()]); - + return result; } - + public NicTO getNic() { return nic; } diff --git a/api/src/com/cloud/agent/api/routing/SetPortForwardingRulesAnswer.java b/api/src/com/cloud/agent/api/routing/SetPortForwardingRulesAnswer.java index 9aa2f6db5d2..15306fbe645 100644 --- a/api/src/com/cloud/agent/api/routing/SetPortForwardingRulesAnswer.java +++ b/api/src/com/cloud/agent/api/routing/SetPortForwardingRulesAnswer.java @@ -23,14 +23,14 @@ public class SetPortForwardingRulesAnswer extends Answer { protected SetPortForwardingRulesAnswer() { super(); } - + public SetPortForwardingRulesAnswer(SetPortForwardingRulesCommand cmd, String[] results, boolean success) { super(cmd, success, null); - + assert(cmd.getRules().length == results.length) : "Shouldn't the results match the commands?"; this.results = results; } - + String[] getResults() { return results; } diff --git a/api/src/com/cloud/agent/api/routing/SetPortForwardingRulesCommand.java b/api/src/com/cloud/agent/api/routing/SetPortForwardingRulesCommand.java index dc820431e36..a7bf37f83ef 100644 --- a/api/src/com/cloud/agent/api/routing/SetPortForwardingRulesCommand.java +++ b/api/src/com/cloud/agent/api/routing/SetPortForwardingRulesCommand.java @@ -25,7 +25,7 @@ public class SetPortForwardingRulesCommand extends NetworkElementCommand { protected SetPortForwardingRulesCommand() { } - + public SetPortForwardingRulesCommand(List pfRules) { rules = new PortForwardingRuleTO[pfRules.size()]; int i = 0; @@ -33,7 +33,7 @@ public class SetPortForwardingRulesCommand extends NetworkElementCommand { rules[i++] = rule; } } - + public PortForwardingRuleTO[] getRules() { return rules; } diff --git a/api/src/com/cloud/agent/api/routing/SetPortForwardingRulesVpcCommand.java b/api/src/com/cloud/agent/api/routing/SetPortForwardingRulesVpcCommand.java index 042e788b4ce..7228457d890 100644 --- a/api/src/com/cloud/agent/api/routing/SetPortForwardingRulesVpcCommand.java +++ b/api/src/com/cloud/agent/api/routing/SetPortForwardingRulesVpcCommand.java @@ -23,7 +23,7 @@ import com.cloud.agent.api.to.PortForwardingRuleTO; public class SetPortForwardingRulesVpcCommand extends SetPortForwardingRulesCommand{ protected SetPortForwardingRulesVpcCommand() { } - + public SetPortForwardingRulesVpcCommand(List pfRules) { super(pfRules); } diff --git a/api/src/com/cloud/agent/api/routing/SetSourceNatCommand.java b/api/src/com/cloud/agent/api/routing/SetSourceNatCommand.java index 165a15d5640..96aa001de84 100644 --- a/api/src/com/cloud/agent/api/routing/SetSourceNatCommand.java +++ b/api/src/com/cloud/agent/api/routing/SetSourceNatCommand.java @@ -21,10 +21,10 @@ import com.cloud.agent.api.to.IpAddressTO; public class SetSourceNatCommand extends NetworkElementCommand{ IpAddressTO ipAddress; boolean add; - + protected SetSourceNatCommand() { } - + public SetSourceNatCommand(IpAddressTO ip, boolean add) { this.ipAddress = ip; this.add = add; @@ -38,5 +38,5 @@ public class SetSourceNatCommand extends NetworkElementCommand{ public IpAddressTO getIpAddress() { return ipAddress; } - + } diff --git a/api/src/com/cloud/agent/api/routing/SetStaticNatRulesAnswer.java b/api/src/com/cloud/agent/api/routing/SetStaticNatRulesAnswer.java index e57b3277850..9b5d09b25c5 100644 --- a/api/src/com/cloud/agent/api/routing/SetStaticNatRulesAnswer.java +++ b/api/src/com/cloud/agent/api/routing/SetStaticNatRulesAnswer.java @@ -23,14 +23,14 @@ public class SetStaticNatRulesAnswer extends Answer { protected SetStaticNatRulesAnswer() { super(); } - + public SetStaticNatRulesAnswer(SetStaticNatRulesCommand cmd, String[] results, boolean success) { super(cmd, success, null); - + assert(cmd.getRules().length == results.length) : "Shouldn't the results match the commands?"; this.results = results; } - + String[] getResults() { return results; } diff --git a/api/src/com/cloud/agent/api/routing/SetStaticNatRulesCommand.java b/api/src/com/cloud/agent/api/routing/SetStaticNatRulesCommand.java index c28032ccdfb..852d16167ab 100644 --- a/api/src/com/cloud/agent/api/routing/SetStaticNatRulesCommand.java +++ b/api/src/com/cloud/agent/api/routing/SetStaticNatRulesCommand.java @@ -21,13 +21,13 @@ import java.util.List; import com.cloud.agent.api.to.StaticNatRuleTO; public class SetStaticNatRulesCommand extends NetworkElementCommand{ - + StaticNatRuleTO[] rules; Long vpcId; protected SetStaticNatRulesCommand() { } - + public SetStaticNatRulesCommand(List staticNatRules, Long vpcId) { rules = new StaticNatRuleTO[staticNatRules.size()]; int i = 0; @@ -36,7 +36,7 @@ public class SetStaticNatRulesCommand extends NetworkElementCommand{ } this.vpcId = vpcId; } - + public StaticNatRuleTO[] getRules() { return rules; } diff --git a/api/src/com/cloud/agent/api/routing/SetStaticRouteAnswer.java b/api/src/com/cloud/agent/api/routing/SetStaticRouteAnswer.java index c13bda060e2..76f5bb96b1e 100644 --- a/api/src/com/cloud/agent/api/routing/SetStaticRouteAnswer.java +++ b/api/src/com/cloud/agent/api/routing/SetStaticRouteAnswer.java @@ -20,16 +20,16 @@ import com.cloud.agent.api.Answer; public class SetStaticRouteAnswer extends Answer{ String[] results; - + protected SetStaticRouteAnswer() { } - + public SetStaticRouteAnswer(SetStaticRouteCommand cmd, boolean success, String[] results) { super(cmd, success, null); assert (cmd.getStaticRoutes().length == results.length) : "Static routes and their results should be the same length"; this.results = results; } - + public String[] getResults() { return results; } diff --git a/api/src/com/cloud/agent/api/routing/SetStaticRouteCommand.java b/api/src/com/cloud/agent/api/routing/SetStaticRouteCommand.java index 0c91a9efa74..c9c2056816b 100644 --- a/api/src/com/cloud/agent/api/routing/SetStaticRouteCommand.java +++ b/api/src/com/cloud/agent/api/routing/SetStaticRouteCommand.java @@ -27,12 +27,12 @@ import com.cloud.utils.net.NetUtils; public class SetStaticRouteCommand extends NetworkElementCommand{ StaticRouteProfile[] staticRoutes; - + protected SetStaticRouteCommand() { } - + public SetStaticRouteCommand(List staticRoutes) { - this.staticRoutes = staticRoutes.toArray(new StaticRouteProfile[staticRoutes.size()]); + this.staticRoutes = staticRoutes.toArray(new StaticRouteProfile[staticRoutes.size()]); } public StaticRouteProfile[] getStaticRoutes() { diff --git a/api/src/com/cloud/agent/api/routing/Site2SiteVpnCfgCommand.java b/api/src/com/cloud/agent/api/routing/Site2SiteVpnCfgCommand.java index 97db2f96cc3..83163039f51 100644 --- a/api/src/com/cloud/agent/api/routing/Site2SiteVpnCfgCommand.java +++ b/api/src/com/cloud/agent/api/routing/Site2SiteVpnCfgCommand.java @@ -5,7 +5,7 @@ // 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, @@ -30,16 +30,16 @@ public class Site2SiteVpnCfgCommand extends NetworkElementCommand { private long ikeLifetime; private long espLifetime; private boolean dpd; - + @Override public boolean executeInSequence() { return true; } - + public Site2SiteVpnCfgCommand () { this.create = false; } - + public Site2SiteVpnCfgCommand (boolean create, String localPublicIp, String localPublicGateway, String localGuestCidr, String peerGatewayIp, String peerGuestCidrList, String ikePolicy, String espPolicy, String ipsecPsk, Long ikeLifetime, Long espLifetime, Boolean dpd) { this.create = create; @@ -55,11 +55,11 @@ public class Site2SiteVpnCfgCommand extends NetworkElementCommand { this.espLifetime = espLifetime; this.dpd = dpd; } - + public boolean isCreate() { return create; } - + public void setCreate(boolean create) { this.create = create; } diff --git a/api/src/com/cloud/agent/api/routing/UserDataCommand.java b/api/src/com/cloud/agent/api/routing/UserDataCommand.java index 103bd91f804..f7b38c8c364 100644 --- a/api/src/com/cloud/agent/api/routing/UserDataCommand.java +++ b/api/src/com/cloud/agent/api/routing/UserDataCommand.java @@ -23,31 +23,31 @@ public class UserDataCommand extends NetworkElementCommand { String vmIpAddress; String routerPrivateIpAddress; String vmName; - + protected UserDataCommand() { - + } - + @Override public boolean executeInSequence() { return true; } - + public UserDataCommand(String userData, String vmIpAddress, String routerPrivateIpAddress, String vmName) { this.userData = userData; this.vmIpAddress = vmIpAddress; this.routerPrivateIpAddress = routerPrivateIpAddress; this.vmName = vmName; } - + public String getRouterPrivateIpAddress() { return routerPrivateIpAddress; } - + public String getVmIpAddress() { return vmIpAddress; } - + public String getVmName() { return vmName; } @@ -59,5 +59,5 @@ public class UserDataCommand extends NetworkElementCommand { public void setUserData(String userData) { this.userData = userData; } - + } diff --git a/api/src/com/cloud/agent/api/routing/VmDataCommand.java b/api/src/com/cloud/agent/api/routing/VmDataCommand.java index d5053840e0b..df882554479 100644 --- a/api/src/com/cloud/agent/api/routing/VmDataCommand.java +++ b/api/src/com/cloud/agent/api/routing/VmDataCommand.java @@ -23,24 +23,24 @@ import com.cloud.agent.api.LogLevel; import com.cloud.agent.api.LogLevel.Log4jLevel; public class VmDataCommand extends NetworkElementCommand { - + String vmIpAddress; String vmName; @LogLevel(Log4jLevel.Trace) List vmData; - + protected VmDataCommand() { } - + @Override public boolean executeInSequence() { return true; } - + public VmDataCommand(String vmIpAddress) { this(vmIpAddress, null); } - + public String getVmName() { return vmName; } @@ -50,18 +50,18 @@ public class VmDataCommand extends NetworkElementCommand { this.vmIpAddress = vmIpAddress; this.vmData = new ArrayList(); } - - + + public String getVmIpAddress() { return vmIpAddress; } - + public List getVmData() { return vmData; } - + public void addVmData(String folder, String file, String contents) { vmData.add(new String[]{folder, file, contents}); } - + } diff --git a/api/src/com/cloud/agent/api/routing/VpnUsersCfgCommand.java b/api/src/com/cloud/agent/api/routing/VpnUsersCfgCommand.java index 249c2358d2f..ebe725d2911 100644 --- a/api/src/com/cloud/agent/api/routing/VpnUsersCfgCommand.java +++ b/api/src/com/cloud/agent/api/routing/VpnUsersCfgCommand.java @@ -23,12 +23,12 @@ import com.cloud.network.VpnUser; public class VpnUsersCfgCommand extends NetworkElementCommand { - public static class UsernamePassword{ + public static class UsernamePassword{ private String username; @LogLevel(Log4jLevel.Off) private String password; boolean add = true; - + public boolean isAdd() { return add; } @@ -66,11 +66,11 @@ public class VpnUsersCfgCommand extends NetworkElementCommand { } } UsernamePassword [] userpwds; - + protected VpnUsersCfgCommand() { - + } - + public VpnUsersCfgCommand(List addUsers, List removeUsers) { userpwds = new UsernamePassword[addUsers.size() + removeUsers.size()]; int i = 0; @@ -86,7 +86,7 @@ public class VpnUsersCfgCommand extends NetworkElementCommand { public boolean executeInSequence() { return true; } - + public UsernamePassword[] getUserpwds() { return userpwds; } diff --git a/api/src/com/cloud/agent/api/storage/AbstractDownloadCommand.java b/api/src/com/cloud/agent/api/storage/AbstractDownloadCommand.java index 5737a05d98b..04b3d4360d5 100644 --- a/api/src/com/cloud/agent/api/storage/AbstractDownloadCommand.java +++ b/api/src/com/cloud/agent/api/storage/AbstractDownloadCommand.java @@ -24,46 +24,46 @@ public abstract class AbstractDownloadCommand extends ssCommand { private ImageFormat format; private long accountId; private String name; - + protected AbstractDownloadCommand() { } - + protected AbstractDownloadCommand(String name, String url, ImageFormat format, long accountId) { assert(url != null); url = url.replace('\\', '/'); - + this.url = url; this.format = format; this.accountId = accountId; this.name = name; } - + protected AbstractDownloadCommand(AbstractDownloadCommand that) { super(that); assert(that.url != null); - + this.url = that.url.replace('\\', '/'); this.format = that.format; this.accountId = that.accountId; this.name = that.name; } - + public String getUrl() { return url; } - + public String getName() { return name; } - + public ImageFormat getFormat() { return format; } - + public long getAccountId() { return accountId; } - + @Override public boolean executeInSequence() { return true; diff --git a/api/src/com/cloud/agent/api/storage/AbstractUploadCommand.java b/api/src/com/cloud/agent/api/storage/AbstractUploadCommand.java index 1c55e8fafd6..49c04b16a81 100644 --- a/api/src/com/cloud/agent/api/storage/AbstractUploadCommand.java +++ b/api/src/com/cloud/agent/api/storage/AbstractUploadCommand.java @@ -25,37 +25,37 @@ public class AbstractUploadCommand extends StorageCommand{ private ImageFormat format; private long accountId; private String name; - + protected AbstractUploadCommand() { } - + protected AbstractUploadCommand(String name, String url, ImageFormat format, long accountId) { this.url = url; this.format = format; this.accountId = accountId; this.name = name; } - + protected AbstractUploadCommand(AbstractUploadCommand that) { this(that.name, that.url, that.format, that.accountId); } - + public String getUrl() { return url; } - + public String getName() { return name; } - + public ImageFormat getFormat() { return format; } - + public long getAccountId() { return accountId; } - + @Override public boolean executeInSequence() { return true; diff --git a/api/src/com/cloud/agent/api/storage/CopyVolumeAnswer.java b/api/src/com/cloud/agent/api/storage/CopyVolumeAnswer.java index 7704569b37a..8c55ac3eecc 100644 --- a/api/src/com/cloud/agent/api/storage/CopyVolumeAnswer.java +++ b/api/src/com/cloud/agent/api/storage/CopyVolumeAnswer.java @@ -22,20 +22,20 @@ import com.cloud.agent.api.Command; public class CopyVolumeAnswer extends Answer { private String volumeFolder; private String volumePath; - + protected CopyVolumeAnswer() { } - + public CopyVolumeAnswer(Command command, boolean success, String details, String volumeFolder, String volumePath) { super(command, success, details); this.volumeFolder = volumeFolder; this.volumePath = volumePath; } - + public String getVolumeFolder() { return volumeFolder; } - + public String getVolumePath() { return volumePath; } diff --git a/api/src/com/cloud/agent/api/storage/CopyVolumeCommand.java b/api/src/com/cloud/agent/api/storage/CopyVolumeCommand.java index 26bd1871138..3d05e9ba69c 100644 --- a/api/src/com/cloud/agent/api/storage/CopyVolumeCommand.java +++ b/api/src/com/cloud/agent/api/storage/CopyVolumeCommand.java @@ -23,49 +23,49 @@ import com.cloud.storage.StoragePool; public class CopyVolumeCommand extends Command { long volumeId; - String volumePath; + String volumePath; StorageFilerTO pool; String secondaryStorageURL; boolean toSecondaryStorage; String vmName; - - public CopyVolumeCommand() { + + public CopyVolumeCommand() { } - + public CopyVolumeCommand(long volumeId, String volumePath, StoragePool pool, String secondaryStorageURL, boolean toSecondaryStorage, int wait) { this.volumeId = volumeId; - this.volumePath = volumePath; + this.volumePath = volumePath; this.pool = new StorageFilerTO(pool); this.secondaryStorageURL = secondaryStorageURL; this.toSecondaryStorage = toSecondaryStorage; setWait(wait); } - + @Override public boolean executeInSequence() { return true; } - + public String getVolumePath() { return volumePath; } - + public long getVolumeId() { return volumeId; } - + public StorageFilerTO getPool() { return pool; } - + public String getSecondaryStorageURL() { return secondaryStorageURL; } - + public boolean toSecondaryStorage() { return toSecondaryStorage; } - + public String getVmName() { return vmName; } diff --git a/api/src/com/cloud/agent/api/storage/CreateAnswer.java b/api/src/com/cloud/agent/api/storage/CreateAnswer.java index 695b6bad316..ab6cc038604 100644 --- a/api/src/com/cloud/agent/api/storage/CreateAnswer.java +++ b/api/src/com/cloud/agent/api/storage/CreateAnswer.java @@ -24,29 +24,29 @@ public class CreateAnswer extends Answer { boolean requestTemplateReload = false; protected CreateAnswer() { } - + public CreateAnswer(CreateCommand cmd, VolumeTO volume) { super(cmd, true, null); this.volume = volume; } - + public CreateAnswer(CreateCommand cmd, String details) { super(cmd, false, details); } - + public CreateAnswer(CreateCommand cmd, String details, boolean requestTemplateReload) { super(cmd, false, details); this.requestTemplateReload = requestTemplateReload; } - + public CreateAnswer(CreateCommand cmd, Exception e) { super(cmd, e); } - + public VolumeTO getVolume() { return volume; } - + public boolean templateReloadRequested() { return requestTemplateReload; } diff --git a/api/src/com/cloud/agent/api/storage/CreateCommand.java b/api/src/com/cloud/agent/api/storage/CreateCommand.java index b8b2446216d..fd0375aa6e7 100644 --- a/api/src/com/cloud/agent/api/storage/CreateCommand.java +++ b/api/src/com/cloud/agent/api/storage/CreateCommand.java @@ -26,14 +26,14 @@ public class CreateCommand extends Command { private StorageFilerTO pool; private DiskProfile diskCharacteristics; private String templateUrl; - + protected CreateCommand() { super(); } /** * Construction for template based volumes. - * + * * @param vol * @param vm * @param diskCharacteristics @@ -47,7 +47,7 @@ public class CreateCommand extends Command { /** * Construction for regular volumes. - * + * * @param vol * @param vm * @param diskCharacteristics @@ -55,19 +55,19 @@ public class CreateCommand extends Command { */ public CreateCommand(DiskProfile diskCharacteristics, StorageFilerTO pool) { this.volId = diskCharacteristics.getVolumeId(); - this.diskCharacteristics = diskCharacteristics; + this.diskCharacteristics = diskCharacteristics; this.pool = pool; this.templateUrl = null; } - + public CreateCommand(DiskProfile diskCharacteristics, String templateUrl, StoragePool pool) { this(diskCharacteristics, templateUrl, new StorageFilerTO(pool)); } - + public CreateCommand(DiskProfile diskCharacteristics, StoragePool pool) { this(diskCharacteristics, new StorageFilerTO(pool)); } - + @Override public boolean executeInSequence() { return true; @@ -76,19 +76,19 @@ public class CreateCommand extends Command { public String getTemplateUrl() { return templateUrl; } - + public StorageFilerTO getPool() { return pool; } - + public DiskProfile getDiskCharacteristics() { return diskCharacteristics; } - + public long getVolumeId() { return volId; } - + @Deprecated public String getInstanceName() { return null; diff --git a/api/src/com/cloud/agent/api/storage/CreateEntityDownloadURLAnswer.java b/api/src/com/cloud/agent/api/storage/CreateEntityDownloadURLAnswer.java index 550a9490e90..808a67f994f 100644 --- a/api/src/com/cloud/agent/api/storage/CreateEntityDownloadURLAnswer.java +++ b/api/src/com/cloud/agent/api/storage/CreateEntityDownloadURLAnswer.java @@ -19,19 +19,19 @@ package com.cloud.agent.api.storage; import com.cloud.agent.api.Answer; public class CreateEntityDownloadURLAnswer extends Answer{ - + String resultString; short resultCode; public static final short RESULT_SUCCESS = 1; public static final short RESULT_FAILURE = 0; - + public CreateEntityDownloadURLAnswer(String resultString, short resultCode) { super(); this.resultString = resultString; this.resultCode = resultCode; - } - - public CreateEntityDownloadURLAnswer(){ + } + + public CreateEntityDownloadURLAnswer(){ } } diff --git a/api/src/com/cloud/agent/api/storage/CreateEntityDownloadURLCommand.java b/api/src/com/cloud/agent/api/storage/CreateEntityDownloadURLCommand.java index f32002257ca..c80179a0560 100755 --- a/api/src/com/cloud/agent/api/storage/CreateEntityDownloadURLCommand.java +++ b/api/src/com/cloud/agent/api/storage/CreateEntityDownloadURLCommand.java @@ -26,7 +26,7 @@ public class CreateEntityDownloadURLCommand extends AbstractDownloadCommand { this.installPath = installPath; this.extractLinkUUID = uuid; } - + public CreateEntityDownloadURLCommand(String installPath, String uuid) { super(); this.parent = parent; @@ -40,7 +40,7 @@ public class CreateEntityDownloadURLCommand extends AbstractDownloadCommand { private String installPath; private String parent; private String extractLinkUUID; - + @Override public boolean executeInSequence() { return false; @@ -53,7 +53,7 @@ public class CreateEntityDownloadURLCommand extends AbstractDownloadCommand { public void setInstallPath(String installPath) { this.installPath = installPath; } - + public String getParent() { return parent; } diff --git a/api/src/com/cloud/agent/api/storage/CreatePrivateTemplateAnswer.java b/api/src/com/cloud/agent/api/storage/CreatePrivateTemplateAnswer.java index 2dfcf211c0f..83db84d8b87 100644 --- a/api/src/com/cloud/agent/api/storage/CreatePrivateTemplateAnswer.java +++ b/api/src/com/cloud/agent/api/storage/CreatePrivateTemplateAnswer.java @@ -29,7 +29,7 @@ public class CreatePrivateTemplateAnswer extends Answer { public CreatePrivateTemplateAnswer() {} - public CreatePrivateTemplateAnswer(Command cmd, boolean success, String result, String path, long virtualSize, + public CreatePrivateTemplateAnswer(Command cmd, boolean success, String result, String path, long virtualSize, long physicalSize, String uniqueName, ImageFormat format) { super(cmd, success, result); _path = path; @@ -42,23 +42,23 @@ public class CreatePrivateTemplateAnswer extends Answer { public CreatePrivateTemplateAnswer(Command cmd, boolean success, String result) { super(cmd, success, result); } - + public String getPath() { return _path; } - + public void setPath(String path) { _path = path; } - + public long getVirtualSize() { return _virtualSize; } - + public void setVirtualSize(long virtualSize) { _virtualSize = virtualSize; } - + public void setphysicalSize(long _physicalSize) { this._physicalSize = _physicalSize; } @@ -70,7 +70,7 @@ public class CreatePrivateTemplateAnswer extends Answer { public String getUniqueName() { return _uniqueName; } - + public ImageFormat getImageFormat() { return _format; } diff --git a/api/src/com/cloud/agent/api/storage/CreatePrivateTemplateCommand.java b/api/src/com/cloud/agent/api/storage/CreatePrivateTemplateCommand.java index 5fd186cb37f..d392a89ec38 100644 --- a/api/src/com/cloud/agent/api/storage/CreatePrivateTemplateCommand.java +++ b/api/src/com/cloud/agent/api/storage/CreatePrivateTemplateCommand.java @@ -24,7 +24,7 @@ public class CreatePrivateTemplateCommand extends StorageCommand { private String _uniqueName; private long _templateId; private long _accountId; - + // For XenServer private String _secondaryStorageURL; private String _snapshotName; @@ -44,10 +44,10 @@ public class CreatePrivateTemplateCommand extends StorageCommand { } @Override - public boolean executeInSequence() { + public boolean executeInSequence() { return false; } - + public String getSecondaryStorageURL() { return _secondaryStorageURL; } @@ -67,23 +67,23 @@ public class CreatePrivateTemplateCommand extends StorageCommand { public String getSnapshotPath() { return _snapshotPath; } - + public String getSnapshotName() { return _snapshotName; } - + public String getUserFolder() { return _userFolder; } - + public long getTemplateId() { return _templateId; } - + public long getAccountId() { return _accountId; } - + public void setTemplateId(long templateId) { _templateId = templateId; } diff --git a/api/src/com/cloud/agent/api/storage/DeleteEntityDownloadURLAnswer.java b/api/src/com/cloud/agent/api/storage/DeleteEntityDownloadURLAnswer.java index 69a2b495a30..c6fdf3cb6fe 100644 --- a/api/src/com/cloud/agent/api/storage/DeleteEntityDownloadURLAnswer.java +++ b/api/src/com/cloud/agent/api/storage/DeleteEntityDownloadURLAnswer.java @@ -19,19 +19,19 @@ package com.cloud.agent.api.storage; import com.cloud.agent.api.Answer; public class DeleteEntityDownloadURLAnswer extends Answer{ - + String resultString; short resultCode; public static final short RESULT_SUCCESS = 1; public static final short RESULT_FAILURE = 0; - + public DeleteEntityDownloadURLAnswer(String resultString, short resultCode) { super(); this.resultString = resultString; this.resultCode = resultCode; - } - - public DeleteEntityDownloadURLAnswer(){ + } + + public DeleteEntityDownloadURLAnswer(){ } } diff --git a/api/src/com/cloud/agent/api/storage/DeleteEntityDownloadURLCommand.java b/api/src/com/cloud/agent/api/storage/DeleteEntityDownloadURLCommand.java index 772e6c6b251..fbfacb97c85 100755 --- a/api/src/com/cloud/agent/api/storage/DeleteEntityDownloadURLCommand.java +++ b/api/src/com/cloud/agent/api/storage/DeleteEntityDownloadURLCommand.java @@ -19,9 +19,9 @@ package com.cloud.agent.api.storage; import com.cloud.storage.Upload; public class DeleteEntityDownloadURLCommand extends AbstractDownloadCommand { - + private String path; - private String extractUrl; + private String extractUrl; private Upload.Type type; private String parentPath; diff --git a/api/src/com/cloud/agent/api/storage/DeleteTemplateCommand.java b/api/src/com/cloud/agent/api/storage/DeleteTemplateCommand.java index ce349dda522..69f465c6b16 100644 --- a/api/src/com/cloud/agent/api/storage/DeleteTemplateCommand.java +++ b/api/src/com/cloud/agent/api/storage/DeleteTemplateCommand.java @@ -21,19 +21,19 @@ public class DeleteTemplateCommand extends ssCommand { private String templatePath; - public DeleteTemplateCommand() { + public DeleteTemplateCommand() { } - + public DeleteTemplateCommand(String secUrl, String templatePath) { this.setSecUrl(secUrl); this.templatePath = templatePath; } - + @Override public boolean executeInSequence() { return true; } - + public String getTemplatePath() { return templatePath; } diff --git a/api/src/com/cloud/agent/api/storage/DeleteVolumeCommand.java b/api/src/com/cloud/agent/api/storage/DeleteVolumeCommand.java index ea729e81bda..949af010423 100755 --- a/api/src/com/cloud/agent/api/storage/DeleteVolumeCommand.java +++ b/api/src/com/cloud/agent/api/storage/DeleteVolumeCommand.java @@ -14,25 +14,25 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.agent.api.storage; - -public class DeleteVolumeCommand extends ssCommand { - private String volumePath; - - public DeleteVolumeCommand() { - } - - public DeleteVolumeCommand(String secUrl, String volumePath) { - this.setSecUrl(secUrl); - this.volumePath = volumePath; - } - - @Override - public boolean executeInSequence() { - return true; - } - - public String getVolumePath() { - return volumePath; - } -} +package com.cloud.agent.api.storage; + +public class DeleteVolumeCommand extends ssCommand { + private String volumePath; + + public DeleteVolumeCommand() { + } + + public DeleteVolumeCommand(String secUrl, String volumePath) { + this.setSecUrl(secUrl); + this.volumePath = volumePath; + } + + @Override + public boolean executeInSequence() { + return true; + } + + public String getVolumePath() { + return volumePath; + } +} diff --git a/api/src/com/cloud/agent/api/storage/DestroyAnswer.java b/api/src/com/cloud/agent/api/storage/DestroyAnswer.java index 2f01c1bcd28..ac60015944f 100644 --- a/api/src/com/cloud/agent/api/storage/DestroyAnswer.java +++ b/api/src/com/cloud/agent/api/storage/DestroyAnswer.java @@ -22,7 +22,7 @@ public class DestroyAnswer extends Answer { public DestroyAnswer(DestroyCommand cmd, boolean result, String details) { super(cmd, result, details); } - + // Constructor for gson. protected DestroyAnswer() { super(); diff --git a/api/src/com/cloud/agent/api/storage/DestroyCommand.java b/api/src/com/cloud/agent/api/storage/DestroyCommand.java index 29c564c3bc3..6732ea59c23 100755 --- a/api/src/com/cloud/agent/api/storage/DestroyCommand.java +++ b/api/src/com/cloud/agent/api/storage/DestroyCommand.java @@ -25,25 +25,25 @@ public class DestroyCommand extends StorageCommand { // in VMware, things are designed around VM instead of volume, we need it the volume VM context if the volume is attached String vmName; VolumeTO volume; - + protected DestroyCommand() { } - + public DestroyCommand(StoragePool pool, Volume volume, String vmName) { this.volume = new VolumeTO(volume, pool); this.vmName = vmName; } - + public DestroyCommand(StoragePool pool, VMTemplateStorageResourceAssoc templatePoolRef) { - volume = new VolumeTO(templatePoolRef.getId(), null, pool.getPoolType(), pool.getUuid(), - null, pool.getPath(), templatePoolRef.getInstallPath(), + volume = new VolumeTO(templatePoolRef.getId(), null, pool.getPoolType(), pool.getUuid(), + null, pool.getPath(), templatePoolRef.getInstallPath(), templatePoolRef.getTemplateSize(), null); } - + public VolumeTO getVolume() { return volume; } - + public String getVmName() { return vmName; } diff --git a/api/src/com/cloud/agent/api/storage/DownloadAnswer.java b/api/src/com/cloud/agent/api/storage/DownloadAnswer.java index 52c32455d80..bb7b8a9239c 100755 --- a/api/src/com/cloud/agent/api/storage/DownloadAnswer.java +++ b/api/src/com/cloud/agent/api/storage/DownloadAnswer.java @@ -33,40 +33,40 @@ public class DownloadAnswer extends Answer { private long templateSize = 0L; private long templatePhySicalSize = 0L; private String checkSum; - + public String getCheckSum() { return checkSum; } - + public int getDownloadPct() { return downloadPct; } public String getErrorString() { return errorString; } - + public String getDownloadStatusString() { return downloadStatus.toString(); } - + public VMTemplateStorageResourceAssoc.Status getDownloadStatus() { return downloadStatus; } - + public String getDownloadPath() { return downloadPath; } protected DownloadAnswer() { - + } - + public String getJobId() { return jobId; } public void setJobId(String jobId) { this.jobId = jobId; } - + public DownloadAnswer(String errorString, Status status) { super(); this.downloadPct = 0; @@ -74,7 +74,7 @@ public class DownloadAnswer extends Answer { this.downloadStatus = status; this.details = errorString; } - + public DownloadAnswer(String jobId, int downloadPct, String errorString, Status downloadStatus, String fileSystemPath, String installPath, long templateSize, long templatePhySicalSize, String checkSum) { super(); @@ -89,7 +89,7 @@ public class DownloadAnswer extends Answer { this.templatePhySicalSize = templatePhySicalSize; this.checkSum = checkSum; } - + public DownloadAnswer(String jobId, int downloadPct, Command command, Status downloadStatus, String fileSystemPath, String installPath) { super(command); @@ -99,7 +99,7 @@ public class DownloadAnswer extends Answer { this.downloadPath = fileSystemPath; this.installPath = installPath; } - + private static String fixPath(String path){ if (path == null) { return path; @@ -112,11 +112,11 @@ public class DownloadAnswer extends Answer { } return path; } - + public void setDownloadStatus(VMTemplateStorageResourceAssoc.Status downloadStatus) { this.downloadStatus = downloadStatus; } - + public String getInstallPath() { return installPath; } @@ -127,7 +127,7 @@ public class DownloadAnswer extends Answer { public void setTemplateSize(long templateSize) { this.templateSize = templateSize; } - + public Long getTemplateSize() { return templateSize; } @@ -137,5 +137,5 @@ public class DownloadAnswer extends Answer { public long getTemplatePhySicalSize() { return templatePhySicalSize; } - + } diff --git a/api/src/com/cloud/agent/api/storage/DownloadCommand.java b/api/src/com/cloud/agent/api/storage/DownloadCommand.java index af9ff40b0f2..9245411888d 100644 --- a/api/src/com/cloud/agent/api/storage/DownloadCommand.java +++ b/api/src/com/cloud/agent/api/storage/DownloadCommand.java @@ -28,7 +28,7 @@ public class DownloadCommand extends AbstractDownloadCommand { String userName; String password; public PasswordAuth() { - + } public PasswordAuth(String user, String password) { this.userName = user; @@ -41,28 +41,28 @@ public class DownloadCommand extends AbstractDownloadCommand { return password; } } - + public static enum ResourceType { VOLUME, TEMPLATE } - + public static class Proxy { private String _host; private int _port; private String _userName; private String _password; - + public Proxy() { - + } - + public Proxy(String host, int port, String userName, String password) { this._host = host; this._port = port; this._userName = userName; this._password = password; } - + public Proxy(URI uri) { this._host = uri.getHost(); this._port = uri.getPort() == -1 ? 3128 : uri.getPort(); @@ -78,19 +78,19 @@ public class DownloadCommand extends AbstractDownloadCommand { } } } - + public String getHost() { return _host; } - + public int getPort() { return _port; } - + public String getUserName() { return _userName; } - + public String getPassword() { return _password; } @@ -103,11 +103,11 @@ public class DownloadCommand extends AbstractDownloadCommand { private Long maxDownloadSizeInBytes = null; private long id; private ResourceType resourceType = ResourceType.TEMPLATE; - + protected DownloadCommand() { } - - + + public DownloadCommand(DownloadCommand that) { super(that); this.hvm = that.hvm; @@ -119,7 +119,7 @@ public class DownloadCommand extends AbstractDownloadCommand { this.maxDownloadSizeInBytes = that.getMaxDownloadSizeInBytes(); this.resourceType = that.resourceType; } - + public DownloadCommand(String secUrl, VirtualMachineTemplate template, Long maxDownloadSizeInBytes) { super(template.getUniqueName(), template.getUrl(), template.getFormat(), template.getAccountId()); this.hvm = template.isRequiresHvm(); @@ -129,7 +129,7 @@ public class DownloadCommand extends AbstractDownloadCommand { this.setSecUrl(secUrl); this.maxDownloadSizeInBytes = maxDownloadSizeInBytes; } - + public DownloadCommand(String secUrl, Volume volume, Long maxDownloadSizeInBytes, String checkSum, String url, ImageFormat format) { super(volume.getName(), url, format, volume.getAccountId()); //this.hvm = volume.isRequiresHvm(); @@ -150,11 +150,11 @@ public class DownloadCommand extends AbstractDownloadCommand { this.maxDownloadSizeInBytes = maxDownloadSizeInBytes; auth = new PasswordAuth(user, passwd); } - + public long getId() { return id; } - + public void setHvm(boolean hvm) { this.hvm = hvm; } @@ -188,19 +188,19 @@ public class DownloadCommand extends AbstractDownloadCommand { public PasswordAuth getAuth() { return auth; } - + public void setCreds(String userName, String passwd) { auth = new PasswordAuth(userName, passwd); } - + public Proxy getProxy() { return _proxy; } - + public void setProxy(Proxy proxy) { _proxy = proxy; } - + public Long getMaxDownloadSizeInBytes() { return maxDownloadSizeInBytes; } diff --git a/api/src/com/cloud/agent/api/storage/DownloadProgressCommand.java b/api/src/com/cloud/agent/api/storage/DownloadProgressCommand.java index 205ba801527..835847bedeb 100644 --- a/api/src/com/cloud/agent/api/storage/DownloadProgressCommand.java +++ b/api/src/com/cloud/agent/api/storage/DownloadProgressCommand.java @@ -26,7 +26,7 @@ public class DownloadProgressCommand extends DownloadCommand { protected DownloadProgressCommand() { super(); } - + public DownloadProgressCommand(DownloadCommand cmd, String jobId, RequestType req) { super(cmd); diff --git a/api/src/com/cloud/agent/api/storage/ListTemplateAnswer.java b/api/src/com/cloud/agent/api/storage/ListTemplateAnswer.java index 45622faffd3..06e95fe4265 100644 --- a/api/src/com/cloud/agent/api/storage/ListTemplateAnswer.java +++ b/api/src/com/cloud/agent/api/storage/ListTemplateAnswer.java @@ -25,17 +25,17 @@ import com.cloud.storage.template.TemplateInfo; public class ListTemplateAnswer extends Answer { private String secUrl; private Map templateInfos; - + public ListTemplateAnswer() { - + } - + public ListTemplateAnswer(String secUrl, Map templateInfos) { super(null, true, "success"); this.setSecUrl(secUrl); - this.templateInfos = templateInfos; + this.templateInfos = templateInfos; } - + public Map getTemplateInfo() { return templateInfos; } diff --git a/api/src/com/cloud/agent/api/storage/ListTemplateCommand.java b/api/src/com/cloud/agent/api/storage/ListTemplateCommand.java index 18123fa1997..da25ed56bf3 100644 --- a/api/src/com/cloud/agent/api/storage/ListTemplateCommand.java +++ b/api/src/com/cloud/agent/api/storage/ListTemplateCommand.java @@ -24,15 +24,15 @@ public class ListTemplateCommand extends StorageCommand { private String secUrl; @LogLevel(Log4jLevel.Off) private SwiftTO swift; - + public ListTemplateCommand() { } - + public ListTemplateCommand(String secUrl) { this.secUrl = secUrl; this.swift = null; } - + public ListTemplateCommand(SwiftTO swift) { this.secUrl = null; this.swift = swift; diff --git a/api/src/com/cloud/agent/api/storage/ListVolumeAnswer.java b/api/src/com/cloud/agent/api/storage/ListVolumeAnswer.java index e2dc447ec6d..6bbb2e82c33 100755 --- a/api/src/com/cloud/agent/api/storage/ListVolumeAnswer.java +++ b/api/src/com/cloud/agent/api/storage/ListVolumeAnswer.java @@ -14,40 +14,40 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.agent.api.storage; - -import java.util.Map; - -import com.cloud.agent.api.Answer; -import com.cloud.storage.template.TemplateInfo; - -public class ListVolumeAnswer extends Answer { - private String secUrl; - private Map templateInfos; - - public ListVolumeAnswer() { - - } - - public ListVolumeAnswer(String secUrl, Map templateInfos) { - super(null, true, "success"); - this.setSecUrl(secUrl); - this.templateInfos = templateInfos; - } - - public Map getTemplateInfo() { - return templateInfos; - } - - public void setTemplateInfo(Map templateInfos) { - this.templateInfos = templateInfos; - } - - public void setSecUrl(String secUrl) { - this.secUrl = secUrl; - } - - public String getSecUrl() { - return secUrl; - } -} +package com.cloud.agent.api.storage; + +import java.util.Map; + +import com.cloud.agent.api.Answer; +import com.cloud.storage.template.TemplateInfo; + +public class ListVolumeAnswer extends Answer { + private String secUrl; + private Map templateInfos; + + public ListVolumeAnswer() { + + } + + public ListVolumeAnswer(String secUrl, Map templateInfos) { + super(null, true, "success"); + this.setSecUrl(secUrl); + this.templateInfos = templateInfos; + } + + public Map getTemplateInfo() { + return templateInfos; + } + + public void setTemplateInfo(Map templateInfos) { + this.templateInfos = templateInfos; + } + + public void setSecUrl(String secUrl) { + this.secUrl = secUrl; + } + + public String getSecUrl() { + return secUrl; + } +} diff --git a/api/src/com/cloud/agent/api/storage/ListVolumeCommand.java b/api/src/com/cloud/agent/api/storage/ListVolumeCommand.java index afec624b984..a2776c2af46 100755 --- a/api/src/com/cloud/agent/api/storage/ListVolumeCommand.java +++ b/api/src/com/cloud/agent/api/storage/ListVolumeCommand.java @@ -14,30 +14,30 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.agent.api.storage; - -import com.cloud.agent.api.LogLevel; -import com.cloud.agent.api.LogLevel.Log4jLevel; -import com.cloud.agent.api.to.SwiftTO; - -public class ListVolumeCommand extends StorageCommand { - - private String secUrl; - - public ListVolumeCommand() { - } - - public ListVolumeCommand(String secUrl) { - this.secUrl = secUrl; - } - - @Override - public boolean executeInSequence() { - return true; - } - - public String getSecUrl() { - return secUrl; - } - -} +package com.cloud.agent.api.storage; + +import com.cloud.agent.api.LogLevel; +import com.cloud.agent.api.LogLevel.Log4jLevel; +import com.cloud.agent.api.to.SwiftTO; + +public class ListVolumeCommand extends StorageCommand { + + private String secUrl; + + public ListVolumeCommand() { + } + + public ListVolumeCommand(String secUrl) { + this.secUrl = secUrl; + } + + @Override + public boolean executeInSequence() { + return true; + } + + public String getSecUrl() { + return secUrl; + } + +} diff --git a/api/src/com/cloud/agent/api/storage/ManageVolumeAvailabilityAnswer.java b/api/src/com/cloud/agent/api/storage/ManageVolumeAvailabilityAnswer.java index 354a693ee9d..edd283090b1 100644 --- a/api/src/com/cloud/agent/api/storage/ManageVolumeAvailabilityAnswer.java +++ b/api/src/com/cloud/agent/api/storage/ManageVolumeAvailabilityAnswer.java @@ -20,12 +20,12 @@ import com.cloud.agent.api.Answer; import com.cloud.agent.api.Command; public class ManageVolumeAvailabilityAnswer extends Answer { - + protected ManageVolumeAvailabilityAnswer() { } - + public ManageVolumeAvailabilityAnswer(Command command, boolean success, String details) { super(command, success, details); } - + } diff --git a/api/src/com/cloud/agent/api/storage/ManageVolumeAvailabilityCommand.java b/api/src/com/cloud/agent/api/storage/ManageVolumeAvailabilityCommand.java index e27fe8ce2b3..1a7d4807f28 100644 --- a/api/src/com/cloud/agent/api/storage/ManageVolumeAvailabilityCommand.java +++ b/api/src/com/cloud/agent/api/storage/ManageVolumeAvailabilityCommand.java @@ -19,36 +19,36 @@ package com.cloud.agent.api.storage; import com.cloud.agent.api.Command; public class ManageVolumeAvailabilityCommand extends Command { - + boolean attach; String primaryStorageSRUuid; String volumeUuid; - - - public ManageVolumeAvailabilityCommand() { + + + public ManageVolumeAvailabilityCommand() { } - + public ManageVolumeAvailabilityCommand(boolean attach, String primaryStorageSRUuid, String volumeUuid) { this.attach = attach; this.primaryStorageSRUuid = primaryStorageSRUuid; this.volumeUuid = volumeUuid; } - + @Override public boolean executeInSequence() { return false; } - + public boolean getAttach() { return attach; } - + public String getPrimaryStorageSRUuid() { return primaryStorageSRUuid; } - + public String getVolumeUuid() { return volumeUuid; } - + } diff --git a/api/src/com/cloud/agent/api/storage/PrimaryStorageDownloadAnswer.java b/api/src/com/cloud/agent/api/storage/PrimaryStorageDownloadAnswer.java index 3d5c55645ae..a5a6c49e9ab 100644 --- a/api/src/com/cloud/agent/api/storage/PrimaryStorageDownloadAnswer.java +++ b/api/src/com/cloud/agent/api/storage/PrimaryStorageDownloadAnswer.java @@ -21,24 +21,24 @@ import com.cloud.agent.api.Answer; public class PrimaryStorageDownloadAnswer extends Answer { private String installPath; private long templateSize = 0L; - + protected PrimaryStorageDownloadAnswer() { } - + public PrimaryStorageDownloadAnswer(String detail) { super(null, false, detail); } - + public PrimaryStorageDownloadAnswer(String installPath, long templateSize ) { super(null); this.installPath = installPath; - this.templateSize = templateSize; + this.templateSize = templateSize; } - + public String getInstallPath() { return installPath; } - + public void setInstallPath(String installPath) { this.installPath = installPath; } @@ -50,5 +50,5 @@ public class PrimaryStorageDownloadAnswer extends Answer { public Long getTemplateSize() { return templateSize; } - + } diff --git a/api/src/com/cloud/agent/api/storage/PrimaryStorageDownloadCommand.java b/api/src/com/cloud/agent/api/storage/PrimaryStorageDownloadCommand.java index b56317727e2..565b50dd27a 100644 --- a/api/src/com/cloud/agent/api/storage/PrimaryStorageDownloadCommand.java +++ b/api/src/com/cloud/agent/api/storage/PrimaryStorageDownloadCommand.java @@ -26,7 +26,7 @@ public class PrimaryStorageDownloadCommand extends AbstractDownloadCommand { String localPath; String poolUuid; long poolId; - + String secondaryStorageUrl; String primaryStorageUrl; @@ -39,39 +39,39 @@ public class PrimaryStorageDownloadCommand extends AbstractDownloadCommand { this.poolUuid = poolUuid; setWait(wait); } - + public String getPoolUuid() { return poolUuid; } - + public long getPoolId() { return poolId; } - + public void setLocalPath(String path) { this.localPath = path; } - + public String getLocalPath() { return localPath; } - + public void setSecondaryStorageUrl(String url) { secondaryStorageUrl = url; } - + public String getSecondaryStorageUrl() { return secondaryStorageUrl; } - + public void setPrimaryStorageUrl(String url) { primaryStorageUrl = url; } - + public String getPrimaryStorageUrl() { return primaryStorageUrl; } - + @Override public boolean executeInSequence() { return true; diff --git a/api/src/com/cloud/agent/api/storage/UploadAnswer.java b/api/src/com/cloud/agent/api/storage/UploadAnswer.java index 430eb83c9b0..f2d9788e8dc 100755 --- a/api/src/com/cloud/agent/api/storage/UploadAnswer.java +++ b/api/src/com/cloud/agent/api/storage/UploadAnswer.java @@ -24,7 +24,7 @@ import com.cloud.storage.Upload; public class UploadAnswer extends Answer { - + private String jobId; private int uploadPct; private String errorString; @@ -32,29 +32,29 @@ public class UploadAnswer extends Answer { private String uploadPath; private String installPath; public Long templateSize = 0L; - + public int getUploadPct() { return uploadPct; } public String getErrorString() { return errorString; } - + public String getUploadStatusString() { return uploadStatus.toString(); } - + public Upload.Status getUploadStatus() { return uploadStatus; } - + public String getUploadPath() { return uploadPath; } protected UploadAnswer() { - + } - + public void setErrorString(String errorString) { this.errorString = errorString; } @@ -64,7 +64,7 @@ public class UploadAnswer extends Answer { public void setJobId(String jobId) { this.jobId = jobId; } - + public UploadAnswer(String jobId, int uploadPct, String errorString, Upload.Status uploadStatus, String fileSystemPath, String installPath, long templateSize) { super(); @@ -87,7 +87,7 @@ public class UploadAnswer extends Answer { this.uploadPath = fileSystemPath; this.installPath = installPath; } - + private static String fixPath(String path){ if (path == null) { return path; @@ -100,11 +100,11 @@ public class UploadAnswer extends Answer { } return path; } - + public void setUploadStatus(Upload.Status uploadStatus) { this.uploadStatus = uploadStatus; } - + public String getInstallPath() { return installPath; } @@ -115,9 +115,9 @@ public class UploadAnswer extends Answer { public void setTemplateSize(long templateSize) { this.templateSize = templateSize; } - + public Long getTemplateSize() { return templateSize; } - + } diff --git a/api/src/com/cloud/agent/api/storage/UploadCommand.java b/api/src/com/cloud/agent/api/storage/UploadCommand.java index 4b004c91ed7..02ca5d8b3a9 100644 --- a/api/src/com/cloud/agent/api/storage/UploadCommand.java +++ b/api/src/com/cloud/agent/api/storage/UploadCommand.java @@ -26,7 +26,7 @@ public class UploadCommand extends AbstractUploadCommand { private TemplateTO template; private String url; - private String installPath; + private String installPath; private boolean hvm; private String description; private String checksum; @@ -36,16 +36,16 @@ public class UploadCommand extends AbstractUploadCommand { private Type type; public UploadCommand(VirtualMachineTemplate template, String url, String installPath, long sizeInBytes) { - + this.template = new TemplateTO(template); this.url = url; this.installPath = installPath; this.checksum = template.getChecksum(); this.id = template.getId(); this.templateSizeInBytes = sizeInBytes; - + } - + public UploadCommand(String url, long id, long sizeInBytes, String installPath, Type type){ this.template = null; this.url = url; @@ -54,10 +54,10 @@ public class UploadCommand extends AbstractUploadCommand { this.type = type; this.templateSizeInBytes = sizeInBytes; } - + protected UploadCommand() { } - + public UploadCommand(UploadCommand that) { this.template = that.template; this.url = that.url; diff --git a/api/src/com/cloud/agent/api/storage/UploadProgressCommand.java b/api/src/com/cloud/agent/api/storage/UploadProgressCommand.java index 36b1437ef90..7f6d584045d 100644 --- a/api/src/com/cloud/agent/api/storage/UploadProgressCommand.java +++ b/api/src/com/cloud/agent/api/storage/UploadProgressCommand.java @@ -25,7 +25,7 @@ public class UploadProgressCommand extends UploadCommand { protected UploadProgressCommand() { super(); } - + public UploadProgressCommand(UploadCommand cmd, String jobId, RequestType req) { super(cmd); @@ -44,5 +44,5 @@ public class UploadProgressCommand extends UploadCommand { public RequestType getRequest() { return request; } - -} \ No newline at end of file + +} diff --git a/api/src/com/cloud/agent/api/storage/ssCommand.java b/api/src/com/cloud/agent/api/storage/ssCommand.java index c7b75ea3873..c218a8d5b79 100644 --- a/api/src/com/cloud/agent/api/storage/ssCommand.java +++ b/api/src/com/cloud/agent/api/storage/ssCommand.java @@ -22,21 +22,21 @@ public abstract class ssCommand extends Command { private String secUrl; - public ssCommand() { + public ssCommand() { } - + protected ssCommand(ssCommand that) { this.secUrl = that.secUrl; } public ssCommand(String secUrl) { this.secUrl = secUrl; } - + @Override public boolean executeInSequence() { return true; } - + public String getSecUrl() { return secUrl; } @@ -44,5 +44,5 @@ public abstract class ssCommand extends Command { public void setSecUrl(String secUrl) { this.secUrl = secUrl; } - + } diff --git a/api/src/com/cloud/agent/api/to/FirewallRuleTO.java b/api/src/com/cloud/agent/api/to/FirewallRuleTO.java index 01860204c00..a361a6d9170 100644 --- a/api/src/com/cloud/agent/api/to/FirewallRuleTO.java +++ b/api/src/com/cloud/agent/api/to/FirewallRuleTO.java @@ -25,14 +25,14 @@ import com.cloud.utils.net.NetUtils; /** * FirewallRuleTO transfers a port range for an ip to be opened. - * + * * There are essentially three states transferred with each state. - * sent multiple times to the destination. If the rule is not on + * sent multiple times to the destination. If the rule is not on * 2. alreadyAdded - the rule has been successfully added before. Rules * in this state are sent for completeness and optimization. * If the rule already exists on the destination, the destination should * reply the rule is successfully applied. - * + * * - srcPortRange: port range to open. * - protocol: protocol to open for. Usually tcp and udp. * @@ -49,34 +49,34 @@ public class FirewallRuleTO { FirewallRule.Purpose purpose; private Integer icmpType; private Integer icmpCode; - + protected FirewallRuleTO() { } - + public FirewallRuleTO(long id, String srcIp, String protocol, Integer srcPortStart, Integer srcPortEnd, boolean revoked, boolean alreadyAdded, FirewallRule.Purpose purpose, List sourceCidr,Integer icmpType,Integer icmpCode) { this(id,null,srcIp,protocol,srcPortStart,srcPortEnd,revoked,alreadyAdded,purpose,sourceCidr,icmpType,icmpCode); - } + } public FirewallRuleTO(long id,String srcVlanTag, String srcIp, String protocol, Integer srcPortStart, Integer srcPortEnd, boolean revoked, boolean alreadyAdded, FirewallRule.Purpose purpose, List sourceCidr,Integer icmpType,Integer icmpCode) { this.srcVlanTag = srcVlanTag; this.srcIp = srcIp; this.protocol = protocol; - + if (srcPortStart != null) { List portRange = new ArrayList(); portRange.add(srcPortStart); if (srcPortEnd != null) { portRange.add(srcPortEnd); } - + srcPortRange = new int[portRange.size()]; int i = 0; for (Integer port : portRange) { srcPortRange[i] = port.intValue(); i ++; - } - } - + } + } + this.revoked = revoked; this.alreadyAdded = alreadyAdded; this.purpose = purpose; @@ -87,11 +87,11 @@ public class FirewallRuleTO { public FirewallRuleTO(FirewallRule rule, String srcVlanTag, String srcIp) { this(rule.getId(),srcVlanTag, srcIp, rule.getProtocol(), rule.getSourcePortStart(), rule.getSourcePortEnd(), rule.getState()==State.Revoke, rule.getState()==State.Active, rule.getPurpose(),rule.getSourceCidrList(),rule.getIcmpType(),rule.getIcmpCode()); } - + public FirewallRuleTO(FirewallRule rule, String srcIp) { this(rule.getId(),null, srcIp, rule.getProtocol(), rule.getSourcePortStart(), rule.getSourcePortEnd(), rule.getState()==State.Revoke, rule.getState()==State.Active, rule.getPurpose(),rule.getSourceCidrList(),rule.getIcmpType(),rule.getIcmpCode()); } - + public long getId() { return id; } @@ -99,7 +99,7 @@ public class FirewallRuleTO { public String getSrcVlanTag() { return srcVlanTag; } - + public String getSrcIp() { return srcIp; } @@ -111,15 +111,15 @@ public class FirewallRuleTO { public int[] getSrcPortRange() { return srcPortRange; } - + public Integer getIcmpType(){ return icmpType; } - + public Integer getIcmpCode(){ - return icmpCode; + return icmpCode; } - + public String getStringSrcPortRange() { if (srcPortRange == null || srcPortRange.length < 2) return "0:0"; @@ -130,11 +130,11 @@ public class FirewallRuleTO { public boolean revoked() { return revoked; } - + public List getSourceCidrList() { return sourceCidrList; } - + public boolean isAlreadyAdded() { return alreadyAdded; } @@ -142,5 +142,5 @@ public class FirewallRuleTO { public FirewallRule.Purpose getPurpose() { return purpose; } - + } diff --git a/api/src/com/cloud/agent/api/to/HostTO.java b/api/src/com/cloud/agent/api/to/HostTO.java index f7b734c19d2..967a63d63b5 100644 --- a/api/src/com/cloud/agent/api/to/HostTO.java +++ b/api/src/com/cloud/agent/api/to/HostTO.java @@ -24,10 +24,10 @@ public class HostTO { private NetworkTO publicNetwork; private NetworkTO storageNetwork1; private NetworkTO storageNetwork2; - + protected HostTO() { } - + public HostTO(Host vo) { guid = vo.getGuid(); privateNetwork = new NetworkTO(vo.getPrivateIpAddress(), vo.getPrivateNetmask(), vo.getPrivateMacAddress()); diff --git a/api/src/com/cloud/agent/api/to/NetworkACLTO.java b/api/src/com/cloud/agent/api/to/NetworkACLTO.java index 3cdf8fb476e..9930b75d7d9 100644 --- a/api/src/com/cloud/agent/api/to/NetworkACLTO.java +++ b/api/src/com/cloud/agent/api/to/NetworkACLTO.java @@ -36,32 +36,32 @@ public class NetworkACLTO { private Integer icmpType; private Integer icmpCode; private FirewallRule.TrafficType trafficType; - + protected NetworkACLTO() { } - + public NetworkACLTO(long id,String vlanTag, String protocol, Integer portStart, Integer portEnd, boolean revoked, boolean alreadyAdded, List cidrList, Integer icmpType,Integer icmpCode,TrafficType trafficType) { this.vlanTag = vlanTag; this.protocol = protocol; - + if (portStart != null) { List range = new ArrayList(); range.add(portStart); if (portEnd != null) { range.add(portEnd); } - + portRange = new int[range.size()]; int i = 0; for (Integer port : range) { portRange[i] = port.intValue(); i ++; - } - } - + } + } + this.revoked = revoked; this.alreadyAdded = alreadyAdded; this.cidrList = cidrList; @@ -71,11 +71,11 @@ public class NetworkACLTO { } public NetworkACLTO(FirewallRule rule, String vlanTag, FirewallRule.TrafficType trafficType ) { - this(rule.getId(), vlanTag, rule.getProtocol(), rule.getSourcePortStart(), rule.getSourcePortEnd(), + this(rule.getId(), vlanTag, rule.getProtocol(), rule.getSourcePortStart(), rule.getSourcePortEnd(), rule.getState() == FirewallRule.State.Revoke, rule.getState() == FirewallRule.State.Active, rule.getSourceCidrList() ,rule.getIcmpType(), rule.getIcmpCode(),trafficType); } - + public long getId() { return id; } @@ -91,15 +91,15 @@ public class NetworkACLTO { public int[] getSrcPortRange() { return portRange; } - + public Integer getIcmpType(){ return icmpType; } - + public Integer getIcmpCode(){ - return icmpCode; + return icmpCode; } - + public String getStringPortRange() { if (portRange == null || portRange.length < 2) return "0:0"; @@ -110,11 +110,11 @@ public class NetworkACLTO { public boolean revoked() { return revoked; } - + public List getSourceCidrList() { return cidrList; } - + public boolean isAlreadyAdded() { return alreadyAdded; } diff --git a/api/src/com/cloud/agent/api/to/NetworkTO.java b/api/src/com/cloud/agent/api/to/NetworkTO.java index ad9d4d90ee7..3edd4c0f937 100644 --- a/api/src/com/cloud/agent/api/to/NetworkTO.java +++ b/api/src/com/cloud/agent/api/to/NetworkTO.java @@ -100,7 +100,7 @@ public class NetworkTO { /** * This constructor is usually for hosts where the other information are not important. - * + * * @param ip ip address * @param netmask netmask * @param mac mac address @@ -112,7 +112,7 @@ public class NetworkTO { /** * This is the full constructor and should be used for VM's network as it contains * the full information about what is needed. - * + * * @param ip * @param vlan * @param netmask diff --git a/api/src/com/cloud/agent/api/to/NicTO.java b/api/src/com/cloud/agent/api/to/NicTO.java index 79a43d2e625..aa2aa19cc19 100644 --- a/api/src/com/cloud/agent/api/to/NicTO.java +++ b/api/src/com/cloud/agent/api/to/NicTO.java @@ -26,45 +26,45 @@ public class NicTO extends NetworkTO { public NicTO() { super(); } - + public void setDeviceId(int deviceId) { this.deviceId = deviceId; } - + public int getDeviceId() { return deviceId; } - + public Integer getNetworkRateMbps() { return networkRateMbps; } - + public void setNetworkRateMbps(Integer networkRateMbps) { this.networkRateMbps = networkRateMbps; } - + public Integer getNetworkRateMulticastMbps() { return networkRateMulticastMbps; } - + public boolean isDefaultNic() { return defaultNic; } - + public void setDefaultNic(boolean defaultNic) { this.defaultNic = defaultNic; } - + @Override public String getUuid() { return uuid; } - + @Override public void setUuid(String uuid) { this.uuid = uuid; } - + @Override public String toString() { return new StringBuilder("[Nic:").append(type).append("-").append(ip).append("-").append(broadcastUri).append("]").toString(); diff --git a/api/src/com/cloud/agent/api/to/PortForwardingRuleTO.java b/api/src/com/cloud/agent/api/to/PortForwardingRuleTO.java index c99a3766642..9ef8d0a6fcb 100644 --- a/api/src/com/cloud/agent/api/to/PortForwardingRuleTO.java +++ b/api/src/com/cloud/agent/api/to/PortForwardingRuleTO.java @@ -22,23 +22,23 @@ import com.cloud.utils.net.NetUtils; /** * PortForwardingRuleTO specifies one port forwarding rule. - * + * * */ public class PortForwardingRuleTO extends FirewallRuleTO { String dstIp; int[] dstPortRange; - + protected PortForwardingRuleTO() { super(); } - + public PortForwardingRuleTO(PortForwardingRule rule, String srcVlanTag, String srcIp) { super(rule, srcVlanTag, srcIp); this.dstIp = rule.getDestinationIpAddress().addr(); this.dstPortRange = new int[] { rule.getDestinationPortStart(), rule.getDestinationPortEnd() }; } - + protected PortForwardingRuleTO(long id, String srcIp, int srcPortStart, int srcPortEnd, String dstIp, int dstPortStart, int dstPortEnd, String protocol, boolean revoked, boolean brandNew) { super(id, srcIp,null, protocol, srcPortStart, srcPortEnd, revoked, brandNew, FirewallRule.Purpose.PortForwarding, null,0,0); this.dstIp = dstIp; @@ -56,5 +56,5 @@ public class PortForwardingRuleTO extends FirewallRuleTO { public String getStringDstPortRange() { return NetUtils.portRangeToString(dstPortRange); } - + } diff --git a/api/src/com/cloud/agent/api/to/StaticNatRuleTO.java b/api/src/com/cloud/agent/api/to/StaticNatRuleTO.java index fd77dd69578..c85b99ab24d 100644 --- a/api/src/com/cloud/agent/api/to/StaticNatRuleTO.java +++ b/api/src/com/cloud/agent/api/to/StaticNatRuleTO.java @@ -22,27 +22,27 @@ import com.cloud.network.rules.StaticNatRule; /** * StaticNatRuleTO specifies one static nat rule. - * + * * */ public class StaticNatRuleTO extends FirewallRuleTO{ String dstIp; - + protected StaticNatRuleTO() { } - + public StaticNatRuleTO(StaticNatRule rule, String srcVlanTag, String srcIp, String dstIp) { super(rule.getId(),srcVlanTag, srcIp, rule.getProtocol(), rule.getSourcePortStart(), rule.getSourcePortEnd(),rule.getState()==State.Revoke, rule.getState()==State.Active, rule.getPurpose(), null,0,0); this.dstIp = dstIp; } - + public StaticNatRuleTO(StaticNatRule rule, String scrIp, String dstIp) { super(rule.getId(), scrIp, rule.getProtocol(), rule.getSourcePortStart(), rule.getSourcePortEnd(),rule.getState()==State.Revoke, rule.getState()==State.Active, rule.getPurpose(), null,0,0); this.dstIp = dstIp; } - - + + public StaticNatRuleTO(long id, String srcIp, Integer srcPortStart, Integer srcPortEnd, String dstIp, Integer dstPortStart, Integer dstPortEnd, String protocol, boolean revoked, boolean alreadyAdded) { super(id, srcIp, protocol, srcPortStart, srcPortEnd, revoked, alreadyAdded, FirewallRule.Purpose.StaticNat, null,0,0); this.dstIp = dstIp; @@ -51,5 +51,5 @@ public class StaticNatRuleTO extends FirewallRuleTO{ public String getDstIp() { return dstIp; } - + } diff --git a/api/src/com/cloud/agent/api/to/StorageFilerTO.java b/api/src/com/cloud/agent/api/to/StorageFilerTO.java index 26344daaeb6..8f58c9e1c91 100644 --- a/api/src/com/cloud/agent/api/to/StorageFilerTO.java +++ b/api/src/com/cloud/agent/api/to/StorageFilerTO.java @@ -27,7 +27,7 @@ public class StorageFilerTO { String userInfo; int port; StoragePoolType type; - + public StorageFilerTO(StoragePool pool) { this.id = pool.getId(); this.host = pool.getHostAddress(); @@ -61,14 +61,14 @@ public class StorageFilerTO { public int getPort() { return port; } - + public StoragePoolType getType() { return type; } - + protected StorageFilerTO() { } - + @Override public String toString() { return new StringBuilder("Pool[").append(id).append("|").append(host).append(":").append(port).append("|").append(path).append("]").toString(); diff --git a/api/src/com/cloud/agent/api/to/SwiftTO.java b/api/src/com/cloud/agent/api/to/SwiftTO.java index 7920ce83e27..32742c7d0e3 100644 --- a/api/src/com/cloud/agent/api/to/SwiftTO.java +++ b/api/src/com/cloud/agent/api/to/SwiftTO.java @@ -15,15 +15,15 @@ // specific language governing permissions and limitations // under the License. package com.cloud.agent.api.to; - + public class SwiftTO { Long id; String url; String account; - + String userName; String key; - + public SwiftTO() { } public SwiftTO(Long id, String url, String account, String userName, String key) { @@ -33,7 +33,7 @@ public class SwiftTO { this.userName = userName; this.key = key; } - + public Long getId() { return id; } @@ -53,6 +53,6 @@ public class SwiftTO { public String getKey() { return key; } - + } diff --git a/api/src/com/cloud/agent/api/to/TemplateTO.java b/api/src/com/cloud/agent/api/to/TemplateTO.java index e163340fbf0..7598398835f 100644 --- a/api/src/com/cloud/agent/api/to/TemplateTO.java +++ b/api/src/com/cloud/agent/api/to/TemplateTO.java @@ -23,16 +23,16 @@ public class TemplateTO { private long id; private String uniqueName; private ImageFormat format; - + protected TemplateTO() { } - + public TemplateTO(VirtualMachineTemplate template) { this.id = template.getId(); this.uniqueName = template.getUniqueName(); this.format = template.getFormat(); } - + public long getId() { return id; } diff --git a/api/src/com/cloud/agent/api/to/VirtualMachineTO.java b/api/src/com/cloud/agent/api/to/VirtualMachineTO.java index a93c242b7c1..8f3f0eb39d6 100644 --- a/api/src/com/cloud/agent/api/to/VirtualMachineTO.java +++ b/api/src/com/cloud/agent/api/to/VirtualMachineTO.java @@ -108,7 +108,7 @@ public class VirtualMachineTO { public boolean getLimitCpuUse() { return limitCpuUse; } - + public long getMinRam() { return minRam; } @@ -185,11 +185,11 @@ public class VirtualMachineTO { public void setNics(NicTO[] nics) { this.nics = nics; } - + public String getVncPassword() { return this.vncPassword; } - + public void setVncPassword(String vncPassword) { this.vncPassword = vncPassword; } @@ -201,11 +201,11 @@ public class VirtualMachineTO { public void setVncAddr(String vncAddr) { this.vncAddr = vncAddr; } - + public Map getDetails() { return params; } - + public void setDetails(Map params) { this.params = params; } @@ -217,6 +217,6 @@ public class VirtualMachineTO { public void setUuid(String uuid) { this.uuid = uuid; } - - + + } diff --git a/api/src/com/cloud/agent/api/uploadTemplateToSwiftFromSecondaryStorageCommand.java b/api/src/com/cloud/agent/api/uploadTemplateToSwiftFromSecondaryStorageCommand.java index 23f0a7e0fb9..10001b149fa 100644 --- a/api/src/com/cloud/agent/api/uploadTemplateToSwiftFromSecondaryStorageCommand.java +++ b/api/src/com/cloud/agent/api/uploadTemplateToSwiftFromSecondaryStorageCommand.java @@ -20,8 +20,8 @@ import com.cloud.agent.api.LogLevel.Log4jLevel; import com.cloud.agent.api.to.SwiftTO; /** - * - * + * + * */ public class uploadTemplateToSwiftFromSecondaryStorageCommand extends Command { @@ -34,9 +34,9 @@ public class uploadTemplateToSwiftFromSecondaryStorageCommand extends Command { private Long templateId; protected uploadTemplateToSwiftFromSecondaryStorageCommand() { - + } - + public uploadTemplateToSwiftFromSecondaryStorageCommand(SwiftTO swift, String secondaryStorageUrl, Long dcId, Long accountId, Long templateId, int wait) { this.swift = swift; @@ -77,4 +77,4 @@ public class uploadTemplateToSwiftFromSecondaryStorageCommand extends Command { return true; } -} \ No newline at end of file +} diff --git a/api/src/com/cloud/api/commands/.gitignore b/api/src/com/cloud/api/commands/.gitignore index 63e3fa0c721..62042786c83 100644 --- a/api/src/com/cloud/api/commands/.gitignore +++ b/api/src/com/cloud/api/commands/.gitignore @@ -5,9 +5,9 @@ # 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 diff --git a/api/src/com/cloud/api/commands/AddAccountToProjectCmd.java b/api/src/com/cloud/api/commands/AddAccountToProjectCmd.java index 22b36b88eac..0e5fe567599 100644 --- a/api/src/com/cloud/api/commands/AddAccountToProjectCmd.java +++ b/api/src/com/cloud/api/commands/AddAccountToProjectCmd.java @@ -45,10 +45,10 @@ public class AddAccountToProjectCmd extends BaseAsyncCmd { @IdentityMapper(entityTableName="projects") @Parameter(name=ApiConstants.PROJECT_ID, type=CommandType.LONG, required=true, description="id of the project to add the account to") private Long projectId; - + @Parameter(name=ApiConstants.ACCOUNT, type=CommandType.STRING, description="name of the account to be added to the project") private String accountName; - + @Parameter(name=ApiConstants.EMAIL, type=CommandType.STRING, description="email to which invitation to the project is going to be sent") private String email; @@ -65,7 +65,7 @@ public class AddAccountToProjectCmd extends BaseAsyncCmd { return projectId; } - + public String getEmail() { return email; } @@ -84,7 +84,7 @@ public class AddAccountToProjectCmd extends BaseAsyncCmd { if (accountName == null && email == null) { throw new InvalidParameterValueException("Either accountName or email is required"); } - + UserContext.current().setEventDetails("Project id: "+ projectId + "; accountName " + accountName); boolean result = _projectService.addAccountToProject(getProjectId(), getAccountName(), getEmail()); if (result) { @@ -94,31 +94,31 @@ public class AddAccountToProjectCmd extends BaseAsyncCmd { throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to add account to the project"); } } - + @Override public long getEntityOwnerId() { Project project= _projectService.getProject(getProjectId()); //verify input parameters if (project == null) { - InvalidParameterValueException ex = new InvalidParameterValueException("Unable to find project with specified id"); - ex.addProxyObject(project, getProjectId(), "projectId"); + InvalidParameterValueException ex = new InvalidParameterValueException("Unable to find project with specified id"); + ex.addProxyObject(project, getProjectId(), "projectId"); throw ex; - } - - return _projectService.getProjectOwner(getProjectId()).getId(); + } + + return _projectService.getProjectOwner(getProjectId()).getId(); } - + @Override public String getEventType() { return EventTypes.EVENT_PROJECT_ACCOUNT_ADD; } - + @Override public String getEventDescription() { if (accountName != null) { return "Adding account " + getAccountName() + " to project: " + getProjectId(); } else { return "Sending invitation to email " + email + " to join project: " + getProjectId(); - } + } } -} \ No newline at end of file +} diff --git a/api/src/com/cloud/api/commands/AddClusterCmd.java b/api/src/com/cloud/api/commands/AddClusterCmd.java index 4191554f88b..dc93e668ff0 100755 --- a/api/src/com/cloud/api/commands/AddClusterCmd.java +++ b/api/src/com/cloud/api/commands/AddClusterCmd.java @@ -1,181 +1,181 @@ -// 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.commands; - -import java.util.ArrayList; -import java.util.List; - -import org.apache.log4j.Logger; - -import org.apache.cloudstack.api.ApiConstants; -import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.IdentityMapper; -import org.apache.cloudstack.api.Implementation; -import org.apache.cloudstack.api.Parameter; -import org.apache.cloudstack.api.ServerApiException; -import com.cloud.api.response.ClusterResponse; -import com.cloud.api.response.ListResponse; -import com.cloud.exception.DiscoveryException; -import com.cloud.exception.ResourceInUseException; -import com.cloud.org.Cluster; -import com.cloud.user.Account; -import com.cloud.utils.IdentityProxy; - -@Implementation(description="Adds a new cluster", responseObject=ClusterResponse.class) -public class AddClusterCmd extends BaseCmd { - public static final Logger s_logger = Logger.getLogger(AddClusterCmd.class.getName()); - - private static final String s_name = "addclusterresponse"; - - @Parameter(name=ApiConstants.CLUSTER_NAME, type=CommandType.STRING, required=true, description="the cluster name") - private String clusterName; - - @Parameter(name=ApiConstants.PASSWORD, type=CommandType.STRING, required=false, description="the password for the host") - private String password; - - @IdentityMapper(entityTableName="host_pod_ref") - @Parameter(name=ApiConstants.POD_ID, type=CommandType.LONG, required=true, description="the Pod ID for the host") - private Long podId; - - @Parameter(name=ApiConstants.URL, type=CommandType.STRING, required=false, description="the URL") - private String url; - - @Parameter(name=ApiConstants.USERNAME, type=CommandType.STRING, required=false, description="the username for the cluster") - private String username; - - @IdentityMapper(entityTableName="data_center") - - @Parameter(name=ApiConstants.ZONE_ID, type=CommandType.LONG, required=true, description="the Zone ID for the cluster") - private Long zoneId; - - @Parameter(name=ApiConstants.HYPERVISOR, type=CommandType.STRING, required=true, description="hypervisor type of the cluster: XenServer,KVM,VMware,Hyperv,BareMetal,Simulator") - private String hypervisor; - - @Parameter(name=ApiConstants.CLUSTER_TYPE, type=CommandType.STRING, required=true, description="type of the cluster: CloudManaged, ExternalManaged") - private String clusterType; - - @Parameter(name=ApiConstants.ALLOCATION_STATE, type=CommandType.STRING, description="Allocation state of this cluster for allocation of new resources") - private String allocationState; - - @Parameter(name = ApiConstants.VSM_USERNAME, type = CommandType.STRING, required = false, description = "the username for the VSM associated with this cluster") - private String vsmusername; - - @Parameter(name = ApiConstants.VSM_PASSWORD, type = CommandType.STRING, required = false, description = "the password for the VSM associated with this cluster") - private String vsmpassword; - - @Parameter(name = ApiConstants.VSM_IPADDRESS, type = CommandType.STRING, required = false, description = "the ipaddress of the VSM associated with this cluster") - private String vsmipaddress; - - public String getVSMIpaddress() { - return vsmipaddress; - } - - public String getVSMPassword() { - return vsmpassword; - } - - public String getVSMUsername() { - return vsmusername; - } - - public String getClusterName() { - return clusterName; - } - - public String getPassword() { - return password; - } - - public Long getPodId() { - return podId; - } - - public String getUrl() { - return url; - } - - public String getUsername() { - return username; - } - - public Long getZoneId() { - return zoneId; - } - - public String getHypervisor() { - return hypervisor; - } - - @Override - public String getCommandName() { - return s_name; - } - - public String getClusterType() { - return clusterType; - } - - public void setClusterType(String type) { - this.clusterType = type; - } - - @Override - public long getEntityOwnerId() { - return Account.ACCOUNT_ID_SYSTEM; - } - - public String getAllocationState() { - return allocationState; - } - - public void setAllocationState(String allocationState) { - this.allocationState = allocationState; - } - - @Override - public void execute(){ - try { - List result = _resourceService.discoverCluster(this); - ListResponse response = new ListResponse(); - List clusterResponses = new ArrayList(); - if (result != null && result.size() > 0) { - for (Cluster cluster : result) { - ClusterResponse clusterResponse = _responseGenerator.createClusterResponse(cluster, false); - clusterResponses.add(clusterResponse); - } - } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to add cluster"); - } - - response.setResponses(clusterResponses); - response.setResponseName(getCommandName()); - - this.setResponseObject(response); - } catch (DiscoveryException ex) { - s_logger.warn("Exception: ", ex); - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, ex.getMessage()); - } catch (ResourceInUseException ex) { - s_logger.warn("Exception: ", ex); - ServerApiException e = new ServerApiException(BaseCmd.INTERNAL_ERROR, ex.getMessage()); - for (IdentityProxy proxyObj : ex.getIdProxyList()) { - e.addProxyObject(proxyObj.getTableName(), proxyObj.getValue(), proxyObj.getidFieldName()); - } - throw e; - } - } -} +// 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.commands; + +import java.util.ArrayList; +import java.util.List; + +import org.apache.log4j.Logger; + +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ServerApiException; +import com.cloud.api.response.ClusterResponse; +import com.cloud.api.response.ListResponse; +import com.cloud.exception.DiscoveryException; +import com.cloud.exception.ResourceInUseException; +import com.cloud.org.Cluster; +import com.cloud.user.Account; +import com.cloud.utils.IdentityProxy; + +@Implementation(description="Adds a new cluster", responseObject=ClusterResponse.class) +public class AddClusterCmd extends BaseCmd { + public static final Logger s_logger = Logger.getLogger(AddClusterCmd.class.getName()); + + private static final String s_name = "addclusterresponse"; + + @Parameter(name=ApiConstants.CLUSTER_NAME, type=CommandType.STRING, required=true, description="the cluster name") + private String clusterName; + + @Parameter(name=ApiConstants.PASSWORD, type=CommandType.STRING, required=false, description="the password for the host") + private String password; + + @IdentityMapper(entityTableName="host_pod_ref") + @Parameter(name=ApiConstants.POD_ID, type=CommandType.LONG, required=true, description="the Pod ID for the host") + private Long podId; + + @Parameter(name=ApiConstants.URL, type=CommandType.STRING, required=false, description="the URL") + private String url; + + @Parameter(name=ApiConstants.USERNAME, type=CommandType.STRING, required=false, description="the username for the cluster") + private String username; + + @IdentityMapper(entityTableName="data_center") + + @Parameter(name=ApiConstants.ZONE_ID, type=CommandType.LONG, required=true, description="the Zone ID for the cluster") + private Long zoneId; + + @Parameter(name=ApiConstants.HYPERVISOR, type=CommandType.STRING, required=true, description="hypervisor type of the cluster: XenServer,KVM,VMware,Hyperv,BareMetal,Simulator") + private String hypervisor; + + @Parameter(name=ApiConstants.CLUSTER_TYPE, type=CommandType.STRING, required=true, description="type of the cluster: CloudManaged, ExternalManaged") + private String clusterType; + + @Parameter(name=ApiConstants.ALLOCATION_STATE, type=CommandType.STRING, description="Allocation state of this cluster for allocation of new resources") + private String allocationState; + + @Parameter(name = ApiConstants.VSM_USERNAME, type = CommandType.STRING, required = false, description = "the username for the VSM associated with this cluster") + private String vsmusername; + + @Parameter(name = ApiConstants.VSM_PASSWORD, type = CommandType.STRING, required = false, description = "the password for the VSM associated with this cluster") + private String vsmpassword; + + @Parameter(name = ApiConstants.VSM_IPADDRESS, type = CommandType.STRING, required = false, description = "the ipaddress of the VSM associated with this cluster") + private String vsmipaddress; + + public String getVSMIpaddress() { + return vsmipaddress; + } + + public String getVSMPassword() { + return vsmpassword; + } + + public String getVSMUsername() { + return vsmusername; + } + + public String getClusterName() { + return clusterName; + } + + public String getPassword() { + return password; + } + + public Long getPodId() { + return podId; + } + + public String getUrl() { + return url; + } + + public String getUsername() { + return username; + } + + public Long getZoneId() { + return zoneId; + } + + public String getHypervisor() { + return hypervisor; + } + + @Override + public String getCommandName() { + return s_name; + } + + public String getClusterType() { + return clusterType; + } + + public void setClusterType(String type) { + this.clusterType = type; + } + + @Override + public long getEntityOwnerId() { + return Account.ACCOUNT_ID_SYSTEM; + } + + public String getAllocationState() { + return allocationState; + } + + public void setAllocationState(String allocationState) { + this.allocationState = allocationState; + } + + @Override + public void execute(){ + try { + List result = _resourceService.discoverCluster(this); + ListResponse response = new ListResponse(); + List clusterResponses = new ArrayList(); + if (result != null && result.size() > 0) { + for (Cluster cluster : result) { + ClusterResponse clusterResponse = _responseGenerator.createClusterResponse(cluster, false); + clusterResponses.add(clusterResponse); + } + } else { + throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to add cluster"); + } + + response.setResponses(clusterResponses); + response.setResponseName(getCommandName()); + + this.setResponseObject(response); + } catch (DiscoveryException ex) { + s_logger.warn("Exception: ", ex); + throw new ServerApiException(BaseCmd.INTERNAL_ERROR, ex.getMessage()); + } catch (ResourceInUseException ex) { + s_logger.warn("Exception: ", ex); + ServerApiException e = new ServerApiException(BaseCmd.INTERNAL_ERROR, ex.getMessage()); + for (IdentityProxy proxyObj : ex.getIdProxyList()) { + e.addProxyObject(proxyObj.getTableName(), proxyObj.getValue(), proxyObj.getidFieldName()); + } + throw e; + } + } +} diff --git a/api/src/com/cloud/api/commands/AddHostCmd.java b/api/src/com/cloud/api/commands/AddHostCmd.java index 8afe6be2310..d2e06de0f86 100755 --- a/api/src/com/cloud/api/commands/AddHostCmd.java +++ b/api/src/com/cloud/api/commands/AddHostCmd.java @@ -38,7 +38,7 @@ public class AddHostCmd extends BaseCmd { public static final Logger s_logger = Logger.getLogger(AddHostCmd.class.getName()); private static final String s_name = "addhostresponse"; - + ///////////////////////////////////////////////////// //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// @@ -66,10 +66,10 @@ public class AddHostCmd extends BaseCmd { @IdentityMapper(entityTableName="data_center") @Parameter(name=ApiConstants.ZONE_ID, type=CommandType.LONG, required=true, description="the Zone ID for the host") private Long zoneId; - + @Parameter(name=ApiConstants.HYPERVISOR, type=CommandType.STRING, required=true, description="hypervisor type of the host") private String hypervisor; - + @Parameter(name=ApiConstants.ALLOCATION_STATE, type=CommandType.STRING, description="Allocation state of this Host for allocation of new resources") private String allocationState; @@ -107,33 +107,33 @@ public class AddHostCmd extends BaseCmd { public Long getZoneId() { return zoneId; } - + public String getHypervisor() { - return hypervisor; + return hypervisor; } - + public List getHostTags() { return hostTags; } - + public String getAllocationState() { - return allocationState; - } - + return allocationState; + } + ///////////////////////////////////////////////////// /////////////// API Implementation/////////////////// ///////////////////////////////////////////////////// @Override public String getCommandName() { - return s_name; + return s_name; } - + @Override public long getEntityOwnerId() { return Account.ACCOUNT_ID_SYSTEM; } - + @Override public void execute(){ try { @@ -151,7 +151,7 @@ public class AddHostCmd extends BaseCmd { response.setResponses(hostResponses); response.setResponseName(getCommandName()); - + this.setResponseObject(response); } catch (DiscoveryException ex) { s_logger.warn("Exception: ", ex); diff --git a/api/src/com/cloud/api/commands/AddNetworkServiceProviderCmd.java b/api/src/com/cloud/api/commands/AddNetworkServiceProviderCmd.java index a382f98c7b7..30f054f8886 100644 --- a/api/src/com/cloud/api/commands/AddNetworkServiceProviderCmd.java +++ b/api/src/com/cloud/api/commands/AddNetworkServiceProviderCmd.java @@ -44,7 +44,7 @@ public class AddNetworkServiceProviderCmd extends BaseAsyncCreateCmd { ///////////////////////////////////////////////////// //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - + @IdentityMapper(entityTableName="physical_network") @Parameter(name=ApiConstants.PHYSICAL_NETWORK_ID, type=CommandType.LONG, required=true, description="the Physical Network ID to add the provider to") private Long physicalNetworkId; @@ -52,10 +52,10 @@ public class AddNetworkServiceProviderCmd extends BaseAsyncCreateCmd { @IdentityMapper(entityTableName="physical_network") @Parameter(name=ApiConstants.DEST_PHYSICAL_NETWORK_ID, type=CommandType.LONG, description="the destination Physical Network ID to bridge to") private Long destinationPhysicalNetworkId; - + @Parameter(name=ApiConstants.NAME, type=CommandType.STRING, required=true, description="the name for the physical network service provider") private String name; - + @Parameter(name=ApiConstants.SERVICE_LIST, type=CommandType.LIST, collectionType = CommandType.STRING, description="the list of services to be enabled for this physical network service provider") private List enabledServices; @@ -67,7 +67,7 @@ public class AddNetworkServiceProviderCmd extends BaseAsyncCreateCmd { ///////////////////////////////////////////////////// /////////////////// Accessors /////////////////////// ///////////////////////////////////////////////////// - + public Long getPhysicalNetworkId() { return physicalNetworkId; } @@ -92,12 +92,12 @@ public class AddNetworkServiceProviderCmd extends BaseAsyncCreateCmd { public String getCommandName() { return s_name; } - + @Override public long getEntityOwnerId() { return Account.ACCOUNT_ID_SYSTEM; } - + @Override public void execute(){ UserContext.current().setEventDetails("Network ServiceProvider Id: "+getEntityId()); @@ -118,19 +118,19 @@ public class AddNetworkServiceProviderCmd extends BaseAsyncCreateCmd { setEntityId(result.getId()); } else { throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to add service provider entity to physical network"); - } + } } @Override public String getEventType() { return EventTypes.EVENT_SERVICE_PROVIDER_CREATE; } - + @Override public String getEventDescription() { return "Adding physical network ServiceProvider: " + getEntityId(); } - + @Override public AsyncJob.Type getInstanceType() { return AsyncJob.Type.PhysicalNetworkServiceProvider; diff --git a/api/src/com/cloud/api/commands/AddSecondaryStorageCmd.java b/api/src/com/cloud/api/commands/AddSecondaryStorageCmd.java index 85b79b92b54..c1946d0297c 100644 --- a/api/src/com/cloud/api/commands/AddSecondaryStorageCmd.java +++ b/api/src/com/cloud/api/commands/AddSecondaryStorageCmd.java @@ -35,7 +35,7 @@ import com.cloud.user.Account; public class AddSecondaryStorageCmd extends BaseCmd { public static final Logger s_logger = Logger.getLogger(AddSecondaryStorageCmd.class.getName()); private static final String s_name = "addsecondarystorageresponse"; - + ///////////////////////////////////////////////////// //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// @@ -65,14 +65,14 @@ public class AddSecondaryStorageCmd extends BaseCmd { @Override public String getCommandName() { - return s_name; + return s_name; } - + @Override public long getEntityOwnerId() { return Account.ACCOUNT_ID_SYSTEM; } - + @Override public void execute(){ try { diff --git a/api/src/com/cloud/api/commands/AddSwiftCmd.java b/api/src/com/cloud/api/commands/AddSwiftCmd.java index d953be7524e..e0882c763f8 100644 --- a/api/src/com/cloud/api/commands/AddSwiftCmd.java +++ b/api/src/com/cloud/api/commands/AddSwiftCmd.java @@ -33,7 +33,7 @@ import com.cloud.user.Account; public class AddSwiftCmd extends BaseCmd { public static final Logger s_logger = Logger.getLogger(AddSwiftCmd.class.getName()); private static final String s_name = "addswiftresponse"; - + ///////////////////////////////////////////////////// //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// @@ -76,14 +76,14 @@ public class AddSwiftCmd extends BaseCmd { @Override public String getCommandName() { - return s_name; + return s_name; } - + @Override public long getEntityOwnerId() { return Account.ACCOUNT_ID_SYSTEM; } - + @Override public void execute(){ try { diff --git a/api/src/com/cloud/api/commands/AddTrafficTypeCmd.java b/api/src/com/cloud/api/commands/AddTrafficTypeCmd.java index 13dfad6c3c3..9ca682c6613 100644 --- a/api/src/com/cloud/api/commands/AddTrafficTypeCmd.java +++ b/api/src/com/cloud/api/commands/AddTrafficTypeCmd.java @@ -42,30 +42,30 @@ public class AddTrafficTypeCmd extends BaseAsyncCreateCmd { ///////////////////////////////////////////////////// //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - + @IdentityMapper(entityTableName="physical_network") @Parameter(name=ApiConstants.PHYSICAL_NETWORK_ID, type=CommandType.LONG, required=true, description="the Physical Network ID") private Long physicalNetworkId; - + @Parameter(name=ApiConstants.TRAFFIC_TYPE, type=CommandType.STRING, required=true, description="the trafficType to be added to the physical network") private String trafficType; - + @Parameter(name=ApiConstants.XEN_NETWORK_LABEL, type=CommandType.STRING, description="The network name label of the physical device dedicated to this traffic on a XenServer host") private String xenLabel; - + @Parameter(name=ApiConstants.KVM_NETWORK_LABEL, type=CommandType.STRING, description="The network name label of the physical device dedicated to this traffic on a KVM host") private String kvmLabel; - + @Parameter(name=ApiConstants.VMWARE_NETWORK_LABEL, type=CommandType.STRING, description="The network name label of the physical device dedicated to this traffic on a VMware host") private String vmwareLabel; - + @Parameter(name=ApiConstants.VLAN, type=CommandType.STRING, description="The VLAN id to be used for Management traffic by VMware host") private String vlan; ///////////////////////////////////////////////////// /////////////////// Accessors /////////////////////// ///////////////////////////////////////////////////// - + @Override public String getEntityTable() { return "physical_network_traffic_types"; @@ -90,10 +90,10 @@ public class AddTrafficTypeCmd extends BaseAsyncCreateCmd { public String getVmwareLabel() { return vmwareLabel; } - + public String getSimulatorLabel() { - //simulators will have no labels - return null; + //simulators will have no labels + return null; } public void setVlan(String vlan) { @@ -112,12 +112,12 @@ public class AddTrafficTypeCmd extends BaseAsyncCreateCmd { public String getCommandName() { return s_name; } - + @Override public long getEntityOwnerId() { return Account.ACCOUNT_ID_SYSTEM; } - + @Override public void execute(){ UserContext.current().setEventDetails("TrafficType Id: "+getEntityId()); @@ -138,19 +138,19 @@ public class AddTrafficTypeCmd extends BaseAsyncCreateCmd { setEntityId(result.getId()); } else { throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to add traffic type to physical network"); - } + } } @Override public String getEventType() { return EventTypes.EVENT_TRAFFIC_TYPE_CREATE; } - + @Override public String getEventDescription() { return "Adding physical network traffic type: " + getEntityId(); } - + @Override public AsyncJob.Type getInstanceType() { return AsyncJob.Type.TrafficType; diff --git a/api/src/com/cloud/api/commands/AddVpnUserCmd.java b/api/src/com/cloud/api/commands/AddVpnUserCmd.java index 15964dd20e2..3a6f38c94ac 100644 --- a/api/src/com/cloud/api/commands/AddVpnUserCmd.java +++ b/api/src/com/cloud/api/commands/AddVpnUserCmd.java @@ -43,13 +43,13 @@ public class AddVpnUserCmd extends BaseAsyncCreateCmd { ///////////////////////////////////////////////////// @Parameter(name=ApiConstants.USERNAME, type=CommandType.STRING, required=true, description="username for the vpn user") private String userName; - + @Parameter(name=ApiConstants.PASSWORD, type=CommandType.STRING, required=true, description="password for the username") private String password; - + @Parameter(name=ApiConstants.ACCOUNT, type=CommandType.STRING, description="an optional account for the vpn user. Must be used with domainId.") private String accountName; - + @IdentityMapper(entityTableName="projects") @Parameter(name=ApiConstants.PROJECT_ID, type=CommandType.LONG, description="add vpn user to the specific project") private Long projectId; @@ -57,64 +57,64 @@ public class AddVpnUserCmd extends BaseAsyncCreateCmd { @IdentityMapper(entityTableName="domain") @Parameter(name=ApiConstants.DOMAIN_ID, type=CommandType.LONG, description="an optional domainId for the vpn user. If the account parameter is used, domainId must also be used.") private Long domainId; - + ///////////////////////////////////////////////////// /////////////////// Accessors /////////////////////// ///////////////////////////////////////////////////// - public String getAccountName() { - return accountName; - } + public String getAccountName() { + return accountName; + } - public Long getDomainId() { - return domainId; - } + public Long getDomainId() { + return domainId; + } + + public String getUserName() { + return userName; + } + + public String getPassword() { + return password; + } + + public Long getProjectId() { + return projectId; + } - public String getUserName() { - return userName; - } - - public String getPassword() { - return password; - } - - public Long getProjectId() { - return projectId; - } - ///////////////////////////////////////////////////// /////////////// API Implementation/////////////////// ///////////////////////////////////////////////////// - @Override + @Override public String getCommandName() { return s_name; } - @Override - public long getEntityOwnerId() { + @Override + public long getEntityOwnerId() { Long accountId = finalyzeAccountId(accountName, domainId, projectId, true); if (accountId == null) { return UserContext.current().getCaller().getId(); } - + return accountId; } - + public String getEntityTable() { - return "vpn_users"; + return "vpn_users"; } - @Override - public String getEventDescription() { - return "Add Remote Access VPN user for account " + getEntityOwnerId() + " username= " + getUserName(); - } + @Override + public String getEventDescription() { + return "Add Remote Access VPN user for account " + getEntityOwnerId() + " username= " + getUserName(); + } - @Override - public String getEventType() { - return EventTypes.EVENT_VPN_USER_ADD; - } + @Override + public String getEventType() { + return EventTypes.EVENT_VPN_USER_ADD; + } @Override public void execute(){ @@ -123,15 +123,15 @@ public class AddVpnUserCmd extends BaseAsyncCreateCmd { if (!_ravService.applyVpnUsers(vpnUser.getAccountId(), userName)) { throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to add vpn user"); } - + VpnUsersResponse vpnResponse = new VpnUsersResponse(); vpnResponse.setId(vpnUser.getId()); vpnResponse.setUserName(vpnUser.getUsername()); vpnResponse.setAccountName(account.getAccountName()); - + vpnResponse.setDomainId(account.getDomainId()); vpnResponse.setDomainName(_entityMgr.findById(Domain.class, account.getDomainId()).getName()); - + vpnResponse.setResponseName(getCommandName()); vpnResponse.setObjectName("vpnuser"); this.setResponseObject(vpnResponse); @@ -140,11 +140,11 @@ public class AddVpnUserCmd extends BaseAsyncCreateCmd { @Override public void create() { Account owner = _accountService.getAccount(getEntityOwnerId()); - + VpnUser vpnUser = _ravService.addVpnUser(owner.getId(), userName, password); if (vpnUser == null) { throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to add vpn user"); } setEntityId(vpnUser.getId()); - } + } } diff --git a/api/src/com/cloud/api/commands/AssignToLoadBalancerRuleCmd.java b/api/src/com/cloud/api/commands/AssignToLoadBalancerRuleCmd.java index 04026d3401d..fc99113ca45 100644 --- a/api/src/com/cloud/api/commands/AssignToLoadBalancerRuleCmd.java +++ b/api/src/com/cloud/api/commands/AssignToLoadBalancerRuleCmd.java @@ -92,7 +92,7 @@ public class AssignToLoadBalancerRuleCmd extends BaseAsyncCmd { public String getEventDescription() { return "applying instances for load balancer: " + getLoadBalancerId() + " (ids: " + StringUtils.join(getVirtualMachineIds(), ",") + ")"; } - + @Override public void execute(){ UserContext.current().setEventDetails("Load balancer Id: "+getLoadBalancerId()+" VmIds: "+StringUtils.join(getVirtualMachineIds(), ",")); @@ -104,7 +104,7 @@ public class AssignToLoadBalancerRuleCmd extends BaseAsyncCmd { throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to assign load balancer rule"); } } - + @Override public String getSyncObjType() { return BaseAsyncCmd.networkSyncObject; @@ -112,10 +112,10 @@ public class AssignToLoadBalancerRuleCmd extends BaseAsyncCmd { @Override public Long getSyncObjId() { - LoadBalancer lb = _lbService.findById(id); - if(lb == null){ - throw new InvalidParameterValueException("Unable to find load balancer rule: " + id); - } + LoadBalancer lb = _lbService.findById(id); + if(lb == null){ + throw new InvalidParameterValueException("Unable to find load balancer rule: " + id); + } return lb.getNetworkId(); } } diff --git a/api/src/com/cloud/api/commands/AssociateIPAddrCmd.java b/api/src/com/cloud/api/commands/AssociateIPAddrCmd.java index 0356bc127f3..7057cbc0348 100644 --- a/api/src/com/cloud/api/commands/AssociateIPAddrCmd.java +++ b/api/src/com/cloud/api/commands/AssociateIPAddrCmd.java @@ -54,33 +54,33 @@ public class AssociateIPAddrCmd extends BaseAsyncCreateCmd { //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - @Parameter(name=ApiConstants.ACCOUNT, type=CommandType.STRING, + @Parameter(name=ApiConstants.ACCOUNT, type=CommandType.STRING, description="the account to associate with this IP address") private String accountName; @IdentityMapper(entityTableName="domain") - @Parameter(name=ApiConstants.DOMAIN_ID, type=CommandType.LONG, + @Parameter(name=ApiConstants.DOMAIN_ID, type=CommandType.LONG, description="the ID of the domain to associate with this IP address") private Long domainId; @IdentityMapper(entityTableName="data_center") - @Parameter(name=ApiConstants.ZONE_ID, type=CommandType.LONG, + @Parameter(name=ApiConstants.ZONE_ID, type=CommandType.LONG, description="the ID of the availability zone you want to acquire an public IP address from") private Long zoneId; - + @IdentityMapper(entityTableName="networks") - @Parameter(name=ApiConstants.NETWORK_ID, type=CommandType.LONG, + @Parameter(name=ApiConstants.NETWORK_ID, type=CommandType.LONG, description="The network this ip address should be associated to.") private Long networkId; - + @IdentityMapper(entityTableName="projects") - @Parameter(name=ApiConstants.PROJECT_ID, type=CommandType.LONG, + @Parameter(name=ApiConstants.PROJECT_ID, type=CommandType.LONG, description="Deploy vm for the project") private Long projectId; - + @IdentityMapper(entityTableName="vpc") @Parameter(name=ApiConstants.VPC_ID, type=CommandType.LONG, description="the VPC you want the ip address to " + - "be associated with") + "be associated with") private Long vpcId; ///////////////////////////////////////////////////// @@ -88,11 +88,11 @@ public class AssociateIPAddrCmd extends BaseAsyncCreateCmd { ///////////////////////////////////////////////////// public String getEntityTable() { - return "user_ip_address"; + return "user_ip_address"; } - + public String getAccountName() { - if (accountName != null) { + if (accountName != null) { return accountName; } return UserContext.current().getCaller().getAccountName(); @@ -119,56 +119,56 @@ public class AssociateIPAddrCmd extends BaseAsyncCreateCmd { return ntwk.getDataCenterId(); } } - + throw new InvalidParameterValueException("Unable to figure out zone to assign ip to"); } - + public Long getVpcId() { return vpcId; } - + public Long getNetworkId() { if (vpcId != null) { return null; } - + if (networkId != null) { return networkId; - } + } Long zoneId = getZoneId(); - + if (zoneId == null) { return null; } - + DataCenter zone = _configService.getZone(zoneId); if (zone.getNetworkType() == NetworkType.Advanced) { - List networks = _networkService.getIsolatedNetworksOwnedByAccountInZone(getZoneId(), + List networks = _networkService.getIsolatedNetworksOwnedByAccountInZone(getZoneId(), _accountService.getAccount(getEntityOwnerId())); if (networks.size() == 0) { String domain = _domainService.getDomain(getDomainId()).getName(); - throw new InvalidParameterValueException("Account name=" + getAccountName() + " domain=" + domain + + throw new InvalidParameterValueException("Account name=" + getAccountName() + " domain=" + domain + " doesn't have virtual networks in zone=" + zone.getName()); } - + if (networks.size() < 1) { - throw new InvalidParameterValueException("Account doesn't have any Isolated networks in the zone"); + throw new InvalidParameterValueException("Account doesn't have any Isolated networks in the zone"); } else if (networks.size() > 1) { - throw new InvalidParameterValueException("Account has more than one Isolated network in the zone"); + throw new InvalidParameterValueException("Account has more than one Isolated network in the zone"); } - + return networks.get(0).getId(); } else { Network defaultGuestNetwork = _networkService.getExclusiveGuestNetwork(zoneId); if (defaultGuestNetwork == null) { - throw new InvalidParameterValueException("Unable to find a default Guest network for account " + + throw new InvalidParameterValueException("Unable to find a default Guest network for account " + getAccountName() + " in domain id=" + getDomainId()); } else { return defaultGuestNetwork.getId(); } } } - + @Override public long getEntityOwnerId() { Account caller = UserContext.current().getCaller(); @@ -193,7 +193,7 @@ public class AssociateIPAddrCmd extends BaseAsyncCreateCmd { public String getEventType() { return EventTypes.EVENT_NET_IP_ASSIGN; } - + @Override public String getEventDescription() { return "associating ip to network id: " + getNetworkId() + " in zone " + getZoneId(); @@ -210,9 +210,9 @@ public class AssociateIPAddrCmd extends BaseAsyncCreateCmd { } public static String getResultObjectName() { - return "addressinfo"; + return "addressinfo"; } - + @Override public void create() throws ResourceAllocationException{ try { @@ -231,9 +231,9 @@ public class AssociateIPAddrCmd extends BaseAsyncCreateCmd { throw new ServerApiException(BaseCmd.INSUFFICIENT_CAPACITY_ERROR, ex.getMessage()); } } - + @Override - public void execute() throws ResourceUnavailableException, ResourceAllocationException, + public void execute() throws ResourceUnavailableException, ResourceAllocationException, ConcurrentOperationException, InsufficientCapacityException { UserContext.current().setEventDetails("Ip Id: " + getEntityId()); @@ -242,9 +242,9 @@ public class AssociateIPAddrCmd extends BaseAsyncCreateCmd { if (getVpcId() != null) { result = _vpcService.associateIPToVpc(getEntityId(), getVpcId()); } else if (getNetworkId() != null) { - result = _networkService.associateIPToNetwork(getEntityId(), getNetworkId()); + result = _networkService.associateIPToNetwork(getEntityId(), getNetworkId()); } - + if (result != null) { IPAddressResponse ipResponse = _responseGenerator.createIPAddressResponse(result); ipResponse.setResponseName(getCommandName()); @@ -253,8 +253,8 @@ public class AssociateIPAddrCmd extends BaseAsyncCreateCmd { throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to assign ip address"); } } - - + + @Override public String getSyncObjType() { return BaseAsyncCmd.networkSyncObject; @@ -264,7 +264,7 @@ public class AssociateIPAddrCmd extends BaseAsyncCreateCmd { public Long getSyncObjId() { return getNetworkId(); } - + @Override public AsyncJob.Type getInstanceType() { return AsyncJob.Type.IpAddress; diff --git a/api/src/com/cloud/api/commands/AttachIsoCmd.java b/api/src/com/cloud/api/commands/AttachIsoCmd.java index 8bd97e7da12..ac1be64feb7 100755 --- a/api/src/com/cloud/api/commands/AttachIsoCmd.java +++ b/api/src/com/cloud/api/commands/AttachIsoCmd.java @@ -72,14 +72,14 @@ public class AttachIsoCmd extends BaseAsyncCmd { public String getCommandName() { return s_name; } - + @Override public long getEntityOwnerId() { UserVm vm = _entityMgr.findById(UserVm.class, getVirtualMachineId()); if (vm == null) { throw new InvalidParameterValueException("Unable to find virtual machine by id " + getVirtualMachineId()); - } - + } + return vm.getAccountId(); } @@ -92,15 +92,15 @@ public class AttachIsoCmd extends BaseAsyncCmd { public String getEventDescription() { return "attaching ISO: " + getId() + " to vm: " + getVirtualMachineId(); } - + @Override public void execute(){ - UserContext.current().setEventDetails("Vm Id: " +getVirtualMachineId()+ " ISO Id: "+getId()); + UserContext.current().setEventDetails("Vm Id: " +getVirtualMachineId()+ " ISO Id: "+getId()); boolean result = _templateService.attachIso(id, virtualMachineId); if (result) { UserVm userVm = _responseGenerator.findUserVmById(virtualMachineId); if (userVm != null) { - UserVmResponse response = _responseGenerator.createUserVmResponse("virtualmachine", userVm).get(0); + UserVmResponse response = _responseGenerator.createUserVmResponse("virtualmachine", userVm).get(0); response.setResponseName(DeployVMCmd.getResultObjectName()); this.setResponseObject(response); } else { diff --git a/api/src/com/cloud/api/commands/AttachVolumeCmd.java b/api/src/com/cloud/api/commands/AttachVolumeCmd.java index fd9403cc3e3..752935b53df 100755 --- a/api/src/com/cloud/api/commands/AttachVolumeCmd.java +++ b/api/src/com/cloud/api/commands/AttachVolumeCmd.java @@ -34,7 +34,7 @@ import com.cloud.user.UserContext; @Implementation(description="Attaches a disk volume to a virtual machine.", responseObject=VolumeResponse.class) public class AttachVolumeCmd extends BaseAsyncCmd { - public static final Logger s_logger = Logger.getLogger(AttachVolumeCmd.class.getName()); + public static final Logger s_logger = Logger.getLogger(AttachVolumeCmd.class.getName()); private static final String s_name = "attachvolumeresponse"; ///////////////////////////////////////////////////// @@ -42,16 +42,16 @@ public class AttachVolumeCmd extends BaseAsyncCmd { ///////////////////////////////////////////////////// @Parameter(name=ApiConstants.DEVICE_ID, type=CommandType.LONG, description="the ID of the device to map the volume to within the guest OS. " + - "If no deviceId is passed in, the next available deviceId will be chosen. " + - "Possible values for a Linux OS are:" + - "* 1 - /dev/xvdb" + - "* 2 - /dev/xvdc" + - "* 4 - /dev/xvde" + - "* 5 - /dev/xvdf" + - "* 6 - /dev/xvdg" + - "* 7 - /dev/xvdh" + - "* 8 - /dev/xvdi" + - "* 9 - /dev/xvdj") + "If no deviceId is passed in, the next available deviceId will be chosen. " + + "Possible values for a Linux OS are:" + + "* 1 - /dev/xvdb" + + "* 2 - /dev/xvdc" + + "* 4 - /dev/xvde" + + "* 5 - /dev/xvdf" + + "* 6 - /dev/xvdg" + + "* 7 - /dev/xvdh" + + "* 8 - /dev/xvdi" + + "* 9 - /dev/xvdj") private Long deviceId; @IdentityMapper(entityTableName="volumes") @@ -59,7 +59,7 @@ public class AttachVolumeCmd extends BaseAsyncCmd { private Long id; @IdentityMapper(entityTableName="vm_instance") - @Parameter(name=ApiConstants.VIRTUAL_MACHINE_ID, type=CommandType.LONG, required=true, description=" the ID of the virtual machine") + @Parameter(name=ApiConstants.VIRTUAL_MACHINE_ID, type=CommandType.LONG, required=true, description=" the ID of the virtual machine") private Long virtualMachineId; @@ -88,13 +88,13 @@ public class AttachVolumeCmd extends BaseAsyncCmd { public String getCommandName() { return s_name; } - + public AsyncJob.Type getInstanceType() { - return AsyncJob.Type.Volume; + return AsyncJob.Type.Volume; } - + public Long getInstanceId() { - return getId(); + return getId(); } @Override @@ -115,7 +115,7 @@ public class AttachVolumeCmd extends BaseAsyncCmd { public String getEventDescription() { return "attaching volume: " + getId() + " to vm: " + getVirtualMachineId(); } - + @Override public void execute(){ UserContext.current().setEventDetails("Volume Id: "+getId()+" VmId: "+getVirtualMachineId()); diff --git a/api/src/com/cloud/api/commands/AuthorizeSecurityGroupEgressCmd.java b/api/src/com/cloud/api/commands/AuthorizeSecurityGroupEgressCmd.java index 13303a4b769..3abed2af7e8 100644 --- a/api/src/com/cloud/api/commands/AuthorizeSecurityGroupEgressCmd.java +++ b/api/src/com/cloud/api/commands/AuthorizeSecurityGroupEgressCmd.java @@ -69,22 +69,22 @@ public class AuthorizeSecurityGroupEgressCmd extends BaseAsyncCmd { @Parameter(name = ApiConstants.USER_SECURITY_GROUP_LIST, type = CommandType.MAP, description = "user to security group mapping") private Map userSecurityGroupList; - + @IdentityMapper(entityTableName="domain") @Parameter(name=ApiConstants.DOMAIN_ID, type=CommandType.LONG, description="an optional domainId for the security group. If the account parameter is used, domainId must also be used.") private Long domainId; - + @Parameter(name=ApiConstants.ACCOUNT, type=CommandType.STRING, description="an optional account for the security group. Must be used with domainId.") private String accountName; - + @IdentityMapper(entityTableName="projects") @Parameter(name=ApiConstants.PROJECT_ID, type=CommandType.LONG, description="an optional project of the security group") private Long projectId; - + @IdentityMapper(entityTableName="security_group") @Parameter(name=ApiConstants.SECURITY_GROUP_ID, type=CommandType.LONG, description="The ID of the security group. Mutually exclusive with securityGroupName parameter") private Long securityGroupId; - + @Parameter(name=ApiConstants.SECURITY_GROUP_NAME, type=CommandType.STRING, description="The name of the security group. Mutually exclusive with securityGroupName parameter") private String securityGroupName; @@ -116,7 +116,7 @@ public class AuthorizeSecurityGroupEgressCmd extends BaseAsyncCmd { if (securityGroupId != null && securityGroupName != null) { throw new InvalidParameterValueException("securityGroupId and securityGroupName parameters are mutually exclusive"); } - + if (securityGroupName != null) { securityGroupId = _responseGenerator.getSecurityGroupId(securityGroupName, getEntityOwnerId()); if (securityGroupId == null) { @@ -124,11 +124,11 @@ public class AuthorizeSecurityGroupEgressCmd extends BaseAsyncCmd { } securityGroupName = null; } - + if (securityGroupId == null) { throw new InvalidParameterValueException("Either securityGroupId or securityGroupName is required by authorizeSecurityGroupIngress command"); } - + return securityGroupId; } @@ -166,7 +166,7 @@ public class AuthorizeSecurityGroupEgressCmd extends BaseAsyncCmd { if (accountId == null) { return UserContext.current().getCaller().getId(); } - + return accountId; } diff --git a/api/src/com/cloud/api/commands/AuthorizeSecurityGroupIngressCmd.java b/api/src/com/cloud/api/commands/AuthorizeSecurityGroupIngressCmd.java index 21b4eb08430..dc8e6055bce 100644 --- a/api/src/com/cloud/api/commands/AuthorizeSecurityGroupIngressCmd.java +++ b/api/src/com/cloud/api/commands/AuthorizeSecurityGroupIngressCmd.java @@ -72,22 +72,22 @@ public class AuthorizeSecurityGroupIngressCmd extends BaseAsyncCmd { @Parameter(name = ApiConstants.USER_SECURITY_GROUP_LIST, type = CommandType.MAP, description = "user to security group mapping") private Map userSecurityGroupList; - + @IdentityMapper(entityTableName="domain") @Parameter(name=ApiConstants.DOMAIN_ID, type=CommandType.LONG, description="an optional domainId for the security group. If the account parameter is used, domainId must also be used.") private Long domainId; - + @Parameter(name=ApiConstants.ACCOUNT, type=CommandType.STRING, description="an optional account for the security group. Must be used with domainId.") private String accountName; - + @IdentityMapper(entityTableName="projects") @Parameter(name=ApiConstants.PROJECT_ID, type=CommandType.LONG, description="an optional project of the security group") private Long projectId; - + @IdentityMapper(entityTableName="security_group") @Parameter(name=ApiConstants.SECURITY_GROUP_ID, type=CommandType.LONG, description="The ID of the security group. Mutually exclusive with securityGroupName parameter") private Long securityGroupId; - + @Parameter(name=ApiConstants.SECURITY_GROUP_NAME, type=CommandType.STRING, description="The name of the security group. Mutually exclusive with securityGroupName parameter") private String securityGroupName; @@ -119,7 +119,7 @@ public class AuthorizeSecurityGroupIngressCmd extends BaseAsyncCmd { if (securityGroupId != null && securityGroupName != null) { throw new InvalidParameterValueException("securityGroupId and securityGroupName parameters are mutually exclusive"); } - + if (securityGroupName != null) { securityGroupId = _responseGenerator.getSecurityGroupId(securityGroupName, getEntityOwnerId()); if (securityGroupId == null) { @@ -127,11 +127,11 @@ public class AuthorizeSecurityGroupIngressCmd extends BaseAsyncCmd { } securityGroupName = null; } - + if (securityGroupId == null) { throw new InvalidParameterValueException("Either securityGroupId or securityGroupName is required by authorizeSecurityGroupIngress command"); } - + return securityGroupId; } @@ -169,7 +169,7 @@ public class AuthorizeSecurityGroupIngressCmd extends BaseAsyncCmd { if (accountId == null) { return UserContext.current().getCaller().getId(); } - + return accountId; } @@ -210,7 +210,7 @@ public class AuthorizeSecurityGroupIngressCmd extends BaseAsyncCmd { @Override public void execute() { if(cidrList != null){ - for(String cidr : cidrList ){ + for(String cidr : cidrList ){ if (!NetUtils.isValidCIDR(cidr)){ throw new ServerApiException(BaseCmd.PARAM_ERROR, cidr + " is an Invalid CIDR "); } diff --git a/api/src/com/cloud/api/commands/CancelMaintenanceCmd.java b/api/src/com/cloud/api/commands/CancelMaintenanceCmd.java index 155a07128dc..dfd7c88e120 100644 --- a/api/src/com/cloud/api/commands/CancelMaintenanceCmd.java +++ b/api/src/com/cloud/api/commands/CancelMaintenanceCmd.java @@ -64,9 +64,9 @@ public class CancelMaintenanceCmd extends BaseAsyncCmd { public String getCommandName() { return s_name; } - + public static String getResultObjectName() { - return "host"; + return "host"; } @Override @@ -88,17 +88,17 @@ public class CancelMaintenanceCmd extends BaseAsyncCmd { public String getEventDescription() { return "canceling maintenance for host: " + getId(); } - + @Override public AsyncJob.Type getInstanceType() { - return AsyncJob.Type.Host; + return AsyncJob.Type.Host; } - + @Override public Long getInstanceId() { - return getId(); + return getId(); } - + @Override public void execute(){ Host result = _resourceService.cancelMaintenance(this); diff --git a/api/src/com/cloud/api/commands/CancelPrimaryStorageMaintenanceCmd.java b/api/src/com/cloud/api/commands/CancelPrimaryStorageMaintenanceCmd.java index 585490f8ae9..400aa9c10e5 100644 --- a/api/src/com/cloud/api/commands/CancelPrimaryStorageMaintenanceCmd.java +++ b/api/src/com/cloud/api/commands/CancelPrimaryStorageMaintenanceCmd.java @@ -35,8 +35,8 @@ import com.cloud.user.UserContext; @Implementation(description="Cancels maintenance for primary storage", responseObject=StoragePoolResponse.class) public class CancelPrimaryStorageMaintenanceCmd extends BaseAsyncCmd { - public static final Logger s_logger = Logger.getLogger(CancelPrimaryStorageMaintenanceCmd.class.getName()); - + public static final Logger s_logger = Logger.getLogger(CancelPrimaryStorageMaintenanceCmd.class.getName()); + private static final String s_name = "cancelprimarystoragemaintenanceresponse"; ///////////////////////////////////////////////////// @@ -65,16 +65,16 @@ public class CancelPrimaryStorageMaintenanceCmd extends BaseAsyncCmd { public String getCommandName() { return s_name; } - + public static String getResultObjectName() { - return "primarystorage"; + return "primarystorage"; } - + @Override public AsyncJob.Type getInstanceType() { return AsyncJob.Type.StoragePool; } - + @Override public Long getInstanceId() { return getId(); @@ -99,7 +99,7 @@ public class CancelPrimaryStorageMaintenanceCmd extends BaseAsyncCmd { public String getEventDescription() { return "canceling maintenance for primary storage pool: " + getId(); } - + @Override public void execute() throws ResourceUnavailableException{ StoragePool result = _storageService.cancelPrimaryStorageForMaintenance(this); diff --git a/api/src/com/cloud/api/commands/ConfigureVirtualRouterElementCmd.java b/api/src/com/cloud/api/commands/ConfigureVirtualRouterElementCmd.java index 923cd1ae580..c130637df2a 100644 --- a/api/src/com/cloud/api/commands/ConfigureVirtualRouterElementCmd.java +++ b/api/src/com/cloud/api/commands/ConfigureVirtualRouterElementCmd.java @@ -39,9 +39,9 @@ import com.cloud.user.UserContext; @Implementation(responseObject=VirtualRouterProviderResponse.class, description="Configures a virtual router element.") public class ConfigureVirtualRouterElementCmd extends BaseAsyncCmd { - public static final Logger s_logger = Logger.getLogger(ConfigureVirtualRouterElementCmd.class.getName()); + public static final Logger s_logger = Logger.getLogger(ConfigureVirtualRouterElementCmd.class.getName()); private static final String s_name = "configurevirtualrouterelementresponse"; - + @PlugService private VirtualRouterElementService _service; @@ -56,7 +56,7 @@ public class ConfigureVirtualRouterElementCmd extends BaseAsyncCmd { @IdentityMapper(entityTableName = "physical_network_service_providers") @Parameter(name=ApiConstants.ENABLED, type=CommandType.BOOLEAN, required=true, description="Enabled/Disabled the service provider") private Boolean enabled; - + ///////////////////////////////////////////////////// /////////////////// Accessors /////////////////////// ///////////////////////////////////////////////////// @@ -85,11 +85,11 @@ public class ConfigureVirtualRouterElementCmd extends BaseAsyncCmd { public String getCommandName() { return s_name; } - + public static String getResultObjectName() { - return "boolean"; + return "boolean"; } - + @Override public long getEntityOwnerId() { return Account.ACCOUNT_ID_SYSTEM; @@ -104,15 +104,15 @@ public class ConfigureVirtualRouterElementCmd extends BaseAsyncCmd { public String getEventDescription() { return "configuring virtual router provider: " + id; } - + public AsyncJob.Type getInstanceType() { - return AsyncJob.Type.None; + return AsyncJob.Type.None; } - + public Long getInstanceId() { return id; } - + @Override public void execute() throws ConcurrentOperationException, ResourceUnavailableException, InsufficientCapacityException{ UserContext.current().setEventDetails("Virtual router element: " + id); diff --git a/api/src/com/cloud/api/commands/CopyTemplateCmd.java b/api/src/com/cloud/api/commands/CopyTemplateCmd.java index fc5d09d467b..6f7bdf650cd 100755 --- a/api/src/com/cloud/api/commands/CopyTemplateCmd.java +++ b/api/src/com/cloud/api/commands/CopyTemplateCmd.java @@ -38,7 +38,7 @@ import com.cloud.user.UserContext; @Implementation(description="Copies a template from one zone to another.", responseObject=TemplateResponse.class) public class CopyTemplateCmd extends BaseAsyncCmd { - public static final Logger s_logger = Logger.getLogger(CopyTemplateCmd.class.getName()); + public static final Logger s_logger = Logger.getLogger(CopyTemplateCmd.class.getName()); private static final String s_name = "copytemplateresponse"; ///////////////////////////////////////////////////// @@ -107,29 +107,29 @@ public class CopyTemplateCmd extends BaseAsyncCmd { public String getEventDescription() { return "copying template: " + getId() + " from zone: " + getSourceZoneId() + " to zone: " + getDestinationZoneId(); } - + public AsyncJob.Type getInstanceType() { - return AsyncJob.Type.Template; + return AsyncJob.Type.Template; } - + public Long getInstanceId() { - return getId(); + return getId(); } @Override public void execute() throws ResourceAllocationException{ try { - UserContext.current().setEventDetails(getEventDescription()); + UserContext.current().setEventDetails(getEventDescription()); VirtualMachineTemplate template = _templateService.copyTemplate(this); - + if (template != null){ List listResponse = _responseGenerator.createTemplateResponses(template.getId(), getDestinationZoneId(), false); TemplateResponse response = new TemplateResponse(); if (listResponse != null && !listResponse.isEmpty()) { response = listResponse.get(0); } - - response.setResponseName(getCommandName()); + + response.setResponseName(getCommandName()); this.setResponseObject(response); } else { throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to copy template"); @@ -137,7 +137,7 @@ public class CopyTemplateCmd extends BaseAsyncCmd { } catch (StorageUnavailableException ex) { s_logger.warn("Exception: ", ex); throw new ServerApiException(BaseCmd.RESOURCE_UNAVAILABLE_ERROR, ex.getMessage()); - } + } } } diff --git a/api/src/com/cloud/api/commands/CreateAccountCmd.java b/api/src/com/cloud/api/commands/CreateAccountCmd.java index 57f61499414..d1d3996ddfa 100755 --- a/api/src/com/cloud/api/commands/CreateAccountCmd.java +++ b/api/src/com/cloud/api/commands/CreateAccountCmd.java @@ -70,11 +70,11 @@ public class CreateAccountCmd extends BaseCmd { @Parameter(name=ApiConstants.USERNAME, type=CommandType.STRING, required=true, description="Unique username.") private String userName; - + @Parameter(name=ApiConstants.NETWORK_DOMAIN, type=CommandType.STRING, description="Network domain for the account's networks") private String networkDomain; - @Parameter(name = ApiConstants.ACCOUNT_DETAILS, type = CommandType.MAP, description = "details for account used to store specific parameters") + @Parameter(name = ApiConstants.ACCOUNT_DETAILS, type = CommandType.MAP, description = "details for account used to store specific parameters") private Map details; ///////////////////////////////////////////////////// /////////////////// Accessors /////////////////////// @@ -115,19 +115,19 @@ public class CreateAccountCmd extends BaseCmd { public String getUsername() { return userName; } - + public String getNetworkDomain() { return networkDomain; - } - + } + public Map getDetails() { - if (details == null || details.isEmpty()) { - return null; - } - - Collection paramsCollection = details.values(); - Map params = (Map) (paramsCollection.toArray())[0]; - return params; + if (details == null || details.isEmpty()) { + return null; + } + + Collection paramsCollection = details.values(); + Map params = (Map) (paramsCollection.toArray())[0]; + return params; } ///////////////////////////////////////////////////// @@ -138,12 +138,12 @@ public class CreateAccountCmd extends BaseCmd { public String getCommandName() { return s_name; } - + @Override public long getEntityOwnerId() { return Account.ACCOUNT_ID_SYSTEM; } - + @Override public void execute(){ UserContext.current().setEventDetails("Account Name: "+getAccountName()+", Domain Id:"+getDomainId()); @@ -156,4 +156,4 @@ public class CreateAccountCmd extends BaseCmd { throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to create a user account"); } } -} \ No newline at end of file +} diff --git a/api/src/com/cloud/api/commands/CreateDiskOfferingCmd.java b/api/src/com/cloud/api/commands/CreateDiskOfferingCmd.java index bbe3f17eed0..74789332be0 100755 --- a/api/src/com/cloud/api/commands/CreateDiskOfferingCmd.java +++ b/api/src/com/cloud/api/commands/CreateDiskOfferingCmd.java @@ -53,10 +53,10 @@ public class CreateDiskOfferingCmd extends BaseCmd { @Parameter(name=ApiConstants.CUSTOMIZED, type=CommandType.BOOLEAN, description="whether disk offering is custom or not") private Boolean customized; - + @IdentityMapper(entityTableName="domain") @Parameter(name=ApiConstants.DOMAIN_ID, type=CommandType.LONG, description="the ID of the containing domain, null for public offerings") - private Long domainId; + private Long domainId; @Parameter(name=ApiConstants.STORAGE_TYPE, type=CommandType.STRING, description="the storage type of the disk offering. Values are local and shared.") private String storageType = ServiceOffering.StorageType.shared.toString(); @@ -82,11 +82,11 @@ public class CreateDiskOfferingCmd extends BaseCmd { } public Boolean isCustomized(){ - return customized; + return customized; } - + public Long getDomainId(){ - return domainId; + return domainId; } public String getStorageType() { @@ -101,12 +101,12 @@ public class CreateDiskOfferingCmd extends BaseCmd { public String getCommandName() { return s_name; } - + @Override public long getEntityOwnerId() { return Account.ACCOUNT_ID_SYSTEM; } - + @Override public void execute(){ DiskOffering offering = _configService.createDiskOffering(this); @@ -116,6 +116,6 @@ public class CreateDiskOfferingCmd extends BaseCmd { this.setResponseObject(response); } else { throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to create disk offering"); - } + } } } diff --git a/api/src/com/cloud/api/commands/CreateDomainCmd.java b/api/src/com/cloud/api/commands/CreateDomainCmd.java index 6e59ae98aab..62598f28d75 100644 --- a/api/src/com/cloud/api/commands/CreateDomainCmd.java +++ b/api/src/com/cloud/api/commands/CreateDomainCmd.java @@ -63,7 +63,7 @@ public class CreateDomainCmd extends BaseCmd { public String getNetworkDomain() { return networkDomain; - } + } ///////////////////////////////////////////////////// /////////////// API Implementation/////////////////// @@ -73,12 +73,12 @@ public class CreateDomainCmd extends BaseCmd { public String getCommandName() { return s_name; } - + @Override public long getEntityOwnerId() { return Account.ACCOUNT_ID_SYSTEM; } - + @Override public void execute(){ UserContext.current().setEventDetails("Domain Name: "+getDomainName()+((getParentDomainId()!=null)?", Parent DomainId :"+getParentDomainId():"")); diff --git a/api/src/com/cloud/api/commands/CreateFirewallRuleCmd.java b/api/src/com/cloud/api/commands/CreateFirewallRuleCmd.java index d01d92de308..877fd7e970c 100644 --- a/api/src/com/cloud/api/commands/CreateFirewallRuleCmd.java +++ b/api/src/com/cloud/api/commands/CreateFirewallRuleCmd.java @@ -63,25 +63,25 @@ public class CreateFirewallRuleCmd extends BaseAsyncCreateCmd implements Firewal @Parameter(name = ApiConstants.END_PORT, type = CommandType.INTEGER, description = "the ending port of firewall rule") private Integer publicEndPort; - + @Parameter(name = ApiConstants.CIDR_LIST, type = CommandType.LIST, collectionType = CommandType.STRING, description = "the cidr list to forward traffic from") private List cidrlist; - + @Parameter(name = ApiConstants.ICMP_TYPE, type = CommandType.INTEGER, description = "type of the icmp message being sent") private Integer icmpType; @Parameter(name = ApiConstants.ICMP_CODE, type = CommandType.INTEGER, description = "error code for this icmp message") private Integer icmpCode; - + @Parameter(name = ApiConstants.TYPE, type = CommandType.STRING, description = "type of firewallrule: system/user") private String type; - + // /////////////////////////////////////////////////// // ///////////////// Accessors /////////////////////// // /////////////////////////////////////////////////// - + public String getEntityTable() { - return "firewall_rules"; + return "firewall_rules"; } public Long getIpAddressId() { @@ -101,7 +101,7 @@ public class CreateFirewallRuleCmd extends BaseAsyncCreateCmd implements Firewal oneCidrList.add(NetUtils.ALL_CIDRS); return oneCidrList; } - + } // /////////////////////////////////////////////////// @@ -112,7 +112,7 @@ public class CreateFirewallRuleCmd extends BaseAsyncCreateCmd implements Firewal public String getCommandName() { return s_name; } - + public void setSourceCidrList(List cidrs){ cidrlist = cidrs; } @@ -128,7 +128,7 @@ public class CreateFirewallRuleCmd extends BaseAsyncCreateCmd implements Firewal // State is different after the rule is applied, so get new object here rule = _entityMgr.findById(FirewallRule.class, getEntityId()); - FirewallResponse fwResponse = new FirewallResponse(); + FirewallResponse fwResponse = new FirewallResponse(); if (rule != null) { fwResponse = _responseGenerator.createFirewallResponse(rule); setResponseObject(fwResponse); @@ -175,7 +175,7 @@ public class CreateFirewallRuleCmd extends BaseAsyncCreateCmd implements Firewal } else { return publicEndPort.intValue(); } - + return null; } @@ -193,13 +193,13 @@ public class CreateFirewallRuleCmd extends BaseAsyncCreateCmd implements Firewal public long getNetworkId() { IpAddress ip = _entityMgr.findById(IpAddress.class, getIpAddressId()); Long ntwkId = null; - + if (ip.getAssociatedWithNetworkId() != null) { ntwkId = ip.getAssociatedWithNetworkId(); } - + if (ntwkId == null) { - throw new InvalidParameterValueException("Unable to create firewall rule for the ipAddress id=" + ipAddressId + + throw new InvalidParameterValueException("Unable to create firewall rule for the ipAddress id=" + ipAddressId + " as ip is not associated with any network and no networkId is passed in"); } return ntwkId; @@ -227,7 +227,7 @@ public class CreateFirewallRuleCmd extends BaseAsyncCreateCmd implements Firewal if (getSourceCidrList() != null) { for (String cidr: getSourceCidrList()){ if (!NetUtils.isValidCIDR(cidr)){ - throw new ServerApiException(BaseCmd.PARAM_ERROR, "Source cidrs formatting error " + cidr); + throw new ServerApiException(BaseCmd.PARAM_ERROR, "Source cidrs formatting error " + cidr); } } } @@ -276,7 +276,7 @@ public class CreateFirewallRuleCmd extends BaseAsyncCreateCmd implements Firewal } return ip; } - + @Override public Integer getIcmpCode() { if (icmpCode != null) { @@ -286,14 +286,14 @@ public class CreateFirewallRuleCmd extends BaseAsyncCreateCmd implements Firewal } return null; } - + @Override public Integer getIcmpType() { if (icmpType != null) { return icmpType; } else if (protocol.equalsIgnoreCase(NetUtils.ICMP_PROTO)) { return -1; - + } return null; } @@ -303,20 +303,20 @@ public class CreateFirewallRuleCmd extends BaseAsyncCreateCmd implements Firewal return null; } - @Override - public FirewallRuleType getType() { - if (type != null && type.equalsIgnoreCase("system")) { - return FirewallRuleType.System; - } else { - return FirewallRuleType.User; - } - } - + @Override + public FirewallRuleType getType() { + if (type != null && type.equalsIgnoreCase("system")) { + return FirewallRuleType.System; + } else { + return FirewallRuleType.User; + } + } + @Override public AsyncJob.Type getInstanceType() { return AsyncJob.Type.FirewallRule; } - + @Override public TrafficType getTrafficType() { return null; diff --git a/api/src/com/cloud/api/commands/CreateIpForwardingRuleCmd.java b/api/src/com/cloud/api/commands/CreateIpForwardingRuleCmd.java index 3df3155ed87..9d79fdbdf1b 100644 --- a/api/src/com/cloud/api/commands/CreateIpForwardingRuleCmd.java +++ b/api/src/com/cloud/api/commands/CreateIpForwardingRuleCmd.java @@ -54,19 +54,19 @@ public class CreateIpForwardingRuleCmd extends BaseAsyncCreateCmd implements Sta @IdentityMapper(entityTableName="user_ip_address") @Parameter(name=ApiConstants.IP_ADDRESS_ID, type=CommandType.LONG, required=true, description="the public IP address id of the forwarding rule, already associated via associateIp") private Long ipAddressId; - + @Parameter(name=ApiConstants.START_PORT, type=CommandType.INTEGER, required=true, description="the start port for the rule") private Integer startPort; @Parameter(name=ApiConstants.END_PORT, type=CommandType.INTEGER, description="the end port for the rule") private Integer endPort; - + @Parameter(name=ApiConstants.PROTOCOL, type=CommandType.STRING, required=true, description="the protocol for the rule. Valid values are TCP or UDP.") private String protocol; - + @Parameter(name = ApiConstants.OPEN_FIREWALL, type = CommandType.BOOLEAN, description = "if true, firewall rule for source/end pubic port is automatically created; if false - firewall rule has to be created explicitely. Has value true by default") private Boolean openFirewall; - + @Parameter(name = ApiConstants.CIDR_LIST, type = CommandType.LIST, collectionType = CommandType.STRING, description = "the cidr list to forward traffic from") private List cidrlist; @@ -74,23 +74,23 @@ public class CreateIpForwardingRuleCmd extends BaseAsyncCreateCmd implements Sta ///////////////////////////////////////////////////// /////////////////// Accessors /////////////////////// ///////////////////////////////////////////////////// - + public String getEntityTable() { - return "firewall_rules"; + return "firewall_rules"; } - + public Long getIpAddressId() { return ipAddressId; } - + public int getStartPort() { return startPort; } - + public int getEndPort() { return endPort; } - + public Boolean getOpenFirewall() { if (openFirewall != null) { return openFirewall; @@ -109,17 +109,17 @@ public class CreateIpForwardingRuleCmd extends BaseAsyncCreateCmd implements Sta } @Override - public void execute() throws ResourceUnavailableException{ + public void execute() throws ResourceUnavailableException{ boolean result = true; FirewallRule rule = null; try { UserContext.current().setEventDetails("Rule Id: "+ getEntityId()); - + if (getOpenFirewall()) { result = result && _firewallService.applyFirewallRules(ipAddressId, UserContext.current().getCaller()); } - + result = result && _rulesService.applyStaticNatRules(ipAddressId, UserContext.current().getCaller()); rule = _entityMgr.findById(FirewallRule.class, getEntityId()); StaticNatRule staticNatRule = _rulesService.buildStaticNatRule(rule, false); @@ -128,26 +128,26 @@ public class CreateIpForwardingRuleCmd extends BaseAsyncCreateCmd implements Sta this.setResponseObject(fwResponse); } finally { if (!result || rule == null) { - + if (getOpenFirewall()) { _firewallService.revokeRelatedFirewallRule(getEntityId(), true); } - + _rulesService.revokeStaticNatRule(getEntityId(), true); - + throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Error in creating ip forwarding rule on the domr"); } } } - @Override - public void create() { - - //cidr list parameter is deprecated + @Override + public void create() { + + //cidr list parameter is deprecated if (cidrlist != null) { throw new InvalidParameterValueException("Parameter cidrList is deprecated; if you need to open firewall rule for the specific cidr, please refer to createFirewallRule command"); } - + try { StaticNatRule rule = _rulesService.createStaticNatRule(this, getOpenFirewall()); this.setEntityId(rule.getId()); @@ -155,7 +155,7 @@ public class CreateIpForwardingRuleCmd extends BaseAsyncCreateCmd implements Sta s_logger.info("Unable to create Static Nat Rule due to ", e); throw new ServerApiException(BaseCmd.NETWORK_RULE_CONFLICT_ERROR, e.getMessage()); } - } + } @Override public long getEntityOwnerId() { @@ -178,16 +178,16 @@ public class CreateIpForwardingRuleCmd extends BaseAsyncCreateCmd implements Sta IpAddress ip = _networkService.getIp(ipAddressId); return ("Applying an ipforwarding 1:1 NAT rule for Ip: "+ip.getAddress()+" with virtual machine:"+ this.getVirtualMachineId()); } - + private long getVirtualMachineId() { Long vmId = _networkService.getIp(ipAddressId).getAssociatedWithVmId(); - + if (vmId == null) { throw new InvalidParameterValueException("Ip address is not associated with any network, unable to create static nat rule"); } return vmId; } - + @Override public String getDestIpAddress(){ return null; @@ -248,13 +248,13 @@ public class CreateIpForwardingRuleCmd extends BaseAsyncCreateCmd implements Sta IpAddress ip = _networkService.getIp(ipAddressId); return ip.getAccountId(); } - + @Override public String getXid() { // FIXME: We should allow for end user to specify Xid. return null; } - + @Override public String getSyncObjType() { return BaseAsyncCmd.networkSyncObject; @@ -272,12 +272,12 @@ public class CreateIpForwardingRuleCmd extends BaseAsyncCreateCmd implements Sta } return ip; } - + @Override public Integer getIcmpCode() { return null; } - + @Override public Integer getIcmpType() { return null; @@ -287,22 +287,22 @@ public class CreateIpForwardingRuleCmd extends BaseAsyncCreateCmd implements Sta public List getSourceCidrList() { return null; } - + @Override public Long getRelated() { return null; } - @Override - public FirewallRuleType getType() { - return FirewallRuleType.User; - } - - @Override + @Override + public FirewallRuleType getType() { + return FirewallRuleType.User; + } + + @Override public AsyncJob.Type getInstanceType() { return AsyncJob.Type.FirewallRule; } - + @Override public TrafficType getTrafficType() { return null; diff --git a/api/src/com/cloud/api/commands/CreateLBStickinessPolicyCmd.java b/api/src/com/cloud/api/commands/CreateLBStickinessPolicyCmd.java index c98dc66e39b..2ea726e8837 100644 --- a/api/src/com/cloud/api/commands/CreateLBStickinessPolicyCmd.java +++ b/api/src/com/cloud/api/commands/CreateLBStickinessPolicyCmd.java @@ -50,7 +50,7 @@ public class CreateLBStickinessPolicyCmd extends BaseAsyncCreateCmd { // /////////////////////////////////////////////////// // ////////////// API parameters ///////////////////// // /////////////////////////////////////////////////// - + @IdentityMapper(entityTableName="firewall_rules") @Parameter(name = ApiConstants.LBID, type = CommandType.LONG, required = true, description = "the ID of the load balancer rule") private Long lbRuleId; @@ -117,7 +117,7 @@ public class CreateLBStickinessPolicyCmd extends BaseAsyncCreateCmd { public void execute() throws ResourceAllocationException, ResourceUnavailableException { StickinessPolicy policy = null; boolean success = false; - + try { UserContext.current().setEventDetails("Rule Id: " + getEntityId()); success = _lbService.applyLBStickinessPolicy(this); @@ -131,9 +131,9 @@ public class CreateLBStickinessPolicyCmd extends BaseAsyncCreateCmd { } } finally { if (!success || (policy == null)) { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to create stickiness policy "); + throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to create stickiness policy "); } - } + } } @Override diff --git a/api/src/com/cloud/api/commands/CreateLoadBalancerRuleCmd.java b/api/src/com/cloud/api/commands/CreateLoadBalancerRuleCmd.java index 0088ca64741..0402709a300 100644 --- a/api/src/com/cloud/api/commands/CreateLoadBalancerRuleCmd.java +++ b/api/src/com/cloud/api/commands/CreateLoadBalancerRuleCmd.java @@ -69,7 +69,7 @@ public class CreateLoadBalancerRuleCmd extends BaseAsyncCreateCmd /*implements @IdentityMapper(entityTableName="user_ip_address") @Parameter(name=ApiConstants.PUBLIC_IP_ID, type=CommandType.LONG, description="public ip address id from where the network traffic will be load balanced from") private Long publicIpId; - + @IdentityMapper(entityTableName="data_center") @Parameter(name=ApiConstants.ZONE_ID, type=CommandType.LONG, required=false, description="zone where the load balancer is going to be created. This parameter is required when LB service provider is ElasticLoadBalancerVm") private Long zoneId; @@ -78,7 +78,7 @@ public class CreateLoadBalancerRuleCmd extends BaseAsyncCreateCmd /*implements private Integer publicPort; @Parameter(name = ApiConstants.OPEN_FIREWALL, type = CommandType.BOOLEAN, description = "if true, firewall rule for" + - " source/end pubic port is automatically created; if false - firewall rule has to be created explicitely. If not specified 1) defaulted to false when LB" + + " source/end pubic port is automatically created; if false - firewall rule has to be created explicitely. If not specified 1) defaulted to false when LB" + " rule is being created for VPC guest network 2) in all other cases defaulted to true") private Boolean openFirewall; @@ -88,15 +88,15 @@ public class CreateLoadBalancerRuleCmd extends BaseAsyncCreateCmd /*implements @IdentityMapper(entityTableName="domain") @Parameter(name=ApiConstants.DOMAIN_ID, type=CommandType.LONG, description="the domain ID associated with the load balancer") private Long domainId; - + @Parameter(name = ApiConstants.CIDR_LIST, type = CommandType.LIST, collectionType = CommandType.STRING, description = "the cidr list to forward traffic from") private List cidrlist; - + @IdentityMapper(entityTableName="networks") @Parameter(name=ApiConstants.NETWORK_ID, type=CommandType.LONG, description="The guest network this " + - "rule will be created for. Required when public Ip address is not associated with any Guest network yet (VPC case)") + "rule will be created for. Required when public Ip address is not associated with any Guest network yet (VPC case)") private Long networkId; - + ///////////////////////////////////////////////////// /////////////////// Accessors /////////////////////// ///////////////////////////////////////////////////// @@ -118,23 +118,23 @@ public class CreateLoadBalancerRuleCmd extends BaseAsyncCreateCmd /*implements } public String getEntityTable() { - return "firewall_rules"; + return "firewall_rules"; } - + public Long getSourceIpAddressId() { - if (publicIpId != null) { - IpAddress ipAddr = _networkService.getIp(publicIpId); - if (ipAddr == null || !ipAddr.readyToUse()) { - throw new InvalidParameterValueException("Unable to create load balancer rule, invalid IP address id " + ipAddr.getId()); - } - } else if (getEntityId() != null) { - LoadBalancer rule = _entityMgr.findById(LoadBalancer.class, getEntityId()); - return rule.getSourceIpAddressId(); - } - - return publicIpId; + if (publicIpId != null) { + IpAddress ipAddr = _networkService.getIp(publicIpId); + if (ipAddr == null || !ipAddr.readyToUse()) { + throw new InvalidParameterValueException("Unable to create load balancer rule, invalid IP address id " + ipAddr.getId()); + } + } else if (getEntityId() != null) { + LoadBalancer rule = _entityMgr.findById(LoadBalancer.class, getEntityId()); + return rule.getSourceIpAddressId(); + } + + return publicIpId; } - + private Long getVpcId() { if (publicIpId != null) { IpAddress ipAddr = _networkService.getIp(publicIpId); @@ -146,36 +146,36 @@ public class CreateLoadBalancerRuleCmd extends BaseAsyncCreateCmd /*implements } return null; } - - + + public Long getNetworkId() { if (networkId != null) { return networkId; - } - Long zoneId = getZoneId(); - - if (zoneId == null) { - Long ipId = getSourceIpAddressId(); - if (ipId == null) { - throw new InvalidParameterValueException("Either networkId or zoneId or publicIpId has to be specified"); - } } - + Long zoneId = getZoneId(); + + if (zoneId == null) { + Long ipId = getSourceIpAddressId(); + if (ipId == null) { + throw new InvalidParameterValueException("Either networkId or zoneId or publicIpId has to be specified"); + } + } + if (zoneId != null) { - DataCenter zone = _configService.getZone(zoneId); - if (zone.getNetworkType() == NetworkType.Advanced) { + DataCenter zone = _configService.getZone(zoneId); + if (zone.getNetworkType() == NetworkType.Advanced) { List networks = _networkService.getIsolatedNetworksOwnedByAccountInZone(getZoneId(), _accountService.getAccount(getEntityOwnerId())); if (networks.size() == 0) { String domain = _domainService.getDomain(getDomainId()).getName(); throw new InvalidParameterValueException("Account name=" + getAccountName() + " domain=" + domain + " doesn't have virtual networks in zone=" + zone.getName()); } - + if (networks.size() < 1) { - throw new InvalidParameterValueException("Account doesn't have any Isolated networks in the zone"); + throw new InvalidParameterValueException("Account doesn't have any Isolated networks in the zone"); } else if (networks.size() > 1) { - throw new InvalidParameterValueException("Account has more than one Isolated network in the zone"); + throw new InvalidParameterValueException("Account has more than one Isolated network in the zone"); } - + return networks.get(0).getId(); } else { Network defaultGuestNetwork = _networkService.getExclusiveGuestNetwork(zoneId); @@ -186,23 +186,23 @@ public class CreateLoadBalancerRuleCmd extends BaseAsyncCreateCmd /*implements } } } else { - IpAddress ipAddr = _networkService.getIp(publicIpId); - if (ipAddr.getAssociatedWithNetworkId() != null) { + IpAddress ipAddr = _networkService.getIp(publicIpId); + if (ipAddr.getAssociatedWithNetworkId() != null) { return ipAddr.getAssociatedWithNetworkId(); - } else { - throw new InvalidParameterValueException("Ip address id=" + publicIpId + " is not associated with any network"); - } + } else { + throw new InvalidParameterValueException("Ip address id=" + publicIpId + " is not associated with any network"); + } } } public Integer getPublicPort() { return publicPort; } - + public String getName() { return loadBalancerRuleName; } - + public Boolean getOpenFirewall() { boolean isVpc = getVpcId() == null ? false : true; if (openFirewall != null) { @@ -217,7 +217,7 @@ public class CreateLoadBalancerRuleCmd extends BaseAsyncCreateCmd /*implements return true; } } - + public List getSourceCidrList() { if (cidrlist != null) { throw new InvalidParameterValueException("Parameter cidrList is deprecated; if you need to open firewall rule for the specific cidr, please refer to createFirewallRule command"); @@ -233,33 +233,33 @@ public class CreateLoadBalancerRuleCmd extends BaseAsyncCreateCmd /*implements public String getCommandName() { return s_name; } - + @Override - public void execute() throws ResourceAllocationException, ResourceUnavailableException { - + public void execute() throws ResourceAllocationException, ResourceUnavailableException { + UserContext callerContext = UserContext.current(); boolean success = true; LoadBalancer rule = null; try { UserContext.current().setEventDetails("Rule Id: " + getEntityId()); - + if (getOpenFirewall()) { success = success && _firewallService.applyFirewallRules(getSourceIpAddressId(), callerContext.getCaller()); } // State might be different after the rule is applied, so get new object here rule = _entityMgr.findById(LoadBalancer.class, getEntityId()); - LoadBalancerResponse lbResponse = new LoadBalancerResponse(); + LoadBalancerResponse lbResponse = new LoadBalancerResponse(); if (rule != null) { lbResponse = _responseGenerator.createLoadBalancerResponse(rule); setResponseObject(lbResponse); } lbResponse.setResponseName(getCommandName()); } catch (Exception ex) { - s_logger.warn("Failed to create LB rule due to exception ", ex); + s_logger.warn("Failed to create LB rule due to exception ", ex); }finally { if (!success || rule == null) { - + if (getOpenFirewall()) { _firewallService.revokeRelatedFirewallRule(getEntityId(), true); } @@ -270,7 +270,7 @@ public class CreateLoadBalancerRuleCmd extends BaseAsyncCreateCmd /*implements } } } - + @Override public void create() { //cidr list parameter is deprecated @@ -300,11 +300,11 @@ public class CreateLoadBalancerRuleCmd extends BaseAsyncCreateCmd /*implements public String getProtocol() { return NetUtils.TCP_PROTO; } - - public long getAccountId() { + + public long getAccountId() { if (publicIpId != null) return _networkService.getIp(getSourceIpAddressId()).getAccountId(); - + Account account = null; if ((domainId != null) && (accountName != null)) { account = _responseGenerator.findAccountByNameDomain(accountName, domainId); @@ -334,16 +334,16 @@ public class CreateLoadBalancerRuleCmd extends BaseAsyncCreateCmd /*implements public int getDefaultPortEnd() { return privatePort.intValue(); } - + @Override public long getEntityOwnerId() { return getAccountId(); } - + public String getAccountName() { return accountName; } - + public Long getZoneId() { return zoneId; } @@ -371,7 +371,7 @@ public class CreateLoadBalancerRuleCmd extends BaseAsyncCreateCmd /*implements public void setSourceIpAddressId(Long ipId) { this.publicIpId = ipId; } - + @Override public AsyncJob.Type getInstanceType() { return AsyncJob.Type.FirewallRule; diff --git a/api/src/com/cloud/api/commands/CreateNetworkACLCmd.java b/api/src/com/cloud/api/commands/CreateNetworkACLCmd.java index da1229c193f..09e29224413 100644 --- a/api/src/com/cloud/api/commands/CreateNetworkACLCmd.java +++ b/api/src/com/cloud/api/commands/CreateNetworkACLCmd.java @@ -42,7 +42,7 @@ import com.cloud.user.Account; import com.cloud.user.UserContext; import com.cloud.utils.net.NetUtils; -@Implementation(description = "Creates a ACL rule the given network (the network has to belong to VPC)", +@Implementation(description = "Creates a ACL rule the given network (the network has to belong to VPC)", responseObject = NetworkACLResponse.class) public class CreateNetworkACLCmd extends BaseAsyncCreateCmd implements FirewallRule { public static final Logger s_logger = Logger.getLogger(CreateNetworkACLCmd.class.getName()); @@ -53,7 +53,7 @@ public class CreateNetworkACLCmd extends BaseAsyncCreateCmd implements FirewallR // ////////////// API parameters ///////////////////// // /////////////////////////////////////////////////// - @Parameter(name = ApiConstants.PROTOCOL, type = CommandType.STRING, required = true, description = + @Parameter(name = ApiConstants.PROTOCOL, type = CommandType.STRING, required = true, description = "the protocol for the ACL rule. Valid values are TCP/UDP/ICMP.") private String protocol; @@ -62,30 +62,30 @@ public class CreateNetworkACLCmd extends BaseAsyncCreateCmd implements FirewallR @Parameter(name = ApiConstants.END_PORT, type = CommandType.INTEGER, description = "the ending port of ACL") private Integer publicEndPort; - - @Parameter(name = ApiConstants.CIDR_LIST, type = CommandType.LIST, collectionType = CommandType.STRING, + + @Parameter(name = ApiConstants.CIDR_LIST, type = CommandType.LIST, collectionType = CommandType.STRING, description = "the cidr list to allow traffic from/to") private List cidrlist; - + @Parameter(name = ApiConstants.ICMP_TYPE, type = CommandType.INTEGER, description = "type of the icmp message being sent") private Integer icmpType; @Parameter(name = ApiConstants.ICMP_CODE, type = CommandType.INTEGER, description = "error code for this icmp message") private Integer icmpCode; - + @IdentityMapper(entityTableName="networks") @Parameter(name=ApiConstants.NETWORK_ID, type=CommandType.LONG, required=true, description="The network of the vm the ACL will be created for") private Long networkId; - + @Parameter(name=ApiConstants.TRAFFIC_TYPE, type=CommandType.STRING, description="the traffic type for the ACL," + - "can be Ingress or Egress, defaulted to Ingress if not specified") + "can be Ingress or Egress, defaulted to Ingress if not specified") private String trafficType; - + // /////////////////////////////////////////////////// // ///////////////// Accessors /////////////////////// // /////////////////////////////////////////////////// - + public String getEntityTable() { return "firewall_rules"; } @@ -108,21 +108,21 @@ public class CreateNetworkACLCmd extends BaseAsyncCreateCmd implements FirewallR return oneCidrList; } } - + public long getVpcId() { Network network = _networkService.getNetwork(getNetworkId()); if (network == null) { throw new InvalidParameterValueException("Invalid networkId is given"); } - + Long vpcId = network.getVpcId(); if (vpcId == null) { throw new InvalidParameterValueException("Can create network ACL only for the network belonging to the VPC"); } - + return vpcId; } - + @Override public FirewallRule.TrafficType getTrafficType() { if (trafficType == null) { @@ -144,7 +144,7 @@ public class CreateNetworkACLCmd extends BaseAsyncCreateCmd implements FirewallR public String getCommandName() { return s_name; } - + public void setSourceCidrList(List cidrs){ cidrlist = cidrs; } @@ -159,7 +159,7 @@ public class CreateNetworkACLCmd extends BaseAsyncCreateCmd implements FirewallR success = _networkACLService.applyNetworkACLs(rule.getNetworkId(), callerContext.getCaller()); // State is different after the rule is applied, so get new object here - NetworkACLResponse aclResponse = new NetworkACLResponse(); + NetworkACLResponse aclResponse = new NetworkACLResponse(); if (rule != null) { aclResponse = _responseGenerator.createNetworkACLResponse(rule); setResponseObject(aclResponse); @@ -206,7 +206,7 @@ public class CreateNetworkACLCmd extends BaseAsyncCreateCmd implements FirewallR } else { return publicEndPort.intValue(); } - + return null; } @@ -247,7 +247,7 @@ public class CreateNetworkACLCmd extends BaseAsyncCreateCmd implements FirewallR if (getSourceCidrList() != null) { for (String cidr: getSourceCidrList()){ if (!NetUtils.isValidCIDR(cidr)){ - throw new ServerApiException(BaseCmd.PARAM_ERROR, "Source cidrs formatting error " + cidr); + throw new ServerApiException(BaseCmd.PARAM_ERROR, "Source cidrs formatting error " + cidr); } } } @@ -288,7 +288,7 @@ public class CreateNetworkACLCmd extends BaseAsyncCreateCmd implements FirewallR public Long getSyncObjId() { return getNetworkId(); } - + @Override public Integer getIcmpCode() { if (icmpCode != null) { @@ -298,14 +298,14 @@ public class CreateNetworkACLCmd extends BaseAsyncCreateCmd implements FirewallR } return null; } - + @Override public Integer getIcmpType() { if (icmpType != null) { return icmpType; } else if (protocol.equalsIgnoreCase(NetUtils.ICMP_PROTO)) { return -1; - + } return null; } @@ -319,7 +319,7 @@ public class CreateNetworkACLCmd extends BaseAsyncCreateCmd implements FirewallR public FirewallRuleType getType() { return FirewallRuleType.User; } - + @Override public AsyncJob.Type getInstanceType() { return AsyncJob.Type.FirewallRule; diff --git a/api/src/com/cloud/api/commands/CreateNetworkCmd.java b/api/src/com/cloud/api/commands/CreateNetworkCmd.java index 3a3c02958ef..53b19bb1de9 100644 --- a/api/src/com/cloud/api/commands/CreateNetworkCmd.java +++ b/api/src/com/cloud/api/commands/CreateNetworkCmd.java @@ -43,54 +43,54 @@ public class CreateNetworkCmd extends BaseCmd { ///////////////////////////////////////////////////// //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - + @Parameter(name=ApiConstants.NAME, type=CommandType.STRING, required=true, description="the name of the network") private String name; - + @Parameter(name=ApiConstants.DISPLAY_TEXT, type=CommandType.STRING, required=true, description="the display text of the network") private String displayText; - + @IdentityMapper(entityTableName="network_offerings") @Parameter(name=ApiConstants.NETWORK_OFFERING_ID, type=CommandType.LONG, required=true, description="the network offering id") private Long networkOfferingId; - + @IdentityMapper(entityTableName="data_center") @Parameter(name=ApiConstants.ZONE_ID, type=CommandType.LONG, required=true, description="the Zone ID for the network") private Long zoneId; - + @IdentityMapper(entityTableName="physical_network") @Parameter(name=ApiConstants.PHYSICAL_NETWORK_ID, type=CommandType.LONG, description="the Physical Network ID the network belongs to") private Long physicalNetworkId; @Parameter(name=ApiConstants.GATEWAY, type=CommandType.STRING, description="the gateway of the network. Required " + - "for Shared networks and Isolated networks when it belongs to VPC") + "for Shared networks and Isolated networks when it belongs to VPC") private String gateway; - + @Parameter(name=ApiConstants.NETMASK, type=CommandType.STRING, description="the netmask of the network. Required " + "for Shared networks and Isolated networks when it belongs to VPC") private String netmask; - + @Parameter(name=ApiConstants.START_IP, type=CommandType.STRING, description="the beginning IP address in the network IP range") private String startIp; - + @Parameter(name=ApiConstants.END_IP, type=CommandType.STRING, description="the ending IP address in the network IP" + - " range. If not specified, will be defaulted to startIP") + " range. If not specified, will be defaulted to startIP") private String endIp; @Parameter(name=ApiConstants.VLAN, type=CommandType.STRING, description="the ID or VID of the network") private String vlan; - + @Parameter(name=ApiConstants.NETWORK_DOMAIN, type=CommandType.STRING, description="network domain") private String networkDomain; - + @Parameter(name=ApiConstants.ACL_TYPE, type=CommandType.STRING, description="Access control type; supported values" + - " are account and domain. In 3.0 all shared networks should have aclType=Domain, and all Isolated networks" + - " - Account. Account means that only the account owner can use the network, domain - all accouns in the domain can use the network") + " are account and domain. In 3.0 all shared networks should have aclType=Domain, and all Isolated networks" + + " - Account. Account means that only the account owner can use the network, domain - all accouns in the domain can use the network") private String aclType; @Parameter(name=ApiConstants.ACCOUNT, type=CommandType.STRING, description="account who will own the network") private String accountName; - + @IdentityMapper(entityTableName="projects") @Parameter(name=ApiConstants.PROJECT_ID, type=CommandType.LONG, description="an optional project for the ssh key") private Long projectId; @@ -98,11 +98,11 @@ public class CreateNetworkCmd extends BaseCmd { @IdentityMapper(entityTableName="domain") @Parameter(name=ApiConstants.DOMAIN_ID, type=CommandType.LONG, description="domain ID of the account owning a network") private Long domainId; - + @Parameter(name=ApiConstants.SUBDOMAIN_ACCESS, type=CommandType.BOOLEAN, description="Defines whether to allow" + - " subdomains to use networks dedicated to their parent domain(s). Should be used with aclType=Domain, defaulted to allow.subdomain.network.access global config if not specified") + " subdomains to use networks dedicated to their parent domain(s). Should be used with aclType=Domain, defaulted to allow.subdomain.network.access global config if not specified") private Boolean subdomainAccess; - + @IdentityMapper(entityTableName="vpc") @Parameter(name=ApiConstants.VPC_ID, type=CommandType.LONG, description="the VPC network belongs to") private Long vpcId; @@ -130,7 +130,7 @@ public class CreateNetworkCmd extends BaseCmd { public Long getDomainId() { return domainId; } - + public String getNetmask() { return netmask; } @@ -142,11 +142,11 @@ public class CreateNetworkCmd extends BaseCmd { public String getEndIp() { return endIp; } - + public String getNetworkName() { return name; } - + public String getDisplayText() { return displayText; } @@ -154,39 +154,39 @@ public class CreateNetworkCmd extends BaseCmd { public String getNetworkDomain() { return networkDomain; } - + public Long getProjectId() { return projectId; } public String getAclType() { - return aclType; - } + return aclType; + } - public Boolean getSubdomainAccess() { - return subdomainAccess; - } + public Boolean getSubdomainAccess() { + return subdomainAccess; + } - public Long getVpcId() { + public Long getVpcId() { return vpcId; } public Long getZoneId() { Long physicalNetworkId = getPhysicalNetworkId(); - + if (physicalNetworkId == null && zoneId == null) { throw new InvalidParameterValueException("Zone id is required"); } - + return zoneId; } - + public Long getPhysicalNetworkId() { NetworkOffering offering = _configService.getNetworkOffering(networkOfferingId); if (offering == null) { throw new InvalidParameterValueException("Unable to find network offering by id " + networkOfferingId); } - + if (physicalNetworkId != null) { if (offering.getGuestType() == GuestType.Shared) { return physicalNetworkId; @@ -208,19 +208,19 @@ public class CreateNetworkCmd extends BaseCmd { public String getCommandName() { return s_name; } - + @Override public long getEntityOwnerId() { Long accountId = finalyzeAccountId(accountName, domainId, projectId, true); if (accountId == null) { return UserContext.current().getCaller().getId(); } - + return accountId; } - + @Override - // an exception thrown by createNetwork() will be caught by the dispatcher. + // an exception thrown by createNetwork() will be caught by the dispatcher. public void execute() throws InsufficientCapacityException, ConcurrentOperationException, ResourceAllocationException{ Network result = _networkService.createGuestNetwork(this); if (result != null) { diff --git a/api/src/com/cloud/api/commands/CreateNetworkOfferingCmd.java b/api/src/com/cloud/api/commands/CreateNetworkOfferingCmd.java index f62cf8f21db..447a5fb6aca 100644 --- a/api/src/com/cloud/api/commands/CreateNetworkOfferingCmd.java +++ b/api/src/com/cloud/api/commands/CreateNetworkOfferingCmd.java @@ -50,55 +50,55 @@ public class CreateNetworkOfferingCmd extends BaseCmd { @Parameter(name=ApiConstants.NAME, type=CommandType.STRING, required=true, description="the name of the network offering") private String networkOfferingName; - + @Parameter(name=ApiConstants.DISPLAY_TEXT, type=CommandType.STRING, required=true, description="the display text of the network offering") private String displayText; - + @Parameter(name=ApiConstants.TRAFFIC_TYPE, type=CommandType.STRING, required=true, description="the traffic type for the network offering. Supported type in current release is GUEST only") private String traffictype; - + @Parameter(name=ApiConstants.TAGS, type=CommandType.STRING, description="the tags for the network offering.", length=4096) - private String tags; - + private String tags; + @Parameter(name=ApiConstants.SPECIFY_VLAN, type=CommandType.BOOLEAN, description="true if network offering supports vlans") - private Boolean specifyVlan; - + private Boolean specifyVlan; + @Parameter(name=ApiConstants.AVAILABILITY, type=CommandType.STRING, description="the availability of network offering. Default value is Optional") - private String availability; - + private String availability; + @Parameter(name=ApiConstants.NETWORKRATE, type=CommandType.INTEGER, description="data transfer rate in megabits per second allowed") private Integer networkRate; - + @Parameter(name=ApiConstants.CONSERVE_MODE, type=CommandType.BOOLEAN, description="true if the network offering is IP conserve mode enabled") private Boolean conserveMode; - + @IdentityMapper(entityTableName="disk_offering") @Parameter(name=ApiConstants.SERVICE_OFFERING_ID, type=CommandType.LONG, description="the service offering ID used by virtual router provider") private Long serviceOfferingId; - + @Parameter(name=ApiConstants.GUEST_IP_TYPE, type=CommandType.STRING, required=true, description="guest type of the network offering: Shared or Isolated") private String guestIptype; - + @Parameter(name=ApiConstants.SUPPORTED_SERVICES, type=CommandType.LIST, required=true, collectionType=CommandType.STRING, description="services supported by the network offering") private List supportedServices; - + @Parameter(name = ApiConstants.SERVICE_PROVIDER_LIST, type = CommandType.MAP, description = "provider to service mapping. If not specified, the provider for the service will be mapped to the default provider on the physical network") private Map serviceProviderList; @Parameter(name = ApiConstants.SERVICE_CAPABILITY_LIST, type = CommandType.MAP, description = "desired service capabilities as part of network offering") private Map serviceCapabilitystList; - + @Parameter(name=ApiConstants.SPECIFY_IP_RANGES, type=CommandType.BOOLEAN, description="true if network offering supports specifying ip ranges; defaulted to false if not specified") private Boolean specifyIpRanges; ///////////////////////////////////////////////////// /////////////////// Accessors /////////////////////// ///////////////////////////////////////////////////// - + public String getNetworkOfferingName() { return networkOfferingName; } - + public String getDisplayText() { return displayText; } @@ -110,7 +110,7 @@ public class CreateNetworkOfferingCmd extends BaseCmd { public String getTraffictype() { return traffictype; } - + public Boolean getSpecifyVlan() { return specifyVlan == null ? false : specifyVlan; } @@ -118,7 +118,7 @@ public class CreateNetworkOfferingCmd extends BaseCmd { public String getAvailability() { return availability == null ? Availability.Optional.toString() : availability; } - + public Integer getNetworkRate() { return networkRate; } @@ -130,18 +130,18 @@ public class CreateNetworkOfferingCmd extends BaseCmd { public Long getServiceOfferingId() { return serviceOfferingId; } - - public List getSupportedServices() { - return supportedServices; - } - public String getGuestIpType() { + public List getSupportedServices() { + return supportedServices; + } + + public String getGuestIpType() { return guestIptype; } - - public Boolean getSpecifyIpRanges() { - return specifyIpRanges == null ? false : specifyIpRanges; - } + + public Boolean getSpecifyIpRanges() { + return specifyIpRanges == null ? false : specifyIpRanges; + } public Boolean getConserveMode() { if (conserveMode == null) { @@ -170,7 +170,7 @@ public class CreateNetworkOfferingCmd extends BaseCmd { serviceProviderMap.put(service, providerList); } } - + return serviceProviderMap; } @@ -199,7 +199,7 @@ public class CreateNetworkOfferingCmd extends BaseCmd { if (svc.equalsIgnoreCase(service.getName())) { capabilityMap.put(capability, capabilityValue); } else { - //throw new InvalidParameterValueException("Service is not equal ") + //throw new InvalidParameterValueException("Service is not equal ") } } } @@ -214,7 +214,7 @@ public class CreateNetworkOfferingCmd extends BaseCmd { public String getCommandName() { return _name; } - + @Override public long getEntityOwnerId() { return Account.ACCOUNT_ID_SYSTEM; diff --git a/api/src/com/cloud/api/commands/CreatePhysicalNetworkCmd.java b/api/src/com/cloud/api/commands/CreatePhysicalNetworkCmd.java index bf6f7385105..39829b2e883 100644 --- a/api/src/com/cloud/api/commands/CreatePhysicalNetworkCmd.java +++ b/api/src/com/cloud/api/commands/CreatePhysicalNetworkCmd.java @@ -44,7 +44,7 @@ public class CreatePhysicalNetworkCmd extends BaseAsyncCreateCmd { ///////////////////////////////////////////////////// //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - + @IdentityMapper(entityTableName="data_center") @Parameter(name=ApiConstants.ZONE_ID, type=CommandType.LONG, required=true, description="the Zone ID for the physical network") private Long zoneId; @@ -58,22 +58,22 @@ public class CreatePhysicalNetworkCmd extends BaseAsyncCreateCmd { @IdentityMapper(entityTableName="domain") @Parameter(name=ApiConstants.DOMAIN_ID, type=CommandType.LONG, description="domain ID of the account owning a physical network") private Long domainId; - + @Parameter(name=ApiConstants.BROADCAST_DOMAIN_RANGE, type=CommandType.STRING, description="the broadcast domain range for the physical network[Pod or Zone]. In Acton release it can be Zone only in Advance zone, and Pod in Basic") private String broadcastDomainRange; - + @Parameter(name=ApiConstants.TAGS, type=CommandType.LIST, collectionType=CommandType.STRING, description="Tag the physical network") private List tags; - + @Parameter(name=ApiConstants.ISOLATION_METHODS, type=CommandType.LIST, collectionType=CommandType.STRING, description="the isolation method for the physical network[VLAN/L3/GRE]") private List isolationMethods; - + @Parameter(name=ApiConstants.NAME, type=CommandType.STRING, required=true, description="the name of the physical network") private String networkName; ///////////////////////////////////////////////////// /////////////////// Accessors /////////////////////// ///////////////////////////////////////////////////// - + public List getTags() { return tags; } @@ -102,25 +102,25 @@ public class CreatePhysicalNetworkCmd extends BaseAsyncCreateCmd { public List getIsolationMethods() { return isolationMethods; } - + public String getNetworkSpeed() { return speed; } - + public String getNetworkName() { - return networkName; - } - - @Override + return networkName; + } + + @Override public String getCommandName() { return s_name; } - + @Override public long getEntityOwnerId() { return Account.ACCOUNT_ID_SYSTEM; } - + @Override public String getEventType() { return EventTypes.EVENT_PHYSICAL_NETWORK_CREATE; @@ -140,7 +140,7 @@ public class CreatePhysicalNetworkCmd extends BaseAsyncCreateCmd { public String getEventDescription() { return "creating Physical Network. Id: "+getEntityId(); } - + ///////////////////////////////////////////////////// /////////////// API Implementation/////////////////// ///////////////////////////////////////////////////// @@ -167,7 +167,7 @@ public class CreatePhysicalNetworkCmd extends BaseAsyncCreateCmd { throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to create physical network entity"); } } - + @Override public AsyncJob.Type getInstanceType() { return AsyncJob.Type.PhysicalNetwork; diff --git a/api/src/com/cloud/api/commands/CreatePodCmd.java b/api/src/com/cloud/api/commands/CreatePodCmd.java index 55dcfae0b04..5c36b9f015d 100755 --- a/api/src/com/cloud/api/commands/CreatePodCmd.java +++ b/api/src/com/cloud/api/commands/CreatePodCmd.java @@ -39,23 +39,23 @@ public class CreatePodCmd extends BaseCmd { ///////////////////////////////////////////////////// @Parameter(name=ApiConstants.NAME, type=CommandType.STRING, required=true, description="the name of the Pod") private String podName; - + @IdentityMapper(entityTableName="data_center") - @Parameter(name=ApiConstants.ZONE_ID, type=CommandType.LONG, required=true, description="the Zone ID in which the Pod will be created ") + @Parameter(name=ApiConstants.ZONE_ID, type=CommandType.LONG, required=true, description="the Zone ID in which the Pod will be created ") private Long zoneId; @Parameter(name=ApiConstants.START_IP, type=CommandType.STRING, required=true, description="the starting IP address for the Pod") private String startIp; - + @Parameter(name=ApiConstants.END_IP, type=CommandType.STRING, description="the ending IP address for the Pod") private String endIp; - + @Parameter(name=ApiConstants.NETMASK, type=CommandType.STRING, required=true, description="the netmask for the Pod") private String netmask; @Parameter(name=ApiConstants.GATEWAY, type=CommandType.STRING, required=true, description="the gateway for the Pod") private String gateway; - + @Parameter(name=ApiConstants.ALLOCATION_STATE, type=CommandType.STRING, description="Allocation state of this Pod for allocation of new resources") private String allocationState; @@ -88,9 +88,9 @@ public class CreatePodCmd extends BaseCmd { } public String getAllocationState() { - return allocationState; + return allocationState; } - + ///////////////////////////////////////////////////// /////////////// API Implementation/////////////////// ///////////////////////////////////////////////////// @@ -99,7 +99,7 @@ public class CreatePodCmd extends BaseCmd { public String getCommandName() { return s_name; } - + @Override public long getEntityOwnerId() { return Account.ACCOUNT_ID_SYSTEM; diff --git a/api/src/com/cloud/api/commands/CreatePortForwardingRuleCmd.java b/api/src/com/cloud/api/commands/CreatePortForwardingRuleCmd.java index 472ccfe4936..3579da201ae 100644 --- a/api/src/com/cloud/api/commands/CreatePortForwardingRuleCmd.java +++ b/api/src/com/cloud/api/commands/CreatePortForwardingRuleCmd.java @@ -51,30 +51,30 @@ public class CreatePortForwardingRuleCmd extends BaseAsyncCreateCmd implements P // /////////////////////////////////////////////////// @IdentityMapper(entityTableName = "user_ip_address") - @Parameter(name = ApiConstants.IP_ADDRESS_ID, type = CommandType.LONG, required = true, + @Parameter(name = ApiConstants.IP_ADDRESS_ID, type = CommandType.LONG, required = true, description = "the IP address id of the port forwarding rule") private Long ipAddressId; - @Parameter(name = ApiConstants.PRIVATE_START_PORT, type = CommandType.INTEGER, required = true, + @Parameter(name = ApiConstants.PRIVATE_START_PORT, type = CommandType.INTEGER, required = true, description = "the starting port of port forwarding rule's private port range") private Integer privateStartPort; - @Parameter(name = ApiConstants.PROTOCOL, type = CommandType.STRING, required = true, + @Parameter(name = ApiConstants.PROTOCOL, type = CommandType.STRING, required = true, description = "the protocol for the port fowarding rule. Valid values are TCP or UDP.") private String protocol; @Parameter(name = ApiConstants.PRIVATE_END_PORT, type = CommandType.INTEGER, required = false, description = "the ending port of port forwarding rule's private port range") private Integer privateEndPort; - @Parameter(name = ApiConstants.PUBLIC_START_PORT, type = CommandType.INTEGER, required = true, + @Parameter(name = ApiConstants.PUBLIC_START_PORT, type = CommandType.INTEGER, required = true, description = "the starting port of port forwarding rule's public port range") private Integer publicStartPort; - + @Parameter(name = ApiConstants.PUBLIC_END_PORT, type = CommandType.INTEGER, required = false, description = "the ending port of port forwarding rule's private port range") private Integer publicEndPort; @IdentityMapper(entityTableName = "vm_instance") - @Parameter(name = ApiConstants.VIRTUAL_MACHINE_ID, type = CommandType.LONG, required = true, + @Parameter(name = ApiConstants.VIRTUAL_MACHINE_ID, type = CommandType.LONG, required = true, description = "the ID of the virtual machine for the port forwarding rule") private Long virtualMachineId; @@ -82,16 +82,16 @@ public class CreatePortForwardingRuleCmd extends BaseAsyncCreateCmd implements P description = "the cidr list to forward traffic from") private List cidrlist; - @Parameter(name = ApiConstants.OPEN_FIREWALL, type = CommandType.BOOLEAN, + @Parameter(name = ApiConstants.OPEN_FIREWALL, type = CommandType.BOOLEAN, description = "if true, firewall rule for source/end pubic port is automatically created; " + - "if false - firewall rule has to be created explicitely. If not specified 1) defaulted to false when PF" + - " rule is being created for VPC guest network 2) in all other cases defaulted to true") + "if false - firewall rule has to be created explicitely. If not specified 1) defaulted to false when PF" + + " rule is being created for VPC guest network 2) in all other cases defaulted to true") private Boolean openFirewall; - + @IdentityMapper(entityTableName="networks") - @Parameter(name=ApiConstants.NETWORK_ID, type=CommandType.LONG, + @Parameter(name=ApiConstants.NETWORK_ID, type=CommandType.LONG, description="The network of the vm the Port Forwarding rule will be created for. " + - "Required when public Ip address is not associated with any Guest network yet (VPC case)") + "Required when public Ip address is not associated with any Guest network yet (VPC case)") private Long networkId; // /////////////////////////////////////////////////// @@ -99,7 +99,7 @@ public class CreatePortForwardingRuleCmd extends BaseAsyncCreateCmd implements P // /////////////////////////////////////////////////// public String getEntityTable() { - return "firewall_rules"; + return "firewall_rules"; } public Long getIpAddressId() { @@ -119,11 +119,11 @@ public class CreatePortForwardingRuleCmd extends BaseAsyncCreateCmd implements P public List getSourceCidrList() { if (cidrlist != null) { throw new InvalidParameterValueException("Parameter cidrList is deprecated; if you need to open firewall " + - "rule for the specific cidr, please refer to createFirewallRule command"); + "rule for the specific cidr, please refer to createFirewallRule command"); } return null; } - + public Boolean getOpenFirewall() { boolean isVpc = getVpcId() == null ? false : true; if (openFirewall != null) { @@ -138,7 +138,7 @@ public class CreatePortForwardingRuleCmd extends BaseAsyncCreateCmd implements P return true; } } - + private Long getVpcId() { if (ipAddressId != null) { IpAddress ipAddr = _networkService.getIp(ipAddressId); @@ -168,16 +168,16 @@ public class CreatePortForwardingRuleCmd extends BaseAsyncCreateCmd implements P PortForwardingRule rule = null; try { UserContext.current().setEventDetails("Rule Id: " + getEntityId()); - + if (getOpenFirewall()) { success = success && _firewallService.applyFirewallRules(ipAddressId, callerContext.getCaller()); } - + success = success && _rulesService.applyPortForwardingRules(ipAddressId, callerContext.getCaller()); // State is different after the rule is applied, so get new object here rule = _entityMgr.findById(PortForwardingRule.class, getEntityId()); - FirewallRuleResponse fwResponse = new FirewallRuleResponse(); + FirewallRuleResponse fwResponse = new FirewallRuleResponse(); if (rule != null) { fwResponse = _responseGenerator.createPortForwardingRuleResponse(rule); setResponseObject(fwResponse); @@ -185,13 +185,13 @@ public class CreatePortForwardingRuleCmd extends BaseAsyncCreateCmd implements P fwResponse.setResponseName(getCommandName()); } finally { if (!success || rule == null) { - + if (getOpenFirewall()) { _firewallService.revokeRelatedFirewallRule(getEntityId(), true); } - + _rulesService.revokePortForwardingRule(getEntityId(), true); - + throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to apply port forwarding rule"); } } @@ -220,7 +220,7 @@ public class CreatePortForwardingRuleCmd extends BaseAsyncCreateCmd implements P @Override public Integer getSourcePortEnd() { - return (publicEndPort == null)? publicStartPort.intValue() : publicEndPort.intValue(); + return (publicEndPort == null)? publicStartPort.intValue() : publicEndPort.intValue(); } @Override @@ -237,14 +237,14 @@ public class CreatePortForwardingRuleCmd extends BaseAsyncCreateCmd implements P public long getNetworkId() { IpAddress ip = _entityMgr.findById(IpAddress.class, getIpAddressId()); Long ntwkId = null; - + if (ip.getAssociatedWithNetworkId() != null) { ntwkId = ip.getAssociatedWithNetworkId(); } else { ntwkId = networkId; } if (ntwkId == null) { - throw new InvalidParameterValueException("Unable to create port forwarding rule for the ipAddress id=" + ipAddressId + + throw new InvalidParameterValueException("Unable to create port forwarding rule for the ipAddress id=" + ipAddressId + " as ip is not associated with any network and no networkId is passed in"); } return ntwkId; @@ -272,10 +272,10 @@ public class CreatePortForwardingRuleCmd extends BaseAsyncCreateCmd implements P public Ip getDestinationIpAddress() { return null; } - + @Override public void setDestinationIpAddress(Ip destinationIpAddress) { - return; + return; } @Override @@ -294,7 +294,7 @@ public class CreatePortForwardingRuleCmd extends BaseAsyncCreateCmd implements P if (cidrlist != null) { throw new InvalidParameterValueException("Parameter cidrList is deprecated; if you need to open firewall rule for the specific cidr, please refer to createFirewallRule command"); } - + try { PortForwardingRule result = _rulesService.createPortForwardingRule(this, virtualMachineId, getOpenFirewall()); setEntityId(result.getId()); @@ -339,26 +339,26 @@ public class CreatePortForwardingRuleCmd extends BaseAsyncCreateCmd implements P } return ip; } - + @Override public Integer getIcmpCode() { return null; } - + @Override public Integer getIcmpType() { return null; } - + @Override public Long getRelated() { return null; } - @Override - public FirewallRuleType getType() { - return FirewallRuleType.User; - } + @Override + public FirewallRuleType getType() { + return FirewallRuleType.User; + } @Override public AsyncJob.Type getInstanceType() { diff --git a/api/src/com/cloud/api/commands/CreatePrivateGatewayCmd.java b/api/src/com/cloud/api/commands/CreatePrivateGatewayCmd.java index 79c2c5fbd0e..191354f3241 100644 --- a/api/src/com/cloud/api/commands/CreatePrivateGatewayCmd.java +++ b/api/src/com/cloud/api/commands/CreatePrivateGatewayCmd.java @@ -47,27 +47,27 @@ public class CreatePrivateGatewayCmd extends BaseAsyncCreateCmd { ///////////////////////////////////////////////////// //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - + @IdentityMapper(entityTableName="physical_network") @Parameter(name=ApiConstants.PHYSICAL_NETWORK_ID, type=CommandType.LONG, description="the Physical Network ID the network belongs to") private Long physicalNetworkId; @Parameter(name=ApiConstants.GATEWAY, type=CommandType.STRING, required=true, description="the gateway of the Private gateway") private String gateway; - + @Parameter(name=ApiConstants.NETMASK, type=CommandType.STRING, required=true, description="the netmask of the Private gateway") private String netmask; - + @Parameter(name=ApiConstants.IP_ADDRESS, type=CommandType.STRING, required=true, description="the IP address of the Private gateaway") private String ipAddress; - + @Parameter(name=ApiConstants.VLAN, type=CommandType.STRING, required=true, description="the Vlan for the private gateway") private String vlan; - + @IdentityMapper(entityTableName="vpc") @Parameter(name=ApiConstants.VPC_ID, type=CommandType.LONG, required=true, description="the VPC network belongs to") private Long vpcId; - + ///////////////////////////////////////////////////// /////////////////// Accessors /////////////////////// ///////////////////////////////////////////////////// @@ -79,7 +79,7 @@ public class CreatePrivateGatewayCmd extends BaseAsyncCreateCmd { public String getVlan() { return vlan; } - + public String getNetmask() { return netmask; } @@ -87,11 +87,11 @@ public class CreatePrivateGatewayCmd extends BaseAsyncCreateCmd { public String getStartIp() { return ipAddress; } - + public Long getPhysicalNetworkId() { return physicalNetworkId; } - + public Long getVpcId() { return vpcId; } @@ -103,8 +103,8 @@ public class CreatePrivateGatewayCmd extends BaseAsyncCreateCmd { public String getCommandName() { return s_name; } - - + + @Override public void create() throws ResourceAllocationException { PrivateGateway result = null; @@ -119,16 +119,16 @@ public class CreatePrivateGatewayCmd extends BaseAsyncCreateCmd { s_logger.warn("Exception: ", ex); throw new ServerApiException(BaseCmd.INTERNAL_ERROR, ex.getMessage()); } - + if (result != null) { this.setEntityId(result.getId()); } else { throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to create private gateway"); } } - + @Override - public void execute() throws InsufficientCapacityException, ConcurrentOperationException, + public void execute() throws InsufficientCapacityException, ConcurrentOperationException, ResourceAllocationException, ResourceUnavailableException { PrivateGateway result = _vpcService.applyVpcPrivateGateway(getEntityId(), true); if (result != null) { @@ -139,7 +139,7 @@ public class CreatePrivateGatewayCmd extends BaseAsyncCreateCmd { throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to create private gateway"); } } - + @Override public long getEntityOwnerId() { return Account.ACCOUNT_ID_SYSTEM; @@ -154,13 +154,13 @@ public class CreatePrivateGatewayCmd extends BaseAsyncCreateCmd { public String getEventDescription() { return "creating private gateway"; } - + @Override public String getEntityTable() { return "vpc_gateways"; } - - + + @Override public String getSyncObjType() { return BaseAsyncCmd.vpcSyncObject; @@ -174,7 +174,7 @@ public class CreatePrivateGatewayCmd extends BaseAsyncCreateCmd { } return vpc.getId(); } - + @Override public AsyncJob.Type getInstanceType() { return AsyncJob.Type.PrivateGateway; diff --git a/api/src/com/cloud/api/commands/CreatePrivateNetworkCmd.java b/api/src/com/cloud/api/commands/CreatePrivateNetworkCmd.java index 8b0aaae9ddc..46ab2d29189 100644 --- a/api/src/com/cloud/api/commands/CreatePrivateNetworkCmd.java +++ b/api/src/com/cloud/api/commands/CreatePrivateNetworkCmd.java @@ -42,36 +42,36 @@ public class CreatePrivateNetworkCmd extends BaseAsyncCreateCmd { ///////////////////////////////////////////////////// //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - + @Parameter(name=ApiConstants.NAME, type=CommandType.STRING, required=true, description="the name of the network") private String name; - + @Parameter(name=ApiConstants.DISPLAY_TEXT, type=CommandType.STRING, required=true, description="the display text of the network") private String displayText; - + @IdentityMapper(entityTableName="physical_network") @Parameter(name=ApiConstants.PHYSICAL_NETWORK_ID, type=CommandType.LONG, required=true, description="the Physical Network ID the network belongs to") private Long physicalNetworkId; @Parameter(name=ApiConstants.GATEWAY, type=CommandType.STRING, required=true, description="the gateway of the network") private String gateway; - + @Parameter(name=ApiConstants.NETMASK, type=CommandType.STRING, required=true, description="the netmask of the network") private String netmask; - + @Parameter(name=ApiConstants.START_IP, type=CommandType.STRING, required=true, description="the beginning IP address in the network IP range") private String startIp; - + @Parameter(name=ApiConstants.END_IP, type=CommandType.STRING, description="the ending IP address in the network IP" + " range. If not specified, will be defaulted to startIP") private String endIp; - + @Parameter(name=ApiConstants.VLAN, type=CommandType.STRING, required=true, description="the ID or VID of the network") private String vlan; @Parameter(name=ApiConstants.ACCOUNT, type=CommandType.STRING, description="account who will own the network") private String accountName; - + @IdentityMapper(entityTableName="projects") @Parameter(name=ApiConstants.PROJECT_ID, type=CommandType.LONG, description="an optional project for the ssh key") private Long projectId; @@ -100,7 +100,7 @@ public class CreatePrivateNetworkCmd extends BaseAsyncCreateCmd { public Long getDomainId() { return domainId; } - + public String getNetmask() { return netmask; } @@ -108,23 +108,23 @@ public class CreatePrivateNetworkCmd extends BaseAsyncCreateCmd { public String getStartIp() { return startIp; } - + public String getNetworkName() { return name; } - + public String getDisplayText() { return displayText; } - + public Long getProjectId() { return projectId; } - + public long getPhysicalNetworkId() { return physicalNetworkId; } - + public String getEndIp() { return endIp; } @@ -136,8 +136,8 @@ public class CreatePrivateNetworkCmd extends BaseAsyncCreateCmd { public String getCommandName() { return s_name; } - - + + @Override public void create() throws ResourceAllocationException { Network result = null; @@ -152,14 +152,14 @@ public class CreatePrivateNetworkCmd extends BaseAsyncCreateCmd { s_logger.warn("Exception: ", ex); throw new ServerApiException(BaseCmd.INTERNAL_ERROR, ex.getMessage()); } - + if (result != null) { this.setEntityId(result.getId()); } else { throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to create a Private network"); } } - + @Override public void execute() throws InsufficientCapacityException, ConcurrentOperationException, ResourceAllocationException{ Network result = _networkService.getNetwork(getEntityId()); @@ -171,7 +171,7 @@ public class CreatePrivateNetworkCmd extends BaseAsyncCreateCmd { throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to create private network"); } } - + @Override public long getEntityOwnerId() { Long accountId = finalyzeAccountId(accountName, domainId, projectId, true); @@ -191,7 +191,7 @@ public class CreatePrivateNetworkCmd extends BaseAsyncCreateCmd { return "creating private network"; } - + @Override public String getEntityTable() { return "networks"; diff --git a/api/src/com/cloud/api/commands/CreateSSHKeyPairCmd.java b/api/src/com/cloud/api/commands/CreateSSHKeyPairCmd.java index 6ba5db6f128..6d22ade7433 100644 --- a/api/src/com/cloud/api/commands/CreateSSHKeyPairCmd.java +++ b/api/src/com/cloud/api/commands/CreateSSHKeyPairCmd.java @@ -27,44 +27,44 @@ import com.cloud.api.response.SSHKeyPairResponse; import com.cloud.user.SSHKeyPair; import com.cloud.user.UserContext; -@Implementation(description="Create a new keypair and returns the private key", responseObject=SSHKeyPairResponse.class) +@Implementation(description="Create a new keypair and returns the private key", responseObject=SSHKeyPairResponse.class) public class CreateSSHKeyPairCmd extends BaseCmd { public static final Logger s_logger = Logger.getLogger(CreateSSHKeyPairCmd.class.getName()); private static final String s_name = "createsshkeypairresponse"; - - + + ///////////////////////////////////////////////////// //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - - @Parameter(name=ApiConstants.NAME, type=CommandType.STRING, required=true, description="Name of the keypair") - private String name; - + + @Parameter(name=ApiConstants.NAME, type=CommandType.STRING, required=true, description="Name of the keypair") + private String name; + //Owner information @Parameter(name=ApiConstants.ACCOUNT, type=CommandType.STRING, description="an optional account for the ssh key. Must be used with domainId.") private String accountName; - + @IdentityMapper(entityTableName="domain") @Parameter(name=ApiConstants.DOMAIN_ID, type=CommandType.LONG, description="an optional domainId for the ssh key. If the account parameter is used, domainId must also be used.") private Long domainId; - + @IdentityMapper(entityTableName="projects") @Parameter(name=ApiConstants.PROJECT_ID, type=CommandType.LONG, description="an optional project for the ssh key") private Long projectId; - - + + ///////////////////////////////////////////////////// /////////////////// Accessors /////////////////////// ///////////////////////////////////////////////////// - - public String getName() { - return name; - } - + + public String getName() { + return name; + } + public String getAccountName() { return accountName; } - + public Long getDomainId() { return domainId; } @@ -72,31 +72,31 @@ public class CreateSSHKeyPairCmd extends BaseCmd { public Long getProjectId() { return projectId; } - + ///////////////////////////////////////////////////// /////////////// API Implementation/////////////////// - ///////////////////////////////////////////////////// + ///////////////////////////////////////////////////// @Override public long getEntityOwnerId() { Long accountId = finalyzeAccountId(accountName, domainId, projectId, true); if (accountId == null) { return UserContext.current().getCaller().getId(); } - + return accountId; - } + } - @Override - public void execute() { - SSHKeyPair r = _mgr.createSSHKeyPair(this); - SSHKeyPairResponse response = new SSHKeyPairResponse(r.getName(), r.getFingerprint(), r.getPrivateKey()); - response.setResponseName(getCommandName()); - response.setObjectName("keypair"); - this.setResponseObject(response); - } + @Override + public void execute() { + SSHKeyPair r = _mgr.createSSHKeyPair(this); + SSHKeyPairResponse response = new SSHKeyPairResponse(r.getName(), r.getFingerprint(), r.getPrivateKey()); + response.setResponseName(getCommandName()); + response.setObjectName("keypair"); + this.setResponseObject(response); + } - @Override - public String getCommandName() { - return s_name; - } + @Override + public String getCommandName() { + return s_name; + } } diff --git a/api/src/com/cloud/api/commands/CreateServiceOfferingCmd.java b/api/src/com/cloud/api/commands/CreateServiceOfferingCmd.java index ab15334784b..5e499123c10 100644 --- a/api/src/com/cloud/api/commands/CreateServiceOfferingCmd.java +++ b/api/src/com/cloud/api/commands/CreateServiceOfferingCmd.java @@ -30,8 +30,8 @@ import com.cloud.user.Account; @Implementation(description="Creates a service offering.", responseObject=ServiceOfferingResponse.class) public class CreateServiceOfferingCmd extends BaseCmd { - public static final Logger s_logger = Logger.getLogger(CreateServiceOfferingCmd.class.getName()); - private static final String _name = "createserviceofferingresponse"; + public static final Logger s_logger = Logger.getLogger(CreateServiceOfferingCmd.class.getName()); + private static final String _name = "createserviceofferingresponse"; ///////////////////////////////////////////////////// //////////////// API parameters ///////////////////// @@ -66,8 +66,8 @@ public class CreateServiceOfferingCmd extends BaseCmd { @IdentityMapper(entityTableName="domain") @Parameter(name=ApiConstants.DOMAIN_ID, type=CommandType.LONG, description="the ID of the containing domain, null for public offerings") - private Long domainId; - + private Long domainId; + @Parameter(name=ApiConstants.HOST_TAGS, type=CommandType.STRING, description="the host tag for this service offering.") private String hostTag; @@ -76,10 +76,10 @@ public class CreateServiceOfferingCmd extends BaseCmd { @Parameter(name=ApiConstants.SYSTEM_VM_TYPE, type=CommandType.STRING, description="the system VM type. Possible types are \"domainrouter\", \"consoleproxy\" and \"secondarystoragevm\".") private String systemVmType; - + @Parameter(name=ApiConstants.NETWORKRATE, type=CommandType.INTEGER, description="data transfer rate in megabits per second allowed. Supported only for non-System offering and system offerings having \"domainrouter\" systemvmtype") private Integer networkRate; - + ///////////////////////////////////////////////////// /////////////////// Accessors /////////////////////// ///////////////////////////////////////////////////// @@ -109,7 +109,7 @@ public class CreateServiceOfferingCmd extends BaseCmd { } public Boolean GetLimitCpuUse() { - return limitCpuUse; + return limitCpuUse; } public String getStorageType() { @@ -121,8 +121,8 @@ public class CreateServiceOfferingCmd extends BaseCmd { } public Long getDomainId() { - return domainId; - } + return domainId; + } public String getHostTag() { return hostTag; @@ -135,7 +135,7 @@ public class CreateServiceOfferingCmd extends BaseCmd { public String getSystemVmType() { return systemVmType; } - + public Integer getNetworkRate() { return networkRate; } @@ -144,11 +144,11 @@ public class CreateServiceOfferingCmd extends BaseCmd { /////////////// API Implementation/////////////////// ///////////////////////////////////////////////////// - @Override + @Override public String getCommandName() { - return _name; - } - + return _name; + } + @Override public long getEntityOwnerId() { return Account.ACCOUNT_ID_SYSTEM; diff --git a/api/src/com/cloud/api/commands/CreateSnapshotCmd.java b/api/src/com/cloud/api/commands/CreateSnapshotCmd.java index cb4e3ba21a8..f8bb6f72317 100755 --- a/api/src/com/cloud/api/commands/CreateSnapshotCmd.java +++ b/api/src/com/cloud/api/commands/CreateSnapshotCmd.java @@ -61,15 +61,15 @@ public class CreateSnapshotCmd extends BaseAsyncCreateCmd { @IdentityMapper(entityTableName="snapshot_policy") @Parameter(name = ApiConstants.POLICY_ID, type = CommandType.LONG, description = "policy id of the snapshot, if this is null, then use MANUAL_POLICY.") private Long policyId; - + private String syncObjectType = BaseAsyncCmd.snapshotHostSyncObject; // /////////////////////////////////////////////////// // ///////////////// Accessors /////////////////////// // /////////////////////////////////////////////////// - + public String getEntityTable() { - return "snapshots"; + return "snapshots"; } public String getAccountName() { @@ -91,7 +91,7 @@ public class CreateSnapshotCmd extends BaseAsyncCreateCmd { return Snapshot.MANUAL_POLICY_ID; } } - + private Long getHostId() { Volume volume = _entityMgr.findById(Volume.class, getVolumeId()); if (volume == null) { @@ -100,7 +100,7 @@ public class CreateSnapshotCmd extends BaseAsyncCreateCmd { return _snapshotService.getHostIdForSnapshotOperation(volume); } - + // /////////////////////////////////////////////////// // ///////////// API Implementation/////////////////// // /////////////////////////////////////////////////// @@ -116,23 +116,23 @@ public class CreateSnapshotCmd extends BaseAsyncCreateCmd { @Override public long getEntityOwnerId() { - + Volume volume = _entityMgr.findById(Volume.class, getVolumeId()); if (volume == null) { - throw new InvalidParameterValueException("Unable to find volume by id=" + volumeId); + throw new InvalidParameterValueException("Unable to find volume by id=" + volumeId); } - + Account account = _accountService.getAccount(volume.getAccountId()); //Can create templates for enabled projects/accounts only if (account.getType() == Account.ACCOUNT_TYPE_PROJECT) { - Project project = _projectService.findByProjectAccountId(volume.getAccountId()); + Project project = _projectService.findByProjectAccountId(volume.getAccountId()); if (project.getState() != Project.State.Active) { throw new PermissionDeniedException("Can't add resources to the project id=" + project.getId() + " in state=" + project.getState() + " as it's no longer active"); } } else if (account.getState() == Account.State.disabled) { throw new PermissionDeniedException("The owner of template is disabled: " + account); } - + return volume.getAccountId(); } @@ -173,8 +173,8 @@ public class CreateSnapshotCmd extends BaseAsyncCreateCmd { throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to create snapshot due to an internal error creating snapshot for volume " + volumeId); } } - - + + @Override public String getSyncObjType() { if (getSyncObjId() != null) { diff --git a/api/src/com/cloud/api/commands/CreateSnapshotPolicyCmd.java b/api/src/com/cloud/api/commands/CreateSnapshotPolicyCmd.java index 3e9c3ce03e6..09ae81da0c9 100644 --- a/api/src/com/cloud/api/commands/CreateSnapshotPolicyCmd.java +++ b/api/src/com/cloud/api/commands/CreateSnapshotPolicyCmd.java @@ -49,11 +49,11 @@ public class CreateSnapshotPolicyCmd extends BaseCmd { private Integer maxSnaps; @Parameter(name=ApiConstants.SCHEDULE, type=CommandType.STRING, required=true, description="time the snapshot is scheduled to be taken. " + - "Format is:" + - "* if HOURLY, MM" + - "* if DAILY, MM:HH" + - "* if WEEKLY, MM:HH:DD (1-7)" + - "* if MONTHLY, MM:HH:DD (1-28)") + "Format is:" + + "* if HOURLY, MM" + + "* if DAILY, MM:HH" + + "* if WEEKLY, MM:HH:DD (1-7)" + + "* if MONTHLY, MM:HH:DD (1-28)") private String schedule; @Parameter(name=ApiConstants.TIMEZONE, type=CommandType.STRING, required=true, description="Specifies a timezone for this command. For more information on the timezone parameter, see Time Zone Format.") @@ -97,30 +97,30 @@ public class CreateSnapshotPolicyCmd extends BaseCmd { public String getCommandName() { return s_name; } - + @Override public long getEntityOwnerId() { Volume volume = _entityMgr.findById(Volume.class, getVolumeId()); if (volume == null) { - throw new InvalidParameterValueException("Unable to find volume by id=" + volumeId); + throw new InvalidParameterValueException("Unable to find volume by id=" + volumeId); } - + Account account = _accountService.getAccount(volume.getAccountId()); //Can create templates for enabled projects/accounts only if (account.getType() == Account.ACCOUNT_TYPE_PROJECT) { - Project project = _projectService.findByProjectAccountId(volume.getAccountId()); + Project project = _projectService.findByProjectAccountId(volume.getAccountId()); if (project.getState() != Project.State.Active) { - PermissionDeniedException ex = new PermissionDeniedException("Can't add resources to the specified project id in state=" + project.getState() + " as it's no longer active"); + PermissionDeniedException ex = new PermissionDeniedException("Can't add resources to the specified project id in state=" + project.getState() + " as it's no longer active"); ex.addProxyObject(project, project.getId(), "projectId"); throw ex; } } else if (account.getState() == Account.State.disabled) { throw new PermissionDeniedException("The owner of template is disabled: " + account); } - + return volume.getAccountId(); } - + @Override public void execute(){ SnapshotPolicy result = _snapshotService.createPolicy(this, _accountService.getAccount(getEntityOwnerId())); diff --git a/api/src/com/cloud/api/commands/CreateStorageNetworkIpRangeCmd.java b/api/src/com/cloud/api/commands/CreateStorageNetworkIpRangeCmd.java index c3b25dc032e..49a43952a91 100755 --- a/api/src/com/cloud/api/commands/CreateStorageNetworkIpRangeCmd.java +++ b/api/src/com/cloud/api/commands/CreateStorageNetworkIpRangeCmd.java @@ -36,32 +36,32 @@ import com.cloud.user.Account; @Implementation(description="Creates a Storage network IP range.", responseObject=StorageNetworkIpRangeResponse.class, since="3.0.0") public class CreateStorageNetworkIpRangeCmd extends BaseAsyncCmd { - public static final Logger s_logger = Logger.getLogger(CreateStorageNetworkIpRangeCmd.class); - - private static final String s_name = "createstoragenetworkiprangeresponse"; - + public static final Logger s_logger = Logger.getLogger(CreateStorageNetworkIpRangeCmd.class); + + private static final String s_name = "createstoragenetworkiprangeresponse"; + ///////////////////////////////////////////////////// //////////////// API parameters ///////////////////// - ///////////////////////////////////////////////////// + ///////////////////////////////////////////////////// @IdentityMapper(entityTableName="host_pod_ref") @Parameter(name=ApiConstants.POD_ID, type=CommandType.LONG, required=true, description="UUID of pod where the ip range belongs to") private Long podId; - + @Parameter(name=ApiConstants.START_IP, type=CommandType.STRING, required=true, description="the beginning IP address") private String startIp; @Parameter(name=ApiConstants.END_IP, type=CommandType.STRING, description="the ending IP address") private String endIp; - - @Parameter(name = ApiConstants.VLAN, type = CommandType.INTEGER, description = "Optional. The vlan the ip range sits on, default to Null when it is not specificed which means you network is not on any Vlan. This is mainly for Vmware as other hypervisors can directly reterive bridge from pyhsical network traffic type table") + + @Parameter(name = ApiConstants.VLAN, type = CommandType.INTEGER, description = "Optional. The vlan the ip range sits on, default to Null when it is not specificed which means you network is not on any Vlan. This is mainly for Vmware as other hypervisors can directly reterive bridge from pyhsical network traffic type table") private Integer vlan; - + @Parameter(name=ApiConstants.NETMASK, type=CommandType.STRING, required=true, description="the netmask for storage network") private String netmask; - + @Parameter(name=ApiConstants.GATEWAY, type=CommandType.STRING, required=true, description="the gateway for storage network") private String gateway; - + ///////////////////////////////////////////////////// /////////////////// Accessors /////////////////////// ///////////////////////////////////////////////////// @@ -81,47 +81,47 @@ public class CreateStorageNetworkIpRangeCmd extends BaseAsyncCmd { public Integer getVlan() { return vlan; } - + public String getNetmask() { - return netmask; + return netmask; } - + public String getGateWay() { - return gateway; + return gateway; } - @Override - public String getEventType() { - return EventTypes.EVENT_STORAGE_IP_RANGE_CREATE; - } + @Override + public String getEventType() { + return EventTypes.EVENT_STORAGE_IP_RANGE_CREATE; + } - @Override - public String getEventDescription() { - return "Creating storage ip range from " + getStartIp() + " to " + getEndIp() + " with vlan " + getVlan(); - } + @Override + public String getEventDescription() { + return "Creating storage ip range from " + getStartIp() + " to " + getEndIp() + " with vlan " + getVlan(); + } - @Override - public void execute() throws ResourceUnavailableException, InsufficientCapacityException, ServerApiException, ConcurrentOperationException, - ResourceAllocationException { - try { - StorageNetworkIpRange result = _storageNetworkService.createIpRange(this); - StorageNetworkIpRangeResponse response = _responseGenerator.createStorageNetworkIpRangeResponse(result); - response.setResponseName(getCommandName()); - this.setResponseObject(response); - } catch (Exception e) { - s_logger.warn("Create storage network IP range failed", e); - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, e.getMessage()); - } - } + @Override + public void execute() throws ResourceUnavailableException, InsufficientCapacityException, ServerApiException, ConcurrentOperationException, + ResourceAllocationException { + try { + StorageNetworkIpRange result = _storageNetworkService.createIpRange(this); + StorageNetworkIpRangeResponse response = _responseGenerator.createStorageNetworkIpRangeResponse(result); + response.setResponseName(getCommandName()); + this.setResponseObject(response); + } catch (Exception e) { + s_logger.warn("Create storage network IP range failed", e); + throw new ServerApiException(BaseCmd.INTERNAL_ERROR, e.getMessage()); + } + } - @Override - public String getCommandName() { - return s_name; - } + @Override + public String getCommandName() { + return s_name; + } - @Override - public long getEntityOwnerId() { - return Account.ACCOUNT_ID_SYSTEM; - } + @Override + public long getEntityOwnerId() { + return Account.ACCOUNT_ID_SYSTEM; + } } diff --git a/api/src/com/cloud/api/commands/CreateStoragePoolCmd.java b/api/src/com/cloud/api/commands/CreateStoragePoolCmd.java index 9c8245a4253..36094620896 100644 --- a/api/src/com/cloud/api/commands/CreateStoragePoolCmd.java +++ b/api/src/com/cloud/api/commands/CreateStoragePoolCmd.java @@ -103,12 +103,12 @@ public class CreateStoragePoolCmd extends BaseCmd { ///////////////////////////////////////////////////// /////////////// API Implementation/////////////////// ///////////////////////////////////////////////////// - + @Override public String getCommandName() { return s_name; } - + @Override public long getEntityOwnerId() { return Account.ACCOUNT_ID_SYSTEM; diff --git a/api/src/com/cloud/api/commands/CreateTagsCmd.java b/api/src/com/cloud/api/commands/CreateTagsCmd.java index 04c159da6ae..8e697dec662 100644 --- a/api/src/com/cloud/api/commands/CreateTagsCmd.java +++ b/api/src/com/cloud/api/commands/CreateTagsCmd.java @@ -44,30 +44,30 @@ public class CreateTagsCmd extends BaseAsyncCmd{ // /////////////////////////////////////////////////// // ////////////// API parameters ///////////////////// // /////////////////////////////////////////////////// - + @Parameter(name = ApiConstants.TAGS, type = CommandType.MAP, required=true, description = "Map of tags (key/value pairs)") private Map tag; - + @Parameter(name=ApiConstants.RESOURCE_TYPE, type=CommandType.STRING, required=true, description="type of the resource") private String resourceType; - - @Parameter(name=ApiConstants.RESOURCE_IDS, type=CommandType.LIST, required=true, + + @Parameter(name=ApiConstants.RESOURCE_IDS, type=CommandType.LIST, required=true, collectionType=CommandType.STRING, description="list of resources to create the tags for") private List resourceIds; - + @Parameter(name=ApiConstants.CUSTOMER, type=CommandType.STRING, description="identifies client specific tag. " + - "When the value is not null, the tag can't be used by cloudStack code internally") + "When the value is not null, the tag can't be used by cloudStack code internally") private String customer; ///////////////////////////////////////////////////// /////////////////// Accessors /////////////////////// ///////////////////////////////////////////////////// - + public TaggedResourceType getResourceType(){ return _taggedResourceService.getResourceType(resourceType); - } - + } + public Map getTags() { Map tagsMap = null; if (!tag.isEmpty()) { @@ -83,11 +83,11 @@ public class CreateTagsCmd extends BaseAsyncCmd{ } return tagsMap; } - + public List getResourceIds() { return resourceIds; } - + public String getCustomer() { return customer; } @@ -110,7 +110,7 @@ public class CreateTagsCmd extends BaseAsyncCmd{ @Override public void execute() { List tags = _taggedResourceService.createTags(getResourceIds(), getResourceType(), getTags(), getCustomer()); - + if (tags != null && !tags.isEmpty()) { SuccessResponse response = new SuccessResponse(getCommandName()); this.setResponseObject(response); diff --git a/api/src/com/cloud/api/commands/CreateTemplateCmd.java b/api/src/com/cloud/api/commands/CreateTemplateCmd.java index d43eadce30a..a9b28e2d751 100755 --- a/api/src/com/cloud/api/commands/CreateTemplateCmd.java +++ b/api/src/com/cloud/api/commands/CreateTemplateCmd.java @@ -95,16 +95,16 @@ import com.cloud.user.UserContext; @Parameter(name=ApiConstants.TEMPLATE_TAG, type=CommandType.STRING, description="the tag for this template.") private String templateTag; - + @Parameter(name=ApiConstants.DETAILS, type=CommandType.MAP, description="Template details in key/value pairs.") protected Map details; // /////////////////////////////////////////////////// // ///////////////// Accessors /////////////////////// // /////////////////////////////////////////////////// - + public String getEntityTable() { - return "vm_template"; + return "vm_template"; } public Integer getBits() { @@ -158,17 +158,17 @@ import com.cloud.user.UserContext; public String getTemplateTag() { return templateTag; } - + public Map getDetails() { - if (details == null || details.isEmpty()) { - return null; - } - - Collection paramsCollection = details.values(); - Map params = (Map) (paramsCollection.toArray())[0]; - return params; + if (details == null || details.isEmpty()) { + return null; + } + + Collection paramsCollection = details.values(); + Map params = (Map) (paramsCollection.toArray())[0]; + return params; } - + // /////////////////////////////////////////////////// // ///////////// API Implementation/////////////////// // /////////////////////////////////////////////////// @@ -192,29 +192,29 @@ import com.cloud.user.UserContext; if (volume != null) { accountId = volume.getAccountId(); } else { - throw new InvalidParameterValueException("Unable to find volume by id=" + volumeId); + throw new InvalidParameterValueException("Unable to find volume by id=" + volumeId); } } else { Snapshot snapshot = _entityMgr.findById(Snapshot.class, snapshotId); if (snapshot != null) { accountId = snapshot.getAccountId(); } else { - throw new InvalidParameterValueException("Unable to find snapshot by id=" + snapshotId); + throw new InvalidParameterValueException("Unable to find snapshot by id=" + snapshotId); } } - + Account account = _accountService.getAccount(accountId); //Can create templates for enabled projects/accounts only if (account.getType() == Account.ACCOUNT_TYPE_PROJECT) { - Project project = _projectService.findByProjectAccountId(accountId); + Project project = _projectService.findByProjectAccountId(accountId); if (project.getState() != Project.State.Active) { - PermissionDeniedException ex = new PermissionDeniedException("Can't add resources to the specified project id in state=" + project.getState() + " as it's no longer active"); + PermissionDeniedException ex = new PermissionDeniedException("Can't add resources to the specified project id in state=" + project.getState() + " as it's no longer active"); ex.addProxyObject(project, project.getId(), "projectId"); } } else if (account.getState() == Account.State.disabled) { throw new PermissionDeniedException("The owner of template is disabled: " + account); } - + return accountId; } @@ -276,7 +276,7 @@ import com.cloud.user.UserContext; if (templateResponses != null && !templateResponses.isEmpty()) { response = templateResponses.get(0); } - response.setResponseName(getCommandName()); + response.setResponseName(getCommandName()); this.setResponseObject(response); } else { throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to create private template"); diff --git a/api/src/com/cloud/api/commands/CreateUserCmd.java b/api/src/com/cloud/api/commands/CreateUserCmd.java index de060e6822f..95b11dc92c1 100644 --- a/api/src/com/cloud/api/commands/CreateUserCmd.java +++ b/api/src/com/cloud/api/commands/CreateUserCmd.java @@ -108,7 +108,7 @@ public class CreateUserCmd extends BaseCmd { public String getCommandName() { return s_name; } - + @Override public long getEntityOwnerId() { Account account = UserContext.current().getCaller(); @@ -127,7 +127,7 @@ public class CreateUserCmd extends BaseCmd { return Account.ACCOUNT_ID_SYSTEM; // no account info given, parent this command to SYSTEM so ERROR events are tracked } - + @Override public void execute(){ UserContext.current().setEventDetails("UserName: "+getUserName()+", FirstName :"+getFirstName()+", LastName: "+getLastName()); @@ -140,4 +140,4 @@ public class CreateUserCmd extends BaseCmd { throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to create a user"); } } -} \ No newline at end of file +} diff --git a/api/src/com/cloud/api/commands/CreateVPCOfferingCmd.java b/api/src/com/cloud/api/commands/CreateVPCOfferingCmd.java index a5bb0e0a2c0..9ab3735bce9 100644 --- a/api/src/com/cloud/api/commands/CreateVPCOfferingCmd.java +++ b/api/src/com/cloud/api/commands/CreateVPCOfferingCmd.java @@ -40,22 +40,22 @@ public class CreateVPCOfferingCmd extends BaseAsyncCreateCmd{ ///////////////////////////////////////////////////// //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - + @Parameter(name=ApiConstants.NAME, type=CommandType.STRING, required=true, description="the name of the vpc offering") private String vpcOfferingName; - + @Parameter(name=ApiConstants.DISPLAY_TEXT, type=CommandType.STRING, required=true, description="the display text of " + - "the vpc offering") + "the vpc offering") private String displayText; - + @Parameter(name=ApiConstants.SUPPORTED_SERVICES, type=CommandType.LIST, required=true, collectionType=CommandType.STRING, description="services supported by the vpc offering") private List supportedServices; - + ///////////////////////////////////////////////////// /////////////////// Accessors /////////////////////// ///////////////////////////////////////////////////// - + public String getVpcOfferingName() { return vpcOfferingName; } @@ -67,7 +67,7 @@ public class CreateVPCOfferingCmd extends BaseAsyncCreateCmd{ public List getSupportedServices() { return supportedServices; } - + @Override public void create() throws ResourceAllocationException { @@ -78,7 +78,7 @@ public class CreateVPCOfferingCmd extends BaseAsyncCreateCmd{ throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to create a VPC offering"); } } - + @Override public void execute() { VpcOffering vpc = _vpcService.getVpcOffering(this.getEntityId()); diff --git a/api/src/com/cloud/api/commands/CreateVirtualRouterElementCmd.java b/api/src/com/cloud/api/commands/CreateVirtualRouterElementCmd.java index bf4e2c9f716..bdeedbee3f8 100644 --- a/api/src/com/cloud/api/commands/CreateVirtualRouterElementCmd.java +++ b/api/src/com/cloud/api/commands/CreateVirtualRouterElementCmd.java @@ -37,9 +37,9 @@ import com.cloud.user.UserContext; @Implementation(responseObject=VirtualRouterProviderResponse.class, description="Create a virtual router element.") public class CreateVirtualRouterElementCmd extends BaseAsyncCreateCmd { - public static final Logger s_logger = Logger.getLogger(CreateVirtualRouterElementCmd.class.getName()); + public static final Logger s_logger = Logger.getLogger(CreateVirtualRouterElementCmd.class.getName()); private static final String s_name = "createvirtualrouterelementresponse"; - + @PlugService private VirtualRouterElementService _service; @@ -67,7 +67,7 @@ public class CreateVirtualRouterElementCmd extends BaseAsyncCreateCmd { public Long getNspId() { return nspId; } - + ///////////////////////////////////////////////////// /////////////// API Implementation/////////////////// ///////////////////////////////////////////////////// @@ -76,12 +76,12 @@ public class CreateVirtualRouterElementCmd extends BaseAsyncCreateCmd { public String getCommandName() { return s_name; } - + @Override public long getEntityOwnerId() { return Account.ACCOUNT_ID_SYSTEM; } - + @Override public void execute(){ UserContext.current().setEventDetails("Virtual router element Id: "+getEntityId()); @@ -102,14 +102,14 @@ public class CreateVirtualRouterElementCmd extends BaseAsyncCreateCmd { setEntityId(result.getId()); } else { throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to add Virtual Router entity to physical network"); - } + } } @Override public String getEventType() { return EventTypes.EVENT_SERVICE_PROVIDER_CREATE; } - + @Override public String getEventDescription() { return "Adding physical network ServiceProvider Virtual Router: " + getEntityId(); diff --git a/api/src/com/cloud/api/commands/CreateVlanIpRangeCmd.java b/api/src/com/cloud/api/commands/CreateVlanIpRangeCmd.java index bc0ba6c3812..f1e913670b2 100644 --- a/api/src/com/cloud/api/commands/CreateVlanIpRangeCmd.java +++ b/api/src/com/cloud/api/commands/CreateVlanIpRangeCmd.java @@ -34,7 +34,7 @@ import com.cloud.user.Account; @Implementation(description="Creates a VLAN IP range.", responseObject=VlanIpRangeResponse.class) public class CreateVlanIpRangeCmd extends BaseCmd { - public static final Logger s_logger = Logger.getLogger(CreateVlanIpRangeCmd.class.getName()); + public static final Logger s_logger = Logger.getLogger(CreateVlanIpRangeCmd.class.getName()); private static final String s_name = "createvlaniprangeresponse"; @@ -44,7 +44,7 @@ public class CreateVlanIpRangeCmd extends BaseCmd { @Parameter(name=ApiConstants.ACCOUNT, type=CommandType.STRING, description="account who will own the VLAN. If VLAN is Zone wide, this parameter should be ommited") private String accountName; - + @IdentityMapper(entityTableName="projects") @Parameter(name=ApiConstants.PROJECT_ID, type=CommandType.LONG, description="project who will own the VLAN. If VLAN is Zone wide, this parameter should be ommited") private Long projectId; @@ -73,13 +73,13 @@ public class CreateVlanIpRangeCmd extends BaseCmd { private String startIp; @Parameter(name=ApiConstants.VLAN, type=CommandType.STRING, description="the ID or VID of the VLAN. If not specified," + - " will be defaulted to the vlan of the network or if vlan of the network is null - to Untagged") + " will be defaulted to the vlan of the network or if vlan of the network is null - to Untagged") private String vlan; @IdentityMapper(entityTableName="data_center") @Parameter(name=ApiConstants.ZONE_ID, type=CommandType.LONG, description="the Zone ID of the VLAN IP range") private Long zoneId; - + @IdentityMapper(entityTableName="networks") @Parameter(name=ApiConstants.NETWORK_ID, type=CommandType.LONG, description="the network id") private Long networkID; @@ -87,7 +87,7 @@ public class CreateVlanIpRangeCmd extends BaseCmd { @IdentityMapper(entityTableName="physical_network") @Parameter(name=ApiConstants.PHYSICAL_NETWORK_ID, type=CommandType.LONG, description="the physical network id") private Long physicalNetworkId; - + ///////////////////////////////////////////////////// /////////////////// Accessors /////////////////////// ///////////////////////////////////////////////////// @@ -147,17 +147,17 @@ public class CreateVlanIpRangeCmd extends BaseCmd { return physicalNetworkId; } - + @Override public String getCommandName() { return s_name; } - + @Override public long getEntityOwnerId() { return Account.ACCOUNT_ID_SYSTEM; } - + @Override public void execute() throws ResourceUnavailableException, ResourceAllocationException{ try { @@ -175,6 +175,6 @@ public class CreateVlanIpRangeCmd extends BaseCmd { } catch (InsufficientCapacityException ex) { s_logger.info(ex); throw new ServerApiException(BaseCmd.INSUFFICIENT_CAPACITY_ERROR, ex.getMessage()); - } + } } } diff --git a/api/src/com/cloud/api/commands/CreateVolumeCmd.java b/api/src/com/cloud/api/commands/CreateVolumeCmd.java index be9451c9e41..86e10ddc3e0 100644 --- a/api/src/com/cloud/api/commands/CreateVolumeCmd.java +++ b/api/src/com/cloud/api/commands/CreateVolumeCmd.java @@ -34,7 +34,7 @@ import com.cloud.user.UserContext; @Implementation(responseObject=VolumeResponse.class, description="Creates a disk volume from a disk offering. This disk volume must still be attached to a virtual machine to make use of it.") public class CreateVolumeCmd extends BaseAsyncCreateCmd { - public static final Logger s_logger = Logger.getLogger(CreateVolumeCmd.class.getName()); + public static final Logger s_logger = Logger.getLogger(CreateVolumeCmd.class.getName()); private static final String s_name = "createvolumeresponse"; ///////////////////////////////////////////////////// @@ -43,11 +43,11 @@ public class CreateVolumeCmd extends BaseAsyncCreateCmd { @Parameter(name=ApiConstants.ACCOUNT, type=CommandType.STRING, description="the account associated with the disk volume. Must be used with the domainId parameter.") private String accountName; - + @IdentityMapper(entityTableName="projects") @Parameter(name=ApiConstants.PROJECT_ID, type=CommandType.LONG, description="the project associated with the volume. Mutually exclusive with account parameter") private Long projectId; - + @IdentityMapper(entityTableName="domain") @Parameter(name=ApiConstants.DOMAIN_ID, type=CommandType.LONG, description="the domain ID associated with the disk offering. If used with the account parameter returns the disk volume associated with the account for the specified domain.") private Long domainId; @@ -74,9 +74,9 @@ public class CreateVolumeCmd extends BaseAsyncCreateCmd { ///////////////////////////////////////////////////// /////////////////// Accessors /////////////////////// ///////////////////////////////////////////////////// - + public String getEntityTable() { - return "volumes"; + return "volumes"; } public String getAccountName() { @@ -118,22 +118,22 @@ public class CreateVolumeCmd extends BaseAsyncCreateCmd { public String getCommandName() { return s_name; } - + public static String getResultObjectName() { - return "volume"; + return "volume"; } - + public AsyncJob.Type getInstanceType() { - return AsyncJob.Type.Volume; + return AsyncJob.Type.Volume; } - + @Override public long getEntityOwnerId() { Long accountId = finalyzeAccountId(accountName, domainId, projectId, true); if (accountId == null) { return UserContext.current().getCaller().getId(); } - + return accountId; } @@ -146,7 +146,7 @@ public class CreateVolumeCmd extends BaseAsyncCreateCmd { public String getEventDescription() { return "creating volume: " + getVolumeName() + ((getSnapshotId() == null) ? "" : " from snapshot: " + getSnapshotId()); } - + @Override public void create() throws ResourceAllocationException{ @@ -155,9 +155,9 @@ public class CreateVolumeCmd extends BaseAsyncCreateCmd { this.setEntityId(volume.getId()); } else { throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to create volume"); - } + } } - + @Override public void execute(){ UserContext.current().setEventDetails("Volume Id: "+getEntityId()+((getSnapshotId() == null) ? "" : " from snapshot: " + getSnapshotId())); diff --git a/api/src/com/cloud/api/commands/CreateZoneCmd.java b/api/src/com/cloud/api/commands/CreateZoneCmd.java index bf2ed2f4dcb..4613e1ff882 100755 --- a/api/src/com/cloud/api/commands/CreateZoneCmd.java +++ b/api/src/com/cloud/api/commands/CreateZoneCmd.java @@ -62,14 +62,14 @@ public class CreateZoneCmd extends BaseCmd { @IdentityMapper(entityTableName="domain") @Parameter(name=ApiConstants.DOMAIN_ID, type=CommandType.LONG, description="the ID of the containing domain, null for public zones") - private Long domainId; - + private Long domainId; + @Parameter(name=ApiConstants.NETWORK_TYPE, type=CommandType.STRING, required=true, description="network type of the zone, can be Basic or Advanced") - private String networkType; - + private String networkType; + @Parameter(name=ApiConstants.ALLOCATION_STATE, type=CommandType.STRING, description="Allocation state of this Zone for allocation of new resources") private String allocationState; - + @Parameter(name=ApiConstants.SECURITY_GROUP_EANBLED, type=CommandType.BOOLEAN, description="true if network is security group enabled, false otherwise") private Boolean securitygroupenabled; @@ -109,17 +109,17 @@ public class CreateZoneCmd extends BaseCmd { } public Long getDomainId(){ - return domainId; + return domainId; } - + public String getNetworkType(){ return networkType; } - + public String getAllocationState() { - return allocationState; + return allocationState; } - + public Boolean getSecuritygroupenabled() { if (securitygroupenabled == null) { return false; @@ -140,16 +140,16 @@ public class CreateZoneCmd extends BaseCmd { public String getCommandName() { return s_name; } - + @Override public long getEntityOwnerId() { return Account.ACCOUNT_ID_SYSTEM; } - + @Override public void execute(){ - UserContext.current().setEventDetails("Zone Name: "+getZoneName()); - DataCenter result = _configService.createZone(this); + UserContext.current().setEventDetails("Zone Name: "+getZoneName()); + DataCenter result = _configService.createZone(this); if (result != null){ ZoneResponse response = _responseGenerator.createZoneResponse(result,false); response.setResponseName(getCommandName()); diff --git a/api/src/com/cloud/api/commands/DeleteAccountCmd.java b/api/src/com/cloud/api/commands/DeleteAccountCmd.java index 127a7d30781..47c3475fbc2 100755 --- a/api/src/com/cloud/api/commands/DeleteAccountCmd.java +++ b/api/src/com/cloud/api/commands/DeleteAccountCmd.java @@ -34,14 +34,14 @@ import com.cloud.user.UserContext; @Implementation(description="Deletes a account, and all users associated with this account", responseObject=SuccessResponse.class) public class DeleteAccountCmd extends BaseAsyncCmd { - public static final Logger s_logger = Logger.getLogger(DeleteAccountCmd.class.getName()); - private static final String s_name = "deleteaccountresponse"; + public static final Logger s_logger = Logger.getLogger(DeleteAccountCmd.class.getName()); + private static final String s_name = "deleteaccountresponse"; ///////////////////////////////////////////////////// //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - + @IdentityMapper(entityTableName="account") @Parameter(name=ApiConstants.ID, type=CommandType.LONG, required=true, description="Account id") private Long id; @@ -60,12 +60,12 @@ public class DeleteAccountCmd extends BaseAsyncCmd { /////////////// API Implementation/////////////////// ///////////////////////////////////////////////////// - public static String getStaticName() { - return s_name; - } - + public static String getStaticName() { + return s_name; + } + @Override - public String getCommandName() { + public String getCommandName() { return s_name; } @@ -89,7 +89,7 @@ public class DeleteAccountCmd extends BaseAsyncCmd { User user = _responseGenerator.findUserById(getId()); return (user != null ? ("deleting User " + user.getUsername() + " (id: " + user.getId() + ") and accountId = " + user.getAccountId()) : "user delete, but this user does not exist in the system"); } - + @Override public void execute(){ UserContext.current().setEventDetails("Account Id: "+getId()); @@ -101,7 +101,7 @@ public class DeleteAccountCmd extends BaseAsyncCmd { throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to delete user account and all corresponding users"); } } - + @Override public AsyncJob.Type getInstanceType() { return AsyncJob.Type.Account; diff --git a/api/src/com/cloud/api/commands/DeleteAccountFromProjectCmd.java b/api/src/com/cloud/api/commands/DeleteAccountFromProjectCmd.java index 4e3db7e9eea..d6e3494debc 100644 --- a/api/src/com/cloud/api/commands/DeleteAccountFromProjectCmd.java +++ b/api/src/com/cloud/api/commands/DeleteAccountFromProjectCmd.java @@ -16,6 +16,7 @@ // under the License. package com.cloud.api.commands; +import org.apache.cloudstack.api.user.project.command.DeleteProjectCmd; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; @@ -43,7 +44,7 @@ public class DeleteAccountFromProjectCmd extends BaseAsyncCmd { @IdentityMapper(entityTableName="projects") @Parameter(name=ApiConstants.PROJECT_ID, type=CommandType.LONG, required=true, description="id of the project to remove the account from") private Long projectId; - + @Parameter(name=ApiConstants.ACCOUNT, type=CommandType.STRING, required=true, description="name of the account to be removed from the project") private String accountName; @@ -52,7 +53,7 @@ public class DeleteAccountFromProjectCmd extends BaseAsyncCmd { ///////////////////////////////////////////////////// - + @Override public String getCommandName() { @@ -82,26 +83,26 @@ public class DeleteAccountFromProjectCmd extends BaseAsyncCmd { throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to delete account from the project"); } } - - + + @Override public long getEntityOwnerId() { Project project= _projectService.getProject(projectId); //verify input parameters if (project == null) { throw new InvalidParameterValueException("Unable to find project by id " + projectId); - } - - return _projectService.getProjectOwner(projectId).getId(); + } + + return _projectService.getProjectOwner(projectId).getId(); } - + @Override public String getEventType() { return EventTypes.EVENT_PROJECT_ACCOUNT_REMOVE; } - + @Override public String getEventDescription() { return "Removing account " + accountName + " from project: " + projectId; } -} \ No newline at end of file +} diff --git a/api/src/com/cloud/api/commands/DeleteClusterCmd.java b/api/src/com/cloud/api/commands/DeleteClusterCmd.java index 5e347c6eb38..eaab9eda0cb 100755 --- a/api/src/com/cloud/api/commands/DeleteClusterCmd.java +++ b/api/src/com/cloud/api/commands/DeleteClusterCmd.java @@ -60,12 +60,12 @@ public class DeleteClusterCmd extends BaseCmd { public String getCommandName() { return s_name; } - + @Override public long getEntityOwnerId() { return Account.ACCOUNT_ID_SYSTEM; } - + @Override public void execute(){ boolean result = _resourceService.deleteCluster(this); diff --git a/api/src/com/cloud/api/commands/DeleteDiskOfferingCmd.java b/api/src/com/cloud/api/commands/DeleteDiskOfferingCmd.java index b3ed874a40e..ee17f5fdc5c 100644 --- a/api/src/com/cloud/api/commands/DeleteDiskOfferingCmd.java +++ b/api/src/com/cloud/api/commands/DeleteDiskOfferingCmd.java @@ -57,12 +57,12 @@ public class DeleteDiskOfferingCmd extends BaseCmd { public String getCommandName() { return s_name; } - + @Override public long getEntityOwnerId() { return Account.ACCOUNT_ID_SYSTEM; } - + @Override public void execute(){ boolean result = _configService.deleteDiskOffering(this); diff --git a/api/src/com/cloud/api/commands/DeleteDomainCmd.java b/api/src/com/cloud/api/commands/DeleteDomainCmd.java index 90e119c8639..07e1b8e156e 100644 --- a/api/src/com/cloud/api/commands/DeleteDomainCmd.java +++ b/api/src/com/cloud/api/commands/DeleteDomainCmd.java @@ -88,7 +88,7 @@ public class DeleteDomainCmd extends BaseAsyncCmd { public String getEventDescription() { return "deleting domain: " + getId(); } - + @Override public void execute(){ UserContext.current().setEventDetails("Domain Id: "+getId()); diff --git a/api/src/com/cloud/api/commands/DeleteFirewallRuleCmd.java b/api/src/com/cloud/api/commands/DeleteFirewallRuleCmd.java index 469ff9c50c1..7ce390f9b15 100644 --- a/api/src/com/cloud/api/commands/DeleteFirewallRuleCmd.java +++ b/api/src/com/cloud/api/commands/DeleteFirewallRuleCmd.java @@ -57,7 +57,7 @@ public class DeleteFirewallRuleCmd extends BaseAsyncCmd { public Long getId() { return id; } - + ///////////////////////////////////////////////////// /////////////// API Implementation/////////////////// ///////////////////////////////////////////////////// @@ -65,7 +65,7 @@ public class DeleteFirewallRuleCmd extends BaseAsyncCmd { public String getCommandName() { return s_name; } - + @Override public String getEventType() { return EventTypes.EVENT_FIREWALL_CLOSE; @@ -75,7 +75,7 @@ public class DeleteFirewallRuleCmd extends BaseAsyncCmd { public String getEventDescription() { return ("Deleting firewall rule id=" + id); } - + @Override public long getEntityOwnerId() { if (ownerId == null) { @@ -88,12 +88,12 @@ public class DeleteFirewallRuleCmd extends BaseAsyncCmd { } return ownerId; } - + @Override public void execute() throws ResourceUnavailableException { UserContext.current().setEventDetails("Rule Id: " + id); boolean result = _firewallService.revokeFirewallRule(id, true); - + if (result) { SuccessResponse response = new SuccessResponse(getCommandName()); this.setResponseObject(response); @@ -101,8 +101,8 @@ public class DeleteFirewallRuleCmd extends BaseAsyncCmd { throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to delete firewall rule"); } } - - + + @Override public String getSyncObjType() { return BaseAsyncCmd.networkSyncObject; @@ -112,7 +112,7 @@ public class DeleteFirewallRuleCmd extends BaseAsyncCmd { public Long getSyncObjId() { return _firewallService.getFirewallRule(id).getNetworkId(); } - + @Override public AsyncJob.Type getInstanceType() { return AsyncJob.Type.FirewallRule; diff --git a/api/src/com/cloud/api/commands/DeleteHostCmd.java b/api/src/com/cloud/api/commands/DeleteHostCmd.java index 3485be85885..da68a832094 100644 --- a/api/src/com/cloud/api/commands/DeleteHostCmd.java +++ b/api/src/com/cloud/api/commands/DeleteHostCmd.java @@ -43,7 +43,7 @@ public class DeleteHostCmd extends BaseCmd { @Parameter(name = ApiConstants.FORCED, type = CommandType.BOOLEAN, description = "Force delete the host. All HA enabled vms running on the host will be put to HA; HA disabled ones will be stopped") private Boolean forced; - + @Parameter(name = ApiConstants.FORCED_DESTROY_LOCAL_STORAGE, type = CommandType.BOOLEAN, description = "Force destroy local storage on this host. All VMs created on this local storage will be destroyed") private Boolean forceDestroyLocalStorage; @@ -58,7 +58,7 @@ public class DeleteHostCmd extends BaseCmd { public boolean isForced() { return (forced != null) ? forced : false; } - + public boolean isForceDestoryLocalStorage() { return (forceDestroyLocalStorage != null) ? forceDestroyLocalStorage : true; } @@ -87,4 +87,4 @@ public class DeleteHostCmd extends BaseCmd { throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to delete host"); } } -} \ No newline at end of file +} diff --git a/api/src/com/cloud/api/commands/DeleteIpForwardingRuleCmd.java b/api/src/com/cloud/api/commands/DeleteIpForwardingRuleCmd.java index 3d390d8a1d6..78c3892a195 100644 --- a/api/src/com/cloud/api/commands/DeleteIpForwardingRuleCmd.java +++ b/api/src/com/cloud/api/commands/DeleteIpForwardingRuleCmd.java @@ -46,7 +46,7 @@ public class DeleteIpForwardingRuleCmd extends BaseAsyncCmd { @Parameter(name=ApiConstants.ID, type=CommandType.LONG, required=true, description="the id of the forwarding rule") private Long id; - + // unexposed parameter needed for events logging @IdentityMapper(entityTableName="account") @Parameter(name=ApiConstants.ACCOUNT_ID, type=CommandType.LONG, expose=false) @@ -71,8 +71,8 @@ public class DeleteIpForwardingRuleCmd extends BaseAsyncCmd { @Override public void execute(){ UserContext.current().setEventDetails("Rule Id: "+id); - boolean result = _firewallService.revokeRelatedFirewallRule(id, true); - result = result && _rulesService.revokeStaticNatRule(id, true); + boolean result = _firewallService.revokeRelatedFirewallRule(id, true); + result = result && _rulesService.revokeStaticNatRule(id, true); if (result) { SuccessResponse response = new SuccessResponse(getCommandName()); @@ -104,7 +104,7 @@ public class DeleteIpForwardingRuleCmd extends BaseAsyncCmd { public String getEventDescription() { return ("Deleting an ipforwarding 1:1 NAT rule id:"+id); } - + @Override public String getSyncObjType() { return BaseAsyncCmd.networkSyncObject; @@ -114,7 +114,7 @@ public class DeleteIpForwardingRuleCmd extends BaseAsyncCmd { public Long getSyncObjId() { return _rulesService.getFirewallRule(id).getNetworkId(); } - + @Override public AsyncJob.Type getInstanceType() { return AsyncJob.Type.FirewallRule; diff --git a/api/src/com/cloud/api/commands/DeleteIsoCmd.java b/api/src/com/cloud/api/commands/DeleteIsoCmd.java index 389984313a4..a0f14184566 100755 --- a/api/src/com/cloud/api/commands/DeleteIsoCmd.java +++ b/api/src/com/cloud/api/commands/DeleteIsoCmd.java @@ -70,11 +70,11 @@ public class DeleteIsoCmd extends BaseAsyncCmd { public String getCommandName() { return s_name; } - + public static String getStaticName() { return s_name; } - + @Override public long getEntityOwnerId() { VirtualMachineTemplate iso = _entityMgr.findById(VirtualMachineTemplate.class, getId()); @@ -94,18 +94,18 @@ public class DeleteIsoCmd extends BaseAsyncCmd { public String getEventDescription() { return "Deleting iso " + getId(); } - + public AsyncJob.Type getInstanceType() { - return AsyncJob.Type.Iso; + return AsyncJob.Type.Iso; } - + public Long getInstanceId() { - return getId(); + return getId(); } - + @Override public void execute(){ - UserContext.current().setEventDetails("ISO Id: "+getId()); + UserContext.current().setEventDetails("ISO Id: "+getId()); boolean result = _templateService.deleteIso(this); if (result) { SuccessResponse response = new SuccessResponse(getCommandName()); diff --git a/api/src/com/cloud/api/commands/DeleteLBStickinessPolicyCmd.java b/api/src/com/cloud/api/commands/DeleteLBStickinessPolicyCmd.java index b889baebad5..dd7933000ea 100644 --- a/api/src/com/cloud/api/commands/DeleteLBStickinessPolicyCmd.java +++ b/api/src/com/cloud/api/commands/DeleteLBStickinessPolicyCmd.java @@ -105,11 +105,11 @@ public class DeleteLBStickinessPolicyCmd extends BaseAsyncCmd { StickinessPolicy policy = _entityMgr.findById(StickinessPolicy.class, getId()); if (policy == null) { - throw new InvalidParameterValueException("Unable to find LB stickiness rule: " + id); + throw new InvalidParameterValueException("Unable to find LB stickiness rule: " + id); } LoadBalancer lb = _lbService.findById(policy.getLoadBalancerId()); if (lb == null) { - throw new InvalidParameterValueException("Unable to find load balancer rule for stickiness rule: " + id); + throw new InvalidParameterValueException("Unable to find load balancer rule for stickiness rule: " + id); } return lb.getNetworkId(); } diff --git a/api/src/com/cloud/api/commands/DeleteLoadBalancerRuleCmd.java b/api/src/com/cloud/api/commands/DeleteLoadBalancerRuleCmd.java index c2d77f7ca74..5a00b2246c1 100644 --- a/api/src/com/cloud/api/commands/DeleteLoadBalancerRuleCmd.java +++ b/api/src/com/cloud/api/commands/DeleteLoadBalancerRuleCmd.java @@ -82,13 +82,13 @@ public class DeleteLoadBalancerRuleCmd extends BaseAsyncCmd { public String getEventDescription() { return "deleting load balancer: " + getId(); } - + @Override public void execute(){ UserContext.current().setEventDetails("Load balancer Id: "+getId()); boolean result = _firewallService.revokeRelatedFirewallRule(id, true); result = result && _lbService.deleteLoadBalancerRule(id, true); - + if (result) { SuccessResponse response = new SuccessResponse(getCommandName()); this.setResponseObject(response); @@ -96,7 +96,7 @@ public class DeleteLoadBalancerRuleCmd extends BaseAsyncCmd { throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to delete load balancer"); } } - + @Override public String getSyncObjType() { return BaseAsyncCmd.networkSyncObject; @@ -104,13 +104,13 @@ public class DeleteLoadBalancerRuleCmd extends BaseAsyncCmd { @Override public Long getSyncObjId() { - LoadBalancer lb = _lbService.findById(id); - if(lb == null){ - throw new InvalidParameterValueException("Unable to find load balancer rule: " + id); - } + LoadBalancer lb = _lbService.findById(id); + if(lb == null){ + throw new InvalidParameterValueException("Unable to find load balancer rule: " + id); + } return lb.getNetworkId(); } - + @Override public AsyncJob.Type getInstanceType() { return AsyncJob.Type.FirewallRule; diff --git a/api/src/com/cloud/api/commands/DeleteNetworkACLCmd.java b/api/src/com/cloud/api/commands/DeleteNetworkACLCmd.java index e5826766d57..1cd1e33c193 100644 --- a/api/src/com/cloud/api/commands/DeleteNetworkACLCmd.java +++ b/api/src/com/cloud/api/commands/DeleteNetworkACLCmd.java @@ -57,7 +57,7 @@ public class DeleteNetworkACLCmd extends BaseAsyncCmd { public Long getId() { return id; } - + ///////////////////////////////////////////////////// /////////////// API Implementation/////////////////// ///////////////////////////////////////////////////// @@ -65,7 +65,7 @@ public class DeleteNetworkACLCmd extends BaseAsyncCmd { public String getCommandName() { return s_name; } - + @Override public String getEventType() { return EventTypes.EVENT_FIREWALL_CLOSE; @@ -75,7 +75,7 @@ public class DeleteNetworkACLCmd extends BaseAsyncCmd { public String getEventDescription() { return ("Deleting Network ACL id=" + id); } - + @Override public long getEntityOwnerId() { if (ownerId == null) { @@ -88,12 +88,12 @@ public class DeleteNetworkACLCmd extends BaseAsyncCmd { } return ownerId; } - + @Override public void execute() throws ResourceUnavailableException { UserContext.current().setEventDetails("Network ACL Id: " + id); boolean result = _networkACLService.revokeNetworkACL(id, true); - + if (result) { SuccessResponse response = new SuccessResponse(getCommandName()); this.setResponseObject(response); @@ -101,8 +101,8 @@ public class DeleteNetworkACLCmd extends BaseAsyncCmd { throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to delete network ACL"); } } - - + + @Override public String getSyncObjType() { return BaseAsyncCmd.networkSyncObject; @@ -112,7 +112,7 @@ public class DeleteNetworkACLCmd extends BaseAsyncCmd { public Long getSyncObjId() { return _firewallService.getFirewallRule(id).getNetworkId(); } - + @Override public AsyncJob.Type getInstanceType() { return AsyncJob.Type.FirewallRule; diff --git a/api/src/com/cloud/api/commands/DeleteNetworkCmd.java b/api/src/com/cloud/api/commands/DeleteNetworkCmd.java index 4e4da1e9272..692fffe1510 100644 --- a/api/src/com/cloud/api/commands/DeleteNetworkCmd.java +++ b/api/src/com/cloud/api/commands/DeleteNetworkCmd.java @@ -62,7 +62,7 @@ public class DeleteNetworkCmd extends BaseAsyncCmd{ public String getCommandName() { return s_name; } - + @Override public void execute(){ UserContext.current().setEventDetails("Network Id: " + id); @@ -74,8 +74,8 @@ public class DeleteNetworkCmd extends BaseAsyncCmd{ throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to delete network"); } } - - + + @Override public String getSyncObjType() { return BaseAsyncCmd.networkSyncObject; @@ -85,17 +85,17 @@ public class DeleteNetworkCmd extends BaseAsyncCmd{ public Long getSyncObjId() { return id; } - + @Override public String getEventType() { return EventTypes.EVENT_NETWORK_DELETE; } - + @Override public String getEventDescription() { return "Deleting network: " + id; } - + @Override public long getEntityOwnerId() { Network network = _networkService.getNetwork(id); diff --git a/api/src/com/cloud/api/commands/DeleteNetworkOfferingCmd.java b/api/src/com/cloud/api/commands/DeleteNetworkOfferingCmd.java index 897ade0865f..8feede431fa 100644 --- a/api/src/com/cloud/api/commands/DeleteNetworkOfferingCmd.java +++ b/api/src/com/cloud/api/commands/DeleteNetworkOfferingCmd.java @@ -58,12 +58,12 @@ public class DeleteNetworkOfferingCmd extends BaseCmd{ public String getCommandName() { return s_name; } - + @Override public long getEntityOwnerId() { return Account.ACCOUNT_ID_SYSTEM; } - + @Override public void execute(){ boolean result = _configService.deleteNetworkOffering(this); diff --git a/api/src/com/cloud/api/commands/DeleteNetworkServiceProviderCmd.java b/api/src/com/cloud/api/commands/DeleteNetworkServiceProviderCmd.java index ecbf0c26a90..c30b2cbbbd1 100644 --- a/api/src/com/cloud/api/commands/DeleteNetworkServiceProviderCmd.java +++ b/api/src/com/cloud/api/commands/DeleteNetworkServiceProviderCmd.java @@ -41,7 +41,7 @@ public class DeleteNetworkServiceProviderCmd extends BaseAsyncCmd { ///////////////////////////////////////////////////// //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - + @IdentityMapper(entityTableName="physical_network_service_providers") @Parameter(name=ApiConstants.ID, type=CommandType.LONG, required=true, description="the ID of the network service provider") private Long id; @@ -64,7 +64,7 @@ public class DeleteNetworkServiceProviderCmd extends BaseAsyncCmd { public String getCommandName() { return s_name; } - + @Override public long getEntityOwnerId() { return Account.ACCOUNT_ID_SYSTEM; @@ -86,7 +86,7 @@ public class DeleteNetworkServiceProviderCmd extends BaseAsyncCmd { } catch (ConcurrentOperationException ex) { s_logger.warn("Exception: ", ex); throw new ServerApiException(BaseCmd.INTERNAL_ERROR, ex.getMessage()); - } + } } @@ -100,7 +100,7 @@ public class DeleteNetworkServiceProviderCmd extends BaseAsyncCmd { public String getEventDescription() { return "Deleting Physical network ServiceProvider: " + getId(); } - + @Override public AsyncJob.Type getInstanceType() { return AsyncJob.Type.PhysicalNetworkServiceProvider; diff --git a/api/src/com/cloud/api/commands/DeletePhysicalNetworkCmd.java b/api/src/com/cloud/api/commands/DeletePhysicalNetworkCmd.java index 2f0f5a8b097..0a036b81a50 100644 --- a/api/src/com/cloud/api/commands/DeletePhysicalNetworkCmd.java +++ b/api/src/com/cloud/api/commands/DeletePhysicalNetworkCmd.java @@ -62,7 +62,7 @@ public class DeletePhysicalNetworkCmd extends BaseAsyncCmd { public String getCommandName() { return s_name; } - + @Override public long getEntityOwnerId() { return Account.ACCOUNT_ID_SYSTEM; @@ -85,12 +85,12 @@ public class DeletePhysicalNetworkCmd extends BaseAsyncCmd { public String getEventDescription() { return "Deleting Physical network: " + getId(); } - + @Override public String getEventType() { return EventTypes.EVENT_PHYSICAL_NETWORK_DELETE; } - + @Override public AsyncJob.Type getInstanceType() { return AsyncJob.Type.PhysicalNetwork; diff --git a/api/src/com/cloud/api/commands/DeletePodCmd.java b/api/src/com/cloud/api/commands/DeletePodCmd.java index 3be838ba37c..ab718439660 100644 --- a/api/src/com/cloud/api/commands/DeletePodCmd.java +++ b/api/src/com/cloud/api/commands/DeletePodCmd.java @@ -57,7 +57,7 @@ public class DeletePodCmd extends BaseCmd { public String getCommandName() { return s_name; } - + @Override public long getEntityOwnerId() { return Account.ACCOUNT_ID_SYSTEM; diff --git a/api/src/com/cloud/api/commands/DeletePoolCmd.java b/api/src/com/cloud/api/commands/DeletePoolCmd.java index 687bb563630..b257bbdc577 100644 --- a/api/src/com/cloud/api/commands/DeletePoolCmd.java +++ b/api/src/com/cloud/api/commands/DeletePoolCmd.java @@ -41,7 +41,7 @@ public class DeletePoolCmd extends BaseCmd { @IdentityMapper(entityTableName="storage_pool") @Parameter(name = ApiConstants.ID, type = CommandType.LONG, required = true, description = "Storage pool id") private Long id; - + @Parameter(name = ApiConstants.FORCED, type = CommandType.BOOLEAN, required = false, description = "Force destroy storage pool " + "(force expunge volumes in Destroyed state as a part of pool removal)") private Boolean forced; @@ -53,7 +53,7 @@ public class DeletePoolCmd extends BaseCmd { public Long getId() { return id; } - + public boolean isForced() { return (forced != null) ? forced : false; } diff --git a/api/src/com/cloud/api/commands/DeletePortForwardingRuleCmd.java b/api/src/com/cloud/api/commands/DeletePortForwardingRuleCmd.java index 19112a7cd48..0ca9435628b 100644 --- a/api/src/com/cloud/api/commands/DeletePortForwardingRuleCmd.java +++ b/api/src/com/cloud/api/commands/DeletePortForwardingRuleCmd.java @@ -56,7 +56,7 @@ public class DeletePortForwardingRuleCmd extends BaseAsyncCmd { public Long getId() { return id; } - + ///////////////////////////////////////////////////// /////////////// API Implementation/////////////////// ///////////////////////////////////////////////////// @@ -64,7 +64,7 @@ public class DeletePortForwardingRuleCmd extends BaseAsyncCmd { public String getCommandName() { return s_name; } - + @Override public String getEventType() { return EventTypes.EVENT_NET_RULE_DELETE; @@ -74,7 +74,7 @@ public class DeletePortForwardingRuleCmd extends BaseAsyncCmd { public String getEventDescription() { return ("Deleting port forwarding rule for id=" + id); } - + @Override public long getEntityOwnerId() { if (ownerId == null) { @@ -84,18 +84,18 @@ public class DeletePortForwardingRuleCmd extends BaseAsyncCmd { } else { ownerId = _entityMgr.findById(PortForwardingRule.class, id).getAccountId(); } - + } return ownerId; } - + @Override public void execute(){ UserContext.current().setEventDetails("Rule Id: "+id); //revoke corresponding firewall rule first boolean result = _firewallService.revokeRelatedFirewallRule(id, true); result = result && _rulesService.revokePortForwardingRule(id, true); - + if (result) { SuccessResponse response = new SuccessResponse(getCommandName()); this.setResponseObject(response); @@ -103,8 +103,8 @@ public class DeletePortForwardingRuleCmd extends BaseAsyncCmd { throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to delete port forwarding rule"); } } - - + + @Override public String getSyncObjType() { return BaseAsyncCmd.networkSyncObject; @@ -114,7 +114,7 @@ public class DeletePortForwardingRuleCmd extends BaseAsyncCmd { public Long getSyncObjId() { return _rulesService.getPortForwardigRule(id).getNetworkId(); } - + @Override public AsyncJob.Type getInstanceType() { return AsyncJob.Type.FirewallRule; diff --git a/api/src/com/cloud/api/commands/DeletePrivateGatewayCmd.java b/api/src/com/cloud/api/commands/DeletePrivateGatewayCmd.java index 005b47165c1..1fac8083239 100644 --- a/api/src/com/cloud/api/commands/DeletePrivateGatewayCmd.java +++ b/api/src/com/cloud/api/commands/DeletePrivateGatewayCmd.java @@ -55,7 +55,7 @@ public class DeletePrivateGatewayCmd extends BaseAsyncCmd { public Long getId() { return id; } - + ///////////////////////////////////////////////////// /////////////// API Implementation/////////////////// ///////////////////////////////////////////////////// @@ -63,7 +63,7 @@ public class DeletePrivateGatewayCmd extends BaseAsyncCmd { public String getCommandName() { return s_name; } - + @Override public String getEventType() { return EventTypes.EVENT_PRIVATE_GATEWAY_DELETE; @@ -73,16 +73,16 @@ public class DeletePrivateGatewayCmd extends BaseAsyncCmd { public String getEventDescription() { return ("Deleting private gateway id=" + id); } - + @Override public long getEntityOwnerId() { return Account.ACCOUNT_ID_SYSTEM; } - + @Override public void execute() throws ResourceUnavailableException, ConcurrentOperationException { UserContext.current().setEventDetails("Network ACL Id: " + id); - boolean result = _vpcService.deleteVpcPrivateGateway(id); + boolean result = _vpcService.deleteVpcPrivateGateway(id); if (result) { SuccessResponse response = new SuccessResponse(getCommandName()); this.setResponseObject(response); @@ -90,8 +90,8 @@ public class DeletePrivateGatewayCmd extends BaseAsyncCmd { throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to delete private gateway"); } } - - + + @Override public String getSyncObjType() { return BaseAsyncCmd.vpcSyncObject; @@ -105,10 +105,10 @@ public class DeletePrivateGatewayCmd extends BaseAsyncCmd { } return gateway.getVpcId(); } - + @Override public AsyncJob.Type getInstanceType() { return AsyncJob.Type.PrivateGateway; } - -} \ No newline at end of file + +} diff --git a/api/src/com/cloud/api/commands/DeleteSSHKeyPairCmd.java b/api/src/com/cloud/api/commands/DeleteSSHKeyPairCmd.java index 029915c4a91..a39ceb18824 100644 --- a/api/src/com/cloud/api/commands/DeleteSSHKeyPairCmd.java +++ b/api/src/com/cloud/api/commands/DeleteSSHKeyPairCmd.java @@ -27,68 +27,68 @@ import com.cloud.api.response.SuccessResponse; import com.cloud.user.Account; import com.cloud.user.UserContext; -@Implementation(description="Deletes a keypair by name", responseObject=SuccessResponse.class) +@Implementation(description="Deletes a keypair by name", responseObject=SuccessResponse.class) public class DeleteSSHKeyPairCmd extends BaseCmd { public static final Logger s_logger = Logger.getLogger(CreateSSHKeyPairCmd.class.getName()); private static final String s_name = "deletesshkeypairresponse"; - - + + ///////////////////////////////////////////////////// //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - - @Parameter(name=ApiConstants.NAME, type=CommandType.STRING, required=true, description="Name of the keypair") - private String name; - + + @Parameter(name=ApiConstants.NAME, type=CommandType.STRING, required=true, description="Name of the keypair") + private String name; + @Parameter(name=ApiConstants.ACCOUNT, type=CommandType.STRING, description="the account associated with the keypair. Must be used with the domainId parameter.") private String accountName; - + @IdentityMapper(entityTableName="domain") @Parameter(name=ApiConstants.DOMAIN_ID, type=CommandType.LONG, description="the domain ID associated with the keypair") private Long domainId; - + @IdentityMapper(entityTableName="projects") @Parameter(name=ApiConstants.PROJECT_ID, type=CommandType.LONG, description="the project associated with keypair") private Long projectId; - + ///////////////////////////////////////////////////// /////////////////// Accessors /////////////////////// - ///////////////////////////////////////////////////// - - public String getName() { - return name; - } - - public String getAccountName() { - return accountName; + ///////////////////////////////////////////////////// + + public String getName() { + return name; + } + + public String getAccountName() { + return accountName; } public Long getDomainId() { return domainId; } - + public Long getProjectId() { return projectId; } ///////////////////////////////////////////////////// /////////////// API Implementation/////////////////// - ///////////////////////////////////////////////////// + ///////////////////////////////////////////////////// @Override - public void execute() { - boolean result = _mgr.deleteSSHKeyPair(this); - SuccessResponse response = new SuccessResponse(getCommandName()); - response.setSuccess(result); - this.setResponseObject(response); - } + public void execute() { + boolean result = _mgr.deleteSSHKeyPair(this); + SuccessResponse response = new SuccessResponse(getCommandName()); + response.setSuccess(result); + this.setResponseObject(response); + } - @Override - public String getCommandName() { - return s_name; - } - - @Override + @Override + public String getCommandName() { + return s_name; + } + + @Override public long getEntityOwnerId() { Account account = UserContext.current().getCaller(); if ((account == null) || isAdmin(account.getType())) { diff --git a/api/src/com/cloud/api/commands/DeleteSecurityGroupCmd.java b/api/src/com/cloud/api/commands/DeleteSecurityGroupCmd.java index 20863695101..27d1270c252 100644 --- a/api/src/com/cloud/api/commands/DeleteSecurityGroupCmd.java +++ b/api/src/com/cloud/api/commands/DeleteSecurityGroupCmd.java @@ -44,7 +44,7 @@ public class DeleteSecurityGroupCmd extends BaseCmd { @IdentityMapper(entityTableName="domain") @Parameter(name=ApiConstants.DOMAIN_ID, type=CommandType.LONG, description="the domain ID of account owning the security group") private Long domainId; - + @IdentityMapper(entityTableName="projects") @Parameter(name=ApiConstants.PROJECT_ID, type=CommandType.LONG, description="the project of the security group") private Long projectId; @@ -52,7 +52,7 @@ public class DeleteSecurityGroupCmd extends BaseCmd { @IdentityMapper(entityTableName="security_group") @Parameter(name=ApiConstants.ID, type=CommandType.LONG, description="The ID of the security group. Mutually exclusive with name parameter") private Long id; - + @Parameter(name=ApiConstants.NAME, type=CommandType.STRING, description="The ID of the security group. Mutually exclusive with id parameter") private String name; @@ -68,7 +68,7 @@ public class DeleteSecurityGroupCmd extends BaseCmd { public Long getDomainId() { return domainId; } - + public Long getProjectId() { return projectId; } @@ -77,18 +77,18 @@ public class DeleteSecurityGroupCmd extends BaseCmd { if (id != null && name != null) { throw new InvalidParameterValueException("name and id parameters are mutually exclusive"); } - + if (name != null) { id = _responseGenerator.getSecurityGroupId(name, getEntityOwnerId()); if (id == null) { throw new InvalidParameterValueException("Unable to find security group by name " + name + " for the account id=" + getEntityOwnerId()); } } - + if (id == null) { throw new InvalidParameterValueException("Either id or name parameter is requred by deleteSecurityGroup command"); } - + return id; } @@ -102,17 +102,17 @@ public class DeleteSecurityGroupCmd extends BaseCmd { public String getCommandName() { return s_name; } - + @Override public long getEntityOwnerId() { Long accountId = finalyzeAccountId(accountName, domainId, projectId, true); if (accountId == null) { return UserContext.current().getCaller().getId(); } - + return accountId; } - + @Override public void execute(){ try{ diff --git a/api/src/com/cloud/api/commands/DeleteServiceOfferingCmd.java b/api/src/com/cloud/api/commands/DeleteServiceOfferingCmd.java index 1e3ef863349..e2d0d510177 100644 --- a/api/src/com/cloud/api/commands/DeleteServiceOfferingCmd.java +++ b/api/src/com/cloud/api/commands/DeleteServiceOfferingCmd.java @@ -58,12 +58,12 @@ public class DeleteServiceOfferingCmd extends BaseCmd{ public String getCommandName() { return s_name; } - + @Override public long getEntityOwnerId() { return Account.ACCOUNT_ID_SYSTEM; } - + @Override public void execute(){ boolean result = _configService.deleteServiceOffering(this); diff --git a/api/src/com/cloud/api/commands/DeleteSnapshotCmd.java b/api/src/com/cloud/api/commands/DeleteSnapshotCmd.java index 33d76f83e46..df0fa56b5a7 100644 --- a/api/src/com/cloud/api/commands/DeleteSnapshotCmd.java +++ b/api/src/com/cloud/api/commands/DeleteSnapshotCmd.java @@ -82,13 +82,13 @@ public class DeleteSnapshotCmd extends BaseAsyncCmd { public String getEventDescription() { return "deleting snapshot: " + getId(); } - + public AsyncJob.Type getInstanceType() { - return AsyncJob.Type.Snapshot; + return AsyncJob.Type.Snapshot; } - + public Long getInstanceId() { - return getId(); + return getId(); } @Override diff --git a/api/src/com/cloud/api/commands/DeleteSnapshotPoliciesCmd.java b/api/src/com/cloud/api/commands/DeleteSnapshotPoliciesCmd.java index 5ff9d4d049c..96f9de05c48 100755 --- a/api/src/com/cloud/api/commands/DeleteSnapshotPoliciesCmd.java +++ b/api/src/com/cloud/api/commands/DeleteSnapshotPoliciesCmd.java @@ -34,7 +34,7 @@ public class DeleteSnapshotPoliciesCmd extends BaseCmd { public static final Logger s_logger = Logger.getLogger(DeleteSnapshotPoliciesCmd.class.getName()); private static final String s_name = "deletesnapshotpoliciesresponse"; - + ///////////////////////////////////////////////////// //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// @@ -69,7 +69,7 @@ public class DeleteSnapshotPoliciesCmd extends BaseCmd { public String getCommandName() { return s_name; } - + @Override public long getEntityOwnerId() { return Account.ACCOUNT_ID_SYSTEM; diff --git a/api/src/com/cloud/api/commands/DeleteStorageNetworkIpRangeCmd.java b/api/src/com/cloud/api/commands/DeleteStorageNetworkIpRangeCmd.java index 9ad8a13d7b4..6b50add9b45 100755 --- a/api/src/com/cloud/api/commands/DeleteStorageNetworkIpRangeCmd.java +++ b/api/src/com/cloud/api/commands/DeleteStorageNetworkIpRangeCmd.java @@ -35,10 +35,10 @@ import com.cloud.user.Account; @Implementation(description="Deletes a storage network IP Range.", responseObject=SuccessResponse.class, since="3.0.0") public class DeleteStorageNetworkIpRangeCmd extends BaseAsyncCmd { - public static final Logger s_logger = Logger.getLogger(DeleteStorageNetworkIpRangeCmd.class); - - private static final String s_name = "deletestoragenetworkiprangeresponse"; - + public static final Logger s_logger = Logger.getLogger(DeleteStorageNetworkIpRangeCmd.class); + + private static final String s_name = "deletestoragenetworkiprangeresponse"; + ///////////////////////////////////////////////////// //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// @@ -46,7 +46,7 @@ public class DeleteStorageNetworkIpRangeCmd extends BaseAsyncCmd { @IdentityMapper(entityTableName="dc_storage_network_ip_range") @Parameter(name=ApiConstants.ID, type=CommandType.LONG, required=true, description="the uuid of the storage network ip range") private Long id; - + ///////////////////////////////////////////////////// /////////////////// Accessors /////////////////////// ///////////////////////////////////////////////////// @@ -54,38 +54,38 @@ public class DeleteStorageNetworkIpRangeCmd extends BaseAsyncCmd { public Long getId() { return id; } - - @Override - public String getEventType() { - return EventTypes.EVENT_STORAGE_IP_RANGE_DELETE; - } - @Override - public String getEventDescription() { - return "Deleting storage ip range " + getId(); - } + @Override + public String getEventType() { + return EventTypes.EVENT_STORAGE_IP_RANGE_DELETE; + } - @Override - public void execute() throws ResourceUnavailableException, InsufficientCapacityException, ServerApiException, ConcurrentOperationException, - ResourceAllocationException { - try { - _storageNetworkService.deleteIpRange(this); + @Override + public String getEventDescription() { + return "Deleting storage ip range " + getId(); + } + + @Override + public void execute() throws ResourceUnavailableException, InsufficientCapacityException, ServerApiException, ConcurrentOperationException, + ResourceAllocationException { + try { + _storageNetworkService.deleteIpRange(this); SuccessResponse response = new SuccessResponse(getCommandName()); this.setResponseObject(response); - } catch (Exception e) { - s_logger.warn("Failed to delete storage network ip range " + getId(), e); - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, e.getMessage()); - } - } + } catch (Exception e) { + s_logger.warn("Failed to delete storage network ip range " + getId(), e); + throw new ServerApiException(BaseCmd.INTERNAL_ERROR, e.getMessage()); + } + } - @Override - public String getCommandName() { - return s_name; - } + @Override + public String getCommandName() { + return s_name; + } - @Override - public long getEntityOwnerId() { - return Account.ACCOUNT_ID_SYSTEM; - } + @Override + public long getEntityOwnerId() { + return Account.ACCOUNT_ID_SYSTEM; + } } diff --git a/api/src/com/cloud/api/commands/DeleteTagsCmd.java b/api/src/com/cloud/api/commands/DeleteTagsCmd.java index 25f62945212..81a76e5ab8e 100644 --- a/api/src/com/cloud/api/commands/DeleteTagsCmd.java +++ b/api/src/com/cloud/api/commands/DeleteTagsCmd.java @@ -43,14 +43,14 @@ public class DeleteTagsCmd extends BaseAsyncCmd{ // /////////////////////////////////////////////////// // ////////////// API parameters ///////////////////// // /////////////////////////////////////////////////// - + @Parameter(name = ApiConstants.TAGS, type = CommandType.MAP, description = "Delete tags matching key/value pairs") private Map tag; - + @Parameter(name=ApiConstants.RESOURCE_TYPE, type=CommandType.STRING, required=true, description="Delete tag by resource type") private String resourceType; - - @Parameter(name=ApiConstants.RESOURCE_IDS, type=CommandType.LIST, required=true, + + @Parameter(name=ApiConstants.RESOURCE_IDS, type=CommandType.LIST, required=true, collectionType=CommandType.STRING, description="Delete tags for resource id(s)") private List resourceIds; @@ -58,11 +58,11 @@ public class DeleteTagsCmd extends BaseAsyncCmd{ /////////////////// Accessors /////////////////////// ///////////////////////////////////////////////////// - + public TaggedResourceType getResourceType(){ return _taggedResourceService.getResourceType(resourceType); - } - + } + public Map getTags() { Map tagsMap = null; if (tag != null && !tag.isEmpty()) { @@ -78,7 +78,7 @@ public class DeleteTagsCmd extends BaseAsyncCmd{ } return tagsMap; } - + public List getResourceIds() { return resourceIds; } @@ -101,7 +101,7 @@ public class DeleteTagsCmd extends BaseAsyncCmd{ @Override public void execute() { boolean success = _taggedResourceService.deleteTags(getResourceIds(), getResourceType(), getTags()); - + if (success) { SuccessResponse response = new SuccessResponse(getCommandName()); this.setResponseObject(response); diff --git a/api/src/com/cloud/api/commands/DeleteTemplateCmd.java b/api/src/com/cloud/api/commands/DeleteTemplateCmd.java index 49881e20835..e3c995fa1cd 100755 --- a/api/src/com/cloud/api/commands/DeleteTemplateCmd.java +++ b/api/src/com/cloud/api/commands/DeleteTemplateCmd.java @@ -34,7 +34,7 @@ import com.cloud.user.UserContext; @Implementation(responseObject=SuccessResponse.class, description="Deletes a template from the system. All virtual machines using the deleted template will not be affected.") public class DeleteTemplateCmd extends BaseAsyncCmd { - public static final Logger s_logger = Logger.getLogger(DeleteTemplateCmd.class.getName()); + public static final Logger s_logger = Logger.getLogger(DeleteTemplateCmd.class.getName()); private static final String s_name = "deletetemplateresponse"; ///////////////////////////////////////////////////// @@ -66,12 +66,12 @@ public class DeleteTemplateCmd extends BaseAsyncCmd { ///////////////////////////////////////////////////// /////////////// API Implementation/////////////////// ///////////////////////////////////////////////////// - + @Override public String getCommandName() { return s_name; } - + public static String getStaticName() { return s_name; } @@ -95,15 +95,15 @@ public class DeleteTemplateCmd extends BaseAsyncCmd { public String getEventDescription() { return "Deleting template " + getId(); } - + public AsyncJob.Type getInstanceType() { - return AsyncJob.Type.Template; + return AsyncJob.Type.Template; } - + public Long getInstanceId() { - return getId(); + return getId(); } - + @Override public void execute(){ UserContext.current().setEventDetails("Template Id: "+getId()); diff --git a/api/src/com/cloud/api/commands/DeleteTrafficTypeCmd.java b/api/src/com/cloud/api/commands/DeleteTrafficTypeCmd.java index b1fbca5d9e6..1a67e8469ff 100644 --- a/api/src/com/cloud/api/commands/DeleteTrafficTypeCmd.java +++ b/api/src/com/cloud/api/commands/DeleteTrafficTypeCmd.java @@ -42,16 +42,16 @@ public class DeleteTrafficTypeCmd extends BaseAsyncCmd { @IdentityMapper(entityTableName="physical_network_traffic_types") @Parameter(name=ApiConstants.ID, type=CommandType.LONG, required=true, description="traffic type id") private Long id; - + ///////////////////////////////////////////////////// /////////////////// Accessors /////////////////////// ///////////////////////////////////////////////////// - + public Long getId() { return id; } - + ///////////////////////////////////////////////////// /////////////// API Implementation/////////////////// ///////////////////////////////////////////////////// @@ -60,12 +60,12 @@ public class DeleteTrafficTypeCmd extends BaseAsyncCmd { public String getCommandName() { return s_name; } - + @Override public long getEntityOwnerId() { return Account.ACCOUNT_ID_SYSTEM; } - + @Override public void execute(){ boolean result = _networkService.deletePhysicalNetworkTrafficType(getId()); @@ -81,7 +81,7 @@ public class DeleteTrafficTypeCmd extends BaseAsyncCmd { public String getEventDescription() { return "Deleting Traffic Type: " + getId(); } - + @Override public String getEventType() { return EventTypes.EVENT_TRAFFIC_TYPE_DELETE; diff --git a/api/src/com/cloud/api/commands/DeleteUserCmd.java b/api/src/com/cloud/api/commands/DeleteUserCmd.java index 2b6e3c97b30..0f913e8eb23 100644 --- a/api/src/com/cloud/api/commands/DeleteUserCmd.java +++ b/api/src/com/cloud/api/commands/DeleteUserCmd.java @@ -59,7 +59,7 @@ public class DeleteUserCmd extends BaseCmd { public String getCommandName() { return s_name; } - + @Override public long getEntityOwnerId() { User user = _entityMgr.findById(User.class, getId()); @@ -69,7 +69,7 @@ public class DeleteUserCmd extends BaseCmd { return Account.ACCOUNT_ID_SYSTEM; // no account info given, parent this command to SYSTEM so ERROR events are tracked } - + @Override public void execute(){ UserContext.current().setEventDetails("UserId: "+getId()); @@ -81,4 +81,4 @@ public class DeleteUserCmd extends BaseCmd { throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to delete user"); } } -} \ No newline at end of file +} diff --git a/api/src/com/cloud/api/commands/DeleteVMGroupCmd.java b/api/src/com/cloud/api/commands/DeleteVMGroupCmd.java index c41a78d7568..f9159e26eb9 100644 --- a/api/src/com/cloud/api/commands/DeleteVMGroupCmd.java +++ b/api/src/com/cloud/api/commands/DeleteVMGroupCmd.java @@ -57,7 +57,7 @@ public class DeleteVMGroupCmd extends BaseCmd{ public String getCommandName() { return s_name; } - + @Override public long getEntityOwnerId() { InstanceGroup group = _entityMgr.findById(InstanceGroup.class, getId()); @@ -67,7 +67,7 @@ public class DeleteVMGroupCmd extends BaseCmd{ return Account.ACCOUNT_ID_SYSTEM; // no account info given, parent this command to SYSTEM so ERROR events are tracked } - + @Override public void execute(){ boolean result = _userVmService.deleteVmGroup(this); diff --git a/api/src/com/cloud/api/commands/DeleteVPCOfferingCmd.java b/api/src/com/cloud/api/commands/DeleteVPCOfferingCmd.java index 3e4806b23f2..2944cf3225b 100644 --- a/api/src/com/cloud/api/commands/DeleteVPCOfferingCmd.java +++ b/api/src/com/cloud/api/commands/DeleteVPCOfferingCmd.java @@ -60,12 +60,12 @@ public class DeleteVPCOfferingCmd extends BaseAsyncCmd{ public String getCommandName() { return s_name; } - + @Override public long getEntityOwnerId() { return Account.ACCOUNT_ID_SYSTEM; } - + @Override public void execute(){ boolean result = _vpcService.deleteVpcOffering(getId()); @@ -76,7 +76,7 @@ public class DeleteVPCOfferingCmd extends BaseAsyncCmd{ throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to delete VPC offering"); } } - + @Override public String getEventType(){ return EventTypes.EVENT_VPC_OFFERING_DELETE; @@ -87,6 +87,6 @@ public class DeleteVPCOfferingCmd extends BaseAsyncCmd{ public String getEventDescription() { return "Deleting VPC offering id=" + getId(); } - - + + } diff --git a/api/src/com/cloud/api/commands/DeleteVlanIpRangeCmd.java b/api/src/com/cloud/api/commands/DeleteVlanIpRangeCmd.java index be4498cdb13..9f58e3917e6 100644 --- a/api/src/com/cloud/api/commands/DeleteVlanIpRangeCmd.java +++ b/api/src/com/cloud/api/commands/DeleteVlanIpRangeCmd.java @@ -29,7 +29,7 @@ import com.cloud.user.Account; @Implementation(description="Creates a VLAN IP range.", responseObject=SuccessResponse.class) public class DeleteVlanIpRangeCmd extends BaseCmd { - public static final Logger s_logger = Logger.getLogger(DeleteVlanIpRangeCmd.class.getName()); + public static final Logger s_logger = Logger.getLogger(DeleteVlanIpRangeCmd.class.getName()); private static final String s_name = "deletevlaniprangeresponse"; @@ -57,12 +57,12 @@ public class DeleteVlanIpRangeCmd extends BaseCmd { public String getCommandName() { return s_name; } - + @Override public long getEntityOwnerId() { return Account.ACCOUNT_ID_SYSTEM; } - + @Override public void execute(){ boolean result = _configService.deleteVlanIpRange(this); @@ -73,4 +73,4 @@ public class DeleteVlanIpRangeCmd extends BaseCmd { throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to delete vlan ip range"); } } -} \ No newline at end of file +} diff --git a/api/src/com/cloud/api/commands/DeleteVolumeCmd.java b/api/src/com/cloud/api/commands/DeleteVolumeCmd.java index 495fb2ec092..7692cae1e2d 100644 --- a/api/src/com/cloud/api/commands/DeleteVolumeCmd.java +++ b/api/src/com/cloud/api/commands/DeleteVolumeCmd.java @@ -32,7 +32,7 @@ import com.cloud.user.UserContext; @Implementation(description="Deletes a detached disk volume.", responseObject=SuccessResponse.class) public class DeleteVolumeCmd extends BaseCmd { - public static final Logger s_logger = Logger.getLogger(DeleteVolumeCmd.class.getName()); + public static final Logger s_logger = Logger.getLogger(DeleteVolumeCmd.class.getName()); private static final String s_name = "deletevolumeresponse"; ///////////////////////////////////////////////////// @@ -63,9 +63,9 @@ public class DeleteVolumeCmd extends BaseCmd { } public static String getResultObjectName() { - return "volume"; + return "volume"; } - + @Override public long getEntityOwnerId() { Volume volume = _entityMgr.findById(Volume.class, getId()); @@ -75,7 +75,7 @@ public class DeleteVolumeCmd extends BaseCmd { return Account.ACCOUNT_ID_SYSTEM; // no account info given, parent this command to SYSTEM so ERROR events are tracked } - + @Override public void execute() throws ConcurrentOperationException { UserContext.current().setEventDetails("Volume Id: "+getId()); diff --git a/api/src/com/cloud/api/commands/DeleteZoneCmd.java b/api/src/com/cloud/api/commands/DeleteZoneCmd.java index fa76367cd9c..5a61a930dc4 100644 --- a/api/src/com/cloud/api/commands/DeleteZoneCmd.java +++ b/api/src/com/cloud/api/commands/DeleteZoneCmd.java @@ -60,7 +60,7 @@ public class DeleteZoneCmd extends BaseCmd { public String getCommandName() { return s_name; } - + @Override public long getEntityOwnerId() { return Account.ACCOUNT_ID_SYSTEM; @@ -68,8 +68,8 @@ public class DeleteZoneCmd extends BaseCmd { @Override public void execute(){ - UserContext.current().setEventDetails("Zone Id: "+getId()); - boolean result = _configService.deleteZone(this); + UserContext.current().setEventDetails("Zone Id: "+getId()); + boolean result = _configService.deleteZone(this); if (result) { SuccessResponse response = new SuccessResponse(getCommandName()); this.setResponseObject(response); diff --git a/api/src/com/cloud/api/commands/DestroyConsoleProxyCmd.java b/api/src/com/cloud/api/commands/DestroyConsoleProxyCmd.java index c9a1043a98a..7e5db636cc2 100644 --- a/api/src/com/cloud/api/commands/DestroyConsoleProxyCmd.java +++ b/api/src/com/cloud/api/commands/DestroyConsoleProxyCmd.java @@ -31,10 +31,10 @@ import com.cloud.user.UserContext; @Implementation(description="Destroys console proxy", responseObject=SuccessResponse.class) public class DestroyConsoleProxyCmd extends BaseAsyncCmd { - public static final Logger s_logger = Logger.getLogger(DestroyConsoleProxyCmd.class.getName()); + public static final Logger s_logger = Logger.getLogger(DestroyConsoleProxyCmd.class.getName()); private static final String s_name = "destroyconsoleproxyresponse"; - + ///////////////////////////////////////////////////// //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// @@ -80,7 +80,7 @@ public class DestroyConsoleProxyCmd extends BaseAsyncCmd { public String getEventDescription() { return "destroying console proxy: " + getId(); } - + @Override public void execute(){ boolean result = _consoleProxyService.destroyConsoleProxy(this); diff --git a/api/src/com/cloud/api/commands/DestroySystemVmCmd.java b/api/src/com/cloud/api/commands/DestroySystemVmCmd.java index 3b0232e0a5c..9f2abbe4b85 100644 --- a/api/src/com/cloud/api/commands/DestroySystemVmCmd.java +++ b/api/src/com/cloud/api/commands/DestroySystemVmCmd.java @@ -35,13 +35,13 @@ import com.cloud.vm.VirtualMachine; @Implementation(responseObject=SystemVmResponse.class, description="Destroyes a system virtual machine.") public class DestroySystemVmCmd extends BaseAsyncCmd { public static final Logger s_logger = Logger.getLogger(DestroySystemVmCmd.class.getName()); - + private static final String s_name = "destroysystemvmresponse"; @IdentityMapper(entityTableName="vm_instance") @Parameter(name=ApiConstants.ID, type=CommandType.LONG, required=true, description="The ID of the system virtual machine") private Long id; - + public Long getId() { return id; } @@ -50,9 +50,9 @@ public class DestroySystemVmCmd extends BaseAsyncCmd { public String getCommandName() { return s_name; } - + public static String getResultObjectName() { - return "systemvm"; + return "systemvm"; } @Override @@ -75,22 +75,22 @@ public class DestroySystemVmCmd extends BaseAsyncCmd { return EventTypes.EVENT_SSVM_DESTROY; } } - + @Override public String getEventDescription() { return "destroying system vm: " + getId(); } - + @Override public AsyncJob.Type getInstanceType() { return AsyncJob.Type.SystemVm; } - + @Override public Long getInstanceId() { return getId(); } - + @Override public void execute(){ UserContext.current().setEventDetails("Vm Id: "+getId()); diff --git a/api/src/com/cloud/api/commands/DetachIsoCmd.java b/api/src/com/cloud/api/commands/DetachIsoCmd.java index 4bdc9ddce4d..954c5f1e9e9 100755 --- a/api/src/com/cloud/api/commands/DetachIsoCmd.java +++ b/api/src/com/cloud/api/commands/DetachIsoCmd.java @@ -69,7 +69,7 @@ public class DetachIsoCmd extends BaseAsyncCmd { return vm.getAccountId(); } else { throw new InvalidParameterValueException("Unable to find vm by id " + getVirtualMachineId()); - } + } } @Override @@ -81,13 +81,13 @@ public class DetachIsoCmd extends BaseAsyncCmd { public String getEventDescription() { return "detaching ISO from vm: " + getVirtualMachineId(); } - + @Override public void execute(){ boolean result = _templateService.detachIso(virtualMachineId); if (result) { - UserVm userVm = _entityMgr.findById(UserVm.class, virtualMachineId); - UserVmResponse response = _responseGenerator.createUserVmResponse("virtualmachine", userVm).get(0); + UserVm userVm = _entityMgr.findById(UserVm.class, virtualMachineId); + UserVmResponse response = _responseGenerator.createUserVmResponse("virtualmachine", userVm).get(0); response.setResponseName(DeployVMCmd.getResultObjectName()); this.setResponseObject(response); } else { diff --git a/api/src/com/cloud/api/commands/DetachVolumeCmd.java b/api/src/com/cloud/api/commands/DetachVolumeCmd.java index d086159bd0c..377bc0e7f97 100755 --- a/api/src/com/cloud/api/commands/DetachVolumeCmd.java +++ b/api/src/com/cloud/api/commands/DetachVolumeCmd.java @@ -35,7 +35,7 @@ import com.cloud.uservm.UserVm; @Implementation(description="Detaches a disk volume from a virtual machine.", responseObject=VolumeResponse.class) public class DetachVolumeCmd extends BaseAsyncCmd { - public static final Logger s_logger = Logger.getLogger(DetachVolumeCmd.class.getName()); + public static final Logger s_logger = Logger.getLogger(DetachVolumeCmd.class.getName()); private static final String s_name = "detachvolumeresponse"; ///////////////////////////////////////////////////// @@ -77,17 +77,17 @@ public class DetachVolumeCmd extends BaseAsyncCmd { public String getCommandName() { return s_name; } - + public static String getResultObjectName() { - return "volume"; + return "volume"; } - + public AsyncJob.Type getInstanceType() { - return AsyncJob.Type.Volume; + return AsyncJob.Type.Volume; } - + public Long getInstanceId() { - return getId(); + return getId(); } @Override @@ -139,4 +139,4 @@ public class DetachVolumeCmd extends BaseAsyncCmd { throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to detach volume"); } } -} \ No newline at end of file +} diff --git a/api/src/com/cloud/api/commands/DisableAccountCmd.java b/api/src/com/cloud/api/commands/DisableAccountCmd.java index 539eaa56bc8..669378665ed 100644 --- a/api/src/com/cloud/api/commands/DisableAccountCmd.java +++ b/api/src/com/cloud/api/commands/DisableAccountCmd.java @@ -35,7 +35,7 @@ import com.cloud.user.UserContext; @Implementation(description="Disables an account", responseObject=AccountResponse.class) public class DisableAccountCmd extends BaseAsyncCmd { - public static final Logger s_logger = Logger.getLogger(DisableAccountCmd.class.getName()); + public static final Logger s_logger = Logger.getLogger(DisableAccountCmd.class.getName()); private static final String s_name = "disableaccountresponse"; ///////////////////////////////////////////////////// @@ -44,7 +44,7 @@ public class DisableAccountCmd extends BaseAsyncCmd { @IdentityMapper(entityTableName="account") @Parameter(name=ApiConstants.ID, type=CommandType.LONG, description="Account id") private Long id; - + @Parameter(name=ApiConstants.ACCOUNT, type=CommandType.STRING, description="Disables specified account.") private String accountName; @@ -62,7 +62,7 @@ public class DisableAccountCmd extends BaseAsyncCmd { public Long getId() { return id; } - + public String getAccountName() { return accountName; } @@ -91,7 +91,7 @@ public class DisableAccountCmd extends BaseAsyncCmd { if (account != null) { return account.getAccountId(); } - + account = _accountService.getActiveAccountByName(getAccountName(), getDomainId()); if (account != null) { return account.getAccountId(); @@ -108,11 +108,11 @@ public class DisableAccountCmd extends BaseAsyncCmd { @Override public void execute() throws ConcurrentOperationException, ResourceUnavailableException{ UserContext.current().setEventDetails("Account Name: "+getAccountName()+", Domain Id:"+getDomainId()); - Account result = null; - if(lockRequested) - result = _accountService.lockAccount(getAccountName(), getDomainId(), getId()); - else - result = _accountService.disableAccount(getAccountName(), getDomainId(), getId()); + Account result = null; + if(lockRequested) + result = _accountService.lockAccount(getAccountName(), getDomainId(), getId()); + else + result = _accountService.disableAccount(getAccountName(), getDomainId(), getId()); if (result != null){ AccountResponse response = _responseGenerator.createAccountResponse(result); response.setResponseName(getCommandName()); @@ -121,7 +121,7 @@ public class DisableAccountCmd extends BaseAsyncCmd { throw new ServerApiException(BaseCmd.INTERNAL_ERROR, lockRequested == true ? "Failed to lock account" : "Failed to disable account" ); } } - + @Override public AsyncJob.Type getInstanceType() { return AsyncJob.Type.Account; diff --git a/api/src/com/cloud/api/commands/DisableStaticNatCmd.java b/api/src/com/cloud/api/commands/DisableStaticNatCmd.java index d594991ed25..10c77c6ed3e 100644 --- a/api/src/com/cloud/api/commands/DisableStaticNatCmd.java +++ b/api/src/com/cloud/api/commands/DisableStaticNatCmd.java @@ -45,7 +45,7 @@ public class DisableStaticNatCmd extends BaseAsyncCmd { @IdentityMapper(entityTableName="user_ip_address") @Parameter(name=ApiConstants.IP_ADDRESS_ID, type=CommandType.LONG, required=true, description="the public IP address id for which static nat feature is being disableed") private Long ipAddressId; - + ///////////////////////////////////////////////////// /////////////////// Accessors /////////////////////// ///////////////////////////////////////////////////// @@ -53,7 +53,7 @@ public class DisableStaticNatCmd extends BaseAsyncCmd { public Long getIpAddress() { return ipAddressId; } - + ///////////////////////////////////////////////////// /////////////// API Implementation/////////////////// ///////////////////////////////////////////////////// @@ -61,7 +61,7 @@ public class DisableStaticNatCmd extends BaseAsyncCmd { public String getCommandName() { return s_name; } - + @Override public String getEventType() { return EventTypes.EVENT_DISABLE_STATIC_NAT; @@ -71,16 +71,16 @@ public class DisableStaticNatCmd extends BaseAsyncCmd { public String getEventDescription() { return ("Disabling static nat for ip id=" + ipAddressId); } - + @Override public long getEntityOwnerId() { return _entityMgr.findById(IpAddress.class, ipAddressId).getAccountId(); } - + @Override public void execute() throws ResourceUnavailableException, NetworkRuleConflictException, InsufficientAddressCapacityException { boolean result = _rulesService.disableStaticNat(ipAddressId); - + if (result) { SuccessResponse response = new SuccessResponse(getCommandName()); this.setResponseObject(response); @@ -88,8 +88,8 @@ public class DisableStaticNatCmd extends BaseAsyncCmd { throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to disable static nat"); } } - - + + @Override public String getSyncObjType() { return BaseAsyncCmd.networkSyncObject; diff --git a/api/src/com/cloud/api/commands/DisableUserCmd.java b/api/src/com/cloud/api/commands/DisableUserCmd.java index 9a5b6149a32..c4997c2169b 100644 --- a/api/src/com/cloud/api/commands/DisableUserCmd.java +++ b/api/src/com/cloud/api/commands/DisableUserCmd.java @@ -35,7 +35,7 @@ import com.cloud.user.UserContext; @Implementation(description="Disables a user account", responseObject=UserResponse.class) public class DisableUserCmd extends BaseAsyncCmd { - public static final Logger s_logger = Logger.getLogger(DisableUserCmd.class.getName()); + public static final Logger s_logger = Logger.getLogger(DisableUserCmd.class.getName()); private static final String s_name = "disableuserresponse"; ///////////////////////////////////////////////////// @@ -83,20 +83,20 @@ public class DisableUserCmd extends BaseAsyncCmd { return "disabling user: " + getId(); } - + @Override public void execute(){ UserContext.current().setEventDetails("UserId: "+getId()); UserAccount user = _accountService.disableUser(getId()); if (user != null){ UserResponse response = _responseGenerator.createUserResponse(user); - response.setResponseName(getCommandName()); + response.setResponseName(getCommandName()); this.setResponseObject(response); } else { throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to disable user"); } } - + @Override public AsyncJob.Type getInstanceType() { return AsyncJob.Type.User; diff --git a/api/src/com/cloud/api/commands/DisassociateIPAddrCmd.java b/api/src/com/cloud/api/commands/DisassociateIPAddrCmd.java index 9ba3cd13308..cbf3d7a63dc 100644 --- a/api/src/com/cloud/api/commands/DisassociateIPAddrCmd.java +++ b/api/src/com/cloud/api/commands/DisassociateIPAddrCmd.java @@ -46,7 +46,7 @@ public class DisassociateIPAddrCmd extends BaseAsyncCmd { @IdentityMapper(entityTableName="user_ip_address") @Parameter(name=ApiConstants.ID, type=CommandType.LONG, required=true, description="the id of the public ip address" + - " to disassociate") + " to disassociate") private Long id; // unexposed parameter needed for events logging @@ -81,7 +81,7 @@ public class DisassociateIPAddrCmd extends BaseAsyncCmd { throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to disassociate ip address"); } } - + @Override public String getEventType() { return EventTypes.EVENT_NET_IP_RELEASE; @@ -91,7 +91,7 @@ public class DisassociateIPAddrCmd extends BaseAsyncCmd { public String getEventDescription() { return ("Disassociating ip address with id=" + id); } - + @Override public long getEntityOwnerId() { if (ownerId == null) { @@ -101,13 +101,13 @@ public class DisassociateIPAddrCmd extends BaseAsyncCmd { } ownerId = ip.getAccountId(); } - + if (ownerId == null) { return Account.ACCOUNT_ID_SYSTEM; } return ownerId; } - + @Override public String getSyncObjType() { return BaseAsyncCmd.networkSyncObject; @@ -118,22 +118,22 @@ public class DisassociateIPAddrCmd extends BaseAsyncCmd { IpAddress ip = getIpAddress(id); return ip.getAssociatedWithNetworkId(); } - + private IpAddress getIpAddress(long id) { IpAddress ip = _entityMgr.findById(IpAddress.class, id); - + if (ip == null) { throw new InvalidParameterValueException("Unable to find ip address by id=" + id); } else { return ip; } } - + @Override public AsyncJob.Type getInstanceType() { return AsyncJob.Type.IpAddress; } - + @Override public Long getInstanceId() { return getIpAddressId(); diff --git a/api/src/com/cloud/api/commands/EnableAccountCmd.java b/api/src/com/cloud/api/commands/EnableAccountCmd.java index d476ed65b5c..36d9b7b6da9 100644 --- a/api/src/com/cloud/api/commands/EnableAccountCmd.java +++ b/api/src/com/cloud/api/commands/EnableAccountCmd.java @@ -53,7 +53,7 @@ public class EnableAccountCmd extends BaseCmd { public Long getId() { return id; } - + public String getAccountName() { return accountName; } @@ -70,14 +70,14 @@ public class EnableAccountCmd extends BaseCmd { public String getCommandName() { return s_name; } - + @Override public long getEntityOwnerId() { Account account = _entityMgr.findById(Account.class, getId()); if (account != null) { return account.getAccountId(); } - + account = _accountService.getActiveAccountByName(getAccountName(), getDomainId()); if (account != null) { return account.getAccountId(); diff --git a/api/src/com/cloud/api/commands/EnableStaticNatCmd.java b/api/src/com/cloud/api/commands/EnableStaticNatCmd.java index f211366f28e..b27566c3dc8 100644 --- a/api/src/com/cloud/api/commands/EnableStaticNatCmd.java +++ b/api/src/com/cloud/api/commands/EnableStaticNatCmd.java @@ -44,18 +44,18 @@ public class EnableStaticNatCmd extends BaseCmd{ @IdentityMapper(entityTableName="user_ip_address") @Parameter(name=ApiConstants.IP_ADDRESS_ID, type=CommandType.LONG, required=true, description="the public IP " + - "address id for which static nat feature is being enabled") + "address id for which static nat feature is being enabled") private Long ipAddressId; @IdentityMapper(entityTableName="vm_instance") @Parameter(name=ApiConstants.VIRTUAL_MACHINE_ID, type=CommandType.LONG, required=true, description="the ID of " + - "the virtual machine for enabling static nat feature") + "the virtual machine for enabling static nat feature") private Long virtualMachineId; - + @IdentityMapper(entityTableName="networks") - @Parameter(name=ApiConstants.NETWORK_ID, type=CommandType.LONG, + @Parameter(name=ApiConstants.NETWORK_ID, type=CommandType.LONG, description="The network of the vm the static nat will be enabled for." + - " Required when public Ip address is not associated with any Guest network yet (VPC case)") + " Required when public Ip address is not associated with any Guest network yet (VPC case)") private Long networkId; ///////////////////////////////////////////////////// @@ -69,18 +69,18 @@ public class EnableStaticNatCmd extends BaseCmd{ public Long getVirtualMachineId() { return virtualMachineId; } - + public long getNetworkId() { IpAddress ip = _entityMgr.findById(IpAddress.class, getIpAddressId()); Long ntwkId = null; - + if (ip.getAssociatedWithNetworkId() != null) { ntwkId = ip.getAssociatedWithNetworkId(); } else { ntwkId = networkId; } if (ntwkId == null) { - throw new InvalidParameterValueException("Unable to enable static nat for the ipAddress id=" + ipAddressId + + throw new InvalidParameterValueException("Unable to enable static nat for the ipAddress id=" + ipAddressId + " as ip is not associated with any network and no networkId is passed in"); } return ntwkId; @@ -94,7 +94,7 @@ public class EnableStaticNatCmd extends BaseCmd{ public String getCommandName() { return s_name; } - + @Override public long getEntityOwnerId() { UserVm userVm = _entityMgr.findById(UserVm.class, getVirtualMachineId()); @@ -106,7 +106,7 @@ public class EnableStaticNatCmd extends BaseCmd{ } @Override - public void execute() throws ResourceUnavailableException{ + public void execute() throws ResourceUnavailableException{ try { boolean result = _rulesService.enableStaticNat(ipAddressId, virtualMachineId, getNetworkId(), false); if (result) { diff --git a/api/src/com/cloud/api/commands/EnableUserCmd.java b/api/src/com/cloud/api/commands/EnableUserCmd.java index 90843e26966..6c445f789b2 100644 --- a/api/src/com/cloud/api/commands/EnableUserCmd.java +++ b/api/src/com/cloud/api/commands/EnableUserCmd.java @@ -60,7 +60,7 @@ public class EnableUserCmd extends BaseCmd { public String getCommandName() { return s_name; } - + @Override public long getEntityOwnerId() { User user = _entityMgr.findById(User.class, getId()); @@ -70,14 +70,14 @@ public class EnableUserCmd extends BaseCmd { return Account.ACCOUNT_ID_SYSTEM; // no account info given, parent this command to SYSTEM so ERROR events are tracked } - + @Override public void execute(){ UserContext.current().setEventDetails("UserId: "+getId()); UserAccount user = _accountService.enableUser(getId()); if (user != null){ UserResponse response = _responseGenerator.createUserResponse(user); - response.setResponseName(getCommandName()); + response.setResponseName(getCommandName()); this.setResponseObject(response); } else { throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to enable user"); diff --git a/api/src/com/cloud/api/commands/ExtractIsoCmd.java b/api/src/com/cloud/api/commands/ExtractIsoCmd.java index cb180f2424a..39c7673779e 100755 --- a/api/src/com/cloud/api/commands/ExtractIsoCmd.java +++ b/api/src/com/cloud/api/commands/ExtractIsoCmd.java @@ -35,7 +35,7 @@ import com.cloud.user.UserContext; @Implementation(description="Extracts an ISO", responseObject=ExtractResponse.class) public class ExtractIsoCmd extends BaseAsyncCmd { - public static final Logger s_logger = Logger.getLogger(ExtractIsoCmd.class.getName()); + public static final Logger s_logger = Logger.getLogger(ExtractIsoCmd.class.getName()); private static final String s_name = "extractisoresponse"; @@ -53,7 +53,7 @@ public class ExtractIsoCmd extends BaseAsyncCmd { @IdentityMapper(entityTableName="data_center") @Parameter(name=ApiConstants.ZONE_ID, type=CommandType.LONG, required=false, description="the ID of the zone where the ISO is originally located") private Long zoneId; - + @Parameter(name=ApiConstants.MODE, type=CommandType.STRING, required=true, description="the mode of extraction - HTTP_DOWNLOAD or FTP_UPLOAD") private String mode; @@ -109,19 +109,19 @@ public class ExtractIsoCmd extends BaseAsyncCmd { public static String getStaticName() { return s_name; } - + public AsyncJob.Type getInstanceType() { - return AsyncJob.Type.Iso; + return AsyncJob.Type.Iso; } - + public Long getInstanceId() { - return getId(); + return getId(); } - + @Override public void execute(){ try { - UserContext.current().setEventDetails(getEventDescription()); + UserContext.current().setEventDetails(getEventDescription()); Long uploadId = _templateService.extract(this); if (uploadId != null){ ExtractResponse response = _responseGenerator.createExtractResponse(uploadId, id, zoneId, getEntityOwnerId(), mode); diff --git a/api/src/com/cloud/api/commands/ExtractTemplateCmd.java b/api/src/com/cloud/api/commands/ExtractTemplateCmd.java index c2e22d0737d..eacd0f625a6 100755 --- a/api/src/com/cloud/api/commands/ExtractTemplateCmd.java +++ b/api/src/com/cloud/api/commands/ExtractTemplateCmd.java @@ -35,7 +35,7 @@ import com.cloud.user.UserContext; @Implementation(description="Extracts a template", responseObject=ExtractResponse.class) public class ExtractTemplateCmd extends BaseAsyncCmd { - public static final Logger s_logger = Logger.getLogger(ExtractTemplateCmd.class.getName()); + public static final Logger s_logger = Logger.getLogger(ExtractTemplateCmd.class.getName()); private static final String s_name = "extracttemplateresponse"; @@ -49,14 +49,14 @@ public class ExtractTemplateCmd extends BaseAsyncCmd { @Parameter(name=ApiConstants.URL, type=CommandType.STRING, required=false, description="the url to which the ISO would be extracted") private String url; - + @IdentityMapper(entityTableName="data_center") @Parameter(name=ApiConstants.ZONE_ID, type=CommandType.LONG, required=false, description="the ID of the zone where the ISO is originally located" ) private Long zoneId; @Parameter(name=ApiConstants.MODE, type=CommandType.STRING, required=true, description="the mode of extraction - HTTP_DOWNLOAD or FTP_UPLOAD") private String mode; - + ///////////////////////////////////////////////////// /////////////////// Accessors /////////////////////// ///////////////////////////////////////////////////// @@ -76,16 +76,16 @@ public class ExtractTemplateCmd extends BaseAsyncCmd { public String getMode() { return mode; } - + ///////////////////////////////////////////////////// /////////////// API Implementation/////////////////// ///////////////////////////////////////////////////// - @Override - public String getCommandName() { - return s_name; - } - + @Override + public String getCommandName() { + return s_name; + } + public static String getStaticName() { return s_name; } @@ -110,19 +110,19 @@ public class ExtractTemplateCmd extends BaseAsyncCmd { public String getEventDescription() { return "extracting template: " + getId() + " from zone: " + getZoneId(); } - + public AsyncJob.Type getInstanceType() { - return AsyncJob.Type.Template; + return AsyncJob.Type.Template; } - + public Long getInstanceId() { - return getId(); + return getId(); } - + @Override public void execute(){ try { - UserContext.current().setEventDetails(getEventDescription()); + UserContext.current().setEventDetails(getEventDescription()); Long uploadId = _templateService.extract(this); if (uploadId != null){ ExtractResponse response = _responseGenerator.createExtractResponse(uploadId, id, zoneId, getEntityOwnerId(), mode); diff --git a/api/src/com/cloud/api/commands/ExtractVolumeCmd.java b/api/src/com/cloud/api/commands/ExtractVolumeCmd.java index 2b82b060f29..4de217508c3 100755 --- a/api/src/com/cloud/api/commands/ExtractVolumeCmd.java +++ b/api/src/com/cloud/api/commands/ExtractVolumeCmd.java @@ -38,7 +38,7 @@ import com.cloud.user.UserContext; @Implementation(description="Extracts volume", responseObject=ExtractResponse.class) public class ExtractVolumeCmd extends BaseAsyncCmd { - public static final Logger s_logger = Logger.getLogger(ExtractVolumeCmd.class.getName()); + public static final Logger s_logger = Logger.getLogger(ExtractVolumeCmd.class.getName()); private static final String s_name = "extractvolumeresponse"; @@ -57,7 +57,7 @@ public class ExtractVolumeCmd extends BaseAsyncCmd { @IdentityMapper(entityTableName="data_center") @Parameter(name=ApiConstants.ZONE_ID, type=CommandType.LONG, required=true, description="the ID of the zone where the volume is located") private Long zoneId; - + @Parameter(name=ApiConstants.MODE, type=CommandType.STRING, required=true, description="the mode of extraction - HTTP_DOWNLOAD or FTP_UPLOAD") private String mode; @@ -76,7 +76,7 @@ public class ExtractVolumeCmd extends BaseAsyncCmd { public Long getZoneId() { return zoneId; } - + public String getMode() { return mode; } @@ -86,20 +86,20 @@ public class ExtractVolumeCmd extends BaseAsyncCmd { ///////////////////////////////////////////////////// @Override - public String getCommandName() { - return s_name; - } - + public String getCommandName() { + return s_name; + } + public static String getStaticName() { return s_name; } - + public AsyncJob.Type getInstanceType() { - return AsyncJob.Type.Volume; + return AsyncJob.Type.Volume; } - + public Long getInstanceId() { - return getId(); + return getId(); } @Override @@ -122,7 +122,7 @@ public class ExtractVolumeCmd extends BaseAsyncCmd { public String getEventDescription() { return "Extraction job"; } - + @Override public void execute(){ try { @@ -135,13 +135,13 @@ public class ExtractVolumeCmd extends BaseAsyncCmd { response.setObjectName("volume"); response.setIdentityTableName("volumes"); response.setId(id); - response.setName(_entityMgr.findById(Volume.class, id).getName()); + response.setName(_entityMgr.findById(Volume.class, id).getName()); response.setZoneId(zoneId); response.setZoneName(_entityMgr.findById(DataCenter.class, zoneId).getName()); response.setMode(mode); response.setUploadId(uploadId); response.setState(uploadInfo.getUploadState().toString()); - response.setAccountId(getEntityOwnerId()); + response.setAccountId(getEntityOwnerId()); response.setUrl(uploadInfo.getUploadUrl()); this.setResponseObject(response); } else { diff --git a/api/src/com/cloud/api/commands/GetCloudIdentifierCmd.java b/api/src/com/cloud/api/commands/GetCloudIdentifierCmd.java index e934ddfdc4f..f3bdab54951 100644 --- a/api/src/com/cloud/api/commands/GetCloudIdentifierCmd.java +++ b/api/src/com/cloud/api/commands/GetCloudIdentifierCmd.java @@ -59,12 +59,12 @@ public class GetCloudIdentifierCmd extends BaseCmd { public String getCommandName() { return s_name; } - + @Override public long getEntityOwnerId() { return Account.ACCOUNT_ID_SYSTEM; } - + @Override public void execute(){ ArrayList result = _mgr.getCloudIdentifierResponse(userid); @@ -78,6 +78,6 @@ public class GetCloudIdentifierCmd extends BaseCmd { } else { throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to get cloud identifier"); } - + } -} \ No newline at end of file +} diff --git a/api/src/com/cloud/api/commands/GetUserCmd.java b/api/src/com/cloud/api/commands/GetUserCmd.java index 8f5d6b4dd27..4628f1cd264 100644 --- a/api/src/com/cloud/api/commands/GetUserCmd.java +++ b/api/src/com/cloud/api/commands/GetUserCmd.java @@ -43,32 +43,32 @@ public class GetUserCmd extends BaseCmd { /////////////////// Accessors /////////////////////// ///////////////////////////////////////////////////// - public String getApiKey() { - return apiKey; - } + public String getApiKey() { + return apiKey; + } ///////////////////////////////////////////////////// /////////////// API Implementation/////////////////// ///////////////////////////////////////////////////// - @Override + @Override public String getCommandName() { return s_name; } - @Override - public long getEntityOwnerId() { - return 0; - } - + @Override + public long getEntityOwnerId() { + return 0; + } + @Override public void execute(){ UserAccount result = _accountService.getUserByApiKey(getApiKey()); if(result != null){ - UserResponse response = _responseGenerator.createUserResponse(result); - response.setResponseName(getCommandName()); - response.setResponseName(getCommandName()); - this.setResponseObject(response); + UserResponse response = _responseGenerator.createUserResponse(result); + response.setResponseName(getCommandName()); + response.setResponseName(getCommandName()); + this.setResponseObject(response); } else { throw new InvalidParameterValueException("User with specified API key does not exist"); } diff --git a/api/src/com/cloud/api/commands/LDAPConfigCmd.java b/api/src/com/cloud/api/commands/LDAPConfigCmd.java index b0a9e5bdf4c..5b4572b3b8c 100644 --- a/api/src/com/cloud/api/commands/LDAPConfigCmd.java +++ b/api/src/com/cloud/api/commands/LDAPConfigCmd.java @@ -45,10 +45,10 @@ public class LDAPConfigCmd extends BaseCmd { @Parameter(name=ApiConstants.HOST_NAME, type=CommandType.STRING, required=true, description="Hostname or ip address of the ldap server eg: my.ldap.com") private String hostname; - + @Parameter(name=ApiConstants.PORT, type=CommandType.INTEGER, description="Specify the LDAP port if required, default is 389.") private Integer port=0; - + @Parameter(name=ApiConstants.USE_SSL, type=CommandType.BOOLEAN, description="Check Use SSL if the external LDAP server is configured for LDAP over SSL.") private Boolean useSSL; @@ -60,10 +60,10 @@ public class LDAPConfigCmd extends BaseCmd { @Parameter(name=ApiConstants.BIND_DN, type=CommandType.STRING, description="Specify the distinguished name of a user with the search permission on the directory.") private String bindDN; - + @Parameter(name=ApiConstants.BIND_PASSWORD, type=CommandType.STRING, description="Enter the password.") private String bindPassword; - + @Parameter(name=ApiConstants.TRUST_STORE, type=CommandType.STRING, description="Enter the path to trust certificates store.") private String trustStore; @@ -132,14 +132,14 @@ public class LDAPConfigCmd extends BaseCmd { catch (NamingException ne){ ne.printStackTrace(); } - + } @Override public String getCommandName() { return s_name; } - + @Override public long getEntityOwnerId() { return Account.ACCOUNT_ID_SYSTEM; diff --git a/api/src/com/cloud/api/commands/LDAPRemoveCmd.java b/api/src/com/cloud/api/commands/LDAPRemoveCmd.java index 9d5a5d8cfb0..f56c24def3f 100644 --- a/api/src/com/cloud/api/commands/LDAPRemoveCmd.java +++ b/api/src/com/cloud/api/commands/LDAPRemoveCmd.java @@ -35,12 +35,12 @@ public class LDAPRemoveCmd extends BaseCmd { //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - + ///////////////////////////////////////////////////// /////////////////// Accessors /////////////////////// ///////////////////////////////////////////////////// - + ///////////////////////////////////////////////////// /////////////// API Implementation/////////////////// ///////////////////////////////////////////////////// @@ -50,10 +50,10 @@ public class LDAPRemoveCmd extends BaseCmd { public void execute(){ boolean result = _configService.removeLDAP(this); if (result){ - LDAPRemoveResponse lr = new LDAPRemoveResponse(); + LDAPRemoveResponse lr = new LDAPRemoveResponse(); lr.setObjectName("ldapremove"); lr.setResponseName(getCommandName()); - this.setResponseObject(lr); + this.setResponseObject(lr); } } @@ -61,7 +61,7 @@ public class LDAPRemoveCmd extends BaseCmd { public String getCommandName() { return s_name; } - + @Override public long getEntityOwnerId() { return Account.ACCOUNT_ID_SYSTEM; diff --git a/api/src/com/cloud/api/commands/ListAccountsCmd.java b/api/src/com/cloud/api/commands/ListAccountsCmd.java index cf4bcd04441..ddf18ccf3fd 100755 --- a/api/src/com/cloud/api/commands/ListAccountsCmd.java +++ b/api/src/com/cloud/api/commands/ListAccountsCmd.java @@ -33,7 +33,7 @@ import com.cloud.utils.Pair; @Implementation(description="Lists accounts and provides detailed account information for listed accounts", responseObject=AccountResponse.class) public class ListAccountsCmd extends BaseListDomainResourcesCmd { - public static final Logger s_logger = Logger.getLogger(ListAccountsCmd.class.getName()); + public static final Logger s_logger = Logger.getLogger(ListAccountsCmd.class.getName()); private static final String s_name = "listaccountsresponse"; ///////////////////////////////////////////////////// @@ -55,7 +55,7 @@ public class ListAccountsCmd extends BaseListDomainResourcesCmd { @Parameter(name=ApiConstants.STATE, type=CommandType.STRING, description="list accounts by state. Valid states are enabled, disabled, and locked.") private String state; - + ///////////////////////////////////////////////////// /////////////////// Accessors /////////////////////// ///////////////////////////////////////////////////// @@ -79,7 +79,7 @@ public class ListAccountsCmd extends BaseListDomainResourcesCmd { public String getState() { return state; } - + ///////////////////////////////////////////////////// /////////////// API Implementation/////////////////// @@ -102,7 +102,7 @@ public class ListAccountsCmd extends BaseListDomainResourcesCmd { } response.setResponses(accountResponses, accounts.second()); response.setResponseName(getCommandName()); - + this.setResponseObject(response); } } diff --git a/api/src/com/cloud/api/commands/ListCapabilitiesCmd.java b/api/src/com/cloud/api/commands/ListCapabilitiesCmd.java index 6218323deac..a1aa3bb0163 100644 --- a/api/src/com/cloud/api/commands/ListCapabilitiesCmd.java +++ b/api/src/com/cloud/api/commands/ListCapabilitiesCmd.java @@ -27,7 +27,7 @@ import com.cloud.user.Account; @Implementation(description="Lists capabilities", responseObject=CapabilitiesResponse.class) public class ListCapabilitiesCmd extends BaseCmd { - public static final Logger s_logger = Logger.getLogger(ListCapabilitiesCmd.class.getName()); + public static final Logger s_logger = Logger.getLogger(ListCapabilitiesCmd.class.getName()); private static final String s_name = "listcapabilitiesresponse"; @@ -35,12 +35,12 @@ public class ListCapabilitiesCmd extends BaseCmd { public String getCommandName() { return s_name; } - + @Override public long getEntityOwnerId() { return Account.ACCOUNT_ID_SYSTEM; } - + @Override public void execute(){ Map capabilities = _mgr.listCapabilities(this); diff --git a/api/src/com/cloud/api/commands/ListCapacityCmd.java b/api/src/com/cloud/api/commands/ListCapacityCmd.java index a7899f6242e..ecb590aa678 100755 --- a/api/src/com/cloud/api/commands/ListCapacityCmd.java +++ b/api/src/com/cloud/api/commands/ListCapacityCmd.java @@ -42,7 +42,7 @@ public class ListCapacityCmd extends BaseListCmd { ///////////////////////////////////////////////////// //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - + @IdentityMapper(entityTableName="data_center") @Parameter(name=ApiConstants.ZONE_ID, type=CommandType.LONG, description="lists capacity by the Zone ID") private Long zoneId; @@ -50,28 +50,28 @@ public class ListCapacityCmd extends BaseListCmd { @IdentityMapper(entityTableName="host_pod_ref") @Parameter(name=ApiConstants.POD_ID, type=CommandType.LONG, description="lists capacity by the Pod ID") private Long podId; - + @IdentityMapper(entityTableName="cluster") @Parameter(name=ApiConstants.CLUSTER_ID, type=CommandType.LONG, since="3.0.0", description="lists capacity by the Cluster ID") private Long clusterId; @Parameter(name=ApiConstants.FETCH_LATEST, type=CommandType.BOOLEAN, since="3.0.0", description="recalculate capacities and fetch the latest") private Boolean fetchLatest; - + @Parameter(name=ApiConstants.TYPE, type=CommandType.INTEGER, description="lists capacity by type" + - "* CAPACITY_TYPE_MEMORY = 0" + - "* CAPACITY_TYPE_CPU = 1" + - "* CAPACITY_TYPE_STORAGE = 2" + - "* CAPACITY_TYPE_STORAGE_ALLOCATED = 3" + - "* CAPACITY_TYPE_VIRTUAL_NETWORK_PUBLIC_IP = 4" + - "* CAPACITY_TYPE_PRIVATE_IP = 5" + - "* CAPACITY_TYPE_SECONDARY_STORAGE = 6" + - "* CAPACITY_TYPE_VLAN = 7" + - "* CAPACITY_TYPE_DIRECT_ATTACHED_PUBLIC_IP = 8" + - "* CAPACITY_TYPE_LOCAL_STORAGE = 9.") + "* CAPACITY_TYPE_MEMORY = 0" + + "* CAPACITY_TYPE_CPU = 1" + + "* CAPACITY_TYPE_STORAGE = 2" + + "* CAPACITY_TYPE_STORAGE_ALLOCATED = 3" + + "* CAPACITY_TYPE_VIRTUAL_NETWORK_PUBLIC_IP = 4" + + "* CAPACITY_TYPE_PRIVATE_IP = 5" + + "* CAPACITY_TYPE_SECONDARY_STORAGE = 6" + + "* CAPACITY_TYPE_VLAN = 7" + + "* CAPACITY_TYPE_DIRECT_ATTACHED_PUBLIC_IP = 8" + + "* CAPACITY_TYPE_LOCAL_STORAGE = 9.") private Integer type; - + @Parameter(name=ApiConstants.SORT_BY, type=CommandType.STRING, since="3.0.0", description="Sort the results. Available values: Usage") private String sortBy; @@ -82,23 +82,23 @@ public class ListCapacityCmd extends BaseListCmd { public Long getZoneId() { return zoneId; } - + public Long getPodId() { return podId; } public Long getClusterId() { - return clusterId; - } + return clusterId; + } - public Boolean getFetchLatest() { - return fetchLatest; - } + public Boolean getFetchLatest() { + return fetchLatest; + } - public Integer getType() { + public Integer getType() { return type; } - + public String getSortBy() { if (sortBy != null) { if (sortBy.equalsIgnoreCase("usage")) { @@ -107,7 +107,7 @@ public class ListCapacityCmd extends BaseListCmd { throw new InvalidParameterValueException("Only value supported for sortBy parameter is : usage"); } } - + return null; } @@ -119,7 +119,7 @@ public class ListCapacityCmd extends BaseListCmd { public String getCommandName() { return s_name; } - + @Override public void execute(){ List result = null; @@ -128,7 +128,7 @@ public class ListCapacityCmd extends BaseListCmd { } else { result = _mgr.listCapacities(this); } - + ListResponse response = new ListResponse(); List capacityResponses = _responseGenerator.createCapacityResponse(result, s_percentFormat); response.setResponses(capacityResponses); diff --git a/api/src/com/cloud/api/commands/ListClustersCmd.java b/api/src/com/cloud/api/commands/ListClustersCmd.java index 1953325ab02..a6bd54940c8 100755 --- a/api/src/com/cloud/api/commands/ListClustersCmd.java +++ b/api/src/com/cloud/api/commands/ListClustersCmd.java @@ -61,13 +61,13 @@ public class ListClustersCmd extends BaseListCmd { @Parameter(name=ApiConstants.CLUSTER_TYPE, type=CommandType.STRING, description="lists clusters by cluster type") private String clusterType; - + @Parameter(name=ApiConstants.ALLOCATION_STATE, type=CommandType.STRING, description="lists clusters by allocation state") private String allocationState; - + @Parameter(name=ApiConstants.MANAGED_STATE, type=CommandType.STRING, description="whether this cluster is managed by cloudstack") private String managedState; - + @Parameter(name=ApiConstants.SHOW_CAPACITIES, type=CommandType.BOOLEAN, description="flag to display the capacity of the clusters") private Boolean showCapacities; @@ -90,19 +90,19 @@ public class ListClustersCmd extends BaseListCmd { public Long getZoneId() { return zoneId; } - + public String getHypervisorType() { - return hypervisorType; + return hypervisorType; } - + public String getClusterType() { - return clusterType; + return clusterType; } public String getAllocationState() { - return allocationState; + return allocationState; } - + public String getManagedstate() { return managedState; @@ -114,18 +114,18 @@ public class ListClustersCmd extends BaseListCmd { public Boolean getShowCapacities() { - return showCapacities; - } + return showCapacities; + } ///////////////////////////////////////////////////// /////////////// API Implementation/////////////////// ///////////////////////////////////////////////////// - @Override + @Override public String getCommandName() { return s_name; } - + @Override public void execute(){ Pair, Integer> result = _mgr.searchForClusters(this); diff --git a/api/src/com/cloud/api/commands/ListDomainChildrenCmd.java b/api/src/com/cloud/api/commands/ListDomainChildrenCmd.java index f014d349a34..e432c0f0647 100644 --- a/api/src/com/cloud/api/commands/ListDomainChildrenCmd.java +++ b/api/src/com/cloud/api/commands/ListDomainChildrenCmd.java @@ -33,7 +33,7 @@ import com.cloud.utils.Pair; @Implementation(description="Lists all children domains belonging to a specified domain", responseObject=DomainResponse.class) public class ListDomainChildrenCmd extends BaseListCmd { - public static final Logger s_logger = Logger.getLogger(ListDomainChildrenCmd.class.getName()); + public static final Logger s_logger = Logger.getLogger(ListDomainChildrenCmd.class.getName()); private static final String s_name = "listdomainchildrenresponse"; @@ -47,10 +47,10 @@ public class ListDomainChildrenCmd extends BaseListCmd { @Parameter(name=ApiConstants.NAME, type=CommandType.STRING, description="list children domains by name") private String domainName; - + @Parameter(name=ApiConstants.IS_RECURSIVE, type=CommandType.BOOLEAN, description="to return the entire tree, use the value \"true\". To return the first level children, use the value \"false\".") private Boolean recursive; - + @Parameter(name=ApiConstants.LIST_ALL, type=CommandType.BOOLEAN, description="If set to false, list only resources belonging to the command's caller; if set to true - list resources that the caller is authorized to see. Default value is false") private Boolean listAll; @@ -65,11 +65,11 @@ public class ListDomainChildrenCmd extends BaseListCmd { public String getDomainName() { return domainName; } - + public boolean listAll() { return listAll == null ? false : listAll; } - + public boolean isRecursive() { return recursive == null ? false : recursive; } @@ -82,7 +82,7 @@ public class ListDomainChildrenCmd extends BaseListCmd { public String getCommandName() { return s_name; } - + @Override public void execute(){ Pair, Integer> result = _domainService.searchForDomainChildren(this); diff --git a/api/src/com/cloud/api/commands/ListDomainsCmd.java b/api/src/com/cloud/api/commands/ListDomainsCmd.java index 492fbdf842c..7e4b613e6d3 100644 --- a/api/src/com/cloud/api/commands/ListDomainsCmd.java +++ b/api/src/com/cloud/api/commands/ListDomainsCmd.java @@ -33,8 +33,8 @@ import com.cloud.utils.Pair; @Implementation(description="Lists domains and provides detailed information for listed domains", responseObject=DomainResponse.class) public class ListDomainsCmd extends BaseListCmd { - public static final Logger s_logger = Logger.getLogger(ListDomainsCmd.class.getName()); - + public static final Logger s_logger = Logger.getLogger(ListDomainsCmd.class.getName()); + private static final String s_name = "listdomainsresponse"; ///////////////////////////////////////////////////// @@ -50,7 +50,7 @@ public class ListDomainsCmd extends BaseListCmd { @Parameter(name=ApiConstants.NAME, type=CommandType.STRING, description="List domain by domain name.") private String domainName; - + @Parameter(name=ApiConstants.LIST_ALL, type=CommandType.BOOLEAN, description="If set to false, list only resources belonging to the command's caller; if set to true - list resources that the caller is authorized to see. Default value is false") private Boolean listAll; @@ -69,7 +69,7 @@ public class ListDomainsCmd extends BaseListCmd { public String getDomainName() { return domainName; } - + public boolean listAll() { return listAll == null ? false : listAll; } diff --git a/api/src/com/cloud/api/commands/ListEventsCmd.java b/api/src/com/cloud/api/commands/ListEventsCmd.java index eca145f9405..d0e09e1ffe0 100755 --- a/api/src/com/cloud/api/commands/ListEventsCmd.java +++ b/api/src/com/cloud/api/commands/ListEventsCmd.java @@ -44,7 +44,7 @@ public class ListEventsCmd extends BaseListProjectAndAccountResourcesCmd { @IdentityMapper(entityTableName="event") @Parameter(name=ApiConstants.ID, type=CommandType.LONG, description="the ID of the event") private Long id; - + @Parameter(name=ApiConstants.DURATION, type=CommandType.INTEGER, description="the duration of the event") private Integer duration; @@ -70,7 +70,7 @@ public class ListEventsCmd extends BaseListProjectAndAccountResourcesCmd { public Long getId() { return id; } - + public Integer getDuration() { return duration; } diff --git a/api/src/com/cloud/api/commands/ListFirewallRulesCmd.java b/api/src/com/cloud/api/commands/ListFirewallRulesCmd.java index 232f5a241c0..027a6b9e3ab 100644 --- a/api/src/com/cloud/api/commands/ListFirewallRulesCmd.java +++ b/api/src/com/cloud/api/commands/ListFirewallRulesCmd.java @@ -42,7 +42,7 @@ public class ListFirewallRulesCmd extends BaseListTaggedResourcesCmd { @IdentityMapper(entityTableName="firewall_rules") @Parameter(name=ApiConstants.ID, type=CommandType.LONG, description="Lists rule with the specified ID.") private Long id; - + @IdentityMapper(entityTableName="user_ip_address") @Parameter(name=ApiConstants.IP_ADDRESS_ID, type=CommandType.LONG, description="the id of IP address of the firwall services") private Long ipAddressId; @@ -50,11 +50,11 @@ public class ListFirewallRulesCmd extends BaseListTaggedResourcesCmd { ///////////////////////////////////////////////////// /////////////////// Accessors /////////////////////// ///////////////////////////////////////////////////// - + public Long getIpAddressId() { return ipAddressId; } - + public Long getId() { return id; } @@ -67,13 +67,13 @@ public class ListFirewallRulesCmd extends BaseListTaggedResourcesCmd { public String getCommandName() { return s_name; } - + @Override public void execute(){ Pair, Integer> result = _firewallService.listFirewallRules(this); ListResponse response = new ListResponse(); List fwResponses = new ArrayList(); - + for (FirewallRule fwRule : result.first()) { FirewallResponse ruleData = _responseGenerator.createFirewallResponse(fwRule); ruleData.setObjectName("firewallrule"); @@ -81,6 +81,6 @@ public class ListFirewallRulesCmd extends BaseListTaggedResourcesCmd { } response.setResponses(fwResponses, result.second()); response.setResponseName(getCommandName()); - this.setResponseObject(response); + this.setResponseObject(response); } } diff --git a/api/src/com/cloud/api/commands/ListGuestOsCategoriesCmd.java b/api/src/com/cloud/api/commands/ListGuestOsCategoriesCmd.java index e0af2f63703..e233b984978 100644 --- a/api/src/com/cloud/api/commands/ListGuestOsCategoriesCmd.java +++ b/api/src/com/cloud/api/commands/ListGuestOsCategoriesCmd.java @@ -44,7 +44,7 @@ public class ListGuestOsCategoriesCmd extends BaseListCmd { @IdentityMapper(entityTableName="guest_os_category") @Parameter(name=ApiConstants.ID, type=CommandType.LONG, description="list Os category by id") private Long id; - + @Parameter(name=ApiConstants.NAME, type=CommandType.STRING, description="list os category by name", since="3.0.1") private String name; @@ -70,7 +70,7 @@ public class ListGuestOsCategoriesCmd extends BaseListCmd { public String getCommandName() { return s_name; } - + @Override public void execute(){ Pair, Integer> result = _mgr.listGuestOSCategoriesByCriteria(this); diff --git a/api/src/com/cloud/api/commands/ListGuestOsCmd.java b/api/src/com/cloud/api/commands/ListGuestOsCmd.java index f64e89a7588..161046d0bcd 100644 --- a/api/src/com/cloud/api/commands/ListGuestOsCmd.java +++ b/api/src/com/cloud/api/commands/ListGuestOsCmd.java @@ -48,7 +48,7 @@ public class ListGuestOsCmd extends BaseListCmd { @IdentityMapper(entityTableName="guest_os_category") @Parameter(name=ApiConstants.OS_CATEGORY_ID, type=CommandType.LONG, description="list by Os Category id") private Long osCategoryId; - + @Parameter(name=ApiConstants.DESCRIPTION, type=CommandType.STRING, description="list os by description", since="3.0.1") private String description; @@ -68,7 +68,7 @@ public class ListGuestOsCmd extends BaseListCmd { public String getDescription() { return description; } - + ///////////////////////////////////////////////////// /////////////// API Implementation/////////////////// ///////////////////////////////////////////////////// @@ -77,7 +77,7 @@ public class ListGuestOsCmd extends BaseListCmd { public String getCommandName() { return s_name; } - + @Override public void execute(){ Pair, Integer> result = _mgr.listGuestOSByCriteria(this); diff --git a/api/src/com/cloud/api/commands/ListHostsCmd.java b/api/src/com/cloud/api/commands/ListHostsCmd.java index 09e7179862f..7e1e97cdd0c 100755 --- a/api/src/com/cloud/api/commands/ListHostsCmd.java +++ b/api/src/com/cloud/api/commands/ListHostsCmd.java @@ -73,16 +73,16 @@ public class ListHostsCmd extends BaseListCmd { @IdentityMapper(entityTableName="vm_instance") @Parameter(name=ApiConstants.VIRTUAL_MACHINE_ID, type=CommandType.LONG, required=false, description="lists hosts in the same cluster as this VM and flag hosts with enough CPU/RAm to host this VM") private Long virtualMachineId; - + @Parameter(name=ApiConstants.RESOURCE_STATE, type=CommandType.STRING, description="list hosts by resource state. Resource state represents current state determined by admin of host, valule can be one of [Enabled, Disabled, Unmanaged, PrepareForMaintenance, ErrorInMaintenance, Maintenance, Error]") - private String resourceState; - + private String resourceState; + @Parameter(name=ApiConstants.DETAILS, type=CommandType.LIST, collectionType=CommandType.STRING, description="comma separated list of host details requested, value can be a list of [ min, all, capacity, events, stats]" ) private List viewDetails; - + @Parameter(name=ApiConstants.HA_HOST, type=CommandType.BOOLEAN, description="if true, list only hosts dedicated to HA") private Boolean haHost; - + ///////////////////////////////////////////////////// /////////////////// Accessors /////////////////////// ///////////////////////////////////////////////////// @@ -110,7 +110,7 @@ public class ListHostsCmd extends BaseListCmd { public String getType() { return type; } - + public Boolean getHaHost() { return haHost; } @@ -122,7 +122,7 @@ public class ListHostsCmd extends BaseListCmd { public Long getVirtualMachineId() { return virtualMachineId; } - + public EnumSet getDetails() throws InvalidParameterValueException { EnumSet dv; if (viewDetails==null || viewDetails.size() <=0){ @@ -142,9 +142,9 @@ public class ListHostsCmd extends BaseListCmd { } return dv; } - + public String getResourceState() { - return resourceState; + return resourceState; } ///////////////////////////////////////////////////// /////////////// API Implementation/////////////////// @@ -154,23 +154,23 @@ public class ListHostsCmd extends BaseListCmd { public String getCommandName() { return s_name; } - + public AsyncJob.Type getInstanceType() { - return AsyncJob.Type.Host; + return AsyncJob.Type.Host; } @Override public void execute(){ - List result = new ArrayList(); - List hostsWithCapacity = new ArrayList(); - - if(getVirtualMachineId() != null){ + List result = new ArrayList(); + List hostsWithCapacity = new ArrayList(); + + if(getVirtualMachineId() != null){ Pair, List> hostsForMigration = _mgr.listHostsForMigrationOfVM(getVirtualMachineId(), this.getStartIndex(), this.getPageSizeVal()); result = hostsForMigration.first(); hostsWithCapacity = hostsForMigration.second(); - }else{ - result = _mgr.searchForServers(this); - } + }else{ + result = _mgr.searchForServers(this); + } ListResponse response = new ListResponse(); List hostResponses = new ArrayList(); diff --git a/api/src/com/cloud/api/commands/ListIpForwardingRulesCmd.java b/api/src/com/cloud/api/commands/ListIpForwardingRulesCmd.java index a3e1479671d..95515794514 100644 --- a/api/src/com/cloud/api/commands/ListIpForwardingRulesCmd.java +++ b/api/src/com/cloud/api/commands/ListIpForwardingRulesCmd.java @@ -42,15 +42,15 @@ public class ListIpForwardingRulesCmd extends BaseListProjectAndAccountResources ///////////////////////////////////////////////////// //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - + @IdentityMapper(entityTableName="user_ip_address") @Parameter(name=ApiConstants.IP_ADDRESS_ID, type=CommandType.LONG, description="list the rule belonging to this public ip address") private Long publicIpAddressId; - + @IdentityMapper(entityTableName="firewall_rules") @Parameter(name=ApiConstants.ID, type=CommandType.LONG, description="Lists rule with the specified ID.") private Long id; - + @IdentityMapper(entityTableName="vm_instance") @Parameter(name=ApiConstants.VIRTUAL_MACHINE_ID, type=CommandType.LONG, description="Lists all rules applied to the specified Vm.") private Long vmId; @@ -64,15 +64,15 @@ public class ListIpForwardingRulesCmd extends BaseListProjectAndAccountResources /////////////// API Implementation/////////////////// ///////////////////////////////////////////////////// @Override - public String getCommandName() { + public String getCommandName() { return s_name; } - - public Long getPublicIpAddressId() { - return publicIpAddressId; - } - public Long getId() { + public Long getPublicIpAddressId() { + return publicIpAddressId; + } + + public Long getId() { return id; } @@ -82,7 +82,7 @@ public class ListIpForwardingRulesCmd extends BaseListProjectAndAccountResources @Override public void execute(){ - Pair, Integer> result = _rulesService.searchStaticNatRules(publicIpAddressId, id, vmId, + Pair, Integer> result = _rulesService.searchStaticNatRules(publicIpAddressId, id, vmId, this.getStartIndex(), this.getPageSizeVal(), this.getAccountName(), this.getDomainId(), this.getProjectId(), this.isRecursive(), this.listAll()); ListResponse response = new ListResponse(); List ipForwardingResponses = new ArrayList(); @@ -97,5 +97,5 @@ public class ListIpForwardingRulesCmd extends BaseListProjectAndAccountResources response.setResponseName(getCommandName()); this.setResponseObject(response); } - + } diff --git a/api/src/com/cloud/api/commands/ListIsoPermissionsCmd.java b/api/src/com/cloud/api/commands/ListIsoPermissionsCmd.java index 0af58555ea6..81c18e9c6f1 100644 --- a/api/src/com/cloud/api/commands/ListIsoPermissionsCmd.java +++ b/api/src/com/cloud/api/commands/ListIsoPermissionsCmd.java @@ -25,17 +25,17 @@ public class ListIsoPermissionsCmd extends ListTemplateOrIsoPermissionsCmd { protected String getResponseName() { return "listisopermissionsresponse"; } - + @Override public String getMediaType() { return "iso"; } - + @Override protected Logger getLogger() { - return Logger.getLogger(ListIsoPermissionsCmd.class.getName()); + return Logger.getLogger(ListIsoPermissionsCmd.class.getName()); } - + protected boolean templateIsCorrectType(VirtualMachineTemplate template) { return template.getFormat().equals(ImageFormat.ISO); } diff --git a/api/src/com/cloud/api/commands/ListIsosCmd.java b/api/src/com/cloud/api/commands/ListIsosCmd.java index 970b6d40f1a..3cf0797dba3 100755 --- a/api/src/com/cloud/api/commands/ListIsosCmd.java +++ b/api/src/com/cloud/api/commands/ListIsosCmd.java @@ -62,10 +62,10 @@ public class ListIsosCmd extends BaseListTaggedResourcesCmd { private Boolean ready; @Parameter(name=ApiConstants.ISO_FILTER, type=CommandType.STRING, description="possible values are \"featured\", \"self\", \"self-executable\",\"executable\", and \"community\". " + - "* featured-ISOs that are featured and are publicself-ISOs that have been registered/created by the owner. " + - "* selfexecutable-ISOs that have been registered/created by the owner that can be used to deploy a new VM. " + - "* executable-all ISOs that can be used to deploy a new VM " + - "* community-ISOs that are public.") + "* featured-ISOs that are featured and are publicself-ISOs that have been registered/created by the owner. " + + "* selfexecutable-ISOs that have been registered/created by the owner that can be used to deploy a new VM. " + + "* executable-all ISOs that can be used to deploy a new VM " + + "* community-ISOs that are public.") private String isoFilter = TemplateFilter.selfexecutable.toString(); @Parameter(name=ApiConstants.NAME, type=CommandType.STRING, description="list all isos by name") @@ -74,7 +74,7 @@ public class ListIsosCmd extends BaseListTaggedResourcesCmd { @IdentityMapper(entityTableName="data_center") @Parameter(name=ApiConstants.ZONE_ID, type=CommandType.LONG, description="the ID of the zone") private Long zoneId; - + ///////////////////////////////////////////////////// /////////////////// Accessors /////////////////////// ///////////////////////////////////////////////////// @@ -111,7 +111,7 @@ public class ListIsosCmd extends BaseListTaggedResourcesCmd { public Long getZoneId() { return zoneId; } - + public boolean listInReadyState() { Account account = UserContext.current().getCaller(); // It is account specific if account is admin type and domainId and accountName are not null @@ -120,29 +120,29 @@ public class ListIsosCmd extends BaseListTaggedResourcesCmd { TemplateFilter templateFilter = TemplateFilter.valueOf(getIsoFilter()); boolean onlyReady = (templateFilter == TemplateFilter.featured) || (templateFilter == TemplateFilter.selfexecutable) || (templateFilter == TemplateFilter.sharedexecutable) || (templateFilter == TemplateFilter.executable && isAccountSpecific) || (templateFilter == TemplateFilter.community); - + if (!onlyReady) { - if (isReady() != null && isReady().booleanValue() != onlyReady) { - onlyReady = isReady().booleanValue(); - } + if (isReady() != null && isReady().booleanValue() != onlyReady) { + onlyReady = isReady().booleanValue(); + } } - + return onlyReady; } ///////////////////////////////////////////////////// /////////////// API Implementation/////////////////// ///////////////////////////////////////////////////// - + @Override public String getCommandName() { return s_name; } - + public AsyncJob.Type getInstanceType() { - return AsyncJob.Type.Iso; + return AsyncJob.Type.Iso; } - + @Override public void execute(){ Set> isoZonePairSet = _mgr.listIsos(this); diff --git a/api/src/com/cloud/api/commands/ListLBStickinessPoliciesCmd.java b/api/src/com/cloud/api/commands/ListLBStickinessPoliciesCmd.java index 9f695e67e4c..92a27bc12ba 100644 --- a/api/src/com/cloud/api/commands/ListLBStickinessPoliciesCmd.java +++ b/api/src/com/cloud/api/commands/ListLBStickinessPoliciesCmd.java @@ -46,7 +46,7 @@ public class ListLBStickinessPoliciesCmd extends BaseListCmd { @IdentityMapper(entityTableName="firewall_rules") @Parameter(name = ApiConstants.LBID, type = CommandType.LONG, required = true, description = "the ID of the load balancer rule") private Long lbRuleId; - + // /////////////////////////////////////////////////// @@ -55,7 +55,7 @@ public class ListLBStickinessPoliciesCmd extends BaseListCmd { public Long getLbRuleId() { return lbRuleId; } - + // /////////////////////////////////////////////////// @@ -72,17 +72,17 @@ public class ListLBStickinessPoliciesCmd extends BaseListCmd { List spResponses = new ArrayList(); LoadBalancer lb = _lbService.findById(getLbRuleId()); ListResponse response = new ListResponse(); - + if (lb != null) { - //check permissions - Account caller = UserContext.current().getCaller(); - _accountService.checkAccess(caller, null, true, lb); + //check permissions + Account caller = UserContext.current().getCaller(); + _accountService.checkAccess(caller, null, true, lb); List stickinessPolicies = _lbService.searchForLBStickinessPolicies(this); LBStickinessResponse spResponse = _responseGenerator.createLBStickinessPolicyResponse(stickinessPolicies, lb); spResponses.add(spResponse); response.setResponses(spResponses); } - + response.setResponseName(getCommandName()); this.setResponseObject(response); } diff --git a/api/src/com/cloud/api/commands/ListLoadBalancerRuleInstancesCmd.java b/api/src/com/cloud/api/commands/ListLoadBalancerRuleInstancesCmd.java index 6e0de6cb3ce..49f066bc277 100644 --- a/api/src/com/cloud/api/commands/ListLoadBalancerRuleInstancesCmd.java +++ b/api/src/com/cloud/api/commands/ListLoadBalancerRuleInstancesCmd.java @@ -67,14 +67,14 @@ public class ListLoadBalancerRuleInstancesCmd extends BaseListCmd { public String getCommandName() { return s_name; } - + @Override public void execute(){ List result = _lbService.listLoadBalancerInstances(this); ListResponse response = new ListResponse(); List vmResponses = new ArrayList(); if (result != null) { - vmResponses = _responseGenerator.createUserVmResponse("loadbalancerruleinstance", result.toArray(new UserVm[result.size()])); + vmResponses = _responseGenerator.createUserVmResponse("loadbalancerruleinstance", result.toArray(new UserVm[result.size()])); } response.setResponses(vmResponses); response.setResponseName(getCommandName()); diff --git a/api/src/com/cloud/api/commands/ListLoadBalancerRulesCmd.java b/api/src/com/cloud/api/commands/ListLoadBalancerRulesCmd.java index 63d24de31c0..c7f5e1869ad 100644 --- a/api/src/com/cloud/api/commands/ListLoadBalancerRulesCmd.java +++ b/api/src/com/cloud/api/commands/ListLoadBalancerRulesCmd.java @@ -49,7 +49,7 @@ public class ListLoadBalancerRulesCmd extends BaseListTaggedResourcesCmd { private String loadBalancerRuleName; @IdentityMapper(entityTableName="user_ip_address") - @Parameter(name = ApiConstants.PUBLIC_IP_ID, type = CommandType.LONG, description = "the public IP address id of the load balancer rule ") + @Parameter(name = ApiConstants.PUBLIC_IP_ID, type = CommandType.LONG, description = "the public IP address id of the load balancer rule ") private Long publicIpId; @IdentityMapper(entityTableName="vm_instance") diff --git a/api/src/com/cloud/api/commands/ListNetworkACLsCmd.java b/api/src/com/cloud/api/commands/ListNetworkACLsCmd.java index 1b2ed14ae5c..c75e318802a 100644 --- a/api/src/com/cloud/api/commands/ListNetworkACLsCmd.java +++ b/api/src/com/cloud/api/commands/ListNetworkACLsCmd.java @@ -44,26 +44,26 @@ public class ListNetworkACLsCmd extends BaseListTaggedResourcesCmd { @IdentityMapper(entityTableName="firewall_rules") @Parameter(name=ApiConstants.ID, type=CommandType.LONG, description="Lists network ACL with the specified ID.") private Long id; - + @IdentityMapper(entityTableName="networks") @Parameter(name=ApiConstants.NETWORK_ID, type=CommandType.LONG, description="list network ACLs by network Id") private Long networkId; - + @Parameter(name=ApiConstants.TRAFFIC_TYPE, type=CommandType.STRING, description="list network ACLs by traffic type - Ingress or Egress") private String trafficType; ///////////////////////////////////////////////////// /////////////////// Accessors /////////////////////// ///////////////////////////////////////////////////// - + public Long getNetworkId() { return networkId; } - + public Long getId() { return id; } - + public String getTrafficType() { return trafficType; } @@ -76,19 +76,19 @@ public class ListNetworkACLsCmd extends BaseListTaggedResourcesCmd { public String getCommandName() { return s_name; } - + @Override public void execute(){ Pair,Integer> result = _networkACLService.listNetworkACLs(this); ListResponse response = new ListResponse(); List aclResponses = new ArrayList(); - + for (FirewallRule acl : result.first()) { NetworkACLResponse ruleData = _responseGenerator.createNetworkACLResponse(acl); aclResponses.add(ruleData); } response.setResponses(aclResponses, result.second()); response.setResponseName(getCommandName()); - this.setResponseObject(response); + this.setResponseObject(response); } } diff --git a/api/src/com/cloud/api/commands/ListNetworkOfferingsCmd.java b/api/src/com/cloud/api/commands/ListNetworkOfferingsCmd.java index ee8084712b4..9f6f94d60a8 100644 --- a/api/src/com/cloud/api/commands/ListNetworkOfferingsCmd.java +++ b/api/src/com/cloud/api/commands/ListNetworkOfferingsCmd.java @@ -42,70 +42,70 @@ public class ListNetworkOfferingsCmd extends BaseListCmd { @IdentityMapper(entityTableName="network_offerings") @Parameter(name=ApiConstants.ID, type=CommandType.LONG, description="list network offerings by id") private Long id; - + @Parameter(name=ApiConstants.NAME, type=CommandType.STRING, description="list network offerings by name") private String networkOfferingName; - + @Parameter(name=ApiConstants.DISPLAY_TEXT, type=CommandType.STRING, description="list network offerings by display text") private String displayText; - + @Parameter(name=ApiConstants.TRAFFIC_TYPE, type=CommandType.STRING, description="list by traffic type") private String trafficType; - + @Parameter(name=ApiConstants.IS_DEFAULT, type=CommandType.BOOLEAN, description="true if need to list only default network offerings. Default value is false") - private Boolean isDefault; - + private Boolean isDefault; + @Parameter(name=ApiConstants.SPECIFY_VLAN, type=CommandType.BOOLEAN, description="the tags for the network offering.") private Boolean specifyVlan; - + @Parameter(name=ApiConstants.AVAILABILITY, type=CommandType.STRING, description="the availability of network offering. Default value is Required") private String availability; - + @IdentityMapper(entityTableName="data_center") @Parameter(name=ApiConstants.ZONE_ID, type=CommandType.LONG, description="list netowrk offerings available for network creation in specific zone") private Long zoneId; - + @Parameter(name=ApiConstants.STATE, type=CommandType.STRING, description="list network offerings by state") private String state; - + @IdentityMapper(entityTableName="networks") @Parameter(name=ApiConstants.NETWORK_ID, type=CommandType.LONG, description="the ID of the network. Pass this in if you want to see the available network offering that a network can be changed to.") private Long networkId; - + @Parameter(name=ApiConstants.GUEST_IP_TYPE, type=CommandType.STRING, description="list network offerings by guest type: Shared or Isolated") private String guestIpType; @Parameter(name=ApiConstants.SUPPORTED_SERVICES, type=CommandType.LIST, collectionType=CommandType.STRING, description="list network offerings supporting certain services") private List supportedServices; - + @Parameter(name=ApiConstants.SOURCE_NAT_SUPPORTED, type=CommandType.BOOLEAN, description="true if need to list only netwok offerings where source nat is supported, false otherwise") private Boolean sourceNatSupported; - + @Parameter(name=ApiConstants.SPECIFY_IP_RANGES, type=CommandType.BOOLEAN, description="true if need to list only network offerings which support specifying ip ranges") private Boolean specifyIpRanges; - + @Parameter(name=ApiConstants.TAGS, type=CommandType.STRING, description="list network offerings by tags", length=4096) private String tags; - + @Parameter(name=ApiConstants.IS_TAGGED, type=CommandType.BOOLEAN, description="true if offering has tags specified") private Boolean isTagged; - + @Parameter(name=ApiConstants.FOR_VPC, type=CommandType.BOOLEAN, description="the network offering can be used" + - " only for network creation inside the VPC") + " only for network creation inside the VPC") private Boolean forVpc; - + ///////////////////////////////////////////////////// /////////////////// Accessors /////////////////////// ///////////////////////////////////////////////////// - + public String getNetworkOfferingName() { return networkOfferingName; } - + public String getDisplayText() { return displayText; } - + public String getTrafficType() { return trafficType; } @@ -117,7 +117,7 @@ public class ListNetworkOfferingsCmd extends BaseListCmd { public Boolean getIsDefault() { return isDefault; } - + public Boolean getSpecifyVlan() { return specifyVlan; } @@ -147,14 +147,14 @@ public class ListNetworkOfferingsCmd extends BaseListCmd { } public Boolean getSourceNatSupported() { - return sourceNatSupported; - } - - public Boolean getSpecifyIpRanges() { - return specifyIpRanges; + return sourceNatSupported; } - public String getTags() { + public Boolean getSpecifyIpRanges() { + return specifyIpRanges; + } + + public String getTags() { return tags; } diff --git a/api/src/com/cloud/api/commands/ListNetworkServiceProvidersCmd.java b/api/src/com/cloud/api/commands/ListNetworkServiceProvidersCmd.java index f77e4182cf3..9818842cab4 100644 --- a/api/src/com/cloud/api/commands/ListNetworkServiceProvidersCmd.java +++ b/api/src/com/cloud/api/commands/ListNetworkServiceProvidersCmd.java @@ -41,21 +41,21 @@ public class ListNetworkServiceProvidersCmd extends BaseListCmd { ///////////////////////////////////////////////////// //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - + @IdentityMapper(entityTableName="physical_network") @Parameter(name=ApiConstants.PHYSICAL_NETWORK_ID, type=CommandType.LONG, description="the Physical Network ID") private Long physicalNetworkId; - + @Parameter(name=ApiConstants.NAME, type=CommandType.STRING, description="list providers by name") private String name; - + @Parameter(name=ApiConstants.STATE, type=CommandType.STRING, description="list providers by state") private String state; - + ///////////////////////////////////////////////////// /////////////////// Accessors /////////////////////// ///////////////////////////////////////////////////// - + public void setPhysicalNetworkId(Long physicalNetworkId) { this.physicalNetworkId = physicalNetworkId; } @@ -65,14 +65,14 @@ public class ListNetworkServiceProvidersCmd extends BaseListCmd { } public String getName() { - return name; - } + return name; + } - public String getState() { - return state; - } + public String getState() { + return state; + } - ///////////////////////////////////////////////////// + ///////////////////////////////////////////////////// /////////////// API Implementation/////////////////// ///////////////////////////////////////////////////// @Override @@ -84,7 +84,7 @@ public class ListNetworkServiceProvidersCmd extends BaseListCmd { public long getEntityOwnerId() { return Account.ACCOUNT_ID_SYSTEM; } - + @Override public void execute(){ Pair, Integer> serviceProviders = _networkService.listNetworkServiceProviders(getPhysicalNetworkId(), diff --git a/api/src/com/cloud/api/commands/ListNetworksCmd.java b/api/src/com/cloud/api/commands/ListNetworksCmd.java index 0a52618ab24..4dcb22d69f5 100644 --- a/api/src/com/cloud/api/commands/ListNetworksCmd.java +++ b/api/src/com/cloud/api/commands/ListNetworksCmd.java @@ -42,47 +42,47 @@ public class ListNetworksCmd extends BaseListTaggedResourcesCmd { @IdentityMapper(entityTableName="networks") @Parameter(name=ApiConstants.ID, type=CommandType.LONG, description="list networks by id") private Long id; - + @IdentityMapper(entityTableName="data_center") @Parameter(name=ApiConstants.ZONE_ID, type=CommandType.LONG, description="the Zone ID of the network") private Long zoneId; - + @Parameter(name=ApiConstants.TYPE, type=CommandType.STRING, description="the type of the network. Supported values are: Isolated and Shared") private String guestIpType; - + @Parameter(name=ApiConstants.IS_SYSTEM, type=CommandType.BOOLEAN, description="true if network is system, false otherwise") private Boolean isSystem; - + @Parameter(name=ApiConstants.ACL_TYPE, type=CommandType.STRING, description="list networks by ACL (access control list) type. Supported values are Account and Domain") private String aclType; - + @Parameter(name=ApiConstants.TRAFFIC_TYPE, type=CommandType.STRING, description="type of the traffic") private String trafficType; - + @IdentityMapper(entityTableName="physical_network") @Parameter(name=ApiConstants.PHYSICAL_NETWORK_ID, type=CommandType.LONG, description="list networks by physical network id") private Long physicalNetworkId; - + @Parameter(name=ApiConstants.SUPPORTED_SERVICES, type=CommandType.LIST, collectionType=CommandType.STRING, description="list networks supporting certain services") private List supportedServices; - + @Parameter(name=ApiConstants.RESTART_REQUIRED, type=CommandType.BOOLEAN, description="list networks by restartRequired") - + private Boolean restartRequired; - + @Parameter(name=ApiConstants.SPECIFY_IP_RANGES, type=CommandType.BOOLEAN, description="true if need to list only networks which support specifying ip ranges") private Boolean specifyIpRanges; - + @IdentityMapper(entityTableName="vpc") @Parameter(name=ApiConstants.VPC_ID, type=CommandType.LONG, description="List networks by VPC") private Long vpcId; @Parameter(name=ApiConstants.CAN_USE_FOR_DEPLOY, type=CommandType.BOOLEAN, description="list networks available for vm deployment") private Boolean canUseForDeploy; - + @Parameter(name=ApiConstants.FOR_VPC, type=CommandType.BOOLEAN, description="the network belongs to vpc") private Boolean forVpc; - + ///////////////////////////////////////////////////// /////////////////// Accessors /////////////////////// ///////////////////////////////////////////////////// @@ -90,7 +90,7 @@ public class ListNetworksCmd extends BaseListTaggedResourcesCmd { public Long getId() { return id; } - + public Long getZoneId() { return zoneId; } @@ -102,10 +102,10 @@ public class ListNetworksCmd extends BaseListTaggedResourcesCmd { public Boolean getIsSystem() { return isSystem; } - + public String getAclType() { - return aclType; - } + return aclType; + } public String getTrafficType() { return trafficType; @@ -120,21 +120,21 @@ public class ListNetworksCmd extends BaseListTaggedResourcesCmd { } public Boolean getRestartRequired() { - return restartRequired; - } - - public Boolean getSpecifyIpRanges() { - return specifyIpRanges; + return restartRequired; } - public Long getVpcId() { + public Boolean getSpecifyIpRanges() { + return specifyIpRanges; + } + + public Long getVpcId() { return vpcId; - } - - public Boolean canUseForDeploy() { + } + + public Boolean canUseForDeploy() { return canUseForDeploy; } - + public Boolean getForVpc() { return forVpc; } diff --git a/api/src/com/cloud/api/commands/ListPhysicalNetworksCmd.java b/api/src/com/cloud/api/commands/ListPhysicalNetworksCmd.java index 923b20df317..69b00afadb5 100644 --- a/api/src/com/cloud/api/commands/ListPhysicalNetworksCmd.java +++ b/api/src/com/cloud/api/commands/ListPhysicalNetworksCmd.java @@ -43,7 +43,7 @@ public class ListPhysicalNetworksCmd extends BaseListCmd { ///////////////////////////////////////////////////// //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - + @IdentityMapper(entityTableName="physical_network") @Parameter(name=ApiConstants.ID, type=CommandType.LONG, description="list physical network by id") private Long id; @@ -51,14 +51,14 @@ public class ListPhysicalNetworksCmd extends BaseListCmd { @IdentityMapper(entityTableName="data_center") @Parameter(name=ApiConstants.ZONE_ID, type=CommandType.LONG, description="the Zone ID for the physical network") private Long zoneId; - + @Parameter(name=ApiConstants.NAME, type=CommandType.STRING, description="search by name") private String networkName; ///////////////////////////////////////////////////// /////////////////// Accessors /////////////////////// ///////////////////////////////////////////////////// - + public Long getId() { return id; } @@ -66,11 +66,11 @@ public class ListPhysicalNetworksCmd extends BaseListCmd { public Long getZoneId() { return zoneId; } - + public String getNetworkName() { - return networkName; + return networkName; } - + ///////////////////////////////////////////////////// /////////////// API Implementation/////////////////// ///////////////////////////////////////////////////// @@ -79,12 +79,12 @@ public class ListPhysicalNetworksCmd extends BaseListCmd { public String getCommandName() { return s_name; } - + @Override public long getEntityOwnerId() { return Account.ACCOUNT_ID_SYSTEM; } - + @Override public void execute(){ Pair, Integer> result = _networkService.searchPhysicalNetworks(getId(),getZoneId(), diff --git a/api/src/com/cloud/api/commands/ListPodsByCmd.java b/api/src/com/cloud/api/commands/ListPodsByCmd.java index e071dc7dfd7..d894606199f 100755 --- a/api/src/com/cloud/api/commands/ListPodsByCmd.java +++ b/api/src/com/cloud/api/commands/ListPodsByCmd.java @@ -51,13 +51,13 @@ public class ListPodsByCmd extends BaseListCmd { @IdentityMapper(entityTableName="data_center") @Parameter(name=ApiConstants.ZONE_ID, type=CommandType.LONG, description="list Pods by Zone ID") private Long zoneId; - + @Parameter(name=ApiConstants.ALLOCATION_STATE, type=CommandType.STRING, description="list pods by allocation state") - private String allocationState; - + private String allocationState; + @Parameter(name=ApiConstants.SHOW_CAPACITIES, type=CommandType.BOOLEAN, description="flag to display the capacity of the pods") private Boolean showCapacities; - + ///////////////////////////////////////////////////// /////////////////// Accessors /////////////////////// ///////////////////////////////////////////////////// @@ -73,15 +73,15 @@ public class ListPodsByCmd extends BaseListCmd { public Long getZoneId() { return zoneId; } - + public String getAllocationState() { - return allocationState; - } + return allocationState; + } public Boolean getShowCapacities() { - return showCapacities; - } - + return showCapacities; + } + ///////////////////////////////////////////////////// /////////////// API Implementation/////////////////// ///////////////////////////////////////////////////// diff --git a/api/src/com/cloud/api/commands/ListPortForwardingRulesCmd.java b/api/src/com/cloud/api/commands/ListPortForwardingRulesCmd.java index 6a44bddc099..37bbd14060e 100644 --- a/api/src/com/cloud/api/commands/ListPortForwardingRulesCmd.java +++ b/api/src/com/cloud/api/commands/ListPortForwardingRulesCmd.java @@ -40,11 +40,11 @@ public class ListPortForwardingRulesCmd extends BaseListTaggedResourcesCmd { ///////////////////////////////////////////////////// //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - + @IdentityMapper(entityTableName="firewall_rules") @Parameter(name=ApiConstants.ID, type=CommandType.LONG, description="Lists rule with the specified ID.") private Long id; - + @IdentityMapper(entityTableName="user_ip_address") @Parameter(name=ApiConstants.IP_ADDRESS_ID, type=CommandType.LONG, description="the id of IP address of the port forwarding services") private Long ipAddressId; @@ -52,11 +52,11 @@ public class ListPortForwardingRulesCmd extends BaseListTaggedResourcesCmd { ///////////////////////////////////////////////////// /////////////////// Accessors /////////////////////// ///////////////////////////////////////////////////// - + public Long getIpAddressId() { return ipAddressId; } - + public Long getId() { return id; } @@ -69,13 +69,13 @@ public class ListPortForwardingRulesCmd extends BaseListTaggedResourcesCmd { public String getCommandName() { return s_name; } - + @Override public void execute(){ Pair, Integer> result = _rulesService.listPortForwardingRules(this); ListResponse response = new ListResponse(); List fwResponses = new ArrayList(); - + for (PortForwardingRule fwRule : result.first()) { FirewallRuleResponse ruleData = _responseGenerator.createPortForwardingRuleResponse(fwRule); ruleData.setObjectName("portforwardingrule"); @@ -83,6 +83,6 @@ public class ListPortForwardingRulesCmd extends BaseListTaggedResourcesCmd { } response.setResponses(fwResponses, result.second()); response.setResponseName(getCommandName()); - this.setResponseObject(response); + this.setResponseObject(response); } } diff --git a/api/src/com/cloud/api/commands/ListProjectAccountsCmd.java b/api/src/com/cloud/api/commands/ListProjectAccountsCmd.java index 0ba1fae697c..4f8a6e312d9 100644 --- a/api/src/com/cloud/api/commands/ListProjectAccountsCmd.java +++ b/api/src/com/cloud/api/commands/ListProjectAccountsCmd.java @@ -42,14 +42,14 @@ public class ListProjectAccountsCmd extends BaseListCmd { ///////////////////////////////////////////////////// //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - + @IdentityMapper(entityTableName="projects") @Parameter(name=ApiConstants.PROJECT_ID, type=CommandType.LONG, required=true, description="id of the project") private Long projectId; @Parameter(name=ApiConstants.ACCOUNT, type=CommandType.STRING, description="list accounts of the project by account name") private String accountName; - + @Parameter(name=ApiConstants.ROLE, type=CommandType.STRING, description="list accounts of the project by role") private String role; ///////////////////////////////////////////////////// @@ -64,14 +64,14 @@ public class ListProjectAccountsCmd extends BaseListCmd { public String getCommandName() { return s_name; } - + @Override public long getEntityOwnerId() { //TODO - return project entity ownerId return Account.ACCOUNT_ID_SYSTEM; // no account info given, parent this command to SYSTEM so ERROR events are tracked } - + ///////////////////////////////////////////////////// /////////////// API Implementation/////////////////// @@ -89,7 +89,7 @@ public class ListProjectAccountsCmd extends BaseListCmd { } response.setResponses(projectResponses, projectAccounts.second()); response.setResponseName(getCommandName()); - + this.setResponseObject(response); } -} \ No newline at end of file +} diff --git a/api/src/com/cloud/api/commands/ListPublicIpAddressesCmd.java b/api/src/com/cloud/api/commands/ListPublicIpAddressesCmd.java index be4805df38f..a310129e427 100644 --- a/api/src/com/cloud/api/commands/ListPublicIpAddressesCmd.java +++ b/api/src/com/cloud/api/commands/ListPublicIpAddressesCmd.java @@ -48,7 +48,7 @@ public class ListPublicIpAddressesCmd extends BaseListTaggedResourcesCmd { @Parameter(name=ApiConstants.FOR_VIRTUAL_NETWORK, type=CommandType.BOOLEAN, description="the virtual network for the IP address") private Boolean forVirtualNetwork; - + @IdentityMapper(entityTableName="user_ip_address") @Parameter(name=ApiConstants.ID, type=CommandType.LONG, description="lists ip address by id") private Long id; @@ -63,24 +63,24 @@ public class ListPublicIpAddressesCmd extends BaseListTaggedResourcesCmd { @IdentityMapper(entityTableName="data_center") @Parameter(name=ApiConstants.ZONE_ID, type=CommandType.LONG, description="lists all public IP addresses by Zone ID") private Long zoneId; - + @Parameter(name=ApiConstants.FOR_LOAD_BALANCING, type=CommandType.BOOLEAN, description="list only ips used for load balancing") private Boolean forLoadBalancing; - + @IdentityMapper(entityTableName="physical_network") @Parameter(name=ApiConstants.PHYSICAL_NETWORK_ID, type=CommandType.LONG, description="lists all public IP addresses by physical network id") private Long physicalNetworkId; - + @IdentityMapper(entityTableName="networks") @Parameter(name=ApiConstants.ASSOCIATED_NETWORK_ID, type=CommandType.LONG, description="lists all public IP addresses associated to the network specified") private Long associatedNetworkId; - + @Parameter(name=ApiConstants.IS_SOURCE_NAT, type=CommandType.BOOLEAN, description="list only source nat ip addresses") private Boolean isSourceNat; - + @Parameter(name=ApiConstants.IS_STATIC_NAT, type=CommandType.BOOLEAN, description="list only static nat ip addresses") private Boolean isStaticNat; - + @IdentityMapper(entityTableName="vpc") @Parameter(name=ApiConstants.VPC_ID, type=CommandType.LONG, description="List ips belonging to the VPC") private Long vpcId; @@ -111,35 +111,35 @@ public class ListPublicIpAddressesCmd extends BaseListTaggedResourcesCmd { public Long getZoneId() { return zoneId; } - + public Long getPhysicalNetworkId() { return physicalNetworkId; } - + public Long getAssociatedNetworkId() { - return associatedNetworkId; - } + return associatedNetworkId; + } public Boolean getIsSourceNat() { - return isSourceNat; - } + return isSourceNat; + } - public Boolean getIsStaticNat() { - return isStaticNat; - } + public Boolean getIsStaticNat() { + return isStaticNat; + } - public Long getVpcId() { + public Long getVpcId() { return vpcId; - } + } - ///////////////////////////////////////////////////// + ///////////////////////////////////////////////////// /////////////// API Implementation/////////////////// ///////////////////////////////////////////////////// - @Override + @Override public String getCommandName() { return s_name; } - + @Override public void execute(){ Pair, Integer> result = _mgr.searchForIPAddresses(this); @@ -155,7 +155,7 @@ public class ListPublicIpAddressesCmd extends BaseListTaggedResourcesCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); } - + public AsyncJob.Type getInstanceType() { return AsyncJob.Type.IpAddress; } diff --git a/api/src/com/cloud/api/commands/ListRecurringSnapshotScheduleCmd.java b/api/src/com/cloud/api/commands/ListRecurringSnapshotScheduleCmd.java index e9f0052552a..85aa7e84d78 100644 --- a/api/src/com/cloud/api/commands/ListRecurringSnapshotScheduleCmd.java +++ b/api/src/com/cloud/api/commands/ListRecurringSnapshotScheduleCmd.java @@ -61,7 +61,7 @@ public class ListRecurringSnapshotScheduleCmd extends BaseListCmd { public String getCommandName() { return s_name; } - + @Override public void execute(){ List snapshotSchedules = _snapshotService.findRecurringSnapshotSchedule(this); diff --git a/api/src/com/cloud/api/commands/ListResourceLimitsCmd.java b/api/src/com/cloud/api/commands/ListResourceLimitsCmd.java index 1782fdaea65..7f832ae09cd 100644 --- a/api/src/com/cloud/api/commands/ListResourceLimitsCmd.java +++ b/api/src/com/cloud/api/commands/ListResourceLimitsCmd.java @@ -43,12 +43,12 @@ public class ListResourceLimitsCmd extends BaseListProjectAndAccountResourcesCmd private Long id; @Parameter(name=ApiConstants.RESOURCE_TYPE, type=CommandType.INTEGER, description="Type of resource to update. Values are 0, 1, 2, 3, and 4. 0 - Instance. Number of instances a user can create. " + - "1 - IP. Number of public IP addresses a user can own. " + - "2 - Volume. Number of disk volumes a user can create." + - "3 - Snapshot. Number of snapshots a user can create." + - "4 - Template. Number of templates that a user can register/create.") - private Integer resourceType; - + "1 - IP. Number of public IP addresses a user can own. " + + "2 - Volume. Number of disk volumes a user can create." + + "3 - Snapshot. Number of snapshots a user can create." + + "4 - Template. Number of templates that a user can register/create.") + private Integer resourceType; + ///////////////////////////////////////////////////// /////////////////// Accessors /////////////////////// ///////////////////////////////////////////////////// @@ -64,12 +64,12 @@ public class ListResourceLimitsCmd extends BaseListProjectAndAccountResourcesCmd ///////////////////////////////////////////////////// /////////////// API Implementation/////////////////// ///////////////////////////////////////////////////// - + @Override public String getCommandName() { return s_name; } - + @Override public void execute(){ List result = _resourceLimitService.searchForLimits(id, finalyzeAccountId(this.getAccountName(), this.getDomainId(), this.getProjectId(), false), this.getDomainId(), resourceType, this.getStartIndex(), this.getPageSizeVal()); diff --git a/api/src/com/cloud/api/commands/ListRoutersCmd.java b/api/src/com/cloud/api/commands/ListRoutersCmd.java index 681c13a09b7..d4c41fce82b 100644 --- a/api/src/com/cloud/api/commands/ListRoutersCmd.java +++ b/api/src/com/cloud/api/commands/ListRoutersCmd.java @@ -49,7 +49,7 @@ public class ListRoutersCmd extends BaseListProjectAndAccountResourcesCmd { @IdentityMapper(entityTableName="vm_instance") @Parameter(name=ApiConstants.ID, type=CommandType.LONG, description="the ID of the disk router") private Long id; - + @Parameter(name=ApiConstants.NAME, type=CommandType.STRING, description="the name of the router") private String routerName; @@ -63,15 +63,15 @@ public class ListRoutersCmd extends BaseListProjectAndAccountResourcesCmd { @IdentityMapper(entityTableName="data_center") @Parameter(name=ApiConstants.ZONE_ID, type=CommandType.LONG, description="the Zone ID of the router") private Long zoneId; - + @IdentityMapper(entityTableName="networks") @Parameter(name=ApiConstants.NETWORK_ID, type=CommandType.LONG, description="list by network id") private Long networkId; - + @IdentityMapper(entityTableName="vpc") @Parameter(name=ApiConstants.VPC_ID, type=CommandType.LONG, description="List networks by VPC") private Long vpcId; - + @Parameter(name=ApiConstants.FOR_VPC, type=CommandType.BOOLEAN, description="if true is passed for this parameter, list only VPC routers") private Boolean forVpc; @@ -86,7 +86,7 @@ public class ListRoutersCmd extends BaseListProjectAndAccountResourcesCmd { public Long getId() { return id; } - + public String getRouterName() { return routerName; } @@ -102,15 +102,15 @@ public class ListRoutersCmd extends BaseListProjectAndAccountResourcesCmd { public Long getZoneId() { return zoneId; } - + public Long getNetworkId() { return networkId; } - + public Long getVpcId() { return vpcId; } - + public Boolean getForVpc() { return forVpc; } @@ -123,9 +123,9 @@ public class ListRoutersCmd extends BaseListProjectAndAccountResourcesCmd { public String getCommandName() { return s_name; } - + public AsyncJob.Type getInstanceType() { - return AsyncJob.Type.DomainRouter; + return AsyncJob.Type.DomainRouter; } @Override diff --git a/api/src/com/cloud/api/commands/ListSSHKeyPairsCmd.java b/api/src/com/cloud/api/commands/ListSSHKeyPairsCmd.java index 398a8182b67..710377772f3 100644 --- a/api/src/com/cloud/api/commands/ListSSHKeyPairsCmd.java +++ b/api/src/com/cloud/api/commands/ListSSHKeyPairsCmd.java @@ -30,59 +30,59 @@ import com.cloud.api.response.SSHKeyPairResponse; import com.cloud.user.SSHKeyPair; import com.cloud.utils.Pair; -@Implementation(description="List registered keypairs", responseObject=SSHKeyPairResponse.class) +@Implementation(description="List registered keypairs", responseObject=SSHKeyPairResponse.class) public class ListSSHKeyPairsCmd extends BaseListProjectAndAccountResourcesCmd { public static final Logger s_logger = Logger.getLogger(ListSSHKeyPairsCmd.class.getName()); private static final String s_name = "listsshkeypairsresponse"; - - + + ///////////////////////////////////////////////////// //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - - @Parameter(name=ApiConstants.NAME, type=CommandType.STRING, description="A key pair name to look for") - private String name; - - @Parameter(name="fingerprint", type=CommandType.STRING, description="A public key fingerprint to look for") + + @Parameter(name=ApiConstants.NAME, type=CommandType.STRING, description="A key pair name to look for") + private String name; + + @Parameter(name="fingerprint", type=CommandType.STRING, description="A public key fingerprint to look for") private String fingerprint; - + ///////////////////////////////////////////////////// /////////////////// Accessors /////////////////////// - ///////////////////////////////////////////////////// - - public String getName() { - return name; - } - - public String getFingerprint() { - return fingerprint; - } - - + ///////////////////////////////////////////////////// + + public String getName() { + return name; + } + + public String getFingerprint() { + return fingerprint; + } + + ///////////////////////////////////////////////////// /////////////// API Implementation/////////////////// ///////////////////////////////////////////////////// - - @Override - public void execute() { - Pair, Integer> resultList = _mgr.listSSHKeyPairs(this); - List responses = new ArrayList(); - for (SSHKeyPair result : resultList.first()) { - SSHKeyPairResponse r = new SSHKeyPairResponse(result.getName(), result.getFingerprint()); - r.setObjectName("sshkeypair"); - responses.add(r); - } - + + @Override + public void execute() { + Pair, Integer> resultList = _mgr.listSSHKeyPairs(this); + List responses = new ArrayList(); + for (SSHKeyPair result : resultList.first()) { + SSHKeyPairResponse r = new SSHKeyPairResponse(result.getName(), result.getFingerprint()); + r.setObjectName("sshkeypair"); + responses.add(r); + } + ListResponse response = new ListResponse(); response.setResponses(responses, resultList.second()); response.setResponseName(getCommandName()); this.setResponseObject(response); - } + } - @Override - public String getCommandName() { - return s_name; - } + @Override + public String getCommandName() { + return s_name; + } } diff --git a/api/src/com/cloud/api/commands/ListSecurityGroupsCmd.java b/api/src/com/cloud/api/commands/ListSecurityGroupsCmd.java index 53889a7bf45..92117414dc8 100644 --- a/api/src/com/cloud/api/commands/ListSecurityGroupsCmd.java +++ b/api/src/com/cloud/api/commands/ListSecurityGroupsCmd.java @@ -33,7 +33,7 @@ import com.cloud.network.security.SecurityGroupRules; @Implementation(description="Lists security groups", responseObject=SecurityGroupResponse.class) public class ListSecurityGroupsCmd extends BaseListTaggedResourcesCmd { - public static final Logger s_logger = Logger.getLogger(ListSecurityGroupsCmd.class.getName()); + public static final Logger s_logger = Logger.getLogger(ListSecurityGroupsCmd.class.getName()); private static final String s_name = "listsecuritygroupsresponse"; @@ -51,7 +51,7 @@ public class ListSecurityGroupsCmd extends BaseListTaggedResourcesCmd { @IdentityMapper(entityTableName="security_group") @Parameter(name=ApiConstants.ID, type=CommandType.LONG, description="list the security group by the id provided") private Long id; - + ///////////////////////////////////////////////////// /////////////////// Accessors /////////////////////// ///////////////////////////////////////////////////// @@ -62,9 +62,9 @@ public class ListSecurityGroupsCmd extends BaseListTaggedResourcesCmd { public Long getVirtualMachineId() { return virtualMachineId; } - + public Long getId(){ - return id; + return id; } ///////////////////////////////////////////////////// @@ -84,7 +84,7 @@ public class ListSecurityGroupsCmd extends BaseListTaggedResourcesCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); } - + @Override public AsyncJob.Type getInstanceType() { return AsyncJob.Type.SecurityGroup; diff --git a/api/src/com/cloud/api/commands/ListServiceOfferingsCmd.java b/api/src/com/cloud/api/commands/ListServiceOfferingsCmd.java index b1ad2e9d3a9..69763b984b7 100644 --- a/api/src/com/cloud/api/commands/ListServiceOfferingsCmd.java +++ b/api/src/com/cloud/api/commands/ListServiceOfferingsCmd.java @@ -50,7 +50,7 @@ public class ListServiceOfferingsCmd extends BaseListCmd { @IdentityMapper(entityTableName="vm_instance") @Parameter(name=ApiConstants.VIRTUAL_MACHINE_ID, type=CommandType.LONG, description="the ID of the virtual machine. Pass this in if you want to see the available service offering that a virtual machine can be changed to.") private Long virtualMachineId; - + @IdentityMapper(entityTableName="domain") @Parameter(name=ApiConstants.DOMAIN_ID, type=CommandType.LONG, description="the ID of the domain associated with the service offering") private Long domainId; @@ -61,7 +61,7 @@ public class ListServiceOfferingsCmd extends BaseListCmd { @Parameter(name=ApiConstants.SYSTEM_VM_TYPE, type=CommandType.STRING, description="the system VM type. Possible types are \"consoleproxy\", \"secondarystoragevm\" or \"domainrouter\".") private String systemVmType; - + ///////////////////////////////////////////////////// /////////////////// Accessors /////////////////////// ///////////////////////////////////////////////////// @@ -79,13 +79,13 @@ public class ListServiceOfferingsCmd extends BaseListCmd { } public Long getDomainId(){ - return domainId; + return domainId; } - + public Boolean getIsSystem() { return isSystem == null ? false : isSystem; } - + public String getSystemVmType(){ return systemVmType; } @@ -98,7 +98,7 @@ public class ListServiceOfferingsCmd extends BaseListCmd { public String getCommandName() { return s_name; } - + @Override public void execute(){ List offerings = _mgr.searchForServiceOfferings(this); diff --git a/api/src/com/cloud/api/commands/ListSnapshotPoliciesCmd.java b/api/src/com/cloud/api/commands/ListSnapshotPoliciesCmd.java index b1bc0f43811..79105bb04df 100644 --- a/api/src/com/cloud/api/commands/ListSnapshotPoliciesCmd.java +++ b/api/src/com/cloud/api/commands/ListSnapshotPoliciesCmd.java @@ -72,7 +72,7 @@ public class ListSnapshotPoliciesCmd extends BaseListCmd { policyResponses.add(policyResponse); } response.setResponses(policyResponses); - response.setResponseName(getCommandName()); + response.setResponseName(getCommandName()); this.setResponseObject(response); } } diff --git a/api/src/com/cloud/api/commands/ListSnapshotsCmd.java b/api/src/com/cloud/api/commands/ListSnapshotsCmd.java index 7e49c328411..44b192b06c0 100644 --- a/api/src/com/cloud/api/commands/ListSnapshotsCmd.java +++ b/api/src/com/cloud/api/commands/ListSnapshotsCmd.java @@ -35,7 +35,7 @@ import com.cloud.utils.Pair; @Implementation(description="Lists all available snapshots for the account.", responseObject=SnapshotResponse.class) public class ListSnapshotsCmd extends BaseListTaggedResourcesCmd { - public static final Logger s_logger = Logger.getLogger(ListSnapshotsCmd.class.getName()); + public static final Logger s_logger = Logger.getLogger(ListSnapshotsCmd.class.getName()); private static final String s_name = "listsnapshotsresponse"; @@ -83,7 +83,7 @@ public class ListSnapshotsCmd extends BaseListTaggedResourcesCmd { public Long getVolumeId() { return volumeId; } - + ///////////////////////////////////////////////////// /////////////// API Implementation/////////////////// ///////////////////////////////////////////////////// @@ -92,9 +92,9 @@ public class ListSnapshotsCmd extends BaseListTaggedResourcesCmd { public String getCommandName() { return s_name; } - + public AsyncJob.Type getInstanceType() { - return AsyncJob.Type.Snapshot; + return AsyncJob.Type.Snapshot; } @Override @@ -109,7 +109,7 @@ public class ListSnapshotsCmd extends BaseListTaggedResourcesCmd { } response.setResponses(snapshotResponses, result.second()); response.setResponseName(getCommandName()); - + this.setResponseObject(response); } } diff --git a/api/src/com/cloud/api/commands/ListStoragePoolsCmd.java b/api/src/com/cloud/api/commands/ListStoragePoolsCmd.java index 154013a1dac..3787f9289b9 100644 --- a/api/src/com/cloud/api/commands/ListStoragePoolsCmd.java +++ b/api/src/com/cloud/api/commands/ListStoragePoolsCmd.java @@ -62,7 +62,7 @@ public class ListStoragePoolsCmd extends BaseListCmd { @IdentityMapper(entityTableName="data_center") @Parameter(name=ApiConstants.ZONE_ID, type=CommandType.LONG, description="the Zone ID for the storage pool") private Long zoneId; - + @IdentityMapper(entityTableName="storage_pool") @Parameter(name=ApiConstants.ID, type=CommandType.LONG, description="the ID of the storage pool") private Long id; @@ -94,9 +94,9 @@ public class ListStoragePoolsCmd extends BaseListCmd { public Long getZoneId() { return zoneId; } - + public Long getId() { - return id; + return id; } ///////////////////////////////////////////////////// @@ -107,7 +107,7 @@ public class ListStoragePoolsCmd extends BaseListCmd { public String getCommandName() { return s_name; } - + public AsyncJob.Type getInstanceType() { return AsyncJob.Type.StoragePool; } diff --git a/api/src/com/cloud/api/commands/ListSupportedNetworkServicesCmd.java b/api/src/com/cloud/api/commands/ListSupportedNetworkServicesCmd.java index 517ed54954e..83462bb0707 100644 --- a/api/src/com/cloud/api/commands/ListSupportedNetworkServicesCmd.java +++ b/api/src/com/cloud/api/commands/ListSupportedNetworkServicesCmd.java @@ -37,21 +37,21 @@ import com.cloud.user.Account; public class ListSupportedNetworkServicesCmd extends BaseListCmd { public static final Logger s_logger = Logger.getLogger(ListSupportedNetworkServicesCmd.class.getName()); private static final String _name = "listsupportednetworkservicesresponse"; - + @Parameter(name=ApiConstants.PROVIDER, type=CommandType.STRING, description="network service provider name") private String providerName; - + @Parameter(name=ApiConstants.SERVICE, type=CommandType.STRING, description="network service name to list providers and capabilities of") private String serviceName; ///////////////////////////////////////////////////// //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - + ///////////////////////////////////////////////////// /////////////////// Accessors /////////////////////// ///////////////////////////////////////////////////// - + public void setProviderName(String providerName) { this.providerName = providerName; @@ -78,10 +78,10 @@ public class ListSupportedNetworkServicesCmd extends BaseListCmd { public long getEntityOwnerId() { return Account.ACCOUNT_ID_SYSTEM; } - + @Override public void execute(){ - List services; + List services; if(getServiceName() != null){ Network.Service service = null; if(serviceName != null){ @@ -96,14 +96,14 @@ public class ListSupportedNetworkServicesCmd extends BaseListCmd { }else{ services = _networkService.listNetworkServices(getProviderName()); } - + ListResponse response = new ListResponse(); List servicesResponses = new ArrayList(); for (Network.Service service : services) { - //skip gateway service - if (service == Service.Gateway) { - continue; - } + //skip gateway service + if (service == Service.Gateway) { + continue; + } ServiceResponse serviceResponse = _responseGenerator.createNetworkServiceResponse(service); servicesResponses.add(serviceResponse); } diff --git a/api/src/com/cloud/api/commands/ListSwiftsCmd.java b/api/src/com/cloud/api/commands/ListSwiftsCmd.java index ec030c8f6fb..5c4563a3bdb 100644 --- a/api/src/com/cloud/api/commands/ListSwiftsCmd.java +++ b/api/src/com/cloud/api/commands/ListSwiftsCmd.java @@ -35,7 +35,7 @@ import com.cloud.user.Account; public class ListSwiftsCmd extends BaseListCmd { public static final Logger s_logger = Logger.getLogger(ListSwiftsCmd.class.getName()); private static final String s_name = "listswiftsresponse"; - + ///////////////////////////////////////////////////// //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// @@ -54,14 +54,14 @@ public class ListSwiftsCmd extends BaseListCmd { @Override public String getCommandName() { - return s_name; + return s_name; } - + @Override public long getEntityOwnerId() { return Account.ACCOUNT_ID_SYSTEM; } - + @Override public void execute(){ List result = _resourceService.listSwifts(this); diff --git a/api/src/com/cloud/api/commands/ListSystemVMsCmd.java b/api/src/com/cloud/api/commands/ListSystemVMsCmd.java index e8c01ccc6a2..1378e98ac96 100644 --- a/api/src/com/cloud/api/commands/ListSystemVMsCmd.java +++ b/api/src/com/cloud/api/commands/ListSystemVMsCmd.java @@ -66,7 +66,7 @@ public class ListSystemVMsCmd extends BaseListCmd { @IdentityMapper(entityTableName="data_center") @Parameter(name=ApiConstants.ZONE_ID, type=CommandType.LONG, description="the Zone ID of the system VM") private Long zoneId; - + @IdentityMapper(entityTableName="storage_pool") @Parameter(name=ApiConstants.STORAGE_ID, type=CommandType.LONG, description="the storage ID where vm's volumes belong to", since="3.0.1") private Long storageId; @@ -102,7 +102,7 @@ public class ListSystemVMsCmd extends BaseListCmd { public Long getZoneId() { return zoneId; } - + public Long getStorageId() { return storageId; } @@ -115,11 +115,11 @@ public class ListSystemVMsCmd extends BaseListCmd { public String getCommandName() { return s_name; } - + public AsyncJob.Type getInstanceType() { - return AsyncJob.Type.SystemVm; + return AsyncJob.Type.SystemVm; } - + @Override public void execute(){ Pair, Integer> systemVMs = _mgr.searchForSystemVm(this); diff --git a/api/src/com/cloud/api/commands/ListTagsCmd.java b/api/src/com/cloud/api/commands/ListTagsCmd.java index 5fe49d447e4..8b61b666aca 100644 --- a/api/src/com/cloud/api/commands/ListTagsCmd.java +++ b/api/src/com/cloud/api/commands/ListTagsCmd.java @@ -32,30 +32,30 @@ import com.cloud.utils.Pair; @Implementation(description = "List resource tag(s)", responseObject = ResourceTagResponse.class, since = "Burbank") public class ListTagsCmd extends BaseListProjectAndAccountResourcesCmd{ private static final String s_name = "listtagsresponse"; - + @Parameter(name=ApiConstants.RESOURCE_TYPE, type=CommandType.STRING, description="list by resource type") private String resourceType; - + @Parameter(name=ApiConstants.RESOURCE_ID, type=CommandType.STRING, description="list by resource id") private String resourceId; - + @Parameter(name=ApiConstants.KEY, type=CommandType.STRING, description="list by key") private String key; - + @Parameter(name=ApiConstants.VALUE, type=CommandType.STRING, description="list by value") private String value; - + @Parameter(name=ApiConstants.CUSTOMER, type=CommandType.STRING, description="list by customer name") private String customer; - - + + ///////////////////////////////////////////////////// /////////////////// Accessors /////////////////////// ///////////////////////////////////////////////////// @Override public void execute() { - + Pair, Integer> tags = _taggedResourceService.listTags(this); ListResponse response = new ListResponse(); List tagResponses = new ArrayList(); @@ -64,7 +64,7 @@ public class ListTagsCmd extends BaseListProjectAndAccountResourcesCmd{ tagResponses.add(tagResponse); } response.setResponses(tagResponses, tags.second()); - + response.setResponseName(getCommandName()); this.setResponseObject(response); } @@ -89,7 +89,7 @@ public class ListTagsCmd extends BaseListProjectAndAccountResourcesCmd{ public String getCommandName() { return s_name; } - + public String getCustomer() { return customer; } diff --git a/api/src/com/cloud/api/commands/ListTemplateOrIsoPermissionsCmd.java b/api/src/com/cloud/api/commands/ListTemplateOrIsoPermissionsCmd.java index bb3be6a4324..bbae302522b 100644 --- a/api/src/com/cloud/api/commands/ListTemplateOrIsoPermissionsCmd.java +++ b/api/src/com/cloud/api/commands/ListTemplateOrIsoPermissionsCmd.java @@ -32,7 +32,7 @@ import com.cloud.user.UserContext; @Implementation(description="List template visibility and all accounts that have permissions to view this template.", responseObject=TemplatePermissionsResponse.class) public class ListTemplateOrIsoPermissionsCmd extends BaseCmd { - public Logger s_logger = getLogger(); + public Logger s_logger = getLogger(); protected String s_name = "listtemplatepermissionsresponse"; ///////////////////////////////////////////////////// @@ -68,23 +68,23 @@ public class ListTemplateOrIsoPermissionsCmd extends BaseCmd { public String getCommandName() { return s_name; } - + protected boolean templateIsCorrectType(VirtualMachineTemplate template) { - return true; + return true; } - + public String getMediaType() { - return "templateOrIso"; + return "templateOrIso"; } - + protected Logger getLogger() { - return Logger.getLogger(UpdateTemplateOrIsoPermissionsCmd.class.getName()); + return Logger.getLogger(UpdateTemplateOrIsoPermissionsCmd.class.getName()); } - + @Override public void execute(){ List accountNames = _templateService.listTemplatePermissions(this); - + Account account = UserContext.current().getCaller(); boolean isAdmin = (isAdmin(account.getType())); diff --git a/api/src/com/cloud/api/commands/ListTemplatePermissionsCmd.java b/api/src/com/cloud/api/commands/ListTemplatePermissionsCmd.java index af90df9282b..6e118d90667 100644 --- a/api/src/com/cloud/api/commands/ListTemplatePermissionsCmd.java +++ b/api/src/com/cloud/api/commands/ListTemplatePermissionsCmd.java @@ -25,17 +25,17 @@ public class ListTemplatePermissionsCmd extends ListTemplateOrIsoPermissionsCmd protected String getResponseName() { return "listtemplatepermissionsresponse"; } - + @Override public String getMediaType() { return "template"; } - + @Override protected Logger getLogger() { - return Logger.getLogger(ListTemplatePermissionsCmd.class.getName()); + return Logger.getLogger(ListTemplatePermissionsCmd.class.getName()); } - + protected boolean templateIsCorrectType(VirtualMachineTemplate template) { return !template.getFormat().equals(ImageFormat.ISO); } diff --git a/api/src/com/cloud/api/commands/ListTemplatesCmd.java b/api/src/com/cloud/api/commands/ListTemplatesCmd.java index 362a27cde51..ca5dd734cb1 100755 --- a/api/src/com/cloud/api/commands/ListTemplatesCmd.java +++ b/api/src/com/cloud/api/commands/ListTemplatesCmd.java @@ -56,10 +56,10 @@ public class ListTemplatesCmd extends BaseListTaggedResourcesCmd { private String templateName; @Parameter(name=ApiConstants.TEMPLATE_FILTER, type=CommandType.STRING, required=true, description="possible values are \"featured\", \"self\", \"self-executable\", \"executable\", and \"community\"." + - "* featured-templates that are featured and are public" + - "* self-templates that have been registered/created by the owner" + - "* selfexecutable-templates that have been registered/created by the owner that can be used to deploy a new VM" + - "* executable-all templates that can be used to deploy a new VM* community-templates that are public.") + "* featured-templates that are featured and are public" + + "* self-templates that have been registered/created by the owner" + + "* selfexecutable-templates that have been registered/created by the owner that can be used to deploy a new VM" + + "* executable-all templates that can be used to deploy a new VM* community-templates that are public.") private String templateFilter; @IdentityMapper(entityTableName="data_center") @@ -88,9 +88,9 @@ public class ListTemplatesCmd extends BaseListTaggedResourcesCmd { public Long getZoneId() { return zoneId; } - + public boolean listInReadyState() { - + Account account = UserContext.current().getCaller(); // It is account specific if account is admin type and domainId and accountName are not null boolean isAccountSpecific = (account == null || isAdmin(account.getType())) && (getAccountName() != null) && (getDomainId() != null); @@ -109,11 +109,11 @@ public class ListTemplatesCmd extends BaseListTaggedResourcesCmd { public String getCommandName() { return s_name; } - + public AsyncJob.Type getInstanceType() { - return AsyncJob.Type.Template; + return AsyncJob.Type.Template; } - + @Override public void execute(){ Set> templateZonePairSet = _mgr.listTemplates(this); diff --git a/api/src/com/cloud/api/commands/ListTrafficTypeImplementorsCmd.java b/api/src/com/cloud/api/commands/ListTrafficTypeImplementorsCmd.java index afff055a1ea..ed1ec439be7 100755 --- a/api/src/com/cloud/api/commands/ListTrafficTypeImplementorsCmd.java +++ b/api/src/com/cloud/api/commands/ListTrafficTypeImplementorsCmd.java @@ -38,49 +38,49 @@ import com.cloud.utils.Pair; @Implementation(description="Lists implementors of implementor of a network traffic type or implementors of all network traffic types", responseObject=TrafficTypeImplementorResponse.class, since="3.0.0") public class ListTrafficTypeImplementorsCmd extends BaseListCmd { - public static final Logger s_logger = Logger.getLogger(ListTrafficTypeImplementorsCmd.class); - private static final String _name = "listtraffictypeimplementorsresponse"; - + public static final Logger s_logger = Logger.getLogger(ListTrafficTypeImplementorsCmd.class); + private static final String _name = "listtraffictypeimplementorsresponse"; + ///////////////////////////////////////////////////// //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// @Parameter(name=ApiConstants.TRAFFIC_TYPE, type=CommandType.STRING, description="Optional. The network traffic type, if specified, return its implementor. Otherwise, return all traffic types with their implementor") private String trafficType; - + ///////////////////////////////////////////////////// /////////////////// Accessors /////////////////////// ///////////////////////////////////////////////////// - + public String getTrafficType() { - return trafficType; + return trafficType; } - - @Override - public void execute() throws ResourceUnavailableException, InsufficientCapacityException, ServerApiException, ConcurrentOperationException, - ResourceAllocationException { - List> results = _networkService.listTrafficTypeImplementor(this); - ListResponse response = new ListResponse(); - List responses= new ArrayList(); - for (Pair r : results) { - TrafficTypeImplementorResponse p = new TrafficTypeImplementorResponse(); - p.setTrafficType(r.first().toString()); - p.setImplementor(r.second()); - p.setObjectName("traffictypeimplementorresponse"); - responses.add(p); - } - - response.setResponses(responses); - response.setResponseName(getCommandName()); - this.setResponseObject(response); - } - + + @Override + public void execute() throws ResourceUnavailableException, InsufficientCapacityException, ServerApiException, ConcurrentOperationException, + ResourceAllocationException { + List> results = _networkService.listTrafficTypeImplementor(this); + ListResponse response = new ListResponse(); + List responses= new ArrayList(); + for (Pair r : results) { + TrafficTypeImplementorResponse p = new TrafficTypeImplementorResponse(); + p.setTrafficType(r.first().toString()); + p.setImplementor(r.second()); + p.setObjectName("traffictypeimplementorresponse"); + responses.add(p); + } + + response.setResponses(responses); + response.setResponseName(getCommandName()); + this.setResponseObject(response); + } + @Override public long getEntityOwnerId() { return Account.ACCOUNT_ID_SYSTEM; } - - @Override - public String getCommandName() { - return _name; - } + + @Override + public String getCommandName() { + return _name; + } } diff --git a/api/src/com/cloud/api/commands/ListTrafficTypesCmd.java b/api/src/com/cloud/api/commands/ListTrafficTypesCmd.java index 5f77dd4f1f4..17bd32ddffe 100755 --- a/api/src/com/cloud/api/commands/ListTrafficTypesCmd.java +++ b/api/src/com/cloud/api/commands/ListTrafficTypesCmd.java @@ -45,11 +45,11 @@ public class ListTrafficTypesCmd extends BaseListCmd { @IdentityMapper(entityTableName="physical_network") @Parameter(name=ApiConstants.PHYSICAL_NETWORK_ID, type=CommandType.LONG, required=true, description="the Physical Network ID") private Long physicalNetworkId; - + ///////////////////////////////////////////////////// /////////////////// Accessors /////////////////////// ///////////////////////////////////////////////////// - + public void setPhysicalNetworkId(Long physicalNetworkId) { this.physicalNetworkId = physicalNetworkId; } @@ -70,7 +70,7 @@ public class ListTrafficTypesCmd extends BaseListCmd { public long getEntityOwnerId() { return Account.ACCOUNT_ID_SYSTEM; } - + @Override public void execute(){ Pair, Integer> trafficTypes = _networkService.listTrafficTypes(getPhysicalNetworkId()); diff --git a/api/src/com/cloud/api/commands/ListUsersCmd.java b/api/src/com/cloud/api/commands/ListUsersCmd.java index 53ad1d52a41..23054941d3e 100644 --- a/api/src/com/cloud/api/commands/ListUsersCmd.java +++ b/api/src/com/cloud/api/commands/ListUsersCmd.java @@ -79,11 +79,11 @@ public class ListUsersCmd extends BaseListAccountResourcesCmd { /////////////// API Implementation/////////////////// ///////////////////////////////////////////////////// - @Override + @Override public String getCommandName() { return s_name; } - + @Override public void execute(){ Pair, Integer> result = _accountService.searchForUsers(this); diff --git a/api/src/com/cloud/api/commands/ListVMGroupsCmd.java b/api/src/com/cloud/api/commands/ListVMGroupsCmd.java index 25b36e7c1c9..45648da2105 100644 --- a/api/src/com/cloud/api/commands/ListVMGroupsCmd.java +++ b/api/src/com/cloud/api/commands/ListVMGroupsCmd.java @@ -65,7 +65,7 @@ public class ListVMGroupsCmd extends BaseListProjectAndAccountResourcesCmd { ///////////////////////////////////////////////////// @Override - public String getCommandName() { + public String getCommandName() { return s_name; } diff --git a/api/src/com/cloud/api/commands/ListVirtualRouterElementsCmd.java b/api/src/com/cloud/api/commands/ListVirtualRouterElementsCmd.java index a8e2f0af511..3a8cc975336 100644 --- a/api/src/com/cloud/api/commands/ListVirtualRouterElementsCmd.java +++ b/api/src/com/cloud/api/commands/ListVirtualRouterElementsCmd.java @@ -44,25 +44,25 @@ public class ListVirtualRouterElementsCmd extends BaseListCmd { @PlugService private VirtualRouterElementService _service; - + ///////////////////////////////////////////////////// //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// @IdentityMapper(entityTableName = "virtual_router_providers") @Parameter(name=ApiConstants.ID, type=CommandType.LONG, description="list virtual router elements by id") private Long id; - + @IdentityMapper(entityTableName = "physical_network_service_providers") @Parameter(name=ApiConstants.NSP_ID, type=CommandType.LONG, description="list virtual router elements by network service provider id") private Long nspId; - + @Parameter(name=ApiConstants.ENABLED, type=CommandType.BOOLEAN, description="list network offerings by enabled state") private Boolean enabled; - + ///////////////////////////////////////////////////// /////////////////// Accessors /////////////////////// ///////////////////////////////////////////////////// - + public void setId(Long id) { this.id = id; } @@ -91,7 +91,7 @@ public class ListVirtualRouterElementsCmd extends BaseListCmd { public String getCommandName() { return _name; } - + @Override public void execute() throws ResourceUnavailableException, InsufficientCapacityException, ServerApiException, ConcurrentOperationException, ResourceAllocationException { List providers = _service.searchForVirtualRouterElement(this); diff --git a/api/src/com/cloud/api/commands/ListVlanIpRangesCmd.java b/api/src/com/cloud/api/commands/ListVlanIpRangesCmd.java index 0df43036372..05044710065 100644 --- a/api/src/com/cloud/api/commands/ListVlanIpRangesCmd.java +++ b/api/src/com/cloud/api/commands/ListVlanIpRangesCmd.java @@ -33,7 +33,7 @@ import com.cloud.utils.Pair; @Implementation(description="Lists all VLAN IP ranges.", responseObject=VlanIpRangeResponse.class) public class ListVlanIpRangesCmd extends BaseListCmd { - public static final Logger s_logger = Logger.getLogger(ListVlanIpRangesCmd.class.getName()); + public static final Logger s_logger = Logger.getLogger(ListVlanIpRangesCmd.class.getName()); private static final String s_name = "listvlaniprangesresponse"; @@ -43,7 +43,7 @@ public class ListVlanIpRangesCmd extends BaseListCmd { @Parameter(name=ApiConstants.ACCOUNT, type=CommandType.STRING, description="the account with which the VLAN IP range is associated. Must be used with the domainId parameter.") private String accountName; - + @IdentityMapper(entityTableName="projects") @Parameter(name=ApiConstants.PROJECT_ID, type=CommandType.LONG, description="project who will own the VLAN") private Long projectId; @@ -66,14 +66,14 @@ public class ListVlanIpRangesCmd extends BaseListCmd { @IdentityMapper(entityTableName="data_center") @Parameter(name=ApiConstants.ZONE_ID, type=CommandType.LONG, description="the Zone ID of the VLAN IP range") private Long zoneId; - + @IdentityMapper(entityTableName="networks") @Parameter(name=ApiConstants.NETWORK_ID, type=CommandType.LONG, description="network id of the VLAN IP range") private Long networkId; - + @Parameter(name=ApiConstants.FOR_VIRTUAL_NETWORK, type=CommandType.BOOLEAN, description="true if VLAN is of Virtual type, false if Direct") private Boolean forVirtualNetwork; - + @IdentityMapper(entityTableName="physical_network") @Parameter(name=ApiConstants.PHYSICAL_NETWORK_ID, type=CommandType.LONG, description="physical network id of the VLAN IP range") private Long physicalNetworkId; @@ -109,34 +109,34 @@ public class ListVlanIpRangesCmd extends BaseListCmd { public Long getNetworkId() { return networkId; } - + public Boolean getForVirtualNetwork() { - return forVirtualNetwork; - } - + return forVirtualNetwork; + } + public Long getProjectId() { return projectId; } - + public Long getPhysicalNetworkId() { return physicalNetworkId; } - + ///////////////////////////////////////////////////// /////////////// API Implementation/////////////////// ///////////////////////////////////////////////////// - - @Override + + @Override public String getCommandName() { return s_name; } - + @Override public void execute(){ Pair, Integer> vlans = _mgr.searchForVlans(this); ListResponse response = new ListResponse(); List vlanResponses = new ArrayList(); - for (Vlan vlan : vlans.first()) { + for (Vlan vlan : vlans.first()) { VlanIpRangeResponse vlanResponse = _responseGenerator.createVlanIpRangeResponse(vlan); vlanResponse.setObjectName("vlaniprange"); vlanResponses.add(vlanResponse); diff --git a/api/src/com/cloud/api/commands/ListVolumesCmd.java b/api/src/com/cloud/api/commands/ListVolumesCmd.java index 5849602d2aa..fc1f8a10949 100755 --- a/api/src/com/cloud/api/commands/ListVolumesCmd.java +++ b/api/src/com/cloud/api/commands/ListVolumesCmd.java @@ -68,7 +68,7 @@ public class ListVolumesCmd extends BaseListTaggedResourcesCmd { @IdentityMapper(entityTableName="data_center") @Parameter(name=ApiConstants.ZONE_ID, type=CommandType.LONG, description="the ID of the availability zone") private Long zoneId; - + ///////////////////////////////////////////////////// /////////////////// Accessors /////////////////////// ///////////////////////////////////////////////////// @@ -101,7 +101,7 @@ public class ListVolumesCmd extends BaseListTaggedResourcesCmd { public Long getZoneId() { return zoneId; } - + ///////////////////////////////////////////////////// /////////////// API Implementation/////////////////// ///////////////////////////////////////////////////// @@ -110,12 +110,12 @@ public class ListVolumesCmd extends BaseListTaggedResourcesCmd { public String getCommandName() { return s_name; } - + @Override public AsyncJob.Type getInstanceType() { - return AsyncJob.Type.Volume; + return AsyncJob.Type.Volume; } - + @Override public void execute(){ Pair, Integer> volumes = _storageService.searchForVolumes(this); diff --git a/api/src/com/cloud/api/commands/ListVpnUsersCmd.java b/api/src/com/cloud/api/commands/ListVpnUsersCmd.java index fbfc3e5ae19..2f3774e471e 100644 --- a/api/src/com/cloud/api/commands/ListVpnUsersCmd.java +++ b/api/src/com/cloud/api/commands/ListVpnUsersCmd.java @@ -46,7 +46,7 @@ public class ListVpnUsersCmd extends BaseListProjectAndAccountResourcesCmd { @Parameter(name=ApiConstants.USERNAME, type=CommandType.STRING, description="the username of the vpn user.") private String userName; - + ///////////////////////////////////////////////////// /////////////////// Accessors /////////////////////// ///////////////////////////////////////////////////// @@ -67,7 +67,7 @@ public class ListVpnUsersCmd extends BaseListProjectAndAccountResourcesCmd { public String getCommandName() { return s_name; } - + @Override public void execute(){ Pair, Integer> vpnUsers = _ravService.searchForVpnUsers(this); diff --git a/api/src/com/cloud/api/commands/ListZonesByCmd.java b/api/src/com/cloud/api/commands/ListZonesByCmd.java index 8d9ccb3f3b9..63822b704d3 100755 --- a/api/src/com/cloud/api/commands/ListZonesByCmd.java +++ b/api/src/com/cloud/api/commands/ListZonesByCmd.java @@ -49,14 +49,14 @@ public class ListZonesByCmd extends BaseListCmd { @IdentityMapper(entityTableName="domain") @Parameter(name=ApiConstants.DOMAIN_ID, type=CommandType.LONG, description="the ID of the domain associated with the zone") private Long domainId; - + @Parameter(name=ApiConstants.SHOW_CAPACITIES, type=CommandType.BOOLEAN, description="flag to display the capacity of the zones") private Boolean showCapacities; - + ///////////////////////////////////////////////////// /////////////////// Accessors /////////////////////// ///////////////////////////////////////////////////// - + public Long getId() { return id; } @@ -64,19 +64,19 @@ public class ListZonesByCmd extends BaseListCmd { public Boolean isAvailable() { return available; } - + public Long getDomainId(){ - return domainId; + return domainId; } public Boolean getShowCapacities() { - return showCapacities; - } - + return showCapacities; + } + ///////////////////////////////////////////////////// /////////////// API Implementation/////////////////// ///////////////////////////////////////////////////// - + @Override public String getCommandName() { return s_name; diff --git a/api/src/com/cloud/api/commands/LockAccountCmd.java b/api/src/com/cloud/api/commands/LockAccountCmd.java index 2138ad9b3ed..9cb075f9efb 100644 --- a/api/src/com/cloud/api/commands/LockAccountCmd.java +++ b/api/src/com/cloud/api/commands/LockAccountCmd.java @@ -58,12 +58,12 @@ public class LockAccountCmd extends BaseCmd { ///////////////////////////////////////////////////// /////////////// API Implementation/////////////////// ///////////////////////////////////////////////////// - + @Override public String getCommandName() { return s_name; } - + @Override public long getEntityOwnerId() { Account account = _accountService.getActiveAccountByName(getAccountName(), getDomainId()); diff --git a/api/src/com/cloud/api/commands/LockUserCmd.java b/api/src/com/cloud/api/commands/LockUserCmd.java index 5a56bcb7b42..7ce4efe650c 100644 --- a/api/src/com/cloud/api/commands/LockUserCmd.java +++ b/api/src/com/cloud/api/commands/LockUserCmd.java @@ -59,7 +59,7 @@ public class LockUserCmd extends BaseCmd { public String getCommandName() { return s_name; } - + @Override public long getEntityOwnerId() { User user = _entityMgr.findById(User.class, getId()); @@ -69,7 +69,7 @@ public class LockUserCmd extends BaseCmd { return Account.ACCOUNT_ID_SYSTEM; // no account info given, parent this command to SYSTEM so ERROR events are tracked } - + @Override public void execute(){ UserAccount user = _accountService.lockUser(getId()); diff --git a/api/src/com/cloud/api/commands/MarkDefaultZoneForAccountCmd.java b/api/src/com/cloud/api/commands/MarkDefaultZoneForAccountCmd.java index 09f0e1c05d2..1af9445d8ba 100644 --- a/api/src/com/cloud/api/commands/MarkDefaultZoneForAccountCmd.java +++ b/api/src/com/cloud/api/commands/MarkDefaultZoneForAccountCmd.java @@ -68,47 +68,47 @@ public class MarkDefaultZoneForAccountCmd extends BaseAsyncCmd { public Long getDefaultZoneId() { return defaultZoneId; } - + ///////////////////////////////////////////////////// /////////////// API Implementation/////////////////// ///////////////////////////////////////////////////// - + @Override public String getCommandName() { - return s_name; + return s_name; } @Override public long getEntityOwnerId() { - return Account.ACCOUNT_ID_SYSTEM; + return Account.ACCOUNT_ID_SYSTEM; } - + @Override public String getEventType() { - return EventTypes.EVENT_ACCOUNT_MARK_DEFAULT_ZONE; + return EventTypes.EVENT_ACCOUNT_MARK_DEFAULT_ZONE; } - + @Override public String getEventDescription() { - return "Marking account with the default zone: " + getDefaultZoneId(); + return "Marking account with the default zone: " + getDefaultZoneId(); } @Override public AsyncJob.Type getInstanceType() { return AsyncJob.Type.Account; } - + @Override public void execute(){ - Account result = _configService.markDefaultZone(getAccountName(),getDomainId(), getDefaultZoneId()); - if (result != null) { - AccountResponse response = _responseGenerator.createAccountResponse(result); - response.setResponseName(getCommandName()); - this.setResponseObject(response); - } - else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to mark the account with the default zone"); - } + Account result = _configService.markDefaultZone(getAccountName(),getDomainId(), getDefaultZoneId()); + if (result != null) { + AccountResponse response = _responseGenerator.createAccountResponse(result); + response.setResponseName(getCommandName()); + this.setResponseObject(response); + } + else { + throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to mark the account with the default zone"); + } } } diff --git a/api/src/com/cloud/api/commands/MigrateSystemVMCmd.java b/api/src/com/cloud/api/commands/MigrateSystemVMCmd.java index a919795d9c2..73240cd65c5 100644 --- a/api/src/com/cloud/api/commands/MigrateSystemVMCmd.java +++ b/api/src/com/cloud/api/commands/MigrateSystemVMCmd.java @@ -77,7 +77,7 @@ public class MigrateSystemVMCmd extends BaseAsyncCmd { public String getCommandName() { return s_name; } - + @Override public long getEntityOwnerId() { Account account = UserContext.current().getCaller(); @@ -97,38 +97,38 @@ public class MigrateSystemVMCmd extends BaseAsyncCmd { public String getEventDescription() { return "Attempting to migrate VM Id: " + getVirtualMachineId() + " to host Id: "+ getHostId(); } - + @Override public void execute(){ - + Host destinationHost = _resourceService.getHost(getHostId()); if (destinationHost == null) { throw new InvalidParameterValueException("Unable to find the host to migrate the VM, host id=" + getHostId()); } try{ - UserContext.current().setEventDetails("VM Id: " + getVirtualMachineId() + " to host Id: "+ getHostId()); - //FIXME : Should not be calling UserVmService to migrate all types of VMs - need a generic VM layer - VirtualMachine migratedVm = _userVmService.migrateVirtualMachine(getVirtualMachineId(), destinationHost); - if (migratedVm != null) { - // return the generic system VM instance response - SystemVmInstanceResponse response = _responseGenerator.createSystemVmInstanceResponse(migratedVm); + UserContext.current().setEventDetails("VM Id: " + getVirtualMachineId() + " to host Id: "+ getHostId()); + //FIXME : Should not be calling UserVmService to migrate all types of VMs - need a generic VM layer + VirtualMachine migratedVm = _userVmService.migrateVirtualMachine(getVirtualMachineId(), destinationHost); + if (migratedVm != null) { + // return the generic system VM instance response + SystemVmInstanceResponse response = _responseGenerator.createSystemVmInstanceResponse(migratedVm); response.setResponseName(getCommandName()); this.setResponseObject(response); - } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to migrate the system vm"); - } + } else { + throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to migrate the system vm"); + } } catch (ResourceUnavailableException ex) { s_logger.warn("Exception: ", ex); throw new ServerApiException(BaseCmd.RESOURCE_UNAVAILABLE_ERROR, ex.getMessage()); } catch (ConcurrentOperationException e) { s_logger.warn("Exception: ", e); throw new ServerApiException(BaseCmd.INTERNAL_ERROR, e.getMessage()); - } catch (ManagementServerException e) { + } catch (ManagementServerException e) { s_logger.warn("Exception: ", e); throw new ServerApiException(BaseCmd.INTERNAL_ERROR, e.getMessage()); - } catch (VirtualMachineMigrationException e) { + } catch (VirtualMachineMigrationException e) { s_logger.warn("Exception: ", e); throw new ServerApiException(BaseCmd.INTERNAL_ERROR, e.getMessage()); - } + } } } diff --git a/api/src/com/cloud/api/commands/MigrateVolumeCmd.java b/api/src/com/cloud/api/commands/MigrateVolumeCmd.java index ee6145733ad..7ad8448c997 100644 --- a/api/src/com/cloud/api/commands/MigrateVolumeCmd.java +++ b/api/src/com/cloud/api/commands/MigrateVolumeCmd.java @@ -32,9 +32,9 @@ import com.cloud.user.Account; @Implementation(description="Migrate volume", responseObject=VolumeResponse.class, since="3.0.0") public class MigrateVolumeCmd extends BaseAsyncCmd { - private static final String s_name = "migratevolumeresponse"; - - ///////////////////////////////////////////////////// + private static final String s_name = "migratevolumeresponse"; + + ///////////////////////////////////////////////////// //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// @@ -45,7 +45,7 @@ public class MigrateVolumeCmd extends BaseAsyncCmd { @IdentityMapper(entityTableName="storage_pool") @Parameter(name=ApiConstants.STORAGE_ID, type=CommandType.LONG, required=true, description="destination storage pool ID to migrate the volume to") private Long storageId; - + ///////////////////////////////////////////////////// /////////////////// Accessors /////////////////////// ///////////////////////////////////////////////////// @@ -55,7 +55,7 @@ public class MigrateVolumeCmd extends BaseAsyncCmd { } public Long getStoragePoolId() { - return storageId; + return storageId; } ///////////////////////////////////////////////////// /////////////// API Implementation/////////////////// @@ -65,10 +65,10 @@ public class MigrateVolumeCmd extends BaseAsyncCmd { public String getCommandName() { return s_name; } - + @Override public long getEntityOwnerId() { - Volume volume = _entityMgr.findById(Volume.class, getVolumeId()); + Volume volume = _entityMgr.findById(Volume.class, getVolumeId()); if (volume != null) { return volume.getAccountId(); } @@ -85,22 +85,22 @@ public class MigrateVolumeCmd extends BaseAsyncCmd { public String getEventDescription() { return "Attempting to migrate volume Id: " + getVolumeId() + " to storage pool Id: "+ getStoragePoolId(); } - - + + @Override public void execute(){ - Volume result; - try { - result = _storageService.migrateVolume(getVolumeId(), getStoragePoolId()); - if (result != null) { - VolumeResponse response = _responseGenerator.createVolumeResponse(result); - response.setResponseName(getCommandName()); - this.setResponseObject(response); - } - } catch (ConcurrentOperationException e) { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to migrate volume: "); - } - + Volume result; + try { + result = _storageService.migrateVolume(getVolumeId(), getStoragePoolId()); + if (result != null) { + VolumeResponse response = _responseGenerator.createVolumeResponse(result); + response.setResponseName(getCommandName()); + this.setResponseObject(response); + } + } catch (ConcurrentOperationException e) { + throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to migrate volume: "); + } + } } diff --git a/api/src/com/cloud/api/commands/PrepareForMaintenanceCmd.java b/api/src/com/cloud/api/commands/PrepareForMaintenanceCmd.java index ab7a66766bc..ffa56ab56bf 100644 --- a/api/src/com/cloud/api/commands/PrepareForMaintenanceCmd.java +++ b/api/src/com/cloud/api/commands/PrepareForMaintenanceCmd.java @@ -34,8 +34,8 @@ import com.cloud.user.UserContext; @Implementation(description="Prepares a host for maintenance.", responseObject=HostResponse.class) public class PrepareForMaintenanceCmd extends BaseAsyncCmd { - public static final Logger s_logger = Logger.getLogger(PrepareForMaintenanceCmd.class.getName()); - + public static final Logger s_logger = Logger.getLogger(PrepareForMaintenanceCmd.class.getName()); + private static final String s_name = "preparehostformaintenanceresponse"; ///////////////////////////////////////////////////// @@ -62,9 +62,9 @@ public class PrepareForMaintenanceCmd extends BaseAsyncCmd { public String getCommandName() { return s_name; } - + public static String getResultObjectName() { - return "host"; + return "host"; } @Override @@ -86,17 +86,17 @@ public class PrepareForMaintenanceCmd extends BaseAsyncCmd { public String getEventDescription() { return "preparing host: " + getId() + " for maintenance"; } - + @Override public AsyncJob.Type getInstanceType() { - return AsyncJob.Type.Host; + return AsyncJob.Type.Host; } - + @Override public Long getInstanceId() { - return getId(); + return getId(); } - + @Override public void execute(){ Host result = _resourceService.maintain(this); diff --git a/api/src/com/cloud/api/commands/PreparePrimaryStorageForMaintenanceCmd.java b/api/src/com/cloud/api/commands/PreparePrimaryStorageForMaintenanceCmd.java index 488bc024524..4d7342cc73e 100644 --- a/api/src/com/cloud/api/commands/PreparePrimaryStorageForMaintenanceCmd.java +++ b/api/src/com/cloud/api/commands/PreparePrimaryStorageForMaintenanceCmd.java @@ -36,7 +36,7 @@ import com.cloud.user.UserContext; @Implementation(description="Puts storage pool into maintenance state", responseObject=StoragePoolResponse.class) public class PreparePrimaryStorageForMaintenanceCmd extends BaseAsyncCmd { - public static final Logger s_logger = Logger.getLogger(PreparePrimaryStorageForMaintenanceCmd.class.getName()); + public static final Logger s_logger = Logger.getLogger(PreparePrimaryStorageForMaintenanceCmd.class.getName()); private static final String s_name = "prepareprimarystorageformaintenanceresponse"; ///////////////////////////////////////////////////// @@ -63,16 +63,16 @@ public class PreparePrimaryStorageForMaintenanceCmd extends BaseAsyncCmd { public String getCommandName() { return s_name; } - + public static String getResultObjectName() { - return "primarystorage"; + return "primarystorage"; } - + @Override public AsyncJob.Type getInstanceType() { return AsyncJob.Type.StoragePool; } - + @Override public Long getInstanceId() { return getId(); diff --git a/api/src/com/cloud/api/commands/PrepareTemplateCmd.java b/api/src/com/cloud/api/commands/PrepareTemplateCmd.java index e1adcb71fb4..97686a8f169 100644 --- a/api/src/com/cloud/api/commands/PrepareTemplateCmd.java +++ b/api/src/com/cloud/api/commands/PrepareTemplateCmd.java @@ -43,7 +43,7 @@ public class PrepareTemplateCmd extends BaseCmd { @IdentityMapper(entityTableName="data_center") @Parameter(name=ApiConstants.ZONE_ID, required=true, type=CommandType.LONG, description="zone ID of the template to be prepared in primary storage(s).") private Long zoneId; - + @IdentityMapper(entityTableName="vm_template") @Parameter(name=ApiConstants.TEMPLATE_ID, required=true, type=CommandType.LONG, description="template ID of the template to be prepared in primary storage(s).") private Long templateId; @@ -52,11 +52,11 @@ public class PrepareTemplateCmd extends BaseCmd { ///////////////////////////////////////////////////// /////////////////// Accessors /////////////////////// ///////////////////////////////////////////////////// - + public Long getZoneId() { - return zoneId; + return zoneId; } - + public Long getTemplateId() { return templateId; } @@ -69,20 +69,20 @@ public class PrepareTemplateCmd extends BaseCmd { public String getCommandName() { return s_name; } - + @Override public long getEntityOwnerId() { return Account.ACCOUNT_ID_SYSTEM; } - + @Override public void execute() { ListResponse response = new ListResponse(); - - VirtualMachineTemplate vmTemplate = _templateService.prepareTemplate(templateId, zoneId); - List templateResponses = _responseGenerator.createTemplateResponses(vmTemplate.getId(), zoneId, true); + + VirtualMachineTemplate vmTemplate = _templateService.prepareTemplate(templateId, zoneId); + List templateResponses = _responseGenerator.createTemplateResponses(vmTemplate.getId(), zoneId, true); response.setResponses(templateResponses); - response.setResponseName(getCommandName()); + response.setResponseName(getCommandName()); this.setResponseObject(response); } } diff --git a/api/src/com/cloud/api/commands/QueryAsyncJobResultCmd.java b/api/src/com/cloud/api/commands/QueryAsyncJobResultCmd.java index e6428b1da0f..e9f91afb22d 100644 --- a/api/src/com/cloud/api/commands/QueryAsyncJobResultCmd.java +++ b/api/src/com/cloud/api/commands/QueryAsyncJobResultCmd.java @@ -56,12 +56,12 @@ public class QueryAsyncJobResultCmd extends BaseCmd { public String getCommandName() { return s_name; } - + @Override public long getEntityOwnerId() { return Account.ACCOUNT_ID_SYSTEM; } - + @Override public void execute(){ AsyncJobResponse response = _responseGenerator.queryJobResult(this); diff --git a/api/src/com/cloud/api/commands/RebootRouterCmd.java b/api/src/com/cloud/api/commands/RebootRouterCmd.java index e1e30e8ec75..5e3e87fc131 100644 --- a/api/src/com/cloud/api/commands/RebootRouterCmd.java +++ b/api/src/com/cloud/api/commands/RebootRouterCmd.java @@ -37,7 +37,7 @@ import com.cloud.user.UserContext; @Implementation(description="Starts a router.", responseObject=DomainRouterResponse.class) public class RebootRouterCmd extends BaseAsyncCmd { - public static final Logger s_logger = Logger.getLogger(RebootRouterCmd.class.getName()); + public static final Logger s_logger = Logger.getLogger(RebootRouterCmd.class.getName()); private static final String s_name = "rebootrouterresponse"; ///////////////////////////////////////////////////// @@ -64,7 +64,7 @@ public class RebootRouterCmd extends BaseAsyncCmd { public String getCommandName() { return s_name; } - + @Override public long getEntityOwnerId() { VirtualRouter router = _entityMgr.findById(VirtualRouter.class, getId()); @@ -84,16 +84,16 @@ public class RebootRouterCmd extends BaseAsyncCmd { public String getEventDescription() { return "rebooting router: " + getId(); } - + public AsyncJob.Type getInstanceType() { - return AsyncJob.Type.DomainRouter; - } - - public Long getInstanceId() { - return getId(); + return AsyncJob.Type.DomainRouter; } - + public Long getInstanceId() { + return getId(); + } + + @Override public void execute() throws ConcurrentOperationException, ResourceUnavailableException, InsufficientCapacityException{ UserContext.current().setEventDetails("Router Id: "+getId()); diff --git a/api/src/com/cloud/api/commands/RebootSystemVmCmd.java b/api/src/com/cloud/api/commands/RebootSystemVmCmd.java index 98bb5e232e5..fab1b9c7e7e 100644 --- a/api/src/com/cloud/api/commands/RebootSystemVmCmd.java +++ b/api/src/com/cloud/api/commands/RebootSystemVmCmd.java @@ -34,10 +34,10 @@ import com.cloud.vm.VirtualMachine; @Implementation(description="Reboots a system VM.", responseObject=SystemVmResponse.class) public class RebootSystemVmCmd extends BaseAsyncCmd { - public static final Logger s_logger = Logger.getLogger(RebootSystemVmCmd.class.getName()); + public static final Logger s_logger = Logger.getLogger(RebootSystemVmCmd.class.getName()); private static final String s_name = "rebootsystemvmresponse"; - + ///////////////////////////////////////////////////// //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// @@ -57,7 +57,7 @@ public class RebootSystemVmCmd extends BaseAsyncCmd { ///////////////////////////////////////////////////// /////////////// API Implementation/////////////////// ///////////////////////////////////////////////////// - + @Override public String getCommandName() { return s_name; @@ -88,15 +88,15 @@ public class RebootSystemVmCmd extends BaseAsyncCmd { public String getEventDescription() { return "rebooting system vm: " + getId(); } - + public AsyncJob.Type getInstanceType() { - return AsyncJob.Type.SystemVm; + return AsyncJob.Type.SystemVm; } - + public Long getInstanceId() { - return getId(); + return getId(); } - + @Override public void execute(){ UserContext.current().setEventDetails("Vm Id: "+getId()); diff --git a/api/src/com/cloud/api/commands/ReconnectHostCmd.java b/api/src/com/cloud/api/commands/ReconnectHostCmd.java index ba4e80616f0..a2079f21dbf 100755 --- a/api/src/com/cloud/api/commands/ReconnectHostCmd.java +++ b/api/src/com/cloud/api/commands/ReconnectHostCmd.java @@ -34,7 +34,7 @@ import com.cloud.user.UserContext; @Implementation(description="Reconnects a host.", responseObject=HostResponse.class) public class ReconnectHostCmd extends BaseAsyncCmd { - public static final Logger s_logger = Logger.getLogger(ReconnectHostCmd.class.getName()); + public static final Logger s_logger = Logger.getLogger(ReconnectHostCmd.class.getName()); private static final String s_name = "reconnecthostresponse"; @@ -62,9 +62,9 @@ public class ReconnectHostCmd extends BaseAsyncCmd { public String getCommandName() { return s_name; } - + public static String getResultObjectName() { - return "host"; + return "host"; } @Override @@ -86,15 +86,15 @@ public class ReconnectHostCmd extends BaseAsyncCmd { public String getEventDescription() { return "reconnecting host: " + getId(); } - + public AsyncJob.Type getInstanceType() { - return AsyncJob.Type.Host; + return AsyncJob.Type.Host; } - + public Long getInstanceId() { - return getId(); + return getId(); } - + @Override public void execute(){ try { diff --git a/api/src/com/cloud/api/commands/RegisterCmd.java b/api/src/com/cloud/api/commands/RegisterCmd.java index 4f6e6ea1220..7e9b01e8401 100644 --- a/api/src/com/cloud/api/commands/RegisterCmd.java +++ b/api/src/com/cloud/api/commands/RegisterCmd.java @@ -36,7 +36,7 @@ public class RegisterCmd extends BaseCmd { ///////////////////////////////////////////////////// //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - + @IdentityMapper(entityTableName="user") @Parameter(name=ApiConstants.ID, type=CommandType.LONG, required=true, description="User id") private Long id; @@ -56,7 +56,7 @@ public class RegisterCmd extends BaseCmd { public String getCommandName() { return s_name; } - + @Override public long getEntityOwnerId() { User user = _entityMgr.findById(User.class, getId()); diff --git a/api/src/com/cloud/api/commands/RegisterIsoCmd.java b/api/src/com/cloud/api/commands/RegisterIsoCmd.java index 47a45145f88..ff7aa33039e 100755 --- a/api/src/com/cloud/api/commands/RegisterIsoCmd.java +++ b/api/src/com/cloud/api/commands/RegisterIsoCmd.java @@ -56,7 +56,7 @@ public class RegisterIsoCmd extends BaseCmd { @Parameter(name=ApiConstants.IS_EXTRACTABLE, type=CommandType.BOOLEAN, description="true if the iso or its derivatives are extractable; default is false") private Boolean extractable; - + @Parameter(name=ApiConstants.NAME, type=CommandType.STRING, required=true, description="the name of the ISO") private String isoName; @@ -69,22 +69,22 @@ public class RegisterIsoCmd extends BaseCmd { @IdentityMapper(entityTableName="data_center") @Parameter(name=ApiConstants.ZONE_ID, type=CommandType.LONG, required=true, description="the ID of the zone you wish to register the ISO to.") - private Long zoneId; - + private Long zoneId; + @IdentityMapper(entityTableName="domain") @Parameter(name=ApiConstants.DOMAIN_ID, type=CommandType.LONG, description="an optional domainId. If the account parameter is used, domainId must also be used.") private Long domainId; @Parameter(name=ApiConstants.ACCOUNT, type=CommandType.STRING, description="an optional account name. Must be used with domainId.") private String accountName; - + @Parameter(name=ApiConstants.CHECKSUM, type=CommandType.STRING, description="the MD5 checksum value of this ISO") private String checksum; - + @IdentityMapper(entityTableName="projects") @Parameter(name=ApiConstants.PROJECT_ID, type=CommandType.LONG, description="Register iso for the project") private Long projectId; - + ///////////////////////////////////////////////////// /////////////////// Accessors /////////////////////// ///////////////////////////////////////////////////// @@ -108,7 +108,7 @@ public class RegisterIsoCmd extends BaseCmd { public Boolean isExtractable() { return extractable; } - + public String getIsoName() { return isoName; } @@ -126,36 +126,36 @@ public class RegisterIsoCmd extends BaseCmd { } public Long getDomainId() { - return domainId; - } + return domainId; + } - public String getAccountName() { - return accountName; - } + public String getAccountName() { + return accountName; + } public String getChecksum() { return checksum; - } - + } + ///////////////////////////////////////////////////// /////////////// API Implementation/////////////////// ///////////////////////////////////////////////////// - @Override + @Override public String getCommandName() { return s_name; } - + @Override public long getEntityOwnerId() { Long accountId = finalyzeAccountId(accountName, domainId, projectId, true); if (accountId == null) { return UserContext.current().getCaller().getId(); } - + return accountId; - } - + } + @Override public void execute() throws ResourceAllocationException{ VirtualMachineTemplate template = _templateService.registerIso(this); @@ -163,11 +163,11 @@ public class RegisterIsoCmd extends BaseCmd { ListResponse response = new ListResponse(); List templateResponses = _responseGenerator.createIsoResponses(template.getId(), zoneId, false); response.setResponses(templateResponses); - response.setResponseName(getCommandName()); + response.setResponseName(getCommandName()); this.setResponseObject(response); } else { throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to register iso"); } - + } } diff --git a/api/src/com/cloud/api/commands/RegisterSSHKeyPairCmd.java b/api/src/com/cloud/api/commands/RegisterSSHKeyPairCmd.java index 4eb0abcd87b..ae62e34a47d 100644 --- a/api/src/com/cloud/api/commands/RegisterSSHKeyPairCmd.java +++ b/api/src/com/cloud/api/commands/RegisterSSHKeyPairCmd.java @@ -27,84 +27,84 @@ import com.cloud.api.response.SSHKeyPairResponse; import com.cloud.user.SSHKeyPair; import com.cloud.user.UserContext; -@Implementation(description="Register a public key in a keypair under a certain name", responseObject=SSHKeyPairResponse.class) +@Implementation(description="Register a public key in a keypair under a certain name", responseObject=SSHKeyPairResponse.class) public class RegisterSSHKeyPairCmd extends BaseCmd { public static final Logger s_logger = Logger.getLogger(RegisterSSHKeyPairCmd.class.getName()); private static final String s_name = "registersshkeypairresponse"; - - + + ///////////////////////////////////////////////////// //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - - @Parameter(name=ApiConstants.NAME, type=CommandType.STRING, required=true, description="Name of the keypair") - private String name; - - @Parameter(name="publickey", type=CommandType.STRING, required=true, description="Public key material of the keypair", length=5120) + + @Parameter(name=ApiConstants.NAME, type=CommandType.STRING, required=true, description="Name of the keypair") + private String name; + + @Parameter(name="publickey", type=CommandType.STRING, required=true, description="Public key material of the keypair", length=5120) private String publicKey; //Owner information @Parameter(name=ApiConstants.ACCOUNT, type=CommandType.STRING, description="an optional account for the ssh key. Must be used with domainId.") private String accountName; - + @IdentityMapper(entityTableName="domain") @Parameter(name=ApiConstants.DOMAIN_ID, type=CommandType.LONG, description="an optional domainId for the ssh key. If the account parameter is used, domainId must also be used.") private Long domainId; - + @IdentityMapper(entityTableName="projects") @Parameter(name=ApiConstants.PROJECT_ID, type=CommandType.LONG, description="an optional project for the ssh key") private Long projectId; - + ///////////////////////////////////////////////////// /////////////////// Accessors /////////////////////// - ///////////////////////////////////////////////////// - - public String getName() { - return name; - } + ///////////////////////////////////////////////////// - public String getPublicKey() { - return publicKey; - } + public String getName() { + return name; + } + + public String getPublicKey() { + return publicKey; + } + + public String getAccountName() { + return accountName; + } - public String getAccountName() { - return accountName; - } - public Long getDomainId() { return domainId; } - + public Long getProjectId() { return projectId; } - + ///////////////////////////////////////////////////// /////////////// API Implementation/////////////////// - ///////////////////////////////////////////////////// - + ///////////////////////////////////////////////////// + @Override public long getEntityOwnerId() { Long accountId = finalyzeAccountId(accountName, domainId, projectId, true); if (accountId == null) { return UserContext.current().getCaller().getId(); } - + return accountId; - } - - @Override - public void execute() { - SSHKeyPair result = _mgr.registerSSHKeyPair(this); + } + + @Override + public void execute() { + SSHKeyPair result = _mgr.registerSSHKeyPair(this); SSHKeyPairResponse response = new SSHKeyPairResponse(result.getName(), result.getFingerprint()); response.setResponseName(getCommandName()); - response.setObjectName("keypair"); + response.setObjectName("keypair"); this.setResponseObject(response); - } + } + + @Override + public String getCommandName() { + return s_name; + } - @Override - public String getCommandName() { - return s_name; - } - } diff --git a/api/src/com/cloud/api/commands/RegisterTemplateCmd.java b/api/src/com/cloud/api/commands/RegisterTemplateCmd.java index c6d9b668014..c479001b954 100755 --- a/api/src/com/cloud/api/commands/RegisterTemplateCmd.java +++ b/api/src/com/cloud/api/commands/RegisterTemplateCmd.java @@ -73,7 +73,7 @@ public class RegisterTemplateCmd extends BaseCmd { @Parameter(name=ApiConstants.PASSWORD_ENABLED, type=CommandType.BOOLEAN, description="true if the template supports the password reset feature; default is false") private Boolean passwordEnabled; - + @Parameter(name=ApiConstants.SSHKEY_ENABLED, type=CommandType.BOOLEAN, description="true if the template supports the sshkey upload feature; default is false") private Boolean sshKeyEnabled; @@ -102,11 +102,11 @@ public class RegisterTemplateCmd extends BaseCmd { @Parameter(name=ApiConstants.TEMPLATE_TAG, type=CommandType.STRING, description="the tag for this template.") private String templateTag; - + @IdentityMapper(entityTableName="projects") @Parameter(name=ApiConstants.PROJECT_ID, type=CommandType.LONG, description="Register template for the project") private Long projectId; - + @Parameter(name=ApiConstants.DETAILS, type=CommandType.MAP, description="Template details in key/value pairs.") protected Map details; @@ -149,7 +149,7 @@ public class RegisterTemplateCmd extends BaseCmd { public Boolean isPasswordEnabled() { return passwordEnabled; } - + public Boolean isSshKeyEnabled() { return sshKeyEnabled; } @@ -180,22 +180,22 @@ public class RegisterTemplateCmd extends BaseCmd { public String getChecksum() { return checksum; - } + } public String getTemplateTag() { return templateTag; } - + public Map getDetails() { - if (details == null || details.isEmpty()) { - return null; - } - - Collection paramsCollection = details.values(); - Map params = (Map) (paramsCollection.toArray())[0]; - return params; + if (details == null || details.isEmpty()) { + return null; + } + + Collection paramsCollection = details.values(); + Map params = (Map) (paramsCollection.toArray())[0]; + return params; } - + ///////////////////////////////////////////////////// /////////////// API Implementation/////////////////// ///////////////////////////////////////////////////// @@ -215,9 +215,9 @@ public class RegisterTemplateCmd extends BaseCmd { if (accountId == null) { return UserContext.current().getCaller().getId(); } - + return accountId; - } + } @Override public void execute() throws ResourceAllocationException{ @@ -227,7 +227,7 @@ public class RegisterTemplateCmd extends BaseCmd { ListResponse response = new ListResponse(); List templateResponses = _responseGenerator.createTemplateResponses(template.getId(), zoneId, false); response.setResponses(templateResponses); - response.setResponseName(getCommandName()); + response.setResponseName(getCommandName()); this.setResponseObject(response); } else { throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to register template"); diff --git a/api/src/com/cloud/api/commands/RemoveFromLoadBalancerRuleCmd.java b/api/src/com/cloud/api/commands/RemoveFromLoadBalancerRuleCmd.java index 9e6fc6c5f03..5d5d7007eb1 100644 --- a/api/src/com/cloud/api/commands/RemoveFromLoadBalancerRuleCmd.java +++ b/api/src/com/cloud/api/commands/RemoveFromLoadBalancerRuleCmd.java @@ -40,7 +40,7 @@ public class RemoveFromLoadBalancerRuleCmd extends BaseAsyncCmd { public static final Logger s_logger = Logger.getLogger(RemoveFromLoadBalancerRuleCmd.class.getName()); private static final String s_name = "removefromloadbalancerruleresponse"; - + ///////////////////////////////////////////////////// //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// @@ -104,7 +104,7 @@ public class RemoveFromLoadBalancerRuleCmd extends BaseAsyncCmd { throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to remove instance from load balancer rule"); } } - + @Override public String getSyncObjType() { return BaseAsyncCmd.networkSyncObject; @@ -112,10 +112,10 @@ public class RemoveFromLoadBalancerRuleCmd extends BaseAsyncCmd { @Override public Long getSyncObjId() { - LoadBalancer lb = _lbService.findById(id); - if(lb == null){ - throw new InvalidParameterValueException("Unable to find load balancer rule: " + id); - } + LoadBalancer lb = _lbService.findById(id); + if(lb == null){ + throw new InvalidParameterValueException("Unable to find load balancer rule: " + id); + } return lb.getNetworkId(); } } diff --git a/api/src/com/cloud/api/commands/RemoveVpnUserCmd.java b/api/src/com/cloud/api/commands/RemoveVpnUserCmd.java index 8e98c930eab..d667555eb33 100644 --- a/api/src/com/cloud/api/commands/RemoveVpnUserCmd.java +++ b/api/src/com/cloud/api/commands/RemoveVpnUserCmd.java @@ -41,10 +41,10 @@ public class RemoveVpnUserCmd extends BaseAsyncCmd { ///////////////////////////////////////////////////// @Parameter(name=ApiConstants.USERNAME, type=CommandType.STRING, required=true, description="username for the vpn user") private String userName; - + @Parameter(name=ApiConstants.ACCOUNT, type=CommandType.STRING, description="an optional account for the vpn user. Must be used with domainId.") private String accountName; - + @IdentityMapper(entityTableName="projects") @Parameter(name=ApiConstants.PROJECT_ID, type=CommandType.LONG, description="remove vpn user from the project") private Long projectId; @@ -52,58 +52,58 @@ public class RemoveVpnUserCmd extends BaseAsyncCmd { @IdentityMapper(entityTableName="domain") @Parameter(name=ApiConstants.DOMAIN_ID, type=CommandType.LONG, description="an optional domainId for the vpn user. If the account parameter is used, domainId must also be used.") private Long domainId; - + ///////////////////////////////////////////////////// /////////////////// Accessors /////////////////////// ///////////////////////////////////////////////////// - public String getAccountName() { - return accountName; - } + public String getAccountName() { + return accountName; + } - public Long getDomainId() { - return domainId; - } + public Long getDomainId() { + return domainId; + } - public String getUserName() { - return userName; - } + public String getUserName() { + return userName; + } + + public Long getProjecId() { + return projectId; + } - public Long getProjecId() { - return projectId; - } - ///////////////////////////////////////////////////// /////////////// API Implementation/////////////////// ///////////////////////////////////////////////////// - @Override + @Override public String getCommandName() { return s_name; } - @Override - public long getEntityOwnerId() { - Long accountId = finalyzeAccountId(accountName, domainId, projectId, true); + @Override + public long getEntityOwnerId() { + Long accountId = finalyzeAccountId(accountName, domainId, projectId, true); if (accountId == null) { return UserContext.current().getCaller().getId(); } - + return accountId; } - @Override - public String getEventDescription() { - return "Remove Remote Access VPN user for account " + getEntityOwnerId() + " username= " + getUserName(); - } + @Override + public String getEventDescription() { + return "Remove Remote Access VPN user for account " + getEntityOwnerId() + " username= " + getUserName(); + } - - @Override - public String getEventType() { - return EventTypes.EVENT_VPN_USER_REMOVE; - } + + @Override + public String getEventType() { + return EventTypes.EVENT_VPN_USER_REMOVE; + } @Override public void execute(){ @@ -112,10 +112,10 @@ public class RemoveVpnUserCmd extends BaseAsyncCmd { if (!result) { throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to remove vpn user"); } - + if (!_ravService.applyVpnUsers(owner.getId(), userName)) { throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to apply vpn user removal"); - } + } SuccessResponse response = new SuccessResponse(getCommandName()); setResponseObject(response); } diff --git a/api/src/com/cloud/api/commands/RestartNetworkCmd.java b/api/src/com/cloud/api/commands/RestartNetworkCmd.java index 978ad447cbb..d7d124d5dd9 100644 --- a/api/src/com/cloud/api/commands/RestartNetworkCmd.java +++ b/api/src/com/cloud/api/commands/RestartNetworkCmd.java @@ -44,7 +44,7 @@ public class RestartNetworkCmd extends BaseAsyncCmd { //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - + @IdentityMapper(entityTableName="networks") @Parameter(name=ApiConstants.ID, type=CommandType.LONG, required=true, description="The id of the network to restart.") private Long id; @@ -56,7 +56,7 @@ public class RestartNetworkCmd extends BaseAsyncCmd { ///////////////////////////////////////////////////// /////////////////// Accessors /////////////////////// ///////////////////////////////////////////////////// - + public Long getNetworkId() { Network network = _networkService.getNetwork(id); if (network == null) { @@ -65,7 +65,7 @@ public class RestartNetworkCmd extends BaseAsyncCmd { return network.getId(); } } - + public Boolean getCleanup() { if (cleanup != null) { return cleanup; @@ -87,7 +87,7 @@ public class RestartNetworkCmd extends BaseAsyncCmd { public static String getResultObjectName() { return "addressinfo"; } - + @Override public void execute() throws ResourceUnavailableException, ResourceAllocationException, ConcurrentOperationException, InsufficientCapacityException { boolean result = _networkService.restartNetwork(this, getCleanup()); @@ -98,7 +98,7 @@ public class RestartNetworkCmd extends BaseAsyncCmd { throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to restart network"); } } - + @Override public String getSyncObjType() { return BaseAsyncCmd.networkSyncObject; @@ -108,16 +108,16 @@ public class RestartNetworkCmd extends BaseAsyncCmd { public Long getSyncObjId() { return id; } - + public String getEventDescription() { return "Restarting network: " + getNetworkId(); } - + @Override public String getEventType() { return EventTypes.EVENT_NETWORK_RESTART; } - + @Override public long getEntityOwnerId() { Network network = _networkService.getNetwork(id); diff --git a/api/src/com/cloud/api/commands/StartRouterCmd.java b/api/src/com/cloud/api/commands/StartRouterCmd.java index fc0115e54d5..d4b12e86f88 100644 --- a/api/src/com/cloud/api/commands/StartRouterCmd.java +++ b/api/src/com/cloud/api/commands/StartRouterCmd.java @@ -38,7 +38,7 @@ import com.cloud.user.UserContext; @Implementation(responseObject=DomainRouterResponse.class, description="Starts a router.") public class StartRouterCmd extends BaseAsyncCmd { - public static final Logger s_logger = Logger.getLogger(StartRouterCmd.class.getName()); + public static final Logger s_logger = Logger.getLogger(StartRouterCmd.class.getName()); private static final String s_name = "startrouterresponse"; @@ -66,11 +66,11 @@ public class StartRouterCmd extends BaseAsyncCmd { public String getCommandName() { return s_name; } - + public static String getResultObjectName() { - return "router"; + return "router"; } - + @Override public long getEntityOwnerId() { VirtualRouter router = _entityMgr.findById(VirtualRouter.class, getId()); @@ -90,15 +90,15 @@ public class StartRouterCmd extends BaseAsyncCmd { public String getEventDescription() { return "starting router: " + getId(); } - + public AsyncJob.Type getInstanceType() { - return AsyncJob.Type.DomainRouter; + return AsyncJob.Type.DomainRouter; } - + public Long getInstanceId() { - return getId(); + return getId(); } - + @Override public void execute() throws ConcurrentOperationException, ResourceUnavailableException, InsufficientCapacityException{ UserContext.current().setEventDetails("Router Id: "+getId()); diff --git a/api/src/com/cloud/api/commands/StartSystemVMCmd.java b/api/src/com/cloud/api/commands/StartSystemVMCmd.java index 9e010f01f70..b6b89222cb8 100644 --- a/api/src/com/cloud/api/commands/StartSystemVMCmd.java +++ b/api/src/com/cloud/api/commands/StartSystemVMCmd.java @@ -34,10 +34,10 @@ import com.cloud.vm.VirtualMachine; @Implementation(responseObject=SystemVmResponse.class, description="Starts a system virtual machine.") public class StartSystemVMCmd extends BaseAsyncCmd { - public static final Logger s_logger = Logger.getLogger(StartSystemVMCmd.class.getName()); + public static final Logger s_logger = Logger.getLogger(StartSystemVMCmd.class.getName()); private static final String s_name = "startsystemvmresponse"; - + ///////////////////////////////////////////////////// //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// @@ -62,9 +62,9 @@ public class StartSystemVMCmd extends BaseAsyncCmd { public String getCommandName() { return s_name; } - + public static String getResultObjectName() { - return "systemvm"; + return "systemvm"; } @Override @@ -92,15 +92,15 @@ public class StartSystemVMCmd extends BaseAsyncCmd { public String getEventDescription() { return "starting system vm: " + getId(); } - + public AsyncJob.Type getInstanceType() { - return AsyncJob.Type.SystemVm; + return AsyncJob.Type.SystemVm; } - + public Long getInstanceId() { - return getId(); + return getId(); } - + @Override public void execute(){ UserContext.current().setEventDetails("Vm Id: "+getId()); diff --git a/api/src/com/cloud/api/commands/StopSystemVmCmd.java b/api/src/com/cloud/api/commands/StopSystemVmCmd.java index 98a799c583a..71316ee7b69 100644 --- a/api/src/com/cloud/api/commands/StopSystemVmCmd.java +++ b/api/src/com/cloud/api/commands/StopSystemVmCmd.java @@ -36,7 +36,7 @@ import com.cloud.vm.VirtualMachine; @Implementation(description="Stops a system VM.", responseObject=SystemVmResponse.class) public class StopSystemVmCmd extends BaseAsyncCmd { - public static final Logger s_logger = Logger.getLogger(StopSystemVmCmd.class.getName()); + public static final Logger s_logger = Logger.getLogger(StopSystemVmCmd.class.getName()); private static final String s_name = "stopsystemvmresponse"; @@ -50,7 +50,7 @@ public class StopSystemVmCmd extends BaseAsyncCmd { @Parameter(name=ApiConstants.FORCED, type=CommandType.BOOLEAN, required=false, description="Force stop the VM. The caller knows the VM is stopped.") private Boolean forced; - + ///////////////////////////////////////////////////// /////////////////// Accessors /////////////////////// ///////////////////////////////////////////////////// @@ -93,17 +93,17 @@ public class StopSystemVmCmd extends BaseAsyncCmd { public String getEventDescription() { return "stopping system vm: " + getId(); } - + @Override public AsyncJob.Type getInstanceType() { - return AsyncJob.Type.SystemVm; + return AsyncJob.Type.SystemVm; } - + @Override public Long getInstanceId() { - return getId(); + return getId(); } - + public boolean isForced() { return (forced != null) ? forced : false; } diff --git a/api/src/com/cloud/api/commands/UpdateAccountCmd.java b/api/src/com/cloud/api/commands/UpdateAccountCmd.java index bfe8e46e60a..ad4cbd5f527 100755 --- a/api/src/com/cloud/api/commands/UpdateAccountCmd.java +++ b/api/src/com/cloud/api/commands/UpdateAccountCmd.java @@ -34,7 +34,7 @@ import com.cloud.user.Account; public class UpdateAccountCmd extends BaseCmd{ public static final Logger s_logger = Logger.getLogger(UpdateAccountCmd.class.getName()); private static final String s_name = "updateaccountresponse"; - + ///////////////////////////////////////////////////// //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// @@ -42,7 +42,7 @@ public class UpdateAccountCmd extends BaseCmd{ @IdentityMapper(entityTableName="account") @Parameter(name=ApiConstants.ID, type=CommandType.LONG, description="Account id") private Long id; - + @Parameter(name=ApiConstants.ACCOUNT, type=CommandType.STRING, description="the current account name") private String accountName; @@ -52,11 +52,11 @@ public class UpdateAccountCmd extends BaseCmd{ @Parameter(name=ApiConstants.NEW_NAME, type=CommandType.STRING, required=true, description="new name for the account") private String newName; - + @Parameter(name=ApiConstants.NETWORK_DOMAIN, type=CommandType.STRING, description="Network domain for the account's networks; empty string will update domainName with NULL value") private String networkDomain; - - @Parameter(name = ApiConstants.ACCOUNT_DETAILS, type = CommandType.MAP, description = "details for account used to store specific parameters") + + @Parameter(name = ApiConstants.ACCOUNT_DETAILS, type = CommandType.MAP, description = "details for account used to store specific parameters") private Map details; ///////////////////////////////////////////////////// @@ -66,7 +66,7 @@ public class UpdateAccountCmd extends BaseCmd{ public Long getId() { return id; } - + public String getAccountName() { return accountName; } @@ -78,19 +78,19 @@ public class UpdateAccountCmd extends BaseCmd{ public String getNewName() { return newName; } - + public String getNetworkDomain() { return networkDomain; } - + public Map getDetails() { - if (details == null || details.isEmpty()) { - return null; - } - - Collection paramsCollection = details.values(); - Map params = (Map) (paramsCollection.toArray())[0]; - return params; + if (details == null || details.isEmpty()) { + return null; + } + + Collection paramsCollection = details.values(); + Map params = (Map) (paramsCollection.toArray())[0]; + return params; } ///////////////////////////////////////////////////// @@ -101,7 +101,7 @@ public class UpdateAccountCmd extends BaseCmd{ public String getCommandName() { return s_name; } - + @Override public long getEntityOwnerId() { Account account = _entityMgr.findById(Account.class, getId()); @@ -115,7 +115,7 @@ public class UpdateAccountCmd extends BaseCmd{ return Account.ACCOUNT_ID_SYSTEM; // no account info given, parent this command to SYSTEM so ERROR events are tracked } - + @Override public void execute(){ Account result = _accountService.updateAccount(this); diff --git a/api/src/com/cloud/api/commands/UpdateCfgCmd.java b/api/src/com/cloud/api/commands/UpdateCfgCmd.java index 41720d89bdc..ea5e8773f6e 100644 --- a/api/src/com/cloud/api/commands/UpdateCfgCmd.java +++ b/api/src/com/cloud/api/commands/UpdateCfgCmd.java @@ -62,12 +62,12 @@ public class UpdateCfgCmd extends BaseCmd { public String getCommandName() { return s_name; } - + @Override public long getEntityOwnerId() { return Account.ACCOUNT_ID_SYSTEM; } - + @Override public void execute(){ Configuration cfg = _configService.updateConfiguration(this); diff --git a/api/src/com/cloud/api/commands/UpdateClusterCmd.java b/api/src/com/cloud/api/commands/UpdateClusterCmd.java index 6d901e31c46..7c3b2b3ede9 100755 --- a/api/src/com/cloud/api/commands/UpdateClusterCmd.java +++ b/api/src/com/cloud/api/commands/UpdateClusterCmd.java @@ -38,22 +38,22 @@ public class UpdateClusterCmd extends BaseCmd { @IdentityMapper(entityTableName="cluster") @Parameter(name=ApiConstants.ID, type=CommandType.LONG, required=true, description="the ID of the Cluster") private Long id; - + @Parameter(name=ApiConstants.CLUSTER_NAME, type=CommandType.STRING, description="the cluster name") private String clusterName; @Parameter(name=ApiConstants.HYPERVISOR, type=CommandType.STRING, description="hypervisor type of the cluster") private String hypervisor; - + @Parameter(name=ApiConstants.CLUSTER_TYPE, type=CommandType.STRING, description="hypervisor type of the cluster") private String clusterType; - + @Parameter(name=ApiConstants.ALLOCATION_STATE, type=CommandType.STRING, description="Allocation state of this cluster for allocation of new resources") private String allocationState; - + @Parameter(name=ApiConstants.MANAGED_STATE, type=CommandType.STRING, description="whether this cluster is managed by cloudstack") private String managedState; - + public String getClusterName() { return clusterName; } @@ -63,34 +63,34 @@ public class UpdateClusterCmd extends BaseCmd { } public String getHypervisor() { - return hypervisor; + return hypervisor; } - + @Override public String getCommandName() { - return s_name; + return s_name; } - + public String getClusterType() { - return clusterType; + return clusterType; } - + public void setClusterType(String type) { - this.clusterType = type; + this.clusterType = type; } - + @Override public long getEntityOwnerId() { return Account.ACCOUNT_ID_SYSTEM; } - + public String getAllocationState() { - return allocationState; + return allocationState; } - + public void setAllocationState(String allocationState) { - this.allocationState = allocationState; - } + this.allocationState = allocationState; + } public String getManagedstate() { return managedState; @@ -102,11 +102,11 @@ public class UpdateClusterCmd extends BaseCmd { @Override public void execute(){ - Cluster cluster = _resourceService.getCluster(getId()); + Cluster cluster = _resourceService.getCluster(getId()); if (cluster == null) { throw new InvalidParameterValueException("Unable to find the cluster by id=" + getId()); } - + Cluster result = _resourceService.updateCluster(cluster, getClusterType(), getHypervisor(), getAllocationState(), getManagedstate()); if (result != null) { ClusterResponse clusterResponse = _responseGenerator.createClusterResponse(cluster, false); diff --git a/api/src/com/cloud/api/commands/UpdateDiskOfferingCmd.java b/api/src/com/cloud/api/commands/UpdateDiskOfferingCmd.java index 8f58ac0f99d..6e104950b91 100755 --- a/api/src/com/cloud/api/commands/UpdateDiskOfferingCmd.java +++ b/api/src/com/cloud/api/commands/UpdateDiskOfferingCmd.java @@ -45,7 +45,7 @@ public class UpdateDiskOfferingCmd extends BaseCmd{ @Parameter(name=ApiConstants.NAME, type=CommandType.STRING, description="updates name of the disk offering with this value") private String diskOfferingName; - + @Parameter(name=ApiConstants.SORT_KEY, type=CommandType.INTEGER, description="sort key of the disk offering, integer") private Integer sortKey; @@ -64,26 +64,26 @@ public class UpdateDiskOfferingCmd extends BaseCmd{ public String getDiskOfferingName() { return diskOfferingName; } - + public Integer getSortKey() { - return sortKey; + return sortKey; } ///////////////////////////////////////////////////// /////////////// API Implementation/////////////////// ///////////////////////////////////////////////////// - + @Override public String getCommandName() { return s_name; } - + @Override public long getEntityOwnerId() { return Account.ACCOUNT_ID_SYSTEM; } - + @Override public void execute(){ DiskOffering result = _configService.updateDiskOffering(this); diff --git a/api/src/com/cloud/api/commands/UpdateDomainCmd.java b/api/src/com/cloud/api/commands/UpdateDomainCmd.java index 5989e87f29a..950dff6bee2 100644 --- a/api/src/com/cloud/api/commands/UpdateDomainCmd.java +++ b/api/src/com/cloud/api/commands/UpdateDomainCmd.java @@ -44,7 +44,7 @@ public class UpdateDomainCmd extends BaseCmd { @Parameter(name=ApiConstants.NAME, type=CommandType.STRING, description="updates domain with this name") private String domainName; - + @Parameter(name=ApiConstants.NETWORK_DOMAIN, type=CommandType.STRING, description="Network domain for the domain's networks; empty string will update domainName with NULL value") private String networkDomain; @@ -59,7 +59,7 @@ public class UpdateDomainCmd extends BaseCmd { public String getDomainName() { return domainName; } - + public String getNetworkDomain() { return networkDomain; } @@ -72,12 +72,12 @@ public class UpdateDomainCmd extends BaseCmd { public String getCommandName() { return s_name; } - + @Override public long getEntityOwnerId() { return Account.ACCOUNT_ID_SYSTEM; } - + @Override public void execute(){ UserContext.current().setEventDetails("Domain Id: "+getId()); diff --git a/api/src/com/cloud/api/commands/UpdateHostCmd.java b/api/src/com/cloud/api/commands/UpdateHostCmd.java index 020a3246ddc..e09e4f03a4c 100755 --- a/api/src/com/cloud/api/commands/UpdateHostCmd.java +++ b/api/src/com/cloud/api/commands/UpdateHostCmd.java @@ -52,7 +52,7 @@ public class UpdateHostCmd extends BaseCmd { @Parameter(name=ApiConstants.HOST_TAGS, type=CommandType.LIST, collectionType=CommandType.STRING, description="list of tags to be added to the host") private List hostTags; - + @Parameter(name=ApiConstants.URL, type=CommandType.STRING, description="the new uri for the secondary storage: nfs://host/path") private String url; @@ -74,10 +74,10 @@ public class UpdateHostCmd extends BaseCmd { public List getHostTags() { return hostTags; - } - + } + public String getUrl() { - return url; + return url; } ///////////////////////////////////////////////////// @@ -102,13 +102,13 @@ public class UpdateHostCmd extends BaseCmd { public void execute(){ Host result; try { - result = _resourceService.updateHost(this); + result = _resourceService.updateHost(this); HostResponse hostResponse = _responseGenerator.createHostResponse(result); hostResponse.setResponseName(getCommandName()); this.setResponseObject(hostResponse); } catch (Exception e) { - s_logger.debug("Failed to update host:" + getId(), e); - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to update host:" + getId() + "," + e.getMessage()); + s_logger.debug("Failed to update host:" + getId(), e); + throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to update host:" + getId() + "," + e.getMessage()); } } } diff --git a/api/src/com/cloud/api/commands/UpdateHostPasswordCmd.java b/api/src/com/cloud/api/commands/UpdateHostPasswordCmd.java index e71c63d9cb2..9f8c02e5567 100644 --- a/api/src/com/cloud/api/commands/UpdateHostPasswordCmd.java +++ b/api/src/com/cloud/api/commands/UpdateHostPasswordCmd.java @@ -48,7 +48,7 @@ public class UpdateHostPasswordCmd extends BaseCmd { @Parameter(name=ApiConstants.USERNAME, type=CommandType.STRING, required=true, description="the username for the host/cluster") private String username; - + @Parameter(name=ApiConstants.PASSWORD, type=CommandType.STRING, required=true, description="the new password for the host/cluster") private String password; @@ -59,7 +59,7 @@ public class UpdateHostPasswordCmd extends BaseCmd { public Long getHostId() { return hostId; } - + public Long getClusterId() { return clusterId; } @@ -71,7 +71,7 @@ public class UpdateHostPasswordCmd extends BaseCmd { public String getUsername() { return username; } - + // /////////////////////////////////////////////////// // ///////////// API Implementation/////////////////// // /////////////////////////////////////////////////// @@ -92,4 +92,4 @@ public class UpdateHostPasswordCmd extends BaseCmd { _resourceService.updateHostPassword(this); this.setResponseObject(new SuccessResponse(getCommandName())); } -} \ No newline at end of file +} diff --git a/api/src/com/cloud/api/commands/UpdateIsoCmd.java b/api/src/com/cloud/api/commands/UpdateIsoCmd.java index de3a69b31fe..f42c1288672 100755 --- a/api/src/com/cloud/api/commands/UpdateIsoCmd.java +++ b/api/src/com/cloud/api/commands/UpdateIsoCmd.java @@ -33,12 +33,12 @@ public class UpdateIsoCmd extends UpdateTemplateOrIsoCmd { ///////////////////////////////////////////////////// /////////////////// Accessors /////////////////////// ///////////////////////////////////////////////////// - + @Override public Boolean isPasswordEnabled() { return null; } - + @Override public String getFormat() { return null; @@ -52,7 +52,7 @@ public class UpdateIsoCmd extends UpdateTemplateOrIsoCmd { public String getCommandName() { return s_name; } - + @Override public long getEntityOwnerId() { VirtualMachineTemplate template = _entityMgr.findById(VirtualMachineTemplate.class, getId()); @@ -62,7 +62,7 @@ public class UpdateIsoCmd extends UpdateTemplateOrIsoCmd { return Account.ACCOUNT_ID_SYSTEM; // no account info given, parent this command to SYSTEM so ERROR events are tracked } - + @Override public void execute(){ VirtualMachineTemplate result = _mgr.updateTemplate(this); diff --git a/api/src/com/cloud/api/commands/UpdateIsoPermissionsCmd.java b/api/src/com/cloud/api/commands/UpdateIsoPermissionsCmd.java index 7b55769c607..208ee1c3f08 100644 --- a/api/src/com/cloud/api/commands/UpdateIsoPermissionsCmd.java +++ b/api/src/com/cloud/api/commands/UpdateIsoPermissionsCmd.java @@ -26,13 +26,13 @@ import com.cloud.user.Account; @Implementation(description="Updates iso permissions", responseObject=SuccessResponse.class) public class UpdateIsoPermissionsCmd extends UpdateTemplateOrIsoPermissionsCmd { protected String getResponseName() { - return "updateisopermissionsresponse"; + return "updateisopermissionsresponse"; + } + + protected Logger getLogger() { + return Logger.getLogger(UpdateIsoPermissionsCmd.class.getName()); } - protected Logger getLogger() { - return Logger.getLogger(UpdateIsoPermissionsCmd.class.getName()); - } - @Override public long getEntityOwnerId() { VirtualMachineTemplate template = _entityMgr.findById(VirtualMachineTemplate.class, getId()); diff --git a/api/src/com/cloud/api/commands/UpdateLoadBalancerRuleCmd.java b/api/src/com/cloud/api/commands/UpdateLoadBalancerRuleCmd.java index 8cb2ca52bd3..91ed7d386ff 100644 --- a/api/src/com/cloud/api/commands/UpdateLoadBalancerRuleCmd.java +++ b/api/src/com/cloud/api/commands/UpdateLoadBalancerRuleCmd.java @@ -100,7 +100,7 @@ public class UpdateLoadBalancerRuleCmd extends BaseAsyncCmd { public String getEventDescription() { return "updating load balancer rule"; } - + @Override public void execute(){ UserContext.current().setEventDetails("Load balancer Id: "+getId()); diff --git a/api/src/com/cloud/api/commands/UpdateNetworkCmd.java b/api/src/com/cloud/api/commands/UpdateNetworkCmd.java index c801e8977a0..b5bb48eff81 100644 --- a/api/src/com/cloud/api/commands/UpdateNetworkCmd.java +++ b/api/src/com/cloud/api/commands/UpdateNetworkCmd.java @@ -47,43 +47,43 @@ public class UpdateNetworkCmd extends BaseAsyncCmd { @IdentityMapper(entityTableName="networks") @Parameter(name=ApiConstants.ID, type=CommandType.LONG, required=true, description="the ID of the network") private Long id; - + @Parameter(name=ApiConstants.NAME, type=CommandType.STRING, description="the new name for the network") private String name; - + @Parameter(name=ApiConstants.DISPLAY_TEXT, type=CommandType.STRING, description="the new display text for the network") private String displayText; - + @Parameter(name=ApiConstants.NETWORK_DOMAIN, type=CommandType.STRING, description="network domain") private String networkDomain; - + @Parameter(name=ApiConstants.CHANGE_CIDR, type=CommandType.BOOLEAN, description="Force update even if cidr type is different") private Boolean changeCidr; - + @IdentityMapper(entityTableName="network_offerings") @Parameter(name=ApiConstants.NETWORK_OFFERING_ID, type=CommandType.LONG, description="network offering ID") private Long networkOfferingId; - + ///////////////////////////////////////////////////// /////////////////// Accessors /////////////////////// ///////////////////////////////////////////////////// - + public Long getId() { return id; } - + public String getNetworkName() { return name; } - + public String getDisplayText() { return displayText; } - + private String getNetworkDomain() { return networkDomain; } - + private Long getNetworkOfferingId() { return networkOfferingId; } @@ -102,7 +102,7 @@ public class UpdateNetworkCmd extends BaseAsyncCmd { public String getCommandName() { return s_name; } - + @Override public long getEntityOwnerId() { Network network = _networkService.getNetwork(id); @@ -112,7 +112,7 @@ public class UpdateNetworkCmd extends BaseAsyncCmd { return _networkService.getNetwork(id).getAccountId(); } } - + @Override public void execute() throws InsufficientCapacityException, ConcurrentOperationException{ User callerUser = _accountService.getActiveUser(UserContext.current().getCallerUserId()); @@ -121,7 +121,7 @@ public class UpdateNetworkCmd extends BaseAsyncCmd { if (network == null) { throw new InvalidParameterValueException("Couldn't find network by id"); } - + Network result = null; if (network.getVpcId() != null) { result = _vpcService.updateVpcGuestNetwork(getId(), getNetworkName(), getDisplayText(), callerAccount, @@ -130,7 +130,7 @@ public class UpdateNetworkCmd extends BaseAsyncCmd { result = _networkService.updateGuestNetwork(getId(), getNetworkName(), getDisplayText(), callerAccount, callerUser, getNetworkDomain(), getNetworkOfferingId(), getChangeCidr()); } - + if (result != null) { NetworkResponse response = _responseGenerator.createNetworkResponse(result); response.setResponseName(getCommandName()); @@ -139,12 +139,12 @@ public class UpdateNetworkCmd extends BaseAsyncCmd { throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to update network"); } } - + @Override public String getEventDescription() { return "Updating network: " + getId(); } - + @Override public String getEventType() { return EventTypes.EVENT_NETWORK_UPDATE; diff --git a/api/src/com/cloud/api/commands/UpdateNetworkOfferingCmd.java b/api/src/com/cloud/api/commands/UpdateNetworkOfferingCmd.java index 2521dea0fed..0c3f829bb4f 100755 --- a/api/src/com/cloud/api/commands/UpdateNetworkOfferingCmd.java +++ b/api/src/com/cloud/api/commands/UpdateNetworkOfferingCmd.java @@ -36,21 +36,21 @@ public class UpdateNetworkOfferingCmd extends BaseCmd { ///////////////////////////////////////////////////// //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - + @IdentityMapper(entityTableName="network_offerings") @Parameter(name=ApiConstants.ID, type=CommandType.LONG, description="the id of the network offering") private Long id; @Parameter(name=ApiConstants.NAME, type=CommandType.STRING, description="the name of the network offering") private String networkOfferingName; - + @Parameter(name=ApiConstants.DISPLAY_TEXT, type=CommandType.STRING, description="the display text of the network offering") private String displayText; - + @Parameter(name=ApiConstants.AVAILABILITY, type=CommandType.STRING, description="the availability of network offering." + - " Default value is Required for Guest Virtual network offering; Optional for Guest Direct network offering") + " Default value is Required for Guest Virtual network offering; Optional for Guest Direct network offering") private String availability; - + @Parameter(name=ApiConstants.SORT_KEY, type=CommandType.INTEGER, description="sort key of the network offering, integer") private Integer sortKey; @@ -60,15 +60,15 @@ public class UpdateNetworkOfferingCmd extends BaseCmd { ///////////////////////////////////////////////////// /////////////////// Accessors /////////////////////// ///////////////////////////////////////////////////// - + public String getNetworkOfferingName() { return networkOfferingName; } - + public String getDisplayText() { return displayText; } - + public Long getId() { return id; } @@ -80,9 +80,9 @@ public class UpdateNetworkOfferingCmd extends BaseCmd { public String getState() { return state; } - + public Integer getSortKey() { - return sortKey; + return sortKey; } ///////////////////////////////////////////////////// @@ -92,7 +92,7 @@ public class UpdateNetworkOfferingCmd extends BaseCmd { public String getCommandName() { return _name; } - + @Override public long getEntityOwnerId() { return Account.ACCOUNT_ID_SYSTEM; diff --git a/api/src/com/cloud/api/commands/UpdateNetworkServiceProviderCmd.java b/api/src/com/cloud/api/commands/UpdateNetworkServiceProviderCmd.java index be385232500..fb34038e424 100644 --- a/api/src/com/cloud/api/commands/UpdateNetworkServiceProviderCmd.java +++ b/api/src/com/cloud/api/commands/UpdateNetworkServiceProviderCmd.java @@ -44,14 +44,14 @@ public class UpdateNetworkServiceProviderCmd extends BaseAsyncCmd { ///////////////////////////////////////////////////// @Parameter(name=ApiConstants.STATE, type=CommandType.STRING, description="Enabled/Disabled/Shutdown the physical network service provider") private String state; - + @IdentityMapper(entityTableName="physical_network_service_providers") @Parameter(name=ApiConstants.ID, type=CommandType.LONG, required=true, description="network service provider id") - private Long id; + private Long id; @Parameter(name=ApiConstants.SERVICE_LIST, type=CommandType.LIST, collectionType = CommandType.STRING, description="the list of services to be enabled for this physical network service provider") private List enabledServices; - + ///////////////////////////////////////////////////// /////////////////// Accessors /////////////////////// ///////////////////////////////////////////////////// @@ -59,14 +59,14 @@ public class UpdateNetworkServiceProviderCmd extends BaseAsyncCmd { public String getState() { return state; } - + private Long getId() { return id; - } - + } + public List getEnabledServices() { return enabledServices; - } + } ///////////////////////////////////////////////////// /////////////// API Implementation/////////////////// ///////////////////////////////////////////////////// @@ -75,12 +75,12 @@ public class UpdateNetworkServiceProviderCmd extends BaseAsyncCmd { public String getCommandName() { return s_name; } - + @Override public long getEntityOwnerId() { return Account.ACCOUNT_ID_SYSTEM; } - + @Override public void execute(){ PhysicalNetworkServiceProvider result = _networkService.updateNetworkServiceProvider(getId(), getState(), getEnabledServices()); @@ -102,7 +102,7 @@ public class UpdateNetworkServiceProviderCmd extends BaseAsyncCmd { public String getEventDescription() { return "Updating physical network ServiceProvider: " + getId(); } - + @Override public AsyncJob.Type getInstanceType() { return AsyncJob.Type.PhysicalNetworkServiceProvider; diff --git a/api/src/com/cloud/api/commands/UpdatePhysicalNetworkCmd.java b/api/src/com/cloud/api/commands/UpdatePhysicalNetworkCmd.java index 19dd9aef7c0..32c29a49fe3 100644 --- a/api/src/com/cloud/api/commands/UpdatePhysicalNetworkCmd.java +++ b/api/src/com/cloud/api/commands/UpdatePhysicalNetworkCmd.java @@ -49,17 +49,17 @@ public class UpdatePhysicalNetworkCmd extends BaseAsyncCmd { @Parameter(name=ApiConstants.TAGS, type=CommandType.LIST, collectionType=CommandType.STRING, description="Tag the physical network") private List tags; - + @Parameter(name=ApiConstants.STATE, type=CommandType.STRING, description="Enabled/Disabled") private String state; @Parameter(name=ApiConstants.VLAN, type=CommandType.STRING, description="the VLAN for the physical network") private String vlan; - + ///////////////////////////////////////////////////// /////////////////// Accessors /////////////////////// ///////////////////////////////////////////////////// - + public List getTags() { return tags; } @@ -67,7 +67,7 @@ public class UpdatePhysicalNetworkCmd extends BaseAsyncCmd { public String getNetworkSpeed() { return speed; } - + public String getState() { return state; } @@ -79,7 +79,7 @@ public class UpdatePhysicalNetworkCmd extends BaseAsyncCmd { public String getVlan() { return vlan; } - + ///////////////////////////////////////////////////// /////////////// API Implementation/////////////////// ///////////////////////////////////////////////////// @@ -88,12 +88,12 @@ public class UpdatePhysicalNetworkCmd extends BaseAsyncCmd { public String getCommandName() { return s_name; } - + @Override public long getEntityOwnerId() { return Account.ACCOUNT_ID_SYSTEM; } - + @Override public void execute(){ PhysicalNetwork result = _networkService.updatePhysicalNetwork(getId(),getNetworkSpeed(), getTags(), getVlan(), getState()); @@ -106,12 +106,12 @@ public class UpdatePhysicalNetworkCmd extends BaseAsyncCmd { public String getEventDescription() { return "Updating Physical network: " + getId(); } - + @Override public String getEventType() { return EventTypes.EVENT_PHYSICAL_NETWORK_UPDATE; } - + @Override public AsyncJob.Type getInstanceType() { return AsyncJob.Type.PhysicalNetwork; diff --git a/api/src/com/cloud/api/commands/UpdatePodCmd.java b/api/src/com/cloud/api/commands/UpdatePodCmd.java index 48207b9b665..515a02df5b2 100755 --- a/api/src/com/cloud/api/commands/UpdatePodCmd.java +++ b/api/src/com/cloud/api/commands/UpdatePodCmd.java @@ -47,16 +47,16 @@ public class UpdatePodCmd extends BaseCmd { @Parameter(name=ApiConstants.START_IP, type=CommandType.STRING, description="the starting IP address for the Pod") private String startIp; - + @Parameter(name=ApiConstants.END_IP, type=CommandType.STRING, description="the ending IP address for the Pod") private String endIp; - + @Parameter(name=ApiConstants.NETMASK, type=CommandType.STRING, description="the netmask of the Pod") private String netmask; @Parameter(name=ApiConstants.GATEWAY, type=CommandType.STRING, description="the gateway for the Pod") private String gateway; - + @Parameter(name=ApiConstants.ALLOCATION_STATE, type=CommandType.STRING, description="Allocation state of this cluster for allocation of new resources") private String allocationState; @@ -89,7 +89,7 @@ public class UpdatePodCmd extends BaseCmd { } public String getAllocationState() { - return allocationState; + return allocationState; } ///////////////////////////////////////////////////// /////////////// API Implementation/////////////////// @@ -99,12 +99,12 @@ public class UpdatePodCmd extends BaseCmd { public String getCommandName() { return s_name; } - + @Override public long getEntityOwnerId() { return Account.ACCOUNT_ID_SYSTEM; } - + @Override public void execute(){ Pod result = _configService.editPod(this); diff --git a/api/src/com/cloud/api/commands/UpdateResourceCountCmd.java b/api/src/com/cloud/api/commands/UpdateResourceCountCmd.java index 30cc5db218c..811b917d6bb 100644 --- a/api/src/com/cloud/api/commands/UpdateResourceCountCmd.java +++ b/api/src/com/cloud/api/commands/UpdateResourceCountCmd.java @@ -53,13 +53,13 @@ public class UpdateResourceCountCmd extends BaseCmd { private Long domainId; @Parameter(name=ApiConstants.RESOURCE_TYPE, type=CommandType.INTEGER, description= "Type of resource to update. If specifies valid values are 0, 1, 2, 3, and 4. If not specified will update all resource counts" + - "0 - Instance. Number of instances a user can create. " + - "1 - IP. Number of public IP addresses a user can own. " + - "2 - Volume. Number of disk volumes a user can create." + - "3 - Snapshot. Number of snapshots a user can create." + - "4 - Template. Number of templates that a user can register/create.") + "0 - Instance. Number of instances a user can create. " + + "1 - IP. Number of public IP addresses a user can own. " + + "2 - Volume. Number of disk volumes a user can create." + + "3 - Snapshot. Number of snapshots a user can create." + + "4 - Template. Number of templates that a user can register/create.") private Integer resourceType; - + @IdentityMapper(entityTableName="projects") @Parameter(name=ApiConstants.PROJECT_ID, type=CommandType.LONG, description="Update resource limits for project") private Long projectId; @@ -83,12 +83,12 @@ public class UpdateResourceCountCmd extends BaseCmd { ///////////////////////////////////////////////////// /////////////// API Implementation/////////////////// ///////////////////////////////////////////////////// - + @Override public String getCommandName() { return s_name; } - + @Override public long getEntityOwnerId() { Account account = UserContext.current().getCaller(); @@ -110,7 +110,7 @@ public class UpdateResourceCountCmd extends BaseCmd { @Override public void execute(){ - List result = _resourceLimitService.recalculateResourceCount(finalyzeAccountId(accountName, domainId, projectId, true), getDomainId(), getResourceType()); + List result = _resourceLimitService.recalculateResourceCount(finalyzeAccountId(accountName, domainId, projectId, true), getDomainId(), getResourceType()); if ((result != null) && (result.size()>0)){ ListResponse response = new ListResponse(); @@ -129,4 +129,4 @@ public class UpdateResourceCountCmd extends BaseCmd { throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to recalculate resource counts"); } } -} \ No newline at end of file +} diff --git a/api/src/com/cloud/api/commands/UpdateResourceLimitCmd.java b/api/src/com/cloud/api/commands/UpdateResourceLimitCmd.java index 4459518ce09..9ef94ef4518 100644 --- a/api/src/com/cloud/api/commands/UpdateResourceLimitCmd.java +++ b/api/src/com/cloud/api/commands/UpdateResourceLimitCmd.java @@ -45,25 +45,25 @@ public class UpdateResourceLimitCmd extends BaseCmd { @IdentityMapper(entityTableName="domain") @Parameter(name=ApiConstants.DOMAIN_ID, type=CommandType.LONG, description="Update resource limits for all accounts in specified domain. If used with the account parameter, updates resource limits for a specified account in specified domain.") private Long domainId; - + @IdentityMapper(entityTableName="projects") @Parameter(name=ApiConstants.PROJECT_ID, type=CommandType.LONG, description="Update resource limits for project") private Long projectId; - @Parameter(name=ApiConstants.MAX, type=CommandType.LONG, description=" Maximum resource limit.") + @Parameter(name=ApiConstants.MAX, type=CommandType.LONG, description=" Maximum resource limit.") private Long max; @Parameter(name=ApiConstants.RESOURCE_TYPE, type=CommandType.INTEGER, required=true, description="Type of resource to update. Values are 0, 1, 2, 3, and 4. 0 - Instance. Number of instances a user can create. " + - "1 - IP. Number of public IP addresses a user can own. " + - "2 - Volume. Number of disk volumes a user can create." + - "3 - Snapshot. Number of snapshots a user can create." + - "4 - Template. Number of templates that a user can register/create.") + "1 - IP. Number of public IP addresses a user can own. " + + "2 - Volume. Number of disk volumes a user can create." + + "3 - Snapshot. Number of snapshots a user can create." + + "4 - Template. Number of templates that a user can register/create.") private Integer resourceType; ///////////////////////////////////////////////////// /////////////////// Accessors /////////////////////// ///////////////////////////////////////////////////// - + public Long getMax() { return max; } @@ -79,19 +79,19 @@ public class UpdateResourceLimitCmd extends BaseCmd { ///////////////////////////////////////////////////// /////////////// API Implementation/////////////////// ///////////////////////////////////////////////////// - + @Override public String getCommandName() { return s_name; } - + @Override public long getEntityOwnerId() { Long accountId = finalyzeAccountId(accountName, domainId, projectId, true); if (accountId == null) { return UserContext.current().getCaller().getId(); } - + return accountId; } diff --git a/api/src/com/cloud/api/commands/UpdateServiceOfferingCmd.java b/api/src/com/cloud/api/commands/UpdateServiceOfferingCmd.java index 30cecc9a4db..44487fba9e4 100755 --- a/api/src/com/cloud/api/commands/UpdateServiceOfferingCmd.java +++ b/api/src/com/cloud/api/commands/UpdateServiceOfferingCmd.java @@ -39,13 +39,13 @@ public class UpdateServiceOfferingCmd extends BaseCmd { @IdentityMapper(entityTableName="disk_offering") @Parameter(name=ApiConstants.ID, type=CommandType.LONG, required=true, description="the ID of the service offering to be updated") private Long id; - + @Parameter(name=ApiConstants.DISPLAY_TEXT, type=CommandType.STRING, description="the display text of the service offering to be updated") private String displayText; @Parameter(name=ApiConstants.NAME, type=CommandType.STRING, description="the name of the service offering to be updated") private String serviceOfferingName; - + @Parameter(name=ApiConstants.SORT_KEY, type=CommandType.INTEGER, description="sort key of the service offering, integer") private Integer sortKey; ///////////////////////////////////////////////////// @@ -65,19 +65,19 @@ public class UpdateServiceOfferingCmd extends BaseCmd { } public Integer getSortKey() { - return sortKey; + return sortKey; } - + ///////////////////////////////////////////////////// /////////////// API Implementation/////////////////// ///////////////////////////////////////////////////// - @Override + @Override public String getCommandName() { return s_name; } - + @Override public long getEntityOwnerId() { return Account.ACCOUNT_ID_SYSTEM; @@ -85,8 +85,8 @@ public class UpdateServiceOfferingCmd extends BaseCmd { @Override public void execute(){ - //Note - //Once an offering is created, we cannot update the domainId field (keeping consistent with zones logic) + //Note + //Once an offering is created, we cannot update the domainId field (keeping consistent with zones logic) ServiceOffering result = _configService.updateServiceOffering(this); if (result != null){ ServiceOfferingResponse response = _responseGenerator.createServiceOfferingResponse(result); diff --git a/api/src/com/cloud/api/commands/UpdateStorageNetworkIpRangeCmd.java b/api/src/com/cloud/api/commands/UpdateStorageNetworkIpRangeCmd.java index 8d8ace355c3..ec162b6dcd7 100755 --- a/api/src/com/cloud/api/commands/UpdateStorageNetworkIpRangeCmd.java +++ b/api/src/com/cloud/api/commands/UpdateStorageNetworkIpRangeCmd.java @@ -36,28 +36,28 @@ import com.cloud.user.Account; @Implementation(description="Update a Storage network IP range, only allowed when no IPs in this range have been allocated.", responseObject=StorageNetworkIpRangeResponse.class, since="3.0.0") public class UpdateStorageNetworkIpRangeCmd extends BaseAsyncCmd { - public static final Logger s_logger = Logger.getLogger(UpdateStorageNetworkIpRangeCmd.class); - private static final String s_name = "updatestoragenetworkiprangeresponse"; - + public static final Logger s_logger = Logger.getLogger(UpdateStorageNetworkIpRangeCmd.class); + private static final String s_name = "updatestoragenetworkiprangeresponse"; + ///////////////////////////////////////////////////// //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - @IdentityMapper(entityTableName="dc_storage_network_ip_range") + @IdentityMapper(entityTableName="dc_storage_network_ip_range") @Parameter(name=ApiConstants.ID, type=CommandType.LONG, required=true, description="UUID of storage network ip range") private Long id; - + @Parameter(name=ApiConstants.START_IP, type=CommandType.STRING, description="the beginning IP address") private String startIp; @Parameter(name=ApiConstants.END_IP, type=CommandType.STRING, description="the ending IP address") private String endIp; - + @Parameter(name=ApiConstants.VLAN, type=CommandType.INTEGER, description="Optional. the vlan the ip range sits on") private Integer vlan; - + @Parameter(name=ApiConstants.NETMASK, type=CommandType.STRING, description="the netmask for storage network") private String netmask; - + ///////////////////////////////////////////////////// /////////////////// Accessors /////////////////////// ///////////////////////////////////////////////////// @@ -72,49 +72,49 @@ public class UpdateStorageNetworkIpRangeCmd extends BaseAsyncCmd { public Integer getVlan() { return vlan; } - + public String getNetmask() { - return netmask; + return netmask; } public Long getId() { - return id; + return id; } - - @Override - public String getEventType() { - return EventTypes.EVENT_STORAGE_IP_RANGE_UPDATE; - } - @Override - public String getEventDescription() { - return "Update storage ip range " + getId() + " [StartIp=" + getStartIp() + ", EndIp=" + getEndIp() + ", vlan=" + getVlan() + ", netmask=" + getNetmask() + ']'; - } + @Override + public String getEventType() { + return EventTypes.EVENT_STORAGE_IP_RANGE_UPDATE; + } - @Override - public void execute() throws ResourceUnavailableException, InsufficientCapacityException, ServerApiException, ConcurrentOperationException, - ResourceAllocationException { - try { - StorageNetworkIpRange result = _storageNetworkService.updateIpRange(this); - StorageNetworkIpRangeResponse response = _responseGenerator.createStorageNetworkIpRangeResponse(result); - response.setResponseName(getCommandName()); - this.setResponseObject(response); - } catch (Exception e) { - s_logger.warn("Update storage network IP range failed", e); - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, e.getMessage()); - } + @Override + public String getEventDescription() { + return "Update storage ip range " + getId() + " [StartIp=" + getStartIp() + ", EndIp=" + getEndIp() + ", vlan=" + getVlan() + ", netmask=" + getNetmask() + ']'; + } - } + @Override + public void execute() throws ResourceUnavailableException, InsufficientCapacityException, ServerApiException, ConcurrentOperationException, + ResourceAllocationException { + try { + StorageNetworkIpRange result = _storageNetworkService.updateIpRange(this); + StorageNetworkIpRangeResponse response = _responseGenerator.createStorageNetworkIpRangeResponse(result); + response.setResponseName(getCommandName()); + this.setResponseObject(response); + } catch (Exception e) { + s_logger.warn("Update storage network IP range failed", e); + throw new ServerApiException(BaseCmd.INTERNAL_ERROR, e.getMessage()); + } - @Override - public String getCommandName() { - return s_name; - } + } - @Override - public long getEntityOwnerId() { - return Account.ACCOUNT_ID_SYSTEM; - } + @Override + public String getCommandName() { + return s_name; + } + + @Override + public long getEntityOwnerId() { + return Account.ACCOUNT_ID_SYSTEM; + } } diff --git a/api/src/com/cloud/api/commands/UpdateStoragePoolCmd.java b/api/src/com/cloud/api/commands/UpdateStoragePoolCmd.java index d4c7630c02d..605c668be59 100644 --- a/api/src/com/cloud/api/commands/UpdateStoragePoolCmd.java +++ b/api/src/com/cloud/api/commands/UpdateStoragePoolCmd.java @@ -46,7 +46,7 @@ public class UpdateStoragePoolCmd extends BaseCmd { @Parameter(name=ApiConstants.TAGS, type=CommandType.LIST, collectionType=CommandType.STRING, description="comma-separated list of tags for the storage pool") private List tags; - + ///////////////////////////////////////////////////// /////////////////// Accessors /////////////////////// @@ -68,12 +68,12 @@ public class UpdateStoragePoolCmd extends BaseCmd { public String getCommandName() { return s_name; } - + @Override public long getEntityOwnerId() { return Account.ACCOUNT_ID_SYSTEM; } - + @Override public void execute(){ StoragePool result = _storageService.updateStoragePool(this); diff --git a/api/src/com/cloud/api/commands/UpdateTemplateCmd.java b/api/src/com/cloud/api/commands/UpdateTemplateCmd.java index 339fce9f860..2cffdac43b5 100755 --- a/api/src/com/cloud/api/commands/UpdateTemplateCmd.java +++ b/api/src/com/cloud/api/commands/UpdateTemplateCmd.java @@ -27,13 +27,13 @@ import com.cloud.user.Account; @Implementation(description="Updates attributes of a template.", responseObject=TemplateResponse.class) public class UpdateTemplateCmd extends UpdateTemplateOrIsoCmd { - public static final Logger s_logger = Logger.getLogger(UpdateTemplateCmd.class.getName()); + public static final Logger s_logger = Logger.getLogger(UpdateTemplateCmd.class.getName()); private static final String s_name = "updatetemplateresponse"; ///////////////////////////////////////////////////// /////////////////// Accessors /////////////////////// ///////////////////////////////////////////////////// - + @Override public Boolean isBootable() { return null; @@ -42,17 +42,17 @@ public class UpdateTemplateCmd extends UpdateTemplateOrIsoCmd { ///////////////////////////////////////////////////// /////////////// API Implementation/////////////////// ///////////////////////////////////////////////////// - + @Override public String getCommandName() { return s_name; } - + @SuppressWarnings("unchecked") public TemplateResponse getResponse() { return null; } - + @Override public long getEntityOwnerId() { VirtualMachineTemplate template = _entityMgr.findById(VirtualMachineTemplate.class, getId()); @@ -62,7 +62,7 @@ public class UpdateTemplateCmd extends UpdateTemplateOrIsoCmd { return Account.ACCOUNT_ID_SYSTEM; // no account info given, parent this command to SYSTEM so ERROR events are tracked } - + @Override public void execute(){ VirtualMachineTemplate result = _mgr.updateTemplate(this); diff --git a/api/src/com/cloud/api/commands/UpdateTemplateOrIsoCmd.java b/api/src/com/cloud/api/commands/UpdateTemplateOrIsoCmd.java index 50cf136de87..36fc540549d 100755 --- a/api/src/com/cloud/api/commands/UpdateTemplateOrIsoCmd.java +++ b/api/src/com/cloud/api/commands/UpdateTemplateOrIsoCmd.java @@ -46,13 +46,13 @@ public abstract class UpdateTemplateOrIsoCmd extends BaseCmd { @IdentityMapper(entityTableName="guest_os") @Parameter(name=ApiConstants.OS_TYPE_ID, type=CommandType.LONG, description="the ID of the OS type that best represents the OS of this image.") private Long osTypeId; - + @Parameter(name=ApiConstants.FORMAT, type=CommandType.STRING, description="the format for the image") private String format; - + @Parameter(name=ApiConstants.PASSWORD_ENABLED, type=CommandType.BOOLEAN, description="true if the image supports the password reset feature; default is false") private Boolean passwordEnabled; - + @Parameter(name=ApiConstants.SORT_KEY, type=CommandType.INTEGER, description="sort key of the template, integer") private Integer sortKey; @@ -79,16 +79,16 @@ public abstract class UpdateTemplateOrIsoCmd extends BaseCmd { public Long getOsTypeId() { return osTypeId; } - + public Boolean isPasswordEnabled() { return passwordEnabled; } - + public String getFormat() { return format; } - + public Integer getSortKey() { - return sortKey; + return sortKey; } } diff --git a/api/src/com/cloud/api/commands/UpdateTemplateOrIsoPermissionsCmd.java b/api/src/com/cloud/api/commands/UpdateTemplateOrIsoPermissionsCmd.java index 565e0a1fd27..94c8d2b252e 100755 --- a/api/src/com/cloud/api/commands/UpdateTemplateOrIsoPermissionsCmd.java +++ b/api/src/com/cloud/api/commands/UpdateTemplateOrIsoPermissionsCmd.java @@ -48,13 +48,13 @@ public abstract class UpdateTemplateOrIsoPermissionsCmd extends BaseCmd { @Parameter(name = ApiConstants.IS_PUBLIC, type = CommandType.BOOLEAN, description = "true for public template/iso, false for private templates/isos") private Boolean isPublic; - + @Parameter(name = ApiConstants.IS_EXTRACTABLE, type = CommandType.BOOLEAN, description = "true if the template/iso is extractable, false other wise. Can be set only by root admin") private Boolean isExtractable; @Parameter(name = ApiConstants.OP, type = CommandType.STRING, description = "permission operator (add, remove, reset)") private String operation; - + @IdentityMapper(entityTableName="projects") @Parameter(name = ApiConstants.PROJECT_IDS, type = CommandType.LIST, collectionType = CommandType.LONG, description = "a comma delimited list of projects. If specified, \"op\" parameter has to be passed in.") private List projectIds; @@ -65,10 +65,10 @@ public abstract class UpdateTemplateOrIsoPermissionsCmd extends BaseCmd { public List getAccountNames() { if (accountNames != null && projectIds != null) { - throw new InvalidParameterValueException("Accounts and projectIds can't be specified together"); + throw new InvalidParameterValueException("Accounts and projectIds can't be specified together"); } - - return accountNames; + + return accountNames; } public Long getId() { @@ -82,18 +82,18 @@ public abstract class UpdateTemplateOrIsoPermissionsCmd extends BaseCmd { public Boolean isPublic() { return isPublic; } - + public Boolean isExtractable() { return isExtractable; } - + public String getOperation() { return operation; } - + public List getProjectIds() { if (accountNames != null && projectIds != null) { - throw new InvalidParameterValueException("Accounts and projectIds can't be specified together"); + throw new InvalidParameterValueException("Accounts and projectIds can't be specified together"); } return projectIds; } diff --git a/api/src/com/cloud/api/commands/UpdateTemplatePermissionsCmd.java b/api/src/com/cloud/api/commands/UpdateTemplatePermissionsCmd.java index c05e8fff727..fac827bf6e6 100644 --- a/api/src/com/cloud/api/commands/UpdateTemplatePermissionsCmd.java +++ b/api/src/com/cloud/api/commands/UpdateTemplatePermissionsCmd.java @@ -24,19 +24,19 @@ import com.cloud.template.VirtualMachineTemplate; import com.cloud.user.Account; @Implementation(responseObject=SuccessResponse.class, description="Updates a template visibility permissions. " + - "A public template is visible to all accounts within the same domain. " + - "A private template is visible only to the owner of the template. " + - "A priviledged template is a private template with account permissions added. " + - "Only accounts specified under the template permissions are visible to them.") + "A public template is visible to all accounts within the same domain. " + + "A private template is visible only to the owner of the template. " + + "A priviledged template is a private template with account permissions added. " + + "Only accounts specified under the template permissions are visible to them.") public class UpdateTemplatePermissionsCmd extends UpdateTemplateOrIsoPermissionsCmd { protected String getResponseName() { - return "updatetemplatepermissionsresponse"; + return "updatetemplatepermissionsresponse"; } - - protected Logger getLogger() { - return Logger.getLogger(UpdateTemplatePermissionsCmd.class.getName()); - } - + + protected Logger getLogger() { + return Logger.getLogger(UpdateTemplatePermissionsCmd.class.getName()); + } + @Override public long getEntityOwnerId() { VirtualMachineTemplate template = _entityMgr.findById(VirtualMachineTemplate.class, getId()); diff --git a/api/src/com/cloud/api/commands/UpdateTrafficTypeCmd.java b/api/src/com/cloud/api/commands/UpdateTrafficTypeCmd.java index edd82f279af..2a24372996e 100644 --- a/api/src/com/cloud/api/commands/UpdateTrafficTypeCmd.java +++ b/api/src/com/cloud/api/commands/UpdateTrafficTypeCmd.java @@ -40,25 +40,25 @@ public class UpdateTrafficTypeCmd extends BaseAsyncCmd { ///////////////////////////////////////////////////// //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - + @IdentityMapper(entityTableName="physical_network_traffic_types") @Parameter(name=ApiConstants.ID, type=CommandType.LONG, required=true, description="traffic type id") private Long id; - + @Parameter(name=ApiConstants.XEN_NETWORK_LABEL, type=CommandType.STRING, description="The network name label of the physical device dedicated to this traffic on a XenServer host") private String xenLabel; - + @Parameter(name=ApiConstants.KVM_NETWORK_LABEL, type=CommandType.STRING, description="The network name label of the physical device dedicated to this traffic on a KVM host") private String kvmLabel; - + @Parameter(name=ApiConstants.VMWARE_NETWORK_LABEL, type=CommandType.STRING, description="The network name label of the physical device dedicated to this traffic on a VMware host") private String vmwareLabel; - + ///////////////////////////////////////////////////// /////////////////// Accessors /////////////////////// ///////////////////////////////////////////////////// - + public Long getId() { return id; } @@ -69,11 +69,11 @@ public class UpdateTrafficTypeCmd extends BaseAsyncCmd { public String getKvmLabel() { return kvmLabel; } - + public String getVmwareLabel() { return vmwareLabel; - } - + } + ///////////////////////////////////////////////////// /////////////// API Implementation/////////////////// ///////////////////////////////////////////////////// @@ -82,12 +82,12 @@ public class UpdateTrafficTypeCmd extends BaseAsyncCmd { public String getCommandName() { return s_name; } - + @Override public long getEntityOwnerId() { return Account.ACCOUNT_ID_SYSTEM; } - + @Override public void execute(){ PhysicalNetworkTrafficType result = _networkService.updatePhysicalNetworkTrafficType(getId(), getXenLabel(), getKvmLabel(), getVmwareLabel()); @@ -104,7 +104,7 @@ public class UpdateTrafficTypeCmd extends BaseAsyncCmd { public String getEventDescription() { return "Updating Traffic Type: " + getId(); } - + @Override public String getEventType() { return EventTypes.EVENT_TRAFFIC_TYPE_UPDATE; diff --git a/api/src/com/cloud/api/commands/UpdateUserCmd.java b/api/src/com/cloud/api/commands/UpdateUserCmd.java index 1f2f61d9160..fbe062e1d00 100644 --- a/api/src/com/cloud/api/commands/UpdateUserCmd.java +++ b/api/src/com/cloud/api/commands/UpdateUserCmd.java @@ -116,7 +116,7 @@ public class UpdateUserCmd extends BaseCmd { public String getCommandName() { return s_name; } - + @Override public long getEntityOwnerId() { User user = _entityMgr.findById(User.class, getId()); @@ -126,7 +126,7 @@ public class UpdateUserCmd extends BaseCmd { return Account.ACCOUNT_ID_SYSTEM; // no account info given, parent this command to SYSTEM so ERROR events are tracked } - + @Override public void execute(){ UserContext.current().setEventDetails("UserId: "+getId()); @@ -139,4 +139,4 @@ public class UpdateUserCmd extends BaseCmd { throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to update user"); } } -} \ No newline at end of file +} diff --git a/api/src/com/cloud/api/commands/UpdateVMGroupCmd.java b/api/src/com/cloud/api/commands/UpdateVMGroupCmd.java index 0dab5a1cf87..7f88701b0c9 100644 --- a/api/src/com/cloud/api/commands/UpdateVMGroupCmd.java +++ b/api/src/com/cloud/api/commands/UpdateVMGroupCmd.java @@ -38,7 +38,7 @@ public class UpdateVMGroupCmd extends BaseCmd{ //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - @IdentityMapper(entityTableName="instance_group") + @IdentityMapper(entityTableName="instance_group") @Parameter(name=ApiConstants.ID, type=CommandType.LONG, required=true, description="Instance group ID") private Long id; @@ -65,7 +65,7 @@ public class UpdateVMGroupCmd extends BaseCmd{ public String getCommandName() { return s_name; } - + @Override public long getEntityOwnerId() { InstanceGroup group = _entityMgr.findById(InstanceGroup.class, getId()); diff --git a/api/src/com/cloud/api/commands/UpdateVPCOfferingCmd.java b/api/src/com/cloud/api/commands/UpdateVPCOfferingCmd.java index eb6da59e4f5..fb4362ec743 100644 --- a/api/src/com/cloud/api/commands/UpdateVPCOfferingCmd.java +++ b/api/src/com/cloud/api/commands/UpdateVPCOfferingCmd.java @@ -38,33 +38,33 @@ public class UpdateVPCOfferingCmd extends BaseAsyncCmd{ ///////////////////////////////////////////////////// //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - + @IdentityMapper(entityTableName="vpc_offerings") @Parameter(name=ApiConstants.ID, type=CommandType.LONG, description="the id of the VPC offering") private Long id; @Parameter(name=ApiConstants.NAME, type=CommandType.STRING, description="the name of the VPC offering") private String vpcOffName; - + @Parameter(name=ApiConstants.DISPLAY_TEXT, type=CommandType.STRING, description="the display text of the VPC offering") private String displayText; - + @Parameter(name=ApiConstants.STATE, type=CommandType.STRING, description="update state for the VPC offering; " + - "supported states - Enabled/Disabled") + "supported states - Enabled/Disabled") private String state; ///////////////////////////////////////////////////// /////////////////// Accessors /////////////////////// ///////////////////////////////////////////////////// - + public String getVpcOfferingName() { return vpcOffName; } - + public String getDisplayText() { return displayText; } - + public Long getId() { return id; } @@ -72,7 +72,7 @@ public class UpdateVPCOfferingCmd extends BaseAsyncCmd{ public String getState() { return state; } - + ///////////////////////////////////////////////////// /////////////// API Implementation/////////////////// @@ -81,7 +81,7 @@ public class UpdateVPCOfferingCmd extends BaseAsyncCmd{ public String getCommandName() { return _name; } - + @Override public long getEntityOwnerId() { return Account.ACCOUNT_ID_SYSTEM; diff --git a/api/src/com/cloud/api/commands/UpdateZoneCmd.java b/api/src/com/cloud/api/commands/UpdateZoneCmd.java index cd9891fa59a..36c34048f1b 100755 --- a/api/src/com/cloud/api/commands/UpdateZoneCmd.java +++ b/api/src/com/cloud/api/commands/UpdateZoneCmd.java @@ -66,21 +66,21 @@ public class UpdateZoneCmd extends BaseCmd { @Parameter(name=ApiConstants.IS_PUBLIC, type=CommandType.BOOLEAN, description="updates a private zone to public if set, but not vice-versa") private Boolean isPublic; - + @Parameter(name=ApiConstants.ALLOCATION_STATE, type=CommandType.STRING, description="Allocation state of this cluster for allocation of new resources") private String allocationState; - + @Parameter(name=ApiConstants.DETAILS, type=CommandType.MAP, description="the details for the Zone") private Map details; - + @Parameter(name=ApiConstants.DHCP_PROVIDER, type=CommandType.STRING, description="the dhcp Provider for the Zone") private String dhcpProvider; - + @Parameter(name=ApiConstants.DOMAIN, type=CommandType.STRING, description="Network domain name for the networks in the zone; empty string will update domain with NULL value") private String domain; - + @Parameter(name=ApiConstants.DNS_SEARCH_ORDER, type=CommandType.LIST, collectionType = CommandType.STRING, description="the dns search order list") - private List dnsSearchOrder; + private List dnsSearchOrder; @Parameter(name=ApiConstants.LOCAL_STORAGE_ENABLED, type=CommandType.BOOLEAN, description="true if local storage offering enabled, false otherwise") private Boolean localStorageEnabled; @@ -120,26 +120,26 @@ public class UpdateZoneCmd extends BaseCmd { public Boolean isPublic() { return isPublic; } - + public String getAllocationState() { - return allocationState; + return allocationState; } - + public Map getDetails() { return details; } - + public String getDhcpProvider() { return dhcpProvider; } - + public String getDomain() { return domain; } public List getDnsSearchOrder() { return dnsSearchOrder; - } + } public Boolean getLocalStorageEnabled() { return localStorageEnabled; @@ -153,16 +153,16 @@ public class UpdateZoneCmd extends BaseCmd { public String getCommandName() { return s_name; } - + @Override public long getEntityOwnerId() { return Account.ACCOUNT_ID_SYSTEM; } - + @Override public void execute(){ - UserContext.current().setEventDetails("Zone Id: "+getId()); - DataCenter result = _configService.editZone(this); + UserContext.current().setEventDetails("Zone Id: "+getId()); + DataCenter result = _configService.editZone(this); if (result != null) { ZoneResponse response = _responseGenerator.createZoneResponse(result, false); response.setResponseName(getCommandName()); diff --git a/api/src/com/cloud/api/commands/UpgradeRouterCmd.java b/api/src/com/cloud/api/commands/UpgradeRouterCmd.java index 1b928e0cebf..c916a5c73f3 100644 --- a/api/src/com/cloud/api/commands/UpgradeRouterCmd.java +++ b/api/src/com/cloud/api/commands/UpgradeRouterCmd.java @@ -30,8 +30,8 @@ import com.cloud.user.Account; @Implementation(description="Upgrades domain router to a new service offering", responseObject=DomainRouterResponse.class) public class UpgradeRouterCmd extends BaseCmd { - public static final Logger s_logger = Logger.getLogger(UpgradeRouterCmd.class.getName()); - private static final String s_name = "changeserviceforrouterresponse"; + public static final Logger s_logger = Logger.getLogger(UpgradeRouterCmd.class.getName()); + private static final String s_name = "changeserviceforrouterresponse"; ///////////////////////////////////////////////////// //////////////// API parameters ///////////////////// @@ -61,11 +61,11 @@ public class UpgradeRouterCmd extends BaseCmd { /////////////// API Implementation/////////////////// ///////////////////////////////////////////////////// - @Override - public String getCommandName() { - return s_name; - } - + @Override + public String getCommandName() { + return s_name; + } + @Override public long getEntityOwnerId() { VirtualRouter router = _entityMgr.findById(VirtualRouter.class, getId()); @@ -75,7 +75,7 @@ public class UpgradeRouterCmd extends BaseCmd { return Account.ACCOUNT_ID_SYSTEM; // no account info given, parent this command to SYSTEM so ERROR events are tracked } - + @Override public void execute(){ VirtualRouter router = _routerService.upgradeRouter(this); diff --git a/api/src/com/cloud/api/commands/UpgradeSystemVMCmd.java b/api/src/com/cloud/api/commands/UpgradeSystemVMCmd.java index 0b46048031f..cc7deaf46c7 100644 --- a/api/src/com/cloud/api/commands/UpgradeSystemVMCmd.java +++ b/api/src/com/cloud/api/commands/UpgradeSystemVMCmd.java @@ -48,7 +48,7 @@ public class UpgradeSystemVMCmd extends BaseCmd { private Long id; @IdentityMapper(entityTableName="disk_offering") - @Parameter(name=ApiConstants.SERVICE_OFFERING_ID, type=CommandType.LONG, required=true, + @Parameter(name=ApiConstants.SERVICE_OFFERING_ID, type=CommandType.LONG, required=true, description="the service offering ID to apply to the system vm") private Long serviceOfferingId; @@ -72,7 +72,7 @@ public class UpgradeSystemVMCmd extends BaseCmd { public String getCommandName() { return s_name; } - + @Override public long getEntityOwnerId() { Account account = UserContext.current().getCaller(); @@ -82,16 +82,16 @@ public class UpgradeSystemVMCmd extends BaseCmd { return Account.ACCOUNT_ID_SYSTEM; // no account info given, parent this command to SYSTEM so ERROR events are tracked } - + @Override public void execute(){ UserContext.current().setEventDetails("Vm Id: "+getId()); - + ServiceOffering serviceOffering = _configService.getServiceOffering(serviceOfferingId); if (serviceOffering == null) { throw new InvalidParameterValueException("Unable to find service offering: " + serviceOfferingId); } - + VirtualMachine result = _mgr.upgradeSystemVM(this); if (result != null) { SystemVmResponse response = _responseGenerator.createSystemVmResponse(result); diff --git a/api/src/com/cloud/api/commands/UploadCustomCertificateCmd.java b/api/src/com/cloud/api/commands/UploadCustomCertificateCmd.java index 38f1ff242d8..d297dfa2a2f 100644 --- a/api/src/com/cloud/api/commands/UploadCustomCertificateCmd.java +++ b/api/src/com/cloud/api/commands/UploadCustomCertificateCmd.java @@ -36,10 +36,10 @@ public class UploadCustomCertificateCmd extends BaseAsyncCmd { @Parameter(name=ApiConstants.CERTIFICATE,type=CommandType.STRING,required=true,description="The certificate to be uploaded.", length=65535) private String certificate; - + @Parameter(name=ApiConstants.ID,type=CommandType.INTEGER,required=false,description="An integer providing the location in a chain that the certificate will hold. Usually, this can be left empty. When creating a chain, the top level certificate should have an ID of 1, with each step in the chain incrementing by one. Example, CA with id = 1, Intermediate CA with id = 2, Site certificate with ID = 3") private Integer index; - + @Parameter(name=ApiConstants.NAME,type=CommandType.STRING,required=false,description="A name / alias for the certificate.") private String alias; @@ -48,25 +48,25 @@ public class UploadCustomCertificateCmd extends BaseAsyncCmd { @Parameter(name=ApiConstants.DOMAIN_SUFFIX,type=CommandType.STRING,required=true,description="DNS domain suffix that the certificate is granted for.") private String domainSuffix; - + public String getCertificate() { return certificate; } - + public String getPrivateKey() { - return privateKey; + return privateKey; } - + public String getDomainSuffix() { - return domainSuffix; + return domainSuffix; } - + public Integer getCertIndex() { - return index; + return index; } - + public String getAlias() { - return alias; + return alias; } @Override @@ -78,21 +78,21 @@ public class UploadCustomCertificateCmd extends BaseAsyncCmd { public String getEventDescription() { return ("Uploading custom certificate to the db, and applying it to all the cpvms in the system"); } - + @Override public String getCommandName() { return s_name; } - + public static String getResultObjectName() { - return "certificate"; + return "certificate"; } @Override public long getEntityOwnerId() { return Account.ACCOUNT_ID_SYSTEM; // no account info given, parent this command to SYSTEM so ERROR events are tracked } - + @Override public void execute(){ String result = _mgr.uploadCertificate(this); diff --git a/api/src/com/cloud/api/commands/UploadVolumeCmd.java b/api/src/com/cloud/api/commands/UploadVolumeCmd.java index b67c0c7d1f2..600dfa06b44 100755 --- a/api/src/com/cloud/api/commands/UploadVolumeCmd.java +++ b/api/src/com/cloud/api/commands/UploadVolumeCmd.java @@ -1,147 +1,147 @@ -// 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.commands; - -import org.apache.log4j.Logger; - -import org.apache.cloudstack.api.ApiConstants; -import org.apache.cloudstack.api.BaseAsyncCmd; -import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.IdentityMapper; -import org.apache.cloudstack.api.Implementation; -import org.apache.cloudstack.api.Parameter; -import org.apache.cloudstack.api.ServerApiException; -import com.cloud.api.response.VolumeResponse; -import com.cloud.event.EventTypes; -import com.cloud.exception.ConcurrentOperationException; -import com.cloud.exception.InsufficientCapacityException; -import com.cloud.exception.NetworkRuleConflictException; -import com.cloud.exception.ResourceAllocationException; -import com.cloud.exception.ResourceUnavailableException; -import com.cloud.storage.Volume; -import com.cloud.user.UserContext; - -@Implementation(description="Uploads a data disk.", responseObject=VolumeResponse.class) -public class UploadVolumeCmd extends BaseAsyncCmd { - public static final Logger s_logger = Logger.getLogger(UploadVolumeCmd.class.getName()); - private static final String s_name = "uploadvolumeresponse"; - - ///////////////////////////////////////////////////// - //////////////// API parameters ///////////////////// - ///////////////////////////////////////////////////// - - @Parameter(name=ApiConstants.FORMAT, type=CommandType.STRING, required=true, description="the format for the volume. Possible values include QCOW2, OVA, and VHD.") - private String format; - - @Parameter(name=ApiConstants.NAME, type=CommandType.STRING, required=true, description="the name of the volume") - private String volumeName; - - @Parameter(name=ApiConstants.URL, type=CommandType.STRING, required=true, description="the URL of where the volume is hosted. Possible URL include http:// and https://") - private String url; - - @IdentityMapper(entityTableName="data_center") - @Parameter(name=ApiConstants.ZONE_ID, type=CommandType.LONG, required=true, description="the ID of the zone the volume is to be hosted on") - private Long zoneId; - - @IdentityMapper(entityTableName="domain") - @Parameter(name=ApiConstants.DOMAIN_ID, type=CommandType.LONG, description="an optional domainId. If the account parameter is used, domainId must also be used.") - private Long domainId; - - @Parameter(name=ApiConstants.ACCOUNT, type=CommandType.STRING, description="an optional accountName. Must be used with domainId.") - private String accountName; - - @Parameter(name=ApiConstants.CHECKSUM, type=CommandType.STRING, description="the MD5 checksum value of this volume") - private String checksum; - - ///////////////////////////////////////////////////// - /////////////////// Accessors /////////////////////// - ///////////////////////////////////////////////////// - - public String getFormat() { - return format; - } - - public String getVolumeName() { - return volumeName; - } - - public String getUrl() { - return url; - } - - public Long getZoneId() { - return zoneId; - } - - public Long getDomainId() { - return domainId; - } - - public String getAccountName() { - return accountName; - } - - public String getChecksum() { - return checksum; - } - - ///////////////////////////////////////////////////// - /////////////// API Implementation/////////////////// - ///////////////////////////////////////////////////// - - @Override - public void execute() throws ResourceUnavailableException, - InsufficientCapacityException, ServerApiException, - ConcurrentOperationException, ResourceAllocationException, - NetworkRuleConflictException { - - Volume volume = _storageService.uploadVolume(this); - if (volume != null){ - VolumeResponse response = _responseGenerator.createVolumeResponse(volume); - response.setResponseName(getCommandName()); - this.setResponseObject(response); - } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to upload volume"); - } - } - - @Override - public String getCommandName() { - return s_name; - } - - @Override - public long getEntityOwnerId() { - Long accountId = finalyzeAccountId(accountName, domainId, null, true); - if (accountId == null) { - return UserContext.current().getCaller().getId(); - } - - return accountId; - } - - @Override - public String getEventDescription() { - return "uploading volume: " + getVolumeName() + " in the zone " + getZoneId(); - } - - @Override - public String getEventType() { - return EventTypes.EVENT_VOLUME_UPLOAD; - } - -} +// 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.commands; + +import org.apache.log4j.Logger; + +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseAsyncCmd; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.IdentityMapper; +import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ServerApiException; +import com.cloud.api.response.VolumeResponse; +import com.cloud.event.EventTypes; +import com.cloud.exception.ConcurrentOperationException; +import com.cloud.exception.InsufficientCapacityException; +import com.cloud.exception.NetworkRuleConflictException; +import com.cloud.exception.ResourceAllocationException; +import com.cloud.exception.ResourceUnavailableException; +import com.cloud.storage.Volume; +import com.cloud.user.UserContext; + +@Implementation(description="Uploads a data disk.", responseObject=VolumeResponse.class) +public class UploadVolumeCmd extends BaseAsyncCmd { + public static final Logger s_logger = Logger.getLogger(UploadVolumeCmd.class.getName()); + private static final String s_name = "uploadvolumeresponse"; + + ///////////////////////////////////////////////////// + //////////////// API parameters ///////////////////// + ///////////////////////////////////////////////////// + + @Parameter(name=ApiConstants.FORMAT, type=CommandType.STRING, required=true, description="the format for the volume. Possible values include QCOW2, OVA, and VHD.") + private String format; + + @Parameter(name=ApiConstants.NAME, type=CommandType.STRING, required=true, description="the name of the volume") + private String volumeName; + + @Parameter(name=ApiConstants.URL, type=CommandType.STRING, required=true, description="the URL of where the volume is hosted. Possible URL include http:// and https://") + private String url; + + @IdentityMapper(entityTableName="data_center") + @Parameter(name=ApiConstants.ZONE_ID, type=CommandType.LONG, required=true, description="the ID of the zone the volume is to be hosted on") + private Long zoneId; + + @IdentityMapper(entityTableName="domain") + @Parameter(name=ApiConstants.DOMAIN_ID, type=CommandType.LONG, description="an optional domainId. If the account parameter is used, domainId must also be used.") + private Long domainId; + + @Parameter(name=ApiConstants.ACCOUNT, type=CommandType.STRING, description="an optional accountName. Must be used with domainId.") + private String accountName; + + @Parameter(name=ApiConstants.CHECKSUM, type=CommandType.STRING, description="the MD5 checksum value of this volume") + private String checksum; + + ///////////////////////////////////////////////////// + /////////////////// Accessors /////////////////////// + ///////////////////////////////////////////////////// + + public String getFormat() { + return format; + } + + public String getVolumeName() { + return volumeName; + } + + public String getUrl() { + return url; + } + + public Long getZoneId() { + return zoneId; + } + + public Long getDomainId() { + return domainId; + } + + public String getAccountName() { + return accountName; + } + + public String getChecksum() { + return checksum; + } + + ///////////////////////////////////////////////////// + /////////////// API Implementation/////////////////// + ///////////////////////////////////////////////////// + + @Override + public void execute() throws ResourceUnavailableException, + InsufficientCapacityException, ServerApiException, + ConcurrentOperationException, ResourceAllocationException, + NetworkRuleConflictException { + + Volume volume = _storageService.uploadVolume(this); + if (volume != null){ + VolumeResponse response = _responseGenerator.createVolumeResponse(volume); + response.setResponseName(getCommandName()); + this.setResponseObject(response); + } else { + throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to upload volume"); + } + } + + @Override + public String getCommandName() { + return s_name; + } + + @Override + public long getEntityOwnerId() { + Long accountId = finalyzeAccountId(accountName, domainId, null, true); + if (accountId == null) { + return UserContext.current().getCaller().getId(); + } + + return accountId; + } + + @Override + public String getEventDescription() { + return "uploading volume: " + getVolumeName() + " in the zone " + getZoneId(); + } + + @Override + public String getEventType() { + return EventTypes.EVENT_VOLUME_UPLOAD; + } + +} diff --git a/api/src/com/cloud/api/commands/listStorageNetworkIpRangeCmd.java b/api/src/com/cloud/api/commands/listStorageNetworkIpRangeCmd.java index fa7d99bf8f9..12d97090ccc 100755 --- a/api/src/com/cloud/api/commands/listStorageNetworkIpRangeCmd.java +++ b/api/src/com/cloud/api/commands/listStorageNetworkIpRangeCmd.java @@ -39,70 +39,70 @@ import com.cloud.user.Account; @Implementation(description="List a storage network IP range.", responseObject=StorageNetworkIpRangeResponse.class, since="3.0.0") public class listStorageNetworkIpRangeCmd extends BaseListCmd { - public static final Logger s_logger = Logger.getLogger(listStorageNetworkIpRangeCmd.class); - - String s_name = "liststoragenetworkiprangeresponse"; + public static final Logger s_logger = Logger.getLogger(listStorageNetworkIpRangeCmd.class); + + String s_name = "liststoragenetworkiprangeresponse"; ///////////////////////////////////////////////////// //////////////// API parameters ///////////////////// - ///////////////////////////////////////////////////// - + ///////////////////////////////////////////////////// + @IdentityMapper(entityTableName="dc_storage_network_ip_range") @Parameter(name=ApiConstants.ID, type=CommandType.LONG, description="optional parameter. Storaget network IP range uuid, if specicied, using it to search the range.") private Long rangeId; - + @IdentityMapper(entityTableName="host_pod_ref") @Parameter(name=ApiConstants.POD_ID, type=CommandType.LONG, description="optional parameter. Pod uuid, if specicied and range uuid is absent, using it to search the range.") private Long podId; - + @IdentityMapper(entityTableName="data_center") @Parameter(name=ApiConstants.ZONE_ID, type=CommandType.LONG, description="optional parameter. Zone uuid, if specicied and both pod uuid and range uuid are absent, using it to search the range.") private Long zoneId; - + ///////////////////////////////////////////////////// /////////////////// Accessors /////////////////////// ///////////////////////////////////////////////////// - + public Long getRangeId() { - return rangeId; + return rangeId; } - + public Long getPodId() { - return podId; + return podId; } - + public Long getZoneId() { - return zoneId; + return zoneId; } - @Override - public void execute() throws ResourceUnavailableException, InsufficientCapacityException, ServerApiException, ConcurrentOperationException, - ResourceAllocationException { - try { - List results = _storageNetworkService.listIpRange(this); - ListResponse response = new ListResponse(); - List resList = new ArrayList(results.size()); - for (StorageNetworkIpRange r : results) { - StorageNetworkIpRangeResponse resp = _responseGenerator.createStorageNetworkIpRangeResponse(r); - resList.add(resp); - } - response.setResponses(resList); - response.setResponseName(getCommandName()); - this.setResponseObject(response); - } catch (Exception e) { - s_logger.warn("Failed to list storage network ip range for rangeId=" + getRangeId() + " podId=" + getPodId() + " zoneId=" + getZoneId()); - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, e.getMessage()); - } - } + @Override + public void execute() throws ResourceUnavailableException, InsufficientCapacityException, ServerApiException, ConcurrentOperationException, + ResourceAllocationException { + try { + List results = _storageNetworkService.listIpRange(this); + ListResponse response = new ListResponse(); + List resList = new ArrayList(results.size()); + for (StorageNetworkIpRange r : results) { + StorageNetworkIpRangeResponse resp = _responseGenerator.createStorageNetworkIpRangeResponse(r); + resList.add(resp); + } + response.setResponses(resList); + response.setResponseName(getCommandName()); + this.setResponseObject(response); + } catch (Exception e) { + s_logger.warn("Failed to list storage network ip range for rangeId=" + getRangeId() + " podId=" + getPodId() + " zoneId=" + getZoneId()); + throw new ServerApiException(BaseCmd.INTERNAL_ERROR, e.getMessage()); + } + } - @Override - public String getCommandName() { - return s_name; - } + @Override + public String getCommandName() { + return s_name; + } - @Override - public long getEntityOwnerId() { - return Account.ACCOUNT_ID_SYSTEM; - } + @Override + public long getEntityOwnerId() { + return Account.ACCOUNT_ID_SYSTEM; + } } diff --git a/api/src/com/cloud/api/response/AccountResponse.java b/api/src/com/cloud/api/response/AccountResponse.java index 5a3a9288ee8..169dba28816 100755 --- a/api/src/com/cloud/api/response/AccountResponse.java +++ b/api/src/com/cloud/api/response/AccountResponse.java @@ -40,7 +40,7 @@ public class AccountResponse extends BaseResponse { @SerializedName(ApiConstants.DOMAIN) @Param(description="name of the Domain the account belongs too") private String domainName; - + @SerializedName(ApiConstants.DEFAULT_ZONE_ID) @Param(description="the default zone of the account") private IdentityProxy defaultZoneId = new IdentityProxy("data_center"); @@ -100,7 +100,7 @@ public class AccountResponse extends BaseResponse { @SerializedName("vmrunning") @Param(description="the total number of virtual machines running for this account") private Integer vmRunning; - + @SerializedName("projectlimit") @Param(description="the total number of projects the account can own", since="3.0.1") private String projectLimit; @@ -109,7 +109,7 @@ public class AccountResponse extends BaseResponse { @SerializedName("projectavailable") @Param(description="the total number of projects available for administration by this account", since="3.0.1") private String projectAvailable; - + @SerializedName("networklimit") @Param(description="the total number of networks the account can own", since="3.0.1") private String networkLimit; @@ -118,7 +118,7 @@ public class AccountResponse extends BaseResponse { @SerializedName("networkavailable") @Param(description="the total number of networks available to be created for this account", since="3.0.1") private String networkAvailable; - + @SerializedName("vpclimit") @Param(description="the total number of vpcs the account can own", since="3.0.5") private String vpcLimit; @@ -127,20 +127,20 @@ public class AccountResponse extends BaseResponse { @SerializedName("vpcavailable") @Param(description="the total number of vpcs available to be created for this account", since="3.0.5") private String vpcAvailable; - + @SerializedName(ApiConstants.STATE) @Param(description="the state of the account") private String state; @SerializedName(ApiConstants.IS_CLEANUP_REQUIRED) @Param(description="true if the account requires cleanup") private Boolean cleanupRequired; - + @SerializedName("user") @Param(description="the list of users associated with account", responseObject = UserResponse.class) private List users; - + @SerializedName(ApiConstants.NETWORK_DOMAIN) @Param(description="the network domain") private String networkDomain; - + @SerializedName(ApiConstants.ACCOUNT_DETAILS) @Param(description="details for the account") private Map details; @@ -247,7 +247,7 @@ public class AccountResponse extends BaseResponse { public void setCleanupRequired(Boolean cleanupRequired) { this.cleanupRequired = cleanupRequired; } - + public void setUsers(List users) { this.users = users; } @@ -255,9 +255,9 @@ public class AccountResponse extends BaseResponse { public void setNetworkDomain(String networkDomain) { this.networkDomain = networkDomain; } - + public void setDetails(Map details) { - this.details = details; + this.details = details; } public void setProjectLimit(String projectLimit) { @@ -283,8 +283,8 @@ public class AccountResponse extends BaseResponse { public void setNetworkAvailable(String networkAvailable) { this.networkAvailable = networkAvailable; } - + public void setDefaultZone(Long defaultZoneId) { - this.defaultZoneId.setValue(defaultZoneId); + this.defaultZoneId.setValue(defaultZoneId); } } diff --git a/api/src/com/cloud/api/response/AsyncJobResponse.java b/api/src/com/cloud/api/response/AsyncJobResponse.java index ba76522ac9f..9dc43130631 100644 --- a/api/src/com/cloud/api/response/AsyncJobResponse.java +++ b/api/src/com/cloud/api/response/AsyncJobResponse.java @@ -5,7 +5,7 @@ // 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, @@ -51,14 +51,14 @@ public class AsyncJobResponse extends BaseResponse { @SerializedName("jobresult") @Param(description="the result reason") private ResponseObject jobResult; - + @SerializedName("jobinstancetype") @Param(description="the instance/entity object related to the job") private String jobInstanceType; @SerializedName("jobinstanceid") @Param(description="the unique ID of the instance/entity object related to the job") private IdentityProxy jobInstanceId = new IdentityProxy(); - @SerializedName(ApiConstants.CREATED) @Param(description=" the created date of the job") + @SerializedName(ApiConstants.CREATED) @Param(description=" the created date of the job") private Date created; public void setAccountId(Long accountId) { @@ -98,33 +98,33 @@ public class AsyncJobResponse extends BaseResponse { this.jobInstanceType = jobInstanceType; if(jobInstanceType != null) { - if(jobInstanceType.equalsIgnoreCase(AsyncJob.Type.Volume.toString())) { - this.jobInstanceId.setTableName("volumes"); - } else if (jobInstanceType.equalsIgnoreCase(AsyncJob.Type.Template.toString())) { - this.jobInstanceId.setTableName("vm_template"); - } else if (jobInstanceType.equalsIgnoreCase(AsyncJob.Type.Iso.toString())) { - this.jobInstanceId.setTableName("vm_template"); - } else if (jobInstanceType.equalsIgnoreCase(AsyncJob.Type.VirtualMachine.toString()) || jobInstanceType.equalsIgnoreCase(AsyncJob.Type.ConsoleProxy.toString()) || jobInstanceType.equalsIgnoreCase(AsyncJob.Type.SystemVm.toString()) || jobInstanceType.equalsIgnoreCase(AsyncJob.Type.DomainRouter.toString()) ) { - this.jobInstanceId.setTableName("vm_instance"); - } else if (jobInstanceType.equalsIgnoreCase(AsyncJob.Type.Snapshot.toString())) { - this.jobInstanceId.setTableName("snapshots"); - } else if (jobInstanceType.equalsIgnoreCase(AsyncJob.Type.Host.toString())) { - this.jobInstanceId.setTableName("host"); - } else if (jobInstanceType.equalsIgnoreCase(AsyncJob.Type.StoragePool.toString())) { - this.jobInstanceId.setTableName("storage_pool"); - } else if (jobInstanceType.equalsIgnoreCase(AsyncJob.Type.IpAddress.toString())) { - this.jobInstanceId.setTableName("user_ip_address"); - } else if (jobInstanceType.equalsIgnoreCase(AsyncJob.Type.SecurityGroup.toString())) { - this.jobInstanceId.setTableName("security_group"); - } else if (jobInstanceType.equalsIgnoreCase(AsyncJob.Type.PhysicalNetwork.toString())) { - this.jobInstanceId.setTableName("physical_network"); - } else if (jobInstanceType.equalsIgnoreCase(AsyncJob.Type.TrafficType.toString())) { + if(jobInstanceType.equalsIgnoreCase(AsyncJob.Type.Volume.toString())) { + this.jobInstanceId.setTableName("volumes"); + } else if (jobInstanceType.equalsIgnoreCase(AsyncJob.Type.Template.toString())) { + this.jobInstanceId.setTableName("vm_template"); + } else if (jobInstanceType.equalsIgnoreCase(AsyncJob.Type.Iso.toString())) { + this.jobInstanceId.setTableName("vm_template"); + } else if (jobInstanceType.equalsIgnoreCase(AsyncJob.Type.VirtualMachine.toString()) || jobInstanceType.equalsIgnoreCase(AsyncJob.Type.ConsoleProxy.toString()) || jobInstanceType.equalsIgnoreCase(AsyncJob.Type.SystemVm.toString()) || jobInstanceType.equalsIgnoreCase(AsyncJob.Type.DomainRouter.toString()) ) { + this.jobInstanceId.setTableName("vm_instance"); + } else if (jobInstanceType.equalsIgnoreCase(AsyncJob.Type.Snapshot.toString())) { + this.jobInstanceId.setTableName("snapshots"); + } else if (jobInstanceType.equalsIgnoreCase(AsyncJob.Type.Host.toString())) { + this.jobInstanceId.setTableName("host"); + } else if (jobInstanceType.equalsIgnoreCase(AsyncJob.Type.StoragePool.toString())) { + this.jobInstanceId.setTableName("storage_pool"); + } else if (jobInstanceType.equalsIgnoreCase(AsyncJob.Type.IpAddress.toString())) { + this.jobInstanceId.setTableName("user_ip_address"); + } else if (jobInstanceType.equalsIgnoreCase(AsyncJob.Type.SecurityGroup.toString())) { + this.jobInstanceId.setTableName("security_group"); + } else if (jobInstanceType.equalsIgnoreCase(AsyncJob.Type.PhysicalNetwork.toString())) { + this.jobInstanceId.setTableName("physical_network"); + } else if (jobInstanceType.equalsIgnoreCase(AsyncJob.Type.TrafficType.toString())) { this.jobInstanceId.setTableName("physical_network_traffic_types"); } else if (jobInstanceType.equalsIgnoreCase(AsyncJob.Type.PhysicalNetworkServiceProvider.toString())) { this.jobInstanceId.setTableName("physical_network_service_providers"); - } else if (jobInstanceType.equalsIgnoreCase(AsyncJob.Type.FirewallRule.toString())) { - this.jobInstanceId.setTableName("firewall_rules"); - } else if (jobInstanceType.equalsIgnoreCase(AsyncJob.Type.Account.toString())) { + } else if (jobInstanceType.equalsIgnoreCase(AsyncJob.Type.FirewallRule.toString())) { + this.jobInstanceId.setTableName("firewall_rules"); + } else if (jobInstanceType.equalsIgnoreCase(AsyncJob.Type.Account.toString())) { this.jobInstanceId.setTableName("account"); } else if (jobInstanceType.equalsIgnoreCase(AsyncJob.Type.User.toString())) { this.jobInstanceId.setTableName("user"); @@ -143,14 +143,14 @@ public class AsyncJobResponse extends BaseResponse { } else if (jobInstanceType.equalsIgnoreCase(AsyncJob.Type.AutoScaleVmGroup.toString())) { this.jobInstanceId.setTableName("autoscale_vmgroups"); } else if (!jobInstanceType.equalsIgnoreCase(AsyncJob.Type.None.toString())){ - // TODO : when we hit here, we need to add instanceType -> UUID entity table mapping - assert(false); - } + // TODO : when we hit here, we need to add instanceType -> UUID entity table mapping + assert(false); + } } } public void setJobInstanceId(Long jobInstanceId) { - this.jobInstanceId.setValue(jobInstanceId); + this.jobInstanceId.setValue(jobInstanceId); } public void setCreated(Date created) { diff --git a/api/src/com/cloud/api/response/BaseResponse.java b/api/src/com/cloud/api/response/BaseResponse.java index e873d4c0ae3..14aa2b920c0 100755 --- a/api/src/com/cloud/api/response/BaseResponse.java +++ b/api/src/com/cloud/api/response/BaseResponse.java @@ -25,7 +25,7 @@ import com.google.gson.annotations.SerializedName; public abstract class BaseResponse implements ResponseObject { private transient String responseName; private transient String objectName; - + @Override public String getResponseName() { return responseName; @@ -35,7 +35,7 @@ public abstract class BaseResponse implements ResponseObject { public void setResponseName(String responseName) { this.responseName = responseName; } - + @Override public String getObjectName() { return objectName; @@ -45,31 +45,31 @@ public abstract class BaseResponse implements ResponseObject { public void setObjectName(String objectName) { this.objectName = objectName; } - + public Long getObjectId() { - return null; + 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") protected IdentityProxy jobId = new IdentityProxy("async_job"); - + @SerializedName(ApiConstants.JOB_STATUS) @Param(description="the current status of the latest async job acting on this object") private Integer jobStatus; - + public Long getJobId() { - return jobId.getValue(); + return jobId.getValue(); } - + public void setJobId(Long jobId) { - this.jobId.setValue(jobId); + this.jobId.setValue(jobId); } - + public Integer getJobStatus() { - return jobStatus; + return jobStatus; } - + public void setJobStatus(Integer jobStatus) { - this.jobStatus = jobStatus; + this.jobStatus = jobStatus; } } diff --git a/api/src/com/cloud/api/response/CapabilitiesResponse.java b/api/src/com/cloud/api/response/CapabilitiesResponse.java index 85c97b22308..fbcb385de01 100644 --- a/api/src/com/cloud/api/response/CapabilitiesResponse.java +++ b/api/src/com/cloud/api/response/CapabilitiesResponse.java @@ -27,21 +27,21 @@ public class CapabilitiesResponse extends BaseResponse { @SerializedName("cloudstackversion") @Param(description="version of the cloud stack") private String cloudStackVersion; - + @SerializedName("userpublictemplateenabled") @Param(description="true if user and domain admins can set templates to be shared, false otherwise") private boolean userPublicTemplateEnabled; - + @SerializedName("supportELB") @Param(description="true if region supports elastic load balancer on basic zones") private String supportELB; - + @SerializedName(ApiConstants.PROJECT_INVITE_REQUIRED) @Param(description="If invitation confirmation is required when add account to project") private Boolean projectInviteRequired; - + @SerializedName(ApiConstants.ALLOW_USER_CREATE_PROJECTS) @Param(description="true if regular user is allowed to create projects") private Boolean allowUsersCreateProjects; - + @SerializedName(ApiConstants.CUSTOM_DISK_OFF_MAX_SIZE) @Param(description="maximum size that can be specified when " + - "create disk from disk offering with custom size") + "create disk from disk offering with custom size") private Long diskOffMaxSize; @@ -61,13 +61,13 @@ public class CapabilitiesResponse extends BaseResponse { this.supportELB = supportELB; } - public void setProjectInviteRequired(Boolean projectInviteRequired) { - this.projectInviteRequired = projectInviteRequired; - } + public void setProjectInviteRequired(Boolean projectInviteRequired) { + this.projectInviteRequired = projectInviteRequired; + } - public void setAllowUsersCreateProjects(Boolean allowUsersCreateProjects) { - this.allowUsersCreateProjects = allowUsersCreateProjects; - } + public void setAllowUsersCreateProjects(Boolean allowUsersCreateProjects) { + this.allowUsersCreateProjects = allowUsersCreateProjects; + } public void setDiskOffMaxSize(Long diskOffMaxSize) { this.diskOffMaxSize = diskOffMaxSize; diff --git a/api/src/com/cloud/api/response/CapabilityResponse.java b/api/src/com/cloud/api/response/CapabilityResponse.java index 9875fe0f60b..adb3b26895e 100644 --- a/api/src/com/cloud/api/response/CapabilityResponse.java +++ b/api/src/com/cloud/api/response/CapabilityResponse.java @@ -24,7 +24,7 @@ public class CapabilityResponse extends BaseResponse { @SerializedName(ApiConstants.NAME) @Param(description="the capability name") private String name; - + @SerializedName(ApiConstants.VALUE) @Param(description="the capability value") private String value; diff --git a/api/src/com/cloud/api/response/CapacityResponse.java b/api/src/com/cloud/api/response/CapacityResponse.java index d5ff3ebd3f3..a631bf0d274 100755 --- a/api/src/com/cloud/api/response/CapacityResponse.java +++ b/api/src/com/cloud/api/response/CapacityResponse.java @@ -36,7 +36,7 @@ public class CapacityResponse extends BaseResponse { @SerializedName("podname") @Param(description="the Pod name") private String podName; - + @SerializedName(ApiConstants.CLUSTER_ID) @Param(description="the Cluster ID") private IdentityProxy clusterId = new IdentityProxy("cluster"); @@ -93,22 +93,22 @@ public class CapacityResponse extends BaseResponse { } public Long getClusterId() { - return clusterId.getValue(); - } + return clusterId.getValue(); + } - public void setClusterId(Long clusterId) { - this.clusterId.setValue(clusterId); - } + public void setClusterId(Long clusterId) { + this.clusterId.setValue(clusterId); + } - public String getClusterName() { - return clusterName; - } + public String getClusterName() { + return clusterName; + } - public void setClusterName(String clusterName) { - this.clusterName = clusterName; - } + public void setClusterName(String clusterName) { + this.clusterName = clusterName; + } - public Long getCapacityUsed() { + public Long getCapacityUsed() { return capacityUsed; } diff --git a/api/src/com/cloud/api/response/CloudIdentifierResponse.java b/api/src/com/cloud/api/response/CloudIdentifierResponse.java index 91f4d59ab05..a6e6b375ebf 100644 --- a/api/src/com/cloud/api/response/CloudIdentifierResponse.java +++ b/api/src/com/cloud/api/response/CloudIdentifierResponse.java @@ -22,16 +22,16 @@ import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; public class CloudIdentifierResponse extends BaseResponse { - + @SerializedName(ApiConstants.USER_ID) @Param(description="the user ID for the cloud identifier") private IdentityProxy userId = new IdentityProxy("user"); - + @SerializedName("cloudidentifier") @Param(description="the cloud identifier") private String cloudIdentifier; - + @SerializedName("signature") @Param(description="the signed response for the cloud identifier") private String signature; - + public Long getUserId() { return userId.getValue(); } @@ -39,7 +39,7 @@ public class CloudIdentifierResponse extends BaseResponse { public void setUserId(Long userId) { this.userId.setValue(userId); } - + public String getCloudIdentifier() { return cloudIdentifier; } @@ -47,7 +47,7 @@ public class CloudIdentifierResponse extends BaseResponse { public void setCloudIdentifier(String cloudIdentifier) { this.cloudIdentifier = cloudIdentifier; } - + public String getSignature() { return signature; } diff --git a/api/src/com/cloud/api/response/ClusterResponse.java b/api/src/com/cloud/api/response/ClusterResponse.java index 3c0049696bc..811731cbe10 100755 --- a/api/src/com/cloud/api/response/ClusterResponse.java +++ b/api/src/com/cloud/api/response/ClusterResponse.java @@ -45,19 +45,19 @@ public class ClusterResponse extends BaseResponse { @SerializedName("hypervisortype") @Param(description="the hypervisor type of the cluster") private String hypervisorType; - + @SerializedName("clustertype") @Param(description="the type of the cluster") private String clusterType; - + @SerializedName("allocationstate") @Param(description="the allocation state of the cluster") private String allocationState; - + @SerializedName("managedstate") @Param(description="whether this cluster is managed by cloudstack") private String managedState; - + @SerializedName("capacity") @Param(description="the capacity of the Cluster", responseObject = CapacityResponse.class) private List capacitites; - + public Long getId() { return id.getValue(); } @@ -105,29 +105,29 @@ public class ClusterResponse extends BaseResponse { public void setZoneName(String zoneName) { this.zoneName = zoneName; } - + public String getClusterType() { - return clusterType; + return clusterType; } - + public void setClusterType(String clusterType) { - this.clusterType = clusterType; + this.clusterType = clusterType; } - + public String getHypervisorType() { - return this.hypervisorType; + return this.hypervisorType; } - + public void setHypervisorType(String hypervisorType) { - this.hypervisorType = hypervisorType; + this.hypervisorType = hypervisorType; } - + public String getAllocationState() { - return allocationState; + return allocationState; } - + public void setAllocationState(String allocationState) { - this.allocationState = allocationState; + this.allocationState = allocationState; } public String getManagedState() { @@ -138,11 +138,11 @@ public class ClusterResponse extends BaseResponse { this.managedState = managedState; } - public List getCapacitites() { - return capacitites; - } + public List getCapacitites() { + return capacitites; + } - public void setCapacitites(ArrayList arrayList) { - this.capacitites = arrayList; - } + public void setCapacitites(ArrayList arrayList) { + this.capacitites = arrayList; + } } diff --git a/api/src/com/cloud/api/response/ControlledEntityResponse.java b/api/src/com/cloud/api/response/ControlledEntityResponse.java index ab4a367a21d..f44efa48159 100644 --- a/api/src/com/cloud/api/response/ControlledEntityResponse.java +++ b/api/src/com/cloud/api/response/ControlledEntityResponse.java @@ -19,12 +19,12 @@ package com.cloud.api.response; public interface ControlledEntityResponse { public void setAccountName(String accountName); - + public void setProjectId(Long projectId); - + public void setProjectName(String projectName); public void setDomainId(Long domainId); - + public void setDomainName(String domainName); } diff --git a/api/src/com/cloud/api/response/CreateCmdResponse.java b/api/src/com/cloud/api/response/CreateCmdResponse.java index 66f4923900d..7dd922b7efa 100644 --- a/api/src/com/cloud/api/response/CreateCmdResponse.java +++ b/api/src/com/cloud/api/response/CreateCmdResponse.java @@ -31,8 +31,8 @@ public class CreateCmdResponse extends BaseResponse { public void setId(Long id) { this.id.setValue(id); } - + public void setIdEntityTable(String entityTable) { - this.id.setTableName(entityTable); + this.id.setTableName(entityTable); } } diff --git a/api/src/com/cloud/api/response/DiskOfferingResponse.java b/api/src/com/cloud/api/response/DiskOfferingResponse.java index c267f6ccb91..be86ee7394e 100644 --- a/api/src/com/cloud/api/response/DiskOfferingResponse.java +++ b/api/src/com/cloud/api/response/DiskOfferingResponse.java @@ -47,7 +47,7 @@ public class DiskOfferingResponse extends BaseResponse { @SerializedName("iscustomized") @Param(description="true if disk offering uses custom size, false otherwise") private Boolean customized; - + @SerializedName(ApiConstants.TAGS) @Param(description="the tags for the disk offering") private String tags; diff --git a/api/src/com/cloud/api/response/DomainResponse.java b/api/src/com/cloud/api/response/DomainResponse.java index 90997be5f0e..03738a28527 100644 --- a/api/src/com/cloud/api/response/DomainResponse.java +++ b/api/src/com/cloud/api/response/DomainResponse.java @@ -39,13 +39,13 @@ public class DomainResponse extends BaseResponse { @SerializedName("haschild") @Param(description="whether the domain has one or more sub-domains") private boolean hasChild; - + @SerializedName(ApiConstants.NETWORK_DOMAIN) @Param(description="the network domain") private String networkDomain; @SerializedName(ApiConstants.PATH) @Param(description="the path of the domain") private String path; - + public Long getId() { return id.getValue(); } @@ -98,12 +98,12 @@ public class DomainResponse extends BaseResponse { this.networkDomain = networkDomain; } - public String getPath() { - return path; - } + public String getPath() { + return path; + } + + public void setPath(String path) { + this.path = path; + } - public void setPath(String path) { - this.path = path; - } - } diff --git a/api/src/com/cloud/api/response/DomainRouterResponse.java b/api/src/com/cloud/api/response/DomainRouterResponse.java index c284982e90b..8170b2efa41 100644 --- a/api/src/com/cloud/api/response/DomainRouterResponse.java +++ b/api/src/com/cloud/api/response/DomainRouterResponse.java @@ -29,12 +29,12 @@ import com.google.gson.annotations.SerializedName; public class DomainRouterResponse extends BaseResponse implements ControlledEntityResponse{ @SerializedName(ApiConstants.ID) @Param(description="the id of the router") private IdentityProxy id = new IdentityProxy("vm_instance"); - + @SerializedName(ApiConstants.ZONE_ID) @Param(description="the Zone ID for the router") private IdentityProxy zoneId = new IdentityProxy("data_center"); @SerializedName(ApiConstants.ZONE_NAME) @Param(description="the Zone name for the router") - private String zoneName; + private String zoneName; @SerializedName(ApiConstants.DNS1) @Param(description="the first DNS for the router") private String dns1; @@ -68,7 +68,7 @@ public class DomainRouterResponse extends BaseResponse implements ControlledEnti @SerializedName(ApiConstants.LINK_LOCAL_MAC_NETMASK) @Param(description="the link local netmask for the router") 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"); @@ -80,7 +80,7 @@ public class DomainRouterResponse extends BaseResponse implements ControlledEnti @SerializedName("publicnetmask") @Param(description="the public netmask for the router") private String publicNetmask; - + @SerializedName("publicnetworkid") @Param(description="the ID of the corresponding public network") private IdentityProxy publicNetworkId = new IdentityProxy("networks"); @@ -92,7 +92,7 @@ public class DomainRouterResponse extends BaseResponse implements ControlledEnti @SerializedName("guestnetmask") @Param(description="the guest netmask for the router") private String guestNetmask; - + @SerializedName("guestnetworkid") @Param(description="the ID of the corresponding guest network") private IdentityProxy guestNetworkId = new IdentityProxy("networks"); @@ -107,10 +107,10 @@ public class DomainRouterResponse extends BaseResponse implements ControlledEnti @SerializedName(ApiConstants.ACCOUNT) @Param(description="the account associated with the router") private String accountName; - + @SerializedName(ApiConstants.PROJECT_ID) @Param(description="the project id of the ipaddress") private IdentityProxy projectId = new IdentityProxy("projects"); - + @SerializedName(ApiConstants.PROJECT) @Param(description="the project name of the address") private String projectName; @@ -119,35 +119,35 @@ public class DomainRouterResponse extends BaseResponse implements ControlledEnti @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"); @SerializedName("serviceofferingname") @Param(description="the name of the service offering of the virtual machine") private String serviceOfferingName; - + @SerializedName("isredundantrouter") @Param(description="if this router is an redundant virtual router") private boolean isRedundantRouter; - + @SerializedName("redundantstate") @Param(description="the state of redundant virtual router") private String redundantState; - + @SerializedName("templateversion") @Param(description="the version of template") private String templateVersion; - + @SerializedName("scriptsversion") @Param(description="the version of scripts") private String scriptsVersion; - + @SerializedName(ApiConstants.VPC_ID) @Param(description="VPC the network belongs to") private IdentityProxy vpcId = new IdentityProxy("vpc"); - - @SerializedName("nic") @Param(description="the list of nics associated with the router", + + @SerializedName("nic") @Param(description="the list of nics associated with the router", responseObject = NicResponse.class, since="4.0") private List nics; - + @Override public Long getObjectId() { - return getId(); + return getId(); } public Long getId() { @@ -260,7 +260,7 @@ public class DomainRouterResponse extends BaseResponse implements ControlledEnti public void setLinkLocalIp(String linkLocalIp) { this.linkLocalIp = linkLocalIp; } - + public void setLinkLocalMacAddress(String linkLocalMacAddress) { this.linkLocalMacAddress = linkLocalMacAddress; } @@ -292,15 +292,15 @@ public class DomainRouterResponse extends BaseResponse implements ControlledEnti public String getTemplateVersion() { return this.templateVersion; } - + public void setTemplateVersion(String templateVersion) { this.templateVersion = templateVersion; } - + public String getScriptsVersion() { return this.scriptsVersion; } - + public void setScriptsVersion(String scriptsVersion) { this.scriptsVersion = scriptsVersion; } @@ -313,11 +313,11 @@ public class DomainRouterResponse extends BaseResponse implements ControlledEnti public void setProjectName(String projectName) { this.projectName = projectName; } - + public void setVpcId(Long vpcId) { this.vpcId.setValue(vpcId); } - + public void setNics(List nics) { this.nics = nics; } diff --git a/api/src/com/cloud/api/response/EventResponse.java b/api/src/com/cloud/api/response/EventResponse.java index dd1dc0414cd..b8b5dfd8463 100644 --- a/api/src/com/cloud/api/response/EventResponse.java +++ b/api/src/com/cloud/api/response/EventResponse.java @@ -43,10 +43,10 @@ public class EventResponse extends BaseResponse implements ControlledEntityRespo @SerializedName(ApiConstants.ACCOUNT) @Param(description="the account name for the account that owns the object being acted on in the event (e.g. the owner of the virtual machine, ip address, or security group)") private String accountName; - + @SerializedName(ApiConstants.PROJECT_ID) @Param(description="the project id of the ipaddress") private IdentityProxy projectId = new IdentityProxy("projects"); - + @SerializedName(ApiConstants.PROJECT) @Param(description="the project name of the address") private String projectName; diff --git a/api/src/com/cloud/api/response/ExceptionResponse.java b/api/src/com/cloud/api/response/ExceptionResponse.java index 9ff2cf12437..995f5c448ed 100644 --- a/api/src/com/cloud/api/response/ExceptionResponse.java +++ b/api/src/com/cloud/api/response/ExceptionResponse.java @@ -31,8 +31,8 @@ public class ExceptionResponse extends BaseResponse { private Integer errorCode; @SerializedName("cserrorcode") @Param(description="cloudstack exception error code associated with this error") - private Integer csErrorCode; - + private Integer csErrorCode; + @SerializedName("errortext") @Param(description="the text associated with this error") private String errorText = "Command failed due to Internal Server Error"; diff --git a/api/src/com/cloud/api/response/ExtractResponse.java b/api/src/com/cloud/api/response/ExtractResponse.java index 9f4cf6a3c09..5d9fde9514f 100755 --- a/api/src/com/cloud/api/response/ExtractResponse.java +++ b/api/src/com/cloud/api/response/ExtractResponse.java @@ -26,37 +26,37 @@ import com.google.gson.annotations.SerializedName; public class ExtractResponse extends BaseResponse { @SerializedName(ApiConstants.ID) @Param(description="the id of extracted object") private IdentityProxy id = new IdentityProxy("vm_template"); - + @SerializedName(ApiConstants.NAME) @Param(description="the name of the extracted object") private String name; - + @SerializedName("extractId") @Param(description="the upload id of extracted object") private IdentityProxy uploadId = new IdentityProxy("async_job"); - + @SerializedName("uploadpercentage") @Param(description="the percentage of the entity uploaded to the specified location") private Integer uploadPercent; - + @SerializedName("status") @Param(description="the status of the extraction") private String status; - + @SerializedName("accountid") @Param(description="the account id to which the extracted object belongs") - private IdentityProxy accountId = new IdentityProxy("account"); - + private IdentityProxy accountId = new IdentityProxy("account"); + @SerializedName("resultstring") @Param(includeInApiDoc=false) - private String resultString; + private String resultString; @SerializedName(ApiConstants.CREATED) @Param(description="the time and date the object was created") private Date createdDate; @SerializedName(ApiConstants.STATE) @Param(description="the state of the extracted object") private String state; - + @SerializedName("storagetype") @Param(description="type of the storage") private String storageType; @SerializedName("storage") private String storage; - + @SerializedName(ApiConstants.ZONE_ID) @Param(description="zone ID the object was extracted from") private IdentityProxy zoneId = new IdentityProxy("data_center"); @@ -65,20 +65,20 @@ public class ExtractResponse extends BaseResponse { @SerializedName("extractMode") @Param(description="the mode of extraction - upload or download") private String mode; - + @SerializedName(ApiConstants.URL) @Param(description="if mode = upload then url of the uploaded entity. if mode = download the url from which the entity can be downloaded") - private String url; - - public ExtractResponse(){ + private String url; + + public ExtractResponse(){ } - + public ExtractResponse(Long typeId, String typeName, long accountId, String state, Long uploadId) { this.id.setValue(typeId); this.name = typeName; this.accountId.setValue(accountId); this.state = state; - this.uploadId.setValue(uploadId); + this.uploadId.setValue(uploadId); } public Long getId() { @@ -88,9 +88,9 @@ public class ExtractResponse extends BaseResponse { public void setId(long id) { this.id.setValue(id); } - + public void setIdentityTableName(String tableName) { - this.id.setTableName(tableName); + this.id.setTableName(tableName); } public String getName() { diff --git a/api/src/com/cloud/api/response/FirewallResponse.java b/api/src/com/cloud/api/response/FirewallResponse.java index c3d2f755412..fa9ebdf6090 100644 --- a/api/src/com/cloud/api/response/FirewallResponse.java +++ b/api/src/com/cloud/api/response/FirewallResponse.java @@ -36,19 +36,19 @@ public class FirewallResponse extends BaseResponse { @SerializedName(ApiConstants.END_PORT) @Param(description = "the ending port of firewall rule's port range") private String endPort; - + @SerializedName(ApiConstants.IP_ADDRESS_ID) @Param(description="the public ip address id for the firewall rule") private Long publicIpAddressId; @SerializedName(ApiConstants.IP_ADDRESS) @Param(description="the public ip address for the firewall rule") private String publicIpAddress; - + @SerializedName(ApiConstants.STATE) @Param(description="the state of the rule") private String state; @SerializedName(ApiConstants.CIDR_LIST) @Param(description="the cidr list to forward traffic from") private String cidrList; - + @SerializedName(ApiConstants.ICMP_TYPE) @Param(description= "type of the icmp message being sent") private Integer icmpType; diff --git a/api/src/com/cloud/api/response/FirewallRuleResponse.java b/api/src/com/cloud/api/response/FirewallRuleResponse.java index 4c1ffb5a7f4..adf735316d3 100644 --- a/api/src/com/cloud/api/response/FirewallRuleResponse.java +++ b/api/src/com/cloud/api/response/FirewallRuleResponse.java @@ -51,22 +51,22 @@ public class FirewallRuleResponse extends BaseResponse{ @SerializedName("virtualmachinedisplayname") @Param(description="the VM display name for the port forwarding rule") private String virtualMachineDisplayName; - + @SerializedName(ApiConstants.IP_ADDRESS_ID) @Param(description="the public ip address id for the port forwarding rule") private IdentityProxy publicIpAddressId = new IdentityProxy("user_ip_address"); @SerializedName(ApiConstants.IP_ADDRESS) @Param(description="the public ip address for the port forwarding rule") private String publicIpAddress; - + @SerializedName(ApiConstants.STATE) @Param(description="the state of the rule") private String state; @SerializedName(ApiConstants.CIDR_LIST) @Param(description="the cidr list to forward traffic from") private String cidrList; - + @SerializedName(ApiConstants.TAGS) @Param(description="the list of resource tags associated with the rule", responseObject = ResourceTagResponse.class) private List tags; - + public Long getId() { return id.getValue(); } @@ -89,8 +89,8 @@ public class FirewallRuleResponse extends BaseResponse{ public void setPrivateEndPort(String privatePort) { this.privateEndPort = privatePort; - } - + } + public String getProtocol() { return protocol; } @@ -106,7 +106,7 @@ public class FirewallRuleResponse extends BaseResponse{ public String getPublicEndPort() { return publicEndPort; } - + public void setPublicStartPort(String publicPort) { this.publicStartPort = publicPort; } @@ -131,21 +131,21 @@ public class FirewallRuleResponse extends BaseResponse{ this.virtualMachineName = virtualMachineName; } - public String getVirtualMachineDisplayName() { - return virtualMachineDisplayName; - } + public String getVirtualMachineDisplayName() { + return virtualMachineDisplayName; + } - public void setVirtualMachineDisplayName(String virtualMachineDisplayName) { - this.virtualMachineDisplayName = virtualMachineDisplayName; - } + public void setVirtualMachineDisplayName(String virtualMachineDisplayName) { + this.virtualMachineDisplayName = virtualMachineDisplayName; + } - public String getPublicIpAddress() { - return publicIpAddress; - } + public String getPublicIpAddress() { + return publicIpAddress; + } - public void setPublicIpAddress(String publicIpAddress) { - this.publicIpAddress = publicIpAddress; - } + public void setPublicIpAddress(String publicIpAddress) { + this.publicIpAddress = publicIpAddress; + } public String getState() { return state; @@ -162,7 +162,7 @@ public class FirewallRuleResponse extends BaseResponse{ public void setPublicIpAddressId(Long publicIpAddressId) { this.publicIpAddressId.setValue(publicIpAddressId); } - + public String getCidrList() { return cidrList; } @@ -170,7 +170,7 @@ public class FirewallRuleResponse extends BaseResponse{ public void setCidrList(String cidrs) { this.cidrList = cidrs; } - + public void setTags(List tags) { this.tags = tags; } diff --git a/api/src/com/cloud/api/response/GetVMPasswordResponse.java b/api/src/com/cloud/api/response/GetVMPasswordResponse.java index 41f1b6d3d53..c9638fff3f6 100644 --- a/api/src/com/cloud/api/response/GetVMPasswordResponse.java +++ b/api/src/com/cloud/api/response/GetVMPasswordResponse.java @@ -20,12 +20,12 @@ import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; public class GetVMPasswordResponse extends BaseResponse { - + @SerializedName("encryptedpassword") @Param(description="The encrypted password of the VM") private String encryptedPassword; - + public GetVMPasswordResponse() {} - + public GetVMPasswordResponse(String responseName, String encryptedPassword) { setResponseName(responseName); setObjectName("password"); @@ -39,5 +39,5 @@ public class GetVMPasswordResponse extends BaseResponse { public void setEncryptedPassword(String encryptedPassword) { this.encryptedPassword = encryptedPassword; } - + } diff --git a/api/src/com/cloud/api/response/GuestOSCategoryResponse.java b/api/src/com/cloud/api/response/GuestOSCategoryResponse.java index f458abaa450..1f7e7ad0e0e 100644 --- a/api/src/com/cloud/api/response/GuestOSCategoryResponse.java +++ b/api/src/com/cloud/api/response/GuestOSCategoryResponse.java @@ -26,7 +26,7 @@ public class GuestOSCategoryResponse extends BaseResponse { private IdentityProxy id = new IdentityProxy("guest_os_category"); @SerializedName(ApiConstants.NAME) @Param(description="the name of the OS category") - private String name; + private String name; public Long getId() { return id.getValue(); diff --git a/api/src/com/cloud/api/response/HostResponse.java b/api/src/com/cloud/api/response/HostResponse.java index a593cdf80c2..db0b26a00e6 100755 --- a/api/src/com/cloud/api/response/HostResponse.java +++ b/api/src/com/cloud/api/response/HostResponse.java @@ -161,7 +161,7 @@ public class HostResponse extends BaseResponse { public Long getObjectId() { return getId(); } - + public Long getId() { return id.getValue(); } @@ -217,7 +217,7 @@ public class HostResponse extends BaseResponse { public void setVersion(String version) { this.version = version; } - + public void setHypervisor(HypervisorType hypervisor) { this.hypervisor = hypervisor; } @@ -225,7 +225,7 @@ public class HostResponse extends BaseResponse { public void setCpuNumber(Integer cpuNumber) { this.cpuNumber = cpuNumber; } - + public void setCpuSpeed(Long cpuSpeed) { this.cpuSpeed = cpuSpeed; } @@ -321,11 +321,11 @@ public class HostResponse extends BaseResponse { public void setHasEnoughCapacity(Boolean hasEnoughCapacity) { this.hasEnoughCapacity = hasEnoughCapacity; } - + public void setSuitableForMigration(Boolean suitableForMigration) { this.suitableForMigration = suitableForMigration; - } + } public String getResourceState() { return resourceState; diff --git a/api/src/com/cloud/api/response/IPAddressResponse.java b/api/src/com/cloud/api/response/IPAddressResponse.java index fb89bec8f21..a8294dfeb56 100644 --- a/api/src/com/cloud/api/response/IPAddressResponse.java +++ b/api/src/com/cloud/api/response/IPAddressResponse.java @@ -28,7 +28,7 @@ import com.google.gson.annotations.SerializedName; public class IPAddressResponse extends BaseResponse implements ControlledEntityResponse { @SerializedName(ApiConstants.ID) @Param(description="public IP address id") private IdentityProxy id = new IdentityProxy("user_ip_address"); - + @SerializedName(ApiConstants.IP_ADDRESS) @Param(description="public IP address") private String ipAddress; @@ -46,10 +46,10 @@ public class IPAddressResponse extends BaseResponse implements ControlledEntityR @SerializedName(ApiConstants.ACCOUNT) @Param(description="the account the public IP address is associated with") private String accountName; - + @SerializedName(ApiConstants.PROJECT_ID) @Param(description="the project id of the ipaddress") private IdentityProxy projectId = new IdentityProxy("projects"); - + @SerializedName(ApiConstants.PROJECT) @Param(description="the project name of the address") private String projectName; @@ -63,7 +63,7 @@ public class IPAddressResponse extends BaseResponse implements ControlledEntityR private Boolean forVirtualNetwork; @SerializedName(ApiConstants.VLAN_ID) @Param(description="the ID of the VLAN associated with the IP address." + - " This parameter is visible to ROOT admins only") + " This parameter is visible to ROOT admins only") private IdentityProxy vlanId = new IdentityProxy("vlan"); @SerializedName("vlanname") @Param(description="the VLAN associated with the IP address") @@ -71,46 +71,46 @@ public class IPAddressResponse extends BaseResponse implements ControlledEntityR @SerializedName("isstaticnat") @Param(description="true if this ip is for static nat, false otherwise") private Boolean staticNat; - + @SerializedName(ApiConstants.IS_SYSTEM) @Param(description="true if this ip is system ip (was allocated as a part of deployVm or createLbRule)") private Boolean isSystem; - + @SerializedName(ApiConstants.VIRTUAL_MACHINE_ID) @Param(description="virutal machine id the ip address is assigned to (not null only for static nat Ip)") private IdentityProxy virtualMachineId = new IdentityProxy("vm_instance"); - + @SerializedName("virtualmachinename") @Param(description="virutal machine name the ip address is assigned to (not null only for static nat Ip)") private String virtualMachineName; - + @SerializedName("virtualmachinedisplayname") @Param(description="virutal machine display name the ip address is assigned to (not null only for static nat Ip)") private String virtualMachineDisplayName; - + @SerializedName(ApiConstants.ASSOCIATED_NETWORK_ID) @Param(description="the ID of the Network associated with the IP address") private IdentityProxy associatedNetworkId = new IdentityProxy("networks"); - + @SerializedName(ApiConstants.ASSOCIATED_NETWORK_NAME) @Param(description="the name of the Network associated with the IP address") private String associatedNetworkName; - + @SerializedName(ApiConstants.NETWORK_ID) @Param(description="the ID of the Network where ip belongs to") private IdentityProxy networkId = new IdentityProxy("networks"); - + @SerializedName(ApiConstants.STATE) @Param(description="State of the ip address. Can be: Allocatin, Allocated and Releasing") private String state; - + @SerializedName(ApiConstants.PHYSICAL_NETWORK_ID) @Param(description="the physical network this belongs to") private IdentityProxy physicalNetworkId = new IdentityProxy("physical_network"); - + @SerializedName(ApiConstants.PURPOSE) @Param(description="purpose of the IP address. In Acton this value is not null for Ips with isSystem=true, and can have either StaticNat or LB value") private String purpose; - + @SerializedName(ApiConstants.VPC_ID) @Param(description="VPC the ip belongs to") private IdentityProxy vpcId = new IdentityProxy("vpc"); @SerializedName(ApiConstants.TAGS) @Param(description="the list of resource tags associated with ip address", responseObject = ResourceTagResponse.class) private List tags; -/* +/* @SerializedName(ApiConstants.JOB_ID) @Param(description="shows the current pending asynchronous job ID. This tag is not returned if no current pending jobs are acting on the volume") private IdentityProxy jobId = new IdentityProxy("async_job"); -*/ +*/ public void setIpAddress(String ipAddress) { @@ -120,7 +120,7 @@ public class IPAddressResponse extends BaseResponse implements ControlledEntityR public void setAllocated(Date allocated) { this.allocated = allocated; } - + public void setZoneId(Long zoneId) { this.zoneId.setValue(zoneId); } @@ -142,7 +142,7 @@ public class IPAddressResponse extends BaseResponse implements ControlledEntityR public void setDomainId(Long domainId) { this.domainId.setValue(domainId); } - + @Override public void setDomainName(String domainName) { this.domainName = domainName; @@ -160,9 +160,9 @@ public class IPAddressResponse extends BaseResponse implements ControlledEntityR this.vlanName = vlanName; } - public void setStaticNat(Boolean staticNat) { - this.staticNat = staticNat; - } + public void setStaticNat(Boolean staticNat) { + this.staticNat = staticNat; + } public void setAssociatedNetworkId(Long networkId) { this.associatedNetworkId.setValue(networkId); @@ -210,23 +210,23 @@ public class IPAddressResponse extends BaseResponse implements ControlledEntityR public void setProjectName(String projectName) { this.projectName = projectName; } - + public void setPhysicalNetworkId(long physicalNetworkId) { this.physicalNetworkId.setValue(physicalNetworkId); } - public void setIsSystem(Boolean isSystem) { - this.isSystem = isSystem; - } + public void setIsSystem(Boolean isSystem) { + this.isSystem = isSystem; + } public void setPurpose(String purpose) { this.purpose = purpose; } - + public void setVpcId(Long vpcId) { this.vpcId.setValue(vpcId); } - + public void setTags(List tags) { this.tags = tags; } diff --git a/api/src/com/cloud/api/response/InstanceGroupResponse.java b/api/src/com/cloud/api/response/InstanceGroupResponse.java index 18607c7cf1c..ba9963af10c 100644 --- a/api/src/com/cloud/api/response/InstanceGroupResponse.java +++ b/api/src/com/cloud/api/response/InstanceGroupResponse.java @@ -36,10 +36,10 @@ public class InstanceGroupResponse extends BaseResponse implements ControlledEnt @SerializedName(ApiConstants.ACCOUNT) @Param(description="the account owning the instance group") private String accountName; - + @SerializedName(ApiConstants.PROJECT_ID) @Param(description="the project id of the group") private IdentityProxy projectId = new IdentityProxy("projects"); - + @SerializedName(ApiConstants.PROJECT) @Param(description="the project name of the group") private String projectName; @@ -75,7 +75,7 @@ public class InstanceGroupResponse extends BaseResponse implements ControlledEnt public void setDomainName(String domainName) { this.domainName = domainName; } - + @Override public void setProjectId(Long projectId) { this.projectId.setValue(projectId); diff --git a/api/src/com/cloud/api/response/IpForwardingRuleResponse.java b/api/src/com/cloud/api/response/IpForwardingRuleResponse.java index 87e95900263..65a349ab9ee 100644 --- a/api/src/com/cloud/api/response/IpForwardingRuleResponse.java +++ b/api/src/com/cloud/api/response/IpForwardingRuleResponse.java @@ -36,22 +36,22 @@ public class IpForwardingRuleResponse extends BaseResponse { @SerializedName("virtualmachinedisplayname") @Param(description="the VM display name for the port forwarding rule") private String virtualMachineDisplayName; - + @SerializedName(ApiConstants.IP_ADDRESS_ID) @Param(description="the public ip address id for the port forwarding rule") private Long publicIpAddressId; @SerializedName(ApiConstants.IP_ADDRESS) @Param(description="the public ip address for the port forwarding rule") private String publicIpAddress; - + @SerializedName(ApiConstants.START_PORT) @Param(description="the start port of the rule") private Integer startPort; - + @SerializedName(ApiConstants.END_PORT) @Param(description="the end port of the rule") private Integer endPort; - + @SerializedName(ApiConstants.STATE) @Param(description="state of the ip forwarding rule") private String state; - + public Long getId() { return id.getValue(); } @@ -84,21 +84,21 @@ public class IpForwardingRuleResponse extends BaseResponse { this.virtualMachineName = virtualMachineName; } - public String getVirtualMachineDisplayName() { - return virtualMachineDisplayName; - } + public String getVirtualMachineDisplayName() { + return virtualMachineDisplayName; + } - public void setVirtualMachineDisplayName(String virtualMachineDisplayName) { - this.virtualMachineDisplayName = virtualMachineDisplayName; - } + public void setVirtualMachineDisplayName(String virtualMachineDisplayName) { + this.virtualMachineDisplayName = virtualMachineDisplayName; + } - public String getPublicIpAddress() { - return publicIpAddress; - } + public String getPublicIpAddress() { + return publicIpAddress; + } - public void setPublicIpAddress(String publicIpAddress) { - this.publicIpAddress = publicIpAddress; - } + public void setPublicIpAddress(String publicIpAddress) { + this.publicIpAddress = publicIpAddress; + } public String getState() { return state; diff --git a/api/src/com/cloud/api/response/IsoVmResponse.java b/api/src/com/cloud/api/response/IsoVmResponse.java index 29a898a2789..fb5fa86b42f 100755 --- a/api/src/com/cloud/api/response/IsoVmResponse.java +++ b/api/src/com/cloud/api/response/IsoVmResponse.java @@ -54,7 +54,7 @@ public class IsoVmResponse extends BaseResponse { @SerializedName("vmstate") @Param(description="state of the virtual machine") private String virtualMachineState; - + public Long getOsTypeId() { return osTypeId.getValue(); } diff --git a/api/src/com/cloud/api/response/LBStickinessPolicyResponse.java b/api/src/com/cloud/api/response/LBStickinessPolicyResponse.java index 0d1212d705f..a6743a78ceb 100644 --- a/api/src/com/cloud/api/response/LBStickinessPolicyResponse.java +++ b/api/src/com/cloud/api/response/LBStickinessPolicyResponse.java @@ -30,7 +30,7 @@ public class LBStickinessPolicyResponse extends BaseResponse { @SerializedName("id") @Param(description = "the LB Stickiness policy ID") private IdentityProxy id = new IdentityProxy("load_balancer_stickiness_policies"); - + @SerializedName("name") @Param(description = "the name of the Stickiness policy") private String name; @@ -54,7 +54,7 @@ public class LBStickinessPolicyResponse extends BaseResponse { @SerializedName("params") @Param(description = "the params of the policy") private Map params; - + public Map getParams() { return params; } @@ -82,7 +82,7 @@ public class LBStickinessPolicyResponse extends BaseResponse { public String getMethodName() { return methodName; } - + public String getState() { return state; } @@ -102,9 +102,9 @@ public class LBStickinessPolicyResponse extends BaseResponse { if (stickinesspolicy.getId() != 0) setId(stickinesspolicy.getId()); - /* Get the param and values from the database and fill the response object - * The following loop is to - * 1) convert from List of Pair to Map + /* Get the param and values from the database and fill the response object + * The following loop is to + * 1) convert from List of Pair to Map * 2) combine all params with name with ":" , currently we have one param called "domain" that can appear multiple times. * */ @@ -118,7 +118,7 @@ public class LBStickinessPolicyResponse extends BaseResponse { { sb.append(":").append(tempParamList.get(key)); } - + tempParamList.put(key,sb.toString()); } diff --git a/api/src/com/cloud/api/response/LBStickinessResponse.java b/api/src/com/cloud/api/response/LBStickinessResponse.java index 8a66c8979d7..ea3be69cb36 100644 --- a/api/src/com/cloud/api/response/LBStickinessResponse.java +++ b/api/src/com/cloud/api/response/LBStickinessResponse.java @@ -39,7 +39,7 @@ public class LBStickinessResponse extends BaseResponse { @SerializedName("account") @Param(description = "the account of the Stickiness policy") private String accountName; - + @SerializedName(ApiConstants.DOMAIN_ID) @Param(description = "the domain ID of the Stickiness policy") private IdentityProxy domainId = new IdentityProxy("domain"); @@ -51,7 +51,7 @@ public class LBStickinessResponse extends BaseResponse { @SerializedName("state") @Param(description = "the state of the policy") private String state; - + @SerializedName(ApiConstants.ZONE_ID) @Param(description = "the id of the zone the Stickiness policy belongs to") private IdentityProxy zoneId = new IdentityProxy("data_center"); @@ -79,11 +79,11 @@ public class LBStickinessResponse extends BaseResponse { public List getStickinessPolicies() { return stickinessPolicies; } - + public String getDescription() { return description; } - + public void setDescription(String description) { this.description = description; } @@ -99,11 +99,11 @@ public class LBStickinessResponse extends BaseResponse { public void setDomainId(Long domainId) { this.domainId.setValue(domainId); } - + public void setZoneId(Long zoneId) { this.zoneId.setValue(zoneId); } - + public String getDomainName() { return domainName; } diff --git a/api/src/com/cloud/api/response/LDAPConfigResponse.java b/api/src/com/cloud/api/response/LDAPConfigResponse.java index cf62698c1b4..db89bdf7c78 100644 --- a/api/src/com/cloud/api/response/LDAPConfigResponse.java +++ b/api/src/com/cloud/api/response/LDAPConfigResponse.java @@ -98,6 +98,6 @@ public class LDAPConfigResponse extends BaseResponse { public void setBindPassword(String bindPassword) { this.bindPassword = bindPassword; } - + } diff --git a/api/src/com/cloud/api/response/ListResponse.java b/api/src/com/cloud/api/response/ListResponse.java index 3cf98608464..5c8e83c1651 100644 --- a/api/src/com/cloud/api/response/ListResponse.java +++ b/api/src/com/cloud/api/response/ListResponse.java @@ -31,22 +31,22 @@ public class ListResponse extends BaseResponse { public void setResponses(List responses) { this.responses = responses; } - + public void setResponses(List responses, Integer count) { this.responses = responses; this.count = count; } - + public Integer getCount() { if (count != null) { return count; } - + if (responses != null) { return responses.size(); } - + return null; } } diff --git a/api/src/com/cloud/api/response/LoadBalancerResponse.java b/api/src/com/cloud/api/response/LoadBalancerResponse.java index a4ad57a3b06..6b104f5fbdf 100644 --- a/api/src/com/cloud/api/response/LoadBalancerResponse.java +++ b/api/src/com/cloud/api/response/LoadBalancerResponse.java @@ -56,17 +56,17 @@ public class LoadBalancerResponse extends BaseResponse implements ControlledEnti @SerializedName(ApiConstants.ALGORITHM) @Param(description = "the load balancer algorithm (source, roundrobin, leastconn)") private String algorithm; - + @SerializedName(ApiConstants.CIDR_LIST) @Param(description="the cidr list to forward traffic from") private String cidrList; @SerializedName(ApiConstants.ACCOUNT) @Param(description = "the account of the load balancer rule") private String accountName; - + @SerializedName(ApiConstants.PROJECT_ID) @Param(description="the project id of the load balancer") private IdentityProxy projectId = new IdentityProxy("projects"); - + @SerializedName(ApiConstants.PROJECT) @Param(description="the project name of the load balancer") private String projectName; @@ -85,7 +85,7 @@ public class LoadBalancerResponse extends BaseResponse implements ControlledEnti @SerializedName(ApiConstants.ZONE_ID) @Param(description = "the id of the zone the rule belongs to") private IdentityProxy zoneId = new IdentityProxy("data_center"); - + @SerializedName(ApiConstants.TAGS) @Param(description="the list of resource tags associated with load balancer", responseObject = ResourceTagResponse.class) private List tags; @@ -154,9 +154,9 @@ public class LoadBalancerResponse extends BaseResponse implements ControlledEnti public void setProjectName(String projectName) { this.projectName = projectName; } - + public void setTags(List tags) { this.tags = tags; } - + } diff --git a/api/src/com/cloud/api/response/NetworkACLResponse.java b/api/src/com/cloud/api/response/NetworkACLResponse.java index fcd40d16152..fc567d5b57a 100644 --- a/api/src/com/cloud/api/response/NetworkACLResponse.java +++ b/api/src/com/cloud/api/response/NetworkACLResponse.java @@ -39,19 +39,19 @@ public class NetworkACLResponse extends BaseResponse { @SerializedName(ApiConstants.TRAFFIC_TYPE) @Param(description="the traffic type for the ACL") private String trafficType; - + @SerializedName(ApiConstants.STATE) @Param(description="the state of the rule") private String state; @SerializedName(ApiConstants.CIDR_LIST) @Param(description="the cidr list to forward traffic from") private String cidrList; - + @SerializedName(ApiConstants.ICMP_TYPE) @Param(description= "type of the icmp message being sent") private Integer icmpType; @SerializedName(ApiConstants.ICMP_CODE) @Param(description = "error code for this icmp message") private Integer icmpCode; - + @SerializedName(ApiConstants.TAGS) @Param(description="the list of resource tags associated with the network ACLs", responseObject = ResourceTagResponse.class) private List tags; @@ -91,7 +91,7 @@ public class NetworkACLResponse extends BaseResponse { public void setTrafficType(String trafficType) { this.trafficType = trafficType; } - + public void setTags(List tags) { this.tags = tags; } diff --git a/api/src/com/cloud/api/response/NetworkOfferingResponse.java b/api/src/com/cloud/api/response/NetworkOfferingResponse.java index 310afe9cbfe..af6bbe1ca88 100644 --- a/api/src/com/cloud/api/response/NetworkOfferingResponse.java +++ b/api/src/com/cloud/api/response/NetworkOfferingResponse.java @@ -31,52 +31,52 @@ public class NetworkOfferingResponse extends BaseResponse{ @SerializedName(ApiConstants.NAME) @Param(description="the name of the network offering") private String name; - + @SerializedName(ApiConstants.DISPLAY_TEXT) @Param(description="an alternate display text of the network offering.") private String displayText; - + @SerializedName(ApiConstants.TAGS) @Param(description="the tags for the network offering") private String tags; - + @SerializedName(ApiConstants.CREATED) @Param(description="the date this network offering was created") private Date created; - + @SerializedName(ApiConstants.TRAFFIC_TYPE) @Param(description="the traffic type for the network offering, supported types are Public, Management, Control, Guest, Vlan or Storage.") private String trafficType; - + @SerializedName(ApiConstants.IS_DEFAULT) @Param(description="true if network offering is default, false otherwise") private Boolean isDefault; - + @SerializedName(ApiConstants.SPECIFY_VLAN) @Param(description="true if network offering supports vlans, false otherwise") private Boolean specifyVlan; - + @SerializedName(ApiConstants.CONSERVE_MODE) @Param(description="true if network offering is ip conserve mode enabled") private Boolean conserveMode; @SerializedName(ApiConstants.SPECIFY_IP_RANGES) @Param(description="true if network offering supports specifying ip ranges, false otherwise") private Boolean specifyIpRanges; - + @SerializedName(ApiConstants.AVAILABILITY) @Param(description="availability of the network offering") private String availability; - + @SerializedName(ApiConstants.NETWORKRATE) @Param(description="data transfer rate in megabits per second allowed.") private Integer networkRate; @SerializedName(ApiConstants.STATE) @Param(description="state of the network offering. Can be Disabled/Enabled/Inactive") private String state; - + @SerializedName(ApiConstants.GUEST_IP_TYPE) @Param(description="guest type of the network offering, can be Shared or Isolated") private String guestIpType; - + @SerializedName(ApiConstants.SERVICE_OFFERING_ID) @Param(description="the ID of the service offering used by virtual router provider") private IdentityProxy serviceOfferingId = new IdentityProxy("disk_offering"); - + @SerializedName(ApiConstants.SERVICE) @Param(description="the list of supported services", responseObject = ServiceResponse.class) private List services; - + @SerializedName(ApiConstants.FOR_VPC) @Param(description="true if network offering can be used by VPC networks only") private Boolean forVpc; - + public void setId(Long id) { this.id.setValue(id); @@ -89,7 +89,7 @@ public class NetworkOfferingResponse extends BaseResponse{ public void setDisplayText(String displayText) { this.displayText = displayText; } - + public void setTags(String tags) { this.tags = tags; } @@ -138,13 +138,13 @@ public class NetworkOfferingResponse extends BaseResponse{ this.serviceOfferingId.setValue(serviceOfferingId); } - public void setServiceOfferingId(IdentityProxy serviceOfferingId) { - this.serviceOfferingId = serviceOfferingId; - } + public void setServiceOfferingId(IdentityProxy serviceOfferingId) { + this.serviceOfferingId = serviceOfferingId; + } - public void setSpecifyIpRanges(Boolean specifyIpRanges) { - this.specifyIpRanges = specifyIpRanges; - } + public void setSpecifyIpRanges(Boolean specifyIpRanges) { + this.specifyIpRanges = specifyIpRanges; + } public void setForVpc(Boolean forVpc) { this.forVpc = forVpc; diff --git a/api/src/com/cloud/api/response/NetworkResponse.java b/api/src/com/cloud/api/response/NetworkResponse.java index 9cf27db17a3..78bae94ed79 100644 --- a/api/src/com/cloud/api/response/NetworkResponse.java +++ b/api/src/com/cloud/api/response/NetworkResponse.java @@ -25,121 +25,121 @@ import com.google.gson.annotations.SerializedName; @SuppressWarnings("unused") public class NetworkResponse extends BaseResponse implements ControlledEntityResponse{ - + @SerializedName(ApiConstants.ID) @Param(description="the id of the network") private IdentityProxy id = new IdentityProxy("networks"); - + @SerializedName(ApiConstants.NAME) @Param(description="the name of the network") private String name; - + @SerializedName(ApiConstants.DISPLAY_TEXT) @Param(description="the displaytext of the network") private String displaytext; - + @SerializedName("broadcastdomaintype") @Param(description="Broadcast domain type of the network") private String broadcastDomainType; - + @SerializedName(ApiConstants.TRAFFIC_TYPE) @Param(description="the traffic type of the network") private String trafficType; - + @SerializedName(ApiConstants.GATEWAY) @Param(description="the network's gateway") private String gateway; - + @SerializedName(ApiConstants.NETMASK) @Param(description="the network's netmask") private String netmask; - + @SerializedName(ApiConstants.CIDR) @Param(description="the cidr the network") private String cidr; - + @SerializedName(ApiConstants.ZONE_ID) @Param(description="zone id of the network") private IdentityProxy zoneId = new IdentityProxy("data_center"); - + @SerializedName(ApiConstants.ZONE_NAME) @Param(description="the name of the zone the network belongs to") private String zoneName; - + @SerializedName("networkofferingid") @Param(description="network offering id the network is created from") private IdentityProxy networkOfferingId = new IdentityProxy("network_offerings"); - + @SerializedName("networkofferingname") @Param(description="name of the network offering the network is created from") private String networkOfferingName; - + @SerializedName("networkofferingdisplaytext") @Param(description="display text of the network offering the network is created from") private String networkOfferingDisplayText; - + @SerializedName("networkofferingavailability") @Param(description="availability of the network offering the network is created from") private String networkOfferingAvailability; - + @SerializedName(ApiConstants.IS_SYSTEM) @Param(description="true if network is system, false otherwise") private Boolean isSystem; - + @SerializedName(ApiConstants.STATE) @Param(description="state of the network") private String state; @SerializedName("related") @Param(description="related to what other network configuration") private IdentityProxy related = new IdentityProxy("networks"); - + @SerializedName("broadcasturi") @Param(description="broadcast uri of the network. This parameter is visible to ROOT admins only") private String broadcastUri; - + @SerializedName(ApiConstants.DNS1) @Param(description="the first DNS for the network") private String dns1; - + @SerializedName(ApiConstants.DNS2) @Param(description="the second DNS for the network") private String dns2; - + @SerializedName(ApiConstants.TYPE) @Param(description="the type of the network") private String type; - + @SerializedName(ApiConstants.VLAN) @Param(description="The vlan of the network. This parameter is visible to ROOT admins only") private String vlan; - + @SerializedName(ApiConstants.ACL_TYPE) @Param(description="acl type - access type to the network") private String aclType; - + @SerializedName(ApiConstants.SUBDOMAIN_ACCESS) @Param(description="true if users from subdomains can access the domain level network") private Boolean subdomainAccess; - + @SerializedName(ApiConstants.ACCOUNT) @Param(description="the owner of the network") private String accountName; - + @SerializedName(ApiConstants.PROJECT_ID) @Param(description="the project id of the ipaddress") private IdentityProxy projectId = new IdentityProxy("projects"); - + @SerializedName(ApiConstants.PROJECT) @Param(description="the project name of the address") private String projectName; @SerializedName(ApiConstants.DOMAIN_ID) @Param(description="the domain id of the network owner") private IdentityProxy domainId = new IdentityProxy("domain"); - + @SerializedName(ApiConstants.DOMAIN) @Param(description="the domain name of the network owner") private String domain; - + @SerializedName("isdefault") @Param(description="true if network is default, false otherwise") private Boolean isDefault; - + @SerializedName("service") @Param(description="the list of services", responseObject = ServiceResponse.class) private List services; - + @SerializedName(ApiConstants.NETWORK_DOMAIN) @Param(description="the network domain") private String networkDomain; - + @SerializedName(ApiConstants.PHYSICAL_NETWORK_ID) @Param(description="the physical network id") private IdentityProxy physicalNetworkId = new IdentityProxy("physical_network"); - + @SerializedName(ApiConstants.RESTART_REQUIRED) @Param(description="true network requires restart") private Boolean restartRequired; - + @SerializedName(ApiConstants.SPECIFY_IP_RANGES) @Param(description="true if network supports specifying ip ranges, false otherwise") private Boolean specifyIpRanges; - + @SerializedName(ApiConstants.VPC_ID) @Param(description="VPC the network belongs to") private IdentityProxy vpcId = new IdentityProxy("vpc"); @SerializedName(ApiConstants.CAN_USE_FOR_DEPLOY) @Param(description="list networks available for vm deployment") private Boolean canUseForDeploy; - + @SerializedName(ApiConstants.TAGS) @Param(description="the list of resource tags associated with network", responseObject = ResourceTagResponse.class) private List tags; - + public void setId(Long id) { this.id.setValue(id); } @@ -163,7 +163,7 @@ public class NetworkResponse extends BaseResponse implements ControlledEntityRes public void setNetmask(String netmask) { this.netmask = netmask; } - + public void setZoneId(Long zoneId) { this.zoneId.setValue(zoneId); } @@ -224,14 +224,14 @@ public class NetworkResponse extends BaseResponse implements ControlledEntityRes this.isSystem = isSystem; } - public void setDomainName(String domain) { - this.domain = domain; - } + public void setDomainName(String domain) { + this.domain = domain; + } public void setNetworkOfferingAvailability(String networkOfferingAvailability) { this.networkOfferingAvailability = networkOfferingAvailability; } - + public void setServices(List services) { this.services = services; } @@ -243,7 +243,7 @@ public class NetworkResponse extends BaseResponse implements ControlledEntityRes public void setNetworkDomain(String networkDomain) { this.networkDomain = networkDomain; } - + @Override public void setProjectId(Long projectId) { this.projectId.setValue(projectId); @@ -258,38 +258,38 @@ public class NetworkResponse extends BaseResponse implements ControlledEntityRes this.physicalNetworkId.setValue(physicalNetworkId); } - public void setAclType(String aclType) { - this.aclType = aclType; - } + public void setAclType(String aclType) { + this.aclType = aclType; + } - public void setSubdomainAccess(Boolean subdomainAccess) { - this.subdomainAccess = subdomainAccess; - } + public void setSubdomainAccess(Boolean subdomainAccess) { + this.subdomainAccess = subdomainAccess; + } - public void setZoneName(String zoneName) { - this.zoneName = zoneName; - } + public void setZoneName(String zoneName) { + this.zoneName = zoneName; + } - public void setCidr(String cidr) { - this.cidr = cidr; - } + public void setCidr(String cidr) { + this.cidr = cidr; + } + + public void setRestartRequired(Boolean restartRequired) { + this.restartRequired = restartRequired; + } + + public void setSpecifyIpRanges(Boolean specifyIpRanges) { + this.specifyIpRanges = specifyIpRanges; + } - public void setRestartRequired(Boolean restartRequired) { - this.restartRequired = restartRequired; - } - - public void setSpecifyIpRanges(Boolean specifyIpRanges) { - this.specifyIpRanges = specifyIpRanges; - } - public void setVpcId(Long vpcId) { this.vpcId.setValue(vpcId); } - + public void setCanUseForDeploy(Boolean canUseForDeploy) { this.canUseForDeploy = canUseForDeploy; } - + public void setTags(List tags) { this.tags = tags; } diff --git a/api/src/com/cloud/api/response/NicResponse.java b/api/src/com/cloud/api/response/NicResponse.java index e02256d358e..e27a8cf19f5 100755 --- a/api/src/com/cloud/api/response/NicResponse.java +++ b/api/src/com/cloud/api/response/NicResponse.java @@ -23,43 +23,43 @@ import com.google.gson.annotations.SerializedName; @SuppressWarnings("unused") public class NicResponse extends BaseResponse { - + @SerializedName("id") @Param(description="the ID of the nic") private final IdentityProxy id = new IdentityProxy("nics"); @SerializedName("networkid") @Param(description="the ID of the corresponding network") private final IdentityProxy networkId = new IdentityProxy("networks"); - + @SerializedName("networkname") @Param(description="the name of the corresponding network") private String networkName ; - + @SerializedName(ApiConstants.NETMASK) @Param(description="the netmask of the nic") private String netmask; - + @SerializedName(ApiConstants.GATEWAY) @Param(description="the gateway of the nic") private String gateway; - + @SerializedName(ApiConstants.IP_ADDRESS) @Param(description="the ip address of the nic") private String ipaddress; - + @SerializedName("isolationuri") @Param(description="the isolation uri of the nic") private String isolationUri; - + @SerializedName("broadcasturi") @Param(description="the broadcast uri of the nic") private String broadcastUri; - + @SerializedName(ApiConstants.TRAFFIC_TYPE) @Param(description="the traffic type of the nic") private String trafficType; - + @SerializedName(ApiConstants.TYPE) @Param(description="the type of the nic") private String type; - + @SerializedName(ApiConstants.IS_DEFAULT) @Param(description="true if nic is default, false otherwise") private Boolean isDefault; @SerializedName("macaddress") @Param(description="true if nic is default, false otherwise") private String macAddress; - + public Long getId() { return id.getValue(); } @@ -108,9 +108,9 @@ public class NicResponse extends BaseResponse { this.isDefault = isDefault; } - public void setMacAddress(String macAddress) { - this.macAddress = macAddress; - } + public void setMacAddress(String macAddress) { + this.macAddress = macAddress; + } @Override public int hashCode() { @@ -136,5 +136,5 @@ public class NicResponse extends BaseResponse { return false; return true; } - + } diff --git a/api/src/com/cloud/api/response/PhysicalNetworkResponse.java b/api/src/com/cloud/api/response/PhysicalNetworkResponse.java index a9ba43517b2..c39071342dd 100644 --- a/api/src/com/cloud/api/response/PhysicalNetworkResponse.java +++ b/api/src/com/cloud/api/response/PhysicalNetworkResponse.java @@ -25,28 +25,28 @@ import com.google.gson.annotations.SerializedName; @SuppressWarnings("unused") public class PhysicalNetworkResponse extends BaseResponse{ - + @SerializedName(ApiConstants.ID) @Param(description="the uuid of the physical network") private String id; - + @SerializedName(ApiConstants.NAME) @Param(description="name of the physical network") private String name; - + @SerializedName(ApiConstants.BROADCAST_DOMAIN_RANGE) @Param(description="Broadcast domain range of the physical network") private String broadcastDomainRange; - + @SerializedName(ApiConstants.ZONE_ID) @Param(description="zone id of the physical network") private IdentityProxy zoneId = new IdentityProxy("data_center"); - + @SerializedName(ApiConstants.STATE) @Param(description="state of the physical network") private String state; @SerializedName(ApiConstants.VLAN) @Param(description="the vlan of the physical network") private String vlan; - + @SerializedName(ApiConstants.DOMAIN_ID) @Param(description="the domain id of the physical network owner") private IdentityProxy domainId = new IdentityProxy("domain"); - + @SerializedName(ApiConstants.TAGS) @Param(description="comma separated tag") private String tags; @@ -67,30 +67,30 @@ public class PhysicalNetworkResponse extends BaseResponse{ public void setState(String state) { this.state = state; } - + public void setDomainId(Long domainId) { this.domainId.setValue(domainId); } - + public void setVlan(String vlan) { this.vlan = vlan; } - + public void setTags(List tags) { if (tags == null || tags.size() == 0) { return; } - + StringBuilder buf = new StringBuilder(); for (String tag : tags) { buf.append(tag).append(","); } - + this.tags = buf.delete(buf.length()-1, buf.length()).toString(); } - + public void setBroadcastDomainRange(String broadcastDomainRange) { this.broadcastDomainRange = broadcastDomainRange; } @@ -103,16 +103,16 @@ public class PhysicalNetworkResponse extends BaseResponse{ if (isolationMethods == null || isolationMethods.size() == 0) { return; } - + StringBuilder buf = new StringBuilder(); for (String isolationMethod : isolationMethods) { buf.append(isolationMethod).append(","); } - + this.isolationMethods = buf.delete(buf.length()-1, buf.length()).toString(); } - public void setName(String name) { - this.name = name; - } + public void setName(String name) { + this.name = name; + } } diff --git a/api/src/com/cloud/api/response/PodResponse.java b/api/src/com/cloud/api/response/PodResponse.java index b2c44e110e4..c2cb94650a4 100755 --- a/api/src/com/cloud/api/response/PodResponse.java +++ b/api/src/com/cloud/api/response/PodResponse.java @@ -47,13 +47,13 @@ public class PodResponse extends BaseResponse { @SerializedName("endip") @Param(description="the ending IP for the Pod") private String endIp; - + @SerializedName("allocationstate") @Param(description="the allocation state of the Pod") - private String allocationState; + private String allocationState; @SerializedName("capacity") @Param(description="the capacity of the Pod", responseObject = CapacityResponse.class) private List capacitites; - + public Long getId() { return id.getValue(); } @@ -117,20 +117,20 @@ public class PodResponse extends BaseResponse { public void setEndIp(String endIp) { this.endIp = endIp; } - + public String getAllocationState() { - return allocationState; + return allocationState; } - + public void setAllocationState(String allocationState) { - this.allocationState = allocationState; + this.allocationState = allocationState; } - public List getCapacitites() { - return capacitites; - } + public List getCapacitites() { + return capacitites; + } - public void setCapacitites(List capacitites) { - this.capacitites = capacitites; - } + public void setCapacitites(List capacitites) { + this.capacitites = capacitites; + } } diff --git a/api/src/com/cloud/api/response/PrivateGatewayResponse.java b/api/src/com/cloud/api/response/PrivateGatewayResponse.java index 97df61d63a7..47ed05efd31 100644 --- a/api/src/com/cloud/api/response/PrivateGatewayResponse.java +++ b/api/src/com/cloud/api/response/PrivateGatewayResponse.java @@ -22,41 +22,41 @@ import com.google.gson.annotations.SerializedName; @SuppressWarnings("unused") public class PrivateGatewayResponse extends BaseResponse implements ControlledEntityResponse{ - + @SerializedName(ApiConstants.ID) @Param(description="the id of the private gateway") private IdentityProxy id = new IdentityProxy("vpc_gateways"); - + @SerializedName(ApiConstants.GATEWAY) @Param(description="the gateway") private String gateway; - + @SerializedName(ApiConstants.NETMASK) @Param(description="the private gateway's netmask") private String netmask; - + @SerializedName(ApiConstants.IP_ADDRESS) @Param(description="the private gateway's ip address") private String address; - + @SerializedName(ApiConstants.ZONE_ID) @Param(description="zone id of the private gateway") private IdentityProxy zoneId = new IdentityProxy("data_center"); - + @SerializedName(ApiConstants.ZONE_NAME) @Param(description="the name of the zone the private gateway belongs to") private String zoneName; - + @SerializedName(ApiConstants.VLAN) @Param(description="the vlan of the private gateway") private String vlan; - + @SerializedName(ApiConstants.VPC_ID) @Param(description="VPC the private gateaway belongs to") private IdentityProxy vpcId = new IdentityProxy("vpc"); - + @SerializedName(ApiConstants.PHYSICAL_NETWORK_ID) @Param(description="the physical network id") private IdentityProxy physicalNetworkId = new IdentityProxy("physical_network"); - + @SerializedName(ApiConstants.ACCOUNT) @Param(description = "the account associated with the private gateway") private String accountName; - + @SerializedName(ApiConstants.PROJECT_ID) @Param(description="the project id of the private gateway") private IdentityProxy projectId = new IdentityProxy("projects"); - + @SerializedName(ApiConstants.PROJECT) @Param(description="the project name of the private gateway") private String projectName; @@ -67,11 +67,11 @@ public class PrivateGatewayResponse extends BaseResponse implements ControlledEn @SerializedName(ApiConstants.DOMAIN) @Param(description = "the domain associated with the private gateway") private String domainName; - + @SerializedName(ApiConstants.STATE) @Param(description="State of the gateway, can be Creating, Ready, Deleting") private String state; - - + + public void setId(Long id) { this.id.setValue(id); } @@ -83,7 +83,7 @@ public class PrivateGatewayResponse extends BaseResponse implements ControlledEn public void setNetmask(String netmask) { this.netmask = netmask; } - + public void setZoneId(Long zoneId) { this.zoneId.setValue(zoneId); } @@ -95,7 +95,7 @@ public class PrivateGatewayResponse extends BaseResponse implements ControlledEn public void setZoneName(String zoneName) { this.zoneName = zoneName; } - + public void setVpcId(Long vpcId) { this.vpcId.setValue(vpcId); } @@ -107,7 +107,7 @@ public class PrivateGatewayResponse extends BaseResponse implements ControlledEn public void setPhysicalNetworkId(Long physicalNetworkId) { this.physicalNetworkId.setValue(physicalNetworkId); } - + @Override public void setAccountName(String accountName) { this.accountName = accountName; @@ -117,12 +117,12 @@ public class PrivateGatewayResponse extends BaseResponse implements ControlledEn public void setDomainId(Long domainId) { this.domainId.setValue(domainId); } - + @Override public void setDomainName(String domainName) { this.domainName = domainName; } - + @Override public void setProjectId(Long projectId) { this.projectId.setValue(projectId); diff --git a/api/src/com/cloud/api/response/ProjectInvitationResponse.java b/api/src/com/cloud/api/response/ProjectInvitationResponse.java index 5f10251f7fc..3533fa8f773 100644 --- a/api/src/com/cloud/api/response/ProjectInvitationResponse.java +++ b/api/src/com/cloud/api/response/ProjectInvitationResponse.java @@ -25,28 +25,28 @@ import com.google.gson.annotations.SerializedName; public class ProjectInvitationResponse extends BaseResponse implements ControlledEntityResponse{ @SerializedName(ApiConstants.ID) @Param(description="the id of the invitation") private IdentityProxy id = new IdentityProxy("project_invitations"); - + @SerializedName(ApiConstants.PROJECT_ID) @Param(description="the id of the project") private IdentityProxy projectId = new IdentityProxy("projects"); - + @SerializedName(ApiConstants.PROJECT) @Param(description="the name of the project") private String projectName; - + @SerializedName(ApiConstants.DOMAIN_ID) @Param(description="the domain id the project belongs to") private IdentityProxy domainId = new IdentityProxy("domain"); - + @SerializedName(ApiConstants.DOMAIN) @Param(description="the domain name where the project belongs to") private String domainName; - + @SerializedName(ApiConstants.ACCOUNT) @Param(description="the account name of the project's owner") private String accountName; - + @SerializedName(ApiConstants.EMAIL) @Param(description="the email the invitation was sent to") private String email; - + @SerializedName(ApiConstants.STATE) @Param(description="the invitation state") private String invitationState; - + public void setId(Long id) { this.id.setValue(id); } diff --git a/api/src/com/cloud/api/response/ProjectResponse.java b/api/src/com/cloud/api/response/ProjectResponse.java index 8600dafab61..e17b9dc5009 100644 --- a/api/src/com/cloud/api/response/ProjectResponse.java +++ b/api/src/com/cloud/api/response/ProjectResponse.java @@ -25,31 +25,31 @@ import com.google.gson.annotations.SerializedName; @SuppressWarnings("unused") public class ProjectResponse extends BaseResponse{ - + @SerializedName(ApiConstants.ID) @Param(description="the id of the project") private IdentityProxy id = new IdentityProxy("projects"); - + @SerializedName(ApiConstants.NAME) @Param(description="the name of the project") private String name; - + @SerializedName(ApiConstants.DISPLAY_TEXT) @Param(description="the displaytext of the project") private String displaytext; @SerializedName(ApiConstants.DOMAIN_ID) @Param(description="the domain id the project belongs to") private IdentityProxy domainId = new IdentityProxy("domain"); - + @SerializedName(ApiConstants.DOMAIN) @Param(description="the domain name where the project belongs to") private String domain; - + @SerializedName(ApiConstants.ACCOUNT) @Param(description="the account name of the project's owner") private String ownerName; - + @SerializedName(ApiConstants.STATE) @Param(description="the state of the project") private String state; - + @SerializedName(ApiConstants.TAGS) @Param(description="the list of resource tags associated with vm", responseObject = ResourceTagResponse.class) private List tags; - + public void setId(Long id) { this.id.setValue(id); @@ -78,7 +78,7 @@ public class ProjectResponse extends BaseResponse{ public void setState(String state) { this.state = state; } - + public void setTags(List tags) { this.tags = tags; } diff --git a/api/src/com/cloud/api/response/ProviderResponse.java b/api/src/com/cloud/api/response/ProviderResponse.java index 28e0a85457e..605d9f84cee 100644 --- a/api/src/com/cloud/api/response/ProviderResponse.java +++ b/api/src/com/cloud/api/response/ProviderResponse.java @@ -28,25 +28,25 @@ public class ProviderResponse extends BaseResponse { @SerializedName(ApiConstants.NAME) @Param(description="the provider name") private String name; - + @SerializedName(ApiConstants.PHYSICAL_NETWORK_ID) @Param(description="the physical network this belongs to") private IdentityProxy physicalNetworkId = new IdentityProxy("physical_network"); @SerializedName(ApiConstants.DEST_PHYSICAL_NETWORK_ID) @Param(description="the destination physical network") private IdentityProxy destinationPhysicalNetworkId = new IdentityProxy("physical_network"); - + @SerializedName(ApiConstants.STATE) @Param(description="state of the network provider") private String state; @SerializedName(ApiConstants.ID) @Param(description="uuid of the network provider") private String id; - + @SerializedName(ApiConstants.SERVICE_LIST) @Param(description="services for this provider") private List services; - + @SerializedName(ApiConstants.CAN_ENABLE_INDIVIDUAL_SERVICE) @Param(description="true if individual services can be enabled/disabled") private Boolean canEnableIndividualServices; - + public void setName(String name) { this.name = name; } @@ -54,7 +54,7 @@ public class ProviderResponse extends BaseResponse { public String getName() { return name; } - + public void setPhysicalNetworkId(long physicalNetworkId) { this.physicalNetworkId.setValue(physicalNetworkId); } @@ -62,7 +62,7 @@ public class ProviderResponse extends BaseResponse { public long getphysicalNetworkId() { return physicalNetworkId.getValue(); } - + public void setDestinationPhysicalNetworkId(long destPhysicalNetworkId) { this.destinationPhysicalNetworkId.setValue(destPhysicalNetworkId); } @@ -74,7 +74,7 @@ public class ProviderResponse extends BaseResponse { public void setState(String state) { this.state = state; } - + public String getState() { return this.state; } @@ -82,24 +82,24 @@ public class ProviderResponse extends BaseResponse { public void setId(String uuid) { this.id = uuid; } - + public String getId() { return this.id; } - + public void setServices(List services) { this.services = services; } - + public List getServices() { return services; } - + public Boolean getCanEnableIndividualServices() { return canEnableIndividualServices; } public void setCanEnableIndividualServices(Boolean canEnableIndividualServices) { this.canEnableIndividualServices = canEnableIndividualServices; - } + } } diff --git a/api/src/com/cloud/api/response/RemoteAccessVpnResponse.java b/api/src/com/cloud/api/response/RemoteAccessVpnResponse.java index 40f0f3f2062..6a5acaf4569 100644 --- a/api/src/com/cloud/api/response/RemoteAccessVpnResponse.java +++ b/api/src/com/cloud/api/response/RemoteAccessVpnResponse.java @@ -23,13 +23,13 @@ import com.google.gson.annotations.SerializedName; @SuppressWarnings("unused") public class RemoteAccessVpnResponse extends BaseResponse implements ControlledEntityResponse{ - + @SerializedName(ApiConstants.PUBLIC_IP_ID) @Param(description="the public ip address of the vpn server") private IdentityProxy publicIpId = new IdentityProxy("user_ip_address"); - + @SerializedName(ApiConstants.PUBLIC_IP) @Param(description="the public ip address of the vpn server") private String publicIp; - + @SerializedName("iprange") @Param(description="the range of ips to allocate to the clients") private String ipRange; @@ -38,45 +38,45 @@ public class RemoteAccessVpnResponse extends BaseResponse implements ControlledE @SerializedName(ApiConstants.ACCOUNT) @Param(description="the account of the remote access vpn") private String accountName; - + @SerializedName(ApiConstants.PROJECT_ID) @Param(description="the project id of the vpn") private IdentityProxy projectId = new IdentityProxy("projects"); - + @SerializedName(ApiConstants.PROJECT) @Param(description="the project name of the vpn") private String projectName; @SerializedName(ApiConstants.DOMAIN_ID) @Param(description="the domain id of the account of the remote access vpn") - private IdentityProxy domainId = new IdentityProxy("domain"); + private IdentityProxy domainId = new IdentityProxy("domain"); @SerializedName(ApiConstants.DOMAIN) @Param(description="the domain name of the account of the remote access vpn") - private String domainName; - + private String domainName; + @SerializedName(ApiConstants.STATE) @Param(description="the state of the rule") private String state; - public void setPublicIp(String publicIp) { - this.publicIp = publicIp; - } + public void setPublicIp(String publicIp) { + this.publicIp = publicIp; + } - public void setIpRange(String ipRange) { - this.ipRange = ipRange; - } + public void setIpRange(String ipRange) { + this.ipRange = ipRange; + } - public void setPresharedKey(String presharedKey) { - this.presharedKey = presharedKey; - } + public void setPresharedKey(String presharedKey) { + this.presharedKey = presharedKey; + } - public void setAccountName(String accountName) { - this.accountName = accountName; - } + public void setAccountName(String accountName) { + this.accountName = accountName; + } - public void setDomainId(Long domainId) { - this.domainId.setValue(domainId); - } + public void setDomainId(Long domainId) { + this.domainId.setValue(domainId); + } - public void setDomainName(String name) { - this.domainName = name; - } + public void setDomainName(String name) { + this.domainName = name; + } public void setState(String state) { this.state = state; @@ -95,5 +95,5 @@ public class RemoteAccessVpnResponse extends BaseResponse implements ControlledE public void setProjectName(String projectName) { this.projectName = projectName; } - + } diff --git a/api/src/com/cloud/api/response/ResourceCountResponse.java b/api/src/com/cloud/api/response/ResourceCountResponse.java index afd4d21a66b..e308e542eb8 100644 --- a/api/src/com/cloud/api/response/ResourceCountResponse.java +++ b/api/src/com/cloud/api/response/ResourceCountResponse.java @@ -25,10 +25,10 @@ import com.google.gson.annotations.SerializedName; public class ResourceCountResponse extends BaseResponse implements ControlledEntityResponse{ @SerializedName(ApiConstants.ACCOUNT) @Param(description="the account for which resource count's are updated") private String accountName; - + @SerializedName(ApiConstants.PROJECT_ID) @Param(description="the project id for which resource count's are updated") private IdentityProxy projectId = new IdentityProxy("projects"); - + @SerializedName(ApiConstants.PROJECT) @Param(description="the project name for which resource count's are updated") private String projectName; @@ -67,7 +67,7 @@ public class ResourceCountResponse extends BaseResponse implements ControlledEnt public void setResourceCount(Long resourceCount) { this.resourceCount = resourceCount; } - + @Override public void setProjectId(Long projectId) { this.projectId.setValue(projectId); @@ -77,5 +77,5 @@ public class ResourceCountResponse extends BaseResponse implements ControlledEnt public void setProjectName(String projectName) { this.projectName = projectName; } - + } diff --git a/api/src/com/cloud/api/response/ResourceLimitResponse.java b/api/src/com/cloud/api/response/ResourceLimitResponse.java index 7ba4ffdab61..6493917dd76 100644 --- a/api/src/com/cloud/api/response/ResourceLimitResponse.java +++ b/api/src/com/cloud/api/response/ResourceLimitResponse.java @@ -37,18 +37,18 @@ public class ResourceLimitResponse extends BaseResponse implements ControlledEnt @SerializedName("max") @Param(description="the maximum number of the resource. A -1 means the resource currently has no limit.") private Long max; - + @SerializedName(ApiConstants.PROJECT_ID) @Param(description="the project id of the resource limit") private IdentityProxy projectId = new IdentityProxy("projects"); - + @SerializedName(ApiConstants.PROJECT) @Param(description="the project name of the resource limit") private String projectName; - + @Override public void setAccountName(String accountName) { this.accountName = accountName; } - + @Override public void setProjectName(String projectName) { this.projectName = projectName; @@ -58,12 +58,12 @@ public class ResourceLimitResponse extends BaseResponse implements ControlledEnt public void setDomainId(Long domainId) { this.domainId.setValue(domainId); } - + @Override public void setDomainName(String domainName) { this.domainName = domainName; } - + public void setResourceType(String resourceType) { this.resourceType = resourceType; } diff --git a/api/src/com/cloud/api/response/ResourceTagResponse.java b/api/src/com/cloud/api/response/ResourceTagResponse.java index d60b069308a..04c2290fafa 100644 --- a/api/src/com/cloud/api/response/ResourceTagResponse.java +++ b/api/src/com/cloud/api/response/ResourceTagResponse.java @@ -25,26 +25,26 @@ import com.google.gson.annotations.SerializedName; public class ResourceTagResponse extends BaseResponse implements ControlledEntityResponse{ @SerializedName(ApiConstants.KEY) @Param(description="tag key name") private String key; - + @SerializedName(ApiConstants.VALUE) @Param(description="tag value") private String value; - + @SerializedName(ApiConstants.RESOURCE_TYPE) @Param(description="resource type") private String resourceType; - + @SerializedName(ApiConstants.RESOURCE_ID) @Param(description="id of the resource") private String id; - + @SerializedName(ApiConstants.ACCOUNT) @Param(description = "the account associated with the tag") private String accountName; - + @SerializedName(ApiConstants.PROJECT_ID) @Param(description="the project id the tag belongs to") private IdentityProxy projectId = new IdentityProxy("projects"); - + @SerializedName(ApiConstants.PROJECT) @Param(description="the project name where tag belongs to") private String projectName; - + @SerializedName(ApiConstants.DOMAIN_ID) @Param(description = "the ID of the domain associated with the tag") private IdentityProxy domainId = new IdentityProxy("domain"); @@ -52,7 +52,7 @@ public class ResourceTagResponse extends BaseResponse implements ControlledEntit @SerializedName(ApiConstants.DOMAIN) @Param(description = "the domain associated with the tag") private String domainName; - + @SerializedName(ApiConstants.CUSTOMER) @Param(description="customer associated with the tag") private String customer; @@ -71,7 +71,7 @@ public class ResourceTagResponse extends BaseResponse implements ControlledEntit public void setId(String id) { this.id = id; } - + public void setAccountName(String accountName) { this.accountName = accountName; } @@ -79,21 +79,21 @@ public class ResourceTagResponse extends BaseResponse implements ControlledEntit public void setDomainId(Long domainId) { this.domainId.setValue(domainId); } - + public void setDomainName(String domainName) { this.domainName = domainName; } - + @Override public void setProjectId(Long projectId) { this.projectId.setValue(projectId); } - + @Override public void setProjectName(String projectName) { this.projectName = projectName; - } - + } + public void setCustomer(String customer) { this.customer = customer; } diff --git a/api/src/com/cloud/api/response/SSHKeyPairResponse.java b/api/src/com/cloud/api/response/SSHKeyPairResponse.java index 45b8cd436ac..4f0bea4021b 100644 --- a/api/src/com/cloud/api/response/SSHKeyPairResponse.java +++ b/api/src/com/cloud/api/response/SSHKeyPairResponse.java @@ -21,50 +21,50 @@ import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; public class SSHKeyPairResponse extends BaseResponse { - + @SerializedName(ApiConstants.NAME) @Param(description="Name of the keypair") private String name; @SerializedName("fingerprint") @Param(description="Fingerprint of the public key") private String fingerprint; - + @SerializedName("privatekey") @Param(description="Private key") private String privateKey; public SSHKeyPairResponse() {} - + public SSHKeyPairResponse(String name, String fingerprint) { - this(name, fingerprint, null); + this(name, fingerprint, null); } - + public SSHKeyPairResponse(String name, String fingerprint, String privateKey) { - this.name = name; - this.fingerprint = fingerprint; - this.privateKey = privateKey; + this.name = name; + this.fingerprint = fingerprint; + this.privateKey = privateKey; } - - public String getName() { - return name; - } - public void setName(String name) { - this.name = name; - } + public String getName() { + return name; + } - public String getFingerprint() { - return fingerprint; - } + public void setName(String name) { + this.name = name; + } - public void setFingerprint(String fingerprint) { - this.fingerprint = fingerprint; - } + public String getFingerprint() { + return fingerprint; + } - public String getPrivateKey() { - return privateKey; - } + public void setFingerprint(String fingerprint) { + this.fingerprint = fingerprint; + } + + public String getPrivateKey() { + return privateKey; + } + + public void setPrivateKey(String privateKey) { + this.privateKey = privateKey; + } - public void setPrivateKey(String privateKey) { - this.privateKey = privateKey; - } - } diff --git a/api/src/com/cloud/api/response/SecurityGroupResponse.java b/api/src/com/cloud/api/response/SecurityGroupResponse.java index 6846187e214..46dbd046b9c 100644 --- a/api/src/com/cloud/api/response/SecurityGroupResponse.java +++ b/api/src/com/cloud/api/response/SecurityGroupResponse.java @@ -36,10 +36,10 @@ public class SecurityGroupResponse extends BaseResponse implements ControlledEnt @SerializedName(ApiConstants.ACCOUNT) @Param(description="the account owning the security group") private String accountName; - + @SerializedName(ApiConstants.PROJECT_ID) @Param(description="the project id of the group") private IdentityProxy projectId = new IdentityProxy("projects"); - + @SerializedName(ApiConstants.PROJECT) @Param(description="the project name of the group") private String projectName; @@ -54,14 +54,14 @@ public class SecurityGroupResponse extends BaseResponse implements ControlledEnt @SerializedName("egressrule") @Param(description="the list of egress rules associated with the security group", responseObject = SecurityGroupRuleResponse.class) private List egressRules; - + @SerializedName(ApiConstants.TAGS) @Param(description="the list of resource tags associated with the rule", responseObject = ResourceTagResponse.class) private List tags; - + public void setId(Long id) { this.id.setValue(id); } - + public Long getId() { return id.getValue(); } @@ -93,7 +93,7 @@ public class SecurityGroupResponse extends BaseResponse implements ControlledEnt public void setSecurityGroupEgressRules(List securityGroupRules) { this.egressRules = securityGroupRules; } - + @Override public Long getObjectId() { return getId(); @@ -123,7 +123,7 @@ public class SecurityGroupResponse extends BaseResponse implements ControlledEnt return false; return true; } - + @Override public void setProjectId(Long projectId) { this.projectId.setValue(projectId); @@ -133,7 +133,7 @@ public class SecurityGroupResponse extends BaseResponse implements ControlledEnt public void setProjectName(String projectName) { this.projectName = projectName; } - + public void setTags(List tags) { this.tags = tags; } diff --git a/api/src/com/cloud/api/response/ServiceOfferingResponse.java b/api/src/com/cloud/api/response/ServiceOfferingResponse.java index 3f1235010ef..2d6a2889893 100644 --- a/api/src/com/cloud/api/response/ServiceOfferingResponse.java +++ b/api/src/com/cloud/api/response/ServiceOfferingResponse.java @@ -50,21 +50,21 @@ public class ServiceOfferingResponse extends BaseResponse { @SerializedName("offerha") @Param(description="the ha support in the service offering") private Boolean offerHa; - + @SerializedName("limitcpuuse") @Param(description="restrict the CPU usage to committed service offering") private Boolean limitCpuUse; - + @SerializedName("tags") @Param(description="the tags for the service offering") private String tags; - @SerializedName("domainid") @Param(description="the domain id of the service offering") + @SerializedName("domainid") @Param(description="the domain id of the service offering") private IdentityProxy domainId = new IdentityProxy("domain"); - + @SerializedName(ApiConstants.DOMAIN) @Param(description="Domain name for the offering") private String domain; - + @SerializedName(ApiConstants.HOST_TAGS) @Param(description="the host tag for the service offering") - private String hostTag; + private String hostTag; @SerializedName(ApiConstants.IS_SYSTEM_OFFERING) @Param(description="is this a system vm offering") private Boolean isSystem; @@ -74,7 +74,7 @@ public class ServiceOfferingResponse extends BaseResponse { @SerializedName(ApiConstants.SYSTEM_VM_TYPE) @Param(description="is this a the systemvm type for system vm offering") private String vm_type; - + @SerializedName(ApiConstants.NETWORKRATE) @Param(description="data transfer rate in megabits per second allowed.") private Integer networkRate; @@ -94,11 +94,11 @@ public class ServiceOfferingResponse extends BaseResponse { public void setName(String name) { this.name = name; } - + public Boolean getIsSystem() { return isSystem; } - + public void setIsSystemOffering(Boolean isSystem) { this.isSystem = isSystem; } @@ -107,16 +107,16 @@ public class ServiceOfferingResponse extends BaseResponse { public Boolean getDefaultUse() { return defaultUse; } - + public void setDefaultUse(Boolean defaultUse) { this.defaultUse = defaultUse; } - + public String getSystemVmType() { return vm_type; } - + public void setSystemVmType(String vmtype) { this.vm_type = vmtype; } @@ -179,13 +179,13 @@ public class ServiceOfferingResponse extends BaseResponse { } public Boolean getLimitCpuUse() { - return limitCpuUse; + return limitCpuUse; } - + public void setLimitCpuUse(Boolean limitCpuUse) { - this.limitCpuUse = limitCpuUse; + this.limitCpuUse = limitCpuUse; } - + public String getTags() { return tags; } @@ -195,28 +195,28 @@ public class ServiceOfferingResponse extends BaseResponse { } public Long getDomainId() { - return domainId.getValue(); - } + return domainId.getValue(); + } - public void setDomainId(Long domainId) { - this.domainId.setValue(domainId); - } + public void setDomainId(Long domainId) { + this.domainId.setValue(domainId); + } - public String getDomain() { - return domain; - } + public String getDomain() { + return domain; + } - public void setDomain(String domain) { - this.domain = domain; - } - - public String getHostTag() { - return hostTag; - } + public void setDomain(String domain) { + this.domain = domain; + } - public void setHostTag(String hostTag) { - this.hostTag = hostTag; - } + public String getHostTag() { + return hostTag; + } + + public void setHostTag(String hostTag) { + this.hostTag = hostTag; + } public void setNetworkRate(Integer networkRate) { this.networkRate = networkRate; diff --git a/api/src/com/cloud/api/response/ServiceResponse.java b/api/src/com/cloud/api/response/ServiceResponse.java index 7e72b51b734..ac7d88b1941 100644 --- a/api/src/com/cloud/api/response/ServiceResponse.java +++ b/api/src/com/cloud/api/response/ServiceResponse.java @@ -27,10 +27,10 @@ public class ServiceResponse extends BaseResponse { @SerializedName(ApiConstants.NAME) @Param(description="the service name") private String name; - + @SerializedName(ApiConstants.PROVIDER) @Param(description="the service provider name") private List providers; - + @SerializedName("capability") @Param(description="the list of capabilities", responseObject = CapabilityResponse.class) private List capabilities; @@ -45,4 +45,4 @@ public class ServiceResponse extends BaseResponse { public void setProviders(List providers) { this.providers = providers; } -} \ No newline at end of file +} diff --git a/api/src/com/cloud/api/response/Site2SiteCustomerGatewayResponse.java b/api/src/com/cloud/api/response/Site2SiteCustomerGatewayResponse.java index b17a46d1ff3..3b06033fa73 100644 --- a/api/src/com/cloud/api/response/Site2SiteCustomerGatewayResponse.java +++ b/api/src/com/cloud/api/response/Site2SiteCustomerGatewayResponse.java @@ -45,41 +45,41 @@ public class Site2SiteCustomerGatewayResponse extends BaseResponse implements Co @SerializedName(ApiConstants.IKE_POLICY) @Param(description="IKE policy of customer gateway") private String ikePolicy; - + @SerializedName(ApiConstants.ESP_POLICY) @Param(description="IPsec policy of customer gateway") private String espPolicy; - + @SerializedName(ApiConstants.IKE_LIFETIME) @Param(description="Lifetime of IKE SA of customer gateway") private Long ikeLifetime; - + @SerializedName(ApiConstants.ESP_LIFETIME) @Param(description="Lifetime of ESP SA of customer gateway") private Long espLifetime; - + @SerializedName(ApiConstants.DPD) @Param(description="if DPD is enabled for customer gateway") private Boolean dpd; - + @SerializedName(ApiConstants.ACCOUNT) @Param(description="the owner") private String accountName; - + @SerializedName(ApiConstants.PROJECT_ID) @Param(description="the project id") private IdentityProxy projectId = new IdentityProxy("projects"); - + @SerializedName(ApiConstants.PROJECT) @Param(description="the project name") private String projectName; @SerializedName(ApiConstants.DOMAIN_ID) @Param(description="the domain id of the owner") private IdentityProxy domainId = new IdentityProxy("domain"); - + @SerializedName(ApiConstants.DOMAIN) @Param(description="the domain name of the owner") private String domain; - + @SerializedName(ApiConstants.REMOVED) @Param(description="the date and time the host was removed") private Date removed; - public void setId(Long id) { - this.id.setValue(id); - } - + public void setId(Long id) { + this.id.setValue(id); + } + public void setName(String name) { this.name = name; } @@ -98,32 +98,32 @@ public class Site2SiteCustomerGatewayResponse extends BaseResponse implements Co public void setIpsecPsk(String ipsecPsk) { this.ipsecPsk = ipsecPsk; - } - + } + public void setIkePolicy(String ikePolicy) { this.ikePolicy = ikePolicy; - } - + } + public void setEspPolicy(String espPolicy) { this.espPolicy = espPolicy; - } - + } + public void setIkeLifetime(Long ikeLifetime) { this.ikeLifetime = ikeLifetime; - } - + } + public void setEspLifetime(Long espLifetime) { this.espLifetime = espLifetime; - } - + } + public void setDpd(Boolean dpd) { this.dpd= dpd; - } - + } + public void setRemoved(Date removed) { this.removed = removed; - } - + } + @Override public void setAccountName(String accountName) { this.accountName = accountName; diff --git a/api/src/com/cloud/api/response/Site2SiteVpnConnectionResponse.java b/api/src/com/cloud/api/response/Site2SiteVpnConnectionResponse.java index 86a7f3162b3..911416bceeb 100644 --- a/api/src/com/cloud/api/response/Site2SiteVpnConnectionResponse.java +++ b/api/src/com/cloud/api/response/Site2SiteVpnConnectionResponse.java @@ -30,13 +30,13 @@ public class Site2SiteVpnConnectionResponse extends BaseResponse implements Cont @SerializedName(ApiConstants.S2S_VPN_GATEWAY_ID) @Param(description="the vpn gateway ID") private IdentityProxy vpnGatewayId= new IdentityProxy("s2s_vpn_gateway"); - + @SerializedName(ApiConstants.PUBLIC_IP) @Param(description="the public IP address") //from VpnGateway private String ip; @SerializedName(ApiConstants.S2S_CUSTOMER_GATEWAY_ID) @Param(description="the customer gateway ID") private IdentityProxy customerGatewayId = new IdentityProxy("s2s_customer_gateway"); - + @SerializedName(ApiConstants.GATEWAY) @Param(description="public ip address id of the customer gateway") //from CustomerGateway private String gatewayIp; @@ -54,85 +54,85 @@ public class Site2SiteVpnConnectionResponse extends BaseResponse implements Cont @SerializedName(ApiConstants.IKE_LIFETIME) @Param(description="Lifetime of IKE SA of customer gateway") //from CustomerGateway private Long ikeLifetime; - + @SerializedName(ApiConstants.ESP_LIFETIME) @Param(description="Lifetime of ESP SA of customer gateway") //from CustomerGateway private Long espLifetime; - + @SerializedName(ApiConstants.DPD) @Param(description="if DPD is enabled for customer gateway") //from CustomerGateway private Boolean dpd; - + @SerializedName(ApiConstants.STATE) @Param(description="State of vpn connection") private String state; - + @SerializedName(ApiConstants.ACCOUNT) @Param(description="the owner") private String accountName; - + @SerializedName(ApiConstants.PROJECT_ID) @Param(description="the project id") private IdentityProxy projectId = new IdentityProxy("projects"); - + @SerializedName(ApiConstants.PROJECT) @Param(description="the project name") private String projectName; @SerializedName(ApiConstants.DOMAIN_ID) @Param(description="the domain id of the owner") private IdentityProxy domainId = new IdentityProxy("domain"); - + @SerializedName(ApiConstants.DOMAIN) @Param(description="the domain name of the owner") private String domain; - + @SerializedName(ApiConstants.CREATED) @Param(description="the date and time the host was created") private Date created; @SerializedName(ApiConstants.REMOVED) @Param(description="the date and time the host was removed") private Date removed; - public void setId(Long id) { - this.id.setValue(id); - } - + public void setId(Long id) { + this.id.setValue(id); + } + public void setVpnGatewayId(Long vpnGatewayId) { this.vpnGatewayId.setValue(vpnGatewayId); } public void setIp(String ip) { - this.ip = ip; - } - + this.ip = ip; + } + public void setCustomerGatewayId(Long customerGatewayId) { this.customerGatewayId.setValue(customerGatewayId); } - + public void setGatewayIp(String gatewayIp) { - this.gatewayIp = gatewayIp; + this.gatewayIp = gatewayIp; } - + public void setGuestCidrList(String guestCidrList) { - this.guestCidrList = guestCidrList; + this.guestCidrList = guestCidrList; } - + public void setIpsecPsk(String ipsecPsk) { - this.ipsecPsk = ipsecPsk; + this.ipsecPsk = ipsecPsk; } - + public void setIkePolicy(String ikePolicy) { - this.ikePolicy = ikePolicy; + this.ikePolicy = ikePolicy; } - + public void setEspPolicy(String espPolicy) { - this.espPolicy = espPolicy; + this.espPolicy = espPolicy; } - + public void setIkeLifetime(Long ikeLifetime) { this.ikeLifetime = ikeLifetime; - } - + } + public void setEspLifetime(Long espLifetime) { this.espLifetime = espLifetime; - } - + } + public void setDpd(Boolean dpd) { this.dpd= dpd; - } - + } + public void setState(String state) { this.state = state; } @@ -143,7 +143,7 @@ public class Site2SiteVpnConnectionResponse extends BaseResponse implements Cont public void setRemoved(Date removed) { this.removed = removed; - } + } @Override public void setAccountName(String accountName) { diff --git a/api/src/com/cloud/api/response/Site2SiteVpnGatewayResponse.java b/api/src/com/cloud/api/response/Site2SiteVpnGatewayResponse.java index a7b9c32e197..0022019d742 100644 --- a/api/src/com/cloud/api/response/Site2SiteVpnGatewayResponse.java +++ b/api/src/com/cloud/api/response/Site2SiteVpnGatewayResponse.java @@ -36,38 +36,38 @@ public class Site2SiteVpnGatewayResponse extends BaseResponse implements Control @SerializedName(ApiConstants.ACCOUNT) @Param(description="the owner") private String accountName; - + @SerializedName(ApiConstants.PROJECT_ID) @Param(description="the project id") private IdentityProxy projectId = new IdentityProxy("projects"); - + @SerializedName(ApiConstants.PROJECT) @Param(description="the project name") private String projectName; @SerializedName(ApiConstants.DOMAIN_ID) @Param(description="the domain id of the owner") private IdentityProxy domainId = new IdentityProxy("domain"); - + @SerializedName(ApiConstants.DOMAIN) @Param(description="the domain name of the owner") private String domain; - + @SerializedName(ApiConstants.REMOVED) @Param(description="the date and time the host was removed") private Date removed; - public void setId(Long id) { - this.id.setValue(id); - } - - public void setIp(String ip) { - this.ip = ip; - } - - public void setVpcId(Long vpcId) { - this.vpcId.setValue(vpcId); - } - + public void setId(Long id) { + this.id.setValue(id); + } + + public void setIp(String ip) { + this.ip = ip; + } + + public void setVpcId(Long vpcId) { + this.vpcId.setValue(vpcId); + } + public void setRemoved(Date removed) { this.removed = removed; - } - + } + @Override public void setAccountName(String accountName) { this.accountName = accountName; diff --git a/api/src/com/cloud/api/response/SnapshotResponse.java b/api/src/com/cloud/api/response/SnapshotResponse.java index ba29fdbaa92..9a6d53f6971 100644 --- a/api/src/com/cloud/api/response/SnapshotResponse.java +++ b/api/src/com/cloud/api/response/SnapshotResponse.java @@ -38,14 +38,14 @@ public class SnapshotResponse extends BaseResponse implements ControlledEntityRe @SerializedName(ApiConstants.DOMAIN_ID) @Param(description = "the domain ID of the snapshot's account") private IdentityProxy domainId = new IdentityProxy("domain"); - + @SerializedName(ApiConstants.DOMAIN) @Param(description = "the domain name of the snapshot's account") private String domainName; - + @SerializedName(ApiConstants.PROJECT_ID) @Param(description="the project id of the snapshot") private IdentityProxy projectId = new IdentityProxy("projects"); - + @SerializedName(ApiConstants.PROJECT) @Param(description="the project name of the snapshot") private String projectName; @@ -66,7 +66,7 @@ public class SnapshotResponse extends BaseResponse implements ControlledEntityRe private String volumeType; @SerializedName(ApiConstants.CREATED) - @Param(description = " the date the snapshot was created") + @Param(description = " the date the snapshot was created") private Date created; @SerializedName(ApiConstants.NAME) @@ -80,7 +80,7 @@ public class SnapshotResponse extends BaseResponse implements ControlledEntityRe @SerializedName(ApiConstants.STATE) @Param(description = "the state of the snapshot. BackedUp means that snapshot is ready to be used; Creating - the snapshot is being allocated on the primary storage; BackingUp - the snapshot is being backed up on secondary storage") private Snapshot.Status state; - + @SerializedName(ApiConstants.TAGS) @Param(description="the list of resource tags associated with snapshot", responseObject = ResourceTagResponse.class) private List tags; @@ -88,7 +88,7 @@ public class SnapshotResponse extends BaseResponse implements ControlledEntityRe public Long getObjectId() { return getId(); } - + private Long getId() { return id.getValue(); } @@ -158,7 +158,7 @@ public class SnapshotResponse extends BaseResponse implements ControlledEntityRe public void setProjectName(String projectName) { this.projectName = projectName; } - + public void setTags(List tags) { this.tags = tags; } diff --git a/api/src/com/cloud/api/response/StaticRouteResponse.java b/api/src/com/cloud/api/response/StaticRouteResponse.java index dabae1c1380..b607e328dec 100644 --- a/api/src/com/cloud/api/response/StaticRouteResponse.java +++ b/api/src/com/cloud/api/response/StaticRouteResponse.java @@ -27,26 +27,26 @@ import com.google.gson.annotations.SerializedName; public class StaticRouteResponse extends BaseResponse implements ControlledEntityResponse{ @SerializedName(ApiConstants.ID) @Param(description="the ID of static route") private IdentityProxy id = new IdentityProxy("static_routes"); - + @SerializedName(ApiConstants.STATE) @Param(description="the state of the static route") private String state; @SerializedName(ApiConstants.VPC_ID) @Param(description="VPC the static route belongs to") private IdentityProxy vpcId = new IdentityProxy("vpc"); - + @SerializedName(ApiConstants.GATEWAY_ID) @Param(description="VPC gateway the route is created for") private IdentityProxy gatewayId = new IdentityProxy("vpc_gateways"); - + @SerializedName(ApiConstants.CIDR) @Param(description="static route CIDR") private String cidr; - + @SerializedName(ApiConstants.ACCOUNT) @Param(description = "the account associated with the static route") private String accountName; - + @SerializedName(ApiConstants.PROJECT_ID) @Param(description="the project id of the static route") private IdentityProxy projectId = new IdentityProxy("projects"); - + @SerializedName(ApiConstants.PROJECT) @Param(description="the project name of the static route") private String projectName; @@ -57,7 +57,7 @@ public class StaticRouteResponse extends BaseResponse implements ControlledEntit @SerializedName(ApiConstants.DOMAIN) @Param(description = "the domain associated with the static route") private String domainName; - + @SerializedName(ApiConstants.TAGS) @Param(description="the list of resource tags associated with static route", responseObject = ResourceTagResponse.class) private List tags; @@ -81,7 +81,7 @@ public class StaticRouteResponse extends BaseResponse implements ControlledEntit public void setCidr(String cidr) { this.cidr = cidr; } - + @Override public void setAccountName(String accountName) { this.accountName = accountName; @@ -91,12 +91,12 @@ public class StaticRouteResponse extends BaseResponse implements ControlledEntit public void setDomainId(Long domainId) { this.domainId.setValue(domainId); } - + @Override public void setDomainName(String domainName) { this.domainName = domainName; } - + @Override public void setProjectId(Long projectId) { this.projectId.setValue(projectId); @@ -106,7 +106,7 @@ public class StaticRouteResponse extends BaseResponse implements ControlledEntit public void setProjectName(String projectName) { this.projectName = projectName; } - + public void setTags(List tags) { this.tags = tags; } diff --git a/api/src/com/cloud/api/response/StatusResponse.java b/api/src/com/cloud/api/response/StatusResponse.java index 336cad7b76a..283766eef12 100644 --- a/api/src/com/cloud/api/response/StatusResponse.java +++ b/api/src/com/cloud/api/response/StatusResponse.java @@ -21,7 +21,7 @@ import com.google.gson.annotations.SerializedName; public class StatusResponse extends BaseResponse { @SerializedName("status") private Boolean status; - + public Boolean getStatus() { return status; } diff --git a/api/src/com/cloud/api/response/StorageNetworkIpRangeResponse.java b/api/src/com/cloud/api/response/StorageNetworkIpRangeResponse.java index f072dd9462c..18e122fbf26 100755 --- a/api/src/com/cloud/api/response/StorageNetworkIpRangeResponse.java +++ b/api/src/com/cloud/api/response/StorageNetworkIpRangeResponse.java @@ -23,10 +23,10 @@ import com.google.gson.annotations.SerializedName; public class StorageNetworkIpRangeResponse extends BaseResponse { @SerializedName(ApiConstants.ID) @Param(description="the uuid of storage network IP range.") private String uuid; - + @SerializedName(ApiConstants.VLAN) @Param(description="the ID or VID of the VLAN.") private Integer vlan; - + @SerializedName(ApiConstants.POD_ID) @Param(description="the Pod uuid for the storage network IP range") private String podUuid; @@ -35,35 +35,35 @@ public class StorageNetworkIpRangeResponse extends BaseResponse { @SerializedName(ApiConstants.END_IP) @Param(description="the end ip of the storage network IP range") private String endIp; - + @SerializedName(ApiConstants.GATEWAY) @Param(description="the gateway of the storage network IP range") private String gateway; - + @SerializedName(ApiConstants.NETWORK_ID) @Param(description="the network uuid of storage network IP range") private String networkUuid; - + @SerializedName(ApiConstants.ZONE_ID) @Param(description="the Zone uuid of the storage network IP range") private String zoneUuid; - + @SerializedName(ApiConstants.NETMASK) @Param(description="the netmask of the storage network IP range") private String netmask; - - public void setUuid(String uuid) { - this.uuid = uuid; - } - + + public void setUuid(String uuid) { + this.uuid = uuid; + } + public void setZoneUuid(String zoneUuid) { this.zoneUuid = zoneUuid; } - + public void setVlan(Integer vlan) { this.vlan = vlan; } - + public void setPodUuid(String podUuid) { this.podUuid = podUuid; } - + public void setStartIp(String startIp) { this.startIp = startIp; } @@ -75,12 +75,12 @@ public class StorageNetworkIpRangeResponse extends BaseResponse { public void setNetworkUuid(String networkUuid) { this.networkUuid = networkUuid; } - + public void setNetmask(String netmask) { - this.netmask = netmask; + this.netmask = netmask; } - + public void setGateway(String gateway) { - this.gateway = gateway; + this.gateway = gateway; } } diff --git a/api/src/com/cloud/api/response/StoragePoolResponse.java b/api/src/com/cloud/api/response/StoragePoolResponse.java index 4dbe104bef2..d0d60ece3a9 100755 --- a/api/src/com/cloud/api/response/StoragePoolResponse.java +++ b/api/src/com/cloud/api/response/StoragePoolResponse.java @@ -66,7 +66,7 @@ public class StoragePoolResponse extends BaseResponse { @SerializedName("disksizeallocated") @Param(description="the host's currently allocated disk size") private Long diskSizeAllocated; - + @SerializedName("disksizeused") @Param(description="the host's currently used disk size") private Long diskSizeUsed; @@ -194,14 +194,14 @@ public class StoragePoolResponse extends BaseResponse { } public Long getDiskSizeUsed() { - return diskSizeUsed; - } + return diskSizeUsed; + } - public void setDiskSizeUsed(Long diskSizeUsed) { - this.diskSizeUsed = diskSizeUsed; - } + public void setDiskSizeUsed(Long diskSizeUsed) { + this.diskSizeUsed = diskSizeUsed; + } - public String getTags() { + public String getTags() { return tags; } @@ -216,5 +216,5 @@ public class StoragePoolResponse extends BaseResponse { public void setState(StoragePoolStatus state) { this.state = state; } - + } diff --git a/api/src/com/cloud/api/response/SuccessResponse.java b/api/src/com/cloud/api/response/SuccessResponse.java index b390e0bd79d..7f221168abe 100644 --- a/api/src/com/cloud/api/response/SuccessResponse.java +++ b/api/src/com/cloud/api/response/SuccessResponse.java @@ -22,10 +22,10 @@ import com.google.gson.annotations.SerializedName; public class SuccessResponse extends BaseResponse { @SerializedName("success") @Param(description="true if operation is executed successfully") private Boolean success = true; - + @SerializedName("displaytext") @Param(description="any text associated with the success or failure") private String displayText; - + public Boolean getSuccess() { return success; } @@ -41,9 +41,9 @@ public class SuccessResponse extends BaseResponse { public void setDisplayText(String displayText) { this.displayText = displayText; } - + public SuccessResponse() {} - + public SuccessResponse(String responseName) { super.setResponseName(responseName); } diff --git a/api/src/com/cloud/api/response/SwiftResponse.java b/api/src/com/cloud/api/response/SwiftResponse.java index 7471f82016d..bf77149444c 100755 --- a/api/src/com/cloud/api/response/SwiftResponse.java +++ b/api/src/com/cloud/api/response/SwiftResponse.java @@ -49,7 +49,7 @@ public class SwiftResponse extends BaseResponse { public Long getObjectId() { return id.getValue(); } - + public void setId(Long id) { this.id.setValue(id); } diff --git a/api/src/com/cloud/api/response/SystemVmInstanceResponse.java b/api/src/com/cloud/api/response/SystemVmInstanceResponse.java index cae526efe57..322c5323981 100644 --- a/api/src/com/cloud/api/response/SystemVmInstanceResponse.java +++ b/api/src/com/cloud/api/response/SystemVmInstanceResponse.java @@ -38,11 +38,11 @@ public class SystemVmInstanceResponse extends BaseResponse { @SerializedName("state") @Param(description="the state of the system VM") private String state; - + @SerializedName("role") @Param(description="the role of the system VM") private String role; - - + + public Long getObjectId() { return getId(); } @@ -86,13 +86,13 @@ public class SystemVmInstanceResponse extends BaseResponse { public void setState(String state) { this.state = state; } - + public String getRole() { return role; } public void setRole(String role) { this.role = role; - } + } } diff --git a/api/src/com/cloud/api/response/SystemVmResponse.java b/api/src/com/cloud/api/response/SystemVmResponse.java index 86b8493d077..40ca34b68b8 100644 --- a/api/src/com/cloud/api/response/SystemVmResponse.java +++ b/api/src/com/cloud/api/response/SystemVmResponse.java @@ -74,7 +74,7 @@ public class SystemVmResponse extends BaseResponse { @SerializedName(ApiConstants.PRIVATE_NETMASK) @Param(description="the private netmask for the system VM") private String privateNetmask; - + @SerializedName(ApiConstants.LINK_LOCAL_IP) @Param(description="the link local IP address for the system vm") private String linkLocalIp; @@ -101,18 +101,18 @@ public class SystemVmResponse extends BaseResponse { @SerializedName("state") @Param(description="the state of the system VM") private String state; - + @SerializedName("activeviewersessions") @Param(description="the number of active console sessions for the console proxy system vm") private Integer activeViewerSessions; - + private Long objectId; - + public Long getObjectId() { - return objectId; + return objectId; } - + public void setObjectId(Long objectId) { - this.objectId = objectId; + this.objectId = objectId; } public Long getId() { diff --git a/api/src/com/cloud/api/response/TemplatePermissionsResponse.java b/api/src/com/cloud/api/response/TemplatePermissionsResponse.java index 9058afb743c..b578f66c5dc 100644 --- a/api/src/com/cloud/api/response/TemplatePermissionsResponse.java +++ b/api/src/com/cloud/api/response/TemplatePermissionsResponse.java @@ -36,10 +36,10 @@ public class TemplatePermissionsResponse extends BaseResponse { @SerializedName(ApiConstants.ACCOUNT) @Param(description="the list of accounts the template is available for") private List accountNames; - + @SerializedName(ApiConstants.PROJECT_IDS) @Param(description="the list of projects the template is available for") private List projectIds; - + public void setId(Long id) { this.id.setValue(id); diff --git a/api/src/com/cloud/api/response/TemplateResponse.java b/api/src/com/cloud/api/response/TemplateResponse.java index 950071a374d..3cb693811be 100755 --- a/api/src/com/cloud/api/response/TemplateResponse.java +++ b/api/src/com/cloud/api/response/TemplateResponse.java @@ -97,7 +97,7 @@ public class TemplateResponse extends BaseResponse implements ControlledEntityRe private String hypervisor; @SerializedName(ApiConstants.DOMAIN) @Param(description="the name of the domain to which the template belongs") - private String domainName; + private String domainName; @SerializedName(ApiConstants.DOMAIN_ID) @Param(description="the ID of the domain to which the template belongs") private IdentityProxy domainId = new IdentityProxy("domain"); @@ -109,7 +109,7 @@ public class TemplateResponse extends BaseResponse implements ControlledEntityRe private String checksum; @SerializedName("sourcetemplateid") @Param(description="the template ID of the parent template if present") - private IdentityProxy sourcetemplateId = new IdentityProxy("vm_template"); + private IdentityProxy sourcetemplateId = new IdentityProxy("vm_template"); @SerializedName(ApiConstants.HOST_ID) @Param(description="the ID of the secondary storage host for the template") private IdentityProxy hostId = new IdentityProxy("host"); @@ -119,25 +119,25 @@ public class TemplateResponse extends BaseResponse implements ControlledEntityRe @SerializedName(ApiConstants.TEMPLATE_TAG) @Param(description="the tag of this template") private String templateTag; - + @SerializedName(ApiConstants.PROJECT_ID) @Param(description="the project id of the template") private IdentityProxy projectId = new IdentityProxy("projects"); - + @SerializedName(ApiConstants.PROJECT) @Param(description="the project name of the template") private String projectName; - + @SerializedName(ApiConstants.DETAILS) @Param(description="additional key/value details tied with template") private Map details; - + @SerializedName(ApiConstants.TAGS) @Param(description="the list of resource tags associated with tempate", responseObject = ResourceTagResponse.class) private List tags; - + @Override public Long getObjectId() { return getId(); } - + public Long getId() { return id.getValue(); } @@ -229,7 +229,7 @@ public class TemplateResponse extends BaseResponse implements ControlledEntityRe public void setHypervisor(String hypervisor) { this.hypervisor = hypervisor; } - + @Override public void setDomainName(String domainName) { this.domainName = domainName; @@ -250,7 +250,7 @@ public class TemplateResponse extends BaseResponse implements ControlledEntityRe public void setSourceTemplateId(Long sourcetemplateId) { this.sourcetemplateId.setValue(sourcetemplateId); - } + } public void setHostId(Long hostId) { this.hostId.setValue(hostId); @@ -263,7 +263,7 @@ public class TemplateResponse extends BaseResponse implements ControlledEntityRe public void setTemplateTag(String templateTag) { this.templateTag = templateTag; } - + @Override public void setProjectId(Long projectId) { this.projectId.setValue(projectId); @@ -273,15 +273,15 @@ public class TemplateResponse extends BaseResponse implements ControlledEntityRe public void setProjectName(String projectName) { this.projectName = projectName; } - + public Map getDetails() { - return this.details; + return this.details; } - + public void setDetails(Map details) { - this.details = details; + this.details = details; } - + public void setTags(List tags) { this.tags = tags; } diff --git a/api/src/com/cloud/api/response/TrafficTypeImplementorResponse.java b/api/src/com/cloud/api/response/TrafficTypeImplementorResponse.java index 29d6b950e9b..b2691b3585e 100755 --- a/api/src/com/cloud/api/response/TrafficTypeImplementorResponse.java +++ b/api/src/com/cloud/api/response/TrafficTypeImplementorResponse.java @@ -21,17 +21,17 @@ import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; public class TrafficTypeImplementorResponse extends BaseResponse { - @SerializedName(ApiConstants.TRAFFIC_TYPE) @Param(description="network traffic type") - private String trafficType; - - @SerializedName(ApiConstants.TRAFFIC_TYPE_IMPLEMENTOR) @Param(description="implementor of network traffic type") - private String implementor; - - public void setTrafficType(String type) { - this.trafficType = type; - } - - public void setImplementor(String impl) { - this.implementor = impl; - } + @SerializedName(ApiConstants.TRAFFIC_TYPE) @Param(description="network traffic type") + private String trafficType; + + @SerializedName(ApiConstants.TRAFFIC_TYPE_IMPLEMENTOR) @Param(description="implementor of network traffic type") + private String implementor; + + public void setTrafficType(String type) { + this.trafficType = type; + } + + public void setImplementor(String impl) { + this.implementor = impl; + } } diff --git a/api/src/com/cloud/api/response/TrafficTypeResponse.java b/api/src/com/cloud/api/response/TrafficTypeResponse.java index 3b63683be4a..cca7f63f5ec 100644 --- a/api/src/com/cloud/api/response/TrafficTypeResponse.java +++ b/api/src/com/cloud/api/response/TrafficTypeResponse.java @@ -28,10 +28,10 @@ public class TrafficTypeResponse extends BaseResponse { @SerializedName(ApiConstants.TRAFFIC_TYPE) @Param(description="the trafficType to be added to the physical network") private String trafficType; - + @SerializedName(ApiConstants.PHYSICAL_NETWORK_ID) @Param(description="the physical network this belongs to") private IdentityProxy physicalNetworkId = new IdentityProxy("physical_network"); - + @SerializedName(ApiConstants.XEN_NETWORK_LABEL) @Param(description="The network name label of the physical device dedicated to this traffic on a XenServer host") private String xenNetworkLabel; @@ -48,23 +48,23 @@ public class TrafficTypeResponse extends BaseResponse { public long getphysicalNetworkId() { return physicalNetworkId.getValue(); } - + public void setId(String uuid) { this.id = uuid; } - + public String getId() { return this.id; } - + public String getTrafficType() { return trafficType; } - + public void setTrafficType(String trafficType) { this.trafficType = trafficType; } - + public String getXenLabel() { return xenNetworkLabel; } @@ -72,7 +72,7 @@ public class TrafficTypeResponse extends BaseResponse { public String getKvmLabel() { return kvmNetworkLabel; } - + public void setXenLabel(String xenLabel) { this.xenNetworkLabel = xenLabel; } @@ -83,8 +83,8 @@ public class TrafficTypeResponse extends BaseResponse { public void setVmwareLabel(String vmwareNetworkLabel) { this.vmwareNetworkLabel = vmwareNetworkLabel; - } - + } + public String getVmwareLabel() { return vmwareNetworkLabel; } diff --git a/api/src/com/cloud/api/response/UpgradeVmResponse.java b/api/src/com/cloud/api/response/UpgradeVmResponse.java index 9e272fb9e91..079d1a5cd07 100644 --- a/api/src/com/cloud/api/response/UpgradeVmResponse.java +++ b/api/src/com/cloud/api/response/UpgradeVmResponse.java @@ -24,7 +24,7 @@ import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; public class UpgradeVmResponse extends BaseResponse { - @SerializedName("id") + @SerializedName("id") private IdentityProxy id = new IdentityProxy("vm_instance"); public String getName() { @@ -268,7 +268,7 @@ public class UpgradeVmResponse extends BaseResponse { @SerializedName("templatename") @Param(description="the name of the template for the virtual machine") private String templateName; - @SerializedName("templatedisplaytext") @Param(description=" an alternate display text of the template for the virtual machine") + @SerializedName("templatedisplaytext") @Param(description=" an alternate display text of the template for the virtual machine") private String templateDisplayText; @SerializedName("passwordenabled") @Param(description="true if the password rest feature is enabled, false otherwise") diff --git a/api/src/com/cloud/api/response/UserResponse.java b/api/src/com/cloud/api/response/UserResponse.java index d6afa71abc1..6ecede61351 100644 --- a/api/src/com/cloud/api/response/UserResponse.java +++ b/api/src/com/cloud/api/response/UserResponse.java @@ -68,7 +68,7 @@ public class UserResponse extends BaseResponse { @SerializedName("accountid") @Param(description="the account ID of the user") private IdentityProxy accountId = new IdentityProxy("account"); - + public Long getId() { return id.getValue(); } diff --git a/api/src/com/cloud/api/response/UserVmResponse.java b/api/src/com/cloud/api/response/UserVmResponse.java index 6f8f0809c8b..d1f70e065bc 100755 --- a/api/src/com/cloud/api/response/UserVmResponse.java +++ b/api/src/com/cloud/api/response/UserVmResponse.java @@ -37,10 +37,10 @@ public class UserVmResponse extends BaseResponse implements ControlledEntityResp @SerializedName(ApiConstants.ACCOUNT) @Param(description="the account associated with the virtual machine") private String accountName; - + @SerializedName(ApiConstants.PROJECT_ID) @Param(description="the project id of the vm") private IdentityProxy projectId = new IdentityProxy("projects"); - + @SerializedName(ApiConstants.PROJECT) @Param(description="the project name of the vm") private String projectName; @@ -83,7 +83,7 @@ public class UserVmResponse extends BaseResponse implements ControlledEntityResp @SerializedName("templatename") @Param(description="the name of the template for the virtual machine") private String templateName; - @SerializedName("templatedisplaytext") @Param(description=" an alternate display text of the template for the virtual machine") + @SerializedName("templatedisplaytext") @Param(description=" an alternate display text of the template for the virtual machine") private String templateDisplayText; @SerializedName(ApiConstants.PASSWORD_ENABLED) @Param(description="true if the password rest feature is enabled, false otherwise") @@ -103,7 +103,7 @@ public class UserVmResponse extends BaseResponse implements ControlledEntityResp @SerializedName("serviceofferingname") @Param(description="the name of the service offering of the virtual machine") private String serviceOfferingName; - + @SerializedName("forvirtualnetwork") @Param(description="the virtual network for the service offering") private Boolean forVirtualNetwork; @@ -118,7 +118,7 @@ public class UserVmResponse extends BaseResponse implements ControlledEntityResp @SerializedName("cpuused") @Param(description="the amount of the vm's CPU currently used") private String cpuUsed; - + @SerializedName("networkkbsread") @Param(description="the incoming network traffic on the vm") private Long networkKbsRead; @@ -142,29 +142,29 @@ public class UserVmResponse extends BaseResponse implements ControlledEntityResp @SerializedName("nic") @Param(description="the list of nics associated with vm", responseObject = NicResponse.class) private List 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"); - + @SerializedName(ApiConstants.PUBLIC_IP) @Param(description="public IP address id associated with vm via Static nat rule") private String publicIp; - + @SerializedName(ApiConstants.INSTANCE_NAME) @Param(description="instance name of the user vm; this parameter is returned to the ROOT admin only", since="3.0.1") private String instanceName; - + @SerializedName(ApiConstants.TAGS) @Param(description="the list of resource tags associated with vm", responseObject = ResourceTagResponse.class) private List tags; @SerializedName(ApiConstants.SSH_KEYPAIR) @Param(description="ssh key-pair") private String keyPairName; - public void setHypervisor(String hypervisor) { - this.hypervisor = hypervisor; - } - + public void setHypervisor(String hypervisor) { + this.hypervisor = hypervisor; + } + public void setId(Long id) { this.id.setValue(id); } @@ -305,7 +305,7 @@ public class UserVmResponse extends BaseResponse implements ControlledEntityResp this.password = password; } -/* +/* public void setJobId(Long jobId) { super.setJobId(jobId); } @@ -325,17 +325,17 @@ public class UserVmResponse extends BaseResponse implements ControlledEntityResp public void setSecurityGroupList(List securityGroups) { this.securityGroupList = securityGroups; } - + @Override public void setProjectId(Long projectId) { this.projectId.setValue(projectId); } - + @Override public void setProjectName(String projectName) { this.projectName = projectName; } - + public void setPublicIpId(Long publicIpId) { this.publicIpId.setValue(publicIpId); } diff --git a/api/src/com/cloud/api/response/VirtualRouterProviderResponse.java b/api/src/com/cloud/api/response/VirtualRouterProviderResponse.java index 15710b29e9b..8f27ff3654e 100644 --- a/api/src/com/cloud/api/response/VirtualRouterProviderResponse.java +++ b/api/src/com/cloud/api/response/VirtualRouterProviderResponse.java @@ -24,19 +24,19 @@ import com.google.gson.annotations.SerializedName; public class VirtualRouterProviderResponse extends BaseResponse implements ControlledEntityResponse { @SerializedName(ApiConstants.ID) @Param(description="the id of the router") private IdentityProxy id = new IdentityProxy("virtual_router_providers"); - + @SerializedName(ApiConstants.NSP_ID) @Param(description="the physical network service provider id of the provider") private IdentityProxy nspId = new IdentityProxy("physical_network_service_providers"); - + @SerializedName(ApiConstants.ENABLED) @Param(description="Enabled/Disabled the service provider") private Boolean enabled; @SerializedName(ApiConstants.ACCOUNT) @Param(description="the account associated with the provider") private String accountName; - + @SerializedName(ApiConstants.PROJECT_ID) @Param(description="the project id of the ipaddress") private Long projectId; - + @SerializedName(ApiConstants.PROJECT) @Param(description="the project name of the address") private String projectName; @@ -45,7 +45,7 @@ public class VirtualRouterProviderResponse extends BaseResponse implements Contr @SerializedName(ApiConstants.DOMAIN) @Param(description="the domain associated with the provider") private String domainName; - + @Override public void setAccountName(String accountName) { this.accountName = accountName; diff --git a/api/src/com/cloud/api/response/VlanIpRangeResponse.java b/api/src/com/cloud/api/response/VlanIpRangeResponse.java index 197e3fb87f8..527e27239bc 100644 --- a/api/src/com/cloud/api/response/VlanIpRangeResponse.java +++ b/api/src/com/cloud/api/response/VlanIpRangeResponse.java @@ -64,16 +64,16 @@ public class VlanIpRangeResponse extends BaseResponse implements ControlledEntit @SerializedName(ApiConstants.END_IP) @Param(description="the end ip of the VLAN IP range") private String endIp; - + @SerializedName(ApiConstants.NETWORK_ID) @Param(description="the network id of vlan range") private IdentityProxy networkId = new IdentityProxy("networks"); - + @SerializedName(ApiConstants.PROJECT_ID) @Param(description="the project id of the vlan range") private IdentityProxy projectId = new IdentityProxy("projects"); - + @SerializedName(ApiConstants.PROJECT) @Param(description="the project name of the vlan range") private String projectName; - + @SerializedName(ApiConstants.PHYSICAL_NETWORK_ID) @Param(description="the physical network this belongs to") private IdentityProxy physicalNetworkId = new IdentityProxy("physical_network"); @@ -88,11 +88,11 @@ public class VlanIpRangeResponse extends BaseResponse implements ControlledEntit public void setZoneId(Long zoneId) { this.zoneId.setValue(zoneId); } - + public void setVlan(String vlan) { this.vlan = vlan; } - + public void setAccountName(String accountName) { this.accountName = accountName; } @@ -136,7 +136,7 @@ public class VlanIpRangeResponse extends BaseResponse implements ControlledEntit public void setNetworkId(Long networkId) { this.networkId.setValue(networkId); } - + @Override public void setProjectId(Long projectId) { this.projectId.setValue(projectId); @@ -146,12 +146,12 @@ public class VlanIpRangeResponse extends BaseResponse implements ControlledEntit public void setProjectName(String projectName) { this.projectName = projectName; } - + public void setPhysicalNetworkId(long physicalNetworkId) { this.physicalNetworkId.setValue(physicalNetworkId); } public long getphysicalNetworkId() { return physicalNetworkId.getValue(); - } + } } diff --git a/api/src/com/cloud/api/response/VolumeResponse.java b/api/src/com/cloud/api/response/VolumeResponse.java index 2d9728713e0..07722780b18 100755 --- a/api/src/com/cloud/api/response/VolumeResponse.java +++ b/api/src/com/cloud/api/response/VolumeResponse.java @@ -81,10 +81,10 @@ public class VolumeResponse extends BaseResponse implements ControlledEntityResp @SerializedName(ApiConstants.ACCOUNT) @Param(description = "the account associated with the disk volume") private String accountName; - + @SerializedName(ApiConstants.PROJECT_ID) @Param(description="the project id of the vpn") private IdentityProxy projectId = new IdentityProxy("projects"); - + @SerializedName(ApiConstants.PROJECT) @Param(description="the project name of the vpn") private String projectName; @@ -147,11 +147,11 @@ public class VolumeResponse extends BaseResponse implements ControlledEntityResp @SerializedName("isextractable") @Param(description = "true if the volume is extractable, false otherwise") private Boolean extractable; - + @SerializedName(ApiConstants.STATUS) @Param(description="the status of the volume") private String status; - + @SerializedName(ApiConstants.TAGS) @Param(description="the list of resource tags associated with volume", responseObject = ResourceTagResponse.class) private List tags; @@ -183,7 +183,7 @@ public class VolumeResponse extends BaseResponse implements ControlledEntityResp public void setZoneId(Long zoneId) { this.zoneId.setValue(zoneId); } - + public void setZoneName(String zoneName) { this.zoneName = zoneName; } @@ -227,7 +227,7 @@ public class VolumeResponse extends BaseResponse implements ControlledEntityResp public void setDomainId(Long domainId) { this.domainId.setValue(domainId); } - + public void setDomainName(String domainName) { this.domainName = domainName; } @@ -273,10 +273,10 @@ public class VolumeResponse extends BaseResponse implements ControlledEntityResp } public void setStatus(String status) { - this.status = status; - } + this.status = status; + } - public void setServiceOfferingDisplayText(String serviceOfferingDisplayText) { + public void setServiceOfferingDisplayText(String serviceOfferingDisplayText) { this.serviceOfferingDisplayText = serviceOfferingDisplayText; } @@ -287,7 +287,7 @@ public class VolumeResponse extends BaseResponse implements ControlledEntityResp public void setState(String state) { this.state = state; } - + @Override public void setProjectId(Long projectId) { this.projectId.setValue(projectId); @@ -297,7 +297,7 @@ public class VolumeResponse extends BaseResponse implements ControlledEntityResp public void setProjectName(String projectName) { this.projectName = projectName; } - + public void setTags(List tags) { this.tags = tags; } diff --git a/api/src/com/cloud/api/response/VpcOfferingResponse.java b/api/src/com/cloud/api/response/VpcOfferingResponse.java index 6c20c3415f9..14d5c9ca564 100644 --- a/api/src/com/cloud/api/response/VpcOfferingResponse.java +++ b/api/src/com/cloud/api/response/VpcOfferingResponse.java @@ -31,22 +31,22 @@ public class VpcOfferingResponse extends BaseResponse{ @SerializedName(ApiConstants.NAME) @Param(description="the name of the vpc offering") private String name; - + @SerializedName(ApiConstants.DISPLAY_TEXT) @Param(description="an alternate display text of the vpc offering.") private String displayText; - + @SerializedName(ApiConstants.CREATED) @Param(description="the date this vpc offering was created") private Date created; - + @SerializedName(ApiConstants.IS_DEFAULT) @Param(description="true if vpc offering is default, false otherwise") private Boolean isDefault; - + @SerializedName(ApiConstants.STATE) @Param(description="state of the vpc offering. Can be Disabled/Enabled") private String state; - + @SerializedName(ApiConstants.SERVICE) @Param(description="the list of supported services", responseObject = ServiceResponse.class) private List services; - + public void setId(Long id) { this.id.setValue(id); @@ -71,7 +71,7 @@ public class VpcOfferingResponse extends BaseResponse{ public void setServices(List services) { this.services = services; } - + public void setState(String state) { this.state = state; } diff --git a/api/src/com/cloud/api/response/VpcResponse.java b/api/src/com/cloud/api/response/VpcResponse.java index d94a796e298..88a46106ab9 100644 --- a/api/src/com/cloud/api/response/VpcResponse.java +++ b/api/src/com/cloud/api/response/VpcResponse.java @@ -31,55 +31,55 @@ public class VpcResponse extends BaseResponse implements ControlledEntityRespons @SerializedName(ApiConstants.NAME) @Param(description="the name of the VPC") private String name; - + @SerializedName(ApiConstants.DISPLAY_TEXT) @Param(description="an alternate display text of the VPC.") private String displayText; - + @SerializedName(ApiConstants.STATE) @Param(description="state of the VPC. Can be Inactive/Enabled") private String state; - + @SerializedName(ApiConstants.ZONE_ID) @Param(description="zone id of the vpc") private IdentityProxy zoneId = new IdentityProxy("data_center"); - + @SerializedName(ApiConstants.ZONE_NAME) @Param(description="the name of the zone the VPC belongs to") private String zoneName; - + @SerializedName(ApiConstants.SERVICE) @Param(description="the list of supported services", responseObject = ServiceResponse.class) private List services; - + @SerializedName(ApiConstants.CIDR) @Param(description="the cidr the VPC") private String cidr; - + @SerializedName(ApiConstants.VPC_OFF_ID) @Param(description="vpc offering id the VPC is created from") private IdentityProxy vpcOfferingId = new IdentityProxy("vpc_offerings"); - + @SerializedName(ApiConstants.CREATED) @Param(description="the date this VPC was created") private Date created; - + @SerializedName(ApiConstants.ACCOUNT) @Param(description="the owner of the VPC") private String accountName; - + @SerializedName(ApiConstants.PROJECT_ID) @Param(description="the project id of the VPC") private IdentityProxy projectId = new IdentityProxy("projects"); - + @SerializedName(ApiConstants.PROJECT) @Param(description="the project name of the VPC") private String projectName; @SerializedName(ApiConstants.DOMAIN_ID) @Param(description="the domain id of the VPC owner") private IdentityProxy domainId = new IdentityProxy("domain"); - + @SerializedName(ApiConstants.DOMAIN) @Param(description="the domain name of the owner") private String domain; - + @SerializedName(ApiConstants.NETWORK) @Param(description="the list of networks belongign to the VPC", responseObject = NetworkResponse.class) private List networks; - + @SerializedName(ApiConstants.RESTART_REQUIRED) @Param(description="true VPC requires restart") private Boolean restartRequired; - + @SerializedName(ApiConstants.NETWORK_DOMAIN) @Param(description="the network domain of the VPC") private String networkDomain; - + @SerializedName(ApiConstants.TAGS) @Param(description="the list of resource tags associated with the project", responseObject = ResourceTagResponse.class) private List tags; @@ -102,7 +102,7 @@ public class VpcResponse extends BaseResponse implements ControlledEntityRespons public void setServices(List services) { this.services = services; } - + public void setState(String state) { this.state = state; } @@ -139,7 +139,7 @@ public class VpcResponse extends BaseResponse implements ControlledEntityRespons public void setCidr(String cidr) { this.cidr = cidr; } - + public void setVpcOfferingId(Long vpcOfferingId) { this.vpcOfferingId.setValue(vpcOfferingId); } @@ -151,19 +151,19 @@ public class VpcResponse extends BaseResponse implements ControlledEntityRespons public void setNetworks(List networks) { this.networks = networks; } - + public void setRestartRequired(Boolean restartRequired) { this.restartRequired = restartRequired; } - + public void setNetworkDomain(String networkDomain) { this.networkDomain = networkDomain; } - + public void setZoneName(String zoneName) { this.zoneName = zoneName; } - + public void setTags(List tags) { this.tags = tags; } diff --git a/api/src/com/cloud/api/response/VpnUsersResponse.java b/api/src/com/cloud/api/response/VpnUsersResponse.java index 97f2686f47b..db12593c0ed 100644 --- a/api/src/com/cloud/api/response/VpnUsersResponse.java +++ b/api/src/com/cloud/api/response/VpnUsersResponse.java @@ -37,18 +37,18 @@ public class VpnUsersResponse extends BaseResponse implements ControlledEntityRe @SerializedName(ApiConstants.DOMAIN) @Param(description="the domain name of the account of the remote access vpn") private String domainName; - + @SerializedName(ApiConstants.PROJECT_ID) @Param(description="the project id of the vpn") private IdentityProxy projectId = new IdentityProxy("projects"); - + @SerializedName(ApiConstants.PROJECT) @Param(description="the project name of the vpn") private String projectName; - + public void setId(Long id) { this.id.setValue(id); } - + public void setUserName(String name) { this.userName = name; } @@ -62,9 +62,9 @@ public class VpnUsersResponse extends BaseResponse implements ControlledEntityRe } public void setDomainName(String name) { - this.domainName = name; + this.domainName = name; } - + @Override public void setProjectId(Long projectId) { this.projectId.setValue(projectId); @@ -73,6 +73,6 @@ public class VpnUsersResponse extends BaseResponse implements ControlledEntityRe @Override public void setProjectName(String projectName) { this.projectName = projectName; - } + } } diff --git a/api/src/com/cloud/api/response/ZoneResponse.java b/api/src/com/cloud/api/response/ZoneResponse.java index 69c83cbe577..147e8a70db4 100755 --- a/api/src/com/cloud/api/response/ZoneResponse.java +++ b/api/src/com/cloud/api/response/ZoneResponse.java @@ -45,44 +45,44 @@ public class ZoneResponse extends BaseResponse { @SerializedName(ApiConstants.INTERNAL_DNS2) @Param(description="the second internal DNS for the Zone") private String internalDns2; - + @SerializedName(ApiConstants.VLAN) @Param(description="the vlan range of the zone") private String vlan; @SerializedName(ApiConstants.GUEST_CIDR_ADDRESS) @Param(description="the guest CIDR address for the Zone") private String guestCidrAddress; - + //TODO - generate description @SerializedName("status") private String status; @SerializedName(ApiConstants.DISPLAY_TEXT) @Param(description="the display text of the zone") private String displayText; - + @SerializedName(ApiConstants.DOMAIN) @Param(description="Network domain name for the networks in the zone") private String domain; @SerializedName(ApiConstants.DOMAIN_ID) @Param(description="the ID of the containing domain, null for public zones") private Long domainId; - + @SerializedName("domainname") @Param(description="the name of the containing domain, null for public zones") private String domainName; - + @SerializedName(ApiConstants.NETWORK_TYPE) @Param(description="the network type of the zone; can be Basic or Advanced") private String networkType; - + @SerializedName("securitygroupsenabled") @Param(description="true if security groups support is enabled, false otherwise") private boolean securityGroupsEnabled; - + @SerializedName("allocationstate") @Param(description="the allocation state of the cluster") - private String allocationState; - + private String allocationState; + @SerializedName(ApiConstants.ZONE_TOKEN) @Param(description="Zone Token") - private String zoneToken; - + private String zoneToken; + @SerializedName(ApiConstants.DHCP_PROVIDER) @Param(description="the dhcp Provider for the Zone") - private String dhcpProvider; - + private String dhcpProvider; + @SerializedName("capacity") @Param(description="the capacity of the Zone", responseObject = CapacityResponse.class) private List capacitites; @@ -140,7 +140,7 @@ public class ZoneResponse extends BaseResponse { public void setDomainId(Long domainId) { this.domainId = domainId; } - + public void setType(String networkType) { this.networkType = networkType; } @@ -148,11 +148,11 @@ public class ZoneResponse extends BaseResponse { public void setSecurityGroupsEnabled(boolean securityGroupsEnabled) { this.securityGroupsEnabled = securityGroupsEnabled; } - + public void setAllocationState(String allocationState) { this.allocationState = allocationState; } - + public void setZoneToken(String zoneToken) { this.zoneToken = zoneToken; } diff --git a/api/src/com/cloud/capacity/Capacity.java b/api/src/com/cloud/capacity/Capacity.java index 2da2a672ce3..d698189bca6 100755 --- a/api/src/com/cloud/capacity/Capacity.java +++ b/api/src/com/cloud/capacity/Capacity.java @@ -42,10 +42,10 @@ public interface Capacity { public long getTotalCapacity(); - public short getCapacityType(); + public short getCapacityType(); public long getReservedCapacity(); - + public Float getUsedPercentage(); diff --git a/api/src/com/cloud/capacity/CapacityState.java b/api/src/com/cloud/capacity/CapacityState.java index be17663f602..b368567c022 100755 --- a/api/src/com/cloud/capacity/CapacityState.java +++ b/api/src/com/cloud/capacity/CapacityState.java @@ -17,9 +17,9 @@ package com.cloud.capacity; public enum CapacityState { - + Enabled, - Disabled, + Disabled, Maintenance, - + } diff --git a/api/src/com/cloud/configuration/ConfigurationService.java b/api/src/com/cloud/configuration/ConfigurationService.java index 78d7a2250a9..c4ed278cfc8 100644 --- a/api/src/com/cloud/configuration/ConfigurationService.java +++ b/api/src/com/cloud/configuration/ConfigurationService.java @@ -57,7 +57,7 @@ public interface ConfigurationService { /** * Updates a configuration entry with a new value - * + * * @param cmd * - the command wrapping name and value parameters * @return updated configuration object if successful @@ -66,7 +66,7 @@ public interface ConfigurationService { /** * Create a service offering through the API - * + * * @param cmd * the command object that specifies the name, number of cpu cores, amount of RAM, etc. for the service * offering @@ -76,7 +76,7 @@ public interface ConfigurationService { /** * Updates a service offering - * + * * @param serviceOfferingId * @param userId * @param name @@ -90,7 +90,7 @@ public interface ConfigurationService { /** * Deletes a service offering - * + * * @param userId * @param serviceOfferingId */ @@ -98,7 +98,7 @@ public interface ConfigurationService { /** * Updates a disk offering - * + * * @param cmd * - the command specifying diskOfferingId, name, description, tags * @return updated disk offering @@ -108,7 +108,7 @@ public interface ConfigurationService { /** * Deletes a disk offering - * + * * @param cmd * - the command specifying disk offering id * @return true or false @@ -118,7 +118,7 @@ public interface ConfigurationService { /** * Creates a new disk offering - * + * * @param domainId * @param name * @param description @@ -131,7 +131,7 @@ public interface ConfigurationService { /** * Creates a new pod based on the parameters specified in the command object - * + * * @param zoneId * TODO * @param name @@ -154,7 +154,7 @@ public interface ConfigurationService { /** * Edits a pod in the database. Will not allow you to edit pods that are being used anywhere in the system. - * + * * @param UpdatePodCmd * api command */ @@ -162,7 +162,7 @@ public interface ConfigurationService { /** * Deletes a pod from the database. Will not allow you to delete pods that are being used anywhere in the system. - * + * * @param cmd * - the command containing podId * @return true or false @@ -172,7 +172,7 @@ public interface ConfigurationService { /** * Creates a new zone - * + * * @param cmd * @return the zone if successful, null otherwise * @throws @@ -182,7 +182,7 @@ public interface ConfigurationService { /** * Edits a zone in the database. Will not allow you to edit DNS values if there are VMs in the specified zone. - * + * * @param UpdateZoneCmd * @return Updated zone */ @@ -190,7 +190,7 @@ public interface ConfigurationService { /** * Deletes a zone from the database. Will not allow you to delete zones that are being used anywhere in the system. - * + * * @param userId * @param zoneId */ @@ -200,7 +200,7 @@ public interface ConfigurationService { * Adds a VLAN to the database, along with an IP address range. Can add three types of VLANs: (1) zone-wide VLANs on * the * virtual public network (2) pod-wide direct attached VLANs (3) account-specific direct attached VLANs - * + * * @param userId * @param vlanType * - either "DomR" (VLAN for a virtual public network) or "DirectAttached" (VLAN for IPs that will be diff --git a/api/src/com/cloud/dao/EntityManager.java b/api/src/com/cloud/dao/EntityManager.java index 0e5b07f51e4..552e69dabd4 100644 --- a/api/src/com/cloud/dao/EntityManager.java +++ b/api/src/com/cloud/dao/EntityManager.java @@ -37,7 +37,7 @@ public interface EntityManager { * @return T if found; null if not. */ public T findById(Class entityType, K id); - + /** * Finds an entity by external id which is always String * @param entity class @@ -46,7 +46,7 @@ public interface EntityManager { * @return T if found, null if not. */ public T findByXid(Class entityType, String xid); - + /** * Lists all entities. Use this method at your own risk. * @param entity class @@ -54,7 +54,7 @@ public interface EntityManager { * @return List */ public List list(Class entityType); - + /** * Persists the entity. * @param entity class @@ -62,13 +62,13 @@ public interface EntityManager { * @return persisted entity. Only use this after persisting. */ public T persist(T t); - + public SearchBuilder createSearchBuilder(Class entityType); - + public GenericSearchBuilder createGenericSearchBuilder(Class entityType, Class resultType); - + public List search(Class entityType, SearchCriteria sc); - + public void remove(Class entityType, K id); } diff --git a/api/src/com/cloud/dc/Pod.java b/api/src/com/cloud/dc/Pod.java index 791c5ad2c2d..d0a2ce913af 100644 --- a/api/src/com/cloud/dc/Pod.java +++ b/api/src/com/cloud/dc/Pod.java @@ -20,7 +20,7 @@ import com.cloud.org.Grouping; /** * Represents one pod in the cloud stack. - * + * */ public interface Pod extends Grouping { /** diff --git a/api/src/com/cloud/dc/StorageNetworkIpRange.java b/api/src/com/cloud/dc/StorageNetworkIpRange.java index 59aa98ae11e..8786251468a 100755 --- a/api/src/com/cloud/dc/StorageNetworkIpRange.java +++ b/api/src/com/cloud/dc/StorageNetworkIpRange.java @@ -30,8 +30,8 @@ public interface StorageNetworkIpRange { String getNetworkUuid(); String getZoneUuid(); - + String getNetmask(); - + String getGateway(); } diff --git a/api/src/com/cloud/deploy/DataCenterDeployment.java b/api/src/com/cloud/deploy/DataCenterDeployment.java index 25522e06cfa..f046b66ef06 100644 --- a/api/src/com/cloud/deploy/DataCenterDeployment.java +++ b/api/src/com/cloud/deploy/DataCenterDeployment.java @@ -37,7 +37,7 @@ public class DataCenterDeployment implements DeploymentPlan { public DataCenterDeployment(long dataCenterId, Long podId, Long clusterId, Long hostId, Long poolId, Long physicalNetworkId) { this(dataCenterId, podId, clusterId, hostId, poolId, physicalNetworkId, null); } - + public DataCenterDeployment(long dataCenterId, Long podId, Long clusterId, Long hostId, Long poolId, Long physicalNetworkId, ReservationContext context) { _dcId = dataCenterId; _podId = podId; @@ -87,7 +87,7 @@ public class DataCenterDeployment implements DeploymentPlan { public Long getPhysicalNetworkId() { return _physicalNetworkId; } - + @Override public ReservationContext getReservationContext() { return _context; diff --git a/api/src/com/cloud/deploy/DeploymentPlanner.java b/api/src/com/cloud/deploy/DeploymentPlanner.java index e5dcff1be54..537dd314733 100644 --- a/api/src/com/cloud/deploy/DeploymentPlanner.java +++ b/api/src/com/cloud/deploy/DeploymentPlanner.java @@ -37,7 +37,7 @@ import com.cloud.vm.VirtualMachineProfile; public interface DeploymentPlanner extends Adapter { /** * plan is called to determine where a virtual machine should be running. - * + * * @param vm * virtual machine. * @param plan @@ -51,7 +51,7 @@ public interface DeploymentPlanner extends Adapter { /** * check() is called right before the virtual machine starts to make sure * the host has enough capacity. - * + * * @param vm * virtual machine in question. * @param plan @@ -69,7 +69,7 @@ public interface DeploymentPlanner extends Adapter { * canHandle is called before plan to determine if the plan can do the allocation. Planers should be exclusive so * planner writer must * make sure only one planer->canHandle return true in the planner list - * + * * @param vm * virtual machine. * @param plan @@ -187,7 +187,7 @@ public interface DeploymentPlanner extends Adapter { } _clusterIds.addAll(clusterList); } - + public void addHost(long hostId) { if (_hostIds == null) { _hostIds = new HashSet(); diff --git a/api/src/com/cloud/event/Event.java b/api/src/com/cloud/event/Event.java index 6a305378931..30115be51bc 100644 --- a/api/src/com/cloud/event/Event.java +++ b/api/src/com/cloud/event/Event.java @@ -27,7 +27,7 @@ public interface Event extends ControlledEntity{ Started, Completed; } - + long getId(); String getType(); diff --git a/api/src/com/cloud/event/EventTypes.java b/api/src/com/cloud/event/EventTypes.java index e69e4a446a2..8c622252d17 100755 --- a/api/src/com/cloud/event/EventTypes.java +++ b/api/src/com/cloud/event/EventTypes.java @@ -267,26 +267,26 @@ public class EventTypes { public static final String EVENT_EXTERNAL_FIREWALL_DEVICE_ADD = "PHYSICAL.FIREWALL.ADD"; public static final String EVENT_EXTERNAL_FIREWALL_DEVICE_DELETE = "PHYSICAL.FIREWALL.DELETE"; public static final String EVENT_EXTERNAL_FIREWALL_DEVICE_CONFIGURE = "PHYSICAL.FIREWALL.CONFIGURE"; - + // VPC public static final String EVENT_VPC_CREATE = "VPC.CREATE"; public static final String EVENT_VPC_UPDATE = "VPC.UPDATE"; public static final String EVENT_VPC_DELETE = "VPC.DELETE"; public static final String EVENT_VPC_RESTART = "VPC.RESTART"; - + // VPC offerings public static final String EVENT_VPC_OFFERING_CREATE = "VPC.OFFERING.CREATE"; public static final String EVENT_VPC_OFFERING_UPDATE = "VPC.OFFERING.UPDATE"; public static final String EVENT_VPC_OFFERING_DELETE = "VPC.OFFERING.DELETE"; - + // Private gateway public static final String EVENT_PRIVATE_GATEWAY_CREATE = "PRIVATE.GATEWAY.CREATE"; public static final String EVENT_PRIVATE_GATEWAY_DELETE = "PRIVATE.GATEWAY.DELETE"; - + // Static routes public static final String EVENT_STATIC_ROUTE_CREATE = "STATIC.ROUTE.CREATE"; public static final String EVENT_STATIC_ROUTE_DELETE = "STATIC.ROUTE.DELETE"; - + // tag related events public static final String EVENT_TAGS_CREATE = "CREATE_TAGS"; public static final String EVENT_TAGS_DELETE = "DELETE_TAGS"; @@ -295,7 +295,7 @@ public class EventTypes { public static final String EVENT_EXTERNAL_NVP_CONTROLLER_ADD = "PHYSICAL.NVPCONTROLLER.ADD"; public static final String EVENT_EXTERNAL_NVP_CONTROLLER_DELETE = "PHYSICAL.NVPCONTROLLER.DELETE"; public static final String EVENT_EXTERNAL_NVP_CONTROLLER_CONFIGURE = "PHYSICAL.NVPCONTROLLER.CONFIGURE"; - + // AutoScale public static final String EVENT_COUNTER_CREATE = "COUNTER.CREATE"; public static final String EVENT_COUNTER_DELETE = "COUNTER.DELETE"; diff --git a/api/src/com/cloud/exception/AgentUnavailableException.java b/api/src/com/cloud/exception/AgentUnavailableException.java index a2d052b61f5..89193243e1d 100644 --- a/api/src/com/cloud/exception/AgentUnavailableException.java +++ b/api/src/com/cloud/exception/AgentUnavailableException.java @@ -24,17 +24,17 @@ import com.cloud.utils.SerialVersionUID; * */ public class AgentUnavailableException extends ResourceUnavailableException { - + private static final long serialVersionUID = SerialVersionUID.AgentUnavailableException; - + public AgentUnavailableException(String msg, long agentId) { this(msg, agentId, null); } - + public AgentUnavailableException(long agentId) { this("Unable to reach host.", agentId); } - + public AgentUnavailableException(String msg, long agentId, Throwable cause) { super("Host " + agentId + ": " + msg, Host.class, agentId, cause); } diff --git a/api/src/com/cloud/exception/CloudException.java b/api/src/com/cloud/exception/CloudException.java index 9ebeaad6675..8cfae21e8d1 100644 --- a/api/src/com/cloud/exception/CloudException.java +++ b/api/src/com/cloud/exception/CloudException.java @@ -24,16 +24,16 @@ import com.cloud.utils.AnnotationHelper; /** * by the API response serializer. Any exceptions that are thrown by * class, which extends RuntimeException instead of Exception like this - * class does. + * class does. */ public class CloudException extends Exception { - + // This holds a list of uuids and their names. Add uuid:fieldname pairs protected ArrayList idList = new ArrayList(); - - protected Integer csErrorCode; - + + protected Integer csErrorCode; + public CloudException(String message) { super(message); setCSErrorCode(CSExceptionErrorCode.getCSErrCode(this.getClass().getName())); @@ -43,34 +43,34 @@ public class CloudException extends Exception { super(message, cause); setCSErrorCode(CSExceptionErrorCode.getCSErrCode(this.getClass().getName())); } - + public void addProxyObject(Object voObj, Long id, String idFieldName) { // Get the VO object's table name. String tablename = AnnotationHelper.getTableName(voObj); if (tablename != null) { - addProxyObject(tablename, id, idFieldName); + addProxyObject(tablename, id, idFieldName); } return; } - + public CloudException() { super(); setCSErrorCode(CSExceptionErrorCode.getCSErrCode(this.getClass().getName())); } - + public void addProxyObject(String tableName, Long id, String idFieldName) { idList.add(new IdentityProxy(tableName, id, idFieldName)); return; } - + public ArrayList getIdProxyList() { return idList; } - + public void setCSErrorCode(int cserrcode) { this.csErrorCode = cserrcode; } - + public int getCSErrorCode() { return this.csErrorCode; } diff --git a/api/src/com/cloud/exception/CloudExecutionException.java b/api/src/com/cloud/exception/CloudExecutionException.java index 74b116a0983..d8d70f8ddb5 100755 --- a/api/src/com/cloud/exception/CloudExecutionException.java +++ b/api/src/com/cloud/exception/CloudExecutionException.java @@ -22,11 +22,11 @@ import com.cloud.utils.exception.RuntimeCloudException; import com.cloud.utils.SerialVersionUID; /** - * + * */ public class CloudExecutionException extends RuntimeCloudException { private final static long serialVersionUID = SerialVersionUID.CloudExecutionException; - + private final ErrorCode code; private final HashMap details; @@ -35,15 +35,15 @@ public class CloudExecutionException extends RuntimeCloudException { this.code = code; details = new HashMap(); } - + public ErrorCode getErrorCode() { return code; } - + public String getErrorMessage() { return new StringBuilder("Error Code=").append(code).append("; Error Message=").append(super.toString()).toString(); } - + @Override public String toString() { StringBuilder buff = new StringBuilder(); diff --git a/api/src/com/cloud/exception/ConcurrentOperationException.java b/api/src/com/cloud/exception/ConcurrentOperationException.java index 54826d6a5e9..cfe6ba3fa0a 100644 --- a/api/src/com/cloud/exception/ConcurrentOperationException.java +++ b/api/src/com/cloud/exception/ConcurrentOperationException.java @@ -19,9 +19,9 @@ package com.cloud.exception; import com.cloud.utils.SerialVersionUID; public class ConcurrentOperationException extends CloudException { - + private static final long serialVersionUID = SerialVersionUID.ConcurrentOperationException; - + public ConcurrentOperationException(String msg) { super(msg); } diff --git a/api/src/com/cloud/exception/ConflictingNetworkSettingsException.java b/api/src/com/cloud/exception/ConflictingNetworkSettingsException.java index 7afcfe64575..a777afabeb7 100644 --- a/api/src/com/cloud/exception/ConflictingNetworkSettingsException.java +++ b/api/src/com/cloud/exception/ConflictingNetworkSettingsException.java @@ -21,7 +21,7 @@ import com.cloud.utils.SerialVersionUID; public class ConflictingNetworkSettingsException extends CloudException { private static final long serialVersionUID = SerialVersionUID.ConflictingNetworkSettingException; - + public ConflictingNetworkSettingsException() { super(); } diff --git a/api/src/com/cloud/exception/ConnectionException.java b/api/src/com/cloud/exception/ConnectionException.java index 966e39b3fd2..b3f0726fd34 100644 --- a/api/src/com/cloud/exception/ConnectionException.java +++ b/api/src/com/cloud/exception/ConnectionException.java @@ -25,26 +25,26 @@ import com.cloud.utils.SerialVersionUID; * processing. Upon receiving this exception, the AgentManager will * immediately place the agent under alert. When the function to enable * to disable the agent, the agent is disabled. - * should be disconnected and reconnected to "refresh" all resource + * should be disconnected and reconnected to "refresh" all resource * information. This is useful when the Listener needed to perform setup * on the agent and decided it is best to flush connection and reconnect. * situation where it keeps throwing ConnectionException. */ public class ConnectionException extends CloudException { - + private static final long serialVersionUID = SerialVersionUID.ConnectionException; boolean _error; public ConnectionException(boolean setupError, String msg) { this(setupError, msg, null); } - + public ConnectionException(boolean setupError, String msg, Throwable cause) { super(msg, cause); _error = setupError; - + } - + public boolean isSetupError() { return _error; } diff --git a/api/src/com/cloud/exception/DiscoveredWithErrorException.java b/api/src/com/cloud/exception/DiscoveredWithErrorException.java index f59066f83c1..ee59baf45da 100644 --- a/api/src/com/cloud/exception/DiscoveredWithErrorException.java +++ b/api/src/com/cloud/exception/DiscoveredWithErrorException.java @@ -19,13 +19,13 @@ package com.cloud.exception; import com.cloud.utils.SerialVersionUID; public class DiscoveredWithErrorException extends DiscoveryException { - + private static final long serialVersionUID = SerialVersionUID.DiscoveredWithErrorException; public DiscoveredWithErrorException(String msg) { this(msg, null); } - + public DiscoveredWithErrorException(String msg, Throwable cause) { super(msg, cause); } diff --git a/api/src/com/cloud/exception/DiscoveryException.java b/api/src/com/cloud/exception/DiscoveryException.java index 10a7c5b338f..62ae2724ea5 100644 --- a/api/src/com/cloud/exception/DiscoveryException.java +++ b/api/src/com/cloud/exception/DiscoveryException.java @@ -19,13 +19,13 @@ package com.cloud.exception; import com.cloud.utils.SerialVersionUID; public class DiscoveryException extends CloudException { - + private static final long serialVersionUID = SerialVersionUID.DiscoveryException; public DiscoveryException(String msg) { this(msg, null); } - + public DiscoveryException(String msg, Throwable cause) { super(msg, cause); } diff --git a/api/src/com/cloud/exception/ErrorCode.java b/api/src/com/cloud/exception/ErrorCode.java index 15d9b7e8a1e..8f048b84800 100755 --- a/api/src/com/cloud/exception/ErrorCode.java +++ b/api/src/com/cloud/exception/ErrorCode.java @@ -23,30 +23,30 @@ import java.util.HashSet; public class ErrorCode { String code; private static HashSet s_codes = new HashSet(); - + public ErrorCode(String code) { this.code = code; assert !s_codes.contains(this) : "There is already an error code registered for this code: " + code; s_codes.add(this); } - + public String getCode() { return code; } - + @Override public int hashCode() { return code.hashCode(); } - + @Override public boolean equals(Object that) { if (!(that instanceof ErrorCode)) { return false; } - + return this.code.equals(((ErrorCode)that).code); } - + public final static ErrorCode UnableToReachResource = new ErrorCode("resource.unavailable"); } diff --git a/api/src/com/cloud/exception/HAStateException.java b/api/src/com/cloud/exception/HAStateException.java index aaa5e756aa1..cb2517446ba 100644 --- a/api/src/com/cloud/exception/HAStateException.java +++ b/api/src/com/cloud/exception/HAStateException.java @@ -23,9 +23,9 @@ import com.cloud.utils.SerialVersionUID; * done with it. Hence this special state. */ public class HAStateException extends ManagementServerException { - + private static final long serialVersionUID = SerialVersionUID.HAStateException; - + public HAStateException(String msg) { super(msg); } diff --git a/api/src/com/cloud/exception/InsufficientCapacityException.java b/api/src/com/cloud/exception/InsufficientCapacityException.java index 8a0557f8c06..51a4e593858 100755 --- a/api/src/com/cloud/exception/InsufficientCapacityException.java +++ b/api/src/com/cloud/exception/InsufficientCapacityException.java @@ -49,7 +49,7 @@ public abstract class InsufficientCapacityException extends CloudException { /** * @return the id of the object that it is insufficient in. Note that this method is * marked such that if the id is not set, then it will throw NullPointerException. - * This is intended as you should check to see if the Scope is present before + * This is intended as you should check to see if the Scope is present before * accessing this method. */ public long getId() { diff --git a/api/src/com/cloud/exception/InsufficientNetworkCapacityException.java b/api/src/com/cloud/exception/InsufficientNetworkCapacityException.java index 09a077bfc24..71ec16d88f3 100644 --- a/api/src/com/cloud/exception/InsufficientNetworkCapacityException.java +++ b/api/src/com/cloud/exception/InsufficientNetworkCapacityException.java @@ -20,11 +20,11 @@ import com.cloud.utils.SerialVersionUID; public class InsufficientNetworkCapacityException extends InsufficientCapacityException { private static final long serialVersionUID = SerialVersionUID.InsufficientAddressCapacityException; - + protected InsufficientNetworkCapacityException() { super(); } - + public InsufficientNetworkCapacityException(String msg, Class scope, Long id) { super(msg, scope, id); } diff --git a/api/src/com/cloud/exception/InsufficientServerCapacityException.java b/api/src/com/cloud/exception/InsufficientServerCapacityException.java index 4a30595c12b..af34e579943 100755 --- a/api/src/com/cloud/exception/InsufficientServerCapacityException.java +++ b/api/src/com/cloud/exception/InsufficientServerCapacityException.java @@ -24,13 +24,13 @@ import com.cloud.utils.SerialVersionUID; * trying to start. */ public class InsufficientServerCapacityException extends InsufficientCapacityException { - + private static final long serialVersionUID = SerialVersionUID.InsufficientServerCapacityException; - + public InsufficientServerCapacityException(String msg, Long clusterId) { this(msg, Cluster.class, clusterId); } - + public InsufficientServerCapacityException(String msg, Class scope, Long id) { super(msg, scope, id); } diff --git a/api/src/com/cloud/exception/InsufficientStorageCapacityException.java b/api/src/com/cloud/exception/InsufficientStorageCapacityException.java index f8ec10610ce..c70bfc38c8c 100755 --- a/api/src/com/cloud/exception/InsufficientStorageCapacityException.java +++ b/api/src/com/cloud/exception/InsufficientStorageCapacityException.java @@ -24,13 +24,13 @@ import com.cloud.utils.SerialVersionUID; * storage space to create the VM. */ public class InsufficientStorageCapacityException extends InsufficientCapacityException { - + private static final long serialVersionUID = SerialVersionUID.InsufficientStorageCapacityException; - + public InsufficientStorageCapacityException(String msg, long id) { this(msg, StoragePool.class, id); } - + public InsufficientStorageCapacityException(String msg, Class scope, Long id) { super(msg, scope, id); } diff --git a/api/src/com/cloud/exception/InsufficientVirtualNetworkCapcityException.java b/api/src/com/cloud/exception/InsufficientVirtualNetworkCapcityException.java index 10d9ffc82ce..4741baaf62d 100644 --- a/api/src/com/cloud/exception/InsufficientVirtualNetworkCapcityException.java +++ b/api/src/com/cloud/exception/InsufficientVirtualNetworkCapcityException.java @@ -21,11 +21,11 @@ import com.cloud.utils.SerialVersionUID; public class InsufficientVirtualNetworkCapcityException extends InsufficientNetworkCapacityException { private static final long serialVersionUID = SerialVersionUID.InsufficientVirtualNetworkCapacityException; - + public InsufficientVirtualNetworkCapcityException(String msg, Class scope, Long id) { super(msg, scope, id); } - + public InsufficientVirtualNetworkCapcityException(String msg, long podId) { this(msg, Pod.class, podId); } diff --git a/api/src/com/cloud/exception/ResourceUnavailableException.java b/api/src/com/cloud/exception/ResourceUnavailableException.java index 484659a6a94..30daf566b03 100644 --- a/api/src/com/cloud/exception/ResourceUnavailableException.java +++ b/api/src/com/cloud/exception/ResourceUnavailableException.java @@ -23,21 +23,21 @@ public class ResourceUnavailableException extends CloudException { Class _scope; long _id; - + public ResourceUnavailableException(String msg, Class scope, long resourceId) { this(msg, scope, resourceId, null); } - + public ResourceUnavailableException(String msg, Class scope, long resourceId, Throwable cause) { super(new StringBuilder("Resource [").append(scope.getSimpleName()).append(":").append(resourceId).append("] is unreachable: ").append(msg).toString(), cause); _scope = scope; _id = resourceId; } - + public Class getScope() { return _scope; } - + public long getResourceId() { return _id; } diff --git a/api/src/com/cloud/exception/StorageUnavailableException.java b/api/src/com/cloud/exception/StorageUnavailableException.java index 7b443a91087..6db16290237 100644 --- a/api/src/com/cloud/exception/StorageUnavailableException.java +++ b/api/src/com/cloud/exception/StorageUnavailableException.java @@ -20,9 +20,9 @@ import com.cloud.storage.StoragePool; import com.cloud.utils.SerialVersionUID; /** - * If the cause is due to storage pool unavailable, calling + * If the cause is due to storage pool unavailable, calling * problem with. - * + * */ public class StorageUnavailableException extends ResourceUnavailableException { private static final long serialVersionUID = SerialVersionUID.StorageUnavailableException; @@ -33,11 +33,11 @@ public class StorageUnavailableException extends ResourceUnavailableException { public StorageUnavailableException(String msg, long poolId, Throwable cause) { this(msg, StoragePool.class, poolId, cause); } - + public StorageUnavailableException(String msg, Class scope, long resourceId) { this(msg, scope, resourceId, null); } - + public StorageUnavailableException(String msg, Class scope, long resourceId, Throwable th) { super(msg, scope, resourceId, th); } diff --git a/api/src/com/cloud/host/Host.java b/api/src/com/cloud/host/Host.java index 1bac0d20a40..8c95336d46a 100755 --- a/api/src/com/cloud/host/Host.java +++ b/api/src/com/cloud/host/Host.java @@ -198,6 +198,6 @@ public interface Host extends StateObject { String getHypervisorVersion(); boolean isInMaintenanceStates(); - - ResourceState getResourceState(); + + ResourceState getResourceState(); } diff --git a/api/src/com/cloud/host/HostEnvironment.java b/api/src/com/cloud/host/HostEnvironment.java index 31849748486..89077b5fed1 100644 --- a/api/src/com/cloud/host/HostEnvironment.java +++ b/api/src/com/cloud/host/HostEnvironment.java @@ -22,29 +22,29 @@ package com.cloud.host; * the environment. */ public class HostEnvironment { - + public String managementIpAddress; public String managementNetmask; public String managementGateway; public String managementVlan; - + public String[] neighborHosts; - + public String storageIpAddress; public String storageNetwork; public String storageGateway; public String storageVlan; public String secondaryStroageIpAddress; - + public String storage2IpAddress; public String storage2Network; public String storage2Gateway; public String storage2Vlan; public String secondaryStorageIpAddress2; - + public String[] neighborStorages; public String[] neighborStorages2; - + public String publicIpAddress; public String publicNetmask; public String publicGateway; diff --git a/api/src/com/cloud/host/HostStats.java b/api/src/com/cloud/host/HostStats.java index e8fa19ef3d1..803b1484b2b 100755 --- a/api/src/com/cloud/host/HostStats.java +++ b/api/src/com/cloud/host/HostStats.java @@ -17,7 +17,7 @@ package com.cloud.host; public interface HostStats { - + // host related stats public double getCpuUtilization(); public double getNetworkWriteKBs(); @@ -27,7 +27,7 @@ public interface HostStats { public String getEntityType(); public double getUsedMemory(); public HostStats getHostStats(); - + // public double getAverageLoad(); - // public double getXapiMemoryUsageKBs(); + // public double getXapiMemoryUsageKBs(); } diff --git a/api/src/com/cloud/host/Status.java b/api/src/com/cloud/host/Status.java index aed35cbb040..97b151dc723 100755 --- a/api/src/com/cloud/host/Status.java +++ b/api/src/com/cloud/host/Status.java @@ -32,25 +32,25 @@ public enum Status { Removed(true, false, true), Error(true, false, true), Rebalancing(true, false, true); - + private final boolean updateManagementServer; private final boolean checkManagementServer; private final boolean lostConnection; - + private Status(boolean updateConnection, boolean checkManagementServer, boolean lostConnection) { this.updateManagementServer = updateConnection; this.checkManagementServer = checkManagementServer; this.lostConnection = lostConnection; } - + public boolean updateManagementServer() { return updateManagementServer; } - + public boolean checkManagementServer() { return checkManagementServer; } - + public boolean lostConnection() { return lostConnection; } @@ -82,16 +82,16 @@ public enum Status { public String getDescription() { return comment; } - + public boolean isUserRequest() { return isUserRequest; } } - + public static StateMachine2 getStateMachine() { return s_fsm; } - + public Status getNextStatus(Event e) throws NoTransitionException { return s_fsm.getNextState(this, e); } @@ -100,7 +100,7 @@ public enum Status { List from = s_fsm.getFromStates(this, e); return from.toArray(new Status[from.size()]); } - + public Set getPossibleEvents() { return s_fsm.getPossibleEvents(this); } diff --git a/api/src/com/cloud/hypervisor/Hypervisor.java b/api/src/com/cloud/hypervisor/Hypervisor.java index 25dd8b1458d..2e0012dca6f 100644 --- a/api/src/com/cloud/hypervisor/Hypervisor.java +++ b/api/src/com/cloud/hypervisor/Hypervisor.java @@ -23,7 +23,7 @@ public class Hypervisor { XenServer, KVM, VMware, - Hyperv, + Hyperv, VirtualBox, Parralels, BareMetal, diff --git a/api/src/com/cloud/hypervisor/HypervisorGuru.java b/api/src/com/cloud/hypervisor/HypervisorGuru.java index d3608dcc347..b4a0b06a7af 100644 --- a/api/src/com/cloud/hypervisor/HypervisorGuru.java +++ b/api/src/com/cloud/hypervisor/HypervisorGuru.java @@ -27,28 +27,28 @@ import com.cloud.vm.VirtualMachineProfile; public interface HypervisorGuru extends Adapter { HypervisorType getHypervisorType(); - + /** * Convert from a virtual machine to the - * virtual machine that the hypervisor expects. - * @param vm + * virtual machine that the hypervisor expects. + * @param vm * @return */ VirtualMachineTO implement(VirtualMachineProfile vm); - + /** * Give hypervisor guru opportunity to decide if certain command needs to be delegated to other host, mainly to secondary storage VM host * @param hostId original hypervisor host * @param cmd command that is going to be sent, hypervisor guru usually needs to register various context objects into the command object - * + * * @return delegated host id if the command will be delegated */ long getCommandHostDelegation(long hostId, Command cmd); - + /** * @return true if VM can be migrated independently with CloudStack, and therefore CloudStack needs to track and reflect host change * into CloudStack database, false if CloudStack enforces VM sync logic - * + * */ boolean trackVmHostChange(); diff --git a/api/src/com/cloud/network/IpAddress.java b/api/src/com/cloud/network/IpAddress.java index f67a1fa3c46..9a72d108a63 100644 --- a/api/src/com/cloud/network/IpAddress.java +++ b/api/src/com/cloud/network/IpAddress.java @@ -22,11 +22,11 @@ import com.cloud.acl.ControlledEntity; import com.cloud.utils.net.Ip; /** - * + * * - Allocated = null * - AccountId = null * - DomainId = null - * + * * - State = Allocated * - AccountId = account owner. * - DomainId = domain of the account owner. @@ -39,7 +39,7 @@ public interface IpAddress extends ControlledEntity { Releasing, // The IP address is being released for other network elements and is not ready for allocation. Free // The IP address is ready to be allocated. } - + enum Purpose { StaticNat, Lb diff --git a/api/src/com/cloud/network/Network.java b/api/src/com/cloud/network/Network.java index d38f7401682..1a083a93057 100644 --- a/api/src/com/cloud/network/Network.java +++ b/api/src/com/cloud/network/Network.java @@ -45,10 +45,10 @@ public interface Network extends ControlledEntity { public static final Service Dhcp = new Service("Dhcp"); public static final Service Dns = new Service("Dns", Capability.AllowDnsSuffixModification); public static final Service Gateway = new Service("Gateway"); - public static final Service Firewall = new Service("Firewall", Capability.SupportedProtocols, + public static final Service Firewall = new Service("Firewall", Capability.SupportedProtocols, Capability.MultipleIps, Capability.TrafficStatistics); public static final Service Lb = new Service("Lb", Capability.SupportedLBAlgorithms, Capability.SupportedLBIsolation, - Capability.SupportedProtocols, Capability.TrafficStatistics, Capability.LoadBalancingSupportedIps, + Capability.SupportedProtocols, Capability.TrafficStatistics, Capability.LoadBalancingSupportedIps, Capability.SupportedStickinessMethods, Capability.ElasticLb); public static final Service UserData = new Service("UserData"); public static final Service SourceNat = new Service("SourceNat", Capability.SupportedSourceNatTypes, Capability.RedundantRouter); @@ -299,5 +299,5 @@ public interface Network extends ControlledEntity { * @return */ Long getVpcId(); - + } diff --git a/api/src/com/cloud/network/NetworkService.java b/api/src/com/cloud/network/NetworkService.java index a20056152eb..1cefbb8fe4a 100755 --- a/api/src/com/cloud/network/NetworkService.java +++ b/api/src/com/cloud/network/NetworkService.java @@ -41,7 +41,7 @@ public interface NetworkService { List getIsolatedNetworksOwnedByAccountInZone(long zoneId, Account owner); - IpAddress allocateIP(Account ipOwner, boolean isSystem, long zoneId) throws ResourceAllocationException, + IpAddress allocateIP(Account ipOwner, boolean isSystem, long zoneId) throws ResourceAllocationException, InsufficientAddressCapacityException, ConcurrentOperationException; boolean releaseIpAddress(long ipAddressId) throws InsufficientAddressCapacityException; @@ -79,13 +79,13 @@ public interface NetworkService { Map> getNetworkOfferingServiceProvidersMap(long networkOfferingId); - PhysicalNetwork createPhysicalNetwork(Long zoneId, String vnetRange, String networkSpeed, + PhysicalNetwork createPhysicalNetwork(Long zoneId, String vnetRange, String networkSpeed, List isolationMethods, String broadcastDomainRange, Long domainId, List tags, String name); - Pair, Integer> searchPhysicalNetworks(Long id, Long zoneId, String keyword, + Pair, Integer> searchPhysicalNetworks(Long id, Long zoneId, String keyword, Long startIndex, Long pageSize, String name); - PhysicalNetwork updatePhysicalNetwork(Long id, String networkSpeed, List tags, + PhysicalNetwork updatePhysicalNetwork(Long id, String networkSpeed, List tags, String newVnetRangeString, String state); boolean deletePhysicalNetwork(Long id); @@ -114,7 +114,7 @@ public interface NetworkService { long findPhysicalNetworkId(long zoneId, String tag, TrafficType trafficType); - PhysicalNetworkTrafficType addTrafficTypeToPhysicalNetwork(Long physicalNetworkId, String trafficType, + PhysicalNetworkTrafficType addTrafficTypeToPhysicalNetwork(Long physicalNetworkId, String trafficType, String xenLabel, String kvmLabel, String vmwareLabel, String simulatorLabel, String vlan); PhysicalNetworkTrafficType getPhysicalNetworkTrafficType(Long id); @@ -132,19 +132,19 @@ public interface NetworkService { List> listTrafficTypeImplementor(ListTrafficTypeImplementorsCmd cmd); List getIsolatedNetworksWithSourceNATOwnedByAccountInZone(long zoneId, Account owner); - + List listNetworksByVpc(long vpcId); - + boolean isVmPartOfNetwork(long vmId, long ntwkId); /** * @param networkId * @param entityId * @return - * @throws ConcurrentOperationException - * @throws ResourceUnavailableException - * @throws ResourceAllocationException - * @throws InsufficientAddressCapacityException + * @throws ConcurrentOperationException + * @throws ResourceUnavailableException + * @throws ResourceAllocationException + * @throws InsufficientAddressCapacityException */ IpAddress associateIPToNetwork(long ipId, long networkId) throws InsufficientAddressCapacityException, ResourceAllocationException, ResourceUnavailableException, ConcurrentOperationException; @@ -161,12 +161,12 @@ public interface NetworkService { * @param networkOwnerId * @param vpcId TODO * @return - * @throws InsufficientCapacityException - * @throws ConcurrentOperationException - * @throws ResourceAllocationException + * @throws InsufficientCapacityException + * @throws ConcurrentOperationException + * @throws ResourceAllocationException */ Network createPrivateNetwork(String networkName, String displayText, long physicalNetworkId, String vlan, - String startIp, String endIP, String gateway, String netmask, long networkOwnerId, Long vpcId) + String startIp, String endIP, String gateway, String netmask, long networkOwnerId, Long vpcId) throws ResourceAllocationException, ConcurrentOperationException, InsufficientCapacityException; /** * @param network diff --git a/api/src/com/cloud/network/Networks.java b/api/src/com/cloud/network/Networks.java index b96eaa2ff6c..b15661910b4 100755 --- a/api/src/com/cloud/network/Networks.java +++ b/api/src/com/cloud/network/Networks.java @@ -23,7 +23,7 @@ import com.cloud.utils.exception.CloudRuntimeException; /** * Network includes all of the enums used within networking. - * + * */ public class Networks { diff --git a/api/src/com/cloud/network/PhysicalNetwork.java b/api/src/com/cloud/network/PhysicalNetwork.java index be4b1d0d352..03345d946ca 100644 --- a/api/src/com/cloud/network/PhysicalNetwork.java +++ b/api/src/com/cloud/network/PhysicalNetwork.java @@ -19,7 +19,7 @@ package com.cloud.network; import java.util.List; /** - * + * */ public interface PhysicalNetwork { diff --git a/api/src/com/cloud/network/PhysicalNetworkServiceProvider.java b/api/src/com/cloud/network/PhysicalNetworkServiceProvider.java index 1b913115aa4..468cb90a82d 100644 --- a/api/src/com/cloud/network/PhysicalNetworkServiceProvider.java +++ b/api/src/com/cloud/network/PhysicalNetworkServiceProvider.java @@ -21,7 +21,7 @@ import java.util.List; import com.cloud.network.Network.Service; /** - * + * */ public interface PhysicalNetworkServiceProvider { diff --git a/api/src/com/cloud/network/PhysicalNetworkTrafficType.java b/api/src/com/cloud/network/PhysicalNetworkTrafficType.java index 0c0bfa1304e..44c4fbff05c 100644 --- a/api/src/com/cloud/network/PhysicalNetworkTrafficType.java +++ b/api/src/com/cloud/network/PhysicalNetworkTrafficType.java @@ -19,7 +19,7 @@ package com.cloud.network; import com.cloud.network.Networks.TrafficType; /** - * + * */ public interface PhysicalNetworkTrafficType { diff --git a/api/src/com/cloud/network/PublicIpAddress.java b/api/src/com/cloud/network/PublicIpAddress.java index 5d117b84243..d8a10bcbe89 100644 --- a/api/src/com/cloud/network/PublicIpAddress.java +++ b/api/src/com/cloud/network/PublicIpAddress.java @@ -22,13 +22,13 @@ import com.cloud.dc.Vlan; /** */ public interface PublicIpAddress extends ControlledEntity, IpAddress, Vlan { - + String getMacAddress(); - + public String getNetmask(); - + public String getGateway(); - + @Override public String getVlanTag(); -} \ No newline at end of file +} diff --git a/api/src/com/cloud/network/RemoteAccessVpn.java b/api/src/com/cloud/network/RemoteAccessVpn.java index 162e0fce133..1fe53c44b7f 100644 --- a/api/src/com/cloud/network/RemoteAccessVpn.java +++ b/api/src/com/cloud/network/RemoteAccessVpn.java @@ -24,7 +24,7 @@ public interface RemoteAccessVpn extends ControlledEntity { Running, Removed } - + long getServerAddressId(); String getIpRange(); String getIpsecPresharedKey(); diff --git a/api/src/com/cloud/network/Site2SiteCustomerGateway.java b/api/src/com/cloud/network/Site2SiteCustomerGateway.java index 8950c771705..e53d099a51f 100644 --- a/api/src/com/cloud/network/Site2SiteCustomerGateway.java +++ b/api/src/com/cloud/network/Site2SiteCustomerGateway.java @@ -5,7 +5,7 @@ // 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, diff --git a/api/src/com/cloud/network/Site2SiteVpnConnection.java b/api/src/com/cloud/network/Site2SiteVpnConnection.java index 6cf52a94943..0986c9dc4e4 100644 --- a/api/src/com/cloud/network/Site2SiteVpnConnection.java +++ b/api/src/com/cloud/network/Site2SiteVpnConnection.java @@ -5,7 +5,7 @@ // 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, diff --git a/api/src/com/cloud/network/Site2SiteVpnGateway.java b/api/src/com/cloud/network/Site2SiteVpnGateway.java index 52ec5971c14..ad79b27a3c6 100644 --- a/api/src/com/cloud/network/Site2SiteVpnGateway.java +++ b/api/src/com/cloud/network/Site2SiteVpnGateway.java @@ -5,7 +5,7 @@ // 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, diff --git a/api/src/com/cloud/network/VirtualNetworkApplianceService.java b/api/src/com/cloud/network/VirtualNetworkApplianceService.java index 300c9932829..fc636155ee3 100644 --- a/api/src/com/cloud/network/VirtualNetworkApplianceService.java +++ b/api/src/com/cloud/network/VirtualNetworkApplianceService.java @@ -26,29 +26,29 @@ import com.cloud.user.Account; public interface VirtualNetworkApplianceService { /** * Starts domain router - * + * * @param cmd * the command specifying router's id * @return DomainRouter object */ - VirtualRouter startRouter(long routerId, boolean reprogramNetwork) throws ConcurrentOperationException, + VirtualRouter startRouter(long routerId, boolean reprogramNetwork) throws ConcurrentOperationException, ResourceUnavailableException, InsufficientCapacityException; /** * Reboots domain router - * + * * @param cmd * the command specifying router's id * @return router if successful */ - VirtualRouter rebootRouter(long routerId, boolean reprogramNetwork) throws ConcurrentOperationException, + VirtualRouter rebootRouter(long routerId, boolean reprogramNetwork) throws ConcurrentOperationException, ResourceUnavailableException, InsufficientCapacityException; VirtualRouter upgradeRouter(UpgradeRouterCmd cmd); /** * Stops domain router - * + * * @param id * of the router * @param forced diff --git a/api/src/com/cloud/network/VpcVirtualNetworkApplianceService.java b/api/src/com/cloud/network/VpcVirtualNetworkApplianceService.java index 03eb576bc8d..6e8fd38ba66 100644 --- a/api/src/com/cloud/network/VpcVirtualNetworkApplianceService.java +++ b/api/src/com/cloud/network/VpcVirtualNetworkApplianceService.java @@ -32,7 +32,7 @@ public interface VpcVirtualNetworkApplianceService extends VirtualNetworkApplian * @throws ResourceUnavailableException * @throws InsufficientCapacityException */ - boolean addVpcRouterToGuestNetwork(VirtualRouter router, Network network, boolean isRedundant) + boolean addVpcRouterToGuestNetwork(VirtualRouter router, Network network, boolean isRedundant) throws ConcurrentOperationException, ResourceUnavailableException, InsufficientCapacityException; /** @@ -43,7 +43,7 @@ public interface VpcVirtualNetworkApplianceService extends VirtualNetworkApplian * @throws ConcurrentOperationException * @throws ResourceUnavailableException */ - boolean removeVpcRouterFromGuestNetwork(VirtualRouter router, Network network, boolean isRedundant) + boolean removeVpcRouterFromGuestNetwork(VirtualRouter router, Network network, boolean isRedundant) throws ConcurrentOperationException, ResourceUnavailableException; } diff --git a/api/src/com/cloud/network/as/AutoScaleVmProfile.java b/api/src/com/cloud/network/as/AutoScaleVmProfile.java index 77f5ce45f98..8ca5415148c 100644 --- a/api/src/com/cloud/network/as/AutoScaleVmProfile.java +++ b/api/src/com/cloud/network/as/AutoScaleVmProfile.java @@ -1,21 +1,21 @@ -// 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.network.as; +// 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.network.as; import java.util.List; diff --git a/api/src/com/cloud/network/element/LoadBalancingServiceProvider.java b/api/src/com/cloud/network/element/LoadBalancingServiceProvider.java index 3c5474642a4..76906c40114 100644 --- a/api/src/com/cloud/network/element/LoadBalancingServiceProvider.java +++ b/api/src/com/cloud/network/element/LoadBalancingServiceProvider.java @@ -38,7 +38,7 @@ public interface LoadBalancingServiceProvider extends NetworkElement { * @param network * @param rule * @return true/false. true should be return if there are no validations. false should be return if any oneof the validation fails. - * @throws + * @throws */ boolean validateLBRule(Network network, LoadBalancingRule rule); } diff --git a/api/src/com/cloud/network/element/NetworkElement.java b/api/src/com/cloud/network/element/NetworkElement.java index 10ea5095b58..1ddd60b27de 100644 --- a/api/src/com/cloud/network/element/NetworkElement.java +++ b/api/src/com/cloud/network/element/NetworkElement.java @@ -41,25 +41,25 @@ import com.cloud.vm.VirtualMachineProfile; * Represents one network element that exists in a network. */ public interface NetworkElement extends Adapter { - + Map> getCapabilities(); - + /** - * NOTE: + * NOTE: * NetworkElement -> Network.Provider is a one-to-one mapping. While adding a new NetworkElement, one must add a new Provider name to Network.Provider. */ Provider getProvider(); - + /** - * Implement the network configuration as specified. + * Implement the network configuration as specified. * @param config fully specified network configuration. * @param offering network offering that originated the network configuration. * @return true if network configuration is now usable; false if not; null if not handled by this element. * @throws InsufficientNetworkCapacityException TODO */ - boolean implement(Network network, NetworkOffering offering, DeployDestination dest, ReservationContext context) + boolean implement(Network network, NetworkOffering offering, DeployDestination dest, ReservationContext context) throws ConcurrentOperationException, ResourceUnavailableException, InsufficientCapacityException; - + /** * Prepare for a nic to be added into this network. * @param network @@ -72,10 +72,10 @@ public interface NetworkElement extends Adapter { * @throws ResourceUnavailableException * @throws InsufficientNetworkCapacityException */ - boolean prepare(Network network, NicProfile nic, VirtualMachineProfile vm, - DeployDestination dest, ReservationContext context) throws ConcurrentOperationException, + boolean prepare(Network network, NicProfile nic, VirtualMachineProfile vm, + DeployDestination dest, ReservationContext context) throws ConcurrentOperationException, ResourceUnavailableException, InsufficientCapacityException; - + /** * A nic is released from this network. * @param network @@ -86,9 +86,9 @@ public interface NetworkElement extends Adapter { * @throws ConcurrentOperationException * @throws ResourceUnavailableException */ - boolean release(Network network, NicProfile nic, VirtualMachineProfile vm, + boolean release(Network network, NicProfile nic, VirtualMachineProfile vm, ReservationContext context) throws ConcurrentOperationException, ResourceUnavailableException; - + /** * The network is being shutdown. * @param network @@ -98,9 +98,9 @@ public interface NetworkElement extends Adapter { * @throws ConcurrentOperationException * @throws ResourceUnavailableException */ - boolean shutdown(Network network, ReservationContext context, boolean cleanup) + boolean shutdown(Network network, ReservationContext context, boolean cleanup) throws ConcurrentOperationException, ResourceUnavailableException; - + /** * The network is being destroyed. * @param network @@ -109,14 +109,14 @@ public interface NetworkElement extends Adapter { * @throws ConcurrentOperationException */ boolean destroy(Network network, ReservationContext context) throws ConcurrentOperationException, ResourceUnavailableException; - + /** * Check if the instances of this Element are configured to be used on the physical network referred by this provider. * @param provider * @return boolean true/false */ boolean isReady(PhysicalNetworkServiceProvider provider); - + /** * The network service provider is being shutdown. This should shutdown all instances of this element deployed for this provider. * @param context @@ -125,15 +125,15 @@ public interface NetworkElement extends Adapter { * @throws ConcurrentOperationException * @throws ResourceUnavailableException */ - boolean shutdownProviderInstances(PhysicalNetworkServiceProvider provider, ReservationContext context) + boolean shutdownProviderInstances(PhysicalNetworkServiceProvider provider, ReservationContext context) throws ConcurrentOperationException, ResourceUnavailableException; - + /** - * This should return true if out of multiple services provided by this element, only some can be enabled. If all the services MUST be provided, this should return false. + * This should return true if out of multiple services provided by this element, only some can be enabled. If all the services MUST be provided, this should return false. * @return true/false */ boolean canEnableIndividualServices(); - + /** * Would return true if the service combination is supported by the provider * @param services diff --git a/api/src/com/cloud/network/element/RemoteAccessVPNServiceProvider.java b/api/src/com/cloud/network/element/RemoteAccessVPNServiceProvider.java index d799b0bf4e3..43daa149842 100644 --- a/api/src/com/cloud/network/element/RemoteAccessVPNServiceProvider.java +++ b/api/src/com/cloud/network/element/RemoteAccessVPNServiceProvider.java @@ -27,8 +27,8 @@ public interface RemoteAccessVPNServiceProvider extends NetworkElement { String[] applyVpnUsers(RemoteAccessVpn vpn, List users) throws ResourceUnavailableException; boolean startVpn(Network network, RemoteAccessVpn vpn) throws ResourceUnavailableException; - + boolean stopVpn(Network network, RemoteAccessVpn vpn) throws ResourceUnavailableException; - + IpDeployer getIpDeployer(Network network); } diff --git a/api/src/com/cloud/network/element/Site2SiteVpnServiceProvider.java b/api/src/com/cloud/network/element/Site2SiteVpnServiceProvider.java index 8063cbb5642..a61273a8159 100644 --- a/api/src/com/cloud/network/element/Site2SiteVpnServiceProvider.java +++ b/api/src/com/cloud/network/element/Site2SiteVpnServiceProvider.java @@ -5,7 +5,7 @@ // 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, @@ -22,6 +22,6 @@ import com.cloud.network.Site2SiteVpnConnection; public interface Site2SiteVpnServiceProvider extends NetworkElement { boolean startSite2SiteVpn(Site2SiteVpnConnection conn) throws ResourceUnavailableException; - + boolean stopSite2SiteVpn(Site2SiteVpnConnection conn) throws ResourceUnavailableException; } diff --git a/api/src/com/cloud/network/element/VpcProvider.java b/api/src/com/cloud/network/element/VpcProvider.java index aa5d2245a44..482fe6245a7 100644 --- a/api/src/com/cloud/network/element/VpcProvider.java +++ b/api/src/com/cloud/network/element/VpcProvider.java @@ -36,7 +36,7 @@ public interface VpcProvider extends NetworkElement{ * @param vpc fully specified vpc configuration. * @throws InsufficientNetworkCapacityException TODO */ - boolean implementVpc(Vpc vpc, DeployDestination dest, ReservationContext context) + boolean implementVpc(Vpc vpc, DeployDestination dest, ReservationContext context) throws ConcurrentOperationException, ResourceUnavailableException, InsufficientCapacityException; /** @@ -47,10 +47,10 @@ public interface VpcProvider extends NetworkElement{ * @throws ResourceUnavailableException */ boolean shutdownVpc(Vpc vpc, ReservationContext context) throws ConcurrentOperationException, ResourceUnavailableException; - + boolean createPrivateGateway(PrivateGateway gateway) throws ConcurrentOperationException, ResourceUnavailableException; - + boolean deletePrivateGateway(PrivateGateway privateGateway) throws ConcurrentOperationException, ResourceUnavailableException; - + boolean applyStaticRoutes(Vpc vpc, List routes) throws ResourceUnavailableException; } diff --git a/api/src/com/cloud/network/firewall/FirewallService.java b/api/src/com/cloud/network/firewall/FirewallService.java index 07c2fb5a838..bb353136c53 100644 --- a/api/src/com/cloud/network/firewall/FirewallService.java +++ b/api/src/com/cloud/network/firewall/FirewallService.java @@ -33,7 +33,7 @@ public interface FirewallService { /** * Revokes a firewall rule - * + * * @param ruleId * the id of the rule to revoke. * @return diff --git a/api/src/com/cloud/network/firewall/NetworkACLService.java b/api/src/com/cloud/network/firewall/NetworkACLService.java index 10896b6dc74..2c84a20f164 100644 --- a/api/src/com/cloud/network/firewall/NetworkACLService.java +++ b/api/src/com/cloud/network/firewall/NetworkACLService.java @@ -29,7 +29,7 @@ import com.cloud.utils.Pair; public interface NetworkACLService { FirewallRule getNetworkACL(long ruleId); boolean applyNetworkACLs(long networkId, Account caller) throws ResourceUnavailableException; - + /** * @param createNetworkACLCmd * @return @@ -46,5 +46,5 @@ public interface NetworkACLService { * @return */ Pair, Integer> listNetworkACLs(ListNetworkACLsCmd cmd); - + } diff --git a/api/src/com/cloud/network/guru/NetworkGuru.java b/api/src/com/cloud/network/guru/NetworkGuru.java index 9b8c04b4fc3..4a9b871e240 100755 --- a/api/src/com/cloud/network/guru/NetworkGuru.java +++ b/api/src/com/cloud/network/guru/NetworkGuru.java @@ -35,7 +35,7 @@ import com.cloud.vm.VirtualMachineProfile; /** * - Designs a virtual network depending on the network offering. * - Implements the virtual network when a virtual machine requires the network to be started. - * + * * There can be multiple NetworkGurus in a CloudStack system. Each NetworkGuru * resources when VMs are gone. * @@ -44,28 +44,28 @@ import com.cloud.vm.VirtualMachineProfile; * This means the NetworkGuru checks the parameters such as cidr, gateway, * vlan, etc and returns a network that can work with those paremeters. * Note that at this point the network is only a virtual network. It has - * not been substantiated with resources, such as vlan, to make the network + * not been substantiated with resources, such as vlan, to make the network * functional in the physical environment. At this stage, the network is in - * Allocated state. - * - * - When the first virtual machine is about to be started and requires network + * Allocated state. + * + * - When the first virtual machine is about to be started and requires network * services, the guest network needs to have resources to make it usable * within the physical environment. At this time, the NetworkGuru is * called with the implement() method to acquire those resources. - * + * * - For every virtual machine starting in the network, the NetworkGuru is * asked via the reserve() method to make sure everything the virtual * machine needs to be functional in the network is reserved. - * + * * - For every virtual machine being stopped in the network, the NetworkGuru * is informed via the release() method to make sure resources occupied * by the virtual machine is released. - * + * * - If all virtual machines within the network have been stopped, the guest * network is garbage collected. When a guest network is garbage collected * the NetworkGuru is informed via the shutdown() method to release any * resources it allocated to that network. - * + * * - When a guest network is being deleted, the NetworkGuru is informed via * the trash() method. * @@ -74,18 +74,18 @@ public interface NetworkGuru extends Adapter { /** * Cloud stack requires the NetworkGuru to design a guest network given * the software packages Once a NetworkGuru returns the designed network, - * that NetworkGuru is forever associated with the guest network. It is + * that NetworkGuru is forever associated with the guest network. It is * very important for the NetworkGuru implementation to be very specific * about the network it is responsible for designing. Things that can * be used to make determination can be isolation methods, services * provided on the guest network and the service provider that's on the * guest network. - * + * * If a network is already fully substantiated with the necessary resources - * during this design phase, then the state should be set to Setup. If + * during this design phase, then the state should be set to Setup. If * the resources are not allocated at this point, the state should be set - * to Allocated. - * + * to Allocated. + * * @param offering network offering that contains the package of services * the end user intends to use on that network. * @param plan where is this network being deployed. @@ -99,29 +99,29 @@ public interface NetworkGuru extends Adapter { * For guest networks that are in Allocated state after the design stage, * resources are allocated when the guest network is actually being used * by a virtual machine. implement() is called to acquire those resources. - * + * * @param network network to be implemented. * @param offering network offering that the network was created with. * @param destination where the network is being deployed in. * @return a fully implemented Network. - * @throws InsufficientVirtualNetworkCapcityException if there's not + * @throws InsufficientVirtualNetworkCapcityException if there's not * enough resources to make the guest network usable in the physical - * environment. At this time, the admin generally must be involved to + * environment. At this time, the admin generally must be involved to * allocate more resources before any more guest network can be implemented. */ Network implement(Network network, NetworkOffering offering, DeployDestination destination, ReservationContext context) throws InsufficientVirtualNetworkCapcityException; /** - * Once a guest network has been designed, virtual machines can be - * created. allocated() is called for the NetworkGuru to design a nic - * that will make the virtual machine work within the guest network. - * + * Once a guest network has been designed, virtual machines can be + * created. allocated() is called for the NetworkGuru to design a nic + * that will make the virtual machine work within the guest network. + * * @param network guest network that the virtual machine will be deployed in. - * @param nic nic information that the end user wants to set. The + * @param nic nic information that the end user wants to set. The * NetworkGuru should check this information with the guest * network settings to make sure everything will work. * @param vm virtual machine that is about to be deployed. - * @return NicProfile nic with all of the information + * @return NicProfile nic with all of the information * @throws InsufficientVirtualNetworkCapcityException if there's * insufficient capacity within the guest network. * @throws InsufficientAddressCapacityException if there are not addresses @@ -134,7 +134,7 @@ public interface NetworkGuru extends Adapter { * be allocated its resources in order for it to participate within the * guest network. reserve() is called for the NetworkGuru to make sure * that works. - * + * * @param nic nic that the vm is using to access the guest network. * @param network guest network the vm is in. * @param vm vm @@ -145,14 +145,14 @@ public interface NetworkGuru extends Adapter { * @throws InsufficientAddressCapacityException if there's not enough ip * addresses. * @throws ConcurrentOperationException if there are multiple operations - * happening on this guest network or vm. + * happening on this guest network or vm. */ void reserve(NicProfile nic, Network network, VirtualMachineProfile vm, DeployDestination dest, ReservationContext context) throws InsufficientVirtualNetworkCapcityException, InsufficientAddressCapacityException, ConcurrentOperationException; /** * When a virtual machine is stopped, the NetworkGuru is informed via the - * release() method to release any resources. - * + * release() method to release any resources. + * * @param nic nic that the vm is using to access the guest network. * @param vm virtual machine * @param reservationId reservation id passed to it in the ReservationContext @@ -164,7 +164,7 @@ public interface NetworkGuru extends Adapter { * When a virtual machine is destroyed, the NetworkGuru is informed via * the deallocate() method to make sure any resources that are allocated * are released. - * + * * @param network guest network that the vm was running in. * @param nic nic that the vm was using to access the guest network. * @param vm virtual machine being destroyed. @@ -181,19 +181,19 @@ public interface NetworkGuru extends Adapter { void updateNicProfile(NicProfile profile, Network network); /** - * When no virtual machines are running in the network, the network is + * When no virtual machines are running in the network, the network is * shutdown and all physical resources are released. The NetworkGuru is * informed via the shutdown method(). - * + * * @param network guest network being shut down * @param offering network offering the guest network was created with. */ void shutdown(NetworkProfile network, NetworkOffering offering); /** - * When a guest network is destroyed, the NetworkGuru is informed via the + * When a guest network is destroyed, the NetworkGuru is informed via the * trash() method to recover any resources. - * + * * @param network guest network being destroyed. * @param offering network offering the guest network was created with. * @param owner owner of the network. diff --git a/api/src/com/cloud/network/lb/LoadBalancingRule.java b/api/src/com/cloud/network/lb/LoadBalancingRule.java index 186ea566f97..fb1d988a4de 100644 --- a/api/src/com/cloud/network/lb/LoadBalancingRule.java +++ b/api/src/com/cloud/network/lb/LoadBalancingRule.java @@ -230,7 +230,7 @@ public class LoadBalancingRule implements FirewallRule, LoadBalancer { return null; } - + @Override public TrafficType getTrafficType() { return null; diff --git a/api/src/com/cloud/network/lb/LoadBalancingRulesService.java b/api/src/com/cloud/network/lb/LoadBalancingRulesService.java index 0cf2ef94ace..c5e6b5c3f40 100644 --- a/api/src/com/cloud/network/lb/LoadBalancingRulesService.java +++ b/api/src/com/cloud/network/lb/LoadBalancingRulesService.java @@ -36,7 +36,7 @@ import com.cloud.utils.Pair; public interface LoadBalancingRulesService { /** * Create a load balancer rule from the given ipAddress/port to the given private port - * + * * @param openFirewall * TODO * @param cmd @@ -53,7 +53,7 @@ public interface LoadBalancingRulesService { /** * Create a stickiness policy to a load balancer from the given stickiness method name and parameters in * (name,value) pairs. - * + * * @param cmd * the command specifying the stickiness method name, params (name,value pairs), policy name and * description. @@ -63,7 +63,7 @@ public interface LoadBalancingRulesService { public StickinessPolicy createLBStickinessPolicy(CreateLBStickinessPolicyCmd cmd) throws NetworkRuleConflictException; public boolean applyLBStickinessPolicy(CreateLBStickinessPolicyCmd cmd) throws ResourceUnavailableException; - + boolean deleteLBStickinessPolicy(long stickinessPolicyId, boolean apply); /** * Assign a virtual machine, or list of virtual machines, to a load balancer. @@ -77,7 +77,7 @@ public interface LoadBalancingRulesService { /** * List instances that have either been applied to a load balancer or are eligible to be assigned to a load * balancer. - * + * * @param cmd * @return list of vm instances that have been or can be applied to a load balancer */ @@ -85,7 +85,7 @@ public interface LoadBalancingRulesService { /** * List load balancer rules based on the given criteria - * + * * @param cmd * the command that specifies the criteria to use for listing load balancers. Load balancers can be * listed @@ -96,7 +96,7 @@ public interface LoadBalancingRulesService { /** * List stickiness policies based on the given criteria - * + * * @param cmd * the command specifies the load balancing rule id. * @return list of stickiness policies that match the criteria. @@ -107,4 +107,4 @@ public interface LoadBalancingRulesService { LoadBalancer findById(long LoadBalancer); -} \ No newline at end of file +} diff --git a/api/src/com/cloud/network/rules/FirewallRule.java b/api/src/com/cloud/network/rules/FirewallRule.java index f2a83af29fe..148b4827147 100644 --- a/api/src/com/cloud/network/rules/FirewallRule.java +++ b/api/src/com/cloud/network/rules/FirewallRule.java @@ -29,39 +29,39 @@ public interface FirewallRule extends ControlledEntity { StaticNat, NetworkACL, } - + enum FirewallRuleType { System, // The pre-defined rules created by admin, in the system wide User; // the rules created by user, to a specific ip } - + enum State { Staged, // Rule been created but has never got through network rule conflict detection. Rules in this state can not be sent to network elements. Add, // Add means the rule has been created and has gone through network rule conflict detection. Active, // Rule has been sent to the network elements and reported to be active. Revoke // Revoke means this rule has been revoked. If this rule has been sent to the network elements, the rule will be deleted from database. } - + enum TrafficType { Ingress, Egress } - + /** * @return database id. */ long getId(); - + /** * @return external id. */ String getXid(); - + /** * @return first port of the source port range. */ Integer getSourcePortStart(); - + /** * @return last port of the source prot range. If this is null, that means only one port is mapped. */ @@ -71,21 +71,21 @@ public interface FirewallRule extends ControlledEntity { * @return protocol to open these ports for. */ String getProtocol(); - + Purpose getPurpose(); - + State getState(); - + long getNetworkId(); - + Long getSourceIpAddressId(); Integer getIcmpCode(); Integer getIcmpType(); - + List getSourceCidrList(); - + Long getRelated(); FirewallRuleType getType(); diff --git a/api/src/com/cloud/network/rules/LbStickinessMethod.java b/api/src/com/cloud/network/rules/LbStickinessMethod.java index 5f0abe8aaf6..c71b19e3a86 100644 --- a/api/src/com/cloud/network/rules/LbStickinessMethod.java +++ b/api/src/com/cloud/network/rules/LbStickinessMethod.java @@ -24,14 +24,14 @@ import com.google.gson.annotations.SerializedName; public class LbStickinessMethod { public static class StickinessMethodType { private String _name; - + public static final StickinessMethodType LBCookieBased = new StickinessMethodType("LbCookie"); public static final StickinessMethodType AppCookieBased = new StickinessMethodType("AppCookie"); public static final StickinessMethodType SourceBased = new StickinessMethodType("SourceBased"); public StickinessMethodType(String name) { _name = name; } - + public String getName() { return _name; } @@ -40,13 +40,13 @@ public class LbStickinessMethod { public class LbStickinessMethodParam { @SerializedName("paramname") private String _paramName; - + @SerializedName("required") private Boolean _required; - + @SerializedName("isflag") private Boolean _isFlag; - + @SerializedName("description") private String _description; @@ -65,7 +65,7 @@ public class LbStickinessMethod { public void setParamName(String paramName) { this._paramName = paramName; } - + public Boolean getIsflag() { return _isFlag; } @@ -73,7 +73,7 @@ public class LbStickinessMethod { public void setIsflag(Boolean isFlag) { this._isFlag = isFlag; } - + public Boolean getRequired() { return _required; } @@ -94,10 +94,10 @@ public class LbStickinessMethod { @SerializedName("methodname") private String _methodName; - + @SerializedName("paramlist") private List _paramList; - + @SerializedName("description") private String _description; @@ -118,7 +118,7 @@ public class LbStickinessMethod { public String getMethodName() { return _methodName; } - + public List getParamList() { return _paramList; } diff --git a/api/src/com/cloud/network/rules/PortForwardingRule.java b/api/src/com/cloud/network/rules/PortForwardingRule.java index 6ac6f4521f9..c353e9bc3d4 100644 --- a/api/src/com/cloud/network/rules/PortForwardingRule.java +++ b/api/src/com/cloud/network/rules/PortForwardingRule.java @@ -26,26 +26,26 @@ public interface PortForwardingRule extends FirewallRule { * @return destination ip address. */ Ip getDestinationIpAddress(); - - + + /** * updates the destination ip address. */ void setDestinationIpAddress(Ip destinationIpAddress); - + /** * @return start of destination port. */ int getDestinationPortStart(); - + /** * @return end of destination port range */ int getDestinationPortEnd(); - + /** * @return destination ip address. */ - long getVirtualMachineId(); - + long getVirtualMachineId(); + } diff --git a/api/src/com/cloud/network/rules/RulesService.java b/api/src/com/cloud/network/rules/RulesService.java index 8eadfba7712..ddebcd01333 100644 --- a/api/src/com/cloud/network/rules/RulesService.java +++ b/api/src/com/cloud/network/rules/RulesService.java @@ -31,7 +31,7 @@ public interface RulesService { /** * Creates a port forwarding rule between two ip addresses or between * an ip address and a virtual machine. - * + * * @param rule * rule to be created. * @param vmId @@ -46,7 +46,7 @@ public interface RulesService { /** * Revokes a port forwarding rule - * + * * @param ruleId * the id of the rule to revoke. * @param caller @@ -56,7 +56,7 @@ public interface RulesService { /** * List port forwarding rules assigned to an ip address - * + * * @param cmd * the command object holding the criteria for listing port forwarding rules (the ipAddress) * @return list of port forwarding rules on the given address, empty list if no rules exist diff --git a/api/src/com/cloud/network/rules/StaticNat.java b/api/src/com/cloud/network/rules/StaticNat.java index bf29ab4bf9c..390a0dbaedc 100644 --- a/api/src/com/cloud/network/rules/StaticNat.java +++ b/api/src/com/cloud/network/rules/StaticNat.java @@ -18,13 +18,13 @@ package com.cloud.network.rules; public interface StaticNat{ - + long getAccountId(); - + long getDomainId(); - + long getNetworkId(); - + long getSourceIpAddressId(); String getDestIpAddress(); diff --git a/api/src/com/cloud/network/security/SecurityGroupRules.java b/api/src/com/cloud/network/security/SecurityGroupRules.java index 37287f0c76b..86c2acaae02 100644 --- a/api/src/com/cloud/network/security/SecurityGroupRules.java +++ b/api/src/com/cloud/network/security/SecurityGroupRules.java @@ -39,6 +39,6 @@ public interface SecurityGroupRules { Long getAllowedNetworkId(); String getAllowedSourceIpCidr(); - + SecurityRuleType getRuleType(); } diff --git a/api/src/com/cloud/network/security/SecurityGroupService.java b/api/src/com/cloud/network/security/SecurityGroupService.java index 4a4b1712aba..55b6e78a815 100644 --- a/api/src/com/cloud/network/security/SecurityGroupService.java +++ b/api/src/com/cloud/network/security/SecurityGroupService.java @@ -38,7 +38,7 @@ public interface SecurityGroupService { public SecurityGroup createSecurityGroup(CreateSecurityGroupCmd command) throws PermissionDeniedException, InvalidParameterValueException; boolean revokeSecurityGroupIngress(RevokeSecurityGroupIngressCmd cmd); boolean revokeSecurityGroupEgress(RevokeSecurityGroupEgressCmd cmd); - + boolean deleteSecurityGroup(DeleteSecurityGroupCmd cmd) throws ResourceInUseException; /** @@ -49,7 +49,7 @@ public interface SecurityGroupService { public List searchForSecurityGroupRules(ListSecurityGroupsCmd cmd) throws PermissionDeniedException, InvalidParameterValueException; public List authorizeSecurityGroupIngress(AuthorizeSecurityGroupIngressCmd cmd); - + public List authorizeSecurityGroupEgress(AuthorizeSecurityGroupEgressCmd cmd); } diff --git a/api/src/com/cloud/network/security/SecurityRule.java b/api/src/com/cloud/network/security/SecurityRule.java index 401283aba4b..faf1b56db3a 100644 --- a/api/src/com/cloud/network/security/SecurityRule.java +++ b/api/src/com/cloud/network/security/SecurityRule.java @@ -23,11 +23,11 @@ public interface SecurityRule { public static class SecurityRuleType { public static final SecurityRuleType IngressRule = new SecurityRuleType("ingress"); public static final SecurityRuleType EgressRule = new SecurityRuleType("egress"); - + public SecurityRuleType(String type) { this._type = type; } - + public String getType(){ return _type; } @@ -40,11 +40,11 @@ public interface SecurityRule { int getStartPort(); int getEndPort(); - + String getType(); - + SecurityRuleType getRuleType(); - + String getProtocol(); AsyncInstanceCreateStatus getCreateStatus(); @@ -52,7 +52,7 @@ public interface SecurityRule { Long getAllowedNetworkId(); String getAllowedSourceIpCidr(); - + String getUuid(); } diff --git a/api/src/com/cloud/network/vpc/PrivateIp.java b/api/src/com/cloud/network/vpc/PrivateIp.java index 992a87ca475..857fc226f30 100644 --- a/api/src/com/cloud/network/vpc/PrivateIp.java +++ b/api/src/com/cloud/network/vpc/PrivateIp.java @@ -42,7 +42,7 @@ public interface PrivateIp { * @return */ String getMacAddress(); - + long getNetworkId(); } diff --git a/api/src/com/cloud/network/vpc/StaticRoute.java b/api/src/com/cloud/network/vpc/StaticRoute.java index 56b34cbaa86..9a900b2b285 100644 --- a/api/src/com/cloud/network/vpc/StaticRoute.java +++ b/api/src/com/cloud/network/vpc/StaticRoute.java @@ -51,5 +51,5 @@ public interface StaticRoute extends ControlledEntity{ */ long getId(); - + } diff --git a/api/src/com/cloud/network/vpc/StaticRouteProfile.java b/api/src/com/cloud/network/vpc/StaticRouteProfile.java index 73d0a84f8b7..0771aff5f7f 100644 --- a/api/src/com/cloud/network/vpc/StaticRouteProfile.java +++ b/api/src/com/cloud/network/vpc/StaticRouteProfile.java @@ -28,7 +28,7 @@ public class StaticRouteProfile implements StaticRoute{ String gateway; String netmask; String ipAddress; - + public StaticRouteProfile(StaticRoute staticRoute, VpcGateway gateway) { this.id = staticRoute.getId(); @@ -82,7 +82,7 @@ public class StaticRouteProfile implements StaticRoute{ public String getVlanTag() { return vlanTag; } - + public String getIp4Address() { return ipAddress; } @@ -94,5 +94,5 @@ public class StaticRouteProfile implements StaticRoute{ public String getNetmask() { return netmask; } - + } diff --git a/api/src/com/cloud/network/vpc/Vpc.java b/api/src/com/cloud/network/vpc/Vpc.java index c9f52ff999f..b9f3d6c1a49 100644 --- a/api/src/com/cloud/network/vpc/Vpc.java +++ b/api/src/com/cloud/network/vpc/Vpc.java @@ -24,7 +24,7 @@ public interface Vpc extends ControlledEntity{ Enabled, Inactive } - + public static final String _supportedProviders = Network.Provider.VPCVirtualRouter.getName(); boolean readyToUse(); @@ -32,7 +32,7 @@ public interface Vpc extends ControlledEntity{ long getId(); String getUuid(); - + String getName(); long getZoneId(); @@ -42,11 +42,11 @@ public interface Vpc extends ControlledEntity{ State getState(); long getVpcOfferingId(); - + String getDisplayText(); String getNetworkDomain(); boolean isRestartRequired(); - + } diff --git a/api/src/com/cloud/network/vpc/VpcGateway.java b/api/src/com/cloud/network/vpc/VpcGateway.java index 23f31fbca7e..1ba28cc1159 100644 --- a/api/src/com/cloud/network/vpc/VpcGateway.java +++ b/api/src/com/cloud/network/vpc/VpcGateway.java @@ -25,13 +25,13 @@ public interface VpcGateway extends Identity, ControlledEntity { Public, Vpn } - + public enum State { Creating, Ready, Deleting } - + long getId(); /** diff --git a/api/src/com/cloud/network/vpc/VpcOffering.java b/api/src/com/cloud/network/vpc/VpcOffering.java index 10c1d2aca96..2c2b6f58ab1 100644 --- a/api/src/com/cloud/network/vpc/VpcOffering.java +++ b/api/src/com/cloud/network/vpc/VpcOffering.java @@ -21,7 +21,7 @@ public interface VpcOffering { Disabled, Enabled } - + public static final String defaultVPCOfferingName = "Default VPC offering"; long getId(); @@ -35,7 +35,7 @@ public interface VpcOffering { String getDisplayText(); State getState(); - + boolean isDefault(); /** diff --git a/api/src/com/cloud/network/vpc/VpcService.java b/api/src/com/cloud/network/vpc/VpcService.java index 3d6c2b78fd0..18e4fa1e371 100644 --- a/api/src/com/cloud/network/vpc/VpcService.java +++ b/api/src/com/cloud/network/vpc/VpcService.java @@ -37,20 +37,20 @@ import com.cloud.user.User; import com.cloud.utils.Pair; public interface VpcService { - + public VpcOffering getVpcOffering(long vpcOfferingId); - + public VpcOffering createVpcOffering(String name, String displayText, List supportedServices); - + public Vpc getVpc(long vpcId); - + public Vpc getActiveVpc(long vpcId); - + public List getVpcNetworks(long vpcId); - + Map> getVpcOffSvcProvidersMap(long vpcOffId); - - List listVpcOfferings(Long id, String name, String displayText, List supportedServicesStr, + + List listVpcOfferings(Long id, String name, String displayText, List supportedServicesStr, Boolean isDefault, String keyword, String state, Long startIndex, Long pageSizeVal); /** @@ -85,9 +85,9 @@ public interface VpcService { /** * @param vpcId * @return - * @throws InsufficientCapacityException - * @throws ResourceUnavailableException - * @throws ConcurrentOperationException + * @throws InsufficientCapacityException + * @throws ResourceUnavailableException + * @throws ConcurrentOperationException */ public boolean deleteVpc(long vpcId) throws ConcurrentOperationException, ResourceUnavailableException; @@ -120,22 +120,22 @@ public interface VpcService { * @param vpc * @return */ - public List listVpcs(Long id, String vpcName, String displayText, + public List listVpcs(Long id, String vpcName, String displayText, List supportedServicesStr, String cidr, Long vpcOffId, String state, String accountName, Long domainId, - String keyword, Long startIndex, Long pageSizeVal, Long zoneId, Boolean isRecursive, Boolean listAll, + String keyword, Long startIndex, Long pageSizeVal, Long zoneId, Boolean isRecursive, Boolean listAll, Boolean restartRequired, Map tags, Long projectId); /** * @param vpcId * @param destroyOnFailure TODO * @return - * @throws InsufficientCapacityException - * @throws ResourceUnavailableException - * @throws ConcurrentOperationException + * @throws InsufficientCapacityException + * @throws ResourceUnavailableException + * @throws ConcurrentOperationException */ - boolean startVpc(long vpcId, boolean destroyOnFailure) throws ConcurrentOperationException, + boolean startVpc(long vpcId, boolean destroyOnFailure) throws ConcurrentOperationException, ResourceUnavailableException, InsufficientCapacityException; - + /** * @param vpcId * @return @@ -147,10 +147,10 @@ public interface VpcService { /** * @param id * @return - * @throws InsufficientCapacityException + * @throws InsufficientCapacityException */ boolean restartVpc(long id) throws ConcurrentOperationException, ResourceUnavailableException, InsufficientCapacityException; - + PrivateGateway getVpcPrivateGateway(long id); /** @@ -162,28 +162,28 @@ public interface VpcService { * @param netmask * @param gatewayOwnerId * @return - * @throws InsufficientCapacityException - * @throws ConcurrentOperationException - * @throws ResourceAllocationException + * @throws InsufficientCapacityException + * @throws ConcurrentOperationException + * @throws ResourceAllocationException */ - public PrivateGateway createVpcPrivateGateway(long vpcId, Long physicalNetworkId, String vlan, String ipAddress, - String gateway, String netmask, long gatewayOwnerId) throws ResourceAllocationException, + public PrivateGateway createVpcPrivateGateway(long vpcId, Long physicalNetworkId, String vlan, String ipAddress, + String gateway, String netmask, long gatewayOwnerId) throws ResourceAllocationException, ConcurrentOperationException, InsufficientCapacityException; /** * @param gatewayId * @param destroyOnFailure TODO * @return - * @throws ResourceUnavailableException - * @throws ConcurrentOperationException + * @throws ResourceUnavailableException + * @throws ConcurrentOperationException */ public PrivateGateway applyVpcPrivateGateway(long gatewayId, boolean destroyOnFailure) throws ConcurrentOperationException, ResourceUnavailableException; - + /** * @param id * @return - * @throws ResourceUnavailableException - * @throws ConcurrentOperationException + * @throws ResourceUnavailableException + * @throws ConcurrentOperationException */ boolean deleteVpcPrivateGateway(long gatewayId) throws ConcurrentOperationException, ResourceUnavailableException; @@ -202,14 +202,14 @@ public interface VpcService { /** * @param vpcId * @return - * @throws ResourceUnavailableException + * @throws ResourceUnavailableException */ public boolean applyStaticRoutes(long vpcId) throws ResourceUnavailableException; /** * @param routeId * @return TODO - * @throws ResourceUnavailableException + * @throws ResourceUnavailableException */ public boolean revokeStaticRoute(long routeId) throws ResourceUnavailableException; @@ -231,7 +231,7 @@ public interface VpcService { * @return */ VpcGateway getVpcGateway(long id); - + /** * @param ipId * @param vpcId @@ -243,7 +243,7 @@ public interface VpcService { */ IpAddress associateIPToVpc(long ipId, long vpcId) throws ResourceAllocationException, ResourceUnavailableException, InsufficientAddressCapacityException, ConcurrentOperationException; - - public Network updateVpcGuestNetwork(long networkId, String name, String displayText, Account callerAccount, + + public Network updateVpcGuestNetwork(long networkId, String name, String displayText, Account callerAccount, User callerUser, String domainSuffix, Long ntwkOffId, Boolean changeCidr); } diff --git a/api/src/com/cloud/network/vpn/RemoteAccessVpnService.java b/api/src/com/cloud/network/vpn/RemoteAccessVpnService.java index b74611b9e72..11ba1e50ecb 100644 --- a/api/src/com/cloud/network/vpn/RemoteAccessVpnService.java +++ b/api/src/com/cloud/network/vpn/RemoteAccessVpnService.java @@ -29,7 +29,7 @@ import com.cloud.utils.Pair; public interface RemoteAccessVpnService { - RemoteAccessVpn createRemoteAccessVpn(long vpnServerAddressId, String ipRange, boolean openFirewall, long networkId) + RemoteAccessVpn createRemoteAccessVpn(long vpnServerAddressId, String ipRange, boolean openFirewall, long networkId) throws NetworkRuleConflictException; void destroyRemoteAccessVpn(long vpnServerAddressId, Account caller) throws ResourceUnavailableException; RemoteAccessVpn startRemoteAccessVpn(long vpnServerAddressId, boolean openFirewall) throws ResourceUnavailableException; @@ -38,12 +38,12 @@ public interface RemoteAccessVpnService { boolean removeVpnUser(long vpnOwnerId, String userName, Account caller); List listVpnUsers(long vpnOwnerId, String userName); boolean applyVpnUsers(long vpnOwnerId, String userName); - + Pair, Integer> searchForRemoteAccessVpns(ListRemoteAccessVpnsCmd cmd); Pair, Integer> searchForVpnUsers(ListVpnUsersCmd cmd); - + List listRemoteAccessVpns(long networkId); - + RemoteAccessVpn getRemoteAccessVpn(long vpnId); } diff --git a/api/src/com/cloud/offering/DiskOffering.java b/api/src/com/cloud/offering/DiskOffering.java index a937c6d789d..32a338f0eda 100644 --- a/api/src/com/cloud/offering/DiskOffering.java +++ b/api/src/com/cloud/offering/DiskOffering.java @@ -21,7 +21,7 @@ import java.util.Date; /** * Represents a disk offering that specifies what the end user needs in * the disk offering. - * + * */ public interface DiskOffering { long getId(); diff --git a/api/src/com/cloud/offering/NetworkOffering.java b/api/src/com/cloud/offering/NetworkOffering.java index a514ccf17f4..ef9bead8f07 100644 --- a/api/src/com/cloud/offering/NetworkOffering.java +++ b/api/src/com/cloud/offering/NetworkOffering.java @@ -21,7 +21,7 @@ import com.cloud.network.Networks.TrafficType; /** * Describes network offering - * + * */ public interface NetworkOffering { @@ -40,7 +40,7 @@ public interface NetworkOffering { public final static String SystemManagementNetwork = "System-Management-Network"; public final static String SystemStorageNetwork = "System-Storage-Network"; public final static String SystemPrivateGatewayNetworkOffering = "System-Private-Gateway-Network-Offering"; - + public final static String DefaultSharedNetworkOfferingWithSGService = "DefaultSharedNetworkOfferingWithSGService"; public final static String DefaultIsolatedNetworkOfferingWithSourceNatService = "DefaultIsolatedNetworkOfferingWithSourceNatService"; public final static String OvsIsolatedNetworkOfferingWithSourceNatService = "OvsIsolatedNetworkOfferingWithSourceNatService"; diff --git a/api/src/com/cloud/offering/OfferingManager.java b/api/src/com/cloud/offering/OfferingManager.java index 3cc68dbcc6f..576679d04c9 100644 --- a/api/src/com/cloud/offering/OfferingManager.java +++ b/api/src/com/cloud/offering/OfferingManager.java @@ -18,30 +18,30 @@ package com.cloud.offering; /** * An administrator can create, delete, enable, and disable offerings. - * + * * There are three types of offerings: * - Disk Offering - package of disk performance and size specification. * - Network Offering - package of services available on a network. - * + * */ public interface OfferingManager { /** * Creates a service offering. - * + * * @return ServiceOffering */ ServiceOffering createServiceOffering(); /** * Creates a disk offering. - * + * * @return DiskOffering */ DiskOffering createDiskOffering(); /** * Creates a network offering. - * + * * @return NetworkOffering */ NetworkOffering createNetworkOffering(); diff --git a/api/src/com/cloud/projects/ProjectService.java b/api/src/com/cloud/projects/ProjectService.java index ea143b7e868..c0ec91bd511 100644 --- a/api/src/com/cloud/projects/ProjectService.java +++ b/api/src/com/cloud/projects/ProjectService.java @@ -29,7 +29,7 @@ import com.cloud.utils.Pair; public interface ProjectService { /** * Creates a new project - * + * * @param name * - project name * @param displayText @@ -45,7 +45,7 @@ public interface ProjectService { /** * Deletes a project - * + * * @param id * - project id * @return true if the project was deleted successfully, false otherwise @@ -54,14 +54,14 @@ public interface ProjectService { /** * Gets a project by id - * + * * @param id * - project id * @return project object */ Project getProject(long id); - Pair, Integer> listProjects(Long id, String name, String displayText, String state, String accountName, + Pair, Integer> listProjects(Long id, String name, String displayText, String state, String accountName, Long domainId, String keyword, Long startIndex, Long pageSize, boolean listAll, boolean isRecursive, Map tags); ProjectAccount assignAccountToProject(Project project, long accountId, Role accountRole); @@ -94,6 +94,6 @@ public interface ProjectService { Project enableProject(long projectId); boolean deleteProjectInvitation(long invitationId); - + Project findByProjectAccountIdIncludingRemoved(long projectAccountId); } diff --git a/api/src/com/cloud/resource/ResourceService.java b/api/src/com/cloud/resource/ResourceService.java index 10654539bb6..d36ca359b47 100755 --- a/api/src/com/cloud/resource/ResourceService.java +++ b/api/src/com/cloud/resource/ResourceService.java @@ -41,11 +41,11 @@ import com.cloud.utils.fsm.NoTransitionException; public interface ResourceService { /** * Updates a host - * + * * @param cmd * - the command specifying hostId * @return hostObject - * @throws NoTransitionException + * @throws NoTransitionException */ Host updateHost(UpdateHostCmd cmd) throws NoTransitionException; @@ -56,7 +56,7 @@ public interface ResourceService { /** * We will automatically create a cloud.com cluster to attach to the external cluster and return a hyper host to perform * host related operation within the cluster - * + * * @param cmd * @return * @throws IllegalArgumentException @@ -76,12 +76,12 @@ public interface ResourceService { /** * Deletes a host - * + * * @param hostId * TODO * @param isForced * TODO - * + * * @param true if deleted, false otherwise */ boolean deleteHost(long hostId, boolean isForced, boolean isForceDeleteStorage); @@ -93,7 +93,7 @@ public interface ResourceService { Cluster getCluster(Long clusterId); Swift discoverSwift(AddSwiftCmd addSwiftCmd) throws DiscoveryException; - + List getSupportedHypervisorTypes(long zoneId, boolean forVirtualRouter, Long podId); List listSwifts(ListSwiftsCmd cmd); diff --git a/api/src/com/cloud/serializer/Param.java b/api/src/com/cloud/serializer/Param.java index 005188216c6..02deb6f1c1f 100644 --- a/api/src/com/cloud/serializer/Param.java +++ b/api/src/com/cloud/serializer/Param.java @@ -31,6 +31,6 @@ public @interface Param { Class responseObject() default Object.class; boolean includeInApiDoc() default true; - + String since() default ""; } diff --git a/api/src/com/cloud/server/ManagementService.java b/api/src/com/cloud/server/ManagementService.java index c97b67b0284..65360a521a1 100755 --- a/api/src/com/cloud/server/ManagementService.java +++ b/api/src/com/cloud/server/ManagementService.java @@ -94,7 +94,7 @@ import com.cloud.vm.VirtualMachine.Type; /** * Hopefully this is temporary. - * + * */ public interface ManagementService { static final String Name = "management-server"; @@ -104,21 +104,21 @@ public interface ManagementService { * for the * account that invokes the API. By specifying available=true all zones which the account can access. By specifying * available=false the zones where the account has virtual machine instances will be returned. - * + * * @return a list of DataCenters */ List listDataCenters(ListZonesByCmd cmd); /** * returns the a map of the names/values in the configuraton table - * + * * @return map of configuration name/values */ Pair, Integer> searchForConfigurations(ListCfgsByCmd c); /** * Searches for Service Offerings by the specified search criteria Can search by: "name" - * + * * @param cmd * @return List of ServiceOfferings */ @@ -126,12 +126,12 @@ public interface ManagementService { /** * Searches for Clusters by the specified search criteria - * + * * @param c * @return */ Pair, Integer> searchForClusters(ListClustersCmd c); - + /** * Searches for Clusters by the specified zone Id. * @param zoneId @@ -141,7 +141,7 @@ public interface ManagementService { /** * Searches for Pods by the specified search criteria Can search by: pod name and/or zone name - * + * * @param cmd * @return List of Pods */ @@ -150,7 +150,7 @@ public interface ManagementService { /** * Searches for servers by the specified search criteria Can search by: "name", "type", "state", "dataCenterId", * "podId" - * + * * @param cmd * @return List of Hosts */ @@ -158,7 +158,7 @@ public interface ManagementService { /** * Creates a new template - * + * * @param cmd * @return updated template */ @@ -170,7 +170,7 @@ public interface ManagementService { * Obtains a list of events by the specified search criteria. Can search by: "username", "type", "level", * "startDate", * "endDate" - * + * * @param c * @return List of Events. */ @@ -180,7 +180,7 @@ public interface ManagementService { * Obtains a list of routers by the specified search criteria. Can search by: "userId", "name", "state", * "dataCenterId", * "podId", "hostId" - * + * * @param cmd * @return List of DomainRouters. */ @@ -189,7 +189,7 @@ public interface ManagementService { /** * Obtains a list of IP Addresses by the specified search criteria. Can search by: "userId", "dataCenterId", * "address" - * + * * @param cmd * the command that wraps the search criteria * @return List of IPAddresses @@ -198,14 +198,14 @@ public interface ManagementService { /** * Obtains a list of all guest OS. - * + * * @return list of GuestOS */ Pair, Integer> listGuestOSByCriteria(ListGuestOsCmd cmd); /** * Obtains a list of all guest OS categories. - * + * * @return list of GuestOSCategories */ Pair, Integer> listGuestOSCategoriesByCriteria(ListGuestOsCategoriesCmd cmd); @@ -217,12 +217,12 @@ public interface ManagementService { VirtualMachine rebootSystemVM(RebootSystemVmCmd cmd); VirtualMachine destroySystemVM(DestroySystemVmCmd cmd); - + VirtualMachine upgradeSystemVM(UpgradeSystemVMCmd cmd); /** * update an existing domain - * + * * @param cmd * - the command containing domainId and new domainName * @return Domain object if the command succeeded @@ -231,7 +231,7 @@ public interface ManagementService { /** * Searches for alerts - * + * * @param c * @return List of Alerts */ @@ -239,7 +239,7 @@ public interface ManagementService { /** * list all the capacity rows in capacity operations table - * + * * @param cmd * @return List of capacities */ @@ -247,7 +247,7 @@ public interface ManagementService { /** * List ISOs that match the specified criteria. - * + * * @param cmd * The command that wraps the (optional) templateId, name, keyword, templateFilter, bootable, account, * and zoneId @@ -258,7 +258,7 @@ public interface ManagementService { /** * List templates that match the specified criteria. - * + * * @param cmd * The command that wraps the (optional) templateId, name, keyword, templateFilter, bootable, account, * and zoneId @@ -269,7 +269,7 @@ public interface ManagementService { /** * Search for disk offerings based on search criteria - * + * * @param cmd * the command containing the criteria to use for searching for disk offerings * @return a list of disk offerings that match the given criteria @@ -278,7 +278,7 @@ public interface ManagementService { /** * List storage pools that match the given criteria - * + * * @param cmd * the command that wraps the search criteria (zone, pod, name, IP address, path, and cluster id) * @return a list of storage pools that match the given criteria @@ -287,7 +287,7 @@ public interface ManagementService { /** * List system VMs by the given search criteria - * + * * @param cmd * the command that wraps the search criteria (host, name, state, type, zone, pod, and/or id) * @return the list of system vms that match the given criteria @@ -296,7 +296,7 @@ public interface ManagementService { /** * Returns back a SHA1 signed response - * + * * @param userId * -- id for the user * @return -- ArrayList of @@ -313,7 +313,7 @@ public interface ManagementService { /** * Extracts the volume to a particular location. - * + * * @param cmd * the command specifying url (where the volume needs to be extracted to), zoneId (zone where the volume * exists), @@ -321,23 +321,23 @@ public interface ManagementService { * @throws URISyntaxException * @throws InternalErrorException * @throws PermissionDeniedException - * + * */ Long extractVolume(ExtractVolumeCmd cmd) throws URISyntaxException; /** * return an array of available hypervisors - * + * * @param zoneId * TODO - * + * * @return an array of available hypervisors in the cloud */ List getHypervisors(Long zoneId); /** * This method uploads a custom cert to the db, and patches every cpvm with it on the current ms - * + * * @param cmd * -- upload certificate cmd * @return -- returns a string on success @@ -350,7 +350,7 @@ public interface ManagementService { /** * Searches for vlan by the specified search criteria Can search by: "id", "vlan", "name", "zoneID" - * + * * @param cmd * @return List of Vlans */ @@ -358,7 +358,7 @@ public interface ManagementService { /** * Search for async jobs by account and/or startDate - * + * * @param cmd * the command specifying the account and start date parameters * @return the list of async jobs that match the criteria @@ -367,7 +367,7 @@ public interface ManagementService { /** * Generates a random password that will be used (initially) by newly created and started virtual machines - * + * * @return a random password */ String generateRandomPassword(); @@ -378,7 +378,7 @@ public interface ManagementService { /** * Search registered key pairs for the logged in user. - * + * * @param cmd * The api command class. * @return The list of key pairs found. @@ -387,7 +387,7 @@ public interface ManagementService { /** * Registers a key pair for a given public key. - * + * * @param cmd * The api command class. * @return A VO with the key pair name and a finger print for the public key. @@ -396,7 +396,7 @@ public interface ManagementService { /** * Creates a new - * + * * @param cmd * The api command class. * @return A VO containing the key pair name, finger print for the public key and the private key material of the @@ -406,7 +406,7 @@ public interface ManagementService { /** * Deletes a key pair by name. - * + * * @param cmd * The api command class. * @return True on success. False otherwise. @@ -415,7 +415,7 @@ public interface ManagementService { /** * Finds and returns an encrypted password for a VM. - * + * * @param cmd * The api command class. * @return The encrypted password. @@ -428,7 +428,7 @@ public interface ManagementService { * List hosts for migrating the given VM. The API returns list of all hosts in the VM's cluster minus the current * host and * also a list of hosts that seem to have enough CPU and RAM capacity to host this VM. - * + * * @param Long * vmId * Id of The VM to migrate @@ -445,7 +445,7 @@ public interface ManagementService { /** * list all the top consumed resources across different capacity types - * + * * @param cmd * @return List of capacities */ diff --git a/api/src/com/cloud/server/ResourceTag.java b/api/src/com/cloud/server/ResourceTag.java index 117e721b893..0c160c4ff4e 100644 --- a/api/src/com/cloud/server/ResourceTag.java +++ b/api/src/com/cloud/server/ResourceTag.java @@ -19,7 +19,7 @@ package com.cloud.server; import com.cloud.acl.ControlledEntity; public interface ResourceTag extends ControlledEntity{ - + public enum TaggedResourceType { UserVm, Template, diff --git a/api/src/com/cloud/server/TaggedResourceService.java b/api/src/com/cloud/server/TaggedResourceService.java index dce799e5ca2..d813b656ad1 100644 --- a/api/src/com/cloud/server/TaggedResourceService.java +++ b/api/src/com/cloud/server/TaggedResourceService.java @@ -24,7 +24,7 @@ import com.cloud.server.ResourceTag.TaggedResourceType; import com.cloud.utils.Pair; public interface TaggedResourceService { - + TaggedResourceType getResourceType (String resourceTypeStr); /** @@ -56,6 +56,6 @@ public interface TaggedResourceService { * @return */ boolean deleteTags(List resourceIds, TaggedResourceType resourceType, Map tags); - + List listByResourceTypeAndId(TaggedResourceType type, long resourceId); } diff --git a/api/src/com/cloud/storage/StoragePool.java b/api/src/com/cloud/storage/StoragePool.java index 497523d7e38..2d01f9c324e 100644 --- a/api/src/com/cloud/storage/StoragePool.java +++ b/api/src/com/cloud/storage/StoragePool.java @@ -33,7 +33,7 @@ public interface StoragePool { String getName(); /*** - * + * * @return unique identifier */ String getUuid(); diff --git a/api/src/com/cloud/storage/StorageService.java b/api/src/com/cloud/storage/StorageService.java index 587c138465a..b05bc15441a 100644 --- a/api/src/com/cloud/storage/StorageService.java +++ b/api/src/com/cloud/storage/StorageService.java @@ -38,7 +38,7 @@ import com.cloud.utils.Pair; public interface StorageService{ /** * Create StoragePool based on uri - * + * * @param cmd * the command object that specifies the zone, cluster/pod, URI, details, etc. to use to create the * storage pool. @@ -49,12 +49,12 @@ public interface StorageService{ * @throws ResourceUnavailableException * TODO */ - StoragePool createPool(CreateStoragePoolCmd cmd) throws ResourceInUseException, IllegalArgumentException, + StoragePool createPool(CreateStoragePoolCmd cmd) throws ResourceInUseException, IllegalArgumentException, UnknownHostException, ResourceUnavailableException; /** * Creates the database object for a volume based on the given criteria - * + * * @param cmd * the API command wrapping the criteria (account/domainId [admin only], zone, diskOffering, snapshot, * name) @@ -65,7 +65,7 @@ public interface StorageService{ /** * Creates the volume based on the given criteria - * + * * @param cmd * the API command wrapping the criteria (account/domainId [admin only], zone, diskOffering, snapshot, * name) @@ -76,7 +76,7 @@ public interface StorageService{ /** * Delete the storage pool - * + * * @param cmd * - the command specifying poolId * @return success or failure @@ -85,7 +85,7 @@ public interface StorageService{ /** * Enable maintenance for primary storage - * + * * @param cmd * - the command specifying primaryStorageId * @return the primary storage pool @@ -94,19 +94,19 @@ public interface StorageService{ * @throws InsufficientCapacityException * TODO */ - public StoragePool preparePrimaryStorageForMaintenance(Long primaryStorageId) throws ResourceUnavailableException, + public StoragePool preparePrimaryStorageForMaintenance(Long primaryStorageId) throws ResourceUnavailableException, InsufficientCapacityException; /** * Complete maintenance for primary storage - * + * * @param cmd * - the command specifying primaryStorageId * @return the primary storage pool * @throws ResourceUnavailableException * TODO */ - public StoragePool cancelPrimaryStorageForMaintenance(CancelPrimaryStorageMaintenanceCmd cmd) + public StoragePool cancelPrimaryStorageForMaintenance(CancelPrimaryStorageMaintenanceCmd cmd) throws ResourceUnavailableException; public StoragePool updateStoragePool(UpdateStoragePoolCmd cmd) throws IllegalArgumentException; @@ -119,9 +119,9 @@ public interface StorageService{ /** * Uploads the volume to secondary storage - * - * @param UploadVolumeCmd cmd - * + * + * @param UploadVolumeCmd cmd + * * @return Volume object */ Volume uploadVolume(UploadVolumeCmd cmd) throws ResourceAllocationException; diff --git a/api/src/com/cloud/storage/StorageStats.java b/api/src/com/cloud/storage/StorageStats.java index fe21c44b702..c30e1de10f6 100755 --- a/api/src/com/cloud/storage/StorageStats.java +++ b/api/src/com/cloud/storage/StorageStats.java @@ -22,7 +22,7 @@ public interface StorageStats { */ public long getByteUsed(); /** - * @return bytes capacity of the storage server + * @return bytes capacity of the storage server */ public long getCapacityBytes(); } diff --git a/api/src/com/cloud/storage/Volume.java b/api/src/com/cloud/storage/Volume.java index 6e8e48e48d8..d24c4fd49d0 100755 --- a/api/src/com/cloud/storage/Volume.java +++ b/api/src/com/cloud/storage/Volume.java @@ -35,8 +35,8 @@ public interface Volume extends ControlledEntity, BasedOn, StateObject { - Allocated("Resource is allocated but not reserved"), Reserving("Resource is being reserved right now"), + Allocated("Resource is allocated but not reserved"), Reserving("Resource is being reserved right now"), Reserved("Resource has been reserved."), Releasing("Resource is being released"), Deallocating( "Resource is being deallocated"); diff --git a/api/src/com/cloud/vm/NicProfile.java b/api/src/com/cloud/vm/NicProfile.java index c5ffbeaa502..bdd553bc29b 100644 --- a/api/src/com/cloud/vm/NicProfile.java +++ b/api/src/com/cloud/vm/NicProfile.java @@ -207,7 +207,7 @@ public class NicProfile { return strategy; } - public NicProfile(Nic nic, Network network, URI broadcastUri, URI isolationUri, Integer networkRate, + public NicProfile(Nic nic, Network network, URI broadcastUri, URI isolationUri, Integer networkRate, boolean isSecurityGroupEnabled, String name) { this.id = nic.getId(); this.networkId = network.getId(); diff --git a/api/src/com/cloud/vm/RunningOn.java b/api/src/com/cloud/vm/RunningOn.java index a04e28edc3d..cb642939f3d 100644 --- a/api/src/com/cloud/vm/RunningOn.java +++ b/api/src/com/cloud/vm/RunningOn.java @@ -17,7 +17,7 @@ package com.cloud.vm; /** - * + * */ public interface RunningOn { diff --git a/api/src/com/cloud/vm/UserVmService.java b/api/src/com/cloud/vm/UserVmService.java index adc1ac5f8ff..5a1ff5de60c 100755 --- a/api/src/com/cloud/vm/UserVmService.java +++ b/api/src/com/cloud/vm/UserVmService.java @@ -59,7 +59,7 @@ import com.cloud.utils.exception.ExecutionException; public interface UserVmService { /** * Destroys one virtual machine - * + * * @param userId * the id of the user performing the action * @param vmId @@ -71,7 +71,7 @@ public interface UserVmService { /** * Destroys one virtual machine - * + * * @param userId * the id of the user performing the action * @param vmId @@ -83,7 +83,7 @@ public interface UserVmService { /** * Resets the password of a virtual machine. - * + * * @param cmd * - the command specifying vmId, password * @return the VM if reset worked successfully, null otherwise @@ -92,7 +92,7 @@ public interface UserVmService { /** * Attaches the specified volume to the specified VM - * + * * @param cmd * - the command specifying volumeId and vmId * @return the Volume object if attach worked successfully. @@ -101,7 +101,7 @@ public interface UserVmService { /** * Detaches the specified volume from the VM it is currently attached to. - * + * * @param cmd * - the command specifying volumeId * @return the Volume object if detach worked successfully. @@ -119,7 +119,7 @@ public interface UserVmService { /** * Create a template database record in preparation for creating a private template. - * + * * @param cmd * the command object that defines the name, display text, snapshot/volume, bits, public/private, etc. * for the @@ -133,7 +133,7 @@ public interface UserVmService { /** * Creates a private template from a snapshot of a VM - * + * * @param cmd * - the command specifying snapshotId, name, description * @return a template if successfully created, null otherwise @@ -142,7 +142,7 @@ public interface UserVmService { /** * Creates a Basic Zone User VM in the database and returns the VM to the caller. - * + * * @param zone * - availability zone for the virtual machine * @param serviceOffering @@ -189,7 +189,7 @@ public interface UserVmService { * - an optional domainId for the virtual machine. If the account parameter is used, domainId must also * be used * @return UserVm object if successful. - * + * * @throws InsufficientCapacityException * if there is insufficient capacity to deploy the VM. * @throws ConcurrentOperationException @@ -205,7 +205,7 @@ public interface UserVmService { /** * Creates a User VM in Advanced Zone (Security Group feature is enabled) in the database and returns the VM to the * caller. - * + * * @param zone * - availability zone for the virtual machine * @param serviceOffering @@ -254,7 +254,7 @@ public interface UserVmService { * - an optional domainId for the virtual machine. If the account parameter is used, domainId must also * be used * @return UserVm object if successful. - * + * * @throws InsufficientCapacityException * if there is insufficient capacity to deploy the VM. * @throws ConcurrentOperationException @@ -271,7 +271,7 @@ public interface UserVmService { /** * Creates a User VM in Advanced Zone (Security Group feature is disabled) in the database and returns the VM to the * caller. - * + * * @param zone * - availability zone for the virtual machine * @param serviceOffering @@ -318,7 +318,7 @@ public interface UserVmService { * - an optional domainId for the virtual machine. If the account parameter is used, domainId must also * be used * @return UserVm object if successful. - * + * * @throws InsufficientCapacityException * if there is insufficient capacity to deploy the VM. * @throws ConcurrentOperationException @@ -333,7 +333,7 @@ public interface UserVmService { /** * Starts the virtual machine created from createVirtualMachine. - * + * * @param cmd * Command to deploy. * @return UserVm object if successful. @@ -348,7 +348,7 @@ public interface UserVmService { /** * Creates a vm group. - * + * * @param name * - name of the group * @param accountId @@ -360,7 +360,7 @@ public interface UserVmService { /** * upgrade the service offering of the virtual machine - * + * * @param cmd * - the command specifying vmId and new serviceOfferingId * @return the vm @@ -374,7 +374,7 @@ public interface UserVmService { /** * Obtains a list of virtual machines by the specified search criteria. Can search by: "userId", "name", "state", * "dataCenterId", "podId", "hostId" - * + * * @param cmd * the API command that wraps the search criteria * @return List of UserVMs. @@ -392,7 +392,7 @@ public interface UserVmService { * Migrate the given VM to the destination host provided. The API returns the migrated VM if migration succeeds. * Only Root * Admin can migrate a VM. - * + * * @param destinationStorage * TODO * @param Long @@ -400,7 +400,7 @@ public interface UserVmService { * vmId of The VM to migrate * @param Host * destinationHost to migrate the VM - * + * * @return VirtualMachine migrated VM * @throws ManagementServerException * in case we get error finding the VM or host or access errors or other internal errors. diff --git a/api/src/com/cloud/vm/VirtualMachine.java b/api/src/com/cloud/vm/VirtualMachine.java index af6d102aebc..64ff9cdadc7 100755 --- a/api/src/com/cloud/vm/VirtualMachine.java +++ b/api/src/com/cloud/vm/VirtualMachine.java @@ -27,7 +27,7 @@ import com.cloud.utils.fsm.StateObject; /** * VirtualMachine describes the properties held by a virtual machine - * + * */ public interface VirtualMachine extends RunningOn, ControlledEntity, Identity, StateObject { @@ -245,7 +245,7 @@ public interface VirtualMachine extends RunningOn, ControlledEntity, Identity, S /** * returns the guest OS ID - * + * * @return guestOSId */ public long getGuestOSId(); @@ -290,6 +290,6 @@ public interface VirtualMachine extends RunningOn, ControlledEntity, Identity, S HypervisorType getHypervisorType(); public Map getDetails(); - + boolean canPlugNics(); } diff --git a/api/src/com/cloud/vm/VirtualMachineProfile.java b/api/src/com/cloud/vm/VirtualMachineProfile.java index 57277db32f3..0fab4436807 100644 --- a/api/src/com/cloud/vm/VirtualMachineProfile.java +++ b/api/src/com/cloud/vm/VirtualMachineProfile.java @@ -30,7 +30,7 @@ import com.cloud.user.Account; * VirtualMachineProfile describes one virtual machine. This object * on what the virtual machine profile should look like before it is * actually started on the hypervisor. - * + * * @param * a VirtualMachine */ diff --git a/api/src/com/cloud/api/commands/ActivateProjectCmd.java b/api/src/org/apache/cloudstack/api/user/project/command/ActivateProjectCmd.java similarity index 97% rename from api/src/com/cloud/api/commands/ActivateProjectCmd.java rename to api/src/org/apache/cloudstack/api/user/project/command/ActivateProjectCmd.java index 24a3510849a..b5526c6fe20 100644 --- a/api/src/com/cloud/api/commands/ActivateProjectCmd.java +++ b/api/src/org/apache/cloudstack/api/user/project/command/ActivateProjectCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.user.project.command; import org.apache.log4j.Logger; @@ -40,7 +40,7 @@ public class ActivateProjectCmd extends BaseAsyncCmd { ///////////////////////////////////////////////////// //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - + @IdentityMapper(entityTableName="projects") @Parameter(name=ApiConstants.ID, type=CommandType.LONG, required=true, description="id of the project to be modified") private Long id; @@ -57,19 +57,19 @@ public class ActivateProjectCmd extends BaseAsyncCmd { public String getCommandName() { return s_name; } - - + + @Override public long getEntityOwnerId() { Project project= _projectService.getProject(getId()); //verify input parameters if (project == null) { throw new InvalidParameterValueException("Unable to find project by id " + getId()); - } - - return _projectService.getProjectOwner(getId()).getId(); + } + + return _projectService.getProjectOwner(getId()).getId(); } - + ///////////////////////////////////////////////////// /////////////// API Implementation/////////////////// @@ -87,14 +87,14 @@ public class ActivateProjectCmd extends BaseAsyncCmd { throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to activate a project"); } } - + @Override public String getEventType() { return EventTypes.EVENT_PROJECT_ACTIVATE; } - + @Override public String getEventDescription() { return "Activating project: " + id; } -} \ No newline at end of file +} diff --git a/api/src/com/cloud/api/commands/CreateProjectCmd.java b/api/src/org/apache/cloudstack/api/user/project/command/CreateProjectCmd.java similarity index 98% rename from api/src/com/cloud/api/commands/CreateProjectCmd.java rename to api/src/org/apache/cloudstack/api/user/project/command/CreateProjectCmd.java index 0d7bbe8aec1..e66dc746358 100644 --- a/api/src/com/cloud/api/commands/CreateProjectCmd.java +++ b/api/src/org/apache/cloudstack/api/user/project/command/CreateProjectCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.user.project.command; import org.apache.log4j.Logger; @@ -146,4 +146,4 @@ public class CreateProjectCmd extends BaseAsyncCreateCmd { return "creating project"; } -} \ No newline at end of file +} diff --git a/api/src/com/cloud/api/commands/DeleteProjectCmd.java b/api/src/org/apache/cloudstack/api/user/project/command/DeleteProjectCmd.java similarity index 96% rename from api/src/com/cloud/api/commands/DeleteProjectCmd.java rename to api/src/org/apache/cloudstack/api/user/project/command/DeleteProjectCmd.java index b9e7685107d..ca9e334d496 100644 --- a/api/src/com/cloud/api/commands/DeleteProjectCmd.java +++ b/api/src/org/apache/cloudstack/api/user/project/command/DeleteProjectCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.user.project.command; import org.apache.log4j.Logger; @@ -74,26 +74,26 @@ public class DeleteProjectCmd extends BaseAsyncCmd { throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to delete project"); } } - + @Override public String getEventType() { return EventTypes.EVENT_PROJECT_DELETE; } - + @Override public String getEventDescription() { return "Deleting project: " + id; } - + @Override public long getEntityOwnerId() { Project project= _projectService.getProject(id); //verify input parameters if (project == null) { throw new InvalidParameterValueException("Unable to find project by id " + id); - } - - return _projectService.getProjectOwner(id).getId(); + } + + return _projectService.getProjectOwner(id).getId(); } - -} \ No newline at end of file + +} diff --git a/api/src/com/cloud/api/commands/DeleteProjectInvitationCmd.java b/api/src/org/apache/cloudstack/api/user/project/command/DeleteProjectInvitationCmd.java similarity index 98% rename from api/src/com/cloud/api/commands/DeleteProjectInvitationCmd.java rename to api/src/org/apache/cloudstack/api/user/project/command/DeleteProjectInvitationCmd.java index 620d22f5b93..9804bd60b67 100644 --- a/api/src/com/cloud/api/commands/DeleteProjectInvitationCmd.java +++ b/api/src/org/apache/cloudstack/api/user/project/command/DeleteProjectInvitationCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.user.project.command; import org.apache.log4j.Logger; diff --git a/api/src/com/cloud/api/commands/ListProjectInvitationsCmd.java b/api/src/org/apache/cloudstack/api/user/project/command/ListProjectInvitationsCmd.java similarity index 98% rename from api/src/com/cloud/api/commands/ListProjectInvitationsCmd.java rename to api/src/org/apache/cloudstack/api/user/project/command/ListProjectInvitationsCmd.java index c87ddfa801f..276ff8c70c5 100644 --- a/api/src/com/cloud/api/commands/ListProjectInvitationsCmd.java +++ b/api/src/org/apache/cloudstack/api/user/project/command/ListProjectInvitationsCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.user.project.command; import java.util.ArrayList; import java.util.List; diff --git a/api/src/com/cloud/api/commands/ListProjectsCmd.java b/api/src/org/apache/cloudstack/api/user/project/command/ListProjectsCmd.java similarity index 97% rename from api/src/com/cloud/api/commands/ListProjectsCmd.java rename to api/src/org/apache/cloudstack/api/user/project/command/ListProjectsCmd.java index 6758c1e30cd..d8afc64a3d3 100644 --- a/api/src/com/cloud/api/commands/ListProjectsCmd.java +++ b/api/src/org/apache/cloudstack/api/user/project/command/ListProjectsCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.user.project.command; import java.util.ArrayList; import java.util.Collection; @@ -44,7 +44,7 @@ public class ListProjectsCmd extends BaseListAccountResourcesCmd { ///////////////////////////////////////////////////// //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - + @IdentityMapper(entityTableName="projects") @Parameter(name=ApiConstants.ID, type=CommandType.LONG, description="list projects by project ID") private Long id; @@ -54,13 +54,13 @@ public class ListProjectsCmd extends BaseListAccountResourcesCmd { @Parameter(name=ApiConstants.DISPLAY_TEXT, type=CommandType.STRING, description="list projects by display text") private String displayText; - + @Parameter(name=ApiConstants.STATE, type=CommandType.STRING, description="list projects by state") private String state; - + @Parameter(name = ApiConstants.TAGS, type = CommandType.MAP, description = "List projects by tags (key/value pairs)") private Map tags; - + ///////////////////////////////////////////////////// /////////////////// Accessors /////////////////////// ///////////////////////////////////////////////////// @@ -76,12 +76,12 @@ public class ListProjectsCmd extends BaseListAccountResourcesCmd { public String getDisplayText() { return displayText; } - + @Override public String getCommandName() { return s_name; } - + public Map getTags() { Map tagsMap = null; if (tags != null && !tags.isEmpty()) { @@ -107,7 +107,7 @@ public class ListProjectsCmd extends BaseListAccountResourcesCmd { @Override public void execute(){ - Pair, Integer> projects = _projectService.listProjects(id, name, displayText, state, + Pair, Integer> projects = _projectService.listProjects(id, name, displayText, state, this.getAccountName(), this.getDomainId(), this.getKeyword(), this.getStartIndex(), this.getPageSizeVal(), this.listAll(), this.isRecursive(), getTags()); ListResponse response = new ListResponse(); @@ -118,7 +118,7 @@ public class ListProjectsCmd extends BaseListAccountResourcesCmd { } response.setResponses(projectResponses, projects.second()); response.setResponseName(getCommandName()); - + this.setResponseObject(response); } } diff --git a/api/src/com/cloud/api/commands/SuspendProjectCmd.java b/api/src/org/apache/cloudstack/api/user/project/command/SuspendProjectCmd.java similarity index 96% rename from api/src/com/cloud/api/commands/SuspendProjectCmd.java rename to api/src/org/apache/cloudstack/api/user/project/command/SuspendProjectCmd.java index 0ce454ae35f..4a60d5fce47 100644 --- a/api/src/com/cloud/api/commands/SuspendProjectCmd.java +++ b/api/src/org/apache/cloudstack/api/user/project/command/SuspendProjectCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.user.project.command; import org.apache.log4j.Logger; @@ -77,26 +77,26 @@ public class SuspendProjectCmd extends BaseAsyncCmd { throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to suspend a project"); } } - + @Override public String getEventType() { return EventTypes.EVENT_PROJECT_SUSPEND; } - + @Override public String getEventDescription() { return "Suspending project: " + id; } - + @Override public long getEntityOwnerId() { Project project= _projectService.getProject(id); //verify input parameters if (project == null) { throw new InvalidParameterValueException("Unable to find project by id " + id); - } - - return _projectService.getProjectOwner(id).getId(); + } + + return _projectService.getProjectOwner(id).getId(); } - -} \ No newline at end of file + +} diff --git a/api/src/com/cloud/api/commands/UpdateProjectCmd.java b/api/src/org/apache/cloudstack/api/user/project/command/UpdateProjectCmd.java similarity index 96% rename from api/src/com/cloud/api/commands/UpdateProjectCmd.java rename to api/src/org/apache/cloudstack/api/user/project/command/UpdateProjectCmd.java index 54320d58b4b..f0bfbdf4db1 100644 --- a/api/src/com/cloud/api/commands/UpdateProjectCmd.java +++ b/api/src/org/apache/cloudstack/api/user/project/command/UpdateProjectCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.user.project.command; import org.apache.log4j.Logger; @@ -41,14 +41,14 @@ public class UpdateProjectCmd extends BaseAsyncCmd { ///////////////////////////////////////////////////// //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - + @IdentityMapper(entityTableName="projects") @Parameter(name=ApiConstants.ID, type=CommandType.LONG, required=true, description="id of the project to be modified") private Long id; @Parameter(name=ApiConstants.ACCOUNT, type=CommandType.STRING, description="new Admin account for the project") private String accountName; - + @Parameter(name=ApiConstants.DISPLAY_TEXT, type=CommandType.STRING, description="display text of the project") private String displayText; @@ -72,18 +72,18 @@ public class UpdateProjectCmd extends BaseAsyncCmd { public String getCommandName() { return s_name; } - + @Override public long getEntityOwnerId() { Project project= _projectService.getProject(id); //verify input parameters if (project == null) { throw new InvalidParameterValueException("Unable to find project by id " + id); - } - - return _projectService.getProjectOwner(id).getId(); + } + + return _projectService.getProjectOwner(id).getId(); } - + ///////////////////////////////////////////////////// /////////////// API Implementation/////////////////// @@ -101,14 +101,14 @@ public class UpdateProjectCmd extends BaseAsyncCmd { throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to update a project"); } } - + @Override public String getEventType() { return EventTypes.EVENT_PROJECT_UPDATE; } - + @Override public String getEventDescription() { return "Updating project: " + id; } -} \ No newline at end of file +} diff --git a/api/src/com/cloud/api/commands/UpdateProjectInvitationCmd.java b/api/src/org/apache/cloudstack/api/user/project/command/UpdateProjectInvitationCmd.java similarity index 98% rename from api/src/com/cloud/api/commands/UpdateProjectInvitationCmd.java rename to api/src/org/apache/cloudstack/api/user/project/command/UpdateProjectInvitationCmd.java index 83aa03d2e86..8c24b2c1ea2 100644 --- a/api/src/com/cloud/api/commands/UpdateProjectInvitationCmd.java +++ b/api/src/org/apache/cloudstack/api/user/project/command/UpdateProjectInvitationCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.user.project.command; import org.apache.log4j.Logger; diff --git a/api/src/org/apache/cloudstack/api/user/vm/command/ListVMsCmd.java b/api/src/org/apache/cloudstack/api/user/vm/command/ListVMsCmd.java old mode 100755 new mode 100644 diff --git a/api/src/org/apache/cloudstack/api/user/vm/command/RestoreVMCmd.java b/api/src/org/apache/cloudstack/api/user/vm/command/RestoreVMCmd.java old mode 100755 new mode 100644 diff --git a/api/test/src/com/cloud/api/commands/test/ActivateProjectCmdTest.java b/api/test/src/com/cloud/api/commands/test/ActivateProjectCmdTest.java index fb8bfebff56..facbdcff24e 100644 --- a/api/test/src/com/cloud/api/commands/test/ActivateProjectCmdTest.java +++ b/api/test/src/com/cloud/api/commands/test/ActivateProjectCmdTest.java @@ -25,7 +25,7 @@ import org.junit.Test; import org.junit.rules.ExpectedException; import org.mockito.Mockito; -import com.cloud.api.commands.ActivateProjectCmd; +import org.apache.cloudstack.api.user.project.command.ActivateProjectCmd; import com.cloud.exception.InvalidParameterValueException; import com.cloud.projects.Project; import com.cloud.projects.ProjectService; diff --git a/client/tomcatconf/commands.properties.in b/client/tomcatconf/commands.properties.in index 2dd9c164b98..faa31667336 100755 --- a/client/tomcatconf/commands.properties.in +++ b/client/tomcatconf/commands.properties.in @@ -322,18 +322,18 @@ deleteSSHKeyPair=com.cloud.api.commands.DeleteSSHKeyPairCmd;15 listSSHKeyPairs=com.cloud.api.commands.ListSSHKeyPairsCmd;15 #### Projects commands -createProject=com.cloud.api.commands.CreateProjectCmd;15 -deleteProject=com.cloud.api.commands.DeleteProjectCmd;15 -updateProject=com.cloud.api.commands.UpdateProjectCmd;15 -activateProject=com.cloud.api.commands.ActivateProjectCmd;15 -suspendProject=com.cloud.api.commands.SuspendProjectCmd;15 -listProjects=com.cloud.api.commands.ListProjectsCmd;15 +createProject=org.apache.cloudstack.api.user.project.command.CreateProjectCmd;15 +deleteProject=org.apache.cloudstack.api.user.project.command.DeleteProjectCmd;15 +updateProject=org.apache.cloudstack.api.user.project.command.UpdateProjectCmd;15 +activateProject=org.apache.cloudstack.api.user.project.command.ActivateProjectCmd;15 +suspendProject=org.apache.cloudstack.api.user.project.command.SuspendProjectCmd;15 +listProjects=org.apache.cloudstack.api.user.project.command.ListProjectsCmd;15 addAccountToProject=com.cloud.api.commands.AddAccountToProjectCmd;15 deleteAccountFromProject=com.cloud.api.commands.DeleteAccountFromProjectCmd;15 listProjectAccounts=com.cloud.api.commands.ListProjectAccountsCmd;15 -listProjectInvitations=com.cloud.api.commands.ListProjectInvitationsCmd;15 -updateProjectInvitation=com.cloud.api.commands.UpdateProjectInvitationCmd;15 -deleteProjectInvitation=com.cloud.api.commands.DeleteProjectInvitationCmd;15 +listProjectInvitations=org.apache.cloudstack.api.user.project.command.ListProjectInvitationsCmd;15 +updateProjectInvitation=org.apache.cloudstack.api.user.project.command.UpdateProjectInvitationCmd;15 +deleteProjectInvitation=org.apache.cloudstack.api.user.project.command.DeleteProjectInvitationCmd;15 #### createFirewallRule=com.cloud.api.commands.CreateFirewallRuleCmd;15 From 47ae62e44a5ddf813230eeaa6f92b9fb2dd662d4 Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Mon, 3 Dec 2012 22:47:07 -0800 Subject: [PATCH 007/421] api_refactor: refactor network apis - Fix refactored apis in commands*.in - Fix comments etc. - Expand tabs, remove trailing whitespace - Fix trailing whitespaces for all *.java Signed-off-by: Rohit Yadav --- .../commands/ListVirtualRouterElementsCmd.java | 1 + .../configuration/ConfigurationService.java | 2 +- api/src/com/cloud/network/NetworkService.java | 6 +++--- .../network/firewall/NetworkACLService.java | 2 +- .../network/command}/CreateNetworkACLCmd.java | 2 +- .../network/command}/CreateNetworkCmd.java | 2 +- .../network/command}/DeleteNetworkACLCmd.java | 2 +- .../network/command}/DeleteNetworkCmd.java | 3 ++- .../network/command}/ListNetworkACLsCmd.java | 2 +- .../command}/ListNetworkOfferingsCmd.java | 2 +- .../user/network/command}/ListNetworksCmd.java | 2 +- .../network/command}/RestartNetworkCmd.java | 2 +- .../network/command}/UpdateNetworkCmd.java | 2 +- client/tomcatconf/commands.properties.in | 18 +++++++++--------- .../ConfigurationManagerImpl.java | 2 +- .../com/cloud/network/NetworkManagerImpl.java | 6 +++--- .../network/vpc/NetworkACLManagerImpl.java | 2 +- .../cloud/network/MockNetworkManagerImpl.java | 6 +++--- .../vpc/MockConfigurationManagerImpl.java | 2 +- .../com/cloud/vpc/MockNetworkManagerImpl.java | 6 +++--- 20 files changed, 37 insertions(+), 35 deletions(-) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/user/network/command}/CreateNetworkACLCmd.java (99%) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/user/network/command}/CreateNetworkCmd.java (99%) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/user/network/command}/DeleteNetworkACLCmd.java (98%) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/user/network/command}/DeleteNetworkCmd.java (97%) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/user/network/command}/ListNetworkACLsCmd.java (98%) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/user/network/command}/ListNetworkOfferingsCmd.java (99%) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/user/network/command}/ListNetworksCmd.java (99%) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/user/network/command}/RestartNetworkCmd.java (98%) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/user/network/command}/UpdateNetworkCmd.java (99%) diff --git a/api/src/com/cloud/api/commands/ListVirtualRouterElementsCmd.java b/api/src/com/cloud/api/commands/ListVirtualRouterElementsCmd.java index 3a8cc975336..aa24467cb33 100644 --- a/api/src/com/cloud/api/commands/ListVirtualRouterElementsCmd.java +++ b/api/src/com/cloud/api/commands/ListVirtualRouterElementsCmd.java @@ -19,6 +19,7 @@ package com.cloud.api.commands; import java.util.ArrayList; import java.util.List; +import org.apache.cloudstack.api.user.network.command.ListNetworkOfferingsCmd; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; diff --git a/api/src/com/cloud/configuration/ConfigurationService.java b/api/src/com/cloud/configuration/ConfigurationService.java index c4ed278cfc8..098d2800e62 100644 --- a/api/src/com/cloud/configuration/ConfigurationService.java +++ b/api/src/com/cloud/configuration/ConfigurationService.java @@ -33,7 +33,7 @@ import com.cloud.api.commands.DeleteVlanIpRangeCmd; import com.cloud.api.commands.DeleteZoneCmd; import com.cloud.api.commands.LDAPConfigCmd; import com.cloud.api.commands.LDAPRemoveCmd; -import com.cloud.api.commands.ListNetworkOfferingsCmd; +import org.apache.cloudstack.api.user.network.command.ListNetworkOfferingsCmd; import com.cloud.api.commands.UpdateCfgCmd; import com.cloud.api.commands.UpdateDiskOfferingCmd; import com.cloud.api.commands.UpdateNetworkOfferingCmd; diff --git a/api/src/com/cloud/network/NetworkService.java b/api/src/com/cloud/network/NetworkService.java index 1cefbb8fe4a..b71b86703fb 100755 --- a/api/src/com/cloud/network/NetworkService.java +++ b/api/src/com/cloud/network/NetworkService.java @@ -20,10 +20,10 @@ import java.util.List; import java.util.Map; import java.util.Set; -import com.cloud.api.commands.CreateNetworkCmd; -import com.cloud.api.commands.ListNetworksCmd; +import org.apache.cloudstack.api.user.network.command.CreateNetworkCmd; +import org.apache.cloudstack.api.user.network.command.ListNetworksCmd; import com.cloud.api.commands.ListTrafficTypeImplementorsCmd; -import com.cloud.api.commands.RestartNetworkCmd; +import org.apache.cloudstack.api.user.network.command.RestartNetworkCmd; import com.cloud.exception.ConcurrentOperationException; import com.cloud.exception.InsufficientAddressCapacityException; import com.cloud.exception.InsufficientCapacityException; diff --git a/api/src/com/cloud/network/firewall/NetworkACLService.java b/api/src/com/cloud/network/firewall/NetworkACLService.java index 2c84a20f164..4c0f06c567c 100644 --- a/api/src/com/cloud/network/firewall/NetworkACLService.java +++ b/api/src/com/cloud/network/firewall/NetworkACLService.java @@ -19,7 +19,7 @@ package com.cloud.network.firewall; import java.util.List; -import com.cloud.api.commands.ListNetworkACLsCmd; +import org.apache.cloudstack.api.user.network.command.ListNetworkACLsCmd; import com.cloud.exception.NetworkRuleConflictException; import com.cloud.exception.ResourceUnavailableException; import com.cloud.network.rules.FirewallRule; diff --git a/api/src/com/cloud/api/commands/CreateNetworkACLCmd.java b/api/src/org/apache/cloudstack/api/user/network/command/CreateNetworkACLCmd.java similarity index 99% rename from api/src/com/cloud/api/commands/CreateNetworkACLCmd.java rename to api/src/org/apache/cloudstack/api/user/network/command/CreateNetworkACLCmd.java index 09e29224413..89d5c85efc0 100644 --- a/api/src/com/cloud/api/commands/CreateNetworkACLCmd.java +++ b/api/src/org/apache/cloudstack/api/user/network/command/CreateNetworkACLCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.user.network.command; import java.util.ArrayList; import java.util.List; diff --git a/api/src/com/cloud/api/commands/CreateNetworkCmd.java b/api/src/org/apache/cloudstack/api/user/network/command/CreateNetworkCmd.java similarity index 99% rename from api/src/com/cloud/api/commands/CreateNetworkCmd.java rename to api/src/org/apache/cloudstack/api/user/network/command/CreateNetworkCmd.java index 53b19bb1de9..cfa71dd1086 100644 --- a/api/src/com/cloud/api/commands/CreateNetworkCmd.java +++ b/api/src/org/apache/cloudstack/api/user/network/command/CreateNetworkCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.user.network.command; import org.apache.log4j.Logger; diff --git a/api/src/com/cloud/api/commands/DeleteNetworkACLCmd.java b/api/src/org/apache/cloudstack/api/user/network/command/DeleteNetworkACLCmd.java similarity index 98% rename from api/src/com/cloud/api/commands/DeleteNetworkACLCmd.java rename to api/src/org/apache/cloudstack/api/user/network/command/DeleteNetworkACLCmd.java index 1cd1e33c193..d34d07d5cc6 100644 --- a/api/src/com/cloud/api/commands/DeleteNetworkACLCmd.java +++ b/api/src/org/apache/cloudstack/api/user/network/command/DeleteNetworkACLCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.user.network.command; import org.apache.log4j.Logger; diff --git a/api/src/com/cloud/api/commands/DeleteNetworkCmd.java b/api/src/org/apache/cloudstack/api/user/network/command/DeleteNetworkCmd.java similarity index 97% rename from api/src/com/cloud/api/commands/DeleteNetworkCmd.java rename to api/src/org/apache/cloudstack/api/user/network/command/DeleteNetworkCmd.java index 692fffe1510..994e6d55144 100644 --- a/api/src/com/cloud/api/commands/DeleteNetworkCmd.java +++ b/api/src/org/apache/cloudstack/api/user/network/command/DeleteNetworkCmd.java @@ -14,8 +14,9 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.user.network.command; +import com.cloud.api.commands.DeleteNetworkOfferingCmd; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; diff --git a/api/src/com/cloud/api/commands/ListNetworkACLsCmd.java b/api/src/org/apache/cloudstack/api/user/network/command/ListNetworkACLsCmd.java similarity index 98% rename from api/src/com/cloud/api/commands/ListNetworkACLsCmd.java rename to api/src/org/apache/cloudstack/api/user/network/command/ListNetworkACLsCmd.java index c75e318802a..4696ab8960d 100644 --- a/api/src/com/cloud/api/commands/ListNetworkACLsCmd.java +++ b/api/src/org/apache/cloudstack/api/user/network/command/ListNetworkACLsCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.user.network.command; import java.util.ArrayList; diff --git a/api/src/com/cloud/api/commands/ListNetworkOfferingsCmd.java b/api/src/org/apache/cloudstack/api/user/network/command/ListNetworkOfferingsCmd.java similarity index 99% rename from api/src/com/cloud/api/commands/ListNetworkOfferingsCmd.java rename to api/src/org/apache/cloudstack/api/user/network/command/ListNetworkOfferingsCmd.java index 9f6f94d60a8..71d760bd9af 100644 --- a/api/src/com/cloud/api/commands/ListNetworkOfferingsCmd.java +++ b/api/src/org/apache/cloudstack/api/user/network/command/ListNetworkOfferingsCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.user.network.command; import java.util.ArrayList; import java.util.List; diff --git a/api/src/com/cloud/api/commands/ListNetworksCmd.java b/api/src/org/apache/cloudstack/api/user/network/command/ListNetworksCmd.java similarity index 99% rename from api/src/com/cloud/api/commands/ListNetworksCmd.java rename to api/src/org/apache/cloudstack/api/user/network/command/ListNetworksCmd.java index 4dcb22d69f5..945fbb61926 100644 --- a/api/src/com/cloud/api/commands/ListNetworksCmd.java +++ b/api/src/org/apache/cloudstack/api/user/network/command/ListNetworksCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.user.network.command; import java.util.ArrayList; import java.util.List; diff --git a/api/src/com/cloud/api/commands/RestartNetworkCmd.java b/api/src/org/apache/cloudstack/api/user/network/command/RestartNetworkCmd.java similarity index 98% rename from api/src/com/cloud/api/commands/RestartNetworkCmd.java rename to api/src/org/apache/cloudstack/api/user/network/command/RestartNetworkCmd.java index d7d124d5dd9..5065937f101 100644 --- a/api/src/com/cloud/api/commands/RestartNetworkCmd.java +++ b/api/src/org/apache/cloudstack/api/user/network/command/RestartNetworkCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.user.network.command; import org.apache.log4j.Logger; diff --git a/api/src/com/cloud/api/commands/UpdateNetworkCmd.java b/api/src/org/apache/cloudstack/api/user/network/command/UpdateNetworkCmd.java similarity index 99% rename from api/src/com/cloud/api/commands/UpdateNetworkCmd.java rename to api/src/org/apache/cloudstack/api/user/network/command/UpdateNetworkCmd.java index b5bb48eff81..2b3dd29df50 100644 --- a/api/src/com/cloud/api/commands/UpdateNetworkCmd.java +++ b/api/src/org/apache/cloudstack/api/user/network/command/UpdateNetworkCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.user.network.command; import org.apache.log4j.Logger; diff --git a/client/tomcatconf/commands.properties.in b/client/tomcatconf/commands.properties.in index faa31667336..abf8dd3dd9f 100755 --- a/client/tomcatconf/commands.properties.in +++ b/client/tomcatconf/commands.properties.in @@ -306,14 +306,14 @@ listVpnUsers=com.cloud.api.commands.ListVpnUsersCmd;15 createNetworkOffering=com.cloud.api.commands.CreateNetworkOfferingCmd;1 updateNetworkOffering=com.cloud.api.commands.UpdateNetworkOfferingCmd;1 deleteNetworkOffering=com.cloud.api.commands.DeleteNetworkOfferingCmd;1 -listNetworkOfferings=com.cloud.api.commands.ListNetworkOfferingsCmd;15 +listNetworkOfferings=org.apache.cloudstack.api.user.network.command.ListNetworkOfferingsCmd;15 #### network commands -createNetwork=com.cloud.api.commands.CreateNetworkCmd;15 -deleteNetwork=com.cloud.api.commands.DeleteNetworkCmd;15 -listNetworks=com.cloud.api.commands.ListNetworksCmd;15 -restartNetwork=com.cloud.api.commands.RestartNetworkCmd;15 -updateNetwork=com.cloud.api.commands.UpdateNetworkCmd;15 +createNetwork=org.apache.cloudstack.api.user.network.command.CreateNetworkCmd;15 +deleteNetwork=org.apache.cloudstack.api.user.network.command.DeleteNetworkCmd;15 +listNetworks=org.apache.cloudstack.api.user.network.command.ListNetworksCmd;15 +restartNetwork=org.apache.cloudstack.api.user.network.command.RestartNetworkCmd;15 +updateNetwork=org.apache.cloudstack.api.user.network.command.UpdateNetworkCmd;15 #### SSH key pair commands registerSSHKeyPair=com.cloud.api.commands.RegisterSSHKeyPairCmd;15 @@ -399,9 +399,9 @@ listPrivateGateways=org.apache.cloudstack.api.user.vpc.command.ListPrivateGatewa deletePrivateGateway=com.cloud.api.commands.DeletePrivateGatewayCmd;1 #### Network ACL commands -createNetworkACL=com.cloud.api.commands.CreateNetworkACLCmd;15 -deleteNetworkACL=com.cloud.api.commands.DeleteNetworkACLCmd;15 -listNetworkACLs=com.cloud.api.commands.ListNetworkACLsCmd;15 +createNetworkACL=org.apache.cloudstack.api.user.network.command.CreateNetworkACLCmd;15 +deleteNetworkACL=org.apache.cloudstack.api.user.network.command.DeleteNetworkACLCmd;15 +listNetworkACLs=org.apache.cloudstack.api.user.network.command.ListNetworkACLsCmd;15 #### Static route commands createStaticRoute=org.apache.cloudstack.api.user.vpc.command.CreateStaticRouteCmd;15 diff --git a/server/src/com/cloud/configuration/ConfigurationManagerImpl.java b/server/src/com/cloud/configuration/ConfigurationManagerImpl.java index 467f7e07264..4b9b33622f5 100755 --- a/server/src/com/cloud/configuration/ConfigurationManagerImpl.java +++ b/server/src/com/cloud/configuration/ConfigurationManagerImpl.java @@ -57,7 +57,7 @@ import com.cloud.api.commands.DeleteVlanIpRangeCmd; import com.cloud.api.commands.DeleteZoneCmd; import com.cloud.api.commands.LDAPConfigCmd; import com.cloud.api.commands.LDAPRemoveCmd; -import com.cloud.api.commands.ListNetworkOfferingsCmd; +import org.apache.cloudstack.api.user.network.command.ListNetworkOfferingsCmd; import com.cloud.api.commands.UpdateCfgCmd; import com.cloud.api.commands.UpdateDiskOfferingCmd; import com.cloud.api.commands.UpdateNetworkOfferingCmd; diff --git a/server/src/com/cloud/network/NetworkManagerImpl.java b/server/src/com/cloud/network/NetworkManagerImpl.java index f4868e7fc39..a4511414149 100755 --- a/server/src/com/cloud/network/NetworkManagerImpl.java +++ b/server/src/com/cloud/network/NetworkManagerImpl.java @@ -40,6 +40,7 @@ import java.util.concurrent.TimeUnit; import javax.ejb.Local; import javax.naming.ConfigurationException; +import org.apache.cloudstack.api.user.network.command.CreateNetworkCmd; import org.apache.log4j.Logger; import com.cloud.acl.ControlledEntity.ACLType; @@ -56,10 +57,9 @@ import com.cloud.agent.api.StartupCommand; import com.cloud.agent.api.StartupRoutingCommand; import com.cloud.agent.api.to.NicTO; import com.cloud.alert.AlertManager; -import com.cloud.api.commands.CreateNetworkCmd; -import com.cloud.api.commands.ListNetworksCmd; +import org.apache.cloudstack.api.user.network.command.ListNetworksCmd; import com.cloud.api.commands.ListTrafficTypeImplementorsCmd; -import com.cloud.api.commands.RestartNetworkCmd; +import org.apache.cloudstack.api.user.network.command.RestartNetworkCmd; import com.cloud.configuration.Config; import com.cloud.configuration.ConfigurationManager; import com.cloud.configuration.Resource.ResourceType; diff --git a/server/src/com/cloud/network/vpc/NetworkACLManagerImpl.java b/server/src/com/cloud/network/vpc/NetworkACLManagerImpl.java index b126c0e6a96..dc08af23f9d 100644 --- a/server/src/com/cloud/network/vpc/NetworkACLManagerImpl.java +++ b/server/src/com/cloud/network/vpc/NetworkACLManagerImpl.java @@ -26,7 +26,7 @@ import javax.naming.ConfigurationException; import org.apache.log4j.Logger; import com.cloud.acl.SecurityChecker.AccessType; -import com.cloud.api.commands.ListNetworkACLsCmd; +import org.apache.cloudstack.api.user.network.command.ListNetworkACLsCmd; import com.cloud.event.ActionEvent; import com.cloud.event.EventTypes; import com.cloud.exception.InvalidParameterValueException; diff --git a/server/test/com/cloud/network/MockNetworkManagerImpl.java b/server/test/com/cloud/network/MockNetworkManagerImpl.java index a038e71c3a9..fef1eb0faa0 100755 --- a/server/test/com/cloud/network/MockNetworkManagerImpl.java +++ b/server/test/com/cloud/network/MockNetworkManagerImpl.java @@ -25,10 +25,10 @@ import javax.ejb.Local; import javax.naming.ConfigurationException; import com.cloud.acl.ControlledEntity.ACLType; -import com.cloud.api.commands.CreateNetworkCmd; -import com.cloud.api.commands.ListNetworksCmd; +import org.apache.cloudstack.api.user.network.command.CreateNetworkCmd; +import org.apache.cloudstack.api.user.network.command.ListNetworksCmd; import com.cloud.api.commands.ListTrafficTypeImplementorsCmd; -import com.cloud.api.commands.RestartNetworkCmd; +import org.apache.cloudstack.api.user.network.command.RestartNetworkCmd; import com.cloud.dc.DataCenter; import com.cloud.dc.Vlan; import com.cloud.dc.Vlan.VlanType; diff --git a/server/test/com/cloud/vpc/MockConfigurationManagerImpl.java b/server/test/com/cloud/vpc/MockConfigurationManagerImpl.java index f8fc6a78c51..73caf5b4058 100644 --- a/server/test/com/cloud/vpc/MockConfigurationManagerImpl.java +++ b/server/test/com/cloud/vpc/MockConfigurationManagerImpl.java @@ -37,7 +37,7 @@ import com.cloud.api.commands.DeleteVlanIpRangeCmd; import com.cloud.api.commands.DeleteZoneCmd; import com.cloud.api.commands.LDAPConfigCmd; import com.cloud.api.commands.LDAPRemoveCmd; -import com.cloud.api.commands.ListNetworkOfferingsCmd; +import org.apache.cloudstack.api.user.network.command.ListNetworkOfferingsCmd; import com.cloud.api.commands.UpdateCfgCmd; import com.cloud.api.commands.UpdateDiskOfferingCmd; import com.cloud.api.commands.UpdateNetworkOfferingCmd; diff --git a/server/test/com/cloud/vpc/MockNetworkManagerImpl.java b/server/test/com/cloud/vpc/MockNetworkManagerImpl.java index 2ac39f0eb0f..344b59e3913 100644 --- a/server/test/com/cloud/vpc/MockNetworkManagerImpl.java +++ b/server/test/com/cloud/vpc/MockNetworkManagerImpl.java @@ -25,13 +25,13 @@ import java.util.Set; import javax.ejb.Local; import javax.naming.ConfigurationException; +import org.apache.cloudstack.api.user.network.command.ListNetworksCmd; import org.apache.log4j.Logger; import com.cloud.acl.ControlledEntity.ACLType; -import com.cloud.api.commands.CreateNetworkCmd; -import com.cloud.api.commands.ListNetworksCmd; +import org.apache.cloudstack.api.user.network.command.CreateNetworkCmd; import com.cloud.api.commands.ListTrafficTypeImplementorsCmd; -import com.cloud.api.commands.RestartNetworkCmd; +import org.apache.cloudstack.api.user.network.command.RestartNetworkCmd; import com.cloud.dc.DataCenter; import com.cloud.dc.Vlan; import com.cloud.dc.Vlan.VlanType; From e0b4430070d70b946cbdb7dff138be91a23b0b0a Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Mon, 3 Dec 2012 22:59:43 -0800 Subject: [PATCH 008/421] api_refactor: refactor iso apis - Fix refactored apis, fix mapping in commands*.in - Fix comments etc. - Note: copyIso uses copyTemplate, refactor copyTemplate Signed-off-by: Rohit Yadav --- .../commands/ListGuestOsCategoriesCmd.java | 1 + .../cloud/api/commands/ListGuestOsCmd.java | 1 + .../api/commands/UpdateTemplateOrIsoCmd.java | 1 + .../com/cloud/server/ManagementService.java | 4 ++-- .../com/cloud/template/TemplateService.java | 6 +++--- .../api/user/iso/command}/AttachIsoCmd.java | 2 +- .../api/user/iso/command}/DeleteIsoCmd.java | 2 +- .../api/user/iso/command}/DetachIsoCmd.java | 2 +- .../api/user/iso/command}/ExtractIsoCmd.java | 2 +- .../iso/command}/ListIsoPermissionsCmd.java | 3 ++- .../api/user/iso/command}/ListIsosCmd.java | 2 +- .../api/user/iso/command}/UpdateIsoCmd.java | 3 ++- .../iso/command}/UpdateIsoPermissionsCmd.java | 3 ++- .../template/command}/CopyTemplateCmd.java | 2 +- client/tomcatconf/commands.properties.in | 20 +++++++++---------- .../baremetal/BareMetalTemplateAdapter.java | 2 +- .../cloud/server/ManagementServerImpl.java | 4 ++-- .../com/cloud/storage/swift/SwiftManager.java | 2 +- .../cloud/storage/swift/SwiftManagerImpl.java | 2 +- .../cloud/storage/upload/UploadListener.java | 2 +- .../template/HyervisorTemplateAdapter.java | 2 +- .../com/cloud/template/TemplateAdapter.java | 2 +- .../cloud/template/TemplateAdapterBase.java | 2 +- .../cloud/template/TemplateManagerImpl.java | 7 ++----- 24 files changed, 41 insertions(+), 38 deletions(-) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/user/iso/command}/AttachIsoCmd.java (98%) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/user/iso/command}/DeleteIsoCmd.java (98%) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/user/iso/command}/DetachIsoCmd.java (98%) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/user/iso/command}/ExtractIsoCmd.java (98%) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/user/iso/command}/ListIsoPermissionsCmd.java (92%) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/user/iso/command}/ListIsosCmd.java (99%) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/user/iso/command}/UpdateIsoCmd.java (96%) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/user/iso/command}/UpdateIsoPermissionsCmd.java (93%) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/user/template/command}/CopyTemplateCmd.java (98%) diff --git a/api/src/com/cloud/api/commands/ListGuestOsCategoriesCmd.java b/api/src/com/cloud/api/commands/ListGuestOsCategoriesCmd.java index e233b984978..c01c16f2d55 100644 --- a/api/src/com/cloud/api/commands/ListGuestOsCategoriesCmd.java +++ b/api/src/com/cloud/api/commands/ListGuestOsCategoriesCmd.java @@ -19,6 +19,7 @@ package com.cloud.api.commands; import java.util.ArrayList; import java.util.List; +import org.apache.cloudstack.api.user.iso.command.ListIsosCmd; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; diff --git a/api/src/com/cloud/api/commands/ListGuestOsCmd.java b/api/src/com/cloud/api/commands/ListGuestOsCmd.java index 161046d0bcd..3757f865ea2 100644 --- a/api/src/com/cloud/api/commands/ListGuestOsCmd.java +++ b/api/src/com/cloud/api/commands/ListGuestOsCmd.java @@ -19,6 +19,7 @@ package com.cloud.api.commands; import java.util.ArrayList; import java.util.List; +import org.apache.cloudstack.api.user.iso.command.ListIsosCmd; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; diff --git a/api/src/com/cloud/api/commands/UpdateTemplateOrIsoCmd.java b/api/src/com/cloud/api/commands/UpdateTemplateOrIsoCmd.java index 36fc540549d..01123e9a4f0 100755 --- a/api/src/com/cloud/api/commands/UpdateTemplateOrIsoCmd.java +++ b/api/src/com/cloud/api/commands/UpdateTemplateOrIsoCmd.java @@ -16,6 +16,7 @@ // under the License. package com.cloud.api.commands; +import org.apache.cloudstack.api.user.iso.command.UpdateIsoCmd; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; diff --git a/api/src/com/cloud/server/ManagementService.java b/api/src/com/cloud/server/ManagementService.java index 65360a521a1..72769a01b4a 100755 --- a/api/src/com/cloud/server/ManagementService.java +++ b/api/src/com/cloud/server/ManagementService.java @@ -40,7 +40,7 @@ import com.cloud.api.commands.ListEventsCmd; import com.cloud.api.commands.ListGuestOsCategoriesCmd; import com.cloud.api.commands.ListGuestOsCmd; import com.cloud.api.commands.ListHostsCmd; -import com.cloud.api.commands.ListIsosCmd; +import org.apache.cloudstack.api.user.iso.command.ListIsosCmd; import com.cloud.api.commands.ListPodsByCmd; import com.cloud.api.commands.ListPublicIpAddressesCmd; import com.cloud.api.commands.ListRoutersCmd; @@ -57,7 +57,7 @@ import com.cloud.api.commands.RegisterSSHKeyPairCmd; import com.cloud.api.commands.StopSystemVmCmd; import com.cloud.api.commands.UpdateDomainCmd; import com.cloud.api.commands.UpdateHostPasswordCmd; -import com.cloud.api.commands.UpdateIsoCmd; +import org.apache.cloudstack.api.user.iso.command.UpdateIsoCmd; import com.cloud.api.commands.UpdateTemplateCmd; import com.cloud.api.commands.UpdateVMGroupCmd; import com.cloud.api.commands.UpgradeSystemVMCmd; diff --git a/api/src/com/cloud/template/TemplateService.java b/api/src/com/cloud/template/TemplateService.java index adad15445da..c7f5f3d363c 100755 --- a/api/src/com/cloud/template/TemplateService.java +++ b/api/src/com/cloud/template/TemplateService.java @@ -19,10 +19,10 @@ package com.cloud.template; import java.net.URISyntaxException; import java.util.List; -import com.cloud.api.commands.CopyTemplateCmd; -import com.cloud.api.commands.DeleteIsoCmd; +import org.apache.cloudstack.api.user.template.command.CopyTemplateCmd; +import org.apache.cloudstack.api.user.iso.command.DeleteIsoCmd; import com.cloud.api.commands.DeleteTemplateCmd; -import com.cloud.api.commands.ExtractIsoCmd; +import org.apache.cloudstack.api.user.iso.command.ExtractIsoCmd; import com.cloud.api.commands.ExtractTemplateCmd; import com.cloud.api.commands.ListTemplateOrIsoPermissionsCmd; import com.cloud.api.commands.RegisterIsoCmd; diff --git a/api/src/com/cloud/api/commands/AttachIsoCmd.java b/api/src/org/apache/cloudstack/api/user/iso/command/AttachIsoCmd.java similarity index 98% rename from api/src/com/cloud/api/commands/AttachIsoCmd.java rename to api/src/org/apache/cloudstack/api/user/iso/command/AttachIsoCmd.java index ac1be64feb7..7f799c8f882 100755 --- a/api/src/com/cloud/api/commands/AttachIsoCmd.java +++ b/api/src/org/apache/cloudstack/api/user/iso/command/AttachIsoCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.user.iso.command; import org.apache.cloudstack.api.user.vm.command.DeployVMCmd; import org.apache.log4j.Logger; diff --git a/api/src/com/cloud/api/commands/DeleteIsoCmd.java b/api/src/org/apache/cloudstack/api/user/iso/command/DeleteIsoCmd.java similarity index 98% rename from api/src/com/cloud/api/commands/DeleteIsoCmd.java rename to api/src/org/apache/cloudstack/api/user/iso/command/DeleteIsoCmd.java index a0f14184566..ba94b6693c9 100755 --- a/api/src/com/cloud/api/commands/DeleteIsoCmd.java +++ b/api/src/org/apache/cloudstack/api/user/iso/command/DeleteIsoCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.user.iso.command; import org.apache.log4j.Logger; diff --git a/api/src/com/cloud/api/commands/DetachIsoCmd.java b/api/src/org/apache/cloudstack/api/user/iso/command/DetachIsoCmd.java similarity index 98% rename from api/src/com/cloud/api/commands/DetachIsoCmd.java rename to api/src/org/apache/cloudstack/api/user/iso/command/DetachIsoCmd.java index 954c5f1e9e9..64334adbd86 100755 --- a/api/src/com/cloud/api/commands/DetachIsoCmd.java +++ b/api/src/org/apache/cloudstack/api/user/iso/command/DetachIsoCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.user.iso.command; import org.apache.cloudstack.api.user.vm.command.DeployVMCmd; import org.apache.log4j.Logger; diff --git a/api/src/com/cloud/api/commands/ExtractIsoCmd.java b/api/src/org/apache/cloudstack/api/user/iso/command/ExtractIsoCmd.java similarity index 98% rename from api/src/com/cloud/api/commands/ExtractIsoCmd.java rename to api/src/org/apache/cloudstack/api/user/iso/command/ExtractIsoCmd.java index 39c7673779e..13a833f6d5a 100755 --- a/api/src/com/cloud/api/commands/ExtractIsoCmd.java +++ b/api/src/org/apache/cloudstack/api/user/iso/command/ExtractIsoCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.user.iso.command; import org.apache.log4j.Logger; diff --git a/api/src/com/cloud/api/commands/ListIsoPermissionsCmd.java b/api/src/org/apache/cloudstack/api/user/iso/command/ListIsoPermissionsCmd.java similarity index 92% rename from api/src/com/cloud/api/commands/ListIsoPermissionsCmd.java rename to api/src/org/apache/cloudstack/api/user/iso/command/ListIsoPermissionsCmd.java index 81c18e9c6f1..b047689b6e6 100644 --- a/api/src/com/cloud/api/commands/ListIsoPermissionsCmd.java +++ b/api/src/org/apache/cloudstack/api/user/iso/command/ListIsoPermissionsCmd.java @@ -14,8 +14,9 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.user.iso.command; +import com.cloud.api.commands.ListTemplateOrIsoPermissionsCmd; import org.apache.log4j.Logger; import com.cloud.storage.Storage.ImageFormat; diff --git a/api/src/com/cloud/api/commands/ListIsosCmd.java b/api/src/org/apache/cloudstack/api/user/iso/command/ListIsosCmd.java similarity index 99% rename from api/src/com/cloud/api/commands/ListIsosCmd.java rename to api/src/org/apache/cloudstack/api/user/iso/command/ListIsosCmd.java index 3cf0797dba3..4a5f996aaef 100755 --- a/api/src/com/cloud/api/commands/ListIsosCmd.java +++ b/api/src/org/apache/cloudstack/api/user/iso/command/ListIsosCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.user.iso.command; import java.util.ArrayList; import java.util.List; diff --git a/api/src/com/cloud/api/commands/UpdateIsoCmd.java b/api/src/org/apache/cloudstack/api/user/iso/command/UpdateIsoCmd.java similarity index 96% rename from api/src/com/cloud/api/commands/UpdateIsoCmd.java rename to api/src/org/apache/cloudstack/api/user/iso/command/UpdateIsoCmd.java index f42c1288672..eb83260d5f1 100755 --- a/api/src/com/cloud/api/commands/UpdateIsoCmd.java +++ b/api/src/org/apache/cloudstack/api/user/iso/command/UpdateIsoCmd.java @@ -14,8 +14,9 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.user.iso.command; +import com.cloud.api.commands.UpdateTemplateOrIsoCmd; import org.apache.log4j.Logger; import org.apache.cloudstack.api.BaseCmd; diff --git a/api/src/com/cloud/api/commands/UpdateIsoPermissionsCmd.java b/api/src/org/apache/cloudstack/api/user/iso/command/UpdateIsoPermissionsCmd.java similarity index 93% rename from api/src/com/cloud/api/commands/UpdateIsoPermissionsCmd.java rename to api/src/org/apache/cloudstack/api/user/iso/command/UpdateIsoPermissionsCmd.java index 208ee1c3f08..f657b66c6e0 100644 --- a/api/src/com/cloud/api/commands/UpdateIsoPermissionsCmd.java +++ b/api/src/org/apache/cloudstack/api/user/iso/command/UpdateIsoPermissionsCmd.java @@ -14,8 +14,9 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.user.iso.command; +import com.cloud.api.commands.UpdateTemplateOrIsoPermissionsCmd; import org.apache.log4j.Logger; import org.apache.cloudstack.api.Implementation; diff --git a/api/src/com/cloud/api/commands/CopyTemplateCmd.java b/api/src/org/apache/cloudstack/api/user/template/command/CopyTemplateCmd.java similarity index 98% rename from api/src/com/cloud/api/commands/CopyTemplateCmd.java rename to api/src/org/apache/cloudstack/api/user/template/command/CopyTemplateCmd.java index 6f7bdf650cd..6b00aee2704 100755 --- a/api/src/com/cloud/api/commands/CopyTemplateCmd.java +++ b/api/src/org/apache/cloudstack/api/user/template/command/CopyTemplateCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.user.template.command; import java.util.List; diff --git a/client/tomcatconf/commands.properties.in b/client/tomcatconf/commands.properties.in index abf8dd3dd9f..57ddd9a9f50 100755 --- a/client/tomcatconf/commands.properties.in +++ b/client/tomcatconf/commands.properties.in @@ -82,7 +82,7 @@ listSnapshotPolicies=com.cloud.api.commands.ListSnapshotPoliciesCmd;15 createTemplate=com.cloud.api.commands.CreateTemplateCmd;15 registerTemplate=com.cloud.api.commands.RegisterTemplateCmd;15 updateTemplate=com.cloud.api.commands.UpdateTemplateCmd;15 -copyTemplate=com.cloud.api.commands.CopyTemplateCmd;15 +copyTemplate=org.apache.cloudstack.api.user.template.command.CopyTemplateCmd;15 deleteTemplate=com.cloud.api.commands.DeleteTemplateCmd;15 listTemplates=com.cloud.api.commands.ListTemplatesCmd;15 updateTemplatePermissions=com.cloud.api.commands.UpdateTemplatePermissionsCmd;15 @@ -91,16 +91,16 @@ extractTemplate=com.cloud.api.commands.ExtractTemplateCmd;15 prepareTemplate=com.cloud.api.commands.PrepareTemplateCmd;1 #### iso commands -attachIso=com.cloud.api.commands.AttachIsoCmd;15 -detachIso=com.cloud.api.commands.DetachIsoCmd;15 -listIsos=com.cloud.api.commands.ListIsosCmd;15 +attachIso=org.apache.cloudstack.api.user.iso.command.AttachIsoCmd;15 +detachIso=org.apache.cloudstack.api.user.iso.command.DetachIsoCmd;15 +listIsos=org.apache.cloudstack.api.user.iso.command.ListIsosCmd;15 registerIso=com.cloud.api.commands.RegisterIsoCmd;15 -updateIso=com.cloud.api.commands.UpdateIsoCmd;15 -deleteIso=com.cloud.api.commands.DeleteIsoCmd;15 -copyIso=com.cloud.api.commands.CopyTemplateCmd;15 -updateIsoPermissions=com.cloud.api.commands.UpdateIsoPermissionsCmd;15 -listIsoPermissions=com.cloud.api.commands.ListIsoPermissionsCmd;15 -extractIso=com.cloud.api.commands.ExtractIsoCmd;15 +updateIso=org.apache.cloudstack.api.user.iso.command.UpdateIsoCmd;15 +deleteIso=org.apache.cloudstack.api.user.iso.command.DeleteIsoCmd;15 +copyIso=org.apache.cloudstack.api.user.template.command.CopyTemplateCmd;15 +updateIsoPermissions=org.apache.cloudstack.api.user.iso.command.UpdateIsoPermissionsCmd;15 +listIsoPermissions=org.apache.cloudstack.api.user.iso.command.ListIsoPermissionsCmd;15 +extractIso=org.apache.cloudstack.api.user.iso.command.ExtractIsoCmd;15 #### guest OS commands listOsTypes=com.cloud.api.commands.ListGuestOsCmd;15 diff --git a/server/src/com/cloud/baremetal/BareMetalTemplateAdapter.java b/server/src/com/cloud/baremetal/BareMetalTemplateAdapter.java index e03cddabbcb..75e401d5452 100755 --- a/server/src/com/cloud/baremetal/BareMetalTemplateAdapter.java +++ b/server/src/com/cloud/baremetal/BareMetalTemplateAdapter.java @@ -21,9 +21,9 @@ import java.util.List; import javax.ejb.Local; +import org.apache.cloudstack.api.user.iso.command.DeleteIsoCmd; import org.apache.log4j.Logger; -import com.cloud.api.commands.DeleteIsoCmd; import com.cloud.api.commands.RegisterIsoCmd; import com.cloud.api.commands.RegisterTemplateCmd; import com.cloud.configuration.Resource.ResourceType; diff --git a/server/src/com/cloud/server/ManagementServerImpl.java b/server/src/com/cloud/server/ManagementServerImpl.java index 93a9361c186..2f33c258feb 100755 --- a/server/src/com/cloud/server/ManagementServerImpl.java +++ b/server/src/com/cloud/server/ManagementServerImpl.java @@ -42,6 +42,7 @@ import java.util.concurrent.TimeUnit; import javax.crypto.Mac; import javax.crypto.spec.SecretKeySpec; +import org.apache.cloudstack.api.user.iso.command.ListIsosCmd; import org.apache.commons.codec.binary.Base64; import org.apache.log4j.Logger; @@ -74,7 +75,6 @@ import com.cloud.api.commands.ListEventsCmd; import com.cloud.api.commands.ListGuestOsCategoriesCmd; import com.cloud.api.commands.ListGuestOsCmd; import com.cloud.api.commands.ListHostsCmd; -import com.cloud.api.commands.ListIsosCmd; import com.cloud.api.commands.ListPodsByCmd; import com.cloud.api.commands.ListPublicIpAddressesCmd; import com.cloud.api.commands.ListRoutersCmd; @@ -91,7 +91,7 @@ import com.cloud.api.commands.RegisterSSHKeyPairCmd; import com.cloud.api.commands.StopSystemVmCmd; import com.cloud.api.commands.UpdateDomainCmd; import com.cloud.api.commands.UpdateHostPasswordCmd; -import com.cloud.api.commands.UpdateIsoCmd; +import org.apache.cloudstack.api.user.iso.command.UpdateIsoCmd; import com.cloud.api.commands.UpdateTemplateCmd; import com.cloud.api.commands.UpdateTemplateOrIsoCmd; import com.cloud.api.commands.UpdateVMGroupCmd; diff --git a/server/src/com/cloud/storage/swift/SwiftManager.java b/server/src/com/cloud/storage/swift/SwiftManager.java index d897442da8e..8fd3eb02a8b 100644 --- a/server/src/com/cloud/storage/swift/SwiftManager.java +++ b/server/src/com/cloud/storage/swift/SwiftManager.java @@ -20,7 +20,7 @@ import java.util.List; import com.cloud.agent.api.to.SwiftTO; import com.cloud.api.commands.AddSwiftCmd; -import com.cloud.api.commands.DeleteIsoCmd; +import org.apache.cloudstack.api.user.iso.command.DeleteIsoCmd; import com.cloud.api.commands.DeleteTemplateCmd; import com.cloud.api.commands.ListSwiftsCmd; import com.cloud.exception.DiscoveryException; diff --git a/server/src/com/cloud/storage/swift/SwiftManagerImpl.java b/server/src/com/cloud/storage/swift/SwiftManagerImpl.java index 893246940eb..207d9eb82a8 100644 --- a/server/src/com/cloud/storage/swift/SwiftManagerImpl.java +++ b/server/src/com/cloud/storage/swift/SwiftManagerImpl.java @@ -25,6 +25,7 @@ import java.util.Map; import javax.ejb.Local; import javax.naming.ConfigurationException; +import org.apache.cloudstack.api.user.iso.command.DeleteIsoCmd; import org.apache.log4j.Logger; import com.cloud.agent.AgentManager; @@ -32,7 +33,6 @@ import com.cloud.agent.api.Answer; import com.cloud.agent.api.DeleteObjectFromSwiftCommand; import com.cloud.agent.api.to.SwiftTO; import com.cloud.api.commands.AddSwiftCmd; -import com.cloud.api.commands.DeleteIsoCmd; import com.cloud.api.commands.DeleteTemplateCmd; import com.cloud.api.commands.ListSwiftsCmd; import com.cloud.configuration.Config; diff --git a/server/src/com/cloud/storage/upload/UploadListener.java b/server/src/com/cloud/storage/upload/UploadListener.java index d07802f8b82..21e15de0088 100755 --- a/server/src/com/cloud/storage/upload/UploadListener.java +++ b/server/src/com/cloud/storage/upload/UploadListener.java @@ -24,6 +24,7 @@ import java.util.Map; import java.util.Timer; import java.util.TimerTask; +import org.apache.cloudstack.api.user.iso.command.ExtractIsoCmd; import org.apache.log4j.Level; import org.apache.log4j.Logger; @@ -38,7 +39,6 @@ import com.cloud.agent.api.storage.UploadAnswer; import com.cloud.agent.api.storage.UploadCommand; import com.cloud.agent.api.storage.UploadProgressCommand; import com.cloud.agent.api.storage.UploadProgressCommand.RequestType; -import com.cloud.api.commands.ExtractIsoCmd; import com.cloud.api.commands.ExtractTemplateCmd; import com.cloud.api.commands.ExtractVolumeCmd; import com.cloud.api.response.ExtractResponse; diff --git a/server/src/com/cloud/template/HyervisorTemplateAdapter.java b/server/src/com/cloud/template/HyervisorTemplateAdapter.java index bdb89f65f80..e6ef53883a6 100755 --- a/server/src/com/cloud/template/HyervisorTemplateAdapter.java +++ b/server/src/com/cloud/template/HyervisorTemplateAdapter.java @@ -25,12 +25,12 @@ import java.util.List; import javax.ejb.Local; +import org.apache.cloudstack.api.user.iso.command.DeleteIsoCmd; import org.apache.log4j.Logger; import com.cloud.agent.AgentManager; import com.cloud.agent.api.Answer; import com.cloud.agent.api.storage.DeleteTemplateCommand; -import com.cloud.api.commands.DeleteIsoCmd; import com.cloud.api.commands.DeleteTemplateCmd; import com.cloud.api.commands.RegisterIsoCmd; import com.cloud.api.commands.RegisterTemplateCmd; diff --git a/server/src/com/cloud/template/TemplateAdapter.java b/server/src/com/cloud/template/TemplateAdapter.java index 26e10ee7e77..e2844a3d4ca 100755 --- a/server/src/com/cloud/template/TemplateAdapter.java +++ b/server/src/com/cloud/template/TemplateAdapter.java @@ -18,7 +18,7 @@ package com.cloud.template; import java.util.Map; -import com.cloud.api.commands.DeleteIsoCmd; +import org.apache.cloudstack.api.user.iso.command.DeleteIsoCmd; import com.cloud.api.commands.DeleteTemplateCmd; import com.cloud.api.commands.RegisterIsoCmd; import com.cloud.api.commands.RegisterTemplateCmd; diff --git a/server/src/com/cloud/template/TemplateAdapterBase.java b/server/src/com/cloud/template/TemplateAdapterBase.java index 3d07a03634a..546b10a668b 100755 --- a/server/src/com/cloud/template/TemplateAdapterBase.java +++ b/server/src/com/cloud/template/TemplateAdapterBase.java @@ -25,7 +25,7 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import com.cloud.api.ApiDBUtils; -import com.cloud.api.commands.DeleteIsoCmd; +import org.apache.cloudstack.api.user.iso.command.DeleteIsoCmd; import com.cloud.api.commands.DeleteTemplateCmd; import com.cloud.api.commands.RegisterIsoCmd; import com.cloud.api.commands.RegisterTemplateCmd; diff --git a/server/src/com/cloud/template/TemplateManagerImpl.java b/server/src/com/cloud/template/TemplateManagerImpl.java index 1e87de2fecb..df8cf8424d5 100755 --- a/server/src/com/cloud/template/TemplateManagerImpl.java +++ b/server/src/com/cloud/template/TemplateManagerImpl.java @@ -34,6 +34,8 @@ import java.util.concurrent.TimeUnit; import javax.ejb.Local; import javax.naming.ConfigurationException; +import org.apache.cloudstack.api.user.iso.command.*; +import org.apache.cloudstack.api.user.template.command.CopyTemplateCmd; import org.apache.log4j.Logger; import com.cloud.acl.SecurityChecker.AccessType; @@ -45,17 +47,12 @@ import com.cloud.agent.api.storage.DestroyCommand; import com.cloud.agent.api.storage.PrimaryStorageDownloadAnswer; import com.cloud.agent.api.storage.PrimaryStorageDownloadCommand; import com.cloud.agent.api.to.SwiftTO; -import com.cloud.api.commands.CopyTemplateCmd; -import com.cloud.api.commands.DeleteIsoCmd; import com.cloud.api.commands.DeleteTemplateCmd; -import com.cloud.api.commands.ExtractIsoCmd; import com.cloud.api.commands.ExtractTemplateCmd; -import com.cloud.api.commands.ListIsoPermissionsCmd; import com.cloud.api.commands.ListTemplateOrIsoPermissionsCmd; import com.cloud.api.commands.ListTemplatePermissionsCmd; import com.cloud.api.commands.RegisterIsoCmd; import com.cloud.api.commands.RegisterTemplateCmd; -import com.cloud.api.commands.UpdateIsoPermissionsCmd; import com.cloud.api.commands.UpdateTemplateOrIsoPermissionsCmd; import com.cloud.api.commands.UpdateTemplatePermissionsCmd; import com.cloud.async.AsyncJobManager; From 3e0b2164be83a176304eb40d8000c15c0b63c310 Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Mon, 3 Dec 2012 23:05:44 -0800 Subject: [PATCH 009/421] api_refactor: refactor template apis - Fix refactored apis, fix mapping in commands*.in - Fix comments etc. Signed-off-by: Rohit Yadav --- api/src/com/cloud/server/ManagementService.java | 4 ++-- api/src/com/cloud/template/TemplateService.java | 4 ++-- api/src/com/cloud/vm/UserVmService.java | 2 +- .../user/template/command}/CreateTemplateCmd.java | 2 +- .../user/template/command}/DeleteTemplateCmd.java | 2 +- .../user/template/command}/ExtractTemplateCmd.java | 2 +- .../command}/ListTemplatePermissionsCmd.java | 3 ++- .../user/template/command}/ListTemplatesCmd.java | 2 +- .../user/template/command}/UpdateTemplateCmd.java | 3 ++- .../command}/UpdateTemplatePermissionsCmd.java | 3 ++- client/tomcatconf/commands.properties.in | 14 +++++++------- .../cloud/baremetal/BareMetalVmManagerImpl.java | 2 +- .../src/com/cloud/server/ManagementServerImpl.java | 4 ++-- .../src/com/cloud/storage/swift/SwiftManager.java | 2 +- .../com/cloud/storage/swift/SwiftManagerImpl.java | 2 +- .../com/cloud/storage/upload/UploadListener.java | 2 +- .../cloud/template/HyervisorTemplateAdapter.java | 2 +- server/src/com/cloud/template/TemplateAdapter.java | 2 +- .../com/cloud/template/TemplateAdapterBase.java | 2 +- .../com/cloud/template/TemplateManagerImpl.java | 8 ++++---- server/src/com/cloud/vm/UserVmManagerImpl.java | 2 +- .../test/com/cloud/vm/MockUserVmManagerImpl.java | 2 +- 22 files changed, 37 insertions(+), 34 deletions(-) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/user/template/command}/CreateTemplateCmd.java (99%) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/user/template/command}/DeleteTemplateCmd.java (98%) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/user/template/command}/ExtractTemplateCmd.java (98%) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/user/template/command}/ListTemplatePermissionsCmd.java (92%) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/user/template/command}/ListTemplatesCmd.java (99%) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/user/template/command}/UpdateTemplateCmd.java (96%) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/user/template/command}/UpdateTemplatePermissionsCmd.java (95%) diff --git a/api/src/com/cloud/server/ManagementService.java b/api/src/com/cloud/server/ManagementService.java index 72769a01b4a..2b06d75e5c8 100755 --- a/api/src/com/cloud/server/ManagementService.java +++ b/api/src/com/cloud/server/ManagementService.java @@ -28,6 +28,8 @@ import com.cloud.api.commands.CreateSSHKeyPairCmd; import com.cloud.api.commands.DeleteSSHKeyPairCmd; import com.cloud.api.commands.DestroySystemVmCmd; import com.cloud.api.commands.ExtractVolumeCmd; +import org.apache.cloudstack.api.user.template.command.ListTemplatesCmd; +import org.apache.cloudstack.api.user.template.command.UpdateTemplateCmd; import org.apache.cloudstack.api.user.vm.command.GetVMPasswordCmd; import com.cloud.api.commands.ListAlertsCmd; import com.cloud.api.commands.ListAsyncJobsCmd; @@ -48,7 +50,6 @@ import com.cloud.api.commands.ListSSHKeyPairsCmd; import com.cloud.api.commands.ListServiceOfferingsCmd; import com.cloud.api.commands.ListStoragePoolsCmd; import com.cloud.api.commands.ListSystemVMsCmd; -import com.cloud.api.commands.ListTemplatesCmd; import com.cloud.api.commands.ListVMGroupsCmd; import com.cloud.api.commands.ListVlanIpRangesCmd; import com.cloud.api.commands.ListZonesByCmd; @@ -58,7 +59,6 @@ import com.cloud.api.commands.StopSystemVmCmd; import com.cloud.api.commands.UpdateDomainCmd; import com.cloud.api.commands.UpdateHostPasswordCmd; import org.apache.cloudstack.api.user.iso.command.UpdateIsoCmd; -import com.cloud.api.commands.UpdateTemplateCmd; import com.cloud.api.commands.UpdateVMGroupCmd; import com.cloud.api.commands.UpgradeSystemVMCmd; import com.cloud.api.commands.UploadCustomCertificateCmd; diff --git a/api/src/com/cloud/template/TemplateService.java b/api/src/com/cloud/template/TemplateService.java index c7f5f3d363c..9d63b259c85 100755 --- a/api/src/com/cloud/template/TemplateService.java +++ b/api/src/com/cloud/template/TemplateService.java @@ -21,9 +21,9 @@ import java.util.List; import org.apache.cloudstack.api.user.template.command.CopyTemplateCmd; import org.apache.cloudstack.api.user.iso.command.DeleteIsoCmd; -import com.cloud.api.commands.DeleteTemplateCmd; +import org.apache.cloudstack.api.user.template.command.DeleteTemplateCmd; import org.apache.cloudstack.api.user.iso.command.ExtractIsoCmd; -import com.cloud.api.commands.ExtractTemplateCmd; +import org.apache.cloudstack.api.user.template.command.ExtractTemplateCmd; import com.cloud.api.commands.ListTemplateOrIsoPermissionsCmd; import com.cloud.api.commands.RegisterIsoCmd; import com.cloud.api.commands.RegisterTemplateCmd; diff --git a/api/src/com/cloud/vm/UserVmService.java b/api/src/com/cloud/vm/UserVmService.java index 5a1ff5de60c..6c9afd21075 100755 --- a/api/src/com/cloud/vm/UserVmService.java +++ b/api/src/com/cloud/vm/UserVmService.java @@ -23,7 +23,7 @@ import javax.naming.InsufficientResourcesException; import org.apache.cloudstack.api.admin.vm.command.AssignVMCmd; import com.cloud.api.commands.AttachVolumeCmd; -import com.cloud.api.commands.CreateTemplateCmd; +import org.apache.cloudstack.api.user.template.command.CreateTemplateCmd; import com.cloud.api.commands.CreateVMGroupCmd; import com.cloud.api.commands.DeleteVMGroupCmd; import org.apache.cloudstack.api.user.vm.command.DeployVMCmd; diff --git a/api/src/com/cloud/api/commands/CreateTemplateCmd.java b/api/src/org/apache/cloudstack/api/user/template/command/CreateTemplateCmd.java similarity index 99% rename from api/src/com/cloud/api/commands/CreateTemplateCmd.java rename to api/src/org/apache/cloudstack/api/user/template/command/CreateTemplateCmd.java index a9b28e2d751..0a2b970680c 100755 --- a/api/src/com/cloud/api/commands/CreateTemplateCmd.java +++ b/api/src/org/apache/cloudstack/api/user/template/command/CreateTemplateCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.user.template.command; import java.util.Collection; import java.util.List; diff --git a/api/src/com/cloud/api/commands/DeleteTemplateCmd.java b/api/src/org/apache/cloudstack/api/user/template/command/DeleteTemplateCmd.java similarity index 98% rename from api/src/com/cloud/api/commands/DeleteTemplateCmd.java rename to api/src/org/apache/cloudstack/api/user/template/command/DeleteTemplateCmd.java index e3c995fa1cd..c0e58122728 100755 --- a/api/src/com/cloud/api/commands/DeleteTemplateCmd.java +++ b/api/src/org/apache/cloudstack/api/user/template/command/DeleteTemplateCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.user.template.command; import org.apache.log4j.Logger; diff --git a/api/src/com/cloud/api/commands/ExtractTemplateCmd.java b/api/src/org/apache/cloudstack/api/user/template/command/ExtractTemplateCmd.java similarity index 98% rename from api/src/com/cloud/api/commands/ExtractTemplateCmd.java rename to api/src/org/apache/cloudstack/api/user/template/command/ExtractTemplateCmd.java index eacd0f625a6..6de5118e9d4 100755 --- a/api/src/com/cloud/api/commands/ExtractTemplateCmd.java +++ b/api/src/org/apache/cloudstack/api/user/template/command/ExtractTemplateCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.user.template.command; import org.apache.log4j.Logger; diff --git a/api/src/com/cloud/api/commands/ListTemplatePermissionsCmd.java b/api/src/org/apache/cloudstack/api/user/template/command/ListTemplatePermissionsCmd.java similarity index 92% rename from api/src/com/cloud/api/commands/ListTemplatePermissionsCmd.java rename to api/src/org/apache/cloudstack/api/user/template/command/ListTemplatePermissionsCmd.java index 6e118d90667..8188032639c 100644 --- a/api/src/com/cloud/api/commands/ListTemplatePermissionsCmd.java +++ b/api/src/org/apache/cloudstack/api/user/template/command/ListTemplatePermissionsCmd.java @@ -14,8 +14,9 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.user.template.command; +import com.cloud.api.commands.ListTemplateOrIsoPermissionsCmd; import org.apache.log4j.Logger; import com.cloud.storage.Storage.ImageFormat; diff --git a/api/src/com/cloud/api/commands/ListTemplatesCmd.java b/api/src/org/apache/cloudstack/api/user/template/command/ListTemplatesCmd.java similarity index 99% rename from api/src/com/cloud/api/commands/ListTemplatesCmd.java rename to api/src/org/apache/cloudstack/api/user/template/command/ListTemplatesCmd.java index ca5dd734cb1..7d2cc01da78 100755 --- a/api/src/com/cloud/api/commands/ListTemplatesCmd.java +++ b/api/src/org/apache/cloudstack/api/user/template/command/ListTemplatesCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.user.template.command; import java.util.ArrayList; import java.util.List; diff --git a/api/src/com/cloud/api/commands/UpdateTemplateCmd.java b/api/src/org/apache/cloudstack/api/user/template/command/UpdateTemplateCmd.java similarity index 96% rename from api/src/com/cloud/api/commands/UpdateTemplateCmd.java rename to api/src/org/apache/cloudstack/api/user/template/command/UpdateTemplateCmd.java index 2cffdac43b5..bfde98eb11a 100755 --- a/api/src/com/cloud/api/commands/UpdateTemplateCmd.java +++ b/api/src/org/apache/cloudstack/api/user/template/command/UpdateTemplateCmd.java @@ -14,8 +14,9 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.user.template.command; +import com.cloud.api.commands.UpdateTemplateOrIsoCmd; import org.apache.log4j.Logger; import org.apache.cloudstack.api.BaseCmd; diff --git a/api/src/com/cloud/api/commands/UpdateTemplatePermissionsCmd.java b/api/src/org/apache/cloudstack/api/user/template/command/UpdateTemplatePermissionsCmd.java similarity index 95% rename from api/src/com/cloud/api/commands/UpdateTemplatePermissionsCmd.java rename to api/src/org/apache/cloudstack/api/user/template/command/UpdateTemplatePermissionsCmd.java index fac827bf6e6..3fd09da28b5 100644 --- a/api/src/com/cloud/api/commands/UpdateTemplatePermissionsCmd.java +++ b/api/src/org/apache/cloudstack/api/user/template/command/UpdateTemplatePermissionsCmd.java @@ -14,8 +14,9 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.user.template.command; +import com.cloud.api.commands.UpdateTemplateOrIsoPermissionsCmd; import org.apache.log4j.Logger; import org.apache.cloudstack.api.Implementation; diff --git a/client/tomcatconf/commands.properties.in b/client/tomcatconf/commands.properties.in index 57ddd9a9f50..c6f540924cd 100755 --- a/client/tomcatconf/commands.properties.in +++ b/client/tomcatconf/commands.properties.in @@ -79,15 +79,15 @@ listSnapshotPolicies=com.cloud.api.commands.ListSnapshotPoliciesCmd;15 #### template commands -createTemplate=com.cloud.api.commands.CreateTemplateCmd;15 +createTemplate=org.apache.cloudstack.api.user.template.command.CreateTemplateCmd;15 registerTemplate=com.cloud.api.commands.RegisterTemplateCmd;15 -updateTemplate=com.cloud.api.commands.UpdateTemplateCmd;15 +updateTemplate=org.apache.cloudstack.api.user.template.command.UpdateTemplateCmd;15 copyTemplate=org.apache.cloudstack.api.user.template.command.CopyTemplateCmd;15 -deleteTemplate=com.cloud.api.commands.DeleteTemplateCmd;15 -listTemplates=com.cloud.api.commands.ListTemplatesCmd;15 -updateTemplatePermissions=com.cloud.api.commands.UpdateTemplatePermissionsCmd;15 -listTemplatePermissions=com.cloud.api.commands.ListTemplatePermissionsCmd;15 -extractTemplate=com.cloud.api.commands.ExtractTemplateCmd;15 +deleteTemplate=org.apache.cloudstack.api.user.template.command.DeleteTemplateCmd;15 +listTemplates=org.apache.cloudstack.api.user.template.command.ListTemplatesCmd;15 +updateTemplatePermissions=org.apache.cloudstack.api.user.template.command.UpdateTemplatePermissionsCmd;15 +listTemplatePermissions=org.apache.cloudstack.api.user.template.command.ListTemplatePermissionsCmd;15 +extractTemplate=org.apache.cloudstack.api.user.template.command.ExtractTemplateCmd;15 prepareTemplate=com.cloud.api.commands.PrepareTemplateCmd;1 #### iso commands diff --git a/server/src/com/cloud/baremetal/BareMetalVmManagerImpl.java b/server/src/com/cloud/baremetal/BareMetalVmManagerImpl.java index fc0ecb578aa..e0ce531d7b5 100755 --- a/server/src/com/cloud/baremetal/BareMetalVmManagerImpl.java +++ b/server/src/com/cloud/baremetal/BareMetalVmManagerImpl.java @@ -25,6 +25,7 @@ import java.util.concurrent.Executors; import javax.ejb.Local; import javax.naming.ConfigurationException; +import org.apache.cloudstack.api.user.template.command.CreateTemplateCmd; import org.apache.log4j.Logger; import com.cloud.agent.api.Answer; @@ -33,7 +34,6 @@ import com.cloud.agent.api.baremetal.IpmISetBootDevCommand; import com.cloud.agent.api.baremetal.IpmiBootorResetCommand; import com.cloud.agent.manager.Commands; import com.cloud.api.commands.AttachVolumeCmd; -import com.cloud.api.commands.CreateTemplateCmd; import org.apache.cloudstack.api.user.vm.command.DeployVMCmd; import com.cloud.api.commands.DetachVolumeCmd; import org.apache.cloudstack.api.user.vm.command.StartVMCmd; diff --git a/server/src/com/cloud/server/ManagementServerImpl.java b/server/src/com/cloud/server/ManagementServerImpl.java index 2f33c258feb..c43dbd350d9 100755 --- a/server/src/com/cloud/server/ManagementServerImpl.java +++ b/server/src/com/cloud/server/ManagementServerImpl.java @@ -43,6 +43,8 @@ import javax.crypto.Mac; import javax.crypto.spec.SecretKeySpec; import org.apache.cloudstack.api.user.iso.command.ListIsosCmd; +import org.apache.cloudstack.api.user.template.command.ListTemplatesCmd; +import org.apache.cloudstack.api.user.template.command.UpdateTemplateCmd; import org.apache.commons.codec.binary.Base64; import org.apache.log4j.Logger; @@ -82,7 +84,6 @@ import com.cloud.api.commands.ListSSHKeyPairsCmd; import com.cloud.api.commands.ListServiceOfferingsCmd; import com.cloud.api.commands.ListStoragePoolsCmd; import com.cloud.api.commands.ListSystemVMsCmd; -import com.cloud.api.commands.ListTemplatesCmd; import com.cloud.api.commands.ListVMGroupsCmd; import com.cloud.api.commands.ListVlanIpRangesCmd; import com.cloud.api.commands.ListZonesByCmd; @@ -92,7 +93,6 @@ import com.cloud.api.commands.StopSystemVmCmd; import com.cloud.api.commands.UpdateDomainCmd; import com.cloud.api.commands.UpdateHostPasswordCmd; import org.apache.cloudstack.api.user.iso.command.UpdateIsoCmd; -import com.cloud.api.commands.UpdateTemplateCmd; import com.cloud.api.commands.UpdateTemplateOrIsoCmd; import com.cloud.api.commands.UpdateVMGroupCmd; import com.cloud.api.commands.UpgradeSystemVMCmd; diff --git a/server/src/com/cloud/storage/swift/SwiftManager.java b/server/src/com/cloud/storage/swift/SwiftManager.java index 8fd3eb02a8b..a1bd42df611 100644 --- a/server/src/com/cloud/storage/swift/SwiftManager.java +++ b/server/src/com/cloud/storage/swift/SwiftManager.java @@ -21,7 +21,7 @@ import java.util.List; import com.cloud.agent.api.to.SwiftTO; import com.cloud.api.commands.AddSwiftCmd; import org.apache.cloudstack.api.user.iso.command.DeleteIsoCmd; -import com.cloud.api.commands.DeleteTemplateCmd; +import org.apache.cloudstack.api.user.template.command.DeleteTemplateCmd; import com.cloud.api.commands.ListSwiftsCmd; import com.cloud.exception.DiscoveryException; import com.cloud.storage.Swift; diff --git a/server/src/com/cloud/storage/swift/SwiftManagerImpl.java b/server/src/com/cloud/storage/swift/SwiftManagerImpl.java index 207d9eb82a8..1708193bd0b 100644 --- a/server/src/com/cloud/storage/swift/SwiftManagerImpl.java +++ b/server/src/com/cloud/storage/swift/SwiftManagerImpl.java @@ -26,6 +26,7 @@ import javax.ejb.Local; import javax.naming.ConfigurationException; import org.apache.cloudstack.api.user.iso.command.DeleteIsoCmd; +import org.apache.cloudstack.api.user.template.command.DeleteTemplateCmd; import org.apache.log4j.Logger; import com.cloud.agent.AgentManager; @@ -33,7 +34,6 @@ import com.cloud.agent.api.Answer; import com.cloud.agent.api.DeleteObjectFromSwiftCommand; import com.cloud.agent.api.to.SwiftTO; import com.cloud.api.commands.AddSwiftCmd; -import com.cloud.api.commands.DeleteTemplateCmd; import com.cloud.api.commands.ListSwiftsCmd; import com.cloud.configuration.Config; import com.cloud.configuration.dao.ConfigurationDao; diff --git a/server/src/com/cloud/storage/upload/UploadListener.java b/server/src/com/cloud/storage/upload/UploadListener.java index 21e15de0088..aab798b49e9 100755 --- a/server/src/com/cloud/storage/upload/UploadListener.java +++ b/server/src/com/cloud/storage/upload/UploadListener.java @@ -39,7 +39,7 @@ import com.cloud.agent.api.storage.UploadAnswer; import com.cloud.agent.api.storage.UploadCommand; import com.cloud.agent.api.storage.UploadProgressCommand; import com.cloud.agent.api.storage.UploadProgressCommand.RequestType; -import com.cloud.api.commands.ExtractTemplateCmd; +import org.apache.cloudstack.api.user.template.command.ExtractTemplateCmd; import com.cloud.api.commands.ExtractVolumeCmd; import com.cloud.api.response.ExtractResponse; import com.cloud.async.AsyncJobManager; diff --git a/server/src/com/cloud/template/HyervisorTemplateAdapter.java b/server/src/com/cloud/template/HyervisorTemplateAdapter.java index e6ef53883a6..f4348fd77f4 100755 --- a/server/src/com/cloud/template/HyervisorTemplateAdapter.java +++ b/server/src/com/cloud/template/HyervisorTemplateAdapter.java @@ -31,7 +31,7 @@ import org.apache.log4j.Logger; import com.cloud.agent.AgentManager; import com.cloud.agent.api.Answer; import com.cloud.agent.api.storage.DeleteTemplateCommand; -import com.cloud.api.commands.DeleteTemplateCmd; +import org.apache.cloudstack.api.user.template.command.DeleteTemplateCmd; import com.cloud.api.commands.RegisterIsoCmd; import com.cloud.api.commands.RegisterTemplateCmd; import com.cloud.configuration.Resource.ResourceType; diff --git a/server/src/com/cloud/template/TemplateAdapter.java b/server/src/com/cloud/template/TemplateAdapter.java index e2844a3d4ca..0c6f32982a5 100755 --- a/server/src/com/cloud/template/TemplateAdapter.java +++ b/server/src/com/cloud/template/TemplateAdapter.java @@ -19,7 +19,7 @@ package com.cloud.template; import java.util.Map; import org.apache.cloudstack.api.user.iso.command.DeleteIsoCmd; -import com.cloud.api.commands.DeleteTemplateCmd; +import org.apache.cloudstack.api.user.template.command.DeleteTemplateCmd; import com.cloud.api.commands.RegisterIsoCmd; import com.cloud.api.commands.RegisterTemplateCmd; import com.cloud.exception.ResourceAllocationException; diff --git a/server/src/com/cloud/template/TemplateAdapterBase.java b/server/src/com/cloud/template/TemplateAdapterBase.java index 546b10a668b..916540fe9b1 100755 --- a/server/src/com/cloud/template/TemplateAdapterBase.java +++ b/server/src/com/cloud/template/TemplateAdapterBase.java @@ -26,7 +26,7 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import com.cloud.api.ApiDBUtils; import org.apache.cloudstack.api.user.iso.command.DeleteIsoCmd; -import com.cloud.api.commands.DeleteTemplateCmd; +import org.apache.cloudstack.api.user.template.command.DeleteTemplateCmd; import com.cloud.api.commands.RegisterIsoCmd; import com.cloud.api.commands.RegisterTemplateCmd; import com.cloud.configuration.Resource.ResourceType; diff --git a/server/src/com/cloud/template/TemplateManagerImpl.java b/server/src/com/cloud/template/TemplateManagerImpl.java index df8cf8424d5..ffe7d172dc4 100755 --- a/server/src/com/cloud/template/TemplateManagerImpl.java +++ b/server/src/com/cloud/template/TemplateManagerImpl.java @@ -36,6 +36,9 @@ import javax.naming.ConfigurationException; import org.apache.cloudstack.api.user.iso.command.*; import org.apache.cloudstack.api.user.template.command.CopyTemplateCmd; +import org.apache.cloudstack.api.user.template.command.ExtractTemplateCmd; +import org.apache.cloudstack.api.user.template.command.ListTemplatePermissionsCmd; +import org.apache.cloudstack.api.user.template.command.UpdateTemplatePermissionsCmd; import org.apache.log4j.Logger; import com.cloud.acl.SecurityChecker.AccessType; @@ -47,14 +50,11 @@ import com.cloud.agent.api.storage.DestroyCommand; import com.cloud.agent.api.storage.PrimaryStorageDownloadAnswer; import com.cloud.agent.api.storage.PrimaryStorageDownloadCommand; import com.cloud.agent.api.to.SwiftTO; -import com.cloud.api.commands.DeleteTemplateCmd; -import com.cloud.api.commands.ExtractTemplateCmd; +import org.apache.cloudstack.api.user.template.command.DeleteTemplateCmd; import com.cloud.api.commands.ListTemplateOrIsoPermissionsCmd; -import com.cloud.api.commands.ListTemplatePermissionsCmd; import com.cloud.api.commands.RegisterIsoCmd; import com.cloud.api.commands.RegisterTemplateCmd; import com.cloud.api.commands.UpdateTemplateOrIsoPermissionsCmd; -import com.cloud.api.commands.UpdateTemplatePermissionsCmd; import com.cloud.async.AsyncJobManager; import com.cloud.async.AsyncJobVO; import com.cloud.configuration.Config; diff --git a/server/src/com/cloud/vm/UserVmManagerImpl.java b/server/src/com/cloud/vm/UserVmManagerImpl.java index 8d9bd5acdb0..2c7c7fbb493 100755 --- a/server/src/com/cloud/vm/UserVmManagerImpl.java +++ b/server/src/com/cloud/vm/UserVmManagerImpl.java @@ -31,6 +31,7 @@ import java.util.concurrent.TimeUnit; import javax.ejb.Local; import javax.naming.ConfigurationException; +import org.apache.cloudstack.api.user.template.command.CreateTemplateCmd; import org.apache.commons.codec.binary.Base64; import org.apache.log4j.Logger; @@ -60,7 +61,6 @@ import com.cloud.api.ApiDBUtils; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.admin.vm.command.AssignVMCmd; import com.cloud.api.commands.AttachVolumeCmd; -import com.cloud.api.commands.CreateTemplateCmd; import com.cloud.api.commands.CreateVMGroupCmd; import com.cloud.api.commands.DeleteVMGroupCmd; import org.apache.cloudstack.api.user.vm.command.DeployVMCmd; diff --git a/server/test/com/cloud/vm/MockUserVmManagerImpl.java b/server/test/com/cloud/vm/MockUserVmManagerImpl.java index 16f01948113..39900a6d179 100644 --- a/server/test/com/cloud/vm/MockUserVmManagerImpl.java +++ b/server/test/com/cloud/vm/MockUserVmManagerImpl.java @@ -30,7 +30,7 @@ import com.cloud.agent.api.to.VirtualMachineTO; import com.cloud.agent.manager.Commands; import org.apache.cloudstack.api.admin.vm.command.AssignVMCmd; import com.cloud.api.commands.AttachVolumeCmd; -import com.cloud.api.commands.CreateTemplateCmd; +import org.apache.cloudstack.api.user.template.command.CreateTemplateCmd; import com.cloud.api.commands.CreateVMGroupCmd; import com.cloud.api.commands.DeleteVMGroupCmd; import org.apache.cloudstack.api.user.vm.command.DeployVMCmd; From 0df9538fb7b335a92c5fb764589e37c0b45f952e Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Mon, 3 Dec 2012 23:11:17 -0800 Subject: [PATCH 010/421] api_refactor: refactor security group (sg) apis - Fix refactored apis, fix mapping in commands*.in - Fix comments etc. Signed-off-by: Rohit Yadav --- .../network/security/SecurityGroupService.java | 11 ++++------- .../command}/AuthorizeSecurityGroupEgressCmd.java | 2 +- .../command}/AuthorizeSecurityGroupIngressCmd.java | 2 +- .../user/sg/command}/CreateSecurityGroupCmd.java | 2 +- .../user/sg/command}/DeleteSecurityGroupCmd.java | 2 +- .../user/sg/command}/ListSecurityGroupsCmd.java | 2 +- .../sg/command}/RevokeSecurityGroupEgressCmd.java | 2 +- .../sg/command}/RevokeSecurityGroupIngressCmd.java | 2 +- client/tomcatconf/commands.properties.in | 14 +++++++------- .../network/security/SecurityGroupManagerImpl.java | 13 ++++++------- 10 files changed, 24 insertions(+), 28 deletions(-) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/user/sg/command}/AuthorizeSecurityGroupEgressCmd.java (99%) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/user/sg/command}/AuthorizeSecurityGroupIngressCmd.java (99%) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/user/sg/command}/CreateSecurityGroupCmd.java (98%) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/user/sg/command}/DeleteSecurityGroupCmd.java (98%) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/user/sg/command}/ListSecurityGroupsCmd.java (98%) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/user/sg/command}/RevokeSecurityGroupEgressCmd.java (98%) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/user/sg/command}/RevokeSecurityGroupIngressCmd.java (98%) diff --git a/api/src/com/cloud/network/security/SecurityGroupService.java b/api/src/com/cloud/network/security/SecurityGroupService.java index 55b6e78a815..270047f5713 100644 --- a/api/src/com/cloud/network/security/SecurityGroupService.java +++ b/api/src/com/cloud/network/security/SecurityGroupService.java @@ -18,13 +18,10 @@ package com.cloud.network.security; import java.util.List; -import com.cloud.api.commands.AuthorizeSecurityGroupEgressCmd; -import com.cloud.api.commands.AuthorizeSecurityGroupIngressCmd; -import com.cloud.api.commands.CreateSecurityGroupCmd; -import com.cloud.api.commands.DeleteSecurityGroupCmd; -import com.cloud.api.commands.ListSecurityGroupsCmd; -import com.cloud.api.commands.RevokeSecurityGroupEgressCmd; -import com.cloud.api.commands.RevokeSecurityGroupIngressCmd; +import org.apache.cloudstack.api.user.sg.command.*; +import org.apache.cloudstack.api.user.sg.command.AuthorizeSecurityGroupIngressCmd; +import org.apache.cloudstack.api.user.sg.command.CreateSecurityGroupCmd; +import org.apache.cloudstack.api.user.sg.command.RevokeSecurityGroupEgressCmd; import com.cloud.exception.InvalidParameterValueException; import com.cloud.exception.PermissionDeniedException; import com.cloud.exception.ResourceInUseException; diff --git a/api/src/com/cloud/api/commands/AuthorizeSecurityGroupEgressCmd.java b/api/src/org/apache/cloudstack/api/user/sg/command/AuthorizeSecurityGroupEgressCmd.java similarity index 99% rename from api/src/com/cloud/api/commands/AuthorizeSecurityGroupEgressCmd.java rename to api/src/org/apache/cloudstack/api/user/sg/command/AuthorizeSecurityGroupEgressCmd.java index 3abed2af7e8..658f03a73a8 100644 --- a/api/src/com/cloud/api/commands/AuthorizeSecurityGroupEgressCmd.java +++ b/api/src/org/apache/cloudstack/api/user/sg/command/AuthorizeSecurityGroupEgressCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.user.sg.command; import java.util.Collection; import java.util.HashMap; diff --git a/api/src/com/cloud/api/commands/AuthorizeSecurityGroupIngressCmd.java b/api/src/org/apache/cloudstack/api/user/sg/command/AuthorizeSecurityGroupIngressCmd.java similarity index 99% rename from api/src/com/cloud/api/commands/AuthorizeSecurityGroupIngressCmd.java rename to api/src/org/apache/cloudstack/api/user/sg/command/AuthorizeSecurityGroupIngressCmd.java index dc8e6055bce..38a4f49e532 100644 --- a/api/src/com/cloud/api/commands/AuthorizeSecurityGroupIngressCmd.java +++ b/api/src/org/apache/cloudstack/api/user/sg/command/AuthorizeSecurityGroupIngressCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.user.sg.command; import java.util.Collection; import java.util.HashMap; diff --git a/api/src/com/cloud/api/commands/CreateSecurityGroupCmd.java b/api/src/org/apache/cloudstack/api/user/sg/command/CreateSecurityGroupCmd.java similarity index 98% rename from api/src/com/cloud/api/commands/CreateSecurityGroupCmd.java rename to api/src/org/apache/cloudstack/api/user/sg/command/CreateSecurityGroupCmd.java index ddd4bfb000d..71a1ee60d3a 100644 --- a/api/src/com/cloud/api/commands/CreateSecurityGroupCmd.java +++ b/api/src/org/apache/cloudstack/api/user/sg/command/CreateSecurityGroupCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.user.sg.command; import org.apache.log4j.Logger; diff --git a/api/src/com/cloud/api/commands/DeleteSecurityGroupCmd.java b/api/src/org/apache/cloudstack/api/user/sg/command/DeleteSecurityGroupCmd.java similarity index 98% rename from api/src/com/cloud/api/commands/DeleteSecurityGroupCmd.java rename to api/src/org/apache/cloudstack/api/user/sg/command/DeleteSecurityGroupCmd.java index 27d1270c252..92e1b83ee65 100644 --- a/api/src/com/cloud/api/commands/DeleteSecurityGroupCmd.java +++ b/api/src/org/apache/cloudstack/api/user/sg/command/DeleteSecurityGroupCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.user.sg.command; import org.apache.log4j.Logger; diff --git a/api/src/com/cloud/api/commands/ListSecurityGroupsCmd.java b/api/src/org/apache/cloudstack/api/user/sg/command/ListSecurityGroupsCmd.java similarity index 98% rename from api/src/com/cloud/api/commands/ListSecurityGroupsCmd.java rename to api/src/org/apache/cloudstack/api/user/sg/command/ListSecurityGroupsCmd.java index 92117414dc8..db6e3e7ef35 100644 --- a/api/src/com/cloud/api/commands/ListSecurityGroupsCmd.java +++ b/api/src/org/apache/cloudstack/api/user/sg/command/ListSecurityGroupsCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.user.sg.command; import java.util.List; diff --git a/api/src/com/cloud/api/commands/RevokeSecurityGroupEgressCmd.java b/api/src/org/apache/cloudstack/api/user/sg/command/RevokeSecurityGroupEgressCmd.java similarity index 98% rename from api/src/com/cloud/api/commands/RevokeSecurityGroupEgressCmd.java rename to api/src/org/apache/cloudstack/api/user/sg/command/RevokeSecurityGroupEgressCmd.java index d6b6f6cc20d..f806e2f34f8 100644 --- a/api/src/com/cloud/api/commands/RevokeSecurityGroupEgressCmd.java +++ b/api/src/org/apache/cloudstack/api/user/sg/command/RevokeSecurityGroupEgressCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.user.sg.command; import org.apache.log4j.Logger; diff --git a/api/src/com/cloud/api/commands/RevokeSecurityGroupIngressCmd.java b/api/src/org/apache/cloudstack/api/user/sg/command/RevokeSecurityGroupIngressCmd.java similarity index 98% rename from api/src/com/cloud/api/commands/RevokeSecurityGroupIngressCmd.java rename to api/src/org/apache/cloudstack/api/user/sg/command/RevokeSecurityGroupIngressCmd.java index 5818580e3f7..668b9e218a7 100644 --- a/api/src/com/cloud/api/commands/RevokeSecurityGroupIngressCmd.java +++ b/api/src/org/apache/cloudstack/api/user/sg/command/RevokeSecurityGroupIngressCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.user.sg.command; import org.apache.log4j.Logger; diff --git a/client/tomcatconf/commands.properties.in b/client/tomcatconf/commands.properties.in index c6f540924cd..6bff53df320 100755 --- a/client/tomcatconf/commands.properties.in +++ b/client/tomcatconf/commands.properties.in @@ -273,13 +273,13 @@ enableStorageMaintenance=com.cloud.api.commands.PreparePrimaryStorageForMaintena cancelStorageMaintenance=com.cloud.api.commands.CancelPrimaryStorageMaintenanceCmd;1 #### security group commands -createSecurityGroup=com.cloud.api.commands.CreateSecurityGroupCmd;15 -deleteSecurityGroup=com.cloud.api.commands.DeleteSecurityGroupCmd;15 -authorizeSecurityGroupIngress=com.cloud.api.commands.AuthorizeSecurityGroupIngressCmd;15 -revokeSecurityGroupIngress=com.cloud.api.commands.RevokeSecurityGroupIngressCmd;15 -authorizeSecurityGroupEgress=com.cloud.api.commands.AuthorizeSecurityGroupEgressCmd;15 -revokeSecurityGroupEgress=com.cloud.api.commands.RevokeSecurityGroupEgressCmd;15 -listSecurityGroups=com.cloud.api.commands.ListSecurityGroupsCmd;15 +createSecurityGroup=org.apache.cloudstack.api.user.sg.command.CreateSecurityGroupCmd;15 +deleteSecurityGroup=org.apache.cloudstack.api.user.sg.command.DeleteSecurityGroupCmd;15 +authorizeSecurityGroupIngress=org.apache.cloudstack.api.user.sg.command.AuthorizeSecurityGroupIngressCmd;15 +revokeSecurityGroupIngress=org.apache.cloudstack.api.user.sg.command.RevokeSecurityGroupIngressCmd;15 +authorizeSecurityGroupEgress=org.apache.cloudstack.api.user.sg.command.AuthorizeSecurityGroupEgressCmd;15 +revokeSecurityGroupEgress=org.apache.cloudstack.api.user.sg.command.RevokeSecurityGroupEgressCmd;15 +listSecurityGroups=org.apache.cloudstack.api.user.sg.command.ListSecurityGroupsCmd;15 #### vm group commands createInstanceGroup=com.cloud.api.commands.CreateVMGroupCmd;15 diff --git a/server/src/com/cloud/network/security/SecurityGroupManagerImpl.java b/server/src/com/cloud/network/security/SecurityGroupManagerImpl.java index a1ed6d73e42..40826c9c8b8 100755 --- a/server/src/com/cloud/network/security/SecurityGroupManagerImpl.java +++ b/server/src/com/cloud/network/security/SecurityGroupManagerImpl.java @@ -36,6 +36,7 @@ import java.util.concurrent.TimeUnit; import javax.ejb.Local; import javax.naming.ConfigurationException; +import org.apache.cloudstack.api.user.sg.command.*; import org.apache.commons.codec.digest.DigestUtils; import org.apache.log4j.Logger; @@ -44,13 +45,11 @@ import com.cloud.agent.api.NetworkRulesSystemVmCommand; import com.cloud.agent.api.SecurityGroupRulesCmd; import com.cloud.agent.api.SecurityGroupRulesCmd.IpPortAndProto; import com.cloud.agent.manager.Commands; -import com.cloud.api.commands.AuthorizeSecurityGroupEgressCmd; -import com.cloud.api.commands.AuthorizeSecurityGroupIngressCmd; -import com.cloud.api.commands.CreateSecurityGroupCmd; -import com.cloud.api.commands.DeleteSecurityGroupCmd; -import com.cloud.api.commands.ListSecurityGroupsCmd; -import com.cloud.api.commands.RevokeSecurityGroupEgressCmd; -import com.cloud.api.commands.RevokeSecurityGroupIngressCmd; +import org.apache.cloudstack.api.user.sg.command.AuthorizeSecurityGroupEgressCmd; +import org.apache.cloudstack.api.user.sg.command.CreateSecurityGroupCmd; +import org.apache.cloudstack.api.user.sg.command.DeleteSecurityGroupCmd; +import org.apache.cloudstack.api.user.sg.command.ListSecurityGroupsCmd; +import org.apache.cloudstack.api.user.sg.command.RevokeSecurityGroupEgressCmd; import com.cloud.configuration.Config; import com.cloud.configuration.dao.ConfigurationDao; import com.cloud.domain.dao.DomainDao; From a033cf1bfcf5580ac5182ba919e5ea796b11c35d Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Mon, 3 Dec 2012 23:19:12 -0800 Subject: [PATCH 011/421] api_refactor: refactor snapshot apis - Fix refactored apis, fix mappings in commands*.in - Fix comments etc. Signed-off-by: Rohit Yadav --- .../com/cloud/storage/snapshot/SnapshotService.java | 8 ++++---- .../user/snapshot/command}/CreateSnapshotCmd.java | 2 +- .../snapshot/command}/CreateSnapshotPolicyCmd.java | 2 +- .../user/snapshot/command}/DeleteSnapshotCmd.java | 2 +- .../snapshot/command}/DeleteSnapshotPoliciesCmd.java | 2 +- .../snapshot/command}/ListSnapshotPoliciesCmd.java | 2 +- .../api/user/snapshot/command}/ListSnapshotsCmd.java | 2 +- client/tomcatconf/commands.properties.in | 12 ++++++------ .../cloud/storage/snapshot/SnapshotManagerImpl.java | 7 +++---- .../storage/snapshot/SnapshotSchedulerImpl.java | 2 +- 10 files changed, 20 insertions(+), 21 deletions(-) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/user/snapshot/command}/CreateSnapshotCmd.java (99%) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/user/snapshot/command}/CreateSnapshotPolicyCmd.java (99%) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/user/snapshot/command}/DeleteSnapshotCmd.java (98%) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/user/snapshot/command}/DeleteSnapshotPoliciesCmd.java (98%) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/user/snapshot/command}/ListSnapshotPoliciesCmd.java (98%) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/user/snapshot/command}/ListSnapshotsCmd.java (98%) diff --git a/api/src/com/cloud/storage/snapshot/SnapshotService.java b/api/src/com/cloud/storage/snapshot/SnapshotService.java index 967c2ccfd5d..0c024211469 100644 --- a/api/src/com/cloud/storage/snapshot/SnapshotService.java +++ b/api/src/com/cloud/storage/snapshot/SnapshotService.java @@ -18,11 +18,11 @@ package com.cloud.storage.snapshot; import java.util.List; -import com.cloud.api.commands.CreateSnapshotPolicyCmd; -import com.cloud.api.commands.DeleteSnapshotPoliciesCmd; +import org.apache.cloudstack.api.user.snapshot.command.CreateSnapshotPolicyCmd; +import org.apache.cloudstack.api.user.snapshot.command.DeleteSnapshotPoliciesCmd; import com.cloud.api.commands.ListRecurringSnapshotScheduleCmd; -import com.cloud.api.commands.ListSnapshotPoliciesCmd; -import com.cloud.api.commands.ListSnapshotsCmd; +import org.apache.cloudstack.api.user.snapshot.command.ListSnapshotPoliciesCmd; +import org.apache.cloudstack.api.user.snapshot.command.ListSnapshotsCmd; import com.cloud.exception.PermissionDeniedException; import com.cloud.exception.ResourceAllocationException; import com.cloud.storage.Snapshot; diff --git a/api/src/com/cloud/api/commands/CreateSnapshotCmd.java b/api/src/org/apache/cloudstack/api/user/snapshot/command/CreateSnapshotCmd.java similarity index 99% rename from api/src/com/cloud/api/commands/CreateSnapshotCmd.java rename to api/src/org/apache/cloudstack/api/user/snapshot/command/CreateSnapshotCmd.java index f8bb6f72317..443b53bb607 100755 --- a/api/src/com/cloud/api/commands/CreateSnapshotCmd.java +++ b/api/src/org/apache/cloudstack/api/user/snapshot/command/CreateSnapshotCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.user.snapshot.command; import org.apache.log4j.Logger; diff --git a/api/src/com/cloud/api/commands/CreateSnapshotPolicyCmd.java b/api/src/org/apache/cloudstack/api/user/snapshot/command/CreateSnapshotPolicyCmd.java similarity index 99% rename from api/src/com/cloud/api/commands/CreateSnapshotPolicyCmd.java rename to api/src/org/apache/cloudstack/api/user/snapshot/command/CreateSnapshotPolicyCmd.java index 09ae81da0c9..b025abe37f9 100644 --- a/api/src/com/cloud/api/commands/CreateSnapshotPolicyCmd.java +++ b/api/src/org/apache/cloudstack/api/user/snapshot/command/CreateSnapshotPolicyCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.user.snapshot.command; import org.apache.log4j.Logger; diff --git a/api/src/com/cloud/api/commands/DeleteSnapshotCmd.java b/api/src/org/apache/cloudstack/api/user/snapshot/command/DeleteSnapshotCmd.java similarity index 98% rename from api/src/com/cloud/api/commands/DeleteSnapshotCmd.java rename to api/src/org/apache/cloudstack/api/user/snapshot/command/DeleteSnapshotCmd.java index df0fa56b5a7..a9e172911b4 100644 --- a/api/src/com/cloud/api/commands/DeleteSnapshotCmd.java +++ b/api/src/org/apache/cloudstack/api/user/snapshot/command/DeleteSnapshotCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.user.snapshot.command; import org.apache.log4j.Logger; diff --git a/api/src/com/cloud/api/commands/DeleteSnapshotPoliciesCmd.java b/api/src/org/apache/cloudstack/api/user/snapshot/command/DeleteSnapshotPoliciesCmd.java similarity index 98% rename from api/src/com/cloud/api/commands/DeleteSnapshotPoliciesCmd.java rename to api/src/org/apache/cloudstack/api/user/snapshot/command/DeleteSnapshotPoliciesCmd.java index 96f9de05c48..6e3207603f9 100755 --- a/api/src/com/cloud/api/commands/DeleteSnapshotPoliciesCmd.java +++ b/api/src/org/apache/cloudstack/api/user/snapshot/command/DeleteSnapshotPoliciesCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.user.snapshot.command; import java.util.List; diff --git a/api/src/com/cloud/api/commands/ListSnapshotPoliciesCmd.java b/api/src/org/apache/cloudstack/api/user/snapshot/command/ListSnapshotPoliciesCmd.java similarity index 98% rename from api/src/com/cloud/api/commands/ListSnapshotPoliciesCmd.java rename to api/src/org/apache/cloudstack/api/user/snapshot/command/ListSnapshotPoliciesCmd.java index 79105bb04df..aea7eda5744 100644 --- a/api/src/com/cloud/api/commands/ListSnapshotPoliciesCmd.java +++ b/api/src/org/apache/cloudstack/api/user/snapshot/command/ListSnapshotPoliciesCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.user.snapshot.command; import java.util.ArrayList; import java.util.List; diff --git a/api/src/com/cloud/api/commands/ListSnapshotsCmd.java b/api/src/org/apache/cloudstack/api/user/snapshot/command/ListSnapshotsCmd.java similarity index 98% rename from api/src/com/cloud/api/commands/ListSnapshotsCmd.java rename to api/src/org/apache/cloudstack/api/user/snapshot/command/ListSnapshotsCmd.java index 44b192b06c0..22890018808 100644 --- a/api/src/com/cloud/api/commands/ListSnapshotsCmd.java +++ b/api/src/org/apache/cloudstack/api/user/snapshot/command/ListSnapshotsCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.user.snapshot.command; import java.util.ArrayList; import java.util.List; diff --git a/client/tomcatconf/commands.properties.in b/client/tomcatconf/commands.properties.in index 6bff53df320..bd59f0c1621 100755 --- a/client/tomcatconf/commands.properties.in +++ b/client/tomcatconf/commands.properties.in @@ -70,12 +70,12 @@ migrateVirtualMachine=org.apache.cloudstack.api.admin.vm.command.MigrateVMCmd;1 recoverVirtualMachine=org.apache.cloudstack.api.admin.vm.command.RecoverVMCmd;7 #### snapshot commands -createSnapshot=com.cloud.api.commands.CreateSnapshotCmd;15 -listSnapshots=com.cloud.api.commands.ListSnapshotsCmd;15 -deleteSnapshot=com.cloud.api.commands.DeleteSnapshotCmd;15 -createSnapshotPolicy=com.cloud.api.commands.CreateSnapshotPolicyCmd;15 -deleteSnapshotPolicies=com.cloud.api.commands.DeleteSnapshotPoliciesCmd;15 -listSnapshotPolicies=com.cloud.api.commands.ListSnapshotPoliciesCmd;15 +createSnapshot=org.apache.cloudstack.api.user.snapshot.command.CreateSnapshotCmd;15 +listSnapshots=org.apache.cloudstack.api.user.snapshot.command.ListSnapshotsCmd;15 +deleteSnapshot=org.apache.cloudstack.api.user.snapshot.command.DeleteSnapshotCmd;15 +createSnapshotPolicy=org.apache.cloudstack.api.user.snapshot.command.CreateSnapshotPolicyCmd;15 +deleteSnapshotPolicies=org.apache.cloudstack.api.user.snapshot.command.DeleteSnapshotPoliciesCmd;15 +listSnapshotPolicies=org.apache.cloudstack.api.user.snapshot.command.ListSnapshotPoliciesCmd;15 #### template commands diff --git a/server/src/com/cloud/storage/snapshot/SnapshotManagerImpl.java b/server/src/com/cloud/storage/snapshot/SnapshotManagerImpl.java index 32e37e63c0d..d3ca3902813 100755 --- a/server/src/com/cloud/storage/snapshot/SnapshotManagerImpl.java +++ b/server/src/com/cloud/storage/snapshot/SnapshotManagerImpl.java @@ -25,6 +25,7 @@ import java.util.TimeZone; import javax.ejb.Local; import javax.naming.ConfigurationException; +import org.apache.cloudstack.api.user.snapshot.command.*; import org.apache.log4j.Logger; import com.cloud.agent.AgentManager; @@ -39,11 +40,9 @@ import com.cloud.agent.api.ManageSnapshotCommand; import com.cloud.agent.api.downloadSnapshotFromSwiftCommand; import com.cloud.agent.api.to.SwiftTO; import com.cloud.alert.AlertManager; -import com.cloud.api.commands.CreateSnapshotPolicyCmd; -import com.cloud.api.commands.DeleteSnapshotPoliciesCmd; +import org.apache.cloudstack.api.user.snapshot.command.DeleteSnapshotPoliciesCmd; import com.cloud.api.commands.ListRecurringSnapshotScheduleCmd; -import com.cloud.api.commands.ListSnapshotPoliciesCmd; -import com.cloud.api.commands.ListSnapshotsCmd; +import org.apache.cloudstack.api.user.snapshot.command.ListSnapshotPoliciesCmd; import com.cloud.configuration.Config; import com.cloud.configuration.Resource.ResourceType; import com.cloud.configuration.dao.ConfigurationDao; diff --git a/server/src/com/cloud/storage/snapshot/SnapshotSchedulerImpl.java b/server/src/com/cloud/storage/snapshot/SnapshotSchedulerImpl.java index 16de2e1493c..c42e5fbbeef 100644 --- a/server/src/com/cloud/storage/snapshot/SnapshotSchedulerImpl.java +++ b/server/src/com/cloud/storage/snapshot/SnapshotSchedulerImpl.java @@ -26,12 +26,12 @@ import java.util.TimerTask; import javax.ejb.Local; import javax.naming.ConfigurationException; +import org.apache.cloudstack.api.user.snapshot.command.CreateSnapshotCmd; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import com.cloud.api.ApiDispatcher; import com.cloud.api.ApiGsonHelper; -import com.cloud.api.commands.CreateSnapshotCmd; import com.cloud.user.Account; import com.cloud.async.AsyncJobManager; import com.cloud.async.AsyncJobResult; From 13aa4d8530340e69f2a621a9ea813548195843a5 Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Mon, 3 Dec 2012 23:30:54 -0800 Subject: [PATCH 012/421] api_refactor: refactor nat apis - Fix refactored apis, fix mappings in commands*.in - Fix comments etc. Signed-off-by: Rohit Yadav --- .../user/nat/command}/CreateIpForwardingRuleCmd.java | 2 +- .../user/nat/command}/DeleteIpForwardingRuleCmd.java | 2 +- .../api/user/nat/command}/DisableStaticNatCmd.java | 3 ++- .../api/user/nat/command}/EnableStaticNatCmd.java | 3 ++- .../user/nat/command}/ListIpForwardingRulesCmd.java | 2 +- client/tomcatconf/commands.properties.in | 10 +++++----- 6 files changed, 12 insertions(+), 10 deletions(-) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/user/nat/command}/CreateIpForwardingRuleCmd.java (99%) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/user/nat/command}/DeleteIpForwardingRuleCmd.java (98%) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/user/nat/command}/DisableStaticNatCmd.java (97%) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/user/nat/command}/EnableStaticNatCmd.java (97%) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/user/nat/command}/ListIpForwardingRulesCmd.java (98%) diff --git a/api/src/com/cloud/api/commands/CreateIpForwardingRuleCmd.java b/api/src/org/apache/cloudstack/api/user/nat/command/CreateIpForwardingRuleCmd.java similarity index 99% rename from api/src/com/cloud/api/commands/CreateIpForwardingRuleCmd.java rename to api/src/org/apache/cloudstack/api/user/nat/command/CreateIpForwardingRuleCmd.java index 9d79fdbdf1b..8f4dff75fd9 100644 --- a/api/src/com/cloud/api/commands/CreateIpForwardingRuleCmd.java +++ b/api/src/org/apache/cloudstack/api/user/nat/command/CreateIpForwardingRuleCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.user.nat.command; import java.util.List; diff --git a/api/src/com/cloud/api/commands/DeleteIpForwardingRuleCmd.java b/api/src/org/apache/cloudstack/api/user/nat/command/DeleteIpForwardingRuleCmd.java similarity index 98% rename from api/src/com/cloud/api/commands/DeleteIpForwardingRuleCmd.java rename to api/src/org/apache/cloudstack/api/user/nat/command/DeleteIpForwardingRuleCmd.java index 78c3892a195..aa0d87fe6d2 100644 --- a/api/src/com/cloud/api/commands/DeleteIpForwardingRuleCmd.java +++ b/api/src/org/apache/cloudstack/api/user/nat/command/DeleteIpForwardingRuleCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.user.nat.command; import org.apache.log4j.Logger; diff --git a/api/src/com/cloud/api/commands/DisableStaticNatCmd.java b/api/src/org/apache/cloudstack/api/user/nat/command/DisableStaticNatCmd.java similarity index 97% rename from api/src/com/cloud/api/commands/DisableStaticNatCmd.java rename to api/src/org/apache/cloudstack/api/user/nat/command/DisableStaticNatCmd.java index 10c77c6ed3e..912ad997980 100644 --- a/api/src/com/cloud/api/commands/DisableStaticNatCmd.java +++ b/api/src/org/apache/cloudstack/api/user/nat/command/DisableStaticNatCmd.java @@ -14,8 +14,9 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.user.nat.command; +import com.cloud.api.commands.DeletePortForwardingRuleCmd; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; diff --git a/api/src/com/cloud/api/commands/EnableStaticNatCmd.java b/api/src/org/apache/cloudstack/api/user/nat/command/EnableStaticNatCmd.java similarity index 97% rename from api/src/com/cloud/api/commands/EnableStaticNatCmd.java rename to api/src/org/apache/cloudstack/api/user/nat/command/EnableStaticNatCmd.java index b27566c3dc8..3398077dcc1 100644 --- a/api/src/com/cloud/api/commands/EnableStaticNatCmd.java +++ b/api/src/org/apache/cloudstack/api/user/nat/command/EnableStaticNatCmd.java @@ -14,8 +14,9 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.user.nat.command; +import org.apache.cloudstack.api.user.nat.command.CreateIpForwardingRuleCmd; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; diff --git a/api/src/com/cloud/api/commands/ListIpForwardingRulesCmd.java b/api/src/org/apache/cloudstack/api/user/nat/command/ListIpForwardingRulesCmd.java similarity index 98% rename from api/src/com/cloud/api/commands/ListIpForwardingRulesCmd.java rename to api/src/org/apache/cloudstack/api/user/nat/command/ListIpForwardingRulesCmd.java index 95515794514..50c240804bf 100644 --- a/api/src/com/cloud/api/commands/ListIpForwardingRulesCmd.java +++ b/api/src/org/apache/cloudstack/api/user/nat/command/ListIpForwardingRulesCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.user.nat.command; import java.util.ArrayList; import java.util.List; diff --git a/client/tomcatconf/commands.properties.in b/client/tomcatconf/commands.properties.in index bd59f0c1621..2a13d320930 100755 --- a/client/tomcatconf/commands.properties.in +++ b/client/tomcatconf/commands.properties.in @@ -135,11 +135,11 @@ deletePortForwardingRule=com.cloud.api.commands.DeletePortForwardingRuleCmd;15 #### updatePortForwardingRule=com.cloud.api.commands.UpdatePortForwardingRuleCmd;15 #### NAT commands -enableStaticNat=com.cloud.api.commands.EnableStaticNatCmd;15 -createIpForwardingRule=com.cloud.api.commands.CreateIpForwardingRuleCmd;15 -deleteIpForwardingRule=com.cloud.api.commands.DeleteIpForwardingRuleCmd;15 -listIpForwardingRules=com.cloud.api.commands.ListIpForwardingRulesCmd;15 -disableStaticNat=com.cloud.api.commands.DisableStaticNatCmd;15 +enableStaticNat=org.apache.cloudstack.api.user.nat.command.EnableStaticNatCmd;15 +createIpForwardingRule=org.apache.cloudstack.api.user.nat.command.CreateIpForwardingRuleCmd;15 +deleteIpForwardingRule=org.apache.cloudstack.api.user.nat.command.DeleteIpForwardingRuleCmd;15 +listIpForwardingRules=org.apache.cloudstack.api.user.nat.command.ListIpForwardingRulesCmd;15 +disableStaticNat=org.apache.cloudstack.api.user.nat.command.DisableStaticNatCmd;15 #### load balancer commands createLoadBalancerRule=com.cloud.api.commands.CreateLoadBalancerRuleCmd;15 From 46353e0916af32339887c1ad6035d024bd12d9a8 Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Mon, 3 Dec 2012 23:35:30 -0800 Subject: [PATCH 013/421] api_refactor: refactor vmgroup apis - Fix refactored apis, fix mappings in commands*.in - Fix comments etc. Signed-off-by: Rohit Yadav --- api/src/com/cloud/server/ManagementService.java | 4 ++-- api/src/com/cloud/vm/UserVmService.java | 4 ++-- .../api/user/vmgroup/command}/CreateVMGroupCmd.java | 2 +- .../api/user/vmgroup/command}/DeleteVMGroupCmd.java | 2 +- .../api/user/vmgroup/command}/ListVMGroupsCmd.java | 2 +- .../api/user/vmgroup/command}/UpdateVMGroupCmd.java | 2 +- client/tomcatconf/commands.properties.in | 8 ++++---- server/src/com/cloud/server/ManagementServerImpl.java | 4 ++-- server/src/com/cloud/vm/UserVmManagerImpl.java | 4 ++-- server/test/com/cloud/vm/MockUserVmManagerImpl.java | 4 ++-- 10 files changed, 18 insertions(+), 18 deletions(-) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/user/vmgroup/command}/CreateVMGroupCmd.java (98%) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/user/vmgroup/command}/DeleteVMGroupCmd.java (98%) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/user/vmgroup/command}/ListVMGroupsCmd.java (98%) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/user/vmgroup/command}/UpdateVMGroupCmd.java (98%) diff --git a/api/src/com/cloud/server/ManagementService.java b/api/src/com/cloud/server/ManagementService.java index 2b06d75e5c8..e773372d304 100755 --- a/api/src/com/cloud/server/ManagementService.java +++ b/api/src/com/cloud/server/ManagementService.java @@ -50,7 +50,7 @@ import com.cloud.api.commands.ListSSHKeyPairsCmd; import com.cloud.api.commands.ListServiceOfferingsCmd; import com.cloud.api.commands.ListStoragePoolsCmd; import com.cloud.api.commands.ListSystemVMsCmd; -import com.cloud.api.commands.ListVMGroupsCmd; +import org.apache.cloudstack.api.user.vmgroup.command.ListVMGroupsCmd; import com.cloud.api.commands.ListVlanIpRangesCmd; import com.cloud.api.commands.ListZonesByCmd; import com.cloud.api.commands.RebootSystemVmCmd; @@ -59,7 +59,7 @@ import com.cloud.api.commands.StopSystemVmCmd; import com.cloud.api.commands.UpdateDomainCmd; import com.cloud.api.commands.UpdateHostPasswordCmd; import org.apache.cloudstack.api.user.iso.command.UpdateIsoCmd; -import com.cloud.api.commands.UpdateVMGroupCmd; +import org.apache.cloudstack.api.user.vmgroup.command.UpdateVMGroupCmd; import com.cloud.api.commands.UpgradeSystemVMCmd; import com.cloud.api.commands.UploadCustomCertificateCmd; import com.cloud.async.AsyncJob; diff --git a/api/src/com/cloud/vm/UserVmService.java b/api/src/com/cloud/vm/UserVmService.java index 6c9afd21075..8c897d3f241 100755 --- a/api/src/com/cloud/vm/UserVmService.java +++ b/api/src/com/cloud/vm/UserVmService.java @@ -24,8 +24,8 @@ import javax.naming.InsufficientResourcesException; import org.apache.cloudstack.api.admin.vm.command.AssignVMCmd; import com.cloud.api.commands.AttachVolumeCmd; import org.apache.cloudstack.api.user.template.command.CreateTemplateCmd; -import com.cloud.api.commands.CreateVMGroupCmd; -import com.cloud.api.commands.DeleteVMGroupCmd; +import org.apache.cloudstack.api.user.vmgroup.command.CreateVMGroupCmd; +import org.apache.cloudstack.api.user.vmgroup.command.DeleteVMGroupCmd; import org.apache.cloudstack.api.user.vm.command.DeployVMCmd; import org.apache.cloudstack.api.user.vm.command.DestroyVMCmd; import com.cloud.api.commands.DetachVolumeCmd; diff --git a/api/src/com/cloud/api/commands/CreateVMGroupCmd.java b/api/src/org/apache/cloudstack/api/user/vmgroup/command/CreateVMGroupCmd.java similarity index 98% rename from api/src/com/cloud/api/commands/CreateVMGroupCmd.java rename to api/src/org/apache/cloudstack/api/user/vmgroup/command/CreateVMGroupCmd.java index 45d67bcdc4d..15b506f49dc 100644 --- a/api/src/com/cloud/api/commands/CreateVMGroupCmd.java +++ b/api/src/org/apache/cloudstack/api/user/vmgroup/command/CreateVMGroupCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.user.vmgroup.command; import org.apache.log4j.Logger; diff --git a/api/src/com/cloud/api/commands/DeleteVMGroupCmd.java b/api/src/org/apache/cloudstack/api/user/vmgroup/command/DeleteVMGroupCmd.java similarity index 98% rename from api/src/com/cloud/api/commands/DeleteVMGroupCmd.java rename to api/src/org/apache/cloudstack/api/user/vmgroup/command/DeleteVMGroupCmd.java index f9159e26eb9..43761d2dcef 100644 --- a/api/src/com/cloud/api/commands/DeleteVMGroupCmd.java +++ b/api/src/org/apache/cloudstack/api/user/vmgroup/command/DeleteVMGroupCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.user.vmgroup.command; import org.apache.log4j.Logger; diff --git a/api/src/com/cloud/api/commands/ListVMGroupsCmd.java b/api/src/org/apache/cloudstack/api/user/vmgroup/command/ListVMGroupsCmd.java similarity index 98% rename from api/src/com/cloud/api/commands/ListVMGroupsCmd.java rename to api/src/org/apache/cloudstack/api/user/vmgroup/command/ListVMGroupsCmd.java index 45648da2105..94a7d152d97 100644 --- a/api/src/com/cloud/api/commands/ListVMGroupsCmd.java +++ b/api/src/org/apache/cloudstack/api/user/vmgroup/command/ListVMGroupsCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.user.vmgroup.command; import java.util.ArrayList; import java.util.List; diff --git a/api/src/com/cloud/api/commands/UpdateVMGroupCmd.java b/api/src/org/apache/cloudstack/api/user/vmgroup/command/UpdateVMGroupCmd.java similarity index 98% rename from api/src/com/cloud/api/commands/UpdateVMGroupCmd.java rename to api/src/org/apache/cloudstack/api/user/vmgroup/command/UpdateVMGroupCmd.java index 7f88701b0c9..33d29a064e8 100644 --- a/api/src/com/cloud/api/commands/UpdateVMGroupCmd.java +++ b/api/src/org/apache/cloudstack/api/user/vmgroup/command/UpdateVMGroupCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.user.vmgroup.command; import org.apache.log4j.Logger; diff --git a/client/tomcatconf/commands.properties.in b/client/tomcatconf/commands.properties.in index 2a13d320930..378e4716e7b 100755 --- a/client/tomcatconf/commands.properties.in +++ b/client/tomcatconf/commands.properties.in @@ -282,10 +282,10 @@ revokeSecurityGroupEgress=org.apache.cloudstack.api.user.sg.command.RevokeSecuri listSecurityGroups=org.apache.cloudstack.api.user.sg.command.ListSecurityGroupsCmd;15 #### vm group commands -createInstanceGroup=com.cloud.api.commands.CreateVMGroupCmd;15 -deleteInstanceGroup=com.cloud.api.commands.DeleteVMGroupCmd;15 -updateInstanceGroup=com.cloud.api.commands.UpdateVMGroupCmd;15 -listInstanceGroups=com.cloud.api.commands.ListVMGroupsCmd;15 +createInstanceGroup=org.apache.cloudstack.api.user.vmgroup.command.CreateVMGroupCmd;15 +deleteInstanceGroup=org.apache.cloudstack.api.user.vmgroup.command.DeleteVMGroupCmd;15 +updateInstanceGroup=org.apache.cloudstack.api.user.vmgroup.command.UpdateVMGroupCmd;15 +listInstanceGroups=org.apache.cloudstack.api.user.vmgroup.command.ListVMGroupsCmd;15 ### Certificate commands uploadCustomCertificate=com.cloud.api.commands.UploadCustomCertificateCmd;1 diff --git a/server/src/com/cloud/server/ManagementServerImpl.java b/server/src/com/cloud/server/ManagementServerImpl.java index c43dbd350d9..96d3997f029 100755 --- a/server/src/com/cloud/server/ManagementServerImpl.java +++ b/server/src/com/cloud/server/ManagementServerImpl.java @@ -45,6 +45,7 @@ import javax.crypto.spec.SecretKeySpec; import org.apache.cloudstack.api.user.iso.command.ListIsosCmd; import org.apache.cloudstack.api.user.template.command.ListTemplatesCmd; import org.apache.cloudstack.api.user.template.command.UpdateTemplateCmd; +import org.apache.cloudstack.api.user.vmgroup.command.ListVMGroupsCmd; import org.apache.commons.codec.binary.Base64; import org.apache.log4j.Logger; @@ -84,7 +85,6 @@ import com.cloud.api.commands.ListSSHKeyPairsCmd; import com.cloud.api.commands.ListServiceOfferingsCmd; import com.cloud.api.commands.ListStoragePoolsCmd; import com.cloud.api.commands.ListSystemVMsCmd; -import com.cloud.api.commands.ListVMGroupsCmd; import com.cloud.api.commands.ListVlanIpRangesCmd; import com.cloud.api.commands.ListZonesByCmd; import com.cloud.api.commands.RebootSystemVmCmd; @@ -94,7 +94,7 @@ import com.cloud.api.commands.UpdateDomainCmd; import com.cloud.api.commands.UpdateHostPasswordCmd; import org.apache.cloudstack.api.user.iso.command.UpdateIsoCmd; import com.cloud.api.commands.UpdateTemplateOrIsoCmd; -import com.cloud.api.commands.UpdateVMGroupCmd; +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; diff --git a/server/src/com/cloud/vm/UserVmManagerImpl.java b/server/src/com/cloud/vm/UserVmManagerImpl.java index 2c7c7fbb493..c8c6b516d03 100755 --- a/server/src/com/cloud/vm/UserVmManagerImpl.java +++ b/server/src/com/cloud/vm/UserVmManagerImpl.java @@ -32,6 +32,7 @@ import javax.ejb.Local; import javax.naming.ConfigurationException; import org.apache.cloudstack.api.user.template.command.CreateTemplateCmd; +import org.apache.cloudstack.api.user.vmgroup.command.DeleteVMGroupCmd; import org.apache.commons.codec.binary.Base64; import org.apache.log4j.Logger; @@ -61,8 +62,7 @@ import com.cloud.api.ApiDBUtils; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.admin.vm.command.AssignVMCmd; import com.cloud.api.commands.AttachVolumeCmd; -import com.cloud.api.commands.CreateVMGroupCmd; -import com.cloud.api.commands.DeleteVMGroupCmd; +import org.apache.cloudstack.api.user.vmgroup.command.CreateVMGroupCmd; import org.apache.cloudstack.api.user.vm.command.DeployVMCmd; import org.apache.cloudstack.api.user.vm.command.DestroyVMCmd; import com.cloud.api.commands.DetachVolumeCmd; diff --git a/server/test/com/cloud/vm/MockUserVmManagerImpl.java b/server/test/com/cloud/vm/MockUserVmManagerImpl.java index 39900a6d179..4573948bc7f 100644 --- a/server/test/com/cloud/vm/MockUserVmManagerImpl.java +++ b/server/test/com/cloud/vm/MockUserVmManagerImpl.java @@ -31,8 +31,8 @@ import com.cloud.agent.manager.Commands; import org.apache.cloudstack.api.admin.vm.command.AssignVMCmd; import com.cloud.api.commands.AttachVolumeCmd; import org.apache.cloudstack.api.user.template.command.CreateTemplateCmd; -import com.cloud.api.commands.CreateVMGroupCmd; -import com.cloud.api.commands.DeleteVMGroupCmd; +import org.apache.cloudstack.api.user.vmgroup.command.CreateVMGroupCmd; +import org.apache.cloudstack.api.user.vmgroup.command.DeleteVMGroupCmd; import org.apache.cloudstack.api.user.vm.command.DeployVMCmd; import org.apache.cloudstack.api.user.vm.command.DestroyVMCmd; import com.cloud.api.commands.DetachVolumeCmd; From 9a0df307667c43b56adddd98bf65c7f50b469dc1 Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Mon, 3 Dec 2012 23:39:34 -0800 Subject: [PATCH 014/421] api_refactor: refactor account apis - Fix refactored apis, fix mappings in commands*.in - Fix comments etc. Signed-off-by: Rohit Yadav --- api/src/com/cloud/user/AccountService.java | 2 +- .../admin/account/command}/DisableAccountCmd.java | 2 +- .../api/admin/account/command}/EnableAccountCmd.java | 2 +- .../account/command}/AddAccountToProjectCmd.java | 2 +- .../command}/DeleteAccountFromProjectCmd.java | 2 +- .../api/user/account/command}/ListAccountsCmd.java | 2 +- .../account/command}/ListProjectAccountsCmd.java | 2 +- .../commands/test/AddAccountToProjectCmdTest.java | 2 +- client/tomcatconf/commands.properties.in | 12 ++++++------ server/src/com/cloud/user/AccountManagerImpl.java | 2 +- .../test/com/cloud/user/MockAccountManagerImpl.java | 2 +- 11 files changed, 16 insertions(+), 16 deletions(-) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/admin/account/command}/DisableAccountCmd.java (98%) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/admin/account/command}/EnableAccountCmd.java (98%) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/user/account/command}/AddAccountToProjectCmd.java (98%) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/user/account/command}/DeleteAccountFromProjectCmd.java (98%) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/user/account/command}/ListAccountsCmd.java (98%) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/user/account/command}/ListProjectAccountsCmd.java (98%) diff --git a/api/src/com/cloud/user/AccountService.java b/api/src/com/cloud/user/AccountService.java index ff4e3b78be5..001d498e2dc 100755 --- a/api/src/com/cloud/user/AccountService.java +++ b/api/src/com/cloud/user/AccountService.java @@ -22,7 +22,7 @@ import java.util.Map; import com.cloud.acl.ControlledEntity; import com.cloud.acl.SecurityChecker.AccessType; import com.cloud.api.commands.DeleteUserCmd; -import com.cloud.api.commands.ListAccountsCmd; +import org.apache.cloudstack.api.user.account.command.ListAccountsCmd; import com.cloud.api.commands.ListUsersCmd; import com.cloud.api.commands.RegisterCmd; import com.cloud.api.commands.UpdateAccountCmd; diff --git a/api/src/com/cloud/api/commands/DisableAccountCmd.java b/api/src/org/apache/cloudstack/api/admin/account/command/DisableAccountCmd.java similarity index 98% rename from api/src/com/cloud/api/commands/DisableAccountCmd.java rename to api/src/org/apache/cloudstack/api/admin/account/command/DisableAccountCmd.java index 669378665ed..e6e9fd5878c 100644 --- a/api/src/com/cloud/api/commands/DisableAccountCmd.java +++ b/api/src/org/apache/cloudstack/api/admin/account/command/DisableAccountCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.admin.account.command; import org.apache.log4j.Logger; diff --git a/api/src/com/cloud/api/commands/EnableAccountCmd.java b/api/src/org/apache/cloudstack/api/admin/account/command/EnableAccountCmd.java similarity index 98% rename from api/src/com/cloud/api/commands/EnableAccountCmd.java rename to api/src/org/apache/cloudstack/api/admin/account/command/EnableAccountCmd.java index 36d9b7b6da9..ca0c9521d1a 100644 --- a/api/src/com/cloud/api/commands/EnableAccountCmd.java +++ b/api/src/org/apache/cloudstack/api/admin/account/command/EnableAccountCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.admin.account.command; import org.apache.log4j.Logger; diff --git a/api/src/com/cloud/api/commands/AddAccountToProjectCmd.java b/api/src/org/apache/cloudstack/api/user/account/command/AddAccountToProjectCmd.java similarity index 98% rename from api/src/com/cloud/api/commands/AddAccountToProjectCmd.java rename to api/src/org/apache/cloudstack/api/user/account/command/AddAccountToProjectCmd.java index 0e5fe567599..56dea9ebc76 100644 --- a/api/src/com/cloud/api/commands/AddAccountToProjectCmd.java +++ b/api/src/org/apache/cloudstack/api/user/account/command/AddAccountToProjectCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.user.account.command; import org.apache.log4j.Logger; diff --git a/api/src/com/cloud/api/commands/DeleteAccountFromProjectCmd.java b/api/src/org/apache/cloudstack/api/user/account/command/DeleteAccountFromProjectCmd.java similarity index 98% rename from api/src/com/cloud/api/commands/DeleteAccountFromProjectCmd.java rename to api/src/org/apache/cloudstack/api/user/account/command/DeleteAccountFromProjectCmd.java index d6e3494debc..d5ce0e9c02a 100644 --- a/api/src/com/cloud/api/commands/DeleteAccountFromProjectCmd.java +++ b/api/src/org/apache/cloudstack/api/user/account/command/DeleteAccountFromProjectCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.user.account.command; import org.apache.cloudstack.api.user.project.command.DeleteProjectCmd; import org.apache.log4j.Logger; diff --git a/api/src/com/cloud/api/commands/ListAccountsCmd.java b/api/src/org/apache/cloudstack/api/user/account/command/ListAccountsCmd.java similarity index 98% rename from api/src/com/cloud/api/commands/ListAccountsCmd.java rename to api/src/org/apache/cloudstack/api/user/account/command/ListAccountsCmd.java index ddf18ccf3fd..1a412859b73 100755 --- a/api/src/com/cloud/api/commands/ListAccountsCmd.java +++ b/api/src/org/apache/cloudstack/api/user/account/command/ListAccountsCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.user.account.command; import java.util.ArrayList; import java.util.List; diff --git a/api/src/com/cloud/api/commands/ListProjectAccountsCmd.java b/api/src/org/apache/cloudstack/api/user/account/command/ListProjectAccountsCmd.java similarity index 98% rename from api/src/com/cloud/api/commands/ListProjectAccountsCmd.java rename to api/src/org/apache/cloudstack/api/user/account/command/ListProjectAccountsCmd.java index 4f8a6e312d9..3ad7fe644a0 100644 --- a/api/src/com/cloud/api/commands/ListProjectAccountsCmd.java +++ b/api/src/org/apache/cloudstack/api/user/account/command/ListProjectAccountsCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.user.account.command; import java.util.ArrayList; import java.util.List; diff --git a/api/test/src/com/cloud/api/commands/test/AddAccountToProjectCmdTest.java b/api/test/src/com/cloud/api/commands/test/AddAccountToProjectCmdTest.java index 9b1606e1847..d7191967e09 100644 --- a/api/test/src/com/cloud/api/commands/test/AddAccountToProjectCmdTest.java +++ b/api/test/src/com/cloud/api/commands/test/AddAccountToProjectCmdTest.java @@ -19,6 +19,7 @@ package src.com.cloud.api.commands.test; import junit.framework.Assert; import junit.framework.TestCase; +import org.apache.cloudstack.api.user.account.command.AddAccountToProjectCmd; import org.junit.Before; import org.junit.Rule; import org.junit.Test; @@ -29,7 +30,6 @@ import com.cloud.exception.InvalidParameterValueException; import com.cloud.projects.Project; import com.cloud.projects.ProjectService; import com.cloud.user.Account; -import com.cloud.api.commands.AddAccountToProjectCmd; public class AddAccountToProjectCmdTest extends TestCase { diff --git a/client/tomcatconf/commands.properties.in b/client/tomcatconf/commands.properties.in index 378e4716e7b..48cca46ba9b 100755 --- a/client/tomcatconf/commands.properties.in +++ b/client/tomcatconf/commands.properties.in @@ -22,10 +22,10 @@ createAccount=com.cloud.api.commands.CreateAccountCmd;3 deleteAccount=com.cloud.api.commands.DeleteAccountCmd;3 updateAccount=com.cloud.api.commands.UpdateAccountCmd;3 -disableAccount=com.cloud.api.commands.DisableAccountCmd;7 -enableAccount=com.cloud.api.commands.EnableAccountCmd;7 +disableAccount=org.apache.cloudstack.api.admin.account.command.DisableAccountCmd;7 +enableAccount=org.apache.cloudstack.api.admin.account.command.EnableAccountCmd;7 ###lockAccount=com.cloud.api.commands.LockAccountCmd;7 -listAccounts=com.cloud.api.commands.ListAccountsCmd;15 +listAccounts=org.apache.cloudstack.api.user.account.command.ListAccountsCmd;15 markDefaultZoneForAccount=com.cloud.api.commands.MarkDefaultZoneForAccountCmd;1 #### User commands @@ -328,9 +328,9 @@ updateProject=org.apache.cloudstack.api.user.project.command.UpdateProjectCmd;15 activateProject=org.apache.cloudstack.api.user.project.command.ActivateProjectCmd;15 suspendProject=org.apache.cloudstack.api.user.project.command.SuspendProjectCmd;15 listProjects=org.apache.cloudstack.api.user.project.command.ListProjectsCmd;15 -addAccountToProject=com.cloud.api.commands.AddAccountToProjectCmd;15 -deleteAccountFromProject=com.cloud.api.commands.DeleteAccountFromProjectCmd;15 -listProjectAccounts=com.cloud.api.commands.ListProjectAccountsCmd;15 +addAccountToProject=org.apache.cloudstack.api.user.account.command.AddAccountToProjectCmd;15 +deleteAccountFromProject=org.apache.cloudstack.api.user.account.command.DeleteAccountFromProjectCmd;15 +listProjectAccounts=org.apache.cloudstack.api.user.account.command.ListProjectAccountsCmd;15 listProjectInvitations=org.apache.cloudstack.api.user.project.command.ListProjectInvitationsCmd;15 updateProjectInvitation=org.apache.cloudstack.api.user.project.command.UpdateProjectInvitationCmd;15 deleteProjectInvitation=org.apache.cloudstack.api.user.project.command.DeleteProjectInvitationCmd;15 diff --git a/server/src/com/cloud/user/AccountManagerImpl.java b/server/src/com/cloud/user/AccountManagerImpl.java index f59547885fe..5a1f8405d44 100755 --- a/server/src/com/cloud/user/AccountManagerImpl.java +++ b/server/src/com/cloud/user/AccountManagerImpl.java @@ -44,7 +44,7 @@ import com.cloud.acl.SecurityChecker; import com.cloud.acl.SecurityChecker.AccessType; import com.cloud.api.ApiDBUtils; import com.cloud.api.commands.DeleteUserCmd; -import com.cloud.api.commands.ListAccountsCmd; +import org.apache.cloudstack.api.user.account.command.ListAccountsCmd; import com.cloud.api.commands.ListUsersCmd; import com.cloud.api.commands.RegisterCmd; import com.cloud.api.commands.UpdateAccountCmd; diff --git a/server/test/com/cloud/user/MockAccountManagerImpl.java b/server/test/com/cloud/user/MockAccountManagerImpl.java index 08234fda0a0..d464fc85ca2 100644 --- a/server/test/com/cloud/user/MockAccountManagerImpl.java +++ b/server/test/com/cloud/user/MockAccountManagerImpl.java @@ -25,7 +25,7 @@ import javax.naming.ConfigurationException; import com.cloud.acl.ControlledEntity; import com.cloud.acl.SecurityChecker.AccessType; import com.cloud.api.commands.DeleteUserCmd; -import com.cloud.api.commands.ListAccountsCmd; +import org.apache.cloudstack.api.user.account.command.ListAccountsCmd; import com.cloud.api.commands.ListUsersCmd; import com.cloud.api.commands.RegisterCmd; import com.cloud.api.commands.UpdateAccountCmd; From 37cd76ee8156398d39afb0ce9c1fb44aa8d63cfc Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Mon, 3 Dec 2012 23:44:14 -0800 Subject: [PATCH 015/421] api_refactor: refactor ssh apis - Fix refactored apis, mappings in commands*.in - Fix comments etc. Signed-off-by: Rohit Yadav --- api/src/com/cloud/server/ManagementService.java | 6 +++--- .../api/user/ssh/command}/CreateSSHKeyPairCmd.java | 2 +- .../api/user/ssh/command}/DeleteSSHKeyPairCmd.java | 2 +- .../api/user/ssh/command}/ListSSHKeyPairsCmd.java | 2 +- client/tomcatconf/commands.properties.in | 6 +++--- server/src/com/cloud/server/ManagementServerImpl.java | 6 +++--- 6 files changed, 12 insertions(+), 12 deletions(-) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/user/ssh/command}/CreateSSHKeyPairCmd.java (98%) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/user/ssh/command}/DeleteSSHKeyPairCmd.java (98%) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/user/ssh/command}/ListSSHKeyPairsCmd.java (98%) diff --git a/api/src/com/cloud/server/ManagementService.java b/api/src/com/cloud/server/ManagementService.java index e773372d304..331b27660c4 100755 --- a/api/src/com/cloud/server/ManagementService.java +++ b/api/src/com/cloud/server/ManagementService.java @@ -24,8 +24,8 @@ import java.util.Set; import com.cloud.alert.Alert; import org.apache.cloudstack.api.ServerApiException; -import com.cloud.api.commands.CreateSSHKeyPairCmd; -import com.cloud.api.commands.DeleteSSHKeyPairCmd; +import org.apache.cloudstack.api.user.ssh.command.CreateSSHKeyPairCmd; +import org.apache.cloudstack.api.user.ssh.command.DeleteSSHKeyPairCmd; import com.cloud.api.commands.DestroySystemVmCmd; import com.cloud.api.commands.ExtractVolumeCmd; import org.apache.cloudstack.api.user.template.command.ListTemplatesCmd; @@ -46,7 +46,7 @@ import org.apache.cloudstack.api.user.iso.command.ListIsosCmd; import com.cloud.api.commands.ListPodsByCmd; import com.cloud.api.commands.ListPublicIpAddressesCmd; import com.cloud.api.commands.ListRoutersCmd; -import com.cloud.api.commands.ListSSHKeyPairsCmd; +import org.apache.cloudstack.api.user.ssh.command.ListSSHKeyPairsCmd; import com.cloud.api.commands.ListServiceOfferingsCmd; import com.cloud.api.commands.ListStoragePoolsCmd; import com.cloud.api.commands.ListSystemVMsCmd; diff --git a/api/src/com/cloud/api/commands/CreateSSHKeyPairCmd.java b/api/src/org/apache/cloudstack/api/user/ssh/command/CreateSSHKeyPairCmd.java similarity index 98% rename from api/src/com/cloud/api/commands/CreateSSHKeyPairCmd.java rename to api/src/org/apache/cloudstack/api/user/ssh/command/CreateSSHKeyPairCmd.java index 6d22ade7433..10c57260e83 100644 --- a/api/src/com/cloud/api/commands/CreateSSHKeyPairCmd.java +++ b/api/src/org/apache/cloudstack/api/user/ssh/command/CreateSSHKeyPairCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.user.ssh.command; import org.apache.log4j.Logger; diff --git a/api/src/com/cloud/api/commands/DeleteSSHKeyPairCmd.java b/api/src/org/apache/cloudstack/api/user/ssh/command/DeleteSSHKeyPairCmd.java similarity index 98% rename from api/src/com/cloud/api/commands/DeleteSSHKeyPairCmd.java rename to api/src/org/apache/cloudstack/api/user/ssh/command/DeleteSSHKeyPairCmd.java index a39ceb18824..d074afa7c9a 100644 --- a/api/src/com/cloud/api/commands/DeleteSSHKeyPairCmd.java +++ b/api/src/org/apache/cloudstack/api/user/ssh/command/DeleteSSHKeyPairCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.user.ssh.command; import org.apache.log4j.Logger; diff --git a/api/src/com/cloud/api/commands/ListSSHKeyPairsCmd.java b/api/src/org/apache/cloudstack/api/user/ssh/command/ListSSHKeyPairsCmd.java similarity index 98% rename from api/src/com/cloud/api/commands/ListSSHKeyPairsCmd.java rename to api/src/org/apache/cloudstack/api/user/ssh/command/ListSSHKeyPairsCmd.java index 710377772f3..109c66d0094 100644 --- a/api/src/com/cloud/api/commands/ListSSHKeyPairsCmd.java +++ b/api/src/org/apache/cloudstack/api/user/ssh/command/ListSSHKeyPairsCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.user.ssh.command; import java.util.ArrayList; import java.util.List; diff --git a/client/tomcatconf/commands.properties.in b/client/tomcatconf/commands.properties.in index 48cca46ba9b..0cd44383b88 100755 --- a/client/tomcatconf/commands.properties.in +++ b/client/tomcatconf/commands.properties.in @@ -317,9 +317,9 @@ updateNetwork=org.apache.cloudstack.api.user.network.command.UpdateNetworkCmd;15 #### SSH key pair commands registerSSHKeyPair=com.cloud.api.commands.RegisterSSHKeyPairCmd;15 -createSSHKeyPair=com.cloud.api.commands.CreateSSHKeyPairCmd;15 -deleteSSHKeyPair=com.cloud.api.commands.DeleteSSHKeyPairCmd;15 -listSSHKeyPairs=com.cloud.api.commands.ListSSHKeyPairsCmd;15 +createSSHKeyPair=org.apache.cloudstack.api.user.ssh.command.CreateSSHKeyPairCmd;15 +deleteSSHKeyPair=org.apache.cloudstack.api.user.ssh.command.DeleteSSHKeyPairCmd;15 +listSSHKeyPairs=org.apache.cloudstack.api.user.ssh.command.ListSSHKeyPairsCmd;15 #### Projects commands createProject=org.apache.cloudstack.api.user.project.command.CreateProjectCmd;15 diff --git a/server/src/com/cloud/server/ManagementServerImpl.java b/server/src/com/cloud/server/ManagementServerImpl.java index 96d3997f029..4116d4c74a0 100755 --- a/server/src/com/cloud/server/ManagementServerImpl.java +++ b/server/src/com/cloud/server/ManagementServerImpl.java @@ -43,6 +43,7 @@ import javax.crypto.Mac; import javax.crypto.spec.SecretKeySpec; import org.apache.cloudstack.api.user.iso.command.ListIsosCmd; +import org.apache.cloudstack.api.user.ssh.command.DeleteSSHKeyPairCmd; import org.apache.cloudstack.api.user.template.command.ListTemplatesCmd; import org.apache.cloudstack.api.user.template.command.UpdateTemplateCmd; import org.apache.cloudstack.api.user.vmgroup.command.ListVMGroupsCmd; @@ -62,8 +63,7 @@ import com.cloud.alert.AlertVO; import com.cloud.alert.dao.AlertDao; import org.apache.cloudstack.api.ApiConstants; import com.cloud.api.ApiDBUtils; -import com.cloud.api.commands.CreateSSHKeyPairCmd; -import com.cloud.api.commands.DeleteSSHKeyPairCmd; +import org.apache.cloudstack.api.user.ssh.command.CreateSSHKeyPairCmd; import com.cloud.api.commands.DestroySystemVmCmd; import com.cloud.api.commands.ExtractVolumeCmd; import org.apache.cloudstack.api.user.vm.command.GetVMPasswordCmd; @@ -81,7 +81,7 @@ import com.cloud.api.commands.ListHostsCmd; import com.cloud.api.commands.ListPodsByCmd; import com.cloud.api.commands.ListPublicIpAddressesCmd; import com.cloud.api.commands.ListRoutersCmd; -import com.cloud.api.commands.ListSSHKeyPairsCmd; +import org.apache.cloudstack.api.user.ssh.command.ListSSHKeyPairsCmd; import com.cloud.api.commands.ListServiceOfferingsCmd; import com.cloud.api.commands.ListStoragePoolsCmd; import com.cloud.api.commands.ListSystemVMsCmd; From 316e7f226a22c9a88b892b0bc4960243e5c36a95 Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Mon, 3 Dec 2012 23:48:48 -0800 Subject: [PATCH 016/421] api_refactor: refactor tag apis - Fix refactored apis, mappings in commands*.in - Fix comments etc. Signed-off-by: Rohit Yadav --- api/src/com/cloud/server/TaggedResourceService.java | 2 +- .../cloudstack/api/user/tag/command}/CreateTagsCmd.java | 2 +- .../cloudstack/api/user/tag/command}/DeleteTagsCmd.java | 2 +- .../cloudstack/api/user/tag/command}/ListTagsCmd.java | 2 +- client/tomcatconf/commands.properties.in | 6 +++--- server/src/com/cloud/tags/TaggedResourceManagerImpl.java | 2 +- 6 files changed, 8 insertions(+), 8 deletions(-) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/user/tag/command}/CreateTagsCmd.java (98%) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/user/tag/command}/DeleteTagsCmd.java (98%) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/user/tag/command}/ListTagsCmd.java (98%) diff --git a/api/src/com/cloud/server/TaggedResourceService.java b/api/src/com/cloud/server/TaggedResourceService.java index d813b656ad1..c98b02b2091 100644 --- a/api/src/com/cloud/server/TaggedResourceService.java +++ b/api/src/com/cloud/server/TaggedResourceService.java @@ -19,7 +19,7 @@ package com.cloud.server; import java.util.List; import java.util.Map; -import com.cloud.api.commands.ListTagsCmd; +import org.apache.cloudstack.api.user.tag.command.ListTagsCmd; import com.cloud.server.ResourceTag.TaggedResourceType; import com.cloud.utils.Pair; diff --git a/api/src/com/cloud/api/commands/CreateTagsCmd.java b/api/src/org/apache/cloudstack/api/user/tag/command/CreateTagsCmd.java similarity index 98% rename from api/src/com/cloud/api/commands/CreateTagsCmd.java rename to api/src/org/apache/cloudstack/api/user/tag/command/CreateTagsCmd.java index 8e697dec662..99b51e9d205 100644 --- a/api/src/com/cloud/api/commands/CreateTagsCmd.java +++ b/api/src/org/apache/cloudstack/api/user/tag/command/CreateTagsCmd.java @@ -15,7 +15,7 @@ // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.user.tag.command; import java.util.Collection; import java.util.HashMap; diff --git a/api/src/com/cloud/api/commands/DeleteTagsCmd.java b/api/src/org/apache/cloudstack/api/user/tag/command/DeleteTagsCmd.java similarity index 98% rename from api/src/com/cloud/api/commands/DeleteTagsCmd.java rename to api/src/org/apache/cloudstack/api/user/tag/command/DeleteTagsCmd.java index 81a76e5ab8e..09d9a6900d3 100644 --- a/api/src/com/cloud/api/commands/DeleteTagsCmd.java +++ b/api/src/org/apache/cloudstack/api/user/tag/command/DeleteTagsCmd.java @@ -15,7 +15,7 @@ // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.user.tag.command; import java.util.Collection; import java.util.HashMap; diff --git a/api/src/com/cloud/api/commands/ListTagsCmd.java b/api/src/org/apache/cloudstack/api/user/tag/command/ListTagsCmd.java similarity index 98% rename from api/src/com/cloud/api/commands/ListTagsCmd.java rename to api/src/org/apache/cloudstack/api/user/tag/command/ListTagsCmd.java index 8b61b666aca..ef95439618a 100644 --- a/api/src/com/cloud/api/commands/ListTagsCmd.java +++ b/api/src/org/apache/cloudstack/api/user/tag/command/ListTagsCmd.java @@ -15,7 +15,7 @@ // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.user.tag.command; import java.util.ArrayList; import java.util.List; diff --git a/client/tomcatconf/commands.properties.in b/client/tomcatconf/commands.properties.in index 0cd44383b88..83d56dad108 100755 --- a/client/tomcatconf/commands.properties.in +++ b/client/tomcatconf/commands.properties.in @@ -409,9 +409,9 @@ deleteStaticRoute=org.apache.cloudstack.api.user.vpc.command.DeleteStaticRouteCm listStaticRoutes=org.apache.cloudstack.api.user.vpc.command.ListStaticRoutesCmd;15 #### Tags commands -createTags=com.cloud.api.commands.CreateTagsCmd;15 -deleteTags=com.cloud.api.commands.DeleteTagsCmd;15 -listTags=com.cloud.api.commands.ListTagsCmd;15 +createTags=org.apache.cloudstack.api.user.tag.command.CreateTagsCmd;15 +deleteTags=org.apache.cloudstack.api.user.tag.command.DeleteTagsCmd;15 +listTags=org.apache.cloudstack.api.user.tag.command.ListTagsCmd;15 ### Site-to-site VPN commands createVpnCustomerGateway=org.apache.cloudstack.api.user.vpn.command.CreateVpnCustomerGatewayCmd;15 diff --git a/server/src/com/cloud/tags/TaggedResourceManagerImpl.java b/server/src/com/cloud/tags/TaggedResourceManagerImpl.java index 237a6774675..fba3079241b 100644 --- a/server/src/com/cloud/tags/TaggedResourceManagerImpl.java +++ b/server/src/com/cloud/tags/TaggedResourceManagerImpl.java @@ -26,7 +26,7 @@ import javax.naming.ConfigurationException; import org.apache.log4j.Logger; -import com.cloud.api.commands.ListTagsCmd; +import org.apache.cloudstack.api.user.tag.command.ListTagsCmd; import com.cloud.domain.Domain; import com.cloud.event.ActionEvent; import com.cloud.event.EventTypes; From add1b9b05541564d24efaf5a0ddad5673edc7aa1 Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Mon, 3 Dec 2012 23:54:19 -0800 Subject: [PATCH 017/421] api_refactor: refactor register apis - Split register apis across template, iso and ssh pkgs - Fix refactored apis, mappings in commands*.in - Fix comments etc. Signed-off-by: Rohit Yadav --- api/src/com/cloud/server/ManagementService.java | 2 +- api/src/com/cloud/template/TemplateService.java | 4 ++-- .../api/user/iso/command}/RegisterIsoCmd.java | 2 +- .../api/user/ssh/command}/RegisterSSHKeyPairCmd.java | 2 +- .../user/template/command}/RegisterTemplateCmd.java | 2 +- client/tomcatconf/commands.properties.in | 6 +++--- .../com/cloud/baremetal/BareMetalTemplateAdapter.java | 4 ++-- server/src/com/cloud/server/ManagementServerImpl.java | 2 +- .../com/cloud/template/HyervisorTemplateAdapter.java | 4 ++-- server/src/com/cloud/template/TemplateAdapter.java | 4 ++-- server/src/com/cloud/template/TemplateAdapterBase.java | 4 ++-- server/src/com/cloud/template/TemplateManagerImpl.java | 10 +++------- 12 files changed, 21 insertions(+), 25 deletions(-) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/user/iso/command}/RegisterIsoCmd.java (99%) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/user/ssh/command}/RegisterSSHKeyPairCmd.java (98%) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/user/template/command}/RegisterTemplateCmd.java (99%) diff --git a/api/src/com/cloud/server/ManagementService.java b/api/src/com/cloud/server/ManagementService.java index 331b27660c4..ccb1efa010a 100755 --- a/api/src/com/cloud/server/ManagementService.java +++ b/api/src/com/cloud/server/ManagementService.java @@ -54,7 +54,7 @@ import org.apache.cloudstack.api.user.vmgroup.command.ListVMGroupsCmd; import com.cloud.api.commands.ListVlanIpRangesCmd; import com.cloud.api.commands.ListZonesByCmd; import com.cloud.api.commands.RebootSystemVmCmd; -import com.cloud.api.commands.RegisterSSHKeyPairCmd; +import org.apache.cloudstack.api.user.ssh.command.RegisterSSHKeyPairCmd; import com.cloud.api.commands.StopSystemVmCmd; import com.cloud.api.commands.UpdateDomainCmd; import com.cloud.api.commands.UpdateHostPasswordCmd; diff --git a/api/src/com/cloud/template/TemplateService.java b/api/src/com/cloud/template/TemplateService.java index 9d63b259c85..1b41c332a0e 100755 --- a/api/src/com/cloud/template/TemplateService.java +++ b/api/src/com/cloud/template/TemplateService.java @@ -19,14 +19,14 @@ package com.cloud.template; import java.net.URISyntaxException; import java.util.List; +import org.apache.cloudstack.api.user.iso.command.RegisterIsoCmd; import org.apache.cloudstack.api.user.template.command.CopyTemplateCmd; import org.apache.cloudstack.api.user.iso.command.DeleteIsoCmd; import org.apache.cloudstack.api.user.template.command.DeleteTemplateCmd; import org.apache.cloudstack.api.user.iso.command.ExtractIsoCmd; import org.apache.cloudstack.api.user.template.command.ExtractTemplateCmd; import com.cloud.api.commands.ListTemplateOrIsoPermissionsCmd; -import com.cloud.api.commands.RegisterIsoCmd; -import com.cloud.api.commands.RegisterTemplateCmd; +import org.apache.cloudstack.api.user.template.command.RegisterTemplateCmd; import com.cloud.api.commands.UpdateTemplateOrIsoPermissionsCmd; import com.cloud.exception.InternalErrorException; import com.cloud.exception.ResourceAllocationException; diff --git a/api/src/com/cloud/api/commands/RegisterIsoCmd.java b/api/src/org/apache/cloudstack/api/user/iso/command/RegisterIsoCmd.java similarity index 99% rename from api/src/com/cloud/api/commands/RegisterIsoCmd.java rename to api/src/org/apache/cloudstack/api/user/iso/command/RegisterIsoCmd.java index ff7aa33039e..cedaa869886 100755 --- a/api/src/com/cloud/api/commands/RegisterIsoCmd.java +++ b/api/src/org/apache/cloudstack/api/user/iso/command/RegisterIsoCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.user.iso.command; import java.util.List; diff --git a/api/src/com/cloud/api/commands/RegisterSSHKeyPairCmd.java b/api/src/org/apache/cloudstack/api/user/ssh/command/RegisterSSHKeyPairCmd.java similarity index 98% rename from api/src/com/cloud/api/commands/RegisterSSHKeyPairCmd.java rename to api/src/org/apache/cloudstack/api/user/ssh/command/RegisterSSHKeyPairCmd.java index ae62e34a47d..9c4eb8cdeb9 100644 --- a/api/src/com/cloud/api/commands/RegisterSSHKeyPairCmd.java +++ b/api/src/org/apache/cloudstack/api/user/ssh/command/RegisterSSHKeyPairCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.user.ssh.command; import org.apache.log4j.Logger; diff --git a/api/src/com/cloud/api/commands/RegisterTemplateCmd.java b/api/src/org/apache/cloudstack/api/user/template/command/RegisterTemplateCmd.java similarity index 99% rename from api/src/com/cloud/api/commands/RegisterTemplateCmd.java rename to api/src/org/apache/cloudstack/api/user/template/command/RegisterTemplateCmd.java index c479001b954..5ad284c0529 100755 --- a/api/src/com/cloud/api/commands/RegisterTemplateCmd.java +++ b/api/src/org/apache/cloudstack/api/user/template/command/RegisterTemplateCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.user.template.command; import java.net.URISyntaxException; import java.util.Collection; diff --git a/client/tomcatconf/commands.properties.in b/client/tomcatconf/commands.properties.in index 83d56dad108..05f949e318c 100755 --- a/client/tomcatconf/commands.properties.in +++ b/client/tomcatconf/commands.properties.in @@ -80,7 +80,7 @@ listSnapshotPolicies=org.apache.cloudstack.api.user.snapshot.command.ListSnapsho #### template commands createTemplate=org.apache.cloudstack.api.user.template.command.CreateTemplateCmd;15 -registerTemplate=com.cloud.api.commands.RegisterTemplateCmd;15 +registerTemplate=org.apache.cloudstack.api.user.template.command.RegisterTemplateCmd;15 updateTemplate=org.apache.cloudstack.api.user.template.command.UpdateTemplateCmd;15 copyTemplate=org.apache.cloudstack.api.user.template.command.CopyTemplateCmd;15 deleteTemplate=org.apache.cloudstack.api.user.template.command.DeleteTemplateCmd;15 @@ -94,7 +94,7 @@ prepareTemplate=com.cloud.api.commands.PrepareTemplateCmd;1 attachIso=org.apache.cloudstack.api.user.iso.command.AttachIsoCmd;15 detachIso=org.apache.cloudstack.api.user.iso.command.DetachIsoCmd;15 listIsos=org.apache.cloudstack.api.user.iso.command.ListIsosCmd;15 -registerIso=com.cloud.api.commands.RegisterIsoCmd;15 +registerIso=org.apache.cloudstack.api.user.iso.command.RegisterIsoCmd;15 updateIso=org.apache.cloudstack.api.user.iso.command.UpdateIsoCmd;15 deleteIso=org.apache.cloudstack.api.user.iso.command.DeleteIsoCmd;15 copyIso=org.apache.cloudstack.api.user.template.command.CopyTemplateCmd;15 @@ -316,7 +316,7 @@ restartNetwork=org.apache.cloudstack.api.user.network.command.RestartNetworkCmd; updateNetwork=org.apache.cloudstack.api.user.network.command.UpdateNetworkCmd;15 #### SSH key pair commands -registerSSHKeyPair=com.cloud.api.commands.RegisterSSHKeyPairCmd;15 +registerSSHKeyPair=org.apache.cloudstack.api.user.ssh.command.RegisterSSHKeyPairCmd;15 createSSHKeyPair=org.apache.cloudstack.api.user.ssh.command.CreateSSHKeyPairCmd;15 deleteSSHKeyPair=org.apache.cloudstack.api.user.ssh.command.DeleteSSHKeyPairCmd;15 listSSHKeyPairs=org.apache.cloudstack.api.user.ssh.command.ListSSHKeyPairsCmd;15 diff --git a/server/src/com/cloud/baremetal/BareMetalTemplateAdapter.java b/server/src/com/cloud/baremetal/BareMetalTemplateAdapter.java index 75e401d5452..c609e83468b 100755 --- a/server/src/com/cloud/baremetal/BareMetalTemplateAdapter.java +++ b/server/src/com/cloud/baremetal/BareMetalTemplateAdapter.java @@ -22,10 +22,10 @@ import java.util.List; import javax.ejb.Local; import org.apache.cloudstack.api.user.iso.command.DeleteIsoCmd; +import org.apache.cloudstack.api.user.iso.command.RegisterIsoCmd; import org.apache.log4j.Logger; -import com.cloud.api.commands.RegisterIsoCmd; -import com.cloud.api.commands.RegisterTemplateCmd; +import org.apache.cloudstack.api.user.template.command.RegisterTemplateCmd; import com.cloud.configuration.Resource.ResourceType; import com.cloud.dc.DataCenterVO; import com.cloud.event.EventTypes; diff --git a/server/src/com/cloud/server/ManagementServerImpl.java b/server/src/com/cloud/server/ManagementServerImpl.java index 4116d4c74a0..92a4fbcac91 100755 --- a/server/src/com/cloud/server/ManagementServerImpl.java +++ b/server/src/com/cloud/server/ManagementServerImpl.java @@ -44,6 +44,7 @@ import javax.crypto.spec.SecretKeySpec; import org.apache.cloudstack.api.user.iso.command.ListIsosCmd; import org.apache.cloudstack.api.user.ssh.command.DeleteSSHKeyPairCmd; +import org.apache.cloudstack.api.user.ssh.command.RegisterSSHKeyPairCmd; import org.apache.cloudstack.api.user.template.command.ListTemplatesCmd; import org.apache.cloudstack.api.user.template.command.UpdateTemplateCmd; import org.apache.cloudstack.api.user.vmgroup.command.ListVMGroupsCmd; @@ -88,7 +89,6 @@ import com.cloud.api.commands.ListSystemVMsCmd; import com.cloud.api.commands.ListVlanIpRangesCmd; import com.cloud.api.commands.ListZonesByCmd; import com.cloud.api.commands.RebootSystemVmCmd; -import com.cloud.api.commands.RegisterSSHKeyPairCmd; import com.cloud.api.commands.StopSystemVmCmd; import com.cloud.api.commands.UpdateDomainCmd; import com.cloud.api.commands.UpdateHostPasswordCmd; diff --git a/server/src/com/cloud/template/HyervisorTemplateAdapter.java b/server/src/com/cloud/template/HyervisorTemplateAdapter.java index f4348fd77f4..4d5ee65eac5 100755 --- a/server/src/com/cloud/template/HyervisorTemplateAdapter.java +++ b/server/src/com/cloud/template/HyervisorTemplateAdapter.java @@ -26,14 +26,14 @@ import java.util.List; import javax.ejb.Local; import org.apache.cloudstack.api.user.iso.command.DeleteIsoCmd; +import org.apache.cloudstack.api.user.iso.command.RegisterIsoCmd; import org.apache.log4j.Logger; import com.cloud.agent.AgentManager; import com.cloud.agent.api.Answer; import com.cloud.agent.api.storage.DeleteTemplateCommand; import org.apache.cloudstack.api.user.template.command.DeleteTemplateCmd; -import com.cloud.api.commands.RegisterIsoCmd; -import com.cloud.api.commands.RegisterTemplateCmd; +import org.apache.cloudstack.api.user.template.command.RegisterTemplateCmd; import com.cloud.configuration.Resource.ResourceType; import com.cloud.dc.DataCenterVO; import com.cloud.event.EventTypes; diff --git a/server/src/com/cloud/template/TemplateAdapter.java b/server/src/com/cloud/template/TemplateAdapter.java index 0c6f32982a5..ec6ed46b4cf 100755 --- a/server/src/com/cloud/template/TemplateAdapter.java +++ b/server/src/com/cloud/template/TemplateAdapter.java @@ -19,9 +19,9 @@ package com.cloud.template; import java.util.Map; import org.apache.cloudstack.api.user.iso.command.DeleteIsoCmd; +import org.apache.cloudstack.api.user.iso.command.RegisterIsoCmd; import org.apache.cloudstack.api.user.template.command.DeleteTemplateCmd; -import com.cloud.api.commands.RegisterIsoCmd; -import com.cloud.api.commands.RegisterTemplateCmd; +import org.apache.cloudstack.api.user.template.command.RegisterTemplateCmd; import com.cloud.exception.ResourceAllocationException; import com.cloud.hypervisor.Hypervisor.HypervisorType; import com.cloud.storage.VMTemplateVO; diff --git a/server/src/com/cloud/template/TemplateAdapterBase.java b/server/src/com/cloud/template/TemplateAdapterBase.java index 916540fe9b1..6ac11976ed9 100755 --- a/server/src/com/cloud/template/TemplateAdapterBase.java +++ b/server/src/com/cloud/template/TemplateAdapterBase.java @@ -21,14 +21,14 @@ import java.util.Map; import javax.naming.ConfigurationException; +import org.apache.cloudstack.api.user.iso.command.RegisterIsoCmd; +import org.apache.cloudstack.api.user.template.command.RegisterTemplateCmd; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import com.cloud.api.ApiDBUtils; import org.apache.cloudstack.api.user.iso.command.DeleteIsoCmd; import org.apache.cloudstack.api.user.template.command.DeleteTemplateCmd; -import com.cloud.api.commands.RegisterIsoCmd; -import com.cloud.api.commands.RegisterTemplateCmd; import com.cloud.configuration.Resource.ResourceType; import com.cloud.configuration.dao.ConfigurationDao; import com.cloud.dc.DataCenterVO; diff --git a/server/src/com/cloud/template/TemplateManagerImpl.java b/server/src/com/cloud/template/TemplateManagerImpl.java index ffe7d172dc4..f789e46859c 100755 --- a/server/src/com/cloud/template/TemplateManagerImpl.java +++ b/server/src/com/cloud/template/TemplateManagerImpl.java @@ -35,10 +35,7 @@ import javax.ejb.Local; import javax.naming.ConfigurationException; import org.apache.cloudstack.api.user.iso.command.*; -import org.apache.cloudstack.api.user.template.command.CopyTemplateCmd; -import org.apache.cloudstack.api.user.template.command.ExtractTemplateCmd; -import org.apache.cloudstack.api.user.template.command.ListTemplatePermissionsCmd; -import org.apache.cloudstack.api.user.template.command.UpdateTemplatePermissionsCmd; +import org.apache.cloudstack.api.user.template.command.*; import org.apache.log4j.Logger; import com.cloud.acl.SecurityChecker.AccessType; @@ -50,10 +47,9 @@ import com.cloud.agent.api.storage.DestroyCommand; import com.cloud.agent.api.storage.PrimaryStorageDownloadAnswer; import com.cloud.agent.api.storage.PrimaryStorageDownloadCommand; import com.cloud.agent.api.to.SwiftTO; -import org.apache.cloudstack.api.user.template.command.DeleteTemplateCmd; import com.cloud.api.commands.ListTemplateOrIsoPermissionsCmd; -import com.cloud.api.commands.RegisterIsoCmd; -import com.cloud.api.commands.RegisterTemplateCmd; +import org.apache.cloudstack.api.user.iso.command.RegisterIsoCmd; +import org.apache.cloudstack.api.user.template.command.RegisterTemplateCmd; import com.cloud.api.commands.UpdateTemplateOrIsoPermissionsCmd; import com.cloud.async.AsyncJobManager; import com.cloud.async.AsyncJobVO; From 7ac48798b4420a80ff0d2415e070e550a2297b77 Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Tue, 4 Dec 2012 00:05:54 -0800 Subject: [PATCH 018/421] api_refactor: refactor event apis - Fix refactored apis, mappings in commands*.in - Fix comments etc. Signed-off-by: Rohit Yadav --- api/src/com/cloud/server/ManagementService.java | 2 +- .../cloudstack/api/user/event/command}/ListEventTypesCmd.java | 2 +- .../cloudstack/api/user/event/command}/ListEventsCmd.java | 2 +- client/tomcatconf/commands.properties.in | 4 ++-- server/src/com/cloud/api/ApiDispatcher.java | 2 +- server/src/com/cloud/server/ManagementServerImpl.java | 2 +- 6 files changed, 7 insertions(+), 7 deletions(-) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/user/event/command}/ListEventTypesCmd.java (97%) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/user/event/command}/ListEventsCmd.java (98%) diff --git a/api/src/com/cloud/server/ManagementService.java b/api/src/com/cloud/server/ManagementService.java index ccb1efa010a..e2ab658aa92 100755 --- a/api/src/com/cloud/server/ManagementService.java +++ b/api/src/com/cloud/server/ManagementService.java @@ -38,7 +38,7 @@ import com.cloud.api.commands.ListCapacityCmd; import com.cloud.api.commands.ListCfgsByCmd; import com.cloud.api.commands.ListClustersCmd; import com.cloud.api.commands.ListDiskOfferingsCmd; -import com.cloud.api.commands.ListEventsCmd; +import org.apache.cloudstack.api.user.event.command.ListEventsCmd; import com.cloud.api.commands.ListGuestOsCategoriesCmd; import com.cloud.api.commands.ListGuestOsCmd; import com.cloud.api.commands.ListHostsCmd; diff --git a/api/src/com/cloud/api/commands/ListEventTypesCmd.java b/api/src/org/apache/cloudstack/api/user/event/command/ListEventTypesCmd.java similarity index 97% rename from api/src/com/cloud/api/commands/ListEventTypesCmd.java rename to api/src/org/apache/cloudstack/api/user/event/command/ListEventTypesCmd.java index 8d6f21f0575..6cb385ab283 100644 --- a/api/src/com/cloud/api/commands/ListEventTypesCmd.java +++ b/api/src/org/apache/cloudstack/api/user/event/command/ListEventTypesCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.user.event.command; import java.util.ArrayList; diff --git a/api/src/com/cloud/api/commands/ListEventsCmd.java b/api/src/org/apache/cloudstack/api/user/event/command/ListEventsCmd.java similarity index 98% rename from api/src/com/cloud/api/commands/ListEventsCmd.java rename to api/src/org/apache/cloudstack/api/user/event/command/ListEventsCmd.java index d0e09e1ffe0..56f162662fa 100755 --- a/api/src/com/cloud/api/commands/ListEventsCmd.java +++ b/api/src/org/apache/cloudstack/api/user/event/command/ListEventsCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.user.event.command; import java.util.ArrayList; import java.util.Date; diff --git a/client/tomcatconf/commands.properties.in b/client/tomcatconf/commands.properties.in index 05f949e318c..3a549f51e20 100755 --- a/client/tomcatconf/commands.properties.in +++ b/client/tomcatconf/commands.properties.in @@ -214,8 +214,8 @@ deleteZone=com.cloud.api.commands.DeleteZoneCmd;1 listZones=com.cloud.api.commands.ListZonesByCmd;15 #### events commands -listEvents=com.cloud.api.commands.ListEventsCmd;15 -listEventTypes=com.cloud.api.commands.ListEventTypesCmd;15 +listEvents=org.apache.cloudstack.api.user.event.command.ListEventsCmd;15 +listEventTypes=org.apache.cloudstack.api.user.event.command.ListEventTypesCmd;15 #### alerts commands listAlerts=com.cloud.api.commands.ListAlertsCmd;3 diff --git a/server/src/com/cloud/api/ApiDispatcher.java b/server/src/com/cloud/api/ApiDispatcher.java index 184a071e490..40847ea7e9d 100755 --- a/server/src/com/cloud/api/ApiDispatcher.java +++ b/server/src/com/cloud/api/ApiDispatcher.java @@ -34,7 +34,7 @@ import org.apache.log4j.Logger; import com.cloud.acl.ControlledEntity; import com.cloud.acl.Role; import org.apache.cloudstack.api.BaseCmd.CommandType; -import com.cloud.api.commands.ListEventsCmd; +import org.apache.cloudstack.api.user.event.command.ListEventsCmd; import com.cloud.async.AsyncCommandQueued; import com.cloud.async.AsyncJobManager; import com.cloud.configuration.Config; diff --git a/server/src/com/cloud/server/ManagementServerImpl.java b/server/src/com/cloud/server/ManagementServerImpl.java index 92a4fbcac91..e4c357c7e28 100755 --- a/server/src/com/cloud/server/ManagementServerImpl.java +++ b/server/src/com/cloud/server/ManagementServerImpl.java @@ -75,7 +75,7 @@ import com.cloud.api.commands.ListCapacityCmd; import com.cloud.api.commands.ListCfgsByCmd; import com.cloud.api.commands.ListClustersCmd; import com.cloud.api.commands.ListDiskOfferingsCmd; -import com.cloud.api.commands.ListEventsCmd; +import org.apache.cloudstack.api.user.event.command.ListEventsCmd; import com.cloud.api.commands.ListGuestOsCategoriesCmd; import com.cloud.api.commands.ListGuestOsCmd; import com.cloud.api.commands.ListHostsCmd; From b673c21174f33844a5a9d9de3e04450cbcdd32d8 Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Tue, 4 Dec 2012 00:12:17 -0800 Subject: [PATCH 019/421] api_refactor: refactor job (async jobs) apis - Fix refactored apis, mappings in commands*.in - Fix comments etc. Signed-off-by: Rohit Yadav --- api/src/com/cloud/server/ManagementService.java | 2 +- api/src/org/apache/cloudstack/api/ResponseGenerator.java | 2 +- .../cloudstack/api/user/job/command}/ListAsyncJobsCmd.java | 2 +- .../api/user/job/command}/QueryAsyncJobResultCmd.java | 2 +- client/tomcatconf/commands.properties.in | 4 ++-- server/src/com/cloud/api/ApiResponseHelper.java | 2 +- server/src/com/cloud/async/AsyncJobManager.java | 2 +- server/src/com/cloud/async/AsyncJobManagerImpl.java | 2 +- server/src/com/cloud/server/ManagementServerImpl.java | 2 +- 9 files changed, 10 insertions(+), 10 deletions(-) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/user/job/command}/ListAsyncJobsCmd.java (98%) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/user/job/command}/QueryAsyncJobResultCmd.java (98%) diff --git a/api/src/com/cloud/server/ManagementService.java b/api/src/com/cloud/server/ManagementService.java index e2ab658aa92..1b6cac791f9 100755 --- a/api/src/com/cloud/server/ManagementService.java +++ b/api/src/com/cloud/server/ManagementService.java @@ -32,7 +32,7 @@ import org.apache.cloudstack.api.user.template.command.ListTemplatesCmd; import org.apache.cloudstack.api.user.template.command.UpdateTemplateCmd; import org.apache.cloudstack.api.user.vm.command.GetVMPasswordCmd; import com.cloud.api.commands.ListAlertsCmd; -import com.cloud.api.commands.ListAsyncJobsCmd; +import org.apache.cloudstack.api.user.job.command.ListAsyncJobsCmd; import com.cloud.api.commands.ListCapabilitiesCmd; import com.cloud.api.commands.ListCapacityCmd; import com.cloud.api.commands.ListCfgsByCmd; diff --git a/api/src/org/apache/cloudstack/api/ResponseGenerator.java b/api/src/org/apache/cloudstack/api/ResponseGenerator.java index d711fcf65c3..99398550a1f 100755 --- a/api/src/org/apache/cloudstack/api/ResponseGenerator.java +++ b/api/src/org/apache/cloudstack/api/ResponseGenerator.java @@ -22,7 +22,7 @@ import java.util.List; import org.apache.cloudstack.api.ApiConstants.HostDetails; import org.apache.cloudstack.api.ApiConstants.VMDetails; -import com.cloud.api.commands.QueryAsyncJobResultCmd; +import org.apache.cloudstack.api.user.job.command.QueryAsyncJobResultCmd; import com.cloud.api.response.AccountResponse; import com.cloud.api.response.AsyncJobResponse; import com.cloud.api.response.AutoScalePolicyResponse; diff --git a/api/src/com/cloud/api/commands/ListAsyncJobsCmd.java b/api/src/org/apache/cloudstack/api/user/job/command/ListAsyncJobsCmd.java similarity index 98% rename from api/src/com/cloud/api/commands/ListAsyncJobsCmd.java rename to api/src/org/apache/cloudstack/api/user/job/command/ListAsyncJobsCmd.java index 734b578a6e7..addaa12a67d 100644 --- a/api/src/com/cloud/api/commands/ListAsyncJobsCmd.java +++ b/api/src/org/apache/cloudstack/api/user/job/command/ListAsyncJobsCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.user.job.command; import java.util.ArrayList; import java.util.Date; diff --git a/api/src/com/cloud/api/commands/QueryAsyncJobResultCmd.java b/api/src/org/apache/cloudstack/api/user/job/command/QueryAsyncJobResultCmd.java similarity index 98% rename from api/src/com/cloud/api/commands/QueryAsyncJobResultCmd.java rename to api/src/org/apache/cloudstack/api/user/job/command/QueryAsyncJobResultCmd.java index e9f91afb22d..defeab7fab4 100644 --- a/api/src/com/cloud/api/commands/QueryAsyncJobResultCmd.java +++ b/api/src/org/apache/cloudstack/api/user/job/command/QueryAsyncJobResultCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.user.job.command; import org.apache.log4j.Logger; diff --git a/client/tomcatconf/commands.properties.in b/client/tomcatconf/commands.properties.in index 3a549f51e20..77b7cd7398d 100755 --- a/client/tomcatconf/commands.properties.in +++ b/client/tomcatconf/commands.properties.in @@ -260,8 +260,8 @@ migrateVolume=com.cloud.api.commands.MigrateVolumeCmd;15 registerUserKeys=com.cloud.api.commands.RegisterCmd;1 ### async-query command -queryAsyncJobResult=com.cloud.api.commands.QueryAsyncJobResultCmd;15 -listAsyncJobs=com.cloud.api.commands.ListAsyncJobsCmd;15 +queryAsyncJobResult=org.apache.cloudstack.api.user.job.command.QueryAsyncJobResultCmd;15 +listAsyncJobs=org.apache.cloudstack.api.user.job.command.ListAsyncJobsCmd;15 #### storage pools commands listStoragePools=com.cloud.api.commands.ListStoragePoolsCmd;3 diff --git a/server/src/com/cloud/api/ApiResponseHelper.java b/server/src/com/cloud/api/ApiResponseHelper.java index f4d0eeb7953..24fb480944e 100755 --- a/server/src/com/cloud/api/ApiResponseHelper.java +++ b/server/src/com/cloud/api/ApiResponseHelper.java @@ -39,7 +39,7 @@ import com.cloud.acl.ControlledEntity; import com.cloud.acl.ControlledEntity.ACLType; import org.apache.cloudstack.api.ApiConstants.HostDetails; import org.apache.cloudstack.api.ApiConstants.VMDetails; -import com.cloud.api.commands.QueryAsyncJobResultCmd; +import org.apache.cloudstack.api.user.job.command.QueryAsyncJobResultCmd; import com.cloud.api.response.AccountResponse; import com.cloud.api.response.ApiResponseSerializer; import com.cloud.api.response.AsyncJobResponse; diff --git a/server/src/com/cloud/async/AsyncJobManager.java b/server/src/com/cloud/async/AsyncJobManager.java index 482499714c6..7876b551903 100644 --- a/server/src/com/cloud/async/AsyncJobManager.java +++ b/server/src/com/cloud/async/AsyncJobManager.java @@ -18,7 +18,7 @@ package com.cloud.async; import java.util.List; -import com.cloud.api.commands.QueryAsyncJobResultCmd; +import org.apache.cloudstack.api.user.job.command.QueryAsyncJobResultCmd; import com.cloud.utils.component.Manager; public interface AsyncJobManager extends Manager { diff --git a/server/src/com/cloud/async/AsyncJobManagerImpl.java b/server/src/com/cloud/async/AsyncJobManagerImpl.java index a90d4435885..a451f28c438 100644 --- a/server/src/com/cloud/async/AsyncJobManagerImpl.java +++ b/server/src/com/cloud/async/AsyncJobManagerImpl.java @@ -34,6 +34,7 @@ import java.util.concurrent.TimeUnit; import javax.ejb.Local; import javax.naming.ConfigurationException; +import org.apache.cloudstack.api.user.job.command.QueryAsyncJobResultCmd; import org.apache.log4j.Logger; import org.apache.log4j.NDC; @@ -43,7 +44,6 @@ import com.cloud.api.ApiSerializerHelper; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.ServerApiException; -import com.cloud.api.commands.QueryAsyncJobResultCmd; import com.cloud.api.response.ExceptionResponse; import com.cloud.async.dao.AsyncJobDao; import com.cloud.cluster.ClusterManager; diff --git a/server/src/com/cloud/server/ManagementServerImpl.java b/server/src/com/cloud/server/ManagementServerImpl.java index e4c357c7e28..145b256d750 100755 --- a/server/src/com/cloud/server/ManagementServerImpl.java +++ b/server/src/com/cloud/server/ManagementServerImpl.java @@ -43,6 +43,7 @@ import javax.crypto.Mac; import javax.crypto.spec.SecretKeySpec; import org.apache.cloudstack.api.user.iso.command.ListIsosCmd; +import org.apache.cloudstack.api.user.job.command.ListAsyncJobsCmd; import org.apache.cloudstack.api.user.ssh.command.DeleteSSHKeyPairCmd; import org.apache.cloudstack.api.user.ssh.command.RegisterSSHKeyPairCmd; import org.apache.cloudstack.api.user.template.command.ListTemplatesCmd; @@ -69,7 +70,6 @@ import com.cloud.api.commands.DestroySystemVmCmd; import com.cloud.api.commands.ExtractVolumeCmd; import org.apache.cloudstack.api.user.vm.command.GetVMPasswordCmd; import com.cloud.api.commands.ListAlertsCmd; -import com.cloud.api.commands.ListAsyncJobsCmd; import com.cloud.api.commands.ListCapabilitiesCmd; import com.cloud.api.commands.ListCapacityCmd; import com.cloud.api.commands.ListCfgsByCmd; From 1e51d6c1ab4cead878581a9992be2ee462ef78d1 Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Tue, 4 Dec 2012 00:19:39 -0800 Subject: [PATCH 020/421] api_refactor: refactor guest os (guest) apis - Fix refactored apis, mappings in commands*.in - Fix comments etc. Signed-off-by: Rohit Yadav --- api/src/com/cloud/server/ManagementService.java | 4 ++-- .../api/user/guest/command}/ListGuestOsCategoriesCmd.java | 2 +- .../cloudstack/api/user/guest/command}/ListGuestOsCmd.java | 2 +- client/tomcatconf/commands.properties.in | 5 ++--- server/src/com/cloud/server/ManagementServerImpl.java | 4 ++-- 5 files changed, 8 insertions(+), 9 deletions(-) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/user/guest/command}/ListGuestOsCategoriesCmd.java (98%) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/user/guest/command}/ListGuestOsCmd.java (98%) diff --git a/api/src/com/cloud/server/ManagementService.java b/api/src/com/cloud/server/ManagementService.java index 1b6cac791f9..a6a36ff22e3 100755 --- a/api/src/com/cloud/server/ManagementService.java +++ b/api/src/com/cloud/server/ManagementService.java @@ -24,6 +24,7 @@ import java.util.Set; import com.cloud.alert.Alert; import org.apache.cloudstack.api.ServerApiException; +import org.apache.cloudstack.api.user.guest.command.ListGuestOsCmd; import org.apache.cloudstack.api.user.ssh.command.CreateSSHKeyPairCmd; import org.apache.cloudstack.api.user.ssh.command.DeleteSSHKeyPairCmd; import com.cloud.api.commands.DestroySystemVmCmd; @@ -39,8 +40,7 @@ import com.cloud.api.commands.ListCfgsByCmd; import com.cloud.api.commands.ListClustersCmd; import com.cloud.api.commands.ListDiskOfferingsCmd; import org.apache.cloudstack.api.user.event.command.ListEventsCmd; -import com.cloud.api.commands.ListGuestOsCategoriesCmd; -import com.cloud.api.commands.ListGuestOsCmd; +import org.apache.cloudstack.api.user.guest.command.ListGuestOsCategoriesCmd; import com.cloud.api.commands.ListHostsCmd; import org.apache.cloudstack.api.user.iso.command.ListIsosCmd; import com.cloud.api.commands.ListPodsByCmd; diff --git a/api/src/com/cloud/api/commands/ListGuestOsCategoriesCmd.java b/api/src/org/apache/cloudstack/api/user/guest/command/ListGuestOsCategoriesCmd.java similarity index 98% rename from api/src/com/cloud/api/commands/ListGuestOsCategoriesCmd.java rename to api/src/org/apache/cloudstack/api/user/guest/command/ListGuestOsCategoriesCmd.java index c01c16f2d55..134d6ed22fb 100644 --- a/api/src/com/cloud/api/commands/ListGuestOsCategoriesCmd.java +++ b/api/src/org/apache/cloudstack/api/user/guest/command/ListGuestOsCategoriesCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.user.guest.command; import java.util.ArrayList; import java.util.List; diff --git a/api/src/com/cloud/api/commands/ListGuestOsCmd.java b/api/src/org/apache/cloudstack/api/user/guest/command/ListGuestOsCmd.java similarity index 98% rename from api/src/com/cloud/api/commands/ListGuestOsCmd.java rename to api/src/org/apache/cloudstack/api/user/guest/command/ListGuestOsCmd.java index 3757f865ea2..f08efafdb9f 100644 --- a/api/src/com/cloud/api/commands/ListGuestOsCmd.java +++ b/api/src/org/apache/cloudstack/api/user/guest/command/ListGuestOsCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.user.guest.command; import java.util.ArrayList; import java.util.List; diff --git a/client/tomcatconf/commands.properties.in b/client/tomcatconf/commands.properties.in index 77b7cd7398d..eb006516557 100755 --- a/client/tomcatconf/commands.properties.in +++ b/client/tomcatconf/commands.properties.in @@ -103,8 +103,8 @@ listIsoPermissions=org.apache.cloudstack.api.user.iso.command.ListIsoPermissions extractIso=org.apache.cloudstack.api.user.iso.command.ExtractIsoCmd;15 #### guest OS commands -listOsTypes=com.cloud.api.commands.ListGuestOsCmd;15 -listOsCategories=com.cloud.api.commands.ListGuestOsCategoriesCmd;15 +listOsTypes=org.apache.cloudstack.api.user.guest.command.ListGuestOsCmd;15 +listOsCategories=org.apache.cloudstack.api.user.guest.command.ListGuestOsCategoriesCmd;15 #### service offering commands createServiceOffering=com.cloud.api.commands.CreateServiceOfferingCmd;1 @@ -227,7 +227,6 @@ listCapacity=com.cloud.api.commands.ListCapacityCmd;3 addSwift=com.cloud.api.commands.AddSwiftCmd;1 listSwifts=com.cloud.api.commands.ListSwiftsCmd;1 - #### host commands addHost=com.cloud.api.commands.AddHostCmd;3 addCluster=com.cloud.api.commands.AddClusterCmd;1 diff --git a/server/src/com/cloud/server/ManagementServerImpl.java b/server/src/com/cloud/server/ManagementServerImpl.java index 145b256d750..6a895e35168 100755 --- a/server/src/com/cloud/server/ManagementServerImpl.java +++ b/server/src/com/cloud/server/ManagementServerImpl.java @@ -42,6 +42,8 @@ import java.util.concurrent.TimeUnit; import javax.crypto.Mac; import javax.crypto.spec.SecretKeySpec; +import org.apache.cloudstack.api.user.guest.command.ListGuestOsCategoriesCmd; +import org.apache.cloudstack.api.user.guest.command.ListGuestOsCmd; import org.apache.cloudstack.api.user.iso.command.ListIsosCmd; import org.apache.cloudstack.api.user.job.command.ListAsyncJobsCmd; import org.apache.cloudstack.api.user.ssh.command.DeleteSSHKeyPairCmd; @@ -76,8 +78,6 @@ import com.cloud.api.commands.ListCfgsByCmd; import com.cloud.api.commands.ListClustersCmd; import com.cloud.api.commands.ListDiskOfferingsCmd; import org.apache.cloudstack.api.user.event.command.ListEventsCmd; -import com.cloud.api.commands.ListGuestOsCategoriesCmd; -import com.cloud.api.commands.ListGuestOsCmd; import com.cloud.api.commands.ListHostsCmd; import com.cloud.api.commands.ListPodsByCmd; import com.cloud.api.commands.ListPublicIpAddressesCmd; From 73d1099c7680eece21e0677d2e9495714e8a9789 Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Tue, 4 Dec 2012 00:25:22 -0800 Subject: [PATCH 021/421] api_refactor: rename sg to securitygroup Signed-off-by: Rohit Yadav --- .../network/security/SecurityGroupService.java | 7 +++---- .../command/AuthorizeSecurityGroupEgressCmd.java | 2 +- .../command/AuthorizeSecurityGroupIngressCmd.java | 2 +- .../command/CreateSecurityGroupCmd.java | 2 +- .../command/DeleteSecurityGroupCmd.java | 2 +- .../command/ListSecurityGroupsCmd.java | 2 +- .../command/RevokeSecurityGroupEgressCmd.java | 2 +- .../command/RevokeSecurityGroupIngressCmd.java | 2 +- client/tomcatconf/commands.properties.in | 14 +++++++------- .../network/security/SecurityGroupManagerImpl.java | 8 ++------ 10 files changed, 19 insertions(+), 24 deletions(-) rename api/src/org/apache/cloudstack/api/user/{sg => securitygroup}/command/AuthorizeSecurityGroupEgressCmd.java (99%) rename api/src/org/apache/cloudstack/api/user/{sg => securitygroup}/command/AuthorizeSecurityGroupIngressCmd.java (99%) rename api/src/org/apache/cloudstack/api/user/{sg => securitygroup}/command/CreateSecurityGroupCmd.java (98%) rename api/src/org/apache/cloudstack/api/user/{sg => securitygroup}/command/DeleteSecurityGroupCmd.java (98%) rename api/src/org/apache/cloudstack/api/user/{sg => securitygroup}/command/ListSecurityGroupsCmd.java (98%) rename api/src/org/apache/cloudstack/api/user/{sg => securitygroup}/command/RevokeSecurityGroupEgressCmd.java (98%) rename api/src/org/apache/cloudstack/api/user/{sg => securitygroup}/command/RevokeSecurityGroupIngressCmd.java (98%) diff --git a/api/src/com/cloud/network/security/SecurityGroupService.java b/api/src/com/cloud/network/security/SecurityGroupService.java index 270047f5713..51d26829667 100644 --- a/api/src/com/cloud/network/security/SecurityGroupService.java +++ b/api/src/com/cloud/network/security/SecurityGroupService.java @@ -18,10 +18,9 @@ package com.cloud.network.security; import java.util.List; -import org.apache.cloudstack.api.user.sg.command.*; -import org.apache.cloudstack.api.user.sg.command.AuthorizeSecurityGroupIngressCmd; -import org.apache.cloudstack.api.user.sg.command.CreateSecurityGroupCmd; -import org.apache.cloudstack.api.user.sg.command.RevokeSecurityGroupEgressCmd; +import org.apache.cloudstack.api.user.securitygroup.command.*; +import org.apache.cloudstack.api.user.securitygroup.command.AuthorizeSecurityGroupIngressCmd; +import org.apache.cloudstack.api.user.securitygroup.command.CreateSecurityGroupCmd; import com.cloud.exception.InvalidParameterValueException; import com.cloud.exception.PermissionDeniedException; import com.cloud.exception.ResourceInUseException; diff --git a/api/src/org/apache/cloudstack/api/user/sg/command/AuthorizeSecurityGroupEgressCmd.java b/api/src/org/apache/cloudstack/api/user/securitygroup/command/AuthorizeSecurityGroupEgressCmd.java similarity index 99% rename from api/src/org/apache/cloudstack/api/user/sg/command/AuthorizeSecurityGroupEgressCmd.java rename to api/src/org/apache/cloudstack/api/user/securitygroup/command/AuthorizeSecurityGroupEgressCmd.java index 658f03a73a8..207eb7d0cd2 100644 --- a/api/src/org/apache/cloudstack/api/user/sg/command/AuthorizeSecurityGroupEgressCmd.java +++ b/api/src/org/apache/cloudstack/api/user/securitygroup/command/AuthorizeSecurityGroupEgressCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.user.sg.command; +package org.apache.cloudstack.api.user.securitygroup.command; import java.util.Collection; import java.util.HashMap; diff --git a/api/src/org/apache/cloudstack/api/user/sg/command/AuthorizeSecurityGroupIngressCmd.java b/api/src/org/apache/cloudstack/api/user/securitygroup/command/AuthorizeSecurityGroupIngressCmd.java similarity index 99% rename from api/src/org/apache/cloudstack/api/user/sg/command/AuthorizeSecurityGroupIngressCmd.java rename to api/src/org/apache/cloudstack/api/user/securitygroup/command/AuthorizeSecurityGroupIngressCmd.java index 38a4f49e532..3ea5216f086 100644 --- a/api/src/org/apache/cloudstack/api/user/sg/command/AuthorizeSecurityGroupIngressCmd.java +++ b/api/src/org/apache/cloudstack/api/user/securitygroup/command/AuthorizeSecurityGroupIngressCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.user.sg.command; +package org.apache.cloudstack.api.user.securitygroup.command; import java.util.Collection; import java.util.HashMap; diff --git a/api/src/org/apache/cloudstack/api/user/sg/command/CreateSecurityGroupCmd.java b/api/src/org/apache/cloudstack/api/user/securitygroup/command/CreateSecurityGroupCmd.java similarity index 98% rename from api/src/org/apache/cloudstack/api/user/sg/command/CreateSecurityGroupCmd.java rename to api/src/org/apache/cloudstack/api/user/securitygroup/command/CreateSecurityGroupCmd.java index 71a1ee60d3a..a66ee5a8e1b 100644 --- a/api/src/org/apache/cloudstack/api/user/sg/command/CreateSecurityGroupCmd.java +++ b/api/src/org/apache/cloudstack/api/user/securitygroup/command/CreateSecurityGroupCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.user.sg.command; +package org.apache.cloudstack.api.user.securitygroup.command; import org.apache.log4j.Logger; diff --git a/api/src/org/apache/cloudstack/api/user/sg/command/DeleteSecurityGroupCmd.java b/api/src/org/apache/cloudstack/api/user/securitygroup/command/DeleteSecurityGroupCmd.java similarity index 98% rename from api/src/org/apache/cloudstack/api/user/sg/command/DeleteSecurityGroupCmd.java rename to api/src/org/apache/cloudstack/api/user/securitygroup/command/DeleteSecurityGroupCmd.java index 92e1b83ee65..c48644f82ed 100644 --- a/api/src/org/apache/cloudstack/api/user/sg/command/DeleteSecurityGroupCmd.java +++ b/api/src/org/apache/cloudstack/api/user/securitygroup/command/DeleteSecurityGroupCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.user.sg.command; +package org.apache.cloudstack.api.user.securitygroup.command; import org.apache.log4j.Logger; diff --git a/api/src/org/apache/cloudstack/api/user/sg/command/ListSecurityGroupsCmd.java b/api/src/org/apache/cloudstack/api/user/securitygroup/command/ListSecurityGroupsCmd.java similarity index 98% rename from api/src/org/apache/cloudstack/api/user/sg/command/ListSecurityGroupsCmd.java rename to api/src/org/apache/cloudstack/api/user/securitygroup/command/ListSecurityGroupsCmd.java index db6e3e7ef35..7b1be825f93 100644 --- a/api/src/org/apache/cloudstack/api/user/sg/command/ListSecurityGroupsCmd.java +++ b/api/src/org/apache/cloudstack/api/user/securitygroup/command/ListSecurityGroupsCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.user.sg.command; +package org.apache.cloudstack.api.user.securitygroup.command; import java.util.List; diff --git a/api/src/org/apache/cloudstack/api/user/sg/command/RevokeSecurityGroupEgressCmd.java b/api/src/org/apache/cloudstack/api/user/securitygroup/command/RevokeSecurityGroupEgressCmd.java similarity index 98% rename from api/src/org/apache/cloudstack/api/user/sg/command/RevokeSecurityGroupEgressCmd.java rename to api/src/org/apache/cloudstack/api/user/securitygroup/command/RevokeSecurityGroupEgressCmd.java index f806e2f34f8..8da03170aaa 100644 --- a/api/src/org/apache/cloudstack/api/user/sg/command/RevokeSecurityGroupEgressCmd.java +++ b/api/src/org/apache/cloudstack/api/user/securitygroup/command/RevokeSecurityGroupEgressCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.user.sg.command; +package org.apache.cloudstack.api.user.securitygroup.command; import org.apache.log4j.Logger; diff --git a/api/src/org/apache/cloudstack/api/user/sg/command/RevokeSecurityGroupIngressCmd.java b/api/src/org/apache/cloudstack/api/user/securitygroup/command/RevokeSecurityGroupIngressCmd.java similarity index 98% rename from api/src/org/apache/cloudstack/api/user/sg/command/RevokeSecurityGroupIngressCmd.java rename to api/src/org/apache/cloudstack/api/user/securitygroup/command/RevokeSecurityGroupIngressCmd.java index 668b9e218a7..b9ddc8632c5 100644 --- a/api/src/org/apache/cloudstack/api/user/sg/command/RevokeSecurityGroupIngressCmd.java +++ b/api/src/org/apache/cloudstack/api/user/securitygroup/command/RevokeSecurityGroupIngressCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.user.sg.command; +package org.apache.cloudstack.api.user.securitygroup.command; import org.apache.log4j.Logger; diff --git a/client/tomcatconf/commands.properties.in b/client/tomcatconf/commands.properties.in index eb006516557..f7ce43b2dc5 100755 --- a/client/tomcatconf/commands.properties.in +++ b/client/tomcatconf/commands.properties.in @@ -272,13 +272,13 @@ enableStorageMaintenance=com.cloud.api.commands.PreparePrimaryStorageForMaintena cancelStorageMaintenance=com.cloud.api.commands.CancelPrimaryStorageMaintenanceCmd;1 #### security group commands -createSecurityGroup=org.apache.cloudstack.api.user.sg.command.CreateSecurityGroupCmd;15 -deleteSecurityGroup=org.apache.cloudstack.api.user.sg.command.DeleteSecurityGroupCmd;15 -authorizeSecurityGroupIngress=org.apache.cloudstack.api.user.sg.command.AuthorizeSecurityGroupIngressCmd;15 -revokeSecurityGroupIngress=org.apache.cloudstack.api.user.sg.command.RevokeSecurityGroupIngressCmd;15 -authorizeSecurityGroupEgress=org.apache.cloudstack.api.user.sg.command.AuthorizeSecurityGroupEgressCmd;15 -revokeSecurityGroupEgress=org.apache.cloudstack.api.user.sg.command.RevokeSecurityGroupEgressCmd;15 -listSecurityGroups=org.apache.cloudstack.api.user.sg.command.ListSecurityGroupsCmd;15 +createSecurityGroup=org.apache.cloudstack.api.user.securitygroup.command.CreateSecurityGroupCmd;15 +deleteSecurityGroup=org.apache.cloudstack.api.user.securitygroup.command.DeleteSecurityGroupCmd;15 +authorizeSecurityGroupIngress=org.apache.cloudstack.api.user.securitygroup.command.AuthorizeSecurityGroupIngressCmd;15 +revokeSecurityGroupIngress=org.apache.cloudstack.api.user.securitygroup.command.RevokeSecurityGroupIngressCmd;15 +authorizeSecurityGroupEgress=org.apache.cloudstack.api.user.securitygroup.command.AuthorizeSecurityGroupEgressCmd;15 +revokeSecurityGroupEgress=org.apache.cloudstack.api.user.securitygroup.command.RevokeSecurityGroupEgressCmd;15 +listSecurityGroups=org.apache.cloudstack.api.user.securitygroup.command.ListSecurityGroupsCmd;15 #### vm group commands createInstanceGroup=org.apache.cloudstack.api.user.vmgroup.command.CreateVMGroupCmd;15 diff --git a/server/src/com/cloud/network/security/SecurityGroupManagerImpl.java b/server/src/com/cloud/network/security/SecurityGroupManagerImpl.java index 40826c9c8b8..be8635c63e1 100755 --- a/server/src/com/cloud/network/security/SecurityGroupManagerImpl.java +++ b/server/src/com/cloud/network/security/SecurityGroupManagerImpl.java @@ -36,7 +36,7 @@ import java.util.concurrent.TimeUnit; import javax.ejb.Local; import javax.naming.ConfigurationException; -import org.apache.cloudstack.api.user.sg.command.*; +import org.apache.cloudstack.api.user.securitygroup.command.*; import org.apache.commons.codec.digest.DigestUtils; import org.apache.log4j.Logger; @@ -45,11 +45,7 @@ import com.cloud.agent.api.NetworkRulesSystemVmCommand; import com.cloud.agent.api.SecurityGroupRulesCmd; import com.cloud.agent.api.SecurityGroupRulesCmd.IpPortAndProto; import com.cloud.agent.manager.Commands; -import org.apache.cloudstack.api.user.sg.command.AuthorizeSecurityGroupEgressCmd; -import org.apache.cloudstack.api.user.sg.command.CreateSecurityGroupCmd; -import org.apache.cloudstack.api.user.sg.command.DeleteSecurityGroupCmd; -import org.apache.cloudstack.api.user.sg.command.ListSecurityGroupsCmd; -import org.apache.cloudstack.api.user.sg.command.RevokeSecurityGroupEgressCmd; +import org.apache.cloudstack.api.user.securitygroup.command.RevokeSecurityGroupEgressCmd; import com.cloud.configuration.Config; import com.cloud.configuration.dao.ConfigurationDao; import com.cloud.domain.dao.DomainDao; From 28df57ec7564a1004c392ff1a70bbc497df6da63 Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Tue, 4 Dec 2012 00:27:19 -0800 Subject: [PATCH 022/421] api_refactor: refactor serviceoffering apis - Fix refactored apis, mappings in commands*.in - Fix comments etc. Signed-off-by: Rohit Yadav --- api/src/com/cloud/api/commands/ListClustersCmd.java | 1 + api/src/com/cloud/server/ManagementService.java | 2 +- .../user/serviceoffering/command}/ListServiceOfferingsCmd.java | 2 +- client/tomcatconf/commands.properties.in | 2 +- .../src/com/cloud/api/commands/ListExternalFirewallsCmd.java | 1 + server/src/com/cloud/api/commands/ListTrafficMonitorsCmd.java | 1 + server/src/com/cloud/server/ManagementServerImpl.java | 2 +- 7 files changed, 7 insertions(+), 4 deletions(-) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/user/serviceoffering/command}/ListServiceOfferingsCmd.java (98%) diff --git a/api/src/com/cloud/api/commands/ListClustersCmd.java b/api/src/com/cloud/api/commands/ListClustersCmd.java index a6bd54940c8..a3f55068fb7 100755 --- a/api/src/com/cloud/api/commands/ListClustersCmd.java +++ b/api/src/com/cloud/api/commands/ListClustersCmd.java @@ -19,6 +19,7 @@ package com.cloud.api.commands; import java.util.ArrayList; import java.util.List; +import org.apache.cloudstack.api.user.serviceoffering.command.ListServiceOfferingsCmd; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; diff --git a/api/src/com/cloud/server/ManagementService.java b/api/src/com/cloud/server/ManagementService.java index a6a36ff22e3..dded41ea59e 100755 --- a/api/src/com/cloud/server/ManagementService.java +++ b/api/src/com/cloud/server/ManagementService.java @@ -47,7 +47,7 @@ import com.cloud.api.commands.ListPodsByCmd; import com.cloud.api.commands.ListPublicIpAddressesCmd; import com.cloud.api.commands.ListRoutersCmd; import org.apache.cloudstack.api.user.ssh.command.ListSSHKeyPairsCmd; -import com.cloud.api.commands.ListServiceOfferingsCmd; +import org.apache.cloudstack.api.user.serviceoffering.command.ListServiceOfferingsCmd; import com.cloud.api.commands.ListStoragePoolsCmd; import com.cloud.api.commands.ListSystemVMsCmd; import org.apache.cloudstack.api.user.vmgroup.command.ListVMGroupsCmd; diff --git a/api/src/com/cloud/api/commands/ListServiceOfferingsCmd.java b/api/src/org/apache/cloudstack/api/user/serviceoffering/command/ListServiceOfferingsCmd.java similarity index 98% rename from api/src/com/cloud/api/commands/ListServiceOfferingsCmd.java rename to api/src/org/apache/cloudstack/api/user/serviceoffering/command/ListServiceOfferingsCmd.java index 69763b984b7..89334aa3dfe 100644 --- a/api/src/com/cloud/api/commands/ListServiceOfferingsCmd.java +++ b/api/src/org/apache/cloudstack/api/user/serviceoffering/command/ListServiceOfferingsCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.user.serviceoffering.command; import java.util.ArrayList; import java.util.List; diff --git a/client/tomcatconf/commands.properties.in b/client/tomcatconf/commands.properties.in index f7ce43b2dc5..d9d5ed02c48 100755 --- a/client/tomcatconf/commands.properties.in +++ b/client/tomcatconf/commands.properties.in @@ -110,7 +110,7 @@ listOsCategories=org.apache.cloudstack.api.user.guest.command.ListGuestOsCategor createServiceOffering=com.cloud.api.commands.CreateServiceOfferingCmd;1 deleteServiceOffering=com.cloud.api.commands.DeleteServiceOfferingCmd;1 updateServiceOffering=com.cloud.api.commands.UpdateServiceOfferingCmd;1 -listServiceOfferings=com.cloud.api.commands.ListServiceOfferingsCmd;15 +listServiceOfferings=org.apache.cloudstack.api.user.serviceoffering.command.ListServiceOfferingsCmd;15 #### disk offering commands createDiskOffering=com.cloud.api.commands.CreateDiskOfferingCmd;1 diff --git a/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/ListExternalFirewallsCmd.java b/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/ListExternalFirewallsCmd.java index 29bf3d26e64..63a9ebd48f7 100644 --- a/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/ListExternalFirewallsCmd.java +++ b/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/ListExternalFirewallsCmd.java @@ -19,6 +19,7 @@ package com.cloud.api.commands; import java.util.ArrayList; import java.util.List; +import org.apache.cloudstack.api.user.serviceoffering.command.ListServiceOfferingsCmd; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; diff --git a/server/src/com/cloud/api/commands/ListTrafficMonitorsCmd.java b/server/src/com/cloud/api/commands/ListTrafficMonitorsCmd.java index 59683dce3aa..a6ea5b35a30 100644 --- a/server/src/com/cloud/api/commands/ListTrafficMonitorsCmd.java +++ b/server/src/com/cloud/api/commands/ListTrafficMonitorsCmd.java @@ -19,6 +19,7 @@ package com.cloud.api.commands; import java.util.ArrayList; import java.util.List; +import org.apache.cloudstack.api.user.serviceoffering.command.ListServiceOfferingsCmd; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; diff --git a/server/src/com/cloud/server/ManagementServerImpl.java b/server/src/com/cloud/server/ManagementServerImpl.java index 6a895e35168..859354a6460 100755 --- a/server/src/com/cloud/server/ManagementServerImpl.java +++ b/server/src/com/cloud/server/ManagementServerImpl.java @@ -46,6 +46,7 @@ import org.apache.cloudstack.api.user.guest.command.ListGuestOsCategoriesCmd; import org.apache.cloudstack.api.user.guest.command.ListGuestOsCmd; import org.apache.cloudstack.api.user.iso.command.ListIsosCmd; import org.apache.cloudstack.api.user.job.command.ListAsyncJobsCmd; +import org.apache.cloudstack.api.user.serviceoffering.command.ListServiceOfferingsCmd; import org.apache.cloudstack.api.user.ssh.command.DeleteSSHKeyPairCmd; import org.apache.cloudstack.api.user.ssh.command.RegisterSSHKeyPairCmd; import org.apache.cloudstack.api.user.template.command.ListTemplatesCmd; @@ -83,7 +84,6 @@ import com.cloud.api.commands.ListPodsByCmd; import com.cloud.api.commands.ListPublicIpAddressesCmd; import com.cloud.api.commands.ListRoutersCmd; import org.apache.cloudstack.api.user.ssh.command.ListSSHKeyPairsCmd; -import com.cloud.api.commands.ListServiceOfferingsCmd; import com.cloud.api.commands.ListStoragePoolsCmd; import com.cloud.api.commands.ListSystemVMsCmd; import com.cloud.api.commands.ListVlanIpRangesCmd; From ea79162615f7863a84102229a32637e1ca1a0730 Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Tue, 4 Dec 2012 00:29:17 -0800 Subject: [PATCH 023/421] api_refactor: refactor configuration api for normal user - Fix refactored apis, mappings in commands*.in - Fix comments etc. Signed-off-by: Rohit Yadav --- api/src/com/cloud/server/ManagementService.java | 2 +- .../api/user/configuration/command}/ListCapabilitiesCmd.java | 2 +- client/tomcatconf/commands.properties.in | 2 +- server/src/com/cloud/server/ManagementServerImpl.java | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/user/configuration/command}/ListCapabilitiesCmd.java (97%) diff --git a/api/src/com/cloud/server/ManagementService.java b/api/src/com/cloud/server/ManagementService.java index dded41ea59e..c96f87b4a59 100755 --- a/api/src/com/cloud/server/ManagementService.java +++ b/api/src/com/cloud/server/ManagementService.java @@ -34,7 +34,7 @@ import org.apache.cloudstack.api.user.template.command.UpdateTemplateCmd; import org.apache.cloudstack.api.user.vm.command.GetVMPasswordCmd; import com.cloud.api.commands.ListAlertsCmd; import org.apache.cloudstack.api.user.job.command.ListAsyncJobsCmd; -import com.cloud.api.commands.ListCapabilitiesCmd; +import org.apache.cloudstack.api.user.configuration.command.ListCapabilitiesCmd; import com.cloud.api.commands.ListCapacityCmd; import com.cloud.api.commands.ListCfgsByCmd; import com.cloud.api.commands.ListClustersCmd; diff --git a/api/src/com/cloud/api/commands/ListCapabilitiesCmd.java b/api/src/org/apache/cloudstack/api/user/configuration/command/ListCapabilitiesCmd.java similarity index 97% rename from api/src/com/cloud/api/commands/ListCapabilitiesCmd.java rename to api/src/org/apache/cloudstack/api/user/configuration/command/ListCapabilitiesCmd.java index a1aa3bb0163..22541a3f644 100644 --- a/api/src/com/cloud/api/commands/ListCapabilitiesCmd.java +++ b/api/src/org/apache/cloudstack/api/user/configuration/command/ListCapabilitiesCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.user.configuration.command; import java.util.Map; diff --git a/client/tomcatconf/commands.properties.in b/client/tomcatconf/commands.properties.in index d9d5ed02c48..ee3862e125a 100755 --- a/client/tomcatconf/commands.properties.in +++ b/client/tomcatconf/commands.properties.in @@ -199,7 +199,7 @@ updateConfiguration=com.cloud.api.commands.UpdateCfgCmd;1 listConfigurations=com.cloud.api.commands.ListCfgsByCmd;1 ldapConfig=com.cloud.api.commands.LDAPConfigCmd;1 ldapRemove=com.cloud.api.commands.LDAPRemoveCmd;1 -listCapabilities=com.cloud.api.commands.ListCapabilitiesCmd;15 +listCapabilities=org.apache.cloudstack.api.user.configuration.command.ListCapabilitiesCmd;15 #### pod commands createPod=com.cloud.api.commands.CreatePodCmd;1 diff --git a/server/src/com/cloud/server/ManagementServerImpl.java b/server/src/com/cloud/server/ManagementServerImpl.java index 859354a6460..4c5e852f504 100755 --- a/server/src/com/cloud/server/ManagementServerImpl.java +++ b/server/src/com/cloud/server/ManagementServerImpl.java @@ -73,7 +73,7 @@ import com.cloud.api.commands.DestroySystemVmCmd; import com.cloud.api.commands.ExtractVolumeCmd; import org.apache.cloudstack.api.user.vm.command.GetVMPasswordCmd; import com.cloud.api.commands.ListAlertsCmd; -import com.cloud.api.commands.ListCapabilitiesCmd; +import org.apache.cloudstack.api.user.configuration.command.ListCapabilitiesCmd; import com.cloud.api.commands.ListCapacityCmd; import com.cloud.api.commands.ListCfgsByCmd; import com.cloud.api.commands.ListClustersCmd; From cabbc7bd7d4778f1728bd11306403909572d6987 Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Tue, 4 Dec 2012 00:31:03 -0800 Subject: [PATCH 024/421] api_refactor: refactor disk api (only user) - Fix refactored apis, mappings in commands*.in - Fix comments etc. Signed-off-by: Rohit Yadav --- api/src/com/cloud/server/ManagementService.java | 2 +- .../cloudstack/api/user/disk/command}/ListDiskOfferingsCmd.java | 2 +- client/tomcatconf/commands.properties.in | 2 +- server/src/com/cloud/server/ManagementServerImpl.java | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/user/disk/command}/ListDiskOfferingsCmd.java (98%) diff --git a/api/src/com/cloud/server/ManagementService.java b/api/src/com/cloud/server/ManagementService.java index c96f87b4a59..f6d7efa43e4 100755 --- a/api/src/com/cloud/server/ManagementService.java +++ b/api/src/com/cloud/server/ManagementService.java @@ -38,7 +38,7 @@ import org.apache.cloudstack.api.user.configuration.command.ListCapabilitiesCmd; import com.cloud.api.commands.ListCapacityCmd; import com.cloud.api.commands.ListCfgsByCmd; import com.cloud.api.commands.ListClustersCmd; -import com.cloud.api.commands.ListDiskOfferingsCmd; +import org.apache.cloudstack.api.user.disk.command.ListDiskOfferingsCmd; import org.apache.cloudstack.api.user.event.command.ListEventsCmd; import org.apache.cloudstack.api.user.guest.command.ListGuestOsCategoriesCmd; import com.cloud.api.commands.ListHostsCmd; diff --git a/api/src/com/cloud/api/commands/ListDiskOfferingsCmd.java b/api/src/org/apache/cloudstack/api/user/disk/command/ListDiskOfferingsCmd.java similarity index 98% rename from api/src/com/cloud/api/commands/ListDiskOfferingsCmd.java rename to api/src/org/apache/cloudstack/api/user/disk/command/ListDiskOfferingsCmd.java index 7f30d06b329..ec8f884fa69 100644 --- a/api/src/com/cloud/api/commands/ListDiskOfferingsCmd.java +++ b/api/src/org/apache/cloudstack/api/user/disk/command/ListDiskOfferingsCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.user.disk.command; import java.util.ArrayList; import java.util.List; diff --git a/client/tomcatconf/commands.properties.in b/client/tomcatconf/commands.properties.in index ee3862e125a..0e1ccc21f5b 100755 --- a/client/tomcatconf/commands.properties.in +++ b/client/tomcatconf/commands.properties.in @@ -116,7 +116,7 @@ listServiceOfferings=org.apache.cloudstack.api.user.serviceoffering.command.List createDiskOffering=com.cloud.api.commands.CreateDiskOfferingCmd;1 updateDiskOffering=com.cloud.api.commands.UpdateDiskOfferingCmd;1 deleteDiskOffering=com.cloud.api.commands.DeleteDiskOfferingCmd;1 -listDiskOfferings=com.cloud.api.commands.ListDiskOfferingsCmd;15 +listDiskOfferings=org.apache.cloudstack.api.user.disk.command.ListDiskOfferingsCmd;15 #### vlan commands createVlanIpRange=com.cloud.api.commands.CreateVlanIpRangeCmd;1 diff --git a/server/src/com/cloud/server/ManagementServerImpl.java b/server/src/com/cloud/server/ManagementServerImpl.java index 4c5e852f504..fef59bfd276 100755 --- a/server/src/com/cloud/server/ManagementServerImpl.java +++ b/server/src/com/cloud/server/ManagementServerImpl.java @@ -77,7 +77,7 @@ import org.apache.cloudstack.api.user.configuration.command.ListCapabilitiesCmd; import com.cloud.api.commands.ListCapacityCmd; import com.cloud.api.commands.ListCfgsByCmd; import com.cloud.api.commands.ListClustersCmd; -import com.cloud.api.commands.ListDiskOfferingsCmd; +import org.apache.cloudstack.api.user.disk.command.ListDiskOfferingsCmd; import org.apache.cloudstack.api.user.event.command.ListEventsCmd; import com.cloud.api.commands.ListHostsCmd; import com.cloud.api.commands.ListPodsByCmd; From 91d199b8d8b740ce6f6cd588f675bad460e25aac Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Tue, 4 Dec 2012 00:34:26 -0800 Subject: [PATCH 025/421] api_refactor: refactor list hypervisor api - Fix refactored apis, mappings in commands*.in Signed-off-by: Rohit Yadav --- .../api/user/hypervisor/command}/ListHypervisorsCmd.java | 3 ++- client/tomcatconf/commands.properties.in | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/user/hypervisor/command}/ListHypervisorsCmd.java (96%) diff --git a/api/src/com/cloud/api/commands/ListHypervisorsCmd.java b/api/src/org/apache/cloudstack/api/user/hypervisor/command/ListHypervisorsCmd.java similarity index 96% rename from api/src/com/cloud/api/commands/ListHypervisorsCmd.java rename to api/src/org/apache/cloudstack/api/user/hypervisor/command/ListHypervisorsCmd.java index ec460f377e9..abab7249e46 100644 --- a/api/src/com/cloud/api/commands/ListHypervisorsCmd.java +++ b/api/src/org/apache/cloudstack/api/user/hypervisor/command/ListHypervisorsCmd.java @@ -14,11 +14,12 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.user.hypervisor.command; import java.util.ArrayList; import java.util.List; +import com.cloud.api.commands.UpgradeRouterCmd; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; diff --git a/client/tomcatconf/commands.properties.in b/client/tomcatconf/commands.properties.in index 0e1ccc21f5b..ac748ab8600 100755 --- a/client/tomcatconf/commands.properties.in +++ b/client/tomcatconf/commands.properties.in @@ -290,7 +290,7 @@ listInstanceGroups=org.apache.cloudstack.api.user.vmgroup.command.ListVMGroupsCm uploadCustomCertificate=com.cloud.api.commands.UploadCustomCertificateCmd;1 ### other commands -listHypervisors=com.cloud.api.commands.ListHypervisorsCmd;15 +listHypervisors=org.apache.cloudstack.api.user.hypervisor.command.ListHypervisorsCmd;15 ### VPN createRemoteAccessVpn=org.apache.cloudstack.api.user.vpn.command.CreateRemoteAccessVpnCmd;15 From 1b8dc65f3a7b6f3b9e3b3b988e8abf31400d8a43 Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Tue, 4 Dec 2012 10:27:47 -0800 Subject: [PATCH 026/421] api_refactor: refactor user (vpn) apis - Fix refactored apis, mappings in commands*.in Signed-off-by: Rohit Yadav --- api/src/com/cloud/network/vpn/RemoteAccessVpnService.java | 2 +- .../cloudstack/api/user/vpn/command}/AddVpnUserCmd.java | 2 +- .../cloudstack/api/user/vpn/command}/ListVpnUsersCmd.java | 2 +- .../cloudstack/api/user/vpn/command}/RemoveVpnUserCmd.java | 2 +- .../src/com/cloud/api/commands/test/AddVpnUserCmdTest.java | 2 +- client/tomcatconf/commands.properties.in | 6 +++--- .../com/cloud/network/vpn/RemoteAccessVpnManagerImpl.java | 2 +- 7 files changed, 9 insertions(+), 9 deletions(-) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/user/vpn/command}/AddVpnUserCmd.java (99%) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/user/vpn/command}/ListVpnUsersCmd.java (98%) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/user/vpn/command}/RemoveVpnUserCmd.java (98%) diff --git a/api/src/com/cloud/network/vpn/RemoteAccessVpnService.java b/api/src/com/cloud/network/vpn/RemoteAccessVpnService.java index 11ba1e50ecb..80a23e9e757 100644 --- a/api/src/com/cloud/network/vpn/RemoteAccessVpnService.java +++ b/api/src/com/cloud/network/vpn/RemoteAccessVpnService.java @@ -19,7 +19,7 @@ package com.cloud.network.vpn; import java.util.List; import org.apache.cloudstack.api.user.vpn.command.ListRemoteAccessVpnsCmd; -import com.cloud.api.commands.ListVpnUsersCmd; +import org.apache.cloudstack.api.user.vpn.command.ListVpnUsersCmd; import com.cloud.exception.NetworkRuleConflictException; import com.cloud.exception.ResourceUnavailableException; import com.cloud.network.RemoteAccessVpn; diff --git a/api/src/com/cloud/api/commands/AddVpnUserCmd.java b/api/src/org/apache/cloudstack/api/user/vpn/command/AddVpnUserCmd.java similarity index 99% rename from api/src/com/cloud/api/commands/AddVpnUserCmd.java rename to api/src/org/apache/cloudstack/api/user/vpn/command/AddVpnUserCmd.java index 3a6f38c94ac..537356beea7 100644 --- a/api/src/com/cloud/api/commands/AddVpnUserCmd.java +++ b/api/src/org/apache/cloudstack/api/user/vpn/command/AddVpnUserCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.user.vpn.command; import org.apache.log4j.Logger; diff --git a/api/src/com/cloud/api/commands/ListVpnUsersCmd.java b/api/src/org/apache/cloudstack/api/user/vpn/command/ListVpnUsersCmd.java similarity index 98% rename from api/src/com/cloud/api/commands/ListVpnUsersCmd.java rename to api/src/org/apache/cloudstack/api/user/vpn/command/ListVpnUsersCmd.java index 2f3774e471e..72b3ec166d4 100644 --- a/api/src/com/cloud/api/commands/ListVpnUsersCmd.java +++ b/api/src/org/apache/cloudstack/api/user/vpn/command/ListVpnUsersCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.user.vpn.command; import java.util.ArrayList; import java.util.List; diff --git a/api/src/com/cloud/api/commands/RemoveVpnUserCmd.java b/api/src/org/apache/cloudstack/api/user/vpn/command/RemoveVpnUserCmd.java similarity index 98% rename from api/src/com/cloud/api/commands/RemoveVpnUserCmd.java rename to api/src/org/apache/cloudstack/api/user/vpn/command/RemoveVpnUserCmd.java index d667555eb33..ee230879d7e 100644 --- a/api/src/com/cloud/api/commands/RemoveVpnUserCmd.java +++ b/api/src/org/apache/cloudstack/api/user/vpn/command/RemoveVpnUserCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.user.vpn.command; import org.apache.log4j.Logger; diff --git a/api/test/src/com/cloud/api/commands/test/AddVpnUserCmdTest.java b/api/test/src/com/cloud/api/commands/test/AddVpnUserCmdTest.java index e91abbe71fb..0d2945da042 100644 --- a/api/test/src/com/cloud/api/commands/test/AddVpnUserCmdTest.java +++ b/api/test/src/com/cloud/api/commands/test/AddVpnUserCmdTest.java @@ -19,6 +19,7 @@ package src.com.cloud.api.commands.test; import junit.framework.Assert; import junit.framework.TestCase; +import org.apache.cloudstack.api.user.vpn.command.AddVpnUserCmd; import org.junit.Before; import org.junit.Rule; import org.junit.Test; @@ -26,7 +27,6 @@ import org.junit.rules.ExpectedException; import org.mockito.Mockito; import org.apache.cloudstack.api.ServerApiException; -import com.cloud.api.commands.AddVpnUserCmd; import com.cloud.network.VpnUser; import com.cloud.network.vpn.RemoteAccessVpnService; import com.cloud.user.Account; diff --git a/client/tomcatconf/commands.properties.in b/client/tomcatconf/commands.properties.in index ac748ab8600..b97650f4f12 100755 --- a/client/tomcatconf/commands.properties.in +++ b/client/tomcatconf/commands.properties.in @@ -297,9 +297,9 @@ createRemoteAccessVpn=org.apache.cloudstack.api.user.vpn.command.CreateRemoteAcc deleteRemoteAccessVpn=org.apache.cloudstack.api.user.vpn.command.DeleteRemoteAccessVpnCmd;15 listRemoteAccessVpns=org.apache.cloudstack.api.user.vpn.command.ListRemoteAccessVpnsCmd;15 -addVpnUser=com.cloud.api.commands.AddVpnUserCmd;15 -removeVpnUser=com.cloud.api.commands.RemoveVpnUserCmd;15 -listVpnUsers=com.cloud.api.commands.ListVpnUsersCmd;15 +addVpnUser=org.apache.cloudstack.api.user.vpn.command.AddVpnUserCmd;15 +removeVpnUser=org.apache.cloudstack.api.user.vpn.command.RemoveVpnUserCmd;15 +listVpnUsers=org.apache.cloudstack.api.user.vpn.command.ListVpnUsersCmd;15 #### network offering commands createNetworkOffering=com.cloud.api.commands.CreateNetworkOfferingCmd;1 diff --git a/server/src/com/cloud/network/vpn/RemoteAccessVpnManagerImpl.java b/server/src/com/cloud/network/vpn/RemoteAccessVpnManagerImpl.java index 94388f2f3b2..5ccccf0aff3 100755 --- a/server/src/com/cloud/network/vpn/RemoteAccessVpnManagerImpl.java +++ b/server/src/com/cloud/network/vpn/RemoteAccessVpnManagerImpl.java @@ -23,10 +23,10 @@ import java.util.Map; import javax.ejb.Local; import javax.naming.ConfigurationException; +import org.apache.cloudstack.api.user.vpn.command.ListVpnUsersCmd; import org.apache.log4j.Logger; import org.apache.cloudstack.api.user.vpn.command.ListRemoteAccessVpnsCmd; -import com.cloud.api.commands.ListVpnUsersCmd; import com.cloud.configuration.Config; import com.cloud.configuration.dao.ConfigurationDao; import com.cloud.domain.DomainVO; From 6fe1b5f9b08796fdfbe770d8334610978a4e7a44 Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Tue, 4 Dec 2012 10:37:14 -0800 Subject: [PATCH 027/421] api_refactor: move diskoffering to offering Signed-off-by: Rohit Yadav --- api/src/com/cloud/server/ManagementService.java | 2 +- .../user/{disk => offering}/command/ListDiskOfferingsCmd.java | 2 +- client/tomcatconf/commands.properties.in | 2 +- server/src/com/cloud/server/ManagementServerImpl.java | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) rename api/src/org/apache/cloudstack/api/user/{disk => offering}/command/ListDiskOfferingsCmd.java (98%) diff --git a/api/src/com/cloud/server/ManagementService.java b/api/src/com/cloud/server/ManagementService.java index f6d7efa43e4..a697b3835fd 100755 --- a/api/src/com/cloud/server/ManagementService.java +++ b/api/src/com/cloud/server/ManagementService.java @@ -25,6 +25,7 @@ import java.util.Set; import com.cloud.alert.Alert; import org.apache.cloudstack.api.ServerApiException; import org.apache.cloudstack.api.user.guest.command.ListGuestOsCmd; +import org.apache.cloudstack.api.user.offering.command.ListDiskOfferingsCmd; import org.apache.cloudstack.api.user.ssh.command.CreateSSHKeyPairCmd; import org.apache.cloudstack.api.user.ssh.command.DeleteSSHKeyPairCmd; import com.cloud.api.commands.DestroySystemVmCmd; @@ -38,7 +39,6 @@ import org.apache.cloudstack.api.user.configuration.command.ListCapabilitiesCmd; import com.cloud.api.commands.ListCapacityCmd; import com.cloud.api.commands.ListCfgsByCmd; import com.cloud.api.commands.ListClustersCmd; -import org.apache.cloudstack.api.user.disk.command.ListDiskOfferingsCmd; import org.apache.cloudstack.api.user.event.command.ListEventsCmd; import org.apache.cloudstack.api.user.guest.command.ListGuestOsCategoriesCmd; import com.cloud.api.commands.ListHostsCmd; diff --git a/api/src/org/apache/cloudstack/api/user/disk/command/ListDiskOfferingsCmd.java b/api/src/org/apache/cloudstack/api/user/offering/command/ListDiskOfferingsCmd.java similarity index 98% rename from api/src/org/apache/cloudstack/api/user/disk/command/ListDiskOfferingsCmd.java rename to api/src/org/apache/cloudstack/api/user/offering/command/ListDiskOfferingsCmd.java index ec8f884fa69..85d42496bdb 100644 --- a/api/src/org/apache/cloudstack/api/user/disk/command/ListDiskOfferingsCmd.java +++ b/api/src/org/apache/cloudstack/api/user/offering/command/ListDiskOfferingsCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.user.disk.command; +package org.apache.cloudstack.api.user.offering.command; import java.util.ArrayList; import java.util.List; diff --git a/client/tomcatconf/commands.properties.in b/client/tomcatconf/commands.properties.in index b97650f4f12..7101155c6ca 100755 --- a/client/tomcatconf/commands.properties.in +++ b/client/tomcatconf/commands.properties.in @@ -116,7 +116,7 @@ listServiceOfferings=org.apache.cloudstack.api.user.serviceoffering.command.List createDiskOffering=com.cloud.api.commands.CreateDiskOfferingCmd;1 updateDiskOffering=com.cloud.api.commands.UpdateDiskOfferingCmd;1 deleteDiskOffering=com.cloud.api.commands.DeleteDiskOfferingCmd;1 -listDiskOfferings=org.apache.cloudstack.api.user.disk.command.ListDiskOfferingsCmd;15 +listDiskOfferings=org.apache.cloudstack.api.user.offering.command.ListDiskOfferingsCmd;15 #### vlan commands createVlanIpRange=com.cloud.api.commands.CreateVlanIpRangeCmd;1 diff --git a/server/src/com/cloud/server/ManagementServerImpl.java b/server/src/com/cloud/server/ManagementServerImpl.java index fef59bfd276..eb14d46b16d 100755 --- a/server/src/com/cloud/server/ManagementServerImpl.java +++ b/server/src/com/cloud/server/ManagementServerImpl.java @@ -46,6 +46,7 @@ import org.apache.cloudstack.api.user.guest.command.ListGuestOsCategoriesCmd; import org.apache.cloudstack.api.user.guest.command.ListGuestOsCmd; import org.apache.cloudstack.api.user.iso.command.ListIsosCmd; import org.apache.cloudstack.api.user.job.command.ListAsyncJobsCmd; +import org.apache.cloudstack.api.user.offering.command.ListDiskOfferingsCmd; import org.apache.cloudstack.api.user.serviceoffering.command.ListServiceOfferingsCmd; import org.apache.cloudstack.api.user.ssh.command.DeleteSSHKeyPairCmd; import org.apache.cloudstack.api.user.ssh.command.RegisterSSHKeyPairCmd; @@ -77,7 +78,6 @@ import org.apache.cloudstack.api.user.configuration.command.ListCapabilitiesCmd; import com.cloud.api.commands.ListCapacityCmd; import com.cloud.api.commands.ListCfgsByCmd; import com.cloud.api.commands.ListClustersCmd; -import org.apache.cloudstack.api.user.disk.command.ListDiskOfferingsCmd; import org.apache.cloudstack.api.user.event.command.ListEventsCmd; import com.cloud.api.commands.ListHostsCmd; import com.cloud.api.commands.ListPodsByCmd; From 658cf56120796140b90ab08b7356fb65031db133 Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Tue, 4 Dec 2012 10:38:53 -0800 Subject: [PATCH 028/421] api_refactor: move diskoffering to offering Signed-off-by: Rohit Yadav --- api/src/com/cloud/api/commands/ListClustersCmd.java | 2 +- api/src/com/cloud/server/ManagementService.java | 2 +- .../command/ListServiceOfferingsCmd.java | 2 +- client/tomcatconf/commands.properties.in | 2 +- .../src/com/cloud/api/commands/ListExternalFirewallsCmd.java | 2 +- server/src/com/cloud/api/commands/ListTrafficMonitorsCmd.java | 2 +- server/src/com/cloud/server/ManagementServerImpl.java | 2 +- 7 files changed, 7 insertions(+), 7 deletions(-) rename api/src/org/apache/cloudstack/api/user/{serviceoffering => offering}/command/ListServiceOfferingsCmd.java (98%) diff --git a/api/src/com/cloud/api/commands/ListClustersCmd.java b/api/src/com/cloud/api/commands/ListClustersCmd.java index a3f55068fb7..a46dd9df8bb 100755 --- a/api/src/com/cloud/api/commands/ListClustersCmd.java +++ b/api/src/com/cloud/api/commands/ListClustersCmd.java @@ -19,7 +19,7 @@ package com.cloud.api.commands; import java.util.ArrayList; import java.util.List; -import org.apache.cloudstack.api.user.serviceoffering.command.ListServiceOfferingsCmd; +import org.apache.cloudstack.api.user.offering.command.ListServiceOfferingsCmd; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; diff --git a/api/src/com/cloud/server/ManagementService.java b/api/src/com/cloud/server/ManagementService.java index a697b3835fd..2b2239798eb 100755 --- a/api/src/com/cloud/server/ManagementService.java +++ b/api/src/com/cloud/server/ManagementService.java @@ -26,6 +26,7 @@ import com.cloud.alert.Alert; import org.apache.cloudstack.api.ServerApiException; import org.apache.cloudstack.api.user.guest.command.ListGuestOsCmd; import org.apache.cloudstack.api.user.offering.command.ListDiskOfferingsCmd; +import org.apache.cloudstack.api.user.offering.command.ListServiceOfferingsCmd; import org.apache.cloudstack.api.user.ssh.command.CreateSSHKeyPairCmd; import org.apache.cloudstack.api.user.ssh.command.DeleteSSHKeyPairCmd; import com.cloud.api.commands.DestroySystemVmCmd; @@ -47,7 +48,6 @@ import com.cloud.api.commands.ListPodsByCmd; import com.cloud.api.commands.ListPublicIpAddressesCmd; import com.cloud.api.commands.ListRoutersCmd; import org.apache.cloudstack.api.user.ssh.command.ListSSHKeyPairsCmd; -import org.apache.cloudstack.api.user.serviceoffering.command.ListServiceOfferingsCmd; import com.cloud.api.commands.ListStoragePoolsCmd; import com.cloud.api.commands.ListSystemVMsCmd; import org.apache.cloudstack.api.user.vmgroup.command.ListVMGroupsCmd; diff --git a/api/src/org/apache/cloudstack/api/user/serviceoffering/command/ListServiceOfferingsCmd.java b/api/src/org/apache/cloudstack/api/user/offering/command/ListServiceOfferingsCmd.java similarity index 98% rename from api/src/org/apache/cloudstack/api/user/serviceoffering/command/ListServiceOfferingsCmd.java rename to api/src/org/apache/cloudstack/api/user/offering/command/ListServiceOfferingsCmd.java index 89334aa3dfe..e5c12661956 100644 --- a/api/src/org/apache/cloudstack/api/user/serviceoffering/command/ListServiceOfferingsCmd.java +++ b/api/src/org/apache/cloudstack/api/user/offering/command/ListServiceOfferingsCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.user.serviceoffering.command; +package org.apache.cloudstack.api.user.offering.command; import java.util.ArrayList; import java.util.List; diff --git a/client/tomcatconf/commands.properties.in b/client/tomcatconf/commands.properties.in index 7101155c6ca..66dbae31e97 100755 --- a/client/tomcatconf/commands.properties.in +++ b/client/tomcatconf/commands.properties.in @@ -110,7 +110,7 @@ listOsCategories=org.apache.cloudstack.api.user.guest.command.ListGuestOsCategor createServiceOffering=com.cloud.api.commands.CreateServiceOfferingCmd;1 deleteServiceOffering=com.cloud.api.commands.DeleteServiceOfferingCmd;1 updateServiceOffering=com.cloud.api.commands.UpdateServiceOfferingCmd;1 -listServiceOfferings=org.apache.cloudstack.api.user.serviceoffering.command.ListServiceOfferingsCmd;15 +listServiceOfferings=org.apache.cloudstack.api.user.offering.command.ListServiceOfferingsCmd;15 #### disk offering commands createDiskOffering=com.cloud.api.commands.CreateDiskOfferingCmd;1 diff --git a/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/ListExternalFirewallsCmd.java b/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/ListExternalFirewallsCmd.java index 63a9ebd48f7..6777765c30f 100644 --- a/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/ListExternalFirewallsCmd.java +++ b/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/ListExternalFirewallsCmd.java @@ -19,7 +19,7 @@ package com.cloud.api.commands; import java.util.ArrayList; import java.util.List; -import org.apache.cloudstack.api.user.serviceoffering.command.ListServiceOfferingsCmd; +import org.apache.cloudstack.api.user.offering.command.ListServiceOfferingsCmd; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; diff --git a/server/src/com/cloud/api/commands/ListTrafficMonitorsCmd.java b/server/src/com/cloud/api/commands/ListTrafficMonitorsCmd.java index a6ea5b35a30..a6f35976758 100644 --- a/server/src/com/cloud/api/commands/ListTrafficMonitorsCmd.java +++ b/server/src/com/cloud/api/commands/ListTrafficMonitorsCmd.java @@ -19,7 +19,7 @@ package com.cloud.api.commands; import java.util.ArrayList; import java.util.List; -import org.apache.cloudstack.api.user.serviceoffering.command.ListServiceOfferingsCmd; +import org.apache.cloudstack.api.user.offering.command.ListServiceOfferingsCmd; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; diff --git a/server/src/com/cloud/server/ManagementServerImpl.java b/server/src/com/cloud/server/ManagementServerImpl.java index eb14d46b16d..61950d64b1b 100755 --- a/server/src/com/cloud/server/ManagementServerImpl.java +++ b/server/src/com/cloud/server/ManagementServerImpl.java @@ -47,7 +47,7 @@ import org.apache.cloudstack.api.user.guest.command.ListGuestOsCmd; import org.apache.cloudstack.api.user.iso.command.ListIsosCmd; import org.apache.cloudstack.api.user.job.command.ListAsyncJobsCmd; import org.apache.cloudstack.api.user.offering.command.ListDiskOfferingsCmd; -import org.apache.cloudstack.api.user.serviceoffering.command.ListServiceOfferingsCmd; +import org.apache.cloudstack.api.user.offering.command.ListServiceOfferingsCmd; import org.apache.cloudstack.api.user.ssh.command.DeleteSSHKeyPairCmd; import org.apache.cloudstack.api.user.ssh.command.RegisterSSHKeyPairCmd; import org.apache.cloudstack.api.user.template.command.ListTemplatesCmd; From d3261e5bb3d0d31a25514b3769d91d06d74c5c27 Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Tue, 4 Dec 2012 10:41:22 -0800 Subject: [PATCH 029/421] api_refactor: move listhyperisor to datacenter will use this for all organizational units Signed-off-by: Rohit Yadav --- .../{hypervisor => datacenter}/command/ListHypervisorsCmd.java | 2 +- client/tomcatconf/commands.properties.in | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) rename api/src/org/apache/cloudstack/api/user/{hypervisor => datacenter}/command/ListHypervisorsCmd.java (98%) diff --git a/api/src/org/apache/cloudstack/api/user/hypervisor/command/ListHypervisorsCmd.java b/api/src/org/apache/cloudstack/api/user/datacenter/command/ListHypervisorsCmd.java similarity index 98% rename from api/src/org/apache/cloudstack/api/user/hypervisor/command/ListHypervisorsCmd.java rename to api/src/org/apache/cloudstack/api/user/datacenter/command/ListHypervisorsCmd.java index abab7249e46..4b5a60faad9 100644 --- a/api/src/org/apache/cloudstack/api/user/hypervisor/command/ListHypervisorsCmd.java +++ b/api/src/org/apache/cloudstack/api/user/datacenter/command/ListHypervisorsCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.user.hypervisor.command; +package org.apache.cloudstack.api.user.datacenter.command; import java.util.ArrayList; import java.util.List; diff --git a/client/tomcatconf/commands.properties.in b/client/tomcatconf/commands.properties.in index 66dbae31e97..f778ddd709a 100755 --- a/client/tomcatconf/commands.properties.in +++ b/client/tomcatconf/commands.properties.in @@ -290,7 +290,7 @@ listInstanceGroups=org.apache.cloudstack.api.user.vmgroup.command.ListVMGroupsCm uploadCustomCertificate=com.cloud.api.commands.UploadCustomCertificateCmd;1 ### other commands -listHypervisors=org.apache.cloudstack.api.user.hypervisor.command.ListHypervisorsCmd;15 +listHypervisors=org.apache.cloudstack.api.user.datacenter.command.ListHypervisorsCmd;15 ### VPN createRemoteAccessVpn=org.apache.cloudstack.api.user.vpn.command.CreateRemoteAccessVpnCmd;15 From a34fc1f1a766187e4e4425e284f5dd2bbae0ce85 Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Tue, 4 Dec 2012 10:44:17 -0800 Subject: [PATCH 030/421] api_refactor: move listcapabilites to dc Signed-off-by: Rohit Yadav --- api/src/com/cloud/server/ManagementService.java | 2 +- .../command/ListCapabilitiesCmd.java | 2 +- client/tomcatconf/commands.properties.in | 2 +- server/src/com/cloud/server/ManagementServerImpl.java | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) rename api/src/org/apache/cloudstack/api/user/{configuration => datacenter}/command/ListCapabilitiesCmd.java (97%) diff --git a/api/src/com/cloud/server/ManagementService.java b/api/src/com/cloud/server/ManagementService.java index 2b2239798eb..e9fcf65b66f 100755 --- a/api/src/com/cloud/server/ManagementService.java +++ b/api/src/com/cloud/server/ManagementService.java @@ -24,6 +24,7 @@ import java.util.Set; import com.cloud.alert.Alert; import org.apache.cloudstack.api.ServerApiException; +import org.apache.cloudstack.api.user.datacenter.command.ListCapabilitiesCmd; import org.apache.cloudstack.api.user.guest.command.ListGuestOsCmd; import org.apache.cloudstack.api.user.offering.command.ListDiskOfferingsCmd; import org.apache.cloudstack.api.user.offering.command.ListServiceOfferingsCmd; @@ -36,7 +37,6 @@ import org.apache.cloudstack.api.user.template.command.UpdateTemplateCmd; import org.apache.cloudstack.api.user.vm.command.GetVMPasswordCmd; import com.cloud.api.commands.ListAlertsCmd; import org.apache.cloudstack.api.user.job.command.ListAsyncJobsCmd; -import org.apache.cloudstack.api.user.configuration.command.ListCapabilitiesCmd; import com.cloud.api.commands.ListCapacityCmd; import com.cloud.api.commands.ListCfgsByCmd; import com.cloud.api.commands.ListClustersCmd; diff --git a/api/src/org/apache/cloudstack/api/user/configuration/command/ListCapabilitiesCmd.java b/api/src/org/apache/cloudstack/api/user/datacenter/command/ListCapabilitiesCmd.java similarity index 97% rename from api/src/org/apache/cloudstack/api/user/configuration/command/ListCapabilitiesCmd.java rename to api/src/org/apache/cloudstack/api/user/datacenter/command/ListCapabilitiesCmd.java index 22541a3f644..aa926c26fea 100644 --- a/api/src/org/apache/cloudstack/api/user/configuration/command/ListCapabilitiesCmd.java +++ b/api/src/org/apache/cloudstack/api/user/datacenter/command/ListCapabilitiesCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.user.configuration.command; +package org.apache.cloudstack.api.user.datacenter.command; import java.util.Map; diff --git a/client/tomcatconf/commands.properties.in b/client/tomcatconf/commands.properties.in index f778ddd709a..dd0c7fa33d4 100755 --- a/client/tomcatconf/commands.properties.in +++ b/client/tomcatconf/commands.properties.in @@ -199,7 +199,7 @@ updateConfiguration=com.cloud.api.commands.UpdateCfgCmd;1 listConfigurations=com.cloud.api.commands.ListCfgsByCmd;1 ldapConfig=com.cloud.api.commands.LDAPConfigCmd;1 ldapRemove=com.cloud.api.commands.LDAPRemoveCmd;1 -listCapabilities=org.apache.cloudstack.api.user.configuration.command.ListCapabilitiesCmd;15 +listCapabilities=org.apache.cloudstack.api.user.datacenter.command.ListCapabilitiesCmd;15 #### pod commands createPod=com.cloud.api.commands.CreatePodCmd;1 diff --git a/server/src/com/cloud/server/ManagementServerImpl.java b/server/src/com/cloud/server/ManagementServerImpl.java index 61950d64b1b..2f8575fca26 100755 --- a/server/src/com/cloud/server/ManagementServerImpl.java +++ b/server/src/com/cloud/server/ManagementServerImpl.java @@ -42,6 +42,7 @@ import java.util.concurrent.TimeUnit; import javax.crypto.Mac; import javax.crypto.spec.SecretKeySpec; +import org.apache.cloudstack.api.user.datacenter.command.ListCapabilitiesCmd; import org.apache.cloudstack.api.user.guest.command.ListGuestOsCategoriesCmd; import org.apache.cloudstack.api.user.guest.command.ListGuestOsCmd; import org.apache.cloudstack.api.user.iso.command.ListIsosCmd; @@ -74,7 +75,6 @@ import com.cloud.api.commands.DestroySystemVmCmd; import com.cloud.api.commands.ExtractVolumeCmd; import org.apache.cloudstack.api.user.vm.command.GetVMPasswordCmd; import com.cloud.api.commands.ListAlertsCmd; -import org.apache.cloudstack.api.user.configuration.command.ListCapabilitiesCmd; import com.cloud.api.commands.ListCapacityCmd; import com.cloud.api.commands.ListCfgsByCmd; import com.cloud.api.commands.ListClustersCmd; From 7f9c490b5a7865adae1d9ad4ee17895aa0cd49ed Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Tue, 4 Dec 2012 11:06:34 -0800 Subject: [PATCH 031/421] api_refactor: move listzones and listcapabilities to dc Signed-off-by: Rohit Yadav --- api/src/com/cloud/server/ManagementService.java | 2 +- .../api/user/datacenter/command}/GetCloudIdentifierCmd.java | 2 +- .../api/user/datacenter/command}/ListZonesByCmd.java | 2 +- client/tomcatconf/commands.properties.in | 4 ++-- server/src/com/cloud/server/ManagementServerImpl.java | 2 +- 5 files changed, 6 insertions(+), 6 deletions(-) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/user/datacenter/command}/GetCloudIdentifierCmd.java (98%) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/user/datacenter/command}/ListZonesByCmd.java (98%) diff --git a/api/src/com/cloud/server/ManagementService.java b/api/src/com/cloud/server/ManagementService.java index e9fcf65b66f..0169d767bea 100755 --- a/api/src/com/cloud/server/ManagementService.java +++ b/api/src/com/cloud/server/ManagementService.java @@ -52,7 +52,7 @@ import com.cloud.api.commands.ListStoragePoolsCmd; import com.cloud.api.commands.ListSystemVMsCmd; import org.apache.cloudstack.api.user.vmgroup.command.ListVMGroupsCmd; import com.cloud.api.commands.ListVlanIpRangesCmd; -import com.cloud.api.commands.ListZonesByCmd; +import org.apache.cloudstack.api.user.datacenter.command.ListZonesByCmd; import com.cloud.api.commands.RebootSystemVmCmd; import org.apache.cloudstack.api.user.ssh.command.RegisterSSHKeyPairCmd; import com.cloud.api.commands.StopSystemVmCmd; diff --git a/api/src/com/cloud/api/commands/GetCloudIdentifierCmd.java b/api/src/org/apache/cloudstack/api/user/datacenter/command/GetCloudIdentifierCmd.java similarity index 98% rename from api/src/com/cloud/api/commands/GetCloudIdentifierCmd.java rename to api/src/org/apache/cloudstack/api/user/datacenter/command/GetCloudIdentifierCmd.java index f3bdab54951..f836625b9c0 100644 --- a/api/src/com/cloud/api/commands/GetCloudIdentifierCmd.java +++ b/api/src/org/apache/cloudstack/api/user/datacenter/command/GetCloudIdentifierCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.user.datacenter.command; import java.util.ArrayList; diff --git a/api/src/com/cloud/api/commands/ListZonesByCmd.java b/api/src/org/apache/cloudstack/api/user/datacenter/command/ListZonesByCmd.java similarity index 98% rename from api/src/com/cloud/api/commands/ListZonesByCmd.java rename to api/src/org/apache/cloudstack/api/user/datacenter/command/ListZonesByCmd.java index 63822b704d3..9e6e2fdedd5 100755 --- a/api/src/com/cloud/api/commands/ListZonesByCmd.java +++ b/api/src/org/apache/cloudstack/api/user/datacenter/command/ListZonesByCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.user.datacenter.command; import java.util.ArrayList; import java.util.List; diff --git a/client/tomcatconf/commands.properties.in b/client/tomcatconf/commands.properties.in index dd0c7fa33d4..4ea397405be 100755 --- a/client/tomcatconf/commands.properties.in +++ b/client/tomcatconf/commands.properties.in @@ -46,7 +46,7 @@ listDomains=com.cloud.api.commands.ListDomainsCmd;7 listDomainChildren=com.cloud.api.commands.ListDomainChildrenCmd;7 ####Cloud Identifier commands -getCloudIdentifier=com.cloud.api.commands.GetCloudIdentifierCmd;15 +getCloudIdentifier=org.apache.cloudstack.api.user.datacenter.command.GetCloudIdentifierCmd;15 #### Limit commands updateResourceLimit=com.cloud.api.commands.UpdateResourceLimitCmd;7 @@ -211,7 +211,7 @@ listPods=com.cloud.api.commands.ListPodsByCmd;3 createZone=com.cloud.api.commands.CreateZoneCmd;1 updateZone=com.cloud.api.commands.UpdateZoneCmd;1 deleteZone=com.cloud.api.commands.DeleteZoneCmd;1 -listZones=com.cloud.api.commands.ListZonesByCmd;15 +listZones=org.apache.cloudstack.api.user.datacenter.command.ListZonesByCmd;15 #### events commands listEvents=org.apache.cloudstack.api.user.event.command.ListEventsCmd;15 diff --git a/server/src/com/cloud/server/ManagementServerImpl.java b/server/src/com/cloud/server/ManagementServerImpl.java index 2f8575fca26..bd95adbb9ec 100755 --- a/server/src/com/cloud/server/ManagementServerImpl.java +++ b/server/src/com/cloud/server/ManagementServerImpl.java @@ -87,7 +87,7 @@ import org.apache.cloudstack.api.user.ssh.command.ListSSHKeyPairsCmd; import com.cloud.api.commands.ListStoragePoolsCmd; import com.cloud.api.commands.ListSystemVMsCmd; import com.cloud.api.commands.ListVlanIpRangesCmd; -import com.cloud.api.commands.ListZonesByCmd; +import org.apache.cloudstack.api.user.datacenter.command.ListZonesByCmd; import com.cloud.api.commands.RebootSystemVmCmd; import com.cloud.api.commands.StopSystemVmCmd; import com.cloud.api.commands.UpdateDomainCmd; From 46ed598894598238c87eac446b92c6bd351e5193 Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Tue, 4 Dec 2012 11:11:16 -0800 Subject: [PATCH 032/421] api_refactor: resource (limit) apis, move capability and cloud identifier Signed-off-by: Rohit Yadav --- api/src/com/cloud/server/ManagementService.java | 2 +- .../command/GetCloudIdentifierCmd.java | 2 +- .../command/ListCapabilitiesCmd.java | 2 +- .../user/resource/command}/ListResourceLimitsCmd.java | 2 +- .../user/resource/command}/UpdateResourceCountCmd.java | 2 +- .../user/resource/command}/UpdateResourceLimitCmd.java | 2 +- client/tomcatconf/commands.properties.in | 10 +++++----- server/src/com/cloud/server/ManagementServerImpl.java | 2 +- 8 files changed, 12 insertions(+), 12 deletions(-) rename api/src/org/apache/cloudstack/api/user/{datacenter => resource}/command/GetCloudIdentifierCmd.java (98%) rename api/src/org/apache/cloudstack/api/user/{datacenter => resource}/command/ListCapabilitiesCmd.java (97%) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/user/resource/command}/ListResourceLimitsCmd.java (98%) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/user/resource/command}/UpdateResourceCountCmd.java (99%) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/user/resource/command}/UpdateResourceLimitCmd.java (98%) diff --git a/api/src/com/cloud/server/ManagementService.java b/api/src/com/cloud/server/ManagementService.java index 0169d767bea..37560b5e21a 100755 --- a/api/src/com/cloud/server/ManagementService.java +++ b/api/src/com/cloud/server/ManagementService.java @@ -24,7 +24,7 @@ import java.util.Set; import com.cloud.alert.Alert; import org.apache.cloudstack.api.ServerApiException; -import org.apache.cloudstack.api.user.datacenter.command.ListCapabilitiesCmd; +import org.apache.cloudstack.api.user.resource.command.ListCapabilitiesCmd; import org.apache.cloudstack.api.user.guest.command.ListGuestOsCmd; import org.apache.cloudstack.api.user.offering.command.ListDiskOfferingsCmd; import org.apache.cloudstack.api.user.offering.command.ListServiceOfferingsCmd; diff --git a/api/src/org/apache/cloudstack/api/user/datacenter/command/GetCloudIdentifierCmd.java b/api/src/org/apache/cloudstack/api/user/resource/command/GetCloudIdentifierCmd.java similarity index 98% rename from api/src/org/apache/cloudstack/api/user/datacenter/command/GetCloudIdentifierCmd.java rename to api/src/org/apache/cloudstack/api/user/resource/command/GetCloudIdentifierCmd.java index f836625b9c0..09d8ecdcfe1 100644 --- a/api/src/org/apache/cloudstack/api/user/datacenter/command/GetCloudIdentifierCmd.java +++ b/api/src/org/apache/cloudstack/api/user/resource/command/GetCloudIdentifierCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.user.datacenter.command; +package org.apache.cloudstack.api.user.resource.command; import java.util.ArrayList; diff --git a/api/src/org/apache/cloudstack/api/user/datacenter/command/ListCapabilitiesCmd.java b/api/src/org/apache/cloudstack/api/user/resource/command/ListCapabilitiesCmd.java similarity index 97% rename from api/src/org/apache/cloudstack/api/user/datacenter/command/ListCapabilitiesCmd.java rename to api/src/org/apache/cloudstack/api/user/resource/command/ListCapabilitiesCmd.java index aa926c26fea..7fd69c78024 100644 --- a/api/src/org/apache/cloudstack/api/user/datacenter/command/ListCapabilitiesCmd.java +++ b/api/src/org/apache/cloudstack/api/user/resource/command/ListCapabilitiesCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.user.datacenter.command; +package org.apache.cloudstack.api.user.resource.command; import java.util.Map; diff --git a/api/src/com/cloud/api/commands/ListResourceLimitsCmd.java b/api/src/org/apache/cloudstack/api/user/resource/command/ListResourceLimitsCmd.java similarity index 98% rename from api/src/com/cloud/api/commands/ListResourceLimitsCmd.java rename to api/src/org/apache/cloudstack/api/user/resource/command/ListResourceLimitsCmd.java index 7f832ae09cd..49e29d67dd4 100644 --- a/api/src/com/cloud/api/commands/ListResourceLimitsCmd.java +++ b/api/src/org/apache/cloudstack/api/user/resource/command/ListResourceLimitsCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.user.resource.command; import java.util.ArrayList; import java.util.List; diff --git a/api/src/com/cloud/api/commands/UpdateResourceCountCmd.java b/api/src/org/apache/cloudstack/api/user/resource/command/UpdateResourceCountCmd.java similarity index 99% rename from api/src/com/cloud/api/commands/UpdateResourceCountCmd.java rename to api/src/org/apache/cloudstack/api/user/resource/command/UpdateResourceCountCmd.java index 811b917d6bb..53448c697cc 100644 --- a/api/src/com/cloud/api/commands/UpdateResourceCountCmd.java +++ b/api/src/org/apache/cloudstack/api/user/resource/command/UpdateResourceCountCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.user.resource.command; import java.util.ArrayList; import java.util.List; diff --git a/api/src/com/cloud/api/commands/UpdateResourceLimitCmd.java b/api/src/org/apache/cloudstack/api/user/resource/command/UpdateResourceLimitCmd.java similarity index 98% rename from api/src/com/cloud/api/commands/UpdateResourceLimitCmd.java rename to api/src/org/apache/cloudstack/api/user/resource/command/UpdateResourceLimitCmd.java index 9ef94ef4518..c1270762a55 100644 --- a/api/src/com/cloud/api/commands/UpdateResourceLimitCmd.java +++ b/api/src/org/apache/cloudstack/api/user/resource/command/UpdateResourceLimitCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.user.resource.command; import org.apache.log4j.Logger; diff --git a/client/tomcatconf/commands.properties.in b/client/tomcatconf/commands.properties.in index 4ea397405be..d8883c22780 100755 --- a/client/tomcatconf/commands.properties.in +++ b/client/tomcatconf/commands.properties.in @@ -46,12 +46,12 @@ listDomains=com.cloud.api.commands.ListDomainsCmd;7 listDomainChildren=com.cloud.api.commands.ListDomainChildrenCmd;7 ####Cloud Identifier commands -getCloudIdentifier=org.apache.cloudstack.api.user.datacenter.command.GetCloudIdentifierCmd;15 +getCloudIdentifier=org.apache.cloudstack.api.user.resource.command.GetCloudIdentifierCmd;15 #### Limit commands -updateResourceLimit=com.cloud.api.commands.UpdateResourceLimitCmd;7 -updateResourceCount=com.cloud.api.commands.UpdateResourceCountCmd;7 -listResourceLimits=com.cloud.api.commands.ListResourceLimitsCmd;15 +updateResourceLimit=org.apache.cloudstack.api.user.resource.command.UpdateResourceLimitCmd;7 +updateResourceCount=org.apache.cloudstack.api.user.resource.command.UpdateResourceCountCmd;7 +listResourceLimits=org.apache.cloudstack.api.user.resource.command.ListResourceLimitsCmd;15 #### VM commands deployVirtualMachine=org.apache.cloudstack.api.user.vm.command.DeployVMCmd;15 @@ -199,7 +199,7 @@ updateConfiguration=com.cloud.api.commands.UpdateCfgCmd;1 listConfigurations=com.cloud.api.commands.ListCfgsByCmd;1 ldapConfig=com.cloud.api.commands.LDAPConfigCmd;1 ldapRemove=com.cloud.api.commands.LDAPRemoveCmd;1 -listCapabilities=org.apache.cloudstack.api.user.datacenter.command.ListCapabilitiesCmd;15 +listCapabilities=org.apache.cloudstack.api.user.resource.command.ListCapabilitiesCmd;15 #### pod commands createPod=com.cloud.api.commands.CreatePodCmd;1 diff --git a/server/src/com/cloud/server/ManagementServerImpl.java b/server/src/com/cloud/server/ManagementServerImpl.java index bd95adbb9ec..238d9b19886 100755 --- a/server/src/com/cloud/server/ManagementServerImpl.java +++ b/server/src/com/cloud/server/ManagementServerImpl.java @@ -42,7 +42,7 @@ import java.util.concurrent.TimeUnit; import javax.crypto.Mac; import javax.crypto.spec.SecretKeySpec; -import org.apache.cloudstack.api.user.datacenter.command.ListCapabilitiesCmd; +import org.apache.cloudstack.api.user.resource.command.ListCapabilitiesCmd; import org.apache.cloudstack.api.user.guest.command.ListGuestOsCategoriesCmd; import org.apache.cloudstack.api.user.guest.command.ListGuestOsCmd; import org.apache.cloudstack.api.user.iso.command.ListIsosCmd; From 5cd1f4b6c2f2842b9978e49de2ae6c46bff87e52 Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Tue, 4 Dec 2012 11:14:06 -0800 Subject: [PATCH 033/421] api_refactor: ip address apis refactoring Signed-off-by: Rohit Yadav --- api/src/com/cloud/server/ManagementService.java | 2 +- .../api/user/address/command}/AssociateIPAddrCmd.java | 2 +- .../api/user/address/command}/DisassociateIPAddrCmd.java | 2 +- .../api/user/address/command}/ListPublicIpAddressesCmd.java | 2 +- client/tomcatconf/commands.properties.in | 6 +++--- server/src/com/cloud/server/ManagementServerImpl.java | 2 +- 6 files changed, 8 insertions(+), 8 deletions(-) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/user/address/command}/AssociateIPAddrCmd.java (99%) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/user/address/command}/DisassociateIPAddrCmd.java (98%) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/user/address/command}/ListPublicIpAddressesCmd.java (99%) diff --git a/api/src/com/cloud/server/ManagementService.java b/api/src/com/cloud/server/ManagementService.java index 37560b5e21a..52ba29c994e 100755 --- a/api/src/com/cloud/server/ManagementService.java +++ b/api/src/com/cloud/server/ManagementService.java @@ -24,6 +24,7 @@ import java.util.Set; import com.cloud.alert.Alert; import org.apache.cloudstack.api.ServerApiException; +import org.apache.cloudstack.api.user.address.command.ListPublicIpAddressesCmd; import org.apache.cloudstack.api.user.resource.command.ListCapabilitiesCmd; import org.apache.cloudstack.api.user.guest.command.ListGuestOsCmd; import org.apache.cloudstack.api.user.offering.command.ListDiskOfferingsCmd; @@ -45,7 +46,6 @@ import org.apache.cloudstack.api.user.guest.command.ListGuestOsCategoriesCmd; import com.cloud.api.commands.ListHostsCmd; import org.apache.cloudstack.api.user.iso.command.ListIsosCmd; import com.cloud.api.commands.ListPodsByCmd; -import com.cloud.api.commands.ListPublicIpAddressesCmd; import com.cloud.api.commands.ListRoutersCmd; import org.apache.cloudstack.api.user.ssh.command.ListSSHKeyPairsCmd; import com.cloud.api.commands.ListStoragePoolsCmd; diff --git a/api/src/com/cloud/api/commands/AssociateIPAddrCmd.java b/api/src/org/apache/cloudstack/api/user/address/command/AssociateIPAddrCmd.java similarity index 99% rename from api/src/com/cloud/api/commands/AssociateIPAddrCmd.java rename to api/src/org/apache/cloudstack/api/user/address/command/AssociateIPAddrCmd.java index 7057cbc0348..ca98a4bc6bc 100644 --- a/api/src/com/cloud/api/commands/AssociateIPAddrCmd.java +++ b/api/src/org/apache/cloudstack/api/user/address/command/AssociateIPAddrCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.user.address.command; import java.util.List; diff --git a/api/src/com/cloud/api/commands/DisassociateIPAddrCmd.java b/api/src/org/apache/cloudstack/api/user/address/command/DisassociateIPAddrCmd.java similarity index 98% rename from api/src/com/cloud/api/commands/DisassociateIPAddrCmd.java rename to api/src/org/apache/cloudstack/api/user/address/command/DisassociateIPAddrCmd.java index cbf3d7a63dc..265b296747a 100644 --- a/api/src/com/cloud/api/commands/DisassociateIPAddrCmd.java +++ b/api/src/org/apache/cloudstack/api/user/address/command/DisassociateIPAddrCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.user.address.command; import org.apache.log4j.Logger; diff --git a/api/src/com/cloud/api/commands/ListPublicIpAddressesCmd.java b/api/src/org/apache/cloudstack/api/user/address/command/ListPublicIpAddressesCmd.java similarity index 99% rename from api/src/com/cloud/api/commands/ListPublicIpAddressesCmd.java rename to api/src/org/apache/cloudstack/api/user/address/command/ListPublicIpAddressesCmd.java index a310129e427..85201f8da31 100644 --- a/api/src/com/cloud/api/commands/ListPublicIpAddressesCmd.java +++ b/api/src/org/apache/cloudstack/api/user/address/command/ListPublicIpAddressesCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.user.address.command; import java.util.ArrayList; import java.util.List; diff --git a/client/tomcatconf/commands.properties.in b/client/tomcatconf/commands.properties.in index d8883c22780..8a3a010ccfe 100755 --- a/client/tomcatconf/commands.properties.in +++ b/client/tomcatconf/commands.properties.in @@ -124,9 +124,9 @@ deleteVlanIpRange=com.cloud.api.commands.DeleteVlanIpRangeCmd;1 listVlanIpRanges=com.cloud.api.commands.ListVlanIpRangesCmd;1 #### address commands -associateIpAddress=com.cloud.api.commands.AssociateIPAddrCmd;15 -disassociateIpAddress=com.cloud.api.commands.DisassociateIPAddrCmd;15 -listPublicIpAddresses=com.cloud.api.commands.ListPublicIpAddressesCmd;15 +associateIpAddress=org.apache.cloudstack.api.user.address.command.AssociateIPAddrCmd;15 +disassociateIpAddress=org.apache.cloudstack.api.user.address.command.DisassociateIPAddrCmd;15 +listPublicIpAddresses=org.apache.cloudstack.api.user.address.command.ListPublicIpAddressesCmd;15 #### firewall commands listPortForwardingRules=com.cloud.api.commands.ListPortForwardingRulesCmd;15 diff --git a/server/src/com/cloud/server/ManagementServerImpl.java b/server/src/com/cloud/server/ManagementServerImpl.java index 238d9b19886..6b3deceb674 100755 --- a/server/src/com/cloud/server/ManagementServerImpl.java +++ b/server/src/com/cloud/server/ManagementServerImpl.java @@ -81,7 +81,7 @@ import com.cloud.api.commands.ListClustersCmd; import org.apache.cloudstack.api.user.event.command.ListEventsCmd; import com.cloud.api.commands.ListHostsCmd; import com.cloud.api.commands.ListPodsByCmd; -import com.cloud.api.commands.ListPublicIpAddressesCmd; +import org.apache.cloudstack.api.user.address.command.ListPublicIpAddressesCmd; import com.cloud.api.commands.ListRoutersCmd; import org.apache.cloudstack.api.user.ssh.command.ListSSHKeyPairsCmd; import com.cloud.api.commands.ListStoragePoolsCmd; From 25b5aadb4e313436e1b5e604ee1c236c28b21a64 Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Tue, 4 Dec 2012 11:17:06 -0800 Subject: [PATCH 034/421] api_refactor: refactor firewall apis Signed-off-by: Rohit Yadav --- .../com/cloud/network/firewall/FirewallService.java | 2 +- api/src/com/cloud/network/rules/RulesService.java | 2 +- .../firewall/command}/CreateFirewallRuleCmd.java | 2 +- .../command}/CreatePortForwardingRuleCmd.java | 2 +- .../firewall/command}/DeleteFirewallRuleCmd.java | 2 +- .../command}/DeletePortForwardingRuleCmd.java | 2 +- .../user/firewall/command}/ListFirewallRulesCmd.java | 2 +- .../command}/ListPortForwardingRulesCmd.java | 2 +- .../api/user/nat/command/DisableStaticNatCmd.java | 2 +- client/tomcatconf/commands.properties.in | 12 ++++++------ .../cloud/network/firewall/FirewallManagerImpl.java | 2 +- .../com/cloud/network/rules/RulesManagerImpl.java | 2 +- 12 files changed, 17 insertions(+), 17 deletions(-) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/user/firewall/command}/CreateFirewallRuleCmd.java (99%) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/user/firewall/command}/CreatePortForwardingRuleCmd.java (99%) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/user/firewall/command}/DeleteFirewallRuleCmd.java (98%) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/user/firewall/command}/DeletePortForwardingRuleCmd.java (98%) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/user/firewall/command}/ListFirewallRulesCmd.java (98%) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/user/firewall/command}/ListPortForwardingRulesCmd.java (98%) diff --git a/api/src/com/cloud/network/firewall/FirewallService.java b/api/src/com/cloud/network/firewall/FirewallService.java index bb353136c53..066d5fb6004 100644 --- a/api/src/com/cloud/network/firewall/FirewallService.java +++ b/api/src/com/cloud/network/firewall/FirewallService.java @@ -19,7 +19,7 @@ package com.cloud.network.firewall; import java.util.List; -import com.cloud.api.commands.ListFirewallRulesCmd; +import org.apache.cloudstack.api.user.firewall.command.ListFirewallRulesCmd; import com.cloud.exception.NetworkRuleConflictException; import com.cloud.exception.ResourceUnavailableException; import com.cloud.network.rules.FirewallRule; diff --git a/api/src/com/cloud/network/rules/RulesService.java b/api/src/com/cloud/network/rules/RulesService.java index ddebcd01333..613929ba003 100644 --- a/api/src/com/cloud/network/rules/RulesService.java +++ b/api/src/com/cloud/network/rules/RulesService.java @@ -18,7 +18,7 @@ package com.cloud.network.rules; import java.util.List; -import com.cloud.api.commands.ListPortForwardingRulesCmd; +import org.apache.cloudstack.api.user.firewall.command.ListPortForwardingRulesCmd; import com.cloud.exception.InsufficientAddressCapacityException; import com.cloud.exception.NetworkRuleConflictException; import com.cloud.exception.ResourceUnavailableException; diff --git a/api/src/com/cloud/api/commands/CreateFirewallRuleCmd.java b/api/src/org/apache/cloudstack/api/user/firewall/command/CreateFirewallRuleCmd.java similarity index 99% rename from api/src/com/cloud/api/commands/CreateFirewallRuleCmd.java rename to api/src/org/apache/cloudstack/api/user/firewall/command/CreateFirewallRuleCmd.java index 877fd7e970c..17f2d2a3dea 100644 --- a/api/src/com/cloud/api/commands/CreateFirewallRuleCmd.java +++ b/api/src/org/apache/cloudstack/api/user/firewall/command/CreateFirewallRuleCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.user.firewall.command; import java.util.ArrayList; import java.util.List; diff --git a/api/src/com/cloud/api/commands/CreatePortForwardingRuleCmd.java b/api/src/org/apache/cloudstack/api/user/firewall/command/CreatePortForwardingRuleCmd.java similarity index 99% rename from api/src/com/cloud/api/commands/CreatePortForwardingRuleCmd.java rename to api/src/org/apache/cloudstack/api/user/firewall/command/CreatePortForwardingRuleCmd.java index 3579da201ae..df0f4419a21 100644 --- a/api/src/com/cloud/api/commands/CreatePortForwardingRuleCmd.java +++ b/api/src/org/apache/cloudstack/api/user/firewall/command/CreatePortForwardingRuleCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.user.firewall.command; import java.util.List; diff --git a/api/src/com/cloud/api/commands/DeleteFirewallRuleCmd.java b/api/src/org/apache/cloudstack/api/user/firewall/command/DeleteFirewallRuleCmd.java similarity index 98% rename from api/src/com/cloud/api/commands/DeleteFirewallRuleCmd.java rename to api/src/org/apache/cloudstack/api/user/firewall/command/DeleteFirewallRuleCmd.java index 7ce390f9b15..7d7ff58bb18 100644 --- a/api/src/com/cloud/api/commands/DeleteFirewallRuleCmd.java +++ b/api/src/org/apache/cloudstack/api/user/firewall/command/DeleteFirewallRuleCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.user.firewall.command; import org.apache.log4j.Logger; diff --git a/api/src/com/cloud/api/commands/DeletePortForwardingRuleCmd.java b/api/src/org/apache/cloudstack/api/user/firewall/command/DeletePortForwardingRuleCmd.java similarity index 98% rename from api/src/com/cloud/api/commands/DeletePortForwardingRuleCmd.java rename to api/src/org/apache/cloudstack/api/user/firewall/command/DeletePortForwardingRuleCmd.java index 0ca9435628b..880b87bf379 100644 --- a/api/src/com/cloud/api/commands/DeletePortForwardingRuleCmd.java +++ b/api/src/org/apache/cloudstack/api/user/firewall/command/DeletePortForwardingRuleCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.user.firewall.command; import org.apache.log4j.Logger; diff --git a/api/src/com/cloud/api/commands/ListFirewallRulesCmd.java b/api/src/org/apache/cloudstack/api/user/firewall/command/ListFirewallRulesCmd.java similarity index 98% rename from api/src/com/cloud/api/commands/ListFirewallRulesCmd.java rename to api/src/org/apache/cloudstack/api/user/firewall/command/ListFirewallRulesCmd.java index 027a6b9e3ab..2317a9fb169 100644 --- a/api/src/com/cloud/api/commands/ListFirewallRulesCmd.java +++ b/api/src/org/apache/cloudstack/api/user/firewall/command/ListFirewallRulesCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.user.firewall.command; import java.util.ArrayList; import java.util.List; diff --git a/api/src/com/cloud/api/commands/ListPortForwardingRulesCmd.java b/api/src/org/apache/cloudstack/api/user/firewall/command/ListPortForwardingRulesCmd.java similarity index 98% rename from api/src/com/cloud/api/commands/ListPortForwardingRulesCmd.java rename to api/src/org/apache/cloudstack/api/user/firewall/command/ListPortForwardingRulesCmd.java index 37bbd14060e..b45fc350738 100644 --- a/api/src/com/cloud/api/commands/ListPortForwardingRulesCmd.java +++ b/api/src/org/apache/cloudstack/api/user/firewall/command/ListPortForwardingRulesCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.user.firewall.command; import java.util.ArrayList; import java.util.List; diff --git a/api/src/org/apache/cloudstack/api/user/nat/command/DisableStaticNatCmd.java b/api/src/org/apache/cloudstack/api/user/nat/command/DisableStaticNatCmd.java index 912ad997980..e228e713644 100644 --- a/api/src/org/apache/cloudstack/api/user/nat/command/DisableStaticNatCmd.java +++ b/api/src/org/apache/cloudstack/api/user/nat/command/DisableStaticNatCmd.java @@ -16,7 +16,7 @@ // under the License. package org.apache.cloudstack.api.user.nat.command; -import com.cloud.api.commands.DeletePortForwardingRuleCmd; +import org.apache.cloudstack.api.user.firewall.command.DeletePortForwardingRuleCmd; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; diff --git a/client/tomcatconf/commands.properties.in b/client/tomcatconf/commands.properties.in index 8a3a010ccfe..9dbad2bf3ae 100755 --- a/client/tomcatconf/commands.properties.in +++ b/client/tomcatconf/commands.properties.in @@ -129,9 +129,9 @@ disassociateIpAddress=org.apache.cloudstack.api.user.address.command.Disassociat listPublicIpAddresses=org.apache.cloudstack.api.user.address.command.ListPublicIpAddressesCmd;15 #### firewall commands -listPortForwardingRules=com.cloud.api.commands.ListPortForwardingRulesCmd;15 -createPortForwardingRule=com.cloud.api.commands.CreatePortForwardingRuleCmd;15 -deletePortForwardingRule=com.cloud.api.commands.DeletePortForwardingRuleCmd;15 +listPortForwardingRules=org.apache.cloudstack.api.user.firewall.command.ListPortForwardingRulesCmd;15 +createPortForwardingRule=org.apache.cloudstack.api.user.firewall.command.CreatePortForwardingRuleCmd;15 +deletePortForwardingRule=org.apache.cloudstack.api.user.firewall.command.DeletePortForwardingRuleCmd;15 #### updatePortForwardingRule=com.cloud.api.commands.UpdatePortForwardingRuleCmd;15 #### NAT commands @@ -335,9 +335,9 @@ updateProjectInvitation=org.apache.cloudstack.api.user.project.command.UpdatePro deleteProjectInvitation=org.apache.cloudstack.api.user.project.command.DeleteProjectInvitationCmd;15 #### -createFirewallRule=com.cloud.api.commands.CreateFirewallRuleCmd;15 -deleteFirewallRule=com.cloud.api.commands.DeleteFirewallRuleCmd;15 -listFirewallRules=com.cloud.api.commands.ListFirewallRulesCmd;15 +createFirewallRule=org.apache.cloudstack.api.user.firewall.command.CreateFirewallRuleCmd;15 +deleteFirewallRule=org.apache.cloudstack.api.user.firewall.command.DeleteFirewallRuleCmd;15 +listFirewallRules=org.apache.cloudstack.api.user.firewall.command.ListFirewallRulesCmd;15 #### hypervisor capabilities commands updateHypervisorCapabilities=com.cloud.api.commands.UpdateHypervisorCapabilitiesCmd;1 diff --git a/server/src/com/cloud/network/firewall/FirewallManagerImpl.java b/server/src/com/cloud/network/firewall/FirewallManagerImpl.java index 9511a9e0566..f7ee1c7e719 100644 --- a/server/src/com/cloud/network/firewall/FirewallManagerImpl.java +++ b/server/src/com/cloud/network/firewall/FirewallManagerImpl.java @@ -26,9 +26,9 @@ import java.util.Set; import javax.ejb.Local; import javax.naming.ConfigurationException; +import org.apache.cloudstack.api.user.firewall.command.ListFirewallRulesCmd; import org.apache.log4j.Logger; -import com.cloud.api.commands.ListFirewallRulesCmd; import com.cloud.configuration.Config; import com.cloud.configuration.dao.ConfigurationDao; import com.cloud.domain.dao.DomainDao; diff --git a/server/src/com/cloud/network/rules/RulesManagerImpl.java b/server/src/com/cloud/network/rules/RulesManagerImpl.java index 8e44e82c28d..422dae1f39c 100755 --- a/server/src/com/cloud/network/rules/RulesManagerImpl.java +++ b/server/src/com/cloud/network/rules/RulesManagerImpl.java @@ -27,7 +27,7 @@ import javax.naming.ConfigurationException; import org.apache.log4j.Logger; -import com.cloud.api.commands.ListPortForwardingRulesCmd; +import org.apache.cloudstack.api.user.firewall.command.ListPortForwardingRulesCmd; import com.cloud.configuration.ConfigurationManager; import com.cloud.domain.dao.DomainDao; import com.cloud.event.ActionEvent; From 8773fc2a55ee842594130d7fa066968f80963929 Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Tue, 4 Dec 2012 11:20:48 -0800 Subject: [PATCH 035/421] api_refactor: refactor volume apis Signed-off-by: Rohit Yadav --- api/src/com/cloud/server/ManagementService.java | 2 +- api/src/com/cloud/storage/StorageService.java | 6 +++--- api/src/com/cloud/vm/UserVmService.java | 4 ++-- .../user/volume/command}/AttachVolumeCmd.java | 2 +- .../user/volume/command}/CreateVolumeCmd.java | 2 +- .../user/volume/command}/DeleteVolumeCmd.java | 2 +- .../user/volume/command}/DetachVolumeCmd.java | 2 +- .../user/volume/command}/ExtractVolumeCmd.java | 2 +- .../api/user/volume/command}/ListVolumesCmd.java | 2 +- .../user/volume/command}/MigrateVolumeCmd.java | 2 +- .../user/volume/command}/UploadVolumeCmd.java | 2 +- client/tomcatconf/commands.properties.in | 16 ++++++++-------- .../cloud/baremetal/BareMetalVmManagerImpl.java | 4 ++-- .../com/cloud/server/ManagementServerImpl.java | 2 +- .../com/cloud/storage/StorageManagerImpl.java | 6 +++--- .../com/cloud/storage/upload/UploadListener.java | 2 +- server/src/com/cloud/vm/UserVmManagerImpl.java | 4 ++-- .../test/com/cloud/vm/MockUserVmManagerImpl.java | 4 ++-- 18 files changed, 33 insertions(+), 33 deletions(-) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/user/volume/command}/AttachVolumeCmd.java (98%) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/user/volume/command}/CreateVolumeCmd.java (99%) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/user/volume/command}/DeleteVolumeCmd.java (98%) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/user/volume/command}/DetachVolumeCmd.java (98%) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/user/volume/command}/ExtractVolumeCmd.java (99%) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/user/volume/command}/ListVolumesCmd.java (98%) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/user/volume/command}/MigrateVolumeCmd.java (98%) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/user/volume/command}/UploadVolumeCmd.java (99%) diff --git a/api/src/com/cloud/server/ManagementService.java b/api/src/com/cloud/server/ManagementService.java index 52ba29c994e..e2bc4844d4e 100755 --- a/api/src/com/cloud/server/ManagementService.java +++ b/api/src/com/cloud/server/ManagementService.java @@ -32,7 +32,7 @@ import org.apache.cloudstack.api.user.offering.command.ListServiceOfferingsCmd; import org.apache.cloudstack.api.user.ssh.command.CreateSSHKeyPairCmd; import org.apache.cloudstack.api.user.ssh.command.DeleteSSHKeyPairCmd; import com.cloud.api.commands.DestroySystemVmCmd; -import com.cloud.api.commands.ExtractVolumeCmd; +import org.apache.cloudstack.api.user.volume.command.ExtractVolumeCmd; import org.apache.cloudstack.api.user.template.command.ListTemplatesCmd; import org.apache.cloudstack.api.user.template.command.UpdateTemplateCmd; import org.apache.cloudstack.api.user.vm.command.GetVMPasswordCmd; diff --git a/api/src/com/cloud/storage/StorageService.java b/api/src/com/cloud/storage/StorageService.java index b05bc15441a..9197bf24b59 100644 --- a/api/src/com/cloud/storage/StorageService.java +++ b/api/src/com/cloud/storage/StorageService.java @@ -21,11 +21,11 @@ import java.util.List; import com.cloud.api.commands.CancelPrimaryStorageMaintenanceCmd; import com.cloud.api.commands.CreateStoragePoolCmd; -import com.cloud.api.commands.CreateVolumeCmd; +import org.apache.cloudstack.api.user.volume.command.CreateVolumeCmd; import com.cloud.api.commands.DeletePoolCmd; -import com.cloud.api.commands.ListVolumesCmd; +import org.apache.cloudstack.api.user.volume.command.ListVolumesCmd; import com.cloud.api.commands.UpdateStoragePoolCmd; -import com.cloud.api.commands.UploadVolumeCmd; +import org.apache.cloudstack.api.user.volume.command.UploadVolumeCmd; import com.cloud.exception.ConcurrentOperationException; import com.cloud.exception.InsufficientCapacityException; import com.cloud.exception.PermissionDeniedException; diff --git a/api/src/com/cloud/vm/UserVmService.java b/api/src/com/cloud/vm/UserVmService.java index 8c897d3f241..04fa6007f09 100755 --- a/api/src/com/cloud/vm/UserVmService.java +++ b/api/src/com/cloud/vm/UserVmService.java @@ -22,13 +22,13 @@ import java.util.Map; import javax.naming.InsufficientResourcesException; import org.apache.cloudstack.api.admin.vm.command.AssignVMCmd; -import com.cloud.api.commands.AttachVolumeCmd; +import org.apache.cloudstack.api.user.volume.command.AttachVolumeCmd; import org.apache.cloudstack.api.user.template.command.CreateTemplateCmd; import org.apache.cloudstack.api.user.vmgroup.command.CreateVMGroupCmd; import org.apache.cloudstack.api.user.vmgroup.command.DeleteVMGroupCmd; import org.apache.cloudstack.api.user.vm.command.DeployVMCmd; import org.apache.cloudstack.api.user.vm.command.DestroyVMCmd; -import com.cloud.api.commands.DetachVolumeCmd; +import org.apache.cloudstack.api.user.volume.command.DetachVolumeCmd; import org.apache.cloudstack.api.user.vm.command.ListVMsCmd; import org.apache.cloudstack.api.user.vm.command.RebootVMCmd; import org.apache.cloudstack.api.admin.vm.command.RecoverVMCmd; diff --git a/api/src/com/cloud/api/commands/AttachVolumeCmd.java b/api/src/org/apache/cloudstack/api/user/volume/command/AttachVolumeCmd.java similarity index 98% rename from api/src/com/cloud/api/commands/AttachVolumeCmd.java rename to api/src/org/apache/cloudstack/api/user/volume/command/AttachVolumeCmd.java index 752935b53df..5dcd9168fbe 100755 --- a/api/src/com/cloud/api/commands/AttachVolumeCmd.java +++ b/api/src/org/apache/cloudstack/api/user/volume/command/AttachVolumeCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.user.volume.command; import org.apache.log4j.Logger; diff --git a/api/src/com/cloud/api/commands/CreateVolumeCmd.java b/api/src/org/apache/cloudstack/api/user/volume/command/CreateVolumeCmd.java similarity index 99% rename from api/src/com/cloud/api/commands/CreateVolumeCmd.java rename to api/src/org/apache/cloudstack/api/user/volume/command/CreateVolumeCmd.java index 86e10ddc3e0..acc4598c4cd 100644 --- a/api/src/com/cloud/api/commands/CreateVolumeCmd.java +++ b/api/src/org/apache/cloudstack/api/user/volume/command/CreateVolumeCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.user.volume.command; import org.apache.log4j.Logger; diff --git a/api/src/com/cloud/api/commands/DeleteVolumeCmd.java b/api/src/org/apache/cloudstack/api/user/volume/command/DeleteVolumeCmd.java similarity index 98% rename from api/src/com/cloud/api/commands/DeleteVolumeCmd.java rename to api/src/org/apache/cloudstack/api/user/volume/command/DeleteVolumeCmd.java index 7692cae1e2d..d6e44c39d98 100644 --- a/api/src/com/cloud/api/commands/DeleteVolumeCmd.java +++ b/api/src/org/apache/cloudstack/api/user/volume/command/DeleteVolumeCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.user.volume.command; import org.apache.log4j.Logger; diff --git a/api/src/com/cloud/api/commands/DetachVolumeCmd.java b/api/src/org/apache/cloudstack/api/user/volume/command/DetachVolumeCmd.java similarity index 98% rename from api/src/com/cloud/api/commands/DetachVolumeCmd.java rename to api/src/org/apache/cloudstack/api/user/volume/command/DetachVolumeCmd.java index 377bc0e7f97..03ffe14fdb5 100755 --- a/api/src/com/cloud/api/commands/DetachVolumeCmd.java +++ b/api/src/org/apache/cloudstack/api/user/volume/command/DetachVolumeCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.user.volume.command; import org.apache.log4j.Logger; diff --git a/api/src/com/cloud/api/commands/ExtractVolumeCmd.java b/api/src/org/apache/cloudstack/api/user/volume/command/ExtractVolumeCmd.java similarity index 99% rename from api/src/com/cloud/api/commands/ExtractVolumeCmd.java rename to api/src/org/apache/cloudstack/api/user/volume/command/ExtractVolumeCmd.java index 4de217508c3..469b4861391 100755 --- a/api/src/com/cloud/api/commands/ExtractVolumeCmd.java +++ b/api/src/org/apache/cloudstack/api/user/volume/command/ExtractVolumeCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.user.volume.command; import java.net.URISyntaxException; diff --git a/api/src/com/cloud/api/commands/ListVolumesCmd.java b/api/src/org/apache/cloudstack/api/user/volume/command/ListVolumesCmd.java similarity index 98% rename from api/src/com/cloud/api/commands/ListVolumesCmd.java rename to api/src/org/apache/cloudstack/api/user/volume/command/ListVolumesCmd.java index fc1f8a10949..1d6aac8c297 100755 --- a/api/src/com/cloud/api/commands/ListVolumesCmd.java +++ b/api/src/org/apache/cloudstack/api/user/volume/command/ListVolumesCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.user.volume.command; import java.util.ArrayList; import java.util.List; diff --git a/api/src/com/cloud/api/commands/MigrateVolumeCmd.java b/api/src/org/apache/cloudstack/api/user/volume/command/MigrateVolumeCmd.java similarity index 98% rename from api/src/com/cloud/api/commands/MigrateVolumeCmd.java rename to api/src/org/apache/cloudstack/api/user/volume/command/MigrateVolumeCmd.java index 7ad8448c997..947e89a09e7 100644 --- a/api/src/com/cloud/api/commands/MigrateVolumeCmd.java +++ b/api/src/org/apache/cloudstack/api/user/volume/command/MigrateVolumeCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.user.volume.command; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseAsyncCmd; diff --git a/api/src/com/cloud/api/commands/UploadVolumeCmd.java b/api/src/org/apache/cloudstack/api/user/volume/command/UploadVolumeCmd.java similarity index 99% rename from api/src/com/cloud/api/commands/UploadVolumeCmd.java rename to api/src/org/apache/cloudstack/api/user/volume/command/UploadVolumeCmd.java index 600dfa06b44..164a4bb7f85 100755 --- a/api/src/com/cloud/api/commands/UploadVolumeCmd.java +++ b/api/src/org/apache/cloudstack/api/user/volume/command/UploadVolumeCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.user.volume.command; import org.apache.log4j.Logger; diff --git a/client/tomcatconf/commands.properties.in b/client/tomcatconf/commands.properties.in index 9dbad2bf3ae..14c79db7e16 100755 --- a/client/tomcatconf/commands.properties.in +++ b/client/tomcatconf/commands.properties.in @@ -242,14 +242,14 @@ addSecondaryStorage=com.cloud.api.commands.AddSecondaryStorageCmd;1 updateHostPassword=com.cloud.api.commands.UpdateHostPasswordCmd;1 #### volume commands -attachVolume=com.cloud.api.commands.AttachVolumeCmd;15 -uploadVolume=com.cloud.api.commands.UploadVolumeCmd;15 -detachVolume=com.cloud.api.commands.DetachVolumeCmd;15 -createVolume=com.cloud.api.commands.CreateVolumeCmd;15 -deleteVolume=com.cloud.api.commands.DeleteVolumeCmd;15 -listVolumes=com.cloud.api.commands.ListVolumesCmd;15 -extractVolume=com.cloud.api.commands.ExtractVolumeCmd;15 -migrateVolume=com.cloud.api.commands.MigrateVolumeCmd;15 +attachVolume=org.apache.cloudstack.api.user.volume.command.AttachVolumeCmd;15 +uploadVolume=org.apache.cloudstack.api.user.volume.command.UploadVolumeCmd;15 +detachVolume=org.apache.cloudstack.api.user.volume.command.DetachVolumeCmd;15 +createVolume=org.apache.cloudstack.api.user.volume.command.CreateVolumeCmd;15 +deleteVolume=org.apache.cloudstack.api.user.volume.command.DeleteVolumeCmd;15 +listVolumes=org.apache.cloudstack.api.user.volume.command.ListVolumesCmd;15 +extractVolume=org.apache.cloudstack.api.user.volume.command.ExtractVolumeCmd;15 +migrateVolume=org.apache.cloudstack.api.user.volume.command.MigrateVolumeCmd;15 #### registration command: FIXME -- this really should be something in management server that #### generates a new key for the user and they just have to diff --git a/server/src/com/cloud/baremetal/BareMetalVmManagerImpl.java b/server/src/com/cloud/baremetal/BareMetalVmManagerImpl.java index e0ce531d7b5..b5abd82af7b 100755 --- a/server/src/com/cloud/baremetal/BareMetalVmManagerImpl.java +++ b/server/src/com/cloud/baremetal/BareMetalVmManagerImpl.java @@ -26,6 +26,8 @@ import javax.ejb.Local; import javax.naming.ConfigurationException; import org.apache.cloudstack.api.user.template.command.CreateTemplateCmd; +import org.apache.cloudstack.api.user.volume.command.AttachVolumeCmd; +import org.apache.cloudstack.api.user.volume.command.DetachVolumeCmd; import org.apache.log4j.Logger; import com.cloud.agent.api.Answer; @@ -33,9 +35,7 @@ import com.cloud.agent.api.StopAnswer; import com.cloud.agent.api.baremetal.IpmISetBootDevCommand; import com.cloud.agent.api.baremetal.IpmiBootorResetCommand; import com.cloud.agent.manager.Commands; -import com.cloud.api.commands.AttachVolumeCmd; import org.apache.cloudstack.api.user.vm.command.DeployVMCmd; -import com.cloud.api.commands.DetachVolumeCmd; import org.apache.cloudstack.api.user.vm.command.StartVMCmd; import org.apache.cloudstack.api.user.vm.command.UpgradeVMCmd; import com.cloud.baremetal.PxeServerManager.PxeServerType; diff --git a/server/src/com/cloud/server/ManagementServerImpl.java b/server/src/com/cloud/server/ManagementServerImpl.java index 6b3deceb674..f6e9207940f 100755 --- a/server/src/com/cloud/server/ManagementServerImpl.java +++ b/server/src/com/cloud/server/ManagementServerImpl.java @@ -72,7 +72,7 @@ import org.apache.cloudstack.api.ApiConstants; import com.cloud.api.ApiDBUtils; import org.apache.cloudstack.api.user.ssh.command.CreateSSHKeyPairCmd; import com.cloud.api.commands.DestroySystemVmCmd; -import com.cloud.api.commands.ExtractVolumeCmd; +import org.apache.cloudstack.api.user.volume.command.ExtractVolumeCmd; import org.apache.cloudstack.api.user.vm.command.GetVMPasswordCmd; import com.cloud.api.commands.ListAlertsCmd; import com.cloud.api.commands.ListCapacityCmd; diff --git a/server/src/com/cloud/storage/StorageManagerImpl.java b/server/src/com/cloud/storage/StorageManagerImpl.java index e252633f8e3..882e798fe9d 100755 --- a/server/src/com/cloud/storage/StorageManagerImpl.java +++ b/server/src/com/cloud/storage/StorageManagerImpl.java @@ -44,6 +44,7 @@ import java.util.concurrent.TimeUnit; import javax.ejb.Local; import javax.naming.ConfigurationException; +import org.apache.cloudstack.api.user.volume.command.CreateVolumeCmd; import org.apache.log4j.Logger; import com.cloud.agent.AgentManager; @@ -73,11 +74,10 @@ import com.cloud.alert.AlertManager; import com.cloud.api.ApiDBUtils; import com.cloud.api.commands.CancelPrimaryStorageMaintenanceCmd; import com.cloud.api.commands.CreateStoragePoolCmd; -import com.cloud.api.commands.CreateVolumeCmd; import com.cloud.api.commands.DeletePoolCmd; -import com.cloud.api.commands.ListVolumesCmd; +import org.apache.cloudstack.api.user.volume.command.ListVolumesCmd; import com.cloud.api.commands.UpdateStoragePoolCmd; -import com.cloud.api.commands.UploadVolumeCmd; +import org.apache.cloudstack.api.user.volume.command.UploadVolumeCmd; import com.cloud.async.AsyncJobManager; import com.cloud.capacity.Capacity; import com.cloud.capacity.CapacityManager; diff --git a/server/src/com/cloud/storage/upload/UploadListener.java b/server/src/com/cloud/storage/upload/UploadListener.java index aab798b49e9..35bf732c2b1 100755 --- a/server/src/com/cloud/storage/upload/UploadListener.java +++ b/server/src/com/cloud/storage/upload/UploadListener.java @@ -25,6 +25,7 @@ import java.util.Timer; import java.util.TimerTask; import org.apache.cloudstack.api.user.iso.command.ExtractIsoCmd; +import org.apache.cloudstack.api.user.volume.command.ExtractVolumeCmd; import org.apache.log4j.Level; import org.apache.log4j.Logger; @@ -40,7 +41,6 @@ import com.cloud.agent.api.storage.UploadCommand; import com.cloud.agent.api.storage.UploadProgressCommand; import com.cloud.agent.api.storage.UploadProgressCommand.RequestType; import org.apache.cloudstack.api.user.template.command.ExtractTemplateCmd; -import com.cloud.api.commands.ExtractVolumeCmd; import com.cloud.api.response.ExtractResponse; import com.cloud.async.AsyncJobManager; import com.cloud.async.AsyncJobResult; diff --git a/server/src/com/cloud/vm/UserVmManagerImpl.java b/server/src/com/cloud/vm/UserVmManagerImpl.java index c8c6b516d03..eacf7f4ce51 100755 --- a/server/src/com/cloud/vm/UserVmManagerImpl.java +++ b/server/src/com/cloud/vm/UserVmManagerImpl.java @@ -33,6 +33,8 @@ import javax.naming.ConfigurationException; import org.apache.cloudstack.api.user.template.command.CreateTemplateCmd; import org.apache.cloudstack.api.user.vmgroup.command.DeleteVMGroupCmd; +import org.apache.cloudstack.api.user.volume.command.AttachVolumeCmd; +import org.apache.cloudstack.api.user.volume.command.DetachVolumeCmd; import org.apache.commons.codec.binary.Base64; import org.apache.log4j.Logger; @@ -61,11 +63,9 @@ import com.cloud.alert.AlertManager; import com.cloud.api.ApiDBUtils; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.admin.vm.command.AssignVMCmd; -import com.cloud.api.commands.AttachVolumeCmd; import org.apache.cloudstack.api.user.vmgroup.command.CreateVMGroupCmd; import org.apache.cloudstack.api.user.vm.command.DeployVMCmd; import org.apache.cloudstack.api.user.vm.command.DestroyVMCmd; -import com.cloud.api.commands.DetachVolumeCmd; import org.apache.cloudstack.api.user.vm.command.ListVMsCmd; import org.apache.cloudstack.api.user.vm.command.RebootVMCmd; import org.apache.cloudstack.api.admin.vm.command.RecoverVMCmd; diff --git a/server/test/com/cloud/vm/MockUserVmManagerImpl.java b/server/test/com/cloud/vm/MockUserVmManagerImpl.java index 4573948bc7f..71e38715158 100644 --- a/server/test/com/cloud/vm/MockUserVmManagerImpl.java +++ b/server/test/com/cloud/vm/MockUserVmManagerImpl.java @@ -29,13 +29,13 @@ import com.cloud.agent.api.to.NicTO; import com.cloud.agent.api.to.VirtualMachineTO; import com.cloud.agent.manager.Commands; import org.apache.cloudstack.api.admin.vm.command.AssignVMCmd; -import com.cloud.api.commands.AttachVolumeCmd; +import org.apache.cloudstack.api.user.volume.command.AttachVolumeCmd; import org.apache.cloudstack.api.user.template.command.CreateTemplateCmd; import org.apache.cloudstack.api.user.vmgroup.command.CreateVMGroupCmd; import org.apache.cloudstack.api.user.vmgroup.command.DeleteVMGroupCmd; import org.apache.cloudstack.api.user.vm.command.DeployVMCmd; import org.apache.cloudstack.api.user.vm.command.DestroyVMCmd; -import com.cloud.api.commands.DetachVolumeCmd; +import org.apache.cloudstack.api.user.volume.command.DetachVolumeCmd; import org.apache.cloudstack.api.user.vm.command.ListVMsCmd; import org.apache.cloudstack.api.user.vm.command.RebootVMCmd; import org.apache.cloudstack.api.admin.vm.command.RecoverVMCmd; From 456b852c0cd4d8fbd2d5dcd02181bcb7828df84e Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Tue, 4 Dec 2012 11:25:20 -0800 Subject: [PATCH 036/421] api_refactor: refactor loadbalancer apis Signed-off-by: Rohit Yadav --- .../network/lb/LoadBalancingRulesService.java | 10 ++++------ .../command}/AssignToLoadBalancerRuleCmd.java | 2 +- .../command}/CreateLBStickinessPolicyCmd.java | 2 +- .../command}/CreateLoadBalancerRuleCmd.java | 2 +- .../command}/DeleteLBStickinessPolicyCmd.java | 2 +- .../command}/DeleteLoadBalancerRuleCmd.java | 2 +- .../command}/ListLBStickinessPoliciesCmd.java | 2 +- .../ListLoadBalancerRuleInstancesCmd.java | 2 +- .../lb/command}/ListLoadBalancerRulesCmd.java | 2 +- .../RemoveFromLoadBalancerRuleCmd.java | 2 +- .../command}/UpdateLoadBalancerRuleCmd.java | 2 +- client/tomcatconf/commands.properties.in | 20 +++++++++---------- .../lb/ElasticLoadBalancerManager.java | 2 +- .../lb/ElasticLoadBalancerManagerImpl.java | 2 +- .../network/lb/LoadBalancingRulesManager.java | 2 +- .../lb/LoadBalancingRulesManagerImpl.java | 10 ++++------ 16 files changed, 31 insertions(+), 35 deletions(-) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/user/lb/command}/AssignToLoadBalancerRuleCmd.java (98%) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/user/lb/command}/CreateLBStickinessPolicyCmd.java (99%) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/user/lb/command}/CreateLoadBalancerRuleCmd.java (99%) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/user/lb/command}/DeleteLBStickinessPolicyCmd.java (98%) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/user/lb/command}/DeleteLoadBalancerRuleCmd.java (98%) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/user/lb/command}/ListLBStickinessPoliciesCmd.java (98%) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/user/lb/command}/ListLoadBalancerRuleInstancesCmd.java (98%) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/user/lb/command}/ListLoadBalancerRulesCmd.java (98%) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/user/lb/command}/RemoveFromLoadBalancerRuleCmd.java (98%) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/user/lb/command}/UpdateLoadBalancerRuleCmd.java (98%) diff --git a/api/src/com/cloud/network/lb/LoadBalancingRulesService.java b/api/src/com/cloud/network/lb/LoadBalancingRulesService.java index c5e6b5c3f40..3aec8324486 100644 --- a/api/src/com/cloud/network/lb/LoadBalancingRulesService.java +++ b/api/src/com/cloud/network/lb/LoadBalancingRulesService.java @@ -18,12 +18,9 @@ package com.cloud.network.lb; import java.util.List; -import com.cloud.api.commands.CreateLBStickinessPolicyCmd; -import com.cloud.api.commands.CreateLoadBalancerRuleCmd; -import com.cloud.api.commands.ListLBStickinessPoliciesCmd; -import com.cloud.api.commands.ListLoadBalancerRuleInstancesCmd; -import com.cloud.api.commands.ListLoadBalancerRulesCmd; -import com.cloud.api.commands.UpdateLoadBalancerRuleCmd; +import org.apache.cloudstack.api.user.lb.command.*; +import org.apache.cloudstack.api.user.lb.command.CreateLBStickinessPolicyCmd; +import org.apache.cloudstack.api.user.lb.command.UpdateLoadBalancerRuleCmd; import com.cloud.exception.InsufficientAddressCapacityException; import com.cloud.exception.NetworkRuleConflictException; import com.cloud.exception.ResourceUnavailableException; @@ -31,6 +28,7 @@ import com.cloud.network.rules.LoadBalancer; import com.cloud.network.rules.StickinessPolicy; import com.cloud.uservm.UserVm; import com.cloud.utils.Pair; +import org.apache.cloudstack.api.user.lb.command.ListLoadBalancerRulesCmd; public interface LoadBalancingRulesService { diff --git a/api/src/com/cloud/api/commands/AssignToLoadBalancerRuleCmd.java b/api/src/org/apache/cloudstack/api/user/lb/command/AssignToLoadBalancerRuleCmd.java similarity index 98% rename from api/src/com/cloud/api/commands/AssignToLoadBalancerRuleCmd.java rename to api/src/org/apache/cloudstack/api/user/lb/command/AssignToLoadBalancerRuleCmd.java index fc99113ca45..fae88a65c26 100644 --- a/api/src/com/cloud/api/commands/AssignToLoadBalancerRuleCmd.java +++ b/api/src/org/apache/cloudstack/api/user/lb/command/AssignToLoadBalancerRuleCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.user.lb.command; import java.util.List; diff --git a/api/src/com/cloud/api/commands/CreateLBStickinessPolicyCmd.java b/api/src/org/apache/cloudstack/api/user/lb/command/CreateLBStickinessPolicyCmd.java similarity index 99% rename from api/src/com/cloud/api/commands/CreateLBStickinessPolicyCmd.java rename to api/src/org/apache/cloudstack/api/user/lb/command/CreateLBStickinessPolicyCmd.java index 2ea726e8837..866422a4e0b 100644 --- a/api/src/com/cloud/api/commands/CreateLBStickinessPolicyCmd.java +++ b/api/src/org/apache/cloudstack/api/user/lb/command/CreateLBStickinessPolicyCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.user.lb.command; import java.util.Map; diff --git a/api/src/com/cloud/api/commands/CreateLoadBalancerRuleCmd.java b/api/src/org/apache/cloudstack/api/user/lb/command/CreateLoadBalancerRuleCmd.java similarity index 99% rename from api/src/com/cloud/api/commands/CreateLoadBalancerRuleCmd.java rename to api/src/org/apache/cloudstack/api/user/lb/command/CreateLoadBalancerRuleCmd.java index 0402709a300..bacf54de5e0 100644 --- a/api/src/com/cloud/api/commands/CreateLoadBalancerRuleCmd.java +++ b/api/src/org/apache/cloudstack/api/user/lb/command/CreateLoadBalancerRuleCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.user.lb.command; import java.util.List; diff --git a/api/src/com/cloud/api/commands/DeleteLBStickinessPolicyCmd.java b/api/src/org/apache/cloudstack/api/user/lb/command/DeleteLBStickinessPolicyCmd.java similarity index 98% rename from api/src/com/cloud/api/commands/DeleteLBStickinessPolicyCmd.java rename to api/src/org/apache/cloudstack/api/user/lb/command/DeleteLBStickinessPolicyCmd.java index dd7933000ea..f68ab8c0f82 100644 --- a/api/src/com/cloud/api/commands/DeleteLBStickinessPolicyCmd.java +++ b/api/src/org/apache/cloudstack/api/user/lb/command/DeleteLBStickinessPolicyCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.user.lb.command; import org.apache.log4j.Logger; diff --git a/api/src/com/cloud/api/commands/DeleteLoadBalancerRuleCmd.java b/api/src/org/apache/cloudstack/api/user/lb/command/DeleteLoadBalancerRuleCmd.java similarity index 98% rename from api/src/com/cloud/api/commands/DeleteLoadBalancerRuleCmd.java rename to api/src/org/apache/cloudstack/api/user/lb/command/DeleteLoadBalancerRuleCmd.java index 5a00b2246c1..2bff86b9e83 100644 --- a/api/src/com/cloud/api/commands/DeleteLoadBalancerRuleCmd.java +++ b/api/src/org/apache/cloudstack/api/user/lb/command/DeleteLoadBalancerRuleCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.user.lb.command; import org.apache.log4j.Logger; diff --git a/api/src/com/cloud/api/commands/ListLBStickinessPoliciesCmd.java b/api/src/org/apache/cloudstack/api/user/lb/command/ListLBStickinessPoliciesCmd.java similarity index 98% rename from api/src/com/cloud/api/commands/ListLBStickinessPoliciesCmd.java rename to api/src/org/apache/cloudstack/api/user/lb/command/ListLBStickinessPoliciesCmd.java index 92a27bc12ba..b4a351cbc6d 100644 --- a/api/src/com/cloud/api/commands/ListLBStickinessPoliciesCmd.java +++ b/api/src/org/apache/cloudstack/api/user/lb/command/ListLBStickinessPoliciesCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.user.lb.command; import java.util.ArrayList; import java.util.List; diff --git a/api/src/com/cloud/api/commands/ListLoadBalancerRuleInstancesCmd.java b/api/src/org/apache/cloudstack/api/user/lb/command/ListLoadBalancerRuleInstancesCmd.java similarity index 98% rename from api/src/com/cloud/api/commands/ListLoadBalancerRuleInstancesCmd.java rename to api/src/org/apache/cloudstack/api/user/lb/command/ListLoadBalancerRuleInstancesCmd.java index 49f066bc277..1b6577ebd5a 100644 --- a/api/src/com/cloud/api/commands/ListLoadBalancerRuleInstancesCmd.java +++ b/api/src/org/apache/cloudstack/api/user/lb/command/ListLoadBalancerRuleInstancesCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.user.lb.command; import java.util.ArrayList; import java.util.List; diff --git a/api/src/com/cloud/api/commands/ListLoadBalancerRulesCmd.java b/api/src/org/apache/cloudstack/api/user/lb/command/ListLoadBalancerRulesCmd.java similarity index 98% rename from api/src/com/cloud/api/commands/ListLoadBalancerRulesCmd.java rename to api/src/org/apache/cloudstack/api/user/lb/command/ListLoadBalancerRulesCmd.java index c7f5e1869ad..0c1b9b0f223 100644 --- a/api/src/com/cloud/api/commands/ListLoadBalancerRulesCmd.java +++ b/api/src/org/apache/cloudstack/api/user/lb/command/ListLoadBalancerRulesCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.user.lb.command; import java.util.ArrayList; import java.util.List; diff --git a/api/src/com/cloud/api/commands/RemoveFromLoadBalancerRuleCmd.java b/api/src/org/apache/cloudstack/api/user/lb/command/RemoveFromLoadBalancerRuleCmd.java similarity index 98% rename from api/src/com/cloud/api/commands/RemoveFromLoadBalancerRuleCmd.java rename to api/src/org/apache/cloudstack/api/user/lb/command/RemoveFromLoadBalancerRuleCmd.java index 5d5d7007eb1..9aeca0281d2 100644 --- a/api/src/com/cloud/api/commands/RemoveFromLoadBalancerRuleCmd.java +++ b/api/src/org/apache/cloudstack/api/user/lb/command/RemoveFromLoadBalancerRuleCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.user.lb.command; import java.util.List; diff --git a/api/src/com/cloud/api/commands/UpdateLoadBalancerRuleCmd.java b/api/src/org/apache/cloudstack/api/user/lb/command/UpdateLoadBalancerRuleCmd.java similarity index 98% rename from api/src/com/cloud/api/commands/UpdateLoadBalancerRuleCmd.java rename to api/src/org/apache/cloudstack/api/user/lb/command/UpdateLoadBalancerRuleCmd.java index 91ed7d386ff..a738c65f9b4 100644 --- a/api/src/com/cloud/api/commands/UpdateLoadBalancerRuleCmd.java +++ b/api/src/org/apache/cloudstack/api/user/lb/command/UpdateLoadBalancerRuleCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.user.lb.command; import org.apache.log4j.Logger; diff --git a/client/tomcatconf/commands.properties.in b/client/tomcatconf/commands.properties.in index 14c79db7e16..489387722b6 100755 --- a/client/tomcatconf/commands.properties.in +++ b/client/tomcatconf/commands.properties.in @@ -142,16 +142,16 @@ listIpForwardingRules=org.apache.cloudstack.api.user.nat.command.ListIpForwardin disableStaticNat=org.apache.cloudstack.api.user.nat.command.DisableStaticNatCmd;15 #### load balancer commands -createLoadBalancerRule=com.cloud.api.commands.CreateLoadBalancerRuleCmd;15 -deleteLoadBalancerRule=com.cloud.api.commands.DeleteLoadBalancerRuleCmd;15 -removeFromLoadBalancerRule=com.cloud.api.commands.RemoveFromLoadBalancerRuleCmd;15 -assignToLoadBalancerRule=com.cloud.api.commands.AssignToLoadBalancerRuleCmd;15 -createLBStickinessPolicy=com.cloud.api.commands.CreateLBStickinessPolicyCmd;15 -deleteLBStickinessPolicy=com.cloud.api.commands.DeleteLBStickinessPolicyCmd;15 -listLoadBalancerRules=com.cloud.api.commands.ListLoadBalancerRulesCmd;15 -listLBStickinessPolicies=com.cloud.api.commands.ListLBStickinessPoliciesCmd;15 -listLoadBalancerRuleInstances=com.cloud.api.commands.ListLoadBalancerRuleInstancesCmd;15 -updateLoadBalancerRule=com.cloud.api.commands.UpdateLoadBalancerRuleCmd;15 +createLoadBalancerRule=org.apache.cloudstack.api.user.lb.command.CreateLoadBalancerRuleCmd;15 +deleteLoadBalancerRule=org.apache.cloudstack.api.user.lb.command.DeleteLoadBalancerRuleCmd;15 +removeFromLoadBalancerRule=org.apache.cloudstack.api.user.lb.command.RemoveFromLoadBalancerRuleCmd;15 +assignToLoadBalancerRule=org.apache.cloudstack.api.user.lb.command.AssignToLoadBalancerRuleCmd;15 +createLBStickinessPolicy=org.apache.cloudstack.api.user.lb.command.CreateLBStickinessPolicyCmd;15 +deleteLBStickinessPolicy=org.apache.cloudstack.api.user.lb.command.DeleteLBStickinessPolicyCmd;15 +listLoadBalancerRules=org.apache.cloudstack.api.user.lb.command.ListLoadBalancerRulesCmd;15 +listLBStickinessPolicies=org.apache.cloudstack.api.user.lb.command.ListLBStickinessPoliciesCmd;15 +listLoadBalancerRuleInstances=org.apache.cloudstack.api.user.lb.command.ListLoadBalancerRuleInstancesCmd;15 +updateLoadBalancerRule=org.apache.cloudstack.api.user.lb.command.UpdateLoadBalancerRuleCmd;15 #### autoscale commands createCounter = com.cloud.api.commands.CreateCounterCmd;1 diff --git a/plugins/network-elements/elastic-loadbalancer/src/com/cloud/network/lb/ElasticLoadBalancerManager.java b/plugins/network-elements/elastic-loadbalancer/src/com/cloud/network/lb/ElasticLoadBalancerManager.java index 0dc5b14a1a5..d4cedf647f1 100644 --- a/plugins/network-elements/elastic-loadbalancer/src/com/cloud/network/lb/ElasticLoadBalancerManager.java +++ b/plugins/network-elements/elastic-loadbalancer/src/com/cloud/network/lb/ElasticLoadBalancerManager.java @@ -18,7 +18,7 @@ package com.cloud.network.lb; import java.util.List; -import com.cloud.api.commands.CreateLoadBalancerRuleCmd; +import org.apache.cloudstack.api.user.lb.command.CreateLoadBalancerRuleCmd; import com.cloud.exception.InsufficientAddressCapacityException; import com.cloud.exception.NetworkRuleConflictException; import com.cloud.exception.ResourceUnavailableException; diff --git a/plugins/network-elements/elastic-loadbalancer/src/com/cloud/network/lb/ElasticLoadBalancerManagerImpl.java b/plugins/network-elements/elastic-loadbalancer/src/com/cloud/network/lb/ElasticLoadBalancerManagerImpl.java index 366070af21f..3ce2717e936 100644 --- a/plugins/network-elements/elastic-loadbalancer/src/com/cloud/network/lb/ElasticLoadBalancerManagerImpl.java +++ b/plugins/network-elements/elastic-loadbalancer/src/com/cloud/network/lb/ElasticLoadBalancerManagerImpl.java @@ -32,6 +32,7 @@ import java.util.concurrent.TimeUnit; import javax.ejb.Local; import javax.naming.ConfigurationException; +import org.apache.cloudstack.api.user.lb.command.CreateLoadBalancerRuleCmd; import org.apache.log4j.Logger; import com.cloud.agent.AgentManager; @@ -46,7 +47,6 @@ import com.cloud.agent.api.to.LoadBalancerTO; import com.cloud.agent.api.to.NicTO; import com.cloud.agent.api.to.VirtualMachineTO; import com.cloud.agent.manager.Commands; -import com.cloud.api.commands.CreateLoadBalancerRuleCmd; import com.cloud.configuration.Config; import com.cloud.configuration.dao.ConfigurationDao; import com.cloud.dc.DataCenter; diff --git a/server/src/com/cloud/network/lb/LoadBalancingRulesManager.java b/server/src/com/cloud/network/lb/LoadBalancingRulesManager.java index 47f1b18fdcb..c6aba418556 100644 --- a/server/src/com/cloud/network/lb/LoadBalancingRulesManager.java +++ b/server/src/com/cloud/network/lb/LoadBalancingRulesManager.java @@ -18,7 +18,7 @@ package com.cloud.network.lb; import java.util.List; -import com.cloud.api.commands.CreateLoadBalancerRuleCmd; +import org.apache.cloudstack.api.user.lb.command.CreateLoadBalancerRuleCmd; import com.cloud.exception.NetworkRuleConflictException; import com.cloud.exception.ResourceUnavailableException; import com.cloud.network.lb.LoadBalancingRule.LbDestination; diff --git a/server/src/com/cloud/network/lb/LoadBalancingRulesManagerImpl.java b/server/src/com/cloud/network/lb/LoadBalancingRulesManagerImpl.java index 6d1041a659d..7d0acfa3e2b 100755 --- a/server/src/com/cloud/network/lb/LoadBalancingRulesManagerImpl.java +++ b/server/src/com/cloud/network/lb/LoadBalancingRulesManagerImpl.java @@ -30,14 +30,12 @@ import java.util.Set; import javax.ejb.Local; import javax.naming.ConfigurationException; +import org.apache.cloudstack.api.user.lb.command.*; import org.apache.log4j.Logger; -import com.cloud.api.commands.CreateLBStickinessPolicyCmd; -import com.cloud.api.commands.CreateLoadBalancerRuleCmd; -import com.cloud.api.commands.ListLBStickinessPoliciesCmd; -import com.cloud.api.commands.ListLoadBalancerRuleInstancesCmd; -import com.cloud.api.commands.ListLoadBalancerRulesCmd; -import com.cloud.api.commands.UpdateLoadBalancerRuleCmd; +import org.apache.cloudstack.api.user.lb.command.CreateLBStickinessPolicyCmd; +import org.apache.cloudstack.api.user.lb.command.ListLoadBalancerRuleInstancesCmd; +import org.apache.cloudstack.api.user.lb.command.ListLoadBalancerRulesCmd; import com.cloud.api.response.ServiceResponse; import com.cloud.configuration.Config; import com.cloud.configuration.ConfigurationManager; From feb342ad2364a6237298e200d7eb9866cf004a2a Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Tue, 4 Dec 2012 11:30:37 -0800 Subject: [PATCH 037/421] api_refactor: refactor autoscale apis Signed-off-by: Rohit Yadav --- .../cloud/network/as/AutoScaleService.java | 20 +++++------ .../command}/CreateAutoScalePolicyCmd.java | 2 +- .../command}/CreateAutoScaleVmGroupCmd.java | 2 +- .../command}/CreateAutoScaleVmProfileCmd.java | 2 +- .../command}/CreateConditionCmd.java | 2 +- .../command}/DeleteAutoScalePolicyCmd.java | 2 +- .../command}/DeleteAutoScaleVmGroupCmd.java | 2 +- .../command}/DeleteAutoScaleVmProfileCmd.java | 2 +- .../command}/DeleteConditionCmd.java | 2 +- .../command}/DisableAutoScaleVmGroupCmd.java | 2 +- .../command}/EnableAutoScaleVmGroupCmd.java | 2 +- .../command}/ListAutoScalePoliciesCmd.java | 2 +- .../command}/ListAutoScaleVmGroupsCmd.java | 2 +- .../command}/ListAutoScaleVmProfilesCmd.java | 2 +- .../autoscale/command}/ListConditionsCmd.java | 2 +- .../autoscale/command}/ListCountersCmd.java | 2 +- .../command}/UpdateAutoScalePolicyCmd.java | 2 +- .../command}/UpdateAutoScaleVmGroupCmd.java | 2 +- .../command}/UpdateAutoScaleVmProfileCmd.java | 2 +- client/tomcatconf/commands.properties.in | 36 +++++++++---------- .../network/as/AutoScaleManagerImpl.java | 23 ++++++------ 21 files changed, 55 insertions(+), 60 deletions(-) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/user/autoscale/command}/CreateAutoScalePolicyCmd.java (99%) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/user/autoscale/command}/CreateAutoScaleVmGroupCmd.java (99%) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/user/autoscale/command}/CreateAutoScaleVmProfileCmd.java (99%) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/user/autoscale/command}/CreateConditionCmd.java (98%) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/user/autoscale/command}/DeleteAutoScalePolicyCmd.java (98%) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/user/autoscale/command}/DeleteAutoScaleVmGroupCmd.java (98%) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/user/autoscale/command}/DeleteAutoScaleVmProfileCmd.java (98%) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/user/autoscale/command}/DeleteConditionCmd.java (98%) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/user/autoscale/command}/DisableAutoScaleVmGroupCmd.java (98%) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/user/autoscale/command}/EnableAutoScaleVmGroupCmd.java (98%) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/user/autoscale/command}/ListAutoScalePoliciesCmd.java (98%) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/user/autoscale/command}/ListAutoScaleVmGroupsCmd.java (98%) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/user/autoscale/command}/ListAutoScaleVmProfilesCmd.java (98%) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/user/autoscale/command}/ListConditionsCmd.java (98%) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/user/autoscale/command}/ListCountersCmd.java (98%) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/user/autoscale/command}/UpdateAutoScalePolicyCmd.java (98%) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/user/autoscale/command}/UpdateAutoScaleVmGroupCmd.java (98%) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/user/autoscale/command}/UpdateAutoScaleVmProfileCmd.java (98%) diff --git a/api/src/com/cloud/network/as/AutoScaleService.java b/api/src/com/cloud/network/as/AutoScaleService.java index f62a4d65b0a..30848687b50 100644 --- a/api/src/com/cloud/network/as/AutoScaleService.java +++ b/api/src/com/cloud/network/as/AutoScaleService.java @@ -18,19 +18,15 @@ package com.cloud.network.as; import java.util.List; -import com.cloud.api.commands.CreateAutoScalePolicyCmd; -import com.cloud.api.commands.CreateAutoScaleVmGroupCmd; -import com.cloud.api.commands.CreateAutoScaleVmProfileCmd; -import com.cloud.api.commands.CreateConditionCmd; +import org.apache.cloudstack.api.user.autoscale.command.CreateAutoScalePolicyCmd; +import org.apache.cloudstack.api.user.autoscale.command.CreateAutoScaleVmGroupCmd; +import org.apache.cloudstack.api.user.autoscale.command.CreateAutoScaleVmProfileCmd; +import org.apache.cloudstack.api.user.autoscale.command.*; import com.cloud.api.commands.CreateCounterCmd; -import com.cloud.api.commands.ListAutoScalePoliciesCmd; -import com.cloud.api.commands.ListAutoScaleVmGroupsCmd; -import com.cloud.api.commands.ListAutoScaleVmProfilesCmd; -import com.cloud.api.commands.ListConditionsCmd; -import com.cloud.api.commands.ListCountersCmd; -import com.cloud.api.commands.UpdateAutoScalePolicyCmd; -import com.cloud.api.commands.UpdateAutoScaleVmGroupCmd; -import com.cloud.api.commands.UpdateAutoScaleVmProfileCmd; +import org.apache.cloudstack.api.user.autoscale.command.ListAutoScalePoliciesCmd; +import org.apache.cloudstack.api.user.autoscale.command.ListConditionsCmd; +import org.apache.cloudstack.api.user.autoscale.command.UpdateAutoScaleVmGroupCmd; +import org.apache.cloudstack.api.user.autoscale.command.UpdateAutoScaleVmProfileCmd; import com.cloud.exception.ResourceInUseException; import com.cloud.exception.ResourceUnavailableException; diff --git a/api/src/com/cloud/api/commands/CreateAutoScalePolicyCmd.java b/api/src/org/apache/cloudstack/api/user/autoscale/command/CreateAutoScalePolicyCmd.java similarity index 99% rename from api/src/com/cloud/api/commands/CreateAutoScalePolicyCmd.java rename to api/src/org/apache/cloudstack/api/user/autoscale/command/CreateAutoScalePolicyCmd.java index a921a9b2439..75cead97a3d 100644 --- a/api/src/com/cloud/api/commands/CreateAutoScalePolicyCmd.java +++ b/api/src/org/apache/cloudstack/api/user/autoscale/command/CreateAutoScalePolicyCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.user.autoscale.command; import java.util.List; diff --git a/api/src/com/cloud/api/commands/CreateAutoScaleVmGroupCmd.java b/api/src/org/apache/cloudstack/api/user/autoscale/command/CreateAutoScaleVmGroupCmd.java similarity index 99% rename from api/src/com/cloud/api/commands/CreateAutoScaleVmGroupCmd.java rename to api/src/org/apache/cloudstack/api/user/autoscale/command/CreateAutoScaleVmGroupCmd.java index 30a7d01eb3b..34042075bca 100644 --- a/api/src/com/cloud/api/commands/CreateAutoScaleVmGroupCmd.java +++ b/api/src/org/apache/cloudstack/api/user/autoscale/command/CreateAutoScaleVmGroupCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.user.autoscale.command; import java.util.List; diff --git a/api/src/com/cloud/api/commands/CreateAutoScaleVmProfileCmd.java b/api/src/org/apache/cloudstack/api/user/autoscale/command/CreateAutoScaleVmProfileCmd.java similarity index 99% rename from api/src/com/cloud/api/commands/CreateAutoScaleVmProfileCmd.java rename to api/src/org/apache/cloudstack/api/user/autoscale/command/CreateAutoScaleVmProfileCmd.java index 7d16973fee1..74c08dfd9f9 100644 --- a/api/src/com/cloud/api/commands/CreateAutoScaleVmProfileCmd.java +++ b/api/src/org/apache/cloudstack/api/user/autoscale/command/CreateAutoScaleVmProfileCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.user.autoscale.command; import java.util.HashMap; import java.util.Map; diff --git a/api/src/com/cloud/api/commands/CreateConditionCmd.java b/api/src/org/apache/cloudstack/api/user/autoscale/command/CreateConditionCmd.java similarity index 98% rename from api/src/com/cloud/api/commands/CreateConditionCmd.java rename to api/src/org/apache/cloudstack/api/user/autoscale/command/CreateConditionCmd.java index 3c0cf299cf5..2884f8e3a90 100644 --- a/api/src/com/cloud/api/commands/CreateConditionCmd.java +++ b/api/src/org/apache/cloudstack/api/user/autoscale/command/CreateConditionCmd.java @@ -15,7 +15,7 @@ // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.user.autoscale.command; import org.apache.log4j.Logger; diff --git a/api/src/com/cloud/api/commands/DeleteAutoScalePolicyCmd.java b/api/src/org/apache/cloudstack/api/user/autoscale/command/DeleteAutoScalePolicyCmd.java similarity index 98% rename from api/src/com/cloud/api/commands/DeleteAutoScalePolicyCmd.java rename to api/src/org/apache/cloudstack/api/user/autoscale/command/DeleteAutoScalePolicyCmd.java index 6cf22c55074..a6228b4be76 100644 --- a/api/src/com/cloud/api/commands/DeleteAutoScalePolicyCmd.java +++ b/api/src/org/apache/cloudstack/api/user/autoscale/command/DeleteAutoScalePolicyCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.user.autoscale.command; import org.apache.log4j.Logger; diff --git a/api/src/com/cloud/api/commands/DeleteAutoScaleVmGroupCmd.java b/api/src/org/apache/cloudstack/api/user/autoscale/command/DeleteAutoScaleVmGroupCmd.java similarity index 98% rename from api/src/com/cloud/api/commands/DeleteAutoScaleVmGroupCmd.java rename to api/src/org/apache/cloudstack/api/user/autoscale/command/DeleteAutoScaleVmGroupCmd.java index 852b351c70b..b1198c94c35 100644 --- a/api/src/com/cloud/api/commands/DeleteAutoScaleVmGroupCmd.java +++ b/api/src/org/apache/cloudstack/api/user/autoscale/command/DeleteAutoScaleVmGroupCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.user.autoscale.command; import org.apache.log4j.Logger; diff --git a/api/src/com/cloud/api/commands/DeleteAutoScaleVmProfileCmd.java b/api/src/org/apache/cloudstack/api/user/autoscale/command/DeleteAutoScaleVmProfileCmd.java similarity index 98% rename from api/src/com/cloud/api/commands/DeleteAutoScaleVmProfileCmd.java rename to api/src/org/apache/cloudstack/api/user/autoscale/command/DeleteAutoScaleVmProfileCmd.java index f48112b8a51..a8565dc8097 100644 --- a/api/src/com/cloud/api/commands/DeleteAutoScaleVmProfileCmd.java +++ b/api/src/org/apache/cloudstack/api/user/autoscale/command/DeleteAutoScaleVmProfileCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.user.autoscale.command; import org.apache.log4j.Logger; diff --git a/api/src/com/cloud/api/commands/DeleteConditionCmd.java b/api/src/org/apache/cloudstack/api/user/autoscale/command/DeleteConditionCmd.java similarity index 98% rename from api/src/com/cloud/api/commands/DeleteConditionCmd.java rename to api/src/org/apache/cloudstack/api/user/autoscale/command/DeleteConditionCmd.java index d09ed6dfeb0..26c23a5ef83 100644 --- a/api/src/com/cloud/api/commands/DeleteConditionCmd.java +++ b/api/src/org/apache/cloudstack/api/user/autoscale/command/DeleteConditionCmd.java @@ -15,7 +15,7 @@ // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.user.autoscale.command; import org.apache.log4j.Logger; diff --git a/api/src/com/cloud/api/commands/DisableAutoScaleVmGroupCmd.java b/api/src/org/apache/cloudstack/api/user/autoscale/command/DisableAutoScaleVmGroupCmd.java similarity index 98% rename from api/src/com/cloud/api/commands/DisableAutoScaleVmGroupCmd.java rename to api/src/org/apache/cloudstack/api/user/autoscale/command/DisableAutoScaleVmGroupCmd.java index 3ca52ed23fd..ba87c586572 100644 --- a/api/src/com/cloud/api/commands/DisableAutoScaleVmGroupCmd.java +++ b/api/src/org/apache/cloudstack/api/user/autoscale/command/DisableAutoScaleVmGroupCmd.java @@ -15,7 +15,7 @@ // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.user.autoscale.command; import org.apache.log4j.Logger; diff --git a/api/src/com/cloud/api/commands/EnableAutoScaleVmGroupCmd.java b/api/src/org/apache/cloudstack/api/user/autoscale/command/EnableAutoScaleVmGroupCmd.java similarity index 98% rename from api/src/com/cloud/api/commands/EnableAutoScaleVmGroupCmd.java rename to api/src/org/apache/cloudstack/api/user/autoscale/command/EnableAutoScaleVmGroupCmd.java index 329998ac074..93039b0b204 100644 --- a/api/src/com/cloud/api/commands/EnableAutoScaleVmGroupCmd.java +++ b/api/src/org/apache/cloudstack/api/user/autoscale/command/EnableAutoScaleVmGroupCmd.java @@ -15,7 +15,7 @@ // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.user.autoscale.command; import org.apache.log4j.Logger; diff --git a/api/src/com/cloud/api/commands/ListAutoScalePoliciesCmd.java b/api/src/org/apache/cloudstack/api/user/autoscale/command/ListAutoScalePoliciesCmd.java similarity index 98% rename from api/src/com/cloud/api/commands/ListAutoScalePoliciesCmd.java rename to api/src/org/apache/cloudstack/api/user/autoscale/command/ListAutoScalePoliciesCmd.java index 06424d07799..57db5be3933 100644 --- a/api/src/com/cloud/api/commands/ListAutoScalePoliciesCmd.java +++ b/api/src/org/apache/cloudstack/api/user/autoscale/command/ListAutoScalePoliciesCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.user.autoscale.command; import java.util.ArrayList; import java.util.List; diff --git a/api/src/com/cloud/api/commands/ListAutoScaleVmGroupsCmd.java b/api/src/org/apache/cloudstack/api/user/autoscale/command/ListAutoScaleVmGroupsCmd.java similarity index 98% rename from api/src/com/cloud/api/commands/ListAutoScaleVmGroupsCmd.java rename to api/src/org/apache/cloudstack/api/user/autoscale/command/ListAutoScaleVmGroupsCmd.java index 6cb3d567ea4..adea921c696 100644 --- a/api/src/com/cloud/api/commands/ListAutoScaleVmGroupsCmd.java +++ b/api/src/org/apache/cloudstack/api/user/autoscale/command/ListAutoScaleVmGroupsCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.user.autoscale.command; import java.util.ArrayList; import java.util.List; diff --git a/api/src/com/cloud/api/commands/ListAutoScaleVmProfilesCmd.java b/api/src/org/apache/cloudstack/api/user/autoscale/command/ListAutoScaleVmProfilesCmd.java similarity index 98% rename from api/src/com/cloud/api/commands/ListAutoScaleVmProfilesCmd.java rename to api/src/org/apache/cloudstack/api/user/autoscale/command/ListAutoScaleVmProfilesCmd.java index 987c18c8bc4..aae7376eeb1 100644 --- a/api/src/com/cloud/api/commands/ListAutoScaleVmProfilesCmd.java +++ b/api/src/org/apache/cloudstack/api/user/autoscale/command/ListAutoScaleVmProfilesCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.user.autoscale.command; import java.util.ArrayList; import java.util.List; diff --git a/api/src/com/cloud/api/commands/ListConditionsCmd.java b/api/src/org/apache/cloudstack/api/user/autoscale/command/ListConditionsCmd.java similarity index 98% rename from api/src/com/cloud/api/commands/ListConditionsCmd.java rename to api/src/org/apache/cloudstack/api/user/autoscale/command/ListConditionsCmd.java index c99d627ae6a..d5dd067ba5d 100644 --- a/api/src/com/cloud/api/commands/ListConditionsCmd.java +++ b/api/src/org/apache/cloudstack/api/user/autoscale/command/ListConditionsCmd.java @@ -15,7 +15,7 @@ // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.user.autoscale.command; import java.util.ArrayList; import java.util.List; diff --git a/api/src/com/cloud/api/commands/ListCountersCmd.java b/api/src/org/apache/cloudstack/api/user/autoscale/command/ListCountersCmd.java similarity index 98% rename from api/src/com/cloud/api/commands/ListCountersCmd.java rename to api/src/org/apache/cloudstack/api/user/autoscale/command/ListCountersCmd.java index b70a03fc481..b55aeb5d964 100644 --- a/api/src/com/cloud/api/commands/ListCountersCmd.java +++ b/api/src/org/apache/cloudstack/api/user/autoscale/command/ListCountersCmd.java @@ -15,7 +15,7 @@ // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.user.autoscale.command; import java.util.ArrayList; import java.util.List; diff --git a/api/src/com/cloud/api/commands/UpdateAutoScalePolicyCmd.java b/api/src/org/apache/cloudstack/api/user/autoscale/command/UpdateAutoScalePolicyCmd.java similarity index 98% rename from api/src/com/cloud/api/commands/UpdateAutoScalePolicyCmd.java rename to api/src/org/apache/cloudstack/api/user/autoscale/command/UpdateAutoScalePolicyCmd.java index 00781261a0c..01945f243a0 100644 --- a/api/src/com/cloud/api/commands/UpdateAutoScalePolicyCmd.java +++ b/api/src/org/apache/cloudstack/api/user/autoscale/command/UpdateAutoScalePolicyCmd.java @@ -15,7 +15,7 @@ // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.user.autoscale.command; import java.util.List; diff --git a/api/src/com/cloud/api/commands/UpdateAutoScaleVmGroupCmd.java b/api/src/org/apache/cloudstack/api/user/autoscale/command/UpdateAutoScaleVmGroupCmd.java similarity index 98% rename from api/src/com/cloud/api/commands/UpdateAutoScaleVmGroupCmd.java rename to api/src/org/apache/cloudstack/api/user/autoscale/command/UpdateAutoScaleVmGroupCmd.java index 600f9c88b03..1d7911e6d70 100644 --- a/api/src/com/cloud/api/commands/UpdateAutoScaleVmGroupCmd.java +++ b/api/src/org/apache/cloudstack/api/user/autoscale/command/UpdateAutoScaleVmGroupCmd.java @@ -15,7 +15,7 @@ // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.user.autoscale.command; import java.util.List; diff --git a/api/src/com/cloud/api/commands/UpdateAutoScaleVmProfileCmd.java b/api/src/org/apache/cloudstack/api/user/autoscale/command/UpdateAutoScaleVmProfileCmd.java similarity index 98% rename from api/src/com/cloud/api/commands/UpdateAutoScaleVmProfileCmd.java rename to api/src/org/apache/cloudstack/api/user/autoscale/command/UpdateAutoScaleVmProfileCmd.java index ff2135ab5c2..08e0667575c 100644 --- a/api/src/com/cloud/api/commands/UpdateAutoScaleVmProfileCmd.java +++ b/api/src/org/apache/cloudstack/api/user/autoscale/command/UpdateAutoScaleVmProfileCmd.java @@ -15,7 +15,7 @@ // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.user.autoscale.command; import java.util.Map; diff --git a/client/tomcatconf/commands.properties.in b/client/tomcatconf/commands.properties.in index 489387722b6..5632fe61b63 100755 --- a/client/tomcatconf/commands.properties.in +++ b/client/tomcatconf/commands.properties.in @@ -155,25 +155,25 @@ updateLoadBalancerRule=org.apache.cloudstack.api.user.lb.command.UpdateLoadBalan #### autoscale commands createCounter = com.cloud.api.commands.CreateCounterCmd;1 -createCondition = com.cloud.api.commands.CreateConditionCmd;15 -createAutoScalePolicy=com.cloud.api.commands.CreateAutoScalePolicyCmd;15 -createAutoScaleVmProfile=com.cloud.api.commands.CreateAutoScaleVmProfileCmd;15 -createAutoScaleVmGroup=com.cloud.api.commands.CreateAutoScaleVmGroupCmd;15 +createCondition = org.apache.cloudstack.api.user.autoscale.command.CreateConditionCmd;15 +createAutoScalePolicy=org.apache.cloudstack.api.user.autoscale.command.CreateAutoScalePolicyCmd;15 +createAutoScaleVmProfile=org.apache.cloudstack.api.user.autoscale.command.CreateAutoScaleVmProfileCmd;15 +createAutoScaleVmGroup=org.apache.cloudstack.api.user.autoscale.command.CreateAutoScaleVmGroupCmd;15 deleteCounter = com.cloud.api.commands.DeleteCounterCmd;1 -deleteCondition = com.cloud.api.commands.DeleteConditionCmd;15 -deleteAutoScalePolicy=com.cloud.api.commands.DeleteAutoScalePolicyCmd;15 -deleteAutoScaleVmProfile=com.cloud.api.commands.DeleteAutoScaleVmProfileCmd;15 -deleteAutoScaleVmGroup=com.cloud.api.commands.DeleteAutoScaleVmGroupCmd;15 -listCounters = com.cloud.api.commands.ListCountersCmd;15 -listConditions = com.cloud.api.commands.ListConditionsCmd;15 -listAutoScalePolicies=com.cloud.api.commands.ListAutoScalePoliciesCmd;15 -listAutoScaleVmProfiles=com.cloud.api.commands.ListAutoScaleVmProfilesCmd;15 -listAutoScaleVmGroups=com.cloud.api.commands.ListAutoScaleVmGroupsCmd;15 -enableAutoScaleVmGroup=com.cloud.api.commands.EnableAutoScaleVmGroupCmd;15 -disableAutoScaleVmGroup=com.cloud.api.commands.DisableAutoScaleVmGroupCmd;15 -updateAutoScalePolicy=com.cloud.api.commands.UpdateAutoScalePolicyCmd;15 -updateAutoScaleVmProfile=com.cloud.api.commands.UpdateAutoScaleVmProfileCmd;15 -updateAutoScaleVmGroup=com.cloud.api.commands.UpdateAutoScaleVmGroupCmd;15 +deleteCondition = org.apache.cloudstack.api.user.autoscale.command.DeleteConditionCmd;15 +deleteAutoScalePolicy=org.apache.cloudstack.api.user.autoscale.command.DeleteAutoScalePolicyCmd;15 +deleteAutoScaleVmProfile=org.apache.cloudstack.api.user.autoscale.command.DeleteAutoScaleVmProfileCmd;15 +deleteAutoScaleVmGroup=org.apache.cloudstack.api.user.autoscale.command.DeleteAutoScaleVmGroupCmd;15 +listCounters = org.apache.cloudstack.api.user.autoscale.command.ListCountersCmd;15 +listConditions = org.apache.cloudstack.api.user.autoscale.command.ListConditionsCmd;15 +listAutoScalePolicies=org.apache.cloudstack.api.user.autoscale.command.ListAutoScalePoliciesCmd;15 +listAutoScaleVmProfiles=org.apache.cloudstack.api.user.autoscale.command.ListAutoScaleVmProfilesCmd;15 +listAutoScaleVmGroups=org.apache.cloudstack.api.user.autoscale.command.ListAutoScaleVmGroupsCmd;15 +enableAutoScaleVmGroup=org.apache.cloudstack.api.user.autoscale.command.EnableAutoScaleVmGroupCmd;15 +disableAutoScaleVmGroup=org.apache.cloudstack.api.user.autoscale.command.DisableAutoScaleVmGroupCmd;15 +updateAutoScalePolicy=org.apache.cloudstack.api.user.autoscale.command.UpdateAutoScalePolicyCmd;15 +updateAutoScaleVmProfile=org.apache.cloudstack.api.user.autoscale.command.UpdateAutoScaleVmProfileCmd;15 +updateAutoScaleVmGroup=org.apache.cloudstack.api.user.autoscale.command.UpdateAutoScaleVmGroupCmd;15 #### router commands startRouter=com.cloud.api.commands.StartRouterCmd;7 diff --git a/server/src/com/cloud/network/as/AutoScaleManagerImpl.java b/server/src/com/cloud/network/as/AutoScaleManagerImpl.java index 651625b594f..7917922d450 100644 --- a/server/src/com/cloud/network/as/AutoScaleManagerImpl.java +++ b/server/src/com/cloud/network/as/AutoScaleManagerImpl.java @@ -25,6 +25,7 @@ import java.util.Map; import javax.ejb.Local; import javax.naming.ConfigurationException; +import org.apache.cloudstack.api.user.autoscale.command.*; import org.apache.log4j.Logger; import com.cloud.acl.ControlledEntity; @@ -32,20 +33,18 @@ import org.apache.cloudstack.api.ApiConstants; import com.cloud.api.ApiDBUtils; import com.cloud.api.ApiDispatcher; import org.apache.cloudstack.api.BaseListAccountResourcesCmd; -import com.cloud.api.commands.CreateAutoScalePolicyCmd; -import com.cloud.api.commands.CreateAutoScaleVmGroupCmd; -import com.cloud.api.commands.CreateAutoScaleVmProfileCmd; -import com.cloud.api.commands.CreateConditionCmd; +import org.apache.cloudstack.api.user.autoscale.command.CreateAutoScalePolicyCmd; +import org.apache.cloudstack.api.user.autoscale.command.CreateAutoScaleVmGroupCmd; +import org.apache.cloudstack.api.user.autoscale.command.CreateAutoScaleVmProfileCmd; +import org.apache.cloudstack.api.user.autoscale.command.CreateConditionCmd; import com.cloud.api.commands.CreateCounterCmd; import org.apache.cloudstack.api.user.vm.command.DeployVMCmd; -import com.cloud.api.commands.ListAutoScalePoliciesCmd; -import com.cloud.api.commands.ListAutoScaleVmGroupsCmd; -import com.cloud.api.commands.ListAutoScaleVmProfilesCmd; -import com.cloud.api.commands.ListConditionsCmd; -import com.cloud.api.commands.ListCountersCmd; -import com.cloud.api.commands.UpdateAutoScalePolicyCmd; -import com.cloud.api.commands.UpdateAutoScaleVmGroupCmd; -import com.cloud.api.commands.UpdateAutoScaleVmProfileCmd; +import org.apache.cloudstack.api.user.autoscale.command.ListAutoScalePoliciesCmd; +import org.apache.cloudstack.api.user.autoscale.command.ListAutoScaleVmGroupsCmd; +import org.apache.cloudstack.api.user.autoscale.command.ListConditionsCmd; +import org.apache.cloudstack.api.user.autoscale.command.ListCountersCmd; +import org.apache.cloudstack.api.user.autoscale.command.UpdateAutoScalePolicyCmd; +import org.apache.cloudstack.api.user.autoscale.command.UpdateAutoScaleVmProfileCmd; import com.cloud.configuration.Config; import com.cloud.configuration.ConfigurationManager; import com.cloud.configuration.dao.ConfigurationDao; From 2121fbd4698342bd5b14f9b5ec086a541d259dd8 Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Tue, 4 Dec 2012 11:38:40 -0800 Subject: [PATCH 038/421] api_refactor: refactor network apis for admin pkg Signed-off-by: Rohit Yadav --- .../configuration/ConfigurationService.java | 6 ++-- .../cloud/network/StorageNetworkService.java | 8 +++--- .../AddNetworkServiceProviderCmd.java | 2 +- .../command}/CreateNetworkOfferingCmd.java | 2 +- .../command}/DeleteNetworkOfferingCmd.java | 2 +- .../DeleteNetworkServiceProviderCmd.java | 2 +- .../command}/DeletePhysicalNetworkCmd.java | 2 +- .../DeleteStorageNetworkIpRangeCmd.java | 2 +- .../ListNetworkServiceProvidersCmd.java | 2 +- .../command}/ListPhysicalNetworksCmd.java | 2 +- .../ListSupportedNetworkServicesCmd.java | 2 +- .../command}/UpdateNetworkOfferingCmd.java | 2 +- .../UpdateNetworkServiceProviderCmd.java | 2 +- .../command}/UpdatePhysicalNetworkCmd.java | 2 +- .../UpdateStorageNetworkIpRangeCmd.java | 2 +- .../listStorageNetworkIpRangeCmd.java | 6 ++-- .../network/command/DeleteNetworkCmd.java | 2 +- .../AddNetworkServiceProviderCmdTest.java | 2 +- client/tomcatconf/commands.properties.in | 28 +++++++++---------- .../ConfigurationManagerImpl.java | 6 ++-- .../network/StorageNetworkManagerImpl.java | 8 +++--- .../vpc/MockConfigurationManagerImpl.java | 6 ++-- 22 files changed, 49 insertions(+), 49 deletions(-) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/admin/network/command}/AddNetworkServiceProviderCmd.java (98%) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/admin/network/command}/CreateNetworkOfferingCmd.java (99%) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/admin/network/command}/DeleteNetworkOfferingCmd.java (98%) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/admin/network/command}/DeleteNetworkServiceProviderCmd.java (98%) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/admin/network/command}/DeletePhysicalNetworkCmd.java (98%) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/admin/network/command}/DeleteStorageNetworkIpRangeCmd.java (98%) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/admin/network/command}/ListNetworkServiceProvidersCmd.java (98%) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/admin/network/command}/ListPhysicalNetworksCmd.java (98%) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/admin/network/command}/ListSupportedNetworkServicesCmd.java (98%) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/admin/network/command}/UpdateNetworkOfferingCmd.java (98%) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/admin/network/command}/UpdateNetworkServiceProviderCmd.java (98%) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/admin/network/command}/UpdatePhysicalNetworkCmd.java (98%) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/admin/network/command}/UpdateStorageNetworkIpRangeCmd.java (98%) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/admin/network/command}/listStorageNetworkIpRangeCmd.java (96%) diff --git a/api/src/com/cloud/configuration/ConfigurationService.java b/api/src/com/cloud/configuration/ConfigurationService.java index 098d2800e62..c27e6c7c57d 100644 --- a/api/src/com/cloud/configuration/ConfigurationService.java +++ b/api/src/com/cloud/configuration/ConfigurationService.java @@ -21,12 +21,12 @@ import java.util.List; import javax.naming.NamingException; import com.cloud.api.commands.CreateDiskOfferingCmd; -import com.cloud.api.commands.CreateNetworkOfferingCmd; +import org.apache.cloudstack.api.admin.network.command.CreateNetworkOfferingCmd; import com.cloud.api.commands.CreateServiceOfferingCmd; import com.cloud.api.commands.CreateVlanIpRangeCmd; import com.cloud.api.commands.CreateZoneCmd; import com.cloud.api.commands.DeleteDiskOfferingCmd; -import com.cloud.api.commands.DeleteNetworkOfferingCmd; +import org.apache.cloudstack.api.admin.network.command.DeleteNetworkOfferingCmd; import com.cloud.api.commands.DeletePodCmd; import com.cloud.api.commands.DeleteServiceOfferingCmd; import com.cloud.api.commands.DeleteVlanIpRangeCmd; @@ -36,7 +36,7 @@ import com.cloud.api.commands.LDAPRemoveCmd; import org.apache.cloudstack.api.user.network.command.ListNetworkOfferingsCmd; import com.cloud.api.commands.UpdateCfgCmd; import com.cloud.api.commands.UpdateDiskOfferingCmd; -import com.cloud.api.commands.UpdateNetworkOfferingCmd; +import org.apache.cloudstack.api.admin.network.command.UpdateNetworkOfferingCmd; import com.cloud.api.commands.UpdatePodCmd; import com.cloud.api.commands.UpdateServiceOfferingCmd; import com.cloud.api.commands.UpdateZoneCmd; diff --git a/api/src/com/cloud/network/StorageNetworkService.java b/api/src/com/cloud/network/StorageNetworkService.java index 86a8352316a..1cc92ede0c7 100755 --- a/api/src/com/cloud/network/StorageNetworkService.java +++ b/api/src/com/cloud/network/StorageNetworkService.java @@ -20,9 +20,9 @@ import java.sql.SQLException; import java.util.List; import com.cloud.api.commands.CreateStorageNetworkIpRangeCmd; -import com.cloud.api.commands.DeleteStorageNetworkIpRangeCmd; -import com.cloud.api.commands.UpdateStorageNetworkIpRangeCmd; -import com.cloud.api.commands.listStorageNetworkIpRangeCmd; +import org.apache.cloudstack.api.admin.network.command.DeleteStorageNetworkIpRangeCmd; +import org.apache.cloudstack.api.admin.network.command.UpdateStorageNetworkIpRangeCmd; +import org.apache.cloudstack.api.admin.network.command.ListStorageNetworkIpRangeCmd; import com.cloud.dc.StorageNetworkIpRange; public interface StorageNetworkService { @@ -30,7 +30,7 @@ public interface StorageNetworkService { void deleteIpRange(DeleteStorageNetworkIpRangeCmd cmd); - List listIpRange(listStorageNetworkIpRangeCmd cmd); + List listIpRange(ListStorageNetworkIpRangeCmd cmd); StorageNetworkIpRange updateIpRange(UpdateStorageNetworkIpRangeCmd cmd); } diff --git a/api/src/com/cloud/api/commands/AddNetworkServiceProviderCmd.java b/api/src/org/apache/cloudstack/api/admin/network/command/AddNetworkServiceProviderCmd.java similarity index 98% rename from api/src/com/cloud/api/commands/AddNetworkServiceProviderCmd.java rename to api/src/org/apache/cloudstack/api/admin/network/command/AddNetworkServiceProviderCmd.java index 30f054f8886..542f8ddc9c9 100644 --- a/api/src/com/cloud/api/commands/AddNetworkServiceProviderCmd.java +++ b/api/src/org/apache/cloudstack/api/admin/network/command/AddNetworkServiceProviderCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.admin.network.command; import java.util.List; diff --git a/api/src/com/cloud/api/commands/CreateNetworkOfferingCmd.java b/api/src/org/apache/cloudstack/api/admin/network/command/CreateNetworkOfferingCmd.java similarity index 99% rename from api/src/com/cloud/api/commands/CreateNetworkOfferingCmd.java rename to api/src/org/apache/cloudstack/api/admin/network/command/CreateNetworkOfferingCmd.java index 447a5fb6aca..d85f5753bed 100644 --- a/api/src/com/cloud/api/commands/CreateNetworkOfferingCmd.java +++ b/api/src/org/apache/cloudstack/api/admin/network/command/CreateNetworkOfferingCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.admin.network.command; import java.util.ArrayList; import java.util.Collection; diff --git a/api/src/com/cloud/api/commands/DeleteNetworkOfferingCmd.java b/api/src/org/apache/cloudstack/api/admin/network/command/DeleteNetworkOfferingCmd.java similarity index 98% rename from api/src/com/cloud/api/commands/DeleteNetworkOfferingCmd.java rename to api/src/org/apache/cloudstack/api/admin/network/command/DeleteNetworkOfferingCmd.java index 8feede431fa..2e0f098ccd8 100644 --- a/api/src/com/cloud/api/commands/DeleteNetworkOfferingCmd.java +++ b/api/src/org/apache/cloudstack/api/admin/network/command/DeleteNetworkOfferingCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.admin.network.command; import org.apache.log4j.Logger; diff --git a/api/src/com/cloud/api/commands/DeleteNetworkServiceProviderCmd.java b/api/src/org/apache/cloudstack/api/admin/network/command/DeleteNetworkServiceProviderCmd.java similarity index 98% rename from api/src/com/cloud/api/commands/DeleteNetworkServiceProviderCmd.java rename to api/src/org/apache/cloudstack/api/admin/network/command/DeleteNetworkServiceProviderCmd.java index c30b2cbbbd1..abfe7cb6738 100644 --- a/api/src/com/cloud/api/commands/DeleteNetworkServiceProviderCmd.java +++ b/api/src/org/apache/cloudstack/api/admin/network/command/DeleteNetworkServiceProviderCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.admin.network.command; import org.apache.log4j.Logger; diff --git a/api/src/com/cloud/api/commands/DeletePhysicalNetworkCmd.java b/api/src/org/apache/cloudstack/api/admin/network/command/DeletePhysicalNetworkCmd.java similarity index 98% rename from api/src/com/cloud/api/commands/DeletePhysicalNetworkCmd.java rename to api/src/org/apache/cloudstack/api/admin/network/command/DeletePhysicalNetworkCmd.java index 0a036b81a50..5d146bf70b5 100644 --- a/api/src/com/cloud/api/commands/DeletePhysicalNetworkCmd.java +++ b/api/src/org/apache/cloudstack/api/admin/network/command/DeletePhysicalNetworkCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.admin.network.command; import org.apache.log4j.Logger; diff --git a/api/src/com/cloud/api/commands/DeleteStorageNetworkIpRangeCmd.java b/api/src/org/apache/cloudstack/api/admin/network/command/DeleteStorageNetworkIpRangeCmd.java similarity index 98% rename from api/src/com/cloud/api/commands/DeleteStorageNetworkIpRangeCmd.java rename to api/src/org/apache/cloudstack/api/admin/network/command/DeleteStorageNetworkIpRangeCmd.java index 6b50add9b45..5cb4eb70b32 100755 --- a/api/src/com/cloud/api/commands/DeleteStorageNetworkIpRangeCmd.java +++ b/api/src/org/apache/cloudstack/api/admin/network/command/DeleteStorageNetworkIpRangeCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.admin.network.command; import org.apache.log4j.Logger; diff --git a/api/src/com/cloud/api/commands/ListNetworkServiceProvidersCmd.java b/api/src/org/apache/cloudstack/api/admin/network/command/ListNetworkServiceProvidersCmd.java similarity index 98% rename from api/src/com/cloud/api/commands/ListNetworkServiceProvidersCmd.java rename to api/src/org/apache/cloudstack/api/admin/network/command/ListNetworkServiceProvidersCmd.java index 9818842cab4..efaf15e5d35 100644 --- a/api/src/com/cloud/api/commands/ListNetworkServiceProvidersCmd.java +++ b/api/src/org/apache/cloudstack/api/admin/network/command/ListNetworkServiceProvidersCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.admin.network.command; import java.util.ArrayList; import java.util.List; diff --git a/api/src/com/cloud/api/commands/ListPhysicalNetworksCmd.java b/api/src/org/apache/cloudstack/api/admin/network/command/ListPhysicalNetworksCmd.java similarity index 98% rename from api/src/com/cloud/api/commands/ListPhysicalNetworksCmd.java rename to api/src/org/apache/cloudstack/api/admin/network/command/ListPhysicalNetworksCmd.java index 69b00afadb5..e26e2862afa 100644 --- a/api/src/com/cloud/api/commands/ListPhysicalNetworksCmd.java +++ b/api/src/org/apache/cloudstack/api/admin/network/command/ListPhysicalNetworksCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.admin.network.command; import java.util.ArrayList; import java.util.List; diff --git a/api/src/com/cloud/api/commands/ListSupportedNetworkServicesCmd.java b/api/src/org/apache/cloudstack/api/admin/network/command/ListSupportedNetworkServicesCmd.java similarity index 98% rename from api/src/com/cloud/api/commands/ListSupportedNetworkServicesCmd.java rename to api/src/org/apache/cloudstack/api/admin/network/command/ListSupportedNetworkServicesCmd.java index 83462bb0707..6eaa9cff3d2 100644 --- a/api/src/com/cloud/api/commands/ListSupportedNetworkServicesCmd.java +++ b/api/src/org/apache/cloudstack/api/admin/network/command/ListSupportedNetworkServicesCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.admin.network.command; import java.util.ArrayList; import java.util.List; diff --git a/api/src/com/cloud/api/commands/UpdateNetworkOfferingCmd.java b/api/src/org/apache/cloudstack/api/admin/network/command/UpdateNetworkOfferingCmd.java similarity index 98% rename from api/src/com/cloud/api/commands/UpdateNetworkOfferingCmd.java rename to api/src/org/apache/cloudstack/api/admin/network/command/UpdateNetworkOfferingCmd.java index 0c3f829bb4f..cb4497422df 100755 --- a/api/src/com/cloud/api/commands/UpdateNetworkOfferingCmd.java +++ b/api/src/org/apache/cloudstack/api/admin/network/command/UpdateNetworkOfferingCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.admin.network.command; import org.apache.log4j.Logger; diff --git a/api/src/com/cloud/api/commands/UpdateNetworkServiceProviderCmd.java b/api/src/org/apache/cloudstack/api/admin/network/command/UpdateNetworkServiceProviderCmd.java similarity index 98% rename from api/src/com/cloud/api/commands/UpdateNetworkServiceProviderCmd.java rename to api/src/org/apache/cloudstack/api/admin/network/command/UpdateNetworkServiceProviderCmd.java index fb34038e424..cdacdd8149f 100644 --- a/api/src/com/cloud/api/commands/UpdateNetworkServiceProviderCmd.java +++ b/api/src/org/apache/cloudstack/api/admin/network/command/UpdateNetworkServiceProviderCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.admin.network.command; import java.util.List; diff --git a/api/src/com/cloud/api/commands/UpdatePhysicalNetworkCmd.java b/api/src/org/apache/cloudstack/api/admin/network/command/UpdatePhysicalNetworkCmd.java similarity index 98% rename from api/src/com/cloud/api/commands/UpdatePhysicalNetworkCmd.java rename to api/src/org/apache/cloudstack/api/admin/network/command/UpdatePhysicalNetworkCmd.java index 32c29a49fe3..fccde132d08 100644 --- a/api/src/com/cloud/api/commands/UpdatePhysicalNetworkCmd.java +++ b/api/src/org/apache/cloudstack/api/admin/network/command/UpdatePhysicalNetworkCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.admin.network.command; import java.util.List; diff --git a/api/src/com/cloud/api/commands/UpdateStorageNetworkIpRangeCmd.java b/api/src/org/apache/cloudstack/api/admin/network/command/UpdateStorageNetworkIpRangeCmd.java similarity index 98% rename from api/src/com/cloud/api/commands/UpdateStorageNetworkIpRangeCmd.java rename to api/src/org/apache/cloudstack/api/admin/network/command/UpdateStorageNetworkIpRangeCmd.java index ec162b6dcd7..75526586d0b 100755 --- a/api/src/com/cloud/api/commands/UpdateStorageNetworkIpRangeCmd.java +++ b/api/src/org/apache/cloudstack/api/admin/network/command/UpdateStorageNetworkIpRangeCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.admin.network.command; import org.apache.log4j.Logger; diff --git a/api/src/com/cloud/api/commands/listStorageNetworkIpRangeCmd.java b/api/src/org/apache/cloudstack/api/admin/network/command/listStorageNetworkIpRangeCmd.java similarity index 96% rename from api/src/com/cloud/api/commands/listStorageNetworkIpRangeCmd.java rename to api/src/org/apache/cloudstack/api/admin/network/command/listStorageNetworkIpRangeCmd.java index 12d97090ccc..06b6e2c5175 100755 --- a/api/src/com/cloud/api/commands/listStorageNetworkIpRangeCmd.java +++ b/api/src/org/apache/cloudstack/api/admin/network/command/listStorageNetworkIpRangeCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.admin.network.command; import java.util.ArrayList; import java.util.List; @@ -38,8 +38,8 @@ import com.cloud.exception.ResourceUnavailableException; import com.cloud.user.Account; @Implementation(description="List a storage network IP range.", responseObject=StorageNetworkIpRangeResponse.class, since="3.0.0") -public class listStorageNetworkIpRangeCmd extends BaseListCmd { - public static final Logger s_logger = Logger.getLogger(listStorageNetworkIpRangeCmd.class); +public class ListStorageNetworkIpRangeCmd extends BaseListCmd { + public static final Logger s_logger = Logger.getLogger(ListStorageNetworkIpRangeCmd.class); String s_name = "liststoragenetworkiprangeresponse"; diff --git a/api/src/org/apache/cloudstack/api/user/network/command/DeleteNetworkCmd.java b/api/src/org/apache/cloudstack/api/user/network/command/DeleteNetworkCmd.java index 994e6d55144..f158e4321ab 100644 --- a/api/src/org/apache/cloudstack/api/user/network/command/DeleteNetworkCmd.java +++ b/api/src/org/apache/cloudstack/api/user/network/command/DeleteNetworkCmd.java @@ -16,7 +16,7 @@ // under the License. package org.apache.cloudstack.api.user.network.command; -import com.cloud.api.commands.DeleteNetworkOfferingCmd; +import org.apache.cloudstack.api.admin.network.command.DeleteNetworkOfferingCmd; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; diff --git a/api/test/src/com/cloud/api/commands/test/AddNetworkServiceProviderCmdTest.java b/api/test/src/com/cloud/api/commands/test/AddNetworkServiceProviderCmdTest.java index 446a1614220..b484916dcc1 100644 --- a/api/test/src/com/cloud/api/commands/test/AddNetworkServiceProviderCmdTest.java +++ b/api/test/src/com/cloud/api/commands/test/AddNetworkServiceProviderCmdTest.java @@ -22,6 +22,7 @@ import java.util.List; import junit.framework.Assert; import junit.framework.TestCase; +import org.apache.cloudstack.api.admin.network.command.AddNetworkServiceProviderCmd; import org.junit.Before; import org.junit.Rule; import org.junit.Test; @@ -29,7 +30,6 @@ import org.junit.rules.ExpectedException; import org.mockito.Mockito; import org.apache.cloudstack.api.ServerApiException; -import com.cloud.api.commands.AddNetworkServiceProviderCmd; import com.cloud.exception.ResourceAllocationException; import com.cloud.network.NetworkService; import com.cloud.network.PhysicalNetworkServiceProvider; diff --git a/client/tomcatconf/commands.properties.in b/client/tomcatconf/commands.properties.in index 5632fe61b63..efa5cd928ec 100755 --- a/client/tomcatconf/commands.properties.in +++ b/client/tomcatconf/commands.properties.in @@ -302,9 +302,9 @@ removeVpnUser=org.apache.cloudstack.api.user.vpn.command.RemoveVpnUserCmd;15 listVpnUsers=org.apache.cloudstack.api.user.vpn.command.ListVpnUsersCmd;15 #### network offering commands -createNetworkOffering=com.cloud.api.commands.CreateNetworkOfferingCmd;1 -updateNetworkOffering=com.cloud.api.commands.UpdateNetworkOfferingCmd;1 -deleteNetworkOffering=com.cloud.api.commands.DeleteNetworkOfferingCmd;1 +createNetworkOffering=org.apache.cloudstack.api.admin.network.command.CreateNetworkOfferingCmd;1 +updateNetworkOffering=org.apache.cloudstack.api.admin.network.command.UpdateNetworkOfferingCmd;1 +deleteNetworkOffering=org.apache.cloudstack.api.admin.network.command.DeleteNetworkOfferingCmd;1 listNetworkOfferings=org.apache.cloudstack.api.user.network.command.ListNetworkOfferingsCmd;15 #### network commands @@ -345,16 +345,16 @@ listHypervisorCapabilities=com.cloud.api.commands.ListHypervisorCapabilitiesCmd; #### Physical Network commands createPhysicalNetwork=com.cloud.api.commands.CreatePhysicalNetworkCmd;1 -deletePhysicalNetwork=com.cloud.api.commands.DeletePhysicalNetworkCmd;1 -listPhysicalNetworks=com.cloud.api.commands.ListPhysicalNetworksCmd;1 -updatePhysicalNetwork=com.cloud.api.commands.UpdatePhysicalNetworkCmd;1 +deletePhysicalNetwork=org.apache.cloudstack.api.admin.network.command.DeletePhysicalNetworkCmd;1 +listPhysicalNetworks=org.apache.cloudstack.api.admin.network.command.ListPhysicalNetworksCmd;1 +updatePhysicalNetwork=org.apache.cloudstack.api.admin.network.command.UpdatePhysicalNetworkCmd;1 #### Physical Network Service Provider commands -listSupportedNetworkServices=com.cloud.api.commands.ListSupportedNetworkServicesCmd;1 -addNetworkServiceProvider=com.cloud.api.commands.AddNetworkServiceProviderCmd;1 -deleteNetworkServiceProvider=com.cloud.api.commands.DeleteNetworkServiceProviderCmd;1 -listNetworkServiceProviders=com.cloud.api.commands.ListNetworkServiceProvidersCmd;1 -updateNetworkServiceProvider=com.cloud.api.commands.UpdateNetworkServiceProviderCmd;1 +listSupportedNetworkServices=org.apache.cloudstack.api.admin.network.command.ListSupportedNetworkServicesCmd;1 +addNetworkServiceProvider=org.apache.cloudstack.api.admin.network.command.AddNetworkServiceProviderCmd;1 +deleteNetworkServiceProvider=org.apache.cloudstack.api.admin.network.command.DeleteNetworkServiceProviderCmd;1 +listNetworkServiceProviders=org.apache.cloudstack.api.admin.network.command.ListNetworkServiceProvidersCmd;1 +updateNetworkServiceProvider=org.apache.cloudstack.api.admin.network.command.UpdateNetworkServiceProviderCmd;1 #### Physical Network Traffic Type commands addTrafficType=com.cloud.api.commands.AddTrafficTypeCmd;1 @@ -365,9 +365,9 @@ listTrafficTypeImplementors=com.cloud.api.commands.ListTrafficTypeImplementorsCm #### Storage Network commands createStorageNetworkIpRange=com.cloud.api.commands.CreateStorageNetworkIpRangeCmd;1 -deleteStorageNetworkIpRange=com.cloud.api.commands.DeleteStorageNetworkIpRangeCmd;1 -listStorageNetworkIpRange=com.cloud.api.commands.listStorageNetworkIpRangeCmd;1 -updateStorageNetworkIpRange=com.cloud.api.commands.UpdateStorageNetworkIpRangeCmd;1 +deleteStorageNetworkIpRange=org.apache.cloudstack.api.admin.network.command.DeleteStorageNetworkIpRangeCmd;1 +listStorageNetworkIpRange=org.apache.cloudstack.api.admin.network.command.ListStorageNetworkIpRangeCmd;1 +updateStorageNetworkIpRange=org.apache.cloudstack.api.admin.network.command.UpdateStorageNetworkIpRangeCmd;1 ### Network Devices commands addNetworkDevice=com.cloud.api.commands.AddNetworkDeviceCmd;1 diff --git a/server/src/com/cloud/configuration/ConfigurationManagerImpl.java b/server/src/com/cloud/configuration/ConfigurationManagerImpl.java index 4b9b33622f5..bff0cd514b5 100755 --- a/server/src/com/cloud/configuration/ConfigurationManagerImpl.java +++ b/server/src/com/cloud/configuration/ConfigurationManagerImpl.java @@ -38,6 +38,8 @@ import javax.naming.NamingException; import javax.naming.directory.DirContext; import javax.naming.directory.InitialDirContext; +import org.apache.cloudstack.api.admin.network.command.DeleteNetworkOfferingCmd; +import org.apache.cloudstack.api.admin.network.command.UpdateNetworkOfferingCmd; import org.apache.log4j.Logger; import com.cloud.acl.SecurityChecker; @@ -45,12 +47,11 @@ import com.cloud.alert.AlertManager; import org.apache.cloudstack.api.ApiConstants.LDAPParams; import com.cloud.api.ApiDBUtils; import com.cloud.api.commands.CreateDiskOfferingCmd; -import com.cloud.api.commands.CreateNetworkOfferingCmd; +import org.apache.cloudstack.api.admin.network.command.CreateNetworkOfferingCmd; import com.cloud.api.commands.CreateServiceOfferingCmd; import com.cloud.api.commands.CreateVlanIpRangeCmd; import com.cloud.api.commands.CreateZoneCmd; import com.cloud.api.commands.DeleteDiskOfferingCmd; -import com.cloud.api.commands.DeleteNetworkOfferingCmd; import com.cloud.api.commands.DeletePodCmd; import com.cloud.api.commands.DeleteServiceOfferingCmd; import com.cloud.api.commands.DeleteVlanIpRangeCmd; @@ -60,7 +61,6 @@ import com.cloud.api.commands.LDAPRemoveCmd; import org.apache.cloudstack.api.user.network.command.ListNetworkOfferingsCmd; import com.cloud.api.commands.UpdateCfgCmd; import com.cloud.api.commands.UpdateDiskOfferingCmd; -import com.cloud.api.commands.UpdateNetworkOfferingCmd; import com.cloud.api.commands.UpdatePodCmd; import com.cloud.api.commands.UpdateServiceOfferingCmd; import com.cloud.api.commands.UpdateZoneCmd; diff --git a/server/src/com/cloud/network/StorageNetworkManagerImpl.java b/server/src/com/cloud/network/StorageNetworkManagerImpl.java index 3772f55e5da..6413e49cc6f 100755 --- a/server/src/com/cloud/network/StorageNetworkManagerImpl.java +++ b/server/src/com/cloud/network/StorageNetworkManagerImpl.java @@ -25,12 +25,12 @@ import java.util.Map; import javax.ejb.Local; import javax.naming.ConfigurationException; +import org.apache.cloudstack.api.admin.network.command.ListStorageNetworkIpRangeCmd; +import org.apache.cloudstack.api.admin.network.command.UpdateStorageNetworkIpRangeCmd; import org.apache.log4j.Logger; import com.cloud.api.commands.CreateStorageNetworkIpRangeCmd; -import com.cloud.api.commands.DeleteStorageNetworkIpRangeCmd; -import com.cloud.api.commands.UpdateStorageNetworkIpRangeCmd; -import com.cloud.api.commands.listStorageNetworkIpRangeCmd; +import org.apache.cloudstack.api.admin.network.command.DeleteStorageNetworkIpRangeCmd; import com.cloud.dc.HostPodVO; import com.cloud.dc.StorageNetworkIpRange; import com.cloud.dc.StorageNetworkIpAddressVO; @@ -304,7 +304,7 @@ public class StorageNetworkManagerImpl implements StorageNetworkManager, Storage } @Override - public List listIpRange(listStorageNetworkIpRangeCmd cmd) { + public List listIpRange(ListStorageNetworkIpRangeCmd cmd) { Long rangeId = cmd.getRangeId(); Long podId = cmd.getPodId(); Long zoneId = cmd.getZoneId(); diff --git a/server/test/com/cloud/vpc/MockConfigurationManagerImpl.java b/server/test/com/cloud/vpc/MockConfigurationManagerImpl.java index 73caf5b4058..c3496f0247e 100644 --- a/server/test/com/cloud/vpc/MockConfigurationManagerImpl.java +++ b/server/test/com/cloud/vpc/MockConfigurationManagerImpl.java @@ -25,12 +25,12 @@ import javax.naming.ConfigurationException; import javax.naming.NamingException; import com.cloud.api.commands.CreateDiskOfferingCmd; -import com.cloud.api.commands.CreateNetworkOfferingCmd; +import org.apache.cloudstack.api.admin.network.command.CreateNetworkOfferingCmd; import com.cloud.api.commands.CreateServiceOfferingCmd; import com.cloud.api.commands.CreateVlanIpRangeCmd; import com.cloud.api.commands.CreateZoneCmd; import com.cloud.api.commands.DeleteDiskOfferingCmd; -import com.cloud.api.commands.DeleteNetworkOfferingCmd; +import org.apache.cloudstack.api.admin.network.command.DeleteNetworkOfferingCmd; import com.cloud.api.commands.DeletePodCmd; import com.cloud.api.commands.DeleteServiceOfferingCmd; import com.cloud.api.commands.DeleteVlanIpRangeCmd; @@ -40,7 +40,7 @@ import com.cloud.api.commands.LDAPRemoveCmd; import org.apache.cloudstack.api.user.network.command.ListNetworkOfferingsCmd; import com.cloud.api.commands.UpdateCfgCmd; import com.cloud.api.commands.UpdateDiskOfferingCmd; -import com.cloud.api.commands.UpdateNetworkOfferingCmd; +import org.apache.cloudstack.api.admin.network.command.UpdateNetworkOfferingCmd; import com.cloud.api.commands.UpdatePodCmd; import com.cloud.api.commands.UpdateServiceOfferingCmd; import com.cloud.api.commands.UpdateZoneCmd; From dd5a36fcd2ebb373d627d061e67f16c304f4ae5b Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Tue, 4 Dec 2012 11:42:07 -0800 Subject: [PATCH 039/421] api_refactor: refactor for autoscale apis Signed-off-by: Rohit Yadav --- api/src/com/cloud/network/as/AutoScaleService.java | 2 +- .../api/admin/autoscale/command}/CreateCounterCmd.java | 2 +- .../api/admin/autoscale/command}/DeleteCounterCmd.java | 2 +- client/tomcatconf/commands.properties.in | 4 ++-- server/src/com/cloud/network/as/AutoScaleManagerImpl.java | 2 +- 5 files changed, 6 insertions(+), 6 deletions(-) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/admin/autoscale/command}/CreateCounterCmd.java (98%) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/admin/autoscale/command}/DeleteCounterCmd.java (98%) diff --git a/api/src/com/cloud/network/as/AutoScaleService.java b/api/src/com/cloud/network/as/AutoScaleService.java index 30848687b50..a6b2f487768 100644 --- a/api/src/com/cloud/network/as/AutoScaleService.java +++ b/api/src/com/cloud/network/as/AutoScaleService.java @@ -18,11 +18,11 @@ package com.cloud.network.as; import java.util.List; +import org.apache.cloudstack.api.admin.autoscale.command.CreateCounterCmd; import org.apache.cloudstack.api.user.autoscale.command.CreateAutoScalePolicyCmd; import org.apache.cloudstack.api.user.autoscale.command.CreateAutoScaleVmGroupCmd; import org.apache.cloudstack.api.user.autoscale.command.CreateAutoScaleVmProfileCmd; import org.apache.cloudstack.api.user.autoscale.command.*; -import com.cloud.api.commands.CreateCounterCmd; import org.apache.cloudstack.api.user.autoscale.command.ListAutoScalePoliciesCmd; import org.apache.cloudstack.api.user.autoscale.command.ListConditionsCmd; import org.apache.cloudstack.api.user.autoscale.command.UpdateAutoScaleVmGroupCmd; diff --git a/api/src/com/cloud/api/commands/CreateCounterCmd.java b/api/src/org/apache/cloudstack/api/admin/autoscale/command/CreateCounterCmd.java similarity index 98% rename from api/src/com/cloud/api/commands/CreateCounterCmd.java rename to api/src/org/apache/cloudstack/api/admin/autoscale/command/CreateCounterCmd.java index f446519e2b8..1fb712ee7aa 100644 --- a/api/src/com/cloud/api/commands/CreateCounterCmd.java +++ b/api/src/org/apache/cloudstack/api/admin/autoscale/command/CreateCounterCmd.java @@ -15,7 +15,7 @@ // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.admin.autoscale.command; import org.apache.log4j.Logger; diff --git a/api/src/com/cloud/api/commands/DeleteCounterCmd.java b/api/src/org/apache/cloudstack/api/admin/autoscale/command/DeleteCounterCmd.java similarity index 98% rename from api/src/com/cloud/api/commands/DeleteCounterCmd.java rename to api/src/org/apache/cloudstack/api/admin/autoscale/command/DeleteCounterCmd.java index 2b2d7b24e15..161c60c23d0 100644 --- a/api/src/com/cloud/api/commands/DeleteCounterCmd.java +++ b/api/src/org/apache/cloudstack/api/admin/autoscale/command/DeleteCounterCmd.java @@ -15,7 +15,7 @@ // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.admin.autoscale.command; import org.apache.log4j.Logger; diff --git a/client/tomcatconf/commands.properties.in b/client/tomcatconf/commands.properties.in index efa5cd928ec..c1ddf39993f 100755 --- a/client/tomcatconf/commands.properties.in +++ b/client/tomcatconf/commands.properties.in @@ -154,12 +154,12 @@ listLoadBalancerRuleInstances=org.apache.cloudstack.api.user.lb.command.ListLoad updateLoadBalancerRule=org.apache.cloudstack.api.user.lb.command.UpdateLoadBalancerRuleCmd;15 #### autoscale commands -createCounter = com.cloud.api.commands.CreateCounterCmd;1 +createCounter = org.apache.cloudstack.api.admin.autoscale.command.CreateCounterCmd;1 createCondition = org.apache.cloudstack.api.user.autoscale.command.CreateConditionCmd;15 createAutoScalePolicy=org.apache.cloudstack.api.user.autoscale.command.CreateAutoScalePolicyCmd;15 createAutoScaleVmProfile=org.apache.cloudstack.api.user.autoscale.command.CreateAutoScaleVmProfileCmd;15 createAutoScaleVmGroup=org.apache.cloudstack.api.user.autoscale.command.CreateAutoScaleVmGroupCmd;15 -deleteCounter = com.cloud.api.commands.DeleteCounterCmd;1 +deleteCounter = org.apache.cloudstack.api.admin.autoscale.command.DeleteCounterCmd;1 deleteCondition = org.apache.cloudstack.api.user.autoscale.command.DeleteConditionCmd;15 deleteAutoScalePolicy=org.apache.cloudstack.api.user.autoscale.command.DeleteAutoScalePolicyCmd;15 deleteAutoScaleVmProfile=org.apache.cloudstack.api.user.autoscale.command.DeleteAutoScaleVmProfileCmd;15 diff --git a/server/src/com/cloud/network/as/AutoScaleManagerImpl.java b/server/src/com/cloud/network/as/AutoScaleManagerImpl.java index 7917922d450..5673c37bba3 100644 --- a/server/src/com/cloud/network/as/AutoScaleManagerImpl.java +++ b/server/src/com/cloud/network/as/AutoScaleManagerImpl.java @@ -37,7 +37,7 @@ import org.apache.cloudstack.api.user.autoscale.command.CreateAutoScalePolicyCmd import org.apache.cloudstack.api.user.autoscale.command.CreateAutoScaleVmGroupCmd; import org.apache.cloudstack.api.user.autoscale.command.CreateAutoScaleVmProfileCmd; import org.apache.cloudstack.api.user.autoscale.command.CreateConditionCmd; -import com.cloud.api.commands.CreateCounterCmd; +import org.apache.cloudstack.api.admin.autoscale.command.CreateCounterCmd; import org.apache.cloudstack.api.user.vm.command.DeployVMCmd; import org.apache.cloudstack.api.user.autoscale.command.ListAutoScalePoliciesCmd; import org.apache.cloudstack.api.user.autoscale.command.ListAutoScaleVmGroupsCmd; From 99875a165fd5a6d48c2385b52250ec6b29f0ce51 Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Tue, 4 Dec 2012 11:44:27 -0800 Subject: [PATCH 040/421] api_refactor: admin apis for vpc Signed-off-by: Rohit Yadav --- .../api/admin/vpc/command}/CreateVPCOfferingCmd.java | 2 +- .../api/admin/vpc/command}/DeleteVPCOfferingCmd.java | 2 +- .../api/admin/vpc/command}/UpdateVPCOfferingCmd.java | 2 +- client/tomcatconf/commands.properties.in | 6 +++--- 4 files changed, 6 insertions(+), 6 deletions(-) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/admin/vpc/command}/CreateVPCOfferingCmd.java (98%) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/admin/vpc/command}/DeleteVPCOfferingCmd.java (98%) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/admin/vpc/command}/UpdateVPCOfferingCmd.java (98%) diff --git a/api/src/com/cloud/api/commands/CreateVPCOfferingCmd.java b/api/src/org/apache/cloudstack/api/admin/vpc/command/CreateVPCOfferingCmd.java similarity index 98% rename from api/src/com/cloud/api/commands/CreateVPCOfferingCmd.java rename to api/src/org/apache/cloudstack/api/admin/vpc/command/CreateVPCOfferingCmd.java index 9ab3735bce9..23d1d9b4bb1 100644 --- a/api/src/com/cloud/api/commands/CreateVPCOfferingCmd.java +++ b/api/src/org/apache/cloudstack/api/admin/vpc/command/CreateVPCOfferingCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.admin.vpc.command; import java.util.List; diff --git a/api/src/com/cloud/api/commands/DeleteVPCOfferingCmd.java b/api/src/org/apache/cloudstack/api/admin/vpc/command/DeleteVPCOfferingCmd.java similarity index 98% rename from api/src/com/cloud/api/commands/DeleteVPCOfferingCmd.java rename to api/src/org/apache/cloudstack/api/admin/vpc/command/DeleteVPCOfferingCmd.java index 2944cf3225b..b929efff1a0 100644 --- a/api/src/com/cloud/api/commands/DeleteVPCOfferingCmd.java +++ b/api/src/org/apache/cloudstack/api/admin/vpc/command/DeleteVPCOfferingCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.admin.vpc.command; import org.apache.log4j.Logger; diff --git a/api/src/com/cloud/api/commands/UpdateVPCOfferingCmd.java b/api/src/org/apache/cloudstack/api/admin/vpc/command/UpdateVPCOfferingCmd.java similarity index 98% rename from api/src/com/cloud/api/commands/UpdateVPCOfferingCmd.java rename to api/src/org/apache/cloudstack/api/admin/vpc/command/UpdateVPCOfferingCmd.java index fb4362ec743..df4087668fb 100644 --- a/api/src/com/cloud/api/commands/UpdateVPCOfferingCmd.java +++ b/api/src/org/apache/cloudstack/api/admin/vpc/command/UpdateVPCOfferingCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.admin.vpc.command; import org.apache.log4j.Logger; diff --git a/client/tomcatconf/commands.properties.in b/client/tomcatconf/commands.properties.in index c1ddf39993f..0504b27d7df 100755 --- a/client/tomcatconf/commands.properties.in +++ b/client/tomcatconf/commands.properties.in @@ -387,9 +387,9 @@ updateVPC=org.apache.cloudstack.api.user.vpc.command.UpdateVPCCmd;15 restartVPC=org.apache.cloudstack.api.user.vpc.command.RestartVPCCmd;15 #### VPC offering commands -createVPCOffering=com.cloud.api.commands.CreateVPCOfferingCmd;1 -updateVPCOffering=com.cloud.api.commands.UpdateVPCOfferingCmd;1 -deleteVPCOffering=com.cloud.api.commands.DeleteVPCOfferingCmd;1 +createVPCOffering=org.apache.cloudstack.api.admin.vpc.command.CreateVPCOfferingCmd;1 +updateVPCOffering=org.apache.cloudstack.api.admin.vpc.command.UpdateVPCOfferingCmd;1 +deleteVPCOffering=org.apache.cloudstack.api.admin.vpc.command.DeleteVPCOfferingCmd;1 listVPCOfferings=org.apache.cloudstack.api.user.vpc.command.ListVPCOfferingsCmd;15 #### Private gateway commands From ee0a4a41d0f8db2f895a1699150c60cac6facab8 Mon Sep 17 00:00:00 2001 From: Fang Wang Date: Wed, 5 Dec 2012 11:50:23 -0800 Subject: [PATCH 041/421] api_refactor: entity annotation and fix parameter - Add Entity annotation - Annotate few responses - Fix Parameter annotation to have entityType Signed-off-by: Rohit Yadav --- .../cloud/api/response/DomainResponse.java | 3 ++ .../api/response/InstanceGroupResponse.java | 3 ++ .../cloud/api/response/NetworkResponse.java | 3 ++ .../api/response/SecurityGroupResponse.java | 3 ++ .../cloud/api/response/UserVmResponse.java | 3 ++ .../com/cloud/api/response/ZoneResponse.java | 3 ++ api/src/org/apache/cloudstack/api/Entity.java | 28 +++++++++++++++++++ .../org/apache/cloudstack/api/Parameter.java | 2 ++ 8 files changed, 48 insertions(+) create mode 100644 api/src/org/apache/cloudstack/api/Entity.java diff --git a/api/src/com/cloud/api/response/DomainResponse.java b/api/src/com/cloud/api/response/DomainResponse.java index 03738a28527..4568f910695 100644 --- a/api/src/com/cloud/api/response/DomainResponse.java +++ b/api/src/com/cloud/api/response/DomainResponse.java @@ -17,10 +17,13 @@ package com.cloud.api.response; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.Entity; +import com.cloud.domain.Domain; import com.cloud.utils.IdentityProxy; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; +@Entity(value = Domain.class) public class DomainResponse extends BaseResponse { @SerializedName(ApiConstants.ID) @Param(description="the ID of the domain") private IdentityProxy id = new IdentityProxy("domain"); diff --git a/api/src/com/cloud/api/response/InstanceGroupResponse.java b/api/src/com/cloud/api/response/InstanceGroupResponse.java index ba9963af10c..ec450c39c62 100644 --- a/api/src/com/cloud/api/response/InstanceGroupResponse.java +++ b/api/src/com/cloud/api/response/InstanceGroupResponse.java @@ -19,11 +19,14 @@ package com.cloud.api.response; import java.util.Date; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.Entity; +import com.cloud.vm.InstanceGroup; import com.cloud.utils.IdentityProxy; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; @SuppressWarnings("unused") +@Entity(value = InstanceGroup.class) public class InstanceGroupResponse extends BaseResponse implements ControlledEntityResponse{ @SerializedName(ApiConstants.ID) @Param(description="the id of the instance group") private IdentityProxy id = new IdentityProxy("instance_group"); diff --git a/api/src/com/cloud/api/response/NetworkResponse.java b/api/src/com/cloud/api/response/NetworkResponse.java index 78bae94ed79..5b6c4acc895 100644 --- a/api/src/com/cloud/api/response/NetworkResponse.java +++ b/api/src/com/cloud/api/response/NetworkResponse.java @@ -19,11 +19,14 @@ package com.cloud.api.response; import java.util.List; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.Entity; +import com.cloud.projects.ProjectAccount; import com.cloud.utils.IdentityProxy; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; @SuppressWarnings("unused") +@Entity(value = ProjectAccount.class) public class NetworkResponse extends BaseResponse implements ControlledEntityResponse{ @SerializedName(ApiConstants.ID) @Param(description="the id of the network") diff --git a/api/src/com/cloud/api/response/SecurityGroupResponse.java b/api/src/com/cloud/api/response/SecurityGroupResponse.java index 46dbd046b9c..e9931167499 100644 --- a/api/src/com/cloud/api/response/SecurityGroupResponse.java +++ b/api/src/com/cloud/api/response/SecurityGroupResponse.java @@ -19,11 +19,14 @@ package com.cloud.api.response; import java.util.List; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.Entity; +import com.cloud.network.security.SecurityGroup; import com.cloud.serializer.Param; import com.cloud.utils.IdentityProxy; import com.google.gson.annotations.SerializedName; @SuppressWarnings("unused") +@Entity(value = SecurityGroup.class) public class SecurityGroupResponse extends BaseResponse implements ControlledEntityResponse{ @SerializedName(ApiConstants.ID) @Param(description="the ID of the security group") private IdentityProxy id = new IdentityProxy("security_group"); diff --git a/api/src/com/cloud/api/response/UserVmResponse.java b/api/src/com/cloud/api/response/UserVmResponse.java index d1f70e065bc..e7665b5404b 100755 --- a/api/src/com/cloud/api/response/UserVmResponse.java +++ b/api/src/com/cloud/api/response/UserVmResponse.java @@ -20,11 +20,14 @@ import java.util.Date; import java.util.List; 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"); diff --git a/api/src/com/cloud/api/response/ZoneResponse.java b/api/src/com/cloud/api/response/ZoneResponse.java index 147e8a70db4..12967449791 100755 --- a/api/src/com/cloud/api/response/ZoneResponse.java +++ b/api/src/com/cloud/api/response/ZoneResponse.java @@ -19,11 +19,14 @@ package com.cloud.api.response; import java.util.List; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.Entity; +import com.cloud.dc.DataCenter; import com.cloud.utils.IdentityProxy; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; @SuppressWarnings("unused") +@Entity(value = DataCenter.class) public class ZoneResponse extends BaseResponse { @SerializedName(ApiConstants.ID) @Param(description="Zone id") private IdentityProxy id = new IdentityProxy("data_center"); diff --git a/api/src/org/apache/cloudstack/api/Entity.java b/api/src/org/apache/cloudstack/api/Entity.java new file mode 100644 index 00000000000..58c27bacc36 --- /dev/null +++ b/api/src/org/apache/cloudstack/api/Entity.java @@ -0,0 +1,28 @@ +// 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 org.apache.cloudstack.api; + +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; + +/* There is a one on one mapping between the Entity and the EntityResponse + * to the OTW layer. Value is the actual entity class it refers to. + */ +@Retention(RetentionPolicy.RUNTIME) +public @interface Entity { + Class[] value() default {}; +} \ No newline at end of file diff --git a/api/src/org/apache/cloudstack/api/Parameter.java b/api/src/org/apache/cloudstack/api/Parameter.java index 2364d4f97c2..470ad260d70 100644 --- a/api/src/org/apache/cloudstack/api/Parameter.java +++ b/api/src/org/apache/cloudstack/api/Parameter.java @@ -37,6 +37,8 @@ public @interface Parameter { CommandType collectionType() default CommandType.OBJECT; + Class[] entityType() default Object.class; + boolean expose() default true; boolean includeInApiDoc() default true; From 678181ac35ad83240ce7bb1505bc32ce12d8990f Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Wed, 5 Dec 2012 13:59:54 -0800 Subject: [PATCH 042/421] api_refactor: move network api for admin pkg Signed-off-by: Rohit Yadav --- api/src/com/cloud/network/StorageNetworkService.java | 2 +- .../api/admin/network/command}/CreatePhysicalNetworkCmd.java | 2 +- .../network/command}/CreateStorageNetworkIpRangeCmd.java | 2 +- ...tworkIpRangeCmd.java => ListStorageNetworkIpRangeCmd.java} | 0 client/tomcatconf/commands.properties.in | 4 ++-- server/src/com/cloud/network/StorageNetworkManagerImpl.java | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/admin/network/command}/CreatePhysicalNetworkCmd.java (99%) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/admin/network/command}/CreateStorageNetworkIpRangeCmd.java (98%) rename api/src/org/apache/cloudstack/api/admin/network/command/{listStorageNetworkIpRangeCmd.java => ListStorageNetworkIpRangeCmd.java} (100%) diff --git a/api/src/com/cloud/network/StorageNetworkService.java b/api/src/com/cloud/network/StorageNetworkService.java index 1cc92ede0c7..7a7c5cad91d 100755 --- a/api/src/com/cloud/network/StorageNetworkService.java +++ b/api/src/com/cloud/network/StorageNetworkService.java @@ -19,7 +19,7 @@ package com.cloud.network; import java.sql.SQLException; import java.util.List; -import com.cloud.api.commands.CreateStorageNetworkIpRangeCmd; +import org.apache.cloudstack.api.admin.network.command.CreateStorageNetworkIpRangeCmd; import org.apache.cloudstack.api.admin.network.command.DeleteStorageNetworkIpRangeCmd; import org.apache.cloudstack.api.admin.network.command.UpdateStorageNetworkIpRangeCmd; import org.apache.cloudstack.api.admin.network.command.ListStorageNetworkIpRangeCmd; diff --git a/api/src/com/cloud/api/commands/CreatePhysicalNetworkCmd.java b/api/src/org/apache/cloudstack/api/admin/network/command/CreatePhysicalNetworkCmd.java similarity index 99% rename from api/src/com/cloud/api/commands/CreatePhysicalNetworkCmd.java rename to api/src/org/apache/cloudstack/api/admin/network/command/CreatePhysicalNetworkCmd.java index 39829b2e883..5216e722852 100644 --- a/api/src/com/cloud/api/commands/CreatePhysicalNetworkCmd.java +++ b/api/src/org/apache/cloudstack/api/admin/network/command/CreatePhysicalNetworkCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.admin.network.command; import java.util.List; diff --git a/api/src/com/cloud/api/commands/CreateStorageNetworkIpRangeCmd.java b/api/src/org/apache/cloudstack/api/admin/network/command/CreateStorageNetworkIpRangeCmd.java similarity index 98% rename from api/src/com/cloud/api/commands/CreateStorageNetworkIpRangeCmd.java rename to api/src/org/apache/cloudstack/api/admin/network/command/CreateStorageNetworkIpRangeCmd.java index 49a43952a91..5c0273bd701 100755 --- a/api/src/com/cloud/api/commands/CreateStorageNetworkIpRangeCmd.java +++ b/api/src/org/apache/cloudstack/api/admin/network/command/CreateStorageNetworkIpRangeCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.admin.network.command; import org.apache.log4j.Logger; diff --git a/api/src/org/apache/cloudstack/api/admin/network/command/listStorageNetworkIpRangeCmd.java b/api/src/org/apache/cloudstack/api/admin/network/command/ListStorageNetworkIpRangeCmd.java similarity index 100% rename from api/src/org/apache/cloudstack/api/admin/network/command/listStorageNetworkIpRangeCmd.java rename to api/src/org/apache/cloudstack/api/admin/network/command/ListStorageNetworkIpRangeCmd.java diff --git a/client/tomcatconf/commands.properties.in b/client/tomcatconf/commands.properties.in index 0504b27d7df..2c50991626b 100755 --- a/client/tomcatconf/commands.properties.in +++ b/client/tomcatconf/commands.properties.in @@ -344,7 +344,7 @@ updateHypervisorCapabilities=com.cloud.api.commands.UpdateHypervisorCapabilities listHypervisorCapabilities=com.cloud.api.commands.ListHypervisorCapabilitiesCmd;1 #### Physical Network commands -createPhysicalNetwork=com.cloud.api.commands.CreatePhysicalNetworkCmd;1 +createPhysicalNetwork=org.apache.cloudstack.api.admin.network.command.CreatePhysicalNetworkCmd;1 deletePhysicalNetwork=org.apache.cloudstack.api.admin.network.command.DeletePhysicalNetworkCmd;1 listPhysicalNetworks=org.apache.cloudstack.api.admin.network.command.ListPhysicalNetworksCmd;1 updatePhysicalNetwork=org.apache.cloudstack.api.admin.network.command.UpdatePhysicalNetworkCmd;1 @@ -364,7 +364,7 @@ updateTrafficType=com.cloud.api.commands.UpdateTrafficTypeCmd;1 listTrafficTypeImplementors=com.cloud.api.commands.ListTrafficTypeImplementorsCmd;1 #### Storage Network commands -createStorageNetworkIpRange=com.cloud.api.commands.CreateStorageNetworkIpRangeCmd;1 +createStorageNetworkIpRange=org.apache.cloudstack.api.admin.network.command.CreateStorageNetworkIpRangeCmd;1 deleteStorageNetworkIpRange=org.apache.cloudstack.api.admin.network.command.DeleteStorageNetworkIpRangeCmd;1 listStorageNetworkIpRange=org.apache.cloudstack.api.admin.network.command.ListStorageNetworkIpRangeCmd;1 updateStorageNetworkIpRange=org.apache.cloudstack.api.admin.network.command.UpdateStorageNetworkIpRangeCmd;1 diff --git a/server/src/com/cloud/network/StorageNetworkManagerImpl.java b/server/src/com/cloud/network/StorageNetworkManagerImpl.java index 6413e49cc6f..04dfcd3431f 100755 --- a/server/src/com/cloud/network/StorageNetworkManagerImpl.java +++ b/server/src/com/cloud/network/StorageNetworkManagerImpl.java @@ -25,11 +25,11 @@ import java.util.Map; import javax.ejb.Local; import javax.naming.ConfigurationException; +import org.apache.cloudstack.api.admin.network.command.CreateStorageNetworkIpRangeCmd; import org.apache.cloudstack.api.admin.network.command.ListStorageNetworkIpRangeCmd; import org.apache.cloudstack.api.admin.network.command.UpdateStorageNetworkIpRangeCmd; import org.apache.log4j.Logger; -import com.cloud.api.commands.CreateStorageNetworkIpRangeCmd; import org.apache.cloudstack.api.admin.network.command.DeleteStorageNetworkIpRangeCmd; import com.cloud.dc.HostPodVO; import com.cloud.dc.StorageNetworkIpRange; From c24118e7e8988b6cdd9397d394487923898a544f Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Wed, 5 Dec 2012 14:06:13 -0800 Subject: [PATCH 043/421] api_refactor: move network api for admin pkg from cloud-server to cloud-api - Remove a lot of junk - Fix commands.prop. - Move apis from cloud-server to cloud-api - Rename with org.apache.cloudstack namespace Signed-off-by: Rohit Yadav --- .../admin/network/command}/AddNetworkDeviceCmd.java | 2 +- .../network/command}/DeleteNetworkDeviceCmd.java | 2 +- .../admin/network/command}/ListNetworkDeviceCmd.java | 2 +- client/tomcatconf/commands.properties.in | 11 +++-------- .../cloud/network/ExternalNetworkDeviceManager.java | 6 +++--- .../network/ExternalNetworkDeviceManagerImpl.java | 6 +++--- 6 files changed, 12 insertions(+), 17 deletions(-) rename {server/src/com/cloud/api/commands => api/src/org/apache/cloudstack/api/admin/network/command}/AddNetworkDeviceCmd.java (98%) rename {server/src/com/cloud/api/commands => api/src/org/apache/cloudstack/api/admin/network/command}/DeleteNetworkDeviceCmd.java (98%) rename {server/src/com/cloud/api/commands => api/src/org/apache/cloudstack/api/admin/network/command}/ListNetworkDeviceCmd.java (98%) diff --git a/server/src/com/cloud/api/commands/AddNetworkDeviceCmd.java b/api/src/org/apache/cloudstack/api/admin/network/command/AddNetworkDeviceCmd.java similarity index 98% rename from server/src/com/cloud/api/commands/AddNetworkDeviceCmd.java rename to api/src/org/apache/cloudstack/api/admin/network/command/AddNetworkDeviceCmd.java index 20fd7f10f7e..8c597d5a874 100644 --- a/server/src/com/cloud/api/commands/AddNetworkDeviceCmd.java +++ b/api/src/org/apache/cloudstack/api/admin/network/command/AddNetworkDeviceCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.admin.network.command; import java.util.Map; diff --git a/server/src/com/cloud/api/commands/DeleteNetworkDeviceCmd.java b/api/src/org/apache/cloudstack/api/admin/network/command/DeleteNetworkDeviceCmd.java similarity index 98% rename from server/src/com/cloud/api/commands/DeleteNetworkDeviceCmd.java rename to api/src/org/apache/cloudstack/api/admin/network/command/DeleteNetworkDeviceCmd.java index cd0c0b7649f..491e49a50c0 100644 --- a/server/src/com/cloud/api/commands/DeleteNetworkDeviceCmd.java +++ b/api/src/org/apache/cloudstack/api/admin/network/command/DeleteNetworkDeviceCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.admin.network.command; import org.apache.log4j.Logger; diff --git a/server/src/com/cloud/api/commands/ListNetworkDeviceCmd.java b/api/src/org/apache/cloudstack/api/admin/network/command/ListNetworkDeviceCmd.java similarity index 98% rename from server/src/com/cloud/api/commands/ListNetworkDeviceCmd.java rename to api/src/org/apache/cloudstack/api/admin/network/command/ListNetworkDeviceCmd.java index c3f206caf15..65c9e1cb871 100644 --- a/server/src/com/cloud/api/commands/ListNetworkDeviceCmd.java +++ b/api/src/org/apache/cloudstack/api/admin/network/command/ListNetworkDeviceCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.admin.network.command; import java.util.ArrayList; import java.util.List; diff --git a/client/tomcatconf/commands.properties.in b/client/tomcatconf/commands.properties.in index 2c50991626b..af0e45fbd2e 100755 --- a/client/tomcatconf/commands.properties.in +++ b/client/tomcatconf/commands.properties.in @@ -370,14 +370,9 @@ listStorageNetworkIpRange=org.apache.cloudstack.api.admin.network.command.ListSt updateStorageNetworkIpRange=org.apache.cloudstack.api.admin.network.command.UpdateStorageNetworkIpRangeCmd;1 ### Network Devices commands -addNetworkDevice=com.cloud.api.commands.AddNetworkDeviceCmd;1 -listNetworkDevice=com.cloud.api.commands.ListNetworkDeviceCmd;1 -deleteNetworkDevice=com.cloud.api.commands.DeleteNetworkDeviceCmd;1 - -### Network Devices commands -addNetworkDevice=com.cloud.api.commands.AddNetworkDeviceCmd;1 -listNetworkDevice=com.cloud.api.commands.ListNetworkDeviceCmd;1 -deleteNetworkDevice=com.cloud.api.commands.DeleteNetworkDeviceCmd;1 +addNetworkDevice=org.apache.cloudstack.api.admin.network.command.AddNetworkDeviceCmd;1 +listNetworkDevice=org.apache.cloudstack.api.admin.network.command.ListNetworkDeviceCmd;1 +deleteNetworkDevice=org.apache.cloudstack.api.admin.network.command.DeleteNetworkDeviceCmd;1 ### VPC commands createVPC=org.apache.cloudstack.api.user.vpc.command.CreateVPCCmd;15 diff --git a/server/src/com/cloud/network/ExternalNetworkDeviceManager.java b/server/src/com/cloud/network/ExternalNetworkDeviceManager.java index b1de86f70f2..fc66f877807 100644 --- a/server/src/com/cloud/network/ExternalNetworkDeviceManager.java +++ b/server/src/com/cloud/network/ExternalNetworkDeviceManager.java @@ -18,9 +18,9 @@ package com.cloud.network; import java.util.ArrayList; import java.util.List; -import com.cloud.api.commands.AddNetworkDeviceCmd; -import com.cloud.api.commands.DeleteNetworkDeviceCmd; -import com.cloud.api.commands.ListNetworkDeviceCmd; +import org.apache.cloudstack.api.admin.network.command.AddNetworkDeviceCmd; +import org.apache.cloudstack.api.admin.network.command.DeleteNetworkDeviceCmd; +import org.apache.cloudstack.api.admin.network.command.ListNetworkDeviceCmd; import com.cloud.host.Host; import com.cloud.server.api.response.NetworkDeviceResponse; import com.cloud.utils.component.Manager; diff --git a/server/src/com/cloud/network/ExternalNetworkDeviceManagerImpl.java b/server/src/com/cloud/network/ExternalNetworkDeviceManagerImpl.java index 3c1f87aa994..f73b0f9dad7 100755 --- a/server/src/com/cloud/network/ExternalNetworkDeviceManagerImpl.java +++ b/server/src/com/cloud/network/ExternalNetworkDeviceManagerImpl.java @@ -26,14 +26,14 @@ import java.util.concurrent.ScheduledExecutorService; import javax.ejb.Local; import javax.naming.ConfigurationException; +import org.apache.cloudstack.api.admin.network.command.AddNetworkDeviceCmd; +import org.apache.cloudstack.api.admin.network.command.ListNetworkDeviceCmd; import org.apache.log4j.Logger; import com.cloud.agent.AgentManager; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.IdentityService; -import com.cloud.api.commands.AddNetworkDeviceCmd; -import com.cloud.api.commands.DeleteNetworkDeviceCmd; -import com.cloud.api.commands.ListNetworkDeviceCmd; +import org.apache.cloudstack.api.admin.network.command.DeleteNetworkDeviceCmd; import com.cloud.baremetal.ExternalDhcpManager; import com.cloud.baremetal.PxeServerManager; import com.cloud.baremetal.PxeServerProfile; From 8d8285a8d4976dd3790e0262e183fd864b912a79 Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Wed, 5 Dec 2012 14:13:09 -0800 Subject: [PATCH 044/421] api_refactor: vpc admin apis Signed-off-by: Rohit Yadav --- .../api/admin/vpc/command}/CreatePrivateGatewayCmd.java | 2 +- .../api/admin/vpc/command}/DeletePrivateGatewayCmd.java | 2 +- client/tomcatconf/commands.properties.in | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/admin/vpc/command}/CreatePrivateGatewayCmd.java (99%) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/admin/vpc/command}/DeletePrivateGatewayCmd.java (98%) diff --git a/api/src/com/cloud/api/commands/CreatePrivateGatewayCmd.java b/api/src/org/apache/cloudstack/api/admin/vpc/command/CreatePrivateGatewayCmd.java similarity index 99% rename from api/src/com/cloud/api/commands/CreatePrivateGatewayCmd.java rename to api/src/org/apache/cloudstack/api/admin/vpc/command/CreatePrivateGatewayCmd.java index 191354f3241..8abb0be1d54 100644 --- a/api/src/com/cloud/api/commands/CreatePrivateGatewayCmd.java +++ b/api/src/org/apache/cloudstack/api/admin/vpc/command/CreatePrivateGatewayCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.admin.vpc.command; import org.apache.log4j.Logger; diff --git a/api/src/com/cloud/api/commands/DeletePrivateGatewayCmd.java b/api/src/org/apache/cloudstack/api/admin/vpc/command/DeletePrivateGatewayCmd.java similarity index 98% rename from api/src/com/cloud/api/commands/DeletePrivateGatewayCmd.java rename to api/src/org/apache/cloudstack/api/admin/vpc/command/DeletePrivateGatewayCmd.java index 1fac8083239..4128e10e8ad 100644 --- a/api/src/com/cloud/api/commands/DeletePrivateGatewayCmd.java +++ b/api/src/org/apache/cloudstack/api/admin/vpc/command/DeletePrivateGatewayCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.admin.vpc.command; import org.apache.log4j.Logger; diff --git a/client/tomcatconf/commands.properties.in b/client/tomcatconf/commands.properties.in index af0e45fbd2e..cb3f0786244 100755 --- a/client/tomcatconf/commands.properties.in +++ b/client/tomcatconf/commands.properties.in @@ -388,9 +388,9 @@ deleteVPCOffering=org.apache.cloudstack.api.admin.vpc.command.DeleteVPCOfferingC listVPCOfferings=org.apache.cloudstack.api.user.vpc.command.ListVPCOfferingsCmd;15 #### Private gateway commands -createPrivateGateway=com.cloud.api.commands.CreatePrivateGatewayCmd;1 +createPrivateGateway=org.apache.cloudstack.api.admin.vpc.command.CreatePrivateGatewayCmd;1 listPrivateGateways=org.apache.cloudstack.api.user.vpc.command.ListPrivateGatewaysCmd;15 -deletePrivateGateway=com.cloud.api.commands.DeletePrivateGatewayCmd;1 +deletePrivateGateway=org.apache.cloudstack.api.admin.vpc.command.DeletePrivateGatewayCmd;1 #### Network ACL commands createNetworkACL=org.apache.cloudstack.api.user.network.command.CreateNetworkACLCmd;15 From 55364478e5e26a33951172a7bc69c3454e047548 Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Wed, 5 Dec 2012 14:24:26 -0800 Subject: [PATCH 045/421] api_refactor: move vpn related apis to user.vpn Signed-off-by: Rohit Yadav --- api/src/com/cloud/network/vpn/RemoteAccessVpnService.java | 2 +- .../api/user/{vpn => user}/command/AddVpnUserCmd.java | 2 +- .../api/user/{vpn => user}/command/ListVpnUsersCmd.java | 2 +- .../api/user/{vpn => user}/command/RemoveVpnUserCmd.java | 2 +- .../src/com/cloud/api/commands/test/AddVpnUserCmdTest.java | 2 +- client/tomcatconf/commands.properties.in | 6 +++--- .../com/cloud/network/vpn/RemoteAccessVpnManagerImpl.java | 2 +- 7 files changed, 9 insertions(+), 9 deletions(-) rename api/src/org/apache/cloudstack/api/user/{vpn => user}/command/AddVpnUserCmd.java (99%) rename api/src/org/apache/cloudstack/api/user/{vpn => user}/command/ListVpnUsersCmd.java (98%) rename api/src/org/apache/cloudstack/api/user/{vpn => user}/command/RemoveVpnUserCmd.java (98%) diff --git a/api/src/com/cloud/network/vpn/RemoteAccessVpnService.java b/api/src/com/cloud/network/vpn/RemoteAccessVpnService.java index 80a23e9e757..6f6a817b8ba 100644 --- a/api/src/com/cloud/network/vpn/RemoteAccessVpnService.java +++ b/api/src/com/cloud/network/vpn/RemoteAccessVpnService.java @@ -19,7 +19,7 @@ package com.cloud.network.vpn; import java.util.List; import org.apache.cloudstack.api.user.vpn.command.ListRemoteAccessVpnsCmd; -import org.apache.cloudstack.api.user.vpn.command.ListVpnUsersCmd; +import org.apache.cloudstack.api.user.user.command.ListVpnUsersCmd; import com.cloud.exception.NetworkRuleConflictException; import com.cloud.exception.ResourceUnavailableException; import com.cloud.network.RemoteAccessVpn; diff --git a/api/src/org/apache/cloudstack/api/user/vpn/command/AddVpnUserCmd.java b/api/src/org/apache/cloudstack/api/user/user/command/AddVpnUserCmd.java similarity index 99% rename from api/src/org/apache/cloudstack/api/user/vpn/command/AddVpnUserCmd.java rename to api/src/org/apache/cloudstack/api/user/user/command/AddVpnUserCmd.java index 537356beea7..520db9d4126 100644 --- a/api/src/org/apache/cloudstack/api/user/vpn/command/AddVpnUserCmd.java +++ b/api/src/org/apache/cloudstack/api/user/user/command/AddVpnUserCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.user.vpn.command; +package org.apache.cloudstack.api.user.user.command; import org.apache.log4j.Logger; diff --git a/api/src/org/apache/cloudstack/api/user/vpn/command/ListVpnUsersCmd.java b/api/src/org/apache/cloudstack/api/user/user/command/ListVpnUsersCmd.java similarity index 98% rename from api/src/org/apache/cloudstack/api/user/vpn/command/ListVpnUsersCmd.java rename to api/src/org/apache/cloudstack/api/user/user/command/ListVpnUsersCmd.java index 72b3ec166d4..1b1bcbbc392 100644 --- a/api/src/org/apache/cloudstack/api/user/vpn/command/ListVpnUsersCmd.java +++ b/api/src/org/apache/cloudstack/api/user/user/command/ListVpnUsersCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.user.vpn.command; +package org.apache.cloudstack.api.user.user.command; import java.util.ArrayList; import java.util.List; diff --git a/api/src/org/apache/cloudstack/api/user/vpn/command/RemoveVpnUserCmd.java b/api/src/org/apache/cloudstack/api/user/user/command/RemoveVpnUserCmd.java similarity index 98% rename from api/src/org/apache/cloudstack/api/user/vpn/command/RemoveVpnUserCmd.java rename to api/src/org/apache/cloudstack/api/user/user/command/RemoveVpnUserCmd.java index ee230879d7e..51d44fe8ebc 100644 --- a/api/src/org/apache/cloudstack/api/user/vpn/command/RemoveVpnUserCmd.java +++ b/api/src/org/apache/cloudstack/api/user/user/command/RemoveVpnUserCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.user.vpn.command; +package org.apache.cloudstack.api.user.user.command; import org.apache.log4j.Logger; diff --git a/api/test/src/com/cloud/api/commands/test/AddVpnUserCmdTest.java b/api/test/src/com/cloud/api/commands/test/AddVpnUserCmdTest.java index 0d2945da042..ce5d4f20286 100644 --- a/api/test/src/com/cloud/api/commands/test/AddVpnUserCmdTest.java +++ b/api/test/src/com/cloud/api/commands/test/AddVpnUserCmdTest.java @@ -19,7 +19,7 @@ package src.com.cloud.api.commands.test; import junit.framework.Assert; import junit.framework.TestCase; -import org.apache.cloudstack.api.user.vpn.command.AddVpnUserCmd; +import org.apache.cloudstack.api.user.user.command.AddVpnUserCmd; import org.junit.Before; import org.junit.Rule; import org.junit.Test; diff --git a/client/tomcatconf/commands.properties.in b/client/tomcatconf/commands.properties.in index cb3f0786244..de7cc2a5ad3 100755 --- a/client/tomcatconf/commands.properties.in +++ b/client/tomcatconf/commands.properties.in @@ -297,9 +297,9 @@ createRemoteAccessVpn=org.apache.cloudstack.api.user.vpn.command.CreateRemoteAcc deleteRemoteAccessVpn=org.apache.cloudstack.api.user.vpn.command.DeleteRemoteAccessVpnCmd;15 listRemoteAccessVpns=org.apache.cloudstack.api.user.vpn.command.ListRemoteAccessVpnsCmd;15 -addVpnUser=org.apache.cloudstack.api.user.vpn.command.AddVpnUserCmd;15 -removeVpnUser=org.apache.cloudstack.api.user.vpn.command.RemoveVpnUserCmd;15 -listVpnUsers=org.apache.cloudstack.api.user.vpn.command.ListVpnUsersCmd;15 +addVpnUser=org.apache.cloudstack.api.user.user.command.AddVpnUserCmd;15 +removeVpnUser=org.apache.cloudstack.api.user.user.command.RemoveVpnUserCmd;15 +listVpnUsers=org.apache.cloudstack.api.user.user.command.ListVpnUsersCmd;15 #### network offering commands createNetworkOffering=org.apache.cloudstack.api.admin.network.command.CreateNetworkOfferingCmd;1 diff --git a/server/src/com/cloud/network/vpn/RemoteAccessVpnManagerImpl.java b/server/src/com/cloud/network/vpn/RemoteAccessVpnManagerImpl.java index 5ccccf0aff3..1c60251867f 100755 --- a/server/src/com/cloud/network/vpn/RemoteAccessVpnManagerImpl.java +++ b/server/src/com/cloud/network/vpn/RemoteAccessVpnManagerImpl.java @@ -23,7 +23,7 @@ import java.util.Map; import javax.ejb.Local; import javax.naming.ConfigurationException; -import org.apache.cloudstack.api.user.vpn.command.ListVpnUsersCmd; +import org.apache.cloudstack.api.user.user.command.ListVpnUsersCmd; import org.apache.log4j.Logger; import org.apache.cloudstack.api.user.vpn.command.ListRemoteAccessVpnsCmd; From 52c35bc30d83d5070e13ec6175931f6f15426576 Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Wed, 5 Dec 2012 14:27:13 -0800 Subject: [PATCH 046/421] api_refactor: make interfaces public as some of the stuff move to cloud-api Signed-off-by: Rohit Yadav --- api/src/org/apache/cloudstack/api/BaseCmd.java | 2 +- api/src/org/apache/cloudstack/api/BaseListCmd.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/api/src/org/apache/cloudstack/api/BaseCmd.java b/api/src/org/apache/cloudstack/api/BaseCmd.java index e7701fb0107..24e36dd7019 100755 --- a/api/src/org/apache/cloudstack/api/BaseCmd.java +++ b/api/src/org/apache/cloudstack/api/BaseCmd.java @@ -141,7 +141,7 @@ public abstract class BaseCmd { public static NetworkACLService _networkACLService; public static Site2SiteVpnService _s2sVpnService; - static void setComponents(ResponseGenerator generator) { + public static void setComponents(ResponseGenerator generator) { ComponentLocator locator = ComponentLocator.getLocator(ManagementService.Name); _mgr = (ManagementService) ComponentLocator.getComponent(ManagementService.Name); _accountService = locator.getManager(AccountService.class); diff --git a/api/src/org/apache/cloudstack/api/BaseListCmd.java b/api/src/org/apache/cloudstack/api/BaseListCmd.java index 19cf7180c52..58e83f70929 100755 --- a/api/src/org/apache/cloudstack/api/BaseListCmd.java +++ b/api/src/org/apache/cloudstack/api/BaseListCmd.java @@ -62,7 +62,7 @@ public abstract class BaseListCmd extends BaseCmd { return pageSize; } - static void configure() { + public static void configure() { if (_configService.getDefaultPageSize().longValue() != PAGESIZE_UNLIMITED) { MAX_PAGESIZE = _configService.getDefaultPageSize(); } From 0bbe82e8e12c93b69e74414d2d54f0707fe1557c Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Wed, 5 Dec 2012 14:29:31 -0800 Subject: [PATCH 047/421] api_refactor: move usage apis in parts to admin.usage Signed-off-by: Rohit Yadav --- .../api/admin/usage/command}/AddTrafficTypeCmd.java | 2 +- .../api/admin/usage/command}/DeleteTrafficTypeCmd.java | 2 +- .../api/admin/usage/command}/ListTrafficTypesCmd.java | 2 +- client/tomcatconf/commands.properties.in | 6 +++--- 4 files changed, 6 insertions(+), 6 deletions(-) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/admin/usage/command}/AddTrafficTypeCmd.java (99%) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/admin/usage/command}/DeleteTrafficTypeCmd.java (98%) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/admin/usage/command}/ListTrafficTypesCmd.java (98%) diff --git a/api/src/com/cloud/api/commands/AddTrafficTypeCmd.java b/api/src/org/apache/cloudstack/api/admin/usage/command/AddTrafficTypeCmd.java similarity index 99% rename from api/src/com/cloud/api/commands/AddTrafficTypeCmd.java rename to api/src/org/apache/cloudstack/api/admin/usage/command/AddTrafficTypeCmd.java index 9ca682c6613..6135741e464 100644 --- a/api/src/com/cloud/api/commands/AddTrafficTypeCmd.java +++ b/api/src/org/apache/cloudstack/api/admin/usage/command/AddTrafficTypeCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.admin.usage.command; import org.apache.log4j.Logger; diff --git a/api/src/com/cloud/api/commands/DeleteTrafficTypeCmd.java b/api/src/org/apache/cloudstack/api/admin/usage/command/DeleteTrafficTypeCmd.java similarity index 98% rename from api/src/com/cloud/api/commands/DeleteTrafficTypeCmd.java rename to api/src/org/apache/cloudstack/api/admin/usage/command/DeleteTrafficTypeCmd.java index 1a67e8469ff..a7a2b7d7a9e 100644 --- a/api/src/com/cloud/api/commands/DeleteTrafficTypeCmd.java +++ b/api/src/org/apache/cloudstack/api/admin/usage/command/DeleteTrafficTypeCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.admin.usage.command; import org.apache.log4j.Logger; diff --git a/api/src/com/cloud/api/commands/ListTrafficTypesCmd.java b/api/src/org/apache/cloudstack/api/admin/usage/command/ListTrafficTypesCmd.java similarity index 98% rename from api/src/com/cloud/api/commands/ListTrafficTypesCmd.java rename to api/src/org/apache/cloudstack/api/admin/usage/command/ListTrafficTypesCmd.java index 17bd32ddffe..d3fe699c7f0 100755 --- a/api/src/com/cloud/api/commands/ListTrafficTypesCmd.java +++ b/api/src/org/apache/cloudstack/api/admin/usage/command/ListTrafficTypesCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.admin.usage.command; import java.util.ArrayList; import java.util.List; diff --git a/client/tomcatconf/commands.properties.in b/client/tomcatconf/commands.properties.in index de7cc2a5ad3..4731bfc0031 100755 --- a/client/tomcatconf/commands.properties.in +++ b/client/tomcatconf/commands.properties.in @@ -357,9 +357,9 @@ listNetworkServiceProviders=org.apache.cloudstack.api.admin.network.command.List updateNetworkServiceProvider=org.apache.cloudstack.api.admin.network.command.UpdateNetworkServiceProviderCmd;1 #### Physical Network Traffic Type commands -addTrafficType=com.cloud.api.commands.AddTrafficTypeCmd;1 -deleteTrafficType=com.cloud.api.commands.DeleteTrafficTypeCmd;1 -listTrafficTypes=com.cloud.api.commands.ListTrafficTypesCmd;1 +addTrafficType=org.apache.cloudstack.api.admin.usage.command.AddTrafficTypeCmd;1 +deleteTrafficType=org.apache.cloudstack.api.admin.usage.command.DeleteTrafficTypeCmd;1 +listTrafficTypes=org.apache.cloudstack.api.admin.usage.command.ListTrafficTypesCmd;1 updateTrafficType=com.cloud.api.commands.UpdateTrafficTypeCmd;1 listTrafficTypeImplementors=com.cloud.api.commands.ListTrafficTypeImplementorsCmd;1 From e07106db0bada572912f6f114589d86a553199b0 Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Wed, 5 Dec 2012 14:31:31 -0800 Subject: [PATCH 048/421] api_refactor: usage apis to admin.usage pkg Signed-off-by: Rohit Yadav --- api/src/com/cloud/network/NetworkService.java | 2 +- .../admin/usage/command}/ListTrafficTypeImplementorsCmd.java | 2 +- .../api/admin/usage/command}/UpdateTrafficTypeCmd.java | 2 +- client/tomcatconf/commands.properties.in | 4 ++-- server/src/com/cloud/network/NetworkManagerImpl.java | 2 +- server/test/com/cloud/network/MockNetworkManagerImpl.java | 2 +- server/test/com/cloud/vpc/MockNetworkManagerImpl.java | 2 +- 7 files changed, 8 insertions(+), 8 deletions(-) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/admin/usage/command}/ListTrafficTypeImplementorsCmd.java (98%) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/admin/usage/command}/UpdateTrafficTypeCmd.java (98%) diff --git a/api/src/com/cloud/network/NetworkService.java b/api/src/com/cloud/network/NetworkService.java index b71b86703fb..b5ba1e3e84d 100755 --- a/api/src/com/cloud/network/NetworkService.java +++ b/api/src/com/cloud/network/NetworkService.java @@ -20,9 +20,9 @@ import java.util.List; import java.util.Map; import java.util.Set; +import org.apache.cloudstack.api.admin.usage.command.ListTrafficTypeImplementorsCmd; import org.apache.cloudstack.api.user.network.command.CreateNetworkCmd; import org.apache.cloudstack.api.user.network.command.ListNetworksCmd; -import com.cloud.api.commands.ListTrafficTypeImplementorsCmd; import org.apache.cloudstack.api.user.network.command.RestartNetworkCmd; import com.cloud.exception.ConcurrentOperationException; import com.cloud.exception.InsufficientAddressCapacityException; diff --git a/api/src/com/cloud/api/commands/ListTrafficTypeImplementorsCmd.java b/api/src/org/apache/cloudstack/api/admin/usage/command/ListTrafficTypeImplementorsCmd.java similarity index 98% rename from api/src/com/cloud/api/commands/ListTrafficTypeImplementorsCmd.java rename to api/src/org/apache/cloudstack/api/admin/usage/command/ListTrafficTypeImplementorsCmd.java index ed1ec439be7..1a7db85d562 100755 --- a/api/src/com/cloud/api/commands/ListTrafficTypeImplementorsCmd.java +++ b/api/src/org/apache/cloudstack/api/admin/usage/command/ListTrafficTypeImplementorsCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.admin.usage.command; import java.util.ArrayList; import java.util.List; diff --git a/api/src/com/cloud/api/commands/UpdateTrafficTypeCmd.java b/api/src/org/apache/cloudstack/api/admin/usage/command/UpdateTrafficTypeCmd.java similarity index 98% rename from api/src/com/cloud/api/commands/UpdateTrafficTypeCmd.java rename to api/src/org/apache/cloudstack/api/admin/usage/command/UpdateTrafficTypeCmd.java index 2a24372996e..cca4d3d0ba7 100644 --- a/api/src/com/cloud/api/commands/UpdateTrafficTypeCmd.java +++ b/api/src/org/apache/cloudstack/api/admin/usage/command/UpdateTrafficTypeCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.admin.usage.command; import org.apache.log4j.Logger; diff --git a/client/tomcatconf/commands.properties.in b/client/tomcatconf/commands.properties.in index 4731bfc0031..3df1ca664db 100755 --- a/client/tomcatconf/commands.properties.in +++ b/client/tomcatconf/commands.properties.in @@ -360,8 +360,8 @@ updateNetworkServiceProvider=org.apache.cloudstack.api.admin.network.command.Upd addTrafficType=org.apache.cloudstack.api.admin.usage.command.AddTrafficTypeCmd;1 deleteTrafficType=org.apache.cloudstack.api.admin.usage.command.DeleteTrafficTypeCmd;1 listTrafficTypes=org.apache.cloudstack.api.admin.usage.command.ListTrafficTypesCmd;1 -updateTrafficType=com.cloud.api.commands.UpdateTrafficTypeCmd;1 -listTrafficTypeImplementors=com.cloud.api.commands.ListTrafficTypeImplementorsCmd;1 +updateTrafficType=org.apache.cloudstack.api.admin.usage.command.UpdateTrafficTypeCmd;1 +listTrafficTypeImplementors=org.apache.cloudstack.api.admin.usage.command.ListTrafficTypeImplementorsCmd;1 #### Storage Network commands createStorageNetworkIpRange=org.apache.cloudstack.api.admin.network.command.CreateStorageNetworkIpRangeCmd;1 diff --git a/server/src/com/cloud/network/NetworkManagerImpl.java b/server/src/com/cloud/network/NetworkManagerImpl.java index a4511414149..542efa7e7b6 100755 --- a/server/src/com/cloud/network/NetworkManagerImpl.java +++ b/server/src/com/cloud/network/NetworkManagerImpl.java @@ -40,6 +40,7 @@ import java.util.concurrent.TimeUnit; import javax.ejb.Local; import javax.naming.ConfigurationException; +import org.apache.cloudstack.api.admin.usage.command.ListTrafficTypeImplementorsCmd; import org.apache.cloudstack.api.user.network.command.CreateNetworkCmd; import org.apache.log4j.Logger; @@ -58,7 +59,6 @@ import com.cloud.agent.api.StartupRoutingCommand; import com.cloud.agent.api.to.NicTO; import com.cloud.alert.AlertManager; import org.apache.cloudstack.api.user.network.command.ListNetworksCmd; -import com.cloud.api.commands.ListTrafficTypeImplementorsCmd; import org.apache.cloudstack.api.user.network.command.RestartNetworkCmd; import com.cloud.configuration.Config; import com.cloud.configuration.ConfigurationManager; diff --git a/server/test/com/cloud/network/MockNetworkManagerImpl.java b/server/test/com/cloud/network/MockNetworkManagerImpl.java index fef1eb0faa0..99e491f60b3 100755 --- a/server/test/com/cloud/network/MockNetworkManagerImpl.java +++ b/server/test/com/cloud/network/MockNetworkManagerImpl.java @@ -25,9 +25,9 @@ import javax.ejb.Local; import javax.naming.ConfigurationException; import com.cloud.acl.ControlledEntity.ACLType; +import org.apache.cloudstack.api.admin.usage.command.ListTrafficTypeImplementorsCmd; import org.apache.cloudstack.api.user.network.command.CreateNetworkCmd; import org.apache.cloudstack.api.user.network.command.ListNetworksCmd; -import com.cloud.api.commands.ListTrafficTypeImplementorsCmd; import org.apache.cloudstack.api.user.network.command.RestartNetworkCmd; import com.cloud.dc.DataCenter; import com.cloud.dc.Vlan; diff --git a/server/test/com/cloud/vpc/MockNetworkManagerImpl.java b/server/test/com/cloud/vpc/MockNetworkManagerImpl.java index 344b59e3913..8a7866e88cb 100644 --- a/server/test/com/cloud/vpc/MockNetworkManagerImpl.java +++ b/server/test/com/cloud/vpc/MockNetworkManagerImpl.java @@ -25,12 +25,12 @@ import java.util.Set; import javax.ejb.Local; import javax.naming.ConfigurationException; +import org.apache.cloudstack.api.admin.usage.command.ListTrafficTypeImplementorsCmd; import org.apache.cloudstack.api.user.network.command.ListNetworksCmd; import org.apache.log4j.Logger; import com.cloud.acl.ControlledEntity.ACLType; import org.apache.cloudstack.api.user.network.command.CreateNetworkCmd; -import com.cloud.api.commands.ListTrafficTypeImplementorsCmd; import org.apache.cloudstack.api.user.network.command.RestartNetworkCmd; import com.cloud.dc.DataCenter; import com.cloud.dc.Vlan; From 0799052d7014611de1f0e8a16f6503ee243df901 Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Wed, 5 Dec 2012 14:40:45 -0800 Subject: [PATCH 049/421] commands-ext.properties.in: remove duplication, same in commands.properties.in Signed-off-by: Rohit Yadav --- client/tomcatconf/commands-ext.properties.in | 7 ------- 1 file changed, 7 deletions(-) diff --git a/client/tomcatconf/commands-ext.properties.in b/client/tomcatconf/commands-ext.properties.in index f172067ede9..cd1d0eac066 100644 --- a/client/tomcatconf/commands-ext.properties.in +++ b/client/tomcatconf/commands-ext.properties.in @@ -20,13 +20,6 @@ generateUsageRecords=com.cloud.api.commands.GenerateUsageRecordsCmd;1 listUsageRecords=com.cloud.api.commands.GetUsageRecordsCmd;1 listUsageTypes=com.cloud.api.commands.ListUsageTypesCmd;1 - - -### Network Devices commands -addNetworkDevice=com.cloud.api.commands.AddNetworkDeviceCmd;1 -listNetworkDevice=com.cloud.api.commands.ListNetworkDeviceCmd;1 -deleteNetworkDevice=com.cloud.api.commands.DeleteNetworkDeviceCmd;1 - #### traffic monitor commands addTrafficMonitor=com.cloud.api.commands.AddTrafficMonitorCmd;1 deleteTrafficMonitor=com.cloud.api.commands.DeleteTrafficMonitorCmd;1 From ba8e61bfb5a810dbf66a2dd8ccd35377457c85ef Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Wed, 5 Dec 2012 14:53:16 -0800 Subject: [PATCH 050/421] api_refactoring: for network api refactoring move interfaces so it works Move ExternalNetworkDeviceManager to cloud-api, as server depends on cloud-api The api refactoring of one of the api required this interface Signed-off-by: Rohit Yadav --- .../api/admin/network/command/AddNetworkDeviceCmd.java | 4 ++-- .../api/admin/network}/response/NetworkDeviceResponse.java | 2 +- .../cloudstack}/network/ExternalNetworkDeviceManager.java | 6 ++++-- .../network/element/F5ExternalLoadBalancerElement.java | 2 +- .../network/element/JuniperSRXExternalFirewallElement.java | 2 +- .../src/com/cloud/network/element/NetscalerElement.java | 2 +- .../src/com/cloud/network/element/NiciraNvpElement.java | 2 +- .../cloud/network/ExternalFirewallDeviceManagerImpl.java | 2 +- .../network/ExternalLoadBalancerDeviceManagerImpl.java | 2 +- .../src/com/cloud/network/ExternalLoadBalancerDeviceVO.java | 2 ++ .../com/cloud/network/ExternalNetworkDeviceManagerImpl.java | 3 ++- .../cloud/server/api/response/ExternalFirewallResponse.java | 1 + .../server/api/response/ExternalLoadBalancerResponse.java | 1 + .../com/cloud/server/api/response/NwDeviceDhcpResponse.java | 1 + .../server/api/response/NwDevicePxeServerResponse.java | 1 + 15 files changed, 21 insertions(+), 12 deletions(-) rename {server/src/com/cloud/server/api => api/src/org/apache/cloudstack/api/admin/network}/response/NetworkDeviceResponse.java (95%) rename {server/src/com/cloud => api/src/org/apache/cloudstack}/network/ExternalNetworkDeviceManager.java (95%) diff --git a/api/src/org/apache/cloudstack/api/admin/network/command/AddNetworkDeviceCmd.java b/api/src/org/apache/cloudstack/api/admin/network/command/AddNetworkDeviceCmd.java index 8c597d5a874..8d63f0e091f 100644 --- a/api/src/org/apache/cloudstack/api/admin/network/command/AddNetworkDeviceCmd.java +++ b/api/src/org/apache/cloudstack/api/admin/network/command/AddNetworkDeviceCmd.java @@ -31,9 +31,9 @@ import com.cloud.exception.InvalidParameterValueException; import com.cloud.exception.ResourceAllocationException; import com.cloud.exception.ResourceUnavailableException; import com.cloud.host.Host; -import com.cloud.network.ExternalNetworkDeviceManager; +import org.apache.cloudstack.network.ExternalNetworkDeviceManager; import com.cloud.server.ManagementService; -import com.cloud.server.api.response.NetworkDeviceResponse; +import org.apache.cloudstack.api.admin.network.response.NetworkDeviceResponse; import com.cloud.utils.component.ComponentLocator; import com.cloud.utils.exception.CloudRuntimeException; diff --git a/server/src/com/cloud/server/api/response/NetworkDeviceResponse.java b/api/src/org/apache/cloudstack/api/admin/network/response/NetworkDeviceResponse.java similarity index 95% rename from server/src/com/cloud/server/api/response/NetworkDeviceResponse.java rename to api/src/org/apache/cloudstack/api/admin/network/response/NetworkDeviceResponse.java index 1c64a94fdf2..f4435bedeb4 100644 --- a/server/src/com/cloud/server/api/response/NetworkDeviceResponse.java +++ b/api/src/org/apache/cloudstack/api/admin/network/response/NetworkDeviceResponse.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.server.api.response; +package org.apache.cloudstack.api.admin.network.response; import org.apache.cloudstack.api.ApiConstants; import com.cloud.utils.IdentityProxy; diff --git a/server/src/com/cloud/network/ExternalNetworkDeviceManager.java b/api/src/org/apache/cloudstack/network/ExternalNetworkDeviceManager.java similarity index 95% rename from server/src/com/cloud/network/ExternalNetworkDeviceManager.java rename to api/src/org/apache/cloudstack/network/ExternalNetworkDeviceManager.java index fc66f877807..35cab8e26b0 100644 --- a/server/src/com/cloud/network/ExternalNetworkDeviceManager.java +++ b/api/src/org/apache/cloudstack/network/ExternalNetworkDeviceManager.java @@ -14,15 +14,17 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.network; +package org.apache.cloudstack.network; import java.util.ArrayList; import java.util.List; + +import com.cloud.network.Network; import org.apache.cloudstack.api.admin.network.command.AddNetworkDeviceCmd; import org.apache.cloudstack.api.admin.network.command.DeleteNetworkDeviceCmd; import org.apache.cloudstack.api.admin.network.command.ListNetworkDeviceCmd; import com.cloud.host.Host; -import com.cloud.server.api.response.NetworkDeviceResponse; +import org.apache.cloudstack.api.admin.network.response.NetworkDeviceResponse; import com.cloud.utils.component.Manager; public interface ExternalNetworkDeviceManager extends Manager { diff --git a/plugins/network-elements/f5/src/com/cloud/network/element/F5ExternalLoadBalancerElement.java b/plugins/network-elements/f5/src/com/cloud/network/element/F5ExternalLoadBalancerElement.java index 00114f2575f..5710e606508 100644 --- a/plugins/network-elements/f5/src/com/cloud/network/element/F5ExternalLoadBalancerElement.java +++ b/plugins/network-elements/f5/src/com/cloud/network/element/F5ExternalLoadBalancerElement.java @@ -55,7 +55,7 @@ import com.cloud.network.ExternalLoadBalancerDeviceManager; import com.cloud.network.ExternalLoadBalancerDeviceManagerImpl; import com.cloud.network.ExternalLoadBalancerDeviceVO; import com.cloud.network.ExternalLoadBalancerDeviceVO.LBDeviceState; -import com.cloud.network.ExternalNetworkDeviceManager.NetworkDevice; +import org.apache.cloudstack.network.ExternalNetworkDeviceManager.NetworkDevice; import com.cloud.network.Network; import com.cloud.network.Network.Capability; import com.cloud.network.Network.Provider; diff --git a/plugins/network-elements/juniper-srx/src/com/cloud/network/element/JuniperSRXExternalFirewallElement.java b/plugins/network-elements/juniper-srx/src/com/cloud/network/element/JuniperSRXExternalFirewallElement.java index 6e815476804..d3353af449d 100644 --- a/plugins/network-elements/juniper-srx/src/com/cloud/network/element/JuniperSRXExternalFirewallElement.java +++ b/plugins/network-elements/juniper-srx/src/com/cloud/network/element/JuniperSRXExternalFirewallElement.java @@ -55,7 +55,7 @@ import com.cloud.host.dao.HostDetailsDao; import com.cloud.network.ExternalFirewallDeviceManagerImpl; import com.cloud.network.ExternalFirewallDeviceVO; import com.cloud.network.ExternalFirewallDeviceVO.FirewallDeviceState; -import com.cloud.network.ExternalNetworkDeviceManager.NetworkDevice; +import org.apache.cloudstack.network.ExternalNetworkDeviceManager.NetworkDevice; import com.cloud.network.Network; import com.cloud.network.Network.Capability; import com.cloud.network.Network.Provider; diff --git a/plugins/network-elements/netscaler/src/com/cloud/network/element/NetscalerElement.java b/plugins/network-elements/netscaler/src/com/cloud/network/element/NetscalerElement.java index 455dcbd8063..3725a246f95 100644 --- a/plugins/network-elements/netscaler/src/com/cloud/network/element/NetscalerElement.java +++ b/plugins/network-elements/netscaler/src/com/cloud/network/element/NetscalerElement.java @@ -65,7 +65,7 @@ import com.cloud.network.ExternalLoadBalancerDeviceManager; import com.cloud.network.ExternalLoadBalancerDeviceManagerImpl; import com.cloud.network.ExternalLoadBalancerDeviceVO; import com.cloud.network.ExternalLoadBalancerDeviceVO.LBDeviceState; -import com.cloud.network.ExternalNetworkDeviceManager.NetworkDevice; +import org.apache.cloudstack.network.ExternalNetworkDeviceManager.NetworkDevice; import com.cloud.network.IpAddress; import com.cloud.network.NetScalerPodVO; import com.cloud.network.Network; diff --git a/plugins/network-elements/nicira-nvp/src/com/cloud/network/element/NiciraNvpElement.java b/plugins/network-elements/nicira-nvp/src/com/cloud/network/element/NiciraNvpElement.java index 46167364306..d38abcc6897 100644 --- a/plugins/network-elements/nicira-nvp/src/com/cloud/network/element/NiciraNvpElement.java +++ b/plugins/network-elements/nicira-nvp/src/com/cloud/network/element/NiciraNvpElement.java @@ -70,7 +70,7 @@ import com.cloud.host.HostVO; import com.cloud.host.dao.HostDao; import com.cloud.host.dao.HostDetailsDao; import com.cloud.network.Network; -import com.cloud.network.ExternalNetworkDeviceManager.NetworkDevice; +import org.apache.cloudstack.network.ExternalNetworkDeviceManager.NetworkDevice; import com.cloud.network.Network.Capability; import com.cloud.network.Network.Provider; import com.cloud.network.Network.Service; diff --git a/server/src/com/cloud/network/ExternalFirewallDeviceManagerImpl.java b/server/src/com/cloud/network/ExternalFirewallDeviceManagerImpl.java index c7d131290ae..292255b78f8 100644 --- a/server/src/com/cloud/network/ExternalFirewallDeviceManagerImpl.java +++ b/server/src/com/cloud/network/ExternalFirewallDeviceManagerImpl.java @@ -58,7 +58,7 @@ import com.cloud.host.Host; import com.cloud.host.HostVO; import com.cloud.host.dao.HostDao; import com.cloud.host.dao.HostDetailsDao; -import com.cloud.network.ExternalNetworkDeviceManager.NetworkDevice; +import org.apache.cloudstack.network.ExternalNetworkDeviceManager.NetworkDevice; import com.cloud.network.Networks.TrafficType; import com.cloud.network.dao.ExternalFirewallDeviceDao; import com.cloud.network.dao.IPAddressDao; diff --git a/server/src/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java b/server/src/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java index 448474fcfb4..dc4e42ab9bc 100644 --- a/server/src/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java +++ b/server/src/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java @@ -63,7 +63,7 @@ import com.cloud.host.dao.HostDao; import com.cloud.host.dao.HostDetailsDao; import com.cloud.network.ExternalLoadBalancerDeviceVO.LBDeviceAllocationState; import com.cloud.network.ExternalLoadBalancerDeviceVO.LBDeviceState; -import com.cloud.network.ExternalNetworkDeviceManager.NetworkDevice; +import org.apache.cloudstack.network.ExternalNetworkDeviceManager.NetworkDevice; import com.cloud.network.Network.Service; import com.cloud.network.Networks.TrafficType; import com.cloud.network.addr.PublicIp; diff --git a/server/src/com/cloud/network/ExternalLoadBalancerDeviceVO.java b/server/src/com/cloud/network/ExternalLoadBalancerDeviceVO.java index 190067b653b..84576320774 100644 --- a/server/src/com/cloud/network/ExternalLoadBalancerDeviceVO.java +++ b/server/src/com/cloud/network/ExternalLoadBalancerDeviceVO.java @@ -16,6 +16,8 @@ // under the License. package com.cloud.network; +import org.apache.cloudstack.network.ExternalNetworkDeviceManager; + import java.util.UUID; import javax.persistence.Column; diff --git a/server/src/com/cloud/network/ExternalNetworkDeviceManagerImpl.java b/server/src/com/cloud/network/ExternalNetworkDeviceManagerImpl.java index f73b0f9dad7..8767f95108c 100755 --- a/server/src/com/cloud/network/ExternalNetworkDeviceManagerImpl.java +++ b/server/src/com/cloud/network/ExternalNetworkDeviceManagerImpl.java @@ -28,6 +28,7 @@ import javax.naming.ConfigurationException; import org.apache.cloudstack.api.admin.network.command.AddNetworkDeviceCmd; import org.apache.cloudstack.api.admin.network.command.ListNetworkDeviceCmd; +import org.apache.cloudstack.network.ExternalNetworkDeviceManager; import org.apache.log4j.Logger; import com.cloud.agent.AgentManager; @@ -58,7 +59,7 @@ import com.cloud.network.dao.VpnUserDao; import com.cloud.network.rules.dao.PortForwardingRulesDao; import com.cloud.offerings.dao.NetworkOfferingDao; import com.cloud.server.ManagementServer; -import com.cloud.server.api.response.NetworkDeviceResponse; +import org.apache.cloudstack.api.admin.network.response.NetworkDeviceResponse; import com.cloud.server.api.response.NwDeviceDhcpResponse; import com.cloud.server.api.response.PxePingResponse; import com.cloud.user.AccountManager; diff --git a/server/src/com/cloud/server/api/response/ExternalFirewallResponse.java b/server/src/com/cloud/server/api/response/ExternalFirewallResponse.java index c419f23978e..6023ab61cad 100644 --- a/server/src/com/cloud/server/api/response/ExternalFirewallResponse.java +++ b/server/src/com/cloud/server/api/response/ExternalFirewallResponse.java @@ -20,6 +20,7 @@ import org.apache.cloudstack.api.ApiConstants; import com.cloud.utils.IdentityProxy; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; +import org.apache.cloudstack.api.admin.network.response.NetworkDeviceResponse; public class ExternalFirewallResponse extends NetworkDeviceResponse { diff --git a/server/src/com/cloud/server/api/response/ExternalLoadBalancerResponse.java b/server/src/com/cloud/server/api/response/ExternalLoadBalancerResponse.java index c1e8ca47aff..ed8d8be2605 100644 --- a/server/src/com/cloud/server/api/response/ExternalLoadBalancerResponse.java +++ b/server/src/com/cloud/server/api/response/ExternalLoadBalancerResponse.java @@ -20,6 +20,7 @@ import org.apache.cloudstack.api.ApiConstants; import com.cloud.utils.IdentityProxy; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; +import org.apache.cloudstack.api.admin.network.response.NetworkDeviceResponse; public class ExternalLoadBalancerResponse extends NetworkDeviceResponse { diff --git a/server/src/com/cloud/server/api/response/NwDeviceDhcpResponse.java b/server/src/com/cloud/server/api/response/NwDeviceDhcpResponse.java index d53fe1cfae3..d4c0046163b 100644 --- a/server/src/com/cloud/server/api/response/NwDeviceDhcpResponse.java +++ b/server/src/com/cloud/server/api/response/NwDeviceDhcpResponse.java @@ -19,6 +19,7 @@ package com.cloud.server.api.response; import org.apache.cloudstack.api.ApiConstants; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; +import org.apache.cloudstack.api.admin.network.response.NetworkDeviceResponse; public class NwDeviceDhcpResponse extends NetworkDeviceResponse { @SerializedName(ApiConstants.ZONE_ID) @Param(description="Zone where to add PXE server") diff --git a/server/src/com/cloud/server/api/response/NwDevicePxeServerResponse.java b/server/src/com/cloud/server/api/response/NwDevicePxeServerResponse.java index 61371ad7ee8..df1faec3519 100644 --- a/server/src/com/cloud/server/api/response/NwDevicePxeServerResponse.java +++ b/server/src/com/cloud/server/api/response/NwDevicePxeServerResponse.java @@ -20,6 +20,7 @@ import org.apache.cloudstack.api.ApiConstants; import com.cloud.utils.IdentityProxy; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; +import org.apache.cloudstack.api.admin.network.response.NetworkDeviceResponse; public class NwDevicePxeServerResponse extends NetworkDeviceResponse { From ceddaf122cdd857cd8269184dc0a478962095d35 Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Wed, 5 Dec 2012 14:55:58 -0800 Subject: [PATCH 051/421] api_refactor: refactor user apis Signed-off-by: Rohit Yadav --- api/src/com/cloud/user/AccountService.java | 6 +++--- .../api/admin/user/command}/CreateUserCmd.java | 2 +- .../api/admin/user/command}/DeleteUserCmd.java | 2 +- .../api/admin/user/command}/DisableUserCmd.java | 2 +- .../api/admin/user/command}/EnableUserCmd.java | 2 +- .../api/admin/user/command}/GetUserCmd.java | 2 +- .../api/admin/user/command}/ListUsersCmd.java | 2 +- .../api/admin/user/command}/UpdateUserCmd.java | 2 +- client/tomcatconf/commands.properties.in | 14 +++++++------- server/src/com/cloud/user/AccountManagerImpl.java | 6 +++--- .../com/cloud/user/MockAccountManagerImpl.java | 6 +++--- 11 files changed, 23 insertions(+), 23 deletions(-) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/admin/user/command}/CreateUserCmd.java (99%) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/admin/user/command}/DeleteUserCmd.java (98%) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/admin/user/command}/DisableUserCmd.java (98%) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/admin/user/command}/EnableUserCmd.java (98%) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/admin/user/command}/GetUserCmd.java (98%) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/admin/user/command}/ListUsersCmd.java (98%) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/admin/user/command}/UpdateUserCmd.java (98%) diff --git a/api/src/com/cloud/user/AccountService.java b/api/src/com/cloud/user/AccountService.java index 001d498e2dc..8be8e9ec325 100755 --- a/api/src/com/cloud/user/AccountService.java +++ b/api/src/com/cloud/user/AccountService.java @@ -21,12 +21,12 @@ import java.util.Map; import com.cloud.acl.ControlledEntity; import com.cloud.acl.SecurityChecker.AccessType; -import com.cloud.api.commands.DeleteUserCmd; +import org.apache.cloudstack.api.admin.user.command.DeleteUserCmd; +import org.apache.cloudstack.api.admin.user.command.UpdateUserCmd; import org.apache.cloudstack.api.user.account.command.ListAccountsCmd; -import com.cloud.api.commands.ListUsersCmd; +import org.apache.cloudstack.api.admin.user.command.ListUsersCmd; import com.cloud.api.commands.RegisterCmd; import com.cloud.api.commands.UpdateAccountCmd; -import com.cloud.api.commands.UpdateUserCmd; import com.cloud.domain.Domain; import com.cloud.exception.ConcurrentOperationException; import com.cloud.exception.PermissionDeniedException; diff --git a/api/src/com/cloud/api/commands/CreateUserCmd.java b/api/src/org/apache/cloudstack/api/admin/user/command/CreateUserCmd.java similarity index 99% rename from api/src/com/cloud/api/commands/CreateUserCmd.java rename to api/src/org/apache/cloudstack/api/admin/user/command/CreateUserCmd.java index 95b11dc92c1..a4b3bcac45c 100644 --- a/api/src/com/cloud/api/commands/CreateUserCmd.java +++ b/api/src/org/apache/cloudstack/api/admin/user/command/CreateUserCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.admin.user.command; import org.apache.log4j.Logger; diff --git a/api/src/com/cloud/api/commands/DeleteUserCmd.java b/api/src/org/apache/cloudstack/api/admin/user/command/DeleteUserCmd.java similarity index 98% rename from api/src/com/cloud/api/commands/DeleteUserCmd.java rename to api/src/org/apache/cloudstack/api/admin/user/command/DeleteUserCmd.java index 0f913e8eb23..5bdbfe7754f 100644 --- a/api/src/com/cloud/api/commands/DeleteUserCmd.java +++ b/api/src/org/apache/cloudstack/api/admin/user/command/DeleteUserCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.admin.user.command; import org.apache.log4j.Logger; diff --git a/api/src/com/cloud/api/commands/DisableUserCmd.java b/api/src/org/apache/cloudstack/api/admin/user/command/DisableUserCmd.java similarity index 98% rename from api/src/com/cloud/api/commands/DisableUserCmd.java rename to api/src/org/apache/cloudstack/api/admin/user/command/DisableUserCmd.java index c4997c2169b..37589915a2c 100644 --- a/api/src/com/cloud/api/commands/DisableUserCmd.java +++ b/api/src/org/apache/cloudstack/api/admin/user/command/DisableUserCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.admin.user.command; import org.apache.log4j.Logger; diff --git a/api/src/com/cloud/api/commands/EnableUserCmd.java b/api/src/org/apache/cloudstack/api/admin/user/command/EnableUserCmd.java similarity index 98% rename from api/src/com/cloud/api/commands/EnableUserCmd.java rename to api/src/org/apache/cloudstack/api/admin/user/command/EnableUserCmd.java index 6c445f789b2..92545fb68cb 100644 --- a/api/src/com/cloud/api/commands/EnableUserCmd.java +++ b/api/src/org/apache/cloudstack/api/admin/user/command/EnableUserCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.admin.user.command; import org.apache.log4j.Logger; diff --git a/api/src/com/cloud/api/commands/GetUserCmd.java b/api/src/org/apache/cloudstack/api/admin/user/command/GetUserCmd.java similarity index 98% rename from api/src/com/cloud/api/commands/GetUserCmd.java rename to api/src/org/apache/cloudstack/api/admin/user/command/GetUserCmd.java index 4628f1cd264..5cfc27ab499 100644 --- a/api/src/com/cloud/api/commands/GetUserCmd.java +++ b/api/src/org/apache/cloudstack/api/admin/user/command/GetUserCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.admin.user.command; import org.apache.log4j.Logger; diff --git a/api/src/com/cloud/api/commands/ListUsersCmd.java b/api/src/org/apache/cloudstack/api/admin/user/command/ListUsersCmd.java similarity index 98% rename from api/src/com/cloud/api/commands/ListUsersCmd.java rename to api/src/org/apache/cloudstack/api/admin/user/command/ListUsersCmd.java index 23054941d3e..6314e5e0d01 100644 --- a/api/src/com/cloud/api/commands/ListUsersCmd.java +++ b/api/src/org/apache/cloudstack/api/admin/user/command/ListUsersCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.admin.user.command; import java.util.ArrayList; import java.util.List; diff --git a/api/src/com/cloud/api/commands/UpdateUserCmd.java b/api/src/org/apache/cloudstack/api/admin/user/command/UpdateUserCmd.java similarity index 98% rename from api/src/com/cloud/api/commands/UpdateUserCmd.java rename to api/src/org/apache/cloudstack/api/admin/user/command/UpdateUserCmd.java index fbe062e1d00..c77db3320ef 100644 --- a/api/src/com/cloud/api/commands/UpdateUserCmd.java +++ b/api/src/org/apache/cloudstack/api/admin/user/command/UpdateUserCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.admin.user.command; import org.apache.log4j.Logger; diff --git a/client/tomcatconf/commands.properties.in b/client/tomcatconf/commands.properties.in index 3df1ca664db..98687108988 100755 --- a/client/tomcatconf/commands.properties.in +++ b/client/tomcatconf/commands.properties.in @@ -29,14 +29,14 @@ listAccounts=org.apache.cloudstack.api.user.account.command.ListAccountsCmd;15 markDefaultZoneForAccount=com.cloud.api.commands.MarkDefaultZoneForAccountCmd;1 #### User commands -createUser=com.cloud.api.commands.CreateUserCmd;3 -deleteUser=com.cloud.api.commands.DeleteUserCmd;3 -updateUser=com.cloud.api.commands.UpdateUserCmd;3 -listUsers=com.cloud.api.commands.ListUsersCmd;7 +createUser=org.apache.cloudstack.api.admin.user.command.CreateUserCmd;3 +deleteUser=org.apache.cloudstack.api.admin.user.command.DeleteUserCmd;3 +updateUser=org.apache.cloudstack.api.admin.user.command.UpdateUserCmd;3 +listUsers=org.apache.cloudstack.api.admin.user.command.ListUsersCmd;7 ####lockUser=com.cloud.api.commands.LockUserCmd;7 -disableUser=com.cloud.api.commands.DisableUserCmd;7 -enableUser=com.cloud.api.commands.EnableUserCmd;7 -getUser=com.cloud.api.commands.GetUserCmd;1 +disableUser=org.apache.cloudstack.api.admin.user.command.DisableUserCmd;7 +enableUser=org.apache.cloudstack.api.admin.user.command.EnableUserCmd;7 +getUser=org.apache.cloudstack.api.admin.user.command.GetUserCmd;1 #### Domain commands createDomain=com.cloud.api.commands.CreateDomainCmd;1 diff --git a/server/src/com/cloud/user/AccountManagerImpl.java b/server/src/com/cloud/user/AccountManagerImpl.java index 5a1f8405d44..ab04a9c6191 100755 --- a/server/src/com/cloud/user/AccountManagerImpl.java +++ b/server/src/com/cloud/user/AccountManagerImpl.java @@ -36,6 +36,7 @@ import javax.crypto.spec.SecretKeySpec; import javax.ejb.Local; import javax.naming.ConfigurationException; +import org.apache.cloudstack.api.admin.user.command.ListUsersCmd; import org.apache.commons.codec.binary.Base64; import org.apache.log4j.Logger; @@ -43,12 +44,11 @@ import com.cloud.acl.ControlledEntity; import com.cloud.acl.SecurityChecker; import com.cloud.acl.SecurityChecker.AccessType; import com.cloud.api.ApiDBUtils; -import com.cloud.api.commands.DeleteUserCmd; +import org.apache.cloudstack.api.admin.user.command.DeleteUserCmd; import org.apache.cloudstack.api.user.account.command.ListAccountsCmd; -import com.cloud.api.commands.ListUsersCmd; import com.cloud.api.commands.RegisterCmd; import com.cloud.api.commands.UpdateAccountCmd; -import com.cloud.api.commands.UpdateUserCmd; +import org.apache.cloudstack.api.admin.user.command.UpdateUserCmd; import com.cloud.configuration.Config; import com.cloud.configuration.ConfigurationManager; import com.cloud.configuration.ResourceLimit; diff --git a/server/test/com/cloud/user/MockAccountManagerImpl.java b/server/test/com/cloud/user/MockAccountManagerImpl.java index d464fc85ca2..b8d9043e27f 100644 --- a/server/test/com/cloud/user/MockAccountManagerImpl.java +++ b/server/test/com/cloud/user/MockAccountManagerImpl.java @@ -24,12 +24,12 @@ import javax.naming.ConfigurationException; import com.cloud.acl.ControlledEntity; import com.cloud.acl.SecurityChecker.AccessType; -import com.cloud.api.commands.DeleteUserCmd; +import org.apache.cloudstack.api.admin.user.command.DeleteUserCmd; +import org.apache.cloudstack.api.admin.user.command.ListUsersCmd; import org.apache.cloudstack.api.user.account.command.ListAccountsCmd; -import com.cloud.api.commands.ListUsersCmd; import com.cloud.api.commands.RegisterCmd; import com.cloud.api.commands.UpdateAccountCmd; -import com.cloud.api.commands.UpdateUserCmd; +import org.apache.cloudstack.api.admin.user.command.UpdateUserCmd; import com.cloud.domain.Domain; import com.cloud.exception.ConcurrentOperationException; import com.cloud.exception.PermissionDeniedException; From 55f2bd810a17633b262b2d679553ce201f128139 Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Wed, 5 Dec 2012 15:15:26 -0800 Subject: [PATCH 052/421] api_refactor: move template api preparetemplate to admin pkg Signed-off-by: Rohit Yadav --- .../api/admin/template/command}/PrepareTemplateCmd.java | 2 +- client/tomcatconf/commands.properties.in | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/admin/template/command}/PrepareTemplateCmd.java (98%) diff --git a/api/src/com/cloud/api/commands/PrepareTemplateCmd.java b/api/src/org/apache/cloudstack/api/admin/template/command/PrepareTemplateCmd.java similarity index 98% rename from api/src/com/cloud/api/commands/PrepareTemplateCmd.java rename to api/src/org/apache/cloudstack/api/admin/template/command/PrepareTemplateCmd.java index 97686a8f169..910169b96c3 100644 --- a/api/src/com/cloud/api/commands/PrepareTemplateCmd.java +++ b/api/src/org/apache/cloudstack/api/admin/template/command/PrepareTemplateCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.admin.template.command; import java.util.List; diff --git a/client/tomcatconf/commands.properties.in b/client/tomcatconf/commands.properties.in index 98687108988..ca7321c7673 100755 --- a/client/tomcatconf/commands.properties.in +++ b/client/tomcatconf/commands.properties.in @@ -88,7 +88,7 @@ listTemplates=org.apache.cloudstack.api.user.template.command.ListTemplatesCmd;1 updateTemplatePermissions=org.apache.cloudstack.api.user.template.command.UpdateTemplatePermissionsCmd;15 listTemplatePermissions=org.apache.cloudstack.api.user.template.command.ListTemplatePermissionsCmd;15 extractTemplate=org.apache.cloudstack.api.user.template.command.ExtractTemplateCmd;15 -prepareTemplate=com.cloud.api.commands.PrepareTemplateCmd;1 +prepareTemplate=org.apache.cloudstack.api.admin.template.command.PrepareTemplateCmd;1 #### iso commands attachIso=org.apache.cloudstack.api.user.iso.command.AttachIsoCmd;15 From c59de6cbde30c0b75d4c1557ccd14ee7505a160b Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Wed, 5 Dec 2012 15:23:31 -0800 Subject: [PATCH 053/421] api_refactor: router apis for admin pkg - Fix missing api mapping in commands.prop - Refactor package namespace Signed-off-by: Rohit Yadav --- .../network/VirtualNetworkApplianceService.java | 2 +- .../element/VirtualRouterElementService.java | 4 ++-- api/src/com/cloud/server/ManagementService.java | 2 +- .../ConfigureVirtualRouterElementCmd.java | 2 +- .../command}/CreateVirtualRouterElementCmd.java | 2 +- .../admin/router/command}/DestroyRouterCmd.java | 2 +- .../admin/router/command}/ListRoutersCmd.java | 2 +- .../command}/ListVirtualRouterElementsCmd.java | 2 +- .../admin/router/command}/RebootRouterCmd.java | 2 +- .../admin/router/command}/StartRouterCmd.java | 2 +- .../admin/router/command}/StopRouterCmd.java | 2 +- .../admin/router/command}/UpgradeRouterCmd.java | 2 +- .../datacenter/command/ListHypervisorsCmd.java | 2 +- client/tomcatconf/commands.properties.in | 17 +++++++++-------- .../network/element/VirtualRouterElement.java | 4 ++-- .../VirtualNetworkApplianceManagerImpl.java | 2 +- .../com/cloud/server/ManagementServerImpl.java | 2 +- 17 files changed, 27 insertions(+), 26 deletions(-) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/admin/router/command}/ConfigureVirtualRouterElementCmd.java (98%) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/admin/router/command}/CreateVirtualRouterElementCmd.java (98%) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/admin/router/command}/DestroyRouterCmd.java (98%) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/admin/router/command}/ListRoutersCmd.java (98%) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/admin/router/command}/ListVirtualRouterElementsCmd.java (98%) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/admin/router/command}/RebootRouterCmd.java (98%) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/admin/router/command}/StartRouterCmd.java (98%) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/admin/router/command}/StopRouterCmd.java (98%) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/admin/router/command}/UpgradeRouterCmd.java (98%) diff --git a/api/src/com/cloud/network/VirtualNetworkApplianceService.java b/api/src/com/cloud/network/VirtualNetworkApplianceService.java index fc636155ee3..088fcc2e327 100644 --- a/api/src/com/cloud/network/VirtualNetworkApplianceService.java +++ b/api/src/com/cloud/network/VirtualNetworkApplianceService.java @@ -16,7 +16,7 @@ // under the License. package com.cloud.network; -import com.cloud.api.commands.UpgradeRouterCmd; +import org.apache.cloudstack.api.admin.router.command.UpgradeRouterCmd; import com.cloud.exception.ConcurrentOperationException; import com.cloud.exception.InsufficientCapacityException; import com.cloud.exception.ResourceUnavailableException; diff --git a/api/src/com/cloud/network/element/VirtualRouterElementService.java b/api/src/com/cloud/network/element/VirtualRouterElementService.java index bf8cad27946..05707e8fe88 100644 --- a/api/src/com/cloud/network/element/VirtualRouterElementService.java +++ b/api/src/com/cloud/network/element/VirtualRouterElementService.java @@ -18,8 +18,8 @@ package com.cloud.network.element; import java.util.List; -import com.cloud.api.commands.ConfigureVirtualRouterElementCmd; -import com.cloud.api.commands.ListVirtualRouterElementsCmd; +import org.apache.cloudstack.api.admin.router.command.ConfigureVirtualRouterElementCmd; +import org.apache.cloudstack.api.admin.router.command.ListVirtualRouterElementsCmd; import com.cloud.network.VirtualRouterProvider; import com.cloud.network.VirtualRouterProvider.VirtualRouterProviderType; import com.cloud.utils.component.PluggableService; diff --git a/api/src/com/cloud/server/ManagementService.java b/api/src/com/cloud/server/ManagementService.java index e2bc4844d4e..78f2cb5e168 100755 --- a/api/src/com/cloud/server/ManagementService.java +++ b/api/src/com/cloud/server/ManagementService.java @@ -24,6 +24,7 @@ import java.util.Set; import com.cloud.alert.Alert; import org.apache.cloudstack.api.ServerApiException; +import org.apache.cloudstack.api.admin.router.command.ListRoutersCmd; import org.apache.cloudstack.api.user.address.command.ListPublicIpAddressesCmd; import org.apache.cloudstack.api.user.resource.command.ListCapabilitiesCmd; import org.apache.cloudstack.api.user.guest.command.ListGuestOsCmd; @@ -46,7 +47,6 @@ import org.apache.cloudstack.api.user.guest.command.ListGuestOsCategoriesCmd; import com.cloud.api.commands.ListHostsCmd; import org.apache.cloudstack.api.user.iso.command.ListIsosCmd; import com.cloud.api.commands.ListPodsByCmd; -import com.cloud.api.commands.ListRoutersCmd; import org.apache.cloudstack.api.user.ssh.command.ListSSHKeyPairsCmd; import com.cloud.api.commands.ListStoragePoolsCmd; import com.cloud.api.commands.ListSystemVMsCmd; diff --git a/api/src/com/cloud/api/commands/ConfigureVirtualRouterElementCmd.java b/api/src/org/apache/cloudstack/api/admin/router/command/ConfigureVirtualRouterElementCmd.java similarity index 98% rename from api/src/com/cloud/api/commands/ConfigureVirtualRouterElementCmd.java rename to api/src/org/apache/cloudstack/api/admin/router/command/ConfigureVirtualRouterElementCmd.java index c130637df2a..e17a9881690 100644 --- a/api/src/com/cloud/api/commands/ConfigureVirtualRouterElementCmd.java +++ b/api/src/org/apache/cloudstack/api/admin/router/command/ConfigureVirtualRouterElementCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.admin.router.command; import org.apache.log4j.Logger; diff --git a/api/src/com/cloud/api/commands/CreateVirtualRouterElementCmd.java b/api/src/org/apache/cloudstack/api/admin/router/command/CreateVirtualRouterElementCmd.java similarity index 98% rename from api/src/com/cloud/api/commands/CreateVirtualRouterElementCmd.java rename to api/src/org/apache/cloudstack/api/admin/router/command/CreateVirtualRouterElementCmd.java index bdeedbee3f8..5c88c2d182d 100644 --- a/api/src/com/cloud/api/commands/CreateVirtualRouterElementCmd.java +++ b/api/src/org/apache/cloudstack/api/admin/router/command/CreateVirtualRouterElementCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.admin.router.command; import org.apache.log4j.Logger; diff --git a/api/src/com/cloud/api/commands/DestroyRouterCmd.java b/api/src/org/apache/cloudstack/api/admin/router/command/DestroyRouterCmd.java similarity index 98% rename from api/src/com/cloud/api/commands/DestroyRouterCmd.java rename to api/src/org/apache/cloudstack/api/admin/router/command/DestroyRouterCmd.java index 7c52479baf0..1408a576406 100644 --- a/api/src/com/cloud/api/commands/DestroyRouterCmd.java +++ b/api/src/org/apache/cloudstack/api/admin/router/command/DestroyRouterCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.admin.router.command; import org.apache.log4j.Logger; diff --git a/api/src/com/cloud/api/commands/ListRoutersCmd.java b/api/src/org/apache/cloudstack/api/admin/router/command/ListRoutersCmd.java similarity index 98% rename from api/src/com/cloud/api/commands/ListRoutersCmd.java rename to api/src/org/apache/cloudstack/api/admin/router/command/ListRoutersCmd.java index d4c41fce82b..1659bea7827 100644 --- a/api/src/com/cloud/api/commands/ListRoutersCmd.java +++ b/api/src/org/apache/cloudstack/api/admin/router/command/ListRoutersCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.admin.router.command; import java.util.ArrayList; import java.util.List; diff --git a/api/src/com/cloud/api/commands/ListVirtualRouterElementsCmd.java b/api/src/org/apache/cloudstack/api/admin/router/command/ListVirtualRouterElementsCmd.java similarity index 98% rename from api/src/com/cloud/api/commands/ListVirtualRouterElementsCmd.java rename to api/src/org/apache/cloudstack/api/admin/router/command/ListVirtualRouterElementsCmd.java index aa24467cb33..6206de5ac1c 100644 --- a/api/src/com/cloud/api/commands/ListVirtualRouterElementsCmd.java +++ b/api/src/org/apache/cloudstack/api/admin/router/command/ListVirtualRouterElementsCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.admin.router.command; import java.util.ArrayList; import java.util.List; diff --git a/api/src/com/cloud/api/commands/RebootRouterCmd.java b/api/src/org/apache/cloudstack/api/admin/router/command/RebootRouterCmd.java similarity index 98% rename from api/src/com/cloud/api/commands/RebootRouterCmd.java rename to api/src/org/apache/cloudstack/api/admin/router/command/RebootRouterCmd.java index 5e3e87fc131..be1ef24afb2 100644 --- a/api/src/com/cloud/api/commands/RebootRouterCmd.java +++ b/api/src/org/apache/cloudstack/api/admin/router/command/RebootRouterCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.admin.router.command; import org.apache.log4j.Logger; diff --git a/api/src/com/cloud/api/commands/StartRouterCmd.java b/api/src/org/apache/cloudstack/api/admin/router/command/StartRouterCmd.java similarity index 98% rename from api/src/com/cloud/api/commands/StartRouterCmd.java rename to api/src/org/apache/cloudstack/api/admin/router/command/StartRouterCmd.java index d4b12e86f88..cf3b5f1551f 100644 --- a/api/src/com/cloud/api/commands/StartRouterCmd.java +++ b/api/src/org/apache/cloudstack/api/admin/router/command/StartRouterCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.admin.router.command; import org.apache.log4j.Logger; diff --git a/api/src/com/cloud/api/commands/StopRouterCmd.java b/api/src/org/apache/cloudstack/api/admin/router/command/StopRouterCmd.java similarity index 98% rename from api/src/com/cloud/api/commands/StopRouterCmd.java rename to api/src/org/apache/cloudstack/api/admin/router/command/StopRouterCmd.java index eb93bb6f107..593b4c6dcc4 100644 --- a/api/src/com/cloud/api/commands/StopRouterCmd.java +++ b/api/src/org/apache/cloudstack/api/admin/router/command/StopRouterCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.admin.router.command; import org.apache.log4j.Logger; diff --git a/api/src/com/cloud/api/commands/UpgradeRouterCmd.java b/api/src/org/apache/cloudstack/api/admin/router/command/UpgradeRouterCmd.java similarity index 98% rename from api/src/com/cloud/api/commands/UpgradeRouterCmd.java rename to api/src/org/apache/cloudstack/api/admin/router/command/UpgradeRouterCmd.java index c916a5c73f3..11633bd930a 100644 --- a/api/src/com/cloud/api/commands/UpgradeRouterCmd.java +++ b/api/src/org/apache/cloudstack/api/admin/router/command/UpgradeRouterCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.admin.router.command; import org.apache.log4j.Logger; diff --git a/api/src/org/apache/cloudstack/api/user/datacenter/command/ListHypervisorsCmd.java b/api/src/org/apache/cloudstack/api/user/datacenter/command/ListHypervisorsCmd.java index 4b5a60faad9..ac7ababc59a 100644 --- a/api/src/org/apache/cloudstack/api/user/datacenter/command/ListHypervisorsCmd.java +++ b/api/src/org/apache/cloudstack/api/user/datacenter/command/ListHypervisorsCmd.java @@ -19,7 +19,7 @@ package org.apache.cloudstack.api.user.datacenter.command; import java.util.ArrayList; import java.util.List; -import com.cloud.api.commands.UpgradeRouterCmd; +import org.apache.cloudstack.api.admin.router.command.UpgradeRouterCmd; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; diff --git a/client/tomcatconf/commands.properties.in b/client/tomcatconf/commands.properties.in index ca7321c7673..441271bb3aa 100755 --- a/client/tomcatconf/commands.properties.in +++ b/client/tomcatconf/commands.properties.in @@ -176,14 +176,15 @@ updateAutoScaleVmProfile=org.apache.cloudstack.api.user.autoscale.command.Update updateAutoScaleVmGroup=org.apache.cloudstack.api.user.autoscale.command.UpdateAutoScaleVmGroupCmd;15 #### router commands -startRouter=com.cloud.api.commands.StartRouterCmd;7 -rebootRouter=com.cloud.api.commands.RebootRouterCmd;7 -stopRouter=com.cloud.api.commands.StopRouterCmd;7 -destroyRouter=com.cloud.api.commands.DestroyRouterCmd;7 -changeServiceForRouter=com.cloud.api.commands.UpgradeRouterCmd;7 -listRouters=com.cloud.api.commands.ListRoutersCmd;7 -listVirtualRouterElements=com.cloud.api.commands.ListVirtualRouterElementsCmd;7 -configureVirtualRouterElement=com.cloud.api.commands.ConfigureVirtualRouterElementCmd;7 +startRouter=org.apache.cloudstack.api.admin.router.command.StartRouterCmd;7 +rebootRouter=org.apache.cloudstack.api.admin.router.command.RebootRouterCmd;7 +stopRouter=org.apache.cloudstack.api.admin.router.command.StopRouterCmd;7 +destroyRouter=org.apache.cloudstack.api.admin.router.command.DestroyRouterCmd;7 +changeServiceForRouter=org.apache.cloudstack.api.admin.router.command.UpgradeRouterCmd;7 +listRouters=org.apache.cloudstack.api.admin.router.command.ListRoutersCmd;7 +listVirtualRouterElements=org.apache.cloudstack.api.admin.router.command.ListVirtualRouterElementsCmd;7 +configureVirtualRouterElement=org.apache.cloudstack.api.admin.router.command.ConfigureVirtualRouterElementCmd;7 +createVirtualRouterElement=org.apache.cloudstack.api.admin.router.command.CreateVirtualRouterElementCmd;7 #### system vm commands startSystemVm=com.cloud.api.commands.StartSystemVMCmd;1 diff --git a/server/src/com/cloud/network/element/VirtualRouterElement.java b/server/src/com/cloud/network/element/VirtualRouterElement.java index 4ff10820ec7..5339b3f50a4 100755 --- a/server/src/com/cloud/network/element/VirtualRouterElement.java +++ b/server/src/com/cloud/network/element/VirtualRouterElement.java @@ -24,10 +24,10 @@ import java.util.Set; import javax.ejb.Local; +import org.apache.cloudstack.api.admin.router.command.ConfigureVirtualRouterElementCmd; +import org.apache.cloudstack.api.admin.router.command.ListVirtualRouterElementsCmd; import org.apache.log4j.Logger; -import com.cloud.api.commands.ConfigureVirtualRouterElementCmd; -import com.cloud.api.commands.ListVirtualRouterElementsCmd; import com.cloud.configuration.ConfigurationManager; import com.cloud.configuration.dao.ConfigurationDao; import com.cloud.dc.DataCenter; diff --git a/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java b/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java index 5d0892ab60a..d06c3263f0f 100755 --- a/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java +++ b/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java @@ -36,6 +36,7 @@ import java.util.concurrent.TimeUnit; import javax.ejb.Local; import javax.naming.ConfigurationException; +import org.apache.cloudstack.api.admin.router.command.UpgradeRouterCmd; import org.apache.log4j.Logger; import com.cloud.agent.AgentManager; @@ -80,7 +81,6 @@ import com.cloud.agent.api.to.StaticNatRuleTO; import com.cloud.agent.api.to.VirtualMachineTO; import com.cloud.agent.manager.Commands; import com.cloud.alert.AlertManager; -import com.cloud.api.commands.UpgradeRouterCmd; import com.cloud.cluster.ManagementServerHostVO; import com.cloud.cluster.ManagementServerNode; import com.cloud.cluster.dao.ManagementServerHostDao; diff --git a/server/src/com/cloud/server/ManagementServerImpl.java b/server/src/com/cloud/server/ManagementServerImpl.java index f6e9207940f..7a8d5623c28 100755 --- a/server/src/com/cloud/server/ManagementServerImpl.java +++ b/server/src/com/cloud/server/ManagementServerImpl.java @@ -42,6 +42,7 @@ import java.util.concurrent.TimeUnit; import javax.crypto.Mac; import javax.crypto.spec.SecretKeySpec; +import org.apache.cloudstack.api.admin.router.command.ListRoutersCmd; import org.apache.cloudstack.api.user.resource.command.ListCapabilitiesCmd; import org.apache.cloudstack.api.user.guest.command.ListGuestOsCategoriesCmd; import org.apache.cloudstack.api.user.guest.command.ListGuestOsCmd; @@ -82,7 +83,6 @@ import org.apache.cloudstack.api.user.event.command.ListEventsCmd; import com.cloud.api.commands.ListHostsCmd; import com.cloud.api.commands.ListPodsByCmd; import org.apache.cloudstack.api.user.address.command.ListPublicIpAddressesCmd; -import com.cloud.api.commands.ListRoutersCmd; import org.apache.cloudstack.api.user.ssh.command.ListSSHKeyPairsCmd; import com.cloud.api.commands.ListStoragePoolsCmd; import com.cloud.api.commands.ListSystemVMsCmd; From b0ce8fd4ff512c7a7da0a71671c4477492e854e7 Mon Sep 17 00:00:00 2001 From: Min Chen Date: Wed, 5 Dec 2012 16:18:38 -0800 Subject: [PATCH 054/421] 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 --- .../com/cloud/api/response/BaseResponse.java | 19 +- .../ControlledViewEntityResponse.java | 31 + .../api/response/DomainRouterResponse.java | 97 +- .../com/cloud/api/response/NicResponse.java | 32 +- .../cloud/api/response/UserVmResponse.java | 132 +- .../api/view/vo/ControlledViewEntity.java | 45 + .../cloud/api/view/vo/DomainRouterJoinVO.java | 928 ++++++++++ .../com/cloud/api/view/vo/UserVmJoinVO.java | 1623 +++++++++++++++++ .../com/cloud/server/ManagementService.java | 3 +- api/src/com/cloud/vm/UserVmService.java | 3 +- .../cloudstack/api/ResponseGenerator.java | 8 + .../apache/cloudstack/api/ResponseObject.java | 17 + .../admin/router/command/ListRoutersCmd.java | 19 +- .../api/user/vm/command/ListVMsCmd.java | 12 +- .../api/commands/test/ListRoutersCmdTest.java | 170 ++ .../api/commands/test/ListVmsCmdTest.java | 173 ++ server/src/com/cloud/api/ApiDBUtils.java | 50 +- .../src/com/cloud/api/ApiResponseHelper.java | 586 +----- server/src/com/cloud/api/ApiServer.java | 4 +- .../api/response/ApiResponseSerializer.java | 5 +- .../DefaultComponentLibrary.java | 5 + .../cloud/server/ManagementServerImpl.java | 54 +- server/src/com/cloud/user/AccountManager.java | 7 + .../com/cloud/user/AccountManagerImpl.java | 52 +- server/src/com/cloud/vm/UserVmManager.java | 3 +- .../src/com/cloud/vm/UserVmManagerImpl.java | 136 +- .../com/cloud/vm/dao/DomainRouterJoinDao.java | 36 + .../cloud/vm/dao/DomainRouterJoinDaoImpl.java | 231 +++ .../src/com/cloud/vm/dao/UserVmJoinDao.java | 38 + .../com/cloud/vm/dao/UserVmJoinDaoImpl.java | 384 ++++ .../test/com/cloud/keystore/KeystoreTest.java | 2 +- .../cloud/user/MockAccountManagerImpl.java | 13 + .../com/cloud/vm/MockUserVmManagerImpl.java | 5 +- setup/db/create-schema.sql | 215 +++ .../com/cloud/utils/db/GenericDaoBase.java | 13 +- 35 files changed, 4397 insertions(+), 754 deletions(-) create mode 100644 api/src/com/cloud/api/response/ControlledViewEntityResponse.java create mode 100644 api/src/com/cloud/api/view/vo/ControlledViewEntity.java create mode 100644 api/src/com/cloud/api/view/vo/DomainRouterJoinVO.java create mode 100644 api/src/com/cloud/api/view/vo/UserVmJoinVO.java create mode 100644 api/test/src/com/cloud/api/commands/test/ListRoutersCmdTest.java create mode 100644 api/test/src/com/cloud/api/commands/test/ListVmsCmdTest.java create mode 100644 server/src/com/cloud/vm/dao/DomainRouterJoinDao.java create mode 100644 server/src/com/cloud/vm/dao/DomainRouterJoinDaoImpl.java create mode 100644 server/src/com/cloud/vm/dao/UserVmJoinDao.java create mode 100644 server/src/com/cloud/vm/dao/UserVmJoinDaoImpl.java diff --git a/api/src/com/cloud/api/response/BaseResponse.java b/api/src/com/cloud/api/response/BaseResponse.java index 14aa2b920c0..dbe84202e39 100755 --- a/api/src/com/cloud/api/response/BaseResponse.java +++ b/api/src/com/cloud/api/response/BaseResponse.java @@ -46,17 +46,26 @@ public abstract class BaseResponse implements ResponseObject { this.objectName = objectName; } + //TODO: TO be replaced by getObjectUuid() after all response refactoring public Long getObjectId() { return null; } + public String getObjectUuid(){ + return null; + } + // For use by list commands with pending async jobs - @SerializedName(ApiConstants.JOB_ID) @Param(description="the ID of the latest async job acting on this object") + //TODO: To be replaced by jobUuid after all response refactoring protected IdentityProxy jobId = new IdentityProxy("async_job"); + @SerializedName(ApiConstants.JOB_ID) @Param(description="the UUID of the latest async job acting on this object") + protected String jobUuid; + @SerializedName(ApiConstants.JOB_STATUS) @Param(description="the current status of the latest async job acting on this object") private Integer jobStatus; + //TODO: TO be replaced by getter and setters for jobUuid. public Long getJobId() { return jobId.getValue(); } @@ -65,6 +74,14 @@ public abstract class BaseResponse implements ResponseObject { this.jobId.setValue(jobId); } + public String getJobUuid() { + return jobUuid; + } + + public void setJobUuid(String jobUuid) { + this.jobUuid = jobUuid; + } + public Integer getJobStatus() { return jobStatus; } diff --git a/api/src/com/cloud/api/response/ControlledViewEntityResponse.java b/api/src/com/cloud/api/response/ControlledViewEntityResponse.java new file mode 100644 index 00000000000..471a8d1000d --- /dev/null +++ b/api/src/com/cloud/api/response/ControlledViewEntityResponse.java @@ -0,0 +1,31 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. +package com.cloud.api.response; + +public interface ControlledViewEntityResponse { + + public void setAccountName(String accountName); + + public void setProjectId(String projectId); + + public void setProjectName(String projectName); + + public void setDomainId(String domainId); + + public void setDomainName(String domainName); +} + diff --git a/api/src/com/cloud/api/response/DomainRouterResponse.java b/api/src/com/cloud/api/response/DomainRouterResponse.java index 8170b2efa41..6db46fad429 100644 --- a/api/src/com/cloud/api/response/DomainRouterResponse.java +++ b/api/src/com/cloud/api/response/DomainRouterResponse.java @@ -18,6 +18,9 @@ package com.cloud.api.response; import java.util.Date; import java.util.List; +import java.util.HashSet; +import java.util.Set; + import org.apache.cloudstack.api.ApiConstants; import com.cloud.serializer.Param; @@ -26,12 +29,12 @@ import com.cloud.vm.VirtualMachine.State; import com.google.gson.annotations.SerializedName; @SuppressWarnings("unused") -public class DomainRouterResponse extends BaseResponse implements ControlledEntityResponse{ +public class DomainRouterResponse extends BaseResponse implements ControlledViewEntityResponse{ @SerializedName(ApiConstants.ID) @Param(description="the id of the router") - private IdentityProxy id = new IdentityProxy("vm_instance"); + private String id; @SerializedName(ApiConstants.ZONE_ID) @Param(description="the Zone ID for the router") - private IdentityProxy zoneId = new IdentityProxy("data_center"); + private String zoneId; @SerializedName(ApiConstants.ZONE_NAME) @Param(description="the Zone name for the router") private String zoneName; @@ -52,10 +55,10 @@ public class DomainRouterResponse extends BaseResponse implements ControlledEnti private String name; @SerializedName(ApiConstants.POD_ID) @Param(description="the Pod ID for the router") - private IdentityProxy podId = new IdentityProxy("host_pod_ref"); + private String podId; @SerializedName(ApiConstants.HOST_ID) @Param(description="the host ID for the router") - private IdentityProxy hostId = new IdentityProxy("host"); + private String hostId; @SerializedName("hostname") @Param(description="the hostname for the router") private String hostName; @@ -70,7 +73,7 @@ public class DomainRouterResponse extends BaseResponse implements ControlledEnti private String linkLocalNetmask; @SerializedName(ApiConstants.LINK_LOCAL_NETWORK_ID) @Param(description="the ID of the corresponding link local network") - private IdentityProxy linkLocalNetworkId = new IdentityProxy("networks"); + private String linkLocalNetworkId; @SerializedName(ApiConstants.PUBLIC_IP) @Param(description="the public IP address for the router") private String publicIp; @@ -82,7 +85,7 @@ public class DomainRouterResponse extends BaseResponse implements ControlledEnti private String publicNetmask; @SerializedName("publicnetworkid") @Param(description="the ID of the corresponding public network") - private IdentityProxy publicNetworkId = new IdentityProxy("networks"); + private String publicNetworkId; @SerializedName("guestipaddress") @Param(description="the guest IP address for the router") private String guestIpAddress; @@ -94,10 +97,10 @@ public class DomainRouterResponse extends BaseResponse implements ControlledEnti private String guestNetmask; @SerializedName("guestnetworkid") @Param(description="the ID of the corresponding guest network") - private IdentityProxy guestNetworkId = new IdentityProxy("networks"); + private String guestNetworkId; @SerializedName(ApiConstants.TEMPLATE_ID) @Param(description="the template ID for the router") - private IdentityProxy templateId = new IdentityProxy("vm_template"); + private String templateId; @SerializedName(ApiConstants.CREATED) @Param(description="the date and time the router was created") private Date created; @@ -109,19 +112,19 @@ public class DomainRouterResponse extends BaseResponse implements ControlledEnti private String accountName; @SerializedName(ApiConstants.PROJECT_ID) @Param(description="the project id of the ipaddress") - private IdentityProxy projectId = new IdentityProxy("projects"); + private String projectId; @SerializedName(ApiConstants.PROJECT) @Param(description="the project name of the address") private String projectName; @SerializedName(ApiConstants.DOMAIN_ID) @Param(description="the domain ID associated with the router") - private IdentityProxy domainId = new IdentityProxy("domain"); + private String domainId; @SerializedName(ApiConstants.DOMAIN) @Param(description="the domain associated with the router") private String domainName; @SerializedName(ApiConstants.SERVICE_OFFERING_ID) @Param(description="the ID of the service offering of the virtual machine") - private IdentityProxy serviceOfferingId = new IdentityProxy("disk_offering"); + private String serviceOfferingId; @SerializedName("serviceofferingname") @Param(description="the name of the service offering of the virtual machine") private String serviceOfferingName; @@ -139,27 +142,31 @@ public class DomainRouterResponse extends BaseResponse implements ControlledEnti private String scriptsVersion; @SerializedName(ApiConstants.VPC_ID) @Param(description="VPC the network belongs to") - private IdentityProxy vpcId = new IdentityProxy("vpc"); + private String vpcId; @SerializedName("nic") @Param(description="the list of nics associated with the router", responseObject = NicResponse.class, since="4.0") - private List nics; + private Set nics; + + public DomainRouterResponse(){ + nics = new HashSet(); + } @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 nics) { + public void setNics(Set nics) { this.nics = nics; } + + public void addNic(NicResponse nic) { + this.nics.add(nic); + } } diff --git a/api/src/com/cloud/api/response/NicResponse.java b/api/src/com/cloud/api/response/NicResponse.java index e27a8cf19f5..7001e12c015 100755 --- a/api/src/com/cloud/api/response/NicResponse.java +++ b/api/src/com/cloud/api/response/NicResponse.java @@ -17,7 +17,6 @@ package com.cloud.api.response; import org.apache.cloudstack.api.ApiConstants; -import com.cloud.utils.IdentityProxy; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; @@ -25,10 +24,10 @@ import com.google.gson.annotations.SerializedName; public class NicResponse extends BaseResponse { @SerializedName("id") @Param(description="the ID of the nic") - private final IdentityProxy id = new IdentityProxy("nics"); + private String id; @SerializedName("networkid") @Param(description="the ID of the corresponding network") - private final IdentityProxy networkId = new IdentityProxy("networks"); + private String networkId; @SerializedName("networkname") @Param(description="the name of the corresponding network") private String networkName ; @@ -60,16 +59,21 @@ public class NicResponse extends BaseResponse { @SerializedName("macaddress") @Param(description="true if nic is default, false otherwise") private String macAddress; - public Long getId() { - return id.getValue(); + public String getId() { + return id; } - public void setId(Long id) { - this.id.setValue(id); + public void setId(String id) { + this.id = id; } - public void setNetworkid(Long networkid) { - this.networkId.setValue(networkid); + @Override + public String getObjectUuid() { + return this.getId(); + } + + public void setNetworkid(String networkid) { + this.networkId = networkid; } public void setNetworkName(String networkname) { @@ -116,7 +120,8 @@ public class NicResponse extends BaseResponse { public int hashCode() { final int prime = 31; int result = 1; - result = prime * result + ((id == null) ? 0 : id.hashCode()); + String oid = this.getId(); + result = prime * result + ((oid== null) ? 0 : oid.hashCode()); return result; } @@ -129,10 +134,11 @@ public class NicResponse extends BaseResponse { if (getClass() != obj.getClass()) return false; NicResponse other = (NicResponse) obj; - if (id == null) { - if (other.id != null) + String oid = this.getId(); + if (oid == null) { + if (other.getId() != null) return false; - } else if (!id.equals(other.id)) + } else if (!oid.equals(other.getId())) return false; return true; } diff --git a/api/src/com/cloud/api/response/UserVmResponse.java b/api/src/com/cloud/api/response/UserVmResponse.java index e7665b5404b..572d4ed2d11 100755 --- a/api/src/com/cloud/api/response/UserVmResponse.java +++ b/api/src/com/cloud/api/response/UserVmResponse.java @@ -17,20 +17,21 @@ package com.cloud.api.response; import java.util.Date; +import java.util.HashSet; import java.util.List; +import java.util.Set; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.Entity; import com.cloud.vm.VirtualMachine; import com.cloud.serializer.Param; -import com.cloud.utils.IdentityProxy; import com.google.gson.annotations.SerializedName; @SuppressWarnings("unused") @Entity(value = VirtualMachine.class) public class UserVmResponse extends BaseResponse implements ControlledEntityResponse { @SerializedName(ApiConstants.ID) @Param(description="the ID of the virtual machine") - private IdentityProxy id = new IdentityProxy("vm_instance"); + private String id; @SerializedName(ApiConstants.NAME) @Param(description="the name of the virtual machine") private String name; @@ -42,13 +43,13 @@ public class UserVmResponse extends BaseResponse implements ControlledEntityResp private String accountName; @SerializedName(ApiConstants.PROJECT_ID) @Param(description="the project id of the vm") - private IdentityProxy projectId = new IdentityProxy("projects"); + private String projectId; @SerializedName(ApiConstants.PROJECT) @Param(description="the project name of the vm") private String projectName; @SerializedName(ApiConstants.DOMAIN_ID) @Param(description="the ID of the domain in which the virtual machine exists") - private IdentityProxy domainId = new IdentityProxy("domain"); + private String domainId; @SerializedName(ApiConstants.DOMAIN) @Param(description="the name of the domain in which the virtual machine exists") private String domainName; @@ -63,25 +64,25 @@ public class UserVmResponse extends BaseResponse implements ControlledEntityResp private Boolean haEnable; @SerializedName(ApiConstants.GROUP_ID) @Param(description="the group ID of the virtual machine") - private IdentityProxy groupId = new IdentityProxy("instance_group"); + private String groupId; @SerializedName(ApiConstants.GROUP) @Param(description="the group name of the virtual machine") private String group; @SerializedName(ApiConstants.ZONE_ID) @Param(description="the ID of the availablility zone for the virtual machine") - private IdentityProxy zoneId = new IdentityProxy("data_center"); + private String zoneId; @SerializedName(ApiConstants.ZONE_NAME) @Param(description="the name of the availability zone for the virtual machine") private String zoneName; @SerializedName(ApiConstants.HOST_ID) @Param(description="the ID of the host for the virtual machine") - private IdentityProxy hostId = new IdentityProxy("host"); + private String hostId; @SerializedName("hostname") @Param(description="the name of the host for the virtual machine") private String hostName; @SerializedName(ApiConstants.TEMPLATE_ID) @Param(description="the ID of the template for the virtual machine. A -1 is returned if the virtual machine was created from an ISO file.") - private IdentityProxy templateId = new IdentityProxy("vm_template"); + private String templateId; @SerializedName("templatename") @Param(description="the name of the template for the virtual machine") private String templateName; @@ -93,7 +94,7 @@ public class UserVmResponse extends BaseResponse implements ControlledEntityResp private Boolean passwordEnabled; @SerializedName("isoid") @Param(description="the ID of the ISO attached to the virtual machine") - private IdentityProxy isoId = new IdentityProxy("vm_template"); + private String isoId; @SerializedName("isoname") @Param(description="the name of the ISO attached to the virtual machine") private String isoName; @@ -102,7 +103,7 @@ public class UserVmResponse extends BaseResponse implements ControlledEntityResp private String isoDisplayText; @SerializedName(ApiConstants.SERVICE_OFFERING_ID) @Param(description="the ID of the service offering of the virtual machine") - private IdentityProxy serviceOfferingId = new IdentityProxy("disk_offering"); + private String serviceOfferingId; @SerializedName("serviceofferingname") @Param(description="the name of the service offering of the virtual machine") private String serviceOfferingName; @@ -129,7 +130,7 @@ public class UserVmResponse extends BaseResponse implements ControlledEntityResp private Long networkKbsWrite; @SerializedName("guestosid") @Param(description="Os type ID of the virtual machine") - private IdentityProxy guestOsId = new IdentityProxy("guest_os"); + private String guestOsId; @SerializedName("rootdeviceid") @Param(description="device ID of the root volume") private Long rootDeviceId; @@ -138,19 +139,19 @@ public class UserVmResponse extends BaseResponse implements ControlledEntityResp private String rootDeviceType; @SerializedName("securitygroup") @Param(description="list of security groups associated with the virtual machine", responseObject = SecurityGroupResponse.class) - private List securityGroupList; + private Set 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 nics; + private Set 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 tags; + private Set tags; @SerializedName(ApiConstants.SSH_KEYPAIR) @Param(description="ssh key-pair") private String keyPairName; + public UserVmResponse(){ + securityGroupList = new HashSet(); + nics = new HashSet(); + tags = new HashSet(); + } + 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 nics) { + public void setNics(Set nics) { this.nics = nics; } - public void setSecurityGroupList(List securityGroups) { + public void addNic(NicResponse nic) { + this.nics.add(nic); + } + + public void setSecurityGroupList(Set 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 tags) { + public void setTags(Set 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; + } } diff --git a/api/src/com/cloud/api/view/vo/ControlledViewEntity.java b/api/src/com/cloud/api/view/vo/ControlledViewEntity.java new file mode 100644 index 00000000000..163e001a3c1 --- /dev/null +++ b/api/src/com/cloud/api/view/vo/ControlledViewEntity.java @@ -0,0 +1,45 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. +package com.cloud.api.view.vo; + +import com.cloud.acl.ControlledEntity; + +/** + * This is the interface for all VO classes representing DB views created for previous ControlledEntity. + * + * @author minc + * + */ +public interface ControlledViewEntity extends ControlledEntity { + + public String getDomainPath(); + + public short getAccountType(); + + public String getAccountUuid(); + + public String getAccountName(); + + public String getDomainUuid(); + + public String getDomainName(); + + public String getProjectUuid(); + + public String getProjectName(); + +} diff --git a/api/src/com/cloud/api/view/vo/DomainRouterJoinVO.java b/api/src/com/cloud/api/view/vo/DomainRouterJoinVO.java new file mode 100644 index 00000000000..58e69bfbb6c --- /dev/null +++ b/api/src/com/cloud/api/view/vo/DomainRouterJoinVO.java @@ -0,0 +1,928 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. +package com.cloud.api.view.vo; + +import java.net.URI; +import java.util.Date; + +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.EnumType; +import javax.persistence.Enumerated; +import javax.persistence.Table; + +import com.cloud.network.Network.GuestType; +import com.cloud.network.Networks.TrafficType; +import com.cloud.network.router.VirtualRouter.RedundantState; +import com.cloud.utils.db.GenericDao; +import com.cloud.vm.VirtualMachine.State; + +@Entity +@Table(name="domain_router_view") +public class DomainRouterJoinVO implements ControlledViewEntity { + + @Column(name="id", updatable=false, nullable = false) + private long id; + + @Column(name="name", updatable=false, nullable=false, length=255) + private String name = null; + + + @Column(name="account_id") + private long accountId; + + @Column(name="account_uuid") + private String accountUuid; + + @Column(name="account_name") + private String accountName = null; + + @Column(name="account_type") + private short accountType; + + @Column(name="domain_id") + private long domainId; + + @Column(name="domain_uuid") + private String domainUuid; + + @Column(name="domain_name") + private String domainName = null; + + @Column(name="domain_path") + private String domainPath = null; + + /** + * Note that state is intentionally missing the setter. Any updates to + * the state machine needs to go through the DAO object because someone + * else could be updating it as well. + */ + @Enumerated(value=EnumType.STRING) + @Column(name="state", updatable=true, nullable=false, length=32) + private State state = null; + + @Column(name=GenericDao.CREATED_COLUMN) + private Date created; + + @Column(name=GenericDao.REMOVED_COLUMN) + private Date removed; + + @Column(name="instance_name", updatable=true, nullable=false) + private String instanceName; + + @Column(name="pod_id", updatable=true, nullable=false) + private Long podId; + + @Column(name="pod_uuid") + private String podUuid; + + @Column(name="data_center_id") + private long dataCenterId; + + @Column(name="data_center_uuid") + private String dataCenterUuid; + + @Column(name="data_center_name") + private String dataCenterName = null; + + @Column(name="dns1") + private String dns1 = null; + + @Column(name="dns2") + private String dns2 = null; + + + @Column(name="host_id", updatable=true, nullable=true) + private long hostId; + + @Column(name="host_uuid") + private String hostUuid; + + @Column(name="host_name", nullable=false) + private String hostName; + + @Column(name="template_id", updatable=true, nullable=true, length=17) + private long templateId; + + @Column(name="template_uuid") + private String templateUuid; + + @Column(name="service_offering_id") + private long serviceOfferingId; + + @Column(name="service_offering_uuid") + private String serviceOfferingUuid; + + @Column(name="service_offering_name") + private String serviceOfferingName; + + + @Column(name = "vpc_id") + private long vpcId; + + @Column(name = "vpc_uuid") + private String vpcUuid; + + @Column(name = "nic_id") + private long nicId; + + @Column(name = "nic_uuid") + private String nicUuid; + + @Column(name = "is_default_nic") + private boolean isDefaultNic; + + @Column(name = "ip_address") + private String ipAddress; + + @Column(name = "gateway") + private String gateway; + + @Column(name = "netmask") + private String netmask; + + @Column(name = "mac_address") + private String macAddress; + + @Column(name = "broadcast_uri") + private URI broadcastUri; + + @Column(name = "isolation_uri") + private URI isolationUri; + + @Column(name="network_id") + private long networkId; + + @Column(name="network_uuid") + private String networkUuid; + + @Column(name="network_name") + private String networkName; + + @Column(name="network_domain") + private String networkDomain; + + @Column(name="traffic_type") + @Enumerated(value=EnumType.STRING) + private TrafficType trafficType; + + + @Column(name="project_id") + private long projectId; + + @Column(name="project_uuid") + private String projectUuid; + + @Column(name="project_name") + private String projectName; + + @Column(name="job_id") + private long jobId; + + @Column(name="job_uuid") + private String jobUuid; + + @Column(name="job_status") + private int jobStatus; + + + @Column(name="uuid") + private String uuid; + + @Column(name="template_version") + private String templateVersion; + + @Column(name="scripts_version") + private String scriptsVersion; + + @Column(name="redundant_state") + @Enumerated(EnumType.STRING) + private RedundantState redundantState; + + @Column(name="is_redundant_router") + boolean isRedundantRouter; + + @Column(name="guest_type") + @Enumerated(value=EnumType.STRING) + private GuestType guestType; + + + public DomainRouterJoinVO() { + } + + + + + public String getUuid() { + return uuid; + } + + + + + public void setUuid(String uuid) { + this.uuid = uuid; + } + + + public long getId() { + return id; + } + + + public void setId(long id) { + this.id = id; + } + + + public String getName() { + return name; + } + + + public void setName(String name) { + this.name = name; + } + + + + + public long getAccountId() { + return accountId; + } + + + public void setAccountId(long accountId) { + this.accountId = accountId; + } + + + public String getAccountUuid() { + return accountUuid; + } + + + + + public void setAccountUuid(String accountUuid) { + this.accountUuid = accountUuid; + } + + + + + public String getAccountName() { + return accountName; + } + + + public void setAccountName(String accountName) { + this.accountName = accountName; + } + + + public short getAccountType() { + return accountType; + } + + + public void setAccountType(short accountType) { + this.accountType = accountType; + } + + + public long getDomainId() { + return domainId; + } + + + public void setDomainId(long domainId) { + this.domainId = domainId; + } + + @Override + public String getDomainUuid() { + return domainUuid; + } + + + + + public void setDomainUuid(String domainUuid) { + this.domainUuid = domainUuid; + } + + + + + public String getDomainName() { + return domainName; + } + + + public void setDomainName(String domainName) { + this.domainName = domainName; + } + + public String getDomainPath() { + return domainPath; + } + + + public void setDomainPath(String domainPath) { + this.domainPath = domainPath; + } + + + public State getState() { + return state; + } + + + public void setState(State state) { + this.state = state; + } + + + public Date getCreated() { + return created; + } + + + public void setCreated(Date created) { + this.created = created; + } + + + public Date getRemoved() { + return removed; + } + + + public void setRemoved(Date removed) { + this.removed = removed; + } + + + public String getInstanceName() { + return instanceName; + } + + + public void setInstanceName(String instanceName) { + this.instanceName = instanceName; + } + + + public String getPodUuid() { + return podUuid; + } + + + + + public void setPodUuid(String podUuid) { + this.podUuid = podUuid; + } + + + public String getDataCenterUuid() { + return dataCenterUuid; + } + + public void setDataCenterUuid(String zoneUuid) { + this.dataCenterUuid = zoneUuid; + } + + public String getDataCenterName() { + return dataCenterName; + } + + + public void setDataCenterName(String zoneName) { + this.dataCenterName = zoneName; + } + + + public Long getHostId() { + return hostId; + } + + + public void setHostId(long hostId) { + this.hostId = hostId; + } + + + public String getHostUuid() { + return hostUuid; + } + + + + + public void setHostUuid(String hostUuid) { + this.hostUuid = hostUuid; + } + + + + + public String getHostName() { + return hostName; + } + + + public void setHostName(String hostName) { + this.hostName = hostName; + } + + + public long getTemplateId() { + return templateId; + } + + + public void setTemplateId(long templateId) { + this.templateId = templateId; + } + + + + public String getTemplateUuid() { + return templateUuid; + } + + + + + public void setTemplateUuid(String templateUuid) { + this.templateUuid = templateUuid; + } + + + + + + public String getServiceOfferingUuid() { + return serviceOfferingUuid; + } + + + public void setServiceOfferingUuid(String serviceOfferingUuid) { + this.serviceOfferingUuid = serviceOfferingUuid; + } + + + + + public String getServiceOfferingName() { + return serviceOfferingName; + } + + + public void setServiceOfferingName(String serviceOfferingName) { + this.serviceOfferingName = serviceOfferingName; + } + + public long getVpcId() { + return vpcId; + } + + public void setVpcId(long vpcId) { + this.vpcId = vpcId; + } + + + + + public long getNicId() { + return nicId; + } + + + public void setNicId(long nicId) { + this.nicId = nicId; + } + + + public boolean isDefaultNic() { + return isDefaultNic; + } + + + public void setDefaultNic(boolean isDefaultNic) { + this.isDefaultNic = isDefaultNic; + } + + + public String getIpAddress() { + return ipAddress; + } + + + public void setIpAddress(String ipAddress) { + this.ipAddress = ipAddress; + } + + + public String getGateway() { + return gateway; + } + + + public void setGateway(String gateway) { + this.gateway = gateway; + } + + + public String getNetmask() { + return netmask; + } + + + public void setNetmask(String netmask) { + this.netmask = netmask; + } + + + public String getMacAddress() { + return macAddress; + } + + + public void setMacAddress(String macAddress) { + this.macAddress = macAddress; + } + + + public URI getBroadcastUri() { + return broadcastUri; + } + + + public void setBroadcastUri(URI broadcastUri) { + this.broadcastUri = broadcastUri; + } + + + public URI getIsolationUri() { + return isolationUri; + } + + + public void setIsolationUri(URI isolationUri) { + this.isolationUri = isolationUri; + } + + + public long getNetworkId() { + return networkId; + } + + + public void setNetworkId(long networkId) { + this.networkId = networkId; + } + + + public String getNetworkName() { + return networkName; + } + + + + + public void setNetworkName(String networkName) { + this.networkName = networkName; + } + + + + + public String getNetworkDomain() { + return networkDomain; + } + + + + + public void setNetworkDomain(String networkDomain) { + this.networkDomain = networkDomain; + } + + + + + public TrafficType getTrafficType() { + return trafficType; + } + + + public void setTrafficType(TrafficType trafficType) { + this.trafficType = trafficType; + } + + + + public long getServiceOfferingId() { + return serviceOfferingId; + } + + + + + public void setServiceOfferingId(long serviceOfferingId) { + this.serviceOfferingId = serviceOfferingId; + } + + + + + public long getProjectId() { + return projectId; + } + + + + + public void setProjectId(long projectId) { + this.projectId = projectId; + } + + + + + public String getProjectUuid() { + return projectUuid; + } + + + + + public void setProjectUuid(String projectUuid) { + this.projectUuid = projectUuid; + } + + + + + public String getProjectName() { + return projectName; + } + + + + + public void setProjectName(String projectName) { + this.projectName = projectName; + } + + + + + + + public String getVpcUuid() { + return vpcUuid; + } + + + + + public void setVpcUuid(String vpcUuid) { + this.vpcUuid = vpcUuid; + } + + + + + public String getNicUuid() { + return nicUuid; + } + + + + + public void setNicUuid(String nicUuid) { + this.nicUuid = nicUuid; + } + + + + + public String getNetworkUuid() { + return networkUuid; + } + + + + + public void setNetworkUuid(String networkUuid) { + this.networkUuid = networkUuid; + } + + + public long getJobId() { + return jobId; + } + + + + + public void setJobId(long jobId) { + this.jobId = jobId; + } + + + + + public String getJobUuid() { + return jobUuid; + } + + + + + public void setJobUuid(String jobUuid) { + this.jobUuid = jobUuid; + } + + + + + public int getJobStatus() { + return jobStatus; + } + + + + + public void setJobStatus(int jobStatus) { + this.jobStatus = jobStatus; + } + + + + public Long getPodId() { + return podId; + } + + + + + public void setPodId(Long podId) { + this.podId = podId; + } + + + + + public long getDataCenterId() { + return dataCenterId; + } + + + + + public void setDataCenterId(long zoneId) { + this.dataCenterId = zoneId; + } + + + + + public String getDns1() { + return dns1; + } + + + + + public void setDns1(String dns1) { + this.dns1 = dns1; + } + + + + + public String getDns2() { + return dns2; + } + + + + + public void setDns2(String dns2) { + this.dns2 = dns2; + } + + + + + public String getTemplateVersion() { + return templateVersion; + } + + + + + public void setTemplateVersion(String templateVersion) { + this.templateVersion = templateVersion; + } + + + + + public String getScriptsVersion() { + return scriptsVersion; + } + + + + + public void setScriptsVersion(String scriptsVersion) { + this.scriptsVersion = scriptsVersion; + } + + + + + public RedundantState getRedundantState() { + return redundantState; + } + + + + + public void setRedundantState(RedundantState redundantState) { + this.redundantState = redundantState; + } + + + + + public boolean isRedundantRouter() { + return isRedundantRouter; + } + + + + + public void setRedundantRouter(boolean isRedundantRouter) { + this.isRedundantRouter = isRedundantRouter; + } + + + + + public GuestType getGuestType() { + return guestType; + } + + + + + public void setGuestType(GuestType guestType) { + this.guestType = guestType; + } + + + + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + (int) (id ^ (id >>> 32)); + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + DomainRouterJoinVO other = (DomainRouterJoinVO) obj; + if (id != other.id) + return false; + return true; + } +} diff --git a/api/src/com/cloud/api/view/vo/UserVmJoinVO.java b/api/src/com/cloud/api/view/vo/UserVmJoinVO.java new file mode 100644 index 00000000000..1aa137bbda0 --- /dev/null +++ b/api/src/com/cloud/api/view/vo/UserVmJoinVO.java @@ -0,0 +1,1623 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. +package com.cloud.api.view.vo; + +import java.net.URI; +import java.util.Date; +import java.util.Map; + +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.EnumType; +import javax.persistence.Enumerated; +import javax.persistence.Table; +import javax.persistence.Transient; + +import com.cloud.hypervisor.Hypervisor.HypervisorType; +import com.cloud.network.Network.GuestType; +import com.cloud.network.Networks.TrafficType; +import com.cloud.server.ResourceTag.TaggedResourceType; +import com.cloud.storage.Volume; +import com.cloud.storage.Storage.StoragePoolType; +import com.cloud.utils.db.Encrypt; +import com.cloud.utils.db.GenericDao; +import com.cloud.vm.VirtualMachine; +import com.cloud.vm.VirtualMachine.State; + +@Entity +@Table(name="user_vm_view") +public class UserVmJoinVO implements ControlledViewEntity { + + @Column(name="id", updatable=false, nullable = false) + private long id; + + @Column(name="name", updatable=false, nullable=false, length=255) + private String name = null; + + @Column(name="display_name", updatable=false, nullable=false, length=255) + private String displayName = null; + + @Column(name="account_id") + private long accountId; + + @Column(name="account_uuid") + private String accountUuid; + + @Column(name="account_name") + private String accountName = null; + + @Column(name="account_type") + private short accountType; + + @Column(name="domain_id") + private long domainId; + + @Column(name="domain_uuid") + private String domainUuid; + + @Column(name="domain_name") + private String domainName = null; + + @Column(name="domain_path") + private String domainPath = null; + + @Column(name="instance_group_id") + private long instanceGroupId; + + @Column(name="instance_group_uuid") + private String instanceGroupUuid; + + @Column(name="instance_group_name") + private String instanceGroupName; + + @Column(name="vm_type", updatable=false, nullable=false, length=32) + @Enumerated(value=EnumType.STRING) + protected VirtualMachine.Type type; + + /** + * Note that state is intentionally missing the setter. Any updates to + * the state machine needs to go through the DAO object because someone + * else could be updating it as well. + */ + @Enumerated(value=EnumType.STRING) + @Column(name="state", updatable=true, nullable=false, length=32) + private State state = null; + + @Column(name=GenericDao.CREATED_COLUMN) + private Date created; + + @Column(name=GenericDao.REMOVED_COLUMN) + private Date removed; + + @Column(name="instance_name", updatable=true, nullable=false) + private String instanceName; + + @Column(name="guest_os_id", nullable=false, length=17) + private long guestOsId; + + @Column(name="guest_os_uuid") + private String guestOsUuid; + + @Column(name="hypervisor_type") + @Enumerated(value=EnumType.STRING) + private HypervisorType hypervisorType; + + @Column(name="ha_enabled", updatable=true, nullable=true) + private boolean haEnabled; + + @Encrypt + @Column(name="vnc_password", updatable=true, nullable=false, length=255) + protected String vncPassword; + + @Column(name="limit_cpu_use", updatable=true, nullable=true) + private boolean limitCpuUse; + + @Column(name="last_host_id", updatable=true, nullable=true) + private Long lastHostId; + + @Column(name="private_ip_address", updatable=true) + private String privateIpAddress; + + + @Column(name="private_mac_address", updatable=true, nullable=true) + private String privateMacAddress; + + @Column(name="pod_id", updatable=true, nullable=false) + private Long podId; + + @Column(name="pod_uuid") + private String podUuid; + + @Column(name="data_center_id") + private long dataCenterId; + + @Column(name="data_center_uuid") + private String dataCenterUuid; + + @Column(name="data_center_name") + private String dataCenterName = null; + + @Column(name="security_group_enabled") + private boolean securityGroupEnabled; + + @Column(name="host_id", updatable=true, nullable=true) + private long hostId; + + @Column(name="host_uuid") + private String hostUuid; + + @Column(name="host_name", nullable=false) + private String hostName; + + @Column(name="template_id", updatable=true, nullable=true, length=17) + private long templateId; + + @Column(name="template_uuid") + private String templateUuid; + + @Column(name="template_name") + private String templateName; + + @Column(name="template_display_text", length=4096) + private String templateDisplayText; + + @Column(name="password_enabled") + private boolean passwordEnabled; + + @Column(name="iso_id", updatable=true, nullable=true, length=17) + private long isoId; + + @Column(name="iso_uuid") + private String isoUuid; + + @Column(name="iso_name") + private String isoName; + + @Column(name="iso_display_text", length=4096) + private String isoDisplayText; + + @Column(name="service_offering_id") + private long serviceOfferingId; + + @Column(name="service_offering_uuid") + private String serviceOfferingUuid; + + @Column(name="service_offering_name") + private String serviceOfferingName; + + @Column(name="cpu") + private int cpu; + + @Column(name="speed") + private int speed; + + @Column(name="ram_size") + private int ramSize; + + @Column(name="pool_id", updatable=false, nullable = false) + private long poolId; + + @Column(name="pool_uuid") + private String poolUuid; + + @Column(name="pool_type", updatable=false, nullable=false, length=32) + @Enumerated(value=EnumType.STRING) + private StoragePoolType poolType; + + @Column(name = "volume_id") + private long volume_id; + + @Column(name = "volume_uuid") + private String volume_uuid; + + @Column(name = "volume_device_id") + private Long volumeDeviceId = null; + + @Column(name = "volume_type") + @Enumerated(EnumType.STRING) + private Volume.Type volumeType; + + @Column(name = "security_group_id") + private long securityGroupId; + + @Column(name = "security_group_uuid") + private String securityGroupUuid; + + @Column(name = "security_group_name") + private String securityGroupName; + + @Column(name = "security_group_description") + private String securityGroupDescription; + + @Column(name = "vpc_id") + private long vpcId; + + @Column(name = "vpc_uuid") + private String vpcUuid; + + @Column(name = "nic_id") + private long nicId; + + @Column(name = "nic_uuid") + private String nicUuid; + + @Column(name = "is_default_nic") + private boolean isDefaultNic; + + @Column(name = "ip_address") + private String ipAddress; + + @Column(name = "gateway") + private String gateway; + + @Column(name = "netmask") + private String netmask; + + @Column(name = "mac_address") + private String macAddress; + + @Column(name = "broadcast_uri") + private URI broadcastUri; + + @Column(name = "isolation_uri") + private URI isolationUri; + + @Column(name="network_id") + private long networkId; + + @Column(name="network_uuid") + private String networkUuid; + + @Column(name="traffic_type") + @Enumerated(value=EnumType.STRING) + private TrafficType trafficType; + + @Column(name="guest_type") + @Enumerated(value=EnumType.STRING) + private GuestType guestType; + + @Column(name = "public_ip_id") + private long publicIpId; + + @Column(name = "public_ip_uuid") + private String publicIpUuid; + + @Column(name = "public_ip_address") + private String publicIpAddress; + + @Column(name="user_data", updatable=true, nullable=true, length=2048) + private String userData; + + @Column(name="project_id") + private long projectId; + + @Column(name="project_uuid") + private String projectUuid; + + @Column(name="project_name") + private String projectName; + + @Column(name="keypair_name") + private String keypairName; + + @Column(name="job_id") + private long jobId; + + @Column(name="job_uuid") + private String jobUuid; + + @Column(name="job_status") + private int jobStatus; + + @Column(name="tag_id") + private long tagId; + + @Column(name="tag_uuid") + private String tagUuid; + + @Column(name="tag_key") + private String tagKey; + + @Column(name="tag_value") + private String tagValue; + + @Column(name="tag_domain_id") + private long tagDomainId; + + @Column(name="tag_account_id") + private long tagAccountId; + + @Column(name="tag_resource_id") + private long tagResourceId; + + @Column(name="tag_resource_uuid") + private String tagResourceUuid; + + @Column(name="tag_resource_type") + @Enumerated(value=EnumType.STRING) + private TaggedResourceType tagResourceType; + + @Column(name="tag_customer") + private String tagCustomer; + + transient String password; + + @Transient + Map details; + + @Column(name="uuid") + private String uuid; + + public UserVmJoinVO() { + } + + + + + public String getUuid() { + return uuid; + } + + + + + public void setUuid(String uuid) { + this.uuid = uuid; + } + + + public String getPassword() { + return password; + } + + public void setPassword(String password) { + this.password = password; + } + + public long getId() { + return id; + } + + + public void setId(long id) { + this.id = id; + } + + + public String getName() { + return name; + } + + + public void setName(String name) { + this.name = name; + } + + + public String getDisplayName() { + return displayName; + } + + + public void setDisplayName(String displayName) { + this.displayName = displayName; + } + + + public long getAccountId() { + return accountId; + } + + + public void setAccountId(long accountId) { + this.accountId = accountId; + } + + + public String getAccountUuid() { + return accountUuid; + } + + + + + public void setAccountUuid(String accountUuid) { + this.accountUuid = accountUuid; + } + + + + + public String getAccountName() { + return accountName; + } + + + public void setAccountName(String accountName) { + this.accountName = accountName; + } + + + public short getAccountType() { + return accountType; + } + + + public void setAccountType(short accountType) { + this.accountType = accountType; + } + + + public long getDomainId() { + return domainId; + } + + + public void setDomainId(long domainId) { + this.domainId = domainId; + } + + + public String getDomainUuid() { + return domainUuid; + } + + + + + public void setDomainUuid(String domainUuid) { + this.domainUuid = domainUuid; + } + + + + + public String getDomainName() { + return domainName; + } + + + public void setDomainName(String domainName) { + this.domainName = domainName; + } + + + public String getDomainPath() { + return domainPath; + } + + + public void setDomainPath(String domainPath) { + this.domainPath = domainPath; + } + + + + + public long getInstanceGroupId() { + return instanceGroupId; + } + + + public void setInstanceGroupId(long instanceGroupId) { + this.instanceGroupId = instanceGroupId; + } + + + public String getInstanceGroupUuid() { + return instanceGroupUuid; + } + + + + + public void setInstanceGroupUuid(String instanceGroupUuid) { + this.instanceGroupUuid = instanceGroupUuid; + } + + + + + public String getInstanceGroupName() { + return instanceGroupName; + } + + + public void setInstanceGroupName(String instanceGroupName) { + this.instanceGroupName = instanceGroupName; + } + + + public VirtualMachine.Type getType() { + return type; + } + + + + + public void setType(VirtualMachine.Type type) { + this.type = type; + } + + + + + public State getState() { + return state; + } + + + public void setState(State state) { + this.state = state; + } + + + public Date getCreated() { + return created; + } + + + public void setCreated(Date created) { + this.created = created; + } + + + public Date getRemoved() { + return removed; + } + + + public void setRemoved(Date removed) { + this.removed = removed; + } + + + public String getInstanceName() { + return instanceName; + } + + + public void setInstanceName(String instanceName) { + this.instanceName = instanceName; + } + + + public long getGuestOSId() { + return guestOsId; + } + + + public void setGuestOSId(long guestOSId) { + this.guestOsId = guestOSId; + } + + + public String getGuestOsUuid() { + return guestOsUuid; + } + + + + + public void setGuestOsUuid(String guestOsUuid) { + this.guestOsUuid = guestOsUuid; + } + + + + + public HypervisorType getHypervisorType() { + return hypervisorType; + } + + + public void setHypervisorType(HypervisorType hypervisorType) { + this.hypervisorType = hypervisorType; + } + + + public boolean isHaEnabled() { + return haEnabled; + } + + + public void setHaEnabled(boolean haEnabled) { + this.haEnabled = haEnabled; + } + + public void setVncPassword(String vncPassword) { + this.vncPassword = vncPassword; + } + + public String getVncPassword() { + return vncPassword; + } + + + + + public String getPrivateIpAddress() { + return privateIpAddress; + } + + + + + public void setPrivateIpAddress(String privateIpAddress) { + this.privateIpAddress = privateIpAddress; + } + + + + + public String getPrivateMacAddress() { + return privateMacAddress; + } + + + + + public void setPrivateMacAddress(String privateMacAddress) { + this.privateMacAddress = privateMacAddress; + } + + + + + public Long getLastHostId() { + return lastHostId; + } + + + + + public void setLastHostId(Long lastHostId) { + this.lastHostId = lastHostId; + } + + + + + + + public Long getPodId() { + return podId; + } + + + + + public void setPodId(Long podIdToDeployIn) { + this.podId = podIdToDeployIn; + } + + + + + public String getPodUuid() { + return podUuid; + } + + + + + public void setPodUuid(String podUuid) { + this.podUuid = podUuid; + } + + + + + public long getDataCenterId() { + return dataCenterId; + } + + + + + public void setDataCenterId(long dataCenterIdToDeployIn) { + this.dataCenterId = dataCenterIdToDeployIn; + } + + + public boolean limitCpuUse() { + return limitCpuUse; + } + + public void setLimitCpuUse(boolean value) { + limitCpuUse = value; + } + + + public String getDataCenterUuid() { + return dataCenterUuid; + } + + + + + public void setDataCenterUuid(String zoneUuid) { + this.dataCenterUuid = zoneUuid; + } + + + + + public String getDataCenterName() { + return dataCenterName; + } + + + public void setDataCenterName(String zoneName) { + this.dataCenterName = zoneName; + } + + + public boolean isSecurityGroupEnabled() { + return securityGroupEnabled; + } + + + public void setSecurityGroupEnabled(boolean securityGroupEnabled) { + this.securityGroupEnabled = securityGroupEnabled; + } + + + public Long getHostId() { + return hostId; + } + + + public void setHostId(long hostId) { + this.hostId = hostId; + } + + + public String getHostUuid() { + return hostUuid; + } + + + + + public void setHostUuid(String hostUuid) { + this.hostUuid = hostUuid; + } + + + + + public String getHostName() { + return hostName; + } + + + public void setHostName(String hostName) { + this.hostName = hostName; + } + + + public long getTemplateId() { + return templateId; + } + + + public void setTemplateId(long templateId) { + this.templateId = templateId; + } + + + + public String getTemplateUuid() { + return templateUuid; + } + + + + + public void setTemplateUuid(String templateUuid) { + this.templateUuid = templateUuid; + } + + + + + public String getTemplateName() { + return templateName; + } + + + public void setTemplateName(String templateName) { + this.templateName = templateName; + } + + + public String getTemplateDisplayText() { + return templateDisplayText; + } + + + public void setTemplateDisplayText(String templateDisplayText) { + this.templateDisplayText = templateDisplayText; + } + + + public boolean isPasswordEnabled() { + return passwordEnabled; + } + + + public void setPasswordEnabled(boolean passwordEnabled) { + this.passwordEnabled = passwordEnabled; + } + + + public Long getIsoId() { + return isoId; + } + + + public void setIsoId(long isoId) { + this.isoId = isoId; + } + + + public String getIsoUuid() { + return isoUuid; + } + + + + + public void setIsoUuid(String isoUuid) { + this.isoUuid = isoUuid; + } + + + + + public String getIsoName() { + return isoName; + } + + + public void setIsoName(String isoName) { + this.isoName = isoName; + } + + + public String getIsoDisplayText() { + return isoDisplayText; + } + + public void setIsoDisplayText(String isoDisplayText) { + this.isoDisplayText = isoDisplayText; + } + + + + + public String getServiceOfferingUuid() { + return serviceOfferingUuid; + } + + + + + public void setServiceOfferingUuid(String serviceOfferingUuid) { + this.serviceOfferingUuid = serviceOfferingUuid; + } + + + + + public String getServiceOfferingName() { + return serviceOfferingName; + } + + + public void setServiceOfferingName(String serviceOfferingName) { + this.serviceOfferingName = serviceOfferingName; + } + + + public int getCpu() { + return cpu; + } + + + public void setCpu(int cpu) { + this.cpu = cpu; + } + + + public int getSpeed() { + return speed; + } + + + public void setSpeed(int speed) { + this.speed = speed; + } + + + public int getRamSize() { + return ramSize; + } + + + public void setRamSize(int ramSize) { + this.ramSize = ramSize; + } + + + public long getPoolId() { + return poolId; + } + + + public void setPoolId(long poolId) { + this.poolId = poolId; + } + + + public StoragePoolType getPoolType() { + return poolType; + } + + + public void setPoolType(StoragePoolType poolType) { + this.poolType = poolType; + } + + + public long getVolume_id() { + return volume_id; + } + + + public void setVolume_id(long volume_id) { + this.volume_id = volume_id; + } + + + public Long getVolumeDeviceId() { + return volumeDeviceId; + } + + + public void setVolumeDeviceId(Long volumeDeviceId) { + this.volumeDeviceId = volumeDeviceId; + } + + + public Volume.Type getVolumeType() { + return volumeType; + } + + + public void setVolumeType(Volume.Type volumeType) { + this.volumeType = volumeType; + } + + + public long getSecurityGroupId() { + return securityGroupId; + } + + + public void setSecurityGroupId(long securityGroupId) { + this.securityGroupId = securityGroupId; + } + + + public String getSecurityGroupName() { + return securityGroupName; + } + + + public void setSecurityGroupName(String securityGroupName) { + this.securityGroupName = securityGroupName; + } + + + public String getSecurityGroupDescription() { + return securityGroupDescription; + } + + + public void setSecurityGroupDescription(String securityGroupDescription) { + this.securityGroupDescription = securityGroupDescription; + } + + + public long getVpcId() { + return vpcId; + } + + + + public void setVpcId(long vpcId) { + this.vpcId = vpcId; + } + + + + + public long getNicId() { + return nicId; + } + + + public void setNicId(long nicId) { + this.nicId = nicId; + } + + + public boolean isDefaultNic() { + return isDefaultNic; + } + + + public void setDefaultNic(boolean isDefaultNic) { + this.isDefaultNic = isDefaultNic; + } + + + public String getIpAddress() { + return ipAddress; + } + + + public void setIpAddress(String ipAddress) { + this.ipAddress = ipAddress; + } + + + public String getGateway() { + return gateway; + } + + + public void setGateway(String gateway) { + this.gateway = gateway; + } + + + public String getNetmask() { + return netmask; + } + + + public void setNetmask(String netmask) { + this.netmask = netmask; + } + + + public String getMacAddress() { + return macAddress; + } + + + public void setMacAddress(String macAddress) { + this.macAddress = macAddress; + } + + + public URI getBroadcastUri() { + return broadcastUri; + } + + + public void setBroadcastUri(URI broadcastUri) { + this.broadcastUri = broadcastUri; + } + + + public URI getIsolationUri() { + return isolationUri; + } + + + public void setIsolationUri(URI isolationUri) { + this.isolationUri = isolationUri; + } + + + public long getNetworkId() { + return networkId; + } + + + public void setNetworkId(long networkId) { + this.networkId = networkId; + } + + + public TrafficType getTrafficType() { + return trafficType; + } + + + public void setTrafficType(TrafficType trafficType) { + this.trafficType = trafficType; + } + + + public GuestType getGuestType() { + return guestType; + } + + + public void setGuestType(GuestType guestType) { + this.guestType = guestType; + } + + + public long getPublicIpId() { + return publicIpId; + } + + + + + public void setPublicIpId(long publicIpId) { + this.publicIpId = publicIpId; + } + + + + + public String getPublicIpAddress() { + return publicIpAddress; + } + + + public void setPublicIpAddress(String publicIpAddress) { + this.publicIpAddress = publicIpAddress; + } + + + + public long getServiceOfferingId() { + return serviceOfferingId; + } + + + + + public void setServiceOfferingId(long serviceOfferingId) { + this.serviceOfferingId = serviceOfferingId; + } + + + public Map getDetails() { + return details; + } + + public String getDetail(String name) { + assert (details != null) : "Did you forget to load the details?"; + + return details != null ? details.get(name) : null; + } + + public void setDetail(String name, String value) { + assert (details != null) : "Did you forget to load the details?"; + + details.put(name, value); + } + + public void setDetails(Map details) { + this.details = details; + } + + public void setUserData(String userData) { + this.userData = userData; + } + + public String getUserData() { + return userData; + } + + + + public long getGuestOsId() { + return guestOsId; + } + + + + + public void setGuestOsId(long guestOsId) { + this.guestOsId = guestOsId; + } + + + + + public long getProjectId() { + return projectId; + } + + + + + public void setProjectId(long projectId) { + this.projectId = projectId; + } + + + + + public String getProjectUuid() { + return projectUuid; + } + + + + + public void setProjectUuid(String projectUuid) { + this.projectUuid = projectUuid; + } + + + + + public String getProjectName() { + return projectName; + } + + + + + public void setProjectName(String projectName) { + this.projectName = projectName; + } + + + + + public String getKeypairName() { + return keypairName; + } + + + + + public void setKeypairName(String keypairName) { + this.keypairName = keypairName; + } + + + + + public long getTagId() { + return tagId; + } + + + + + public void setTagId(long tagId) { + this.tagId = tagId; + } + + + + + public String getTagUuid() { + return tagUuid; + } + + + + + public void setTagUuid(String tagUuid) { + this.tagUuid = tagUuid; + } + + + + + public String getTagKey() { + return tagKey; + } + + + + + public void setTagKey(String tagKey) { + this.tagKey = tagKey; + } + + + + + public String getTagValue() { + return tagValue; + } + + + + + public void setTagValue(String tagValue) { + this.tagValue = tagValue; + } + + + + + public long getTagDomainId() { + return tagDomainId; + } + + + + + public void setTagDomainId(long tagDomainId) { + this.tagDomainId = tagDomainId; + } + + + + + public long getTagAccountId() { + return tagAccountId; + } + + + + + public void setTagAccountId(long tagAccountId) { + this.tagAccountId = tagAccountId; + } + + + + + public long getTagResourceId() { + return tagResourceId; + } + + + + + public void setTagResourceId(long tagResourceId) { + this.tagResourceId = tagResourceId; + } + + + + + public String getTagResourceUuid() { + return tagResourceUuid; + } + + + + + public void setTagResourceUuid(String tagResourceUuid) { + this.tagResourceUuid = tagResourceUuid; + } + + + + + public TaggedResourceType getTagResourceType() { + return tagResourceType; + } + + + + + public void setTagResourceType(TaggedResourceType tagResourceType) { + this.tagResourceType = tagResourceType; + } + + + + + public String getTagCustomer() { + return tagCustomer; + } + + + + + public void setTagCustomer(String tagCustomer) { + this.tagCustomer = tagCustomer; + } + + + + + public boolean isLimitCpuUse() { + return limitCpuUse; + } + + + + public String getPoolUuid() { + return poolUuid; + } + + + + + public void setPoolUuid(String poolUuid) { + this.poolUuid = poolUuid; + } + + + + + public String getVolume_uuid() { + return volume_uuid; + } + + + + + public void setVolume_uuid(String volume_uuid) { + this.volume_uuid = volume_uuid; + } + + + + + public String getSecurityGroupUuid() { + return securityGroupUuid; + } + + + + + public void setSecurityGroupUuid(String securityGroupUuid) { + this.securityGroupUuid = securityGroupUuid; + } + + + + + public String getVpcUuid() { + return vpcUuid; + } + + + + + public void setVpcUuid(String vpcUuid) { + this.vpcUuid = vpcUuid; + } + + + + + public String getNicUuid() { + return nicUuid; + } + + + + + public void setNicUuid(String nicUuid) { + this.nicUuid = nicUuid; + } + + + + + public String getNetworkUuid() { + return networkUuid; + } + + + + + public void setNetworkUuid(String networkUuid) { + this.networkUuid = networkUuid; + } + + + + + public String getPublicIpUuid() { + return publicIpUuid; + } + + + + + public void setPublicIpUuid(String publicIpUuid) { + this.publicIpUuid = publicIpUuid; + } + + + + public long getJobId() { + return jobId; + } + + + + + public void setJobId(long jobId) { + this.jobId = jobId; + } + + + + + public String getJobUuid() { + return jobUuid; + } + + + + + public void setJobUuid(String jobUuid) { + this.jobUuid = jobUuid; + } + + + + + public int getJobStatus() { + return jobStatus; + } + + + + + public void setJobStatus(int jobStatus) { + this.jobStatus = jobStatus; + } + + + + transient String toString; + @Override + public String toString() { + if (toString == null) { + toString = new StringBuilder("VM[").append(id).append("|").append(hostName).append("]").toString(); + } + return toString; + } + + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + (int) (id ^ (id >>> 32)); + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + UserVmJoinVO other = (UserVmJoinVO) obj; + if (id != other.id) + return false; + return true; + } +} diff --git a/api/src/com/cloud/server/ManagementService.java b/api/src/com/cloud/server/ManagementService.java index 78f2cb5e168..1b43662416d 100755 --- a/api/src/com/cloud/server/ManagementService.java +++ b/api/src/com/cloud/server/ManagementService.java @@ -62,6 +62,7 @@ import org.apache.cloudstack.api.user.iso.command.UpdateIsoCmd; import org.apache.cloudstack.api.user.vmgroup.command.UpdateVMGroupCmd; import com.cloud.api.commands.UpgradeSystemVMCmd; import com.cloud.api.commands.UploadCustomCertificateCmd; +import com.cloud.api.view.vo.DomainRouterJoinVO; import com.cloud.async.AsyncJob; import com.cloud.capacity.Capacity; import com.cloud.configuration.Configuration; @@ -184,7 +185,7 @@ public interface ManagementService { * @param cmd * @return List of DomainRouters. */ - Pair, Integer> searchForRouters(ListRoutersCmd cmd); + Pair, Integer> searchForRouters(ListRoutersCmd cmd); /** * Obtains a list of IP Addresses by the specified search criteria. Can search by: "userId", "dataCenterId", diff --git a/api/src/com/cloud/vm/UserVmService.java b/api/src/com/cloud/vm/UserVmService.java index 04fa6007f09..4568944d733 100755 --- a/api/src/com/cloud/vm/UserVmService.java +++ b/api/src/com/cloud/vm/UserVmService.java @@ -37,6 +37,7 @@ import org.apache.cloudstack.api.user.vm.command.RestoreVMCmd; import org.apache.cloudstack.api.user.vm.command.StartVMCmd; import org.apache.cloudstack.api.user.vm.command.UpdateVMCmd; import org.apache.cloudstack.api.user.vm.command.UpgradeVMCmd; +import com.cloud.api.view.vo.UserVmJoinVO; import com.cloud.dc.DataCenter; import com.cloud.exception.ConcurrentOperationException; import com.cloud.exception.InsufficientCapacityException; @@ -379,7 +380,7 @@ public interface UserVmService { * the API command that wraps the search criteria * @return List of UserVMs. */ - Pair, Integer> searchForUserVMs(ListVMsCmd cmd); + Pair, Integer> searchForUserVMs(ListVMsCmd cmd); HypervisorType getHypervisorTypeOfUserVM(long vmid); diff --git a/api/src/org/apache/cloudstack/api/ResponseGenerator.java b/api/src/org/apache/cloudstack/api/ResponseGenerator.java index 99398550a1f..aeafe6a665c 100755 --- a/api/src/org/apache/cloudstack/api/ResponseGenerator.java +++ b/api/src/org/apache/cloudstack/api/ResponseGenerator.java @@ -152,6 +152,8 @@ import com.cloud.user.User; import com.cloud.user.UserAccount; import com.cloud.uservm.UserVm; import com.cloud.vm.InstanceGroup; +import com.cloud.api.view.vo.DomainRouterJoinVO; +import com.cloud.api.view.vo.UserVmJoinVO; import com.cloud.vm.VirtualMachine; public interface ResponseGenerator { @@ -175,6 +177,10 @@ public interface ResponseGenerator { SnapshotPolicyResponse createSnapshotPolicyResponse(SnapshotPolicy policy); + List createUserVmResponse(String objectName, UserVmJoinVO... userVms); + + List createUserVmResponse(String objectName, EnumSet details, UserVmJoinVO... userVms); + List createUserVmResponse(String objectName, UserVm... userVms); List createUserVmResponse(String objectName, EnumSet details, UserVm... userVms); @@ -183,6 +189,8 @@ public interface ResponseGenerator { DomainRouterResponse createDomainRouterResponse(VirtualRouter router); + List createDomainRouterResponse(DomainRouterJoinVO... router); + HostResponse createHostResponse(Host host, EnumSet details); HostResponse createHostResponse(Host host); diff --git a/api/src/org/apache/cloudstack/api/ResponseObject.java b/api/src/org/apache/cloudstack/api/ResponseObject.java index ff03c204149..fd327fab09a 100644 --- a/api/src/org/apache/cloudstack/api/ResponseObject.java +++ b/api/src/org/apache/cloudstack/api/ResponseObject.java @@ -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 * diff --git a/api/src/org/apache/cloudstack/api/admin/router/command/ListRoutersCmd.java b/api/src/org/apache/cloudstack/api/admin/router/command/ListRoutersCmd.java index 1659bea7827..e517dc14a39 100644 --- a/api/src/org/apache/cloudstack/api/admin/router/command/ListRoutersCmd.java +++ b/api/src/org/apache/cloudstack/api/admin/router/command/ListRoutersCmd.java @@ -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, Integer> result = _mgr.searchForRouters(this); + Pair, Integer> result = _mgr.searchForRouters(this); ListResponse response = new ListResponse(); - List routerResponses = new ArrayList(); - for (VirtualRouter router : result.first()) { - DomainRouterResponse routerResponse = _responseGenerator.createDomainRouterResponse(router); - routerResponse.setObjectName("router"); - routerResponses.add(routerResponse); - } + List routerResponses = _responseGenerator.createDomainRouterResponse(result.first().toArray(new DomainRouterJoinVO[result.first().size()])); response.setResponses(routerResponses, result.second()); response.setResponseName(getCommandName()); this.setResponseObject(response); diff --git a/api/src/org/apache/cloudstack/api/user/vm/command/ListVMsCmd.java b/api/src/org/apache/cloudstack/api/user/vm/command/ListVMsCmd.java index 4acee5cc72f..9ed9bb3e0a7 100644 --- a/api/src/org/apache/cloudstack/api/user/vm/command/ListVMsCmd.java +++ b/api/src/org/apache/cloudstack/api/user/vm/command/ListVMsCmd.java @@ -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, Integer> result = _userVmService.searchForUserVMs(this); + Pair, Integer> result = _userVmService.searchForUserVMs(this); ListResponse response = new ListResponse(); EnumSet details = getDetails(); - List 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 vmResponses = _responseGenerator.createUserVmResponse("virtualmachine", getDetails(), result.first().toArray(new UserVmJoinVO[result.first().size()])); response.setResponses(vmResponses, result.second()); response.setResponseName(getCommandName()); this.setResponseObject(response); diff --git a/api/test/src/com/cloud/api/commands/test/ListRoutersCmdTest.java b/api/test/src/com/cloud/api/commands/test/ListRoutersCmdTest.java new file mode 100644 index 00000000000..d922474e743 --- /dev/null +++ b/api/test/src/com/cloud/api/commands/test/ListRoutersCmdTest.java @@ -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 vrList = new ArrayList(); + DomainRouterJoinVO vr = new DomainRouterJoinVO(); + String uuid = UUID.randomUUID().toString(); + vr.setUuid(uuid); + vrList.add(vr); + + List respList = new ArrayList(); + DomainRouterResponse resp = new DomainRouterResponse(); + resp.setId(uuid); + respList.add(resp); + + Mockito.when(mgrService.searchForRouters(listVrCmd)) + .thenReturn(new Pair, Integer>(vrList, 1)); + Mockito.when(responseGenerator.createDomainRouterResponse(vr)).thenReturn(respList); + + + try { + listVrCmd.execute(); + ListResponse listResp = (ListResponse)listVrCmd.getResponseObject(); + assertNotNull(listResp); + assertEquals(1, listResp.getCount().intValue()); + List 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 vrList = new ArrayList(); + 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 respList = new ArrayList(); + 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, Integer>(vrList, 2)); + Mockito.when(responseGenerator.createDomainRouterResponse(vr1, vr2)).thenReturn(respList); + try { + listVrCmd.execute(); + ListResponse listResp = (ListResponse)listVrCmd.getResponseObject(); + assertNotNull(listResp); + assertEquals(2, listResp.getCount().intValue()); + List 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 pVrList = new ArrayList(); + pVrList.add(vr1); + + List pRespList = new ArrayList(); + pRespList.add(resp1); + + listVrCmd = new ListRoutersCmd() { + public Integer getPage() { + return 1; + } + + public Integer getPageSize() { + return 1; + } + + }; + Mockito.when(mgrService.searchForRouters(listVrCmd)) + .thenReturn(new Pair, Integer>(pVrList, 2)); + Mockito.when(responseGenerator.createDomainRouterResponse(vr1)).thenReturn(pRespList); + + try { + listVrCmd.execute(); + ListResponse listResp = (ListResponse)listVrCmd.getResponseObject(); + assertNotNull(listResp); + assertEquals(2, listResp.getCount().intValue()); + List 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()); + } + } +} + diff --git a/api/test/src/com/cloud/api/commands/test/ListVmsCmdTest.java b/api/test/src/com/cloud/api/commands/test/ListVmsCmdTest.java new file mode 100644 index 00000000000..ca6d95e2d71 --- /dev/null +++ b/api/test/src/com/cloud/api/commands/test/ListVmsCmdTest.java @@ -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 vmList = new ArrayList(); + UserVmJoinVO vm = new UserVmJoinVO(); + String uuid = UUID.randomUUID().toString(); + vm.setUuid(uuid); + vmList.add(vm); + + List respList = new ArrayList(); + UserVmResponse resp = new UserVmResponse(); + resp.setId(uuid); + respList.add(resp); + + Mockito.when(userVmService.searchForUserVMs(listVmCmd)) + .thenReturn(new Pair, Integer>(vmList, 1)); + Mockito.when(responseGenerator.createUserVmResponse("virtualmachine", EnumSet.of(VMDetails.all), vm)).thenReturn(respList); + + + try { + listVmCmd.execute(); + ListResponse listResp = (ListResponse)listVmCmd.getResponseObject(); + assertNotNull(listResp); + assertEquals(1, listResp.getCount().intValue()); + List 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 vmList = new ArrayList(); + 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 respList = new ArrayList(); + 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, Integer>(vmList, 2)); + Mockito.when(responseGenerator.createUserVmResponse("virtualmachine", EnumSet.of(VMDetails.all), vm1, vm2)).thenReturn(respList); + try { + listVmCmd.execute(); + ListResponse listResp = (ListResponse)listVmCmd.getResponseObject(); + assertNotNull(listResp); + assertEquals(2, listResp.getCount().intValue()); + List 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 pVmList = new ArrayList(); + pVmList.add(vm1); + + List pRespList = new ArrayList(); + pRespList.add(resp1); + + listVmCmd = new ListVMsCmd() { + public Integer getPage() { + return 1; + } + + public Integer getPageSize() { + return 1; + } + + }; + Mockito.when(userVmService.searchForUserVMs(listVmCmd)) + .thenReturn(new Pair, Integer>(pVmList, 2)); + Mockito.when(responseGenerator.createUserVmResponse("virtualmachine", EnumSet.of(VMDetails.all), vm1)).thenReturn(pRespList); + + try { + listVmCmd.execute(); + ListResponse listResp = (ListResponse)listVmCmd.getResponseObject(); + assertNotNull(listResp); + assertEquals(2, listResp.getCount().intValue()); + List 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()); + } + } +} diff --git a/server/src/com/cloud/api/ApiDBUtils.java b/server/src/com/cloud/api/ApiDBUtils.java index 3b5f634f216..5dc24129b9f 100755 --- a/server/src/com/cloud/api/ApiDBUtils.java +++ b/server/src/com/cloud/api/ApiDBUtils.java @@ -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 searchForUserVMs(Criteria c, List permittedAccounts) { + public static List searchForUserVMs(Criteria c, List 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 listVmDetails(Hashtable 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 newDomainRouterView(VirtualRouter vr){ + return _domainRouterJoinDao.newDomainRouterView(vr); + } + + public static UserVmResponse newUserVmResponse(String objectName, UserVmJoinVO userVm, EnumSet 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 newUserVmView(UserVm... userVms){ + return _userVmJoinDao.newUserVmView(userVms); + } +} diff --git a/server/src/com/cloud/api/ApiResponseHelper.java b/server/src/com/cloud/api/ApiResponseHelper.java index 24fb480944e..84950d3b155 100755 --- a/server/src/com/cloud/api/ApiResponseHelper.java +++ b/server/src/com/cloud/api/ApiResponseHelper.java @@ -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 permittedAccounts = new ArrayList(); permittedAccounts.add(account.getId()); - List virtualMachines = ApiDBUtils.searchForUserVMs(new Criteria(), permittedAccounts); + List virtualMachines = ApiDBUtils.searchForUserVMs(new Criteria(), permittedAccounts); // get Running/Stopped VMs - for (Iterator iter = virtualMachines.iterator(); iter.hasNext();) { + for (Iterator 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 createUserVmResponse(String objectName, EnumSet details, UserVm... userVms) { - Account caller = UserContext.current().getCaller(); - Map dataCenters = new HashMap(); - Map hosts = new HashMap(); - Map templates = new HashMap(); - Map serviceOfferings = new HashMap(); - Map networks = new HashMap(); + List viewVms = ApiDBUtils.newUserVmView(userVms); + return createUserVmResponse(objectName, details, viewVms.toArray(new UserVmJoinVO[viewVms.size()])); - List vmResponses = new ArrayList(); - - 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 securityGroups = ApiDBUtils.getSecurityGroupsForVm(userVm.getId()); - List securityGroupResponse = new ArrayList(); - 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 nicProfiles = ApiDBUtils.getNics(userVm); - List nicResponses = new ArrayList(); - 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 tags = ApiDBUtils.listByResourceTypeAndId(TaggedResourceType.UserVm, userVm.getId()); - List tagResponses = new ArrayList(); - 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 createUserVmResponse(String objectName, UserVm... userVms) { - Account caller = UserContext.current().getCaller(); - boolean caller_is_admin = ((caller == null) || (caller.getType() == Account.ACCOUNT_TYPE_ADMIN)); + List viewVms = ApiDBUtils.newUserVmView(userVms); + return createUserVmResponse(objectName, viewVms.toArray(new UserVmJoinVO[viewVms.size()])); + } - Hashtable vmDataList = new Hashtable(); + @Override + public List createUserVmResponse(String objectName, UserVmJoinVO... userVms) { + return createUserVmResponse(objectName, EnumSet.of(VMDetails.all), userVms); + } + + @Override + public List createUserVmResponse(String objectName, EnumSet details, UserVmJoinVO... userVms) { + Account caller = UserContext.current().getCaller(); + + s_logger.debug(">>>Converting UserVm VO to UserVmResponse"); + Hashtable vmDataList = new Hashtable(); // 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 vmResponses = new ArrayList(); - 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(vmDataList.values()); } @Override public DomainRouterResponse createDomainRouterResponse(VirtualRouter router) { + List viewVrs = ApiDBUtils.newDomainRouterView(router); + List 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 createDomainRouterResponse(DomainRouterJoinVO... routers) { Account caller = UserContext.current().getCaller(); - Map serviceOfferings = new HashMap(); - - 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 vrDataList = new Hashtable(); + // 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 nicProfiles = ApiDBUtils.getNics(router); - List nicResponses = new ArrayList(); - 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(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 = new HashSet(); - 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)); - - Set nicResponses = new HashSet(); - 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(nicResponses)); - userVmResponse.setPublicIpId(userVmData.getPublicIpId()); - userVmResponse.setPublicIp(userVmData.getPublicIp()); - - //set tag information - List tags = ApiDBUtils.listByResourceTypeAndId(TaggedResourceType.UserVm, userVmData.getId()); - List tagResponses = new ArrayList(); - 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) { diff --git a/server/src/com/cloud/api/ApiServer.java b/server/src/com/cloud/api/ApiServer.java index 2c4f7cf60d4..d75c8e169ad 100755 --- a/server/src/com/cloud/api/ApiServer.java +++ b/server/src/com/cloud/api/ApiServer.java @@ -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); } diff --git a/server/src/com/cloud/api/response/ApiResponseSerializer.java b/server/src/com/cloud/api/response/ApiResponseSerializer.java index 70d7edd1d15..cc2725eea8b 100644 --- a/server/src/com/cloud/api/response/ApiResponseSerializer.java +++ b/server/src/com/cloud/api/response/ApiResponseSerializer.java @@ -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(""); } - } else if (fieldValue instanceof List) { - List subResponseList = (List) fieldValue; + } else if (fieldValue instanceof Collection) { + Collection subResponseList = (Collection) fieldValue; boolean usedUuidList = false; for (Object value : subResponseList) { if (value instanceof ResponseObject) { diff --git a/server/src/com/cloud/configuration/DefaultComponentLibrary.java b/server/src/com/cloud/configuration/DefaultComponentLibrary.java index ef61044d06b..ec543ed20fc 100755 --- a/server/src/com/cloud/configuration/DefaultComponentLibrary.java +++ b/server/src/com/cloud/configuration/DefaultComponentLibrary.java @@ -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> 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; } diff --git a/server/src/com/cloud/server/ManagementServerImpl.java b/server/src/com/cloud/server/ManagementServerImpl.java index 7a8d5623c28..cced7630720 100755 --- a/server/src/com/cloud/server/ManagementServerImpl.java +++ b/server/src/com/cloud/server/ManagementServerImpl.java @@ -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, Integer> searchForRouters(ListRoutersCmd cmd) { + public Pair, 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 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 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 nicSearch = _nicDao.createSearchBuilder(); - nicSearch.and("networkId", nicSearch.entity().getNetworkId(), SearchCriteria.Op.EQ); - SearchBuilder 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 sc = sb.create(); - _accountMgr.buildACLSearchCriteria(sc, domainId, isRecursive, permittedAccounts, listProjectResourcesCriteria); + + SearchCriteria sc = sb.create(); + _accountMgr.buildACLViewSearchCriteria(sc, domainId, isRecursive, permittedAccounts, listProjectResourcesCriteria); if (keyword != null) { - SearchCriteria ssc = _routerDao.createSearchCriteria(); + SearchCriteria 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, Integer> result = _routerDao.searchAndCount(sc, searchFilter); - return new Pair, Integer>(result.first(), result.second()); + // search VR details by ids + Pair, Integer> uniqueVrPair = _routerJoinDao.searchAndCount(sc, searchFilter); + Integer count = uniqueVrPair.second(); + if ( count.intValue() == 0 ) { + // empty result + return uniqueVrPair; + } + List uniqueVrs = uniqueVrPair.first(); + Long[] vrIds = new Long[uniqueVrs.size()]; + int i = 0; + for (DomainRouterJoinVO v : uniqueVrs ){ + vrIds[i++] = v.getId(); + } + List vrs = _routerJoinDao.searchByIds(vrIds); + return new Pair, Integer>(vrs, count); } @Override diff --git a/server/src/com/cloud/user/AccountManager.java b/server/src/com/cloud/user/AccountManager.java index 90a34ad82b3..3cc7d12e7a2 100755 --- a/server/src/com/cloud/user/AccountManager.java +++ b/server/src/com/cloud/user/AccountManager.java @@ -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 sb, Long domainId, boolean isRecursive, List permittedAccounts, ListProjectResourcesCriteria listProjectResourcesCriteria); + void buildACLViewSearchBuilder(SearchBuilder sb, Long domainId, + boolean isRecursive, List permittedAccounts, ListProjectResourcesCriteria listProjectResourcesCriteria); + void buildACLSearchCriteria(SearchCriteria sc, Long domainId, boolean isRecursive, List permittedAccounts, ListProjectResourcesCriteria listProjectResourcesCriteria); + void buildACLViewSearchCriteria(SearchCriteria sc, + Long domainId, boolean isRecursive, List permittedAccounts, ListProjectResourcesCriteria listProjectResourcesCriteria); + void buildACLSearchParameters(Account caller, Long id, String accountName, Long projectId, List permittedAccounts, Ternary domainIdRecursiveListProject, boolean listAll, boolean forProjectInvitation); diff --git a/server/src/com/cloud/user/AccountManagerImpl.java b/server/src/com/cloud/user/AccountManagerImpl.java index ab04a9c6191..59b7584d6b8 100755 --- a/server/src/com/cloud/user/AccountManagerImpl.java +++ b/server/src/com/cloud/user/AccountManagerImpl.java @@ -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 sb, Long domainId, + boolean isRecursive, List 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 sc, + Long domainId, boolean isRecursive, List 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); + } } diff --git a/server/src/com/cloud/vm/UserVmManager.java b/server/src/com/cloud/vm/UserVmManager.java index 4ce9bfee86d..1a2f50808d3 100755 --- a/server/src/com/cloud/vm/UserVmManager.java +++ b/server/src/com/cloud/vm/UserVmManager.java @@ -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, UserVmServi * @param tags TODO * @return List of UserVMs + count */ - Pair, Integer> searchForUserVMs(Criteria c, Account caller, Long domainId, boolean isRecursive, List permittedAccounts, boolean listAll, ListProjectResourcesCriteria listProjectResourcesCriteria, Map tags); + Pair, Integer> searchForUserVMs(Criteria c, Account caller, Long domainId, boolean isRecursive, List permittedAccounts, boolean listAll, ListProjectResourcesCriteria listProjectResourcesCriteria, Map tags); String getChecksum(Long hostId, String templatePath); diff --git a/server/src/com/cloud/vm/UserVmManagerImpl.java b/server/src/com/cloud/vm/UserVmManagerImpl.java index eacf7f4ce51..5729035a1ff 100755 --- a/server/src/com/cloud/vm/UserVmManagerImpl.java +++ b/server/src/com/cloud/vm/UserVmManagerImpl.java @@ -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, Integer> searchForUserVMs(ListVMsCmd cmd) { + public Pair, Integer> searchForUserVMs(ListVMsCmd cmd) { Account caller = UserContext.current().getCaller(); List permittedAccounts = new ArrayList(); 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, Integer> result = searchForUserVMs(c, caller, domainId, isRecursive, + return searchForUserVMs(c, caller, domainId, isRecursive, permittedAccounts, listAll, listProjectResourcesCriteria, tags); - return new Pair, Integer>(result.first(), result.second()); } @Override - public Pair, Integer> searchForUserVMs(Criteria c, Account caller, Long domainId, boolean isRecursive, + public Pair, Integer> searchForUserVMs(Criteria c, Account caller, Long domainId, boolean isRecursive, List permittedAccounts, boolean listAll, ListProjectResourcesCriteria listProjectResourcesCriteria, Map 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 sb = _vmDao.createSearchBuilder(); - _accountMgr.buildACLSearchBuilder(sb, domainId, isRecursive, permittedAccounts, listProjectResourcesCriteria); + //first search distinct vm id by using query criteria and pagination + SearchBuilder 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 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 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 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 nicSearch = _nicDao.createSearchBuilder(); - nicSearch.and("networkId", nicSearch.entity().getNetworkId(), SearchCriteria.Op.EQ); - - SearchBuilder 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 nicSearch = _nicDao.createSearchBuilder(); - - SearchBuilder networkSearch = _networkDao.createSearchBuilder(); - nicSearch.join("networkSearch", networkSearch, nicSearch.entity().getNetworkId(), networkSearch.entity().getId(), JoinBuilder.JoinType.INNER); - - SearchBuilder 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 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 sc = sb.create(); - _accountMgr.buildACLSearchCriteria(sc, domainId, isRecursive, permittedAccounts, listProjectResourcesCriteria); + SearchCriteria 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 ssc = _vmDao.createSearchCriteria(); + SearchCriteria 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 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, Integer>(new ArrayList(), 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, Integer> uniqueVmPair = _vmJoinDao.searchAndCount(sc, searchFilter); + Integer count = uniqueVmPair.second(); + if ( count.intValue() == 0 ){ + // handle empty result cases + return uniqueVmPair; + } + List uniqueVms = uniqueVmPair.first(); + Long[] vmIds = new Long[uniqueVms.size()]; + int i = 0; + for (UserVmJoinVO v : uniqueVms ){ + vmIds[i++] = v.getId(); + } + List vms = _vmJoinDao.searchByIds(vmIds); + return new Pair, Integer>(vms, count); } @Override diff --git a/server/src/com/cloud/vm/dao/DomainRouterJoinDao.java b/server/src/com/cloud/vm/dao/DomainRouterJoinDao.java new file mode 100644 index 00000000000..c7c749b5690 --- /dev/null +++ b/server/src/com/cloud/vm/dao/DomainRouterJoinDao.java @@ -0,0 +1,36 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. +package com.cloud.vm.dao; + +import java.util.List; + +import 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 { + + DomainRouterResponse newDomainRouterResponse(DomainRouterJoinVO uvo, Account caller); + + DomainRouterResponse setDomainRouterResponse(DomainRouterResponse userVmData, DomainRouterJoinVO uvo); + + List newDomainRouterView(VirtualRouter vr); + + List searchByIds(Long... ids); +} diff --git a/server/src/com/cloud/vm/dao/DomainRouterJoinDaoImpl.java b/server/src/com/cloud/vm/dao/DomainRouterJoinDaoImpl.java new file mode 100644 index 00000000000..a3f7d77bcdf --- /dev/null +++ b/server/src/com/cloud/vm/dao/DomainRouterJoinDaoImpl.java @@ -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 implements DomainRouterJoinDao { + public static final Logger s_logger = Logger.getLogger(DomainRouterJoinDaoImpl.class); + + private SearchBuilder vrSearch; + + private SearchBuilder 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 searchByIds(Long... ids) { + SearchCriteria sc = vrSearch.create(); + sc.setParameters("idIN", ids); + return searchIncludingRemoved(sc, null, null, false); + } + + + @Override + public List newDomainRouterView(VirtualRouter vr) { + + List uvList = new ArrayList(); + SearchCriteria sc = vrIdSearch.create(); + sc.setParameters("id", vr.getId()); + List vms = searchIncludingRemoved(sc, null, null, false); + if (vms != null) { + for (DomainRouterJoinVO uvm : vms) { + uvList.add(uvm); + } + } + return uvList; + + } + +} diff --git a/server/src/com/cloud/vm/dao/UserVmJoinDao.java b/server/src/com/cloud/vm/dao/UserVmJoinDao.java new file mode 100644 index 00000000000..adeef63339d --- /dev/null +++ b/server/src/com/cloud/vm/dao/UserVmJoinDao.java @@ -0,0 +1,38 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. +package com.cloud.vm.dao; + +import java.util.EnumSet; +import java.util.List; + +import 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 { + + UserVmResponse newUserVmResponse(String objectName, UserVmJoinVO userVm, EnumSet details, Account caller); + + UserVmResponse setUserVmResponse(UserVmResponse userVmData, UserVmJoinVO uvo); + + List newUserVmView(UserVm... userVms); + + List searchByIds(Long... ids); +} diff --git a/server/src/com/cloud/vm/dao/UserVmJoinDaoImpl.java b/server/src/com/cloud/vm/dao/UserVmJoinDaoImpl.java new file mode 100644 index 00000000000..5b7a2c15ac3 --- /dev/null +++ b/server/src/com/cloud/vm/dao/UserVmJoinDaoImpl.java @@ -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 implements UserVmJoinDao { + public static final Logger s_logger = Logger.getLogger(UserVmJoinDaoImpl.class); + + private static final int VM_DETAILS_BATCH_SIZE=100; + + private SearchBuilder 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 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 searchByIds(Long... vmIds) { + SearchCriteria sc = VmDetailSearch.create(); + sc.setParameters("idIN", vmIds); + return searchIncludingRemoved(sc, null, null, false); + } + + @Override + public List newUserVmView(UserVm... userVms) { + + int curr_index = 0; + + Hashtable userVmDataHash = new Hashtable(); + for (UserVm vm : userVms){ + if ( !userVmDataHash.containsKey(vm.getId())){ + userVmDataHash.put(vm.getId(), vm); + } + } + + List uvList = new ArrayList(); + List 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 sc = VmDetailSearch.create(); + sc.setParameters("idIN", vmIds); + List 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 sc = VmDetailSearch.create(); + sc.setParameters("idIN", vmIds); + List 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; + + } + +} diff --git a/server/test/com/cloud/keystore/KeystoreTest.java b/server/test/com/cloud/keystore/KeystoreTest.java index 3a0bb71d49f..a0ffb688f26 100644 --- a/server/test/com/cloud/keystore/KeystoreTest.java +++ b/server/test/com/cloud/keystore/KeystoreTest.java @@ -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"); diff --git a/server/test/com/cloud/user/MockAccountManagerImpl.java b/server/test/com/cloud/user/MockAccountManagerImpl.java index b8d9043e27f..3b1adc6609a 100644 --- a/server/test/com/cloud/user/MockAccountManagerImpl.java +++ b/server/test/com/cloud/user/MockAccountManagerImpl.java @@ -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 sb, Long domainId, + boolean isRecursive, List permittedAccounts, ListProjectResourcesCriteria listProjectResourcesCriteria) { + // TODO Auto-generated method stub + } + + @Override + public void buildACLViewSearchCriteria(SearchCriteria sc, Long domainId, + boolean isRecursive, List permittedAccounts, ListProjectResourcesCriteria listProjectResourcesCriteria) { + // TODO Auto-generated method stub + } + /* (non-Javadoc) * @see com.cloud.user.AccountService#getUserByApiKey(java.lang.String) */ diff --git a/server/test/com/cloud/vm/MockUserVmManagerImpl.java b/server/test/com/cloud/vm/MockUserVmManagerImpl.java index 71e38715158..d9360959d6c 100644 --- a/server/test/com/cloud/vm/MockUserVmManagerImpl.java +++ b/server/test/com/cloud/vm/MockUserVmManagerImpl.java @@ -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, Integer> searchForUserVMs(Criteria c, Account caller, Long domainId, boolean isRecursive, List permittedAccounts, boolean listAll, ListProjectResourcesCriteria listProjectResourcesCriteria, Map tags) { + public Pair, Integer> searchForUserVMs(Criteria c, Account caller, Long domainId, boolean isRecursive, List permittedAccounts, boolean listAll, ListProjectResourcesCriteria listProjectResourcesCriteria, Map tags) { // TODO Auto-generated method stub return null; } @@ -401,7 +402,7 @@ public class MockUserVmManagerImpl implements UserVmManager, UserVmService, Mana } @Override - public Pair, Integer> searchForUserVMs(ListVMsCmd cmd) { + public Pair, Integer> searchForUserVMs(ListVMsCmd cmd) { // TODO Auto-generated method stub return null; } diff --git a/setup/db/create-schema.sql b/setup/db/create-schema.sql index fff084e6336..3f452850cf1 100755 --- a/setup/db/create-schema.sql +++ b/setup/db/create-schema.sql @@ -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; diff --git a/utils/src/com/cloud/utils/db/GenericDaoBase.java b/utils/src/com/cloud/utils/db/GenericDaoBase.java index 8d5cb96abc9..be0fe89f3a7 100755 --- a/utils/src/com/cloud/utils/db/GenericDaoBase.java +++ b/utils/src/com/cloud/utils/db/GenericDaoBase.java @@ -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 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(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(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 implements Gene } } - List groupByValues = addGroupBy(str, sc); + // we have to disable group by in getting count, since count for groupBy clause will be different. + //List groupByValues = addGroupBy(str, sc); final Transaction txn = Transaction.currentTxn(); final String sql = str.toString(); @@ -1816,11 +1825,13 @@ public abstract class GenericDaoBase 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()) { From 2a7fa674c73dd88c34136bd94fc68a3c53f1e2a1 Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Thu, 6 Dec 2012 10:21:10 -0800 Subject: [PATCH 055/421] api_refactor: Move host apis to admin pkg - Moved host related apis to admin pkg - Change namespace to org.a.cs.api, fix mappings in commands-prop. Signed-off-by: Rohit Yadav --- .../com/cloud/resource/ResourceService.java | 14 +++++++------- .../com/cloud/server/ManagementService.java | 5 ++--- .../api/admin/host/command}/AddHostCmd.java | 2 +- .../host/command}/AddSecondaryStorageCmd.java | 2 +- .../host/command}/CancelMaintenanceCmd.java | 2 +- .../api/admin/host/command}/DeleteHostCmd.java | 2 +- .../api/admin/host/command}/ListHostsCmd.java | 2 +- .../command}/PrepareForMaintenanceCmd.java | 2 +- .../admin/host/command}/ReconnectHostCmd.java | 2 +- .../api/admin/host/command}/UpdateHostCmd.java | 2 +- .../host/command}/UpdateHostPasswordCmd.java | 2 +- .../api/commands/test/AddHostCmdTest.java | 2 +- .../test/AddSecondaryStorageCmdTest.java | 2 +- client/tomcatconf/commands.properties.in | 18 +++++++++--------- .../cloud/resource/ResourceManagerImpl.java | 13 ++++++------- .../com/cloud/server/ManagementServerImpl.java | 7 ++----- 16 files changed, 37 insertions(+), 42 deletions(-) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/admin/host/command}/AddHostCmd.java (99%) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/admin/host/command}/AddSecondaryStorageCmd.java (98%) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/admin/host/command}/CancelMaintenanceCmd.java (98%) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/admin/host/command}/DeleteHostCmd.java (98%) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/admin/host/command}/ListHostsCmd.java (99%) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/admin/host/command}/PrepareForMaintenanceCmd.java (98%) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/admin/host/command}/ReconnectHostCmd.java (98%) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/admin/host/command}/UpdateHostCmd.java (98%) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/admin/host/command}/UpdateHostPasswordCmd.java (98%) diff --git a/api/src/com/cloud/resource/ResourceService.java b/api/src/com/cloud/resource/ResourceService.java index d36ca359b47..d75ed139ed5 100755 --- a/api/src/com/cloud/resource/ResourceService.java +++ b/api/src/com/cloud/resource/ResourceService.java @@ -19,16 +19,15 @@ package com.cloud.resource; import java.util.List; import com.cloud.api.commands.AddClusterCmd; -import com.cloud.api.commands.AddHostCmd; -import com.cloud.api.commands.AddSecondaryStorageCmd; +import org.apache.cloudstack.api.admin.host.command.AddHostCmd; +import org.apache.cloudstack.api.admin.host.command.AddSecondaryStorageCmd; import com.cloud.api.commands.AddSwiftCmd; -import com.cloud.api.commands.CancelMaintenanceCmd; +import org.apache.cloudstack.api.admin.host.command.CancelMaintenanceCmd; import com.cloud.api.commands.DeleteClusterCmd; import com.cloud.api.commands.ListSwiftsCmd; -import com.cloud.api.commands.PrepareForMaintenanceCmd; -import com.cloud.api.commands.ReconnectHostCmd; -import com.cloud.api.commands.UpdateHostCmd; -import com.cloud.api.commands.UpdateHostPasswordCmd; +import org.apache.cloudstack.api.admin.host.command.PrepareForMaintenanceCmd; +import org.apache.cloudstack.api.admin.host.command.*; +import org.apache.cloudstack.api.admin.host.command.UpdateHostCmd; import com.cloud.exception.DiscoveryException; import com.cloud.exception.InvalidParameterValueException; import com.cloud.exception.ResourceInUseException; @@ -37,6 +36,7 @@ import com.cloud.hypervisor.Hypervisor.HypervisorType; import com.cloud.org.Cluster; import com.cloud.storage.Swift; import com.cloud.utils.fsm.NoTransitionException; +import org.apache.cloudstack.api.admin.host.command.ReconnectHostCmd; public interface ResourceService { /** diff --git a/api/src/com/cloud/server/ManagementService.java b/api/src/com/cloud/server/ManagementService.java index 1b43662416d..a2ab2063985 100755 --- a/api/src/com/cloud/server/ManagementService.java +++ b/api/src/com/cloud/server/ManagementService.java @@ -24,6 +24,8 @@ import java.util.Set; import com.cloud.alert.Alert; import org.apache.cloudstack.api.ServerApiException; +import org.apache.cloudstack.api.admin.host.command.ListHostsCmd; +import org.apache.cloudstack.api.admin.host.command.UpdateHostPasswordCmd; import org.apache.cloudstack.api.admin.router.command.ListRoutersCmd; import org.apache.cloudstack.api.user.address.command.ListPublicIpAddressesCmd; import org.apache.cloudstack.api.user.resource.command.ListCapabilitiesCmd; @@ -44,7 +46,6 @@ import com.cloud.api.commands.ListCfgsByCmd; import com.cloud.api.commands.ListClustersCmd; import org.apache.cloudstack.api.user.event.command.ListEventsCmd; import org.apache.cloudstack.api.user.guest.command.ListGuestOsCategoriesCmd; -import com.cloud.api.commands.ListHostsCmd; import org.apache.cloudstack.api.user.iso.command.ListIsosCmd; import com.cloud.api.commands.ListPodsByCmd; import org.apache.cloudstack.api.user.ssh.command.ListSSHKeyPairsCmd; @@ -57,7 +58,6 @@ import com.cloud.api.commands.RebootSystemVmCmd; import org.apache.cloudstack.api.user.ssh.command.RegisterSSHKeyPairCmd; import com.cloud.api.commands.StopSystemVmCmd; import com.cloud.api.commands.UpdateDomainCmd; -import com.cloud.api.commands.UpdateHostPasswordCmd; import org.apache.cloudstack.api.user.iso.command.UpdateIsoCmd; import org.apache.cloudstack.api.user.vmgroup.command.UpdateVMGroupCmd; import com.cloud.api.commands.UpgradeSystemVMCmd; @@ -79,7 +79,6 @@ import com.cloud.host.Host; import com.cloud.hypervisor.Hypervisor.HypervisorType; import com.cloud.hypervisor.HypervisorCapabilities; import com.cloud.network.IpAddress; -import com.cloud.network.router.VirtualRouter; import com.cloud.offering.DiskOffering; import com.cloud.offering.ServiceOffering; import com.cloud.org.Cluster; diff --git a/api/src/com/cloud/api/commands/AddHostCmd.java b/api/src/org/apache/cloudstack/api/admin/host/command/AddHostCmd.java similarity index 99% rename from api/src/com/cloud/api/commands/AddHostCmd.java rename to api/src/org/apache/cloudstack/api/admin/host/command/AddHostCmd.java index d2e06de0f86..06a065230c2 100755 --- a/api/src/com/cloud/api/commands/AddHostCmd.java +++ b/api/src/org/apache/cloudstack/api/admin/host/command/AddHostCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.admin.host.command; import java.util.ArrayList; import java.util.List; diff --git a/api/src/com/cloud/api/commands/AddSecondaryStorageCmd.java b/api/src/org/apache/cloudstack/api/admin/host/command/AddSecondaryStorageCmd.java similarity index 98% rename from api/src/com/cloud/api/commands/AddSecondaryStorageCmd.java rename to api/src/org/apache/cloudstack/api/admin/host/command/AddSecondaryStorageCmd.java index c1946d0297c..678a73f1221 100644 --- a/api/src/com/cloud/api/commands/AddSecondaryStorageCmd.java +++ b/api/src/org/apache/cloudstack/api/admin/host/command/AddSecondaryStorageCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.admin.host.command; import java.util.List; diff --git a/api/src/com/cloud/api/commands/CancelMaintenanceCmd.java b/api/src/org/apache/cloudstack/api/admin/host/command/CancelMaintenanceCmd.java similarity index 98% rename from api/src/com/cloud/api/commands/CancelMaintenanceCmd.java rename to api/src/org/apache/cloudstack/api/admin/host/command/CancelMaintenanceCmd.java index dfd7c88e120..2e84b000140 100644 --- a/api/src/com/cloud/api/commands/CancelMaintenanceCmd.java +++ b/api/src/org/apache/cloudstack/api/admin/host/command/CancelMaintenanceCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.admin.host.command; import org.apache.log4j.Logger; diff --git a/api/src/com/cloud/api/commands/DeleteHostCmd.java b/api/src/org/apache/cloudstack/api/admin/host/command/DeleteHostCmd.java similarity index 98% rename from api/src/com/cloud/api/commands/DeleteHostCmd.java rename to api/src/org/apache/cloudstack/api/admin/host/command/DeleteHostCmd.java index da68a832094..0f39a043aca 100644 --- a/api/src/com/cloud/api/commands/DeleteHostCmd.java +++ b/api/src/org/apache/cloudstack/api/admin/host/command/DeleteHostCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.admin.host.command; import org.apache.log4j.Logger; diff --git a/api/src/com/cloud/api/commands/ListHostsCmd.java b/api/src/org/apache/cloudstack/api/admin/host/command/ListHostsCmd.java similarity index 99% rename from api/src/com/cloud/api/commands/ListHostsCmd.java rename to api/src/org/apache/cloudstack/api/admin/host/command/ListHostsCmd.java index 7e1e97cdd0c..ec424c2d11f 100755 --- a/api/src/com/cloud/api/commands/ListHostsCmd.java +++ b/api/src/org/apache/cloudstack/api/admin/host/command/ListHostsCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.admin.host.command; import java.util.ArrayList; import java.util.EnumSet; diff --git a/api/src/com/cloud/api/commands/PrepareForMaintenanceCmd.java b/api/src/org/apache/cloudstack/api/admin/host/command/PrepareForMaintenanceCmd.java similarity index 98% rename from api/src/com/cloud/api/commands/PrepareForMaintenanceCmd.java rename to api/src/org/apache/cloudstack/api/admin/host/command/PrepareForMaintenanceCmd.java index ffa56ab56bf..b6d178eabfa 100644 --- a/api/src/com/cloud/api/commands/PrepareForMaintenanceCmd.java +++ b/api/src/org/apache/cloudstack/api/admin/host/command/PrepareForMaintenanceCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.admin.host.command; import org.apache.log4j.Logger; diff --git a/api/src/com/cloud/api/commands/ReconnectHostCmd.java b/api/src/org/apache/cloudstack/api/admin/host/command/ReconnectHostCmd.java similarity index 98% rename from api/src/com/cloud/api/commands/ReconnectHostCmd.java rename to api/src/org/apache/cloudstack/api/admin/host/command/ReconnectHostCmd.java index a2079f21dbf..2c57adecefc 100755 --- a/api/src/com/cloud/api/commands/ReconnectHostCmd.java +++ b/api/src/org/apache/cloudstack/api/admin/host/command/ReconnectHostCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.admin.host.command; import org.apache.log4j.Logger; diff --git a/api/src/com/cloud/api/commands/UpdateHostCmd.java b/api/src/org/apache/cloudstack/api/admin/host/command/UpdateHostCmd.java similarity index 98% rename from api/src/com/cloud/api/commands/UpdateHostCmd.java rename to api/src/org/apache/cloudstack/api/admin/host/command/UpdateHostCmd.java index e09e4f03a4c..bbb3b6fb10d 100755 --- a/api/src/com/cloud/api/commands/UpdateHostCmd.java +++ b/api/src/org/apache/cloudstack/api/admin/host/command/UpdateHostCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.admin.host.command; import java.util.List; diff --git a/api/src/com/cloud/api/commands/UpdateHostPasswordCmd.java b/api/src/org/apache/cloudstack/api/admin/host/command/UpdateHostPasswordCmd.java similarity index 98% rename from api/src/com/cloud/api/commands/UpdateHostPasswordCmd.java rename to api/src/org/apache/cloudstack/api/admin/host/command/UpdateHostPasswordCmd.java index 9f8c02e5567..2ace2485e51 100644 --- a/api/src/com/cloud/api/commands/UpdateHostPasswordCmd.java +++ b/api/src/org/apache/cloudstack/api/admin/host/command/UpdateHostPasswordCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.admin.host.command; import org.apache.log4j.Logger; diff --git a/api/test/src/com/cloud/api/commands/test/AddHostCmdTest.java b/api/test/src/com/cloud/api/commands/test/AddHostCmdTest.java index 4d8e5ea65a7..75c40d2fb50 100644 --- a/api/test/src/com/cloud/api/commands/test/AddHostCmdTest.java +++ b/api/test/src/com/cloud/api/commands/test/AddHostCmdTest.java @@ -19,6 +19,7 @@ package src.com.cloud.api.commands.test; import junit.framework.Assert; import junit.framework.TestCase; +import org.apache.cloudstack.api.admin.host.command.AddHostCmd; import org.junit.Before; import org.junit.Rule; import org.junit.Test; @@ -27,7 +28,6 @@ import org.mockito.Mockito; import org.apache.cloudstack.api.ResponseGenerator; import org.apache.cloudstack.api.ServerApiException; -import com.cloud.api.commands.AddHostCmd; import com.cloud.api.response.HostResponse; import com.cloud.api.response.ListResponse; import com.cloud.exception.DiscoveryException; diff --git a/api/test/src/com/cloud/api/commands/test/AddSecondaryStorageCmdTest.java b/api/test/src/com/cloud/api/commands/test/AddSecondaryStorageCmdTest.java index 87e03fa3275..9b73b0c1081 100644 --- a/api/test/src/com/cloud/api/commands/test/AddSecondaryStorageCmdTest.java +++ b/api/test/src/com/cloud/api/commands/test/AddSecondaryStorageCmdTest.java @@ -19,6 +19,7 @@ package src.com.cloud.api.commands.test; import junit.framework.Assert; import junit.framework.TestCase; +import org.apache.cloudstack.api.admin.host.command.AddSecondaryStorageCmd; import org.junit.Before; import org.junit.Rule; import org.junit.Test; @@ -27,7 +28,6 @@ import org.mockito.Mockito; import org.apache.cloudstack.api.ResponseGenerator; import org.apache.cloudstack.api.ServerApiException; -import com.cloud.api.commands.AddSecondaryStorageCmd; import com.cloud.api.response.HostResponse; import com.cloud.host.Host; import com.cloud.resource.ResourceService; diff --git a/client/tomcatconf/commands.properties.in b/client/tomcatconf/commands.properties.in index 441271bb3aa..a0ac700dca4 100755 --- a/client/tomcatconf/commands.properties.in +++ b/client/tomcatconf/commands.properties.in @@ -229,18 +229,18 @@ addSwift=com.cloud.api.commands.AddSwiftCmd;1 listSwifts=com.cloud.api.commands.ListSwiftsCmd;1 #### host commands -addHost=com.cloud.api.commands.AddHostCmd;3 +addHost=org.apache.cloudstack.api.admin.host.command.AddHostCmd;3 addCluster=com.cloud.api.commands.AddClusterCmd;1 deleteCluster=com.cloud.api.commands.DeleteClusterCmd;1 updateCluster=com.cloud.api.commands.UpdateClusterCmd;1 -reconnectHost=com.cloud.api.commands.ReconnectHostCmd;1 -updateHost=com.cloud.api.commands.UpdateHostCmd;1 -deleteHost=com.cloud.api.commands.DeleteHostCmd;3 -prepareHostForMaintenance=com.cloud.api.commands.PrepareForMaintenanceCmd;1 -cancelHostMaintenance=com.cloud.api.commands.CancelMaintenanceCmd;1 -listHosts=com.cloud.api.commands.ListHostsCmd;3 -addSecondaryStorage=com.cloud.api.commands.AddSecondaryStorageCmd;1 -updateHostPassword=com.cloud.api.commands.UpdateHostPasswordCmd;1 +reconnectHost=org.apache.cloudstack.api.admin.host.command.ReconnectHostCmd;1 +updateHost=org.apache.cloudstack.api.admin.host.command.UpdateHostCmd;1 +deleteHost=org.apache.cloudstack.api.admin.host.command.DeleteHostCmd;3 +prepareHostForMaintenance=org.apache.cloudstack.api.admin.host.command.PrepareForMaintenanceCmd;1 +cancelHostMaintenance=org.apache.cloudstack.api.admin.host.command.CancelMaintenanceCmd;1 +listHosts=org.apache.cloudstack.api.admin.host.command.ListHostsCmd;3 +addSecondaryStorage=org.apache.cloudstack.api.admin.host.command.AddSecondaryStorageCmd;1 +updateHostPassword=org.apache.cloudstack.api.admin.host.command.UpdateHostPasswordCmd;1 #### volume commands attachVolume=org.apache.cloudstack.api.user.volume.command.AttachVolumeCmd;15 diff --git a/server/src/com/cloud/resource/ResourceManagerImpl.java b/server/src/com/cloud/resource/ResourceManagerImpl.java index f3afd905aab..da6539ce293 100755 --- a/server/src/com/cloud/resource/ResourceManagerImpl.java +++ b/server/src/com/cloud/resource/ResourceManagerImpl.java @@ -30,6 +30,7 @@ import java.util.Set; import javax.ejb.Local; import javax.naming.ConfigurationException; +import org.apache.cloudstack.api.admin.host.command.*; import org.apache.log4j.Logger; import com.cloud.agent.AgentManager; @@ -49,16 +50,14 @@ import com.cloud.agent.transport.Request; import org.apache.cloudstack.api.ApiConstants; import com.cloud.api.ApiDBUtils; import com.cloud.api.commands.AddClusterCmd; -import com.cloud.api.commands.AddHostCmd; -import com.cloud.api.commands.AddSecondaryStorageCmd; +import org.apache.cloudstack.api.admin.host.command.AddHostCmd; +import org.apache.cloudstack.api.admin.host.command.AddSecondaryStorageCmd; import com.cloud.api.commands.AddSwiftCmd; -import com.cloud.api.commands.CancelMaintenanceCmd; +import org.apache.cloudstack.api.admin.host.command.CancelMaintenanceCmd; import com.cloud.api.commands.DeleteClusterCmd; import com.cloud.api.commands.ListSwiftsCmd; -import com.cloud.api.commands.PrepareForMaintenanceCmd; -import com.cloud.api.commands.ReconnectHostCmd; -import com.cloud.api.commands.UpdateHostCmd; -import com.cloud.api.commands.UpdateHostPasswordCmd; +import org.apache.cloudstack.api.admin.host.command.PrepareForMaintenanceCmd; +import org.apache.cloudstack.api.admin.host.command.UpdateHostCmd; import com.cloud.capacity.Capacity; import com.cloud.capacity.CapacityVO; import com.cloud.capacity.dao.CapacityDao; diff --git a/server/src/com/cloud/server/ManagementServerImpl.java b/server/src/com/cloud/server/ManagementServerImpl.java index cced7630720..d39dd23eecb 100755 --- a/server/src/com/cloud/server/ManagementServerImpl.java +++ b/server/src/com/cloud/server/ManagementServerImpl.java @@ -80,7 +80,7 @@ import com.cloud.api.commands.ListCapacityCmd; import com.cloud.api.commands.ListCfgsByCmd; import com.cloud.api.commands.ListClustersCmd; import org.apache.cloudstack.api.user.event.command.ListEventsCmd; -import com.cloud.api.commands.ListHostsCmd; +import org.apache.cloudstack.api.admin.host.command.ListHostsCmd; import com.cloud.api.commands.ListPodsByCmd; import org.apache.cloudstack.api.user.address.command.ListPublicIpAddressesCmd; import org.apache.cloudstack.api.user.ssh.command.ListSSHKeyPairsCmd; @@ -91,7 +91,7 @@ import org.apache.cloudstack.api.user.datacenter.command.ListZonesByCmd; import com.cloud.api.commands.RebootSystemVmCmd; import com.cloud.api.commands.StopSystemVmCmd; import com.cloud.api.commands.UpdateDomainCmd; -import com.cloud.api.commands.UpdateHostPasswordCmd; +import org.apache.cloudstack.api.admin.host.command.UpdateHostPasswordCmd; import org.apache.cloudstack.api.user.iso.command.UpdateIsoCmd; import com.cloud.api.commands.UpdateTemplateOrIsoCmd; import org.apache.cloudstack.api.user.vmgroup.command.UpdateVMGroupCmd; @@ -99,7 +99,6 @@ 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; @@ -171,7 +170,6 @@ import com.cloud.network.NetworkVO; import com.cloud.network.dao.IPAddressDao; import com.cloud.network.dao.LoadBalancerDao; import com.cloud.network.dao.NetworkDao; -import com.cloud.network.router.VirtualRouter; import com.cloud.org.Cluster; import com.cloud.org.Grouping.AllocationState; import com.cloud.projects.Project; @@ -250,7 +248,6 @@ import com.cloud.vm.ConsoleProxyVO; import com.cloud.vm.DomainRouterVO; import com.cloud.vm.InstanceGroup; import com.cloud.vm.InstanceGroupVO; -import com.cloud.vm.NicVO; import com.cloud.vm.SecondaryStorageVmVO; import com.cloud.vm.UserVmVO; import com.cloud.vm.VMInstanceVO; From 1b1d91dc4fa6fd0f4fca5b0b74ab9bfce7127a49 Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Thu, 6 Dec 2012 10:25:20 -0800 Subject: [PATCH 056/421] api_refactor: move admin level account apis to admin pkg Signed-off-by: Rohit Yadav --- api/src/com/cloud/user/AccountService.java | 2 +- .../api/admin/account/command}/CreateAccountCmd.java | 2 +- .../api/admin/account/command}/DeleteAccountCmd.java | 2 +- .../api/admin/account/command}/UpdateAccountCmd.java | 2 +- client/tomcatconf/commands.properties.in | 6 +++--- server/src/com/cloud/user/AccountManagerImpl.java | 2 +- server/test/com/cloud/user/MockAccountManagerImpl.java | 2 +- 7 files changed, 9 insertions(+), 9 deletions(-) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/admin/account/command}/CreateAccountCmd.java (99%) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/admin/account/command}/DeleteAccountCmd.java (98%) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/admin/account/command}/UpdateAccountCmd.java (98%) diff --git a/api/src/com/cloud/user/AccountService.java b/api/src/com/cloud/user/AccountService.java index 8be8e9ec325..fe68c3e3729 100755 --- a/api/src/com/cloud/user/AccountService.java +++ b/api/src/com/cloud/user/AccountService.java @@ -26,7 +26,7 @@ import org.apache.cloudstack.api.admin.user.command.UpdateUserCmd; import org.apache.cloudstack.api.user.account.command.ListAccountsCmd; import org.apache.cloudstack.api.admin.user.command.ListUsersCmd; import com.cloud.api.commands.RegisterCmd; -import com.cloud.api.commands.UpdateAccountCmd; +import org.apache.cloudstack.api.admin.account.command.UpdateAccountCmd; import com.cloud.domain.Domain; import com.cloud.exception.ConcurrentOperationException; import com.cloud.exception.PermissionDeniedException; diff --git a/api/src/com/cloud/api/commands/CreateAccountCmd.java b/api/src/org/apache/cloudstack/api/admin/account/command/CreateAccountCmd.java similarity index 99% rename from api/src/com/cloud/api/commands/CreateAccountCmd.java rename to api/src/org/apache/cloudstack/api/admin/account/command/CreateAccountCmd.java index d1d3996ddfa..99ff4c253b3 100755 --- a/api/src/com/cloud/api/commands/CreateAccountCmd.java +++ b/api/src/org/apache/cloudstack/api/admin/account/command/CreateAccountCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.admin.account.command; import java.util.Collection; import java.util.Map; diff --git a/api/src/com/cloud/api/commands/DeleteAccountCmd.java b/api/src/org/apache/cloudstack/api/admin/account/command/DeleteAccountCmd.java similarity index 98% rename from api/src/com/cloud/api/commands/DeleteAccountCmd.java rename to api/src/org/apache/cloudstack/api/admin/account/command/DeleteAccountCmd.java index 47c3475fbc2..d00d7c8f920 100755 --- a/api/src/com/cloud/api/commands/DeleteAccountCmd.java +++ b/api/src/org/apache/cloudstack/api/admin/account/command/DeleteAccountCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.admin.account.command; import org.apache.log4j.Logger; diff --git a/api/src/com/cloud/api/commands/UpdateAccountCmd.java b/api/src/org/apache/cloudstack/api/admin/account/command/UpdateAccountCmd.java similarity index 98% rename from api/src/com/cloud/api/commands/UpdateAccountCmd.java rename to api/src/org/apache/cloudstack/api/admin/account/command/UpdateAccountCmd.java index ad4cbd5f527..9bb095e012b 100755 --- a/api/src/com/cloud/api/commands/UpdateAccountCmd.java +++ b/api/src/org/apache/cloudstack/api/admin/account/command/UpdateAccountCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.admin.account.command; import java.util.Collection; import java.util.Map; diff --git a/client/tomcatconf/commands.properties.in b/client/tomcatconf/commands.properties.in index a0ac700dca4..decd4752883 100755 --- a/client/tomcatconf/commands.properties.in +++ b/client/tomcatconf/commands.properties.in @@ -19,9 +19,9 @@ ### Please standardize naming conventions to camel-case (even for acronyms). ### Account commands -createAccount=com.cloud.api.commands.CreateAccountCmd;3 -deleteAccount=com.cloud.api.commands.DeleteAccountCmd;3 -updateAccount=com.cloud.api.commands.UpdateAccountCmd;3 +createAccount=org.apache.cloudstack.api.admin.account.command.CreateAccountCmd;3 +deleteAccount=org.apache.cloudstack.api.admin.account.command.DeleteAccountCmd;3 +updateAccount=org.apache.cloudstack.api.admin.account.command.UpdateAccountCmd;3 disableAccount=org.apache.cloudstack.api.admin.account.command.DisableAccountCmd;7 enableAccount=org.apache.cloudstack.api.admin.account.command.EnableAccountCmd;7 ###lockAccount=com.cloud.api.commands.LockAccountCmd;7 diff --git a/server/src/com/cloud/user/AccountManagerImpl.java b/server/src/com/cloud/user/AccountManagerImpl.java index 59b7584d6b8..ae5be6662e6 100755 --- a/server/src/com/cloud/user/AccountManagerImpl.java +++ b/server/src/com/cloud/user/AccountManagerImpl.java @@ -48,7 +48,7 @@ import com.cloud.api.ApiDBUtils; import org.apache.cloudstack.api.admin.user.command.DeleteUserCmd; 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.account.command.UpdateAccountCmd; import org.apache.cloudstack.api.admin.user.command.UpdateUserCmd; import com.cloud.configuration.Config; import com.cloud.configuration.ConfigurationManager; diff --git a/server/test/com/cloud/user/MockAccountManagerImpl.java b/server/test/com/cloud/user/MockAccountManagerImpl.java index 3b1adc6609a..484a2cc57ae 100644 --- a/server/test/com/cloud/user/MockAccountManagerImpl.java +++ b/server/test/com/cloud/user/MockAccountManagerImpl.java @@ -28,7 +28,7 @@ import org.apache.cloudstack.api.admin.user.command.DeleteUserCmd; import org.apache.cloudstack.api.admin.user.command.ListUsersCmd; 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.account.command.UpdateAccountCmd; import org.apache.cloudstack.api.admin.user.command.UpdateUserCmd; import com.cloud.api.view.vo.ControlledViewEntity; import com.cloud.domain.Domain; From 163fe7b8c317f479462bcf903cc6ac2c2283ac8f Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Thu, 6 Dec 2012 10:28:37 -0800 Subject: [PATCH 057/421] api_refactor: move systevm apis to admin pkg Signed-off-by: Rohit Yadav --- api/src/com/cloud/server/ManagementService.java | 10 +++++----- .../systemvm/command}/DestroySystemVmCmd.java | 2 +- .../admin/systemvm/command}/ListSystemVMsCmd.java | 2 +- .../systemvm/command}/MigrateSystemVMCmd.java | 2 +- .../admin/systemvm/command}/RebootSystemVmCmd.java | 2 +- .../admin/systemvm/command}/StartSystemVMCmd.java | 2 +- .../admin/systemvm/command}/StopSystemVmCmd.java | 2 +- .../systemvm/command}/UpgradeSystemVMCmd.java | 2 +- client/tomcatconf/commands.properties.in | 14 +++++++------- .../src/com/cloud/server/ManagementServerImpl.java | 10 +++++----- 10 files changed, 24 insertions(+), 24 deletions(-) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/admin/systemvm/command}/DestroySystemVmCmd.java (98%) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/admin/systemvm/command}/ListSystemVMsCmd.java (98%) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/admin/systemvm/command}/MigrateSystemVMCmd.java (98%) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/admin/systemvm/command}/RebootSystemVmCmd.java (98%) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/admin/systemvm/command}/StartSystemVMCmd.java (98%) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/admin/systemvm/command}/StopSystemVmCmd.java (98%) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/admin/systemvm/command}/UpgradeSystemVMCmd.java (98%) diff --git a/api/src/com/cloud/server/ManagementService.java b/api/src/com/cloud/server/ManagementService.java index a2ab2063985..3bf39f58480 100755 --- a/api/src/com/cloud/server/ManagementService.java +++ b/api/src/com/cloud/server/ManagementService.java @@ -34,7 +34,7 @@ import org.apache.cloudstack.api.user.offering.command.ListDiskOfferingsCmd; import org.apache.cloudstack.api.user.offering.command.ListServiceOfferingsCmd; import org.apache.cloudstack.api.user.ssh.command.CreateSSHKeyPairCmd; import org.apache.cloudstack.api.user.ssh.command.DeleteSSHKeyPairCmd; -import com.cloud.api.commands.DestroySystemVmCmd; +import org.apache.cloudstack.api.admin.systemvm.command.DestroySystemVmCmd; import org.apache.cloudstack.api.user.volume.command.ExtractVolumeCmd; import org.apache.cloudstack.api.user.template.command.ListTemplatesCmd; import org.apache.cloudstack.api.user.template.command.UpdateTemplateCmd; @@ -50,17 +50,17 @@ import org.apache.cloudstack.api.user.iso.command.ListIsosCmd; import com.cloud.api.commands.ListPodsByCmd; import org.apache.cloudstack.api.user.ssh.command.ListSSHKeyPairsCmd; import com.cloud.api.commands.ListStoragePoolsCmd; -import com.cloud.api.commands.ListSystemVMsCmd; +import org.apache.cloudstack.api.admin.systemvm.command.ListSystemVMsCmd; import org.apache.cloudstack.api.user.vmgroup.command.ListVMGroupsCmd; import com.cloud.api.commands.ListVlanIpRangesCmd; import org.apache.cloudstack.api.user.datacenter.command.ListZonesByCmd; -import com.cloud.api.commands.RebootSystemVmCmd; +import org.apache.cloudstack.api.admin.systemvm.command.RebootSystemVmCmd; import org.apache.cloudstack.api.user.ssh.command.RegisterSSHKeyPairCmd; -import com.cloud.api.commands.StopSystemVmCmd; +import org.apache.cloudstack.api.admin.systemvm.command.StopSystemVmCmd; import com.cloud.api.commands.UpdateDomainCmd; 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 org.apache.cloudstack.api.admin.systemvm.command.UpgradeSystemVMCmd; import com.cloud.api.commands.UploadCustomCertificateCmd; import com.cloud.api.view.vo.DomainRouterJoinVO; import com.cloud.async.AsyncJob; diff --git a/api/src/com/cloud/api/commands/DestroySystemVmCmd.java b/api/src/org/apache/cloudstack/api/admin/systemvm/command/DestroySystemVmCmd.java similarity index 98% rename from api/src/com/cloud/api/commands/DestroySystemVmCmd.java rename to api/src/org/apache/cloudstack/api/admin/systemvm/command/DestroySystemVmCmd.java index 9f2abbe4b85..56a82fb2255 100644 --- a/api/src/com/cloud/api/commands/DestroySystemVmCmd.java +++ b/api/src/org/apache/cloudstack/api/admin/systemvm/command/DestroySystemVmCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.admin.systemvm.command; import org.apache.log4j.Logger; diff --git a/api/src/com/cloud/api/commands/ListSystemVMsCmd.java b/api/src/org/apache/cloudstack/api/admin/systemvm/command/ListSystemVMsCmd.java similarity index 98% rename from api/src/com/cloud/api/commands/ListSystemVMsCmd.java rename to api/src/org/apache/cloudstack/api/admin/systemvm/command/ListSystemVMsCmd.java index 1378e98ac96..a1e27cd45d1 100644 --- a/api/src/com/cloud/api/commands/ListSystemVMsCmd.java +++ b/api/src/org/apache/cloudstack/api/admin/systemvm/command/ListSystemVMsCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.admin.systemvm.command; import java.util.ArrayList; import java.util.List; diff --git a/api/src/com/cloud/api/commands/MigrateSystemVMCmd.java b/api/src/org/apache/cloudstack/api/admin/systemvm/command/MigrateSystemVMCmd.java similarity index 98% rename from api/src/com/cloud/api/commands/MigrateSystemVMCmd.java rename to api/src/org/apache/cloudstack/api/admin/systemvm/command/MigrateSystemVMCmd.java index 73240cd65c5..8876be1af69 100644 --- a/api/src/com/cloud/api/commands/MigrateSystemVMCmd.java +++ b/api/src/org/apache/cloudstack/api/admin/systemvm/command/MigrateSystemVMCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.admin.systemvm.command; import org.apache.log4j.Logger; diff --git a/api/src/com/cloud/api/commands/RebootSystemVmCmd.java b/api/src/org/apache/cloudstack/api/admin/systemvm/command/RebootSystemVmCmd.java similarity index 98% rename from api/src/com/cloud/api/commands/RebootSystemVmCmd.java rename to api/src/org/apache/cloudstack/api/admin/systemvm/command/RebootSystemVmCmd.java index fab1b9c7e7e..61a8892ad8a 100644 --- a/api/src/com/cloud/api/commands/RebootSystemVmCmd.java +++ b/api/src/org/apache/cloudstack/api/admin/systemvm/command/RebootSystemVmCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.admin.systemvm.command; import org.apache.log4j.Logger; diff --git a/api/src/com/cloud/api/commands/StartSystemVMCmd.java b/api/src/org/apache/cloudstack/api/admin/systemvm/command/StartSystemVMCmd.java similarity index 98% rename from api/src/com/cloud/api/commands/StartSystemVMCmd.java rename to api/src/org/apache/cloudstack/api/admin/systemvm/command/StartSystemVMCmd.java index b6b89222cb8..f9e12a81d20 100644 --- a/api/src/com/cloud/api/commands/StartSystemVMCmd.java +++ b/api/src/org/apache/cloudstack/api/admin/systemvm/command/StartSystemVMCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.admin.systemvm.command; import org.apache.log4j.Logger; diff --git a/api/src/com/cloud/api/commands/StopSystemVmCmd.java b/api/src/org/apache/cloudstack/api/admin/systemvm/command/StopSystemVmCmd.java similarity index 98% rename from api/src/com/cloud/api/commands/StopSystemVmCmd.java rename to api/src/org/apache/cloudstack/api/admin/systemvm/command/StopSystemVmCmd.java index 71316ee7b69..1bf95831cc1 100644 --- a/api/src/com/cloud/api/commands/StopSystemVmCmd.java +++ b/api/src/org/apache/cloudstack/api/admin/systemvm/command/StopSystemVmCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.admin.systemvm.command; import org.apache.log4j.Logger; diff --git a/api/src/com/cloud/api/commands/UpgradeSystemVMCmd.java b/api/src/org/apache/cloudstack/api/admin/systemvm/command/UpgradeSystemVMCmd.java similarity index 98% rename from api/src/com/cloud/api/commands/UpgradeSystemVMCmd.java rename to api/src/org/apache/cloudstack/api/admin/systemvm/command/UpgradeSystemVMCmd.java index cc7deaf46c7..88b69e173fa 100644 --- a/api/src/com/cloud/api/commands/UpgradeSystemVMCmd.java +++ b/api/src/org/apache/cloudstack/api/admin/systemvm/command/UpgradeSystemVMCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.admin.systemvm.command; import org.apache.cloudstack.api.user.vm.command.UpgradeVMCmd; import org.apache.log4j.Logger; diff --git a/client/tomcatconf/commands.properties.in b/client/tomcatconf/commands.properties.in index decd4752883..e00c68d1a0d 100755 --- a/client/tomcatconf/commands.properties.in +++ b/client/tomcatconf/commands.properties.in @@ -187,13 +187,13 @@ configureVirtualRouterElement=org.apache.cloudstack.api.admin.router.command.Con createVirtualRouterElement=org.apache.cloudstack.api.admin.router.command.CreateVirtualRouterElementCmd;7 #### system vm commands -startSystemVm=com.cloud.api.commands.StartSystemVMCmd;1 -rebootSystemVm=com.cloud.api.commands.RebootSystemVmCmd;1 -stopSystemVm=com.cloud.api.commands.StopSystemVmCmd;1 -destroySystemVm=com.cloud.api.commands.DestroySystemVmCmd;1 -listSystemVms=com.cloud.api.commands.ListSystemVMsCmd;3 -migrateSystemVm=com.cloud.api.commands.MigrateSystemVMCmd;1 -changeServiceForSystemVm=com.cloud.api.commands.UpgradeSystemVMCmd;1 +startSystemVm=org.apache.cloudstack.api.admin.systemvm.command.StartSystemVMCmd;1 +rebootSystemVm=org.apache.cloudstack.api.admin.systemvm.command.RebootSystemVmCmd;1 +stopSystemVm=org.apache.cloudstack.api.admin.systemvm.command.StopSystemVmCmd;1 +destroySystemVm=org.apache.cloudstack.api.admin.systemvm.command.DestroySystemVmCmd;1 +listSystemVms=org.apache.cloudstack.api.admin.systemvm.command.ListSystemVMsCmd;3 +migrateSystemVm=org.apache.cloudstack.api.admin.systemvm.command.MigrateSystemVMCmd;1 +changeServiceForSystemVm=org.apache.cloudstack.api.admin.systemvm.command.UpgradeSystemVMCmd;1 #### configuration commands updateConfiguration=com.cloud.api.commands.UpdateCfgCmd;1 diff --git a/server/src/com/cloud/server/ManagementServerImpl.java b/server/src/com/cloud/server/ManagementServerImpl.java index d39dd23eecb..fd94733f8ca 100755 --- a/server/src/com/cloud/server/ManagementServerImpl.java +++ b/server/src/com/cloud/server/ManagementServerImpl.java @@ -72,7 +72,7 @@ import com.cloud.alert.dao.AlertDao; import org.apache.cloudstack.api.ApiConstants; import com.cloud.api.ApiDBUtils; import org.apache.cloudstack.api.user.ssh.command.CreateSSHKeyPairCmd; -import com.cloud.api.commands.DestroySystemVmCmd; +import org.apache.cloudstack.api.admin.systemvm.command.DestroySystemVmCmd; import org.apache.cloudstack.api.user.volume.command.ExtractVolumeCmd; import org.apache.cloudstack.api.user.vm.command.GetVMPasswordCmd; import com.cloud.api.commands.ListAlertsCmd; @@ -85,17 +85,17 @@ import com.cloud.api.commands.ListPodsByCmd; import org.apache.cloudstack.api.user.address.command.ListPublicIpAddressesCmd; import org.apache.cloudstack.api.user.ssh.command.ListSSHKeyPairsCmd; import com.cloud.api.commands.ListStoragePoolsCmd; -import com.cloud.api.commands.ListSystemVMsCmd; +import org.apache.cloudstack.api.admin.systemvm.command.ListSystemVMsCmd; import com.cloud.api.commands.ListVlanIpRangesCmd; import org.apache.cloudstack.api.user.datacenter.command.ListZonesByCmd; -import com.cloud.api.commands.RebootSystemVmCmd; -import com.cloud.api.commands.StopSystemVmCmd; +import org.apache.cloudstack.api.admin.systemvm.command.RebootSystemVmCmd; +import org.apache.cloudstack.api.admin.systemvm.command.StopSystemVmCmd; import com.cloud.api.commands.UpdateDomainCmd; import org.apache.cloudstack.api.admin.host.command.UpdateHostPasswordCmd; import org.apache.cloudstack.api.user.iso.command.UpdateIsoCmd; import com.cloud.api.commands.UpdateTemplateOrIsoCmd; import org.apache.cloudstack.api.user.vmgroup.command.UpdateVMGroupCmd; -import com.cloud.api.commands.UpgradeSystemVMCmd; +import org.apache.cloudstack.api.admin.systemvm.command.UpgradeSystemVMCmd; import com.cloud.api.commands.UploadCustomCertificateCmd; import com.cloud.api.response.ExtractResponse; import com.cloud.api.view.vo.DomainRouterJoinVO; From cc386b791b725252bd6cbd1ec28a5cb14594f5b6 Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Thu, 6 Dec 2012 10:32:58 -0800 Subject: [PATCH 058/421] api_refactor: move storagepool api to admin pkg Signed-off-by: Rohit Yadav --- api/src/com/cloud/server/ManagementService.java | 2 +- api/src/com/cloud/storage/StorageService.java | 8 ++++---- .../command}/CancelPrimaryStorageMaintenanceCmd.java | 2 +- .../storagepool/command}/CreateStoragePoolCmd.java | 2 +- .../admin/storagepool/command}/DeletePoolCmd.java | 2 +- .../storagepool/command}/ListStoragePoolsCmd.java | 2 +- .../PreparePrimaryStorageForMaintenanceCmd.java | 2 +- .../storagepool/command}/UpdateStoragePoolCmd.java | 2 +- client/tomcatconf/commands.properties.in | 12 ++++++------ .../src/com/cloud/server/ManagementServerImpl.java | 2 +- server/src/com/cloud/storage/StorageManagerImpl.java | 8 ++++---- 11 files changed, 22 insertions(+), 22 deletions(-) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/admin/storagepool/command}/CancelPrimaryStorageMaintenanceCmd.java (98%) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/admin/storagepool/command}/CreateStoragePoolCmd.java (98%) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/admin/storagepool/command}/DeletePoolCmd.java (98%) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/admin/storagepool/command}/ListStoragePoolsCmd.java (98%) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/admin/storagepool/command}/PreparePrimaryStorageForMaintenanceCmd.java (98%) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/admin/storagepool/command}/UpdateStoragePoolCmd.java (98%) diff --git a/api/src/com/cloud/server/ManagementService.java b/api/src/com/cloud/server/ManagementService.java index 3bf39f58480..00f5abd4b36 100755 --- a/api/src/com/cloud/server/ManagementService.java +++ b/api/src/com/cloud/server/ManagementService.java @@ -49,7 +49,7 @@ import org.apache.cloudstack.api.user.guest.command.ListGuestOsCategoriesCmd; import org.apache.cloudstack.api.user.iso.command.ListIsosCmd; import com.cloud.api.commands.ListPodsByCmd; import org.apache.cloudstack.api.user.ssh.command.ListSSHKeyPairsCmd; -import com.cloud.api.commands.ListStoragePoolsCmd; +import org.apache.cloudstack.api.admin.storagepool.command.ListStoragePoolsCmd; import org.apache.cloudstack.api.admin.systemvm.command.ListSystemVMsCmd; import org.apache.cloudstack.api.user.vmgroup.command.ListVMGroupsCmd; import com.cloud.api.commands.ListVlanIpRangesCmd; diff --git a/api/src/com/cloud/storage/StorageService.java b/api/src/com/cloud/storage/StorageService.java index 9197bf24b59..bca617def0f 100644 --- a/api/src/com/cloud/storage/StorageService.java +++ b/api/src/com/cloud/storage/StorageService.java @@ -19,12 +19,12 @@ package com.cloud.storage; import java.net.UnknownHostException; import java.util.List; -import com.cloud.api.commands.CancelPrimaryStorageMaintenanceCmd; -import com.cloud.api.commands.CreateStoragePoolCmd; +import org.apache.cloudstack.api.admin.storagepool.command.CancelPrimaryStorageMaintenanceCmd; +import org.apache.cloudstack.api.admin.storagepool.command.CreateStoragePoolCmd; +import org.apache.cloudstack.api.admin.storagepool.command.UpdateStoragePoolCmd; import org.apache.cloudstack.api.user.volume.command.CreateVolumeCmd; -import com.cloud.api.commands.DeletePoolCmd; +import org.apache.cloudstack.api.admin.storagepool.command.DeletePoolCmd; import org.apache.cloudstack.api.user.volume.command.ListVolumesCmd; -import com.cloud.api.commands.UpdateStoragePoolCmd; import org.apache.cloudstack.api.user.volume.command.UploadVolumeCmd; import com.cloud.exception.ConcurrentOperationException; import com.cloud.exception.InsufficientCapacityException; diff --git a/api/src/com/cloud/api/commands/CancelPrimaryStorageMaintenanceCmd.java b/api/src/org/apache/cloudstack/api/admin/storagepool/command/CancelPrimaryStorageMaintenanceCmd.java similarity index 98% rename from api/src/com/cloud/api/commands/CancelPrimaryStorageMaintenanceCmd.java rename to api/src/org/apache/cloudstack/api/admin/storagepool/command/CancelPrimaryStorageMaintenanceCmd.java index 400aa9c10e5..d87259b301c 100644 --- a/api/src/com/cloud/api/commands/CancelPrimaryStorageMaintenanceCmd.java +++ b/api/src/org/apache/cloudstack/api/admin/storagepool/command/CancelPrimaryStorageMaintenanceCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.admin.storagepool.command; import org.apache.log4j.Logger; diff --git a/api/src/com/cloud/api/commands/CreateStoragePoolCmd.java b/api/src/org/apache/cloudstack/api/admin/storagepool/command/CreateStoragePoolCmd.java similarity index 98% rename from api/src/com/cloud/api/commands/CreateStoragePoolCmd.java rename to api/src/org/apache/cloudstack/api/admin/storagepool/command/CreateStoragePoolCmd.java index 36094620896..fd3ca397766 100644 --- a/api/src/com/cloud/api/commands/CreateStoragePoolCmd.java +++ b/api/src/org/apache/cloudstack/api/admin/storagepool/command/CreateStoragePoolCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.admin.storagepool.command; import java.net.UnknownHostException; import java.util.Map; diff --git a/api/src/com/cloud/api/commands/DeletePoolCmd.java b/api/src/org/apache/cloudstack/api/admin/storagepool/command/DeletePoolCmd.java similarity index 98% rename from api/src/com/cloud/api/commands/DeletePoolCmd.java rename to api/src/org/apache/cloudstack/api/admin/storagepool/command/DeletePoolCmd.java index b257bbdc577..473d35e4070 100644 --- a/api/src/com/cloud/api/commands/DeletePoolCmd.java +++ b/api/src/org/apache/cloudstack/api/admin/storagepool/command/DeletePoolCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.admin.storagepool.command; import org.apache.log4j.Logger; diff --git a/api/src/com/cloud/api/commands/ListStoragePoolsCmd.java b/api/src/org/apache/cloudstack/api/admin/storagepool/command/ListStoragePoolsCmd.java similarity index 98% rename from api/src/com/cloud/api/commands/ListStoragePoolsCmd.java rename to api/src/org/apache/cloudstack/api/admin/storagepool/command/ListStoragePoolsCmd.java index 3787f9289b9..b9879624440 100644 --- a/api/src/com/cloud/api/commands/ListStoragePoolsCmd.java +++ b/api/src/org/apache/cloudstack/api/admin/storagepool/command/ListStoragePoolsCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.admin.storagepool.command; import java.util.ArrayList; import java.util.List; diff --git a/api/src/com/cloud/api/commands/PreparePrimaryStorageForMaintenanceCmd.java b/api/src/org/apache/cloudstack/api/admin/storagepool/command/PreparePrimaryStorageForMaintenanceCmd.java similarity index 98% rename from api/src/com/cloud/api/commands/PreparePrimaryStorageForMaintenanceCmd.java rename to api/src/org/apache/cloudstack/api/admin/storagepool/command/PreparePrimaryStorageForMaintenanceCmd.java index 4d7342cc73e..3f7f80d8df0 100644 --- a/api/src/com/cloud/api/commands/PreparePrimaryStorageForMaintenanceCmd.java +++ b/api/src/org/apache/cloudstack/api/admin/storagepool/command/PreparePrimaryStorageForMaintenanceCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.admin.storagepool.command; import org.apache.log4j.Logger; diff --git a/api/src/com/cloud/api/commands/UpdateStoragePoolCmd.java b/api/src/org/apache/cloudstack/api/admin/storagepool/command/UpdateStoragePoolCmd.java similarity index 98% rename from api/src/com/cloud/api/commands/UpdateStoragePoolCmd.java rename to api/src/org/apache/cloudstack/api/admin/storagepool/command/UpdateStoragePoolCmd.java index 605c668be59..c027224d3bf 100644 --- a/api/src/com/cloud/api/commands/UpdateStoragePoolCmd.java +++ b/api/src/org/apache/cloudstack/api/admin/storagepool/command/UpdateStoragePoolCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.admin.storagepool.command; import java.util.List; diff --git a/client/tomcatconf/commands.properties.in b/client/tomcatconf/commands.properties.in index e00c68d1a0d..2964ae161d0 100755 --- a/client/tomcatconf/commands.properties.in +++ b/client/tomcatconf/commands.properties.in @@ -264,13 +264,13 @@ queryAsyncJobResult=org.apache.cloudstack.api.user.job.command.QueryAsyncJobResu listAsyncJobs=org.apache.cloudstack.api.user.job.command.ListAsyncJobsCmd;15 #### storage pools commands -listStoragePools=com.cloud.api.commands.ListStoragePoolsCmd;3 -createStoragePool=com.cloud.api.commands.CreateStoragePoolCmd;1 -updateStoragePool=com.cloud.api.commands.UpdateStoragePoolCmd;1 -deleteStoragePool=com.cloud.api.commands.DeletePoolCmd;1 +listStoragePools=org.apache.cloudstack.api.admin.storagepool.command.ListStoragePoolsCmd;3 +createStoragePool=org.apache.cloudstack.api.admin.storagepool.command.CreateStoragePoolCmd;1 +updateStoragePool=org.apache.cloudstack.api.admin.storagepool.command.UpdateStoragePoolCmd;1 +deleteStoragePool=org.apache.cloudstack.api.admin.storagepool.command.DeletePoolCmd;1 listClusters=com.cloud.api.commands.ListClustersCmd;3 -enableStorageMaintenance=com.cloud.api.commands.PreparePrimaryStorageForMaintenanceCmd;1 -cancelStorageMaintenance=com.cloud.api.commands.CancelPrimaryStorageMaintenanceCmd;1 +enableStorageMaintenance=org.apache.cloudstack.api.admin.storagepool.command.PreparePrimaryStorageForMaintenanceCmd;1 +cancelStorageMaintenance=org.apache.cloudstack.api.admin.storagepool.command.CancelPrimaryStorageMaintenanceCmd;1 #### security group commands createSecurityGroup=org.apache.cloudstack.api.user.securitygroup.command.CreateSecurityGroupCmd;15 diff --git a/server/src/com/cloud/server/ManagementServerImpl.java b/server/src/com/cloud/server/ManagementServerImpl.java index fd94733f8ca..dd91d606524 100755 --- a/server/src/com/cloud/server/ManagementServerImpl.java +++ b/server/src/com/cloud/server/ManagementServerImpl.java @@ -84,7 +84,7 @@ import org.apache.cloudstack.api.admin.host.command.ListHostsCmd; import com.cloud.api.commands.ListPodsByCmd; import org.apache.cloudstack.api.user.address.command.ListPublicIpAddressesCmd; import org.apache.cloudstack.api.user.ssh.command.ListSSHKeyPairsCmd; -import com.cloud.api.commands.ListStoragePoolsCmd; +import org.apache.cloudstack.api.admin.storagepool.command.ListStoragePoolsCmd; import org.apache.cloudstack.api.admin.systemvm.command.ListSystemVMsCmd; import com.cloud.api.commands.ListVlanIpRangesCmd; import org.apache.cloudstack.api.user.datacenter.command.ListZonesByCmd; diff --git a/server/src/com/cloud/storage/StorageManagerImpl.java b/server/src/com/cloud/storage/StorageManagerImpl.java index 882e798fe9d..330d41eee9a 100755 --- a/server/src/com/cloud/storage/StorageManagerImpl.java +++ b/server/src/com/cloud/storage/StorageManagerImpl.java @@ -72,11 +72,11 @@ import com.cloud.agent.api.to.VolumeTO; import com.cloud.agent.manager.Commands; import com.cloud.alert.AlertManager; import com.cloud.api.ApiDBUtils; -import com.cloud.api.commands.CancelPrimaryStorageMaintenanceCmd; -import com.cloud.api.commands.CreateStoragePoolCmd; -import com.cloud.api.commands.DeletePoolCmd; +import org.apache.cloudstack.api.admin.storagepool.command.CancelPrimaryStorageMaintenanceCmd; +import org.apache.cloudstack.api.admin.storagepool.command.CreateStoragePoolCmd; +import org.apache.cloudstack.api.admin.storagepool.command.DeletePoolCmd; import org.apache.cloudstack.api.user.volume.command.ListVolumesCmd; -import com.cloud.api.commands.UpdateStoragePoolCmd; +import org.apache.cloudstack.api.admin.storagepool.command.UpdateStoragePoolCmd; import org.apache.cloudstack.api.user.volume.command.UploadVolumeCmd; import com.cloud.async.AsyncJobManager; import com.cloud.capacity.Capacity; From 7f61d29c371f7bd51309ec13572d8f2496be0854 Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Thu, 6 Dec 2012 10:36:26 -0800 Subject: [PATCH 059/421] api_refactor: move zone and hypervisor user level apis to appropriate pkg names Signed-off-by: Rohit Yadav --- api/src/com/cloud/server/ManagementService.java | 2 +- .../command/ListHypervisorsCmd.java | 2 +- .../api/user/{datacenter => zone}/command/ListZonesByCmd.java | 2 +- client/tomcatconf/commands.properties.in | 4 ++-- server/src/com/cloud/server/ManagementServerImpl.java | 2 +- 5 files changed, 6 insertions(+), 6 deletions(-) rename api/src/org/apache/cloudstack/api/user/{datacenter => hypervisor}/command/ListHypervisorsCmd.java (98%) rename api/src/org/apache/cloudstack/api/user/{datacenter => zone}/command/ListZonesByCmd.java (98%) diff --git a/api/src/com/cloud/server/ManagementService.java b/api/src/com/cloud/server/ManagementService.java index 00f5abd4b36..936bb79242f 100755 --- a/api/src/com/cloud/server/ManagementService.java +++ b/api/src/com/cloud/server/ManagementService.java @@ -53,7 +53,7 @@ import org.apache.cloudstack.api.admin.storagepool.command.ListStoragePoolsCmd; import org.apache.cloudstack.api.admin.systemvm.command.ListSystemVMsCmd; import org.apache.cloudstack.api.user.vmgroup.command.ListVMGroupsCmd; import com.cloud.api.commands.ListVlanIpRangesCmd; -import org.apache.cloudstack.api.user.datacenter.command.ListZonesByCmd; +import org.apache.cloudstack.api.user.zone.command.ListZonesByCmd; import org.apache.cloudstack.api.admin.systemvm.command.RebootSystemVmCmd; import org.apache.cloudstack.api.user.ssh.command.RegisterSSHKeyPairCmd; import org.apache.cloudstack.api.admin.systemvm.command.StopSystemVmCmd; diff --git a/api/src/org/apache/cloudstack/api/user/datacenter/command/ListHypervisorsCmd.java b/api/src/org/apache/cloudstack/api/user/hypervisor/command/ListHypervisorsCmd.java similarity index 98% rename from api/src/org/apache/cloudstack/api/user/datacenter/command/ListHypervisorsCmd.java rename to api/src/org/apache/cloudstack/api/user/hypervisor/command/ListHypervisorsCmd.java index ac7ababc59a..2055f9979f3 100644 --- a/api/src/org/apache/cloudstack/api/user/datacenter/command/ListHypervisorsCmd.java +++ b/api/src/org/apache/cloudstack/api/user/hypervisor/command/ListHypervisorsCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.user.datacenter.command; +package org.apache.cloudstack.api.user.hypervisor.command; import java.util.ArrayList; import java.util.List; diff --git a/api/src/org/apache/cloudstack/api/user/datacenter/command/ListZonesByCmd.java b/api/src/org/apache/cloudstack/api/user/zone/command/ListZonesByCmd.java similarity index 98% rename from api/src/org/apache/cloudstack/api/user/datacenter/command/ListZonesByCmd.java rename to api/src/org/apache/cloudstack/api/user/zone/command/ListZonesByCmd.java index 9e6e2fdedd5..16403b840b6 100755 --- a/api/src/org/apache/cloudstack/api/user/datacenter/command/ListZonesByCmd.java +++ b/api/src/org/apache/cloudstack/api/user/zone/command/ListZonesByCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.user.datacenter.command; +package org.apache.cloudstack.api.user.zone.command; import java.util.ArrayList; import java.util.List; diff --git a/client/tomcatconf/commands.properties.in b/client/tomcatconf/commands.properties.in index 2964ae161d0..1379504b204 100755 --- a/client/tomcatconf/commands.properties.in +++ b/client/tomcatconf/commands.properties.in @@ -212,7 +212,7 @@ listPods=com.cloud.api.commands.ListPodsByCmd;3 createZone=com.cloud.api.commands.CreateZoneCmd;1 updateZone=com.cloud.api.commands.UpdateZoneCmd;1 deleteZone=com.cloud.api.commands.DeleteZoneCmd;1 -listZones=org.apache.cloudstack.api.user.datacenter.command.ListZonesByCmd;15 +listZones=org.apache.cloudstack.api.user.zone.command.ListZonesByCmd;15 #### events commands listEvents=org.apache.cloudstack.api.user.event.command.ListEventsCmd;15 @@ -291,7 +291,7 @@ listInstanceGroups=org.apache.cloudstack.api.user.vmgroup.command.ListVMGroupsCm uploadCustomCertificate=com.cloud.api.commands.UploadCustomCertificateCmd;1 ### other commands -listHypervisors=org.apache.cloudstack.api.user.datacenter.command.ListHypervisorsCmd;15 +listHypervisors=org.apache.cloudstack.api.user.hypervisor.command.ListHypervisorsCmd;15 ### VPN createRemoteAccessVpn=org.apache.cloudstack.api.user.vpn.command.CreateRemoteAccessVpnCmd;15 diff --git a/server/src/com/cloud/server/ManagementServerImpl.java b/server/src/com/cloud/server/ManagementServerImpl.java index dd91d606524..7ee9fdfc2ed 100755 --- a/server/src/com/cloud/server/ManagementServerImpl.java +++ b/server/src/com/cloud/server/ManagementServerImpl.java @@ -55,6 +55,7 @@ import org.apache.cloudstack.api.user.ssh.command.RegisterSSHKeyPairCmd; import org.apache.cloudstack.api.user.template.command.ListTemplatesCmd; import org.apache.cloudstack.api.user.template.command.UpdateTemplateCmd; import org.apache.cloudstack.api.user.vmgroup.command.ListVMGroupsCmd; +import org.apache.cloudstack.api.user.zone.command.ListZonesByCmd; import org.apache.commons.codec.binary.Base64; import org.apache.log4j.Logger; @@ -87,7 +88,6 @@ import org.apache.cloudstack.api.user.ssh.command.ListSSHKeyPairsCmd; import org.apache.cloudstack.api.admin.storagepool.command.ListStoragePoolsCmd; import org.apache.cloudstack.api.admin.systemvm.command.ListSystemVMsCmd; import com.cloud.api.commands.ListVlanIpRangesCmd; -import org.apache.cloudstack.api.user.datacenter.command.ListZonesByCmd; import org.apache.cloudstack.api.admin.systemvm.command.RebootSystemVmCmd; import org.apache.cloudstack.api.admin.systemvm.command.StopSystemVmCmd; import com.cloud.api.commands.UpdateDomainCmd; From c3853677c5ba34d25cb1bfb511e40f434cf175d0 Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Thu, 6 Dec 2012 10:41:10 -0800 Subject: [PATCH 060/421] api_refactor: move zone apis to admin pkg Signed-off-by: Rohit Yadav --- api/src/com/cloud/configuration/ConfigurationService.java | 6 +++--- .../cloudstack/api/admin/zone/command}/CreateZoneCmd.java | 2 +- .../cloudstack/api/admin/zone/command}/DeleteZoneCmd.java | 2 +- .../admin/zone/command}/MarkDefaultZoneForAccountCmd.java | 2 +- .../cloudstack/api/admin/zone/command}/UpdateZoneCmd.java | 2 +- client/tomcatconf/commands.properties.in | 8 ++++---- .../com/cloud/configuration/ConfigurationManagerImpl.java | 6 +++--- .../test/com/cloud/vpc/MockConfigurationManagerImpl.java | 6 +++--- 8 files changed, 17 insertions(+), 17 deletions(-) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/admin/zone/command}/CreateZoneCmd.java (99%) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/admin/zone/command}/DeleteZoneCmd.java (98%) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/admin/zone/command}/MarkDefaultZoneForAccountCmd.java (98%) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/admin/zone/command}/UpdateZoneCmd.java (99%) diff --git a/api/src/com/cloud/configuration/ConfigurationService.java b/api/src/com/cloud/configuration/ConfigurationService.java index c27e6c7c57d..f807297206d 100644 --- a/api/src/com/cloud/configuration/ConfigurationService.java +++ b/api/src/com/cloud/configuration/ConfigurationService.java @@ -24,13 +24,13 @@ import com.cloud.api.commands.CreateDiskOfferingCmd; import org.apache.cloudstack.api.admin.network.command.CreateNetworkOfferingCmd; import com.cloud.api.commands.CreateServiceOfferingCmd; import com.cloud.api.commands.CreateVlanIpRangeCmd; -import com.cloud.api.commands.CreateZoneCmd; +import org.apache.cloudstack.api.admin.zone.command.CreateZoneCmd; import com.cloud.api.commands.DeleteDiskOfferingCmd; import org.apache.cloudstack.api.admin.network.command.DeleteNetworkOfferingCmd; import com.cloud.api.commands.DeletePodCmd; import com.cloud.api.commands.DeleteServiceOfferingCmd; import com.cloud.api.commands.DeleteVlanIpRangeCmd; -import com.cloud.api.commands.DeleteZoneCmd; +import org.apache.cloudstack.api.admin.zone.command.DeleteZoneCmd; import com.cloud.api.commands.LDAPConfigCmd; import com.cloud.api.commands.LDAPRemoveCmd; import org.apache.cloudstack.api.user.network.command.ListNetworkOfferingsCmd; @@ -39,7 +39,7 @@ import com.cloud.api.commands.UpdateDiskOfferingCmd; import org.apache.cloudstack.api.admin.network.command.UpdateNetworkOfferingCmd; import com.cloud.api.commands.UpdatePodCmd; import com.cloud.api.commands.UpdateServiceOfferingCmd; -import com.cloud.api.commands.UpdateZoneCmd; +import org.apache.cloudstack.api.admin.zone.command.UpdateZoneCmd; import com.cloud.dc.DataCenter; import com.cloud.dc.Pod; import com.cloud.dc.Vlan; diff --git a/api/src/com/cloud/api/commands/CreateZoneCmd.java b/api/src/org/apache/cloudstack/api/admin/zone/command/CreateZoneCmd.java similarity index 99% rename from api/src/com/cloud/api/commands/CreateZoneCmd.java rename to api/src/org/apache/cloudstack/api/admin/zone/command/CreateZoneCmd.java index 4613e1ff882..30d288b88c8 100755 --- a/api/src/com/cloud/api/commands/CreateZoneCmd.java +++ b/api/src/org/apache/cloudstack/api/admin/zone/command/CreateZoneCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.admin.zone.command; import org.apache.log4j.Logger; diff --git a/api/src/com/cloud/api/commands/DeleteZoneCmd.java b/api/src/org/apache/cloudstack/api/admin/zone/command/DeleteZoneCmd.java similarity index 98% rename from api/src/com/cloud/api/commands/DeleteZoneCmd.java rename to api/src/org/apache/cloudstack/api/admin/zone/command/DeleteZoneCmd.java index 5a61a930dc4..1144cb358e6 100644 --- a/api/src/com/cloud/api/commands/DeleteZoneCmd.java +++ b/api/src/org/apache/cloudstack/api/admin/zone/command/DeleteZoneCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.admin.zone.command; import org.apache.log4j.Logger; diff --git a/api/src/com/cloud/api/commands/MarkDefaultZoneForAccountCmd.java b/api/src/org/apache/cloudstack/api/admin/zone/command/MarkDefaultZoneForAccountCmd.java similarity index 98% rename from api/src/com/cloud/api/commands/MarkDefaultZoneForAccountCmd.java rename to api/src/org/apache/cloudstack/api/admin/zone/command/MarkDefaultZoneForAccountCmd.java index 1af9445d8ba..fe130f7f219 100644 --- a/api/src/com/cloud/api/commands/MarkDefaultZoneForAccountCmd.java +++ b/api/src/org/apache/cloudstack/api/admin/zone/command/MarkDefaultZoneForAccountCmd.java @@ -15,7 +15,7 @@ // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.admin.zone.command; import org.apache.log4j.Logger; diff --git a/api/src/com/cloud/api/commands/UpdateZoneCmd.java b/api/src/org/apache/cloudstack/api/admin/zone/command/UpdateZoneCmd.java similarity index 99% rename from api/src/com/cloud/api/commands/UpdateZoneCmd.java rename to api/src/org/apache/cloudstack/api/admin/zone/command/UpdateZoneCmd.java index 36c34048f1b..59e715db297 100755 --- a/api/src/com/cloud/api/commands/UpdateZoneCmd.java +++ b/api/src/org/apache/cloudstack/api/admin/zone/command/UpdateZoneCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.admin.zone.command; import java.util.List; import java.util.Map; diff --git a/client/tomcatconf/commands.properties.in b/client/tomcatconf/commands.properties.in index 1379504b204..a5d609ef9ee 100755 --- a/client/tomcatconf/commands.properties.in +++ b/client/tomcatconf/commands.properties.in @@ -26,7 +26,7 @@ disableAccount=org.apache.cloudstack.api.admin.account.command.DisableAccountCmd enableAccount=org.apache.cloudstack.api.admin.account.command.EnableAccountCmd;7 ###lockAccount=com.cloud.api.commands.LockAccountCmd;7 listAccounts=org.apache.cloudstack.api.user.account.command.ListAccountsCmd;15 -markDefaultZoneForAccount=com.cloud.api.commands.MarkDefaultZoneForAccountCmd;1 +markDefaultZoneForAccount=org.apache.cloudstack.api.admin.zone.command.MarkDefaultZoneForAccountCmd;1 #### User commands createUser=org.apache.cloudstack.api.admin.user.command.CreateUserCmd;3 @@ -209,9 +209,9 @@ deletePod=com.cloud.api.commands.DeletePodCmd;1 listPods=com.cloud.api.commands.ListPodsByCmd;3 #### zone commands -createZone=com.cloud.api.commands.CreateZoneCmd;1 -updateZone=com.cloud.api.commands.UpdateZoneCmd;1 -deleteZone=com.cloud.api.commands.DeleteZoneCmd;1 +createZone=org.apache.cloudstack.api.admin.zone.command.CreateZoneCmd;1 +updateZone=org.apache.cloudstack.api.admin.zone.command.UpdateZoneCmd;1 +deleteZone=org.apache.cloudstack.api.admin.zone.command.DeleteZoneCmd;1 listZones=org.apache.cloudstack.api.user.zone.command.ListZonesByCmd;15 #### events commands diff --git a/server/src/com/cloud/configuration/ConfigurationManagerImpl.java b/server/src/com/cloud/configuration/ConfigurationManagerImpl.java index bff0cd514b5..f3b1e2fbb9a 100755 --- a/server/src/com/cloud/configuration/ConfigurationManagerImpl.java +++ b/server/src/com/cloud/configuration/ConfigurationManagerImpl.java @@ -40,6 +40,8 @@ import javax.naming.directory.InitialDirContext; import org.apache.cloudstack.api.admin.network.command.DeleteNetworkOfferingCmd; import org.apache.cloudstack.api.admin.network.command.UpdateNetworkOfferingCmd; +import org.apache.cloudstack.api.admin.zone.command.CreateZoneCmd; +import org.apache.cloudstack.api.admin.zone.command.UpdateZoneCmd; import org.apache.log4j.Logger; import com.cloud.acl.SecurityChecker; @@ -50,12 +52,11 @@ import com.cloud.api.commands.CreateDiskOfferingCmd; import org.apache.cloudstack.api.admin.network.command.CreateNetworkOfferingCmd; import com.cloud.api.commands.CreateServiceOfferingCmd; import com.cloud.api.commands.CreateVlanIpRangeCmd; -import com.cloud.api.commands.CreateZoneCmd; import com.cloud.api.commands.DeleteDiskOfferingCmd; import com.cloud.api.commands.DeletePodCmd; import com.cloud.api.commands.DeleteServiceOfferingCmd; import com.cloud.api.commands.DeleteVlanIpRangeCmd; -import com.cloud.api.commands.DeleteZoneCmd; +import org.apache.cloudstack.api.admin.zone.command.DeleteZoneCmd; import com.cloud.api.commands.LDAPConfigCmd; import com.cloud.api.commands.LDAPRemoveCmd; import org.apache.cloudstack.api.user.network.command.ListNetworkOfferingsCmd; @@ -63,7 +64,6 @@ import com.cloud.api.commands.UpdateCfgCmd; import com.cloud.api.commands.UpdateDiskOfferingCmd; import com.cloud.api.commands.UpdatePodCmd; import com.cloud.api.commands.UpdateServiceOfferingCmd; -import com.cloud.api.commands.UpdateZoneCmd; import com.cloud.capacity.dao.CapacityDao; import com.cloud.configuration.Resource.ResourceType; import com.cloud.configuration.dao.ConfigurationDao; diff --git a/server/test/com/cloud/vpc/MockConfigurationManagerImpl.java b/server/test/com/cloud/vpc/MockConfigurationManagerImpl.java index c3496f0247e..1fd10d04582 100644 --- a/server/test/com/cloud/vpc/MockConfigurationManagerImpl.java +++ b/server/test/com/cloud/vpc/MockConfigurationManagerImpl.java @@ -28,22 +28,22 @@ import com.cloud.api.commands.CreateDiskOfferingCmd; import org.apache.cloudstack.api.admin.network.command.CreateNetworkOfferingCmd; import com.cloud.api.commands.CreateServiceOfferingCmd; import com.cloud.api.commands.CreateVlanIpRangeCmd; -import com.cloud.api.commands.CreateZoneCmd; +import org.apache.cloudstack.api.admin.zone.command.CreateZoneCmd; import com.cloud.api.commands.DeleteDiskOfferingCmd; import org.apache.cloudstack.api.admin.network.command.DeleteNetworkOfferingCmd; import com.cloud.api.commands.DeletePodCmd; import com.cloud.api.commands.DeleteServiceOfferingCmd; import com.cloud.api.commands.DeleteVlanIpRangeCmd; -import com.cloud.api.commands.DeleteZoneCmd; +import org.apache.cloudstack.api.admin.zone.command.DeleteZoneCmd; import com.cloud.api.commands.LDAPConfigCmd; import com.cloud.api.commands.LDAPRemoveCmd; +import org.apache.cloudstack.api.admin.zone.command.UpdateZoneCmd; import org.apache.cloudstack.api.user.network.command.ListNetworkOfferingsCmd; import com.cloud.api.commands.UpdateCfgCmd; import com.cloud.api.commands.UpdateDiskOfferingCmd; import org.apache.cloudstack.api.admin.network.command.UpdateNetworkOfferingCmd; import com.cloud.api.commands.UpdatePodCmd; import com.cloud.api.commands.UpdateServiceOfferingCmd; -import com.cloud.api.commands.UpdateZoneCmd; import com.cloud.configuration.Configuration; import com.cloud.configuration.ConfigurationManager; import com.cloud.configuration.ConfigurationService; From ab4fac54e52b2f4770c9b1b14fb3f7d3d70d4006 Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Thu, 6 Dec 2012 10:44:40 -0800 Subject: [PATCH 061/421] api_refactor: move admin level domain apis to admin pkg Signed-off-by: Rohit Yadav --- api/src/com/cloud/server/ManagementService.java | 2 +- api/src/com/cloud/user/DomainService.java | 4 ++-- .../api/admin/domain/command}/CreateDomainCmd.java | 2 +- .../api/admin/domain/command}/DeleteDomainCmd.java | 2 +- .../admin/domain/command}/ListDomainChildrenCmd.java | 2 +- .../api/admin/domain/command}/ListDomainsCmd.java | 2 +- .../api/admin/domain/command}/UpdateDomainCmd.java | 2 +- client/tomcatconf/commands.properties.in | 10 +++++----- server/src/com/cloud/server/ManagementServerImpl.java | 2 +- server/src/com/cloud/user/DomainManagerImpl.java | 4 ++-- server/test/com/cloud/user/MockDomainManagerImpl.java | 4 ++-- 11 files changed, 18 insertions(+), 18 deletions(-) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/admin/domain/command}/CreateDomainCmd.java (98%) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/admin/domain/command}/DeleteDomainCmd.java (98%) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/admin/domain/command}/ListDomainChildrenCmd.java (98%) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/admin/domain/command}/ListDomainsCmd.java (98%) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/admin/domain/command}/UpdateDomainCmd.java (98%) diff --git a/api/src/com/cloud/server/ManagementService.java b/api/src/com/cloud/server/ManagementService.java index 936bb79242f..e77fe15c078 100755 --- a/api/src/com/cloud/server/ManagementService.java +++ b/api/src/com/cloud/server/ManagementService.java @@ -57,7 +57,7 @@ import org.apache.cloudstack.api.user.zone.command.ListZonesByCmd; import org.apache.cloudstack.api.admin.systemvm.command.RebootSystemVmCmd; import org.apache.cloudstack.api.user.ssh.command.RegisterSSHKeyPairCmd; import org.apache.cloudstack.api.admin.systemvm.command.StopSystemVmCmd; -import com.cloud.api.commands.UpdateDomainCmd; +import org.apache.cloudstack.api.admin.domain.command.UpdateDomainCmd; import org.apache.cloudstack.api.user.iso.command.UpdateIsoCmd; import org.apache.cloudstack.api.user.vmgroup.command.UpdateVMGroupCmd; import org.apache.cloudstack.api.admin.systemvm.command.UpgradeSystemVMCmd; diff --git a/api/src/com/cloud/user/DomainService.java b/api/src/com/cloud/user/DomainService.java index 3d312442816..78c9a545ca2 100644 --- a/api/src/com/cloud/user/DomainService.java +++ b/api/src/com/cloud/user/DomainService.java @@ -18,8 +18,8 @@ package com.cloud.user; import java.util.List; -import com.cloud.api.commands.ListDomainChildrenCmd; -import com.cloud.api.commands.ListDomainsCmd; +import org.apache.cloudstack.api.admin.domain.command.ListDomainChildrenCmd; +import org.apache.cloudstack.api.admin.domain.command.ListDomainsCmd; import com.cloud.domain.Domain; import com.cloud.exception.PermissionDeniedException; import com.cloud.utils.Pair; diff --git a/api/src/com/cloud/api/commands/CreateDomainCmd.java b/api/src/org/apache/cloudstack/api/admin/domain/command/CreateDomainCmd.java similarity index 98% rename from api/src/com/cloud/api/commands/CreateDomainCmd.java rename to api/src/org/apache/cloudstack/api/admin/domain/command/CreateDomainCmd.java index 62598f28d75..86e77052b70 100644 --- a/api/src/com/cloud/api/commands/CreateDomainCmd.java +++ b/api/src/org/apache/cloudstack/api/admin/domain/command/CreateDomainCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.admin.domain.command; import org.apache.log4j.Logger; diff --git a/api/src/com/cloud/api/commands/DeleteDomainCmd.java b/api/src/org/apache/cloudstack/api/admin/domain/command/DeleteDomainCmd.java similarity index 98% rename from api/src/com/cloud/api/commands/DeleteDomainCmd.java rename to api/src/org/apache/cloudstack/api/admin/domain/command/DeleteDomainCmd.java index 07e1b8e156e..2c372bad4af 100644 --- a/api/src/com/cloud/api/commands/DeleteDomainCmd.java +++ b/api/src/org/apache/cloudstack/api/admin/domain/command/DeleteDomainCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.admin.domain.command; import org.apache.log4j.Logger; diff --git a/api/src/com/cloud/api/commands/ListDomainChildrenCmd.java b/api/src/org/apache/cloudstack/api/admin/domain/command/ListDomainChildrenCmd.java similarity index 98% rename from api/src/com/cloud/api/commands/ListDomainChildrenCmd.java rename to api/src/org/apache/cloudstack/api/admin/domain/command/ListDomainChildrenCmd.java index e432c0f0647..5aee062d49f 100644 --- a/api/src/com/cloud/api/commands/ListDomainChildrenCmd.java +++ b/api/src/org/apache/cloudstack/api/admin/domain/command/ListDomainChildrenCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.admin.domain.command; import java.util.ArrayList; import java.util.List; diff --git a/api/src/com/cloud/api/commands/ListDomainsCmd.java b/api/src/org/apache/cloudstack/api/admin/domain/command/ListDomainsCmd.java similarity index 98% rename from api/src/com/cloud/api/commands/ListDomainsCmd.java rename to api/src/org/apache/cloudstack/api/admin/domain/command/ListDomainsCmd.java index 7e4b613e6d3..e35f7722e15 100644 --- a/api/src/com/cloud/api/commands/ListDomainsCmd.java +++ b/api/src/org/apache/cloudstack/api/admin/domain/command/ListDomainsCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.admin.domain.command; import java.util.ArrayList; import java.util.List; diff --git a/api/src/com/cloud/api/commands/UpdateDomainCmd.java b/api/src/org/apache/cloudstack/api/admin/domain/command/UpdateDomainCmd.java similarity index 98% rename from api/src/com/cloud/api/commands/UpdateDomainCmd.java rename to api/src/org/apache/cloudstack/api/admin/domain/command/UpdateDomainCmd.java index 950dff6bee2..972b46f344b 100644 --- a/api/src/com/cloud/api/commands/UpdateDomainCmd.java +++ b/api/src/org/apache/cloudstack/api/admin/domain/command/UpdateDomainCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.admin.domain.command; import org.apache.log4j.Logger; diff --git a/client/tomcatconf/commands.properties.in b/client/tomcatconf/commands.properties.in index a5d609ef9ee..822d344bc83 100755 --- a/client/tomcatconf/commands.properties.in +++ b/client/tomcatconf/commands.properties.in @@ -39,11 +39,11 @@ enableUser=org.apache.cloudstack.api.admin.user.command.EnableUserCmd;7 getUser=org.apache.cloudstack.api.admin.user.command.GetUserCmd;1 #### Domain commands -createDomain=com.cloud.api.commands.CreateDomainCmd;1 -updateDomain=com.cloud.api.commands.UpdateDomainCmd;1 -deleteDomain=com.cloud.api.commands.DeleteDomainCmd;1 -listDomains=com.cloud.api.commands.ListDomainsCmd;7 -listDomainChildren=com.cloud.api.commands.ListDomainChildrenCmd;7 +createDomain=org.apache.cloudstack.api.admin.domain.command.CreateDomainCmd;1 +updateDomain=org.apache.cloudstack.api.admin.domain.command.UpdateDomainCmd;1 +deleteDomain=org.apache.cloudstack.api.admin.domain.command.DeleteDomainCmd;1 +listDomains=org.apache.cloudstack.api.admin.domain.command.ListDomainsCmd;7 +listDomainChildren=org.apache.cloudstack.api.admin.domain.command.ListDomainChildrenCmd;7 ####Cloud Identifier commands getCloudIdentifier=org.apache.cloudstack.api.user.resource.command.GetCloudIdentifierCmd;15 diff --git a/server/src/com/cloud/server/ManagementServerImpl.java b/server/src/com/cloud/server/ManagementServerImpl.java index 7ee9fdfc2ed..ecaa8cb2b69 100755 --- a/server/src/com/cloud/server/ManagementServerImpl.java +++ b/server/src/com/cloud/server/ManagementServerImpl.java @@ -90,7 +90,7 @@ import org.apache.cloudstack.api.admin.systemvm.command.ListSystemVMsCmd; import com.cloud.api.commands.ListVlanIpRangesCmd; import org.apache.cloudstack.api.admin.systemvm.command.RebootSystemVmCmd; import org.apache.cloudstack.api.admin.systemvm.command.StopSystemVmCmd; -import com.cloud.api.commands.UpdateDomainCmd; +import org.apache.cloudstack.api.admin.domain.command.UpdateDomainCmd; import org.apache.cloudstack.api.admin.host.command.UpdateHostPasswordCmd; import org.apache.cloudstack.api.user.iso.command.UpdateIsoCmd; import com.cloud.api.commands.UpdateTemplateOrIsoCmd; diff --git a/server/src/com/cloud/user/DomainManagerImpl.java b/server/src/com/cloud/user/DomainManagerImpl.java index c2346162028..3e8e226fdaf 100644 --- a/server/src/com/cloud/user/DomainManagerImpl.java +++ b/server/src/com/cloud/user/DomainManagerImpl.java @@ -24,10 +24,10 @@ import java.util.Set; import javax.ejb.Local; import javax.naming.ConfigurationException; +import org.apache.cloudstack.api.admin.domain.command.ListDomainChildrenCmd; import org.apache.log4j.Logger; -import com.cloud.api.commands.ListDomainChildrenCmd; -import com.cloud.api.commands.ListDomainsCmd; +import org.apache.cloudstack.api.admin.domain.command.ListDomainsCmd; import com.cloud.configuration.ResourceLimit; import com.cloud.configuration.dao.ResourceCountDao; import com.cloud.domain.Domain; diff --git a/server/test/com/cloud/user/MockDomainManagerImpl.java b/server/test/com/cloud/user/MockDomainManagerImpl.java index 4266f3553e5..dc986926d03 100644 --- a/server/test/com/cloud/user/MockDomainManagerImpl.java +++ b/server/test/com/cloud/user/MockDomainManagerImpl.java @@ -23,8 +23,8 @@ import java.util.Set; import javax.ejb.Local; import javax.naming.ConfigurationException; -import com.cloud.api.commands.ListDomainChildrenCmd; -import com.cloud.api.commands.ListDomainsCmd; +import org.apache.cloudstack.api.admin.domain.command.ListDomainChildrenCmd; +import org.apache.cloudstack.api.admin.domain.command.ListDomainsCmd; import com.cloud.domain.Domain; import com.cloud.domain.DomainVO; import com.cloud.exception.PermissionDeniedException; From ecc8249365e73d9ba982704423a4dd8ee88b7af4 Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Thu, 6 Dec 2012 10:50:26 -0800 Subject: [PATCH 062/421] api_refactor: move cfg admin apis Signed-off-by: Rohit Yadav --- .../com/cloud/configuration/ConfigurationService.java | 2 +- api/src/com/cloud/server/ManagementService.java | 4 ++-- .../api/admin/config/command}/ListCfgsByCmd.java | 2 +- .../config/command}/ListHypervisorCapabilitiesCmd.java | 2 +- .../api/admin/config/command}/UpdateCfgCmd.java | 2 +- .../command}/UpdateHypervisorCapabilitiesCmd.java | 2 +- .../command/ListCapabilitiesCmd.java | 2 +- client/tomcatconf/commands.properties.in | 10 +++++----- .../cloud/configuration/ConfigurationManagerImpl.java | 2 +- server/src/com/cloud/server/ManagementServerImpl.java | 4 ++-- .../com/cloud/vpc/MockConfigurationManagerImpl.java | 2 +- 11 files changed, 17 insertions(+), 17 deletions(-) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/admin/config/command}/ListCfgsByCmd.java (98%) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/admin/config/command}/ListHypervisorCapabilitiesCmd.java (98%) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/admin/config/command}/UpdateCfgCmd.java (98%) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/admin/config/command}/UpdateHypervisorCapabilitiesCmd.java (98%) rename api/src/org/apache/cloudstack/api/user/{resource => config}/command/ListCapabilitiesCmd.java (97%) diff --git a/api/src/com/cloud/configuration/ConfigurationService.java b/api/src/com/cloud/configuration/ConfigurationService.java index f807297206d..be509811c8b 100644 --- a/api/src/com/cloud/configuration/ConfigurationService.java +++ b/api/src/com/cloud/configuration/ConfigurationService.java @@ -34,7 +34,7 @@ import org.apache.cloudstack.api.admin.zone.command.DeleteZoneCmd; import com.cloud.api.commands.LDAPConfigCmd; import com.cloud.api.commands.LDAPRemoveCmd; import org.apache.cloudstack.api.user.network.command.ListNetworkOfferingsCmd; -import com.cloud.api.commands.UpdateCfgCmd; +import org.apache.cloudstack.api.admin.config.command.UpdateCfgCmd; import com.cloud.api.commands.UpdateDiskOfferingCmd; import org.apache.cloudstack.api.admin.network.command.UpdateNetworkOfferingCmd; import com.cloud.api.commands.UpdatePodCmd; diff --git a/api/src/com/cloud/server/ManagementService.java b/api/src/com/cloud/server/ManagementService.java index e77fe15c078..8b20f31f15e 100755 --- a/api/src/com/cloud/server/ManagementService.java +++ b/api/src/com/cloud/server/ManagementService.java @@ -28,7 +28,7 @@ import org.apache.cloudstack.api.admin.host.command.ListHostsCmd; import org.apache.cloudstack.api.admin.host.command.UpdateHostPasswordCmd; import org.apache.cloudstack.api.admin.router.command.ListRoutersCmd; import org.apache.cloudstack.api.user.address.command.ListPublicIpAddressesCmd; -import org.apache.cloudstack.api.user.resource.command.ListCapabilitiesCmd; +import org.apache.cloudstack.api.user.config.command.ListCapabilitiesCmd; import org.apache.cloudstack.api.user.guest.command.ListGuestOsCmd; import org.apache.cloudstack.api.user.offering.command.ListDiskOfferingsCmd; import org.apache.cloudstack.api.user.offering.command.ListServiceOfferingsCmd; @@ -42,7 +42,7 @@ import org.apache.cloudstack.api.user.vm.command.GetVMPasswordCmd; import com.cloud.api.commands.ListAlertsCmd; import org.apache.cloudstack.api.user.job.command.ListAsyncJobsCmd; import com.cloud.api.commands.ListCapacityCmd; -import com.cloud.api.commands.ListCfgsByCmd; +import org.apache.cloudstack.api.admin.config.command.ListCfgsByCmd; import com.cloud.api.commands.ListClustersCmd; import org.apache.cloudstack.api.user.event.command.ListEventsCmd; import org.apache.cloudstack.api.user.guest.command.ListGuestOsCategoriesCmd; diff --git a/api/src/com/cloud/api/commands/ListCfgsByCmd.java b/api/src/org/apache/cloudstack/api/admin/config/command/ListCfgsByCmd.java similarity index 98% rename from api/src/com/cloud/api/commands/ListCfgsByCmd.java rename to api/src/org/apache/cloudstack/api/admin/config/command/ListCfgsByCmd.java index e539338fff3..70990ba8179 100644 --- a/api/src/com/cloud/api/commands/ListCfgsByCmd.java +++ b/api/src/org/apache/cloudstack/api/admin/config/command/ListCfgsByCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.admin.config.command; import java.util.ArrayList; import java.util.List; diff --git a/api/src/com/cloud/api/commands/ListHypervisorCapabilitiesCmd.java b/api/src/org/apache/cloudstack/api/admin/config/command/ListHypervisorCapabilitiesCmd.java similarity index 98% rename from api/src/com/cloud/api/commands/ListHypervisorCapabilitiesCmd.java rename to api/src/org/apache/cloudstack/api/admin/config/command/ListHypervisorCapabilitiesCmd.java index 29a56a3fa07..e0cd04f8350 100644 --- a/api/src/com/cloud/api/commands/ListHypervisorCapabilitiesCmd.java +++ b/api/src/org/apache/cloudstack/api/admin/config/command/ListHypervisorCapabilitiesCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.admin.config.command; import java.util.ArrayList; import java.util.List; diff --git a/api/src/com/cloud/api/commands/UpdateCfgCmd.java b/api/src/org/apache/cloudstack/api/admin/config/command/UpdateCfgCmd.java similarity index 98% rename from api/src/com/cloud/api/commands/UpdateCfgCmd.java rename to api/src/org/apache/cloudstack/api/admin/config/command/UpdateCfgCmd.java index ea5e8773f6e..62d401146a7 100644 --- a/api/src/com/cloud/api/commands/UpdateCfgCmd.java +++ b/api/src/org/apache/cloudstack/api/admin/config/command/UpdateCfgCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.admin.config.command; import org.apache.log4j.Logger; diff --git a/api/src/com/cloud/api/commands/UpdateHypervisorCapabilitiesCmd.java b/api/src/org/apache/cloudstack/api/admin/config/command/UpdateHypervisorCapabilitiesCmd.java similarity index 98% rename from api/src/com/cloud/api/commands/UpdateHypervisorCapabilitiesCmd.java rename to api/src/org/apache/cloudstack/api/admin/config/command/UpdateHypervisorCapabilitiesCmd.java index 4f47f48c617..47a99809b1d 100644 --- a/api/src/com/cloud/api/commands/UpdateHypervisorCapabilitiesCmd.java +++ b/api/src/org/apache/cloudstack/api/admin/config/command/UpdateHypervisorCapabilitiesCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.admin.config.command; import org.apache.log4j.Logger; diff --git a/api/src/org/apache/cloudstack/api/user/resource/command/ListCapabilitiesCmd.java b/api/src/org/apache/cloudstack/api/user/config/command/ListCapabilitiesCmd.java similarity index 97% rename from api/src/org/apache/cloudstack/api/user/resource/command/ListCapabilitiesCmd.java rename to api/src/org/apache/cloudstack/api/user/config/command/ListCapabilitiesCmd.java index 7fd69c78024..3b235ee38c0 100644 --- a/api/src/org/apache/cloudstack/api/user/resource/command/ListCapabilitiesCmd.java +++ b/api/src/org/apache/cloudstack/api/user/config/command/ListCapabilitiesCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.user.resource.command; +package org.apache.cloudstack.api.user.config.command; import java.util.Map; diff --git a/client/tomcatconf/commands.properties.in b/client/tomcatconf/commands.properties.in index 822d344bc83..a00118e1ee5 100755 --- a/client/tomcatconf/commands.properties.in +++ b/client/tomcatconf/commands.properties.in @@ -196,11 +196,11 @@ migrateSystemVm=org.apache.cloudstack.api.admin.systemvm.command.MigrateSystemVM changeServiceForSystemVm=org.apache.cloudstack.api.admin.systemvm.command.UpgradeSystemVMCmd;1 #### configuration commands -updateConfiguration=com.cloud.api.commands.UpdateCfgCmd;1 -listConfigurations=com.cloud.api.commands.ListCfgsByCmd;1 +updateConfiguration=org.apache.cloudstack.api.admin.config.command.UpdateCfgCmd;1 +listConfigurations=org.apache.cloudstack.api.admin.config.command.ListCfgsByCmd;1 ldapConfig=com.cloud.api.commands.LDAPConfigCmd;1 ldapRemove=com.cloud.api.commands.LDAPRemoveCmd;1 -listCapabilities=org.apache.cloudstack.api.user.resource.command.ListCapabilitiesCmd;15 +listCapabilities=org.apache.cloudstack.api.user.config.command.ListCapabilitiesCmd;15 #### pod commands createPod=com.cloud.api.commands.CreatePodCmd;1 @@ -341,8 +341,8 @@ deleteFirewallRule=org.apache.cloudstack.api.user.firewall.command.DeleteFirewal listFirewallRules=org.apache.cloudstack.api.user.firewall.command.ListFirewallRulesCmd;15 #### hypervisor capabilities commands -updateHypervisorCapabilities=com.cloud.api.commands.UpdateHypervisorCapabilitiesCmd;1 -listHypervisorCapabilities=com.cloud.api.commands.ListHypervisorCapabilitiesCmd;1 +updateHypervisorCapabilities=org.apache.cloudstack.api.admin.config.command.UpdateHypervisorCapabilitiesCmd;1 +listHypervisorCapabilities=org.apache.cloudstack.api.admin.config.command.ListHypervisorCapabilitiesCmd;1 #### Physical Network commands createPhysicalNetwork=org.apache.cloudstack.api.admin.network.command.CreatePhysicalNetworkCmd;1 diff --git a/server/src/com/cloud/configuration/ConfigurationManagerImpl.java b/server/src/com/cloud/configuration/ConfigurationManagerImpl.java index f3b1e2fbb9a..ac5ac68bc5c 100755 --- a/server/src/com/cloud/configuration/ConfigurationManagerImpl.java +++ b/server/src/com/cloud/configuration/ConfigurationManagerImpl.java @@ -38,6 +38,7 @@ import javax.naming.NamingException; import javax.naming.directory.DirContext; import javax.naming.directory.InitialDirContext; +import org.apache.cloudstack.api.admin.config.command.UpdateCfgCmd; import org.apache.cloudstack.api.admin.network.command.DeleteNetworkOfferingCmd; import org.apache.cloudstack.api.admin.network.command.UpdateNetworkOfferingCmd; import org.apache.cloudstack.api.admin.zone.command.CreateZoneCmd; @@ -60,7 +61,6 @@ import org.apache.cloudstack.api.admin.zone.command.DeleteZoneCmd; import com.cloud.api.commands.LDAPConfigCmd; import com.cloud.api.commands.LDAPRemoveCmd; import org.apache.cloudstack.api.user.network.command.ListNetworkOfferingsCmd; -import com.cloud.api.commands.UpdateCfgCmd; import com.cloud.api.commands.UpdateDiskOfferingCmd; import com.cloud.api.commands.UpdatePodCmd; import com.cloud.api.commands.UpdateServiceOfferingCmd; diff --git a/server/src/com/cloud/server/ManagementServerImpl.java b/server/src/com/cloud/server/ManagementServerImpl.java index ecaa8cb2b69..ec4b5804e97 100755 --- a/server/src/com/cloud/server/ManagementServerImpl.java +++ b/server/src/com/cloud/server/ManagementServerImpl.java @@ -42,8 +42,9 @@ import java.util.concurrent.TimeUnit; import javax.crypto.Mac; import javax.crypto.spec.SecretKeySpec; +import org.apache.cloudstack.api.admin.config.command.ListCfgsByCmd; import org.apache.cloudstack.api.admin.router.command.ListRoutersCmd; -import org.apache.cloudstack.api.user.resource.command.ListCapabilitiesCmd; +import org.apache.cloudstack.api.user.config.command.ListCapabilitiesCmd; import org.apache.cloudstack.api.user.guest.command.ListGuestOsCategoriesCmd; import org.apache.cloudstack.api.user.guest.command.ListGuestOsCmd; import org.apache.cloudstack.api.user.iso.command.ListIsosCmd; @@ -78,7 +79,6 @@ import org.apache.cloudstack.api.user.volume.command.ExtractVolumeCmd; import org.apache.cloudstack.api.user.vm.command.GetVMPasswordCmd; import com.cloud.api.commands.ListAlertsCmd; import com.cloud.api.commands.ListCapacityCmd; -import com.cloud.api.commands.ListCfgsByCmd; import com.cloud.api.commands.ListClustersCmd; import org.apache.cloudstack.api.user.event.command.ListEventsCmd; import org.apache.cloudstack.api.admin.host.command.ListHostsCmd; diff --git a/server/test/com/cloud/vpc/MockConfigurationManagerImpl.java b/server/test/com/cloud/vpc/MockConfigurationManagerImpl.java index 1fd10d04582..e77536ec9c2 100644 --- a/server/test/com/cloud/vpc/MockConfigurationManagerImpl.java +++ b/server/test/com/cloud/vpc/MockConfigurationManagerImpl.java @@ -25,6 +25,7 @@ import javax.naming.ConfigurationException; import javax.naming.NamingException; import com.cloud.api.commands.CreateDiskOfferingCmd; +import org.apache.cloudstack.api.admin.config.command.UpdateCfgCmd; import org.apache.cloudstack.api.admin.network.command.CreateNetworkOfferingCmd; import com.cloud.api.commands.CreateServiceOfferingCmd; import com.cloud.api.commands.CreateVlanIpRangeCmd; @@ -39,7 +40,6 @@ import com.cloud.api.commands.LDAPConfigCmd; import com.cloud.api.commands.LDAPRemoveCmd; import org.apache.cloudstack.api.admin.zone.command.UpdateZoneCmd; import org.apache.cloudstack.api.user.network.command.ListNetworkOfferingsCmd; -import com.cloud.api.commands.UpdateCfgCmd; import com.cloud.api.commands.UpdateDiskOfferingCmd; import org.apache.cloudstack.api.admin.network.command.UpdateNetworkOfferingCmd; import com.cloud.api.commands.UpdatePodCmd; From 1f1ac79a6c91c562ffcfff1279a5cdbf4b171b4c Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Thu, 6 Dec 2012 10:53:42 -0800 Subject: [PATCH 063/421] api_refactor: move disk and service offering to admin pkg Signed-off-by: Rohit Yadav --- .../cloud/configuration/ConfigurationService.java | 11 +++++------ .../offering/command}/CreateDiskOfferingCmd.java | 2 +- .../offering/command}/CreateServiceOfferingCmd.java | 2 +- .../offering/command}/DeleteDiskOfferingCmd.java | 2 +- .../offering/command}/DeleteServiceOfferingCmd.java | 2 +- .../offering/command}/UpdateDiskOfferingCmd.java | 2 +- .../offering/command}/UpdateServiceOfferingCmd.java | 2 +- client/tomcatconf/commands.properties.in | 12 ++++++------ .../configuration/ConfigurationManagerImpl.java | 12 ++++++------ .../com/cloud/vpc/MockConfigurationManagerImpl.java | 12 ++++++------ 10 files changed, 29 insertions(+), 30 deletions(-) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/admin/offering/command}/CreateDiskOfferingCmd.java (98%) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/admin/offering/command}/CreateServiceOfferingCmd.java (99%) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/admin/offering/command}/DeleteDiskOfferingCmd.java (97%) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/admin/offering/command}/DeleteServiceOfferingCmd.java (98%) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/admin/offering/command}/UpdateDiskOfferingCmd.java (98%) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/admin/offering/command}/UpdateServiceOfferingCmd.java (98%) diff --git a/api/src/com/cloud/configuration/ConfigurationService.java b/api/src/com/cloud/configuration/ConfigurationService.java index be509811c8b..1218146f583 100644 --- a/api/src/com/cloud/configuration/ConfigurationService.java +++ b/api/src/com/cloud/configuration/ConfigurationService.java @@ -20,25 +20,24 @@ import java.util.List; import javax.naming.NamingException; -import com.cloud.api.commands.CreateDiskOfferingCmd; +import org.apache.cloudstack.api.admin.offering.command.*; import org.apache.cloudstack.api.admin.network.command.CreateNetworkOfferingCmd; -import com.cloud.api.commands.CreateServiceOfferingCmd; +import org.apache.cloudstack.api.admin.offering.command.CreateServiceOfferingCmd; import com.cloud.api.commands.CreateVlanIpRangeCmd; +import org.apache.cloudstack.api.admin.offering.command.CreateDiskOfferingCmd; import org.apache.cloudstack.api.admin.zone.command.CreateZoneCmd; -import com.cloud.api.commands.DeleteDiskOfferingCmd; +import org.apache.cloudstack.api.admin.offering.command.DeleteDiskOfferingCmd; import org.apache.cloudstack.api.admin.network.command.DeleteNetworkOfferingCmd; import com.cloud.api.commands.DeletePodCmd; -import com.cloud.api.commands.DeleteServiceOfferingCmd; import com.cloud.api.commands.DeleteVlanIpRangeCmd; import org.apache.cloudstack.api.admin.zone.command.DeleteZoneCmd; import com.cloud.api.commands.LDAPConfigCmd; import com.cloud.api.commands.LDAPRemoveCmd; import org.apache.cloudstack.api.user.network.command.ListNetworkOfferingsCmd; import org.apache.cloudstack.api.admin.config.command.UpdateCfgCmd; -import com.cloud.api.commands.UpdateDiskOfferingCmd; +import org.apache.cloudstack.api.admin.offering.command.UpdateDiskOfferingCmd; import org.apache.cloudstack.api.admin.network.command.UpdateNetworkOfferingCmd; import com.cloud.api.commands.UpdatePodCmd; -import com.cloud.api.commands.UpdateServiceOfferingCmd; import org.apache.cloudstack.api.admin.zone.command.UpdateZoneCmd; import com.cloud.dc.DataCenter; import com.cloud.dc.Pod; diff --git a/api/src/com/cloud/api/commands/CreateDiskOfferingCmd.java b/api/src/org/apache/cloudstack/api/admin/offering/command/CreateDiskOfferingCmd.java similarity index 98% rename from api/src/com/cloud/api/commands/CreateDiskOfferingCmd.java rename to api/src/org/apache/cloudstack/api/admin/offering/command/CreateDiskOfferingCmd.java index 74789332be0..d79c916a388 100755 --- a/api/src/com/cloud/api/commands/CreateDiskOfferingCmd.java +++ b/api/src/org/apache/cloudstack/api/admin/offering/command/CreateDiskOfferingCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.admin.offering.command; import org.apache.log4j.Logger; diff --git a/api/src/com/cloud/api/commands/CreateServiceOfferingCmd.java b/api/src/org/apache/cloudstack/api/admin/offering/command/CreateServiceOfferingCmd.java similarity index 99% rename from api/src/com/cloud/api/commands/CreateServiceOfferingCmd.java rename to api/src/org/apache/cloudstack/api/admin/offering/command/CreateServiceOfferingCmd.java index 5e499123c10..57954ec821d 100644 --- a/api/src/com/cloud/api/commands/CreateServiceOfferingCmd.java +++ b/api/src/org/apache/cloudstack/api/admin/offering/command/CreateServiceOfferingCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.admin.offering.command; import org.apache.log4j.Logger; diff --git a/api/src/com/cloud/api/commands/DeleteDiskOfferingCmd.java b/api/src/org/apache/cloudstack/api/admin/offering/command/DeleteDiskOfferingCmd.java similarity index 97% rename from api/src/com/cloud/api/commands/DeleteDiskOfferingCmd.java rename to api/src/org/apache/cloudstack/api/admin/offering/command/DeleteDiskOfferingCmd.java index ee17f5fdc5c..39e8804aa8a 100644 --- a/api/src/com/cloud/api/commands/DeleteDiskOfferingCmd.java +++ b/api/src/org/apache/cloudstack/api/admin/offering/command/DeleteDiskOfferingCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.admin.offering.command; import org.apache.log4j.Logger; diff --git a/api/src/com/cloud/api/commands/DeleteServiceOfferingCmd.java b/api/src/org/apache/cloudstack/api/admin/offering/command/DeleteServiceOfferingCmd.java similarity index 98% rename from api/src/com/cloud/api/commands/DeleteServiceOfferingCmd.java rename to api/src/org/apache/cloudstack/api/admin/offering/command/DeleteServiceOfferingCmd.java index e2d0d510177..643f8a26894 100644 --- a/api/src/com/cloud/api/commands/DeleteServiceOfferingCmd.java +++ b/api/src/org/apache/cloudstack/api/admin/offering/command/DeleteServiceOfferingCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.admin.offering.command; import org.apache.log4j.Logger; diff --git a/api/src/com/cloud/api/commands/UpdateDiskOfferingCmd.java b/api/src/org/apache/cloudstack/api/admin/offering/command/UpdateDiskOfferingCmd.java similarity index 98% rename from api/src/com/cloud/api/commands/UpdateDiskOfferingCmd.java rename to api/src/org/apache/cloudstack/api/admin/offering/command/UpdateDiskOfferingCmd.java index 6e104950b91..66438142612 100755 --- a/api/src/com/cloud/api/commands/UpdateDiskOfferingCmd.java +++ b/api/src/org/apache/cloudstack/api/admin/offering/command/UpdateDiskOfferingCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.admin.offering.command; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; diff --git a/api/src/com/cloud/api/commands/UpdateServiceOfferingCmd.java b/api/src/org/apache/cloudstack/api/admin/offering/command/UpdateServiceOfferingCmd.java similarity index 98% rename from api/src/com/cloud/api/commands/UpdateServiceOfferingCmd.java rename to api/src/org/apache/cloudstack/api/admin/offering/command/UpdateServiceOfferingCmd.java index 44487fba9e4..909ad7d3a4a 100755 --- a/api/src/com/cloud/api/commands/UpdateServiceOfferingCmd.java +++ b/api/src/org/apache/cloudstack/api/admin/offering/command/UpdateServiceOfferingCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.admin.offering.command; import org.apache.log4j.Logger; diff --git a/client/tomcatconf/commands.properties.in b/client/tomcatconf/commands.properties.in index a00118e1ee5..e95458177f8 100755 --- a/client/tomcatconf/commands.properties.in +++ b/client/tomcatconf/commands.properties.in @@ -107,15 +107,15 @@ listOsTypes=org.apache.cloudstack.api.user.guest.command.ListGuestOsCmd;15 listOsCategories=org.apache.cloudstack.api.user.guest.command.ListGuestOsCategoriesCmd;15 #### service offering commands -createServiceOffering=com.cloud.api.commands.CreateServiceOfferingCmd;1 -deleteServiceOffering=com.cloud.api.commands.DeleteServiceOfferingCmd;1 -updateServiceOffering=com.cloud.api.commands.UpdateServiceOfferingCmd;1 +createServiceOffering=org.apache.cloudstack.api.admin.offering.command.CreateServiceOfferingCmd;1 +deleteServiceOffering=org.apache.cloudstack.api.admin.offering.command.DeleteServiceOfferingCmd;1 +updateServiceOffering=org.apache.cloudstack.api.admin.offering.command.UpdateServiceOfferingCmd;1 listServiceOfferings=org.apache.cloudstack.api.user.offering.command.ListServiceOfferingsCmd;15 #### disk offering commands -createDiskOffering=com.cloud.api.commands.CreateDiskOfferingCmd;1 -updateDiskOffering=com.cloud.api.commands.UpdateDiskOfferingCmd;1 -deleteDiskOffering=com.cloud.api.commands.DeleteDiskOfferingCmd;1 +createDiskOffering=org.apache.cloudstack.api.admin.offering.command.CreateDiskOfferingCmd;1 +updateDiskOffering=org.apache.cloudstack.api.admin.offering.command.UpdateDiskOfferingCmd;1 +deleteDiskOffering=org.apache.cloudstack.api.admin.offering.command.DeleteDiskOfferingCmd;1 listDiskOfferings=org.apache.cloudstack.api.user.offering.command.ListDiskOfferingsCmd;15 #### vlan commands diff --git a/server/src/com/cloud/configuration/ConfigurationManagerImpl.java b/server/src/com/cloud/configuration/ConfigurationManagerImpl.java index ac5ac68bc5c..a4fd640e47f 100755 --- a/server/src/com/cloud/configuration/ConfigurationManagerImpl.java +++ b/server/src/com/cloud/configuration/ConfigurationManagerImpl.java @@ -41,6 +41,8 @@ import javax.naming.directory.InitialDirContext; import org.apache.cloudstack.api.admin.config.command.UpdateCfgCmd; import org.apache.cloudstack.api.admin.network.command.DeleteNetworkOfferingCmd; import org.apache.cloudstack.api.admin.network.command.UpdateNetworkOfferingCmd; +import org.apache.cloudstack.api.admin.offering.command.CreateDiskOfferingCmd; +import org.apache.cloudstack.api.admin.offering.command.CreateServiceOfferingCmd; import org.apache.cloudstack.api.admin.zone.command.CreateZoneCmd; import org.apache.cloudstack.api.admin.zone.command.UpdateZoneCmd; import org.apache.log4j.Logger; @@ -49,21 +51,19 @@ import com.cloud.acl.SecurityChecker; import com.cloud.alert.AlertManager; import org.apache.cloudstack.api.ApiConstants.LDAPParams; import com.cloud.api.ApiDBUtils; -import com.cloud.api.commands.CreateDiskOfferingCmd; import org.apache.cloudstack.api.admin.network.command.CreateNetworkOfferingCmd; -import com.cloud.api.commands.CreateServiceOfferingCmd; import com.cloud.api.commands.CreateVlanIpRangeCmd; -import com.cloud.api.commands.DeleteDiskOfferingCmd; +import org.apache.cloudstack.api.admin.offering.command.DeleteDiskOfferingCmd; import com.cloud.api.commands.DeletePodCmd; -import com.cloud.api.commands.DeleteServiceOfferingCmd; +import org.apache.cloudstack.api.admin.offering.command.DeleteServiceOfferingCmd; import com.cloud.api.commands.DeleteVlanIpRangeCmd; import org.apache.cloudstack.api.admin.zone.command.DeleteZoneCmd; import com.cloud.api.commands.LDAPConfigCmd; import com.cloud.api.commands.LDAPRemoveCmd; import org.apache.cloudstack.api.user.network.command.ListNetworkOfferingsCmd; -import com.cloud.api.commands.UpdateDiskOfferingCmd; +import org.apache.cloudstack.api.admin.offering.command.UpdateDiskOfferingCmd; import com.cloud.api.commands.UpdatePodCmd; -import com.cloud.api.commands.UpdateServiceOfferingCmd; +import org.apache.cloudstack.api.admin.offering.command.UpdateServiceOfferingCmd; import com.cloud.capacity.dao.CapacityDao; import com.cloud.configuration.Resource.ResourceType; import com.cloud.configuration.dao.ConfigurationDao; diff --git a/server/test/com/cloud/vpc/MockConfigurationManagerImpl.java b/server/test/com/cloud/vpc/MockConfigurationManagerImpl.java index e77536ec9c2..5277660cc8e 100644 --- a/server/test/com/cloud/vpc/MockConfigurationManagerImpl.java +++ b/server/test/com/cloud/vpc/MockConfigurationManagerImpl.java @@ -24,26 +24,26 @@ import javax.ejb.Local; import javax.naming.ConfigurationException; import javax.naming.NamingException; -import com.cloud.api.commands.CreateDiskOfferingCmd; +import org.apache.cloudstack.api.admin.offering.command.CreateDiskOfferingCmd; import org.apache.cloudstack.api.admin.config.command.UpdateCfgCmd; import org.apache.cloudstack.api.admin.network.command.CreateNetworkOfferingCmd; -import com.cloud.api.commands.CreateServiceOfferingCmd; +import org.apache.cloudstack.api.admin.offering.command.CreateServiceOfferingCmd; import com.cloud.api.commands.CreateVlanIpRangeCmd; +import org.apache.cloudstack.api.admin.offering.command.DeleteDiskOfferingCmd; +import org.apache.cloudstack.api.admin.offering.command.UpdateServiceOfferingCmd; import org.apache.cloudstack.api.admin.zone.command.CreateZoneCmd; -import com.cloud.api.commands.DeleteDiskOfferingCmd; import org.apache.cloudstack.api.admin.network.command.DeleteNetworkOfferingCmd; import com.cloud.api.commands.DeletePodCmd; -import com.cloud.api.commands.DeleteServiceOfferingCmd; +import org.apache.cloudstack.api.admin.offering.command.DeleteServiceOfferingCmd; import com.cloud.api.commands.DeleteVlanIpRangeCmd; import org.apache.cloudstack.api.admin.zone.command.DeleteZoneCmd; import com.cloud.api.commands.LDAPConfigCmd; import com.cloud.api.commands.LDAPRemoveCmd; import org.apache.cloudstack.api.admin.zone.command.UpdateZoneCmd; import org.apache.cloudstack.api.user.network.command.ListNetworkOfferingsCmd; -import com.cloud.api.commands.UpdateDiskOfferingCmd; +import org.apache.cloudstack.api.admin.offering.command.UpdateDiskOfferingCmd; import org.apache.cloudstack.api.admin.network.command.UpdateNetworkOfferingCmd; import com.cloud.api.commands.UpdatePodCmd; -import com.cloud.api.commands.UpdateServiceOfferingCmd; import com.cloud.configuration.Configuration; import com.cloud.configuration.ConfigurationManager; import com.cloud.configuration.ConfigurationService; From e763fd7d369221695690bd392d8172c8899aab52 Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Thu, 6 Dec 2012 10:59:26 -0800 Subject: [PATCH 064/421] api_refactor: move userkeys api to admin pkg Signed-off-by: Rohit Yadav --- api/src/com/cloud/user/AccountService.java | 2 +- .../apache/cloudstack/api/admin/user/command}/RegisterCmd.java | 2 +- client/tomcatconf/commands.properties.in | 2 +- server/src/com/cloud/user/AccountManagerImpl.java | 2 +- server/test/com/cloud/user/MockAccountManagerImpl.java | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/admin/user/command}/RegisterCmd.java (98%) diff --git a/api/src/com/cloud/user/AccountService.java b/api/src/com/cloud/user/AccountService.java index fe68c3e3729..e73b04ecc86 100755 --- a/api/src/com/cloud/user/AccountService.java +++ b/api/src/com/cloud/user/AccountService.java @@ -22,10 +22,10 @@ import java.util.Map; import com.cloud.acl.ControlledEntity; import com.cloud.acl.SecurityChecker.AccessType; import org.apache.cloudstack.api.admin.user.command.DeleteUserCmd; +import org.apache.cloudstack.api.admin.user.command.RegisterCmd; import org.apache.cloudstack.api.admin.user.command.UpdateUserCmd; import org.apache.cloudstack.api.user.account.command.ListAccountsCmd; import org.apache.cloudstack.api.admin.user.command.ListUsersCmd; -import com.cloud.api.commands.RegisterCmd; import org.apache.cloudstack.api.admin.account.command.UpdateAccountCmd; import com.cloud.domain.Domain; import com.cloud.exception.ConcurrentOperationException; diff --git a/api/src/com/cloud/api/commands/RegisterCmd.java b/api/src/org/apache/cloudstack/api/admin/user/command/RegisterCmd.java similarity index 98% rename from api/src/com/cloud/api/commands/RegisterCmd.java rename to api/src/org/apache/cloudstack/api/admin/user/command/RegisterCmd.java index 7e9b01e8401..8aa4d0473e3 100644 --- a/api/src/com/cloud/api/commands/RegisterCmd.java +++ b/api/src/org/apache/cloudstack/api/admin/user/command/RegisterCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.admin.user.command; import org.apache.log4j.Logger; diff --git a/client/tomcatconf/commands.properties.in b/client/tomcatconf/commands.properties.in index e95458177f8..2f4f1b1c6ab 100755 --- a/client/tomcatconf/commands.properties.in +++ b/client/tomcatconf/commands.properties.in @@ -257,7 +257,7 @@ migrateVolume=org.apache.cloudstack.api.user.volume.command.MigrateVolumeCmd;15 #### use that key...the key is stored in the db associated w/ #### the userId...every request to the developer API should be #### checked against the key -registerUserKeys=com.cloud.api.commands.RegisterCmd;1 +registerUserKeys=org.apache.cloudstack.api.admin.user.command.RegisterCmd;1 ### async-query command queryAsyncJobResult=org.apache.cloudstack.api.user.job.command.QueryAsyncJobResultCmd;15 diff --git a/server/src/com/cloud/user/AccountManagerImpl.java b/server/src/com/cloud/user/AccountManagerImpl.java index ae5be6662e6..980ee3a7ef2 100755 --- a/server/src/com/cloud/user/AccountManagerImpl.java +++ b/server/src/com/cloud/user/AccountManagerImpl.java @@ -37,6 +37,7 @@ import javax.ejb.Local; import javax.naming.ConfigurationException; import org.apache.cloudstack.api.admin.user.command.ListUsersCmd; +import org.apache.cloudstack.api.admin.user.command.RegisterCmd; import org.apache.commons.codec.binary.Base64; import org.apache.log4j.Logger; @@ -47,7 +48,6 @@ import com.cloud.acl.SecurityChecker.AccessType; import com.cloud.api.ApiDBUtils; import org.apache.cloudstack.api.admin.user.command.DeleteUserCmd; import org.apache.cloudstack.api.user.account.command.ListAccountsCmd; -import com.cloud.api.commands.RegisterCmd; import org.apache.cloudstack.api.admin.account.command.UpdateAccountCmd; import org.apache.cloudstack.api.admin.user.command.UpdateUserCmd; import com.cloud.configuration.Config; diff --git a/server/test/com/cloud/user/MockAccountManagerImpl.java b/server/test/com/cloud/user/MockAccountManagerImpl.java index 484a2cc57ae..03e2c1adfd5 100644 --- a/server/test/com/cloud/user/MockAccountManagerImpl.java +++ b/server/test/com/cloud/user/MockAccountManagerImpl.java @@ -26,8 +26,8 @@ import com.cloud.acl.ControlledEntity; import com.cloud.acl.SecurityChecker.AccessType; import org.apache.cloudstack.api.admin.user.command.DeleteUserCmd; import org.apache.cloudstack.api.admin.user.command.ListUsersCmd; +import org.apache.cloudstack.api.admin.user.command.RegisterCmd; import org.apache.cloudstack.api.user.account.command.ListAccountsCmd; -import com.cloud.api.commands.RegisterCmd; import org.apache.cloudstack.api.admin.account.command.UpdateAccountCmd; import org.apache.cloudstack.api.admin.user.command.UpdateUserCmd; import com.cloud.api.view.vo.ControlledViewEntity; From 6c2ed5cb663e5844401711d81321bdd7f38bedff Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Thu, 6 Dec 2012 11:02:57 -0800 Subject: [PATCH 065/421] api_refactor: move pod apis to admin pkg Signed-off-by: Rohit Yadav --- api/src/com/cloud/configuration/ConfigurationService.java | 4 ++-- api/src/com/cloud/server/ManagementService.java | 2 +- .../cloudstack/api/admin/pod/command}/CreatePodCmd.java | 2 +- .../cloudstack/api/admin/pod/command}/DeletePodCmd.java | 2 +- .../cloudstack/api/admin/pod/command}/ListPodsByCmd.java | 2 +- .../cloudstack/api/admin/pod/command}/UpdatePodCmd.java | 2 +- client/tomcatconf/commands.properties.in | 8 ++++---- .../com/cloud/configuration/ConfigurationManagerImpl.java | 4 ++-- server/src/com/cloud/server/ManagementServerImpl.java | 2 +- .../test/com/cloud/vpc/MockConfigurationManagerImpl.java | 4 ++-- 10 files changed, 16 insertions(+), 16 deletions(-) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/admin/pod/command}/CreatePodCmd.java (98%) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/admin/pod/command}/DeletePodCmd.java (98%) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/admin/pod/command}/ListPodsByCmd.java (98%) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/admin/pod/command}/UpdatePodCmd.java (98%) diff --git a/api/src/com/cloud/configuration/ConfigurationService.java b/api/src/com/cloud/configuration/ConfigurationService.java index 1218146f583..10138fab2c1 100644 --- a/api/src/com/cloud/configuration/ConfigurationService.java +++ b/api/src/com/cloud/configuration/ConfigurationService.java @@ -25,10 +25,10 @@ import org.apache.cloudstack.api.admin.network.command.CreateNetworkOfferingCmd; import org.apache.cloudstack.api.admin.offering.command.CreateServiceOfferingCmd; import com.cloud.api.commands.CreateVlanIpRangeCmd; import org.apache.cloudstack.api.admin.offering.command.CreateDiskOfferingCmd; +import org.apache.cloudstack.api.admin.pod.command.DeletePodCmd; import org.apache.cloudstack.api.admin.zone.command.CreateZoneCmd; import org.apache.cloudstack.api.admin.offering.command.DeleteDiskOfferingCmd; import org.apache.cloudstack.api.admin.network.command.DeleteNetworkOfferingCmd; -import com.cloud.api.commands.DeletePodCmd; import com.cloud.api.commands.DeleteVlanIpRangeCmd; import org.apache.cloudstack.api.admin.zone.command.DeleteZoneCmd; import com.cloud.api.commands.LDAPConfigCmd; @@ -37,7 +37,7 @@ import org.apache.cloudstack.api.user.network.command.ListNetworkOfferingsCmd; import org.apache.cloudstack.api.admin.config.command.UpdateCfgCmd; import org.apache.cloudstack.api.admin.offering.command.UpdateDiskOfferingCmd; import org.apache.cloudstack.api.admin.network.command.UpdateNetworkOfferingCmd; -import com.cloud.api.commands.UpdatePodCmd; +import org.apache.cloudstack.api.admin.pod.command.UpdatePodCmd; import org.apache.cloudstack.api.admin.zone.command.UpdateZoneCmd; import com.cloud.dc.DataCenter; import com.cloud.dc.Pod; diff --git a/api/src/com/cloud/server/ManagementService.java b/api/src/com/cloud/server/ManagementService.java index 8b20f31f15e..80ae81de0d7 100755 --- a/api/src/com/cloud/server/ManagementService.java +++ b/api/src/com/cloud/server/ManagementService.java @@ -26,6 +26,7 @@ import com.cloud.alert.Alert; import org.apache.cloudstack.api.ServerApiException; import org.apache.cloudstack.api.admin.host.command.ListHostsCmd; import org.apache.cloudstack.api.admin.host.command.UpdateHostPasswordCmd; +import org.apache.cloudstack.api.admin.pod.command.ListPodsByCmd; import org.apache.cloudstack.api.admin.router.command.ListRoutersCmd; import org.apache.cloudstack.api.user.address.command.ListPublicIpAddressesCmd; import org.apache.cloudstack.api.user.config.command.ListCapabilitiesCmd; @@ -47,7 +48,6 @@ import com.cloud.api.commands.ListClustersCmd; import org.apache.cloudstack.api.user.event.command.ListEventsCmd; import org.apache.cloudstack.api.user.guest.command.ListGuestOsCategoriesCmd; import org.apache.cloudstack.api.user.iso.command.ListIsosCmd; -import com.cloud.api.commands.ListPodsByCmd; import org.apache.cloudstack.api.user.ssh.command.ListSSHKeyPairsCmd; import org.apache.cloudstack.api.admin.storagepool.command.ListStoragePoolsCmd; import org.apache.cloudstack.api.admin.systemvm.command.ListSystemVMsCmd; diff --git a/api/src/com/cloud/api/commands/CreatePodCmd.java b/api/src/org/apache/cloudstack/api/admin/pod/command/CreatePodCmd.java similarity index 98% rename from api/src/com/cloud/api/commands/CreatePodCmd.java rename to api/src/org/apache/cloudstack/api/admin/pod/command/CreatePodCmd.java index 5c36b9f015d..fe7c1cee2f1 100755 --- a/api/src/com/cloud/api/commands/CreatePodCmd.java +++ b/api/src/org/apache/cloudstack/api/admin/pod/command/CreatePodCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.admin.pod.command; import org.apache.log4j.Logger; diff --git a/api/src/com/cloud/api/commands/DeletePodCmd.java b/api/src/org/apache/cloudstack/api/admin/pod/command/DeletePodCmd.java similarity index 98% rename from api/src/com/cloud/api/commands/DeletePodCmd.java rename to api/src/org/apache/cloudstack/api/admin/pod/command/DeletePodCmd.java index ab718439660..3a04d7f4873 100644 --- a/api/src/com/cloud/api/commands/DeletePodCmd.java +++ b/api/src/org/apache/cloudstack/api/admin/pod/command/DeletePodCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.admin.pod.command; import org.apache.log4j.Logger; diff --git a/api/src/com/cloud/api/commands/ListPodsByCmd.java b/api/src/org/apache/cloudstack/api/admin/pod/command/ListPodsByCmd.java similarity index 98% rename from api/src/com/cloud/api/commands/ListPodsByCmd.java rename to api/src/org/apache/cloudstack/api/admin/pod/command/ListPodsByCmd.java index d894606199f..db15d3d5a75 100755 --- a/api/src/com/cloud/api/commands/ListPodsByCmd.java +++ b/api/src/org/apache/cloudstack/api/admin/pod/command/ListPodsByCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.admin.pod.command; import java.util.ArrayList; import java.util.List; diff --git a/api/src/com/cloud/api/commands/UpdatePodCmd.java b/api/src/org/apache/cloudstack/api/admin/pod/command/UpdatePodCmd.java similarity index 98% rename from api/src/com/cloud/api/commands/UpdatePodCmd.java rename to api/src/org/apache/cloudstack/api/admin/pod/command/UpdatePodCmd.java index 515a02df5b2..fe67c81cb45 100755 --- a/api/src/com/cloud/api/commands/UpdatePodCmd.java +++ b/api/src/org/apache/cloudstack/api/admin/pod/command/UpdatePodCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.admin.pod.command; import org.apache.log4j.Logger; diff --git a/client/tomcatconf/commands.properties.in b/client/tomcatconf/commands.properties.in index 2f4f1b1c6ab..929ad93863f 100755 --- a/client/tomcatconf/commands.properties.in +++ b/client/tomcatconf/commands.properties.in @@ -203,10 +203,10 @@ ldapRemove=com.cloud.api.commands.LDAPRemoveCmd;1 listCapabilities=org.apache.cloudstack.api.user.config.command.ListCapabilitiesCmd;15 #### pod commands -createPod=com.cloud.api.commands.CreatePodCmd;1 -updatePod=com.cloud.api.commands.UpdatePodCmd;1 -deletePod=com.cloud.api.commands.DeletePodCmd;1 -listPods=com.cloud.api.commands.ListPodsByCmd;3 +createPod=org.apache.cloudstack.api.admin.pod.command.CreatePodCmd;1 +updatePod=org.apache.cloudstack.api.admin.pod.command.UpdatePodCmd;1 +deletePod=org.apache.cloudstack.api.admin.pod.command.DeletePodCmd;1 +listPods=org.apache.cloudstack.api.admin.pod.command.ListPodsByCmd;3 #### zone commands createZone=org.apache.cloudstack.api.admin.zone.command.CreateZoneCmd;1 diff --git a/server/src/com/cloud/configuration/ConfigurationManagerImpl.java b/server/src/com/cloud/configuration/ConfigurationManagerImpl.java index a4fd640e47f..eeff5066204 100755 --- a/server/src/com/cloud/configuration/ConfigurationManagerImpl.java +++ b/server/src/com/cloud/configuration/ConfigurationManagerImpl.java @@ -43,6 +43,8 @@ import org.apache.cloudstack.api.admin.network.command.DeleteNetworkOfferingCmd; import org.apache.cloudstack.api.admin.network.command.UpdateNetworkOfferingCmd; import org.apache.cloudstack.api.admin.offering.command.CreateDiskOfferingCmd; import org.apache.cloudstack.api.admin.offering.command.CreateServiceOfferingCmd; +import org.apache.cloudstack.api.admin.pod.command.DeletePodCmd; +import org.apache.cloudstack.api.admin.pod.command.UpdatePodCmd; import org.apache.cloudstack.api.admin.zone.command.CreateZoneCmd; import org.apache.cloudstack.api.admin.zone.command.UpdateZoneCmd; import org.apache.log4j.Logger; @@ -54,7 +56,6 @@ import com.cloud.api.ApiDBUtils; import org.apache.cloudstack.api.admin.network.command.CreateNetworkOfferingCmd; import com.cloud.api.commands.CreateVlanIpRangeCmd; import org.apache.cloudstack.api.admin.offering.command.DeleteDiskOfferingCmd; -import com.cloud.api.commands.DeletePodCmd; import org.apache.cloudstack.api.admin.offering.command.DeleteServiceOfferingCmd; import com.cloud.api.commands.DeleteVlanIpRangeCmd; import org.apache.cloudstack.api.admin.zone.command.DeleteZoneCmd; @@ -62,7 +63,6 @@ import com.cloud.api.commands.LDAPConfigCmd; import com.cloud.api.commands.LDAPRemoveCmd; import org.apache.cloudstack.api.user.network.command.ListNetworkOfferingsCmd; import org.apache.cloudstack.api.admin.offering.command.UpdateDiskOfferingCmd; -import com.cloud.api.commands.UpdatePodCmd; import org.apache.cloudstack.api.admin.offering.command.UpdateServiceOfferingCmd; import com.cloud.capacity.dao.CapacityDao; import com.cloud.configuration.Resource.ResourceType; diff --git a/server/src/com/cloud/server/ManagementServerImpl.java b/server/src/com/cloud/server/ManagementServerImpl.java index ec4b5804e97..87c82e793f0 100755 --- a/server/src/com/cloud/server/ManagementServerImpl.java +++ b/server/src/com/cloud/server/ManagementServerImpl.java @@ -82,7 +82,7 @@ import com.cloud.api.commands.ListCapacityCmd; import com.cloud.api.commands.ListClustersCmd; import org.apache.cloudstack.api.user.event.command.ListEventsCmd; import org.apache.cloudstack.api.admin.host.command.ListHostsCmd; -import com.cloud.api.commands.ListPodsByCmd; +import org.apache.cloudstack.api.admin.pod.command.ListPodsByCmd; import org.apache.cloudstack.api.user.address.command.ListPublicIpAddressesCmd; import org.apache.cloudstack.api.user.ssh.command.ListSSHKeyPairsCmd; import org.apache.cloudstack.api.admin.storagepool.command.ListStoragePoolsCmd; diff --git a/server/test/com/cloud/vpc/MockConfigurationManagerImpl.java b/server/test/com/cloud/vpc/MockConfigurationManagerImpl.java index 5277660cc8e..291d08ed834 100644 --- a/server/test/com/cloud/vpc/MockConfigurationManagerImpl.java +++ b/server/test/com/cloud/vpc/MockConfigurationManagerImpl.java @@ -31,9 +31,10 @@ import org.apache.cloudstack.api.admin.offering.command.CreateServiceOfferingCmd import com.cloud.api.commands.CreateVlanIpRangeCmd; import org.apache.cloudstack.api.admin.offering.command.DeleteDiskOfferingCmd; import org.apache.cloudstack.api.admin.offering.command.UpdateServiceOfferingCmd; +import org.apache.cloudstack.api.admin.pod.command.UpdatePodCmd; import org.apache.cloudstack.api.admin.zone.command.CreateZoneCmd; import org.apache.cloudstack.api.admin.network.command.DeleteNetworkOfferingCmd; -import com.cloud.api.commands.DeletePodCmd; +import org.apache.cloudstack.api.admin.pod.command.DeletePodCmd; import org.apache.cloudstack.api.admin.offering.command.DeleteServiceOfferingCmd; import com.cloud.api.commands.DeleteVlanIpRangeCmd; import org.apache.cloudstack.api.admin.zone.command.DeleteZoneCmd; @@ -43,7 +44,6 @@ import org.apache.cloudstack.api.admin.zone.command.UpdateZoneCmd; import org.apache.cloudstack.api.user.network.command.ListNetworkOfferingsCmd; import org.apache.cloudstack.api.admin.offering.command.UpdateDiskOfferingCmd; import org.apache.cloudstack.api.admin.network.command.UpdateNetworkOfferingCmd; -import com.cloud.api.commands.UpdatePodCmd; import com.cloud.configuration.Configuration; import com.cloud.configuration.ConfigurationManager; import com.cloud.configuration.ConfigurationService; From 28305904e8122124a55a2499272312d8450cd4cb Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Thu, 6 Dec 2012 11:04:24 -0800 Subject: [PATCH 066/421] api_refactor: move cluster apis to admin package Signed-off-by: Rohit Yadav --- api/src/com/cloud/resource/ResourceService.java | 4 ++-- api/src/com/cloud/server/ManagementService.java | 2 +- .../api/admin/cluster/command}/AddClusterCmd.java | 2 +- .../api/admin/cluster/command}/DeleteClusterCmd.java | 2 +- .../api/admin/cluster/command}/ListClustersCmd.java | 2 +- .../api/admin/cluster/command}/UpdateClusterCmd.java | 2 +- .../com/cloud/api/commands/test/AddClusterCmdTest.java | 2 +- client/tomcatconf/commands.properties.in | 8 ++++---- server/src/com/cloud/resource/ResourceManagerImpl.java | 4 ++-- server/src/com/cloud/server/ManagementServerImpl.java | 2 +- 10 files changed, 15 insertions(+), 15 deletions(-) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/admin/cluster/command}/AddClusterCmd.java (99%) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/admin/cluster/command}/DeleteClusterCmd.java (98%) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/admin/cluster/command}/ListClustersCmd.java (98%) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/admin/cluster/command}/UpdateClusterCmd.java (98%) diff --git a/api/src/com/cloud/resource/ResourceService.java b/api/src/com/cloud/resource/ResourceService.java index d75ed139ed5..d342787f061 100755 --- a/api/src/com/cloud/resource/ResourceService.java +++ b/api/src/com/cloud/resource/ResourceService.java @@ -18,12 +18,12 @@ package com.cloud.resource; import java.util.List; -import com.cloud.api.commands.AddClusterCmd; +import org.apache.cloudstack.api.admin.cluster.command.AddClusterCmd; +import org.apache.cloudstack.api.admin.cluster.command.DeleteClusterCmd; import org.apache.cloudstack.api.admin.host.command.AddHostCmd; import org.apache.cloudstack.api.admin.host.command.AddSecondaryStorageCmd; import com.cloud.api.commands.AddSwiftCmd; import org.apache.cloudstack.api.admin.host.command.CancelMaintenanceCmd; -import com.cloud.api.commands.DeleteClusterCmd; import com.cloud.api.commands.ListSwiftsCmd; import org.apache.cloudstack.api.admin.host.command.PrepareForMaintenanceCmd; import org.apache.cloudstack.api.admin.host.command.*; diff --git a/api/src/com/cloud/server/ManagementService.java b/api/src/com/cloud/server/ManagementService.java index 80ae81de0d7..ab8e5dbf314 100755 --- a/api/src/com/cloud/server/ManagementService.java +++ b/api/src/com/cloud/server/ManagementService.java @@ -24,6 +24,7 @@ import java.util.Set; import com.cloud.alert.Alert; import org.apache.cloudstack.api.ServerApiException; +import org.apache.cloudstack.api.admin.cluster.command.ListClustersCmd; import org.apache.cloudstack.api.admin.host.command.ListHostsCmd; import org.apache.cloudstack.api.admin.host.command.UpdateHostPasswordCmd; import org.apache.cloudstack.api.admin.pod.command.ListPodsByCmd; @@ -44,7 +45,6 @@ import com.cloud.api.commands.ListAlertsCmd; import org.apache.cloudstack.api.user.job.command.ListAsyncJobsCmd; import com.cloud.api.commands.ListCapacityCmd; import org.apache.cloudstack.api.admin.config.command.ListCfgsByCmd; -import com.cloud.api.commands.ListClustersCmd; import org.apache.cloudstack.api.user.event.command.ListEventsCmd; import org.apache.cloudstack.api.user.guest.command.ListGuestOsCategoriesCmd; import org.apache.cloudstack.api.user.iso.command.ListIsosCmd; diff --git a/api/src/com/cloud/api/commands/AddClusterCmd.java b/api/src/org/apache/cloudstack/api/admin/cluster/command/AddClusterCmd.java similarity index 99% rename from api/src/com/cloud/api/commands/AddClusterCmd.java rename to api/src/org/apache/cloudstack/api/admin/cluster/command/AddClusterCmd.java index dc93e668ff0..ec6ab17e3d2 100755 --- a/api/src/com/cloud/api/commands/AddClusterCmd.java +++ b/api/src/org/apache/cloudstack/api/admin/cluster/command/AddClusterCmd.java @@ -15,7 +15,7 @@ // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.admin.cluster.command; import java.util.ArrayList; import java.util.List; diff --git a/api/src/com/cloud/api/commands/DeleteClusterCmd.java b/api/src/org/apache/cloudstack/api/admin/cluster/command/DeleteClusterCmd.java similarity index 98% rename from api/src/com/cloud/api/commands/DeleteClusterCmd.java rename to api/src/org/apache/cloudstack/api/admin/cluster/command/DeleteClusterCmd.java index eaab9eda0cb..64cc571d764 100755 --- a/api/src/com/cloud/api/commands/DeleteClusterCmd.java +++ b/api/src/org/apache/cloudstack/api/admin/cluster/command/DeleteClusterCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.admin.cluster.command; import org.apache.log4j.Logger; diff --git a/api/src/com/cloud/api/commands/ListClustersCmd.java b/api/src/org/apache/cloudstack/api/admin/cluster/command/ListClustersCmd.java similarity index 98% rename from api/src/com/cloud/api/commands/ListClustersCmd.java rename to api/src/org/apache/cloudstack/api/admin/cluster/command/ListClustersCmd.java index a46dd9df8bb..0107648371f 100755 --- a/api/src/com/cloud/api/commands/ListClustersCmd.java +++ b/api/src/org/apache/cloudstack/api/admin/cluster/command/ListClustersCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.admin.cluster.command; import java.util.ArrayList; import java.util.List; diff --git a/api/src/com/cloud/api/commands/UpdateClusterCmd.java b/api/src/org/apache/cloudstack/api/admin/cluster/command/UpdateClusterCmd.java similarity index 98% rename from api/src/com/cloud/api/commands/UpdateClusterCmd.java rename to api/src/org/apache/cloudstack/api/admin/cluster/command/UpdateClusterCmd.java index 7c3b2b3ede9..1d85ce5a813 100755 --- a/api/src/com/cloud/api/commands/UpdateClusterCmd.java +++ b/api/src/org/apache/cloudstack/api/admin/cluster/command/UpdateClusterCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.admin.cluster.command; import org.apache.log4j.Logger; diff --git a/api/test/src/com/cloud/api/commands/test/AddClusterCmdTest.java b/api/test/src/com/cloud/api/commands/test/AddClusterCmdTest.java index d1dae7c0e52..bfbd811fe11 100644 --- a/api/test/src/com/cloud/api/commands/test/AddClusterCmdTest.java +++ b/api/test/src/com/cloud/api/commands/test/AddClusterCmdTest.java @@ -19,6 +19,7 @@ package src.com.cloud.api.commands.test; import junit.framework.Assert; import junit.framework.TestCase; +import org.apache.cloudstack.api.admin.cluster.command.AddClusterCmd; import org.junit.Before; import org.junit.Rule; import org.junit.Test; @@ -27,7 +28,6 @@ import org.mockito.Mockito; import org.apache.cloudstack.api.ResponseGenerator; import org.apache.cloudstack.api.ServerApiException; -import com.cloud.api.commands.AddClusterCmd; import com.cloud.exception.DiscoveryException; import com.cloud.exception.ResourceInUseException; import com.cloud.org.Cluster; diff --git a/client/tomcatconf/commands.properties.in b/client/tomcatconf/commands.properties.in index 929ad93863f..48bd39c786a 100755 --- a/client/tomcatconf/commands.properties.in +++ b/client/tomcatconf/commands.properties.in @@ -230,9 +230,9 @@ listSwifts=com.cloud.api.commands.ListSwiftsCmd;1 #### host commands addHost=org.apache.cloudstack.api.admin.host.command.AddHostCmd;3 -addCluster=com.cloud.api.commands.AddClusterCmd;1 -deleteCluster=com.cloud.api.commands.DeleteClusterCmd;1 -updateCluster=com.cloud.api.commands.UpdateClusterCmd;1 +addCluster=org.apache.cloudstack.api.admin.cluster.command.AddClusterCmd;1 +deleteCluster=org.apache.cloudstack.api.admin.cluster.command.DeleteClusterCmd;1 +updateCluster=org.apache.cloudstack.api.admin.cluster.command.UpdateClusterCmd;1 reconnectHost=org.apache.cloudstack.api.admin.host.command.ReconnectHostCmd;1 updateHost=org.apache.cloudstack.api.admin.host.command.UpdateHostCmd;1 deleteHost=org.apache.cloudstack.api.admin.host.command.DeleteHostCmd;3 @@ -268,7 +268,7 @@ listStoragePools=org.apache.cloudstack.api.admin.storagepool.command.ListStorage createStoragePool=org.apache.cloudstack.api.admin.storagepool.command.CreateStoragePoolCmd;1 updateStoragePool=org.apache.cloudstack.api.admin.storagepool.command.UpdateStoragePoolCmd;1 deleteStoragePool=org.apache.cloudstack.api.admin.storagepool.command.DeletePoolCmd;1 -listClusters=com.cloud.api.commands.ListClustersCmd;3 +listClusters=org.apache.cloudstack.api.admin.cluster.command.ListClustersCmd;3 enableStorageMaintenance=org.apache.cloudstack.api.admin.storagepool.command.PreparePrimaryStorageForMaintenanceCmd;1 cancelStorageMaintenance=org.apache.cloudstack.api.admin.storagepool.command.CancelPrimaryStorageMaintenanceCmd;1 diff --git a/server/src/com/cloud/resource/ResourceManagerImpl.java b/server/src/com/cloud/resource/ResourceManagerImpl.java index da6539ce293..7a4c3dbad59 100755 --- a/server/src/com/cloud/resource/ResourceManagerImpl.java +++ b/server/src/com/cloud/resource/ResourceManagerImpl.java @@ -30,6 +30,7 @@ import java.util.Set; import javax.ejb.Local; import javax.naming.ConfigurationException; +import org.apache.cloudstack.api.admin.cluster.command.AddClusterCmd; import org.apache.cloudstack.api.admin.host.command.*; import org.apache.log4j.Logger; @@ -49,12 +50,11 @@ import com.cloud.agent.manager.allocator.PodAllocator; import com.cloud.agent.transport.Request; import org.apache.cloudstack.api.ApiConstants; import com.cloud.api.ApiDBUtils; -import com.cloud.api.commands.AddClusterCmd; import org.apache.cloudstack.api.admin.host.command.AddHostCmd; import org.apache.cloudstack.api.admin.host.command.AddSecondaryStorageCmd; import com.cloud.api.commands.AddSwiftCmd; import org.apache.cloudstack.api.admin.host.command.CancelMaintenanceCmd; -import com.cloud.api.commands.DeleteClusterCmd; +import org.apache.cloudstack.api.admin.cluster.command.DeleteClusterCmd; import com.cloud.api.commands.ListSwiftsCmd; import org.apache.cloudstack.api.admin.host.command.PrepareForMaintenanceCmd; import org.apache.cloudstack.api.admin.host.command.UpdateHostCmd; diff --git a/server/src/com/cloud/server/ManagementServerImpl.java b/server/src/com/cloud/server/ManagementServerImpl.java index 87c82e793f0..44458b13ddd 100755 --- a/server/src/com/cloud/server/ManagementServerImpl.java +++ b/server/src/com/cloud/server/ManagementServerImpl.java @@ -42,6 +42,7 @@ import java.util.concurrent.TimeUnit; import javax.crypto.Mac; import javax.crypto.spec.SecretKeySpec; +import org.apache.cloudstack.api.admin.cluster.command.ListClustersCmd; import org.apache.cloudstack.api.admin.config.command.ListCfgsByCmd; import org.apache.cloudstack.api.admin.router.command.ListRoutersCmd; import org.apache.cloudstack.api.user.config.command.ListCapabilitiesCmd; @@ -79,7 +80,6 @@ import org.apache.cloudstack.api.user.volume.command.ExtractVolumeCmd; import org.apache.cloudstack.api.user.vm.command.GetVMPasswordCmd; import com.cloud.api.commands.ListAlertsCmd; import com.cloud.api.commands.ListCapacityCmd; -import com.cloud.api.commands.ListClustersCmd; import org.apache.cloudstack.api.user.event.command.ListEventsCmd; import org.apache.cloudstack.api.admin.host.command.ListHostsCmd; import org.apache.cloudstack.api.admin.pod.command.ListPodsByCmd; From 780eb95830fd64424277d39d3934cfed69b66754 Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Thu, 6 Dec 2012 11:13:46 -0800 Subject: [PATCH 067/421] api_refactor: swift, ldap and vlan apis to admin pkg Signed-off-by: Rohit Yadav --- .../cloud/configuration/ConfigurationService.java | 8 ++++---- api/src/com/cloud/resource/ResourceService.java | 4 ++-- api/src/com/cloud/server/ManagementService.java | 2 +- .../api/admin/ldap/command}/LDAPConfigCmd.java | 2 +- .../api/admin/ldap/command}/LDAPRemoveCmd.java | 2 +- .../api/admin/swift/command}/AddSwiftCmd.java | 2 +- .../api/admin/swift/command}/ListSwiftsCmd.java | 2 +- .../admin/vlan/command}/CreateVlanIpRangeCmd.java | 2 +- .../admin/vlan/command}/DeleteVlanIpRangeCmd.java | 2 +- .../admin/vlan/command}/ListVlanIpRangesCmd.java | 2 +- .../cloud/api/commands/test/AddSwiftCmdTest.java | 2 +- client/tomcatconf/commands.properties.in | 14 +++++++------- .../configuration/ConfigurationManagerImpl.java | 8 ++++---- .../com/cloud/resource/ResourceManagerImpl.java | 4 ++-- .../src/com/cloud/server/ManagementServerImpl.java | 2 +- .../src/com/cloud/storage/swift/SwiftManager.java | 4 ++-- .../com/cloud/storage/swift/SwiftManagerImpl.java | 4 ++-- .../cloud/vpc/MockConfigurationManagerImpl.java | 8 ++++---- 18 files changed, 37 insertions(+), 37 deletions(-) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/admin/ldap/command}/LDAPConfigCmd.java (99%) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/admin/ldap/command}/LDAPRemoveCmd.java (97%) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/admin/swift/command}/AddSwiftCmd.java (98%) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/admin/swift/command}/ListSwiftsCmd.java (98%) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/admin/vlan/command}/CreateVlanIpRangeCmd.java (99%) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/admin/vlan/command}/DeleteVlanIpRangeCmd.java (98%) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/admin/vlan/command}/ListVlanIpRangesCmd.java (99%) diff --git a/api/src/com/cloud/configuration/ConfigurationService.java b/api/src/com/cloud/configuration/ConfigurationService.java index 10138fab2c1..56f036e8911 100644 --- a/api/src/com/cloud/configuration/ConfigurationService.java +++ b/api/src/com/cloud/configuration/ConfigurationService.java @@ -20,19 +20,19 @@ import java.util.List; import javax.naming.NamingException; +import org.apache.cloudstack.api.admin.ldap.command.LDAPRemoveCmd; import org.apache.cloudstack.api.admin.offering.command.*; import org.apache.cloudstack.api.admin.network.command.CreateNetworkOfferingCmd; import org.apache.cloudstack.api.admin.offering.command.CreateServiceOfferingCmd; -import com.cloud.api.commands.CreateVlanIpRangeCmd; +import org.apache.cloudstack.api.admin.vlan.command.CreateVlanIpRangeCmd; import org.apache.cloudstack.api.admin.offering.command.CreateDiskOfferingCmd; import org.apache.cloudstack.api.admin.pod.command.DeletePodCmd; +import org.apache.cloudstack.api.admin.vlan.command.DeleteVlanIpRangeCmd; import org.apache.cloudstack.api.admin.zone.command.CreateZoneCmd; import org.apache.cloudstack.api.admin.offering.command.DeleteDiskOfferingCmd; import org.apache.cloudstack.api.admin.network.command.DeleteNetworkOfferingCmd; -import com.cloud.api.commands.DeleteVlanIpRangeCmd; import org.apache.cloudstack.api.admin.zone.command.DeleteZoneCmd; -import com.cloud.api.commands.LDAPConfigCmd; -import com.cloud.api.commands.LDAPRemoveCmd; +import org.apache.cloudstack.api.admin.ldap.command.LDAPConfigCmd; import org.apache.cloudstack.api.user.network.command.ListNetworkOfferingsCmd; import org.apache.cloudstack.api.admin.config.command.UpdateCfgCmd; import org.apache.cloudstack.api.admin.offering.command.UpdateDiskOfferingCmd; diff --git a/api/src/com/cloud/resource/ResourceService.java b/api/src/com/cloud/resource/ResourceService.java index d342787f061..a7ee1de50e0 100755 --- a/api/src/com/cloud/resource/ResourceService.java +++ b/api/src/com/cloud/resource/ResourceService.java @@ -22,9 +22,9 @@ import org.apache.cloudstack.api.admin.cluster.command.AddClusterCmd; import org.apache.cloudstack.api.admin.cluster.command.DeleteClusterCmd; import org.apache.cloudstack.api.admin.host.command.AddHostCmd; import org.apache.cloudstack.api.admin.host.command.AddSecondaryStorageCmd; -import com.cloud.api.commands.AddSwiftCmd; +import org.apache.cloudstack.api.admin.swift.command.AddSwiftCmd; import org.apache.cloudstack.api.admin.host.command.CancelMaintenanceCmd; -import com.cloud.api.commands.ListSwiftsCmd; +import org.apache.cloudstack.api.admin.swift.command.ListSwiftsCmd; import org.apache.cloudstack.api.admin.host.command.PrepareForMaintenanceCmd; import org.apache.cloudstack.api.admin.host.command.*; import org.apache.cloudstack.api.admin.host.command.UpdateHostCmd; diff --git a/api/src/com/cloud/server/ManagementService.java b/api/src/com/cloud/server/ManagementService.java index ab8e5dbf314..db5f8bac138 100755 --- a/api/src/com/cloud/server/ManagementService.java +++ b/api/src/com/cloud/server/ManagementService.java @@ -52,7 +52,7 @@ import org.apache.cloudstack.api.user.ssh.command.ListSSHKeyPairsCmd; import org.apache.cloudstack.api.admin.storagepool.command.ListStoragePoolsCmd; import org.apache.cloudstack.api.admin.systemvm.command.ListSystemVMsCmd; import org.apache.cloudstack.api.user.vmgroup.command.ListVMGroupsCmd; -import com.cloud.api.commands.ListVlanIpRangesCmd; +import org.apache.cloudstack.api.admin.vlan.command.ListVlanIpRangesCmd; import org.apache.cloudstack.api.user.zone.command.ListZonesByCmd; import org.apache.cloudstack.api.admin.systemvm.command.RebootSystemVmCmd; import org.apache.cloudstack.api.user.ssh.command.RegisterSSHKeyPairCmd; diff --git a/api/src/com/cloud/api/commands/LDAPConfigCmd.java b/api/src/org/apache/cloudstack/api/admin/ldap/command/LDAPConfigCmd.java similarity index 99% rename from api/src/com/cloud/api/commands/LDAPConfigCmd.java rename to api/src/org/apache/cloudstack/api/admin/ldap/command/LDAPConfigCmd.java index 5b4572b3b8c..763455ceb14 100644 --- a/api/src/com/cloud/api/commands/LDAPConfigCmd.java +++ b/api/src/org/apache/cloudstack/api/admin/ldap/command/LDAPConfigCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.admin.ldap.command; import javax.naming.NamingException; diff --git a/api/src/com/cloud/api/commands/LDAPRemoveCmd.java b/api/src/org/apache/cloudstack/api/admin/ldap/command/LDAPRemoveCmd.java similarity index 97% rename from api/src/com/cloud/api/commands/LDAPRemoveCmd.java rename to api/src/org/apache/cloudstack/api/admin/ldap/command/LDAPRemoveCmd.java index f56c24def3f..5c53debe3f4 100644 --- a/api/src/com/cloud/api/commands/LDAPRemoveCmd.java +++ b/api/src/org/apache/cloudstack/api/admin/ldap/command/LDAPRemoveCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.admin.ldap.command; import org.apache.log4j.Logger; diff --git a/api/src/com/cloud/api/commands/AddSwiftCmd.java b/api/src/org/apache/cloudstack/api/admin/swift/command/AddSwiftCmd.java similarity index 98% rename from api/src/com/cloud/api/commands/AddSwiftCmd.java rename to api/src/org/apache/cloudstack/api/admin/swift/command/AddSwiftCmd.java index e0882c763f8..185024065d5 100644 --- a/api/src/com/cloud/api/commands/AddSwiftCmd.java +++ b/api/src/org/apache/cloudstack/api/admin/swift/command/AddSwiftCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.admin.swift.command; import org.apache.log4j.Logger; diff --git a/api/src/com/cloud/api/commands/ListSwiftsCmd.java b/api/src/org/apache/cloudstack/api/admin/swift/command/ListSwiftsCmd.java similarity index 98% rename from api/src/com/cloud/api/commands/ListSwiftsCmd.java rename to api/src/org/apache/cloudstack/api/admin/swift/command/ListSwiftsCmd.java index 5c4563a3bdb..3a2202a9920 100644 --- a/api/src/com/cloud/api/commands/ListSwiftsCmd.java +++ b/api/src/org/apache/cloudstack/api/admin/swift/command/ListSwiftsCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.admin.swift.command; import java.util.ArrayList; import java.util.List; diff --git a/api/src/com/cloud/api/commands/CreateVlanIpRangeCmd.java b/api/src/org/apache/cloudstack/api/admin/vlan/command/CreateVlanIpRangeCmd.java similarity index 99% rename from api/src/com/cloud/api/commands/CreateVlanIpRangeCmd.java rename to api/src/org/apache/cloudstack/api/admin/vlan/command/CreateVlanIpRangeCmd.java index f1e913670b2..27dd604199e 100644 --- a/api/src/com/cloud/api/commands/CreateVlanIpRangeCmd.java +++ b/api/src/org/apache/cloudstack/api/admin/vlan/command/CreateVlanIpRangeCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.admin.vlan.command; import org.apache.log4j.Logger; diff --git a/api/src/com/cloud/api/commands/DeleteVlanIpRangeCmd.java b/api/src/org/apache/cloudstack/api/admin/vlan/command/DeleteVlanIpRangeCmd.java similarity index 98% rename from api/src/com/cloud/api/commands/DeleteVlanIpRangeCmd.java rename to api/src/org/apache/cloudstack/api/admin/vlan/command/DeleteVlanIpRangeCmd.java index 9f58e3917e6..9ae10c60cba 100644 --- a/api/src/com/cloud/api/commands/DeleteVlanIpRangeCmd.java +++ b/api/src/org/apache/cloudstack/api/admin/vlan/command/DeleteVlanIpRangeCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.admin.vlan.command; import org.apache.log4j.Logger; diff --git a/api/src/com/cloud/api/commands/ListVlanIpRangesCmd.java b/api/src/org/apache/cloudstack/api/admin/vlan/command/ListVlanIpRangesCmd.java similarity index 99% rename from api/src/com/cloud/api/commands/ListVlanIpRangesCmd.java rename to api/src/org/apache/cloudstack/api/admin/vlan/command/ListVlanIpRangesCmd.java index 05044710065..7de9016287b 100644 --- a/api/src/com/cloud/api/commands/ListVlanIpRangesCmd.java +++ b/api/src/org/apache/cloudstack/api/admin/vlan/command/ListVlanIpRangesCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.admin.vlan.command; import java.util.ArrayList; import java.util.List; diff --git a/api/test/src/com/cloud/api/commands/test/AddSwiftCmdTest.java b/api/test/src/com/cloud/api/commands/test/AddSwiftCmdTest.java index fe553bbbd1f..59ffc39678e 100644 --- a/api/test/src/com/cloud/api/commands/test/AddSwiftCmdTest.java +++ b/api/test/src/com/cloud/api/commands/test/AddSwiftCmdTest.java @@ -19,6 +19,7 @@ package src.com.cloud.api.commands.test; import junit.framework.Assert; import junit.framework.TestCase; +import org.apache.cloudstack.api.admin.swift.command.AddSwiftCmd; import org.junit.Before; import org.junit.Rule; import org.junit.Test; @@ -27,7 +28,6 @@ import org.mockito.Mockito; import org.apache.cloudstack.api.ResponseGenerator; import org.apache.cloudstack.api.ServerApiException; -import com.cloud.api.commands.AddSwiftCmd; import com.cloud.api.response.SwiftResponse; import com.cloud.exception.DiscoveryException; import com.cloud.resource.ResourceService; diff --git a/client/tomcatconf/commands.properties.in b/client/tomcatconf/commands.properties.in index 48bd39c786a..d825505bd78 100755 --- a/client/tomcatconf/commands.properties.in +++ b/client/tomcatconf/commands.properties.in @@ -119,9 +119,9 @@ deleteDiskOffering=org.apache.cloudstack.api.admin.offering.command.DeleteDiskOf listDiskOfferings=org.apache.cloudstack.api.user.offering.command.ListDiskOfferingsCmd;15 #### vlan commands -createVlanIpRange=com.cloud.api.commands.CreateVlanIpRangeCmd;1 -deleteVlanIpRange=com.cloud.api.commands.DeleteVlanIpRangeCmd;1 -listVlanIpRanges=com.cloud.api.commands.ListVlanIpRangesCmd;1 +createVlanIpRange=org.apache.cloudstack.api.admin.vlan.command.CreateVlanIpRangeCmd;1 +deleteVlanIpRange=org.apache.cloudstack.api.admin.vlan.command.DeleteVlanIpRangeCmd;1 +listVlanIpRanges=org.apache.cloudstack.api.admin.vlan.command.ListVlanIpRangesCmd;1 #### address commands associateIpAddress=org.apache.cloudstack.api.user.address.command.AssociateIPAddrCmd;15 @@ -198,8 +198,8 @@ changeServiceForSystemVm=org.apache.cloudstack.api.admin.systemvm.command.Upgrad #### configuration commands updateConfiguration=org.apache.cloudstack.api.admin.config.command.UpdateCfgCmd;1 listConfigurations=org.apache.cloudstack.api.admin.config.command.ListCfgsByCmd;1 -ldapConfig=com.cloud.api.commands.LDAPConfigCmd;1 -ldapRemove=com.cloud.api.commands.LDAPRemoveCmd;1 +ldapConfig=org.apache.cloudstack.api.admin.ldap.command.LDAPConfigCmd;1 +ldapRemove=org.apache.cloudstack.api.admin.ldap.command.LDAPRemoveCmd;1 listCapabilities=org.apache.cloudstack.api.user.config.command.ListCapabilitiesCmd;15 #### pod commands @@ -225,8 +225,8 @@ listAlerts=com.cloud.api.commands.ListAlertsCmd;3 listCapacity=com.cloud.api.commands.ListCapacityCmd;3 #### swift commands^M -addSwift=com.cloud.api.commands.AddSwiftCmd;1 -listSwifts=com.cloud.api.commands.ListSwiftsCmd;1 +addSwift=org.apache.cloudstack.api.admin.swift.command.AddSwiftCmd;1 +listSwifts=org.apache.cloudstack.api.admin.swift.command.ListSwiftsCmd;1 #### host commands addHost=org.apache.cloudstack.api.admin.host.command.AddHostCmd;3 diff --git a/server/src/com/cloud/configuration/ConfigurationManagerImpl.java b/server/src/com/cloud/configuration/ConfigurationManagerImpl.java index eeff5066204..f5dea7ed09b 100755 --- a/server/src/com/cloud/configuration/ConfigurationManagerImpl.java +++ b/server/src/com/cloud/configuration/ConfigurationManagerImpl.java @@ -39,12 +39,15 @@ import javax.naming.directory.DirContext; import javax.naming.directory.InitialDirContext; import org.apache.cloudstack.api.admin.config.command.UpdateCfgCmd; +import org.apache.cloudstack.api.admin.ldap.command.LDAPConfigCmd; +import org.apache.cloudstack.api.admin.ldap.command.LDAPRemoveCmd; import org.apache.cloudstack.api.admin.network.command.DeleteNetworkOfferingCmd; import org.apache.cloudstack.api.admin.network.command.UpdateNetworkOfferingCmd; import org.apache.cloudstack.api.admin.offering.command.CreateDiskOfferingCmd; import org.apache.cloudstack.api.admin.offering.command.CreateServiceOfferingCmd; import org.apache.cloudstack.api.admin.pod.command.DeletePodCmd; import org.apache.cloudstack.api.admin.pod.command.UpdatePodCmd; +import org.apache.cloudstack.api.admin.vlan.command.CreateVlanIpRangeCmd; import org.apache.cloudstack.api.admin.zone.command.CreateZoneCmd; import org.apache.cloudstack.api.admin.zone.command.UpdateZoneCmd; import org.apache.log4j.Logger; @@ -54,13 +57,10 @@ import com.cloud.alert.AlertManager; import org.apache.cloudstack.api.ApiConstants.LDAPParams; import com.cloud.api.ApiDBUtils; import org.apache.cloudstack.api.admin.network.command.CreateNetworkOfferingCmd; -import com.cloud.api.commands.CreateVlanIpRangeCmd; import org.apache.cloudstack.api.admin.offering.command.DeleteDiskOfferingCmd; import org.apache.cloudstack.api.admin.offering.command.DeleteServiceOfferingCmd; -import com.cloud.api.commands.DeleteVlanIpRangeCmd; +import org.apache.cloudstack.api.admin.vlan.command.DeleteVlanIpRangeCmd; import org.apache.cloudstack.api.admin.zone.command.DeleteZoneCmd; -import com.cloud.api.commands.LDAPConfigCmd; -import com.cloud.api.commands.LDAPRemoveCmd; import org.apache.cloudstack.api.user.network.command.ListNetworkOfferingsCmd; import org.apache.cloudstack.api.admin.offering.command.UpdateDiskOfferingCmd; import org.apache.cloudstack.api.admin.offering.command.UpdateServiceOfferingCmd; diff --git a/server/src/com/cloud/resource/ResourceManagerImpl.java b/server/src/com/cloud/resource/ResourceManagerImpl.java index 7a4c3dbad59..10f0ea962c0 100755 --- a/server/src/com/cloud/resource/ResourceManagerImpl.java +++ b/server/src/com/cloud/resource/ResourceManagerImpl.java @@ -32,6 +32,7 @@ import javax.naming.ConfigurationException; import org.apache.cloudstack.api.admin.cluster.command.AddClusterCmd; import org.apache.cloudstack.api.admin.host.command.*; +import org.apache.cloudstack.api.admin.swift.command.AddSwiftCmd; import org.apache.log4j.Logger; import com.cloud.agent.AgentManager; @@ -52,10 +53,9 @@ import org.apache.cloudstack.api.ApiConstants; import com.cloud.api.ApiDBUtils; import org.apache.cloudstack.api.admin.host.command.AddHostCmd; import org.apache.cloudstack.api.admin.host.command.AddSecondaryStorageCmd; -import com.cloud.api.commands.AddSwiftCmd; import org.apache.cloudstack.api.admin.host.command.CancelMaintenanceCmd; import org.apache.cloudstack.api.admin.cluster.command.DeleteClusterCmd; -import com.cloud.api.commands.ListSwiftsCmd; +import org.apache.cloudstack.api.admin.swift.command.ListSwiftsCmd; import org.apache.cloudstack.api.admin.host.command.PrepareForMaintenanceCmd; import org.apache.cloudstack.api.admin.host.command.UpdateHostCmd; import com.cloud.capacity.Capacity; diff --git a/server/src/com/cloud/server/ManagementServerImpl.java b/server/src/com/cloud/server/ManagementServerImpl.java index 44458b13ddd..1d7c486656a 100755 --- a/server/src/com/cloud/server/ManagementServerImpl.java +++ b/server/src/com/cloud/server/ManagementServerImpl.java @@ -87,7 +87,7 @@ import org.apache.cloudstack.api.user.address.command.ListPublicIpAddressesCmd; import org.apache.cloudstack.api.user.ssh.command.ListSSHKeyPairsCmd; import org.apache.cloudstack.api.admin.storagepool.command.ListStoragePoolsCmd; import org.apache.cloudstack.api.admin.systemvm.command.ListSystemVMsCmd; -import com.cloud.api.commands.ListVlanIpRangesCmd; +import org.apache.cloudstack.api.admin.vlan.command.ListVlanIpRangesCmd; import org.apache.cloudstack.api.admin.systemvm.command.RebootSystemVmCmd; import org.apache.cloudstack.api.admin.systemvm.command.StopSystemVmCmd; import org.apache.cloudstack.api.admin.domain.command.UpdateDomainCmd; diff --git a/server/src/com/cloud/storage/swift/SwiftManager.java b/server/src/com/cloud/storage/swift/SwiftManager.java index a1bd42df611..075c985defa 100644 --- a/server/src/com/cloud/storage/swift/SwiftManager.java +++ b/server/src/com/cloud/storage/swift/SwiftManager.java @@ -19,10 +19,10 @@ package com.cloud.storage.swift; import java.util.List; import com.cloud.agent.api.to.SwiftTO; -import com.cloud.api.commands.AddSwiftCmd; +import org.apache.cloudstack.api.admin.swift.command.AddSwiftCmd; +import org.apache.cloudstack.api.admin.swift.command.ListSwiftsCmd; import org.apache.cloudstack.api.user.iso.command.DeleteIsoCmd; import org.apache.cloudstack.api.user.template.command.DeleteTemplateCmd; -import com.cloud.api.commands.ListSwiftsCmd; import com.cloud.exception.DiscoveryException; import com.cloud.storage.Swift; import com.cloud.storage.SwiftVO; diff --git a/server/src/com/cloud/storage/swift/SwiftManagerImpl.java b/server/src/com/cloud/storage/swift/SwiftManagerImpl.java index 1708193bd0b..e83d6cbb017 100644 --- a/server/src/com/cloud/storage/swift/SwiftManagerImpl.java +++ b/server/src/com/cloud/storage/swift/SwiftManagerImpl.java @@ -25,6 +25,7 @@ import java.util.Map; import javax.ejb.Local; import javax.naming.ConfigurationException; +import org.apache.cloudstack.api.admin.swift.command.ListSwiftsCmd; import org.apache.cloudstack.api.user.iso.command.DeleteIsoCmd; import org.apache.cloudstack.api.user.template.command.DeleteTemplateCmd; import org.apache.log4j.Logger; @@ -33,8 +34,7 @@ import com.cloud.agent.AgentManager; import com.cloud.agent.api.Answer; import com.cloud.agent.api.DeleteObjectFromSwiftCommand; import com.cloud.agent.api.to.SwiftTO; -import com.cloud.api.commands.AddSwiftCmd; -import com.cloud.api.commands.ListSwiftsCmd; +import org.apache.cloudstack.api.admin.swift.command.AddSwiftCmd; import com.cloud.configuration.Config; import com.cloud.configuration.dao.ConfigurationDao; import com.cloud.dc.DataCenterVO; diff --git a/server/test/com/cloud/vpc/MockConfigurationManagerImpl.java b/server/test/com/cloud/vpc/MockConfigurationManagerImpl.java index 291d08ed834..c303cfb5435 100644 --- a/server/test/com/cloud/vpc/MockConfigurationManagerImpl.java +++ b/server/test/com/cloud/vpc/MockConfigurationManagerImpl.java @@ -28,18 +28,18 @@ import org.apache.cloudstack.api.admin.offering.command.CreateDiskOfferingCmd; import org.apache.cloudstack.api.admin.config.command.UpdateCfgCmd; import org.apache.cloudstack.api.admin.network.command.CreateNetworkOfferingCmd; import org.apache.cloudstack.api.admin.offering.command.CreateServiceOfferingCmd; -import com.cloud.api.commands.CreateVlanIpRangeCmd; +import org.apache.cloudstack.api.admin.vlan.command.CreateVlanIpRangeCmd; import org.apache.cloudstack.api.admin.offering.command.DeleteDiskOfferingCmd; import org.apache.cloudstack.api.admin.offering.command.UpdateServiceOfferingCmd; import org.apache.cloudstack.api.admin.pod.command.UpdatePodCmd; +import org.apache.cloudstack.api.admin.vlan.command.DeleteVlanIpRangeCmd; import org.apache.cloudstack.api.admin.zone.command.CreateZoneCmd; import org.apache.cloudstack.api.admin.network.command.DeleteNetworkOfferingCmd; import org.apache.cloudstack.api.admin.pod.command.DeletePodCmd; import org.apache.cloudstack.api.admin.offering.command.DeleteServiceOfferingCmd; -import com.cloud.api.commands.DeleteVlanIpRangeCmd; import org.apache.cloudstack.api.admin.zone.command.DeleteZoneCmd; -import com.cloud.api.commands.LDAPConfigCmd; -import com.cloud.api.commands.LDAPRemoveCmd; +import org.apache.cloudstack.api.admin.ldap.command.LDAPConfigCmd; +import org.apache.cloudstack.api.admin.ldap.command.LDAPRemoveCmd; import org.apache.cloudstack.api.admin.zone.command.UpdateZoneCmd; import org.apache.cloudstack.api.user.network.command.ListNetworkOfferingsCmd; import org.apache.cloudstack.api.admin.offering.command.UpdateDiskOfferingCmd; From 089db9c6314a050cf0d09d4ad04f395f81caf609 Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Thu, 6 Dec 2012 11:25:56 -0800 Subject: [PATCH 068/421] api_refactor: capacity, hypvsr, alert and cert apis Signed-off-by: Rohit Yadav --- api/src/com/cloud/server/ManagementService.java | 6 +++--- .../api/admin/resource/command}/ListAlertsCmd.java | 2 +- .../api/admin/resource/command}/ListCapacityCmd.java | 2 +- .../resource/command}/UploadCustomCertificateCmd.java | 2 +- .../command/ListHypervisorsCmd.java | 2 +- client/tomcatconf/commands.properties.in | 8 ++++---- server/src/com/cloud/server/ManagementServerImpl.java | 6 +++--- 7 files changed, 14 insertions(+), 14 deletions(-) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/admin/resource/command}/ListAlertsCmd.java (98%) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/admin/resource/command}/ListCapacityCmd.java (99%) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/admin/resource/command}/UploadCustomCertificateCmd.java (98%) rename api/src/org/apache/cloudstack/api/user/{hypervisor => resource}/command/ListHypervisorsCmd.java (98%) diff --git a/api/src/com/cloud/server/ManagementService.java b/api/src/com/cloud/server/ManagementService.java index db5f8bac138..5ee90543a70 100755 --- a/api/src/com/cloud/server/ManagementService.java +++ b/api/src/com/cloud/server/ManagementService.java @@ -28,6 +28,8 @@ import org.apache.cloudstack.api.admin.cluster.command.ListClustersCmd; import org.apache.cloudstack.api.admin.host.command.ListHostsCmd; import org.apache.cloudstack.api.admin.host.command.UpdateHostPasswordCmd; import org.apache.cloudstack.api.admin.pod.command.ListPodsByCmd; +import org.apache.cloudstack.api.admin.resource.command.ListAlertsCmd; +import org.apache.cloudstack.api.admin.resource.command.ListCapacityCmd; import org.apache.cloudstack.api.admin.router.command.ListRoutersCmd; import org.apache.cloudstack.api.user.address.command.ListPublicIpAddressesCmd; import org.apache.cloudstack.api.user.config.command.ListCapabilitiesCmd; @@ -41,9 +43,7 @@ import org.apache.cloudstack.api.user.volume.command.ExtractVolumeCmd; import org.apache.cloudstack.api.user.template.command.ListTemplatesCmd; import org.apache.cloudstack.api.user.template.command.UpdateTemplateCmd; import org.apache.cloudstack.api.user.vm.command.GetVMPasswordCmd; -import com.cloud.api.commands.ListAlertsCmd; import org.apache.cloudstack.api.user.job.command.ListAsyncJobsCmd; -import com.cloud.api.commands.ListCapacityCmd; import org.apache.cloudstack.api.admin.config.command.ListCfgsByCmd; import org.apache.cloudstack.api.user.event.command.ListEventsCmd; import org.apache.cloudstack.api.user.guest.command.ListGuestOsCategoriesCmd; @@ -61,7 +61,7 @@ import org.apache.cloudstack.api.admin.domain.command.UpdateDomainCmd; import org.apache.cloudstack.api.user.iso.command.UpdateIsoCmd; import org.apache.cloudstack.api.user.vmgroup.command.UpdateVMGroupCmd; import org.apache.cloudstack.api.admin.systemvm.command.UpgradeSystemVMCmd; -import com.cloud.api.commands.UploadCustomCertificateCmd; +import org.apache.cloudstack.api.admin.resource.command.UploadCustomCertificateCmd; import com.cloud.api.view.vo.DomainRouterJoinVO; import com.cloud.async.AsyncJob; import com.cloud.capacity.Capacity; diff --git a/api/src/com/cloud/api/commands/ListAlertsCmd.java b/api/src/org/apache/cloudstack/api/admin/resource/command/ListAlertsCmd.java similarity index 98% rename from api/src/com/cloud/api/commands/ListAlertsCmd.java rename to api/src/org/apache/cloudstack/api/admin/resource/command/ListAlertsCmd.java index 00ee59f3826..d82e4569638 100644 --- a/api/src/com/cloud/api/commands/ListAlertsCmd.java +++ b/api/src/org/apache/cloudstack/api/admin/resource/command/ListAlertsCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.admin.resource.command; import java.util.ArrayList; import java.util.List; diff --git a/api/src/com/cloud/api/commands/ListCapacityCmd.java b/api/src/org/apache/cloudstack/api/admin/resource/command/ListCapacityCmd.java similarity index 99% rename from api/src/com/cloud/api/commands/ListCapacityCmd.java rename to api/src/org/apache/cloudstack/api/admin/resource/command/ListCapacityCmd.java index ecb590aa678..39cbddfbc7e 100755 --- a/api/src/com/cloud/api/commands/ListCapacityCmd.java +++ b/api/src/org/apache/cloudstack/api/admin/resource/command/ListCapacityCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.admin.resource.command; import java.text.DecimalFormat; import java.util.List; diff --git a/api/src/com/cloud/api/commands/UploadCustomCertificateCmd.java b/api/src/org/apache/cloudstack/api/admin/resource/command/UploadCustomCertificateCmd.java similarity index 98% rename from api/src/com/cloud/api/commands/UploadCustomCertificateCmd.java rename to api/src/org/apache/cloudstack/api/admin/resource/command/UploadCustomCertificateCmd.java index d297dfa2a2f..76be280c8ff 100644 --- a/api/src/com/cloud/api/commands/UploadCustomCertificateCmd.java +++ b/api/src/org/apache/cloudstack/api/admin/resource/command/UploadCustomCertificateCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.admin.resource.command; import org.apache.log4j.Logger; diff --git a/api/src/org/apache/cloudstack/api/user/hypervisor/command/ListHypervisorsCmd.java b/api/src/org/apache/cloudstack/api/user/resource/command/ListHypervisorsCmd.java similarity index 98% rename from api/src/org/apache/cloudstack/api/user/hypervisor/command/ListHypervisorsCmd.java rename to api/src/org/apache/cloudstack/api/user/resource/command/ListHypervisorsCmd.java index 2055f9979f3..2f78aa8afd2 100644 --- a/api/src/org/apache/cloudstack/api/user/hypervisor/command/ListHypervisorsCmd.java +++ b/api/src/org/apache/cloudstack/api/user/resource/command/ListHypervisorsCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.user.hypervisor.command; +package org.apache.cloudstack.api.user.resource.command; import java.util.ArrayList; import java.util.List; diff --git a/client/tomcatconf/commands.properties.in b/client/tomcatconf/commands.properties.in index d825505bd78..db5a13438d6 100755 --- a/client/tomcatconf/commands.properties.in +++ b/client/tomcatconf/commands.properties.in @@ -219,10 +219,10 @@ listEvents=org.apache.cloudstack.api.user.event.command.ListEventsCmd;15 listEventTypes=org.apache.cloudstack.api.user.event.command.ListEventTypesCmd;15 #### alerts commands -listAlerts=com.cloud.api.commands.ListAlertsCmd;3 +listAlerts=org.apache.cloudstack.api.admin.resource.command.ListAlertsCmd;3 #### system capacity commands -listCapacity=com.cloud.api.commands.ListCapacityCmd;3 +listCapacity=org.apache.cloudstack.api.admin.resource.command.ListCapacityCmd;3 #### swift commands^M addSwift=org.apache.cloudstack.api.admin.swift.command.AddSwiftCmd;1 @@ -288,10 +288,10 @@ updateInstanceGroup=org.apache.cloudstack.api.user.vmgroup.command.UpdateVMGroup listInstanceGroups=org.apache.cloudstack.api.user.vmgroup.command.ListVMGroupsCmd;15 ### Certificate commands -uploadCustomCertificate=com.cloud.api.commands.UploadCustomCertificateCmd;1 +uploadCustomCertificate=org.apache.cloudstack.api.admin.resource.command.UploadCustomCertificateCmd;1 ### other commands -listHypervisors=org.apache.cloudstack.api.user.hypervisor.command.ListHypervisorsCmd;15 +listHypervisors=org.apache.cloudstack.api.user.resource.command.ListHypervisorsCmd;15 ### VPN createRemoteAccessVpn=org.apache.cloudstack.api.user.vpn.command.CreateRemoteAccessVpnCmd;15 diff --git a/server/src/com/cloud/server/ManagementServerImpl.java b/server/src/com/cloud/server/ManagementServerImpl.java index 1d7c486656a..fba6ac9828c 100755 --- a/server/src/com/cloud/server/ManagementServerImpl.java +++ b/server/src/com/cloud/server/ManagementServerImpl.java @@ -44,6 +44,7 @@ import javax.crypto.spec.SecretKeySpec; import org.apache.cloudstack.api.admin.cluster.command.ListClustersCmd; import org.apache.cloudstack.api.admin.config.command.ListCfgsByCmd; +import org.apache.cloudstack.api.admin.resource.command.ListAlertsCmd; import org.apache.cloudstack.api.admin.router.command.ListRoutersCmd; import org.apache.cloudstack.api.user.config.command.ListCapabilitiesCmd; import org.apache.cloudstack.api.user.guest.command.ListGuestOsCategoriesCmd; @@ -78,8 +79,7 @@ import org.apache.cloudstack.api.user.ssh.command.CreateSSHKeyPairCmd; import org.apache.cloudstack.api.admin.systemvm.command.DestroySystemVmCmd; import org.apache.cloudstack.api.user.volume.command.ExtractVolumeCmd; import org.apache.cloudstack.api.user.vm.command.GetVMPasswordCmd; -import com.cloud.api.commands.ListAlertsCmd; -import com.cloud.api.commands.ListCapacityCmd; +import org.apache.cloudstack.api.admin.resource.command.ListCapacityCmd; import org.apache.cloudstack.api.user.event.command.ListEventsCmd; import org.apache.cloudstack.api.admin.host.command.ListHostsCmd; import org.apache.cloudstack.api.admin.pod.command.ListPodsByCmd; @@ -96,7 +96,7 @@ import org.apache.cloudstack.api.user.iso.command.UpdateIsoCmd; import com.cloud.api.commands.UpdateTemplateOrIsoCmd; import org.apache.cloudstack.api.user.vmgroup.command.UpdateVMGroupCmd; import org.apache.cloudstack.api.admin.systemvm.command.UpgradeSystemVMCmd; -import com.cloud.api.commands.UploadCustomCertificateCmd; +import org.apache.cloudstack.api.admin.resource.command.UploadCustomCertificateCmd; import com.cloud.api.response.ExtractResponse; import com.cloud.api.view.vo.DomainRouterJoinVO; import com.cloud.async.AsyncJob; From 5d998a616bdce93375794439e4a8171bf946b414 Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Thu, 6 Dec 2012 11:32:10 -0800 Subject: [PATCH 069/421] api_refactor: move forgotten apis, uncomment and fix mappings Signed-off-by: Rohit Yadav --- .../api/admin/account/command}/LockAccountCmd.java | 2 +- .../cloudstack/api/admin/user/command}/LockUserCmd.java | 2 +- .../user/firewall/command}/UpdatePortForwardingRuleCmd.java | 2 +- client/tomcatconf/commands.properties.in | 6 +++--- 4 files changed, 6 insertions(+), 6 deletions(-) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/admin/account/command}/LockAccountCmd.java (98%) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/admin/user/command}/LockUserCmd.java (98%) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/user/firewall/command}/UpdatePortForwardingRuleCmd.java (98%) diff --git a/api/src/com/cloud/api/commands/LockAccountCmd.java b/api/src/org/apache/cloudstack/api/admin/account/command/LockAccountCmd.java similarity index 98% rename from api/src/com/cloud/api/commands/LockAccountCmd.java rename to api/src/org/apache/cloudstack/api/admin/account/command/LockAccountCmd.java index 9cb075f9efb..a8a06f089df 100644 --- a/api/src/com/cloud/api/commands/LockAccountCmd.java +++ b/api/src/org/apache/cloudstack/api/admin/account/command/LockAccountCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.admin.account.command; import org.apache.log4j.Logger; diff --git a/api/src/com/cloud/api/commands/LockUserCmd.java b/api/src/org/apache/cloudstack/api/admin/user/command/LockUserCmd.java similarity index 98% rename from api/src/com/cloud/api/commands/LockUserCmd.java rename to api/src/org/apache/cloudstack/api/admin/user/command/LockUserCmd.java index 7ce4efe650c..8215fd5734e 100644 --- a/api/src/com/cloud/api/commands/LockUserCmd.java +++ b/api/src/org/apache/cloudstack/api/admin/user/command/LockUserCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.admin.user.command; import org.apache.log4j.Logger; diff --git a/api/src/com/cloud/api/commands/UpdatePortForwardingRuleCmd.java b/api/src/org/apache/cloudstack/api/user/firewall/command/UpdatePortForwardingRuleCmd.java similarity index 98% rename from api/src/com/cloud/api/commands/UpdatePortForwardingRuleCmd.java rename to api/src/org/apache/cloudstack/api/user/firewall/command/UpdatePortForwardingRuleCmd.java index 52668973cb3..654e6af6259 100644 --- a/api/src/com/cloud/api/commands/UpdatePortForwardingRuleCmd.java +++ b/api/src/org/apache/cloudstack/api/user/firewall/command/UpdatePortForwardingRuleCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.user.firewall.command; import org.apache.log4j.Logger; diff --git a/client/tomcatconf/commands.properties.in b/client/tomcatconf/commands.properties.in index db5a13438d6..d03937fa979 100755 --- a/client/tomcatconf/commands.properties.in +++ b/client/tomcatconf/commands.properties.in @@ -24,7 +24,7 @@ deleteAccount=org.apache.cloudstack.api.admin.account.command.DeleteAccountCmd;3 updateAccount=org.apache.cloudstack.api.admin.account.command.UpdateAccountCmd;3 disableAccount=org.apache.cloudstack.api.admin.account.command.DisableAccountCmd;7 enableAccount=org.apache.cloudstack.api.admin.account.command.EnableAccountCmd;7 -###lockAccount=com.cloud.api.commands.LockAccountCmd;7 +lockAccount=org.apache.cloudstack.api.admin.account.command.LockAccountCmd;7 listAccounts=org.apache.cloudstack.api.user.account.command.ListAccountsCmd;15 markDefaultZoneForAccount=org.apache.cloudstack.api.admin.zone.command.MarkDefaultZoneForAccountCmd;1 @@ -33,7 +33,7 @@ createUser=org.apache.cloudstack.api.admin.user.command.CreateUserCmd;3 deleteUser=org.apache.cloudstack.api.admin.user.command.DeleteUserCmd;3 updateUser=org.apache.cloudstack.api.admin.user.command.UpdateUserCmd;3 listUsers=org.apache.cloudstack.api.admin.user.command.ListUsersCmd;7 -####lockUser=com.cloud.api.commands.LockUserCmd;7 +lockUser=org.apache.cloudstack.api.admin.user.command.LockUserCmd;7 disableUser=org.apache.cloudstack.api.admin.user.command.DisableUserCmd;7 enableUser=org.apache.cloudstack.api.admin.user.command.EnableUserCmd;7 getUser=org.apache.cloudstack.api.admin.user.command.GetUserCmd;1 @@ -132,7 +132,7 @@ listPublicIpAddresses=org.apache.cloudstack.api.user.address.command.ListPublicI listPortForwardingRules=org.apache.cloudstack.api.user.firewall.command.ListPortForwardingRulesCmd;15 createPortForwardingRule=org.apache.cloudstack.api.user.firewall.command.CreatePortForwardingRuleCmd;15 deletePortForwardingRule=org.apache.cloudstack.api.user.firewall.command.DeletePortForwardingRuleCmd;15 -#### updatePortForwardingRule=com.cloud.api.commands.UpdatePortForwardingRuleCmd;15 +updatePortForwardingRule=org.apache.cloudstack.api.user.firewall.command.UpdatePortForwardingRuleCmd;15 #### NAT commands enableStaticNat=org.apache.cloudstack.api.user.nat.command.EnableStaticNatCmd;15 From da6e81aa210dc8f8c7ac1d0693258df6ed453733 Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Thu, 6 Dec 2012 13:48:20 -0800 Subject: [PATCH 070/421] api_refactoring: Fix build issues and incorrect imports Signed-off-by: Rohit Yadav --- .../com/cloud/network/security/SecurityGroup.java | 2 +- .../network/command/DeleteNetworkDeviceCmd.java | 2 +- .../admin/network/command/ListNetworkDeviceCmd.java | 4 ++-- .../cloudstack/api/user/vm/command/DeployVMCmd.java | 1 + .../cloud/api/commands/test/ListRoutersCmdTest.java | 7 +++---- .../com/cloud/api/commands/test/ListVmsCmdTest.java | 12 ++++++------ server/src/com/cloud/api/ApiDBUtils.java | 3 +-- server/src/com/cloud/host/dao/HostDaoImpl.java | 2 +- server/src/com/cloud/vm/dao/UserVmJoinDao.java | 2 +- server/src/com/cloud/vm/dao/UserVmJoinDaoImpl.java | 2 +- 10 files changed, 18 insertions(+), 19 deletions(-) diff --git a/api/src/com/cloud/network/security/SecurityGroup.java b/api/src/com/cloud/network/security/SecurityGroup.java index db9d043694b..f6817d7188a 100644 --- a/api/src/com/cloud/network/security/SecurityGroup.java +++ b/api/src/com/cloud/network/security/SecurityGroup.java @@ -18,7 +18,7 @@ package com.cloud.network.security; import com.cloud.acl.ControlledEntity; -@doc("") +//FIXME: Annotation @doc("") public interface SecurityGroup extends ControlledEntity { long getId(); diff --git a/api/src/org/apache/cloudstack/api/admin/network/command/DeleteNetworkDeviceCmd.java b/api/src/org/apache/cloudstack/api/admin/network/command/DeleteNetworkDeviceCmd.java index 491e49a50c0..d01b774642b 100644 --- a/api/src/org/apache/cloudstack/api/admin/network/command/DeleteNetworkDeviceCmd.java +++ b/api/src/org/apache/cloudstack/api/admin/network/command/DeleteNetworkDeviceCmd.java @@ -24,13 +24,13 @@ import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; +import org.apache.cloudstack.network.ExternalNetworkDeviceManager; import com.cloud.api.response.SuccessResponse; import com.cloud.exception.ConcurrentOperationException; import com.cloud.exception.InsufficientCapacityException; import com.cloud.exception.InvalidParameterValueException; import com.cloud.exception.ResourceAllocationException; import com.cloud.exception.ResourceUnavailableException; -import com.cloud.network.ExternalNetworkDeviceManager; import com.cloud.server.ManagementService; import com.cloud.utils.component.ComponentLocator; import com.cloud.utils.exception.CloudRuntimeException; diff --git a/api/src/org/apache/cloudstack/api/admin/network/command/ListNetworkDeviceCmd.java b/api/src/org/apache/cloudstack/api/admin/network/command/ListNetworkDeviceCmd.java index 65c9e1cb871..21e0e6df327 100644 --- a/api/src/org/apache/cloudstack/api/admin/network/command/ListNetworkDeviceCmd.java +++ b/api/src/org/apache/cloudstack/api/admin/network/command/ListNetworkDeviceCmd.java @@ -28,6 +28,8 @@ import org.apache.cloudstack.api.BaseListCmd; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; +import org.apache.cloudstack.network.ExternalNetworkDeviceManager; +import org.apache.cloudstack.api.admin.network.response.NetworkDeviceResponse; import com.cloud.api.response.ListResponse; import com.cloud.exception.ConcurrentOperationException; import com.cloud.exception.InsufficientCapacityException; @@ -35,9 +37,7 @@ import com.cloud.exception.InvalidParameterValueException; import com.cloud.exception.ResourceAllocationException; import com.cloud.exception.ResourceUnavailableException; import com.cloud.host.Host; -import com.cloud.network.ExternalNetworkDeviceManager; import com.cloud.server.ManagementService; -import com.cloud.server.api.response.NetworkDeviceResponse; import com.cloud.utils.component.ComponentLocator; import com.cloud.utils.exception.CloudRuntimeException; diff --git a/api/src/org/apache/cloudstack/api/user/vm/command/DeployVMCmd.java b/api/src/org/apache/cloudstack/api/user/vm/command/DeployVMCmd.java index b06241d285f..ac67297071e 100644 --- a/api/src/org/apache/cloudstack/api/user/vm/command/DeployVMCmd.java +++ b/api/src/org/apache/cloudstack/api/user/vm/command/DeployVMCmd.java @@ -38,6 +38,7 @@ import com.cloud.api.response.UserVmResponse; import com.cloud.async.AsyncJob; import com.cloud.dc.DataCenter; import com.cloud.dc.DataCenter.NetworkType; +import com.cloud.domain.Domain; import com.cloud.event.EventTypes; import com.cloud.exception.ConcurrentOperationException; import com.cloud.exception.InsufficientCapacityException; diff --git a/api/test/src/com/cloud/api/commands/test/ListRoutersCmdTest.java b/api/test/src/com/cloud/api/commands/test/ListRoutersCmdTest.java index d922474e743..64039f1c7c4 100644 --- a/api/test/src/com/cloud/api/commands/test/ListRoutersCmdTest.java +++ b/api/test/src/com/cloud/api/commands/test/ListRoutersCmdTest.java @@ -29,10 +29,9 @@ 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 org.apache.cloudstack.api.ResponseGenerator; +import org.apache.cloudstack.api.ServerApiException; +import org.apache.cloudstack.api.admin.router.command.ListRoutersCmd; import com.cloud.api.response.DomainRouterResponse; import com.cloud.api.response.ListResponse; import com.cloud.api.view.vo.DomainRouterJoinVO; diff --git a/api/test/src/com/cloud/api/commands/test/ListVmsCmdTest.java b/api/test/src/com/cloud/api/commands/test/ListVmsCmdTest.java index ca6d95e2d71..19ce047d241 100644 --- a/api/test/src/com/cloud/api/commands/test/ListVmsCmdTest.java +++ b/api/test/src/com/cloud/api/commands/test/ListVmsCmdTest.java @@ -32,12 +32,12 @@ 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 org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiConstants.VMDetails; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.ResponseGenerator; +import org.apache.cloudstack.api.ServerApiException; +import org.apache.cloudstack.api.user.vm.command.ListVMsCmd; import com.cloud.api.response.ListResponse; import com.cloud.api.response.UserVmResponse; import com.cloud.api.view.vo.UserVmJoinVO; diff --git a/server/src/com/cloud/api/ApiDBUtils.java b/server/src/com/cloud/api/ApiDBUtils.java index 5dc24129b9f..a98c5d3557a 100755 --- a/server/src/com/cloud/api/ApiDBUtils.java +++ b/server/src/com/cloud/api/ApiDBUtils.java @@ -896,8 +896,7 @@ public class ApiDBUtils { public static CounterVO getCounter(long counterId) { return _counterDao.findById(counterId); - }} - + } /////////////////////////////////////////////////////////////////////// // Newly Added Utility Methods for List API refactoring // diff --git a/server/src/com/cloud/host/dao/HostDaoImpl.java b/server/src/com/cloud/host/dao/HostDaoImpl.java index 05d5b4bac73..0881675dda7 100755 --- a/server/src/com/cloud/host/dao/HostDaoImpl.java +++ b/server/src/com/cloud/host/dao/HostDaoImpl.java @@ -63,7 +63,7 @@ import com.cloud.utils.exception.CloudRuntimeException; @Local(value = { HostDao.class }) @DB(txn = false) @TableGenerator(name = "host_req_sq", table = "op_host", pkColumnName = "id", valueColumnName = "sequence", allocationSize = 1) -public class HostDaoImpl extends GenericDaoBase implements HostDao, ExternalIdDao { +public class HostDaoImpl extends GenericDaoBase implements HostDao { //FIXME: , ExternalIdDao { private static final Logger s_logger = Logger.getLogger(HostDaoImpl.class); private static final Logger status_logger = Logger.getLogger(Status.class); private static final Logger state_logger = Logger.getLogger(ResourceState.class); diff --git a/server/src/com/cloud/vm/dao/UserVmJoinDao.java b/server/src/com/cloud/vm/dao/UserVmJoinDao.java index adeef63339d..057e043295f 100644 --- a/server/src/com/cloud/vm/dao/UserVmJoinDao.java +++ b/server/src/com/cloud/vm/dao/UserVmJoinDao.java @@ -19,7 +19,7 @@ package com.cloud.vm.dao; import java.util.EnumSet; import java.util.List; -import com.cloud.api.ApiConstants.VMDetails; +import org.apache.cloudstack.api.ApiConstants.VMDetails; import com.cloud.api.response.UserVmResponse; import com.cloud.api.view.vo.UserVmJoinVO; import com.cloud.user.Account; diff --git a/server/src/com/cloud/vm/dao/UserVmJoinDaoImpl.java b/server/src/com/cloud/vm/dao/UserVmJoinDaoImpl.java index 5b7a2c15ac3..4df9f88e8eb 100644 --- a/server/src/com/cloud/vm/dao/UserVmJoinDaoImpl.java +++ b/server/src/com/cloud/vm/dao/UserVmJoinDaoImpl.java @@ -31,7 +31,7 @@ import javax.ejb.Local; import org.apache.log4j.Logger; import com.cloud.api.ApiDBUtils; -import com.cloud.api.ApiConstants.VMDetails; +import org.apache.cloudstack.api.ApiConstants.VMDetails; import com.cloud.api.response.NicResponse; import com.cloud.api.response.ResourceTagResponse; import com.cloud.api.response.SecurityGroupResponse; From 3d04bfcadc175c0130b80f9cbda214a9d710cc4a Mon Sep 17 00:00:00 2001 From: Fang Wang Date: Thu, 6 Dec 2012 13:43:26 -0800 Subject: [PATCH 071/421] api_refactoring: Add parameter annotation for admin zone group. Add the entityType to the parameter annotation. modified: api/src/org/apache/cloudstack/api/admin/zone/command/CreateZoneCmd.java modified: api/src/org/apache/cloudstack/api/admin/zone/command/DeleteZoneCmd.java modified: api/src/org/apache/cloudstack/api/admin/zone/command/MarkDefaultZoneForAccountCmd.java modified: api/src/org/apache/cloudstack/api/admin/zone/command/UpdateZoneCmd.java Signed-off-by: Rohit Yadav --- .../api/admin/zone/command/CreateZoneCmd.java | 6 ++++-- .../api/admin/zone/command/DeleteZoneCmd.java | 5 +++-- .../command/MarkDefaultZoneForAccountCmd.java | 15 +++++++++------ .../api/admin/zone/command/UpdateZoneCmd.java | 4 ++-- 4 files changed, 18 insertions(+), 12 deletions(-) diff --git a/api/src/org/apache/cloudstack/api/admin/zone/command/CreateZoneCmd.java b/api/src/org/apache/cloudstack/api/admin/zone/command/CreateZoneCmd.java index 30d288b88c8..64dfbeec88b 100755 --- a/api/src/org/apache/cloudstack/api/admin/zone/command/CreateZoneCmd.java +++ b/api/src/org/apache/cloudstack/api/admin/zone/command/CreateZoneCmd.java @@ -24,6 +24,8 @@ import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; + +import com.cloud.api.response.DomainResponse; import com.cloud.api.response.ZoneResponse; import com.cloud.dc.DataCenter; import com.cloud.user.Account; @@ -60,8 +62,8 @@ public class CreateZoneCmd extends BaseCmd { @Parameter(name=ApiConstants.DOMAIN, type=CommandType.STRING, description="Network domain name for the networks in the zone") private String domain; - @IdentityMapper(entityTableName="domain") - @Parameter(name=ApiConstants.DOMAIN_ID, type=CommandType.LONG, description="the ID of the containing domain, null for public zones") + //@IdentityMapper(entityTableName="domain") + @Parameter(name=ApiConstants.DOMAIN_ID, type=CommandType.LONG, description="the ID of the containing domain, null for public zones", entityType=DomainResponse.class) private Long domainId; @Parameter(name=ApiConstants.NETWORK_TYPE, type=CommandType.STRING, required=true, description="network type of the zone, can be Basic or Advanced") diff --git a/api/src/org/apache/cloudstack/api/admin/zone/command/DeleteZoneCmd.java b/api/src/org/apache/cloudstack/api/admin/zone/command/DeleteZoneCmd.java index 1144cb358e6..75770673588 100644 --- a/api/src/org/apache/cloudstack/api/admin/zone/command/DeleteZoneCmd.java +++ b/api/src/org/apache/cloudstack/api/admin/zone/command/DeleteZoneCmd.java @@ -25,6 +25,7 @@ import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; import com.cloud.api.response.SuccessResponse; +import com.cloud.api.response.ZoneResponse; import com.cloud.user.Account; import com.cloud.user.UserContext; @@ -38,8 +39,8 @@ public class DeleteZoneCmd extends BaseCmd { //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - @IdentityMapper(entityTableName="data_center") - @Parameter(name=ApiConstants.ID, type=CommandType.LONG, required=true, description="the ID of the Zone") + //@IdentityMapper(entityTableName="data_center") + @Parameter(name=ApiConstants.ID, type=CommandType.LONG, required=true, description="the ID of the Zone", entityType=ZoneResponse.class) private Long id; diff --git a/api/src/org/apache/cloudstack/api/admin/zone/command/MarkDefaultZoneForAccountCmd.java b/api/src/org/apache/cloudstack/api/admin/zone/command/MarkDefaultZoneForAccountCmd.java index fe130f7f219..fdb1d9cbbe6 100644 --- a/api/src/org/apache/cloudstack/api/admin/zone/command/MarkDefaultZoneForAccountCmd.java +++ b/api/src/org/apache/cloudstack/api/admin/zone/command/MarkDefaultZoneForAccountCmd.java @@ -28,6 +28,9 @@ import com.cloud.user.Account; import com.cloud.event.EventTypes; import com.cloud.async.AsyncJob; import com.cloud.api.response.AccountResponse; +import com.cloud.api.response.DomainResponse; +import com.cloud.api.response.ZoneResponse; + import org.apache.cloudstack.api.ServerApiException; import org.apache.cloudstack.api.BaseCmd; @@ -41,16 +44,16 @@ public class MarkDefaultZoneForAccountCmd extends BaseAsyncCmd { ////////////////API parameters ////////////////////// ///////////////////////////////////////////////////// - @IdentityMapper(entityTableName="account") - @Parameter(name=ApiConstants.ACCOUNT, type=CommandType.STRING, required=true, description="Name of the account that is to be marked.") + //@IdentityMapper(entityTableName="account") + @Parameter(name=ApiConstants.ACCOUNT, type=CommandType.STRING, required=true, description="Name of the account that is to be marked.", entityType=AccountResponse.class) private String accountName; - @IdentityMapper(entityTableName="domain") - @Parameter(name=ApiConstants.DOMAIN_ID, type=CommandType.LONG, required=true, description="Marks the account that belongs to the specified domain.") + //@IdentityMapper(entityTableName="domain") + @Parameter(name=ApiConstants.DOMAIN_ID, type=CommandType.LONG, required=true, description="Marks the account that belongs to the specified domain.", entityType=DomainResponse.class) private Long domainId; - @IdentityMapper(entityTableName="data_center") - @Parameter(name=ApiConstants.ZONE_ID, type=CommandType.LONG, required=true, description="The Zone ID with which the account is to be marked.") + //@IdentityMapper(entityTableName="data_center") + @Parameter(name=ApiConstants.ZONE_ID, type=CommandType.LONG, required=true, description="The Zone ID with which the account is to be marked.", entityType=ZoneResponse.class) private Long defaultZoneId; ///////////////////////////////////////////////////// diff --git a/api/src/org/apache/cloudstack/api/admin/zone/command/UpdateZoneCmd.java b/api/src/org/apache/cloudstack/api/admin/zone/command/UpdateZoneCmd.java index 59e715db297..f1e9f738f61 100755 --- a/api/src/org/apache/cloudstack/api/admin/zone/command/UpdateZoneCmd.java +++ b/api/src/org/apache/cloudstack/api/admin/zone/command/UpdateZoneCmd.java @@ -51,8 +51,8 @@ public class UpdateZoneCmd extends BaseCmd { @Parameter(name=ApiConstants.GUEST_CIDR_ADDRESS, type=CommandType.STRING, description="the guest CIDR address for the Zone") private String guestCidrAddress; - @IdentityMapper(entityTableName="data_center") - @Parameter(name=ApiConstants.ID, type=CommandType.LONG, required=true, description="the ID of the Zone") + //@IdentityMapper(entityTableName="data_center") + @Parameter(name=ApiConstants.ID, type=CommandType.LONG, required=true, description="the ID of the Zone", entityType=ZoneResponse.class) private Long id; @Parameter(name=ApiConstants.INTERNAL_DNS1, type=CommandType.STRING, description="the first internal DNS for the Zone") From eba353099ec09da656a2944e481c74c190880589 Mon Sep 17 00:00:00 2001 From: Min Chen Date: Thu, 6 Dec 2012 14:54:22 -0800 Subject: [PATCH 072/421] api_refactoring: Fix build issue with api_refactoring branch. Signed-off-by: Rohit Yadav --- .../cloud/api/response/UserVmResponse.java | 4 + server/src/com/cloud/api/ApiDispatcher.java | 107 +++++++++--------- .../network/as/AutoScaleManagerImpl.java | 2 +- 3 files changed, 60 insertions(+), 53 deletions(-) diff --git a/api/src/com/cloud/api/response/UserVmResponse.java b/api/src/com/cloud/api/response/UserVmResponse.java index 572d4ed2d11..0e0d5c60426 100755 --- a/api/src/com/cloud/api/response/UserVmResponse.java +++ b/api/src/com/cloud/api/response/UserVmResponse.java @@ -336,6 +336,10 @@ public class UserVmResponse extends BaseResponse implements ControlledEntityResp this.securityGroupList = securityGroups; } + public void addSecurityGroup(SecurityGroupResponse securityGroup){ + this.securityGroupList.add(securityGroup); + } + public void setProjectId(String projectId) { this.projectId = projectId; } diff --git a/server/src/com/cloud/api/ApiDispatcher.java b/server/src/com/cloud/api/ApiDispatcher.java index 40847ea7e9d..fc2b6256bb7 100755 --- a/server/src/com/cloud/api/ApiDispatcher.java +++ b/server/src/com/cloud/api/ApiDispatcher.java @@ -473,58 +473,61 @@ public class ApiDispatcher { //for maps, specify access to be checkd on key or value. if(parameterAnnotation.resourceType() != null){ - Class[] entity = parameterAnnotation.resourceType(); - - if(ControlledEntity.class.isAssignableFrom(entity)){ - if (s_logger.isDebugEnabled()) { - s_logger.debug("entity name is:" + entity.getName()); - } - - if(s_instance._daoNameMap.containsKey(entity.getName())){ - Class daoClass = s_instance._daoNameMap.get(entity.getName()); - GenericDao daoClassInstance = s_instance._locator.getDao(daoClass); - - //Check if the parameter type is a single Id or list of id's/name's - switch (fieldType) { - case LIST: - CommandType listType = parameterAnnotation.collectionType(); - switch (listType) { - case LONG: - List listParam = new ArrayList(); - listParam = (List)field.get(cmd); - - for(Long entityId : listParam){ - ControlledEntity entityObj = (ControlledEntity)daoClassInstance.findById(entityId); - entitiesToAccess.add(entityObj); - } - break; - /*case STRING: - List listParam = new ArrayList(); - listParam = (List)field.get(cmd); - for(String entityName: listParam){ - ControlledEntity entityObj = (ControlledEntity)daoClassInstance(entityId); - entitiesToAccess.add(entityObj); - } - break; - */ - default: - break; - } - break; - case LONG: - Long entityId = (Long)field.get(cmd); - ControlledEntity entityObj = (ControlledEntity)daoClassInstance.findById(entityId); - entitiesToAccess.add(entityObj); - break; - default: - break; - } - - - } - - } - + Class[] entityList = parameterAnnotation.resourceType(); + for (Class entity : entityList){ + if (ControlledEntity.class.isAssignableFrom(entity)) { + if (s_logger.isDebugEnabled()) { + s_logger.debug("entity name is:" + entity.getName()); + } + + if (s_instance._daoNameMap.containsKey(entity.getName())) { + Class daoClass = s_instance._daoNameMap.get(entity.getName()); + GenericDao daoClassInstance = s_instance._locator.getDao(daoClass); + + // Check if the parameter type is a single + // Id or list of id's/name's + switch (fieldType) { + case LIST: + CommandType listType = parameterAnnotation.collectionType(); + switch (listType) { + case LONG: + List listParam = new ArrayList(); + listParam = (List) field.get(cmd); + + for (Long entityId : listParam) { + ControlledEntity entityObj = (ControlledEntity) daoClassInstance.findById(entityId); + entitiesToAccess.add(entityObj); + } + break; + /* + * case STRING: List listParam = + * new ArrayList(); listParam = + * (List)field.get(cmd); for(String + * entityName: listParam){ + * ControlledEntity entityObj = + * (ControlledEntity + * )daoClassInstance(entityId); + * entitiesToAccess.add(entityObj); } + * break; + */ + default: + break; + } + break; + case LONG: + Long entityId = (Long) field.get(cmd); + ControlledEntity entityObj = (ControlledEntity) daoClassInstance.findById(entityId); + entitiesToAccess.add(entityObj); + break; + default: + break; + } + + } + + } + } + } } diff --git a/server/src/com/cloud/network/as/AutoScaleManagerImpl.java b/server/src/com/cloud/network/as/AutoScaleManagerImpl.java index 5673c37bba3..35b6c9beac1 100644 --- a/server/src/com/cloud/network/as/AutoScaleManagerImpl.java +++ b/server/src/com/cloud/network/as/AutoScaleManagerImpl.java @@ -353,7 +353,7 @@ public class AutoScaleManagerImpl implements AutoScaleManager, AutoScaleSe * For ex. if projectId is given as a string instead of an long value, this * will be throwing an error. */ - ApiDispatcher.setupParameters(new DeployVMCmd(), deployParams); + ApiDispatcher.setupParameters(new DeployVMCmd(), deployParams, new ArrayList()); if (autoscaleUserId == null) { autoscaleUserId = UserContext.current().getCallerUserId(); From 8a313d7f847f1f1a5aa1d61488e03d5977eb6f03 Mon Sep 17 00:00:00 2001 From: Min Chen Date: Thu, 6 Dec 2012 15:26:18 -0800 Subject: [PATCH 073/421] api: SecurityGroupResponse and SecurityGroupRuleResponse refactoring Signed-off-by: Rohit Yadav --- .../api/response/SecurityGroupResponse.java | 66 ++- .../response/SecurityGroupRuleResponse.java | 37 +- .../api/view/vo/SecurityGroupJoinVO.java | 466 ++++++++++++++++++ .../security/SecurityGroupService.java | 4 +- .../cloudstack/api/ResponseGenerator.java | 6 +- .../command/ListSecurityGroupsCmd.java | 12 +- server/src/com/cloud/api/ApiDBUtils.java | 21 + .../src/com/cloud/api/ApiResponseHelper.java | 142 ++---- server/src/com/cloud/api/ApiServer.java | 4 +- .../DefaultComponentLibrary.java | 2 + .../security/SecurityGroupManagerImpl.java | 93 ++-- .../security/dao/SecurityGroupJoinDao.java | 37 ++ .../dao/SecurityGroupJoinDaoImpl.java | 244 +++++++++ .../security/dao/SecurityGroupVMMapDao.java | 3 + .../dao/SecurityGroupVMMapDaoImpl.java | 9 + .../com/cloud/vm/dao/UserVmJoinDaoImpl.java | 16 +- 16 files changed, 971 insertions(+), 191 deletions(-) create mode 100644 api/src/com/cloud/api/view/vo/SecurityGroupJoinVO.java create mode 100644 server/src/com/cloud/network/security/dao/SecurityGroupJoinDao.java create mode 100644 server/src/com/cloud/network/security/dao/SecurityGroupJoinDaoImpl.java diff --git a/api/src/com/cloud/api/response/SecurityGroupResponse.java b/api/src/com/cloud/api/response/SecurityGroupResponse.java index e9931167499..c4a9b0f520f 100644 --- a/api/src/com/cloud/api/response/SecurityGroupResponse.java +++ b/api/src/com/cloud/api/response/SecurityGroupResponse.java @@ -16,7 +16,10 @@ // under the License. package com.cloud.api.response; +import java.util.ArrayList; +import java.util.HashSet; import java.util.List; +import java.util.Set; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.Entity; @@ -27,9 +30,10 @@ import com.google.gson.annotations.SerializedName; @SuppressWarnings("unused") @Entity(value = SecurityGroup.class) -public class SecurityGroupResponse extends BaseResponse implements ControlledEntityResponse{ +public class SecurityGroupResponse extends BaseResponse implements ControlledViewEntityResponse{ + @SerializedName(ApiConstants.ID) @Param(description="the ID of the security group") - private IdentityProxy id = new IdentityProxy("security_group"); + private String id; @SerializedName(ApiConstants.NAME) @Param(description="the name of the security group") private String name; @@ -41,34 +45,46 @@ public class SecurityGroupResponse extends BaseResponse implements ControlledEnt private String accountName; @SerializedName(ApiConstants.PROJECT_ID) @Param(description="the project id of the group") - private IdentityProxy projectId = new IdentityProxy("projects"); + private String projectId; @SerializedName(ApiConstants.PROJECT) @Param(description="the project name of the group") private String projectName; @SerializedName(ApiConstants.DOMAIN_ID) @Param(description="the domain ID of the security group") - private IdentityProxy domainId = new IdentityProxy("domain"); + private String domainId; @SerializedName(ApiConstants.DOMAIN) @Param(description="the domain name of the security group") private String domainName; @SerializedName("ingressrule") @Param(description="the list of ingress rules associated with the security group", responseObject = SecurityGroupRuleResponse.class) - private List ingressRules; + private Set ingressRules; @SerializedName("egressrule") @Param(description="the list of egress rules associated with the security group", responseObject = SecurityGroupRuleResponse.class) - private List egressRules; + private Set egressRules; @SerializedName(ApiConstants.TAGS) @Param(description="the list of resource tags associated with the rule", responseObject = ResourceTagResponse.class) - private List tags; + private Set tags; - public void setId(Long id) { - this.id.setValue(id); + public SecurityGroupResponse(){ + this.ingressRules = new HashSet(); + this.egressRules = new HashSet(); + this.tags = new HashSet(); } - public Long getId() { - return id.getValue(); + @Override + public String getObjectUuid() { + return this.getId(); } + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public void setName(String name) { this.name = name; } @@ -81,25 +97,29 @@ public class SecurityGroupResponse extends BaseResponse implements ControlledEnt this.accountName = accountName; } - public void setDomainId(Long domainId) { - this.domainId.setValue(domainId); + @Override + public void setDomainId(String domainId) { + this.domainId = domainId; } public void setDomainName(String domainName) { this.domainName = domainName; } - public void setSecurityGroupIngressRules(List securityGroupRules) { + public void setSecurityGroupIngressRules(Set securityGroupRules) { this.ingressRules = securityGroupRules; } - public void setSecurityGroupEgressRules(List securityGroupRules) { + public void addSecurityGroupIngressRule(SecurityGroupRuleResponse rule){ + this.ingressRules.add(rule); + } + + public void setSecurityGroupEgressRules(Set securityGroupRules) { this.egressRules = securityGroupRules; } - @Override - public Long getObjectId() { - return getId(); + public void addSecurityGroupEgressRule(SecurityGroupRuleResponse rule){ + this.egressRules.add(rule); } @Override @@ -128,8 +148,8 @@ public class SecurityGroupResponse extends BaseResponse implements ControlledEnt } @Override - public void setProjectId(Long projectId) { - this.projectId.setValue(projectId); + public void setProjectId(String projectId) { + this.projectId = projectId; } @Override @@ -137,7 +157,11 @@ public class SecurityGroupResponse extends BaseResponse implements ControlledEnt this.projectName = projectName; } - public void setTags(List tags) { + public void setTags(Set tags) { this.tags = tags; } + + public void addTag(ResourceTagResponse tag){ + this.tags.add(tag); + } } diff --git a/api/src/com/cloud/api/response/SecurityGroupRuleResponse.java b/api/src/com/cloud/api/response/SecurityGroupRuleResponse.java index abc3dea200d..8ef39b0260f 100644 --- a/api/src/com/cloud/api/response/SecurityGroupRuleResponse.java +++ b/api/src/com/cloud/api/response/SecurityGroupRuleResponse.java @@ -23,7 +23,7 @@ import com.google.gson.annotations.SerializedName; public class SecurityGroupRuleResponse extends BaseResponse { @SerializedName("ruleid") @Param(description="the id of the security group rule") - private IdentityProxy ruleId = new IdentityProxy("security_group_rule"); + private String ruleId; @SerializedName("protocol") @Param(description="the protocol of the security group rule") private String protocol; @@ -49,12 +49,12 @@ public class SecurityGroupRuleResponse extends BaseResponse { @SerializedName(ApiConstants.CIDR) @Param(description="the CIDR notation for the base IP address of the security group rule") private String cidr; - public Long getRuleId() { - return ruleId.getValue(); + public String getRuleId() { + return ruleId; } - public void setRuleId(Long ruleId) { - this.ruleId.setValue(ruleId); + public void setRuleId(String ruleId) { + this.ruleId = ruleId; } public String getProtocol() { @@ -120,4 +120,31 @@ public class SecurityGroupRuleResponse extends BaseResponse { public void setCidr(String cidr) { this.cidr = cidr; } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + String oid = this.getRuleId(); + result = prime * result + ((oid== null) ? 0 : oid.hashCode()); + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + SecurityGroupRuleResponse other = (SecurityGroupRuleResponse) obj; + String oid = this.getRuleId(); + if (oid == null) { + if (other.getRuleId() != null) + return false; + } else if (!oid.equals(other.getRuleId())) + return false; + return true; + } } diff --git a/api/src/com/cloud/api/view/vo/SecurityGroupJoinVO.java b/api/src/com/cloud/api/view/vo/SecurityGroupJoinVO.java new file mode 100644 index 00000000000..c679d3d99b2 --- /dev/null +++ b/api/src/com/cloud/api/view/vo/SecurityGroupJoinVO.java @@ -0,0 +1,466 @@ +// 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.network.security.SecurityRule.SecurityRuleType; +import com.cloud.server.ResourceTag.TaggedResourceType; +import com.cloud.utils.db.GenericDao; +import com.cloud.vm.VirtualMachine.State; + +@Entity +@Table(name="security_group_view") +public class SecurityGroupJoinVO implements ControlledViewEntity { + + @Column(name="id", updatable=false, nullable = false) + private long id; + + @Column(name="name") + private String name; + + @Column(name = "description") + private String description; + + @Column(name = "uuid") + private String uuid; + + @Column(name="account_id") + private long accountId; + + @Column(name="account_uuid") + private String accountUuid; + + @Column(name="account_name") + private String accountName = null; + + @Column(name="account_type") + private short accountType; + + @Column(name="domain_id") + private long domainId; + + @Column(name="domain_uuid") + private String domainUuid; + + @Column(name="domain_name") + private String domainName = null; + + @Column(name="domain_path") + private String domainPath = null; + + @Column(name="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 = "rule_id") + private Long ruleId; + + @Column(name = "rule_uuid") + private String ruleUuid; + + @Column(name = "rule_start_port") + private int ruleStartPort; + + @Column(name = "rule_end_port") + private int ruleEndPort; + + @Column(name = "rule_protocol") + private String ruleProtocol; + + @Column(name = "rule_type") + private String ruleType; + + @Column(name = "rule_allowed_network_id") + private Long ruleAllowedNetworkId = null; + + @Column(name = "rule_allowed_ip_cidr") + private String ruleAllowedSourceIpCidr = null; + + @Column(name="tag_id") + private long tagId; + + @Column(name="tag_uuid") + private String tagUuid; + + @Column(name="tag_key") + private String tagKey; + + @Column(name="tag_value") + private String tagValue; + + @Column(name="tag_domain_id") + private long tagDomainId; + + @Column(name="tag_account_id") + private long tagAccountId; + + @Column(name="tag_resource_id") + private long tagResourceId; + + @Column(name="tag_resource_uuid") + private String tagResourceUuid; + + @Column(name="tag_resource_type") + @Enumerated(value=EnumType.STRING) + private TaggedResourceType tagResourceType; + + @Column(name="tag_customer") + private String tagCustomer; + + public SecurityGroupJoinVO() { + } + + 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 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 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 String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + + public Long getRuleId() { + return ruleId; + } + + public void setRuleId(Long ruleId) { + this.ruleId = ruleId; + } + + public String getRuleUuid() { + return ruleUuid; + } + + public void setRuleUuid(String ruleUuid) { + this.ruleUuid = ruleUuid; + } + + public int getRuleStartPort() { + return ruleStartPort; + } + + public void setRuleStartPort(int ruleStartPort) { + this.ruleStartPort = ruleStartPort; + } + + public int getRuleEndPort() { + return ruleEndPort; + } + + public void setRuleEndPort(int ruleEndPort) { + this.ruleEndPort = ruleEndPort; + } + + public String getRuleProtocol() { + return ruleProtocol; + } + + public void setRuleProtocol(String ruleProtocol) { + this.ruleProtocol = ruleProtocol; + } + + public SecurityRuleType getRuleType() { + if ("ingress".equalsIgnoreCase(ruleType)) { + return SecurityRuleType.IngressRule; + } else { + return SecurityRuleType.EgressRule; + } + } + + public void setRuleType(String ruleType) { + this.ruleType = ruleType; + } + + public Long getRuleAllowedNetworkId() { + return ruleAllowedNetworkId; + } + + public void setRuleAllowedNetworkId(Long ruleAllowedNetworkId) { + this.ruleAllowedNetworkId = ruleAllowedNetworkId; + } + + public String getRuleAllowedSourceIpCidr() { + return ruleAllowedSourceIpCidr; + } + + public void setRuleAllowedSourceIpCidr(String ruleAllowedSourceIpCidr) { + this.ruleAllowedSourceIpCidr = ruleAllowedSourceIpCidr; + } + + public long getTagId() { + return tagId; + } + + public void setTagId(long tagId) { + this.tagId = tagId; + } + + public String getTagUuid() { + return tagUuid; + } + + public void setTagUuid(String tagUuid) { + this.tagUuid = tagUuid; + } + + public String getTagKey() { + return tagKey; + } + + public void setTagKey(String tagKey) { + this.tagKey = tagKey; + } + + public String getTagValue() { + return tagValue; + } + + public void setTagValue(String tagValue) { + this.tagValue = tagValue; + } + + public long getTagDomainId() { + return tagDomainId; + } + + public void setTagDomainId(long tagDomainId) { + this.tagDomainId = tagDomainId; + } + + public long getTagAccountId() { + return tagAccountId; + } + + public void setTagAccountId(long tagAccountId) { + this.tagAccountId = tagAccountId; + } + + public long getTagResourceId() { + return tagResourceId; + } + + public void setTagResourceId(long tagResourceId) { + this.tagResourceId = tagResourceId; + } + + public String getTagResourceUuid() { + return tagResourceUuid; + } + + public void setTagResourceUuid(String tagResourceUuid) { + this.tagResourceUuid = tagResourceUuid; + } + + public TaggedResourceType getTagResourceType() { + return tagResourceType; + } + + public void setTagResourceType(TaggedResourceType tagResourceType) { + this.tagResourceType = tagResourceType; + } + + public String getTagCustomer() { + return tagCustomer; + } + + public void setTagCustomer(String tagCustomer) { + this.tagCustomer = tagCustomer; + } + + @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; + SecurityGroupJoinVO other = (SecurityGroupJoinVO) obj; + if (id != other.id) + return false; + return true; + } +} diff --git a/api/src/com/cloud/network/security/SecurityGroupService.java b/api/src/com/cloud/network/security/SecurityGroupService.java index 51d26829667..640b9accd8a 100644 --- a/api/src/com/cloud/network/security/SecurityGroupService.java +++ b/api/src/com/cloud/network/security/SecurityGroupService.java @@ -24,6 +24,8 @@ import org.apache.cloudstack.api.user.securitygroup.command.CreateSecurityGroupC import com.cloud.exception.InvalidParameterValueException; import com.cloud.exception.PermissionDeniedException; import com.cloud.exception.ResourceInUseException; +import com.cloud.api.view.vo.SecurityGroupJoinVO; +import com.cloud.utils.Pair; public interface SecurityGroupService { /** @@ -42,7 +44,7 @@ public interface SecurityGroupService { * The search terms are specified in the search criteria. * @return the list of security groups and associated ingress rules */ - public List searchForSecurityGroupRules(ListSecurityGroupsCmd cmd) throws PermissionDeniedException, InvalidParameterValueException; + public Pair, Integer> searchForSecurityGroupRules(ListSecurityGroupsCmd cmd) throws PermissionDeniedException, InvalidParameterValueException; public List authorizeSecurityGroupIngress(AuthorizeSecurityGroupIngressCmd cmd); diff --git a/api/src/org/apache/cloudstack/api/ResponseGenerator.java b/api/src/org/apache/cloudstack/api/ResponseGenerator.java index aeafe6a665c..96df77e53a0 100755 --- a/api/src/org/apache/cloudstack/api/ResponseGenerator.java +++ b/api/src/org/apache/cloudstack/api/ResponseGenerator.java @@ -153,6 +153,7 @@ 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.SecurityGroupJoinVO; import com.cloud.api.view.vo.UserVmJoinVO; import com.cloud.vm.VirtualMachine; @@ -243,7 +244,10 @@ public interface ResponseGenerator { List createTemplateResponses(long templateId, Long snapshotId, Long volumeId, boolean readyOnly); - ListResponse createSecurityGroupResponses(List networkGroups); + //ListResponse createSecurityGroupResponses(List networkGroups); + + List createSecurityGroupResponses(List securityGroups); + SecurityGroupResponse createSecurityGroupResponseFromSecurityGroupRule(List SecurityRules); diff --git a/api/src/org/apache/cloudstack/api/user/securitygroup/command/ListSecurityGroupsCmd.java b/api/src/org/apache/cloudstack/api/user/securitygroup/command/ListSecurityGroupsCmd.java index 7b1be825f93..c2df28bf7dc 100644 --- a/api/src/org/apache/cloudstack/api/user/securitygroup/command/ListSecurityGroupsCmd.java +++ b/api/src/org/apache/cloudstack/api/user/securitygroup/command/ListSecurityGroupsCmd.java @@ -25,11 +25,14 @@ import org.apache.cloudstack.api.BaseListTaggedResourcesCmd; import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; +import com.cloud.api.response.DomainRouterResponse; import com.cloud.api.response.ListResponse; import com.cloud.api.response.SecurityGroupResponse; +import com.cloud.api.view.vo.DomainRouterJoinVO; +import com.cloud.api.view.vo.SecurityGroupJoinVO; import com.cloud.async.AsyncJob; import com.cloud.network.security.SecurityGroupRules; - +import com.cloud.utils.Pair; @Implementation(description="Lists security groups", responseObject=SecurityGroupResponse.class) public class ListSecurityGroupsCmd extends BaseListTaggedResourcesCmd { @@ -78,11 +81,12 @@ public class ListSecurityGroupsCmd extends BaseListTaggedResourcesCmd { @Override public void execute(){ - List securityGroups = _securityGroupService.searchForSecurityGroupRules(this); + Pair, Integer> result = _securityGroupService.searchForSecurityGroupRules(this); + ListResponse response = new ListResponse(); + List routerResponses = _responseGenerator.createSecurityGroupResponses(result.first()); + response.setResponses(routerResponses, result.second()); - ListResponse response = _responseGenerator.createSecurityGroupResponses(securityGroups); response.setResponseName(getCommandName()); - this.setResponseObject(response); } @Override diff --git a/server/src/com/cloud/api/ApiDBUtils.java b/server/src/com/cloud/api/ApiDBUtils.java index a98c5d3557a..b48cbe6a264 100755 --- a/server/src/com/cloud/api/ApiDBUtils.java +++ b/server/src/com/cloud/api/ApiDBUtils.java @@ -24,8 +24,10 @@ import java.util.Set; import org.apache.cloudstack.api.ApiConstants.VMDetails; import com.cloud.api.response.DomainRouterResponse; +import com.cloud.api.response.SecurityGroupResponse; import com.cloud.api.response.UserVmResponse; import com.cloud.api.view.vo.DomainRouterJoinVO; +import com.cloud.api.view.vo.SecurityGroupJoinVO; import com.cloud.api.view.vo.UserVmJoinVO; import com.cloud.async.AsyncJobManager; import com.cloud.async.AsyncJobVO; @@ -94,6 +96,7 @@ import com.cloud.network.security.SecurityGroup; import com.cloud.network.security.SecurityGroupManager; import com.cloud.network.security.SecurityGroupVO; import com.cloud.network.security.dao.SecurityGroupDao; +import com.cloud.network.security.dao.SecurityGroupJoinDao; import com.cloud.network.vpc.VpcManager; import com.cloud.offering.NetworkOffering; import com.cloud.offering.ServiceOffering; @@ -196,6 +199,7 @@ public class ApiDBUtils { private static IPAddressDao _ipAddressDao; private static LoadBalancerDao _loadBalancerDao; private static SecurityGroupDao _securityGroupDao; + private static SecurityGroupJoinDao _securityGroupJoinDao; private static NetworkRuleConfigDao _networkRuleConfigDao; private static HostPodDao _podDao; private static ServiceOfferingDao _serviceOfferingDao; @@ -283,6 +287,7 @@ public class ApiDBUtils { _volumeHostDao = locator.getDao(VolumeHostDao.class); _zoneDao = locator.getDao(DataCenterDao.class); _securityGroupDao = locator.getDao(SecurityGroupDao.class); + _securityGroupJoinDao = locator.getDao(SecurityGroupJoinDao.class); _networkOfferingDao = locator.getDao(NetworkOfferingDao.class); _networkDao = locator.getDao(NetworkDao.class); _configDao = locator.getDao(ConfigurationDao.class); @@ -925,4 +930,20 @@ public class ApiDBUtils { public static List newUserVmView(UserVm... userVms){ return _userVmJoinDao.newUserVmView(userVms); } + + public static SecurityGroupResponse newSecurityGroupResponse(SecurityGroupJoinVO vsg, Account caller) { + return _securityGroupJoinDao.newSecurityGroupResponse(vsg, caller); + } + + public static SecurityGroupResponse fillSecurityGroupDetails(SecurityGroupResponse vsgData, SecurityGroupJoinVO sg){ + return _securityGroupJoinDao.setSecurityGroupResponse(vsgData, sg); + } + + public static List newSecurityGroupView(SecurityGroup sg){ + return _securityGroupJoinDao.newSecurityGroupView(sg); + } + + public static List findSecurityGroupViewById(Long sgId){ + return _securityGroupJoinDao.searchByIds(sgId); + } } diff --git a/server/src/com/cloud/api/ApiResponseHelper.java b/server/src/com/cloud/api/ApiResponseHelper.java index 84950d3b155..ca39e8da189 100755 --- a/server/src/com/cloud/api/ApiResponseHelper.java +++ b/server/src/com/cloud/api/ApiResponseHelper.java @@ -118,6 +118,7 @@ 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.SecurityGroupJoinVO; import com.cloud.api.view.vo.UserVmJoinVO; import com.cloud.async.AsyncJob; import com.cloud.capacity.Capacity; @@ -2029,91 +2030,31 @@ public class ApiResponseHelper implements ResponseGenerator { } @Override - public ListResponse createSecurityGroupResponses( - List networkGroups) { - List groupResultObjs = SecurityGroupResultObject - .transposeNetworkGroups(networkGroups); + public List createSecurityGroupResponses(List securityGroups) { + Account caller = UserContext.current().getCaller(); + Hashtable vrDataList = new Hashtable(); + // Initialise the vrdatalist with the input data + for (SecurityGroupJoinVO vr : securityGroups) { + SecurityGroupResponse vrData = vrDataList.get(vr.getId()); + if ( vrData == null ) { + // first time encountering this sg + vrData = ApiDBUtils.newSecurityGroupResponse(vr, caller); - ListResponse response = new ListResponse(); - List netGrpResponses = new ArrayList(); - for (SecurityGroupResultObject networkGroup : groupResultObjs) { - SecurityGroupResponse netGrpResponse = new SecurityGroupResponse(); - netGrpResponse.setId(networkGroup.getId()); - netGrpResponse.setName(networkGroup.getName()); - netGrpResponse.setDescription(networkGroup.getDescription()); - - populateOwner(netGrpResponse, networkGroup); - - List securityGroupRules = networkGroup - .getSecurityGroupRules(); - if ((securityGroupRules != null) && !securityGroupRules.isEmpty()) { - List ingressRulesResponse = new ArrayList(); - List egressRulesResponse = new ArrayList(); - for (SecurityGroupRuleResultObject securityGroupRule : securityGroupRules) { - SecurityGroupRuleResponse ruleData = new SecurityGroupRuleResponse(); - ruleData.setRuleId(securityGroupRule.getId()); - ruleData.setProtocol(securityGroupRule.getProtocol()); - - if ("icmp".equalsIgnoreCase(securityGroupRule.getProtocol())) { - ruleData.setIcmpType(securityGroupRule.getStartPort()); - ruleData.setIcmpCode(securityGroupRule.getEndPort()); - } else { - ruleData.setStartPort(securityGroupRule.getStartPort()); - ruleData.setEndPort(securityGroupRule.getEndPort()); - } - - if (securityGroupRule.getAllowedSecurityGroup() != null) { - ruleData.setSecurityGroupName(securityGroupRule - .getAllowedSecurityGroup()); - ruleData.setAccountName(securityGroupRule - .getAllowedSecGroupAcct()); - } else { - ruleData.setCidr(securityGroupRule - .getAllowedSourceIpCidr()); - } - - if (securityGroupRule.getRuleType() == SecurityRuleType.IngressRule) { - ruleData.setObjectName("ingressrule"); - ingressRulesResponse.add(ruleData); - } else { - ruleData.setObjectName("egressrule"); - egressRulesResponse.add(ruleData); - } - } - //set tag information - List tags = ApiDBUtils.listByResourceTypeAndId(TaggedResourceType.UserVm, networkGroup.getId()); - List tagResponses = new ArrayList(); - for (ResourceTag tag : tags) { - ResourceTagResponse tagResponse = createResourceTagResponse(tag, true); - tagResponses.add(tagResponse); - } - netGrpResponse.setTags(tagResponses); - - netGrpResponse - .setSecurityGroupIngressRules(ingressRulesResponse); - netGrpResponse.setSecurityGroupEgressRules(egressRulesResponse); + } else { + // update rules for 1 to many mapping fields + vrData = ApiDBUtils.fillSecurityGroupDetails(vrData, vr); } - netGrpResponse.setObjectName("securitygroup"); - netGrpResponses.add(netGrpResponse); + vrDataList.put(vr.getId(), vrData); } - - response.setResponses(netGrpResponses); - return response; + return new ArrayList(vrDataList.values()); } @Override public SecurityGroupResponse createSecurityGroupResponse(SecurityGroup group) { - SecurityGroupResponse response = new SecurityGroupResponse(); - - populateOwner(response, group); - - response.setDescription(group.getDescription()); - response.setId(group.getId()); - response.setName(group.getName()); - - response.setObjectName("securitygroup"); - return response; - + List viewSgs = ApiDBUtils.newSecurityGroupView(group); + List listSgs = createSecurityGroupResponses(viewSgs); + assert listSgs != null && listSgs.size() == 1 : "There should be one security group returned"; + return listSgs.get(0); } @Override @@ -2471,27 +2412,27 @@ public class ApiResponseHelper implements ResponseGenerator { Map allowedSecuriytGroupAccounts = new HashMap(); if ((securityRules != null) && !securityRules.isEmpty()) { - SecurityGroup securityGroup = ApiDBUtils.findSecurityGroupById(securityRules.get(0).getSecurityGroupId()); - response.setId(securityGroup.getId()); + SecurityGroupJoinVO securityGroup = ApiDBUtils.findSecurityGroupViewById(securityRules.get(0).getSecurityGroupId()).get(0); + response.setId(securityGroup.getUuid()); response.setName(securityGroup.getName()); response.setDescription(securityGroup.getDescription()); Account account = securiytGroupAccounts.get(securityGroup.getAccountId()); - if (account == null) { - account = ApiDBUtils.findAccountById(securityGroup.getAccountId()); - securiytGroupAccounts.put(securityGroup.getAccountId(), account); + if (securityGroup.getAccountType() == Account.ACCOUNT_TYPE_PROJECT) { + response.setProjectId(securityGroup.getProjectUuid()); + response.setProjectName(securityGroup.getProjectName()); + } else { + response.setAccountName(securityGroup.getAccountName()); } - populateAccount(response, account.getId()); - populateDomain(response, account.getDomainId()); + response.setDomainId(securityGroup.getDomainUuid()); + response.setDomainName(securityGroup.getDomainName()); - List egressResponses = new ArrayList(); - List ingressResponses = new ArrayList(); for (SecurityRule securityRule : securityRules) { SecurityGroupRuleResponse securityGroupData = new SecurityGroupRuleResponse(); - securityGroupData.setRuleId(securityRule.getId()); + securityGroupData.setRuleId(securityRule.getUuid()); securityGroupData.setProtocol(securityRule.getProtocol()); if ("icmp".equalsIgnoreCase(securityRule.getProtocol())) { securityGroupData.setIcmpType(securityRule.getStartPort()); @@ -2503,35 +2444,24 @@ public class ApiResponseHelper implements ResponseGenerator { Long allowedSecurityGroupId = securityRule.getAllowedNetworkId(); if (allowedSecurityGroupId != null) { - SecurityGroup allowedSecurityGroup = allowedSecurityGroups.get(allowedSecurityGroupId); - if (allowedSecurityGroup == null) { - allowedSecurityGroup = ApiDBUtils.findSecurityGroupById(allowedSecurityGroupId); - allowedSecurityGroups.put(allowedSecurityGroupId, allowedSecurityGroup); + List sgs = ApiDBUtils.findSecurityGroupViewById(allowedSecurityGroupId); + if (sgs != null && sgs.size() > 0) { + SecurityGroupJoinVO sg = sgs.get(0); + securityGroupData.setSecurityGroupName(sg.getName()); + securityGroupData.setAccountName(sg.getAccountName()); } - - securityGroupData.setSecurityGroupName(allowedSecurityGroup.getName()); - - Account allowedAccount = allowedSecuriytGroupAccounts.get(allowedSecurityGroup.getAccountId()); - if (allowedAccount == null) { - allowedAccount = ApiDBUtils.findAccountById(allowedSecurityGroup.getAccountId()); - allowedSecuriytGroupAccounts.put(allowedAccount.getId(), allowedAccount); - } - - securityGroupData.setAccountName(allowedAccount.getAccountName()); } else { securityGroupData.setCidr(securityRule.getAllowedSourceIpCidr()); } if (securityRule.getRuleType() == SecurityRuleType.IngressRule) { securityGroupData.setObjectName("ingressrule"); - ingressResponses.add(securityGroupData); + response.addSecurityGroupIngressRule(securityGroupData); } else { securityGroupData.setObjectName("egressrule"); - egressResponses.add(securityGroupData); + response.addSecurityGroupEgressRule(securityGroupData); } } - response.setSecurityGroupIngressRules(ingressResponses); - response.setSecurityGroupEgressRules(egressResponses); response.setObjectName("securitygroup"); } diff --git a/server/src/com/cloud/api/ApiServer.java b/server/src/com/cloud/api/ApiServer.java index d75c8e169ad..bacec720bd4 100755 --- a/server/src/com/cloud/api/ApiServer.java +++ b/server/src/com/cloud/api/ApiServer.java @@ -79,6 +79,7 @@ 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.securitygroup.command.ListSecurityGroupsCmd; import org.apache.cloudstack.api.user.vm.command.ListVMsCmd; import com.cloud.acl.ControlledEntity; import com.cloud.api.response.ApiResponseSerializer; @@ -437,7 +438,8 @@ 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 && !(cmdObj instanceof ListVMsCmd) && !(cmdObj instanceof ListRoutersCmd)) { + if (cmdObj instanceof BaseListCmd && !(cmdObj instanceof ListVMsCmd) && !(cmdObj instanceof ListRoutersCmd) + && !(cmdObj instanceof ListSecurityGroupsCmd)) { buildAsyncListResponse((BaseListCmd) cmdObj, caller); } diff --git a/server/src/com/cloud/configuration/DefaultComponentLibrary.java b/server/src/com/cloud/configuration/DefaultComponentLibrary.java index ec543ed20fc..1e292c45510 100755 --- a/server/src/com/cloud/configuration/DefaultComponentLibrary.java +++ b/server/src/com/cloud/configuration/DefaultComponentLibrary.java @@ -117,6 +117,7 @@ import com.cloud.network.rules.RulesManagerImpl; import com.cloud.network.rules.dao.PortForwardingRulesDaoImpl; import com.cloud.network.security.SecurityGroupManagerImpl2; import com.cloud.network.security.dao.SecurityGroupDaoImpl; +import com.cloud.network.security.dao.SecurityGroupJoinDaoImpl; import com.cloud.network.security.dao.SecurityGroupRuleDaoImpl; import com.cloud.network.security.dao.SecurityGroupRulesDaoImpl; import com.cloud.network.security.dao.SecurityGroupVMMapDaoImpl; @@ -220,6 +221,7 @@ public class DefaultComponentLibrary extends ComponentLibraryBase implements Com addDao("UserVmDao", UserVmDaoImpl.class); addDao("UserVmJoinDao", UserVmJoinDaoImpl.class); addDao("DomainRouterJoinDao", DomainRouterJoinDaoImpl.class); + addDao("SecurityGroupJoinDao", SecurityGroupJoinDaoImpl.class); ComponentInfo> info = addDao("ServiceOfferingDao", ServiceOfferingDaoImpl.class); info.addParameter("cache.size", "50"); info.addParameter("cache.time.to.live", "600"); diff --git a/server/src/com/cloud/network/security/SecurityGroupManagerImpl.java b/server/src/com/cloud/network/security/SecurityGroupManagerImpl.java index be8635c63e1..8421a80cb04 100755 --- a/server/src/com/cloud/network/security/SecurityGroupManagerImpl.java +++ b/server/src/com/cloud/network/security/SecurityGroupManagerImpl.java @@ -46,6 +46,8 @@ import com.cloud.agent.api.SecurityGroupRulesCmd; import com.cloud.agent.api.SecurityGroupRulesCmd.IpPortAndProto; import com.cloud.agent.manager.Commands; import org.apache.cloudstack.api.user.securitygroup.command.RevokeSecurityGroupEgressCmd; +import com.cloud.api.view.vo.SecurityGroupJoinVO; +import com.cloud.api.view.vo.UserVmJoinVO; import com.cloud.configuration.Config; import com.cloud.configuration.dao.ConfigurationDao; import com.cloud.domain.dao.DomainDao; @@ -64,6 +66,7 @@ import com.cloud.network.NetworkManager; import com.cloud.network.security.SecurityGroupWork.Step; import com.cloud.network.security.SecurityRule.SecurityRuleType; import com.cloud.network.security.dao.SecurityGroupDao; +import com.cloud.network.security.dao.SecurityGroupJoinDao; import com.cloud.network.security.dao.SecurityGroupRuleDao; import com.cloud.network.security.dao.SecurityGroupRulesDao; import com.cloud.network.security.dao.SecurityGroupVMMapDao; @@ -95,6 +98,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.fsm.StateListener; import com.cloud.utils.net.NetUtils; @@ -119,6 +123,8 @@ public class SecurityGroupManagerImpl implements SecurityGroupManager, SecurityG @Inject SecurityGroupDao _securityGroupDao; @Inject + SecurityGroupJoinDao _securityGroupJoinDao; + @Inject SecurityGroupRuleDao _securityGroupRuleDao; @Inject SecurityGroupVMMapDao _securityGroupVMMapDao; @@ -1087,7 +1093,7 @@ public class SecurityGroupManagerImpl implements SecurityGroupManager, SecurityG } @Override - public List searchForSecurityGroupRules(ListSecurityGroupsCmd cmd) throws PermissionDeniedException, InvalidParameterValueException { + public Pair, Integer> searchForSecurityGroupRules(ListSecurityGroupsCmd cmd) throws PermissionDeniedException, InvalidParameterValueException { Account caller = UserContext.current().getCaller(); Long instanceId = cmd.getVirtualMachineId(); String securityGroup = cmd.getSecurityGroupName(); @@ -1102,38 +1108,33 @@ public class SecurityGroupManagerImpl implements SecurityGroupManager, SecurityG throw new InvalidParameterValueException("Unable to list network groups for virtual machine instance " + instanceId + "; instance not found."); } _accountMgr.checkAccess(caller, null, true, userVM); - return listSecurityGroupRulesByVM(instanceId.longValue()); + return listSecurityGroupRulesByVM(instanceId.longValue(), cmd.getStartIndex(), cmd.getPageSizeVal()); } - List securityRulesList = new ArrayList(); - Ternary domainIdRecursiveListProject = new Ternary(cmd.getDomainId(), cmd.isRecursive(), null); _accountMgr.buildACLSearchParameters(caller, id, cmd.getAccountName(), cmd.getProjectId(), permittedAccounts, domainIdRecursiveListProject, cmd.listAll(), false); Long domainId = domainIdRecursiveListProject.first(); Boolean isRecursive = domainIdRecursiveListProject.second(); - ListProjectResourcesCriteria listProjectResourcesCriteria = domainIdRecursiveListProject.third(); - - Filter searchFilter = new Filter(SecurityGroupVO.class, "id", true, cmd.getStartIndex(), cmd.getPageSizeVal()); - SearchBuilder sb = _securityGroupDao.createSearchBuilder(); - _accountMgr.buildACLSearchBuilder(sb, domainId, isRecursive, permittedAccounts, listProjectResourcesCriteria); + ListProjectResourcesCriteria listProjectResourcesCriteria = domainIdRecursiveListProject.third(); + + Filter searchFilter = new Filter(SecurityGroupJoinVO.class, "id", true, cmd.getStartIndex(), cmd.getPageSizeVal()); + SearchBuilder sb = _securityGroupJoinDao.createSearchBuilder(); + sb.select(null, Func.DISTINCT, sb.entity().getId()); // select distinct ids + _accountMgr.buildACLViewSearchBuilder(sb, domainId, isRecursive, permittedAccounts, listProjectResourcesCriteria); sb.and("id", sb.entity().getId(), SearchCriteria.Op.EQ); sb.and("name", sb.entity().getName(), SearchCriteria.Op.EQ); if (tags != null && !tags.isEmpty()) { - SearchBuilder 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); } - SearchCriteria sc = sb.create(); - _accountMgr.buildACLSearchCriteria(sc, domainId, isRecursive, permittedAccounts, listProjectResourcesCriteria); + SearchCriteria sc = sb.create(); + _accountMgr.buildACLViewSearchCriteria(sc, domainId, isRecursive, permittedAccounts, listProjectResourcesCriteria); if (id != null) { sc.setParameters("id", id); @@ -1141,12 +1142,11 @@ public class SecurityGroupManagerImpl implements SecurityGroupManager, SecurityG if (tags != null && !tags.isEmpty()) { int count = 0; - sc.setJoinParameters("tagSearch", "resourceType", TaggedResourceType.SecurityGroup.toString()); for (String key : tags.keySet()) { - sc.setJoinParameters("tagSearch", "key" + String.valueOf(count), key); - sc.setJoinParameters("tagSearch", "value" + String.valueOf(count), tags.get(key)); - count++; - } + sc.setParameters("key" + String.valueOf(count), key); + sc.setParameters("value" + String.valueOf(count), tags.get(key)); + count++; + } } if (securityGroup != null) { @@ -1154,33 +1154,46 @@ public class SecurityGroupManagerImpl implements SecurityGroupManager, SecurityG } if (keyword != null) { - SearchCriteria ssc = _securityGroupRulesDao.createSearchCriteria(); + SearchCriteria ssc = _securityGroupJoinDao.createSearchCriteria(); ssc.addOr("name", SearchCriteria.Op.LIKE, "%" + keyword + "%"); ssc.addOr("description", SearchCriteria.Op.LIKE, "%" + keyword + "%"); sc.addAnd("name", SearchCriteria.Op.SC, ssc); } - List securityGroups = _securityGroupDao.search(sc, searchFilter); - for (SecurityGroupVO group : securityGroups) { - securityRulesList.addAll(_securityGroupRulesDao.listSecurityRulesByGroupId(group.getId())); + // search security group together with rules + Pair, Integer> uniqueSgPair = _securityGroupJoinDao.searchAndCount(sc, searchFilter); + Integer count = uniqueSgPair.second(); + if ( count.intValue() == 0 ){ + // handle empty result cases + return uniqueSgPair; } - return securityRulesList; + List uniqueSgs = uniqueSgPair.first(); + Long[] sgIds = new Long[uniqueSgs.size()]; + int i = 0; + for (SecurityGroupJoinVO v : uniqueSgs ){ + sgIds[i++] = v.getId(); + } + List sgs = _securityGroupJoinDao.searchByIds(sgIds); + return new Pair, Integer>(sgs, count); } - private List listSecurityGroupRulesByVM(long vmId) { - List results = new ArrayList(); - List networkGroupMappings = _securityGroupVMMapDao.listByInstanceId(vmId); - if (networkGroupMappings != null) { - for (SecurityGroupVMMapVO networkGroupMapping : networkGroupMappings) { - SecurityGroupVO group = _securityGroupDao.findById(networkGroupMapping.getSecurityGroupId()); - List rules = _securityGroupRulesDao.listSecurityGroupRules(group.getAccountId(), networkGroupMapping.getGroupName()); - if (rules != null) { - results.addAll(rules); - } - } + private Pair, Integer> listSecurityGroupRulesByVM(long vmId, long pageInd, long pageSize) { + Filter sf = new Filter(SecurityGroupVMMapVO.class, null, true, pageInd, pageSize); + Pair, Integer> sgVmMappingPair = _securityGroupVMMapDao.listByInstanceId(vmId, sf); + Integer count = sgVmMappingPair.second(); + if (count.intValue() == 0) { + // handle empty result cases + return new Pair, Integer>(new ArrayList(), count); } - return results; + List sgVmMappings = sgVmMappingPair.first(); + Long[] sgIds = new Long[sgVmMappings.size()]; + int i = 0; + for (SecurityGroupVMMapVO sgVm : sgVmMappings) { + sgIds[i++] = sgVm.getSecurityGroupId(); + } + List sgs = _securityGroupJoinDao.searchByIds(sgIds); + return new Pair, Integer>(sgs, count); } @Override diff --git a/server/src/com/cloud/network/security/dao/SecurityGroupJoinDao.java b/server/src/com/cloud/network/security/dao/SecurityGroupJoinDao.java new file mode 100644 index 00000000000..cc79cdaff14 --- /dev/null +++ b/server/src/com/cloud/network/security/dao/SecurityGroupJoinDao.java @@ -0,0 +1,37 @@ +// 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.network.security.dao; + +import java.util.List; + +import com.cloud.api.response.SecurityGroupResponse; +import com.cloud.api.view.vo.SecurityGroupJoinVO; +import com.cloud.network.security.SecurityGroup; +import com.cloud.user.Account; +import com.cloud.utils.db.GenericDao; + +public interface SecurityGroupJoinDao extends GenericDao { + + SecurityGroupResponse newSecurityGroupResponse(SecurityGroupJoinVO vsg, Account caller); + + SecurityGroupResponse setSecurityGroupResponse(SecurityGroupResponse vsgData, SecurityGroupJoinVO vsg); + + List newSecurityGroupView(SecurityGroup sg); + + List searchByIds(Long... ids); +} + diff --git a/server/src/com/cloud/network/security/dao/SecurityGroupJoinDaoImpl.java b/server/src/com/cloud/network/security/dao/SecurityGroupJoinDaoImpl.java new file mode 100644 index 00000000000..2237112150c --- /dev/null +++ b/server/src/com/cloud/network/security/dao/SecurityGroupJoinDaoImpl.java @@ -0,0 +1,244 @@ +// 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.network.security.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.SecurityGroupRuleResponse; +import com.cloud.api.response.UserVmResponse; +import com.cloud.api.view.vo.DomainRouterJoinVO; +import com.cloud.api.view.vo.SecurityGroupJoinVO; +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.network.security.SecurityGroup; +import com.cloud.network.security.SecurityRule.SecurityRuleType; +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={SecurityGroupJoinDao.class}) +public class SecurityGroupJoinDaoImpl extends GenericDaoBase implements SecurityGroupJoinDao { + public static final Logger s_logger = Logger.getLogger(SecurityGroupJoinDaoImpl.class); + + private SearchBuilder sgSearch; + + private SearchBuilder sgIdSearch; + + protected SecurityGroupJoinDaoImpl() { + + sgSearch = createSearchBuilder(); + sgSearch.and("idIN", sgSearch.entity().getId(), SearchCriteria.Op.IN); + sgSearch.done(); + + sgIdSearch = createSearchBuilder(); + sgIdSearch.and("id", sgIdSearch.entity().getId(), SearchCriteria.Op.EQ); + sgIdSearch.done(); + + this._count = "select count(distinct id) from security_group_view WHERE "; + } + + @Override + public SecurityGroupResponse newSecurityGroupResponse(SecurityGroupJoinVO vsg, Account caller) { + SecurityGroupResponse sgResponse = new SecurityGroupResponse(); + sgResponse.setId(vsg.getUuid()); + sgResponse.setName(vsg.getName()); + sgResponse.setDescription(vsg.getDescription()); + + ApiResponseHelper.populateOwner(sgResponse, vsg); + + Long rule_id = vsg.getRuleId(); + if (rule_id != null && rule_id.longValue() > 0) { + SecurityGroupRuleResponse ruleData = new SecurityGroupRuleResponse(); + ruleData.setRuleId(vsg.getRuleUuid()); + ruleData.setProtocol(vsg.getRuleProtocol()); + + if ("icmp".equalsIgnoreCase(vsg.getRuleProtocol())) { + ruleData.setIcmpType(vsg.getRuleStartPort()); + ruleData.setIcmpCode(vsg.getRuleEndPort()); + } else { + ruleData.setStartPort(vsg.getRuleStartPort()); + ruleData.setEndPort(vsg.getRuleEndPort()); + } + + if (vsg.getRuleAllowedNetworkId() != null) { + List sgs = this.searchByIds(vsg.getRuleAllowedNetworkId()); + if (sgs != null && sgs.size() > 0) { + SecurityGroupJoinVO sg = sgs.get(0); + ruleData.setSecurityGroupName(sg.getName()); + ruleData.setAccountName(sg.getAccountName()); + } + } else { + ruleData.setCidr(vsg.getRuleAllowedSourceIpCidr()); + } + + if (vsg.getRuleType() == SecurityRuleType.IngressRule) { + ruleData.setObjectName("ingressrule"); + sgResponse.addSecurityGroupIngressRule(ruleData); + } else { + ruleData.setObjectName("egressrule"); + sgResponse.addSecurityGroupEgressRule(ruleData); + } + } + + // update tag information + Long tag_id = vsg.getTagId(); + if (tag_id != null && tag_id.longValue() > 0) { + ResourceTagResponse tag = new ResourceTagResponse(); + tag.setKey(vsg.getTagKey()); + tag.setValue(vsg.getTagValue()); + if (vsg.getTagResourceType() != null) { + tag.setResourceType(vsg.getTagResourceType().toString()); + } + tag.setId(vsg.getTagResourceUuid()); // tag resource uuid + tag.setCustomer(vsg.getTagCustomer()); + // TODO: assuming tagAccountId and tagDomainId are the same as VM + // accountId and domainId + tag.setDomainId(vsg.getTagDomainId()); + if (vsg.getAccountType() == Account.ACCOUNT_TYPE_PROJECT) { + tag.setProjectId(vsg.getProjectId()); + tag.setProjectName(vsg.getProjectName()); + } else { + tag.setAccountName(vsg.getAccountName()); + } + tag.setDomainId(vsg.getDomainId()); // TODO: pending tag resource + // response uuid change + tag.setDomainName(vsg.getDomainName()); + + tag.setObjectName("tag"); + sgResponse.addTag(tag); + } + sgResponse.setObjectName("securitygroup"); + + return sgResponse; + } + + @Override + public SecurityGroupResponse setSecurityGroupResponse(SecurityGroupResponse vsgData, SecurityGroupJoinVO vsg) { + Long rule_id = vsg.getRuleId(); + if (rule_id != null && rule_id.longValue() > 0) { + SecurityGroupRuleResponse ruleData = new SecurityGroupRuleResponse(); + ruleData.setRuleId(vsg.getRuleUuid()); + ruleData.setProtocol(vsg.getRuleProtocol()); + + if ("icmp".equalsIgnoreCase(vsg.getRuleProtocol())) { + ruleData.setIcmpType(vsg.getRuleStartPort()); + ruleData.setIcmpCode(vsg.getRuleEndPort()); + } else { + ruleData.setStartPort(vsg.getRuleStartPort()); + ruleData.setEndPort(vsg.getRuleEndPort()); + } + + if (vsg.getRuleAllowedNetworkId() != null) { + List sgs = this.searchByIds(vsg.getRuleAllowedNetworkId()); + if (sgs != null && sgs.size() > 0) { + SecurityGroupJoinVO sg = sgs.get(0); + ruleData.setSecurityGroupName(sg.getName()); + ruleData.setAccountName(sg.getAccountName()); + } + } else { + ruleData.setCidr(vsg.getRuleAllowedSourceIpCidr()); + } + + if (vsg.getRuleType() == SecurityRuleType.IngressRule) { + ruleData.setObjectName("ingressrule"); + vsgData.addSecurityGroupIngressRule(ruleData); + } else { + ruleData.setObjectName("egressrule"); + vsgData.addSecurityGroupEgressRule(ruleData); + } + } + + // update tag information + Long tag_id = vsg.getTagId(); + if (tag_id != null && tag_id.longValue() > 0 ) { + ResourceTagResponse tag = new ResourceTagResponse(); + tag.setKey(vsg.getTagKey()); + tag.setValue(vsg.getTagValue()); + if (vsg.getTagResourceType() != null) { + tag.setResourceType(vsg.getTagResourceType().toString()); + } + tag.setId(vsg.getTagResourceUuid()); // tag resource uuid + tag.setCustomer(vsg.getTagCustomer()); + // TODO: assuming tagAccountId and tagDomainId are the same as VM + // accountId and domainId + tag.setDomainId(vsg.getTagDomainId()); + if (vsg.getAccountType() == Account.ACCOUNT_TYPE_PROJECT) { + tag.setProjectId(vsg.getProjectId()); + tag.setProjectName(vsg.getProjectName()); + } else { + tag.setAccountName(vsg.getAccountName()); + } + tag.setDomainId(vsg.getDomainId()); // TODO: pending tag resource + // response uuid change + tag.setDomainName(vsg.getDomainName()); + + tag.setObjectName("tag"); + vsgData.addTag(tag); + } + return vsgData; + } + + @Override + public List newSecurityGroupView(SecurityGroup sg) { + List uvList = new ArrayList(); + SearchCriteria sc = sgIdSearch.create(); + sc.setParameters("id", sg.getId()); + List sgs = searchIncludingRemoved(sc, null, null, false); + if (sgs != null) { + for (SecurityGroupJoinVO uvm : sgs) { + uvList.add(uvm); + } + } + return uvList; + } + + @Override + public List searchByIds(Long... ids) { + SearchCriteria sc = sgSearch.create(); + sc.setParameters("idIN", ids); + return searchIncludingRemoved(sc, null, null, false); + } +} diff --git a/server/src/com/cloud/network/security/dao/SecurityGroupVMMapDao.java b/server/src/com/cloud/network/security/dao/SecurityGroupVMMapDao.java index cc842df7d64..cbeae4f1483 100644 --- a/server/src/com/cloud/network/security/dao/SecurityGroupVMMapDao.java +++ b/server/src/com/cloud/network/security/dao/SecurityGroupVMMapDao.java @@ -19,12 +19,15 @@ package com.cloud.network.security.dao; import java.util.List; import com.cloud.network.security.SecurityGroupVMMapVO; +import com.cloud.utils.Pair; +import com.cloud.utils.db.Filter; import com.cloud.utils.db.GenericDao; import com.cloud.vm.VirtualMachine.State; public interface SecurityGroupVMMapDao extends GenericDao { List listByIpAndInstanceId(String ipAddress, long instanceId); List listByInstanceId(long instanceId); + Pair, Integer> listByInstanceId(long instanceId, Filter filter); List listByIp(String ipAddress); List listBySecurityGroup(long securityGroupId); List listBySecurityGroup(long securityGroupId, State ... vmStates); diff --git a/server/src/com/cloud/network/security/dao/SecurityGroupVMMapDaoImpl.java b/server/src/com/cloud/network/security/dao/SecurityGroupVMMapDaoImpl.java index db6c0029447..95dd7f3aca2 100644 --- a/server/src/com/cloud/network/security/dao/SecurityGroupVMMapDaoImpl.java +++ b/server/src/com/cloud/network/security/dao/SecurityGroupVMMapDaoImpl.java @@ -24,6 +24,8 @@ import com.cloud.dc.VlanVO; import com.cloud.dc.Vlan.VlanType; import com.cloud.network.IPAddressVO; import com.cloud.network.security.SecurityGroupVMMapVO; +import com.cloud.utils.Pair; +import com.cloud.utils.db.Filter; import com.cloud.utils.db.GenericDaoBase; import com.cloud.utils.db.GenericSearchBuilder; import com.cloud.utils.db.JoinBuilder; @@ -114,6 +116,13 @@ public class SecurityGroupVMMapDaoImpl extends GenericDaoBase, Integer> listByInstanceId(long instanceId, Filter filter) { + SearchCriteria sc = ListByVmId.create(); + sc.setParameters("instanceId", instanceId); + return this.searchAndCount(sc, filter); + } + @Override public int deleteVM(long instanceId) { SearchCriteria sc = ListByVmId.create(); diff --git a/server/src/com/cloud/vm/dao/UserVmJoinDaoImpl.java b/server/src/com/cloud/vm/dao/UserVmJoinDaoImpl.java index 4df9f88e8eb..63ebb26510a 100644 --- a/server/src/com/cloud/vm/dao/UserVmJoinDaoImpl.java +++ b/server/src/com/cloud/vm/dao/UserVmJoinDaoImpl.java @@ -164,16 +164,12 @@ public class UserVmJoinDaoImpl extends GenericDaoBase implem Long securityGroupId = userVm.getSecurityGroupId(); if (securityGroupId != null && securityGroupId.longValue() != 0) { SecurityGroupResponse resp = new SecurityGroupResponse(); - resp.setId(userVm.getSecurityGroupId()); // TODO: change - // SecurityGroupResponse - // IdentityProxy + resp.setId(userVm.getSecurityGroupUuid()); resp.setName(userVm.getSecurityGroupName()); resp.setDescription(userVm.getSecurityGroupDescription()); resp.setObjectName("securitygroup"); if (userVm.getAccountType() == Account.ACCOUNT_TYPE_PROJECT) { - resp.setProjectId(userVm.getProjectId()); // TODO: pending - // SecurityGroupResponse - // uuid change + resp.setProjectId(userVm.getProjectUuid()); resp.setProjectName(userVm.getProjectName()); } else { resp.setAccountName(userVm.getAccountName()); @@ -246,16 +242,12 @@ public class UserVmJoinDaoImpl extends GenericDaoBase implem Long securityGroupId = uvo.getSecurityGroupId(); if (securityGroupId != null && securityGroupId.longValue() != 0) { SecurityGroupResponse resp = new SecurityGroupResponse(); - resp.setId(uvo.getSecurityGroupId()); // TODO: change - // SecurityGroupResponse - // IdentityProxy + resp.setId(uvo.getSecurityGroupUuid()); resp.setName(uvo.getSecurityGroupName()); resp.setDescription(uvo.getSecurityGroupDescription()); resp.setObjectName("securitygroup"); if (uvo.getAccountType() == Account.ACCOUNT_TYPE_PROJECT) { - resp.setProjectId(uvo.getProjectId()); // TODO: pending - // SecurityGroupResponse - // uuid change + resp.setProjectId(uvo.getProjectUuid()); resp.setProjectName(uvo.getProjectName()); } else { resp.setAccountName(uvo.getAccountName()); From a6c02e14838fd5200eb65e65bdea2267897656b9 Mon Sep 17 00:00:00 2001 From: Fang Wang Date: Thu, 6 Dec 2012 14:47:07 -0800 Subject: [PATCH 074/421] api_refactoring: VMgroup parameter annotation. modified: api/src/org/apache/cloudstack/api/user/vmgroup/command/CreateVMGroupCmd.java modified: api/src/org/apache/cloudstack/api/user/vmgroup/command/DeleteVMGroupCmd.java modified: api/src/org/apache/cloudstack/api/user/vmgroup/command/ListVMGroupsCmd.java modified: api/src/org/apache/cloudstack/api/user/vmgroup/command/UpdateVMGroupCmd.java Signed-off-by: Rohit Yadav --- .../api/user/vmgroup/command/CreateVMGroupCmd.java | 11 +++++++---- .../api/user/vmgroup/command/DeleteVMGroupCmd.java | 6 ++++-- .../api/user/vmgroup/command/ListVMGroupsCmd.java | 2 +- .../api/user/vmgroup/command/UpdateVMGroupCmd.java | 4 ++-- 4 files changed, 14 insertions(+), 9 deletions(-) diff --git a/api/src/org/apache/cloudstack/api/user/vmgroup/command/CreateVMGroupCmd.java b/api/src/org/apache/cloudstack/api/user/vmgroup/command/CreateVMGroupCmd.java index 15b506f49dc..e452533b689 100644 --- a/api/src/org/apache/cloudstack/api/user/vmgroup/command/CreateVMGroupCmd.java +++ b/api/src/org/apache/cloudstack/api/user/vmgroup/command/CreateVMGroupCmd.java @@ -24,7 +24,10 @@ import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; + +import com.cloud.api.response.DomainResponse; import com.cloud.api.response.InstanceGroupResponse; +import com.cloud.api.response.ProjectAccountResponse; import com.cloud.user.UserContext; import com.cloud.vm.InstanceGroup; @@ -44,12 +47,12 @@ public class CreateVMGroupCmd extends BaseCmd { @Parameter(name = ApiConstants.ACCOUNT, type = CommandType.STRING, description = "the account of the instance group. The account parameter must be used with the domainId parameter.") private String accountName; - @IdentityMapper(entityTableName = "domain") - @Parameter(name = ApiConstants.DOMAIN_ID, type = CommandType.LONG, description = "the domain ID of account owning the instance group") + //@IdentityMapper(entityTableName = "domain") + @Parameter(name = ApiConstants.DOMAIN_ID, type = CommandType.LONG, description = "the domain ID of account owning the instance group", entityType=DomainResponse.class) private Long domainId; - @IdentityMapper(entityTableName = "projects") - @Parameter(name = ApiConstants.PROJECT_ID, type = CommandType.LONG, description = "The project of the instance group") + //@IdentityMapper(entityTableName = "projects") + @Parameter(name = ApiConstants.PROJECT_ID, type = CommandType.LONG, description = "The project of the instance group", entityType=ProjectAccountResponse.class) private Long projectId; // /////////////////////////////////////////////////// diff --git a/api/src/org/apache/cloudstack/api/user/vmgroup/command/DeleteVMGroupCmd.java b/api/src/org/apache/cloudstack/api/user/vmgroup/command/DeleteVMGroupCmd.java index 43761d2dcef..9001b6cf250 100644 --- a/api/src/org/apache/cloudstack/api/user/vmgroup/command/DeleteVMGroupCmd.java +++ b/api/src/org/apache/cloudstack/api/user/vmgroup/command/DeleteVMGroupCmd.java @@ -24,6 +24,8 @@ import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; + +import com.cloud.api.response.InstanceGroupResponse; import com.cloud.api.response.SuccessResponse; import com.cloud.user.Account; import com.cloud.vm.InstanceGroup; @@ -37,8 +39,8 @@ public class DeleteVMGroupCmd extends BaseCmd{ //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - @IdentityMapper(entityTableName="instance_group") - @Parameter(name=ApiConstants.ID, type=CommandType.LONG, required=true, description="the ID of the instance group") + //@IdentityMapper(entityTableName="instance_group") + @Parameter(name=ApiConstants.ID, type=CommandType.LONG, required=true, description="the ID of the instance group", entityType=InstanceGroupResponse.class) private Long id; ///////////////////////////////////////////////////// diff --git a/api/src/org/apache/cloudstack/api/user/vmgroup/command/ListVMGroupsCmd.java b/api/src/org/apache/cloudstack/api/user/vmgroup/command/ListVMGroupsCmd.java index 94a7d152d97..ff5158d89fa 100644 --- a/api/src/org/apache/cloudstack/api/user/vmgroup/command/ListVMGroupsCmd.java +++ b/api/src/org/apache/cloudstack/api/user/vmgroup/command/ListVMGroupsCmd.java @@ -42,7 +42,7 @@ public class ListVMGroupsCmd extends BaseListProjectAndAccountResourcesCmd { ///////////////////////////////////////////////////// @IdentityMapper(entityTableName="instance_group") - @Parameter(name=ApiConstants.ID, type=CommandType.LONG, description="list instance groups by ID") + @Parameter(name=ApiConstants.ID, type=CommandType.LONG, description="list instance groups by ID", entityType=InstanceGroupResponse.class) private Long id; @Parameter(name=ApiConstants.NAME, type=CommandType.STRING, description="list instance groups by name") diff --git a/api/src/org/apache/cloudstack/api/user/vmgroup/command/UpdateVMGroupCmd.java b/api/src/org/apache/cloudstack/api/user/vmgroup/command/UpdateVMGroupCmd.java index 33d29a064e8..6735f16deab 100644 --- a/api/src/org/apache/cloudstack/api/user/vmgroup/command/UpdateVMGroupCmd.java +++ b/api/src/org/apache/cloudstack/api/user/vmgroup/command/UpdateVMGroupCmd.java @@ -38,8 +38,8 @@ public class UpdateVMGroupCmd extends BaseCmd{ //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - @IdentityMapper(entityTableName="instance_group") - @Parameter(name=ApiConstants.ID, type=CommandType.LONG, required=true, description="Instance group ID") + //@IdentityMapper(entityTableName="instance_group") + @Parameter(name=ApiConstants.ID, type=CommandType.LONG, required=true, description="Instance group ID", entityType=InstanceGroupResponse.class) private Long id; @Parameter(name=ApiConstants.NAME, type=CommandType.STRING, description="new instance group name") From 947ac982bc3c3b1369e1d4dbcbbbbec0f1d87ca5 Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Thu, 6 Dec 2012 17:38:12 -0800 Subject: [PATCH 075/421] api: fix apidocs build bug Signed-off-by: Rohit Yadav --- client/tomcatconf/virtualrouter_commands.properties.in | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/client/tomcatconf/virtualrouter_commands.properties.in b/client/tomcatconf/virtualrouter_commands.properties.in index 0feef6ae4b6..1cca28a40ea 100644 --- a/client/tomcatconf/virtualrouter_commands.properties.in +++ b/client/tomcatconf/virtualrouter_commands.properties.in @@ -19,6 +19,6 @@ ### Please standardize naming conventions to camel-case (even for acronyms). #### router commands -createVirtualRouterElement=com.cloud.api.commands.CreateVirtualRouterElementCmd;7 -configureVirtualRouterElement=com.cloud.api.commands.ConfigureVirtualRouterElementCmd;7 -listVirtualRouterElements=com.cloud.api.commands.ListVirtualRouterElementsCmd;7 +createVirtualRouterElement=org.apache.cloudstack.api.admin.router.command.CreateVirtualRouterElementCmd;7 +configureVirtualRouterElement=org.apache.cloudstack.api.admin.router.command.ConfigureVirtualRouterElementCmd;7 +listVirtualRouterElements=org.apache.cloudstack.api.admin.router.command.ListVirtualRouterElementsCmd;7 From 2bbd023eb65b2ad70d417575ff4e2397c5ab53d0 Mon Sep 17 00:00:00 2001 From: Min Chen Date: Thu, 6 Dec 2012 17:09:21 -0800 Subject: [PATCH 076/421] api: Add SecurityGroup DB view creation into db create_schema and fix a bug in ListSecurityGroupsCmd Signed-off-by: Rohit Yadav --- .../command/ListSecurityGroupsCmd.java | 1 + setup/db/create-schema.sql | 49 +++++++++++++++++++ 2 files changed, 50 insertions(+) diff --git a/api/src/org/apache/cloudstack/api/user/securitygroup/command/ListSecurityGroupsCmd.java b/api/src/org/apache/cloudstack/api/user/securitygroup/command/ListSecurityGroupsCmd.java index c2df28bf7dc..3859a1da3f7 100644 --- a/api/src/org/apache/cloudstack/api/user/securitygroup/command/ListSecurityGroupsCmd.java +++ b/api/src/org/apache/cloudstack/api/user/securitygroup/command/ListSecurityGroupsCmd.java @@ -87,6 +87,7 @@ public class ListSecurityGroupsCmd extends BaseListTaggedResourcesCmd { response.setResponses(routerResponses, result.second()); response.setResponseName(getCommandName()); + this.setResponseObject(response); } @Override diff --git a/setup/db/create-schema.sql b/setup/db/create-schema.sql index 3f452850cf1..0141149e808 100755 --- a/setup/db/create-schema.sql +++ b/setup/db/create-schema.sql @@ -2725,3 +2725,52 @@ 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; + +DROP VIEW IF EXISTS `cloud`.`security_group_view`; +CREATE VIEW security_group_view AS +select +security_group.id id, +security_group.name name, +security_group.description description, +security_group.uuid uuid, +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, +security_group_rule.id rule_id, +security_group_rule.uuid rule_uuid, +security_group_rule.type rule_type, +security_group_rule.start_port rule_start_port, +security_group_rule.end_port rule_end_port, +security_group_rule.protocol rule_protocol, +security_group_rule.allowed_network_id rule_allowed_network_id, +security_group_rule.allowed_ip_cidr rule_allowed_ip_cidr, +security_group_rule.create_status rule_create_status, +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 security_group +left join security_group_rule on security_group.id = security_group_rule.security_group_id +inner join account on security_group.account_id=account.id +inner join domain on security_group.domain_id=domain.id +left join projects on projects.project_account_id = security_group.account_id +left join resource_tags on resource_tags.resource_id = security_group.id and resource_tags.resource_type = "SecurityGroup" +left join async_job on async_job.instance_id = security_group.id and async_job.instance_type = "SecurityGroup" and async_job.job_status = 0; From acf7afd7f5139e05ecba29b715c2a20d5f28d3c0 Mon Sep 17 00:00:00 2001 From: Min Chen Date: Fri, 7 Dec 2012 09:40:16 -0800 Subject: [PATCH 077/421] api: Refactor ResourceTagResponse and ListTagsCmd, add db view for ResourceTag. Signed-off-by: Rohit Yadav --- .../api/response/ResourceTagResponse.java | 23 +- .../cloud/api/view/vo/ResourceTagJoinVO.java | 284 ++++++++++++++++++ .../cloud/server/TaggedResourceService.java | 4 +- .../cloudstack/api/ResponseGenerator.java | 4 + .../api/user/tag/command/ListTagsCmd.java | 10 +- server/src/com/cloud/api/ApiDBUtils.java | 28 +- .../src/com/cloud/api/ApiResponseHelper.java | 158 +++++----- .../DefaultComponentLibrary.java | 2 + .../dao/SecurityGroupJoinDaoImpl.java | 51 +--- .../cloud/tags/TaggedResourceManagerImpl.java | 23 +- .../cloud/tags/dao/ResourceTagJoinDao.java | 34 +++ .../tags/dao/ResourceTagJoinDaoImpl.java | 137 +++++++++ .../com/cloud/vm/dao/UserVmJoinDaoImpl.java | 51 +--- setup/db/create-schema.sql | 28 ++ 14 files changed, 631 insertions(+), 206 deletions(-) create mode 100644 api/src/com/cloud/api/view/vo/ResourceTagJoinVO.java create mode 100644 server/src/com/cloud/tags/dao/ResourceTagJoinDao.java create mode 100644 server/src/com/cloud/tags/dao/ResourceTagJoinDaoImpl.java diff --git a/api/src/com/cloud/api/response/ResourceTagResponse.java b/api/src/com/cloud/api/response/ResourceTagResponse.java index 04c2290fafa..4f94e999a89 100644 --- a/api/src/com/cloud/api/response/ResourceTagResponse.java +++ b/api/src/com/cloud/api/response/ResourceTagResponse.java @@ -22,7 +22,7 @@ import com.cloud.utils.IdentityProxy; import com.google.gson.annotations.SerializedName; @SuppressWarnings("unused") -public class ResourceTagResponse extends BaseResponse implements ControlledEntityResponse{ +public class ResourceTagResponse extends BaseResponse implements ControlledViewEntityResponse{ @SerializedName(ApiConstants.KEY) @Param(description="tag key name") private String key; @@ -33,21 +33,21 @@ public class ResourceTagResponse extends BaseResponse implements ControlledEntit private String resourceType; @SerializedName(ApiConstants.RESOURCE_ID) @Param(description="id of the resource") - private String id; + private String resourceId; @SerializedName(ApiConstants.ACCOUNT) @Param(description = "the account associated with the tag") private String accountName; @SerializedName(ApiConstants.PROJECT_ID) @Param(description="the project id the tag belongs to") - private IdentityProxy projectId = new IdentityProxy("projects"); + private String projectId; @SerializedName(ApiConstants.PROJECT) @Param(description="the project name where tag belongs to") private String projectName; @SerializedName(ApiConstants.DOMAIN_ID) @Param(description = "the ID of the domain associated with the tag") - private IdentityProxy domainId = new IdentityProxy("domain"); + private String domainId; @SerializedName(ApiConstants.DOMAIN) @Param(description = "the domain associated with the tag") @@ -68,25 +68,28 @@ public class ResourceTagResponse extends BaseResponse implements ControlledEntit this.resourceType = resourceType; } - public void setId(String id) { - this.id = id; + public void setResourceId(String id) { + this.resourceId = id; } + @Override public void setAccountName(String accountName) { this.accountName = accountName; } - public void setDomainId(Long domainId) { - this.domainId.setValue(domainId); + @Override + public void setDomainId(String domainId) { + this.domainId = domainId; } + @Override public void setDomainName(String domainName) { this.domainName = domainName; } @Override - public void setProjectId(Long projectId) { - this.projectId.setValue(projectId); + public void setProjectId(String projectId) { + this.projectId = projectId; } @Override diff --git a/api/src/com/cloud/api/view/vo/ResourceTagJoinVO.java b/api/src/com/cloud/api/view/vo/ResourceTagJoinVO.java new file mode 100644 index 00000000000..070720b31a7 --- /dev/null +++ b/api/src/com/cloud/api/view/vo/ResourceTagJoinVO.java @@ -0,0 +1,284 @@ +// 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.network.security.SecurityRule.SecurityRuleType; +import com.cloud.server.ResourceTag.TaggedResourceType; +import com.cloud.utils.db.GenericDao; +import com.cloud.vm.VirtualMachine.State; + +@Entity +@Table(name="resource_tag_view") +public class ResourceTagJoinVO implements ControlledViewEntity { + + @Column(name="id", updatable=false, nullable = false) + private long id; + + @Column(name="uuid") + private String uuid; + + @Column(name="key") + private String key; + + @Column(name="value") + String value; + + + + @Column(name="resource_id") + long resourceId; + + @Column(name="resource_uuid") + private String resourceUuid; + + @Column(name="resource_type") + @Enumerated(value=EnumType.STRING) + private TaggedResourceType resourceType; + + @Column(name="customer") + String customer; + + + + @Column(name="account_id") + private long accountId; + + @Column(name="account_uuid") + private String accountUuid; + + @Column(name="account_name") + private String accountName = null; + + @Column(name="account_type") + private short accountType; + + @Column(name="domain_id") + private long domainId; + + @Column(name="domain_uuid") + private String domainUuid; + + @Column(name="domain_name") + private String domainName = null; + + @Column(name="domain_path") + private String domainPath = null; + + @Column(name="project_id") + private long projectId; + + @Column(name="project_uuid") + private String projectUuid; + + @Column(name="project_name") + private String projectName; + + + + public ResourceTagJoinVO() { + } + + 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 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 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 getKey() { + return key; + } + + public void setKey(String key) { + this.key = key; + } + + public String getValue() { + return value; + } + + public void setValue(String value) { + this.value = value; + } + + public long getResourceId() { + return resourceId; + } + + public void setResourceId(long resourceId) { + this.resourceId = resourceId; + } + + public String getResourceUuid() { + return resourceUuid; + } + + public void setResourceUuid(String resourceUuid) { + this.resourceUuid = resourceUuid; + } + + public TaggedResourceType getResourceType() { + return resourceType; + } + + public void setResourceType(TaggedResourceType resourceType) { + this.resourceType = resourceType; + } + + public String getCustomer() { + return customer; + } + + public void setCustomer(String customer) { + this.customer = customer; + } + + @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; + ResourceTagJoinVO other = (ResourceTagJoinVO) obj; + if (id != other.id) + return false; + return true; + } +} diff --git a/api/src/com/cloud/server/TaggedResourceService.java b/api/src/com/cloud/server/TaggedResourceService.java index c98b02b2091..667a0238033 100644 --- a/api/src/com/cloud/server/TaggedResourceService.java +++ b/api/src/com/cloud/server/TaggedResourceService.java @@ -20,6 +20,8 @@ import java.util.List; import java.util.Map; import org.apache.cloudstack.api.user.tag.command.ListTagsCmd; + +import com.cloud.api.view.vo.ResourceTagJoinVO; import com.cloud.server.ResourceTag.TaggedResourceType; import com.cloud.utils.Pair; @@ -47,7 +49,7 @@ public interface TaggedResourceService { * @param listTagsCmd * @return */ - Pair, Integer> listTags(ListTagsCmd listTagsCmd); + Pair, Integer> listTags(ListTagsCmd listTagsCmd); /** * @param resourceIds diff --git a/api/src/org/apache/cloudstack/api/ResponseGenerator.java b/api/src/org/apache/cloudstack/api/ResponseGenerator.java index 96df77e53a0..4f0c8040b7d 100755 --- a/api/src/org/apache/cloudstack/api/ResponseGenerator.java +++ b/api/src/org/apache/cloudstack/api/ResponseGenerator.java @@ -153,6 +153,7 @@ 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.ResourceTagJoinVO; import com.cloud.api.view.vo.SecurityGroupJoinVO; import com.cloud.api.view.vo.UserVmJoinVO; import com.cloud.vm.VirtualMachine; @@ -327,6 +328,9 @@ public interface ResponseGenerator { */ ResourceTagResponse createResourceTagResponse(ResourceTag resourceTag, boolean keyValueOnly); + List createResourceTagResponse(boolean keyValueOnly, ResourceTagJoinVO... resourceTag); + + Site2SiteVpnGatewayResponse createSite2SiteVpnGatewayResponse(Site2SiteVpnGateway result); diff --git a/api/src/org/apache/cloudstack/api/user/tag/command/ListTagsCmd.java b/api/src/org/apache/cloudstack/api/user/tag/command/ListTagsCmd.java index ef95439618a..28f895b63ce 100644 --- a/api/src/org/apache/cloudstack/api/user/tag/command/ListTagsCmd.java +++ b/api/src/org/apache/cloudstack/api/user/tag/command/ListTagsCmd.java @@ -26,6 +26,7 @@ import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import com.cloud.api.response.ListResponse; import com.cloud.api.response.ResourceTagResponse; +import com.cloud.api.view.vo.ResourceTagJoinVO; import com.cloud.server.ResourceTag; import com.cloud.utils.Pair; @@ -56,15 +57,10 @@ public class ListTagsCmd extends BaseListProjectAndAccountResourcesCmd{ @Override public void execute() { - Pair, Integer> tags = _taggedResourceService.listTags(this); + Pair, Integer> tags = _taggedResourceService.listTags(this); ListResponse response = new ListResponse(); - List tagResponses = new ArrayList(); - for (ResourceTag tag : tags.first()) { - ResourceTagResponse tagResponse = _responseGenerator.createResourceTagResponse(tag, false); - tagResponses.add(tagResponse); - } + List tagResponses = _responseGenerator.createResourceTagResponse(false, tags.first().toArray(new ResourceTagJoinVO[tags.first().size()])); response.setResponses(tagResponses, tags.second()); - response.setResponseName(getCommandName()); this.setResponseObject(response); } diff --git a/server/src/com/cloud/api/ApiDBUtils.java b/server/src/com/cloud/api/ApiDBUtils.java index b48cbe6a264..b537bcbc1b7 100755 --- a/server/src/com/cloud/api/ApiDBUtils.java +++ b/server/src/com/cloud/api/ApiDBUtils.java @@ -24,9 +24,11 @@ import java.util.Set; import org.apache.cloudstack.api.ApiConstants.VMDetails; import com.cloud.api.response.DomainRouterResponse; +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.api.view.vo.ResourceTagJoinVO; import com.cloud.api.view.vo.SecurityGroupJoinVO; import com.cloud.api.view.vo.UserVmJoinVO; import com.cloud.async.AsyncJobManager; @@ -141,6 +143,7 @@ import com.cloud.storage.dao.VMTemplateHostDao; import com.cloud.storage.dao.VMTemplateSwiftDao; import com.cloud.storage.dao.VolumeDao; import com.cloud.storage.dao.VolumeHostDao; +import com.cloud.tags.dao.ResourceTagJoinDao; import com.cloud.user.Account; import com.cloud.user.AccountDetailsDao; import com.cloud.user.AccountVO; @@ -243,6 +246,8 @@ public class ApiDBUtils { private static AutoScaleVmGroupPolicyMapDao _asVmGroupPolicyMapDao; private static AutoScalePolicyDao _asPolicyDao; private static CounterDao _counterDao; + private static ResourceTagJoinDao _tagJoinDao; + static { _ms = (ManagementServer) ComponentLocator.getComponent(ManagementServer.Name); ComponentLocator locator = ComponentLocator.getLocator(ManagementServer.Name); @@ -311,6 +316,7 @@ public class ApiDBUtils { _asVmGroupPolicyMapDao = locator.getDao(AutoScaleVmGroupPolicyMapDao.class); _asVmGroupPolicyMapDao = locator.getDao(AutoScaleVmGroupPolicyMapDao.class); _counterDao = locator.getDao(CounterDao.class); + _tagJoinDao = locator.getDao(ResourceTagJoinDao.class); // Note: stats collector should already have been initialized by this time, otherwise a null instance is returned _statsCollector = StatsCollector.getInstance(); @@ -616,8 +622,8 @@ public class ApiDBUtils { return _site2SiteVpnGatewayDao.findById(vpnGatewayId); } - public static Site2SiteCustomerGatewayVO findCustomerGatewayById(Long customerGatewayId) { - return _site2SiteCustomerGatewayDao.findById(customerGatewayId); + public static Site2SiteCustomerGatewayVO findCustomerGatewayById(Long customerGatewayId) { + return _site2SiteCustomerGatewayDao.findById(customerGatewayId); } public static List listUsersByAccount(long accountId) { @@ -946,4 +952,22 @@ public class ApiDBUtils { public static List findSecurityGroupViewById(Long sgId){ return _securityGroupJoinDao.searchByIds(sgId); } + + public static ResourceTagResponse newResourceTagResponse(ResourceTagJoinVO vsg, boolean keyValueOnly) { + return _tagJoinDao.newResourceTagResponse(vsg, keyValueOnly); + } + + public static ResourceTagJoinVO newResourceTagView(ResourceTag sg){ + return _tagJoinDao.newResourceTagView(sg); + } + + public static ResourceTagJoinVO findResourceTagViewById(Long tagId){ + List tags = _tagJoinDao.searchByIds(tagId); + if ( tags != null && tags.size() > 0 ){ + return tags.get(0); + } + else{ + return null; + } + } } diff --git a/server/src/com/cloud/api/ApiResponseHelper.java b/server/src/com/cloud/api/ApiResponseHelper.java index ca39e8da189..7bb2f5ee84f 100755 --- a/server/src/com/cloud/api/ApiResponseHelper.java +++ b/server/src/com/cloud/api/ApiResponseHelper.java @@ -118,6 +118,7 @@ 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.ResourceTagJoinVO; import com.cloud.api.view.vo.SecurityGroupJoinVO; import com.cloud.api.view.vo.UserVmJoinVO; import com.cloud.async.AsyncJob; @@ -1080,27 +1081,27 @@ public class ApiResponseHelper implements ResponseGenerator { volResponse.setVolumeType(volume.getVolumeType().toString()); volResponse.setDeviceId(volume.getDeviceId()); - Long instanceId = volume.getInstanceId(); - if (instanceId != null && volume.getState() != Volume.State.Destroy) { - VMInstanceVO vm = ApiDBUtils.findVMInstanceById(instanceId); - if (vm != null) { - volResponse.setVirtualMachineId(vm.getId()); - volResponse.setVirtualMachineName(vm.getHostName()); - UserVm userVm = ApiDBUtils.findUserVmById(vm.getId()); - if (userVm != null) { - if (userVm.getDisplayName() != null) { - volResponse.setVirtualMachineDisplayName(userVm.getDisplayName()); - } else { - volResponse.setVirtualMachineDisplayName(userVm.getHostName()); - } - volResponse.setVirtualMachineState(vm.getState().toString()); - } else { - s_logger.error("User Vm with Id: " + instanceId + " does not exist for volume " + volume.getId()); - } - } else { - s_logger.error("Vm with Id: " + instanceId + " does not exist for volume " + volume.getId()); - } - } + Long instanceId = volume.getInstanceId(); + if (instanceId != null && volume.getState() != Volume.State.Destroy) { + VMInstanceVO vm = ApiDBUtils.findVMInstanceById(instanceId); + if (vm != null) { + volResponse.setVirtualMachineId(vm.getId()); + volResponse.setVirtualMachineName(vm.getHostName()); + UserVm userVm = ApiDBUtils.findUserVmById(vm.getId()); + if (userVm != null) { + if (userVm.getDisplayName() != null) { + volResponse.setVirtualMachineDisplayName(userVm.getDisplayName()); + } else { + volResponse.setVirtualMachineDisplayName(userVm.getHostName()); + } + volResponse.setVirtualMachineState(vm.getState().toString()); + } else { + s_logger.error("User Vm with Id: " + instanceId + " does not exist for volume " + volume.getId()); + } + } else { + s_logger.error("Vm with Id: " + instanceId + " does not exist for volume " + volume.getId()); + } + } // Show the virtual size of the volume volResponse.setSize(volume.getSize()); @@ -1108,7 +1109,7 @@ public class ApiResponseHelper implements ResponseGenerator { volResponse.setCreated(volume.getCreated()); volResponse.setState(volume.getState().toString()); if(volume.getState() == Volume.State.UploadOp){ - com.cloud.storage.VolumeHostVO volumeHostRef = ApiDBUtils.findVolumeHostRef(volume.getId(), volume.getDataCenterId()); + com.cloud.storage.VolumeHostVO volumeHostRef = ApiDBUtils.findVolumeHostRef(volume.getId(), volume.getDataCenterId()); volResponse.setSize(volumeHostRef.getSize()); volResponse.setCreated(volumeHostRef.getCreated()); Account caller = UserContext.current().getCaller(); @@ -1126,17 +1127,17 @@ public class ApiResponseHelper implements ResponseGenerator { } else { volumeStatus = volumeHostRef.getErrorString(); if(volumeHostRef.getDownloadState() == VMTemplateHostVO.Status.NOT_DOWNLOADED){ - volResponse.setState("UploadNotStarted"); + volResponse.setState("UploadNotStarted"); }else { - volResponse.setState("UploadError"); + volResponse.setState("UploadError"); } } volResponse.setStatus(volumeStatus); } else if (volumeHostRef.getDownloadState() == VMTemplateHostVO.Status.DOWNLOADED) { - volResponse.setStatus("Upload Complete"); - volResponse.setState("Uploaded"); + volResponse.setStatus("Upload Complete"); + volResponse.setState("Uploaded"); } else { - volResponse.setStatus("Successfully Installed"); + volResponse.setStatus("Successfully Installed"); } } @@ -1169,27 +1170,27 @@ public class ApiResponseHelper implements ResponseGenerator { // return hypervisor for ROOT and Resource domain only Account caller = UserContext.current().getCaller(); if ((caller.getType() == Account.ACCOUNT_TYPE_ADMIN || caller.getType() == Account.ACCOUNT_TYPE_RESOURCE_DOMAIN_ADMIN) && volume.getState() != Volume.State.UploadOp) { - volResponse.setHypervisor(ApiDBUtils.getVolumeHyperType(volume.getId()).toString()); + volResponse.setHypervisor(ApiDBUtils.getVolumeHyperType(volume.getId()).toString()); } volResponse.setAttached(volume.getAttached()); volResponse.setDestroyed(volume.getState() == Volume.State.Destroy); - boolean isExtractable = true; - if (volume.getVolumeType() != Volume.Type.DATADISK) { // Datadisk dont have any template dependence. - VMTemplateVO template = ApiDBUtils.findTemplateById(volume.getTemplateId()); + boolean isExtractable = true; + if (volume.getVolumeType() != Volume.Type.DATADISK) { // Datadisk dont have any template dependence. + VMTemplateVO template = ApiDBUtils.findTemplateById(volume.getTemplateId()); if (template != null) { // For ISO based volumes template = null and we allow extraction of all ISO based volumes - isExtractable = template.isExtractable() && template.getTemplateType() != Storage.TemplateType.SYSTEM; - } - } - - //set tag information - List tags = ApiDBUtils.listByResourceTypeAndId(TaggedResourceType.Volume, volume.getId()); - List tagResponses = new ArrayList(); - for (ResourceTag tag : tags) { - ResourceTagResponse tagResponse = createResourceTagResponse(tag, true); - tagResponses.add(tagResponse); - } - volResponse.setTags(tagResponses); + isExtractable = template.isExtractable() && template.getTemplateType() != Storage.TemplateType.SYSTEM; + } + } + + //set tag information + List tags = ApiDBUtils.listByResourceTypeAndId(TaggedResourceType.Volume, volume.getId()); + List tagResponses = new ArrayList(); + for (ResourceTag tag : tags) { + ResourceTagResponse tagResponse = createResourceTagResponse(tag, true); + tagResponses.add(tagResponse); + } + volResponse.setTags(tagResponses); volResponse.setExtractable(isExtractable); volResponse.setObjectName("volume"); @@ -2593,7 +2594,7 @@ public class ApiResponseHelper implements ResponseGenerator { response.setBroadcastUri(broadcastUri); String vlan="N/A"; if (broadcastUri.startsWith("vlan")) { - vlan = broadcastUri.substring("vlan://".length(), broadcastUri.length()); + vlan = broadcastUri.substring("vlan://".length(), broadcastUri.length()); } //return vlan information only to Root admin response.setVlan(vlan); @@ -3159,41 +3160,20 @@ public class ApiResponseHelper implements ResponseGenerator { @Override public ResourceTagResponse createResourceTagResponse(ResourceTag resourceTag, boolean keyValueOnly) { - ResourceTagResponse response = new ResourceTagResponse(); - response.setKey(resourceTag.getKey()); - response.setValue(resourceTag.getValue()); - - if (!keyValueOnly) { - response.setResourceType(resourceTag.getResourceType().toString()); - response.setId(ApiDBUtils.getUuid(String.valueOf(resourceTag.getResourceId()),resourceTag.getResourceType())); - Long accountId = resourceTag.getAccountId(); - Long domainId = resourceTag.getDomainId(); - if (accountId != null) { - Account account = ApiDBUtils.findAccountByIdIncludingRemoved(resourceTag.getAccountId()); - - if (account.getType() == Account.ACCOUNT_TYPE_PROJECT) { - // find the project - Project project = ApiDBUtils.findProjectByProjectAccountIdIncludingRemoved(account.getId()); - response.setProjectId(project.getId()); - response.setProjectName(project.getName()); - } else { - response.setAccountName(account.getAccountName()); - } - } - - if (domainId != null) { - response.setDomainId(domainId); - response.setDomainName(ApiDBUtils.findDomainById(domainId).getName()); - } - - response.setCustomer(resourceTag.getCustomer()); - } - - response.setObjectName("ag"); - - return response; + ResourceTagJoinVO rto = ApiDBUtils.newResourceTagView(resourceTag); + return ApiDBUtils.newResourceTagResponse(rto, keyValueOnly); } + + @Override + public List createResourceTagResponse(boolean keyValueOnly, ResourceTagJoinVO... tags) { + List respList = new ArrayList(); + for (ResourceTagJoinVO vt : tags){ + respList.add(ApiDBUtils.newResourceTagResponse(vt, keyValueOnly)); + } + return respList; + } + @Override public VpcOfferingResponse createVpcOfferingResponse(VpcOffering offering) { VpcOfferingResponse response = new VpcOfferingResponse(); @@ -3442,7 +3422,7 @@ public class ApiResponseHelper implements ResponseGenerator { @Override public Site2SiteVpnGatewayResponse createSite2SiteVpnGatewayResponse(Site2SiteVpnGateway result) { - Site2SiteVpnGatewayResponse response = new Site2SiteVpnGatewayResponse(); + Site2SiteVpnGatewayResponse response = new Site2SiteVpnGatewayResponse(); response.setId(result.getId()); response.setIp(ApiDBUtils.findIpAddressById(result.getAddrId()).getAddress().toString()); response.setVpcId(result.getVpcId()); @@ -3485,22 +3465,22 @@ public class ApiResponseHelper implements ResponseGenerator { response.setVpnGatewayId(result.getVpnGatewayId()); Long vpnGatewayId = result.getVpnGatewayId(); if(vpnGatewayId != null) { - Site2SiteVpnGatewayVO vpnGateway = ApiDBUtils.findVpnGatewayById(vpnGatewayId); - - long ipId = vpnGateway.getAddrId(); - IPAddressVO ipObj = ApiDBUtils.findIpAddressById(ipId); - response.setIp(ipObj.getAddress().addr()); + Site2SiteVpnGatewayVO vpnGateway = ApiDBUtils.findVpnGatewayById(vpnGatewayId); + + long ipId = vpnGateway.getAddrId(); + IPAddressVO ipObj = ApiDBUtils.findIpAddressById(ipId); + response.setIp(ipObj.getAddress().addr()); } response.setCustomerGatewayId(result.getCustomerGatewayId()); Long customerGatewayId = result.getCustomerGatewayId(); if(customerGatewayId != null) { - Site2SiteCustomerGatewayVO customerGateway = ApiDBUtils.findCustomerGatewayById(customerGatewayId); - response.setGatewayIp(customerGateway.getGatewayIp()); - response.setGuestCidrList(customerGateway.getGuestCidrList()); - response.setIpsecPsk(customerGateway.getIpsecPsk()); - response.setIkePolicy(customerGateway.getIkePolicy()); - response.setEspPolicy(customerGateway.getEspPolicy()); + Site2SiteCustomerGatewayVO customerGateway = ApiDBUtils.findCustomerGatewayById(customerGatewayId); + response.setGatewayIp(customerGateway.getGatewayIp()); + response.setGuestCidrList(customerGateway.getGuestCidrList()); + response.setIpsecPsk(customerGateway.getIpsecPsk()); + response.setIkePolicy(customerGateway.getIkePolicy()); + response.setEspPolicy(customerGateway.getEspPolicy()); response.setIkeLifetime(customerGateway.getIkeLifetime()); response.setEspLifetime(customerGateway.getEspLifetime()); response.setDpd(customerGateway.getDpd()); diff --git a/server/src/com/cloud/configuration/DefaultComponentLibrary.java b/server/src/com/cloud/configuration/DefaultComponentLibrary.java index 1e292c45510..89313e9d4e2 100755 --- a/server/src/com/cloud/configuration/DefaultComponentLibrary.java +++ b/server/src/com/cloud/configuration/DefaultComponentLibrary.java @@ -171,6 +171,7 @@ import com.cloud.storage.snapshot.SnapshotSchedulerImpl; import com.cloud.storage.swift.SwiftManagerImpl; import com.cloud.storage.upload.UploadMonitorImpl; import com.cloud.tags.TaggedResourceManagerImpl; +import com.cloud.tags.dao.ResourceTagJoinDaoImpl; import com.cloud.tags.dao.ResourceTagsDaoImpl; import com.cloud.template.HyervisorTemplateAdapter; import com.cloud.template.TemplateAdapter; @@ -222,6 +223,7 @@ public class DefaultComponentLibrary extends ComponentLibraryBase implements Com addDao("UserVmJoinDao", UserVmJoinDaoImpl.class); addDao("DomainRouterJoinDao", DomainRouterJoinDaoImpl.class); addDao("SecurityGroupJoinDao", SecurityGroupJoinDaoImpl.class); + addDao("ResourceTagJoinDao", ResourceTagJoinDaoImpl.class); ComponentInfo> info = addDao("ServiceOfferingDao", ServiceOfferingDaoImpl.class); info.addParameter("cache.size", "50"); info.addParameter("cache.time.to.live", "600"); diff --git a/server/src/com/cloud/network/security/dao/SecurityGroupJoinDaoImpl.java b/server/src/com/cloud/network/security/dao/SecurityGroupJoinDaoImpl.java index 2237112150c..019cf2c4f1e 100644 --- a/server/src/com/cloud/network/security/dao/SecurityGroupJoinDaoImpl.java +++ b/server/src/com/cloud/network/security/dao/SecurityGroupJoinDaoImpl.java @@ -37,6 +37,7 @@ import com.cloud.api.response.SecurityGroupResponse; import com.cloud.api.response.SecurityGroupRuleResponse; import com.cloud.api.response.UserVmResponse; import com.cloud.api.view.vo.DomainRouterJoinVO; +import com.cloud.api.view.vo.ResourceTagJoinVO; import com.cloud.api.view.vo.SecurityGroupJoinVO; import com.cloud.dc.DataCenter; import com.cloud.network.Network; @@ -126,29 +127,10 @@ public class SecurityGroupJoinDaoImpl extends GenericDaoBase 0) { - ResourceTagResponse tag = new ResourceTagResponse(); - tag.setKey(vsg.getTagKey()); - tag.setValue(vsg.getTagValue()); - if (vsg.getTagResourceType() != null) { - tag.setResourceType(vsg.getTagResourceType().toString()); + ResourceTagJoinVO vtag = ApiDBUtils.findResourceTagViewById(tag_id); + if ( vtag != null ){ + sgResponse.addTag(ApiDBUtils.newResourceTagResponse(vtag, false)); } - tag.setId(vsg.getTagResourceUuid()); // tag resource uuid - tag.setCustomer(vsg.getTagCustomer()); - // TODO: assuming tagAccountId and tagDomainId are the same as VM - // accountId and domainId - tag.setDomainId(vsg.getTagDomainId()); - if (vsg.getAccountType() == Account.ACCOUNT_TYPE_PROJECT) { - tag.setProjectId(vsg.getProjectId()); - tag.setProjectName(vsg.getProjectName()); - } else { - tag.setAccountName(vsg.getAccountName()); - } - tag.setDomainId(vsg.getDomainId()); // TODO: pending tag resource - // response uuid change - tag.setDomainName(vsg.getDomainName()); - - tag.setObjectName("tag"); - sgResponse.addTag(tag); } sgResponse.setObjectName("securitygroup"); @@ -194,29 +176,10 @@ public class SecurityGroupJoinDaoImpl extends GenericDaoBase 0 ) { - ResourceTagResponse tag = new ResourceTagResponse(); - tag.setKey(vsg.getTagKey()); - tag.setValue(vsg.getTagValue()); - if (vsg.getTagResourceType() != null) { - tag.setResourceType(vsg.getTagResourceType().toString()); + ResourceTagJoinVO vtag = ApiDBUtils.findResourceTagViewById(tag_id); + if ( vtag != null ){ + vsgData.addTag(ApiDBUtils.newResourceTagResponse(vtag, false)); } - tag.setId(vsg.getTagResourceUuid()); // tag resource uuid - tag.setCustomer(vsg.getTagCustomer()); - // TODO: assuming tagAccountId and tagDomainId are the same as VM - // accountId and domainId - tag.setDomainId(vsg.getTagDomainId()); - if (vsg.getAccountType() == Account.ACCOUNT_TYPE_PROJECT) { - tag.setProjectId(vsg.getProjectId()); - tag.setProjectName(vsg.getProjectName()); - } else { - tag.setAccountName(vsg.getAccountName()); - } - tag.setDomainId(vsg.getDomainId()); // TODO: pending tag resource - // response uuid change - tag.setDomainName(vsg.getDomainName()); - - tag.setObjectName("tag"); - vsgData.addTag(tag); } return vsgData; } diff --git a/server/src/com/cloud/tags/TaggedResourceManagerImpl.java b/server/src/com/cloud/tags/TaggedResourceManagerImpl.java index fba3079241b..3224bc9e65d 100644 --- a/server/src/com/cloud/tags/TaggedResourceManagerImpl.java +++ b/server/src/com/cloud/tags/TaggedResourceManagerImpl.java @@ -27,6 +27,8 @@ import javax.naming.ConfigurationException; import org.apache.log4j.Logger; import org.apache.cloudstack.api.user.tag.command.ListTagsCmd; + +import com.cloud.api.view.vo.ResourceTagJoinVO; import com.cloud.domain.Domain; import com.cloud.event.ActionEvent; import com.cloud.event.EventTypes; @@ -50,6 +52,7 @@ import com.cloud.storage.dao.SnapshotDao; import com.cloud.storage.dao.VMTemplateDao; import com.cloud.storage.dao.VolumeDao; import com.cloud.tags.dao.ResourceTagDao; +import com.cloud.tags.dao.ResourceTagJoinDao; import com.cloud.user.Account; import com.cloud.user.AccountManager; import com.cloud.user.DomainManager; @@ -83,6 +86,8 @@ public class TaggedResourceManagerImpl implements TaggedResourceService, Manager @Inject ResourceTagDao _resourceTagDao; @Inject + ResourceTagJoinDao _resourceTagJoinDao; + @Inject IdentityDao _identityDao; @Inject DomainManager _domainMgr; @@ -269,7 +274,7 @@ public class TaggedResourceManagerImpl implements TaggedResourceService, Manager _accountMgr.checkAccess(caller, _domainMgr.getDomain(domainId)); } else { throw new PermissionDeniedException("Account " + caller + " doesn't have permissions to create tags" + - " for resource " + key); + " for resource " + key); } String value = tags.get(key); @@ -322,7 +327,7 @@ public class TaggedResourceManagerImpl implements TaggedResourceService, Manager } @Override - public Pair, Integer> listTags(ListTagsCmd cmd) { + public Pair, Integer> listTags(ListTagsCmd cmd) { Account caller = UserContext.current().getCaller(); List permittedAccounts = new ArrayList(); String key = cmd.getKey(); @@ -340,10 +345,10 @@ public class TaggedResourceManagerImpl implements TaggedResourceService, Manager Long domainId = domainIdRecursiveListProject.first(); Boolean isRecursive = domainIdRecursiveListProject.second(); ListProjectResourcesCriteria listProjectResourcesCriteria = domainIdRecursiveListProject.third(); - Filter searchFilter = new Filter(ResourceTagVO.class, "resourceType", false, cmd.getStartIndex(), cmd.getPageSizeVal()); + Filter searchFilter = new Filter(ResourceTagJoinVO.class, "resourceType", false, cmd.getStartIndex(), cmd.getPageSizeVal()); - SearchBuilder sb = _resourceTagDao.createSearchBuilder(); - _accountMgr.buildACLSearchBuilder(sb, domainId, isRecursive, permittedAccounts, listProjectResourcesCriteria); + SearchBuilder sb = _resourceTagJoinDao.createSearchBuilder(); + _accountMgr.buildACLViewSearchBuilder(sb, domainId, isRecursive, permittedAccounts, listProjectResourcesCriteria); sb.and("key", sb.entity().getKey(), SearchCriteria.Op.EQ); sb.and("value", sb.entity().getValue(), SearchCriteria.Op.EQ); @@ -358,8 +363,8 @@ public class TaggedResourceManagerImpl implements TaggedResourceService, Manager sb.and("customer", sb.entity().getCustomer(), SearchCriteria.Op.EQ); // now set the SC criteria... - SearchCriteria sc = sb.create(); - _accountMgr.buildACLSearchCriteria(sc, domainId, isRecursive, permittedAccounts, listProjectResourcesCriteria); + SearchCriteria sc = sb.create(); + _accountMgr.buildACLViewSearchCriteria(sc, domainId, isRecursive, permittedAccounts, listProjectResourcesCriteria); if (key != null) { sc.setParameters("key", key); @@ -382,8 +387,8 @@ public class TaggedResourceManagerImpl implements TaggedResourceService, Manager sc.setParameters("customer", customerName); } - Pair, Integer> result = _resourceTagDao.searchAndCount(sc, searchFilter); - return new Pair, Integer> (result.first(), result.second()); + Pair, Integer> result = _resourceTagJoinDao.searchAndCount(sc, searchFilter); + return new Pair, Integer> (result.first(), result.second()); } @Override diff --git a/server/src/com/cloud/tags/dao/ResourceTagJoinDao.java b/server/src/com/cloud/tags/dao/ResourceTagJoinDao.java new file mode 100644 index 00000000000..8aa0a16f285 --- /dev/null +++ b/server/src/com/cloud/tags/dao/ResourceTagJoinDao.java @@ -0,0 +1,34 @@ +// 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.tags.dao; + +import java.util.List; + +import com.cloud.api.response.ResourceTagResponse; +import com.cloud.api.view.vo.ResourceTagJoinVO; +import com.cloud.server.ResourceTag; +import com.cloud.user.Account; +import com.cloud.utils.db.GenericDao; + +public interface ResourceTagJoinDao extends GenericDao { + + ResourceTagResponse newResourceTagResponse(ResourceTagJoinVO uvo, boolean keyValueOnly ); + + ResourceTagJoinVO newResourceTagView(ResourceTag vr); + + List searchByIds(Long... ids); +} diff --git a/server/src/com/cloud/tags/dao/ResourceTagJoinDaoImpl.java b/server/src/com/cloud/tags/dao/ResourceTagJoinDaoImpl.java new file mode 100644 index 00000000000..6593f904321 --- /dev/null +++ b/server/src/com/cloud/tags/dao/ResourceTagJoinDaoImpl.java @@ -0,0 +1,137 @@ +// 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.tags.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.api.view.vo.ResourceTagJoinVO; +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.projects.Project; +import com.cloud.server.ResourceTag; +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={ResourceTagJoinDao.class}) +public class ResourceTagJoinDaoImpl extends GenericDaoBase implements ResourceTagJoinDao { + public static final Logger s_logger = Logger.getLogger(ResourceTagJoinDaoImpl.class); + + private SearchBuilder vrSearch; + + private SearchBuilder vrIdSearch; + + protected ResourceTagJoinDaoImpl() { + + 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 resource_tag_view WHERE "; + } + + + + + + @Override + public ResourceTagResponse newResourceTagResponse(ResourceTagJoinVO resourceTag, boolean keyValueOnly) { + ResourceTagResponse response = new ResourceTagResponse(); + response.setKey(resourceTag.getKey()); + response.setValue(resourceTag.getValue()); + + if (!keyValueOnly) { + response.setResourceType(resourceTag.getResourceType().toString()); + response.setResourceId(resourceTag.getResourceUuid()); + + if (resourceTag.getAccountType() == Account.ACCOUNT_TYPE_PROJECT) { + + response.setProjectId(resourceTag.getProjectUuid()); + response.setProjectName(resourceTag.getProjectName()); + } else { + response.setAccountName(resourceTag.getAccountName()); + } + + response.setDomainId(resourceTag.getDomainUuid()); + response.setDomainName(resourceTag.getDomainName()); + + response.setCustomer(resourceTag.getCustomer()); + } + + response.setObjectName("tag"); + + return response; + } + + + @Override + public List searchByIds(Long... ids) { + SearchCriteria sc = vrSearch.create(); + sc.setParameters("idIN", ids); + return searchIncludingRemoved(sc, null, null, false); + } + + + @Override + public ResourceTagJoinVO newResourceTagView(ResourceTag vr) { + + List uvList = new ArrayList(); + SearchCriteria sc = vrIdSearch.create(); + sc.setParameters("id", vr.getId()); + List vms = searchIncludingRemoved(sc, null, null, false); + assert vms != null && vms.size() == 1 : "No tag found for tag id " + vr.getId(); + return vms.get(0); + + } + +} diff --git a/server/src/com/cloud/vm/dao/UserVmJoinDaoImpl.java b/server/src/com/cloud/vm/dao/UserVmJoinDaoImpl.java index 63ebb26510a..742784cd42b 100644 --- a/server/src/com/cloud/vm/dao/UserVmJoinDaoImpl.java +++ b/server/src/com/cloud/vm/dao/UserVmJoinDaoImpl.java @@ -36,6 +36,7 @@ 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.ResourceTagJoinVO; import com.cloud.api.view.vo.UserVmJoinVO; import com.cloud.user.Account; import com.cloud.uservm.UserVm; @@ -209,29 +210,10 @@ public class UserVmJoinDaoImpl extends GenericDaoBase implem // 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()); + ResourceTagJoinVO vtag = ApiDBUtils.findResourceTagViewById(tag_id); + if ( vtag != null ){ + userVmResponse.addTag(ApiDBUtils.newResourceTagResponse(vtag, false)); } - 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); @@ -283,29 +265,10 @@ public class UserVmJoinDaoImpl extends GenericDaoBase implem 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()); + ResourceTagJoinVO vtag = ApiDBUtils.findResourceTagViewById(tag_id); + if ( vtag != null ){ + userVmData.addTag(ApiDBUtils.newResourceTagResponse(vtag, false)); } - 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; } diff --git a/setup/db/create-schema.sql b/setup/db/create-schema.sql index 0141149e808..3129fd52a8e 100755 --- a/setup/db/create-schema.sql +++ b/setup/db/create-schema.sql @@ -2774,3 +2774,31 @@ inner join domain on security_group.domain_id=domain.id left join projects on projects.project_account_id = security_group.account_id left join resource_tags on resource_tags.resource_id = security_group.id and resource_tags.resource_type = "SecurityGroup" left join async_job on async_job.instance_id = security_group.id and async_job.instance_type = "SecurityGroup" and async_job.job_status = 0; + +DROP VIEW IF EXISTS `cloud`.`resource_tag_view`; +CREATE VIEW resource_tag_view AS +select +resource_tags.id, +resource_tags.uuid, +resource_tags.key, +resource_tags.value, +resource_tags.resource_id, +resource_tags.resource_uuid, +resource_tags.resource_type, +resource_tags.customer, +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 +from resource_tags +inner join account on resource_tags.account_id=account.id +inner join domain on resource_tags.domain_id=domain.id +left join projects on projects.project_account_id = resource_tags.account_id; + From 41268d123714f7b25405f78fa90595d830621835 Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Fri, 7 Dec 2012 15:06:51 -0800 Subject: [PATCH 078/421] api: Fix test failure in cloud-server Added newly added dao class as part of list api optimizations to be picked up by the locator. Signed-off-by: Rohit Yadav --- .../cloud/network/security/SecurityGroupManagerImpl2Test.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/server/test/com/cloud/network/security/SecurityGroupManagerImpl2Test.java b/server/test/com/cloud/network/security/SecurityGroupManagerImpl2Test.java index c4b4e94a60f..46b7018f4d2 100644 --- a/server/test/com/cloud/network/security/SecurityGroupManagerImpl2Test.java +++ b/server/test/com/cloud/network/security/SecurityGroupManagerImpl2Test.java @@ -34,6 +34,7 @@ import com.cloud.domain.dao.DomainDaoImpl; import com.cloud.event.dao.UsageEventDaoImpl; import com.cloud.network.MockNetworkManagerImpl; import com.cloud.network.security.dao.SecurityGroupDaoImpl; +import com.cloud.network.security.dao.SecurityGroupJoinDaoImpl; import com.cloud.network.security.dao.SecurityGroupRuleDaoImpl; import com.cloud.network.security.dao.SecurityGroupRulesDaoImpl; import com.cloud.network.security.dao.SecurityGroupVMMapDaoImpl; @@ -66,6 +67,7 @@ public class SecurityGroupManagerImpl2Test extends TestCase { locator.addDao("SecurityGroupDao", SecurityGroupDaoImpl.class); locator.addDao("SecurityGroupRuleDao", SecurityGroupRuleDaoImpl.class); + locator.addDao("SecurityGroupJoinDao", SecurityGroupJoinDaoImpl.class); locator.addDao("SecurityGroupVMMapDao", SecurityGroupVMMapDaoImpl.class); locator.addDao("SecurityGroupRulesDao", SecurityGroupRulesDaoImpl.class); locator.addDao("UserVmDao", UserVmDaoImpl.class); From 30941c2d31a530a633796a5d7613f07365bb0fe7 Mon Sep 17 00:00:00 2001 From: Min Chen Date: Fri, 7 Dec 2012 16:22:28 -0800 Subject: [PATCH 079/421] api: Refactoring ListEventsCmd and EventResponse, and create Event db view. Signed-off-by: Rohit Yadav --- .../com/cloud/api/response/EventResponse.java | 26 +- .../com/cloud/api/view/vo/EventJoinVO.java | 331 ++++++++ .../cloud/api/view/vo/ResourceTagJoinVO.java | 18 +- .../api/view/vo/SecurityGroupJoinVO.java | 19 +- .../com/cloud/server/ManagementService.java | 3 +- .../cloudstack/api/ResponseGenerator.java | 3 + .../api/user/event/command/ListEventsCmd.java | 14 +- server/src/com/cloud/api/ApiDBUtils.java | 34 +- .../src/com/cloud/api/ApiResponseHelper.java | 113 ++- server/src/com/cloud/api/ApiServer.java | 48 +- .../DefaultComponentLibrary.java | 4 +- .../src/com/cloud/event/dao/EventJoinDao.java | 40 + .../com/cloud/event/dao/EventJoinDaoImpl.java | 155 ++++ .../cloud/server/ManagementServerImpl.java | 720 ++++++++++-------- .../cloud/tags/TaggedResourceManagerImpl.java | 88 +-- .../tags/dao/ResourceTagJoinDaoImpl.java | 8 +- setup/db/create-schema.sql | 33 + 17 files changed, 1148 insertions(+), 509 deletions(-) create mode 100644 api/src/com/cloud/api/view/vo/EventJoinVO.java create mode 100644 server/src/com/cloud/event/dao/EventJoinDao.java create mode 100644 server/src/com/cloud/event/dao/EventJoinDaoImpl.java diff --git a/api/src/com/cloud/api/response/EventResponse.java b/api/src/com/cloud/api/response/EventResponse.java index b8b5dfd8463..990f196986c 100644 --- a/api/src/com/cloud/api/response/EventResponse.java +++ b/api/src/com/cloud/api/response/EventResponse.java @@ -25,9 +25,9 @@ import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; @SuppressWarnings("unused") -public class EventResponse extends BaseResponse implements ControlledEntityResponse{ +public class EventResponse extends BaseResponse implements ControlledViewEntityResponse{ @SerializedName(ApiConstants.ID) @Param(description="the ID of the event") - private IdentityProxy id = new IdentityProxy("event"); + private String id; @SerializedName(ApiConstants.USERNAME) @Param(description="the name of the user who performed the action (can be different from the account if an admin is performing an action for a user, e.g. starting/stopping a user's virtual machine)") private String username; @@ -45,13 +45,13 @@ public class EventResponse extends BaseResponse implements ControlledEntityRespo 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 id of the account's domain") - private IdentityProxy domainId = new IdentityProxy("domain"); + private String domainId; @SerializedName(ApiConstants.DOMAIN) @Param(description="the name of the account's domain") private String domainName; @@ -63,10 +63,10 @@ public class EventResponse extends BaseResponse implements ControlledEntityRespo private Event.State state; @SerializedName("parentid") @Param(description="whether the event is parented") - private IdentityProxy parentId = new IdentityProxy("event"); + private String parentId; - public void setId(Long id) { - this.id.setValue(id); + public void setId(String id) { + this.id = id; } public void setUsername(String username) { @@ -91,8 +91,8 @@ public class EventResponse extends BaseResponse implements ControlledEntityRespo } @Override - public void setDomainId(Long domainId) { - this.domainId.setValue(domainId); + public void setDomainId(String domainId) { + this.domainId = domainId; } @Override @@ -108,13 +108,13 @@ public class EventResponse extends BaseResponse implements ControlledEntityRespo this.state = state; } - public void setParentId(Long parentId) { - this.parentId.setValue(parentId); + public void setParentId(String parentId) { + this.parentId = parentId; } @Override - public void setProjectId(Long projectId) { - this.projectId.setValue(projectId); + public void setProjectId(String projectId) { + this.projectId = projectId; } @Override diff --git a/api/src/com/cloud/api/view/vo/EventJoinVO.java b/api/src/com/cloud/api/view/vo/EventJoinVO.java new file mode 100644 index 00000000000..00e4d20e2cc --- /dev/null +++ b/api/src/com/cloud/api/view/vo/EventJoinVO.java @@ -0,0 +1,331 @@ +// 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.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.utils.db.GenericDao; +import com.cloud.event.Event.State; + +@Entity +@Table(name="event_view") +public class EventJoinVO implements ControlledViewEntity { + + @Column(name="id", updatable=false, nullable = false) + private long id; + + @Column(name="uuid") + private String uuid; + + @Column(name="type") + private String type; + + @Enumerated(value=EnumType.STRING) + @Column(name="state") + private State state; + + @Column(name="description") + private String description; + + @Column(name=GenericDao.CREATED_COLUMN) + private Date createDate; + + @Column(name="user_id") + private long userId; + + @Column(name="user_name") + private String userName; + + @Column(name="level") + private String level; + + @Column(name="start_id") + private long startId; + + @Column(name="start_uuid") + private String startUuid; + + @Column(name="parameters", length=1024) + private String parameters; + + + @Column(name="account_id") + private long accountId; + + @Column(name="account_uuid") + private String accountUuid; + + @Column(name="account_name") + private String accountName = null; + + @Column(name="account_type") + private short accountType; + + @Column(name="domain_id") + private long domainId; + + @Column(name="domain_uuid") + private String domainUuid; + + @Column(name="domain_name") + private String domainName = null; + + @Column(name="domain_path") + private String domainPath = null; + + @Column(name="project_id") + private long projectId; + + @Column(name="project_uuid") + private String projectUuid; + + @Column(name="project_name") + private String projectName; + + + + public EventJoinVO() { + } + + 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; + } + + + @Override + public long getAccountId() { + return accountId; + } + + public void setAccountId(long accountId) { + this.accountId = accountId; + } + + @Override + public String getAccountUuid() { + return accountUuid; + } + + public void setAccountUuid(String accountUuid) { + this.accountUuid = accountUuid; + } + + @Override + public String getAccountName() { + return accountName; + } + + public void setAccountName(String accountName) { + this.accountName = accountName; + } + + @Override + public short getAccountType() { + return accountType; + } + + public void setAccountType(short accountType) { + this.accountType = accountType; + } + + @Override + 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; + } + + @Override + public String getDomainName() { + return domainName; + } + + public void setDomainName(String domainName) { + this.domainName = domainName; + } + + @Override + public String getDomainPath() { + return domainPath; + } + + public void setDomainPath(String domainPath) { + this.domainPath = domainPath; + } + + public long getProjectId() { + return projectId; + } + + public void setProjectId(long projectId) { + this.projectId = projectId; + } + + @Override + public String getProjectUuid() { + return projectUuid; + } + + public void setProjectUuid(String projectUuid) { + this.projectUuid = projectUuid; + } + + @Override + public String getProjectName() { + return projectName; + } + + public void setProjectName(String projectName) { + this.projectName = projectName; + } + + + + + + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; + } + + public State getState() { + return state; + } + + public void setState(State state) { + this.state = state; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + + public Date getCreateDate() { + return createDate; + } + + public void setCreateDate(Date createDate) { + this.createDate = createDate; + } + + public long getUserId() { + return userId; + } + + public void setUserId(long userId) { + this.userId = userId; + } + + public String getUserName() { + return userName; + } + + public void setUserName(String userName) { + this.userName = userName; + } + + public String getLevel() { + return level; + } + + public void setLevel(String level) { + this.level = level; + } + + public long getStartId() { + return startId; + } + + public void setStartId(long startId) { + this.startId = startId; + } + + + public String getStartUuid() { + return startUuid; + } + + public void setStartUuid(String startUuid) { + this.startUuid = startUuid; + } + + public String getParameters() { + return parameters; + } + + public void setParameters(String parameters) { + this.parameters = parameters; + } + + @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; + EventJoinVO other = (EventJoinVO) obj; + if (id != other.id) + return false; + return true; + } +} diff --git a/api/src/com/cloud/api/view/vo/ResourceTagJoinVO.java b/api/src/com/cloud/api/view/vo/ResourceTagJoinVO.java index 070720b31a7..2237119833e 100644 --- a/api/src/com/cloud/api/view/vo/ResourceTagJoinVO.java +++ b/api/src/com/cloud/api/view/vo/ResourceTagJoinVO.java @@ -16,22 +16,13 @@ // 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.network.security.SecurityRule.SecurityRuleType; import com.cloud.server.ResourceTag.TaggedResourceType; -import com.cloud.utils.db.GenericDao; -import com.cloud.vm.VirtualMachine.State; @Entity @Table(name="resource_tag_view") @@ -121,6 +112,7 @@ public class ResourceTagJoinVO implements ControlledViewEntity { } + @Override public long getAccountId() { return accountId; } @@ -129,6 +121,7 @@ public class ResourceTagJoinVO implements ControlledViewEntity { this.accountId = accountId; } + @Override public String getAccountUuid() { return accountUuid; } @@ -137,6 +130,7 @@ public class ResourceTagJoinVO implements ControlledViewEntity { this.accountUuid = accountUuid; } + @Override public String getAccountName() { return accountName; } @@ -145,6 +139,7 @@ public class ResourceTagJoinVO implements ControlledViewEntity { this.accountName = accountName; } + @Override public short getAccountType() { return accountType; } @@ -153,6 +148,7 @@ public class ResourceTagJoinVO implements ControlledViewEntity { this.accountType = accountType; } + @Override public long getDomainId() { return domainId; } @@ -170,6 +166,7 @@ public class ResourceTagJoinVO implements ControlledViewEntity { this.domainUuid = domainUuid; } + @Override public String getDomainName() { return domainName; } @@ -178,6 +175,7 @@ public class ResourceTagJoinVO implements ControlledViewEntity { this.domainName = domainName; } + @Override public String getDomainPath() { return domainPath; } @@ -194,6 +192,7 @@ public class ResourceTagJoinVO implements ControlledViewEntity { this.projectId = projectId; } + @Override public String getProjectUuid() { return projectUuid; } @@ -202,6 +201,7 @@ public class ResourceTagJoinVO implements ControlledViewEntity { this.projectUuid = projectUuid; } + @Override public String getProjectName() { return projectName; } diff --git a/api/src/com/cloud/api/view/vo/SecurityGroupJoinVO.java b/api/src/com/cloud/api/view/vo/SecurityGroupJoinVO.java index c679d3d99b2..cd4c738f251 100644 --- a/api/src/com/cloud/api/view/vo/SecurityGroupJoinVO.java +++ b/api/src/com/cloud/api/view/vo/SecurityGroupJoinVO.java @@ -5,7 +5,7 @@ // 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, @@ -16,22 +16,14 @@ // 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.network.security.SecurityRule.SecurityRuleType; import com.cloud.server.ResourceTag.TaggedResourceType; -import com.cloud.utils.db.GenericDao; -import com.cloud.vm.VirtualMachine.State; @Entity @Table(name="security_group_view") @@ -173,6 +165,7 @@ public class SecurityGroupJoinVO implements ControlledViewEntity { this.name = name; } + @Override public long getAccountId() { return accountId; } @@ -181,6 +174,7 @@ public class SecurityGroupJoinVO implements ControlledViewEntity { this.accountId = accountId; } + @Override public String getAccountUuid() { return accountUuid; } @@ -189,6 +183,7 @@ public class SecurityGroupJoinVO implements ControlledViewEntity { this.accountUuid = accountUuid; } + @Override public String getAccountName() { return accountName; } @@ -197,6 +192,7 @@ public class SecurityGroupJoinVO implements ControlledViewEntity { this.accountName = accountName; } + @Override public short getAccountType() { return accountType; } @@ -205,6 +201,7 @@ public class SecurityGroupJoinVO implements ControlledViewEntity { this.accountType = accountType; } + @Override public long getDomainId() { return domainId; } @@ -222,6 +219,7 @@ public class SecurityGroupJoinVO implements ControlledViewEntity { this.domainUuid = domainUuid; } + @Override public String getDomainName() { return domainName; } @@ -230,6 +228,7 @@ public class SecurityGroupJoinVO implements ControlledViewEntity { this.domainName = domainName; } + @Override public String getDomainPath() { return domainPath; } @@ -246,6 +245,7 @@ public class SecurityGroupJoinVO implements ControlledViewEntity { this.projectId = projectId; } + @Override public String getProjectUuid() { return projectUuid; } @@ -254,6 +254,7 @@ public class SecurityGroupJoinVO implements ControlledViewEntity { this.projectUuid = projectUuid; } + @Override public String getProjectName() { return projectName; } diff --git a/api/src/com/cloud/server/ManagementService.java b/api/src/com/cloud/server/ManagementService.java index 5ee90543a70..75064bfaa42 100755 --- a/api/src/com/cloud/server/ManagementService.java +++ b/api/src/com/cloud/server/ManagementService.java @@ -63,6 +63,7 @@ import org.apache.cloudstack.api.user.vmgroup.command.UpdateVMGroupCmd; import org.apache.cloudstack.api.admin.systemvm.command.UpgradeSystemVMCmd; import org.apache.cloudstack.api.admin.resource.command.UploadCustomCertificateCmd; import com.cloud.api.view.vo.DomainRouterJoinVO; +import com.cloud.api.view.vo.EventJoinVO; import com.cloud.async.AsyncJob; import com.cloud.capacity.Capacity; import com.cloud.configuration.Configuration; @@ -174,7 +175,7 @@ public interface ManagementService { * @param c * @return List of Events. */ - List searchForEvents(ListEventsCmd c); + Pair, Integer> searchForEvents(ListEventsCmd c); /** * Obtains a list of routers by the specified search criteria. Can search by: "userId", "name", "state", diff --git a/api/src/org/apache/cloudstack/api/ResponseGenerator.java b/api/src/org/apache/cloudstack/api/ResponseGenerator.java index 4f0c8040b7d..c247e34e465 100755 --- a/api/src/org/apache/cloudstack/api/ResponseGenerator.java +++ b/api/src/org/apache/cloudstack/api/ResponseGenerator.java @@ -153,6 +153,7 @@ 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.EventJoinVO; import com.cloud.api.view.vo.ResourceTagJoinVO; import com.cloud.api.view.vo.SecurityGroupJoinVO; import com.cloud.api.view.vo.UserVmJoinVO; @@ -262,6 +263,8 @@ public interface ResponseGenerator { EventResponse createEventResponse(Event event); + List createEventResponse(EventJoinVO... events); + TemplateResponse createIsoResponse(VirtualMachineTemplate result); List createCapacityResponse(List result, DecimalFormat format); diff --git a/api/src/org/apache/cloudstack/api/user/event/command/ListEventsCmd.java b/api/src/org/apache/cloudstack/api/user/event/command/ListEventsCmd.java index 56f162662fa..a16252dd1d6 100755 --- a/api/src/org/apache/cloudstack/api/user/event/command/ListEventsCmd.java +++ b/api/src/org/apache/cloudstack/api/user/event/command/ListEventsCmd.java @@ -29,7 +29,11 @@ import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import com.cloud.api.response.EventResponse; import com.cloud.api.response.ListResponse; +import com.cloud.api.response.ResourceTagResponse; +import com.cloud.api.view.vo.EventJoinVO; +import com.cloud.api.view.vo.ResourceTagJoinVO; import com.cloud.event.Event; +import com.cloud.utils.Pair; @Implementation(description="A command to list events.", responseObject=EventResponse.class) public class ListEventsCmd extends BaseListProjectAndAccountResourcesCmd { @@ -106,14 +110,10 @@ public class ListEventsCmd extends BaseListProjectAndAccountResourcesCmd { @Override public void execute(){ - List result = _mgr.searchForEvents(this); + Pair, Integer> result = _mgr.searchForEvents(this); ListResponse response = new ListResponse(); - List eventResponses = new ArrayList(); - for (Event event : result) { - eventResponses.add(_responseGenerator.createEventResponse(event)); - } - - response.setResponses(eventResponses); + List eventResponses = _responseGenerator.createEventResponse(result.first().toArray(new EventJoinVO[result.first().size()])); + response.setResponses(eventResponses, result.second()); response.setResponseName(getCommandName()); this.setResponseObject(response); } diff --git a/server/src/com/cloud/api/ApiDBUtils.java b/server/src/com/cloud/api/ApiDBUtils.java index b537bcbc1b7..3d232c65062 100755 --- a/server/src/com/cloud/api/ApiDBUtils.java +++ b/server/src/com/cloud/api/ApiDBUtils.java @@ -5,7 +5,7 @@ // 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, @@ -24,10 +24,12 @@ import java.util.Set; import org.apache.cloudstack.api.ApiConstants.VMDetails; import com.cloud.api.response.DomainRouterResponse; +import com.cloud.api.response.EventResponse; 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.api.view.vo.EventJoinVO; import com.cloud.api.view.vo.ResourceTagJoinVO; import com.cloud.api.view.vo.SecurityGroupJoinVO; import com.cloud.api.view.vo.UserVmJoinVO; @@ -53,6 +55,8 @@ import com.cloud.dc.dao.HostPodDao; import com.cloud.dc.dao.VlanDao; import com.cloud.domain.DomainVO; import com.cloud.domain.dao.DomainDao; +import com.cloud.event.Event; +import com.cloud.event.dao.EventJoinDao; import com.cloud.exception.InvalidParameterValueException; import com.cloud.ha.HighAvailabilityManager; import com.cloud.host.Host; @@ -247,6 +251,7 @@ public class ApiDBUtils { private static AutoScalePolicyDao _asPolicyDao; private static CounterDao _counterDao; private static ResourceTagJoinDao _tagJoinDao; + private static EventJoinDao _eventJoinDao; static { _ms = (ManagementServer) ComponentLocator.getComponent(ManagementServer.Name); @@ -317,6 +322,7 @@ public class ApiDBUtils { _asVmGroupPolicyMapDao = locator.getDao(AutoScaleVmGroupPolicyMapDao.class); _counterDao = locator.getDao(CounterDao.class); _tagJoinDao = locator.getDao(ResourceTagJoinDao.class); + _eventJoinDao = locator.getDao(EventJoinDao.class); // Note: stats collector should already have been initialized by this time, otherwise a null instance is returned _statsCollector = StatsCollector.getInstance(); @@ -621,11 +627,11 @@ public class ApiDBUtils { public static Site2SiteVpnGatewayVO findVpnGatewayById(Long vpnGatewayId) { return _site2SiteVpnGatewayDao.findById(vpnGatewayId); } - - public static Site2SiteCustomerGatewayVO findCustomerGatewayById(Long customerGatewayId) { + + public static Site2SiteCustomerGatewayVO findCustomerGatewayById(Long customerGatewayId) { return _site2SiteCustomerGatewayDao.findById(customerGatewayId); } - + public static List listUsersByAccount(long accountId) { return _userDao.listByAccount(accountId); } @@ -775,11 +781,11 @@ public class ApiDBUtils { public static Project findProjectByProjectAccountId(long projectAccountId) { return _projectMgr.findByProjectAccountId(projectAccountId); } - + public static Project findProjectByProjectAccountIdIncludingRemoved(long projectAccountId) { return _projectMgr.findByProjectAccountIdIncludingRemoved(projectAccountId); } - + public static Project findProjectById(long projectId) { return _projectMgr.getProject(projectId); } @@ -833,15 +839,15 @@ public class ApiDBUtils { public static String getHaTag() { return _haMgr.getHaTag(); } - + public static Map> listVpcOffServices(long vpcOffId) { return _vpcMgr.getVpcOffSvcProvidersMap(vpcOffId); } - + public static List listVpcNetworks(long vpcId) { return _networkMgr.listNetworksByVpc(vpcId); } - + public static boolean canUseForDeploy(Network network) { return _networkMgr.canUseForDeploy(network); } @@ -849,7 +855,7 @@ public class ApiDBUtils { public static String getUuid(String resourceId, TaggedResourceType resourceType) { return _taggedResourceService.getUuid(resourceId, resourceType); } - + public static boolean isOfferingForVpc(NetworkOffering offering) { boolean vpcProvider = _configMgr.isOfferingForVpc(offering); return vpcProvider; @@ -970,4 +976,12 @@ public class ApiDBUtils { return null; } } + + public static EventResponse newEventResponse(EventJoinVO ve) { + return _eventJoinDao.newEventResponse(ve); + } + + public static EventJoinVO newEventView(Event e){ + return _eventJoinDao.newEventView(e); + } } diff --git a/server/src/com/cloud/api/ApiResponseHelper.java b/server/src/com/cloud/api/ApiResponseHelper.java index 7bb2f5ee84f..95d10f4c10e 100755 --- a/server/src/com/cloud/api/ApiResponseHelper.java +++ b/server/src/com/cloud/api/ApiResponseHelper.java @@ -5,7 +5,7 @@ // 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, @@ -118,6 +118,7 @@ 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.EventJoinVO; import com.cloud.api.view.vo.ResourceTagJoinVO; import com.cloud.api.view.vo.SecurityGroupJoinVO; import com.cloud.api.view.vo.UserVmJoinVO; @@ -401,7 +402,7 @@ public class ApiResponseHelper implements ResponseGenerator { accountResponse.setNetworkLimit(networkLimitDisplay); accountResponse.setNetworkTotal(networkTotal); accountResponse.setNetworkAvailable(networkAvail); - + //get resource limits for vpcs Long vpcLimit = ApiDBUtils.findCorrectResourceLimit(ResourceType.vpc, account.getId()); String vpcLimitDisplay = (accountIsAdmin || vpcLimit == -1) ? "Unlimited" : String.valueOf(vpcLimit); @@ -423,8 +424,8 @@ public class ApiResponseHelper implements ResponseGenerator { accountResponse.setDetails(ApiDBUtils.getAccountDetails(account.getId())); return accountResponse; } - - + + @Override public UserResponse createUserResponse(UserAccount user) { UserResponse userResponse = new UserResponse(); @@ -1080,7 +1081,7 @@ public class ApiResponseHelper implements ResponseGenerator { volResponse.setVolumeType(volume.getVolumeType().toString()); volResponse.setDeviceId(volume.getDeviceId()); - + Long instanceId = volume.getInstanceId(); if (instanceId != null && volume.getState() != Volume.State.Destroy) { VMInstanceVO vm = ApiDBUtils.findVMInstanceById(instanceId); @@ -1169,8 +1170,8 @@ public class ApiResponseHelper implements ResponseGenerator { // return hypervisor for ROOT and Resource domain only Account caller = UserContext.current().getCaller(); - if ((caller.getType() == Account.ACCOUNT_TYPE_ADMIN || caller.getType() == Account.ACCOUNT_TYPE_RESOURCE_DOMAIN_ADMIN) && volume.getState() != Volume.State.UploadOp) { - volResponse.setHypervisor(ApiDBUtils.getVolumeHyperType(volume.getId()).toString()); + if ((caller.getType() == Account.ACCOUNT_TYPE_ADMIN || caller.getType() == Account.ACCOUNT_TYPE_RESOURCE_DOMAIN_ADMIN) && volume.getState() != Volume.State.UploadOp) { + volResponse.setHypervisor(ApiDBUtils.getVolumeHyperType(volume.getId()).toString()); } volResponse.setAttached(volume.getAttached()); @@ -1182,7 +1183,7 @@ public class ApiResponseHelper implements ResponseGenerator { isExtractable = template.isExtractable() && template.getTemplateType() != Storage.TemplateType.SYSTEM; } } - + //set tag information List tags = ApiDBUtils.listByResourceTypeAndId(TaggedResourceType.Volume, volume.getId()); List tagResponses = new ArrayList(); @@ -2140,26 +2141,20 @@ public class ApiResponseHelper implements ResponseGenerator { return createTemplateResponses(templateId, host.getDataCenterId(), true); } + + @Override + public List createEventResponse(EventJoinVO... events) { + List respList = new ArrayList(); + for (EventJoinVO vt : events){ + respList.add(ApiDBUtils.newEventResponse(vt)); + } + return respList; + } + @Override public EventResponse createEventResponse(Event event) { - EventResponse responseEvent = new EventResponse(); - responseEvent.setCreated(event.getCreateDate()); - responseEvent.setDescription(event.getDescription()); - responseEvent.setEventType(event.getType()); - responseEvent.setId(event.getId()); - responseEvent.setLevel(event.getLevel()); - responseEvent.setParentId(event.getStartId()); - responseEvent.setState(event.getState()); - - populateOwner(responseEvent, event); - - User user = ApiDBUtils.findUserById(event.getUserId()); - if (user != null) { - responseEvent.setUsername(user.getUsername()); - } - - responseEvent.setObjectName("event"); - return responseEvent; + EventJoinVO vEvent = ApiDBUtils.newEventView(event); + return ApiDBUtils.newEventResponse(vEvent); } private List sumCapacities(List hostCapacities) { @@ -2554,7 +2549,7 @@ public class ApiResponseHelper implements ResponseGenerator { serviceResponses.add(svcRsp); } response.setForVpc(ApiDBUtils.isOfferingForVpc(offering)); - + response.setServices(serviceResponses); response.setObjectName("networkoffering"); return response; @@ -2598,7 +2593,7 @@ public class ApiResponseHelper implements ResponseGenerator { } //return vlan information only to Root admin response.setVlan(vlan); - + } DataCenter zone = ApiDBUtils.findZoneById(network.getDataCenterId()); @@ -2715,7 +2710,7 @@ public class ApiResponseHelper implements ResponseGenerator { response.setDomain(domain.getName()); response.setOwner(ApiDBUtils.getProjectOwner(project.getId()).getAccountName()); - + //set tag information List tags = ApiDBUtils.listByResourceTypeAndId(TaggedResourceType.Project, project.getId()); List tagResponses = new ArrayList(); @@ -2772,7 +2767,7 @@ public class ApiResponseHelper implements ResponseGenerator { response.setObjectName("firewallrule"); return response; } - + @Override public NetworkACLResponse createNetworkACLResponse(FirewallRule networkACL) { NetworkACLResponse response = new NetworkACLResponse(); @@ -2802,7 +2797,7 @@ public class ApiResponseHelper implements ResponseGenerator { response.setIcmpType(networkACL.getIcmpType()); response.setState(stateToSet); - + //set tag information List tags = ApiDBUtils.listByResourceTypeAndId(TaggedResourceType.NetworkACL, networkACL.getId()); List tagResponses = new ArrayList(); @@ -2811,7 +2806,7 @@ public class ApiResponseHelper implements ResponseGenerator { tagResponses.add(tagResponse); } response.setTags(tagResponses); - + response.setObjectName("networkacl"); return response; } @@ -3164,7 +3159,7 @@ public class ApiResponseHelper implements ResponseGenerator { return ApiDBUtils.newResourceTagResponse(rto, keyValueOnly); } - + @Override public List createResourceTagResponse(boolean keyValueOnly, ResourceTagJoinVO... tags) { List respList = new ArrayList(); @@ -3208,8 +3203,8 @@ public class ApiResponseHelper implements ResponseGenerator { response.setObjectName("vpcoffering"); return response; } - - + + @Override public VpcResponse createVpcResponse(Vpc vpc) { VpcResponse response = new VpcResponse(); @@ -3243,22 +3238,22 @@ public class ApiResponseHelper implements ResponseGenerator { serviceResponses.add(svcRsp); } - + List networkResponses = new ArrayList(); List networks = ApiDBUtils.listVpcNetworks(vpc.getId()); for (Network network : networks) { NetworkResponse ntwkRsp = createNetworkResponse(network); networkResponses.add(ntwkRsp); } - + DataCenter zone = ApiDBUtils.findZoneById(vpc.getZoneId()); response.setZoneId(vpc.getZoneId()); response.setZoneName(zone.getName()); - + response.setNetworks(networkResponses); response.setServices(serviceResponses); populateOwner(response, vpc); - + //set tag information List tags = ApiDBUtils.listByResourceTypeAndId(TaggedResourceType.Vpc, vpc.getId()); List tagResponses = new ArrayList(); @@ -3284,13 +3279,13 @@ public class ApiResponseHelper implements ResponseGenerator { response.setZoneName(zone.getName()); response.setAddress(result.getIp4Address()); response.setPhysicalNetworkId(result.getPhysicalNetworkId()); - + populateAccount(response, result.getAccountId()); populateDomain(response, result.getDomainId()); response.setState(result.getState().toString()); - + response.setObjectName("privategateway"); - + return response; } @@ -3390,14 +3385,14 @@ public class ApiResponseHelper implements ResponseGenerator { return response; } - + @Override public StaticRouteResponse createStaticRouteResponse(StaticRoute result) { StaticRouteResponse response = new StaticRouteResponse(); response.setId(result.getId()); response.setVpcId(result.getVpcId()); response.setCidr(result.getCidr()); - + StaticRoute.State state = result.getState(); String stateToSet = state.toString(); if (state.equals(FirewallRule.State.Revoke)) { @@ -3406,7 +3401,7 @@ public class ApiResponseHelper implements ResponseGenerator { response.setState(stateToSet); populateAccount(response, result.getAccountId()); populateDomain(response, result.getDomainId()); - + //set tag information List tags = ApiDBUtils.listByResourceTypeAndId(TaggedResourceType.StaticRoute, result.getId()); List tagResponses = new ArrayList(); @@ -3416,10 +3411,10 @@ public class ApiResponseHelper implements ResponseGenerator { } response.setTags(tagResponses); response.setObjectName("staticroute"); - + return response; } - + @Override public Site2SiteVpnGatewayResponse createSite2SiteVpnGatewayResponse(Site2SiteVpnGateway result) { Site2SiteVpnGatewayResponse response = new Site2SiteVpnGatewayResponse(); @@ -3428,7 +3423,7 @@ public class ApiResponseHelper implements ResponseGenerator { response.setVpcId(result.getVpcId()); response.setRemoved(result.getRemoved()); response.setObjectName("vpngateway"); - + populateAccount(response, result.getAccountId()); populateDomain(response, result.getDomainId()); return response; @@ -3450,10 +3445,10 @@ public class ApiResponseHelper implements ResponseGenerator { response.setRemoved(result.getRemoved()); response.setObjectName("vpncustomergateway"); - + populateAccount(response, result.getAccountId()); populateDomain(response, result.getDomainId()); - + return response; } @@ -3461,18 +3456,18 @@ public class ApiResponseHelper implements ResponseGenerator { public Site2SiteVpnConnectionResponse createSite2SiteVpnConnectionResponse(Site2SiteVpnConnection result) { Site2SiteVpnConnectionResponse response = new Site2SiteVpnConnectionResponse(); response.setId(result.getId()); - - response.setVpnGatewayId(result.getVpnGatewayId()); + + response.setVpnGatewayId(result.getVpnGatewayId()); Long vpnGatewayId = result.getVpnGatewayId(); if(vpnGatewayId != null) { Site2SiteVpnGatewayVO vpnGateway = ApiDBUtils.findVpnGatewayById(vpnGatewayId); - + long ipId = vpnGateway.getAddrId(); IPAddressVO ipObj = ApiDBUtils.findIpAddressById(ipId); - response.setIp(ipObj.getAddress().addr()); + response.setIp(ipObj.getAddress().addr()); } - - response.setCustomerGatewayId(result.getCustomerGatewayId()); + + response.setCustomerGatewayId(result.getCustomerGatewayId()); Long customerGatewayId = result.getCustomerGatewayId(); if(customerGatewayId != null) { Site2SiteCustomerGatewayVO customerGateway = ApiDBUtils.findCustomerGatewayById(customerGatewayId); @@ -3484,11 +3479,11 @@ public class ApiResponseHelper implements ResponseGenerator { response.setIkeLifetime(customerGateway.getIkeLifetime()); response.setEspLifetime(customerGateway.getEspLifetime()); response.setDpd(customerGateway.getDpd()); - } - + } + populateAccount(response, result.getAccountId()); populateDomain(response, result.getDomainId()); - + response.setState(result.getState().toString()); response.setCreated(result.getCreated()); response.setRemoved(result.getRemoved()); diff --git a/server/src/com/cloud/api/ApiServer.java b/server/src/com/cloud/api/ApiServer.java index bacec720bd4..ae12715b0dd 100755 --- a/server/src/com/cloud/api/ApiServer.java +++ b/server/src/com/cloud/api/ApiServer.java @@ -5,7 +5,7 @@ // 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, @@ -79,7 +79,9 @@ 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.event.command.ListEventsCmd; import org.apache.cloudstack.api.user.securitygroup.command.ListSecurityGroupsCmd; +import org.apache.cloudstack.api.user.tag.command.ListTagsCmd; import org.apache.cloudstack.api.user.vm.command.ListVMsCmd; import com.cloud.acl.ControlledEntity; import com.cloud.api.response.ApiResponseSerializer; @@ -137,7 +139,7 @@ public class ApiServer implements HttpRequestHandler { private static final DateFormat _dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ"); @Inject(adapter = APIAccessChecker.class) protected Adapters _apiAccessCheckers; - + private static ExecutorService _executor = new ThreadPoolExecutor(10, 150, 60, TimeUnit.SECONDS, new LinkedBlockingQueue(), new NamedThreadFactory("ApiServer")); @@ -191,7 +193,7 @@ public class ApiServer implements HttpRequestHandler { if (apiPort != null) { ListenerThread listenerThread = new ListenerThread(this, apiPort); listenerThread.start(); - } + } } @SuppressWarnings({ "unchecked", "rawtypes" }) @@ -246,7 +248,7 @@ public class ApiServer implements HttpRequestHandler { writeResponse(response, responseText, HttpStatus.SC_OK, responseType, null); } catch (ServerApiException se) { - String responseText = getSerializedApiError(se.getErrorCode(), se.getDescription(), parameterMap, responseType, se); + String responseText = getSerializedApiError(se.getErrorCode(), se.getDescription(), parameterMap, responseType, se); writeResponse(response, responseText, se.getErrorCode(), responseType, se.getDescription()); sb.append(" " + se.getErrorCode() + " " + se.getDescription()); } catch (RuntimeException e) { @@ -325,7 +327,7 @@ public class ApiServer implements HttpRequestHandler { } catch (Exception ex) { if (ex instanceof InvalidParameterValueException) { InvalidParameterValueException ref = (InvalidParameterValueException)ex; - ServerApiException e = new ServerApiException(BaseCmd.PARAM_ERROR, ex.getMessage()); + ServerApiException e = new ServerApiException(BaseCmd.PARAM_ERROR, ex.getMessage()); // copy over the IdentityProxy information as well and throw the serverapiexception. ArrayList idList = ref.getIdProxyList(); if (idList != null) { @@ -380,11 +382,11 @@ public class ApiServer implements HttpRequestHandler { } else { List entitiesToAccess = new ArrayList(); ApiDispatcher.setupParameters(cmdObj, params, entitiesToAccess); - + if(!entitiesToAccess.isEmpty()){ Account owner = s_instance._accountMgr.getActiveAccountById(cmdObj.getEntityOwnerId()); s_instance._accountMgr.checkAccess(caller, null, true, owner); - + s_instance._accountMgr.checkAccess(caller, null, true, (ControlledEntity[])entitiesToAccess.toArray()); } } @@ -402,7 +404,7 @@ public class ApiServer implements HttpRequestHandler { asyncCmd.setStartEventId(startEventId); // save the scheduled event - Long eventId = EventUtils.saveScheduledEvent((callerUserId == null) ? User.UID_SYSTEM : callerUserId, + Long eventId = EventUtils.saveScheduledEvent((callerUserId == null) ? User.UID_SYSTEM : callerUserId, asyncCmd.getEntityOwnerId(), asyncCmd.getEventType(), asyncCmd.getEventDescription(), startEventId); if (startEventId == 0) { @@ -414,8 +416,8 @@ public class ApiServer implements HttpRequestHandler { ctx.setAccountId(asyncCmd.getEntityOwnerId()); - Long instanceId = (objectId == null) ? asyncCmd.getInstanceId() : objectId; - AsyncJobVO job = new AsyncJobVO(callerUserId, caller.getId(), cmdObj.getClass().getName(), + Long instanceId = (objectId == null) ? asyncCmd.getInstanceId() : objectId; + AsyncJobVO job = new AsyncJobVO(callerUserId, caller.getId(), cmdObj.getClass().getName(), ApiGsonHelper.getBuilder().create().toJson(params), instanceId, asyncCmd.getInstanceType()); long jobId = _asyncMgr.submitAsyncJob(job); @@ -439,7 +441,9 @@ 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 && !(cmdObj instanceof ListVMsCmd) && !(cmdObj instanceof ListRoutersCmd) - && !(cmdObj instanceof ListSecurityGroupsCmd)) { + && !(cmdObj instanceof ListSecurityGroupsCmd) + && !(cmdObj instanceof ListTagsCmd) + && !(cmdObj instanceof ListEventsCmd)) { buildAsyncListResponse((BaseListCmd) cmdObj, caller); } @@ -653,7 +657,7 @@ public class ApiServer implements HttpRequestHandler { } return false; } - + public Long fetchDomainId(String domainUUID){ ComponentLocator locator = ComponentLocator.getLocator(ManagementServer.Name); IdentityDao identityDao = locator.getDao(IdentityDao.class); @@ -704,19 +708,19 @@ public class ApiServer implements HttpRequestHandler { if(user.getUuid() != null){ session.setAttribute("user_UUID", user.getUuid()); } - + session.setAttribute("username", userAcct.getUsername()); session.setAttribute("firstname", userAcct.getFirstname()); session.setAttribute("lastname", userAcct.getLastname()); session.setAttribute("accountobj", account); session.setAttribute("account", account.getAccountName()); - + session.setAttribute("domainid", account.getDomainId()); DomainVO domain = (DomainVO) _domainMgr.getDomain(account.getDomainId()); if(domain.getUuid() != null){ session.setAttribute("domain_UUID", domain.getUuid()); } - + session.setAttribute("type", Short.valueOf(account.getType()).toString()); session.setAttribute("registrationtoken", userAcct.getRegistrationToken()); session.setAttribute("registered", new Boolean(userAcct.isRegistered()).toString()); @@ -760,14 +764,14 @@ public class ApiServer implements HttpRequestHandler { private boolean isCommandAvailable(User user, String commandName) { boolean isCommandAvailable = false; - + for(APIAccessChecker apichecker : _apiAccessCheckers){ isCommandAvailable = apichecker.canAccessAPI(user, commandName); } - + return isCommandAvailable; } - + // FIXME: rather than isError, we might was to pass in the status code to give more flexibility private void writeResponse(HttpResponse resp, final String responseText, final int statusCode, String responseType, String reasonPhrase) { try { @@ -942,7 +946,7 @@ public class ApiServer implements HttpRequestHandler { for (int i=0; i < idList.size(); i++) { IdentityProxy id = idList.get(i); apiResponse.addProxyObject(id.getTableName(), id.getValue(), id.getidFieldName()); - } + } } // Also copy over the cserror code and the function/layer in which it was thrown. apiResponse.setCSErrorCode(ref.getCSErrorCode()); @@ -953,7 +957,7 @@ public class ApiServer implements HttpRequestHandler { for (int i=0; i < idList.size(); i++) { IdentityProxy id = idList.get(i); apiResponse.addProxyObject(id.getTableName(), id.getValue(), id.getidFieldName()); - } + } } // Also copy over the cserror code and the function/layer in which it was thrown. apiResponse.setCSErrorCode(ref.getCSErrorCode()); @@ -964,7 +968,7 @@ public class ApiServer implements HttpRequestHandler { for (int i=0; i < idList.size(); i++) { IdentityProxy id = idList.get(i); apiResponse.addProxyObject(id.getTableName(), id.getValue(), id.getidFieldName()); - } + } } // Also copy over the cserror code and the function/layer in which it was thrown. apiResponse.setCSErrorCode(ref.getCSErrorCode()); @@ -975,7 +979,7 @@ public class ApiServer implements HttpRequestHandler { responseText = ApiResponseSerializer.toSerializedString(apiResponse, responseType); } catch (Exception e) { - s_logger.error("Exception responding to http request", e); + s_logger.error("Exception responding to http request", e); } return responseText; } diff --git a/server/src/com/cloud/configuration/DefaultComponentLibrary.java b/server/src/com/cloud/configuration/DefaultComponentLibrary.java index 89313e9d4e2..b3ef40a4112 100755 --- a/server/src/com/cloud/configuration/DefaultComponentLibrary.java +++ b/server/src/com/cloud/configuration/DefaultComponentLibrary.java @@ -5,7 +5,7 @@ // 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, @@ -209,6 +209,7 @@ import com.cloud.vm.dao.UserVmDaoImpl; import com.cloud.vm.dao.UserVmJoinDaoImpl; import com.cloud.vm.dao.UserVmDetailsDaoImpl; import com.cloud.vm.dao.VMInstanceDaoImpl; +import com.cloud.event.dao.EventJoinDaoImpl; public class DefaultComponentLibrary extends ComponentLibraryBase implements ComponentLibrary { @@ -224,6 +225,7 @@ public class DefaultComponentLibrary extends ComponentLibraryBase implements Com addDao("DomainRouterJoinDao", DomainRouterJoinDaoImpl.class); addDao("SecurityGroupJoinDao", SecurityGroupJoinDaoImpl.class); addDao("ResourceTagJoinDao", ResourceTagJoinDaoImpl.class); + addDao("EventJoinDao", EventJoinDaoImpl.class); ComponentInfo> info = addDao("ServiceOfferingDao", ServiceOfferingDaoImpl.class); info.addParameter("cache.size", "50"); info.addParameter("cache.time.to.live", "600"); diff --git a/server/src/com/cloud/event/dao/EventJoinDao.java b/server/src/com/cloud/event/dao/EventJoinDao.java new file mode 100644 index 00000000000..bfdcd095cfb --- /dev/null +++ b/server/src/com/cloud/event/dao/EventJoinDao.java @@ -0,0 +1,40 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. +package com.cloud.event.dao; + +import java.util.List; + +import com.cloud.api.response.EventResponse; +import com.cloud.api.view.vo.EventJoinVO; +import com.cloud.event.Event; +import com.cloud.event.EventVO; +import com.cloud.utils.db.Filter; +import com.cloud.utils.db.GenericDao; +import com.cloud.utils.db.SearchCriteria; + +public interface EventJoinDao extends GenericDao { + + EventResponse newEventResponse(EventJoinVO uvo); + + EventJoinVO newEventView(Event vr); + + List searchByIds(Long... ids); + + List searchAllEvents(SearchCriteria sc, Filter filter); + + EventJoinVO findCompletedEvent(long startId); +} diff --git a/server/src/com/cloud/event/dao/EventJoinDaoImpl.java b/server/src/com/cloud/event/dao/EventJoinDaoImpl.java new file mode 100644 index 00000000000..a00d1b33aaf --- /dev/null +++ b/server/src/com/cloud/event/dao/EventJoinDaoImpl.java @@ -0,0 +1,155 @@ +// 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.event.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.EventResponse; +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.api.view.vo.EventJoinVO; +import com.cloud.api.view.vo.ResourceTagJoinVO; +import com.cloud.dc.DataCenter; +import com.cloud.event.Event; +import com.cloud.event.EventVO; +import com.cloud.event.Event.State; +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.projects.Project; +import com.cloud.server.ResourceTag; +import com.cloud.user.Account; +import com.cloud.user.User; +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={EventJoinDao.class}) +public class EventJoinDaoImpl extends GenericDaoBase implements EventJoinDao { + public static final Logger s_logger = Logger.getLogger(EventJoinDaoImpl.class); + + private SearchBuilder vrSearch; + + private SearchBuilder vrIdSearch; + + private SearchBuilder CompletedEventSearch; + + protected EventJoinDaoImpl() { + + 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(); + + CompletedEventSearch = createSearchBuilder(); + CompletedEventSearch.and("state",CompletedEventSearch.entity().getState(),SearchCriteria.Op.EQ); + CompletedEventSearch.and("startId", CompletedEventSearch.entity().getStartId(), SearchCriteria.Op.EQ); + CompletedEventSearch.done(); + + + this._count = "select count(distinct id) from event_view WHERE "; + } + + + + @Override + public List searchAllEvents(SearchCriteria sc, Filter filter) { + return listIncludingRemovedBy(sc, filter); + } + + + + @Override + public EventJoinVO findCompletedEvent(long startId) { + SearchCriteria sc = CompletedEventSearch.create(); + sc.setParameters("state", State.Completed); + sc.setParameters("startId", startId); + return findOneIncludingRemovedBy(sc); + } + + + + @Override + public EventResponse newEventResponse(EventJoinVO event) { + EventResponse responseEvent = new EventResponse(); + responseEvent.setCreated(event.getCreateDate()); + responseEvent.setDescription(event.getDescription()); + responseEvent.setEventType(event.getType()); + responseEvent.setId(event.getUuid()); + responseEvent.setLevel(event.getLevel()); + responseEvent.setParentId(event.getStartUuid()); + responseEvent.setState(event.getState()); + responseEvent.setUsername(event.getUserName()); + + ApiResponseHelper.populateOwner(responseEvent, event); + responseEvent.setObjectName("event"); + return responseEvent; + } + + + + @Override + public List searchByIds(Long... ids) { + SearchCriteria sc = vrSearch.create(); + sc.setParameters("idIN", ids); + return searchIncludingRemoved(sc, null, null, false); + } + + + @Override + public EventJoinVO newEventView(Event vr) { + + List uvList = new ArrayList(); + SearchCriteria sc = vrIdSearch.create(); + sc.setParameters("id", vr.getId()); + List vms = searchIncludingRemoved(sc, null, null, false); + assert vms != null && vms.size() == 1 : "No event found for event id " + vr.getId(); + return vms.get(0); + + } + +} diff --git a/server/src/com/cloud/server/ManagementServerImpl.java b/server/src/com/cloud/server/ManagementServerImpl.java index fba6ac9828c..41727b68dfa 100755 --- a/server/src/com/cloud/server/ManagementServerImpl.java +++ b/server/src/com/cloud/server/ManagementServerImpl.java @@ -5,7 +5,7 @@ // 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, @@ -99,6 +99,7 @@ import org.apache.cloudstack.api.admin.systemvm.command.UpgradeSystemVMCmd; import org.apache.cloudstack.api.admin.resource.command.UploadCustomCertificateCmd; import com.cloud.api.response.ExtractResponse; import com.cloud.api.view.vo.DomainRouterJoinVO; +import com.cloud.api.view.vo.EventJoinVO; import com.cloud.async.AsyncJob; import com.cloud.async.AsyncJobExecutor; import com.cloud.async.AsyncJobManager; @@ -141,6 +142,7 @@ import com.cloud.event.EventTypes; import com.cloud.event.EventUtils; import com.cloud.event.EventVO; import com.cloud.event.dao.EventDao; +import com.cloud.event.dao.EventJoinDao; import com.cloud.exception.CloudAuthenticationException; import com.cloud.exception.ConcurrentOperationException; import com.cloud.exception.InvalidParameterValueException; @@ -281,6 +283,7 @@ public class ManagementServerImpl implements ManagementServer { private final ClusterDao _clusterDao; private final SecondaryStorageVmDao _secStorageVmDao; private final EventDao _eventDao; + private final EventJoinDao _eventJoinDao; private final DataCenterDao _dcDao; private final VlanDao _vlanDao; private final AccountVlanMapDao _accountVlanMapDao; @@ -322,7 +325,7 @@ public class ManagementServerImpl implements ManagementServer { private final Adapters _hostAllocators; private final ConfigurationManager _configMgr; private final ResourceTagDao _resourceTagDao; - + @Inject ProjectManager _projectMgr; private final ResourceManager _resourceMgr; @@ -342,7 +345,7 @@ public class ManagementServerImpl implements ManagementServer { private final StatsCollector _statsCollector; private final Map _availableIdsMap; - + private Adapters _userAuthenticators; private String _hashKey = null; @@ -353,6 +356,7 @@ public class ManagementServerImpl implements ManagementServer { _routerDao = locator.getDao(DomainRouterDao.class); _routerJoinDao = locator.getDao(DomainRouterJoinDao.class); _eventDao = locator.getDao(EventDao.class); + _eventJoinDao = locator.getDao(EventJoinDao.class); _dcDao = locator.getDao(DataCenterDao.class); _vlanDao = locator.getDao(VlanDao.class); _accountVlanMapDao = locator.getDao(AccountVlanMapDao.class); @@ -424,7 +428,7 @@ public class ManagementServerImpl implements ManagementServer { for (String id : availableIds) { _availableIdsMap.put(id, true); } - + _userAuthenticators = locator.getAdapters(UserAuthenticator.class); if (_userAuthenticators == null || !_userAuthenticators.isSet()) { s_logger.error("Unable to find an user authenticator."); @@ -450,8 +454,10 @@ public class ManagementServerImpl implements ManagementServer { String keyword = cmd.getKeyword(); if (domainId != null) { // for domainId != null - // right now, we made the decision to only list zones associated with this domain - dcs = _dcDao.findZonesByDomainId(domainId, keyword); // private zones + // right now, we made the decision to only list zones associated + // with this domain + dcs = _dcDao.findZonesByDomainId(domainId, keyword); // private + // zones } else if ((account == null || account.getType() == Account.ACCOUNT_TYPE_ADMIN)) { if (keyword != null) { dcs = _dcDao.findByKeyword(keyword); @@ -459,7 +465,8 @@ public class ManagementServerImpl implements ManagementServer { dcs = _dcDao.listAll(); // all zones } } else if (account.getType() == Account.ACCOUNT_TYPE_NORMAL) { - // it was decided to return all zones for the user's domain, and everything above till root + // it was decided to return all zones for the user's domain, and + // everything above till root // list all zones belonging to this domain, and all of its parents // check the parent, if not null, add zones for that parent to list dcs = new ArrayList(); @@ -478,7 +485,8 @@ public class ManagementServerImpl implements ManagementServer { dcs.addAll(_dcDao.listPublicZones(keyword)); removeDisabledZones = true; } else if (account.getType() == Account.ACCOUNT_TYPE_DOMAIN_ADMIN || account.getType() == Account.ACCOUNT_TYPE_RESOURCE_DOMAIN_ADMIN) { - // it was decided to return all zones for the domain admin, and everything above till root + // it was decided to return all zones for the domain admin, and + // everything above till root dcs = new ArrayList(); DomainVO domainRecord = _domainDao.findById(account.getDomainId()); // this covers path till root @@ -495,7 +503,8 @@ public class ManagementServerImpl implements ManagementServer { } // this covers till leaf if (domainRecord != null) { - // find all children for this domain based on a like search by path + // find all children for this domain based on a like search by + // path List allChildDomains = _domainDao.findAllChildren(domainRecord.getPath(), domainRecord.getId()); List allChildDomainIds = new ArrayList(); // create list of domainIds for search @@ -568,11 +577,14 @@ public class ManagementServerImpl implements ManagementServer { throw new InvalidParameterValueException("privatePort is an invalid value"); } - // s_logger.debug("Checking if " + privateIp + " is a valid private IP address. Guest IP address is: " + + // s_logger.debug("Checking if " + privateIp + + // " is a valid private IP address. Guest IP address is: " + // _configs.get("guest.ip.network")); // - // if (!NetUtils.isValidPrivateIp(privateIp, _configs.get("guest.ip.network"))) { - // throw new InvalidParameterValueException("Invalid private ip address"); + // if (!NetUtils.isValidPrivateIp(privateIp, + // _configs.get("guest.ip.network"))) { + // throw new + // InvalidParameterValueException("Invalid private ip address"); // } if (!NetUtils.isValidProto(proto)) { throw new InvalidParameterValueException("Invalid protocol"); @@ -621,7 +633,8 @@ public class ManagementServerImpl implements ManagementServer { return cal.getTime(); } - // This method is used for permissions check for both disk and service offerings + // This method is used for permissions check for both disk and service + // offerings private boolean isPermissible(Long accountDomainId, Long offeringDomainId) { if (accountDomainId == offeringDomainId) { @@ -652,11 +665,13 @@ public class ManagementServerImpl implements ManagementServer { public List searchForServiceOfferings(ListServiceOfferingsCmd cmd) { // Note - // The list method for offerings is being modified in accordance with discussion with Will/Kevin + // The list method for offerings is being modified in accordance with + // discussion with Will/Kevin // For now, we will be listing the following based on the usertype // 1. For root, we will list all offerings - // 2. For domainAdmin and regular users, we will list everything in their domains+parent domains ... all the way -// till + // 2. For domainAdmin and regular users, we will list everything in + // their domains+parent domains ... all the way + // till // root Boolean isAscending = Boolean.parseBoolean(_configDao.getValue("sortkey.algorithm")); isAscending = (isAscending == null ? true : isAscending); @@ -677,16 +692,20 @@ public class ManagementServerImpl implements ManagementServer { } // Keeping this logic consistent with domain specific zones - // if a domainId is provided, we just return the so associated with this domain + // if a domainId is provided, we just return the so associated with this + // domain if (domainId != null && caller.getType() != Account.ACCOUNT_TYPE_ADMIN) { - // check if the user's domain == so's domain || user's domain is a child of so's domain + // check if the user's domain == so's domain || user's domain is a + // child of so's domain if (!isPermissible(caller.getDomainId(), domainId)) { - throw new PermissionDeniedException("The account:" + caller.getAccountName() + " does not fall in the same domain hierarchy as the service offering"); + throw new PermissionDeniedException("The account:" + caller.getAccountName() + + " does not fall in the same domain hierarchy as the service offering"); } } // For non-root users - if ((caller.getType() == Account.ACCOUNT_TYPE_NORMAL || caller.getType() == Account.ACCOUNT_TYPE_DOMAIN_ADMIN) || caller.getType() == Account.ACCOUNT_TYPE_RESOURCE_DOMAIN_ADMIN) { + if ((caller.getType() == Account.ACCOUNT_TYPE_NORMAL || caller.getType() == Account.ACCOUNT_TYPE_DOMAIN_ADMIN) + || caller.getType() == Account.ACCOUNT_TYPE_RESOURCE_DOMAIN_ADMIN) { if (isSystem) { throw new InvalidParameterValueException("Only root admins can access system's offering"); } @@ -707,8 +726,8 @@ public class ManagementServerImpl implements ManagementServer { } else if (vmId != null) { UserVmVO vmInstance = _userVmDao.findById(vmId); if ((vmInstance == null) || (vmInstance.getRemoved() != null)) { - InvalidParameterValueException ex = new InvalidParameterValueException("unable to find a virtual machine with specified id"); - ex.addProxyObject(vmInstance, vmId, "vmId"); + InvalidParameterValueException ex = new InvalidParameterValueException("unable to find a virtual machine with specified id"); + ex.addProxyObject(vmInstance, vmId, "vmId"); throw ex; } @@ -717,8 +736,10 @@ public class ManagementServerImpl implements ManagementServer { ServiceOfferingVO offering = _offeringsDao.findByIdIncludingRemoved(vmInstance.getServiceOfferingId()); sc.addAnd("id", SearchCriteria.Op.NEQ, offering.getId()); - // Only return offerings with the same Guest IP type and storage pool preference - // sc.addAnd("guestIpType", SearchCriteria.Op.EQ, offering.getGuestIpType()); + // Only return offerings with the same Guest IP type and storage + // pool preference + // sc.addAnd("guestIpType", SearchCriteria.Op.EQ, + // offering.getGuestIpType()); sc.addAnd("useLocalStorage", SearchCriteria.Op.EQ, offering.getUseLocalStorage()); } if (id != null) { @@ -747,10 +768,12 @@ public class ManagementServerImpl implements ManagementServer { } - private List searchServiceOfferingsInternal(Account caller, Object name, Object id, Long vmId, Object keyword, Filter searchFilter) { + private List searchServiceOfferingsInternal(Account caller, Object name, Object id, Long vmId, Object keyword, + Filter searchFilter) { - // it was decided to return all offerings for the user's domain, and everything above till root (for normal user -// or + // it was decided to return all offerings for the user's domain, and + // everything above till root (for normal user + // or // domain admin) // list all offerings belonging to this domain, and all of its parents // check the parent, if not null, add offerings for that parent to list @@ -779,11 +802,11 @@ public class ManagementServerImpl implements ManagementServer { } else if (vmId != null) { UserVmVO vmInstance = _userVmDao.findById(vmId); if ((vmInstance == null) || (vmInstance.getRemoved() != null)) { - InvalidParameterValueException ex = new InvalidParameterValueException("unable to find a virtual machine with id " + vmId); - ex.addProxyObject(vmInstance, vmId, "vmId"); + InvalidParameterValueException ex = new InvalidParameterValueException("unable to find a virtual machine with id " + vmId); + ex.addProxyObject(vmInstance, vmId, "vmId"); throw ex; } - + _accountMgr.checkAccess(caller, null, false, vmInstance); ServiceOfferingVO offering = _offeringsDao.findById(vmInstance.getServiceOfferingId()); @@ -826,20 +849,20 @@ public class ManagementServerImpl implements ManagementServer { return sol; } - + @Override public List searchForClusters(long zoneId, Long startIndex, Long pageSizeVal, String hypervisorType) { - Filter searchFilter = new Filter(ClusterVO.class, "id", true, startIndex, pageSizeVal); - SearchCriteria sc = _clusterDao.createSearchCriteria(); - - zoneId = _accountMgr.checkAccessAndSpecifyAuthority(UserContext.current().getCaller(), zoneId); + Filter searchFilter = new Filter(ClusterVO.class, "id", true, startIndex, pageSizeVal); + SearchCriteria sc = _clusterDao.createSearchCriteria(); - sc.addAnd("dataCenterId", SearchCriteria.Op.EQ, zoneId); - sc.addAnd("hypervisorType", SearchCriteria.Op.EQ, hypervisorType); - - return _clusterDao.search(sc, searchFilter); + zoneId = _accountMgr.checkAccessAndSpecifyAuthority(UserContext.current().getCaller(), zoneId); + + sc.addAnd("dataCenterId", SearchCriteria.Op.EQ, zoneId); + sc.addAnd("hypervisorType", SearchCriteria.Op.EQ, hypervisorType); + + return _clusterDao.search(sc, searchFilter); } - + @Override public Pair, Integer> searchForClusters(ListClustersCmd cmd) { Filter searchFilter = new Filter(ClusterVO.class, "id", true, cmd.getStartIndex(), cmd.getPageSizeVal()); @@ -909,7 +932,8 @@ public class ManagementServerImpl implements ManagementServer { Object resourceState = cmd.getResourceState(); Object haHosts = cmd.getHaHost(); - return searchForServers(cmd.getStartIndex(), cmd.getPageSizeVal(), name, type, state, zoneId, pod, cluster, id, keyword, resourceState, haHosts); + return searchForServers(cmd.getStartIndex(), cmd.getPageSizeVal(), name, type, state, zoneId, pod, cluster, id, keyword, resourceState, + haHosts); } @Override @@ -925,8 +949,8 @@ public class ManagementServerImpl implements ManagementServer { VMInstanceVO vm = _vmInstanceDao.findById(vmId); if (vm == null) { - InvalidParameterValueException ex = new InvalidParameterValueException("Unable to find the VM with specified id"); - ex.addProxyObject(vm, vmId, "vmId"); + InvalidParameterValueException ex = new InvalidParameterValueException("Unable to find the VM with specified id"); + ex.addProxyObject(vm, vmId, "vmId"); throw ex; } // business logic @@ -939,8 +963,8 @@ public class ManagementServerImpl implements ManagementServer { throw ex; } - if (!vm.getHypervisorType().equals(HypervisorType.XenServer) && !vm.getHypervisorType().equals(HypervisorType.VMware) && !vm.getHypervisorType().equals(HypervisorType.KVM) - && !vm.getHypervisorType().equals(HypervisorType.Ovm)) { + if (!vm.getHypervisorType().equals(HypervisorType.XenServer) && !vm.getHypervisorType().equals(HypervisorType.VMware) + && !vm.getHypervisorType().equals(HypervisorType.KVM) && !vm.getHypervisorType().equals(HypervisorType.Ovm)) { if (s_logger.isDebugEnabled()) { s_logger.debug(vm + " is not XenServer/VMware/KVM/OVM, cannot migrate this VM."); } @@ -960,8 +984,9 @@ public class ManagementServerImpl implements ManagementServer { if (s_logger.isDebugEnabled()) { s_logger.debug("Unable to find the host with id: " + srcHostId + " of this VM:" + vm); } - InvalidParameterValueException ex = new InvalidParameterValueException("Unable to find the host (with specified id) of VM with specified id"); - ex.addProxyObject(srcHost, srcHostId, "hostId"); + InvalidParameterValueException ex = new InvalidParameterValueException( + "Unable to find the host (with specified id) of VM with specified id"); + ex.addProxyObject(srcHost, srcHostId, "hostId"); ex.addProxyObject(vm, vmId, "vmId"); throw ex; } @@ -971,7 +996,8 @@ public class ManagementServerImpl implements ManagementServer { s_logger.debug("Searching for all hosts in cluster: " + cluster + " for migrating VM " + vm); } - List allHostsInCluster = searchForServers(startIndex, pageSize, null, hostType, null, null, null, cluster, null, null, null, null); + List allHostsInCluster = searchForServers(startIndex, pageSize, null, hostType, null, null, null, cluster, null, null, null, + null); // filter out the current host allHostsInCluster.remove(srcHost); @@ -1010,10 +1036,10 @@ public class ManagementServerImpl implements ManagementServer { return new Pair, List>(allHostsInCluster, suitableHosts); } - private List searchForServers(Long startIndex, Long pageSize, Object name, Object type, Object state, Object zone, Object pod, Object cluster, Object id, Object keyword, - Object resourceState, Object haHosts) { + private List searchForServers(Long startIndex, Long pageSize, Object name, Object type, Object state, Object zone, Object pod, + Object cluster, Object id, Object keyword, Object resourceState, Object haHosts) { Filter searchFilter = new Filter(HostVO.class, "id", Boolean.TRUE, startIndex, pageSize); - + SearchBuilder sb = _hostDao.createSearchBuilder(); sb.and("id", sb.entity().getId(), SearchCriteria.Op.EQ); sb.and("name", sb.entity().getName(), SearchCriteria.Op.LIKE); @@ -1023,12 +1049,12 @@ public class ManagementServerImpl implements ManagementServer { sb.and("podId", sb.entity().getPodId(), SearchCriteria.Op.EQ); sb.and("clusterId", sb.entity().getClusterId(), SearchCriteria.Op.EQ); sb.and("resourceState", sb.entity().getResourceState(), SearchCriteria.Op.EQ); - + String haTag = _haMgr.getHaTag(); SearchBuilder hostTagSearch = null; if (haHosts != null && haTag != null && !haTag.isEmpty()) { hostTagSearch = _hostTagsDao.createSearchBuilder(); - if ((Boolean)haHosts) { + if ((Boolean) haHosts) { hostTagSearch.and().op("tag", hostTagSearch.entity().getTag(), SearchCriteria.Op.EQ); } else { hostTagSearch.and().op("tag", hostTagSearch.entity().getTag(), SearchCriteria.Op.NEQ); @@ -1036,9 +1062,9 @@ public class ManagementServerImpl implements ManagementServer { } hostTagSearch.cp(); - sb.join("hostTagSearch", hostTagSearch, sb.entity().getId(), hostTagSearch.entity().getHostId(), JoinBuilder.JoinType.LEFTOUTER); + sb.join("hostTagSearch", hostTagSearch, sb.entity().getId(), hostTagSearch.entity().getHostId(), JoinBuilder.JoinType.LEFTOUTER); } - + SearchCriteria sc = sb.create(); if (keyword != null) { @@ -1076,7 +1102,7 @@ public class ManagementServerImpl implements ManagementServer { if (resourceState != null) { sc.setParameters("resourceState", resourceState); } - + if (haHosts != null && haTag != null && !haTag.isEmpty()) { sc.setJoinParameters("hostTagSearch", "tag", haTag); } @@ -1121,7 +1147,7 @@ public class ManagementServerImpl implements ManagementServer { sc.addAnd("allocationState", SearchCriteria.Op.EQ, allocationState); } - Pair, Integer> result = _hostPodDao.searchAndCount(sc, searchFilter); + Pair, Integer> result = _hostPodDao.searchAndCount(sc, searchFilter); return new Pair, Integer>(result.first(), result.second()); } @@ -1143,8 +1169,10 @@ public class ManagementServerImpl implements ManagementServer { } Account account = _accountDao.findActiveAccount(accountName, domainId); if (account == null) { - InvalidParameterValueException ex = new InvalidParameterValueException("Unable to find account " + accountName + " in specified domain"); - // Since we don't have a DomainVO object here, we directly set tablename to "domain". + InvalidParameterValueException ex = new InvalidParameterValueException("Unable to find account " + accountName + + " in specified domain"); + // Since we don't have a DomainVO object here, we directly set + // tablename to "domain". String tablename = "domain"; ex.addProxyObject(tablename, domainId, "domainId"); throw ex; @@ -1165,8 +1193,8 @@ public class ManagementServerImpl implements ManagementServer { if (projectId != null) { Project project = _projectMgr.getProject(projectId); if (project == null) { - InvalidParameterValueException ex = new InvalidParameterValueException("Unable to find project by id " + projectId); - ex.addProxyObject(project, projectId, "projectId"); + InvalidParameterValueException ex = new InvalidParameterValueException("Unable to find project by id " + projectId); + ex.addProxyObject(project, projectId, "projectId"); throw ex; } accountId = project.getProjectAccountId(); @@ -1192,7 +1220,8 @@ public class ManagementServerImpl implements ManagementServer { if (accountId != null) { SearchBuilder accountVlanMapSearch = _accountVlanMapDao.createSearchBuilder(); accountVlanMapSearch.and("accountId", accountVlanMapSearch.entity().getAccountId(), SearchCriteria.Op.EQ); - sb.join("accountVlanMapSearch", accountVlanMapSearch, sb.entity().getId(), accountVlanMapSearch.entity().getVlanDbId(), JoinBuilder.JoinType.INNER); + sb.join("accountVlanMapSearch", accountVlanMapSearch, sb.entity().getId(), accountVlanMapSearch.entity().getVlanDbId(), + JoinBuilder.JoinType.INNER); } if (podId != null) { @@ -1294,8 +1323,10 @@ public class ManagementServerImpl implements ManagementServer { listAll = true; } List permittedAccountIds = new ArrayList(); - Ternary domainIdRecursiveListProject = new Ternary(cmd.getDomainId(), cmd.isRecursive(), null); - _accountMgr.buildACLSearchParameters(caller, cmd.getId(), cmd.getAccountName(), cmd.getProjectId(), permittedAccountIds, domainIdRecursiveListProject, listAll, false); + Ternary domainIdRecursiveListProject = new Ternary( + cmd.getDomainId(), cmd.isRecursive(), null); + _accountMgr.buildACLSearchParameters(caller, cmd.getId(), cmd.getAccountName(), cmd.getProjectId(), permittedAccountIds, + domainIdRecursiveListProject, listAll, false); ListProjectResourcesCriteria listProjectResourcesCriteria = domainIdRecursiveListProject.third(); List permittedAccounts = new ArrayList(); @@ -1304,8 +1335,9 @@ public class ManagementServerImpl implements ManagementServer { } HypervisorType hypervisorType = HypervisorType.getType(cmd.getHypervisor()); - return listTemplates(cmd.getId(), cmd.getIsoName(), cmd.getKeyword(), isoFilter, true, cmd.isBootable(), cmd.getPageSizeVal(), cmd.getStartIndex(), cmd.getZoneId(), hypervisorType, true, - cmd.listInReadyState(), permittedAccounts, caller, listProjectResourcesCriteria, tags); + return listTemplates(cmd.getId(), cmd.getIsoName(), cmd.getKeyword(), isoFilter, true, cmd.isBootable(), cmd.getPageSizeVal(), + cmd.getStartIndex(), cmd.getZoneId(), hypervisorType, true, cmd.listInReadyState(), permittedAccounts, caller, + listProjectResourcesCriteria, tags); } @Override @@ -1314,7 +1346,7 @@ public class ManagementServerImpl implements ManagementServer { Long id = cmd.getId(); Map tags = cmd.getTags(); Account caller = UserContext.current().getCaller(); - + boolean listAll = false; if (templateFilter != null && templateFilter == TemplateFilter.all) { if (caller.getType() == Account.ACCOUNT_TYPE_NORMAL) { @@ -1322,10 +1354,12 @@ public class ManagementServerImpl implements ManagementServer { } listAll = true; } - + List permittedAccountIds = new ArrayList(); - Ternary domainIdRecursiveListProject = new Ternary(cmd.getDomainId(), cmd.isRecursive(), null); - _accountMgr.buildACLSearchParameters(caller, id, cmd.getAccountName(), cmd.getProjectId(), permittedAccountIds, domainIdRecursiveListProject, listAll, false); + Ternary domainIdRecursiveListProject = new Ternary( + cmd.getDomainId(), cmd.isRecursive(), null); + _accountMgr.buildACLSearchParameters(caller, id, cmd.getAccountName(), cmd.getProjectId(), permittedAccountIds, domainIdRecursiveListProject, + listAll, false); ListProjectResourcesCriteria listProjectResourcesCriteria = domainIdRecursiveListProject.third(); List permittedAccounts = new ArrayList(); for (Long accountId : permittedAccountIds) { @@ -1335,15 +1369,13 @@ public class ManagementServerImpl implements ManagementServer { boolean showDomr = ((templateFilter != TemplateFilter.selfexecutable) && (templateFilter != TemplateFilter.featured)); HypervisorType hypervisorType = HypervisorType.getType(cmd.getHypervisor()); - return listTemplates(id, cmd.getTemplateName(), cmd.getKeyword(), templateFilter, false, null, - cmd.getPageSizeVal(), cmd.getStartIndex(), cmd.getZoneId(), hypervisorType, showDomr, - cmd.listInReadyState(), permittedAccounts, caller, listProjectResourcesCriteria, tags); + return listTemplates(id, cmd.getTemplateName(), cmd.getKeyword(), templateFilter, false, null, cmd.getPageSizeVal(), cmd.getStartIndex(), + cmd.getZoneId(), hypervisorType, showDomr, cmd.listInReadyState(), permittedAccounts, caller, listProjectResourcesCriteria, tags); } - private Set> listTemplates(Long templateId, String name, String keyword, TemplateFilter templateFilter, - boolean isIso, Boolean bootable, Long pageSize, Long startIndex, Long zoneId, HypervisorType hyperType, - boolean showDomr, boolean onlyReady, List permittedAccounts, Account caller, - ListProjectResourcesCriteria listProjectResourcesCriteria, Map tags) { + private Set> listTemplates(Long templateId, String name, String keyword, TemplateFilter templateFilter, boolean isIso, + Boolean bootable, Long pageSize, Long startIndex, Long zoneId, HypervisorType hyperType, boolean showDomr, boolean onlyReady, + List permittedAccounts, Account caller, ListProjectResourcesCriteria listProjectResourcesCriteria, Map tags) { VMTemplateVO template = null; if (templateId != null) { @@ -1359,7 +1391,8 @@ public class ManagementServerImpl implements ManagementServer { }// If ISO not requested then it shouldn't be an ISO. if (!isIso && template.getFormat() == ImageFormat.ISO) { s_logger.error("Incorrect format of the template id " + templateId); - InvalidParameterValueException ex = new InvalidParameterValueException("Incorrect format " + template.getFormat() + " of the specified template id"); + InvalidParameterValueException ex = new InvalidParameterValueException("Incorrect format " + template.getFormat() + + " of the specified template id"); ex.addProxyObject(template, templateId, "templateId"); throw ex; } @@ -1379,14 +1412,12 @@ public class ManagementServerImpl implements ManagementServer { Set> templateZonePairSet = new HashSet>(); if (_swiftMgr.isSwiftEnabled()) { if (template == null) { - templateZonePairSet = _templateDao.searchSwiftTemplates(name, keyword, templateFilter, isIso, - hypers, bootable, domain, pageSize, startIndex, zoneId, hyperType, onlyReady, showDomr, - permittedAccounts, caller, tags); + templateZonePairSet = _templateDao.searchSwiftTemplates(name, keyword, templateFilter, isIso, hypers, bootable, domain, pageSize, + startIndex, zoneId, hyperType, onlyReady, showDomr, permittedAccounts, caller, tags); Set> templateZonePairSet2 = new HashSet>(); - templateZonePairSet2 = _templateDao.searchTemplates(name, keyword, templateFilter, isIso, hypers, - bootable, domain, pageSize, startIndex, zoneId, hyperType, onlyReady, showDomr, - permittedAccounts, caller, listProjectResourcesCriteria, tags); - + templateZonePairSet2 = _templateDao.searchTemplates(name, keyword, templateFilter, isIso, hypers, bootable, domain, pageSize, + startIndex, zoneId, hyperType, onlyReady, showDomr, permittedAccounts, caller, listProjectResourcesCriteria, tags); + for (Pair tmpltPair : templateZonePairSet2) { if (!templateZonePairSet.contains(new Pair(tmpltPair.first(), -1L))) { templateZonePairSet.add(tmpltPair); @@ -1403,9 +1434,8 @@ public class ManagementServerImpl implements ManagementServer { } } else { if (template == null) { - templateZonePairSet = _templateDao.searchTemplates(name, keyword, templateFilter, isIso, hypers, - bootable, domain, pageSize, startIndex, zoneId, hyperType, onlyReady, showDomr, - permittedAccounts, caller, listProjectResourcesCriteria, tags); + templateZonePairSet = _templateDao.searchTemplates(name, keyword, templateFilter, isIso, hypers, bootable, domain, pageSize, + startIndex, zoneId, hyperType, onlyReady, showDomr, permittedAccounts, caller, listProjectResourcesCriteria, tags); } else { // if template is not public, perform permission check here if (!template.isPublicTemplate() && caller.getType() != Account.ACCOUNT_TYPE_ADMIN) { @@ -1443,22 +1473,23 @@ public class ManagementServerImpl implements ManagementServer { // verify that template exists VMTemplateVO template = _templateDao.findById(id); if (template == null || template.getRemoved() != null) { - InvalidParameterValueException ex = new InvalidParameterValueException("unable to find template/iso with specified id"); - ex.addProxyObject(template, id, "templateId"); + InvalidParameterValueException ex = new InvalidParameterValueException("unable to find template/iso with specified id"); + ex.addProxyObject(template, id, "templateId"); throw ex; } // Don't allow to modify system template if (id == Long.valueOf(1)) { - InvalidParameterValueException ex = new InvalidParameterValueException("Unable to update template/iso of specified id"); - ex.addProxyObject(template, id, "templateId"); + InvalidParameterValueException ex = new InvalidParameterValueException("Unable to update template/iso of specified id"); + ex.addProxyObject(template, id, "templateId"); throw ex; } // do a permission check _accountMgr.checkAccess(account, AccessType.ModifyEntry, true, template); - boolean updateNeeded = !(name == null && displayText == null && format == null && guestOSId == null && passwordEnabled == null && bootable == null && sortKey == null); + boolean updateNeeded = !(name == null && displayText == null && format == null && guestOSId == null && passwordEnabled == null + && bootable == null && sortKey == null); if (!updateNeeded) { return template; } @@ -1482,7 +1513,8 @@ public class ManagementServerImpl implements ManagementServer { try { imageFormat = ImageFormat.valueOf(format.toUpperCase()); } catch (IllegalArgumentException e) { - throw new InvalidParameterValueException("Image format: " + format + " is incorrect. Supported formats are " + EnumUtils.listValues(ImageFormat.values())); + throw new InvalidParameterValueException("Image format: " + format + " is incorrect. Supported formats are " + + EnumUtils.listValues(ImageFormat.values())); } template.setFormat(imageFormat); @@ -1512,7 +1544,7 @@ public class ManagementServerImpl implements ManagementServer { } @Override - public List searchForEvents(ListEventsCmd cmd) { + public Pair, Integer> searchForEvents(ListEventsCmd cmd) { Account caller = UserContext.current().getCaller(); List permittedAccounts = new ArrayList(); @@ -1525,34 +1557,17 @@ public class ManagementServerImpl implements ManagementServer { Integer entryTime = cmd.getEntryTime(); Integer duration = cmd.getDuration(); - Ternary domainIdRecursiveListProject = new Ternary(cmd.getDomainId(), cmd.isRecursive(), null); - _accountMgr.buildACLSearchParameters(caller, id, cmd.getAccountName(), cmd.getProjectId(), permittedAccounts, domainIdRecursiveListProject, cmd.listAll(), false); + Ternary domainIdRecursiveListProject = new Ternary( + cmd.getDomainId(), cmd.isRecursive(), null); + _accountMgr.buildACLSearchParameters(caller, id, cmd.getAccountName(), cmd.getProjectId(), permittedAccounts, domainIdRecursiveListProject, + cmd.listAll(), false); Long domainId = domainIdRecursiveListProject.first(); Boolean isRecursive = domainIdRecursiveListProject.second(); ListProjectResourcesCriteria listProjectResourcesCriteria = domainIdRecursiveListProject.third(); - Filter searchFilter = new Filter(EventVO.class, "createDate", false, cmd.getStartIndex(), cmd.getPageSizeVal()); - SearchBuilder sb = _eventDao.createSearchBuilder(); - - 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 - SearchBuilder domainSearch = _domainDao.createSearchBuilder(); - domainSearch.and("path", domainSearch.entity().getPath(), SearchCriteria.Op.LIKE); - sb.join("domainSearch", domainSearch, sb.entity().getDomainId(), domainSearch.entity().getId(), JoinBuilder.JoinType.INNER); - } - - if (listProjectResourcesCriteria != null) { - SearchBuilder accountSearch = _accountDao.createSearchBuilder(); - if (listProjectResourcesCriteria == Project.ListProjectResourcesCriteria.ListProjectResourcesOnly) { - accountSearch.and("accountType", accountSearch.entity().getType(), SearchCriteria.Op.EQ); - sb.join("accountSearch", accountSearch, sb.entity().getAccountId(), accountSearch.entity().getId(), JoinBuilder.JoinType.INNER); - } else if (listProjectResourcesCriteria == Project.ListProjectResourcesCriteria.SkipProjectResources) { - accountSearch.and("accountType", accountSearch.entity().getType(), SearchCriteria.Op.NEQ); - sb.join("accountSearch", accountSearch, sb.entity().getAccountId(), accountSearch.entity().getId(), JoinBuilder.JoinType.INNER); - } - } + Filter searchFilter = new Filter(EventJoinVO.class, "createDate", false, cmd.getStartIndex(), cmd.getPageSizeVal()); + SearchBuilder sb = _eventJoinDao.createSearchBuilder(); + _accountMgr.buildACLViewSearchBuilder(sb, domainId, isRecursive, permittedAccounts, listProjectResourcesCriteria); sb.and("id", sb.entity().getId(), SearchCriteria.Op.EQ); sb.and("levelL", sb.entity().getLevel(), SearchCriteria.Op.LIKE); @@ -1565,28 +1580,16 @@ public class ManagementServerImpl implements ManagementServer { sb.and("startId", sb.entity().getStartId(), SearchCriteria.Op.EQ); sb.and("createDate", sb.entity().getCreateDate(), SearchCriteria.Op.BETWEEN); - SearchCriteria sc = sb.create(); - if (listProjectResourcesCriteria != null) { - sc.setJoinParameters("accountSearch", "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.setJoinParameters("domainSearch", "path", domain.getPath() + "%"); - } else { - sc.setParameters("domainId", domainId); - } - } + SearchCriteria sc = sb.create(); + // building ACL condition + _accountMgr.buildACLViewSearchCriteria(sc, domainId, isRecursive, permittedAccounts, listProjectResourcesCriteria); if (id != null) { sc.setParameters("id", id); } if (keyword != null) { - SearchCriteria ssc = _eventDao.createSearchCriteria(); + SearchCriteria ssc = _eventJoinDao.createSearchCriteria(); ssc.addOr("type", SearchCriteria.Op.LIKE, "%" + keyword + "%"); ssc.addOr("description", SearchCriteria.Op.LIKE, "%" + keyword + "%"); ssc.addOr("level", SearchCriteria.Op.LIKE, "%" + keyword + "%"); @@ -1609,32 +1612,34 @@ public class ManagementServerImpl implements ManagementServer { sc.setParameters("createDateL", endDate); } + Pair, Integer> eventPair = null; + // event_view will not have duplicate rows for each event, so searchAndCount should be good enough. if ((entryTime != null) && (duration != null)) { - if (entryTime <= duration) { - throw new InvalidParameterValueException("Entry time must be greater than duration"); - } - Calendar calMin = Calendar.getInstance(); - Calendar calMax = Calendar.getInstance(); - calMin.add(Calendar.SECOND, -entryTime); - calMax.add(Calendar.SECOND, -duration); - Date minTime = calMin.getTime(); - Date maxTime = calMax.getTime(); - - sc.setParameters("state", com.cloud.event.Event.State.Completed); - sc.setParameters("startId", 0); - sc.setParameters("createDate", minTime, maxTime); - List startedEvents = _eventDao.searchAllEvents(sc, searchFilter); - List pendingEvents = new ArrayList(); - for (EventVO event : startedEvents) { - EventVO completedEvent = _eventDao.findCompletedEvent(event.getId()); - if (completedEvent == null) { - pendingEvents.add(event); - } - } - return pendingEvents; + // TODO: waiting for response from dev list, logic is mystery to + // me!! + /* + * if (entryTime <= duration) { throw new + * InvalidParameterValueException + * ("Entry time must be greater than duration"); } Calendar calMin = + * Calendar.getInstance(); Calendar calMax = Calendar.getInstance(); + * calMin.add(Calendar.SECOND, -entryTime); + * calMax.add(Calendar.SECOND, -duration); Date minTime = + * calMin.getTime(); Date maxTime = calMax.getTime(); + * + * sc.setParameters("state", com.cloud.event.Event.State.Completed); + * sc.setParameters("startId", 0); sc.setParameters("createDate", + * minTime, maxTime); List startedEvents = + * _eventJoinDao.searchAllEvents(sc, searchFilter); + * List pendingEvents = new ArrayList(); + * for (EventVO event : startedEvents) { EventVO completedEvent = + * _eventDao.findCompletedEvent(event.getId()); if (completedEvent + * == null) { pendingEvents.add(event); } } return pendingEvents; + */ } else { - return _eventDao.searchAllEvents(sc, searchFilter); + eventPair = _eventJoinDao.searchAndCount(sc, searchFilter); } + return eventPair; + } @Override @@ -1653,16 +1658,23 @@ public class ManagementServerImpl implements ManagementServer { Account caller = UserContext.current().getCaller(); List permittedAccounts = new ArrayList(); - Ternary domainIdRecursiveListProject = new Ternary(cmd.getDomainId(), cmd.isRecursive(), null); - _accountMgr.buildACLSearchParameters(caller, id, cmd.getAccountName(), cmd.getProjectId(), permittedAccounts, domainIdRecursiveListProject, cmd.listAll(), false); + Ternary domainIdRecursiveListProject = new Ternary( + cmd.getDomainId(), cmd.isRecursive(), null); + _accountMgr.buildACLSearchParameters(caller, id, cmd.getAccountName(), cmd.getProjectId(), permittedAccounts, domainIdRecursiveListProject, + cmd.listAll(), false); Long domainId = domainIdRecursiveListProject.first(); Boolean isRecursive = domainIdRecursiveListProject.second(); ListProjectResourcesCriteria listProjectResourcesCriteria = domainIdRecursiveListProject.third(); // no default orderBy - //Filter searchFilter = new Filter(DomainRouterJoinVO.class, "id", true, cmd.getStartIndex(), cmd.getPageSizeVal()); + // 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 sb = _routerJoinDao.createSearchBuilder(); - sb.select(null, Func.DISTINCT, sb.entity().getId()); // select distinct ids to get number of records with pagination + 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); @@ -1673,12 +1685,12 @@ public class ManagementServerImpl implements ManagementServer { 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); - + if (forVpc != null) { if (forVpc) { - sb.and("forVpc", sb.entity().getVpcId(), SearchCriteria.Op.NNULL); + sb.and("forVpc", sb.entity().getVpcId(), SearchCriteria.Op.NNULL); } else { - sb.and("forVpc", sb.entity().getVpcId(), SearchCriteria.Op.NULL); + sb.and("forVpc", sb.entity().getVpcId(), SearchCriteria.Op.NULL); } } @@ -1701,49 +1713,49 @@ public class ManagementServerImpl implements ManagementServer { if (name != null) { sc.setParameters("name", "%" + name + "%"); } - + if (id != null) { sc.setParameters("id", id); } - + if (state != null) { sc.setParameters("state", state); } - + if (zone != null) { sc.setParameters("dataCenterId", zone); } - + if (pod != null) { sc.setParameters("podId", pod); } - + if (hostId != null) { sc.setParameters("hostId", hostId); } - + if (networkId != null) { sc.setJoinParameters("nicSearch", "networkId", networkId); } - + if (vpcId != null) { sc.setParameters("vpcId", vpcId); } // search VR details by ids - Pair, Integer> uniqueVrPair = _routerJoinDao.searchAndCount(sc, searchFilter); + Pair, Integer> uniqueVrPair = _routerJoinDao.searchAndCount(sc, searchFilter); Integer count = uniqueVrPair.second(); - if ( count.intValue() == 0 ) { + if (count.intValue() == 0) { // empty result return uniqueVrPair; } List uniqueVrs = uniqueVrPair.first(); Long[] vrIds = new Long[uniqueVrs.size()]; int i = 0; - for (DomainRouterJoinVO v : uniqueVrs ){ + for (DomainRouterJoinVO v : uniqueVrs) { vrIds[i++] = v.getId(); } - List vrs = _routerJoinDao.searchByIds(vrIds); + List vrs = _routerJoinDao.searchByIds(vrIds); return new Pair, Integer>(vrs, count); } @@ -1763,7 +1775,6 @@ public class ManagementServerImpl implements ManagementServer { Long vpcId = cmd.getVpcId(); Map tags = cmd.getTags(); - Boolean isAllocated = cmd.isAllocatedOnly(); if (isAllocated == null) { isAllocated = Boolean.TRUE; @@ -1778,15 +1789,15 @@ public class ManagementServerImpl implements ManagementServer { if (isAllocated) { Account caller = UserContext.current().getCaller(); - Ternary domainIdRecursiveListProject = - new Ternary(cmd.getDomainId(), cmd.isRecursive(), null); - _accountMgr.buildACLSearchParameters(caller, cmd.getId(), cmd.getAccountName(), cmd.getProjectId(), - permittedAccounts, domainIdRecursiveListProject, cmd.listAll(), false); + Ternary domainIdRecursiveListProject = new Ternary( + cmd.getDomainId(), cmd.isRecursive(), null); + _accountMgr.buildACLSearchParameters(caller, cmd.getId(), cmd.getAccountName(), cmd.getProjectId(), permittedAccounts, + domainIdRecursiveListProject, cmd.listAll(), false); domainId = domainIdRecursiveListProject.first(); isRecursive = domainIdRecursiveListProject.second(); listProjectResourcesCriteria = domainIdRecursiveListProject.third(); - _accountMgr.buildACLSearchBuilder(sb, domainId, isRecursive, permittedAccounts, listProjectResourcesCriteria); - } + _accountMgr.buildACLSearchBuilder(sb, domainId, isRecursive, permittedAccounts, listProjectResourcesCriteria); + } sb.and("dataCenterId", sb.entity().getDataCenterId(), SearchCriteria.Op.EQ); sb.and("address", sb.entity().getAddress(), SearchCriteria.Op.EQ); @@ -1810,7 +1821,7 @@ public class ManagementServerImpl implements ManagementServer { if (tags != null && !tags.isEmpty()) { SearchBuilder tagSearch = _resourceTagDao.createSearchBuilder(); - for (int count=0; count < tags.size(); count++) { + 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(); @@ -1820,7 +1831,6 @@ public class ManagementServerImpl implements ManagementServer { sb.join("tagSearch", tagSearch, sb.entity().getId(), tagSearch.entity().getResourceId(), JoinBuilder.JoinType.INNER); } - SearchBuilder vlanSearch = _vlanDao.createSearchBuilder(); vlanSearch.and("vlanType", vlanSearch.entity().getVlanType(), SearchCriteria.Op.EQ); sb.join("vlanSearch", vlanSearch, sb.entity().getVlanId(), vlanSearch.entity().getId(), JoinBuilder.JoinType.INNER); @@ -1840,7 +1850,7 @@ public class ManagementServerImpl implements ManagementServer { SearchCriteria sc = sb.create(); if (isAllocated) { - _accountMgr.buildACLSearchCriteria(sc, domainId, isRecursive, permittedAccounts, listProjectResourcesCriteria); + _accountMgr.buildACLSearchCriteria(sc, domainId, isRecursive, permittedAccounts, listProjectResourcesCriteria); } sc.setJoinParameters("vlanSearch", "vlanType", vlanType); @@ -1862,7 +1872,7 @@ public class ManagementServerImpl implements ManagementServer { if (vpcId != null) { sc.setParameters("vpcId", vpcId); } - + if (ipId != null) { sc.setParameters("id", ipId); } @@ -1916,11 +1926,11 @@ public class ManagementServerImpl implements ManagementServer { if (osCategoryId != null) { sc.addAnd("categoryId", SearchCriteria.Op.EQ, osCategoryId); } - + if (description != null) { sc.addAnd("displayName", SearchCriteria.Op.LIKE, "%" + description + "%"); } - + if (keyword != null) { sc.addAnd("displayName", SearchCriteria.Op.LIKE, "%" + keyword + "%"); } @@ -1941,11 +1951,11 @@ public class ManagementServerImpl implements ManagementServer { if (id != null) { sc.addAnd("id", SearchCriteria.Op.EQ, id); } - + if (name != null) { sc.addAnd("name", SearchCriteria.Op.LIKE, "%" + name + "%"); } - + if (keyword != null) { sc.addAnd("name", SearchCriteria.Op.LIKE, "%" + keyword + "%"); } @@ -1965,7 +1975,8 @@ public class ManagementServerImpl implements ManagementServer { } @ActionEvent(eventType = EventTypes.EVENT_PROXY_STOP, eventDescription = "stopping console proxy Vm", async = true) - private ConsoleProxyVO stopConsoleProxy(VMInstanceVO systemVm, boolean isForced) throws ResourceUnavailableException, OperationTimedoutException, ConcurrentOperationException { + private ConsoleProxyVO stopConsoleProxy(VMInstanceVO systemVm, boolean isForced) throws ResourceUnavailableException, OperationTimedoutException, + ConcurrentOperationException { User caller = _userDao.findById(UserContext.current().getCallerUserId()); @@ -2033,11 +2044,12 @@ public class ManagementServerImpl implements ManagementServer { // check if domain exists in the system DomainVO domain = _domainDao.findById(domainId); if (domain == null) { - InvalidParameterValueException ex = new InvalidParameterValueException("Unable to find domain with specified domain id"); - ex.addProxyObject(domain, domainId, "domainId"); + InvalidParameterValueException ex = new InvalidParameterValueException("Unable to find domain with specified domain id"); + ex.addProxyObject(domain, domainId, "domainId"); throw ex; } else if (domain.getParent() == null && domainName != null) { - // check if domain is ROOT domain - and deny to edit it with the new name + // check if domain is ROOT domain - and deny to edit it with the new + // name throw new InvalidParameterValueException("ROOT domain can not be edited with a new name"); } @@ -2054,9 +2066,10 @@ public class ManagementServerImpl implements ManagementServer { boolean sameDomain = (domains.size() == 1 && domains.get(0).getId() == domainId); if (!domains.isEmpty() && !sameDomain) { - InvalidParameterValueException ex = new InvalidParameterValueException("Failed to update specified domain id with name '" + domainName + "' since it already exists in the system"); - ex.addProxyObject(domain, domainId, "domainId"); - throw ex; + InvalidParameterValueException ex = new InvalidParameterValueException("Failed to update specified domain id with name '" + + domainName + "' since it already exists in the system"); + ex.addProxyObject(domain, domainId, "domainId"); + throw ex; } } @@ -2143,7 +2156,7 @@ public class ManagementServerImpl implements ManagementServer { sc.addAnd("type", SearchCriteria.Op.EQ, type); } - Pair, Integer> result =_alertDao.searchAndCount(sc, searchFilter); + Pair, Integer> result = _alertDao.searchAndCount(sc, searchFilter); return new Pair, Integer>(result.first(), result.second()); } @@ -2162,13 +2175,15 @@ public class ManagementServerImpl implements ManagementServer { List summedCapacities = new ArrayList(); if (zoneId == null && podId == null) {// Group by Zone, capacity type - List summedCapacitiesAtZone = _capacityDao.listCapacitiesGroupedByLevelAndType(capacityType, zoneId, podId, clusterId, 1, cmd.getPageSizeVal()); + List summedCapacitiesAtZone = _capacityDao.listCapacitiesGroupedByLevelAndType(capacityType, zoneId, podId, clusterId, 1, + cmd.getPageSizeVal()); if (summedCapacitiesAtZone != null) { summedCapacities.addAll(summedCapacitiesAtZone); } } if (podId == null) {// Group by Pod, capacity type - List summedCapacitiesAtPod = _capacityDao.listCapacitiesGroupedByLevelAndType(capacityType, zoneId, podId, clusterId, 2, cmd.getPageSizeVal()); + List summedCapacitiesAtPod = _capacityDao.listCapacitiesGroupedByLevelAndType(capacityType, zoneId, podId, clusterId, 2, + cmd.getPageSizeVal()); if (summedCapacitiesAtPod != null) { summedCapacities.addAll(summedCapacitiesAtPod); } @@ -2179,7 +2194,8 @@ public class ManagementServerImpl implements ManagementServer { } // Group by Cluster, capacity type - List summedCapacitiesAtCluster = _capacityDao.listCapacitiesGroupedByLevelAndType(capacityType, zoneId, podId, clusterId, 3, cmd.getPageSizeVal()); + List summedCapacitiesAtCluster = _capacityDao.listCapacitiesGroupedByLevelAndType(capacityType, zoneId, podId, clusterId, 3, + cmd.getPageSizeVal()); if (summedCapacitiesAtCluster != null) { summedCapacities.addAll(summedCapacitiesAtCluster); } @@ -2231,20 +2247,22 @@ public class ManagementServerImpl implements ManagementServer { } else { capacity.setUsedPercentage(0); } - SummedCapacity summedCapacity = new SummedCapacity(capacity.getUsedCapacity(), capacity.getTotalCapacity(), capacity.getUsedPercentage(), capacity.getCapacityType(), capacity.getDataCenterId(), - capacity.getPodId(), capacity.getClusterId()); + SummedCapacity summedCapacity = new SummedCapacity(capacity.getUsedCapacity(), capacity.getTotalCapacity(), + capacity.getUsedPercentage(), capacity.getCapacityType(), capacity.getDataCenterId(), capacity.getPodId(), + capacity.getClusterId()); list.add(summedCapacity); } else { List dcList = _dcDao.listEnabledZones(); for (DataCenterVO dc : dcList) { CapacityVO capacity = _storageMgr.getSecondaryStorageUsedStats(null, dc.getId()); if (capacity.getTotalCapacity() != 0) { - capacity.setUsedPercentage((float)capacity.getUsedCapacity() / capacity.getTotalCapacity()); + capacity.setUsedPercentage((float) capacity.getUsedCapacity() / capacity.getTotalCapacity()); } else { capacity.setUsedPercentage(0); } - SummedCapacity summedCapacity = new SummedCapacity(capacity.getUsedCapacity(), capacity.getTotalCapacity(), capacity.getUsedPercentage(), capacity.getCapacityType(), capacity.getDataCenterId(), - capacity.getPodId(), capacity.getClusterId()); + SummedCapacity summedCapacity = new SummedCapacity(capacity.getUsedCapacity(), capacity.getTotalCapacity(), + capacity.getUsedPercentage(), capacity.getCapacityType(), capacity.getDataCenterId(), capacity.getPodId(), + capacity.getClusterId()); list.add(summedCapacity); }// End of for } @@ -2271,9 +2289,8 @@ public class ManagementServerImpl implements ManagementServer { List capacities = new ArrayList(); for (SummedCapacity summedCapacity : summedCapacities) { - CapacityVO capacity = new CapacityVO(null, summedCapacity.getDataCenterId(), podId, clusterId, - summedCapacity.getUsedCapacity() + summedCapacity.getReservedCapacity(), - summedCapacity.getTotalCapacity(), summedCapacity.getCapacityType()); + CapacityVO capacity = new CapacityVO(null, summedCapacity.getDataCenterId(), podId, clusterId, summedCapacity.getUsedCapacity() + + summedCapacity.getReservedCapacity(), summedCapacity.getTotalCapacity(), summedCapacity.getCapacityType()); if (summedCapacity.getCapacityType() == Capacity.CAPACITY_TYPE_CPU) { capacity.setTotalCapacity((long) (summedCapacity.getTotalCapacity() * ApiDBUtils.getCpuOverprovisioningFactor())); @@ -2281,7 +2298,8 @@ public class ManagementServerImpl implements ManagementServer { capacities.add(capacity); } - // op_host_Capacity contains only allocated stats and the real time stats are stored "in memory". + // op_host_Capacity contains only allocated stats and the real time + // stats are stored "in memory". // Show Sec. Storage only when the api is invoked for the zone layer. List dcList = new ArrayList(); if (zoneId == null && podId == null && clusterId == null) { @@ -2289,11 +2307,11 @@ public class ManagementServerImpl implements ManagementServer { } else if (zoneId != null) { dcList.add(ApiDBUtils.findZoneById(zoneId)); } else { - if (clusterId != null){ - zoneId = ApiDBUtils.findClusterById(clusterId).getDataCenterId(); - }else{ - zoneId = ApiDBUtils.findPodById(podId).getDataCenterId(); - } + if (clusterId != null) { + zoneId = ApiDBUtils.findClusterById(clusterId).getDataCenterId(); + } else { + zoneId = ApiDBUtils.findPodById(podId).getDataCenterId(); + } if (capacityType == null || capacityType == Capacity.CAPACITY_TYPE_STORAGE) { capacities.add(_storageMgr.getStoragePoolUsedStats(null, clusterId, podId, zoneId)); } @@ -2320,12 +2338,14 @@ public class ManagementServerImpl implements ManagementServer { } public static boolean isAdmin(short accountType) { - return ((accountType == Account.ACCOUNT_TYPE_ADMIN) || (accountType == Account.ACCOUNT_TYPE_RESOURCE_DOMAIN_ADMIN) || (accountType == Account.ACCOUNT_TYPE_DOMAIN_ADMIN) || (accountType == Account.ACCOUNT_TYPE_READ_ONLY_ADMIN)); + return ((accountType == Account.ACCOUNT_TYPE_ADMIN) || (accountType == Account.ACCOUNT_TYPE_RESOURCE_DOMAIN_ADMIN) + || (accountType == Account.ACCOUNT_TYPE_DOMAIN_ADMIN) || (accountType == Account.ACCOUNT_TYPE_READ_ONLY_ADMIN)); } private List searchDiskOfferingsInternal(Account account, Object name, Object id, Object keyword, Filter searchFilter) { - // it was decided to return all offerings for the user's domain, and everything above till root (for normal user -// or + // it was decided to return all offerings for the user's domain, and + // everything above till root (for normal user + // or // domain admin) // list all offerings belonging to this domain, and all of its parents // check the parent, if not null, add offerings for that parent to list @@ -2390,11 +2410,13 @@ public class ManagementServerImpl implements ManagementServer { @Override public List searchForDiskOfferings(ListDiskOfferingsCmd cmd) { // Note - // The list method for offerings is being modified in accordance with discussion with Will/Kevin + // The list method for offerings is being modified in accordance with + // discussion with Will/Kevin // For now, we will be listing the following based on the usertype // 1. For root, we will list all offerings - // 2. For domainAdmin and regular users, we will list everything in their domains+parent domains ... all the way -// till + // 2. For domainAdmin and regular users, we will list everything in + // their domains+parent domains ... all the way + // till // root Boolean isAscending = Boolean.parseBoolean(_configDao.getValue("sortkey.algorithm")); @@ -2402,31 +2424,38 @@ public class ManagementServerImpl implements ManagementServer { Filter searchFilter = new Filter(DiskOfferingVO.class, "sortKey", isAscending, cmd.getStartIndex(), cmd.getPageSizeVal()); SearchBuilder sb = _diskOfferingDao.createSearchBuilder(); - // SearchBuilder and SearchCriteria are now flexible so that the search builder can be built with all possible - // search terms and only those with criteria can be set. The proper SQL should be generated as a result. + // SearchBuilder and SearchCriteria are now flexible so that the search + // builder can be built with all possible + // search terms and only those with criteria can be set. The proper SQL + // should be generated as a result. Account account = UserContext.current().getCaller(); Object name = cmd.getDiskOfferingName(); Object id = cmd.getId(); Object keyword = cmd.getKeyword(); Long domainId = cmd.getDomainId(); // Keeping this logic consistent with domain specific zones - // if a domainId is provided, we just return the disk offering associated with this domain + // if a domainId is provided, we just return the disk offering + // associated with this domain if (domainId != null) { if (account.getType() == Account.ACCOUNT_TYPE_ADMIN) { - return _diskOfferingDao.listByDomainId(domainId);// no perm check + return _diskOfferingDao.listByDomainId(domainId);// no perm + // check } else { - // check if the user's domain == do's domain || user's domain is a child of so's domain + // check if the user's domain == do's domain || user's domain is + // a child of so's domain if (isPermissible(account.getDomainId(), domainId)) { // perm check succeeded return _diskOfferingDao.listByDomainId(domainId); } else { - throw new PermissionDeniedException("The account:" + account.getAccountName() + " does not fall in the same domain hierarchy as the disk offering"); + throw new PermissionDeniedException("The account:" + account.getAccountName() + + " does not fall in the same domain hierarchy as the disk offering"); } } } // For non-root users - if ((account.getType() == Account.ACCOUNT_TYPE_NORMAL || account.getType() == Account.ACCOUNT_TYPE_DOMAIN_ADMIN) || account.getType() == Account.ACCOUNT_TYPE_RESOURCE_DOMAIN_ADMIN) { + if ((account.getType() == Account.ACCOUNT_TYPE_NORMAL || account.getType() == Account.ACCOUNT_TYPE_DOMAIN_ADMIN) + || account.getType() == Account.ACCOUNT_TYPE_RESOURCE_DOMAIN_ADMIN) { return searchDiskOfferingsInternal(account, name, id, keyword, searchFilter); } @@ -2435,12 +2464,16 @@ public class ManagementServerImpl implements ManagementServer { sb.and("id", sb.entity().getId(), SearchCriteria.Op.EQ); sb.and("removed", sb.entity().getRemoved(), SearchCriteria.Op.NULL); - // FIXME: disk offerings should search back up the hierarchy for available disk offerings... + // FIXME: disk offerings should search back up the hierarchy for + // available disk offerings... /* - * sb.addAnd("domainId", sb.entity().getDomainId(), SearchCriteria.Op.EQ); if (domainId != null) { - * SearchBuilder domainSearch = _domainDao.createSearchBuilder(); domainSearch.addAnd("path", - * domainSearch.entity().getPath(), SearchCriteria.Op.LIKE); sb.join("domainSearch", domainSearch, - * sb.entity().getDomainId(), domainSearch.entity().getId()); } + * sb.addAnd("domainId", sb.entity().getDomainId(), + * SearchCriteria.Op.EQ); if (domainId != null) { + * SearchBuilder domainSearch = + * _domainDao.createSearchBuilder(); domainSearch.addAnd("path", + * domainSearch.entity().getPath(), SearchCriteria.Op.LIKE); + * sb.join("domainSearch", domainSearch, sb.entity().getDomainId(), + * domainSearch.entity().getId()); } */ SearchCriteria sc = sb.create(); @@ -2460,12 +2493,14 @@ public class ManagementServerImpl implements ManagementServer { sc.setParameters("id", id); } - // FIXME: disk offerings should search back up the hierarchy for available disk offerings... + // FIXME: disk offerings should search back up the hierarchy for + // available disk offerings... /* - * if (domainId != null) { sc.setParameters("domainId", domainId); // //DomainVO domain = - * _domainDao.findById((Long)domainId); // // I want to join on user_vm.domain_id = domain.id where domain.path - * like - * 'foo%' //sc.setJoinParameters("domainSearch", "path", domain.getPath() + "%"); // } + * if (domainId != null) { sc.setParameters("domainId", domainId); // + * //DomainVO domain = _domainDao.findById((Long)domainId); // // I want + * to join on user_vm.domain_id = domain.id where domain.path like + * 'foo%' //sc.setJoinParameters("domainSearch", "path", + * domain.getPath() + "%"); // } */ return _diskOfferingDao.search(sc, searchFilter); @@ -2587,8 +2622,10 @@ public class ManagementServerImpl implements ManagementServer { List permittedAccounts = new ArrayList(); - Ternary domainIdRecursiveListProject = new Ternary(cmd.getDomainId(), cmd.isRecursive(), null); - _accountMgr.buildACLSearchParameters(caller, null, cmd.getAccountName(), null, permittedAccounts, domainIdRecursiveListProject, cmd.listAll(), false); + Ternary domainIdRecursiveListProject = new Ternary( + cmd.getDomainId(), cmd.isRecursive(), null); + _accountMgr.buildACLSearchParameters(caller, null, cmd.getAccountName(), null, permittedAccounts, domainIdRecursiveListProject, + cmd.listAll(), false); Long domainId = domainIdRecursiveListProject.first(); Boolean isRecursive = domainIdRecursiveListProject.second(); ListProjectResourcesCriteria listProjectResourcesCriteria = domainIdRecursiveListProject.third(); @@ -2600,13 +2637,15 @@ public class ManagementServerImpl implements ManagementServer { boolean accountJoinIsDone = false; if (permittedAccounts.isEmpty() && domainId != null) { accountSearch = _accountDao.createSearchBuilder(); - // if accountId isn't specified, we can do a domain match for the admin case if isRecursive is true + // if accountId isn't specified, we can do a domain match for the + // admin case if isRecursive is true SearchBuilder domainSearch = _domainDao.createSearchBuilder(); domainSearch.and("domainId", domainSearch.entity().getId(), SearchCriteria.Op.EQ); domainSearch.and("path", domainSearch.entity().getPath(), SearchCriteria.Op.LIKE); sb.join("accountSearch", accountSearch, sb.entity().getAccountId(), accountSearch.entity().getId(), JoinBuilder.JoinType.INNER); accountJoinIsDone = true; - accountSearch.join("domainSearch", domainSearch, accountSearch.entity().getDomainId(), domainSearch.entity().getId(), JoinBuilder.JoinType.INNER); + accountSearch.join("domainSearch", domainSearch, accountSearch.entity().getDomainId(), domainSearch.entity().getId(), + JoinBuilder.JoinType.INNER); } if (listProjectResourcesCriteria != null) { @@ -2652,7 +2691,7 @@ public class ManagementServerImpl implements ManagementServer { } Pair, Integer> result = _jobDao.searchAndCount(sc, searchFilter); - return new Pair, Integer> (result.first(), result.second()); + return new Pair, Integer>(result.first(), result.second()); } @ActionEvent(eventType = EventTypes.EVENT_SSVM_START, eventDescription = "starting secondary storage Vm", async = true) @@ -2661,7 +2700,8 @@ public class ManagementServerImpl implements ManagementServer { } @ActionEvent(eventType = EventTypes.EVENT_SSVM_STOP, eventDescription = "stopping secondary storage Vm", async = true) - private SecondaryStorageVmVO stopSecondaryStorageVm(VMInstanceVO systemVm, boolean isForced) throws ResourceUnavailableException, OperationTimedoutException, ConcurrentOperationException { + private SecondaryStorageVmVO stopSecondaryStorageVm(VMInstanceVO systemVm, boolean isForced) throws ResourceUnavailableException, + OperationTimedoutException, ConcurrentOperationException { User caller = _userDao.findById(UserContext.current().getCallerUserId()); @@ -2709,7 +2749,7 @@ public class ManagementServerImpl implements ManagementServer { sb.and("hostId", sb.entity().getHostId(), SearchCriteria.Op.EQ); sb.and("type", sb.entity().getType(), SearchCriteria.Op.EQ); sb.and("nulltype", sb.entity().getType(), SearchCriteria.Op.IN); - + if (storageId != null) { SearchBuilder volumeSearch = _volumeDao.createSearchBuilder(); volumeSearch.and("poolId", volumeSearch.entity().getPoolId(), SearchCriteria.Op.EQ); @@ -2722,9 +2762,9 @@ public class ManagementServerImpl implements ManagementServer { SearchCriteria ssc = _vmInstanceDao.createSearchCriteria(); ssc.addOr("hostName", SearchCriteria.Op.LIKE, "%" + keyword + "%"); ssc.addOr("state", SearchCriteria.Op.LIKE, "%" + keyword + "%"); - + sc.addAnd("hostName", SearchCriteria.Op.SC, ssc); - } + } if (id != null) { sc.setParameters("id", id); @@ -2751,7 +2791,7 @@ public class ManagementServerImpl implements ManagementServer { } else { sc.setParameters("nulltype", VirtualMachine.Type.SecondaryStorageVm, VirtualMachine.Type.ConsoleProxy); } - + if (storageId != null) { sc.setJoinParameters("volumeSearch", "poolId", storageId); } @@ -2764,8 +2804,8 @@ public class ManagementServerImpl implements ManagementServer { public VirtualMachine.Type findSystemVMTypeById(long instanceId) { VMInstanceVO systemVm = _vmInstanceDao.findByIdTypes(instanceId, VirtualMachine.Type.ConsoleProxy, VirtualMachine.Type.SecondaryStorageVm); if (systemVm == null) { - InvalidParameterValueException ex = new InvalidParameterValueException("Unable to find a system vm of specified instanceId"); - ex.addProxyObject(systemVm, instanceId, "instanceId"); + InvalidParameterValueException ex = new InvalidParameterValueException("Unable to find a system vm of specified instanceId"); + ex.addProxyObject(systemVm, instanceId, "instanceId"); throw ex; } return systemVm.getType(); @@ -2776,8 +2816,8 @@ public class ManagementServerImpl implements ManagementServer { VMInstanceVO systemVm = _vmInstanceDao.findByIdTypes(vmId, VirtualMachine.Type.ConsoleProxy, VirtualMachine.Type.SecondaryStorageVm); if (systemVm == null) { - InvalidParameterValueException ex = new InvalidParameterValueException("unable to find a system vm with specified vmId"); - ex.addProxyObject(systemVm, vmId, "vmId"); + InvalidParameterValueException ex = new InvalidParameterValueException("unable to find a system vm with specified vmId"); + ex.addProxyObject(systemVm, vmId, "vmId"); throw ex; } @@ -2786,8 +2826,8 @@ public class ManagementServerImpl implements ManagementServer { } else if (systemVm.getType() == VirtualMachine.Type.SecondaryStorageVm) { return startSecondaryStorageVm(vmId); } else { - InvalidParameterValueException ex = new InvalidParameterValueException("Unable to find a system vm with specified vmId"); - ex.addProxyObject(systemVm, vmId, "vmId"); + InvalidParameterValueException ex = new InvalidParameterValueException("Unable to find a system vm with specified vmId"); + ex.addProxyObject(systemVm, vmId, "vmId"); throw ex; } } @@ -2799,8 +2839,8 @@ public class ManagementServerImpl implements ManagementServer { // verify parameters VMInstanceVO systemVm = _vmInstanceDao.findByIdTypes(id, VirtualMachine.Type.ConsoleProxy, VirtualMachine.Type.SecondaryStorageVm); if (systemVm == null) { - InvalidParameterValueException ex = new InvalidParameterValueException("unable to find a system vm with specified vmId"); - ex.addProxyObject(systemVm, id, "vmId"); + InvalidParameterValueException ex = new InvalidParameterValueException("unable to find a system vm with specified vmId"); + ex.addProxyObject(systemVm, id, "vmId"); throw ex; } @@ -2821,8 +2861,8 @@ public class ManagementServerImpl implements ManagementServer { VMInstanceVO systemVm = _vmInstanceDao.findByIdTypes(cmd.getId(), VirtualMachine.Type.ConsoleProxy, VirtualMachine.Type.SecondaryStorageVm); if (systemVm == null) { - InvalidParameterValueException ex = new InvalidParameterValueException("unable to find a system vm with specified vmId"); - ex.addProxyObject(systemVm, cmd.getId(), "vmId"); + InvalidParameterValueException ex = new InvalidParameterValueException("unable to find a system vm with specified vmId"); + ex.addProxyObject(systemVm, cmd.getId(), "vmId"); throw ex; } @@ -2838,8 +2878,8 @@ public class ManagementServerImpl implements ManagementServer { VMInstanceVO systemVm = _vmInstanceDao.findByIdTypes(cmd.getId(), VirtualMachine.Type.ConsoleProxy, VirtualMachine.Type.SecondaryStorageVm); if (systemVm == null) { - InvalidParameterValueException ex = new InvalidParameterValueException("unable to find a system vm with specified vmId"); - ex.addProxyObject(systemVm, cmd.getId(), "vmId"); + InvalidParameterValueException ex = new InvalidParameterValueException("unable to find a system vm with specified vmId"); + ex.addProxyObject(systemVm, cmd.getId(), "vmId"); throw ex; } @@ -2876,8 +2916,8 @@ public class ManagementServerImpl implements ManagementServer { // verify that user exists User user = _accountMgr.getUserIncludingRemoved(userId); if ((user == null) || (user.getRemoved() != null)) { - InvalidParameterValueException ex = new InvalidParameterValueException("Unable to find active user of specified id"); - ex.addProxyObject(user, userId, "userId"); + InvalidParameterValueException ex = new InvalidParameterValueException("Unable to find active user of specified id"); + ex.addProxyObject(user, userId, "userId"); throw ex; } @@ -2925,19 +2965,20 @@ public class ManagementServerImpl implements ManagementServer { supportELB = networkType; } } - + long diskOffMaxSize = Long.valueOf(_configDao.getValue(Config.CustomDiskOfferingMaxSize.key())); String userPublicTemplateEnabled = _configs.get(Config.AllowPublicUserTemplates.key()); capabilities.put("securityGroupsEnabled", securityGroupsEnabled); - capabilities.put("userPublicTemplateEnabled", (userPublicTemplateEnabled == null || userPublicTemplateEnabled.equals("false") ? false : true)); + capabilities + .put("userPublicTemplateEnabled", (userPublicTemplateEnabled == null || userPublicTemplateEnabled.equals("false") ? false : true)); capabilities.put("cloudStackVersion", getVersion()); capabilities.put("supportELB", supportELB); capabilities.put("projectInviteRequired", _projectMgr.projectInviteRequired()); capabilities.put("allowusercreateprojects", _projectMgr.allowUserToCreateProject()); capabilities.put("customDiskOffMaxSize", diskOffMaxSize); - + return capabilities; } @@ -2962,8 +3003,8 @@ public class ManagementServerImpl implements ManagementServer { VolumeVO volume = _volumeDao.findById(volumeId); if (volume == null) { - InvalidParameterValueException ex = new InvalidParameterValueException("Unable to find volume with specified volumeId"); - ex.addProxyObject(volume, volumeId, "volumeId"); + InvalidParameterValueException ex = new InvalidParameterValueException("Unable to find volume with specified volumeId"); + ex.addProxyObject(volume, volumeId, "volumeId"); throw ex; } @@ -2976,23 +3017,31 @@ public class ManagementServerImpl implements ManagementServer { if (volume.getPoolId() == null) { throw new InvalidParameterValueException("The volume doesnt belong to a storage pool so cant extract it"); } - // Extract activity only for detached volumes or for volumes whose instance is stopped + // Extract activity only for detached volumes or for volumes whose + // instance is stopped if (volume.getInstanceId() != null && ApiDBUtils.findVMInstanceById(volume.getInstanceId()).getState() != State.Stopped) { - s_logger.debug("Invalid state of the volume with ID: " + volumeId + ". It should be either detached or the VM should be in stopped state."); - PermissionDeniedException ex = new PermissionDeniedException("Invalid state of the volume with specified ID. It should be either detached or the VM should be in stopped state."); + s_logger.debug("Invalid state of the volume with ID: " + volumeId + + ". It should be either detached or the VM should be in stopped state."); + PermissionDeniedException ex = new PermissionDeniedException( + "Invalid state of the volume with specified ID. It should be either detached or the VM should be in stopped state."); ex.addProxyObject(volume, volumeId, "volumeId"); throw ex; } - if (volume.getVolumeType() != Volume.Type.DATADISK) { // Datadisk dont have any template dependence. + if (volume.getVolumeType() != Volume.Type.DATADISK) { // Datadisk dont + // have any + // template + // dependence. VMTemplateVO template = ApiDBUtils.findTemplateById(volume.getTemplateId()); - if (template != null) { // For ISO based volumes template = null and we allow extraction of all ISO based volumes + if (template != null) { // For ISO based volumes template = null and + // we allow extraction of all ISO based + // volumes boolean isExtractable = template.isExtractable() && template.getTemplateType() != Storage.TemplateType.SYSTEM; if (!isExtractable && account != null && account.getType() != Account.ACCOUNT_TYPE_ADMIN) { // Global -// admins are always allowed to extract - PermissionDeniedException ex = new PermissionDeniedException("The volume with specified volumeId is not allowed to be extracted"); - ex.addProxyObject(volume, volumeId, "volumeId"); + // admins are always allowed to extract + PermissionDeniedException ex = new PermissionDeniedException("The volume with specified volumeId is not allowed to be extracted"); + ex.addProxyObject(volume, volumeId, "volumeId"); throw ex; } } @@ -3005,7 +3054,8 @@ public class ManagementServerImpl implements ManagementServer { extractMode = mode.equals(Upload.Mode.FTP_UPLOAD.toString()) ? Upload.Mode.FTP_UPLOAD : Upload.Mode.HTTP_DOWNLOAD; } - // If mode is upload perform extra checks on url and also see if there is an ongoing upload on the same. + // If mode is upload perform extra checks on url and also see if there + // is an ongoing upload on the same. if (extractMode == Upload.Mode.FTP_UPLOAD) { URI uri = new URI(url); if ((uri.getScheme() == null) || (!uri.getScheme().equalsIgnoreCase("ftp"))) { @@ -3026,7 +3076,8 @@ public class ManagementServerImpl implements ManagementServer { } if (_uploadMonitor.isTypeUploadInProgress(volumeId, Upload.Type.VOLUME)) { - throw new IllegalArgumentException(volume.getName() + " upload is in progress. Please wait for some time to schedule another upload for the same"); + throw new IllegalArgumentException(volume.getName() + + " upload is in progress. Please wait for some time to schedule another upload for the same"); } } @@ -3038,14 +3089,17 @@ public class ManagementServerImpl implements ManagementServer { List extractURLList = _uploadDao.listByTypeUploadStatus(volumeId, Upload.Type.VOLUME, UploadVO.Status.DOWNLOAD_URL_CREATED); if (extractMode == Upload.Mode.HTTP_DOWNLOAD && extractURLList.size() > 0) { - return extractURLList.get(0).getId(); // If download url already exists then return + return extractURLList.get(0).getId(); // If download url already + // exists then return } else { - UploadVO uploadJob = _uploadMonitor.createNewUploadEntry(sserver.getId(), volumeId, UploadVO.Status.COPY_IN_PROGRESS, Upload.Type.VOLUME, url, extractMode); + UploadVO uploadJob = _uploadMonitor.createNewUploadEntry(sserver.getId(), volumeId, UploadVO.Status.COPY_IN_PROGRESS, Upload.Type.VOLUME, + url, extractMode); s_logger.debug("Extract Mode - " + uploadJob.getMode()); uploadJob = _uploadDao.createForUpdate(uploadJob.getId()); // Update the async Job - ExtractResponse resultObj = new ExtractResponse(volumeId, volume.getName(), accountId, UploadVO.Status.COPY_IN_PROGRESS.toString(), uploadJob.getId()); + ExtractResponse resultObj = new ExtractResponse(volumeId, volume.getName(), accountId, UploadVO.Status.COPY_IN_PROGRESS.toString(), + uploadJob.getId()); resultObj.setResponseName(cmd.getCommandName()); AsyncJobExecutor asyncExecutor = BaseAsyncJobExecutor.getCurrentExecutor(); if (asyncExecutor != null) { @@ -3091,10 +3145,13 @@ public class ManagementServerImpl implements ManagementServer { uploadJob.setInstallPath(volumeLocalPath); _uploadDao.update(uploadJob.getId(), uploadJob); - if (extractMode == Mode.FTP_UPLOAD) { // Now that the volume is copied perform the actual uploading + if (extractMode == Mode.FTP_UPLOAD) { // Now that the volume is + // copied perform the actual + // uploading _uploadMonitor.extractVolume(uploadJob, sserver, volume, url, zoneId, volumeLocalPath, cmd.getStartEventId(), job.getId(), _asyncMgr); return uploadJob.getId(); - } else { // Volume is copied now make it visible under apache and create a URL. + } else { // Volume is copied now make it visible under apache and + // create a URL. _uploadMonitor.createVolumeDownloadURL(volumeId, volumeLocalPath, Upload.Type.VOLUME, zoneId, uploadJob.getId()); return uploadJob.getId(); } @@ -3126,8 +3183,8 @@ public class ManagementServerImpl implements ManagementServer { // Verify input parameters InstanceGroupVO group = _vmGroupDao.findById(groupId.longValue()); if (group == null) { - InvalidParameterValueException ex = new InvalidParameterValueException("unable to find a vm group with specified groupId"); - ex.addProxyObject(group, groupId, "groupId"); + InvalidParameterValueException ex = new InvalidParameterValueException("unable to find a vm group with specified groupId"); + ex.addProxyObject(group, groupId, "groupId"); throw ex; } @@ -3156,8 +3213,10 @@ public class ManagementServerImpl implements ManagementServer { Account caller = UserContext.current().getCaller(); List permittedAccounts = new ArrayList(); - Ternary domainIdRecursiveListProject = new Ternary(cmd.getDomainId(), cmd.isRecursive(), null); - _accountMgr.buildACLSearchParameters(caller, id, cmd.getAccountName(), cmd.getProjectId(), permittedAccounts, domainIdRecursiveListProject, cmd.listAll(), false); + Ternary domainIdRecursiveListProject = new Ternary( + cmd.getDomainId(), cmd.isRecursive(), null); + _accountMgr.buildACLSearchParameters(caller, id, cmd.getAccountName(), cmd.getProjectId(), permittedAccounts, domainIdRecursiveListProject, + cmd.listAll(), false); Long domainId = domainIdRecursiveListProject.first(); Boolean isRecursive = domainIdRecursiveListProject.second(); ListProjectResourcesCriteria listProjectResourcesCriteria = domainIdRecursiveListProject.third(); @@ -3169,7 +3228,8 @@ public class ManagementServerImpl implements ManagementServer { 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 + // if accountId isn't specified, we can do a domain match for the + // admin case if isRecursive is true SearchBuilder domainSearch = _domainDao.createSearchBuilder(); domainSearch.and("path", domainSearch.entity().getPath(), SearchCriteria.Op.LIKE); sb.join("domainSearch", domainSearch, sb.entity().getDomainId(), domainSearch.entity().getId(), JoinBuilder.JoinType.INNER); @@ -3308,7 +3368,8 @@ public class ManagementServerImpl implements ManagementServer { @Override public String getHashKey() { - // although we may have race conditioning here, database transaction serialization should + // although we may have race conditioning here, database transaction + // serialization should // give us the same key if (_hashKey == null) { _hashKey = _configDao.getValueAndInitIfNotExist(Config.HashKey.key(), Config.HashKey.getCategory(), UUID.randomUUID().toString()); @@ -3351,8 +3412,9 @@ public class ManagementServerImpl implements ManagementServer { SSHKeyPairVO s = _sshKeyPairDao.findByName(owner.getAccountId(), owner.getDomainId(), cmd.getName()); if (s == null) { - InvalidParameterValueException ex = new InvalidParameterValueException("A key pair with name '" + cmd.getName() + "' does not exist for account " + owner.getAccountName() + " in specified domain id"); - ex.addProxyObject(owner, owner.getDomainId(), "domainId"); + InvalidParameterValueException ex = new InvalidParameterValueException("A key pair with name '" + cmd.getName() + + "' does not exist for account " + owner.getAccountName() + " in specified domain id"); + ex.addProxyObject(owner, owner.getDomainId(), "domainId"); throw ex; } @@ -3367,8 +3429,10 @@ public class ManagementServerImpl implements ManagementServer { Account caller = UserContext.current().getCaller(); List permittedAccounts = new ArrayList(); - Ternary domainIdRecursiveListProject = new Ternary(cmd.getDomainId(), cmd.isRecursive(), null); - _accountMgr.buildACLSearchParameters(caller, null, cmd.getAccountName(), cmd.getProjectId(), permittedAccounts, domainIdRecursiveListProject, cmd.listAll(), false); + Ternary domainIdRecursiveListProject = new Ternary( + cmd.getDomainId(), cmd.isRecursive(), null); + _accountMgr.buildACLSearchParameters(caller, null, cmd.getAccountName(), cmd.getProjectId(), permittedAccounts, domainIdRecursiveListProject, + cmd.listAll(), false); Long domainId = domainIdRecursiveListProject.first(); Boolean isRecursive = domainIdRecursiveListProject.second(); ListProjectResourcesCriteria listProjectResourcesCriteria = domainIdRecursiveListProject.third(); @@ -3435,8 +3499,8 @@ public class ManagementServerImpl implements ManagementServer { UserVmVO vm = _userVmDao.findById(cmd.getId()); if (vm == null) { - InvalidParameterValueException ex = new InvalidParameterValueException("No VM with specified id found."); - ex.addProxyObject(vm, cmd.getId(), "vmId"); + InvalidParameterValueException ex = new InvalidParameterValueException("No VM with specified id found."); + ex.addProxyObject(vm, cmd.getId(), "vmId"); throw ex; } @@ -3446,8 +3510,8 @@ public class ManagementServerImpl implements ManagementServer { _userVmDao.loadDetails(vm); String password = vm.getDetail("Encrypted.Password"); if (password == null || password.equals("")) { - InvalidParameterValueException ex = new InvalidParameterValueException("No password for VM with specified id found."); - ex.addProxyObject(vm, cmd.getId(), "vmId"); + InvalidParameterValueException ex = new InvalidParameterValueException("No password for VM with specified id found."); + ex.addProxyObject(vm, cmd.getId(), "vmId"); throw ex; } @@ -3488,13 +3552,16 @@ public class ManagementServerImpl implements ManagementServer { nvp.setValue(DBEncryptionUtil.encrypt(cmd.getPassword())); _detailsDao.persist(nvp); } else { - // if one host in the cluster has diff username then rollback to maintain consistency + // if one host in the cluster has diff username then + // rollback to maintain consistency txn.rollback(); - throw new InvalidParameterValueException("The username is not same for all hosts, please modify passwords for individual hosts."); + throw new InvalidParameterValueException( + "The username is not same for all hosts, please modify passwords for individual hosts."); } } txn.commit(); - // if hypervisor is xenserver then we update it in CitrixResourceBase + // if hypervisor is xenserver then we update it in + // CitrixResourceBase } catch (Exception e) { txn.rollback(); throw new CloudRuntimeException("Failed to update password " + e.getMessage()); @@ -3525,8 +3592,8 @@ public class ManagementServerImpl implements ManagementServer { } @Override - public Pair, Integer> listHypervisorCapabilities(Long id, - HypervisorType hypervisorType, String keyword, Long startIndex, Long pageSizeVal) { + public Pair, Integer> listHypervisorCapabilities(Long id, HypervisorType hypervisorType, String keyword, + Long startIndex, Long pageSizeVal) { Filter searchFilter = new Filter(HypervisorCapabilitiesVO.class, "id", true, startIndex, pageSizeVal); SearchCriteria sc = _hypervisorCapabilitiesDao.createSearchCriteria(); @@ -3544,7 +3611,7 @@ public class ManagementServerImpl implements ManagementServer { sc.addAnd("hypervisorType", SearchCriteria.Op.SC, ssc); } - Pair, Integer> result = _hypervisorCapabilitiesDao.searchAndCount(sc, searchFilter); + Pair, Integer> result = _hypervisorCapabilitiesDao.searchAndCount(sc, searchFilter); return new Pair, Integer>(result.first(), result.second()); } @@ -3553,8 +3620,8 @@ public class ManagementServerImpl implements ManagementServer { HypervisorCapabilitiesVO hpvCapabilities = _hypervisorCapabilitiesDao.findById(id, true); if (hpvCapabilities == null) { - InvalidParameterValueException ex = new InvalidParameterValueException("unable to find the hypervisor capabilities for specified id"); - ex.addProxyObject(hpvCapabilities, id, "Id"); + InvalidParameterValueException ex = new InvalidParameterValueException("unable to find the hypervisor capabilities for specified id"); + ex.addProxyObject(hpvCapabilities, id, "Id"); throw ex; } @@ -3581,27 +3648,25 @@ public class ManagementServerImpl implements ManagementServer { return null; } } - - + @Override public VirtualMachine upgradeSystemVM(UpgradeSystemVMCmd cmd) { Long systemVmId = cmd.getId(); Long serviceOfferingId = cmd.getServiceOfferingId(); Account caller = UserContext.current().getCaller(); - VMInstanceVO systemVm = _vmInstanceDao.findByIdTypes(systemVmId, VirtualMachine.Type.ConsoleProxy, - VirtualMachine.Type.SecondaryStorageVm); + VMInstanceVO systemVm = _vmInstanceDao.findByIdTypes(systemVmId, VirtualMachine.Type.ConsoleProxy, VirtualMachine.Type.SecondaryStorageVm); if (systemVm == null) { throw new InvalidParameterValueException("Unable to find SystemVm with id " + systemVmId); } _accountMgr.checkAccess(caller, null, true, systemVm); - + // Check that the specified service offering ID is valid _itMgr.checkIfCanUpgrade(systemVm, serviceOfferingId); boolean result = _itMgr.upgradeVmDb(systemVmId, serviceOfferingId); - + if (result) { return _vmInstanceDao.findById(systemVmId); } else { @@ -3609,26 +3674,27 @@ public class ManagementServerImpl implements ManagementServer { } } - + public void enableAdminUser(String password) { String encodedPassword = null; - + UserVO adminUser = _userDao.getUser(2); if (adminUser.getState() == Account.State.disabled) { - // This means its a new account, set the password using the authenticator - - for (Enumeration en = _userAuthenticators.enumeration(); en.hasMoreElements();) { - UserAuthenticator authenticator = en.nextElement(); - encodedPassword = authenticator.encode(password); - if (encodedPassword != null) { - break; - } - } - - adminUser.setPassword(encodedPassword); - adminUser.setState(Account.State.enabled); - _userDao.persist(adminUser); - s_logger.info("Admin user enabled"); + // This means its a new account, set the password using the + // authenticator + + for (Enumeration en = _userAuthenticators.enumeration(); en.hasMoreElements();) { + UserAuthenticator authenticator = en.nextElement(); + encodedPassword = authenticator.encode(password); + if (encodedPassword != null) { + break; + } + } + + adminUser.setPassword(encodedPassword); + adminUser.setState(Account.State.enabled); + _userDao.persist(adminUser); + s_logger.info("Admin user enabled"); } } diff --git a/server/src/com/cloud/tags/TaggedResourceManagerImpl.java b/server/src/com/cloud/tags/TaggedResourceManagerImpl.java index 3224bc9e65d..966dfbd5764 100644 --- a/server/src/com/cloud/tags/TaggedResourceManagerImpl.java +++ b/server/src/com/cloud/tags/TaggedResourceManagerImpl.java @@ -77,10 +77,10 @@ import com.cloud.vm.dao.UserVmDao; public class TaggedResourceManagerImpl implements TaggedResourceService, Manager{ public static final Logger s_logger = Logger.getLogger(TaggedResourceManagerImpl.class); private String _name; - - private static Map> _daoMap= + + private static Map> _daoMap= new HashMap>(); - + @Inject AccountManager _accountMgr; @Inject @@ -122,7 +122,7 @@ public class TaggedResourceManagerImpl implements TaggedResourceService, Manager @Override public boolean configure(String name, Map params) throws ConfigurationException { - _name = name; + _name = name; _daoMap.put(TaggedResourceType.UserVm, _userVmDao); _daoMap.put(TaggedResourceType.Volume, _volumeDao); _daoMap.put(TaggedResourceType.Template, _templateDao); @@ -157,16 +157,16 @@ public class TaggedResourceManagerImpl implements TaggedResourceService, Manager return _name; } - - private Long getResourceId(String resourceId, TaggedResourceType resourceType) { + + private Long getResourceId(String resourceId, TaggedResourceType resourceType) { GenericDao dao = _daoMap.get(resourceType); if (dao == null) { throw new CloudRuntimeException("Dao is not loaded for the resource type " + resourceType); } Class claz = DbUtil.getEntityBeanType(dao); - + Long identityId = null; - + while (claz != null && claz != Object.class) { try { String tableName = DbUtil.getTableName(claz); @@ -182,7 +182,7 @@ public class TaggedResourceManagerImpl implements TaggedResourceService, Manager } claz = claz.getSuperclass(); } - + if (identityId == null) { throw new InvalidParameterValueException("Unable to find resource by id " + resourceId + " and type " + resourceType); } @@ -194,9 +194,9 @@ public class TaggedResourceManagerImpl implements TaggedResourceService, Manager Class claz = DbUtil.getEntityBeanType(dao); return DbUtil.getTableName(claz); } - + private Pair getAccountDomain(long resourceId, TaggedResourceType resourceType) { - + Pair pair = null; GenericDao dao = _daoMap.get(resourceType); Class claz = DbUtil.getEntityBeanType(dao); @@ -218,21 +218,21 @@ public class TaggedResourceManagerImpl implements TaggedResourceService, Manager Long accountId = pair.first(); Long domainId = pair.second(); - + if (accountId == null) { accountId = Account.ACCOUNT_ID_SYSTEM; } - + if (domainId == null) { domainId = Domain.ROOT_DOMAIN; } - + return new Pair(accountId, domainId); } @Override public TaggedResourceType getResourceType(String resourceTypeStr) { - + for (TaggedResourceType type : ResourceTag.TaggedResourceType.values()) { if (type.toString().equalsIgnoreCase(resourceTypeStr)) { return type; @@ -244,26 +244,26 @@ public class TaggedResourceManagerImpl implements TaggedResourceService, Manager @Override @DB @ActionEvent(eventType = EventTypes.EVENT_TAGS_CREATE, eventDescription = "creating resource tags") - public List createTags(List resourceIds, TaggedResourceType resourceType, + public List createTags(List resourceIds, TaggedResourceType resourceType, Map tags, String customer) { Account caller = UserContext.current().getCaller(); - + List resourceTags = new ArrayList(tags.size()); - + Transaction txn = Transaction.currentTxn(); txn.start(); - + for (String key : tags.keySet()) { for (String resourceId : resourceIds) { Long id = getResourceId(resourceId, resourceType); String resourceUuid = getUuid(resourceId, resourceType); - + //check if object exists if (_daoMap.get(resourceType).findById(id) == null) { - throw new InvalidParameterValueException("Unable to find resource by id " + resourceId + + throw new InvalidParameterValueException("Unable to find resource by id " + resourceId + " and type " + resourceType); } - + Pair accountDomainPair = getAccountDomain(id, resourceType); Long domainId = accountDomainPair.second(); Long accountId = accountDomainPair.first(); @@ -276,53 +276,53 @@ public class TaggedResourceManagerImpl implements TaggedResourceService, Manager throw new PermissionDeniedException("Account " + caller + " doesn't have permissions to create tags" + " for resource " + key); } - + String value = tags.get(key); - + if (value == null || value.isEmpty()) { throw new InvalidParameterValueException("Value for the key " + key + " is either null or empty"); } - + ResourceTagVO resourceTag = new ResourceTagVO(key, value, accountDomainPair.first(), - accountDomainPair.second(), + accountDomainPair.second(), id, resourceType, customer, resourceUuid); resourceTag = _resourceTagDao.persist(resourceTag); resourceTags.add(resourceTag); } } - + txn.commit(); - + return resourceTags; } - + @Override public String getUuid(String resourceId, TaggedResourceType resourceType) { GenericDao dao = _daoMap.get(resourceType); Class claz = DbUtil.getEntityBeanType(dao); - + String identiyUUId = null; - + while (claz != null && claz != Object.class) { try { String tableName = DbUtil.getTableName(claz); if (tableName == null) { throw new InvalidParameterValueException("Unable to find resource of type " + resourceType + " in the database"); } - + claz = claz.getSuperclass(); if (claz == Object.class) { identiyUUId = _identityDao.getIdentityUuid(tableName, resourceId); - } + } } catch (Exception ex) { //do nothing here, it might mean uuid field is missing and we have to search further } } - + if (identiyUUId == null) { return resourceId; } - + return identiyUUId; } @@ -337,7 +337,7 @@ public class TaggedResourceManagerImpl implements TaggedResourceService, Manager String customerName = cmd.getCustomer(); boolean listAll = cmd.listAll(); - Ternary domainIdRecursiveListProject = + Ternary domainIdRecursiveListProject = new Ternary(cmd.getDomainId(), cmd.isRecursive(), null); _accountMgr.buildACLSearchParameters(caller, null, cmd.getAccountName(), @@ -388,7 +388,7 @@ public class TaggedResourceManagerImpl implements TaggedResourceService, Manager } Pair, Integer> result = _resourceTagJoinDao.searchAndCount(sc, searchFilter); - return new Pair, Integer> (result.first(), result.second()); + return result; } @Override @@ -396,21 +396,21 @@ public class TaggedResourceManagerImpl implements TaggedResourceService, Manager @ActionEvent(eventType = EventTypes.EVENT_TAGS_DELETE, eventDescription = "deleting resource tags") public boolean deleteTags(List resourceIds, TaggedResourceType resourceType, Map tags) { Account caller = UserContext.current().getCaller(); - + SearchBuilder sb = _resourceTagDao.createSearchBuilder(); sb.and().op("resourceId", sb.entity().getResourceId(), SearchCriteria.Op.IN); sb.or("resourceUuid", sb.entity().getResourceUuid(), SearchCriteria.Op.IN); sb.cp(); sb.and("resourceType", sb.entity().getResourceType(), SearchCriteria.Op.EQ); - + SearchCriteria sc = sb.create(); sc.setParameters("resourceId", resourceIds.toArray()); sc.setParameters("resourceUuid", resourceIds.toArray()); sc.setParameters("resourceType", resourceType); - + List resourceTags = _resourceTagDao.search(sc, null);; List tagsToRemove = new ArrayList(); - + // Finalize which tags should be removed for (ResourceTag resourceTag : resourceTags) { //1) validate the permissions @@ -434,16 +434,16 @@ public class TaggedResourceManagerImpl implements TaggedResourceService, Manager break; } } - } + } } else { tagsToRemove.add(resourceTag); } } - + if (tagsToRemove.isEmpty()) { throw new InvalidParameterValueException("Unable to find tags by parameters specified"); } - + //Remove the tags Transaction txn = Transaction.currentTxn(); txn.start(); diff --git a/server/src/com/cloud/tags/dao/ResourceTagJoinDaoImpl.java b/server/src/com/cloud/tags/dao/ResourceTagJoinDaoImpl.java index 6593f904321..55b2f7f69ed 100644 --- a/server/src/com/cloud/tags/dao/ResourceTagJoinDaoImpl.java +++ b/server/src/com/cloud/tags/dao/ResourceTagJoinDaoImpl.java @@ -94,13 +94,7 @@ public class ResourceTagJoinDaoImpl extends GenericDaoBase Date: Fri, 7 Dec 2012 16:51:37 -0800 Subject: [PATCH 080/421] API_refactoring Add parameter annotation to the admin virtual machine group. modified: api/src/org/apache/cloudstack/api/admin/vm/command/AssignVMCmd.java modified: api/src/org/apache/cloudstack/api/admin/vm/command/MigrateVMCmd.java modified: api/src/org/apache/cloudstack/api/admin/vm/command/RecoverVMCmd.java Signed-off-by: Rohit Yadav --- .../api/admin/vm/command/AssignVMCmd.java | 20 +++++++++++-------- .../api/admin/vm/command/MigrateVMCmd.java | 11 ++++++---- .../api/admin/vm/command/RecoverVMCmd.java | 4 ++-- 3 files changed, 21 insertions(+), 14 deletions(-) diff --git a/api/src/org/apache/cloudstack/api/admin/vm/command/AssignVMCmd.java b/api/src/org/apache/cloudstack/api/admin/vm/command/AssignVMCmd.java index 57b87fa6a47..5ae6140a189 100644 --- a/api/src/org/apache/cloudstack/api/admin/vm/command/AssignVMCmd.java +++ b/api/src/org/apache/cloudstack/api/admin/vm/command/AssignVMCmd.java @@ -28,6 +28,10 @@ import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; + +import com.cloud.api.response.DomainResponse; +import com.cloud.api.response.NetworkResponse; +import com.cloud.api.response.SecurityGroupResponse; import com.cloud.api.response.UserVmResponse; import com.cloud.user.Account; import com.cloud.uservm.UserVm; @@ -42,24 +46,24 @@ public class AssignVMCmd extends BaseCmd { //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - @IdentityMapper(entityTableName="vm_instance") - @Parameter(name=ApiConstants.VIRTUAL_MACHINE_ID, type=CommandType.LONG, required=true, description="the vm ID of the user VM to be moved") + //@IdentityMapper(entityTableName="vm_instance") + @Parameter(name=ApiConstants.VIRTUAL_MACHINE_ID, type=CommandType.LONG, required=true, description="the vm ID of the user VM to be moved", entityType=UserVmResponse.class) private Long virtualMachineId; @Parameter(name=ApiConstants.ACCOUNT, type=CommandType.STRING, required=true, description="account name of the new VM owner.") private String accountName; - @IdentityMapper(entityTableName="domain") - @Parameter(name=ApiConstants.DOMAIN_ID, type=CommandType.LONG, required=true, description="domain id of the new VM owner.") + //@IdentityMapper(entityTableName="domain") + @Parameter(name=ApiConstants.DOMAIN_ID, type=CommandType.LONG, required=true, description="domain id of the new VM owner.", entityType=DomainResponse.class) private Long domainId; //Network information - @IdentityMapper(entityTableName="networks") - @Parameter(name=ApiConstants.NETWORK_IDS, type=CommandType.LIST, collectionType=CommandType.LONG, description="list of network ids that will be part of VM network after move in advanced network setting.") + //@IdentityMapper(entityTableName="networks") + @Parameter(name=ApiConstants.NETWORK_IDS, type=CommandType.LIST, collectionType=CommandType.LONG, description="list of network ids that will be part of VM network after move in advanced network setting.", entityType=NetworkResponse.class) private List networkIds; - @IdentityMapper(entityTableName="security_group") - @Parameter(name=ApiConstants.SECURITY_GROUP_IDS, type=CommandType.LIST, collectionType=CommandType.LONG, description="comma separated list of security groups id that going to be applied to the virtual machine. Should be passed only when vm is moved in a zone with Basic Network support.") + //@IdentityMapper(entityTableName="security_group") + @Parameter(name=ApiConstants.SECURITY_GROUP_IDS, type=CommandType.LIST, collectionType=CommandType.LONG, description="comma separated list of security groups id that going to be applied to the virtual machine. Should be passed only when vm is moved in a zone with Basic Network support.", entityType=SecurityGroupResponse.class) private List securityGroupIdList; ///////////////////////////////////////////////////// diff --git a/api/src/org/apache/cloudstack/api/admin/vm/command/MigrateVMCmd.java b/api/src/org/apache/cloudstack/api/admin/vm/command/MigrateVMCmd.java index 57cd8fe7361..6103a864786 100644 --- a/api/src/org/apache/cloudstack/api/admin/vm/command/MigrateVMCmd.java +++ b/api/src/org/apache/cloudstack/api/admin/vm/command/MigrateVMCmd.java @@ -25,6 +25,9 @@ import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; + +import com.cloud.api.response.HostResponse; +import com.cloud.api.response.StoragePoolResponse; import com.cloud.api.response.UserVmResponse; import com.cloud.event.EventTypes; import com.cloud.exception.ConcurrentOperationException; @@ -49,16 +52,16 @@ public class MigrateVMCmd extends BaseAsyncCmd { //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - @IdentityMapper(entityTableName="host") - @Parameter(name=ApiConstants.HOST_ID, type=CommandType.LONG, required=false, description="Destination Host ID to migrate VM to. Required for live migrating a VM from host to host") + //@IdentityMapper(entityTableName="host") + @Parameter(name=ApiConstants.HOST_ID, type=CommandType.LONG, required=false, description="Destination Host ID to migrate VM to. Required for live migrating a VM from host to host", entityType=HostResponse.class) private Long hostId; @IdentityMapper(entityTableName="vm_instance") - @Parameter(name=ApiConstants.VIRTUAL_MACHINE_ID, type=CommandType.LONG, required=true, description="the ID of the virtual machine") + @Parameter(name=ApiConstants.VIRTUAL_MACHINE_ID, type=CommandType.LONG, required=true, description="the ID of the virtual machine", entityType=UserVmResponse.class) private Long virtualMachineId; @IdentityMapper(entityTableName="storage_pool") - @Parameter(name=ApiConstants.STORAGE_ID, type=CommandType.LONG, required=false, description="Destination storage pool ID to migrate VM volumes to. Required for migrating the root disk volume") + @Parameter(name=ApiConstants.STORAGE_ID, type=CommandType.LONG, required=false, description="Destination storage pool ID to migrate VM volumes to. Required for migrating the root disk volume", entityType=StoragePoolResponse.class) private Long storageId; ///////////////////////////////////////////////////// diff --git a/api/src/org/apache/cloudstack/api/admin/vm/command/RecoverVMCmd.java b/api/src/org/apache/cloudstack/api/admin/vm/command/RecoverVMCmd.java index 5baa67fdafb..c10907cf203 100644 --- a/api/src/org/apache/cloudstack/api/admin/vm/command/RecoverVMCmd.java +++ b/api/src/org/apache/cloudstack/api/admin/vm/command/RecoverVMCmd.java @@ -39,8 +39,8 @@ public class RecoverVMCmd extends BaseCmd { //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - @IdentityMapper(entityTableName="vm_instance") - @Parameter(name=ApiConstants.ID, type=CommandType.LONG, required=true, description="The ID of the virtual machine") + //@IdentityMapper(entityTableName="vm_instance") + @Parameter(name=ApiConstants.ID, type=CommandType.LONG, required=true, description="The ID of the virtual machine", entityType=UserVmResponse.class) private Long id; ///////////////////////////////////////////////////// From af28c06998d7983fd703e7e4c4cadc1aa2d827ea Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Fri, 7 Dec 2012 18:30:54 -0800 Subject: [PATCH 081/421] api: move and group all under command, org.apache.cloudstack.command.* Signed-off-by: Rohit Yadav --- .../api/commands/UpdateTemplateOrIsoCmd.java | 2 +- .../configuration/ConfigurationService.java | 37 +- api/src/com/cloud/network/NetworkService.java | 8 +- .../cloud/network/StorageNetworkService.java | 8 +- .../VirtualNetworkApplianceService.java | 2 +- .../cloud/network/as/AutoScaleService.java | 15 +- .../element/VirtualRouterElementService.java | 4 +- .../network/firewall/FirewallService.java | 2 +- .../network/firewall/NetworkACLService.java | 2 +- .../network/lb/LoadBalancingRulesService.java | 7 +- .../com/cloud/network/rules/RulesService.java | 2 +- .../security/SecurityGroupService.java | 5 +- .../network/vpn/RemoteAccessVpnService.java | 2 +- .../com/cloud/resource/ResourceService.java | 18 +- .../com/cloud/server/ManagementService.java | 67 ++- .../cloud/server/TaggedResourceService.java | 2 +- api/src/com/cloud/storage/StorageService.java | 8 +- .../storage/snapshot/SnapshotService.java | 8 +- .../com/cloud/template/TemplateService.java | 14 +- api/src/com/cloud/user/AccountService.java | 12 +- api/src/com/cloud/user/DomainService.java | 4 +- api/src/com/cloud/vm/UserVmService.java | 6 +- .../cloudstack/api/ResponseGenerator.java | 4 +- .../admin/account}/CreateAccountCmd.java | 2 +- .../admin/account}/DeleteAccountCmd.java | 2 +- .../admin/account}/DisableAccountCmd.java | 2 +- .../admin/account}/EnableAccountCmd.java | 2 +- .../admin/account}/LockAccountCmd.java | 2 +- .../admin/account}/UpdateAccountCmd.java | 2 +- .../admin/autoscale}/CreateCounterCmd.java | 2 +- .../admin/autoscale}/DeleteCounterCmd.java | 2 +- .../admin/cluster}/AddClusterCmd.java | 2 +- .../admin/cluster}/DeleteClusterCmd.java | 2 +- .../admin/cluster}/ListClustersCmd.java | 4 +- .../admin/cluster}/UpdateClusterCmd.java | 2 +- .../admin/config}/ListCfgsByCmd.java | 2 +- .../ListHypervisorCapabilitiesCmd.java | 2 +- .../admin/config}/UpdateCfgCmd.java | 2 +- .../UpdateHypervisorCapabilitiesCmd.java | 2 +- .../admin/domain}/CreateDomainCmd.java | 2 +- .../admin/domain}/DeleteDomainCmd.java | 2 +- .../admin/domain}/ListDomainChildrenCmd.java | 2 +- .../admin/domain}/ListDomainsCmd.java | 2 +- .../admin/domain}/UpdateDomainCmd.java | 2 +- .../admin/host}/AddHostCmd.java | 2 +- .../admin/host}/AddSecondaryStorageCmd.java | 2 +- .../admin/host}/CancelMaintenanceCmd.java | 2 +- .../admin/host}/DeleteHostCmd.java | 2 +- .../admin/host}/ListHostsCmd.java | 2 +- .../admin/host}/PrepareForMaintenanceCmd.java | 2 +- .../admin/host}/ReconnectHostCmd.java | 2 +- .../admin/host}/UpdateHostCmd.java | 2 +- .../admin/host}/UpdateHostPasswordCmd.java | 2 +- .../admin/ldap}/LDAPConfigCmd.java | 2 +- .../admin/ldap}/LDAPRemoveCmd.java | 2 +- .../admin/network}/AddNetworkDeviceCmd.java | 4 +- .../AddNetworkServiceProviderCmd.java | 2 +- .../network}/CreateNetworkOfferingCmd.java | 2 +- .../network}/CreatePhysicalNetworkCmd.java | 2 +- .../CreateStorageNetworkIpRangeCmd.java | 2 +- .../network}/DeleteNetworkDeviceCmd.java | 2 +- .../network}/DeleteNetworkOfferingCmd.java | 2 +- .../DeleteNetworkServiceProviderCmd.java | 2 +- .../network}/DeletePhysicalNetworkCmd.java | 2 +- .../DeleteStorageNetworkIpRangeCmd.java | 2 +- .../admin/network}/ListNetworkDeviceCmd.java | 4 +- .../ListNetworkServiceProvidersCmd.java | 2 +- .../network}/ListPhysicalNetworksCmd.java | 2 +- .../ListStorageNetworkIpRangeCmd.java | 2 +- .../ListSupportedNetworkServicesCmd.java | 2 +- .../network}/UpdateNetworkOfferingCmd.java | 2 +- .../UpdateNetworkServiceProviderCmd.java | 2 +- .../network}/UpdatePhysicalNetworkCmd.java | 2 +- .../UpdateStorageNetworkIpRangeCmd.java | 2 +- .../offering}/CreateDiskOfferingCmd.java | 2 +- .../offering}/CreateServiceOfferingCmd.java | 2 +- .../offering}/DeleteDiskOfferingCmd.java | 2 +- .../offering}/DeleteServiceOfferingCmd.java | 2 +- .../offering}/UpdateDiskOfferingCmd.java | 2 +- .../offering}/UpdateServiceOfferingCmd.java | 2 +- .../admin/pod}/CreatePodCmd.java | 2 +- .../admin/pod}/DeletePodCmd.java | 2 +- .../admin/pod}/ListPodsByCmd.java | 2 +- .../admin/pod}/UpdatePodCmd.java | 2 +- .../admin/resource}/ListAlertsCmd.java | 2 +- .../admin/resource}/ListCapacityCmd.java | 2 +- .../resource}/UploadCustomCertificateCmd.java | 2 +- .../ConfigureVirtualRouterElementCmd.java | 2 +- .../CreateVirtualRouterElementCmd.java | 2 +- .../admin/router}/DestroyRouterCmd.java | 2 +- .../admin/router}/ListRoutersCmd.java | 11 +- .../router}/ListVirtualRouterElementsCmd.java | 4 +- .../admin/router}/RebootRouterCmd.java | 2 +- .../admin/router}/StartRouterCmd.java | 2 +- .../admin/router}/StopRouterCmd.java | 2 +- .../admin/router}/UpgradeRouterCmd.java | 2 +- .../CancelPrimaryStorageMaintenanceCmd.java | 2 +- .../storagepool}/CreateStoragePoolCmd.java | 2 +- .../admin/storagepool}/DeletePoolCmd.java | 2 +- .../storagepool}/ListStoragePoolsCmd.java | 2 +- ...reparePrimaryStorageForMaintenanceCmd.java | 2 +- .../storagepool}/UpdateStoragePoolCmd.java | 2 +- .../admin/swift}/AddSwiftCmd.java | 2 +- .../admin/swift}/ListSwiftsCmd.java | 2 +- .../admin/systemvm}/DestroySystemVmCmd.java | 2 +- .../admin/systemvm}/ListSystemVMsCmd.java | 2 +- .../admin/systemvm}/MigrateSystemVMCmd.java | 2 +- .../admin/systemvm}/RebootSystemVmCmd.java | 2 +- .../admin/systemvm}/StartSystemVMCmd.java | 2 +- .../admin/systemvm}/StopSystemVmCmd.java | 2 +- .../admin/systemvm}/UpgradeSystemVMCmd.java | 2 +- .../admin/template}/PrepareTemplateCmd.java | 2 +- .../admin/usage}/AddTrafficTypeCmd.java | 2 +- .../admin/usage}/DeleteTrafficTypeCmd.java | 2 +- .../ListTrafficTypeImplementorsCmd.java | 2 +- .../admin/usage}/ListTrafficTypesCmd.java | 2 +- .../admin/usage}/UpdateTrafficTypeCmd.java | 2 +- .../admin/user}/CreateUserCmd.java | 2 +- .../admin/user}/DeleteUserCmd.java | 2 +- .../admin/user}/DisableUserCmd.java | 2 +- .../admin/user}/EnableUserCmd.java | 2 +- .../admin/user}/GetUserCmd.java | 2 +- .../admin/user}/ListUsersCmd.java | 2 +- .../admin/user}/LockUserCmd.java | 2 +- .../admin/user}/RegisterCmd.java | 2 +- .../admin/user}/UpdateUserCmd.java | 2 +- .../admin/vlan}/CreateVlanIpRangeCmd.java | 2 +- .../admin/vlan}/DeleteVlanIpRangeCmd.java | 2 +- .../admin/vlan}/ListVlanIpRangesCmd.java | 2 +- .../admin/vm}/AssignVMCmd.java | 3 +- .../admin/vm}/MigrateVMCmd.java | 2 +- .../admin/vm}/RecoverVMCmd.java | 3 +- .../admin/vpc}/CreatePrivateGatewayCmd.java | 2 +- .../admin/vpc}/CreateVPCOfferingCmd.java | 2 +- .../admin/vpc}/DeletePrivateGatewayCmd.java | 2 +- .../admin/vpc}/DeleteVPCOfferingCmd.java | 2 +- .../admin/vpc}/UpdateVPCOfferingCmd.java | 2 +- .../admin/zone}/CreateZoneCmd.java | 3 +- .../admin/zone}/DeleteZoneCmd.java | 3 +- .../zone}/MarkDefaultZoneForAccountCmd.java | 3 +- .../admin/zone}/UpdateZoneCmd.java | 3 +- .../user/account}/AddAccountToProjectCmd.java | 2 +- .../account}/DeleteAccountFromProjectCmd.java | 4 +- .../user/account}/ListAccountsCmd.java | 2 +- .../user/account}/ListProjectAccountsCmd.java | 2 +- .../user/address}/AssociateIPAddrCmd.java | 2 +- .../user/address}/DisassociateIPAddrCmd.java | 2 +- .../address}/ListPublicIpAddressesCmd.java | 2 +- .../autoscale}/CreateAutoScalePolicyCmd.java | 2 +- .../autoscale}/CreateAutoScaleVmGroupCmd.java | 2 +- .../CreateAutoScaleVmProfileCmd.java | 2 +- .../user/autoscale}/CreateConditionCmd.java | 2 +- .../autoscale}/DeleteAutoScalePolicyCmd.java | 2 +- .../autoscale}/DeleteAutoScaleVmGroupCmd.java | 2 +- .../DeleteAutoScaleVmProfileCmd.java | 2 +- .../user/autoscale}/DeleteConditionCmd.java | 2 +- .../DisableAutoScaleVmGroupCmd.java | 2 +- .../autoscale}/EnableAutoScaleVmGroupCmd.java | 2 +- .../autoscale}/ListAutoScalePoliciesCmd.java | 2 +- .../autoscale}/ListAutoScaleVmGroupsCmd.java | 2 +- .../ListAutoScaleVmProfilesCmd.java | 2 +- .../user/autoscale}/ListConditionsCmd.java | 2 +- .../user/autoscale}/ListCountersCmd.java | 2 +- .../autoscale}/UpdateAutoScalePolicyCmd.java | 2 +- .../autoscale}/UpdateAutoScaleVmGroupCmd.java | 2 +- .../UpdateAutoScaleVmProfileCmd.java | 2 +- .../user/config}/ListCapabilitiesCmd.java | 2 +- .../user/event}/ListEventTypesCmd.java | 2 +- .../user/event}/ListEventsCmd.java | 6 +- .../user/firewall}/CreateFirewallRuleCmd.java | 2 +- .../CreatePortForwardingRuleCmd.java | 2 +- .../user/firewall}/DeleteFirewallRuleCmd.java | 2 +- .../DeletePortForwardingRuleCmd.java | 2 +- .../user/firewall}/ListFirewallRulesCmd.java | 2 +- .../firewall}/ListPortForwardingRulesCmd.java | 2 +- .../UpdatePortForwardingRuleCmd.java | 2 +- .../user/guest}/ListGuestOsCategoriesCmd.java | 4 +- .../user/guest}/ListGuestOsCmd.java | 4 +- .../user/iso}/AttachIsoCmd.java | 2 +- .../user/iso}/DeleteIsoCmd.java | 2 +- .../user/iso}/DetachIsoCmd.java | 2 +- .../user/iso}/ExtractIsoCmd.java | 2 +- .../user/iso}/ListIsoPermissionsCmd.java | 2 +- .../user/iso}/ListIsosCmd.java | 2 +- .../user/iso}/RegisterIsoCmd.java | 2 +- .../user/iso}/UpdateIsoCmd.java | 2 +- .../user/iso}/UpdateIsoPermissionsCmd.java | 2 +- .../user/job}/ListAsyncJobsCmd.java | 2 +- .../user/job}/QueryAsyncJobResultCmd.java | 2 +- .../AssignToLoadBalancerRuleCmd.java | 2 +- .../CreateLBStickinessPolicyCmd.java | 2 +- .../CreateLoadBalancerRuleCmd.java | 2 +- .../DeleteLBStickinessPolicyCmd.java | 2 +- .../DeleteLoadBalancerRuleCmd.java | 2 +- .../ListLBStickinessPoliciesCmd.java | 2 +- .../ListLoadBalancerRuleInstancesCmd.java | 2 +- .../ListLoadBalancerRulesCmd.java | 2 +- .../RemoveFromLoadBalancerRuleCmd.java | 2 +- .../UpdateLoadBalancerRuleCmd.java | 2 +- .../user/nat}/CreateIpForwardingRuleCmd.java | 2 +- .../user/nat}/DeleteIpForwardingRuleCmd.java | 2 +- .../user/nat}/DisableStaticNatCmd.java | 4 +- .../user/nat}/EnableStaticNatCmd.java | 3 +- .../user/nat}/ListIpForwardingRulesCmd.java | 2 +- .../user/network}/CreateNetworkACLCmd.java | 2 +- .../user/network}/CreateNetworkCmd.java | 2 +- .../user/network}/DeleteNetworkACLCmd.java | 2 +- .../user/network}/DeleteNetworkCmd.java | 4 +- .../user/network}/ListNetworkACLsCmd.java | 2 +- .../network}/ListNetworkOfferingsCmd.java | 2 +- .../user/network}/ListNetworksCmd.java | 2 +- .../user/network}/RestartNetworkCmd.java | 2 +- .../user/network}/UpdateNetworkCmd.java | 2 +- .../user/offering}/ListDiskOfferingsCmd.java | 2 +- .../offering}/ListServiceOfferingsCmd.java | 2 +- .../user/project}/ActivateProjectCmd.java | 2 +- .../user/project}/CreateProjectCmd.java | 2 +- .../user/project}/DeleteProjectCmd.java | 2 +- .../project}/DeleteProjectInvitationCmd.java | 2 +- .../project}/ListProjectInvitationsCmd.java | 2 +- .../user/project}/ListProjectsCmd.java | 2 +- .../user/project}/SuspendProjectCmd.java | 2 +- .../user/project}/UpdateProjectCmd.java | 2 +- .../project}/UpdateProjectInvitationCmd.java | 2 +- .../user/resource}/GetCloudIdentifierCmd.java | 2 +- .../user/resource}/ListHypervisorsCmd.java | 4 +- .../user/resource}/ListResourceLimitsCmd.java | 2 +- .../resource}/UpdateResourceCountCmd.java | 2 +- .../resource}/UpdateResourceLimitCmd.java | 2 +- .../AuthorizeSecurityGroupEgressCmd.java | 2 +- .../AuthorizeSecurityGroupIngressCmd.java | 2 +- .../CreateSecurityGroupCmd.java | 2 +- .../DeleteSecurityGroupCmd.java | 2 +- .../securitygroup}/ListSecurityGroupsCmd.java | 5 +- .../RevokeSecurityGroupEgressCmd.java | 2 +- .../RevokeSecurityGroupIngressCmd.java | 2 +- .../user/snapshot}/CreateSnapshotCmd.java | 2 +- .../snapshot}/CreateSnapshotPolicyCmd.java | 2 +- .../user/snapshot}/DeleteSnapshotCmd.java | 2 +- .../snapshot}/DeleteSnapshotPoliciesCmd.java | 2 +- .../snapshot}/ListSnapshotPoliciesCmd.java | 2 +- .../user/snapshot}/ListSnapshotsCmd.java | 2 +- .../user/ssh}/CreateSSHKeyPairCmd.java | 2 +- .../user/ssh}/DeleteSSHKeyPairCmd.java | 2 +- .../user/ssh}/ListSSHKeyPairsCmd.java | 2 +- .../user/ssh}/RegisterSSHKeyPairCmd.java | 2 +- .../user/tag}/CreateTagsCmd.java | 2 +- .../user/tag}/DeleteTagsCmd.java | 2 +- .../user/tag}/ListTagsCmd.java | 2 +- .../user/template}/CopyTemplateCmd.java | 2 +- .../user/template}/CreateTemplateCmd.java | 2 +- .../user/template}/DeleteTemplateCmd.java | 2 +- .../user/template}/ExtractTemplateCmd.java | 2 +- .../template}/ListTemplatePermissionsCmd.java | 2 +- .../user/template}/ListTemplatesCmd.java | 2 +- .../user/template}/RegisterTemplateCmd.java | 2 +- .../user/template}/UpdateTemplateCmd.java | 2 +- .../UpdateTemplatePermissionsCmd.java | 2 +- .../user/user}/AddVpnUserCmd.java | 2 +- .../user/user}/ListVpnUsersCmd.java | 2 +- .../user/user}/RemoveVpnUserCmd.java | 2 +- .../response/NetworkDeviceResponse.java | 2 +- .../network/ExternalNetworkDeviceManager.java | 8 +- .../commands/test/ActivateProjectCmdTest.java | 2 +- .../test/AddAccountToProjectCmdTest.java | 2 +- .../api/commands/test/AddClusterCmdTest.java | 2 +- .../api/commands/test/AddHostCmdTest.java | 2 +- .../AddNetworkServiceProviderCmdTest.java | 2 +- .../test/AddSecondaryStorageCmdTest.java | 2 +- .../api/commands/test/AddSwiftCmdTest.java | 2 +- .../api/commands/test/AddVpnUserCmdTest.java | 2 +- .../api/commands/test/ListRoutersCmdTest.java | 3 +- client/tomcatconf/commands.properties.in | 478 +++++++++--------- .../virtualrouter_commands.properties.in | 6 +- .../lb/ElasticLoadBalancerManager.java | 2 +- .../lb/ElasticLoadBalancerManagerImpl.java | 2 +- .../commands/ListExternalFirewallsCmd.java | 2 +- server/src/com/cloud/api/ApiDispatcher.java | 2 +- .../src/com/cloud/api/ApiResponseHelper.java | 14 +- server/src/com/cloud/api/ApiServer.java | 8 +- .../api/commands/ListTrafficMonitorsCmd.java | 2 +- .../src/com/cloud/async/AsyncJobManager.java | 2 +- .../com/cloud/async/AsyncJobManagerImpl.java | 2 +- .../baremetal/BareMetalTemplateAdapter.java | 6 +- .../baremetal/BareMetalVmManagerImpl.java | 2 +- .../ConfigurationManagerImpl.java | 38 +- .../ExternalNetworkDeviceManagerImpl.java | 8 +- .../com/cloud/network/NetworkManagerImpl.java | 8 +- .../network/StorageNetworkManagerImpl.java | 8 +- .../network/as/AutoScaleManagerImpl.java | 21 +- .../network/element/VirtualRouterElement.java | 4 +- .../network/firewall/FirewallManagerImpl.java | 2 +- .../network/lb/LoadBalancingRulesManager.java | 2 +- .../lb/LoadBalancingRulesManagerImpl.java | 8 +- .../VirtualNetworkApplianceManagerImpl.java | 2 +- .../cloud/network/rules/RulesManagerImpl.java | 2 +- .../security/SecurityGroupManagerImpl.java | 8 +- .../network/vpc/NetworkACLManagerImpl.java | 2 +- .../vpn/RemoteAccessVpnManagerImpl.java | 2 +- .../cloud/resource/ResourceManagerImpl.java | 19 +- .../cloud/server/ManagementServerImpl.java | 66 +-- .../response/ExternalFirewallResponse.java | 2 +- .../ExternalLoadBalancerResponse.java | 2 +- .../api/response/NwDeviceDhcpResponse.java | 2 +- .../response/NwDevicePxeServerResponse.java | 2 +- .../com/cloud/storage/StorageManagerImpl.java | 8 +- .../storage/snapshot/SnapshotManagerImpl.java | 7 +- .../snapshot/SnapshotSchedulerImpl.java | 2 +- .../com/cloud/storage/swift/SwiftManager.java | 8 +- .../cloud/storage/swift/SwiftManagerImpl.java | 8 +- .../cloud/storage/upload/UploadListener.java | 4 +- .../cloud/tags/TaggedResourceManagerImpl.java | 3 +- .../template/HyervisorTemplateAdapter.java | 8 +- .../com/cloud/template/TemplateAdapter.java | 8 +- .../cloud/template/TemplateAdapterBase.java | 8 +- .../cloud/template/TemplateManagerImpl.java | 8 +- .../com/cloud/user/AccountManagerImpl.java | 12 +- .../src/com/cloud/user/DomainManagerImpl.java | 4 +- .../src/com/cloud/vm/UserVmManagerImpl.java | 12 +- .../cloud/network/MockNetworkManagerImpl.java | 8 +- .../cloud/user/MockAccountManagerImpl.java | 12 +- .../com/cloud/user/MockDomainManagerImpl.java | 4 +- .../com/cloud/vm/MockUserVmManagerImpl.java | 6 +- .../vpc/MockConfigurationManagerImpl.java | 38 +- .../com/cloud/vpc/MockNetworkManagerImpl.java | 8 +- 325 files changed, 816 insertions(+), 883 deletions(-) rename api/src/org/apache/cloudstack/api/{admin/account/command => command/admin/account}/CreateAccountCmd.java (99%) rename api/src/org/apache/cloudstack/api/{admin/account/command => command/admin/account}/DeleteAccountCmd.java (98%) rename api/src/org/apache/cloudstack/api/{admin/account/command => command/admin/account}/DisableAccountCmd.java (98%) rename api/src/org/apache/cloudstack/api/{admin/account/command => command/admin/account}/EnableAccountCmd.java (98%) rename api/src/org/apache/cloudstack/api/{admin/account/command => command/admin/account}/LockAccountCmd.java (98%) rename api/src/org/apache/cloudstack/api/{admin/account/command => command/admin/account}/UpdateAccountCmd.java (98%) rename api/src/org/apache/cloudstack/api/{admin/autoscale/command => command/admin/autoscale}/CreateCounterCmd.java (98%) rename api/src/org/apache/cloudstack/api/{admin/autoscale/command => command/admin/autoscale}/DeleteCounterCmd.java (98%) rename api/src/org/apache/cloudstack/api/{admin/cluster/command => command/admin/cluster}/AddClusterCmd.java (99%) rename api/src/org/apache/cloudstack/api/{admin/cluster/command => command/admin/cluster}/DeleteClusterCmd.java (98%) rename api/src/org/apache/cloudstack/api/{admin/cluster/command => command/admin/cluster}/ListClustersCmd.java (97%) rename api/src/org/apache/cloudstack/api/{admin/cluster/command => command/admin/cluster}/UpdateClusterCmd.java (98%) rename api/src/org/apache/cloudstack/api/{admin/config/command => command/admin/config}/ListCfgsByCmd.java (98%) rename api/src/org/apache/cloudstack/api/{admin/config/command => command/admin/config}/ListHypervisorCapabilitiesCmd.java (98%) rename api/src/org/apache/cloudstack/api/{admin/config/command => command/admin/config}/UpdateCfgCmd.java (98%) rename api/src/org/apache/cloudstack/api/{admin/config/command => command/admin/config}/UpdateHypervisorCapabilitiesCmd.java (98%) rename api/src/org/apache/cloudstack/api/{admin/domain/command => command/admin/domain}/CreateDomainCmd.java (98%) rename api/src/org/apache/cloudstack/api/{admin/domain/command => command/admin/domain}/DeleteDomainCmd.java (98%) rename api/src/org/apache/cloudstack/api/{admin/domain/command => command/admin/domain}/ListDomainChildrenCmd.java (98%) rename api/src/org/apache/cloudstack/api/{admin/domain/command => command/admin/domain}/ListDomainsCmd.java (98%) rename api/src/org/apache/cloudstack/api/{admin/domain/command => command/admin/domain}/UpdateDomainCmd.java (98%) rename api/src/org/apache/cloudstack/api/{admin/host/command => command/admin/host}/AddHostCmd.java (99%) rename api/src/org/apache/cloudstack/api/{admin/host/command => command/admin/host}/AddSecondaryStorageCmd.java (98%) rename api/src/org/apache/cloudstack/api/{admin/host/command => command/admin/host}/CancelMaintenanceCmd.java (98%) rename api/src/org/apache/cloudstack/api/{admin/host/command => command/admin/host}/DeleteHostCmd.java (98%) rename api/src/org/apache/cloudstack/api/{admin/host/command => command/admin/host}/ListHostsCmd.java (99%) rename api/src/org/apache/cloudstack/api/{admin/host/command => command/admin/host}/PrepareForMaintenanceCmd.java (98%) rename api/src/org/apache/cloudstack/api/{admin/host/command => command/admin/host}/ReconnectHostCmd.java (98%) rename api/src/org/apache/cloudstack/api/{admin/host/command => command/admin/host}/UpdateHostCmd.java (98%) rename api/src/org/apache/cloudstack/api/{admin/host/command => command/admin/host}/UpdateHostPasswordCmd.java (98%) rename api/src/org/apache/cloudstack/api/{admin/ldap/command => command/admin/ldap}/LDAPConfigCmd.java (99%) rename api/src/org/apache/cloudstack/api/{admin/ldap/command => command/admin/ldap}/LDAPRemoveCmd.java (97%) rename api/src/org/apache/cloudstack/api/{admin/network/command => command/admin/network}/AddNetworkDeviceCmd.java (96%) rename api/src/org/apache/cloudstack/api/{admin/network/command => command/admin/network}/AddNetworkServiceProviderCmd.java (98%) rename api/src/org/apache/cloudstack/api/{admin/network/command => command/admin/network}/CreateNetworkOfferingCmd.java (99%) rename api/src/org/apache/cloudstack/api/{admin/network/command => command/admin/network}/CreatePhysicalNetworkCmd.java (99%) rename api/src/org/apache/cloudstack/api/{admin/network/command => command/admin/network}/CreateStorageNetworkIpRangeCmd.java (98%) rename api/src/org/apache/cloudstack/api/{admin/network/command => command/admin/network}/DeleteNetworkDeviceCmd.java (98%) rename api/src/org/apache/cloudstack/api/{admin/network/command => command/admin/network}/DeleteNetworkOfferingCmd.java (98%) rename api/src/org/apache/cloudstack/api/{admin/network/command => command/admin/network}/DeleteNetworkServiceProviderCmd.java (98%) rename api/src/org/apache/cloudstack/api/{admin/network/command => command/admin/network}/DeletePhysicalNetworkCmd.java (98%) rename api/src/org/apache/cloudstack/api/{admin/network/command => command/admin/network}/DeleteStorageNetworkIpRangeCmd.java (98%) rename api/src/org/apache/cloudstack/api/{admin/network/command => command/admin/network}/ListNetworkDeviceCmd.java (96%) rename api/src/org/apache/cloudstack/api/{admin/network/command => command/admin/network}/ListNetworkServiceProvidersCmd.java (98%) rename api/src/org/apache/cloudstack/api/{admin/network/command => command/admin/network}/ListPhysicalNetworksCmd.java (98%) rename api/src/org/apache/cloudstack/api/{admin/network/command => command/admin/network}/ListStorageNetworkIpRangeCmd.java (98%) rename api/src/org/apache/cloudstack/api/{admin/network/command => command/admin/network}/ListSupportedNetworkServicesCmd.java (98%) rename api/src/org/apache/cloudstack/api/{admin/network/command => command/admin/network}/UpdateNetworkOfferingCmd.java (98%) rename api/src/org/apache/cloudstack/api/{admin/network/command => command/admin/network}/UpdateNetworkServiceProviderCmd.java (98%) rename api/src/org/apache/cloudstack/api/{admin/network/command => command/admin/network}/UpdatePhysicalNetworkCmd.java (98%) rename api/src/org/apache/cloudstack/api/{admin/network/command => command/admin/network}/UpdateStorageNetworkIpRangeCmd.java (98%) rename api/src/org/apache/cloudstack/api/{admin/offering/command => command/admin/offering}/CreateDiskOfferingCmd.java (98%) rename api/src/org/apache/cloudstack/api/{admin/offering/command => command/admin/offering}/CreateServiceOfferingCmd.java (99%) rename api/src/org/apache/cloudstack/api/{admin/offering/command => command/admin/offering}/DeleteDiskOfferingCmd.java (97%) rename api/src/org/apache/cloudstack/api/{admin/offering/command => command/admin/offering}/DeleteServiceOfferingCmd.java (98%) rename api/src/org/apache/cloudstack/api/{admin/offering/command => command/admin/offering}/UpdateDiskOfferingCmd.java (98%) rename api/src/org/apache/cloudstack/api/{admin/offering/command => command/admin/offering}/UpdateServiceOfferingCmd.java (98%) rename api/src/org/apache/cloudstack/api/{admin/pod/command => command/admin/pod}/CreatePodCmd.java (98%) rename api/src/org/apache/cloudstack/api/{admin/pod/command => command/admin/pod}/DeletePodCmd.java (98%) rename api/src/org/apache/cloudstack/api/{admin/pod/command => command/admin/pod}/ListPodsByCmd.java (98%) rename api/src/org/apache/cloudstack/api/{admin/pod/command => command/admin/pod}/UpdatePodCmd.java (98%) rename api/src/org/apache/cloudstack/api/{admin/resource/command => command/admin/resource}/ListAlertsCmd.java (98%) rename api/src/org/apache/cloudstack/api/{admin/resource/command => command/admin/resource}/ListCapacityCmd.java (99%) rename api/src/org/apache/cloudstack/api/{admin/resource/command => command/admin/resource}/UploadCustomCertificateCmd.java (98%) rename api/src/org/apache/cloudstack/api/{admin/router/command => command/admin/router}/ConfigureVirtualRouterElementCmd.java (98%) rename api/src/org/apache/cloudstack/api/{admin/router/command => command/admin/router}/CreateVirtualRouterElementCmd.java (98%) rename api/src/org/apache/cloudstack/api/{admin/router/command => command/admin/router}/DestroyRouterCmd.java (98%) rename api/src/org/apache/cloudstack/api/{admin/router/command => command/admin/router}/ListRoutersCmd.java (91%) rename api/src/org/apache/cloudstack/api/{admin/router/command => command/admin/router}/ListVirtualRouterElementsCmd.java (97%) rename api/src/org/apache/cloudstack/api/{admin/router/command => command/admin/router}/RebootRouterCmd.java (98%) rename api/src/org/apache/cloudstack/api/{admin/router/command => command/admin/router}/StartRouterCmd.java (98%) rename api/src/org/apache/cloudstack/api/{admin/router/command => command/admin/router}/StopRouterCmd.java (98%) rename api/src/org/apache/cloudstack/api/{admin/router/command => command/admin/router}/UpgradeRouterCmd.java (98%) rename api/src/org/apache/cloudstack/api/{admin/storagepool/command => command/admin/storagepool}/CancelPrimaryStorageMaintenanceCmd.java (98%) rename api/src/org/apache/cloudstack/api/{admin/storagepool/command => command/admin/storagepool}/CreateStoragePoolCmd.java (98%) rename api/src/org/apache/cloudstack/api/{admin/storagepool/command => command/admin/storagepool}/DeletePoolCmd.java (98%) rename api/src/org/apache/cloudstack/api/{admin/storagepool/command => command/admin/storagepool}/ListStoragePoolsCmd.java (98%) rename api/src/org/apache/cloudstack/api/{admin/storagepool/command => command/admin/storagepool}/PreparePrimaryStorageForMaintenanceCmd.java (98%) rename api/src/org/apache/cloudstack/api/{admin/storagepool/command => command/admin/storagepool}/UpdateStoragePoolCmd.java (98%) rename api/src/org/apache/cloudstack/api/{admin/swift/command => command/admin/swift}/AddSwiftCmd.java (98%) rename api/src/org/apache/cloudstack/api/{admin/swift/command => command/admin/swift}/ListSwiftsCmd.java (98%) rename api/src/org/apache/cloudstack/api/{admin/systemvm/command => command/admin/systemvm}/DestroySystemVmCmd.java (98%) rename api/src/org/apache/cloudstack/api/{admin/systemvm/command => command/admin/systemvm}/ListSystemVMsCmd.java (98%) rename api/src/org/apache/cloudstack/api/{admin/systemvm/command => command/admin/systemvm}/MigrateSystemVMCmd.java (98%) rename api/src/org/apache/cloudstack/api/{admin/systemvm/command => command/admin/systemvm}/RebootSystemVmCmd.java (98%) rename api/src/org/apache/cloudstack/api/{admin/systemvm/command => command/admin/systemvm}/StartSystemVMCmd.java (98%) rename api/src/org/apache/cloudstack/api/{admin/systemvm/command => command/admin/systemvm}/StopSystemVmCmd.java (98%) rename api/src/org/apache/cloudstack/api/{admin/systemvm/command => command/admin/systemvm}/UpgradeSystemVMCmd.java (98%) rename api/src/org/apache/cloudstack/api/{admin/template/command => command/admin/template}/PrepareTemplateCmd.java (98%) rename api/src/org/apache/cloudstack/api/{admin/usage/command => command/admin/usage}/AddTrafficTypeCmd.java (99%) rename api/src/org/apache/cloudstack/api/{admin/usage/command => command/admin/usage}/DeleteTrafficTypeCmd.java (98%) rename api/src/org/apache/cloudstack/api/{admin/usage/command => command/admin/usage}/ListTrafficTypeImplementorsCmd.java (98%) rename api/src/org/apache/cloudstack/api/{admin/usage/command => command/admin/usage}/ListTrafficTypesCmd.java (98%) rename api/src/org/apache/cloudstack/api/{admin/usage/command => command/admin/usage}/UpdateTrafficTypeCmd.java (98%) rename api/src/org/apache/cloudstack/api/{admin/user/command => command/admin/user}/CreateUserCmd.java (99%) rename api/src/org/apache/cloudstack/api/{admin/user/command => command/admin/user}/DeleteUserCmd.java (98%) rename api/src/org/apache/cloudstack/api/{admin/user/command => command/admin/user}/DisableUserCmd.java (98%) rename api/src/org/apache/cloudstack/api/{admin/user/command => command/admin/user}/EnableUserCmd.java (98%) rename api/src/org/apache/cloudstack/api/{admin/user/command => command/admin/user}/GetUserCmd.java (98%) rename api/src/org/apache/cloudstack/api/{admin/user/command => command/admin/user}/ListUsersCmd.java (98%) rename api/src/org/apache/cloudstack/api/{admin/user/command => command/admin/user}/LockUserCmd.java (98%) rename api/src/org/apache/cloudstack/api/{admin/user/command => command/admin/user}/RegisterCmd.java (98%) rename api/src/org/apache/cloudstack/api/{admin/user/command => command/admin/user}/UpdateUserCmd.java (98%) rename api/src/org/apache/cloudstack/api/{admin/vlan/command => command/admin/vlan}/CreateVlanIpRangeCmd.java (99%) rename api/src/org/apache/cloudstack/api/{admin/vlan/command => command/admin/vlan}/DeleteVlanIpRangeCmd.java (98%) rename api/src/org/apache/cloudstack/api/{admin/vlan/command => command/admin/vlan}/ListVlanIpRangesCmd.java (99%) rename api/src/org/apache/cloudstack/api/{admin/vm/command => command/admin/vm}/AssignVMCmd.java (98%) rename api/src/org/apache/cloudstack/api/{admin/vm/command => command/admin/vm}/MigrateVMCmd.java (99%) rename api/src/org/apache/cloudstack/api/{admin/vm/command => command/admin/vm}/RecoverVMCmd.java (97%) rename api/src/org/apache/cloudstack/api/{admin/vpc/command => command/admin/vpc}/CreatePrivateGatewayCmd.java (99%) rename api/src/org/apache/cloudstack/api/{admin/vpc/command => command/admin/vpc}/CreateVPCOfferingCmd.java (98%) rename api/src/org/apache/cloudstack/api/{admin/vpc/command => command/admin/vpc}/DeletePrivateGatewayCmd.java (98%) rename api/src/org/apache/cloudstack/api/{admin/vpc/command => command/admin/vpc}/DeleteVPCOfferingCmd.java (98%) rename api/src/org/apache/cloudstack/api/{admin/vpc/command => command/admin/vpc}/UpdateVPCOfferingCmd.java (98%) rename api/src/org/apache/cloudstack/api/{admin/zone/command => command/admin/zone}/CreateZoneCmd.java (98%) rename api/src/org/apache/cloudstack/api/{admin/zone/command => command/admin/zone}/DeleteZoneCmd.java (96%) rename api/src/org/apache/cloudstack/api/{admin/zone/command => command/admin/zone}/MarkDefaultZoneForAccountCmd.java (97%) rename api/src/org/apache/cloudstack/api/{admin/zone/command => command/admin/zone}/UpdateZoneCmd.java (98%) rename api/src/org/apache/cloudstack/api/{user/account/command => command/user/account}/AddAccountToProjectCmd.java (98%) rename api/src/org/apache/cloudstack/api/{user/account/command => command/user/account}/DeleteAccountFromProjectCmd.java (97%) rename api/src/org/apache/cloudstack/api/{user/account/command => command/user/account}/ListAccountsCmd.java (98%) rename api/src/org/apache/cloudstack/api/{user/account/command => command/user/account}/ListProjectAccountsCmd.java (98%) rename api/src/org/apache/cloudstack/api/{user/address/command => command/user/address}/AssociateIPAddrCmd.java (99%) rename api/src/org/apache/cloudstack/api/{user/address/command => command/user/address}/DisassociateIPAddrCmd.java (98%) rename api/src/org/apache/cloudstack/api/{user/address/command => command/user/address}/ListPublicIpAddressesCmd.java (99%) rename api/src/org/apache/cloudstack/api/{user/autoscale/command => command/user/autoscale}/CreateAutoScalePolicyCmd.java (99%) rename api/src/org/apache/cloudstack/api/{user/autoscale/command => command/user/autoscale}/CreateAutoScaleVmGroupCmd.java (99%) rename api/src/org/apache/cloudstack/api/{user/autoscale/command => command/user/autoscale}/CreateAutoScaleVmProfileCmd.java (99%) rename api/src/org/apache/cloudstack/api/{user/autoscale/command => command/user/autoscale}/CreateConditionCmd.java (98%) rename api/src/org/apache/cloudstack/api/{user/autoscale/command => command/user/autoscale}/DeleteAutoScalePolicyCmd.java (98%) rename api/src/org/apache/cloudstack/api/{user/autoscale/command => command/user/autoscale}/DeleteAutoScaleVmGroupCmd.java (98%) rename api/src/org/apache/cloudstack/api/{user/autoscale/command => command/user/autoscale}/DeleteAutoScaleVmProfileCmd.java (98%) rename api/src/org/apache/cloudstack/api/{user/autoscale/command => command/user/autoscale}/DeleteConditionCmd.java (98%) rename api/src/org/apache/cloudstack/api/{user/autoscale/command => command/user/autoscale}/DisableAutoScaleVmGroupCmd.java (98%) rename api/src/org/apache/cloudstack/api/{user/autoscale/command => command/user/autoscale}/EnableAutoScaleVmGroupCmd.java (98%) rename api/src/org/apache/cloudstack/api/{user/autoscale/command => command/user/autoscale}/ListAutoScalePoliciesCmd.java (98%) rename api/src/org/apache/cloudstack/api/{user/autoscale/command => command/user/autoscale}/ListAutoScaleVmGroupsCmd.java (98%) rename api/src/org/apache/cloudstack/api/{user/autoscale/command => command/user/autoscale}/ListAutoScaleVmProfilesCmd.java (98%) rename api/src/org/apache/cloudstack/api/{user/autoscale/command => command/user/autoscale}/ListConditionsCmd.java (98%) rename api/src/org/apache/cloudstack/api/{user/autoscale/command => command/user/autoscale}/ListCountersCmd.java (98%) rename api/src/org/apache/cloudstack/api/{user/autoscale/command => command/user/autoscale}/UpdateAutoScalePolicyCmd.java (98%) rename api/src/org/apache/cloudstack/api/{user/autoscale/command => command/user/autoscale}/UpdateAutoScaleVmGroupCmd.java (98%) rename api/src/org/apache/cloudstack/api/{user/autoscale/command => command/user/autoscale}/UpdateAutoScaleVmProfileCmd.java (98%) rename api/src/org/apache/cloudstack/api/{user/config/command => command/user/config}/ListCapabilitiesCmd.java (97%) rename api/src/org/apache/cloudstack/api/{user/event/command => command/user/event}/ListEventTypesCmd.java (97%) rename api/src/org/apache/cloudstack/api/{user/event/command => command/user/event}/ListEventsCmd.java (95%) rename api/src/org/apache/cloudstack/api/{user/firewall/command => command/user/firewall}/CreateFirewallRuleCmd.java (99%) rename api/src/org/apache/cloudstack/api/{user/firewall/command => command/user/firewall}/CreatePortForwardingRuleCmd.java (99%) rename api/src/org/apache/cloudstack/api/{user/firewall/command => command/user/firewall}/DeleteFirewallRuleCmd.java (98%) rename api/src/org/apache/cloudstack/api/{user/firewall/command => command/user/firewall}/DeletePortForwardingRuleCmd.java (98%) rename api/src/org/apache/cloudstack/api/{user/firewall/command => command/user/firewall}/ListFirewallRulesCmd.java (98%) rename api/src/org/apache/cloudstack/api/{user/firewall/command => command/user/firewall}/ListPortForwardingRulesCmd.java (98%) rename api/src/org/apache/cloudstack/api/{user/firewall/command => command/user/firewall}/UpdatePortForwardingRuleCmd.java (98%) rename api/src/org/apache/cloudstack/api/{user/guest/command => command/user/guest}/ListGuestOsCategoriesCmd.java (96%) rename api/src/org/apache/cloudstack/api/{user/guest/command => command/user/guest}/ListGuestOsCmd.java (97%) rename api/src/org/apache/cloudstack/api/{user/iso/command => command/user/iso}/AttachIsoCmd.java (98%) rename api/src/org/apache/cloudstack/api/{user/iso/command => command/user/iso}/DeleteIsoCmd.java (98%) rename api/src/org/apache/cloudstack/api/{user/iso/command => command/user/iso}/DetachIsoCmd.java (98%) rename api/src/org/apache/cloudstack/api/{user/iso/command => command/user/iso}/ExtractIsoCmd.java (98%) rename api/src/org/apache/cloudstack/api/{user/iso/command => command/user/iso}/ListIsoPermissionsCmd.java (96%) rename api/src/org/apache/cloudstack/api/{user/iso/command => command/user/iso}/ListIsosCmd.java (99%) rename api/src/org/apache/cloudstack/api/{user/iso/command => command/user/iso}/RegisterIsoCmd.java (99%) rename api/src/org/apache/cloudstack/api/{user/iso/command => command/user/iso}/UpdateIsoCmd.java (98%) rename api/src/org/apache/cloudstack/api/{user/iso/command => command/user/iso}/UpdateIsoPermissionsCmd.java (97%) rename api/src/org/apache/cloudstack/api/{user/job/command => command/user/job}/ListAsyncJobsCmd.java (98%) rename api/src/org/apache/cloudstack/api/{user/job/command => command/user/job}/QueryAsyncJobResultCmd.java (98%) rename api/src/org/apache/cloudstack/api/{user/lb/command => command/user/loadbalancer}/AssignToLoadBalancerRuleCmd.java (98%) rename api/src/org/apache/cloudstack/api/{user/lb/command => command/user/loadbalancer}/CreateLBStickinessPolicyCmd.java (99%) rename api/src/org/apache/cloudstack/api/{user/lb/command => command/user/loadbalancer}/CreateLoadBalancerRuleCmd.java (99%) rename api/src/org/apache/cloudstack/api/{user/lb/command => command/user/loadbalancer}/DeleteLBStickinessPolicyCmd.java (98%) rename api/src/org/apache/cloudstack/api/{user/lb/command => command/user/loadbalancer}/DeleteLoadBalancerRuleCmd.java (98%) rename api/src/org/apache/cloudstack/api/{user/lb/command => command/user/loadbalancer}/ListLBStickinessPoliciesCmd.java (98%) rename api/src/org/apache/cloudstack/api/{user/lb/command => command/user/loadbalancer}/ListLoadBalancerRuleInstancesCmd.java (98%) rename api/src/org/apache/cloudstack/api/{user/lb/command => command/user/loadbalancer}/ListLoadBalancerRulesCmd.java (98%) rename api/src/org/apache/cloudstack/api/{user/lb/command => command/user/loadbalancer}/RemoveFromLoadBalancerRuleCmd.java (98%) rename api/src/org/apache/cloudstack/api/{user/lb/command => command/user/loadbalancer}/UpdateLoadBalancerRuleCmd.java (98%) rename api/src/org/apache/cloudstack/api/{user/nat/command => command/user/nat}/CreateIpForwardingRuleCmd.java (99%) rename api/src/org/apache/cloudstack/api/{user/nat/command => command/user/nat}/DeleteIpForwardingRuleCmd.java (98%) rename api/src/org/apache/cloudstack/api/{user/nat/command => command/user/nat}/DisableStaticNatCmd.java (97%) rename api/src/org/apache/cloudstack/api/{user/nat/command => command/user/nat}/EnableStaticNatCmd.java (97%) rename api/src/org/apache/cloudstack/api/{user/nat/command => command/user/nat}/ListIpForwardingRulesCmd.java (98%) rename api/src/org/apache/cloudstack/api/{user/network/command => command/user/network}/CreateNetworkACLCmd.java (99%) rename api/src/org/apache/cloudstack/api/{user/network/command => command/user/network}/CreateNetworkCmd.java (99%) rename api/src/org/apache/cloudstack/api/{user/network/command => command/user/network}/DeleteNetworkACLCmd.java (98%) rename api/src/org/apache/cloudstack/api/{user/network/command => command/user/network}/DeleteNetworkCmd.java (96%) rename api/src/org/apache/cloudstack/api/{user/network/command => command/user/network}/ListNetworkACLsCmd.java (98%) rename api/src/org/apache/cloudstack/api/{user/network/command => command/user/network}/ListNetworkOfferingsCmd.java (99%) rename api/src/org/apache/cloudstack/api/{user/network/command => command/user/network}/ListNetworksCmd.java (99%) rename api/src/org/apache/cloudstack/api/{user/network/command => command/user/network}/RestartNetworkCmd.java (98%) rename api/src/org/apache/cloudstack/api/{user/network/command => command/user/network}/UpdateNetworkCmd.java (99%) rename api/src/org/apache/cloudstack/api/{user/offering/command => command/user/offering}/ListDiskOfferingsCmd.java (98%) rename api/src/org/apache/cloudstack/api/{user/offering/command => command/user/offering}/ListServiceOfferingsCmd.java (98%) rename api/src/org/apache/cloudstack/api/{user/project/command => command/user/project}/ActivateProjectCmd.java (98%) rename api/src/org/apache/cloudstack/api/{user/project/command => command/user/project}/CreateProjectCmd.java (98%) rename api/src/org/apache/cloudstack/api/{user/project/command => command/user/project}/DeleteProjectCmd.java (98%) rename api/src/org/apache/cloudstack/api/{user/project/command => command/user/project}/DeleteProjectInvitationCmd.java (98%) rename api/src/org/apache/cloudstack/api/{user/project/command => command/user/project}/ListProjectInvitationsCmd.java (98%) rename api/src/org/apache/cloudstack/api/{user/project/command => command/user/project}/ListProjectsCmd.java (98%) rename api/src/org/apache/cloudstack/api/{user/project/command => command/user/project}/SuspendProjectCmd.java (98%) rename api/src/org/apache/cloudstack/api/{user/project/command => command/user/project}/UpdateProjectCmd.java (98%) rename api/src/org/apache/cloudstack/api/{user/project/command => command/user/project}/UpdateProjectInvitationCmd.java (98%) rename api/src/org/apache/cloudstack/api/{user/resource/command => command/user/resource}/GetCloudIdentifierCmd.java (98%) rename api/src/org/apache/cloudstack/api/{user/resource/command => command/user/resource}/ListHypervisorsCmd.java (96%) rename api/src/org/apache/cloudstack/api/{user/resource/command => command/user/resource}/ListResourceLimitsCmd.java (98%) rename api/src/org/apache/cloudstack/api/{user/resource/command => command/user/resource}/UpdateResourceCountCmd.java (99%) rename api/src/org/apache/cloudstack/api/{user/resource/command => command/user/resource}/UpdateResourceLimitCmd.java (98%) rename api/src/org/apache/cloudstack/api/{user/securitygroup/command => command/user/securitygroup}/AuthorizeSecurityGroupEgressCmd.java (99%) rename api/src/org/apache/cloudstack/api/{user/securitygroup/command => command/user/securitygroup}/AuthorizeSecurityGroupIngressCmd.java (99%) rename api/src/org/apache/cloudstack/api/{user/securitygroup/command => command/user/securitygroup}/CreateSecurityGroupCmd.java (98%) rename api/src/org/apache/cloudstack/api/{user/securitygroup/command => command/user/securitygroup}/DeleteSecurityGroupCmd.java (98%) rename api/src/org/apache/cloudstack/api/{user/securitygroup/command => command/user/securitygroup}/ListSecurityGroupsCmd.java (94%) rename api/src/org/apache/cloudstack/api/{user/securitygroup/command => command/user/securitygroup}/RevokeSecurityGroupEgressCmd.java (98%) rename api/src/org/apache/cloudstack/api/{user/securitygroup/command => command/user/securitygroup}/RevokeSecurityGroupIngressCmd.java (98%) rename api/src/org/apache/cloudstack/api/{user/snapshot/command => command/user/snapshot}/CreateSnapshotCmd.java (99%) rename api/src/org/apache/cloudstack/api/{user/snapshot/command => command/user/snapshot}/CreateSnapshotPolicyCmd.java (99%) rename api/src/org/apache/cloudstack/api/{user/snapshot/command => command/user/snapshot}/DeleteSnapshotCmd.java (98%) rename api/src/org/apache/cloudstack/api/{user/snapshot/command => command/user/snapshot}/DeleteSnapshotPoliciesCmd.java (98%) rename api/src/org/apache/cloudstack/api/{user/snapshot/command => command/user/snapshot}/ListSnapshotPoliciesCmd.java (98%) rename api/src/org/apache/cloudstack/api/{user/snapshot/command => command/user/snapshot}/ListSnapshotsCmd.java (98%) rename api/src/org/apache/cloudstack/api/{user/ssh/command => command/user/ssh}/CreateSSHKeyPairCmd.java (98%) rename api/src/org/apache/cloudstack/api/{user/ssh/command => command/user/ssh}/DeleteSSHKeyPairCmd.java (98%) rename api/src/org/apache/cloudstack/api/{user/ssh/command => command/user/ssh}/ListSSHKeyPairsCmd.java (98%) rename api/src/org/apache/cloudstack/api/{user/ssh/command => command/user/ssh}/RegisterSSHKeyPairCmd.java (98%) rename api/src/org/apache/cloudstack/api/{user/tag/command => command/user/tag}/CreateTagsCmd.java (98%) rename api/src/org/apache/cloudstack/api/{user/tag/command => command/user/tag}/DeleteTagsCmd.java (98%) rename api/src/org/apache/cloudstack/api/{user/tag/command => command/user/tag}/ListTagsCmd.java (98%) rename api/src/org/apache/cloudstack/api/{user/template/command => command/user/template}/CopyTemplateCmd.java (98%) rename api/src/org/apache/cloudstack/api/{user/template/command => command/user/template}/CreateTemplateCmd.java (99%) rename api/src/org/apache/cloudstack/api/{user/template/command => command/user/template}/DeleteTemplateCmd.java (98%) rename api/src/org/apache/cloudstack/api/{user/template/command => command/user/template}/ExtractTemplateCmd.java (98%) rename api/src/org/apache/cloudstack/api/{user/template/command => command/user/template}/ListTemplatePermissionsCmd.java (96%) rename api/src/org/apache/cloudstack/api/{user/template/command => command/user/template}/ListTemplatesCmd.java (99%) rename api/src/org/apache/cloudstack/api/{user/template/command => command/user/template}/RegisterTemplateCmd.java (99%) rename api/src/org/apache/cloudstack/api/{user/template/command => command/user/template}/UpdateTemplateCmd.java (98%) rename api/src/org/apache/cloudstack/api/{user/template/command => command/user/template}/UpdateTemplatePermissionsCmd.java (97%) rename api/src/org/apache/cloudstack/api/{user/user/command => command/user/user}/AddVpnUserCmd.java (99%) rename api/src/org/apache/cloudstack/api/{user/user/command => command/user/user}/ListVpnUsersCmd.java (98%) rename api/src/org/apache/cloudstack/api/{user/user/command => command/user/user}/RemoveVpnUserCmd.java (98%) rename api/src/org/apache/cloudstack/api/{admin/network => }/response/NetworkDeviceResponse.java (95%) diff --git a/api/src/com/cloud/api/commands/UpdateTemplateOrIsoCmd.java b/api/src/com/cloud/api/commands/UpdateTemplateOrIsoCmd.java index 01123e9a4f0..407b4c90058 100755 --- a/api/src/com/cloud/api/commands/UpdateTemplateOrIsoCmd.java +++ b/api/src/com/cloud/api/commands/UpdateTemplateOrIsoCmd.java @@ -16,7 +16,7 @@ // under the License. package com.cloud.api.commands; -import org.apache.cloudstack.api.user.iso.command.UpdateIsoCmd; +import org.apache.cloudstack.api.command.user.iso.UpdateIsoCmd; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; diff --git a/api/src/com/cloud/configuration/ConfigurationService.java b/api/src/com/cloud/configuration/ConfigurationService.java index 56f036e8911..48a060719c6 100644 --- a/api/src/com/cloud/configuration/ConfigurationService.java +++ b/api/src/com/cloud/configuration/ConfigurationService.java @@ -20,25 +20,24 @@ import java.util.List; import javax.naming.NamingException; -import org.apache.cloudstack.api.admin.ldap.command.LDAPRemoveCmd; -import org.apache.cloudstack.api.admin.offering.command.*; -import org.apache.cloudstack.api.admin.network.command.CreateNetworkOfferingCmd; -import org.apache.cloudstack.api.admin.offering.command.CreateServiceOfferingCmd; -import org.apache.cloudstack.api.admin.vlan.command.CreateVlanIpRangeCmd; -import org.apache.cloudstack.api.admin.offering.command.CreateDiskOfferingCmd; -import org.apache.cloudstack.api.admin.pod.command.DeletePodCmd; -import org.apache.cloudstack.api.admin.vlan.command.DeleteVlanIpRangeCmd; -import org.apache.cloudstack.api.admin.zone.command.CreateZoneCmd; -import org.apache.cloudstack.api.admin.offering.command.DeleteDiskOfferingCmd; -import org.apache.cloudstack.api.admin.network.command.DeleteNetworkOfferingCmd; -import org.apache.cloudstack.api.admin.zone.command.DeleteZoneCmd; -import org.apache.cloudstack.api.admin.ldap.command.LDAPConfigCmd; -import org.apache.cloudstack.api.user.network.command.ListNetworkOfferingsCmd; -import org.apache.cloudstack.api.admin.config.command.UpdateCfgCmd; -import org.apache.cloudstack.api.admin.offering.command.UpdateDiskOfferingCmd; -import org.apache.cloudstack.api.admin.network.command.UpdateNetworkOfferingCmd; -import org.apache.cloudstack.api.admin.pod.command.UpdatePodCmd; -import org.apache.cloudstack.api.admin.zone.command.UpdateZoneCmd; +import org.apache.cloudstack.api.command.admin.ldap.LDAPRemoveCmd; +import org.apache.cloudstack.api.command.admin.network.CreateNetworkOfferingCmd; +import org.apache.cloudstack.api.command.admin.offering.CreateServiceOfferingCmd; +import org.apache.cloudstack.api.command.admin.vlan.CreateVlanIpRangeCmd; +import org.apache.cloudstack.api.command.admin.offering.*; +import org.apache.cloudstack.api.command.admin.pod.DeletePodCmd; +import org.apache.cloudstack.api.command.admin.vlan.DeleteVlanIpRangeCmd; +import org.apache.cloudstack.api.command.admin.zone.CreateZoneCmd; +import org.apache.cloudstack.api.command.admin.offering.DeleteDiskOfferingCmd; +import org.apache.cloudstack.api.command.admin.network.DeleteNetworkOfferingCmd; +import org.apache.cloudstack.api.command.admin.zone.DeleteZoneCmd; +import org.apache.cloudstack.api.command.admin.ldap.LDAPConfigCmd; +import org.apache.cloudstack.api.command.admin.config.UpdateCfgCmd; +import org.apache.cloudstack.api.command.admin.network.UpdateNetworkOfferingCmd; +import org.apache.cloudstack.api.command.admin.pod.UpdatePodCmd; +import org.apache.cloudstack.api.command.user.network.ListNetworkOfferingsCmd; +import org.apache.cloudstack.api.command.admin.offering.UpdateDiskOfferingCmd; +import org.apache.cloudstack.api.command.admin.zone.UpdateZoneCmd; import com.cloud.dc.DataCenter; import com.cloud.dc.Pod; import com.cloud.dc.Vlan; diff --git a/api/src/com/cloud/network/NetworkService.java b/api/src/com/cloud/network/NetworkService.java index b5ba1e3e84d..140563ec99f 100755 --- a/api/src/com/cloud/network/NetworkService.java +++ b/api/src/com/cloud/network/NetworkService.java @@ -20,10 +20,10 @@ import java.util.List; import java.util.Map; import java.util.Set; -import org.apache.cloudstack.api.admin.usage.command.ListTrafficTypeImplementorsCmd; -import org.apache.cloudstack.api.user.network.command.CreateNetworkCmd; -import org.apache.cloudstack.api.user.network.command.ListNetworksCmd; -import org.apache.cloudstack.api.user.network.command.RestartNetworkCmd; +import org.apache.cloudstack.api.command.admin.usage.ListTrafficTypeImplementorsCmd; +import org.apache.cloudstack.api.command.user.network.RestartNetworkCmd; +import org.apache.cloudstack.api.command.user.network.CreateNetworkCmd; +import org.apache.cloudstack.api.command.user.network.ListNetworksCmd; import com.cloud.exception.ConcurrentOperationException; import com.cloud.exception.InsufficientAddressCapacityException; import com.cloud.exception.InsufficientCapacityException; diff --git a/api/src/com/cloud/network/StorageNetworkService.java b/api/src/com/cloud/network/StorageNetworkService.java index 7a7c5cad91d..1bda247179c 100755 --- a/api/src/com/cloud/network/StorageNetworkService.java +++ b/api/src/com/cloud/network/StorageNetworkService.java @@ -19,11 +19,11 @@ package com.cloud.network; import java.sql.SQLException; import java.util.List; -import org.apache.cloudstack.api.admin.network.command.CreateStorageNetworkIpRangeCmd; -import org.apache.cloudstack.api.admin.network.command.DeleteStorageNetworkIpRangeCmd; -import org.apache.cloudstack.api.admin.network.command.UpdateStorageNetworkIpRangeCmd; -import org.apache.cloudstack.api.admin.network.command.ListStorageNetworkIpRangeCmd; +import org.apache.cloudstack.api.command.admin.network.*; +import org.apache.cloudstack.api.command.admin.network.UpdateStorageNetworkIpRangeCmd; +import org.apache.cloudstack.api.command.admin.network.DeleteStorageNetworkIpRangeCmd; import com.cloud.dc.StorageNetworkIpRange; +import org.apache.cloudstack.api.command.admin.network.CreateStorageNetworkIpRangeCmd; public interface StorageNetworkService { StorageNetworkIpRange createIpRange(CreateStorageNetworkIpRangeCmd cmd) throws SQLException; diff --git a/api/src/com/cloud/network/VirtualNetworkApplianceService.java b/api/src/com/cloud/network/VirtualNetworkApplianceService.java index 088fcc2e327..7b553b29a7f 100644 --- a/api/src/com/cloud/network/VirtualNetworkApplianceService.java +++ b/api/src/com/cloud/network/VirtualNetworkApplianceService.java @@ -16,7 +16,7 @@ // under the License. package com.cloud.network; -import org.apache.cloudstack.api.admin.router.command.UpgradeRouterCmd; +import org.apache.cloudstack.api.command.admin.router.UpgradeRouterCmd; import com.cloud.exception.ConcurrentOperationException; import com.cloud.exception.InsufficientCapacityException; import com.cloud.exception.ResourceUnavailableException; diff --git a/api/src/com/cloud/network/as/AutoScaleService.java b/api/src/com/cloud/network/as/AutoScaleService.java index a6b2f487768..daa8d191366 100644 --- a/api/src/com/cloud/network/as/AutoScaleService.java +++ b/api/src/com/cloud/network/as/AutoScaleService.java @@ -18,15 +18,12 @@ package com.cloud.network.as; import java.util.List; -import org.apache.cloudstack.api.admin.autoscale.command.CreateCounterCmd; -import org.apache.cloudstack.api.user.autoscale.command.CreateAutoScalePolicyCmd; -import org.apache.cloudstack.api.user.autoscale.command.CreateAutoScaleVmGroupCmd; -import org.apache.cloudstack.api.user.autoscale.command.CreateAutoScaleVmProfileCmd; -import org.apache.cloudstack.api.user.autoscale.command.*; -import org.apache.cloudstack.api.user.autoscale.command.ListAutoScalePoliciesCmd; -import org.apache.cloudstack.api.user.autoscale.command.ListConditionsCmd; -import org.apache.cloudstack.api.user.autoscale.command.UpdateAutoScaleVmGroupCmd; -import org.apache.cloudstack.api.user.autoscale.command.UpdateAutoScaleVmProfileCmd; +import org.apache.cloudstack.api.command.admin.autoscale.CreateCounterCmd; +import org.apache.cloudstack.api.command.user.autoscale.*; +import org.apache.cloudstack.api.command.user.autoscale.CreateAutoScalePolicyCmd; +import org.apache.cloudstack.api.command.user.autoscale.CreateAutoScaleVmProfileCmd; +import org.apache.cloudstack.api.command.user.autoscale.ListAutoScalePoliciesCmd; +import org.apache.cloudstack.api.command.user.autoscale.UpdateAutoScaleVmGroupCmd; import com.cloud.exception.ResourceInUseException; import com.cloud.exception.ResourceUnavailableException; diff --git a/api/src/com/cloud/network/element/VirtualRouterElementService.java b/api/src/com/cloud/network/element/VirtualRouterElementService.java index 05707e8fe88..3ba2045cfd6 100644 --- a/api/src/com/cloud/network/element/VirtualRouterElementService.java +++ b/api/src/com/cloud/network/element/VirtualRouterElementService.java @@ -18,8 +18,8 @@ package com.cloud.network.element; import java.util.List; -import org.apache.cloudstack.api.admin.router.command.ConfigureVirtualRouterElementCmd; -import org.apache.cloudstack.api.admin.router.command.ListVirtualRouterElementsCmd; +import org.apache.cloudstack.api.command.admin.router.ConfigureVirtualRouterElementCmd; +import org.apache.cloudstack.api.command.admin.router.ListVirtualRouterElementsCmd; import com.cloud.network.VirtualRouterProvider; import com.cloud.network.VirtualRouterProvider.VirtualRouterProviderType; import com.cloud.utils.component.PluggableService; diff --git a/api/src/com/cloud/network/firewall/FirewallService.java b/api/src/com/cloud/network/firewall/FirewallService.java index 066d5fb6004..3858499b2bb 100644 --- a/api/src/com/cloud/network/firewall/FirewallService.java +++ b/api/src/com/cloud/network/firewall/FirewallService.java @@ -19,7 +19,7 @@ package com.cloud.network.firewall; import java.util.List; -import org.apache.cloudstack.api.user.firewall.command.ListFirewallRulesCmd; +import org.apache.cloudstack.api.command.user.firewall.ListFirewallRulesCmd; import com.cloud.exception.NetworkRuleConflictException; import com.cloud.exception.ResourceUnavailableException; import com.cloud.network.rules.FirewallRule; diff --git a/api/src/com/cloud/network/firewall/NetworkACLService.java b/api/src/com/cloud/network/firewall/NetworkACLService.java index 4c0f06c567c..a1fb02cb71f 100644 --- a/api/src/com/cloud/network/firewall/NetworkACLService.java +++ b/api/src/com/cloud/network/firewall/NetworkACLService.java @@ -19,7 +19,7 @@ package com.cloud.network.firewall; import java.util.List; -import org.apache.cloudstack.api.user.network.command.ListNetworkACLsCmd; +import org.apache.cloudstack.api.command.user.network.ListNetworkACLsCmd; import com.cloud.exception.NetworkRuleConflictException; import com.cloud.exception.ResourceUnavailableException; import com.cloud.network.rules.FirewallRule; diff --git a/api/src/com/cloud/network/lb/LoadBalancingRulesService.java b/api/src/com/cloud/network/lb/LoadBalancingRulesService.java index 3aec8324486..4081f6efc2c 100644 --- a/api/src/com/cloud/network/lb/LoadBalancingRulesService.java +++ b/api/src/com/cloud/network/lb/LoadBalancingRulesService.java @@ -18,9 +18,9 @@ package com.cloud.network.lb; import java.util.List; -import org.apache.cloudstack.api.user.lb.command.*; -import org.apache.cloudstack.api.user.lb.command.CreateLBStickinessPolicyCmd; -import org.apache.cloudstack.api.user.lb.command.UpdateLoadBalancerRuleCmd; +import org.apache.cloudstack.api.command.user.loadbalancer.*; +import org.apache.cloudstack.api.command.user.loadbalancer.CreateLBStickinessPolicyCmd; +import org.apache.cloudstack.api.command.user.loadbalancer.UpdateLoadBalancerRuleCmd; import com.cloud.exception.InsufficientAddressCapacityException; import com.cloud.exception.NetworkRuleConflictException; import com.cloud.exception.ResourceUnavailableException; @@ -28,7 +28,6 @@ import com.cloud.network.rules.LoadBalancer; import com.cloud.network.rules.StickinessPolicy; import com.cloud.uservm.UserVm; import com.cloud.utils.Pair; -import org.apache.cloudstack.api.user.lb.command.ListLoadBalancerRulesCmd; public interface LoadBalancingRulesService { diff --git a/api/src/com/cloud/network/rules/RulesService.java b/api/src/com/cloud/network/rules/RulesService.java index 613929ba003..80c96d558c4 100644 --- a/api/src/com/cloud/network/rules/RulesService.java +++ b/api/src/com/cloud/network/rules/RulesService.java @@ -18,7 +18,7 @@ package com.cloud.network.rules; import java.util.List; -import org.apache.cloudstack.api.user.firewall.command.ListPortForwardingRulesCmd; +import org.apache.cloudstack.api.command.user.firewall.ListPortForwardingRulesCmd; import com.cloud.exception.InsufficientAddressCapacityException; import com.cloud.exception.NetworkRuleConflictException; import com.cloud.exception.ResourceUnavailableException; diff --git a/api/src/com/cloud/network/security/SecurityGroupService.java b/api/src/com/cloud/network/security/SecurityGroupService.java index 640b9accd8a..be86efda1bb 100644 --- a/api/src/com/cloud/network/security/SecurityGroupService.java +++ b/api/src/com/cloud/network/security/SecurityGroupService.java @@ -18,9 +18,8 @@ package com.cloud.network.security; import java.util.List; -import org.apache.cloudstack.api.user.securitygroup.command.*; -import org.apache.cloudstack.api.user.securitygroup.command.AuthorizeSecurityGroupIngressCmd; -import org.apache.cloudstack.api.user.securitygroup.command.CreateSecurityGroupCmd; +import org.apache.cloudstack.api.command.user.securitygroup.*; +import org.apache.cloudstack.api.command.user.securitygroup.AuthorizeSecurityGroupIngressCmd; import com.cloud.exception.InvalidParameterValueException; import com.cloud.exception.PermissionDeniedException; import com.cloud.exception.ResourceInUseException; diff --git a/api/src/com/cloud/network/vpn/RemoteAccessVpnService.java b/api/src/com/cloud/network/vpn/RemoteAccessVpnService.java index 6f6a817b8ba..fdc1ee960c5 100644 --- a/api/src/com/cloud/network/vpn/RemoteAccessVpnService.java +++ b/api/src/com/cloud/network/vpn/RemoteAccessVpnService.java @@ -18,8 +18,8 @@ package com.cloud.network.vpn; import java.util.List; +import org.apache.cloudstack.api.command.user.user.ListVpnUsersCmd; import org.apache.cloudstack.api.user.vpn.command.ListRemoteAccessVpnsCmd; -import org.apache.cloudstack.api.user.user.command.ListVpnUsersCmd; import com.cloud.exception.NetworkRuleConflictException; import com.cloud.exception.ResourceUnavailableException; import com.cloud.network.RemoteAccessVpn; diff --git a/api/src/com/cloud/resource/ResourceService.java b/api/src/com/cloud/resource/ResourceService.java index a7ee1de50e0..4d1c0bad4dd 100755 --- a/api/src/com/cloud/resource/ResourceService.java +++ b/api/src/com/cloud/resource/ResourceService.java @@ -18,16 +18,12 @@ package com.cloud.resource; import java.util.List; -import org.apache.cloudstack.api.admin.cluster.command.AddClusterCmd; -import org.apache.cloudstack.api.admin.cluster.command.DeleteClusterCmd; -import org.apache.cloudstack.api.admin.host.command.AddHostCmd; -import org.apache.cloudstack.api.admin.host.command.AddSecondaryStorageCmd; -import org.apache.cloudstack.api.admin.swift.command.AddSwiftCmd; -import org.apache.cloudstack.api.admin.host.command.CancelMaintenanceCmd; -import org.apache.cloudstack.api.admin.swift.command.ListSwiftsCmd; -import org.apache.cloudstack.api.admin.host.command.PrepareForMaintenanceCmd; -import org.apache.cloudstack.api.admin.host.command.*; -import org.apache.cloudstack.api.admin.host.command.UpdateHostCmd; +import org.apache.cloudstack.api.command.admin.cluster.AddClusterCmd; +import org.apache.cloudstack.api.command.admin.cluster.DeleteClusterCmd; +import org.apache.cloudstack.api.command.admin.host.*; +import org.apache.cloudstack.api.command.admin.swift.AddSwiftCmd; +import org.apache.cloudstack.api.command.admin.swift.ListSwiftsCmd; +import org.apache.cloudstack.api.command.admin.host.PrepareForMaintenanceCmd; import com.cloud.exception.DiscoveryException; import com.cloud.exception.InvalidParameterValueException; import com.cloud.exception.ResourceInUseException; @@ -36,7 +32,7 @@ import com.cloud.hypervisor.Hypervisor.HypervisorType; import com.cloud.org.Cluster; import com.cloud.storage.Swift; import com.cloud.utils.fsm.NoTransitionException; -import org.apache.cloudstack.api.admin.host.command.ReconnectHostCmd; +import org.apache.cloudstack.api.command.admin.host.ReconnectHostCmd; public interface ResourceService { /** diff --git a/api/src/com/cloud/server/ManagementService.java b/api/src/com/cloud/server/ManagementService.java index 75064bfaa42..06df410be49 100755 --- a/api/src/com/cloud/server/ManagementService.java +++ b/api/src/com/cloud/server/ManagementService.java @@ -24,44 +24,44 @@ import java.util.Set; import com.cloud.alert.Alert; import org.apache.cloudstack.api.ServerApiException; -import org.apache.cloudstack.api.admin.cluster.command.ListClustersCmd; -import org.apache.cloudstack.api.admin.host.command.ListHostsCmd; -import org.apache.cloudstack.api.admin.host.command.UpdateHostPasswordCmd; -import org.apache.cloudstack.api.admin.pod.command.ListPodsByCmd; -import org.apache.cloudstack.api.admin.resource.command.ListAlertsCmd; -import org.apache.cloudstack.api.admin.resource.command.ListCapacityCmd; -import org.apache.cloudstack.api.admin.router.command.ListRoutersCmd; -import org.apache.cloudstack.api.user.address.command.ListPublicIpAddressesCmd; -import org.apache.cloudstack.api.user.config.command.ListCapabilitiesCmd; -import org.apache.cloudstack.api.user.guest.command.ListGuestOsCmd; -import org.apache.cloudstack.api.user.offering.command.ListDiskOfferingsCmd; -import org.apache.cloudstack.api.user.offering.command.ListServiceOfferingsCmd; -import org.apache.cloudstack.api.user.ssh.command.CreateSSHKeyPairCmd; -import org.apache.cloudstack.api.user.ssh.command.DeleteSSHKeyPairCmd; -import org.apache.cloudstack.api.admin.systemvm.command.DestroySystemVmCmd; +import org.apache.cloudstack.api.command.admin.cluster.ListClustersCmd; +import org.apache.cloudstack.api.command.admin.host.ListHostsCmd; +import org.apache.cloudstack.api.command.admin.host.UpdateHostPasswordCmd; +import org.apache.cloudstack.api.command.admin.pod.ListPodsByCmd; +import org.apache.cloudstack.api.command.admin.resource.ListAlertsCmd; +import org.apache.cloudstack.api.command.admin.resource.ListCapacityCmd; +import org.apache.cloudstack.api.command.admin.router.ListRoutersCmd; +import org.apache.cloudstack.api.command.admin.domain.UpdateDomainCmd; +import org.apache.cloudstack.api.command.admin.storagepool.ListStoragePoolsCmd; +import org.apache.cloudstack.api.command.admin.systemvm.*; +import org.apache.cloudstack.api.command.admin.vlan.ListVlanIpRangesCmd; +import org.apache.cloudstack.api.command.user.address.ListPublicIpAddressesCmd; +import org.apache.cloudstack.api.command.user.config.ListCapabilitiesCmd; +import org.apache.cloudstack.api.command.user.guest.ListGuestOsCmd; +import org.apache.cloudstack.api.command.user.job.ListAsyncJobsCmd; +import org.apache.cloudstack.api.command.user.offering.ListDiskOfferingsCmd; +import org.apache.cloudstack.api.command.user.offering.ListServiceOfferingsCmd; +import org.apache.cloudstack.api.command.user.ssh.DeleteSSHKeyPairCmd; +import org.apache.cloudstack.api.command.user.ssh.CreateSSHKeyPairCmd; +import org.apache.cloudstack.api.command.user.template.ListTemplatesCmd; import org.apache.cloudstack.api.user.volume.command.ExtractVolumeCmd; -import org.apache.cloudstack.api.user.template.command.ListTemplatesCmd; -import org.apache.cloudstack.api.user.template.command.UpdateTemplateCmd; +import org.apache.cloudstack.api.command.user.template.UpdateTemplateCmd; import org.apache.cloudstack.api.user.vm.command.GetVMPasswordCmd; -import org.apache.cloudstack.api.user.job.command.ListAsyncJobsCmd; -import org.apache.cloudstack.api.admin.config.command.ListCfgsByCmd; -import org.apache.cloudstack.api.user.event.command.ListEventsCmd; -import org.apache.cloudstack.api.user.guest.command.ListGuestOsCategoriesCmd; -import org.apache.cloudstack.api.user.iso.command.ListIsosCmd; -import org.apache.cloudstack.api.user.ssh.command.ListSSHKeyPairsCmd; -import org.apache.cloudstack.api.admin.storagepool.command.ListStoragePoolsCmd; -import org.apache.cloudstack.api.admin.systemvm.command.ListSystemVMsCmd; +import org.apache.cloudstack.api.command.admin.config.ListCfgsByCmd; +import org.apache.cloudstack.api.command.user.event.ListEventsCmd; +import org.apache.cloudstack.api.command.user.guest.ListGuestOsCategoriesCmd; +import org.apache.cloudstack.api.command.user.iso.ListIsosCmd; +import org.apache.cloudstack.api.command.user.ssh.ListSSHKeyPairsCmd; +import org.apache.cloudstack.api.command.admin.systemvm.ListSystemVMsCmd; import org.apache.cloudstack.api.user.vmgroup.command.ListVMGroupsCmd; -import org.apache.cloudstack.api.admin.vlan.command.ListVlanIpRangesCmd; import org.apache.cloudstack.api.user.zone.command.ListZonesByCmd; -import org.apache.cloudstack.api.admin.systemvm.command.RebootSystemVmCmd; -import org.apache.cloudstack.api.user.ssh.command.RegisterSSHKeyPairCmd; -import org.apache.cloudstack.api.admin.systemvm.command.StopSystemVmCmd; -import org.apache.cloudstack.api.admin.domain.command.UpdateDomainCmd; -import org.apache.cloudstack.api.user.iso.command.UpdateIsoCmd; +import org.apache.cloudstack.api.command.admin.systemvm.RebootSystemVmCmd; +import org.apache.cloudstack.api.command.user.ssh.RegisterSSHKeyPairCmd; +import org.apache.cloudstack.api.command.admin.systemvm.StopSystemVmCmd; +import org.apache.cloudstack.api.command.user.iso.UpdateIsoCmd; import org.apache.cloudstack.api.user.vmgroup.command.UpdateVMGroupCmd; -import org.apache.cloudstack.api.admin.systemvm.command.UpgradeSystemVMCmd; -import org.apache.cloudstack.api.admin.resource.command.UploadCustomCertificateCmd; +import org.apache.cloudstack.api.command.admin.systemvm.UpgradeSystemVMCmd; +import org.apache.cloudstack.api.command.admin.resource.UploadCustomCertificateCmd; import com.cloud.api.view.vo.DomainRouterJoinVO; import com.cloud.api.view.vo.EventJoinVO; import com.cloud.async.AsyncJob; @@ -71,7 +71,6 @@ import com.cloud.dc.DataCenter; import com.cloud.dc.Pod; import com.cloud.dc.Vlan; import com.cloud.domain.Domain; -import com.cloud.event.Event; import com.cloud.exception.ConcurrentOperationException; import com.cloud.exception.InternalErrorException; import com.cloud.exception.PermissionDeniedException; diff --git a/api/src/com/cloud/server/TaggedResourceService.java b/api/src/com/cloud/server/TaggedResourceService.java index 667a0238033..2549f79587e 100644 --- a/api/src/com/cloud/server/TaggedResourceService.java +++ b/api/src/com/cloud/server/TaggedResourceService.java @@ -19,7 +19,7 @@ package com.cloud.server; import java.util.List; import java.util.Map; -import org.apache.cloudstack.api.user.tag.command.ListTagsCmd; +import org.apache.cloudstack.api.command.user.tag.ListTagsCmd; import com.cloud.api.view.vo.ResourceTagJoinVO; import com.cloud.server.ResourceTag.TaggedResourceType; diff --git a/api/src/com/cloud/storage/StorageService.java b/api/src/com/cloud/storage/StorageService.java index bca617def0f..a5f9261c2c1 100644 --- a/api/src/com/cloud/storage/StorageService.java +++ b/api/src/com/cloud/storage/StorageService.java @@ -19,11 +19,11 @@ package com.cloud.storage; import java.net.UnknownHostException; import java.util.List; -import org.apache.cloudstack.api.admin.storagepool.command.CancelPrimaryStorageMaintenanceCmd; -import org.apache.cloudstack.api.admin.storagepool.command.CreateStoragePoolCmd; -import org.apache.cloudstack.api.admin.storagepool.command.UpdateStoragePoolCmd; +import org.apache.cloudstack.api.command.admin.storagepool.CancelPrimaryStorageMaintenanceCmd; +import org.apache.cloudstack.api.command.admin.storagepool.CreateStoragePoolCmd; +import org.apache.cloudstack.api.command.admin.storagepool.DeletePoolCmd; +import org.apache.cloudstack.api.command.admin.storagepool.UpdateStoragePoolCmd; import org.apache.cloudstack.api.user.volume.command.CreateVolumeCmd; -import org.apache.cloudstack.api.admin.storagepool.command.DeletePoolCmd; import org.apache.cloudstack.api.user.volume.command.ListVolumesCmd; import org.apache.cloudstack.api.user.volume.command.UploadVolumeCmd; import com.cloud.exception.ConcurrentOperationException; diff --git a/api/src/com/cloud/storage/snapshot/SnapshotService.java b/api/src/com/cloud/storage/snapshot/SnapshotService.java index 0c024211469..79041c47b69 100644 --- a/api/src/com/cloud/storage/snapshot/SnapshotService.java +++ b/api/src/com/cloud/storage/snapshot/SnapshotService.java @@ -18,11 +18,11 @@ package com.cloud.storage.snapshot; import java.util.List; -import org.apache.cloudstack.api.user.snapshot.command.CreateSnapshotPolicyCmd; -import org.apache.cloudstack.api.user.snapshot.command.DeleteSnapshotPoliciesCmd; +import org.apache.cloudstack.api.command.user.snapshot.CreateSnapshotPolicyCmd; +import org.apache.cloudstack.api.command.user.snapshot.ListSnapshotsCmd; +import org.apache.cloudstack.api.command.user.snapshot.DeleteSnapshotPoliciesCmd; import com.cloud.api.commands.ListRecurringSnapshotScheduleCmd; -import org.apache.cloudstack.api.user.snapshot.command.ListSnapshotPoliciesCmd; -import org.apache.cloudstack.api.user.snapshot.command.ListSnapshotsCmd; +import org.apache.cloudstack.api.command.user.snapshot.ListSnapshotPoliciesCmd; import com.cloud.exception.PermissionDeniedException; import com.cloud.exception.ResourceAllocationException; import com.cloud.storage.Snapshot; diff --git a/api/src/com/cloud/template/TemplateService.java b/api/src/com/cloud/template/TemplateService.java index 1b41c332a0e..6fbc840b118 100755 --- a/api/src/com/cloud/template/TemplateService.java +++ b/api/src/com/cloud/template/TemplateService.java @@ -19,14 +19,14 @@ package com.cloud.template; import java.net.URISyntaxException; import java.util.List; -import org.apache.cloudstack.api.user.iso.command.RegisterIsoCmd; -import org.apache.cloudstack.api.user.template.command.CopyTemplateCmd; -import org.apache.cloudstack.api.user.iso.command.DeleteIsoCmd; -import org.apache.cloudstack.api.user.template.command.DeleteTemplateCmd; -import org.apache.cloudstack.api.user.iso.command.ExtractIsoCmd; -import org.apache.cloudstack.api.user.template.command.ExtractTemplateCmd; +import org.apache.cloudstack.api.command.user.iso.DeleteIsoCmd; +import org.apache.cloudstack.api.command.user.iso.ExtractIsoCmd; +import org.apache.cloudstack.api.command.user.iso.RegisterIsoCmd; +import org.apache.cloudstack.api.command.user.template.*; +import org.apache.cloudstack.api.command.user.template.CopyTemplateCmd; +import org.apache.cloudstack.api.command.user.template.ExtractTemplateCmd; import com.cloud.api.commands.ListTemplateOrIsoPermissionsCmd; -import org.apache.cloudstack.api.user.template.command.RegisterTemplateCmd; +import org.apache.cloudstack.api.command.user.template.RegisterTemplateCmd; import com.cloud.api.commands.UpdateTemplateOrIsoPermissionsCmd; import com.cloud.exception.InternalErrorException; import com.cloud.exception.ResourceAllocationException; diff --git a/api/src/com/cloud/user/AccountService.java b/api/src/com/cloud/user/AccountService.java index e73b04ecc86..e9558fc283e 100755 --- a/api/src/com/cloud/user/AccountService.java +++ b/api/src/com/cloud/user/AccountService.java @@ -21,12 +21,12 @@ import java.util.Map; import com.cloud.acl.ControlledEntity; import com.cloud.acl.SecurityChecker.AccessType; -import org.apache.cloudstack.api.admin.user.command.DeleteUserCmd; -import org.apache.cloudstack.api.admin.user.command.RegisterCmd; -import org.apache.cloudstack.api.admin.user.command.UpdateUserCmd; -import org.apache.cloudstack.api.user.account.command.ListAccountsCmd; -import org.apache.cloudstack.api.admin.user.command.ListUsersCmd; -import org.apache.cloudstack.api.admin.account.command.UpdateAccountCmd; +import org.apache.cloudstack.api.command.admin.user.DeleteUserCmd; +import org.apache.cloudstack.api.command.admin.user.ListUsersCmd; +import org.apache.cloudstack.api.command.admin.user.RegisterCmd; +import org.apache.cloudstack.api.command.admin.user.UpdateUserCmd; +import org.apache.cloudstack.api.command.admin.account.UpdateAccountCmd; +import org.apache.cloudstack.api.command.user.account.ListAccountsCmd; import com.cloud.domain.Domain; import com.cloud.exception.ConcurrentOperationException; import com.cloud.exception.PermissionDeniedException; diff --git a/api/src/com/cloud/user/DomainService.java b/api/src/com/cloud/user/DomainService.java index 78c9a545ca2..6fbe1b9a8db 100644 --- a/api/src/com/cloud/user/DomainService.java +++ b/api/src/com/cloud/user/DomainService.java @@ -18,8 +18,8 @@ package com.cloud.user; import java.util.List; -import org.apache.cloudstack.api.admin.domain.command.ListDomainChildrenCmd; -import org.apache.cloudstack.api.admin.domain.command.ListDomainsCmd; +import org.apache.cloudstack.api.command.admin.domain.ListDomainChildrenCmd; +import org.apache.cloudstack.api.command.admin.domain.ListDomainsCmd; import com.cloud.domain.Domain; import com.cloud.exception.PermissionDeniedException; import com.cloud.utils.Pair; diff --git a/api/src/com/cloud/vm/UserVmService.java b/api/src/com/cloud/vm/UserVmService.java index 4568944d733..c926f26775a 100755 --- a/api/src/com/cloud/vm/UserVmService.java +++ b/api/src/com/cloud/vm/UserVmService.java @@ -21,9 +21,9 @@ import java.util.Map; import javax.naming.InsufficientResourcesException; -import org.apache.cloudstack.api.admin.vm.command.AssignVMCmd; +import org.apache.cloudstack.api.command.admin.vm.AssignVMCmd; +import org.apache.cloudstack.api.command.user.template.CreateTemplateCmd; import org.apache.cloudstack.api.user.volume.command.AttachVolumeCmd; -import org.apache.cloudstack.api.user.template.command.CreateTemplateCmd; import org.apache.cloudstack.api.user.vmgroup.command.CreateVMGroupCmd; import org.apache.cloudstack.api.user.vmgroup.command.DeleteVMGroupCmd; import org.apache.cloudstack.api.user.vm.command.DeployVMCmd; @@ -31,7 +31,7 @@ import org.apache.cloudstack.api.user.vm.command.DestroyVMCmd; import org.apache.cloudstack.api.user.volume.command.DetachVolumeCmd; import org.apache.cloudstack.api.user.vm.command.ListVMsCmd; import org.apache.cloudstack.api.user.vm.command.RebootVMCmd; -import org.apache.cloudstack.api.admin.vm.command.RecoverVMCmd; +import org.apache.cloudstack.api.command.admin.vm.RecoverVMCmd; import org.apache.cloudstack.api.user.vm.command.ResetVMPasswordCmd; import org.apache.cloudstack.api.user.vm.command.RestoreVMCmd; import org.apache.cloudstack.api.user.vm.command.StartVMCmd; diff --git a/api/src/org/apache/cloudstack/api/ResponseGenerator.java b/api/src/org/apache/cloudstack/api/ResponseGenerator.java index c247e34e465..3578be353df 100755 --- a/api/src/org/apache/cloudstack/api/ResponseGenerator.java +++ b/api/src/org/apache/cloudstack/api/ResponseGenerator.java @@ -22,7 +22,7 @@ import java.util.List; import org.apache.cloudstack.api.ApiConstants.HostDetails; import org.apache.cloudstack.api.ApiConstants.VMDetails; -import org.apache.cloudstack.api.user.job.command.QueryAsyncJobResultCmd; +import org.apache.cloudstack.api.command.user.job.QueryAsyncJobResultCmd; import com.cloud.api.response.AccountResponse; import com.cloud.api.response.AsyncJobResponse; import com.cloud.api.response.AutoScalePolicyResponse; @@ -48,7 +48,6 @@ import com.cloud.api.response.InstanceGroupResponse; import com.cloud.api.response.IpForwardingRuleResponse; import com.cloud.api.response.LBStickinessResponse; import com.cloud.api.response.LDAPConfigResponse; -import com.cloud.api.response.ListResponse; import com.cloud.api.response.LoadBalancerResponse; import com.cloud.api.response.NetworkACLResponse; import com.cloud.api.response.NetworkOfferingResponse; @@ -127,7 +126,6 @@ import com.cloud.network.rules.PortForwardingRule; import com.cloud.network.rules.StaticNatRule; import com.cloud.network.rules.StickinessPolicy; import com.cloud.network.security.SecurityGroup; -import com.cloud.network.security.SecurityGroupRules; import com.cloud.network.security.SecurityRule; import com.cloud.network.vpc.PrivateGateway; import com.cloud.network.vpc.StaticRoute; diff --git a/api/src/org/apache/cloudstack/api/admin/account/command/CreateAccountCmd.java b/api/src/org/apache/cloudstack/api/command/admin/account/CreateAccountCmd.java similarity index 99% rename from api/src/org/apache/cloudstack/api/admin/account/command/CreateAccountCmd.java rename to api/src/org/apache/cloudstack/api/command/admin/account/CreateAccountCmd.java index 99ff4c253b3..28187258c28 100755 --- a/api/src/org/apache/cloudstack/api/admin/account/command/CreateAccountCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/account/CreateAccountCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.admin.account.command; +package org.apache.cloudstack.api.command.admin.account; import java.util.Collection; import java.util.Map; diff --git a/api/src/org/apache/cloudstack/api/admin/account/command/DeleteAccountCmd.java b/api/src/org/apache/cloudstack/api/command/admin/account/DeleteAccountCmd.java similarity index 98% rename from api/src/org/apache/cloudstack/api/admin/account/command/DeleteAccountCmd.java rename to api/src/org/apache/cloudstack/api/command/admin/account/DeleteAccountCmd.java index d00d7c8f920..81e2efde059 100755 --- a/api/src/org/apache/cloudstack/api/admin/account/command/DeleteAccountCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/account/DeleteAccountCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.admin.account.command; +package org.apache.cloudstack.api.command.admin.account; import org.apache.log4j.Logger; diff --git a/api/src/org/apache/cloudstack/api/admin/account/command/DisableAccountCmd.java b/api/src/org/apache/cloudstack/api/command/admin/account/DisableAccountCmd.java similarity index 98% rename from api/src/org/apache/cloudstack/api/admin/account/command/DisableAccountCmd.java rename to api/src/org/apache/cloudstack/api/command/admin/account/DisableAccountCmd.java index e6e9fd5878c..cf519df5ef7 100644 --- a/api/src/org/apache/cloudstack/api/admin/account/command/DisableAccountCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/account/DisableAccountCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.admin.account.command; +package org.apache.cloudstack.api.command.admin.account; import org.apache.log4j.Logger; diff --git a/api/src/org/apache/cloudstack/api/admin/account/command/EnableAccountCmd.java b/api/src/org/apache/cloudstack/api/command/admin/account/EnableAccountCmd.java similarity index 98% rename from api/src/org/apache/cloudstack/api/admin/account/command/EnableAccountCmd.java rename to api/src/org/apache/cloudstack/api/command/admin/account/EnableAccountCmd.java index ca0c9521d1a..91e24b05237 100644 --- a/api/src/org/apache/cloudstack/api/admin/account/command/EnableAccountCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/account/EnableAccountCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.admin.account.command; +package org.apache.cloudstack.api.command.admin.account; import org.apache.log4j.Logger; diff --git a/api/src/org/apache/cloudstack/api/admin/account/command/LockAccountCmd.java b/api/src/org/apache/cloudstack/api/command/admin/account/LockAccountCmd.java similarity index 98% rename from api/src/org/apache/cloudstack/api/admin/account/command/LockAccountCmd.java rename to api/src/org/apache/cloudstack/api/command/admin/account/LockAccountCmd.java index a8a06f089df..6f9bea05e53 100644 --- a/api/src/org/apache/cloudstack/api/admin/account/command/LockAccountCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/account/LockAccountCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.admin.account.command; +package org.apache.cloudstack.api.command.admin.account; import org.apache.log4j.Logger; diff --git a/api/src/org/apache/cloudstack/api/admin/account/command/UpdateAccountCmd.java b/api/src/org/apache/cloudstack/api/command/admin/account/UpdateAccountCmd.java similarity index 98% rename from api/src/org/apache/cloudstack/api/admin/account/command/UpdateAccountCmd.java rename to api/src/org/apache/cloudstack/api/command/admin/account/UpdateAccountCmd.java index 9bb095e012b..6463265effc 100755 --- a/api/src/org/apache/cloudstack/api/admin/account/command/UpdateAccountCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/account/UpdateAccountCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.admin.account.command; +package org.apache.cloudstack.api.command.admin.account; import java.util.Collection; import java.util.Map; diff --git a/api/src/org/apache/cloudstack/api/admin/autoscale/command/CreateCounterCmd.java b/api/src/org/apache/cloudstack/api/command/admin/autoscale/CreateCounterCmd.java similarity index 98% rename from api/src/org/apache/cloudstack/api/admin/autoscale/command/CreateCounterCmd.java rename to api/src/org/apache/cloudstack/api/command/admin/autoscale/CreateCounterCmd.java index 1fb712ee7aa..c97ddca5ba8 100644 --- a/api/src/org/apache/cloudstack/api/admin/autoscale/command/CreateCounterCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/autoscale/CreateCounterCmd.java @@ -15,7 +15,7 @@ // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.admin.autoscale.command; +package org.apache.cloudstack.api.command.admin.autoscale; import org.apache.log4j.Logger; diff --git a/api/src/org/apache/cloudstack/api/admin/autoscale/command/DeleteCounterCmd.java b/api/src/org/apache/cloudstack/api/command/admin/autoscale/DeleteCounterCmd.java similarity index 98% rename from api/src/org/apache/cloudstack/api/admin/autoscale/command/DeleteCounterCmd.java rename to api/src/org/apache/cloudstack/api/command/admin/autoscale/DeleteCounterCmd.java index 161c60c23d0..750d2abca1f 100644 --- a/api/src/org/apache/cloudstack/api/admin/autoscale/command/DeleteCounterCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/autoscale/DeleteCounterCmd.java @@ -15,7 +15,7 @@ // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.admin.autoscale.command; +package org.apache.cloudstack.api.command.admin.autoscale; import org.apache.log4j.Logger; diff --git a/api/src/org/apache/cloudstack/api/admin/cluster/command/AddClusterCmd.java b/api/src/org/apache/cloudstack/api/command/admin/cluster/AddClusterCmd.java similarity index 99% rename from api/src/org/apache/cloudstack/api/admin/cluster/command/AddClusterCmd.java rename to api/src/org/apache/cloudstack/api/command/admin/cluster/AddClusterCmd.java index ec6ab17e3d2..d5e6aee689a 100755 --- a/api/src/org/apache/cloudstack/api/admin/cluster/command/AddClusterCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/cluster/AddClusterCmd.java @@ -15,7 +15,7 @@ // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.admin.cluster.command; +package org.apache.cloudstack.api.command.admin.cluster; import java.util.ArrayList; import java.util.List; diff --git a/api/src/org/apache/cloudstack/api/admin/cluster/command/DeleteClusterCmd.java b/api/src/org/apache/cloudstack/api/command/admin/cluster/DeleteClusterCmd.java similarity index 98% rename from api/src/org/apache/cloudstack/api/admin/cluster/command/DeleteClusterCmd.java rename to api/src/org/apache/cloudstack/api/command/admin/cluster/DeleteClusterCmd.java index 64cc571d764..70eeb9a35c6 100755 --- a/api/src/org/apache/cloudstack/api/admin/cluster/command/DeleteClusterCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/cluster/DeleteClusterCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.admin.cluster.command; +package org.apache.cloudstack.api.command.admin.cluster; import org.apache.log4j.Logger; diff --git a/api/src/org/apache/cloudstack/api/admin/cluster/command/ListClustersCmd.java b/api/src/org/apache/cloudstack/api/command/admin/cluster/ListClustersCmd.java similarity index 97% rename from api/src/org/apache/cloudstack/api/admin/cluster/command/ListClustersCmd.java rename to api/src/org/apache/cloudstack/api/command/admin/cluster/ListClustersCmd.java index 0107648371f..7a01ba60299 100755 --- a/api/src/org/apache/cloudstack/api/admin/cluster/command/ListClustersCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/cluster/ListClustersCmd.java @@ -14,12 +14,12 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.admin.cluster.command; +package org.apache.cloudstack.api.command.admin.cluster; import java.util.ArrayList; import java.util.List; -import org.apache.cloudstack.api.user.offering.command.ListServiceOfferingsCmd; +import org.apache.cloudstack.api.command.user.offering.ListServiceOfferingsCmd; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; diff --git a/api/src/org/apache/cloudstack/api/admin/cluster/command/UpdateClusterCmd.java b/api/src/org/apache/cloudstack/api/command/admin/cluster/UpdateClusterCmd.java similarity index 98% rename from api/src/org/apache/cloudstack/api/admin/cluster/command/UpdateClusterCmd.java rename to api/src/org/apache/cloudstack/api/command/admin/cluster/UpdateClusterCmd.java index 1d85ce5a813..81c3114a866 100755 --- a/api/src/org/apache/cloudstack/api/admin/cluster/command/UpdateClusterCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/cluster/UpdateClusterCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.admin.cluster.command; +package org.apache.cloudstack.api.command.admin.cluster; import org.apache.log4j.Logger; diff --git a/api/src/org/apache/cloudstack/api/admin/config/command/ListCfgsByCmd.java b/api/src/org/apache/cloudstack/api/command/admin/config/ListCfgsByCmd.java similarity index 98% rename from api/src/org/apache/cloudstack/api/admin/config/command/ListCfgsByCmd.java rename to api/src/org/apache/cloudstack/api/command/admin/config/ListCfgsByCmd.java index 70990ba8179..ba583e8fd44 100644 --- a/api/src/org/apache/cloudstack/api/admin/config/command/ListCfgsByCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/config/ListCfgsByCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.admin.config.command; +package org.apache.cloudstack.api.command.admin.config; import java.util.ArrayList; import java.util.List; diff --git a/api/src/org/apache/cloudstack/api/admin/config/command/ListHypervisorCapabilitiesCmd.java b/api/src/org/apache/cloudstack/api/command/admin/config/ListHypervisorCapabilitiesCmd.java similarity index 98% rename from api/src/org/apache/cloudstack/api/admin/config/command/ListHypervisorCapabilitiesCmd.java rename to api/src/org/apache/cloudstack/api/command/admin/config/ListHypervisorCapabilitiesCmd.java index e0cd04f8350..d8e2ac55ce0 100644 --- a/api/src/org/apache/cloudstack/api/admin/config/command/ListHypervisorCapabilitiesCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/config/ListHypervisorCapabilitiesCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.admin.config.command; +package org.apache.cloudstack.api.command.admin.config; import java.util.ArrayList; import java.util.List; diff --git a/api/src/org/apache/cloudstack/api/admin/config/command/UpdateCfgCmd.java b/api/src/org/apache/cloudstack/api/command/admin/config/UpdateCfgCmd.java similarity index 98% rename from api/src/org/apache/cloudstack/api/admin/config/command/UpdateCfgCmd.java rename to api/src/org/apache/cloudstack/api/command/admin/config/UpdateCfgCmd.java index 62d401146a7..dc25e4dbaa5 100644 --- a/api/src/org/apache/cloudstack/api/admin/config/command/UpdateCfgCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/config/UpdateCfgCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.admin.config.command; +package org.apache.cloudstack.api.command.admin.config; import org.apache.log4j.Logger; diff --git a/api/src/org/apache/cloudstack/api/admin/config/command/UpdateHypervisorCapabilitiesCmd.java b/api/src/org/apache/cloudstack/api/command/admin/config/UpdateHypervisorCapabilitiesCmd.java similarity index 98% rename from api/src/org/apache/cloudstack/api/admin/config/command/UpdateHypervisorCapabilitiesCmd.java rename to api/src/org/apache/cloudstack/api/command/admin/config/UpdateHypervisorCapabilitiesCmd.java index 47a99809b1d..3f4f234cd0c 100644 --- a/api/src/org/apache/cloudstack/api/admin/config/command/UpdateHypervisorCapabilitiesCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/config/UpdateHypervisorCapabilitiesCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.admin.config.command; +package org.apache.cloudstack.api.command.admin.config; import org.apache.log4j.Logger; diff --git a/api/src/org/apache/cloudstack/api/admin/domain/command/CreateDomainCmd.java b/api/src/org/apache/cloudstack/api/command/admin/domain/CreateDomainCmd.java similarity index 98% rename from api/src/org/apache/cloudstack/api/admin/domain/command/CreateDomainCmd.java rename to api/src/org/apache/cloudstack/api/command/admin/domain/CreateDomainCmd.java index 86e77052b70..c8a653d5273 100644 --- a/api/src/org/apache/cloudstack/api/admin/domain/command/CreateDomainCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/domain/CreateDomainCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.admin.domain.command; +package org.apache.cloudstack.api.command.admin.domain; import org.apache.log4j.Logger; diff --git a/api/src/org/apache/cloudstack/api/admin/domain/command/DeleteDomainCmd.java b/api/src/org/apache/cloudstack/api/command/admin/domain/DeleteDomainCmd.java similarity index 98% rename from api/src/org/apache/cloudstack/api/admin/domain/command/DeleteDomainCmd.java rename to api/src/org/apache/cloudstack/api/command/admin/domain/DeleteDomainCmd.java index 2c372bad4af..6b9831b8743 100644 --- a/api/src/org/apache/cloudstack/api/admin/domain/command/DeleteDomainCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/domain/DeleteDomainCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.admin.domain.command; +package org.apache.cloudstack.api.command.admin.domain; import org.apache.log4j.Logger; diff --git a/api/src/org/apache/cloudstack/api/admin/domain/command/ListDomainChildrenCmd.java b/api/src/org/apache/cloudstack/api/command/admin/domain/ListDomainChildrenCmd.java similarity index 98% rename from api/src/org/apache/cloudstack/api/admin/domain/command/ListDomainChildrenCmd.java rename to api/src/org/apache/cloudstack/api/command/admin/domain/ListDomainChildrenCmd.java index 5aee062d49f..553247851a7 100644 --- a/api/src/org/apache/cloudstack/api/admin/domain/command/ListDomainChildrenCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/domain/ListDomainChildrenCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.admin.domain.command; +package org.apache.cloudstack.api.command.admin.domain; import java.util.ArrayList; import java.util.List; diff --git a/api/src/org/apache/cloudstack/api/admin/domain/command/ListDomainsCmd.java b/api/src/org/apache/cloudstack/api/command/admin/domain/ListDomainsCmd.java similarity index 98% rename from api/src/org/apache/cloudstack/api/admin/domain/command/ListDomainsCmd.java rename to api/src/org/apache/cloudstack/api/command/admin/domain/ListDomainsCmd.java index e35f7722e15..cb7d65a8ec9 100644 --- a/api/src/org/apache/cloudstack/api/admin/domain/command/ListDomainsCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/domain/ListDomainsCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.admin.domain.command; +package org.apache.cloudstack.api.command.admin.domain; import java.util.ArrayList; import java.util.List; diff --git a/api/src/org/apache/cloudstack/api/admin/domain/command/UpdateDomainCmd.java b/api/src/org/apache/cloudstack/api/command/admin/domain/UpdateDomainCmd.java similarity index 98% rename from api/src/org/apache/cloudstack/api/admin/domain/command/UpdateDomainCmd.java rename to api/src/org/apache/cloudstack/api/command/admin/domain/UpdateDomainCmd.java index 972b46f344b..41070976a30 100644 --- a/api/src/org/apache/cloudstack/api/admin/domain/command/UpdateDomainCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/domain/UpdateDomainCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.admin.domain.command; +package org.apache.cloudstack.api.command.admin.domain; import org.apache.log4j.Logger; diff --git a/api/src/org/apache/cloudstack/api/admin/host/command/AddHostCmd.java b/api/src/org/apache/cloudstack/api/command/admin/host/AddHostCmd.java similarity index 99% rename from api/src/org/apache/cloudstack/api/admin/host/command/AddHostCmd.java rename to api/src/org/apache/cloudstack/api/command/admin/host/AddHostCmd.java index 06a065230c2..e3ac4aaccbc 100755 --- a/api/src/org/apache/cloudstack/api/admin/host/command/AddHostCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/host/AddHostCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.admin.host.command; +package org.apache.cloudstack.api.command.admin.host; import java.util.ArrayList; import java.util.List; diff --git a/api/src/org/apache/cloudstack/api/admin/host/command/AddSecondaryStorageCmd.java b/api/src/org/apache/cloudstack/api/command/admin/host/AddSecondaryStorageCmd.java similarity index 98% rename from api/src/org/apache/cloudstack/api/admin/host/command/AddSecondaryStorageCmd.java rename to api/src/org/apache/cloudstack/api/command/admin/host/AddSecondaryStorageCmd.java index 678a73f1221..31ab929a72c 100644 --- a/api/src/org/apache/cloudstack/api/admin/host/command/AddSecondaryStorageCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/host/AddSecondaryStorageCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.admin.host.command; +package org.apache.cloudstack.api.command.admin.host; import java.util.List; diff --git a/api/src/org/apache/cloudstack/api/admin/host/command/CancelMaintenanceCmd.java b/api/src/org/apache/cloudstack/api/command/admin/host/CancelMaintenanceCmd.java similarity index 98% rename from api/src/org/apache/cloudstack/api/admin/host/command/CancelMaintenanceCmd.java rename to api/src/org/apache/cloudstack/api/command/admin/host/CancelMaintenanceCmd.java index 2e84b000140..74b16d84617 100644 --- a/api/src/org/apache/cloudstack/api/admin/host/command/CancelMaintenanceCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/host/CancelMaintenanceCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.admin.host.command; +package org.apache.cloudstack.api.command.admin.host; import org.apache.log4j.Logger; diff --git a/api/src/org/apache/cloudstack/api/admin/host/command/DeleteHostCmd.java b/api/src/org/apache/cloudstack/api/command/admin/host/DeleteHostCmd.java similarity index 98% rename from api/src/org/apache/cloudstack/api/admin/host/command/DeleteHostCmd.java rename to api/src/org/apache/cloudstack/api/command/admin/host/DeleteHostCmd.java index 0f39a043aca..cff893d193f 100644 --- a/api/src/org/apache/cloudstack/api/admin/host/command/DeleteHostCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/host/DeleteHostCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.admin.host.command; +package org.apache.cloudstack.api.command.admin.host; import org.apache.log4j.Logger; diff --git a/api/src/org/apache/cloudstack/api/admin/host/command/ListHostsCmd.java b/api/src/org/apache/cloudstack/api/command/admin/host/ListHostsCmd.java similarity index 99% rename from api/src/org/apache/cloudstack/api/admin/host/command/ListHostsCmd.java rename to api/src/org/apache/cloudstack/api/command/admin/host/ListHostsCmd.java index ec424c2d11f..e163ada2736 100755 --- a/api/src/org/apache/cloudstack/api/admin/host/command/ListHostsCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/host/ListHostsCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.admin.host.command; +package org.apache.cloudstack.api.command.admin.host; import java.util.ArrayList; import java.util.EnumSet; diff --git a/api/src/org/apache/cloudstack/api/admin/host/command/PrepareForMaintenanceCmd.java b/api/src/org/apache/cloudstack/api/command/admin/host/PrepareForMaintenanceCmd.java similarity index 98% rename from api/src/org/apache/cloudstack/api/admin/host/command/PrepareForMaintenanceCmd.java rename to api/src/org/apache/cloudstack/api/command/admin/host/PrepareForMaintenanceCmd.java index b6d178eabfa..cf4326a00b1 100644 --- a/api/src/org/apache/cloudstack/api/admin/host/command/PrepareForMaintenanceCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/host/PrepareForMaintenanceCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.admin.host.command; +package org.apache.cloudstack.api.command.admin.host; import org.apache.log4j.Logger; diff --git a/api/src/org/apache/cloudstack/api/admin/host/command/ReconnectHostCmd.java b/api/src/org/apache/cloudstack/api/command/admin/host/ReconnectHostCmd.java similarity index 98% rename from api/src/org/apache/cloudstack/api/admin/host/command/ReconnectHostCmd.java rename to api/src/org/apache/cloudstack/api/command/admin/host/ReconnectHostCmd.java index 2c57adecefc..d8f245c676f 100755 --- a/api/src/org/apache/cloudstack/api/admin/host/command/ReconnectHostCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/host/ReconnectHostCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.admin.host.command; +package org.apache.cloudstack.api.command.admin.host; import org.apache.log4j.Logger; diff --git a/api/src/org/apache/cloudstack/api/admin/host/command/UpdateHostCmd.java b/api/src/org/apache/cloudstack/api/command/admin/host/UpdateHostCmd.java similarity index 98% rename from api/src/org/apache/cloudstack/api/admin/host/command/UpdateHostCmd.java rename to api/src/org/apache/cloudstack/api/command/admin/host/UpdateHostCmd.java index bbb3b6fb10d..07af547e04f 100755 --- a/api/src/org/apache/cloudstack/api/admin/host/command/UpdateHostCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/host/UpdateHostCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.admin.host.command; +package org.apache.cloudstack.api.command.admin.host; import java.util.List; diff --git a/api/src/org/apache/cloudstack/api/admin/host/command/UpdateHostPasswordCmd.java b/api/src/org/apache/cloudstack/api/command/admin/host/UpdateHostPasswordCmd.java similarity index 98% rename from api/src/org/apache/cloudstack/api/admin/host/command/UpdateHostPasswordCmd.java rename to api/src/org/apache/cloudstack/api/command/admin/host/UpdateHostPasswordCmd.java index 2ace2485e51..96cdaaeb88e 100644 --- a/api/src/org/apache/cloudstack/api/admin/host/command/UpdateHostPasswordCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/host/UpdateHostPasswordCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.admin.host.command; +package org.apache.cloudstack.api.command.admin.host; import org.apache.log4j.Logger; diff --git a/api/src/org/apache/cloudstack/api/admin/ldap/command/LDAPConfigCmd.java b/api/src/org/apache/cloudstack/api/command/admin/ldap/LDAPConfigCmd.java similarity index 99% rename from api/src/org/apache/cloudstack/api/admin/ldap/command/LDAPConfigCmd.java rename to api/src/org/apache/cloudstack/api/command/admin/ldap/LDAPConfigCmd.java index 763455ceb14..a84c2c4d2aa 100644 --- a/api/src/org/apache/cloudstack/api/admin/ldap/command/LDAPConfigCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/ldap/LDAPConfigCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.admin.ldap.command; +package org.apache.cloudstack.api.command.admin.ldap; import javax.naming.NamingException; diff --git a/api/src/org/apache/cloudstack/api/admin/ldap/command/LDAPRemoveCmd.java b/api/src/org/apache/cloudstack/api/command/admin/ldap/LDAPRemoveCmd.java similarity index 97% rename from api/src/org/apache/cloudstack/api/admin/ldap/command/LDAPRemoveCmd.java rename to api/src/org/apache/cloudstack/api/command/admin/ldap/LDAPRemoveCmd.java index 5c53debe3f4..e4f713f2960 100644 --- a/api/src/org/apache/cloudstack/api/admin/ldap/command/LDAPRemoveCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/ldap/LDAPRemoveCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.admin.ldap.command; +package org.apache.cloudstack.api.command.admin.ldap; import org.apache.log4j.Logger; diff --git a/api/src/org/apache/cloudstack/api/admin/network/command/AddNetworkDeviceCmd.java b/api/src/org/apache/cloudstack/api/command/admin/network/AddNetworkDeviceCmd.java similarity index 96% rename from api/src/org/apache/cloudstack/api/admin/network/command/AddNetworkDeviceCmd.java rename to api/src/org/apache/cloudstack/api/command/admin/network/AddNetworkDeviceCmd.java index 8d63f0e091f..5c0f2ff2bae 100644 --- a/api/src/org/apache/cloudstack/api/admin/network/command/AddNetworkDeviceCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/network/AddNetworkDeviceCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.admin.network.command; +package org.apache.cloudstack.api.command.admin.network; import java.util.Map; @@ -33,7 +33,7 @@ import com.cloud.exception.ResourceUnavailableException; import com.cloud.host.Host; import org.apache.cloudstack.network.ExternalNetworkDeviceManager; import com.cloud.server.ManagementService; -import org.apache.cloudstack.api.admin.network.response.NetworkDeviceResponse; +import org.apache.cloudstack.api.response.NetworkDeviceResponse; import com.cloud.utils.component.ComponentLocator; import com.cloud.utils.exception.CloudRuntimeException; diff --git a/api/src/org/apache/cloudstack/api/admin/network/command/AddNetworkServiceProviderCmd.java b/api/src/org/apache/cloudstack/api/command/admin/network/AddNetworkServiceProviderCmd.java similarity index 98% rename from api/src/org/apache/cloudstack/api/admin/network/command/AddNetworkServiceProviderCmd.java rename to api/src/org/apache/cloudstack/api/command/admin/network/AddNetworkServiceProviderCmd.java index 542f8ddc9c9..f24e0d70b99 100644 --- a/api/src/org/apache/cloudstack/api/admin/network/command/AddNetworkServiceProviderCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/network/AddNetworkServiceProviderCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.admin.network.command; +package org.apache.cloudstack.api.command.admin.network; import java.util.List; diff --git a/api/src/org/apache/cloudstack/api/admin/network/command/CreateNetworkOfferingCmd.java b/api/src/org/apache/cloudstack/api/command/admin/network/CreateNetworkOfferingCmd.java similarity index 99% rename from api/src/org/apache/cloudstack/api/admin/network/command/CreateNetworkOfferingCmd.java rename to api/src/org/apache/cloudstack/api/command/admin/network/CreateNetworkOfferingCmd.java index d85f5753bed..c7c4e53e2c2 100644 --- a/api/src/org/apache/cloudstack/api/admin/network/command/CreateNetworkOfferingCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/network/CreateNetworkOfferingCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.admin.network.command; +package org.apache.cloudstack.api.command.admin.network; import java.util.ArrayList; import java.util.Collection; diff --git a/api/src/org/apache/cloudstack/api/admin/network/command/CreatePhysicalNetworkCmd.java b/api/src/org/apache/cloudstack/api/command/admin/network/CreatePhysicalNetworkCmd.java similarity index 99% rename from api/src/org/apache/cloudstack/api/admin/network/command/CreatePhysicalNetworkCmd.java rename to api/src/org/apache/cloudstack/api/command/admin/network/CreatePhysicalNetworkCmd.java index 5216e722852..601d0971740 100644 --- a/api/src/org/apache/cloudstack/api/admin/network/command/CreatePhysicalNetworkCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/network/CreatePhysicalNetworkCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.admin.network.command; +package org.apache.cloudstack.api.command.admin.network; import java.util.List; diff --git a/api/src/org/apache/cloudstack/api/admin/network/command/CreateStorageNetworkIpRangeCmd.java b/api/src/org/apache/cloudstack/api/command/admin/network/CreateStorageNetworkIpRangeCmd.java similarity index 98% rename from api/src/org/apache/cloudstack/api/admin/network/command/CreateStorageNetworkIpRangeCmd.java rename to api/src/org/apache/cloudstack/api/command/admin/network/CreateStorageNetworkIpRangeCmd.java index 5c0273bd701..05f68d93393 100755 --- a/api/src/org/apache/cloudstack/api/admin/network/command/CreateStorageNetworkIpRangeCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/network/CreateStorageNetworkIpRangeCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.admin.network.command; +package org.apache.cloudstack.api.command.admin.network; import org.apache.log4j.Logger; diff --git a/api/src/org/apache/cloudstack/api/admin/network/command/DeleteNetworkDeviceCmd.java b/api/src/org/apache/cloudstack/api/command/admin/network/DeleteNetworkDeviceCmd.java similarity index 98% rename from api/src/org/apache/cloudstack/api/admin/network/command/DeleteNetworkDeviceCmd.java rename to api/src/org/apache/cloudstack/api/command/admin/network/DeleteNetworkDeviceCmd.java index d01b774642b..0afe40284b0 100644 --- a/api/src/org/apache/cloudstack/api/admin/network/command/DeleteNetworkDeviceCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/network/DeleteNetworkDeviceCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.admin.network.command; +package org.apache.cloudstack.api.command.admin.network; import org.apache.log4j.Logger; diff --git a/api/src/org/apache/cloudstack/api/admin/network/command/DeleteNetworkOfferingCmd.java b/api/src/org/apache/cloudstack/api/command/admin/network/DeleteNetworkOfferingCmd.java similarity index 98% rename from api/src/org/apache/cloudstack/api/admin/network/command/DeleteNetworkOfferingCmd.java rename to api/src/org/apache/cloudstack/api/command/admin/network/DeleteNetworkOfferingCmd.java index 2e0f098ccd8..cf76044ef0d 100644 --- a/api/src/org/apache/cloudstack/api/admin/network/command/DeleteNetworkOfferingCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/network/DeleteNetworkOfferingCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.admin.network.command; +package org.apache.cloudstack.api.command.admin.network; import org.apache.log4j.Logger; diff --git a/api/src/org/apache/cloudstack/api/admin/network/command/DeleteNetworkServiceProviderCmd.java b/api/src/org/apache/cloudstack/api/command/admin/network/DeleteNetworkServiceProviderCmd.java similarity index 98% rename from api/src/org/apache/cloudstack/api/admin/network/command/DeleteNetworkServiceProviderCmd.java rename to api/src/org/apache/cloudstack/api/command/admin/network/DeleteNetworkServiceProviderCmd.java index abfe7cb6738..1c366953d1f 100644 --- a/api/src/org/apache/cloudstack/api/admin/network/command/DeleteNetworkServiceProviderCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/network/DeleteNetworkServiceProviderCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.admin.network.command; +package org.apache.cloudstack.api.command.admin.network; import org.apache.log4j.Logger; diff --git a/api/src/org/apache/cloudstack/api/admin/network/command/DeletePhysicalNetworkCmd.java b/api/src/org/apache/cloudstack/api/command/admin/network/DeletePhysicalNetworkCmd.java similarity index 98% rename from api/src/org/apache/cloudstack/api/admin/network/command/DeletePhysicalNetworkCmd.java rename to api/src/org/apache/cloudstack/api/command/admin/network/DeletePhysicalNetworkCmd.java index 5d146bf70b5..a2eaad82141 100644 --- a/api/src/org/apache/cloudstack/api/admin/network/command/DeletePhysicalNetworkCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/network/DeletePhysicalNetworkCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.admin.network.command; +package org.apache.cloudstack.api.command.admin.network; import org.apache.log4j.Logger; diff --git a/api/src/org/apache/cloudstack/api/admin/network/command/DeleteStorageNetworkIpRangeCmd.java b/api/src/org/apache/cloudstack/api/command/admin/network/DeleteStorageNetworkIpRangeCmd.java similarity index 98% rename from api/src/org/apache/cloudstack/api/admin/network/command/DeleteStorageNetworkIpRangeCmd.java rename to api/src/org/apache/cloudstack/api/command/admin/network/DeleteStorageNetworkIpRangeCmd.java index 5cb4eb70b32..cfcd6b43357 100755 --- a/api/src/org/apache/cloudstack/api/admin/network/command/DeleteStorageNetworkIpRangeCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/network/DeleteStorageNetworkIpRangeCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.admin.network.command; +package org.apache.cloudstack.api.command.admin.network; import org.apache.log4j.Logger; diff --git a/api/src/org/apache/cloudstack/api/admin/network/command/ListNetworkDeviceCmd.java b/api/src/org/apache/cloudstack/api/command/admin/network/ListNetworkDeviceCmd.java similarity index 96% rename from api/src/org/apache/cloudstack/api/admin/network/command/ListNetworkDeviceCmd.java rename to api/src/org/apache/cloudstack/api/command/admin/network/ListNetworkDeviceCmd.java index 21e0e6df327..384b59541fb 100644 --- a/api/src/org/apache/cloudstack/api/admin/network/command/ListNetworkDeviceCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/network/ListNetworkDeviceCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.admin.network.command; +package org.apache.cloudstack.api.command.admin.network; import java.util.ArrayList; import java.util.List; @@ -29,7 +29,7 @@ import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; import org.apache.cloudstack.network.ExternalNetworkDeviceManager; -import org.apache.cloudstack.api.admin.network.response.NetworkDeviceResponse; +import org.apache.cloudstack.api.response.NetworkDeviceResponse; import com.cloud.api.response.ListResponse; import com.cloud.exception.ConcurrentOperationException; import com.cloud.exception.InsufficientCapacityException; diff --git a/api/src/org/apache/cloudstack/api/admin/network/command/ListNetworkServiceProvidersCmd.java b/api/src/org/apache/cloudstack/api/command/admin/network/ListNetworkServiceProvidersCmd.java similarity index 98% rename from api/src/org/apache/cloudstack/api/admin/network/command/ListNetworkServiceProvidersCmd.java rename to api/src/org/apache/cloudstack/api/command/admin/network/ListNetworkServiceProvidersCmd.java index efaf15e5d35..24119156900 100644 --- a/api/src/org/apache/cloudstack/api/admin/network/command/ListNetworkServiceProvidersCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/network/ListNetworkServiceProvidersCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.admin.network.command; +package org.apache.cloudstack.api.command.admin.network; import java.util.ArrayList; import java.util.List; diff --git a/api/src/org/apache/cloudstack/api/admin/network/command/ListPhysicalNetworksCmd.java b/api/src/org/apache/cloudstack/api/command/admin/network/ListPhysicalNetworksCmd.java similarity index 98% rename from api/src/org/apache/cloudstack/api/admin/network/command/ListPhysicalNetworksCmd.java rename to api/src/org/apache/cloudstack/api/command/admin/network/ListPhysicalNetworksCmd.java index e26e2862afa..eb2515505b3 100644 --- a/api/src/org/apache/cloudstack/api/admin/network/command/ListPhysicalNetworksCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/network/ListPhysicalNetworksCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.admin.network.command; +package org.apache.cloudstack.api.command.admin.network; import java.util.ArrayList; import java.util.List; diff --git a/api/src/org/apache/cloudstack/api/admin/network/command/ListStorageNetworkIpRangeCmd.java b/api/src/org/apache/cloudstack/api/command/admin/network/ListStorageNetworkIpRangeCmd.java similarity index 98% rename from api/src/org/apache/cloudstack/api/admin/network/command/ListStorageNetworkIpRangeCmd.java rename to api/src/org/apache/cloudstack/api/command/admin/network/ListStorageNetworkIpRangeCmd.java index 06b6e2c5175..4e0e844a434 100755 --- a/api/src/org/apache/cloudstack/api/admin/network/command/ListStorageNetworkIpRangeCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/network/ListStorageNetworkIpRangeCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.admin.network.command; +package org.apache.cloudstack.api.command.admin.network; import java.util.ArrayList; import java.util.List; diff --git a/api/src/org/apache/cloudstack/api/admin/network/command/ListSupportedNetworkServicesCmd.java b/api/src/org/apache/cloudstack/api/command/admin/network/ListSupportedNetworkServicesCmd.java similarity index 98% rename from api/src/org/apache/cloudstack/api/admin/network/command/ListSupportedNetworkServicesCmd.java rename to api/src/org/apache/cloudstack/api/command/admin/network/ListSupportedNetworkServicesCmd.java index 6eaa9cff3d2..a422242b6b3 100644 --- a/api/src/org/apache/cloudstack/api/admin/network/command/ListSupportedNetworkServicesCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/network/ListSupportedNetworkServicesCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.admin.network.command; +package org.apache.cloudstack.api.command.admin.network; import java.util.ArrayList; import java.util.List; diff --git a/api/src/org/apache/cloudstack/api/admin/network/command/UpdateNetworkOfferingCmd.java b/api/src/org/apache/cloudstack/api/command/admin/network/UpdateNetworkOfferingCmd.java similarity index 98% rename from api/src/org/apache/cloudstack/api/admin/network/command/UpdateNetworkOfferingCmd.java rename to api/src/org/apache/cloudstack/api/command/admin/network/UpdateNetworkOfferingCmd.java index cb4497422df..a3400fb918e 100755 --- a/api/src/org/apache/cloudstack/api/admin/network/command/UpdateNetworkOfferingCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/network/UpdateNetworkOfferingCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.admin.network.command; +package org.apache.cloudstack.api.command.admin.network; import org.apache.log4j.Logger; diff --git a/api/src/org/apache/cloudstack/api/admin/network/command/UpdateNetworkServiceProviderCmd.java b/api/src/org/apache/cloudstack/api/command/admin/network/UpdateNetworkServiceProviderCmd.java similarity index 98% rename from api/src/org/apache/cloudstack/api/admin/network/command/UpdateNetworkServiceProviderCmd.java rename to api/src/org/apache/cloudstack/api/command/admin/network/UpdateNetworkServiceProviderCmd.java index cdacdd8149f..2b9c83f44f3 100644 --- a/api/src/org/apache/cloudstack/api/admin/network/command/UpdateNetworkServiceProviderCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/network/UpdateNetworkServiceProviderCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.admin.network.command; +package org.apache.cloudstack.api.command.admin.network; import java.util.List; diff --git a/api/src/org/apache/cloudstack/api/admin/network/command/UpdatePhysicalNetworkCmd.java b/api/src/org/apache/cloudstack/api/command/admin/network/UpdatePhysicalNetworkCmd.java similarity index 98% rename from api/src/org/apache/cloudstack/api/admin/network/command/UpdatePhysicalNetworkCmd.java rename to api/src/org/apache/cloudstack/api/command/admin/network/UpdatePhysicalNetworkCmd.java index fccde132d08..ef224bf93af 100644 --- a/api/src/org/apache/cloudstack/api/admin/network/command/UpdatePhysicalNetworkCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/network/UpdatePhysicalNetworkCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.admin.network.command; +package org.apache.cloudstack.api.command.admin.network; import java.util.List; diff --git a/api/src/org/apache/cloudstack/api/admin/network/command/UpdateStorageNetworkIpRangeCmd.java b/api/src/org/apache/cloudstack/api/command/admin/network/UpdateStorageNetworkIpRangeCmd.java similarity index 98% rename from api/src/org/apache/cloudstack/api/admin/network/command/UpdateStorageNetworkIpRangeCmd.java rename to api/src/org/apache/cloudstack/api/command/admin/network/UpdateStorageNetworkIpRangeCmd.java index 75526586d0b..057b1b87cd3 100755 --- a/api/src/org/apache/cloudstack/api/admin/network/command/UpdateStorageNetworkIpRangeCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/network/UpdateStorageNetworkIpRangeCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.admin.network.command; +package org.apache.cloudstack.api.command.admin.network; import org.apache.log4j.Logger; diff --git a/api/src/org/apache/cloudstack/api/admin/offering/command/CreateDiskOfferingCmd.java b/api/src/org/apache/cloudstack/api/command/admin/offering/CreateDiskOfferingCmd.java similarity index 98% rename from api/src/org/apache/cloudstack/api/admin/offering/command/CreateDiskOfferingCmd.java rename to api/src/org/apache/cloudstack/api/command/admin/offering/CreateDiskOfferingCmd.java index d79c916a388..915de5d0671 100755 --- a/api/src/org/apache/cloudstack/api/admin/offering/command/CreateDiskOfferingCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/offering/CreateDiskOfferingCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.admin.offering.command; +package org.apache.cloudstack.api.command.admin.offering; import org.apache.log4j.Logger; diff --git a/api/src/org/apache/cloudstack/api/admin/offering/command/CreateServiceOfferingCmd.java b/api/src/org/apache/cloudstack/api/command/admin/offering/CreateServiceOfferingCmd.java similarity index 99% rename from api/src/org/apache/cloudstack/api/admin/offering/command/CreateServiceOfferingCmd.java rename to api/src/org/apache/cloudstack/api/command/admin/offering/CreateServiceOfferingCmd.java index 57954ec821d..cb439e3c333 100644 --- a/api/src/org/apache/cloudstack/api/admin/offering/command/CreateServiceOfferingCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/offering/CreateServiceOfferingCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.admin.offering.command; +package org.apache.cloudstack.api.command.admin.offering; import org.apache.log4j.Logger; diff --git a/api/src/org/apache/cloudstack/api/admin/offering/command/DeleteDiskOfferingCmd.java b/api/src/org/apache/cloudstack/api/command/admin/offering/DeleteDiskOfferingCmd.java similarity index 97% rename from api/src/org/apache/cloudstack/api/admin/offering/command/DeleteDiskOfferingCmd.java rename to api/src/org/apache/cloudstack/api/command/admin/offering/DeleteDiskOfferingCmd.java index 39e8804aa8a..2cb5307b8dd 100644 --- a/api/src/org/apache/cloudstack/api/admin/offering/command/DeleteDiskOfferingCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/offering/DeleteDiskOfferingCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.admin.offering.command; +package org.apache.cloudstack.api.command.admin.offering; import org.apache.log4j.Logger; diff --git a/api/src/org/apache/cloudstack/api/admin/offering/command/DeleteServiceOfferingCmd.java b/api/src/org/apache/cloudstack/api/command/admin/offering/DeleteServiceOfferingCmd.java similarity index 98% rename from api/src/org/apache/cloudstack/api/admin/offering/command/DeleteServiceOfferingCmd.java rename to api/src/org/apache/cloudstack/api/command/admin/offering/DeleteServiceOfferingCmd.java index 643f8a26894..1ddbf74f933 100644 --- a/api/src/org/apache/cloudstack/api/admin/offering/command/DeleteServiceOfferingCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/offering/DeleteServiceOfferingCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.admin.offering.command; +package org.apache.cloudstack.api.command.admin.offering; import org.apache.log4j.Logger; diff --git a/api/src/org/apache/cloudstack/api/admin/offering/command/UpdateDiskOfferingCmd.java b/api/src/org/apache/cloudstack/api/command/admin/offering/UpdateDiskOfferingCmd.java similarity index 98% rename from api/src/org/apache/cloudstack/api/admin/offering/command/UpdateDiskOfferingCmd.java rename to api/src/org/apache/cloudstack/api/command/admin/offering/UpdateDiskOfferingCmd.java index 66438142612..dd69d9bda2f 100755 --- a/api/src/org/apache/cloudstack/api/admin/offering/command/UpdateDiskOfferingCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/offering/UpdateDiskOfferingCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.admin.offering.command; +package org.apache.cloudstack.api.command.admin.offering; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; diff --git a/api/src/org/apache/cloudstack/api/admin/offering/command/UpdateServiceOfferingCmd.java b/api/src/org/apache/cloudstack/api/command/admin/offering/UpdateServiceOfferingCmd.java similarity index 98% rename from api/src/org/apache/cloudstack/api/admin/offering/command/UpdateServiceOfferingCmd.java rename to api/src/org/apache/cloudstack/api/command/admin/offering/UpdateServiceOfferingCmd.java index 909ad7d3a4a..1bb8346881d 100755 --- a/api/src/org/apache/cloudstack/api/admin/offering/command/UpdateServiceOfferingCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/offering/UpdateServiceOfferingCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.admin.offering.command; +package org.apache.cloudstack.api.command.admin.offering; import org.apache.log4j.Logger; diff --git a/api/src/org/apache/cloudstack/api/admin/pod/command/CreatePodCmd.java b/api/src/org/apache/cloudstack/api/command/admin/pod/CreatePodCmd.java similarity index 98% rename from api/src/org/apache/cloudstack/api/admin/pod/command/CreatePodCmd.java rename to api/src/org/apache/cloudstack/api/command/admin/pod/CreatePodCmd.java index fe7c1cee2f1..c735698c77a 100755 --- a/api/src/org/apache/cloudstack/api/admin/pod/command/CreatePodCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/pod/CreatePodCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.admin.pod.command; +package org.apache.cloudstack.api.command.admin.pod; import org.apache.log4j.Logger; diff --git a/api/src/org/apache/cloudstack/api/admin/pod/command/DeletePodCmd.java b/api/src/org/apache/cloudstack/api/command/admin/pod/DeletePodCmd.java similarity index 98% rename from api/src/org/apache/cloudstack/api/admin/pod/command/DeletePodCmd.java rename to api/src/org/apache/cloudstack/api/command/admin/pod/DeletePodCmd.java index 3a04d7f4873..62688f8365c 100644 --- a/api/src/org/apache/cloudstack/api/admin/pod/command/DeletePodCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/pod/DeletePodCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.admin.pod.command; +package org.apache.cloudstack.api.command.admin.pod; import org.apache.log4j.Logger; diff --git a/api/src/org/apache/cloudstack/api/admin/pod/command/ListPodsByCmd.java b/api/src/org/apache/cloudstack/api/command/admin/pod/ListPodsByCmd.java similarity index 98% rename from api/src/org/apache/cloudstack/api/admin/pod/command/ListPodsByCmd.java rename to api/src/org/apache/cloudstack/api/command/admin/pod/ListPodsByCmd.java index db15d3d5a75..8b2b731935c 100755 --- a/api/src/org/apache/cloudstack/api/admin/pod/command/ListPodsByCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/pod/ListPodsByCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.admin.pod.command; +package org.apache.cloudstack.api.command.admin.pod; import java.util.ArrayList; import java.util.List; diff --git a/api/src/org/apache/cloudstack/api/admin/pod/command/UpdatePodCmd.java b/api/src/org/apache/cloudstack/api/command/admin/pod/UpdatePodCmd.java similarity index 98% rename from api/src/org/apache/cloudstack/api/admin/pod/command/UpdatePodCmd.java rename to api/src/org/apache/cloudstack/api/command/admin/pod/UpdatePodCmd.java index fe67c81cb45..48afb09232f 100755 --- a/api/src/org/apache/cloudstack/api/admin/pod/command/UpdatePodCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/pod/UpdatePodCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.admin.pod.command; +package org.apache.cloudstack.api.command.admin.pod; import org.apache.log4j.Logger; diff --git a/api/src/org/apache/cloudstack/api/admin/resource/command/ListAlertsCmd.java b/api/src/org/apache/cloudstack/api/command/admin/resource/ListAlertsCmd.java similarity index 98% rename from api/src/org/apache/cloudstack/api/admin/resource/command/ListAlertsCmd.java rename to api/src/org/apache/cloudstack/api/command/admin/resource/ListAlertsCmd.java index d82e4569638..db3b55c5ce3 100644 --- a/api/src/org/apache/cloudstack/api/admin/resource/command/ListAlertsCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/resource/ListAlertsCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.admin.resource.command; +package org.apache.cloudstack.api.command.admin.resource; import java.util.ArrayList; import java.util.List; diff --git a/api/src/org/apache/cloudstack/api/admin/resource/command/ListCapacityCmd.java b/api/src/org/apache/cloudstack/api/command/admin/resource/ListCapacityCmd.java similarity index 99% rename from api/src/org/apache/cloudstack/api/admin/resource/command/ListCapacityCmd.java rename to api/src/org/apache/cloudstack/api/command/admin/resource/ListCapacityCmd.java index 39cbddfbc7e..9f1b69642f0 100755 --- a/api/src/org/apache/cloudstack/api/admin/resource/command/ListCapacityCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/resource/ListCapacityCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.admin.resource.command; +package org.apache.cloudstack.api.command.admin.resource; import java.text.DecimalFormat; import java.util.List; diff --git a/api/src/org/apache/cloudstack/api/admin/resource/command/UploadCustomCertificateCmd.java b/api/src/org/apache/cloudstack/api/command/admin/resource/UploadCustomCertificateCmd.java similarity index 98% rename from api/src/org/apache/cloudstack/api/admin/resource/command/UploadCustomCertificateCmd.java rename to api/src/org/apache/cloudstack/api/command/admin/resource/UploadCustomCertificateCmd.java index 76be280c8ff..09bfd12ba45 100644 --- a/api/src/org/apache/cloudstack/api/admin/resource/command/UploadCustomCertificateCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/resource/UploadCustomCertificateCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.admin.resource.command; +package org.apache.cloudstack.api.command.admin.resource; import org.apache.log4j.Logger; diff --git a/api/src/org/apache/cloudstack/api/admin/router/command/ConfigureVirtualRouterElementCmd.java b/api/src/org/apache/cloudstack/api/command/admin/router/ConfigureVirtualRouterElementCmd.java similarity index 98% rename from api/src/org/apache/cloudstack/api/admin/router/command/ConfigureVirtualRouterElementCmd.java rename to api/src/org/apache/cloudstack/api/command/admin/router/ConfigureVirtualRouterElementCmd.java index e17a9881690..dcf4f6389f3 100644 --- a/api/src/org/apache/cloudstack/api/admin/router/command/ConfigureVirtualRouterElementCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/router/ConfigureVirtualRouterElementCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.admin.router.command; +package org.apache.cloudstack.api.command.admin.router; import org.apache.log4j.Logger; diff --git a/api/src/org/apache/cloudstack/api/admin/router/command/CreateVirtualRouterElementCmd.java b/api/src/org/apache/cloudstack/api/command/admin/router/CreateVirtualRouterElementCmd.java similarity index 98% rename from api/src/org/apache/cloudstack/api/admin/router/command/CreateVirtualRouterElementCmd.java rename to api/src/org/apache/cloudstack/api/command/admin/router/CreateVirtualRouterElementCmd.java index 5c88c2d182d..4d8c492bbf7 100644 --- a/api/src/org/apache/cloudstack/api/admin/router/command/CreateVirtualRouterElementCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/router/CreateVirtualRouterElementCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.admin.router.command; +package org.apache.cloudstack.api.command.admin.router; import org.apache.log4j.Logger; diff --git a/api/src/org/apache/cloudstack/api/admin/router/command/DestroyRouterCmd.java b/api/src/org/apache/cloudstack/api/command/admin/router/DestroyRouterCmd.java similarity index 98% rename from api/src/org/apache/cloudstack/api/admin/router/command/DestroyRouterCmd.java rename to api/src/org/apache/cloudstack/api/command/admin/router/DestroyRouterCmd.java index 1408a576406..13e16b540bc 100644 --- a/api/src/org/apache/cloudstack/api/admin/router/command/DestroyRouterCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/router/DestroyRouterCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.admin.router.command; +package org.apache.cloudstack.api.command.admin.router; import org.apache.log4j.Logger; diff --git a/api/src/org/apache/cloudstack/api/admin/router/command/ListRoutersCmd.java b/api/src/org/apache/cloudstack/api/command/admin/router/ListRoutersCmd.java similarity index 91% rename from api/src/org/apache/cloudstack/api/admin/router/command/ListRoutersCmd.java rename to api/src/org/apache/cloudstack/api/command/admin/router/ListRoutersCmd.java index e517dc14a39..1119463c4c3 100644 --- a/api/src/org/apache/cloudstack/api/admin/router/command/ListRoutersCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/router/ListRoutersCmd.java @@ -14,10 +14,8 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.admin.router.command; +package org.apache.cloudstack.api.command.admin.router; -import java.util.ArrayList; -import java.util.EnumSet; import java.util.List; import org.apache.log4j.Logger; @@ -27,19 +25,12 @@ 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; @Implementation(description="List routers.", responseObject=DomainRouterResponse.class) diff --git a/api/src/org/apache/cloudstack/api/admin/router/command/ListVirtualRouterElementsCmd.java b/api/src/org/apache/cloudstack/api/command/admin/router/ListVirtualRouterElementsCmd.java similarity index 97% rename from api/src/org/apache/cloudstack/api/admin/router/command/ListVirtualRouterElementsCmd.java rename to api/src/org/apache/cloudstack/api/command/admin/router/ListVirtualRouterElementsCmd.java index 6206de5ac1c..cfd7db573f1 100644 --- a/api/src/org/apache/cloudstack/api/admin/router/command/ListVirtualRouterElementsCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/router/ListVirtualRouterElementsCmd.java @@ -14,12 +14,12 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.admin.router.command; +package org.apache.cloudstack.api.command.admin.router; import java.util.ArrayList; import java.util.List; -import org.apache.cloudstack.api.user.network.command.ListNetworkOfferingsCmd; +import org.apache.cloudstack.api.command.user.network.ListNetworkOfferingsCmd; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; diff --git a/api/src/org/apache/cloudstack/api/admin/router/command/RebootRouterCmd.java b/api/src/org/apache/cloudstack/api/command/admin/router/RebootRouterCmd.java similarity index 98% rename from api/src/org/apache/cloudstack/api/admin/router/command/RebootRouterCmd.java rename to api/src/org/apache/cloudstack/api/command/admin/router/RebootRouterCmd.java index be1ef24afb2..74bad42b5ce 100644 --- a/api/src/org/apache/cloudstack/api/admin/router/command/RebootRouterCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/router/RebootRouterCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.admin.router.command; +package org.apache.cloudstack.api.command.admin.router; import org.apache.log4j.Logger; diff --git a/api/src/org/apache/cloudstack/api/admin/router/command/StartRouterCmd.java b/api/src/org/apache/cloudstack/api/command/admin/router/StartRouterCmd.java similarity index 98% rename from api/src/org/apache/cloudstack/api/admin/router/command/StartRouterCmd.java rename to api/src/org/apache/cloudstack/api/command/admin/router/StartRouterCmd.java index cf3b5f1551f..0b56068f0d5 100644 --- a/api/src/org/apache/cloudstack/api/admin/router/command/StartRouterCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/router/StartRouterCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.admin.router.command; +package org.apache.cloudstack.api.command.admin.router; import org.apache.log4j.Logger; diff --git a/api/src/org/apache/cloudstack/api/admin/router/command/StopRouterCmd.java b/api/src/org/apache/cloudstack/api/command/admin/router/StopRouterCmd.java similarity index 98% rename from api/src/org/apache/cloudstack/api/admin/router/command/StopRouterCmd.java rename to api/src/org/apache/cloudstack/api/command/admin/router/StopRouterCmd.java index 593b4c6dcc4..bb300b29808 100644 --- a/api/src/org/apache/cloudstack/api/admin/router/command/StopRouterCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/router/StopRouterCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.admin.router.command; +package org.apache.cloudstack.api.command.admin.router; import org.apache.log4j.Logger; diff --git a/api/src/org/apache/cloudstack/api/admin/router/command/UpgradeRouterCmd.java b/api/src/org/apache/cloudstack/api/command/admin/router/UpgradeRouterCmd.java similarity index 98% rename from api/src/org/apache/cloudstack/api/admin/router/command/UpgradeRouterCmd.java rename to api/src/org/apache/cloudstack/api/command/admin/router/UpgradeRouterCmd.java index 11633bd930a..e941a897852 100644 --- a/api/src/org/apache/cloudstack/api/admin/router/command/UpgradeRouterCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/router/UpgradeRouterCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.admin.router.command; +package org.apache.cloudstack.api.command.admin.router; import org.apache.log4j.Logger; diff --git a/api/src/org/apache/cloudstack/api/admin/storagepool/command/CancelPrimaryStorageMaintenanceCmd.java b/api/src/org/apache/cloudstack/api/command/admin/storagepool/CancelPrimaryStorageMaintenanceCmd.java similarity index 98% rename from api/src/org/apache/cloudstack/api/admin/storagepool/command/CancelPrimaryStorageMaintenanceCmd.java rename to api/src/org/apache/cloudstack/api/command/admin/storagepool/CancelPrimaryStorageMaintenanceCmd.java index d87259b301c..a50db6abeb8 100644 --- a/api/src/org/apache/cloudstack/api/admin/storagepool/command/CancelPrimaryStorageMaintenanceCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/storagepool/CancelPrimaryStorageMaintenanceCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.admin.storagepool.command; +package org.apache.cloudstack.api.command.admin.storagepool; import org.apache.log4j.Logger; diff --git a/api/src/org/apache/cloudstack/api/admin/storagepool/command/CreateStoragePoolCmd.java b/api/src/org/apache/cloudstack/api/command/admin/storagepool/CreateStoragePoolCmd.java similarity index 98% rename from api/src/org/apache/cloudstack/api/admin/storagepool/command/CreateStoragePoolCmd.java rename to api/src/org/apache/cloudstack/api/command/admin/storagepool/CreateStoragePoolCmd.java index fd3ca397766..563e2ae856b 100644 --- a/api/src/org/apache/cloudstack/api/admin/storagepool/command/CreateStoragePoolCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/storagepool/CreateStoragePoolCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.admin.storagepool.command; +package org.apache.cloudstack.api.command.admin.storagepool; import java.net.UnknownHostException; import java.util.Map; diff --git a/api/src/org/apache/cloudstack/api/admin/storagepool/command/DeletePoolCmd.java b/api/src/org/apache/cloudstack/api/command/admin/storagepool/DeletePoolCmd.java similarity index 98% rename from api/src/org/apache/cloudstack/api/admin/storagepool/command/DeletePoolCmd.java rename to api/src/org/apache/cloudstack/api/command/admin/storagepool/DeletePoolCmd.java index 473d35e4070..fcabb4ced48 100644 --- a/api/src/org/apache/cloudstack/api/admin/storagepool/command/DeletePoolCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/storagepool/DeletePoolCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.admin.storagepool.command; +package org.apache.cloudstack.api.command.admin.storagepool; import org.apache.log4j.Logger; diff --git a/api/src/org/apache/cloudstack/api/admin/storagepool/command/ListStoragePoolsCmd.java b/api/src/org/apache/cloudstack/api/command/admin/storagepool/ListStoragePoolsCmd.java similarity index 98% rename from api/src/org/apache/cloudstack/api/admin/storagepool/command/ListStoragePoolsCmd.java rename to api/src/org/apache/cloudstack/api/command/admin/storagepool/ListStoragePoolsCmd.java index b9879624440..e96ffd382a3 100644 --- a/api/src/org/apache/cloudstack/api/admin/storagepool/command/ListStoragePoolsCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/storagepool/ListStoragePoolsCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.admin.storagepool.command; +package org.apache.cloudstack.api.command.admin.storagepool; import java.util.ArrayList; import java.util.List; diff --git a/api/src/org/apache/cloudstack/api/admin/storagepool/command/PreparePrimaryStorageForMaintenanceCmd.java b/api/src/org/apache/cloudstack/api/command/admin/storagepool/PreparePrimaryStorageForMaintenanceCmd.java similarity index 98% rename from api/src/org/apache/cloudstack/api/admin/storagepool/command/PreparePrimaryStorageForMaintenanceCmd.java rename to api/src/org/apache/cloudstack/api/command/admin/storagepool/PreparePrimaryStorageForMaintenanceCmd.java index 3f7f80d8df0..eb7aaaeeecb 100644 --- a/api/src/org/apache/cloudstack/api/admin/storagepool/command/PreparePrimaryStorageForMaintenanceCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/storagepool/PreparePrimaryStorageForMaintenanceCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.admin.storagepool.command; +package org.apache.cloudstack.api.command.admin.storagepool; import org.apache.log4j.Logger; diff --git a/api/src/org/apache/cloudstack/api/admin/storagepool/command/UpdateStoragePoolCmd.java b/api/src/org/apache/cloudstack/api/command/admin/storagepool/UpdateStoragePoolCmd.java similarity index 98% rename from api/src/org/apache/cloudstack/api/admin/storagepool/command/UpdateStoragePoolCmd.java rename to api/src/org/apache/cloudstack/api/command/admin/storagepool/UpdateStoragePoolCmd.java index c027224d3bf..3ba7676870c 100644 --- a/api/src/org/apache/cloudstack/api/admin/storagepool/command/UpdateStoragePoolCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/storagepool/UpdateStoragePoolCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.admin.storagepool.command; +package org.apache.cloudstack.api.command.admin.storagepool; import java.util.List; diff --git a/api/src/org/apache/cloudstack/api/admin/swift/command/AddSwiftCmd.java b/api/src/org/apache/cloudstack/api/command/admin/swift/AddSwiftCmd.java similarity index 98% rename from api/src/org/apache/cloudstack/api/admin/swift/command/AddSwiftCmd.java rename to api/src/org/apache/cloudstack/api/command/admin/swift/AddSwiftCmd.java index 185024065d5..fd3c15424e6 100644 --- a/api/src/org/apache/cloudstack/api/admin/swift/command/AddSwiftCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/swift/AddSwiftCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.admin.swift.command; +package org.apache.cloudstack.api.command.admin.swift; import org.apache.log4j.Logger; diff --git a/api/src/org/apache/cloudstack/api/admin/swift/command/ListSwiftsCmd.java b/api/src/org/apache/cloudstack/api/command/admin/swift/ListSwiftsCmd.java similarity index 98% rename from api/src/org/apache/cloudstack/api/admin/swift/command/ListSwiftsCmd.java rename to api/src/org/apache/cloudstack/api/command/admin/swift/ListSwiftsCmd.java index 3a2202a9920..625054d2247 100644 --- a/api/src/org/apache/cloudstack/api/admin/swift/command/ListSwiftsCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/swift/ListSwiftsCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.admin.swift.command; +package org.apache.cloudstack.api.command.admin.swift; import java.util.ArrayList; import java.util.List; diff --git a/api/src/org/apache/cloudstack/api/admin/systemvm/command/DestroySystemVmCmd.java b/api/src/org/apache/cloudstack/api/command/admin/systemvm/DestroySystemVmCmd.java similarity index 98% rename from api/src/org/apache/cloudstack/api/admin/systemvm/command/DestroySystemVmCmd.java rename to api/src/org/apache/cloudstack/api/command/admin/systemvm/DestroySystemVmCmd.java index 56a82fb2255..c45922fa3ca 100644 --- a/api/src/org/apache/cloudstack/api/admin/systemvm/command/DestroySystemVmCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/systemvm/DestroySystemVmCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.admin.systemvm.command; +package org.apache.cloudstack.api.command.admin.systemvm; import org.apache.log4j.Logger; diff --git a/api/src/org/apache/cloudstack/api/admin/systemvm/command/ListSystemVMsCmd.java b/api/src/org/apache/cloudstack/api/command/admin/systemvm/ListSystemVMsCmd.java similarity index 98% rename from api/src/org/apache/cloudstack/api/admin/systemvm/command/ListSystemVMsCmd.java rename to api/src/org/apache/cloudstack/api/command/admin/systemvm/ListSystemVMsCmd.java index a1e27cd45d1..187ca6efc47 100644 --- a/api/src/org/apache/cloudstack/api/admin/systemvm/command/ListSystemVMsCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/systemvm/ListSystemVMsCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.admin.systemvm.command; +package org.apache.cloudstack.api.command.admin.systemvm; import java.util.ArrayList; import java.util.List; diff --git a/api/src/org/apache/cloudstack/api/admin/systemvm/command/MigrateSystemVMCmd.java b/api/src/org/apache/cloudstack/api/command/admin/systemvm/MigrateSystemVMCmd.java similarity index 98% rename from api/src/org/apache/cloudstack/api/admin/systemvm/command/MigrateSystemVMCmd.java rename to api/src/org/apache/cloudstack/api/command/admin/systemvm/MigrateSystemVMCmd.java index 8876be1af69..b1c9587df13 100644 --- a/api/src/org/apache/cloudstack/api/admin/systemvm/command/MigrateSystemVMCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/systemvm/MigrateSystemVMCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.admin.systemvm.command; +package org.apache.cloudstack.api.command.admin.systemvm; import org.apache.log4j.Logger; diff --git a/api/src/org/apache/cloudstack/api/admin/systemvm/command/RebootSystemVmCmd.java b/api/src/org/apache/cloudstack/api/command/admin/systemvm/RebootSystemVmCmd.java similarity index 98% rename from api/src/org/apache/cloudstack/api/admin/systemvm/command/RebootSystemVmCmd.java rename to api/src/org/apache/cloudstack/api/command/admin/systemvm/RebootSystemVmCmd.java index 61a8892ad8a..ac295cffcf9 100644 --- a/api/src/org/apache/cloudstack/api/admin/systemvm/command/RebootSystemVmCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/systemvm/RebootSystemVmCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.admin.systemvm.command; +package org.apache.cloudstack.api.command.admin.systemvm; import org.apache.log4j.Logger; diff --git a/api/src/org/apache/cloudstack/api/admin/systemvm/command/StartSystemVMCmd.java b/api/src/org/apache/cloudstack/api/command/admin/systemvm/StartSystemVMCmd.java similarity index 98% rename from api/src/org/apache/cloudstack/api/admin/systemvm/command/StartSystemVMCmd.java rename to api/src/org/apache/cloudstack/api/command/admin/systemvm/StartSystemVMCmd.java index f9e12a81d20..ea3917f8345 100644 --- a/api/src/org/apache/cloudstack/api/admin/systemvm/command/StartSystemVMCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/systemvm/StartSystemVMCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.admin.systemvm.command; +package org.apache.cloudstack.api.command.admin.systemvm; import org.apache.log4j.Logger; diff --git a/api/src/org/apache/cloudstack/api/admin/systemvm/command/StopSystemVmCmd.java b/api/src/org/apache/cloudstack/api/command/admin/systemvm/StopSystemVmCmd.java similarity index 98% rename from api/src/org/apache/cloudstack/api/admin/systemvm/command/StopSystemVmCmd.java rename to api/src/org/apache/cloudstack/api/command/admin/systemvm/StopSystemVmCmd.java index 1bf95831cc1..36f22c3d0b2 100644 --- a/api/src/org/apache/cloudstack/api/admin/systemvm/command/StopSystemVmCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/systemvm/StopSystemVmCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.admin.systemvm.command; +package org.apache.cloudstack.api.command.admin.systemvm; import org.apache.log4j.Logger; diff --git a/api/src/org/apache/cloudstack/api/admin/systemvm/command/UpgradeSystemVMCmd.java b/api/src/org/apache/cloudstack/api/command/admin/systemvm/UpgradeSystemVMCmd.java similarity index 98% rename from api/src/org/apache/cloudstack/api/admin/systemvm/command/UpgradeSystemVMCmd.java rename to api/src/org/apache/cloudstack/api/command/admin/systemvm/UpgradeSystemVMCmd.java index 88b69e173fa..3a4f97ba0f9 100644 --- a/api/src/org/apache/cloudstack/api/admin/systemvm/command/UpgradeSystemVMCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/systemvm/UpgradeSystemVMCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.admin.systemvm.command; +package org.apache.cloudstack.api.command.admin.systemvm; import org.apache.cloudstack.api.user.vm.command.UpgradeVMCmd; import org.apache.log4j.Logger; diff --git a/api/src/org/apache/cloudstack/api/admin/template/command/PrepareTemplateCmd.java b/api/src/org/apache/cloudstack/api/command/admin/template/PrepareTemplateCmd.java similarity index 98% rename from api/src/org/apache/cloudstack/api/admin/template/command/PrepareTemplateCmd.java rename to api/src/org/apache/cloudstack/api/command/admin/template/PrepareTemplateCmd.java index 910169b96c3..7951a7647a3 100644 --- a/api/src/org/apache/cloudstack/api/admin/template/command/PrepareTemplateCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/template/PrepareTemplateCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.admin.template.command; +package org.apache.cloudstack.api.command.admin.template; import java.util.List; diff --git a/api/src/org/apache/cloudstack/api/admin/usage/command/AddTrafficTypeCmd.java b/api/src/org/apache/cloudstack/api/command/admin/usage/AddTrafficTypeCmd.java similarity index 99% rename from api/src/org/apache/cloudstack/api/admin/usage/command/AddTrafficTypeCmd.java rename to api/src/org/apache/cloudstack/api/command/admin/usage/AddTrafficTypeCmd.java index 6135741e464..4c8cefaf31f 100644 --- a/api/src/org/apache/cloudstack/api/admin/usage/command/AddTrafficTypeCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/usage/AddTrafficTypeCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.admin.usage.command; +package org.apache.cloudstack.api.command.admin.usage; import org.apache.log4j.Logger; diff --git a/api/src/org/apache/cloudstack/api/admin/usage/command/DeleteTrafficTypeCmd.java b/api/src/org/apache/cloudstack/api/command/admin/usage/DeleteTrafficTypeCmd.java similarity index 98% rename from api/src/org/apache/cloudstack/api/admin/usage/command/DeleteTrafficTypeCmd.java rename to api/src/org/apache/cloudstack/api/command/admin/usage/DeleteTrafficTypeCmd.java index a7a2b7d7a9e..56499f32fe0 100644 --- a/api/src/org/apache/cloudstack/api/admin/usage/command/DeleteTrafficTypeCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/usage/DeleteTrafficTypeCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.admin.usage.command; +package org.apache.cloudstack.api.command.admin.usage; import org.apache.log4j.Logger; diff --git a/api/src/org/apache/cloudstack/api/admin/usage/command/ListTrafficTypeImplementorsCmd.java b/api/src/org/apache/cloudstack/api/command/admin/usage/ListTrafficTypeImplementorsCmd.java similarity index 98% rename from api/src/org/apache/cloudstack/api/admin/usage/command/ListTrafficTypeImplementorsCmd.java rename to api/src/org/apache/cloudstack/api/command/admin/usage/ListTrafficTypeImplementorsCmd.java index 1a7db85d562..54faadd9ede 100755 --- a/api/src/org/apache/cloudstack/api/admin/usage/command/ListTrafficTypeImplementorsCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/usage/ListTrafficTypeImplementorsCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.admin.usage.command; +package org.apache.cloudstack.api.command.admin.usage; import java.util.ArrayList; import java.util.List; diff --git a/api/src/org/apache/cloudstack/api/admin/usage/command/ListTrafficTypesCmd.java b/api/src/org/apache/cloudstack/api/command/admin/usage/ListTrafficTypesCmd.java similarity index 98% rename from api/src/org/apache/cloudstack/api/admin/usage/command/ListTrafficTypesCmd.java rename to api/src/org/apache/cloudstack/api/command/admin/usage/ListTrafficTypesCmd.java index d3fe699c7f0..23819dee1a9 100755 --- a/api/src/org/apache/cloudstack/api/admin/usage/command/ListTrafficTypesCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/usage/ListTrafficTypesCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.admin.usage.command; +package org.apache.cloudstack.api.command.admin.usage; import java.util.ArrayList; import java.util.List; diff --git a/api/src/org/apache/cloudstack/api/admin/usage/command/UpdateTrafficTypeCmd.java b/api/src/org/apache/cloudstack/api/command/admin/usage/UpdateTrafficTypeCmd.java similarity index 98% rename from api/src/org/apache/cloudstack/api/admin/usage/command/UpdateTrafficTypeCmd.java rename to api/src/org/apache/cloudstack/api/command/admin/usage/UpdateTrafficTypeCmd.java index cca4d3d0ba7..de2938f2ae9 100644 --- a/api/src/org/apache/cloudstack/api/admin/usage/command/UpdateTrafficTypeCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/usage/UpdateTrafficTypeCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.admin.usage.command; +package org.apache.cloudstack.api.command.admin.usage; import org.apache.log4j.Logger; diff --git a/api/src/org/apache/cloudstack/api/admin/user/command/CreateUserCmd.java b/api/src/org/apache/cloudstack/api/command/admin/user/CreateUserCmd.java similarity index 99% rename from api/src/org/apache/cloudstack/api/admin/user/command/CreateUserCmd.java rename to api/src/org/apache/cloudstack/api/command/admin/user/CreateUserCmd.java index a4b3bcac45c..0ecefd344c7 100644 --- a/api/src/org/apache/cloudstack/api/admin/user/command/CreateUserCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/user/CreateUserCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.admin.user.command; +package org.apache.cloudstack.api.command.admin.user; import org.apache.log4j.Logger; diff --git a/api/src/org/apache/cloudstack/api/admin/user/command/DeleteUserCmd.java b/api/src/org/apache/cloudstack/api/command/admin/user/DeleteUserCmd.java similarity index 98% rename from api/src/org/apache/cloudstack/api/admin/user/command/DeleteUserCmd.java rename to api/src/org/apache/cloudstack/api/command/admin/user/DeleteUserCmd.java index 5bdbfe7754f..99aafc498c1 100644 --- a/api/src/org/apache/cloudstack/api/admin/user/command/DeleteUserCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/user/DeleteUserCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.admin.user.command; +package org.apache.cloudstack.api.command.admin.user; import org.apache.log4j.Logger; diff --git a/api/src/org/apache/cloudstack/api/admin/user/command/DisableUserCmd.java b/api/src/org/apache/cloudstack/api/command/admin/user/DisableUserCmd.java similarity index 98% rename from api/src/org/apache/cloudstack/api/admin/user/command/DisableUserCmd.java rename to api/src/org/apache/cloudstack/api/command/admin/user/DisableUserCmd.java index 37589915a2c..ab5831bc619 100644 --- a/api/src/org/apache/cloudstack/api/admin/user/command/DisableUserCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/user/DisableUserCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.admin.user.command; +package org.apache.cloudstack.api.command.admin.user; import org.apache.log4j.Logger; diff --git a/api/src/org/apache/cloudstack/api/admin/user/command/EnableUserCmd.java b/api/src/org/apache/cloudstack/api/command/admin/user/EnableUserCmd.java similarity index 98% rename from api/src/org/apache/cloudstack/api/admin/user/command/EnableUserCmd.java rename to api/src/org/apache/cloudstack/api/command/admin/user/EnableUserCmd.java index 92545fb68cb..066eae845f9 100644 --- a/api/src/org/apache/cloudstack/api/admin/user/command/EnableUserCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/user/EnableUserCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.admin.user.command; +package org.apache.cloudstack.api.command.admin.user; import org.apache.log4j.Logger; diff --git a/api/src/org/apache/cloudstack/api/admin/user/command/GetUserCmd.java b/api/src/org/apache/cloudstack/api/command/admin/user/GetUserCmd.java similarity index 98% rename from api/src/org/apache/cloudstack/api/admin/user/command/GetUserCmd.java rename to api/src/org/apache/cloudstack/api/command/admin/user/GetUserCmd.java index 5cfc27ab499..5083a492e57 100644 --- a/api/src/org/apache/cloudstack/api/admin/user/command/GetUserCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/user/GetUserCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.admin.user.command; +package org.apache.cloudstack.api.command.admin.user; import org.apache.log4j.Logger; diff --git a/api/src/org/apache/cloudstack/api/admin/user/command/ListUsersCmd.java b/api/src/org/apache/cloudstack/api/command/admin/user/ListUsersCmd.java similarity index 98% rename from api/src/org/apache/cloudstack/api/admin/user/command/ListUsersCmd.java rename to api/src/org/apache/cloudstack/api/command/admin/user/ListUsersCmd.java index 6314e5e0d01..84b85c0141f 100644 --- a/api/src/org/apache/cloudstack/api/admin/user/command/ListUsersCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/user/ListUsersCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.admin.user.command; +package org.apache.cloudstack.api.command.admin.user; import java.util.ArrayList; import java.util.List; diff --git a/api/src/org/apache/cloudstack/api/admin/user/command/LockUserCmd.java b/api/src/org/apache/cloudstack/api/command/admin/user/LockUserCmd.java similarity index 98% rename from api/src/org/apache/cloudstack/api/admin/user/command/LockUserCmd.java rename to api/src/org/apache/cloudstack/api/command/admin/user/LockUserCmd.java index 8215fd5734e..3eee1da77be 100644 --- a/api/src/org/apache/cloudstack/api/admin/user/command/LockUserCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/user/LockUserCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.admin.user.command; +package org.apache.cloudstack.api.command.admin.user; import org.apache.log4j.Logger; diff --git a/api/src/org/apache/cloudstack/api/admin/user/command/RegisterCmd.java b/api/src/org/apache/cloudstack/api/command/admin/user/RegisterCmd.java similarity index 98% rename from api/src/org/apache/cloudstack/api/admin/user/command/RegisterCmd.java rename to api/src/org/apache/cloudstack/api/command/admin/user/RegisterCmd.java index 8aa4d0473e3..5a38fdca5f8 100644 --- a/api/src/org/apache/cloudstack/api/admin/user/command/RegisterCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/user/RegisterCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.admin.user.command; +package org.apache.cloudstack.api.command.admin.user; import org.apache.log4j.Logger; diff --git a/api/src/org/apache/cloudstack/api/admin/user/command/UpdateUserCmd.java b/api/src/org/apache/cloudstack/api/command/admin/user/UpdateUserCmd.java similarity index 98% rename from api/src/org/apache/cloudstack/api/admin/user/command/UpdateUserCmd.java rename to api/src/org/apache/cloudstack/api/command/admin/user/UpdateUserCmd.java index c77db3320ef..021a93e23b5 100644 --- a/api/src/org/apache/cloudstack/api/admin/user/command/UpdateUserCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/user/UpdateUserCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.admin.user.command; +package org.apache.cloudstack.api.command.admin.user; import org.apache.log4j.Logger; diff --git a/api/src/org/apache/cloudstack/api/admin/vlan/command/CreateVlanIpRangeCmd.java b/api/src/org/apache/cloudstack/api/command/admin/vlan/CreateVlanIpRangeCmd.java similarity index 99% rename from api/src/org/apache/cloudstack/api/admin/vlan/command/CreateVlanIpRangeCmd.java rename to api/src/org/apache/cloudstack/api/command/admin/vlan/CreateVlanIpRangeCmd.java index 27dd604199e..f50820b1a1e 100644 --- a/api/src/org/apache/cloudstack/api/admin/vlan/command/CreateVlanIpRangeCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/vlan/CreateVlanIpRangeCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.admin.vlan.command; +package org.apache.cloudstack.api.command.admin.vlan; import org.apache.log4j.Logger; diff --git a/api/src/org/apache/cloudstack/api/admin/vlan/command/DeleteVlanIpRangeCmd.java b/api/src/org/apache/cloudstack/api/command/admin/vlan/DeleteVlanIpRangeCmd.java similarity index 98% rename from api/src/org/apache/cloudstack/api/admin/vlan/command/DeleteVlanIpRangeCmd.java rename to api/src/org/apache/cloudstack/api/command/admin/vlan/DeleteVlanIpRangeCmd.java index 9ae10c60cba..55272a67582 100644 --- a/api/src/org/apache/cloudstack/api/admin/vlan/command/DeleteVlanIpRangeCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/vlan/DeleteVlanIpRangeCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.admin.vlan.command; +package org.apache.cloudstack.api.command.admin.vlan; import org.apache.log4j.Logger; diff --git a/api/src/org/apache/cloudstack/api/admin/vlan/command/ListVlanIpRangesCmd.java b/api/src/org/apache/cloudstack/api/command/admin/vlan/ListVlanIpRangesCmd.java similarity index 99% rename from api/src/org/apache/cloudstack/api/admin/vlan/command/ListVlanIpRangesCmd.java rename to api/src/org/apache/cloudstack/api/command/admin/vlan/ListVlanIpRangesCmd.java index 7de9016287b..3554c4fafd6 100644 --- a/api/src/org/apache/cloudstack/api/admin/vlan/command/ListVlanIpRangesCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/vlan/ListVlanIpRangesCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.admin.vlan.command; +package org.apache.cloudstack.api.command.admin.vlan; import java.util.ArrayList; import java.util.List; diff --git a/api/src/org/apache/cloudstack/api/admin/vm/command/AssignVMCmd.java b/api/src/org/apache/cloudstack/api/command/admin/vm/AssignVMCmd.java similarity index 98% rename from api/src/org/apache/cloudstack/api/admin/vm/command/AssignVMCmd.java rename to api/src/org/apache/cloudstack/api/command/admin/vm/AssignVMCmd.java index 5ae6140a189..12647dc01d0 100644 --- a/api/src/org/apache/cloudstack/api/admin/vm/command/AssignVMCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/vm/AssignVMCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.admin.vm.command; +package org.apache.cloudstack.api.command.admin.vm; import java.util.List; @@ -24,7 +24,6 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; diff --git a/api/src/org/apache/cloudstack/api/admin/vm/command/MigrateVMCmd.java b/api/src/org/apache/cloudstack/api/command/admin/vm/MigrateVMCmd.java similarity index 99% rename from api/src/org/apache/cloudstack/api/admin/vm/command/MigrateVMCmd.java rename to api/src/org/apache/cloudstack/api/command/admin/vm/MigrateVMCmd.java index 6103a864786..011ff7868ca 100644 --- a/api/src/org/apache/cloudstack/api/admin/vm/command/MigrateVMCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/vm/MigrateVMCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.admin.vm.command; +package org.apache.cloudstack.api.command.admin.vm; import org.apache.log4j.Logger; diff --git a/api/src/org/apache/cloudstack/api/admin/vm/command/RecoverVMCmd.java b/api/src/org/apache/cloudstack/api/command/admin/vm/RecoverVMCmd.java similarity index 97% rename from api/src/org/apache/cloudstack/api/admin/vm/command/RecoverVMCmd.java rename to api/src/org/apache/cloudstack/api/command/admin/vm/RecoverVMCmd.java index c10907cf203..c08c30b93be 100644 --- a/api/src/org/apache/cloudstack/api/admin/vm/command/RecoverVMCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/vm/RecoverVMCmd.java @@ -14,13 +14,12 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.admin.vm.command; +package org.apache.cloudstack.api.command.admin.vm; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; diff --git a/api/src/org/apache/cloudstack/api/admin/vpc/command/CreatePrivateGatewayCmd.java b/api/src/org/apache/cloudstack/api/command/admin/vpc/CreatePrivateGatewayCmd.java similarity index 99% rename from api/src/org/apache/cloudstack/api/admin/vpc/command/CreatePrivateGatewayCmd.java rename to api/src/org/apache/cloudstack/api/command/admin/vpc/CreatePrivateGatewayCmd.java index 8abb0be1d54..300ffa09308 100644 --- a/api/src/org/apache/cloudstack/api/admin/vpc/command/CreatePrivateGatewayCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/vpc/CreatePrivateGatewayCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.admin.vpc.command; +package org.apache.cloudstack.api.command.admin.vpc; import org.apache.log4j.Logger; diff --git a/api/src/org/apache/cloudstack/api/admin/vpc/command/CreateVPCOfferingCmd.java b/api/src/org/apache/cloudstack/api/command/admin/vpc/CreateVPCOfferingCmd.java similarity index 98% rename from api/src/org/apache/cloudstack/api/admin/vpc/command/CreateVPCOfferingCmd.java rename to api/src/org/apache/cloudstack/api/command/admin/vpc/CreateVPCOfferingCmd.java index 23d1d9b4bb1..c2fcb22a6d7 100644 --- a/api/src/org/apache/cloudstack/api/admin/vpc/command/CreateVPCOfferingCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/vpc/CreateVPCOfferingCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.admin.vpc.command; +package org.apache.cloudstack.api.command.admin.vpc; import java.util.List; diff --git a/api/src/org/apache/cloudstack/api/admin/vpc/command/DeletePrivateGatewayCmd.java b/api/src/org/apache/cloudstack/api/command/admin/vpc/DeletePrivateGatewayCmd.java similarity index 98% rename from api/src/org/apache/cloudstack/api/admin/vpc/command/DeletePrivateGatewayCmd.java rename to api/src/org/apache/cloudstack/api/command/admin/vpc/DeletePrivateGatewayCmd.java index 4128e10e8ad..b6a921af249 100644 --- a/api/src/org/apache/cloudstack/api/admin/vpc/command/DeletePrivateGatewayCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/vpc/DeletePrivateGatewayCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.admin.vpc.command; +package org.apache.cloudstack.api.command.admin.vpc; import org.apache.log4j.Logger; diff --git a/api/src/org/apache/cloudstack/api/admin/vpc/command/DeleteVPCOfferingCmd.java b/api/src/org/apache/cloudstack/api/command/admin/vpc/DeleteVPCOfferingCmd.java similarity index 98% rename from api/src/org/apache/cloudstack/api/admin/vpc/command/DeleteVPCOfferingCmd.java rename to api/src/org/apache/cloudstack/api/command/admin/vpc/DeleteVPCOfferingCmd.java index b929efff1a0..ed91dfea621 100644 --- a/api/src/org/apache/cloudstack/api/admin/vpc/command/DeleteVPCOfferingCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/vpc/DeleteVPCOfferingCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.admin.vpc.command; +package org.apache.cloudstack.api.command.admin.vpc; import org.apache.log4j.Logger; diff --git a/api/src/org/apache/cloudstack/api/admin/vpc/command/UpdateVPCOfferingCmd.java b/api/src/org/apache/cloudstack/api/command/admin/vpc/UpdateVPCOfferingCmd.java similarity index 98% rename from api/src/org/apache/cloudstack/api/admin/vpc/command/UpdateVPCOfferingCmd.java rename to api/src/org/apache/cloudstack/api/command/admin/vpc/UpdateVPCOfferingCmd.java index df4087668fb..81affa1386e 100644 --- a/api/src/org/apache/cloudstack/api/admin/vpc/command/UpdateVPCOfferingCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/vpc/UpdateVPCOfferingCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.admin.vpc.command; +package org.apache.cloudstack.api.command.admin.vpc; import org.apache.log4j.Logger; diff --git a/api/src/org/apache/cloudstack/api/admin/zone/command/CreateZoneCmd.java b/api/src/org/apache/cloudstack/api/command/admin/zone/CreateZoneCmd.java similarity index 98% rename from api/src/org/apache/cloudstack/api/admin/zone/command/CreateZoneCmd.java rename to api/src/org/apache/cloudstack/api/command/admin/zone/CreateZoneCmd.java index 64dfbeec88b..6b59f936517 100755 --- a/api/src/org/apache/cloudstack/api/admin/zone/command/CreateZoneCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/zone/CreateZoneCmd.java @@ -14,13 +14,12 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.admin.zone.command; +package org.apache.cloudstack.api.command.admin.zone; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; diff --git a/api/src/org/apache/cloudstack/api/admin/zone/command/DeleteZoneCmd.java b/api/src/org/apache/cloudstack/api/command/admin/zone/DeleteZoneCmd.java similarity index 96% rename from api/src/org/apache/cloudstack/api/admin/zone/command/DeleteZoneCmd.java rename to api/src/org/apache/cloudstack/api/command/admin/zone/DeleteZoneCmd.java index 75770673588..c62c5362f5a 100644 --- a/api/src/org/apache/cloudstack/api/admin/zone/command/DeleteZoneCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/zone/DeleteZoneCmd.java @@ -14,13 +14,12 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.admin.zone.command; +package org.apache.cloudstack.api.command.admin.zone; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; diff --git a/api/src/org/apache/cloudstack/api/admin/zone/command/MarkDefaultZoneForAccountCmd.java b/api/src/org/apache/cloudstack/api/command/admin/zone/MarkDefaultZoneForAccountCmd.java similarity index 97% rename from api/src/org/apache/cloudstack/api/admin/zone/command/MarkDefaultZoneForAccountCmd.java rename to api/src/org/apache/cloudstack/api/command/admin/zone/MarkDefaultZoneForAccountCmd.java index fdb1d9cbbe6..22ddfbfdaa1 100644 --- a/api/src/org/apache/cloudstack/api/admin/zone/command/MarkDefaultZoneForAccountCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/zone/MarkDefaultZoneForAccountCmd.java @@ -15,7 +15,7 @@ // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.admin.zone.command; +package org.apache.cloudstack.api.command.admin.zone; import org.apache.log4j.Logger; @@ -23,7 +23,6 @@ import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ApiConstants; -import org.apache.cloudstack.api.IdentityMapper; import com.cloud.user.Account; import com.cloud.event.EventTypes; import com.cloud.async.AsyncJob; diff --git a/api/src/org/apache/cloudstack/api/admin/zone/command/UpdateZoneCmd.java b/api/src/org/apache/cloudstack/api/command/admin/zone/UpdateZoneCmd.java similarity index 98% rename from api/src/org/apache/cloudstack/api/admin/zone/command/UpdateZoneCmd.java rename to api/src/org/apache/cloudstack/api/command/admin/zone/UpdateZoneCmd.java index f1e9f738f61..c67607fd34d 100755 --- a/api/src/org/apache/cloudstack/api/admin/zone/command/UpdateZoneCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/zone/UpdateZoneCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.admin.zone.command; +package org.apache.cloudstack.api.command.admin.zone; import java.util.List; import java.util.Map; @@ -23,7 +23,6 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; diff --git a/api/src/org/apache/cloudstack/api/user/account/command/AddAccountToProjectCmd.java b/api/src/org/apache/cloudstack/api/command/user/account/AddAccountToProjectCmd.java similarity index 98% rename from api/src/org/apache/cloudstack/api/user/account/command/AddAccountToProjectCmd.java rename to api/src/org/apache/cloudstack/api/command/user/account/AddAccountToProjectCmd.java index 56dea9ebc76..ba94d4d3e28 100644 --- a/api/src/org/apache/cloudstack/api/user/account/command/AddAccountToProjectCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/account/AddAccountToProjectCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.user.account.command; +package org.apache.cloudstack.api.command.user.account; import org.apache.log4j.Logger; diff --git a/api/src/org/apache/cloudstack/api/user/account/command/DeleteAccountFromProjectCmd.java b/api/src/org/apache/cloudstack/api/command/user/account/DeleteAccountFromProjectCmd.java similarity index 97% rename from api/src/org/apache/cloudstack/api/user/account/command/DeleteAccountFromProjectCmd.java rename to api/src/org/apache/cloudstack/api/command/user/account/DeleteAccountFromProjectCmd.java index d5ce0e9c02a..29c247f9968 100644 --- a/api/src/org/apache/cloudstack/api/user/account/command/DeleteAccountFromProjectCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/account/DeleteAccountFromProjectCmd.java @@ -14,9 +14,9 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.user.account.command; +package org.apache.cloudstack.api.command.user.account; -import org.apache.cloudstack.api.user.project.command.DeleteProjectCmd; +import org.apache.cloudstack.api.command.user.project.DeleteProjectCmd; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; diff --git a/api/src/org/apache/cloudstack/api/user/account/command/ListAccountsCmd.java b/api/src/org/apache/cloudstack/api/command/user/account/ListAccountsCmd.java similarity index 98% rename from api/src/org/apache/cloudstack/api/user/account/command/ListAccountsCmd.java rename to api/src/org/apache/cloudstack/api/command/user/account/ListAccountsCmd.java index 1a412859b73..c6d9adb6a35 100755 --- a/api/src/org/apache/cloudstack/api/user/account/command/ListAccountsCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/account/ListAccountsCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.user.account.command; +package org.apache.cloudstack.api.command.user.account; import java.util.ArrayList; import java.util.List; diff --git a/api/src/org/apache/cloudstack/api/user/account/command/ListProjectAccountsCmd.java b/api/src/org/apache/cloudstack/api/command/user/account/ListProjectAccountsCmd.java similarity index 98% rename from api/src/org/apache/cloudstack/api/user/account/command/ListProjectAccountsCmd.java rename to api/src/org/apache/cloudstack/api/command/user/account/ListProjectAccountsCmd.java index 3ad7fe644a0..f4850165cc5 100644 --- a/api/src/org/apache/cloudstack/api/user/account/command/ListProjectAccountsCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/account/ListProjectAccountsCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.user.account.command; +package org.apache.cloudstack.api.command.user.account; import java.util.ArrayList; import java.util.List; diff --git a/api/src/org/apache/cloudstack/api/user/address/command/AssociateIPAddrCmd.java b/api/src/org/apache/cloudstack/api/command/user/address/AssociateIPAddrCmd.java similarity index 99% rename from api/src/org/apache/cloudstack/api/user/address/command/AssociateIPAddrCmd.java rename to api/src/org/apache/cloudstack/api/command/user/address/AssociateIPAddrCmd.java index ca98a4bc6bc..806a90d504c 100644 --- a/api/src/org/apache/cloudstack/api/user/address/command/AssociateIPAddrCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/address/AssociateIPAddrCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.user.address.command; +package org.apache.cloudstack.api.command.user.address; import java.util.List; diff --git a/api/src/org/apache/cloudstack/api/user/address/command/DisassociateIPAddrCmd.java b/api/src/org/apache/cloudstack/api/command/user/address/DisassociateIPAddrCmd.java similarity index 98% rename from api/src/org/apache/cloudstack/api/user/address/command/DisassociateIPAddrCmd.java rename to api/src/org/apache/cloudstack/api/command/user/address/DisassociateIPAddrCmd.java index 265b296747a..de0a5d894ce 100644 --- a/api/src/org/apache/cloudstack/api/user/address/command/DisassociateIPAddrCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/address/DisassociateIPAddrCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.user.address.command; +package org.apache.cloudstack.api.command.user.address; import org.apache.log4j.Logger; diff --git a/api/src/org/apache/cloudstack/api/user/address/command/ListPublicIpAddressesCmd.java b/api/src/org/apache/cloudstack/api/command/user/address/ListPublicIpAddressesCmd.java similarity index 99% rename from api/src/org/apache/cloudstack/api/user/address/command/ListPublicIpAddressesCmd.java rename to api/src/org/apache/cloudstack/api/command/user/address/ListPublicIpAddressesCmd.java index 85201f8da31..f889a9d3018 100644 --- a/api/src/org/apache/cloudstack/api/user/address/command/ListPublicIpAddressesCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/address/ListPublicIpAddressesCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.user.address.command; +package org.apache.cloudstack.api.command.user.address; import java.util.ArrayList; import java.util.List; diff --git a/api/src/org/apache/cloudstack/api/user/autoscale/command/CreateAutoScalePolicyCmd.java b/api/src/org/apache/cloudstack/api/command/user/autoscale/CreateAutoScalePolicyCmd.java similarity index 99% rename from api/src/org/apache/cloudstack/api/user/autoscale/command/CreateAutoScalePolicyCmd.java rename to api/src/org/apache/cloudstack/api/command/user/autoscale/CreateAutoScalePolicyCmd.java index 75cead97a3d..d88fe4f51b4 100644 --- a/api/src/org/apache/cloudstack/api/user/autoscale/command/CreateAutoScalePolicyCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/autoscale/CreateAutoScalePolicyCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.user.autoscale.command; +package org.apache.cloudstack.api.command.user.autoscale; import java.util.List; diff --git a/api/src/org/apache/cloudstack/api/user/autoscale/command/CreateAutoScaleVmGroupCmd.java b/api/src/org/apache/cloudstack/api/command/user/autoscale/CreateAutoScaleVmGroupCmd.java similarity index 99% rename from api/src/org/apache/cloudstack/api/user/autoscale/command/CreateAutoScaleVmGroupCmd.java rename to api/src/org/apache/cloudstack/api/command/user/autoscale/CreateAutoScaleVmGroupCmd.java index 34042075bca..411458cc472 100644 --- a/api/src/org/apache/cloudstack/api/user/autoscale/command/CreateAutoScaleVmGroupCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/autoscale/CreateAutoScaleVmGroupCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.user.autoscale.command; +package org.apache.cloudstack.api.command.user.autoscale; import java.util.List; diff --git a/api/src/org/apache/cloudstack/api/user/autoscale/command/CreateAutoScaleVmProfileCmd.java b/api/src/org/apache/cloudstack/api/command/user/autoscale/CreateAutoScaleVmProfileCmd.java similarity index 99% rename from api/src/org/apache/cloudstack/api/user/autoscale/command/CreateAutoScaleVmProfileCmd.java rename to api/src/org/apache/cloudstack/api/command/user/autoscale/CreateAutoScaleVmProfileCmd.java index 74c08dfd9f9..d152c61122b 100644 --- a/api/src/org/apache/cloudstack/api/user/autoscale/command/CreateAutoScaleVmProfileCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/autoscale/CreateAutoScaleVmProfileCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.user.autoscale.command; +package org.apache.cloudstack.api.command.user.autoscale; import java.util.HashMap; import java.util.Map; diff --git a/api/src/org/apache/cloudstack/api/user/autoscale/command/CreateConditionCmd.java b/api/src/org/apache/cloudstack/api/command/user/autoscale/CreateConditionCmd.java similarity index 98% rename from api/src/org/apache/cloudstack/api/user/autoscale/command/CreateConditionCmd.java rename to api/src/org/apache/cloudstack/api/command/user/autoscale/CreateConditionCmd.java index 2884f8e3a90..f48653d6efc 100644 --- a/api/src/org/apache/cloudstack/api/user/autoscale/command/CreateConditionCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/autoscale/CreateConditionCmd.java @@ -15,7 +15,7 @@ // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.user.autoscale.command; +package org.apache.cloudstack.api.command.user.autoscale; import org.apache.log4j.Logger; diff --git a/api/src/org/apache/cloudstack/api/user/autoscale/command/DeleteAutoScalePolicyCmd.java b/api/src/org/apache/cloudstack/api/command/user/autoscale/DeleteAutoScalePolicyCmd.java similarity index 98% rename from api/src/org/apache/cloudstack/api/user/autoscale/command/DeleteAutoScalePolicyCmd.java rename to api/src/org/apache/cloudstack/api/command/user/autoscale/DeleteAutoScalePolicyCmd.java index a6228b4be76..d13783b1f8b 100644 --- a/api/src/org/apache/cloudstack/api/user/autoscale/command/DeleteAutoScalePolicyCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/autoscale/DeleteAutoScalePolicyCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.user.autoscale.command; +package org.apache.cloudstack.api.command.user.autoscale; import org.apache.log4j.Logger; diff --git a/api/src/org/apache/cloudstack/api/user/autoscale/command/DeleteAutoScaleVmGroupCmd.java b/api/src/org/apache/cloudstack/api/command/user/autoscale/DeleteAutoScaleVmGroupCmd.java similarity index 98% rename from api/src/org/apache/cloudstack/api/user/autoscale/command/DeleteAutoScaleVmGroupCmd.java rename to api/src/org/apache/cloudstack/api/command/user/autoscale/DeleteAutoScaleVmGroupCmd.java index b1198c94c35..cb4de7f524d 100644 --- a/api/src/org/apache/cloudstack/api/user/autoscale/command/DeleteAutoScaleVmGroupCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/autoscale/DeleteAutoScaleVmGroupCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.user.autoscale.command; +package org.apache.cloudstack.api.command.user.autoscale; import org.apache.log4j.Logger; diff --git a/api/src/org/apache/cloudstack/api/user/autoscale/command/DeleteAutoScaleVmProfileCmd.java b/api/src/org/apache/cloudstack/api/command/user/autoscale/DeleteAutoScaleVmProfileCmd.java similarity index 98% rename from api/src/org/apache/cloudstack/api/user/autoscale/command/DeleteAutoScaleVmProfileCmd.java rename to api/src/org/apache/cloudstack/api/command/user/autoscale/DeleteAutoScaleVmProfileCmd.java index a8565dc8097..1d6caf2b3c9 100644 --- a/api/src/org/apache/cloudstack/api/user/autoscale/command/DeleteAutoScaleVmProfileCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/autoscale/DeleteAutoScaleVmProfileCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.user.autoscale.command; +package org.apache.cloudstack.api.command.user.autoscale; import org.apache.log4j.Logger; diff --git a/api/src/org/apache/cloudstack/api/user/autoscale/command/DeleteConditionCmd.java b/api/src/org/apache/cloudstack/api/command/user/autoscale/DeleteConditionCmd.java similarity index 98% rename from api/src/org/apache/cloudstack/api/user/autoscale/command/DeleteConditionCmd.java rename to api/src/org/apache/cloudstack/api/command/user/autoscale/DeleteConditionCmd.java index 26c23a5ef83..43f0fc1cdd5 100644 --- a/api/src/org/apache/cloudstack/api/user/autoscale/command/DeleteConditionCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/autoscale/DeleteConditionCmd.java @@ -15,7 +15,7 @@ // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.user.autoscale.command; +package org.apache.cloudstack.api.command.user.autoscale; import org.apache.log4j.Logger; diff --git a/api/src/org/apache/cloudstack/api/user/autoscale/command/DisableAutoScaleVmGroupCmd.java b/api/src/org/apache/cloudstack/api/command/user/autoscale/DisableAutoScaleVmGroupCmd.java similarity index 98% rename from api/src/org/apache/cloudstack/api/user/autoscale/command/DisableAutoScaleVmGroupCmd.java rename to api/src/org/apache/cloudstack/api/command/user/autoscale/DisableAutoScaleVmGroupCmd.java index ba87c586572..7552e41182a 100644 --- a/api/src/org/apache/cloudstack/api/user/autoscale/command/DisableAutoScaleVmGroupCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/autoscale/DisableAutoScaleVmGroupCmd.java @@ -15,7 +15,7 @@ // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.user.autoscale.command; +package org.apache.cloudstack.api.command.user.autoscale; import org.apache.log4j.Logger; diff --git a/api/src/org/apache/cloudstack/api/user/autoscale/command/EnableAutoScaleVmGroupCmd.java b/api/src/org/apache/cloudstack/api/command/user/autoscale/EnableAutoScaleVmGroupCmd.java similarity index 98% rename from api/src/org/apache/cloudstack/api/user/autoscale/command/EnableAutoScaleVmGroupCmd.java rename to api/src/org/apache/cloudstack/api/command/user/autoscale/EnableAutoScaleVmGroupCmd.java index 93039b0b204..9c63327aad3 100644 --- a/api/src/org/apache/cloudstack/api/user/autoscale/command/EnableAutoScaleVmGroupCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/autoscale/EnableAutoScaleVmGroupCmd.java @@ -15,7 +15,7 @@ // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.user.autoscale.command; +package org.apache.cloudstack.api.command.user.autoscale; import org.apache.log4j.Logger; diff --git a/api/src/org/apache/cloudstack/api/user/autoscale/command/ListAutoScalePoliciesCmd.java b/api/src/org/apache/cloudstack/api/command/user/autoscale/ListAutoScalePoliciesCmd.java similarity index 98% rename from api/src/org/apache/cloudstack/api/user/autoscale/command/ListAutoScalePoliciesCmd.java rename to api/src/org/apache/cloudstack/api/command/user/autoscale/ListAutoScalePoliciesCmd.java index 57db5be3933..e8bc8318b75 100644 --- a/api/src/org/apache/cloudstack/api/user/autoscale/command/ListAutoScalePoliciesCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/autoscale/ListAutoScalePoliciesCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.user.autoscale.command; +package org.apache.cloudstack.api.command.user.autoscale; import java.util.ArrayList; import java.util.List; diff --git a/api/src/org/apache/cloudstack/api/user/autoscale/command/ListAutoScaleVmGroupsCmd.java b/api/src/org/apache/cloudstack/api/command/user/autoscale/ListAutoScaleVmGroupsCmd.java similarity index 98% rename from api/src/org/apache/cloudstack/api/user/autoscale/command/ListAutoScaleVmGroupsCmd.java rename to api/src/org/apache/cloudstack/api/command/user/autoscale/ListAutoScaleVmGroupsCmd.java index adea921c696..37d0945a788 100644 --- a/api/src/org/apache/cloudstack/api/user/autoscale/command/ListAutoScaleVmGroupsCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/autoscale/ListAutoScaleVmGroupsCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.user.autoscale.command; +package org.apache.cloudstack.api.command.user.autoscale; import java.util.ArrayList; import java.util.List; diff --git a/api/src/org/apache/cloudstack/api/user/autoscale/command/ListAutoScaleVmProfilesCmd.java b/api/src/org/apache/cloudstack/api/command/user/autoscale/ListAutoScaleVmProfilesCmd.java similarity index 98% rename from api/src/org/apache/cloudstack/api/user/autoscale/command/ListAutoScaleVmProfilesCmd.java rename to api/src/org/apache/cloudstack/api/command/user/autoscale/ListAutoScaleVmProfilesCmd.java index aae7376eeb1..e8554d965b7 100644 --- a/api/src/org/apache/cloudstack/api/user/autoscale/command/ListAutoScaleVmProfilesCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/autoscale/ListAutoScaleVmProfilesCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.user.autoscale.command; +package org.apache.cloudstack.api.command.user.autoscale; import java.util.ArrayList; import java.util.List; diff --git a/api/src/org/apache/cloudstack/api/user/autoscale/command/ListConditionsCmd.java b/api/src/org/apache/cloudstack/api/command/user/autoscale/ListConditionsCmd.java similarity index 98% rename from api/src/org/apache/cloudstack/api/user/autoscale/command/ListConditionsCmd.java rename to api/src/org/apache/cloudstack/api/command/user/autoscale/ListConditionsCmd.java index d5dd067ba5d..be5b17ef16b 100644 --- a/api/src/org/apache/cloudstack/api/user/autoscale/command/ListConditionsCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/autoscale/ListConditionsCmd.java @@ -15,7 +15,7 @@ // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.user.autoscale.command; +package org.apache.cloudstack.api.command.user.autoscale; import java.util.ArrayList; import java.util.List; diff --git a/api/src/org/apache/cloudstack/api/user/autoscale/command/ListCountersCmd.java b/api/src/org/apache/cloudstack/api/command/user/autoscale/ListCountersCmd.java similarity index 98% rename from api/src/org/apache/cloudstack/api/user/autoscale/command/ListCountersCmd.java rename to api/src/org/apache/cloudstack/api/command/user/autoscale/ListCountersCmd.java index b55aeb5d964..abb2fc0504f 100644 --- a/api/src/org/apache/cloudstack/api/user/autoscale/command/ListCountersCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/autoscale/ListCountersCmd.java @@ -15,7 +15,7 @@ // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.user.autoscale.command; +package org.apache.cloudstack.api.command.user.autoscale; import java.util.ArrayList; import java.util.List; diff --git a/api/src/org/apache/cloudstack/api/user/autoscale/command/UpdateAutoScalePolicyCmd.java b/api/src/org/apache/cloudstack/api/command/user/autoscale/UpdateAutoScalePolicyCmd.java similarity index 98% rename from api/src/org/apache/cloudstack/api/user/autoscale/command/UpdateAutoScalePolicyCmd.java rename to api/src/org/apache/cloudstack/api/command/user/autoscale/UpdateAutoScalePolicyCmd.java index 01945f243a0..17ee90d6132 100644 --- a/api/src/org/apache/cloudstack/api/user/autoscale/command/UpdateAutoScalePolicyCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/autoscale/UpdateAutoScalePolicyCmd.java @@ -15,7 +15,7 @@ // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.user.autoscale.command; +package org.apache.cloudstack.api.command.user.autoscale; import java.util.List; diff --git a/api/src/org/apache/cloudstack/api/user/autoscale/command/UpdateAutoScaleVmGroupCmd.java b/api/src/org/apache/cloudstack/api/command/user/autoscale/UpdateAutoScaleVmGroupCmd.java similarity index 98% rename from api/src/org/apache/cloudstack/api/user/autoscale/command/UpdateAutoScaleVmGroupCmd.java rename to api/src/org/apache/cloudstack/api/command/user/autoscale/UpdateAutoScaleVmGroupCmd.java index 1d7911e6d70..d0f84e50232 100644 --- a/api/src/org/apache/cloudstack/api/user/autoscale/command/UpdateAutoScaleVmGroupCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/autoscale/UpdateAutoScaleVmGroupCmd.java @@ -15,7 +15,7 @@ // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.user.autoscale.command; +package org.apache.cloudstack.api.command.user.autoscale; import java.util.List; diff --git a/api/src/org/apache/cloudstack/api/user/autoscale/command/UpdateAutoScaleVmProfileCmd.java b/api/src/org/apache/cloudstack/api/command/user/autoscale/UpdateAutoScaleVmProfileCmd.java similarity index 98% rename from api/src/org/apache/cloudstack/api/user/autoscale/command/UpdateAutoScaleVmProfileCmd.java rename to api/src/org/apache/cloudstack/api/command/user/autoscale/UpdateAutoScaleVmProfileCmd.java index 08e0667575c..5f5d808e63f 100644 --- a/api/src/org/apache/cloudstack/api/user/autoscale/command/UpdateAutoScaleVmProfileCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/autoscale/UpdateAutoScaleVmProfileCmd.java @@ -15,7 +15,7 @@ // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.user.autoscale.command; +package org.apache.cloudstack.api.command.user.autoscale; import java.util.Map; diff --git a/api/src/org/apache/cloudstack/api/user/config/command/ListCapabilitiesCmd.java b/api/src/org/apache/cloudstack/api/command/user/config/ListCapabilitiesCmd.java similarity index 97% rename from api/src/org/apache/cloudstack/api/user/config/command/ListCapabilitiesCmd.java rename to api/src/org/apache/cloudstack/api/command/user/config/ListCapabilitiesCmd.java index 3b235ee38c0..d9f2195d76c 100644 --- a/api/src/org/apache/cloudstack/api/user/config/command/ListCapabilitiesCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/config/ListCapabilitiesCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.user.config.command; +package org.apache.cloudstack.api.command.user.config; import java.util.Map; diff --git a/api/src/org/apache/cloudstack/api/user/event/command/ListEventTypesCmd.java b/api/src/org/apache/cloudstack/api/command/user/event/ListEventTypesCmd.java similarity index 97% rename from api/src/org/apache/cloudstack/api/user/event/command/ListEventTypesCmd.java rename to api/src/org/apache/cloudstack/api/command/user/event/ListEventTypesCmd.java index 6cb385ab283..2828b32a82b 100644 --- a/api/src/org/apache/cloudstack/api/user/event/command/ListEventTypesCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/event/ListEventTypesCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.user.event.command; +package org.apache.cloudstack.api.command.user.event; import java.util.ArrayList; diff --git a/api/src/org/apache/cloudstack/api/user/event/command/ListEventsCmd.java b/api/src/org/apache/cloudstack/api/command/user/event/ListEventsCmd.java similarity index 95% rename from api/src/org/apache/cloudstack/api/user/event/command/ListEventsCmd.java rename to api/src/org/apache/cloudstack/api/command/user/event/ListEventsCmd.java index a16252dd1d6..769c97e17ac 100755 --- a/api/src/org/apache/cloudstack/api/user/event/command/ListEventsCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/event/ListEventsCmd.java @@ -14,9 +14,8 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.user.event.command; +package org.apache.cloudstack.api.command.user.event; -import java.util.ArrayList; import java.util.Date; import java.util.List; @@ -29,10 +28,7 @@ import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import com.cloud.api.response.EventResponse; import com.cloud.api.response.ListResponse; -import com.cloud.api.response.ResourceTagResponse; import com.cloud.api.view.vo.EventJoinVO; -import com.cloud.api.view.vo.ResourceTagJoinVO; -import com.cloud.event.Event; import com.cloud.utils.Pair; @Implementation(description="A command to list events.", responseObject=EventResponse.class) diff --git a/api/src/org/apache/cloudstack/api/user/firewall/command/CreateFirewallRuleCmd.java b/api/src/org/apache/cloudstack/api/command/user/firewall/CreateFirewallRuleCmd.java similarity index 99% rename from api/src/org/apache/cloudstack/api/user/firewall/command/CreateFirewallRuleCmd.java rename to api/src/org/apache/cloudstack/api/command/user/firewall/CreateFirewallRuleCmd.java index 17f2d2a3dea..4daf3f6ae75 100644 --- a/api/src/org/apache/cloudstack/api/user/firewall/command/CreateFirewallRuleCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/firewall/CreateFirewallRuleCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.user.firewall.command; +package org.apache.cloudstack.api.command.user.firewall; import java.util.ArrayList; import java.util.List; diff --git a/api/src/org/apache/cloudstack/api/user/firewall/command/CreatePortForwardingRuleCmd.java b/api/src/org/apache/cloudstack/api/command/user/firewall/CreatePortForwardingRuleCmd.java similarity index 99% rename from api/src/org/apache/cloudstack/api/user/firewall/command/CreatePortForwardingRuleCmd.java rename to api/src/org/apache/cloudstack/api/command/user/firewall/CreatePortForwardingRuleCmd.java index df0f4419a21..97ec651cd4c 100644 --- a/api/src/org/apache/cloudstack/api/user/firewall/command/CreatePortForwardingRuleCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/firewall/CreatePortForwardingRuleCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.user.firewall.command; +package org.apache.cloudstack.api.command.user.firewall; import java.util.List; diff --git a/api/src/org/apache/cloudstack/api/user/firewall/command/DeleteFirewallRuleCmd.java b/api/src/org/apache/cloudstack/api/command/user/firewall/DeleteFirewallRuleCmd.java similarity index 98% rename from api/src/org/apache/cloudstack/api/user/firewall/command/DeleteFirewallRuleCmd.java rename to api/src/org/apache/cloudstack/api/command/user/firewall/DeleteFirewallRuleCmd.java index 7d7ff58bb18..6f714b078db 100644 --- a/api/src/org/apache/cloudstack/api/user/firewall/command/DeleteFirewallRuleCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/firewall/DeleteFirewallRuleCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.user.firewall.command; +package org.apache.cloudstack.api.command.user.firewall; import org.apache.log4j.Logger; diff --git a/api/src/org/apache/cloudstack/api/user/firewall/command/DeletePortForwardingRuleCmd.java b/api/src/org/apache/cloudstack/api/command/user/firewall/DeletePortForwardingRuleCmd.java similarity index 98% rename from api/src/org/apache/cloudstack/api/user/firewall/command/DeletePortForwardingRuleCmd.java rename to api/src/org/apache/cloudstack/api/command/user/firewall/DeletePortForwardingRuleCmd.java index 880b87bf379..10b5f27fa29 100644 --- a/api/src/org/apache/cloudstack/api/user/firewall/command/DeletePortForwardingRuleCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/firewall/DeletePortForwardingRuleCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.user.firewall.command; +package org.apache.cloudstack.api.command.user.firewall; import org.apache.log4j.Logger; diff --git a/api/src/org/apache/cloudstack/api/user/firewall/command/ListFirewallRulesCmd.java b/api/src/org/apache/cloudstack/api/command/user/firewall/ListFirewallRulesCmd.java similarity index 98% rename from api/src/org/apache/cloudstack/api/user/firewall/command/ListFirewallRulesCmd.java rename to api/src/org/apache/cloudstack/api/command/user/firewall/ListFirewallRulesCmd.java index 2317a9fb169..20c908b8175 100644 --- a/api/src/org/apache/cloudstack/api/user/firewall/command/ListFirewallRulesCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/firewall/ListFirewallRulesCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.user.firewall.command; +package org.apache.cloudstack.api.command.user.firewall; import java.util.ArrayList; import java.util.List; diff --git a/api/src/org/apache/cloudstack/api/user/firewall/command/ListPortForwardingRulesCmd.java b/api/src/org/apache/cloudstack/api/command/user/firewall/ListPortForwardingRulesCmd.java similarity index 98% rename from api/src/org/apache/cloudstack/api/user/firewall/command/ListPortForwardingRulesCmd.java rename to api/src/org/apache/cloudstack/api/command/user/firewall/ListPortForwardingRulesCmd.java index b45fc350738..930133d00c2 100644 --- a/api/src/org/apache/cloudstack/api/user/firewall/command/ListPortForwardingRulesCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/firewall/ListPortForwardingRulesCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.user.firewall.command; +package org.apache.cloudstack.api.command.user.firewall; import java.util.ArrayList; import java.util.List; diff --git a/api/src/org/apache/cloudstack/api/user/firewall/command/UpdatePortForwardingRuleCmd.java b/api/src/org/apache/cloudstack/api/command/user/firewall/UpdatePortForwardingRuleCmd.java similarity index 98% rename from api/src/org/apache/cloudstack/api/user/firewall/command/UpdatePortForwardingRuleCmd.java rename to api/src/org/apache/cloudstack/api/command/user/firewall/UpdatePortForwardingRuleCmd.java index 654e6af6259..d7599c65993 100644 --- a/api/src/org/apache/cloudstack/api/user/firewall/command/UpdatePortForwardingRuleCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/firewall/UpdatePortForwardingRuleCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.user.firewall.command; +package org.apache.cloudstack.api.command.user.firewall; import org.apache.log4j.Logger; diff --git a/api/src/org/apache/cloudstack/api/user/guest/command/ListGuestOsCategoriesCmd.java b/api/src/org/apache/cloudstack/api/command/user/guest/ListGuestOsCategoriesCmd.java similarity index 96% rename from api/src/org/apache/cloudstack/api/user/guest/command/ListGuestOsCategoriesCmd.java rename to api/src/org/apache/cloudstack/api/command/user/guest/ListGuestOsCategoriesCmd.java index 134d6ed22fb..6a8d00bfc84 100644 --- a/api/src/org/apache/cloudstack/api/user/guest/command/ListGuestOsCategoriesCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/guest/ListGuestOsCategoriesCmd.java @@ -14,12 +14,12 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.user.guest.command; +package org.apache.cloudstack.api.command.user.guest; import java.util.ArrayList; import java.util.List; -import org.apache.cloudstack.api.user.iso.command.ListIsosCmd; +import org.apache.cloudstack.api.command.user.iso.ListIsosCmd; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; diff --git a/api/src/org/apache/cloudstack/api/user/guest/command/ListGuestOsCmd.java b/api/src/org/apache/cloudstack/api/command/user/guest/ListGuestOsCmd.java similarity index 97% rename from api/src/org/apache/cloudstack/api/user/guest/command/ListGuestOsCmd.java rename to api/src/org/apache/cloudstack/api/command/user/guest/ListGuestOsCmd.java index f08efafdb9f..1bed7cabe2e 100644 --- a/api/src/org/apache/cloudstack/api/user/guest/command/ListGuestOsCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/guest/ListGuestOsCmd.java @@ -14,12 +14,12 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.user.guest.command; +package org.apache.cloudstack.api.command.user.guest; import java.util.ArrayList; import java.util.List; -import org.apache.cloudstack.api.user.iso.command.ListIsosCmd; +import org.apache.cloudstack.api.command.user.iso.ListIsosCmd; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; diff --git a/api/src/org/apache/cloudstack/api/user/iso/command/AttachIsoCmd.java b/api/src/org/apache/cloudstack/api/command/user/iso/AttachIsoCmd.java similarity index 98% rename from api/src/org/apache/cloudstack/api/user/iso/command/AttachIsoCmd.java rename to api/src/org/apache/cloudstack/api/command/user/iso/AttachIsoCmd.java index 7f799c8f882..8fdfb3dbee8 100755 --- a/api/src/org/apache/cloudstack/api/user/iso/command/AttachIsoCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/iso/AttachIsoCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.user.iso.command; +package org.apache.cloudstack.api.command.user.iso; import org.apache.cloudstack.api.user.vm.command.DeployVMCmd; import org.apache.log4j.Logger; diff --git a/api/src/org/apache/cloudstack/api/user/iso/command/DeleteIsoCmd.java b/api/src/org/apache/cloudstack/api/command/user/iso/DeleteIsoCmd.java similarity index 98% rename from api/src/org/apache/cloudstack/api/user/iso/command/DeleteIsoCmd.java rename to api/src/org/apache/cloudstack/api/command/user/iso/DeleteIsoCmd.java index ba94b6693c9..b3c47202bc3 100755 --- a/api/src/org/apache/cloudstack/api/user/iso/command/DeleteIsoCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/iso/DeleteIsoCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.user.iso.command; +package org.apache.cloudstack.api.command.user.iso; import org.apache.log4j.Logger; diff --git a/api/src/org/apache/cloudstack/api/user/iso/command/DetachIsoCmd.java b/api/src/org/apache/cloudstack/api/command/user/iso/DetachIsoCmd.java similarity index 98% rename from api/src/org/apache/cloudstack/api/user/iso/command/DetachIsoCmd.java rename to api/src/org/apache/cloudstack/api/command/user/iso/DetachIsoCmd.java index 64334adbd86..58c6bc4959b 100755 --- a/api/src/org/apache/cloudstack/api/user/iso/command/DetachIsoCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/iso/DetachIsoCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.user.iso.command; +package org.apache.cloudstack.api.command.user.iso; import org.apache.cloudstack.api.user.vm.command.DeployVMCmd; import org.apache.log4j.Logger; diff --git a/api/src/org/apache/cloudstack/api/user/iso/command/ExtractIsoCmd.java b/api/src/org/apache/cloudstack/api/command/user/iso/ExtractIsoCmd.java similarity index 98% rename from api/src/org/apache/cloudstack/api/user/iso/command/ExtractIsoCmd.java rename to api/src/org/apache/cloudstack/api/command/user/iso/ExtractIsoCmd.java index 13a833f6d5a..ac595503225 100755 --- a/api/src/org/apache/cloudstack/api/user/iso/command/ExtractIsoCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/iso/ExtractIsoCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.user.iso.command; +package org.apache.cloudstack.api.command.user.iso; import org.apache.log4j.Logger; diff --git a/api/src/org/apache/cloudstack/api/user/iso/command/ListIsoPermissionsCmd.java b/api/src/org/apache/cloudstack/api/command/user/iso/ListIsoPermissionsCmd.java similarity index 96% rename from api/src/org/apache/cloudstack/api/user/iso/command/ListIsoPermissionsCmd.java rename to api/src/org/apache/cloudstack/api/command/user/iso/ListIsoPermissionsCmd.java index b047689b6e6..45ca87552a7 100644 --- a/api/src/org/apache/cloudstack/api/user/iso/command/ListIsoPermissionsCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/iso/ListIsoPermissionsCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.user.iso.command; +package org.apache.cloudstack.api.command.user.iso; import com.cloud.api.commands.ListTemplateOrIsoPermissionsCmd; import org.apache.log4j.Logger; diff --git a/api/src/org/apache/cloudstack/api/user/iso/command/ListIsosCmd.java b/api/src/org/apache/cloudstack/api/command/user/iso/ListIsosCmd.java similarity index 99% rename from api/src/org/apache/cloudstack/api/user/iso/command/ListIsosCmd.java rename to api/src/org/apache/cloudstack/api/command/user/iso/ListIsosCmd.java index 4a5f996aaef..0c1ae2223cf 100755 --- a/api/src/org/apache/cloudstack/api/user/iso/command/ListIsosCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/iso/ListIsosCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.user.iso.command; +package org.apache.cloudstack.api.command.user.iso; import java.util.ArrayList; import java.util.List; diff --git a/api/src/org/apache/cloudstack/api/user/iso/command/RegisterIsoCmd.java b/api/src/org/apache/cloudstack/api/command/user/iso/RegisterIsoCmd.java similarity index 99% rename from api/src/org/apache/cloudstack/api/user/iso/command/RegisterIsoCmd.java rename to api/src/org/apache/cloudstack/api/command/user/iso/RegisterIsoCmd.java index cedaa869886..3aea186c9fd 100755 --- a/api/src/org/apache/cloudstack/api/user/iso/command/RegisterIsoCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/iso/RegisterIsoCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.user.iso.command; +package org.apache.cloudstack.api.command.user.iso; import java.util.List; diff --git a/api/src/org/apache/cloudstack/api/user/iso/command/UpdateIsoCmd.java b/api/src/org/apache/cloudstack/api/command/user/iso/UpdateIsoCmd.java similarity index 98% rename from api/src/org/apache/cloudstack/api/user/iso/command/UpdateIsoCmd.java rename to api/src/org/apache/cloudstack/api/command/user/iso/UpdateIsoCmd.java index eb83260d5f1..f2c8dbfaf5b 100755 --- a/api/src/org/apache/cloudstack/api/user/iso/command/UpdateIsoCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/iso/UpdateIsoCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.user.iso.command; +package org.apache.cloudstack.api.command.user.iso; import com.cloud.api.commands.UpdateTemplateOrIsoCmd; import org.apache.log4j.Logger; diff --git a/api/src/org/apache/cloudstack/api/user/iso/command/UpdateIsoPermissionsCmd.java b/api/src/org/apache/cloudstack/api/command/user/iso/UpdateIsoPermissionsCmd.java similarity index 97% rename from api/src/org/apache/cloudstack/api/user/iso/command/UpdateIsoPermissionsCmd.java rename to api/src/org/apache/cloudstack/api/command/user/iso/UpdateIsoPermissionsCmd.java index f657b66c6e0..d5199d8be04 100644 --- a/api/src/org/apache/cloudstack/api/user/iso/command/UpdateIsoPermissionsCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/iso/UpdateIsoPermissionsCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.user.iso.command; +package org.apache.cloudstack.api.command.user.iso; import com.cloud.api.commands.UpdateTemplateOrIsoPermissionsCmd; import org.apache.log4j.Logger; diff --git a/api/src/org/apache/cloudstack/api/user/job/command/ListAsyncJobsCmd.java b/api/src/org/apache/cloudstack/api/command/user/job/ListAsyncJobsCmd.java similarity index 98% rename from api/src/org/apache/cloudstack/api/user/job/command/ListAsyncJobsCmd.java rename to api/src/org/apache/cloudstack/api/command/user/job/ListAsyncJobsCmd.java index addaa12a67d..471c5436113 100644 --- a/api/src/org/apache/cloudstack/api/user/job/command/ListAsyncJobsCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/job/ListAsyncJobsCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.user.job.command; +package org.apache.cloudstack.api.command.user.job; import java.util.ArrayList; import java.util.Date; diff --git a/api/src/org/apache/cloudstack/api/user/job/command/QueryAsyncJobResultCmd.java b/api/src/org/apache/cloudstack/api/command/user/job/QueryAsyncJobResultCmd.java similarity index 98% rename from api/src/org/apache/cloudstack/api/user/job/command/QueryAsyncJobResultCmd.java rename to api/src/org/apache/cloudstack/api/command/user/job/QueryAsyncJobResultCmd.java index defeab7fab4..0eb7e345cd0 100644 --- a/api/src/org/apache/cloudstack/api/user/job/command/QueryAsyncJobResultCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/job/QueryAsyncJobResultCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.user.job.command; +package org.apache.cloudstack.api.command.user.job; import org.apache.log4j.Logger; diff --git a/api/src/org/apache/cloudstack/api/user/lb/command/AssignToLoadBalancerRuleCmd.java b/api/src/org/apache/cloudstack/api/command/user/loadbalancer/AssignToLoadBalancerRuleCmd.java similarity index 98% rename from api/src/org/apache/cloudstack/api/user/lb/command/AssignToLoadBalancerRuleCmd.java rename to api/src/org/apache/cloudstack/api/command/user/loadbalancer/AssignToLoadBalancerRuleCmd.java index fae88a65c26..8395bb1d5cb 100644 --- a/api/src/org/apache/cloudstack/api/user/lb/command/AssignToLoadBalancerRuleCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/loadbalancer/AssignToLoadBalancerRuleCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.user.lb.command; +package org.apache.cloudstack.api.command.user.loadbalancer; import java.util.List; diff --git a/api/src/org/apache/cloudstack/api/user/lb/command/CreateLBStickinessPolicyCmd.java b/api/src/org/apache/cloudstack/api/command/user/loadbalancer/CreateLBStickinessPolicyCmd.java similarity index 99% rename from api/src/org/apache/cloudstack/api/user/lb/command/CreateLBStickinessPolicyCmd.java rename to api/src/org/apache/cloudstack/api/command/user/loadbalancer/CreateLBStickinessPolicyCmd.java index 866422a4e0b..99aeed7bd8c 100644 --- a/api/src/org/apache/cloudstack/api/user/lb/command/CreateLBStickinessPolicyCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/loadbalancer/CreateLBStickinessPolicyCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.user.lb.command; +package org.apache.cloudstack.api.command.user.loadbalancer; import java.util.Map; diff --git a/api/src/org/apache/cloudstack/api/user/lb/command/CreateLoadBalancerRuleCmd.java b/api/src/org/apache/cloudstack/api/command/user/loadbalancer/CreateLoadBalancerRuleCmd.java similarity index 99% rename from api/src/org/apache/cloudstack/api/user/lb/command/CreateLoadBalancerRuleCmd.java rename to api/src/org/apache/cloudstack/api/command/user/loadbalancer/CreateLoadBalancerRuleCmd.java index bacf54de5e0..1183f5b49c6 100644 --- a/api/src/org/apache/cloudstack/api/user/lb/command/CreateLoadBalancerRuleCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/loadbalancer/CreateLoadBalancerRuleCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.user.lb.command; +package org.apache.cloudstack.api.command.user.loadbalancer; import java.util.List; diff --git a/api/src/org/apache/cloudstack/api/user/lb/command/DeleteLBStickinessPolicyCmd.java b/api/src/org/apache/cloudstack/api/command/user/loadbalancer/DeleteLBStickinessPolicyCmd.java similarity index 98% rename from api/src/org/apache/cloudstack/api/user/lb/command/DeleteLBStickinessPolicyCmd.java rename to api/src/org/apache/cloudstack/api/command/user/loadbalancer/DeleteLBStickinessPolicyCmd.java index f68ab8c0f82..8b5601fd828 100644 --- a/api/src/org/apache/cloudstack/api/user/lb/command/DeleteLBStickinessPolicyCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/loadbalancer/DeleteLBStickinessPolicyCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.user.lb.command; +package org.apache.cloudstack.api.command.user.loadbalancer; import org.apache.log4j.Logger; diff --git a/api/src/org/apache/cloudstack/api/user/lb/command/DeleteLoadBalancerRuleCmd.java b/api/src/org/apache/cloudstack/api/command/user/loadbalancer/DeleteLoadBalancerRuleCmd.java similarity index 98% rename from api/src/org/apache/cloudstack/api/user/lb/command/DeleteLoadBalancerRuleCmd.java rename to api/src/org/apache/cloudstack/api/command/user/loadbalancer/DeleteLoadBalancerRuleCmd.java index 2bff86b9e83..7713dc74b2c 100644 --- a/api/src/org/apache/cloudstack/api/user/lb/command/DeleteLoadBalancerRuleCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/loadbalancer/DeleteLoadBalancerRuleCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.user.lb.command; +package org.apache.cloudstack.api.command.user.loadbalancer; import org.apache.log4j.Logger; diff --git a/api/src/org/apache/cloudstack/api/user/lb/command/ListLBStickinessPoliciesCmd.java b/api/src/org/apache/cloudstack/api/command/user/loadbalancer/ListLBStickinessPoliciesCmd.java similarity index 98% rename from api/src/org/apache/cloudstack/api/user/lb/command/ListLBStickinessPoliciesCmd.java rename to api/src/org/apache/cloudstack/api/command/user/loadbalancer/ListLBStickinessPoliciesCmd.java index b4a351cbc6d..c0cb77af976 100644 --- a/api/src/org/apache/cloudstack/api/user/lb/command/ListLBStickinessPoliciesCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/loadbalancer/ListLBStickinessPoliciesCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.user.lb.command; +package org.apache.cloudstack.api.command.user.loadbalancer; import java.util.ArrayList; import java.util.List; diff --git a/api/src/org/apache/cloudstack/api/user/lb/command/ListLoadBalancerRuleInstancesCmd.java b/api/src/org/apache/cloudstack/api/command/user/loadbalancer/ListLoadBalancerRuleInstancesCmd.java similarity index 98% rename from api/src/org/apache/cloudstack/api/user/lb/command/ListLoadBalancerRuleInstancesCmd.java rename to api/src/org/apache/cloudstack/api/command/user/loadbalancer/ListLoadBalancerRuleInstancesCmd.java index 1b6577ebd5a..8e84e9c5ff0 100644 --- a/api/src/org/apache/cloudstack/api/user/lb/command/ListLoadBalancerRuleInstancesCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/loadbalancer/ListLoadBalancerRuleInstancesCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.user.lb.command; +package org.apache.cloudstack.api.command.user.loadbalancer; import java.util.ArrayList; import java.util.List; diff --git a/api/src/org/apache/cloudstack/api/user/lb/command/ListLoadBalancerRulesCmd.java b/api/src/org/apache/cloudstack/api/command/user/loadbalancer/ListLoadBalancerRulesCmd.java similarity index 98% rename from api/src/org/apache/cloudstack/api/user/lb/command/ListLoadBalancerRulesCmd.java rename to api/src/org/apache/cloudstack/api/command/user/loadbalancer/ListLoadBalancerRulesCmd.java index 0c1b9b0f223..2f014f6833a 100644 --- a/api/src/org/apache/cloudstack/api/user/lb/command/ListLoadBalancerRulesCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/loadbalancer/ListLoadBalancerRulesCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.user.lb.command; +package org.apache.cloudstack.api.command.user.loadbalancer; import java.util.ArrayList; import java.util.List; diff --git a/api/src/org/apache/cloudstack/api/user/lb/command/RemoveFromLoadBalancerRuleCmd.java b/api/src/org/apache/cloudstack/api/command/user/loadbalancer/RemoveFromLoadBalancerRuleCmd.java similarity index 98% rename from api/src/org/apache/cloudstack/api/user/lb/command/RemoveFromLoadBalancerRuleCmd.java rename to api/src/org/apache/cloudstack/api/command/user/loadbalancer/RemoveFromLoadBalancerRuleCmd.java index 9aeca0281d2..ae65d8d5ab6 100644 --- a/api/src/org/apache/cloudstack/api/user/lb/command/RemoveFromLoadBalancerRuleCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/loadbalancer/RemoveFromLoadBalancerRuleCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.user.lb.command; +package org.apache.cloudstack.api.command.user.loadbalancer; import java.util.List; diff --git a/api/src/org/apache/cloudstack/api/user/lb/command/UpdateLoadBalancerRuleCmd.java b/api/src/org/apache/cloudstack/api/command/user/loadbalancer/UpdateLoadBalancerRuleCmd.java similarity index 98% rename from api/src/org/apache/cloudstack/api/user/lb/command/UpdateLoadBalancerRuleCmd.java rename to api/src/org/apache/cloudstack/api/command/user/loadbalancer/UpdateLoadBalancerRuleCmd.java index a738c65f9b4..6c1b5a2a75e 100644 --- a/api/src/org/apache/cloudstack/api/user/lb/command/UpdateLoadBalancerRuleCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/loadbalancer/UpdateLoadBalancerRuleCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.user.lb.command; +package org.apache.cloudstack.api.command.user.loadbalancer; import org.apache.log4j.Logger; diff --git a/api/src/org/apache/cloudstack/api/user/nat/command/CreateIpForwardingRuleCmd.java b/api/src/org/apache/cloudstack/api/command/user/nat/CreateIpForwardingRuleCmd.java similarity index 99% rename from api/src/org/apache/cloudstack/api/user/nat/command/CreateIpForwardingRuleCmd.java rename to api/src/org/apache/cloudstack/api/command/user/nat/CreateIpForwardingRuleCmd.java index 8f4dff75fd9..6afa8fa7b61 100644 --- a/api/src/org/apache/cloudstack/api/user/nat/command/CreateIpForwardingRuleCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/nat/CreateIpForwardingRuleCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.user.nat.command; +package org.apache.cloudstack.api.command.user.nat; import java.util.List; diff --git a/api/src/org/apache/cloudstack/api/user/nat/command/DeleteIpForwardingRuleCmd.java b/api/src/org/apache/cloudstack/api/command/user/nat/DeleteIpForwardingRuleCmd.java similarity index 98% rename from api/src/org/apache/cloudstack/api/user/nat/command/DeleteIpForwardingRuleCmd.java rename to api/src/org/apache/cloudstack/api/command/user/nat/DeleteIpForwardingRuleCmd.java index aa0d87fe6d2..0986f98463f 100644 --- a/api/src/org/apache/cloudstack/api/user/nat/command/DeleteIpForwardingRuleCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/nat/DeleteIpForwardingRuleCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.user.nat.command; +package org.apache.cloudstack.api.command.user.nat; import org.apache.log4j.Logger; diff --git a/api/src/org/apache/cloudstack/api/user/nat/command/DisableStaticNatCmd.java b/api/src/org/apache/cloudstack/api/command/user/nat/DisableStaticNatCmd.java similarity index 97% rename from api/src/org/apache/cloudstack/api/user/nat/command/DisableStaticNatCmd.java rename to api/src/org/apache/cloudstack/api/command/user/nat/DisableStaticNatCmd.java index e228e713644..228cbd89fea 100644 --- a/api/src/org/apache/cloudstack/api/user/nat/command/DisableStaticNatCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/nat/DisableStaticNatCmd.java @@ -14,9 +14,9 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.user.nat.command; +package org.apache.cloudstack.api.command.user.nat; -import org.apache.cloudstack.api.user.firewall.command.DeletePortForwardingRuleCmd; +import org.apache.cloudstack.api.command.user.firewall.DeletePortForwardingRuleCmd; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; diff --git a/api/src/org/apache/cloudstack/api/user/nat/command/EnableStaticNatCmd.java b/api/src/org/apache/cloudstack/api/command/user/nat/EnableStaticNatCmd.java similarity index 97% rename from api/src/org/apache/cloudstack/api/user/nat/command/EnableStaticNatCmd.java rename to api/src/org/apache/cloudstack/api/command/user/nat/EnableStaticNatCmd.java index 3398077dcc1..b5fa549a145 100644 --- a/api/src/org/apache/cloudstack/api/user/nat/command/EnableStaticNatCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/nat/EnableStaticNatCmd.java @@ -14,9 +14,8 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.user.nat.command; +package org.apache.cloudstack.api.command.user.nat; -import org.apache.cloudstack.api.user.nat.command.CreateIpForwardingRuleCmd; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; diff --git a/api/src/org/apache/cloudstack/api/user/nat/command/ListIpForwardingRulesCmd.java b/api/src/org/apache/cloudstack/api/command/user/nat/ListIpForwardingRulesCmd.java similarity index 98% rename from api/src/org/apache/cloudstack/api/user/nat/command/ListIpForwardingRulesCmd.java rename to api/src/org/apache/cloudstack/api/command/user/nat/ListIpForwardingRulesCmd.java index 50c240804bf..337a8795a3b 100644 --- a/api/src/org/apache/cloudstack/api/user/nat/command/ListIpForwardingRulesCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/nat/ListIpForwardingRulesCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.user.nat.command; +package org.apache.cloudstack.api.command.user.nat; import java.util.ArrayList; import java.util.List; diff --git a/api/src/org/apache/cloudstack/api/user/network/command/CreateNetworkACLCmd.java b/api/src/org/apache/cloudstack/api/command/user/network/CreateNetworkACLCmd.java similarity index 99% rename from api/src/org/apache/cloudstack/api/user/network/command/CreateNetworkACLCmd.java rename to api/src/org/apache/cloudstack/api/command/user/network/CreateNetworkACLCmd.java index 89d5c85efc0..0e6a0838e1e 100644 --- a/api/src/org/apache/cloudstack/api/user/network/command/CreateNetworkACLCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/network/CreateNetworkACLCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.user.network.command; +package org.apache.cloudstack.api.command.user.network; import java.util.ArrayList; import java.util.List; diff --git a/api/src/org/apache/cloudstack/api/user/network/command/CreateNetworkCmd.java b/api/src/org/apache/cloudstack/api/command/user/network/CreateNetworkCmd.java similarity index 99% rename from api/src/org/apache/cloudstack/api/user/network/command/CreateNetworkCmd.java rename to api/src/org/apache/cloudstack/api/command/user/network/CreateNetworkCmd.java index cfa71dd1086..331664e21f0 100644 --- a/api/src/org/apache/cloudstack/api/user/network/command/CreateNetworkCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/network/CreateNetworkCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.user.network.command; +package org.apache.cloudstack.api.command.user.network; import org.apache.log4j.Logger; diff --git a/api/src/org/apache/cloudstack/api/user/network/command/DeleteNetworkACLCmd.java b/api/src/org/apache/cloudstack/api/command/user/network/DeleteNetworkACLCmd.java similarity index 98% rename from api/src/org/apache/cloudstack/api/user/network/command/DeleteNetworkACLCmd.java rename to api/src/org/apache/cloudstack/api/command/user/network/DeleteNetworkACLCmd.java index d34d07d5cc6..6aeed16d7f4 100644 --- a/api/src/org/apache/cloudstack/api/user/network/command/DeleteNetworkACLCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/network/DeleteNetworkACLCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.user.network.command; +package org.apache.cloudstack.api.command.user.network; import org.apache.log4j.Logger; diff --git a/api/src/org/apache/cloudstack/api/user/network/command/DeleteNetworkCmd.java b/api/src/org/apache/cloudstack/api/command/user/network/DeleteNetworkCmd.java similarity index 96% rename from api/src/org/apache/cloudstack/api/user/network/command/DeleteNetworkCmd.java rename to api/src/org/apache/cloudstack/api/command/user/network/DeleteNetworkCmd.java index f158e4321ab..8e47e7699b1 100644 --- a/api/src/org/apache/cloudstack/api/user/network/command/DeleteNetworkCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/network/DeleteNetworkCmd.java @@ -14,9 +14,9 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.user.network.command; +package org.apache.cloudstack.api.command.user.network; -import org.apache.cloudstack.api.admin.network.command.DeleteNetworkOfferingCmd; +import org.apache.cloudstack.api.command.admin.network.DeleteNetworkOfferingCmd; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; diff --git a/api/src/org/apache/cloudstack/api/user/network/command/ListNetworkACLsCmd.java b/api/src/org/apache/cloudstack/api/command/user/network/ListNetworkACLsCmd.java similarity index 98% rename from api/src/org/apache/cloudstack/api/user/network/command/ListNetworkACLsCmd.java rename to api/src/org/apache/cloudstack/api/command/user/network/ListNetworkACLsCmd.java index 4696ab8960d..a14066a689d 100644 --- a/api/src/org/apache/cloudstack/api/user/network/command/ListNetworkACLsCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/network/ListNetworkACLsCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.user.network.command; +package org.apache.cloudstack.api.command.user.network; import java.util.ArrayList; diff --git a/api/src/org/apache/cloudstack/api/user/network/command/ListNetworkOfferingsCmd.java b/api/src/org/apache/cloudstack/api/command/user/network/ListNetworkOfferingsCmd.java similarity index 99% rename from api/src/org/apache/cloudstack/api/user/network/command/ListNetworkOfferingsCmd.java rename to api/src/org/apache/cloudstack/api/command/user/network/ListNetworkOfferingsCmd.java index 71d760bd9af..33003423d8b 100644 --- a/api/src/org/apache/cloudstack/api/user/network/command/ListNetworkOfferingsCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/network/ListNetworkOfferingsCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.user.network.command; +package org.apache.cloudstack.api.command.user.network; import java.util.ArrayList; import java.util.List; diff --git a/api/src/org/apache/cloudstack/api/user/network/command/ListNetworksCmd.java b/api/src/org/apache/cloudstack/api/command/user/network/ListNetworksCmd.java similarity index 99% rename from api/src/org/apache/cloudstack/api/user/network/command/ListNetworksCmd.java rename to api/src/org/apache/cloudstack/api/command/user/network/ListNetworksCmd.java index 945fbb61926..e9be8c41439 100644 --- a/api/src/org/apache/cloudstack/api/user/network/command/ListNetworksCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/network/ListNetworksCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.user.network.command; +package org.apache.cloudstack.api.command.user.network; import java.util.ArrayList; import java.util.List; diff --git a/api/src/org/apache/cloudstack/api/user/network/command/RestartNetworkCmd.java b/api/src/org/apache/cloudstack/api/command/user/network/RestartNetworkCmd.java similarity index 98% rename from api/src/org/apache/cloudstack/api/user/network/command/RestartNetworkCmd.java rename to api/src/org/apache/cloudstack/api/command/user/network/RestartNetworkCmd.java index 5065937f101..f73fc5691e2 100644 --- a/api/src/org/apache/cloudstack/api/user/network/command/RestartNetworkCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/network/RestartNetworkCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.user.network.command; +package org.apache.cloudstack.api.command.user.network; import org.apache.log4j.Logger; diff --git a/api/src/org/apache/cloudstack/api/user/network/command/UpdateNetworkCmd.java b/api/src/org/apache/cloudstack/api/command/user/network/UpdateNetworkCmd.java similarity index 99% rename from api/src/org/apache/cloudstack/api/user/network/command/UpdateNetworkCmd.java rename to api/src/org/apache/cloudstack/api/command/user/network/UpdateNetworkCmd.java index 2b3dd29df50..4aafee5bc52 100644 --- a/api/src/org/apache/cloudstack/api/user/network/command/UpdateNetworkCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/network/UpdateNetworkCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.user.network.command; +package org.apache.cloudstack.api.command.user.network; import org.apache.log4j.Logger; diff --git a/api/src/org/apache/cloudstack/api/user/offering/command/ListDiskOfferingsCmd.java b/api/src/org/apache/cloudstack/api/command/user/offering/ListDiskOfferingsCmd.java similarity index 98% rename from api/src/org/apache/cloudstack/api/user/offering/command/ListDiskOfferingsCmd.java rename to api/src/org/apache/cloudstack/api/command/user/offering/ListDiskOfferingsCmd.java index 85d42496bdb..a9a4eb69eda 100644 --- a/api/src/org/apache/cloudstack/api/user/offering/command/ListDiskOfferingsCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/offering/ListDiskOfferingsCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.user.offering.command; +package org.apache.cloudstack.api.command.user.offering; import java.util.ArrayList; import java.util.List; diff --git a/api/src/org/apache/cloudstack/api/user/offering/command/ListServiceOfferingsCmd.java b/api/src/org/apache/cloudstack/api/command/user/offering/ListServiceOfferingsCmd.java similarity index 98% rename from api/src/org/apache/cloudstack/api/user/offering/command/ListServiceOfferingsCmd.java rename to api/src/org/apache/cloudstack/api/command/user/offering/ListServiceOfferingsCmd.java index e5c12661956..42aabc205aa 100644 --- a/api/src/org/apache/cloudstack/api/user/offering/command/ListServiceOfferingsCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/offering/ListServiceOfferingsCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.user.offering.command; +package org.apache.cloudstack.api.command.user.offering; import java.util.ArrayList; import java.util.List; diff --git a/api/src/org/apache/cloudstack/api/user/project/command/ActivateProjectCmd.java b/api/src/org/apache/cloudstack/api/command/user/project/ActivateProjectCmd.java similarity index 98% rename from api/src/org/apache/cloudstack/api/user/project/command/ActivateProjectCmd.java rename to api/src/org/apache/cloudstack/api/command/user/project/ActivateProjectCmd.java index b5526c6fe20..c44c0241988 100644 --- a/api/src/org/apache/cloudstack/api/user/project/command/ActivateProjectCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/project/ActivateProjectCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.user.project.command; +package org.apache.cloudstack.api.command.user.project; import org.apache.log4j.Logger; diff --git a/api/src/org/apache/cloudstack/api/user/project/command/CreateProjectCmd.java b/api/src/org/apache/cloudstack/api/command/user/project/CreateProjectCmd.java similarity index 98% rename from api/src/org/apache/cloudstack/api/user/project/command/CreateProjectCmd.java rename to api/src/org/apache/cloudstack/api/command/user/project/CreateProjectCmd.java index e66dc746358..9154b2633bb 100644 --- a/api/src/org/apache/cloudstack/api/user/project/command/CreateProjectCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/project/CreateProjectCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.user.project.command; +package org.apache.cloudstack.api.command.user.project; import org.apache.log4j.Logger; diff --git a/api/src/org/apache/cloudstack/api/user/project/command/DeleteProjectCmd.java b/api/src/org/apache/cloudstack/api/command/user/project/DeleteProjectCmd.java similarity index 98% rename from api/src/org/apache/cloudstack/api/user/project/command/DeleteProjectCmd.java rename to api/src/org/apache/cloudstack/api/command/user/project/DeleteProjectCmd.java index ca9e334d496..b0fb2b97763 100644 --- a/api/src/org/apache/cloudstack/api/user/project/command/DeleteProjectCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/project/DeleteProjectCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.user.project.command; +package org.apache.cloudstack.api.command.user.project; import org.apache.log4j.Logger; diff --git a/api/src/org/apache/cloudstack/api/user/project/command/DeleteProjectInvitationCmd.java b/api/src/org/apache/cloudstack/api/command/user/project/DeleteProjectInvitationCmd.java similarity index 98% rename from api/src/org/apache/cloudstack/api/user/project/command/DeleteProjectInvitationCmd.java rename to api/src/org/apache/cloudstack/api/command/user/project/DeleteProjectInvitationCmd.java index 9804bd60b67..76740734edd 100644 --- a/api/src/org/apache/cloudstack/api/user/project/command/DeleteProjectInvitationCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/project/DeleteProjectInvitationCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.user.project.command; +package org.apache.cloudstack.api.command.user.project; import org.apache.log4j.Logger; diff --git a/api/src/org/apache/cloudstack/api/user/project/command/ListProjectInvitationsCmd.java b/api/src/org/apache/cloudstack/api/command/user/project/ListProjectInvitationsCmd.java similarity index 98% rename from api/src/org/apache/cloudstack/api/user/project/command/ListProjectInvitationsCmd.java rename to api/src/org/apache/cloudstack/api/command/user/project/ListProjectInvitationsCmd.java index 276ff8c70c5..9083f03b61b 100644 --- a/api/src/org/apache/cloudstack/api/user/project/command/ListProjectInvitationsCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/project/ListProjectInvitationsCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.user.project.command; +package org.apache.cloudstack.api.command.user.project; import java.util.ArrayList; import java.util.List; diff --git a/api/src/org/apache/cloudstack/api/user/project/command/ListProjectsCmd.java b/api/src/org/apache/cloudstack/api/command/user/project/ListProjectsCmd.java similarity index 98% rename from api/src/org/apache/cloudstack/api/user/project/command/ListProjectsCmd.java rename to api/src/org/apache/cloudstack/api/command/user/project/ListProjectsCmd.java index d8afc64a3d3..649746664b1 100644 --- a/api/src/org/apache/cloudstack/api/user/project/command/ListProjectsCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/project/ListProjectsCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.user.project.command; +package org.apache.cloudstack.api.command.user.project; import java.util.ArrayList; import java.util.Collection; diff --git a/api/src/org/apache/cloudstack/api/user/project/command/SuspendProjectCmd.java b/api/src/org/apache/cloudstack/api/command/user/project/SuspendProjectCmd.java similarity index 98% rename from api/src/org/apache/cloudstack/api/user/project/command/SuspendProjectCmd.java rename to api/src/org/apache/cloudstack/api/command/user/project/SuspendProjectCmd.java index 4a60d5fce47..9542fa9dc78 100644 --- a/api/src/org/apache/cloudstack/api/user/project/command/SuspendProjectCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/project/SuspendProjectCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.user.project.command; +package org.apache.cloudstack.api.command.user.project; import org.apache.log4j.Logger; diff --git a/api/src/org/apache/cloudstack/api/user/project/command/UpdateProjectCmd.java b/api/src/org/apache/cloudstack/api/command/user/project/UpdateProjectCmd.java similarity index 98% rename from api/src/org/apache/cloudstack/api/user/project/command/UpdateProjectCmd.java rename to api/src/org/apache/cloudstack/api/command/user/project/UpdateProjectCmd.java index f0bfbdf4db1..071571b8f45 100644 --- a/api/src/org/apache/cloudstack/api/user/project/command/UpdateProjectCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/project/UpdateProjectCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.user.project.command; +package org.apache.cloudstack.api.command.user.project; import org.apache.log4j.Logger; diff --git a/api/src/org/apache/cloudstack/api/user/project/command/UpdateProjectInvitationCmd.java b/api/src/org/apache/cloudstack/api/command/user/project/UpdateProjectInvitationCmd.java similarity index 98% rename from api/src/org/apache/cloudstack/api/user/project/command/UpdateProjectInvitationCmd.java rename to api/src/org/apache/cloudstack/api/command/user/project/UpdateProjectInvitationCmd.java index 8c24b2c1ea2..1d9d7318d9e 100644 --- a/api/src/org/apache/cloudstack/api/user/project/command/UpdateProjectInvitationCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/project/UpdateProjectInvitationCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.user.project.command; +package org.apache.cloudstack.api.command.user.project; import org.apache.log4j.Logger; diff --git a/api/src/org/apache/cloudstack/api/user/resource/command/GetCloudIdentifierCmd.java b/api/src/org/apache/cloudstack/api/command/user/resource/GetCloudIdentifierCmd.java similarity index 98% rename from api/src/org/apache/cloudstack/api/user/resource/command/GetCloudIdentifierCmd.java rename to api/src/org/apache/cloudstack/api/command/user/resource/GetCloudIdentifierCmd.java index 09d8ecdcfe1..ca33036ad4c 100644 --- a/api/src/org/apache/cloudstack/api/user/resource/command/GetCloudIdentifierCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/resource/GetCloudIdentifierCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.user.resource.command; +package org.apache.cloudstack.api.command.user.resource; import java.util.ArrayList; diff --git a/api/src/org/apache/cloudstack/api/user/resource/command/ListHypervisorsCmd.java b/api/src/org/apache/cloudstack/api/command/user/resource/ListHypervisorsCmd.java similarity index 96% rename from api/src/org/apache/cloudstack/api/user/resource/command/ListHypervisorsCmd.java rename to api/src/org/apache/cloudstack/api/command/user/resource/ListHypervisorsCmd.java index 2f78aa8afd2..dd4bf989179 100644 --- a/api/src/org/apache/cloudstack/api/user/resource/command/ListHypervisorsCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/resource/ListHypervisorsCmd.java @@ -14,12 +14,12 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.user.resource.command; +package org.apache.cloudstack.api.command.user.resource; import java.util.ArrayList; import java.util.List; -import org.apache.cloudstack.api.admin.router.command.UpgradeRouterCmd; +import org.apache.cloudstack.api.command.admin.router.UpgradeRouterCmd; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; diff --git a/api/src/org/apache/cloudstack/api/user/resource/command/ListResourceLimitsCmd.java b/api/src/org/apache/cloudstack/api/command/user/resource/ListResourceLimitsCmd.java similarity index 98% rename from api/src/org/apache/cloudstack/api/user/resource/command/ListResourceLimitsCmd.java rename to api/src/org/apache/cloudstack/api/command/user/resource/ListResourceLimitsCmd.java index 49e29d67dd4..3e0d9a2ed08 100644 --- a/api/src/org/apache/cloudstack/api/user/resource/command/ListResourceLimitsCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/resource/ListResourceLimitsCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.user.resource.command; +package org.apache.cloudstack.api.command.user.resource; import java.util.ArrayList; import java.util.List; diff --git a/api/src/org/apache/cloudstack/api/user/resource/command/UpdateResourceCountCmd.java b/api/src/org/apache/cloudstack/api/command/user/resource/UpdateResourceCountCmd.java similarity index 99% rename from api/src/org/apache/cloudstack/api/user/resource/command/UpdateResourceCountCmd.java rename to api/src/org/apache/cloudstack/api/command/user/resource/UpdateResourceCountCmd.java index 53448c697cc..30888c7c2d7 100644 --- a/api/src/org/apache/cloudstack/api/user/resource/command/UpdateResourceCountCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/resource/UpdateResourceCountCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.user.resource.command; +package org.apache.cloudstack.api.command.user.resource; import java.util.ArrayList; import java.util.List; diff --git a/api/src/org/apache/cloudstack/api/user/resource/command/UpdateResourceLimitCmd.java b/api/src/org/apache/cloudstack/api/command/user/resource/UpdateResourceLimitCmd.java similarity index 98% rename from api/src/org/apache/cloudstack/api/user/resource/command/UpdateResourceLimitCmd.java rename to api/src/org/apache/cloudstack/api/command/user/resource/UpdateResourceLimitCmd.java index c1270762a55..743c8244911 100644 --- a/api/src/org/apache/cloudstack/api/user/resource/command/UpdateResourceLimitCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/resource/UpdateResourceLimitCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.user.resource.command; +package org.apache.cloudstack.api.command.user.resource; import org.apache.log4j.Logger; diff --git a/api/src/org/apache/cloudstack/api/user/securitygroup/command/AuthorizeSecurityGroupEgressCmd.java b/api/src/org/apache/cloudstack/api/command/user/securitygroup/AuthorizeSecurityGroupEgressCmd.java similarity index 99% rename from api/src/org/apache/cloudstack/api/user/securitygroup/command/AuthorizeSecurityGroupEgressCmd.java rename to api/src/org/apache/cloudstack/api/command/user/securitygroup/AuthorizeSecurityGroupEgressCmd.java index 207eb7d0cd2..ab9631810ab 100644 --- a/api/src/org/apache/cloudstack/api/user/securitygroup/command/AuthorizeSecurityGroupEgressCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/securitygroup/AuthorizeSecurityGroupEgressCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.user.securitygroup.command; +package org.apache.cloudstack.api.command.user.securitygroup; import java.util.Collection; import java.util.HashMap; diff --git a/api/src/org/apache/cloudstack/api/user/securitygroup/command/AuthorizeSecurityGroupIngressCmd.java b/api/src/org/apache/cloudstack/api/command/user/securitygroup/AuthorizeSecurityGroupIngressCmd.java similarity index 99% rename from api/src/org/apache/cloudstack/api/user/securitygroup/command/AuthorizeSecurityGroupIngressCmd.java rename to api/src/org/apache/cloudstack/api/command/user/securitygroup/AuthorizeSecurityGroupIngressCmd.java index 3ea5216f086..43e419a947a 100644 --- a/api/src/org/apache/cloudstack/api/user/securitygroup/command/AuthorizeSecurityGroupIngressCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/securitygroup/AuthorizeSecurityGroupIngressCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.user.securitygroup.command; +package org.apache.cloudstack.api.command.user.securitygroup; import java.util.Collection; import java.util.HashMap; diff --git a/api/src/org/apache/cloudstack/api/user/securitygroup/command/CreateSecurityGroupCmd.java b/api/src/org/apache/cloudstack/api/command/user/securitygroup/CreateSecurityGroupCmd.java similarity index 98% rename from api/src/org/apache/cloudstack/api/user/securitygroup/command/CreateSecurityGroupCmd.java rename to api/src/org/apache/cloudstack/api/command/user/securitygroup/CreateSecurityGroupCmd.java index a66ee5a8e1b..965df1972a0 100644 --- a/api/src/org/apache/cloudstack/api/user/securitygroup/command/CreateSecurityGroupCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/securitygroup/CreateSecurityGroupCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.user.securitygroup.command; +package org.apache.cloudstack.api.command.user.securitygroup; import org.apache.log4j.Logger; diff --git a/api/src/org/apache/cloudstack/api/user/securitygroup/command/DeleteSecurityGroupCmd.java b/api/src/org/apache/cloudstack/api/command/user/securitygroup/DeleteSecurityGroupCmd.java similarity index 98% rename from api/src/org/apache/cloudstack/api/user/securitygroup/command/DeleteSecurityGroupCmd.java rename to api/src/org/apache/cloudstack/api/command/user/securitygroup/DeleteSecurityGroupCmd.java index c48644f82ed..1300464b7e3 100644 --- a/api/src/org/apache/cloudstack/api/user/securitygroup/command/DeleteSecurityGroupCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/securitygroup/DeleteSecurityGroupCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.user.securitygroup.command; +package org.apache.cloudstack.api.command.user.securitygroup; import org.apache.log4j.Logger; diff --git a/api/src/org/apache/cloudstack/api/user/securitygroup/command/ListSecurityGroupsCmd.java b/api/src/org/apache/cloudstack/api/command/user/securitygroup/ListSecurityGroupsCmd.java similarity index 94% rename from api/src/org/apache/cloudstack/api/user/securitygroup/command/ListSecurityGroupsCmd.java rename to api/src/org/apache/cloudstack/api/command/user/securitygroup/ListSecurityGroupsCmd.java index 3859a1da3f7..c375c7a1970 100644 --- a/api/src/org/apache/cloudstack/api/user/securitygroup/command/ListSecurityGroupsCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/securitygroup/ListSecurityGroupsCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.user.securitygroup.command; +package org.apache.cloudstack.api.command.user.securitygroup; import java.util.List; @@ -25,13 +25,10 @@ import org.apache.cloudstack.api.BaseListTaggedResourcesCmd; import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; -import com.cloud.api.response.DomainRouterResponse; import com.cloud.api.response.ListResponse; import com.cloud.api.response.SecurityGroupResponse; -import com.cloud.api.view.vo.DomainRouterJoinVO; import com.cloud.api.view.vo.SecurityGroupJoinVO; import com.cloud.async.AsyncJob; -import com.cloud.network.security.SecurityGroupRules; import com.cloud.utils.Pair; @Implementation(description="Lists security groups", responseObject=SecurityGroupResponse.class) diff --git a/api/src/org/apache/cloudstack/api/user/securitygroup/command/RevokeSecurityGroupEgressCmd.java b/api/src/org/apache/cloudstack/api/command/user/securitygroup/RevokeSecurityGroupEgressCmd.java similarity index 98% rename from api/src/org/apache/cloudstack/api/user/securitygroup/command/RevokeSecurityGroupEgressCmd.java rename to api/src/org/apache/cloudstack/api/command/user/securitygroup/RevokeSecurityGroupEgressCmd.java index 8da03170aaa..809e089aa27 100644 --- a/api/src/org/apache/cloudstack/api/user/securitygroup/command/RevokeSecurityGroupEgressCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/securitygroup/RevokeSecurityGroupEgressCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.user.securitygroup.command; +package org.apache.cloudstack.api.command.user.securitygroup; import org.apache.log4j.Logger; diff --git a/api/src/org/apache/cloudstack/api/user/securitygroup/command/RevokeSecurityGroupIngressCmd.java b/api/src/org/apache/cloudstack/api/command/user/securitygroup/RevokeSecurityGroupIngressCmd.java similarity index 98% rename from api/src/org/apache/cloudstack/api/user/securitygroup/command/RevokeSecurityGroupIngressCmd.java rename to api/src/org/apache/cloudstack/api/command/user/securitygroup/RevokeSecurityGroupIngressCmd.java index b9ddc8632c5..b319d842697 100644 --- a/api/src/org/apache/cloudstack/api/user/securitygroup/command/RevokeSecurityGroupIngressCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/securitygroup/RevokeSecurityGroupIngressCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.user.securitygroup.command; +package org.apache.cloudstack.api.command.user.securitygroup; import org.apache.log4j.Logger; diff --git a/api/src/org/apache/cloudstack/api/user/snapshot/command/CreateSnapshotCmd.java b/api/src/org/apache/cloudstack/api/command/user/snapshot/CreateSnapshotCmd.java similarity index 99% rename from api/src/org/apache/cloudstack/api/user/snapshot/command/CreateSnapshotCmd.java rename to api/src/org/apache/cloudstack/api/command/user/snapshot/CreateSnapshotCmd.java index 443b53bb607..a685bd0abc7 100755 --- a/api/src/org/apache/cloudstack/api/user/snapshot/command/CreateSnapshotCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/snapshot/CreateSnapshotCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.user.snapshot.command; +package org.apache.cloudstack.api.command.user.snapshot; import org.apache.log4j.Logger; diff --git a/api/src/org/apache/cloudstack/api/user/snapshot/command/CreateSnapshotPolicyCmd.java b/api/src/org/apache/cloudstack/api/command/user/snapshot/CreateSnapshotPolicyCmd.java similarity index 99% rename from api/src/org/apache/cloudstack/api/user/snapshot/command/CreateSnapshotPolicyCmd.java rename to api/src/org/apache/cloudstack/api/command/user/snapshot/CreateSnapshotPolicyCmd.java index b025abe37f9..14cf553e1f2 100644 --- a/api/src/org/apache/cloudstack/api/user/snapshot/command/CreateSnapshotPolicyCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/snapshot/CreateSnapshotPolicyCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.user.snapshot.command; +package org.apache.cloudstack.api.command.user.snapshot; import org.apache.log4j.Logger; diff --git a/api/src/org/apache/cloudstack/api/user/snapshot/command/DeleteSnapshotCmd.java b/api/src/org/apache/cloudstack/api/command/user/snapshot/DeleteSnapshotCmd.java similarity index 98% rename from api/src/org/apache/cloudstack/api/user/snapshot/command/DeleteSnapshotCmd.java rename to api/src/org/apache/cloudstack/api/command/user/snapshot/DeleteSnapshotCmd.java index a9e172911b4..3e380a00464 100644 --- a/api/src/org/apache/cloudstack/api/user/snapshot/command/DeleteSnapshotCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/snapshot/DeleteSnapshotCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.user.snapshot.command; +package org.apache.cloudstack.api.command.user.snapshot; import org.apache.log4j.Logger; diff --git a/api/src/org/apache/cloudstack/api/user/snapshot/command/DeleteSnapshotPoliciesCmd.java b/api/src/org/apache/cloudstack/api/command/user/snapshot/DeleteSnapshotPoliciesCmd.java similarity index 98% rename from api/src/org/apache/cloudstack/api/user/snapshot/command/DeleteSnapshotPoliciesCmd.java rename to api/src/org/apache/cloudstack/api/command/user/snapshot/DeleteSnapshotPoliciesCmd.java index 6e3207603f9..053de7f2496 100755 --- a/api/src/org/apache/cloudstack/api/user/snapshot/command/DeleteSnapshotPoliciesCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/snapshot/DeleteSnapshotPoliciesCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.user.snapshot.command; +package org.apache.cloudstack.api.command.user.snapshot; import java.util.List; diff --git a/api/src/org/apache/cloudstack/api/user/snapshot/command/ListSnapshotPoliciesCmd.java b/api/src/org/apache/cloudstack/api/command/user/snapshot/ListSnapshotPoliciesCmd.java similarity index 98% rename from api/src/org/apache/cloudstack/api/user/snapshot/command/ListSnapshotPoliciesCmd.java rename to api/src/org/apache/cloudstack/api/command/user/snapshot/ListSnapshotPoliciesCmd.java index aea7eda5744..0b01e5ed41b 100644 --- a/api/src/org/apache/cloudstack/api/user/snapshot/command/ListSnapshotPoliciesCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/snapshot/ListSnapshotPoliciesCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.user.snapshot.command; +package org.apache.cloudstack.api.command.user.snapshot; import java.util.ArrayList; import java.util.List; diff --git a/api/src/org/apache/cloudstack/api/user/snapshot/command/ListSnapshotsCmd.java b/api/src/org/apache/cloudstack/api/command/user/snapshot/ListSnapshotsCmd.java similarity index 98% rename from api/src/org/apache/cloudstack/api/user/snapshot/command/ListSnapshotsCmd.java rename to api/src/org/apache/cloudstack/api/command/user/snapshot/ListSnapshotsCmd.java index 22890018808..bfda3ade4fa 100644 --- a/api/src/org/apache/cloudstack/api/user/snapshot/command/ListSnapshotsCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/snapshot/ListSnapshotsCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.user.snapshot.command; +package org.apache.cloudstack.api.command.user.snapshot; import java.util.ArrayList; import java.util.List; diff --git a/api/src/org/apache/cloudstack/api/user/ssh/command/CreateSSHKeyPairCmd.java b/api/src/org/apache/cloudstack/api/command/user/ssh/CreateSSHKeyPairCmd.java similarity index 98% rename from api/src/org/apache/cloudstack/api/user/ssh/command/CreateSSHKeyPairCmd.java rename to api/src/org/apache/cloudstack/api/command/user/ssh/CreateSSHKeyPairCmd.java index 10c57260e83..9be649d5ded 100644 --- a/api/src/org/apache/cloudstack/api/user/ssh/command/CreateSSHKeyPairCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/ssh/CreateSSHKeyPairCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.user.ssh.command; +package org.apache.cloudstack.api.command.user.ssh; import org.apache.log4j.Logger; diff --git a/api/src/org/apache/cloudstack/api/user/ssh/command/DeleteSSHKeyPairCmd.java b/api/src/org/apache/cloudstack/api/command/user/ssh/DeleteSSHKeyPairCmd.java similarity index 98% rename from api/src/org/apache/cloudstack/api/user/ssh/command/DeleteSSHKeyPairCmd.java rename to api/src/org/apache/cloudstack/api/command/user/ssh/DeleteSSHKeyPairCmd.java index d074afa7c9a..768a4dd082c 100644 --- a/api/src/org/apache/cloudstack/api/user/ssh/command/DeleteSSHKeyPairCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/ssh/DeleteSSHKeyPairCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.user.ssh.command; +package org.apache.cloudstack.api.command.user.ssh; import org.apache.log4j.Logger; diff --git a/api/src/org/apache/cloudstack/api/user/ssh/command/ListSSHKeyPairsCmd.java b/api/src/org/apache/cloudstack/api/command/user/ssh/ListSSHKeyPairsCmd.java similarity index 98% rename from api/src/org/apache/cloudstack/api/user/ssh/command/ListSSHKeyPairsCmd.java rename to api/src/org/apache/cloudstack/api/command/user/ssh/ListSSHKeyPairsCmd.java index 109c66d0094..ee2aa1894fc 100644 --- a/api/src/org/apache/cloudstack/api/user/ssh/command/ListSSHKeyPairsCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/ssh/ListSSHKeyPairsCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.user.ssh.command; +package org.apache.cloudstack.api.command.user.ssh; import java.util.ArrayList; import java.util.List; diff --git a/api/src/org/apache/cloudstack/api/user/ssh/command/RegisterSSHKeyPairCmd.java b/api/src/org/apache/cloudstack/api/command/user/ssh/RegisterSSHKeyPairCmd.java similarity index 98% rename from api/src/org/apache/cloudstack/api/user/ssh/command/RegisterSSHKeyPairCmd.java rename to api/src/org/apache/cloudstack/api/command/user/ssh/RegisterSSHKeyPairCmd.java index 9c4eb8cdeb9..6603578b721 100644 --- a/api/src/org/apache/cloudstack/api/user/ssh/command/RegisterSSHKeyPairCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/ssh/RegisterSSHKeyPairCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.user.ssh.command; +package org.apache.cloudstack.api.command.user.ssh; import org.apache.log4j.Logger; diff --git a/api/src/org/apache/cloudstack/api/user/tag/command/CreateTagsCmd.java b/api/src/org/apache/cloudstack/api/command/user/tag/CreateTagsCmd.java similarity index 98% rename from api/src/org/apache/cloudstack/api/user/tag/command/CreateTagsCmd.java rename to api/src/org/apache/cloudstack/api/command/user/tag/CreateTagsCmd.java index 99b51e9d205..0a2d3b3d3df 100644 --- a/api/src/org/apache/cloudstack/api/user/tag/command/CreateTagsCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/tag/CreateTagsCmd.java @@ -15,7 +15,7 @@ // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.user.tag.command; +package org.apache.cloudstack.api.command.user.tag; import java.util.Collection; import java.util.HashMap; diff --git a/api/src/org/apache/cloudstack/api/user/tag/command/DeleteTagsCmd.java b/api/src/org/apache/cloudstack/api/command/user/tag/DeleteTagsCmd.java similarity index 98% rename from api/src/org/apache/cloudstack/api/user/tag/command/DeleteTagsCmd.java rename to api/src/org/apache/cloudstack/api/command/user/tag/DeleteTagsCmd.java index 09d9a6900d3..2278384fc82 100644 --- a/api/src/org/apache/cloudstack/api/user/tag/command/DeleteTagsCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/tag/DeleteTagsCmd.java @@ -15,7 +15,7 @@ // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.user.tag.command; +package org.apache.cloudstack.api.command.user.tag; import java.util.Collection; import java.util.HashMap; diff --git a/api/src/org/apache/cloudstack/api/user/tag/command/ListTagsCmd.java b/api/src/org/apache/cloudstack/api/command/user/tag/ListTagsCmd.java similarity index 98% rename from api/src/org/apache/cloudstack/api/user/tag/command/ListTagsCmd.java rename to api/src/org/apache/cloudstack/api/command/user/tag/ListTagsCmd.java index 28f895b63ce..e0abc17460a 100644 --- a/api/src/org/apache/cloudstack/api/user/tag/command/ListTagsCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/tag/ListTagsCmd.java @@ -15,7 +15,7 @@ // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.user.tag.command; +package org.apache.cloudstack.api.command.user.tag; import java.util.ArrayList; import java.util.List; diff --git a/api/src/org/apache/cloudstack/api/user/template/command/CopyTemplateCmd.java b/api/src/org/apache/cloudstack/api/command/user/template/CopyTemplateCmd.java similarity index 98% rename from api/src/org/apache/cloudstack/api/user/template/command/CopyTemplateCmd.java rename to api/src/org/apache/cloudstack/api/command/user/template/CopyTemplateCmd.java index 6b00aee2704..0b8f7e43b84 100755 --- a/api/src/org/apache/cloudstack/api/user/template/command/CopyTemplateCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/template/CopyTemplateCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.user.template.command; +package org.apache.cloudstack.api.command.user.template; import java.util.List; diff --git a/api/src/org/apache/cloudstack/api/user/template/command/CreateTemplateCmd.java b/api/src/org/apache/cloudstack/api/command/user/template/CreateTemplateCmd.java similarity index 99% rename from api/src/org/apache/cloudstack/api/user/template/command/CreateTemplateCmd.java rename to api/src/org/apache/cloudstack/api/command/user/template/CreateTemplateCmd.java index 0a2b970680c..0a52e3058fc 100755 --- a/api/src/org/apache/cloudstack/api/user/template/command/CreateTemplateCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/template/CreateTemplateCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.user.template.command; +package org.apache.cloudstack.api.command.user.template; import java.util.Collection; import java.util.List; diff --git a/api/src/org/apache/cloudstack/api/user/template/command/DeleteTemplateCmd.java b/api/src/org/apache/cloudstack/api/command/user/template/DeleteTemplateCmd.java similarity index 98% rename from api/src/org/apache/cloudstack/api/user/template/command/DeleteTemplateCmd.java rename to api/src/org/apache/cloudstack/api/command/user/template/DeleteTemplateCmd.java index c0e58122728..56d6f846c7d 100755 --- a/api/src/org/apache/cloudstack/api/user/template/command/DeleteTemplateCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/template/DeleteTemplateCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.user.template.command; +package org.apache.cloudstack.api.command.user.template; import org.apache.log4j.Logger; diff --git a/api/src/org/apache/cloudstack/api/user/template/command/ExtractTemplateCmd.java b/api/src/org/apache/cloudstack/api/command/user/template/ExtractTemplateCmd.java similarity index 98% rename from api/src/org/apache/cloudstack/api/user/template/command/ExtractTemplateCmd.java rename to api/src/org/apache/cloudstack/api/command/user/template/ExtractTemplateCmd.java index 6de5118e9d4..0adfdd82c42 100755 --- a/api/src/org/apache/cloudstack/api/user/template/command/ExtractTemplateCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/template/ExtractTemplateCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.user.template.command; +package org.apache.cloudstack.api.command.user.template; import org.apache.log4j.Logger; diff --git a/api/src/org/apache/cloudstack/api/user/template/command/ListTemplatePermissionsCmd.java b/api/src/org/apache/cloudstack/api/command/user/template/ListTemplatePermissionsCmd.java similarity index 96% rename from api/src/org/apache/cloudstack/api/user/template/command/ListTemplatePermissionsCmd.java rename to api/src/org/apache/cloudstack/api/command/user/template/ListTemplatePermissionsCmd.java index 8188032639c..934e2e8a1a0 100644 --- a/api/src/org/apache/cloudstack/api/user/template/command/ListTemplatePermissionsCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/template/ListTemplatePermissionsCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.user.template.command; +package org.apache.cloudstack.api.command.user.template; import com.cloud.api.commands.ListTemplateOrIsoPermissionsCmd; import org.apache.log4j.Logger; diff --git a/api/src/org/apache/cloudstack/api/user/template/command/ListTemplatesCmd.java b/api/src/org/apache/cloudstack/api/command/user/template/ListTemplatesCmd.java similarity index 99% rename from api/src/org/apache/cloudstack/api/user/template/command/ListTemplatesCmd.java rename to api/src/org/apache/cloudstack/api/command/user/template/ListTemplatesCmd.java index 7d2cc01da78..f16b7e27c4d 100755 --- a/api/src/org/apache/cloudstack/api/user/template/command/ListTemplatesCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/template/ListTemplatesCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.user.template.command; +package org.apache.cloudstack.api.command.user.template; import java.util.ArrayList; import java.util.List; diff --git a/api/src/org/apache/cloudstack/api/user/template/command/RegisterTemplateCmd.java b/api/src/org/apache/cloudstack/api/command/user/template/RegisterTemplateCmd.java similarity index 99% rename from api/src/org/apache/cloudstack/api/user/template/command/RegisterTemplateCmd.java rename to api/src/org/apache/cloudstack/api/command/user/template/RegisterTemplateCmd.java index 5ad284c0529..54269ac975e 100755 --- a/api/src/org/apache/cloudstack/api/user/template/command/RegisterTemplateCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/template/RegisterTemplateCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.user.template.command; +package org.apache.cloudstack.api.command.user.template; import java.net.URISyntaxException; import java.util.Collection; diff --git a/api/src/org/apache/cloudstack/api/user/template/command/UpdateTemplateCmd.java b/api/src/org/apache/cloudstack/api/command/user/template/UpdateTemplateCmd.java similarity index 98% rename from api/src/org/apache/cloudstack/api/user/template/command/UpdateTemplateCmd.java rename to api/src/org/apache/cloudstack/api/command/user/template/UpdateTemplateCmd.java index bfde98eb11a..5d2af34b9d3 100755 --- a/api/src/org/apache/cloudstack/api/user/template/command/UpdateTemplateCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/template/UpdateTemplateCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.user.template.command; +package org.apache.cloudstack.api.command.user.template; import com.cloud.api.commands.UpdateTemplateOrIsoCmd; import org.apache.log4j.Logger; diff --git a/api/src/org/apache/cloudstack/api/user/template/command/UpdateTemplatePermissionsCmd.java b/api/src/org/apache/cloudstack/api/command/user/template/UpdateTemplatePermissionsCmd.java similarity index 97% rename from api/src/org/apache/cloudstack/api/user/template/command/UpdateTemplatePermissionsCmd.java rename to api/src/org/apache/cloudstack/api/command/user/template/UpdateTemplatePermissionsCmd.java index 3fd09da28b5..bdd4a0c4997 100644 --- a/api/src/org/apache/cloudstack/api/user/template/command/UpdateTemplatePermissionsCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/template/UpdateTemplatePermissionsCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.user.template.command; +package org.apache.cloudstack.api.command.user.template; import com.cloud.api.commands.UpdateTemplateOrIsoPermissionsCmd; import org.apache.log4j.Logger; diff --git a/api/src/org/apache/cloudstack/api/user/user/command/AddVpnUserCmd.java b/api/src/org/apache/cloudstack/api/command/user/user/AddVpnUserCmd.java similarity index 99% rename from api/src/org/apache/cloudstack/api/user/user/command/AddVpnUserCmd.java rename to api/src/org/apache/cloudstack/api/command/user/user/AddVpnUserCmd.java index 520db9d4126..a7ec871c254 100644 --- a/api/src/org/apache/cloudstack/api/user/user/command/AddVpnUserCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/user/AddVpnUserCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.user.user.command; +package org.apache.cloudstack.api.command.user.user; import org.apache.log4j.Logger; diff --git a/api/src/org/apache/cloudstack/api/user/user/command/ListVpnUsersCmd.java b/api/src/org/apache/cloudstack/api/command/user/user/ListVpnUsersCmd.java similarity index 98% rename from api/src/org/apache/cloudstack/api/user/user/command/ListVpnUsersCmd.java rename to api/src/org/apache/cloudstack/api/command/user/user/ListVpnUsersCmd.java index 1b1bcbbc392..6149b408348 100644 --- a/api/src/org/apache/cloudstack/api/user/user/command/ListVpnUsersCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/user/ListVpnUsersCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.user.user.command; +package org.apache.cloudstack.api.command.user.user; import java.util.ArrayList; import java.util.List; diff --git a/api/src/org/apache/cloudstack/api/user/user/command/RemoveVpnUserCmd.java b/api/src/org/apache/cloudstack/api/command/user/user/RemoveVpnUserCmd.java similarity index 98% rename from api/src/org/apache/cloudstack/api/user/user/command/RemoveVpnUserCmd.java rename to api/src/org/apache/cloudstack/api/command/user/user/RemoveVpnUserCmd.java index 51d44fe8ebc..f03c1a84848 100644 --- a/api/src/org/apache/cloudstack/api/user/user/command/RemoveVpnUserCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/user/RemoveVpnUserCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.user.user.command; +package org.apache.cloudstack.api.command.user.user; import org.apache.log4j.Logger; diff --git a/api/src/org/apache/cloudstack/api/admin/network/response/NetworkDeviceResponse.java b/api/src/org/apache/cloudstack/api/response/NetworkDeviceResponse.java similarity index 95% rename from api/src/org/apache/cloudstack/api/admin/network/response/NetworkDeviceResponse.java rename to api/src/org/apache/cloudstack/api/response/NetworkDeviceResponse.java index f4435bedeb4..c7fb7e842b6 100644 --- a/api/src/org/apache/cloudstack/api/admin/network/response/NetworkDeviceResponse.java +++ b/api/src/org/apache/cloudstack/api/response/NetworkDeviceResponse.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.admin.network.response; +package org.apache.cloudstack.api.response; import org.apache.cloudstack.api.ApiConstants; import com.cloud.utils.IdentityProxy; diff --git a/api/src/org/apache/cloudstack/network/ExternalNetworkDeviceManager.java b/api/src/org/apache/cloudstack/network/ExternalNetworkDeviceManager.java index 35cab8e26b0..418cd653a9d 100644 --- a/api/src/org/apache/cloudstack/network/ExternalNetworkDeviceManager.java +++ b/api/src/org/apache/cloudstack/network/ExternalNetworkDeviceManager.java @@ -20,11 +20,11 @@ import java.util.ArrayList; import java.util.List; import com.cloud.network.Network; -import org.apache.cloudstack.api.admin.network.command.AddNetworkDeviceCmd; -import org.apache.cloudstack.api.admin.network.command.DeleteNetworkDeviceCmd; -import org.apache.cloudstack.api.admin.network.command.ListNetworkDeviceCmd; +import org.apache.cloudstack.api.command.admin.network.AddNetworkDeviceCmd; +import org.apache.cloudstack.api.command.admin.network.DeleteNetworkDeviceCmd; +import org.apache.cloudstack.api.command.admin.network.ListNetworkDeviceCmd; import com.cloud.host.Host; -import org.apache.cloudstack.api.admin.network.response.NetworkDeviceResponse; +import org.apache.cloudstack.api.response.NetworkDeviceResponse; import com.cloud.utils.component.Manager; public interface ExternalNetworkDeviceManager extends Manager { diff --git a/api/test/src/com/cloud/api/commands/test/ActivateProjectCmdTest.java b/api/test/src/com/cloud/api/commands/test/ActivateProjectCmdTest.java index facbdcff24e..073c1aaba57 100644 --- a/api/test/src/com/cloud/api/commands/test/ActivateProjectCmdTest.java +++ b/api/test/src/com/cloud/api/commands/test/ActivateProjectCmdTest.java @@ -19,13 +19,13 @@ package src.com.cloud.api.commands.test; import junit.framework.Assert; import junit.framework.TestCase; +import org.apache.cloudstack.api.command.user.project.ActivateProjectCmd; import org.junit.Before; import org.junit.Rule; import org.junit.Test; import org.junit.rules.ExpectedException; import org.mockito.Mockito; -import org.apache.cloudstack.api.user.project.command.ActivateProjectCmd; import com.cloud.exception.InvalidParameterValueException; import com.cloud.projects.Project; import com.cloud.projects.ProjectService; diff --git a/api/test/src/com/cloud/api/commands/test/AddAccountToProjectCmdTest.java b/api/test/src/com/cloud/api/commands/test/AddAccountToProjectCmdTest.java index d7191967e09..736656f4102 100644 --- a/api/test/src/com/cloud/api/commands/test/AddAccountToProjectCmdTest.java +++ b/api/test/src/com/cloud/api/commands/test/AddAccountToProjectCmdTest.java @@ -19,7 +19,7 @@ package src.com.cloud.api.commands.test; import junit.framework.Assert; import junit.framework.TestCase; -import org.apache.cloudstack.api.user.account.command.AddAccountToProjectCmd; +import org.apache.cloudstack.api.command.user.account.AddAccountToProjectCmd; import org.junit.Before; import org.junit.Rule; import org.junit.Test; diff --git a/api/test/src/com/cloud/api/commands/test/AddClusterCmdTest.java b/api/test/src/com/cloud/api/commands/test/AddClusterCmdTest.java index bfbd811fe11..3b546e3cd29 100644 --- a/api/test/src/com/cloud/api/commands/test/AddClusterCmdTest.java +++ b/api/test/src/com/cloud/api/commands/test/AddClusterCmdTest.java @@ -19,7 +19,7 @@ package src.com.cloud.api.commands.test; import junit.framework.Assert; import junit.framework.TestCase; -import org.apache.cloudstack.api.admin.cluster.command.AddClusterCmd; +import org.apache.cloudstack.api.command.admin.cluster.AddClusterCmd; import org.junit.Before; import org.junit.Rule; import org.junit.Test; diff --git a/api/test/src/com/cloud/api/commands/test/AddHostCmdTest.java b/api/test/src/com/cloud/api/commands/test/AddHostCmdTest.java index 75c40d2fb50..c0cf2297e2b 100644 --- a/api/test/src/com/cloud/api/commands/test/AddHostCmdTest.java +++ b/api/test/src/com/cloud/api/commands/test/AddHostCmdTest.java @@ -19,7 +19,7 @@ package src.com.cloud.api.commands.test; import junit.framework.Assert; import junit.framework.TestCase; -import org.apache.cloudstack.api.admin.host.command.AddHostCmd; +import org.apache.cloudstack.api.command.admin.host.AddHostCmd; import org.junit.Before; import org.junit.Rule; import org.junit.Test; diff --git a/api/test/src/com/cloud/api/commands/test/AddNetworkServiceProviderCmdTest.java b/api/test/src/com/cloud/api/commands/test/AddNetworkServiceProviderCmdTest.java index b484916dcc1..1a5ee4346d5 100644 --- a/api/test/src/com/cloud/api/commands/test/AddNetworkServiceProviderCmdTest.java +++ b/api/test/src/com/cloud/api/commands/test/AddNetworkServiceProviderCmdTest.java @@ -22,7 +22,7 @@ import java.util.List; import junit.framework.Assert; import junit.framework.TestCase; -import org.apache.cloudstack.api.admin.network.command.AddNetworkServiceProviderCmd; +import org.apache.cloudstack.api.command.admin.network.AddNetworkServiceProviderCmd; import org.junit.Before; import org.junit.Rule; import org.junit.Test; diff --git a/api/test/src/com/cloud/api/commands/test/AddSecondaryStorageCmdTest.java b/api/test/src/com/cloud/api/commands/test/AddSecondaryStorageCmdTest.java index 9b73b0c1081..5065e9d5180 100644 --- a/api/test/src/com/cloud/api/commands/test/AddSecondaryStorageCmdTest.java +++ b/api/test/src/com/cloud/api/commands/test/AddSecondaryStorageCmdTest.java @@ -19,7 +19,7 @@ package src.com.cloud.api.commands.test; import junit.framework.Assert; import junit.framework.TestCase; -import org.apache.cloudstack.api.admin.host.command.AddSecondaryStorageCmd; +import org.apache.cloudstack.api.command.admin.host.AddSecondaryStorageCmd; import org.junit.Before; import org.junit.Rule; import org.junit.Test; diff --git a/api/test/src/com/cloud/api/commands/test/AddSwiftCmdTest.java b/api/test/src/com/cloud/api/commands/test/AddSwiftCmdTest.java index 59ffc39678e..92048570842 100644 --- a/api/test/src/com/cloud/api/commands/test/AddSwiftCmdTest.java +++ b/api/test/src/com/cloud/api/commands/test/AddSwiftCmdTest.java @@ -19,7 +19,7 @@ package src.com.cloud.api.commands.test; import junit.framework.Assert; import junit.framework.TestCase; -import org.apache.cloudstack.api.admin.swift.command.AddSwiftCmd; +import org.apache.cloudstack.api.command.admin.swift.AddSwiftCmd; import org.junit.Before; import org.junit.Rule; import org.junit.Test; diff --git a/api/test/src/com/cloud/api/commands/test/AddVpnUserCmdTest.java b/api/test/src/com/cloud/api/commands/test/AddVpnUserCmdTest.java index ce5d4f20286..f5dd1cec684 100644 --- a/api/test/src/com/cloud/api/commands/test/AddVpnUserCmdTest.java +++ b/api/test/src/com/cloud/api/commands/test/AddVpnUserCmdTest.java @@ -19,7 +19,7 @@ package src.com.cloud.api.commands.test; import junit.framework.Assert; import junit.framework.TestCase; -import org.apache.cloudstack.api.user.user.command.AddVpnUserCmd; +import org.apache.cloudstack.api.command.user.user.AddVpnUserCmd; import org.junit.Before; import org.junit.Rule; import org.junit.Test; diff --git a/api/test/src/com/cloud/api/commands/test/ListRoutersCmdTest.java b/api/test/src/com/cloud/api/commands/test/ListRoutersCmdTest.java index 64039f1c7c4..68083984683 100644 --- a/api/test/src/com/cloud/api/commands/test/ListRoutersCmdTest.java +++ b/api/test/src/com/cloud/api/commands/test/ListRoutersCmdTest.java @@ -20,9 +20,9 @@ import java.util.ArrayList; import java.util.List; import java.util.UUID; -import junit.framework.Assert; import junit.framework.TestCase; +import org.apache.cloudstack.api.command.admin.router.ListRoutersCmd; import org.junit.Before; import org.junit.Rule; import org.junit.Test; @@ -31,7 +31,6 @@ import org.mockito.Mockito; import org.apache.cloudstack.api.ResponseGenerator; import org.apache.cloudstack.api.ServerApiException; -import org.apache.cloudstack.api.admin.router.command.ListRoutersCmd; import com.cloud.api.response.DomainRouterResponse; import com.cloud.api.response.ListResponse; import com.cloud.api.view.vo.DomainRouterJoinVO; diff --git a/client/tomcatconf/commands.properties.in b/client/tomcatconf/commands.properties.in index d03937fa979..33daafd0d7d 100755 --- a/client/tomcatconf/commands.properties.in +++ b/client/tomcatconf/commands.properties.in @@ -19,39 +19,39 @@ ### Please standardize naming conventions to camel-case (even for acronyms). ### Account commands -createAccount=org.apache.cloudstack.api.admin.account.command.CreateAccountCmd;3 -deleteAccount=org.apache.cloudstack.api.admin.account.command.DeleteAccountCmd;3 -updateAccount=org.apache.cloudstack.api.admin.account.command.UpdateAccountCmd;3 -disableAccount=org.apache.cloudstack.api.admin.account.command.DisableAccountCmd;7 -enableAccount=org.apache.cloudstack.api.admin.account.command.EnableAccountCmd;7 -lockAccount=org.apache.cloudstack.api.admin.account.command.LockAccountCmd;7 -listAccounts=org.apache.cloudstack.api.user.account.command.ListAccountsCmd;15 -markDefaultZoneForAccount=org.apache.cloudstack.api.admin.zone.command.MarkDefaultZoneForAccountCmd;1 +createAccount=org.apache.cloudstack.api.command.admin.account.CreateAccountCmd;3 +deleteAccount=org.apache.cloudstack.api.command.admin.account.DeleteAccountCmd;3 +updateAccount=org.apache.cloudstack.api.command.admin.account.UpdateAccountCmd;3 +disableAccount=org.apache.cloudstack.api.command.admin.account.DisableAccountCmd;7 +enableAccount=org.apache.cloudstack.api.command.admin.account.EnableAccountCmd;7 +lockAccount=org.apache.cloudstack.api.command.admin.account.LockAccountCmd;7 +listAccounts=org.apache.cloudstack.api.command.user.account.ListAccountsCmd;15 +markDefaultZoneForAccount=org.apache.cloudstack.api.command.admin.zone.MarkDefaultZoneForAccountCmd;1 #### User commands -createUser=org.apache.cloudstack.api.admin.user.command.CreateUserCmd;3 -deleteUser=org.apache.cloudstack.api.admin.user.command.DeleteUserCmd;3 -updateUser=org.apache.cloudstack.api.admin.user.command.UpdateUserCmd;3 -listUsers=org.apache.cloudstack.api.admin.user.command.ListUsersCmd;7 -lockUser=org.apache.cloudstack.api.admin.user.command.LockUserCmd;7 -disableUser=org.apache.cloudstack.api.admin.user.command.DisableUserCmd;7 -enableUser=org.apache.cloudstack.api.admin.user.command.EnableUserCmd;7 -getUser=org.apache.cloudstack.api.admin.user.command.GetUserCmd;1 +createUser=org.apache.cloudstack.api.command.admin.user.CreateUserCmd;3 +deleteUser=org.apache.cloudstack.api.command.admin.user.DeleteUserCmd;3 +updateUser=org.apache.cloudstack.api.command.admin.user.UpdateUserCmd;3 +listUsers=org.apache.cloudstack.api.command.admin.user.ListUsersCmd;7 +lockUser=org.apache.cloudstack.api.command.admin.user.LockUserCmd;7 +disableUser=org.apache.cloudstack.api.command.admin.user.DisableUserCmd;7 +enableUser=org.apache.cloudstack.api.command.admin.user.EnableUserCmd;7 +getUser=org.apache.cloudstack.api.command.admin.user.GetUserCmd;1 #### Domain commands -createDomain=org.apache.cloudstack.api.admin.domain.command.CreateDomainCmd;1 -updateDomain=org.apache.cloudstack.api.admin.domain.command.UpdateDomainCmd;1 -deleteDomain=org.apache.cloudstack.api.admin.domain.command.DeleteDomainCmd;1 -listDomains=org.apache.cloudstack.api.admin.domain.command.ListDomainsCmd;7 -listDomainChildren=org.apache.cloudstack.api.admin.domain.command.ListDomainChildrenCmd;7 +createDomain=org.apache.cloudstack.api.command.admin.domain.CreateDomainCmd;1 +updateDomain=org.apache.cloudstack.api.command.admin.domain.UpdateDomainCmd;1 +deleteDomain=org.apache.cloudstack.api.command.admin.domain.DeleteDomainCmd;1 +listDomains=org.apache.cloudstack.api.command.admin.domain.ListDomainsCmd;7 +listDomainChildren=org.apache.cloudstack.api.command.admin.domain.ListDomainChildrenCmd;7 ####Cloud Identifier commands -getCloudIdentifier=org.apache.cloudstack.api.user.resource.command.GetCloudIdentifierCmd;15 +getCloudIdentifier=org.apache.cloudstack.api.command.user.resource.GetCloudIdentifierCmd;15 #### Limit commands -updateResourceLimit=org.apache.cloudstack.api.user.resource.command.UpdateResourceLimitCmd;7 -updateResourceCount=org.apache.cloudstack.api.user.resource.command.UpdateResourceCountCmd;7 -listResourceLimits=org.apache.cloudstack.api.user.resource.command.ListResourceLimitsCmd;15 +updateResourceLimit=org.apache.cloudstack.api.command.user.resource.UpdateResourceLimitCmd;7 +updateResourceCount=org.apache.cloudstack.api.command.user.resource.UpdateResourceCountCmd;7 +listResourceLimits=org.apache.cloudstack.api.command.user.resource.ListResourceLimitsCmd;15 #### VM commands deployVirtualMachine=org.apache.cloudstack.api.user.vm.command.DeployVMCmd;15 @@ -65,182 +65,182 @@ listVirtualMachines=org.apache.cloudstack.api.user.vm.command.ListVMsCmd;15 getVMPassword=org.apache.cloudstack.api.user.vm.command.GetVMPasswordCmd;15 restoreVirtualMachine=org.apache.cloudstack.api.user.vm.command.RestoreVMCmd;15 changeServiceForVirtualMachine=org.apache.cloudstack.api.user.vm.command.UpgradeVMCmd;15 -assignVirtualMachine=org.apache.cloudstack.api.admin.vm.command.AssignVMCmd;1 -migrateVirtualMachine=org.apache.cloudstack.api.admin.vm.command.MigrateVMCmd;1 -recoverVirtualMachine=org.apache.cloudstack.api.admin.vm.command.RecoverVMCmd;7 +assignVirtualMachine=org.apache.cloudstack.api.command.admin.vm.AssignVMCmd;1 +migrateVirtualMachine=org.apache.cloudstack.api.command.admin.vm.MigrateVMCmd;1 +recoverVirtualMachine=org.apache.cloudstack.api.command.admin.vm.RecoverVMCmd;7 #### snapshot commands -createSnapshot=org.apache.cloudstack.api.user.snapshot.command.CreateSnapshotCmd;15 -listSnapshots=org.apache.cloudstack.api.user.snapshot.command.ListSnapshotsCmd;15 -deleteSnapshot=org.apache.cloudstack.api.user.snapshot.command.DeleteSnapshotCmd;15 -createSnapshotPolicy=org.apache.cloudstack.api.user.snapshot.command.CreateSnapshotPolicyCmd;15 -deleteSnapshotPolicies=org.apache.cloudstack.api.user.snapshot.command.DeleteSnapshotPoliciesCmd;15 -listSnapshotPolicies=org.apache.cloudstack.api.user.snapshot.command.ListSnapshotPoliciesCmd;15 +createSnapshot=org.apache.cloudstack.api.command.user.snapshot.CreateSnapshotCmd;15 +listSnapshots=org.apache.cloudstack.api.command.user.snapshot.ListSnapshotsCmd;15 +deleteSnapshot=org.apache.cloudstack.api.command.user.snapshot.DeleteSnapshotCmd;15 +createSnapshotPolicy=org.apache.cloudstack.api.command.user.snapshot.CreateSnapshotPolicyCmd;15 +deleteSnapshotPolicies=org.apache.cloudstack.api.command.user.snapshot.DeleteSnapshotPoliciesCmd;15 +listSnapshotPolicies=org.apache.cloudstack.api.command.user.snapshot.ListSnapshotPoliciesCmd;15 #### template commands -createTemplate=org.apache.cloudstack.api.user.template.command.CreateTemplateCmd;15 -registerTemplate=org.apache.cloudstack.api.user.template.command.RegisterTemplateCmd;15 -updateTemplate=org.apache.cloudstack.api.user.template.command.UpdateTemplateCmd;15 -copyTemplate=org.apache.cloudstack.api.user.template.command.CopyTemplateCmd;15 -deleteTemplate=org.apache.cloudstack.api.user.template.command.DeleteTemplateCmd;15 -listTemplates=org.apache.cloudstack.api.user.template.command.ListTemplatesCmd;15 -updateTemplatePermissions=org.apache.cloudstack.api.user.template.command.UpdateTemplatePermissionsCmd;15 -listTemplatePermissions=org.apache.cloudstack.api.user.template.command.ListTemplatePermissionsCmd;15 -extractTemplate=org.apache.cloudstack.api.user.template.command.ExtractTemplateCmd;15 -prepareTemplate=org.apache.cloudstack.api.admin.template.command.PrepareTemplateCmd;1 +createTemplate=org.apache.cloudstack.api.command.user.template.CreateTemplateCmd;15 +registerTemplate=org.apache.cloudstack.api.command.user.template.RegisterTemplateCmd;15 +updateTemplate=org.apache.cloudstack.api.command.user.template.UpdateTemplateCmd;15 +copyTemplate=org.apache.cloudstack.api.command.user.template.CopyTemplateCmd;15 +deleteTemplate=org.apache.cloudstack.api.command.user.template.DeleteTemplateCmd;15 +listTemplates=org.apache.cloudstack.api.command.user.template.ListTemplatesCmd;15 +updateTemplatePermissions=org.apache.cloudstack.api.command.user.template.UpdateTemplatePermissionsCmd;15 +listTemplatePermissions=org.apache.cloudstack.api.command.user.template.ListTemplatePermissionsCmd;15 +extractTemplate=org.apache.cloudstack.api.command.user.template.ExtractTemplateCmd;15 +prepareTemplate=org.apache.cloudstack.api.command.admin.template.PrepareTemplateCmd;1 #### iso commands -attachIso=org.apache.cloudstack.api.user.iso.command.AttachIsoCmd;15 -detachIso=org.apache.cloudstack.api.user.iso.command.DetachIsoCmd;15 -listIsos=org.apache.cloudstack.api.user.iso.command.ListIsosCmd;15 -registerIso=org.apache.cloudstack.api.user.iso.command.RegisterIsoCmd;15 -updateIso=org.apache.cloudstack.api.user.iso.command.UpdateIsoCmd;15 -deleteIso=org.apache.cloudstack.api.user.iso.command.DeleteIsoCmd;15 -copyIso=org.apache.cloudstack.api.user.template.command.CopyTemplateCmd;15 -updateIsoPermissions=org.apache.cloudstack.api.user.iso.command.UpdateIsoPermissionsCmd;15 -listIsoPermissions=org.apache.cloudstack.api.user.iso.command.ListIsoPermissionsCmd;15 -extractIso=org.apache.cloudstack.api.user.iso.command.ExtractIsoCmd;15 +attachIso=org.apache.cloudstack.api.command.user.iso.AttachIsoCmd;15 +detachIso=org.apache.cloudstack.api.command.user.iso.DetachIsoCmd;15 +listIsos=org.apache.cloudstack.api.command.user.iso.ListIsosCmd;15 +registerIso=org.apache.cloudstack.api.command.user.iso.RegisterIsoCmd;15 +updateIso=org.apache.cloudstack.api.command.user.iso.UpdateIsoCmd;15 +deleteIso=org.apache.cloudstack.api.command.user.iso.DeleteIsoCmd;15 +copyIso=org.apache.cloudstack.api.command.user.template.CopyTemplateCmd;15 +updateIsoPermissions=org.apache.cloudstack.api.command.user.iso.UpdateIsoPermissionsCmd;15 +listIsoPermissions=org.apache.cloudstack.api.command.user.iso.ListIsoPermissionsCmd;15 +extractIso=org.apache.cloudstack.api.command.user.iso.ExtractIsoCmd;15 #### guest OS commands -listOsTypes=org.apache.cloudstack.api.user.guest.command.ListGuestOsCmd;15 -listOsCategories=org.apache.cloudstack.api.user.guest.command.ListGuestOsCategoriesCmd;15 +listOsTypes=org.apache.cloudstack.api.command.user.guest.ListGuestOsCmd;15 +listOsCategories=org.apache.cloudstack.api.command.user.guest.ListGuestOsCategoriesCmd;15 #### service offering commands -createServiceOffering=org.apache.cloudstack.api.admin.offering.command.CreateServiceOfferingCmd;1 -deleteServiceOffering=org.apache.cloudstack.api.admin.offering.command.DeleteServiceOfferingCmd;1 -updateServiceOffering=org.apache.cloudstack.api.admin.offering.command.UpdateServiceOfferingCmd;1 -listServiceOfferings=org.apache.cloudstack.api.user.offering.command.ListServiceOfferingsCmd;15 +createServiceOffering=org.apache.cloudstack.api.command.admin.offering.CreateServiceOfferingCmd;1 +deleteServiceOffering=org.apache.cloudstack.api.command.admin.offering.DeleteServiceOfferingCmd;1 +updateServiceOffering=org.apache.cloudstack.api.command.admin.offering.UpdateServiceOfferingCmd;1 +listServiceOfferings=org.apache.cloudstack.api.command.user.offering.ListServiceOfferingsCmd;15 #### disk offering commands -createDiskOffering=org.apache.cloudstack.api.admin.offering.command.CreateDiskOfferingCmd;1 -updateDiskOffering=org.apache.cloudstack.api.admin.offering.command.UpdateDiskOfferingCmd;1 -deleteDiskOffering=org.apache.cloudstack.api.admin.offering.command.DeleteDiskOfferingCmd;1 -listDiskOfferings=org.apache.cloudstack.api.user.offering.command.ListDiskOfferingsCmd;15 +createDiskOffering=org.apache.cloudstack.api.command.admin.offering.CreateDiskOfferingCmd;1 +updateDiskOffering=org.apache.cloudstack.api.command.admin.offering.UpdateDiskOfferingCmd;1 +deleteDiskOffering=org.apache.cloudstack.api.command.admin.offering.DeleteDiskOfferingCmd;1 +listDiskOfferings=org.apache.cloudstack.api.command.user.offering.ListDiskOfferingsCmd;15 #### vlan commands -createVlanIpRange=org.apache.cloudstack.api.admin.vlan.command.CreateVlanIpRangeCmd;1 -deleteVlanIpRange=org.apache.cloudstack.api.admin.vlan.command.DeleteVlanIpRangeCmd;1 -listVlanIpRanges=org.apache.cloudstack.api.admin.vlan.command.ListVlanIpRangesCmd;1 +createVlanIpRange=org.apache.cloudstack.api.command.admin.vlan.CreateVlanIpRangeCmd;1 +deleteVlanIpRange=org.apache.cloudstack.api.command.admin.vlan.DeleteVlanIpRangeCmd;1 +listVlanIpRanges=org.apache.cloudstack.api.command.admin.vlan.ListVlanIpRangesCmd;1 #### address commands -associateIpAddress=org.apache.cloudstack.api.user.address.command.AssociateIPAddrCmd;15 -disassociateIpAddress=org.apache.cloudstack.api.user.address.command.DisassociateIPAddrCmd;15 -listPublicIpAddresses=org.apache.cloudstack.api.user.address.command.ListPublicIpAddressesCmd;15 +associateIpAddress=org.apache.cloudstack.api.command.user.address.AssociateIPAddrCmd;15 +disassociateIpAddress=org.apache.cloudstack.api.command.user.address.DisassociateIPAddrCmd;15 +listPublicIpAddresses=org.apache.cloudstack.api.command.user.address.ListPublicIpAddressesCmd;15 #### firewall commands -listPortForwardingRules=org.apache.cloudstack.api.user.firewall.command.ListPortForwardingRulesCmd;15 -createPortForwardingRule=org.apache.cloudstack.api.user.firewall.command.CreatePortForwardingRuleCmd;15 -deletePortForwardingRule=org.apache.cloudstack.api.user.firewall.command.DeletePortForwardingRuleCmd;15 -updatePortForwardingRule=org.apache.cloudstack.api.user.firewall.command.UpdatePortForwardingRuleCmd;15 +listPortForwardingRules=org.apache.cloudstack.api.command.user.firewall.ListPortForwardingRulesCmd;15 +createPortForwardingRule=org.apache.cloudstack.api.command.user.firewall.CreatePortForwardingRuleCmd;15 +deletePortForwardingRule=org.apache.cloudstack.api.command.user.firewall.DeletePortForwardingRuleCmd;15 +updatePortForwardingRule=org.apache.cloudstack.api.command.user.firewall.UpdatePortForwardingRuleCmd;15 #### NAT commands -enableStaticNat=org.apache.cloudstack.api.user.nat.command.EnableStaticNatCmd;15 -createIpForwardingRule=org.apache.cloudstack.api.user.nat.command.CreateIpForwardingRuleCmd;15 -deleteIpForwardingRule=org.apache.cloudstack.api.user.nat.command.DeleteIpForwardingRuleCmd;15 -listIpForwardingRules=org.apache.cloudstack.api.user.nat.command.ListIpForwardingRulesCmd;15 -disableStaticNat=org.apache.cloudstack.api.user.nat.command.DisableStaticNatCmd;15 +enableStaticNat=org.apache.cloudstack.api.command.user.nat.EnableStaticNatCmd;15 +createIpForwardingRule=org.apache.cloudstack.api.command.user.nat.CreateIpForwardingRuleCmd;15 +deleteIpForwardingRule=org.apache.cloudstack.api.command.user.nat.DeleteIpForwardingRuleCmd;15 +listIpForwardingRules=org.apache.cloudstack.api.command.user.nat.ListIpForwardingRulesCmd;15 +disableStaticNat=org.apache.cloudstack.api.command.user.nat.DisableStaticNatCmd;15 #### load balancer commands -createLoadBalancerRule=org.apache.cloudstack.api.user.lb.command.CreateLoadBalancerRuleCmd;15 -deleteLoadBalancerRule=org.apache.cloudstack.api.user.lb.command.DeleteLoadBalancerRuleCmd;15 -removeFromLoadBalancerRule=org.apache.cloudstack.api.user.lb.command.RemoveFromLoadBalancerRuleCmd;15 -assignToLoadBalancerRule=org.apache.cloudstack.api.user.lb.command.AssignToLoadBalancerRuleCmd;15 -createLBStickinessPolicy=org.apache.cloudstack.api.user.lb.command.CreateLBStickinessPolicyCmd;15 -deleteLBStickinessPolicy=org.apache.cloudstack.api.user.lb.command.DeleteLBStickinessPolicyCmd;15 -listLoadBalancerRules=org.apache.cloudstack.api.user.lb.command.ListLoadBalancerRulesCmd;15 -listLBStickinessPolicies=org.apache.cloudstack.api.user.lb.command.ListLBStickinessPoliciesCmd;15 -listLoadBalancerRuleInstances=org.apache.cloudstack.api.user.lb.command.ListLoadBalancerRuleInstancesCmd;15 -updateLoadBalancerRule=org.apache.cloudstack.api.user.lb.command.UpdateLoadBalancerRuleCmd;15 +createLoadBalancerRule=org.apache.cloudstack.api.command.user.loadbalancer.CreateLoadBalancerRuleCmd;15 +deleteLoadBalancerRule=org.apache.cloudstack.api.command.user.loadbalancer.DeleteLoadBalancerRuleCmd;15 +removeFromLoadBalancerRule=org.apache.cloudstack.api.command.user.loadbalancer.RemoveFromLoadBalancerRuleCmd;15 +assignToLoadBalancerRule=org.apache.cloudstack.api.command.user.loadbalancer.AssignToLoadBalancerRuleCmd;15 +createLBStickinessPolicy=org.apache.cloudstack.api.command.user.loadbalancer.CreateLBStickinessPolicyCmd;15 +deleteLBStickinessPolicy=org.apache.cloudstack.api.command.user.loadbalancer.DeleteLBStickinessPolicyCmd;15 +listLoadBalancerRules=org.apache.cloudstack.api.command.user.loadbalancer.ListLoadBalancerRulesCmd;15 +listLBStickinessPolicies=org.apache.cloudstack.api.command.user.loadbalancer.ListLBStickinessPoliciesCmd;15 +listLoadBalancerRuleInstances=org.apache.cloudstack.api.command.user.loadbalancer.ListLoadBalancerRuleInstancesCmd;15 +updateLoadBalancerRule=org.apache.cloudstack.api.command.user.loadbalancer.UpdateLoadBalancerRuleCmd;15 #### autoscale commands -createCounter = org.apache.cloudstack.api.admin.autoscale.command.CreateCounterCmd;1 -createCondition = org.apache.cloudstack.api.user.autoscale.command.CreateConditionCmd;15 -createAutoScalePolicy=org.apache.cloudstack.api.user.autoscale.command.CreateAutoScalePolicyCmd;15 -createAutoScaleVmProfile=org.apache.cloudstack.api.user.autoscale.command.CreateAutoScaleVmProfileCmd;15 -createAutoScaleVmGroup=org.apache.cloudstack.api.user.autoscale.command.CreateAutoScaleVmGroupCmd;15 -deleteCounter = org.apache.cloudstack.api.admin.autoscale.command.DeleteCounterCmd;1 -deleteCondition = org.apache.cloudstack.api.user.autoscale.command.DeleteConditionCmd;15 -deleteAutoScalePolicy=org.apache.cloudstack.api.user.autoscale.command.DeleteAutoScalePolicyCmd;15 -deleteAutoScaleVmProfile=org.apache.cloudstack.api.user.autoscale.command.DeleteAutoScaleVmProfileCmd;15 -deleteAutoScaleVmGroup=org.apache.cloudstack.api.user.autoscale.command.DeleteAutoScaleVmGroupCmd;15 -listCounters = org.apache.cloudstack.api.user.autoscale.command.ListCountersCmd;15 -listConditions = org.apache.cloudstack.api.user.autoscale.command.ListConditionsCmd;15 -listAutoScalePolicies=org.apache.cloudstack.api.user.autoscale.command.ListAutoScalePoliciesCmd;15 -listAutoScaleVmProfiles=org.apache.cloudstack.api.user.autoscale.command.ListAutoScaleVmProfilesCmd;15 -listAutoScaleVmGroups=org.apache.cloudstack.api.user.autoscale.command.ListAutoScaleVmGroupsCmd;15 -enableAutoScaleVmGroup=org.apache.cloudstack.api.user.autoscale.command.EnableAutoScaleVmGroupCmd;15 -disableAutoScaleVmGroup=org.apache.cloudstack.api.user.autoscale.command.DisableAutoScaleVmGroupCmd;15 -updateAutoScalePolicy=org.apache.cloudstack.api.user.autoscale.command.UpdateAutoScalePolicyCmd;15 -updateAutoScaleVmProfile=org.apache.cloudstack.api.user.autoscale.command.UpdateAutoScaleVmProfileCmd;15 -updateAutoScaleVmGroup=org.apache.cloudstack.api.user.autoscale.command.UpdateAutoScaleVmGroupCmd;15 +createCounter = org.apache.cloudstack.api.command.admin.autoscale.CreateCounterCmd;1 +createCondition = org.apache.cloudstack.api.command.user.autoscale.CreateConditionCmd;15 +createAutoScalePolicy=org.apache.cloudstack.api.command.user.autoscale.CreateAutoScalePolicyCmd;15 +createAutoScaleVmProfile=org.apache.cloudstack.api.command.user.autoscale.CreateAutoScaleVmProfileCmd;15 +createAutoScaleVmGroup=org.apache.cloudstack.api.command.user.autoscale.CreateAutoScaleVmGroupCmd;15 +deleteCounter = org.apache.cloudstack.api.command.admin.autoscale.DeleteCounterCmd;1 +deleteCondition = org.apache.cloudstack.api.command.user.autoscale.DeleteConditionCmd;15 +deleteAutoScalePolicy=org.apache.cloudstack.api.command.user.autoscale.DeleteAutoScalePolicyCmd;15 +deleteAutoScaleVmProfile=org.apache.cloudstack.api.command.user.autoscale.DeleteAutoScaleVmProfileCmd;15 +deleteAutoScaleVmGroup=org.apache.cloudstack.api.command.user.autoscale.DeleteAutoScaleVmGroupCmd;15 +listCounters = org.apache.cloudstack.api.command.user.autoscale.ListCountersCmd;15 +listConditions = org.apache.cloudstack.api.command.user.autoscale.ListConditionsCmd;15 +listAutoScalePolicies=org.apache.cloudstack.api.command.user.autoscale.ListAutoScalePoliciesCmd;15 +listAutoScaleVmProfiles=org.apache.cloudstack.api.command.user.autoscale.ListAutoScaleVmProfilesCmd;15 +listAutoScaleVmGroups=org.apache.cloudstack.api.command.user.autoscale.ListAutoScaleVmGroupsCmd;15 +enableAutoScaleVmGroup=org.apache.cloudstack.api.command.user.autoscale.EnableAutoScaleVmGroupCmd;15 +disableAutoScaleVmGroup=org.apache.cloudstack.api.command.user.autoscale.DisableAutoScaleVmGroupCmd;15 +updateAutoScalePolicy=org.apache.cloudstack.api.command.user.autoscale.UpdateAutoScalePolicyCmd;15 +updateAutoScaleVmProfile=org.apache.cloudstack.api.command.user.autoscale.UpdateAutoScaleVmProfileCmd;15 +updateAutoScaleVmGroup=org.apache.cloudstack.api.command.user.autoscale.UpdateAutoScaleVmGroupCmd;15 #### router commands -startRouter=org.apache.cloudstack.api.admin.router.command.StartRouterCmd;7 -rebootRouter=org.apache.cloudstack.api.admin.router.command.RebootRouterCmd;7 -stopRouter=org.apache.cloudstack.api.admin.router.command.StopRouterCmd;7 -destroyRouter=org.apache.cloudstack.api.admin.router.command.DestroyRouterCmd;7 -changeServiceForRouter=org.apache.cloudstack.api.admin.router.command.UpgradeRouterCmd;7 -listRouters=org.apache.cloudstack.api.admin.router.command.ListRoutersCmd;7 -listVirtualRouterElements=org.apache.cloudstack.api.admin.router.command.ListVirtualRouterElementsCmd;7 -configureVirtualRouterElement=org.apache.cloudstack.api.admin.router.command.ConfigureVirtualRouterElementCmd;7 -createVirtualRouterElement=org.apache.cloudstack.api.admin.router.command.CreateVirtualRouterElementCmd;7 +startRouter=org.apache.cloudstack.api.command.admin.router.StartRouterCmd;7 +rebootRouter=org.apache.cloudstack.api.command.admin.router.RebootRouterCmd;7 +stopRouter=org.apache.cloudstack.api.command.admin.router.StopRouterCmd;7 +destroyRouter=org.apache.cloudstack.api.command.admin.router.DestroyRouterCmd;7 +changeServiceForRouter=org.apache.cloudstack.api.command.admin.router.UpgradeRouterCmd;7 +listRouters=org.apache.cloudstack.api.command.admin.router.ListRoutersCmd;7 +listVirtualRouterElements=org.apache.cloudstack.api.command.admin.router.ListVirtualRouterElementsCmd;7 +configureVirtualRouterElement=org.apache.cloudstack.api.command.admin.router.ConfigureVirtualRouterElementCmd;7 +createVirtualRouterElement=org.apache.cloudstack.api.command.admin.router.CreateVirtualRouterElementCmd;7 #### system vm commands -startSystemVm=org.apache.cloudstack.api.admin.systemvm.command.StartSystemVMCmd;1 -rebootSystemVm=org.apache.cloudstack.api.admin.systemvm.command.RebootSystemVmCmd;1 -stopSystemVm=org.apache.cloudstack.api.admin.systemvm.command.StopSystemVmCmd;1 -destroySystemVm=org.apache.cloudstack.api.admin.systemvm.command.DestroySystemVmCmd;1 -listSystemVms=org.apache.cloudstack.api.admin.systemvm.command.ListSystemVMsCmd;3 -migrateSystemVm=org.apache.cloudstack.api.admin.systemvm.command.MigrateSystemVMCmd;1 -changeServiceForSystemVm=org.apache.cloudstack.api.admin.systemvm.command.UpgradeSystemVMCmd;1 +startSystemVm=org.apache.cloudstack.api.command.admin.systemvm.StartSystemVMCmd;1 +rebootSystemVm=org.apache.cloudstack.api.command.admin.systemvm.RebootSystemVmCmd;1 +stopSystemVm=org.apache.cloudstack.api.command.admin.systemvm.StopSystemVmCmd;1 +destroySystemVm=org.apache.cloudstack.api.command.admin.systemvm.DestroySystemVmCmd;1 +listSystemVms=org.apache.cloudstack.api.command.admin.systemvm.ListSystemVMsCmd;3 +migrateSystemVm=org.apache.cloudstack.api.command.admin.systemvm.MigrateSystemVMCmd;1 +changeServiceForSystemVm=org.apache.cloudstack.api.command.admin.systemvm.UpgradeSystemVMCmd;1 #### configuration commands -updateConfiguration=org.apache.cloudstack.api.admin.config.command.UpdateCfgCmd;1 -listConfigurations=org.apache.cloudstack.api.admin.config.command.ListCfgsByCmd;1 -ldapConfig=org.apache.cloudstack.api.admin.ldap.command.LDAPConfigCmd;1 -ldapRemove=org.apache.cloudstack.api.admin.ldap.command.LDAPRemoveCmd;1 -listCapabilities=org.apache.cloudstack.api.user.config.command.ListCapabilitiesCmd;15 +updateConfiguration=org.apache.cloudstack.api.command.admin.config.UpdateCfgCmd;1 +listConfigurations=org.apache.cloudstack.api.command.admin.config.ListCfgsByCmd;1 +ldapConfig=org.apache.cloudstack.api.command.admin.ldap.LDAPConfigCmd;1 +ldapRemove=org.apache.cloudstack.api.command.admin.ldap.LDAPRemoveCmd;1 +listCapabilities=org.apache.cloudstack.api.command.user.config.ListCapabilitiesCmd;15 #### pod commands -createPod=org.apache.cloudstack.api.admin.pod.command.CreatePodCmd;1 -updatePod=org.apache.cloudstack.api.admin.pod.command.UpdatePodCmd;1 -deletePod=org.apache.cloudstack.api.admin.pod.command.DeletePodCmd;1 -listPods=org.apache.cloudstack.api.admin.pod.command.ListPodsByCmd;3 +createPod=org.apache.cloudstack.api.command.admin.pod.CreatePodCmd;1 +updatePod=org.apache.cloudstack.api.command.admin.pod.UpdatePodCmd;1 +deletePod=org.apache.cloudstack.api.command.admin.pod.DeletePodCmd;1 +listPods=org.apache.cloudstack.api.command.admin.pod.ListPodsByCmd;3 #### zone commands -createZone=org.apache.cloudstack.api.admin.zone.command.CreateZoneCmd;1 -updateZone=org.apache.cloudstack.api.admin.zone.command.UpdateZoneCmd;1 -deleteZone=org.apache.cloudstack.api.admin.zone.command.DeleteZoneCmd;1 +createZone=org.apache.cloudstack.api.command.admin.zone.CreateZoneCmd;1 +updateZone=org.apache.cloudstack.api.command.admin.zone.UpdateZoneCmd;1 +deleteZone=org.apache.cloudstack.api.command.admin.zone.DeleteZoneCmd;1 listZones=org.apache.cloudstack.api.user.zone.command.ListZonesByCmd;15 #### events commands -listEvents=org.apache.cloudstack.api.user.event.command.ListEventsCmd;15 -listEventTypes=org.apache.cloudstack.api.user.event.command.ListEventTypesCmd;15 +listEvents=org.apache.cloudstack.api.command.user.event.ListEventsCmd;15 +listEventTypes=org.apache.cloudstack.api.command.user.event.ListEventTypesCmd;15 #### alerts commands -listAlerts=org.apache.cloudstack.api.admin.resource.command.ListAlertsCmd;3 +listAlerts=org.apache.cloudstack.api.command.admin.resource.ListAlertsCmd;3 #### system capacity commands -listCapacity=org.apache.cloudstack.api.admin.resource.command.ListCapacityCmd;3 +listCapacity=org.apache.cloudstack.api.command.admin.resource.ListCapacityCmd;3 #### swift commands^M -addSwift=org.apache.cloudstack.api.admin.swift.command.AddSwiftCmd;1 -listSwifts=org.apache.cloudstack.api.admin.swift.command.ListSwiftsCmd;1 +addSwift=org.apache.cloudstack.api.command.admin.swift.AddSwiftCmd;1 +listSwifts=org.apache.cloudstack.api.command.admin.swift.ListSwiftsCmd;1 #### host commands -addHost=org.apache.cloudstack.api.admin.host.command.AddHostCmd;3 -addCluster=org.apache.cloudstack.api.admin.cluster.command.AddClusterCmd;1 -deleteCluster=org.apache.cloudstack.api.admin.cluster.command.DeleteClusterCmd;1 -updateCluster=org.apache.cloudstack.api.admin.cluster.command.UpdateClusterCmd;1 -reconnectHost=org.apache.cloudstack.api.admin.host.command.ReconnectHostCmd;1 -updateHost=org.apache.cloudstack.api.admin.host.command.UpdateHostCmd;1 -deleteHost=org.apache.cloudstack.api.admin.host.command.DeleteHostCmd;3 -prepareHostForMaintenance=org.apache.cloudstack.api.admin.host.command.PrepareForMaintenanceCmd;1 -cancelHostMaintenance=org.apache.cloudstack.api.admin.host.command.CancelMaintenanceCmd;1 -listHosts=org.apache.cloudstack.api.admin.host.command.ListHostsCmd;3 -addSecondaryStorage=org.apache.cloudstack.api.admin.host.command.AddSecondaryStorageCmd;1 -updateHostPassword=org.apache.cloudstack.api.admin.host.command.UpdateHostPasswordCmd;1 +addHost=org.apache.cloudstack.api.command.admin.host.AddHostCmd;3 +addCluster=org.apache.cloudstack.api.command.admin.cluster.AddClusterCmd;1 +deleteCluster=org.apache.cloudstack.api.command.admin.cluster.DeleteClusterCmd;1 +updateCluster=org.apache.cloudstack.api.command.admin.cluster.UpdateClusterCmd;1 +reconnectHost=org.apache.cloudstack.api.command.admin.host.ReconnectHostCmd;1 +updateHost=org.apache.cloudstack.api.command.admin.host.UpdateHostCmd;1 +deleteHost=org.apache.cloudstack.api.command.admin.host.DeleteHostCmd;3 +prepareHostForMaintenance=org.apache.cloudstack.api.command.admin.host.PrepareForMaintenanceCmd;1 +cancelHostMaintenance=org.apache.cloudstack.api.command.admin.host.CancelMaintenanceCmd;1 +listHosts=org.apache.cloudstack.api.command.admin.host.ListHostsCmd;3 +addSecondaryStorage=org.apache.cloudstack.api.command.admin.host.AddSecondaryStorageCmd;1 +updateHostPassword=org.apache.cloudstack.api.command.admin.host.UpdateHostPasswordCmd;1 #### volume commands attachVolume=org.apache.cloudstack.api.user.volume.command.AttachVolumeCmd;15 @@ -257,29 +257,29 @@ migrateVolume=org.apache.cloudstack.api.user.volume.command.MigrateVolumeCmd;15 #### use that key...the key is stored in the db associated w/ #### the userId...every request to the developer API should be #### checked against the key -registerUserKeys=org.apache.cloudstack.api.admin.user.command.RegisterCmd;1 +registerUserKeys=org.apache.cloudstack.api.command.admin.user.RegisterCmd;1 ### async-query command -queryAsyncJobResult=org.apache.cloudstack.api.user.job.command.QueryAsyncJobResultCmd;15 -listAsyncJobs=org.apache.cloudstack.api.user.job.command.ListAsyncJobsCmd;15 +queryAsyncJobResult=org.apache.cloudstack.api.command.user.job.QueryAsyncJobResultCmd;15 +listAsyncJobs=org.apache.cloudstack.api.command.user.job.ListAsyncJobsCmd;15 #### storage pools commands -listStoragePools=org.apache.cloudstack.api.admin.storagepool.command.ListStoragePoolsCmd;3 -createStoragePool=org.apache.cloudstack.api.admin.storagepool.command.CreateStoragePoolCmd;1 -updateStoragePool=org.apache.cloudstack.api.admin.storagepool.command.UpdateStoragePoolCmd;1 -deleteStoragePool=org.apache.cloudstack.api.admin.storagepool.command.DeletePoolCmd;1 -listClusters=org.apache.cloudstack.api.admin.cluster.command.ListClustersCmd;3 -enableStorageMaintenance=org.apache.cloudstack.api.admin.storagepool.command.PreparePrimaryStorageForMaintenanceCmd;1 -cancelStorageMaintenance=org.apache.cloudstack.api.admin.storagepool.command.CancelPrimaryStorageMaintenanceCmd;1 +listStoragePools=org.apache.cloudstack.api.command.admin.storagepool.ListStoragePoolsCmd;3 +createStoragePool=org.apache.cloudstack.api.command.admin.storagepool.CreateStoragePoolCmd;1 +updateStoragePool=org.apache.cloudstack.api.command.admin.storagepool.UpdateStoragePoolCmd;1 +deleteStoragePool=org.apache.cloudstack.api.command.admin.storagepool.DeletePoolCmd;1 +listClusters=org.apache.cloudstack.api.command.admin.cluster.ListClustersCmd;3 +enableStorageMaintenance=org.apache.cloudstack.api.command.admin.storagepool.PreparePrimaryStorageForMaintenanceCmd;1 +cancelStorageMaintenance=org.apache.cloudstack.api.command.admin.storagepool.CancelPrimaryStorageMaintenanceCmd;1 #### security group commands -createSecurityGroup=org.apache.cloudstack.api.user.securitygroup.command.CreateSecurityGroupCmd;15 -deleteSecurityGroup=org.apache.cloudstack.api.user.securitygroup.command.DeleteSecurityGroupCmd;15 -authorizeSecurityGroupIngress=org.apache.cloudstack.api.user.securitygroup.command.AuthorizeSecurityGroupIngressCmd;15 -revokeSecurityGroupIngress=org.apache.cloudstack.api.user.securitygroup.command.RevokeSecurityGroupIngressCmd;15 -authorizeSecurityGroupEgress=org.apache.cloudstack.api.user.securitygroup.command.AuthorizeSecurityGroupEgressCmd;15 -revokeSecurityGroupEgress=org.apache.cloudstack.api.user.securitygroup.command.RevokeSecurityGroupEgressCmd;15 -listSecurityGroups=org.apache.cloudstack.api.user.securitygroup.command.ListSecurityGroupsCmd;15 +createSecurityGroup=org.apache.cloudstack.api.command.user.securitygroup.CreateSecurityGroupCmd;15 +deleteSecurityGroup=org.apache.cloudstack.api.command.user.securitygroup.DeleteSecurityGroupCmd;15 +authorizeSecurityGroupIngress=org.apache.cloudstack.api.command.user.securitygroup.AuthorizeSecurityGroupIngressCmd;15 +revokeSecurityGroupIngress=org.apache.cloudstack.api.command.user.securitygroup.RevokeSecurityGroupIngressCmd;15 +authorizeSecurityGroupEgress=org.apache.cloudstack.api.command.user.securitygroup.AuthorizeSecurityGroupEgressCmd;15 +revokeSecurityGroupEgress=org.apache.cloudstack.api.command.user.securitygroup.RevokeSecurityGroupEgressCmd;15 +listSecurityGroups=org.apache.cloudstack.api.command.user.securitygroup.ListSecurityGroupsCmd;15 #### vm group commands createInstanceGroup=org.apache.cloudstack.api.user.vmgroup.command.CreateVMGroupCmd;15 @@ -288,92 +288,92 @@ updateInstanceGroup=org.apache.cloudstack.api.user.vmgroup.command.UpdateVMGroup listInstanceGroups=org.apache.cloudstack.api.user.vmgroup.command.ListVMGroupsCmd;15 ### Certificate commands -uploadCustomCertificate=org.apache.cloudstack.api.admin.resource.command.UploadCustomCertificateCmd;1 +uploadCustomCertificate=org.apache.cloudstack.api.command.admin.resource.UploadCustomCertificateCmd;1 ### other commands -listHypervisors=org.apache.cloudstack.api.user.resource.command.ListHypervisorsCmd;15 +listHypervisors=org.apache.cloudstack.api.command.user.resource.ListHypervisorsCmd;15 ### VPN createRemoteAccessVpn=org.apache.cloudstack.api.user.vpn.command.CreateRemoteAccessVpnCmd;15 deleteRemoteAccessVpn=org.apache.cloudstack.api.user.vpn.command.DeleteRemoteAccessVpnCmd;15 listRemoteAccessVpns=org.apache.cloudstack.api.user.vpn.command.ListRemoteAccessVpnsCmd;15 -addVpnUser=org.apache.cloudstack.api.user.user.command.AddVpnUserCmd;15 -removeVpnUser=org.apache.cloudstack.api.user.user.command.RemoveVpnUserCmd;15 -listVpnUsers=org.apache.cloudstack.api.user.user.command.ListVpnUsersCmd;15 +addVpnUser=org.apache.cloudstack.api.command.user.user.AddVpnUserCmd;15 +removeVpnUser=org.apache.cloudstack.api.command.user.user.RemoveVpnUserCmd;15 +listVpnUsers=org.apache.cloudstack.api.command.user.user.ListVpnUsersCmd;15 #### network offering commands -createNetworkOffering=org.apache.cloudstack.api.admin.network.command.CreateNetworkOfferingCmd;1 -updateNetworkOffering=org.apache.cloudstack.api.admin.network.command.UpdateNetworkOfferingCmd;1 -deleteNetworkOffering=org.apache.cloudstack.api.admin.network.command.DeleteNetworkOfferingCmd;1 -listNetworkOfferings=org.apache.cloudstack.api.user.network.command.ListNetworkOfferingsCmd;15 +createNetworkOffering=org.apache.cloudstack.api.command.admin.network.CreateNetworkOfferingCmd;1 +updateNetworkOffering=org.apache.cloudstack.api.command.admin.network.UpdateNetworkOfferingCmd;1 +deleteNetworkOffering=org.apache.cloudstack.api.command.admin.network.DeleteNetworkOfferingCmd;1 +listNetworkOfferings=org.apache.cloudstack.api.command.user.network.ListNetworkOfferingsCmd;15 #### network commands -createNetwork=org.apache.cloudstack.api.user.network.command.CreateNetworkCmd;15 -deleteNetwork=org.apache.cloudstack.api.user.network.command.DeleteNetworkCmd;15 -listNetworks=org.apache.cloudstack.api.user.network.command.ListNetworksCmd;15 -restartNetwork=org.apache.cloudstack.api.user.network.command.RestartNetworkCmd;15 -updateNetwork=org.apache.cloudstack.api.user.network.command.UpdateNetworkCmd;15 +createNetwork=org.apache.cloudstack.api.command.user.network.CreateNetworkCmd;15 +deleteNetwork=org.apache.cloudstack.api.command.user.network.DeleteNetworkCmd;15 +listNetworks=org.apache.cloudstack.api.command.user.network.ListNetworksCmd;15 +restartNetwork=org.apache.cloudstack.api.command.user.network.RestartNetworkCmd;15 +updateNetwork=org.apache.cloudstack.api.command.user.network.UpdateNetworkCmd;15 #### SSH key pair commands -registerSSHKeyPair=org.apache.cloudstack.api.user.ssh.command.RegisterSSHKeyPairCmd;15 -createSSHKeyPair=org.apache.cloudstack.api.user.ssh.command.CreateSSHKeyPairCmd;15 -deleteSSHKeyPair=org.apache.cloudstack.api.user.ssh.command.DeleteSSHKeyPairCmd;15 -listSSHKeyPairs=org.apache.cloudstack.api.user.ssh.command.ListSSHKeyPairsCmd;15 +registerSSHKeyPair=org.apache.cloudstack.api.command.user.ssh.RegisterSSHKeyPairCmd;15 +createSSHKeyPair=org.apache.cloudstack.api.command.user.ssh.CreateSSHKeyPairCmd;15 +deleteSSHKeyPair=org.apache.cloudstack.api.command.user.ssh.DeleteSSHKeyPairCmd;15 +listSSHKeyPairs=org.apache.cloudstack.api.command.user.ssh.ListSSHKeyPairsCmd;15 #### Projects commands -createProject=org.apache.cloudstack.api.user.project.command.CreateProjectCmd;15 -deleteProject=org.apache.cloudstack.api.user.project.command.DeleteProjectCmd;15 -updateProject=org.apache.cloudstack.api.user.project.command.UpdateProjectCmd;15 -activateProject=org.apache.cloudstack.api.user.project.command.ActivateProjectCmd;15 -suspendProject=org.apache.cloudstack.api.user.project.command.SuspendProjectCmd;15 -listProjects=org.apache.cloudstack.api.user.project.command.ListProjectsCmd;15 -addAccountToProject=org.apache.cloudstack.api.user.account.command.AddAccountToProjectCmd;15 -deleteAccountFromProject=org.apache.cloudstack.api.user.account.command.DeleteAccountFromProjectCmd;15 -listProjectAccounts=org.apache.cloudstack.api.user.account.command.ListProjectAccountsCmd;15 -listProjectInvitations=org.apache.cloudstack.api.user.project.command.ListProjectInvitationsCmd;15 -updateProjectInvitation=org.apache.cloudstack.api.user.project.command.UpdateProjectInvitationCmd;15 -deleteProjectInvitation=org.apache.cloudstack.api.user.project.command.DeleteProjectInvitationCmd;15 +createProject=org.apache.cloudstack.api.command.user.project.CreateProjectCmd;15 +deleteProject=org.apache.cloudstack.api.command.user.project.DeleteProjectCmd;15 +updateProject=org.apache.cloudstack.api.command.user.project.UpdateProjectCmd;15 +activateProject=org.apache.cloudstack.api.command.user.project.ActivateProjectCmd;15 +suspendProject=org.apache.cloudstack.api.command.user.project.SuspendProjectCmd;15 +listProjects=org.apache.cloudstack.api.command.user.project.ListProjectsCmd;15 +addAccountToProject=org.apache.cloudstack.api.command.user.account.AddAccountToProjectCmd;15 +deleteAccountFromProject=org.apache.cloudstack.api.command.user.account.DeleteAccountFromProjectCmd;15 +listProjectAccounts=org.apache.cloudstack.api.command.user.account.ListProjectAccountsCmd;15 +listProjectInvitations=org.apache.cloudstack.api.command.user.project.ListProjectInvitationsCmd;15 +updateProjectInvitation=org.apache.cloudstack.api.command.user.project.UpdateProjectInvitationCmd;15 +deleteProjectInvitation=org.apache.cloudstack.api.command.user.project.DeleteProjectInvitationCmd;15 #### -createFirewallRule=org.apache.cloudstack.api.user.firewall.command.CreateFirewallRuleCmd;15 -deleteFirewallRule=org.apache.cloudstack.api.user.firewall.command.DeleteFirewallRuleCmd;15 -listFirewallRules=org.apache.cloudstack.api.user.firewall.command.ListFirewallRulesCmd;15 +createFirewallRule=org.apache.cloudstack.api.command.user.firewall.CreateFirewallRuleCmd;15 +deleteFirewallRule=org.apache.cloudstack.api.command.user.firewall.DeleteFirewallRuleCmd;15 +listFirewallRules=org.apache.cloudstack.api.command.user.firewall.ListFirewallRulesCmd;15 #### hypervisor capabilities commands -updateHypervisorCapabilities=org.apache.cloudstack.api.admin.config.command.UpdateHypervisorCapabilitiesCmd;1 -listHypervisorCapabilities=org.apache.cloudstack.api.admin.config.command.ListHypervisorCapabilitiesCmd;1 +updateHypervisorCapabilities=org.apache.cloudstack.api.command.admin.config.UpdateHypervisorCapabilitiesCmd;1 +listHypervisorCapabilities=org.apache.cloudstack.api.command.admin.config.ListHypervisorCapabilitiesCmd;1 #### Physical Network commands -createPhysicalNetwork=org.apache.cloudstack.api.admin.network.command.CreatePhysicalNetworkCmd;1 -deletePhysicalNetwork=org.apache.cloudstack.api.admin.network.command.DeletePhysicalNetworkCmd;1 -listPhysicalNetworks=org.apache.cloudstack.api.admin.network.command.ListPhysicalNetworksCmd;1 -updatePhysicalNetwork=org.apache.cloudstack.api.admin.network.command.UpdatePhysicalNetworkCmd;1 +createPhysicalNetwork=org.apache.cloudstack.api.command.admin.network.CreatePhysicalNetworkCmd;1 +deletePhysicalNetwork=org.apache.cloudstack.api.command.admin.network.DeletePhysicalNetworkCmd;1 +listPhysicalNetworks=org.apache.cloudstack.api.command.admin.network.ListPhysicalNetworksCmd;1 +updatePhysicalNetwork=org.apache.cloudstack.api.command.admin.network.UpdatePhysicalNetworkCmd;1 #### Physical Network Service Provider commands -listSupportedNetworkServices=org.apache.cloudstack.api.admin.network.command.ListSupportedNetworkServicesCmd;1 -addNetworkServiceProvider=org.apache.cloudstack.api.admin.network.command.AddNetworkServiceProviderCmd;1 -deleteNetworkServiceProvider=org.apache.cloudstack.api.admin.network.command.DeleteNetworkServiceProviderCmd;1 -listNetworkServiceProviders=org.apache.cloudstack.api.admin.network.command.ListNetworkServiceProvidersCmd;1 -updateNetworkServiceProvider=org.apache.cloudstack.api.admin.network.command.UpdateNetworkServiceProviderCmd;1 +listSupportedNetworkServices=org.apache.cloudstack.api.command.admin.network.ListSupportedNetworkServicesCmd;1 +addNetworkServiceProvider=org.apache.cloudstack.api.command.admin.network.AddNetworkServiceProviderCmd;1 +deleteNetworkServiceProvider=org.apache.cloudstack.api.command.admin.network.DeleteNetworkServiceProviderCmd;1 +listNetworkServiceProviders=org.apache.cloudstack.api.command.admin.network.ListNetworkServiceProvidersCmd;1 +updateNetworkServiceProvider=org.apache.cloudstack.api.command.admin.network.UpdateNetworkServiceProviderCmd;1 #### Physical Network Traffic Type commands -addTrafficType=org.apache.cloudstack.api.admin.usage.command.AddTrafficTypeCmd;1 -deleteTrafficType=org.apache.cloudstack.api.admin.usage.command.DeleteTrafficTypeCmd;1 -listTrafficTypes=org.apache.cloudstack.api.admin.usage.command.ListTrafficTypesCmd;1 -updateTrafficType=org.apache.cloudstack.api.admin.usage.command.UpdateTrafficTypeCmd;1 -listTrafficTypeImplementors=org.apache.cloudstack.api.admin.usage.command.ListTrafficTypeImplementorsCmd;1 +addTrafficType=org.apache.cloudstack.api.command.admin.usage.AddTrafficTypeCmd;1 +deleteTrafficType=org.apache.cloudstack.api.command.admin.usage.DeleteTrafficTypeCmd;1 +listTrafficTypes=org.apache.cloudstack.api.command.admin.usage.ListTrafficTypesCmd;1 +updateTrafficType=org.apache.cloudstack.api.command.admin.usage.UpdateTrafficTypeCmd;1 +listTrafficTypeImplementors=org.apache.cloudstack.api.command.admin.usage.ListTrafficTypeImplementorsCmd;1 #### Storage Network commands -createStorageNetworkIpRange=org.apache.cloudstack.api.admin.network.command.CreateStorageNetworkIpRangeCmd;1 -deleteStorageNetworkIpRange=org.apache.cloudstack.api.admin.network.command.DeleteStorageNetworkIpRangeCmd;1 -listStorageNetworkIpRange=org.apache.cloudstack.api.admin.network.command.ListStorageNetworkIpRangeCmd;1 -updateStorageNetworkIpRange=org.apache.cloudstack.api.admin.network.command.UpdateStorageNetworkIpRangeCmd;1 +createStorageNetworkIpRange=org.apache.cloudstack.api.command.admin.network.CreateStorageNetworkIpRangeCmd;1 +deleteStorageNetworkIpRange=org.apache.cloudstack.api.command.admin.network.DeleteStorageNetworkIpRangeCmd;1 +listStorageNetworkIpRange=org.apache.cloudstack.api.command.admin.network.ListStorageNetworkIpRangeCmd;1 +updateStorageNetworkIpRange=org.apache.cloudstack.api.command.admin.network.UpdateStorageNetworkIpRangeCmd;1 ### Network Devices commands -addNetworkDevice=org.apache.cloudstack.api.admin.network.command.AddNetworkDeviceCmd;1 -listNetworkDevice=org.apache.cloudstack.api.admin.network.command.ListNetworkDeviceCmd;1 -deleteNetworkDevice=org.apache.cloudstack.api.admin.network.command.DeleteNetworkDeviceCmd;1 +addNetworkDevice=org.apache.cloudstack.api.command.admin.network.AddNetworkDeviceCmd;1 +listNetworkDevice=org.apache.cloudstack.api.command.admin.network.ListNetworkDeviceCmd;1 +deleteNetworkDevice=org.apache.cloudstack.api.command.admin.network.DeleteNetworkDeviceCmd;1 ### VPC commands createVPC=org.apache.cloudstack.api.user.vpc.command.CreateVPCCmd;15 @@ -383,20 +383,20 @@ updateVPC=org.apache.cloudstack.api.user.vpc.command.UpdateVPCCmd;15 restartVPC=org.apache.cloudstack.api.user.vpc.command.RestartVPCCmd;15 #### VPC offering commands -createVPCOffering=org.apache.cloudstack.api.admin.vpc.command.CreateVPCOfferingCmd;1 -updateVPCOffering=org.apache.cloudstack.api.admin.vpc.command.UpdateVPCOfferingCmd;1 -deleteVPCOffering=org.apache.cloudstack.api.admin.vpc.command.DeleteVPCOfferingCmd;1 +createVPCOffering=org.apache.cloudstack.api.command.admin.vpc.CreateVPCOfferingCmd;1 +updateVPCOffering=org.apache.cloudstack.api.command.admin.vpc.UpdateVPCOfferingCmd;1 +deleteVPCOffering=org.apache.cloudstack.api.command.admin.vpc.DeleteVPCOfferingCmd;1 listVPCOfferings=org.apache.cloudstack.api.user.vpc.command.ListVPCOfferingsCmd;15 #### Private gateway commands -createPrivateGateway=org.apache.cloudstack.api.admin.vpc.command.CreatePrivateGatewayCmd;1 +createPrivateGateway=org.apache.cloudstack.api.command.admin.vpc.CreatePrivateGatewayCmd;1 listPrivateGateways=org.apache.cloudstack.api.user.vpc.command.ListPrivateGatewaysCmd;15 -deletePrivateGateway=org.apache.cloudstack.api.admin.vpc.command.DeletePrivateGatewayCmd;1 +deletePrivateGateway=org.apache.cloudstack.api.command.admin.vpc.DeletePrivateGatewayCmd;1 #### Network ACL commands -createNetworkACL=org.apache.cloudstack.api.user.network.command.CreateNetworkACLCmd;15 -deleteNetworkACL=org.apache.cloudstack.api.user.network.command.DeleteNetworkACLCmd;15 -listNetworkACLs=org.apache.cloudstack.api.user.network.command.ListNetworkACLsCmd;15 +createNetworkACL=org.apache.cloudstack.api.command.user.network.CreateNetworkACLCmd;15 +deleteNetworkACL=org.apache.cloudstack.api.command.user.network.DeleteNetworkACLCmd;15 +listNetworkACLs=org.apache.cloudstack.api.command.user.network.ListNetworkACLsCmd;15 #### Static route commands createStaticRoute=org.apache.cloudstack.api.user.vpc.command.CreateStaticRouteCmd;15 @@ -404,9 +404,9 @@ deleteStaticRoute=org.apache.cloudstack.api.user.vpc.command.DeleteStaticRouteCm listStaticRoutes=org.apache.cloudstack.api.user.vpc.command.ListStaticRoutesCmd;15 #### Tags commands -createTags=org.apache.cloudstack.api.user.tag.command.CreateTagsCmd;15 -deleteTags=org.apache.cloudstack.api.user.tag.command.DeleteTagsCmd;15 -listTags=org.apache.cloudstack.api.user.tag.command.ListTagsCmd;15 +createTags=org.apache.cloudstack.api.command.user.tag.CreateTagsCmd;15 +deleteTags=org.apache.cloudstack.api.command.user.tag.DeleteTagsCmd;15 +listTags=org.apache.cloudstack.api.command.user.tag.ListTagsCmd;15 ### Site-to-site VPN commands createVpnCustomerGateway=org.apache.cloudstack.api.user.vpn.command.CreateVpnCustomerGatewayCmd;15 diff --git a/client/tomcatconf/virtualrouter_commands.properties.in b/client/tomcatconf/virtualrouter_commands.properties.in index 1cca28a40ea..e8d7933462e 100644 --- a/client/tomcatconf/virtualrouter_commands.properties.in +++ b/client/tomcatconf/virtualrouter_commands.properties.in @@ -19,6 +19,6 @@ ### Please standardize naming conventions to camel-case (even for acronyms). #### router commands -createVirtualRouterElement=org.apache.cloudstack.api.admin.router.command.CreateVirtualRouterElementCmd;7 -configureVirtualRouterElement=org.apache.cloudstack.api.admin.router.command.ConfigureVirtualRouterElementCmd;7 -listVirtualRouterElements=org.apache.cloudstack.api.admin.router.command.ListVirtualRouterElementsCmd;7 +createVirtualRouterElement=org.apache.cloudstack.api.command.admin.router.CreateVirtualRouterElementCmd;7 +configureVirtualRouterElement=org.apache.cloudstack.api.command.admin.router.ConfigureVirtualRouterElementCmd;7 +listVirtualRouterElements=org.apache.cloudstack.api.command.admin.router.ListVirtualRouterElementsCmd;7 diff --git a/plugins/network-elements/elastic-loadbalancer/src/com/cloud/network/lb/ElasticLoadBalancerManager.java b/plugins/network-elements/elastic-loadbalancer/src/com/cloud/network/lb/ElasticLoadBalancerManager.java index d4cedf647f1..aea795d436f 100644 --- a/plugins/network-elements/elastic-loadbalancer/src/com/cloud/network/lb/ElasticLoadBalancerManager.java +++ b/plugins/network-elements/elastic-loadbalancer/src/com/cloud/network/lb/ElasticLoadBalancerManager.java @@ -18,7 +18,7 @@ package com.cloud.network.lb; import java.util.List; -import org.apache.cloudstack.api.user.lb.command.CreateLoadBalancerRuleCmd; +import org.apache.cloudstack.api.command.user.loadbalancer.CreateLoadBalancerRuleCmd; import com.cloud.exception.InsufficientAddressCapacityException; import com.cloud.exception.NetworkRuleConflictException; import com.cloud.exception.ResourceUnavailableException; diff --git a/plugins/network-elements/elastic-loadbalancer/src/com/cloud/network/lb/ElasticLoadBalancerManagerImpl.java b/plugins/network-elements/elastic-loadbalancer/src/com/cloud/network/lb/ElasticLoadBalancerManagerImpl.java index 3ce2717e936..c3f03b87898 100644 --- a/plugins/network-elements/elastic-loadbalancer/src/com/cloud/network/lb/ElasticLoadBalancerManagerImpl.java +++ b/plugins/network-elements/elastic-loadbalancer/src/com/cloud/network/lb/ElasticLoadBalancerManagerImpl.java @@ -32,7 +32,7 @@ import java.util.concurrent.TimeUnit; import javax.ejb.Local; import javax.naming.ConfigurationException; -import org.apache.cloudstack.api.user.lb.command.CreateLoadBalancerRuleCmd; +import org.apache.cloudstack.api.command.user.loadbalancer.CreateLoadBalancerRuleCmd; import org.apache.log4j.Logger; import com.cloud.agent.AgentManager; diff --git a/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/ListExternalFirewallsCmd.java b/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/ListExternalFirewallsCmd.java index 6777765c30f..153f9e1b29f 100644 --- a/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/ListExternalFirewallsCmd.java +++ b/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/ListExternalFirewallsCmd.java @@ -19,7 +19,7 @@ package com.cloud.api.commands; import java.util.ArrayList; import java.util.List; -import org.apache.cloudstack.api.user.offering.command.ListServiceOfferingsCmd; +import org.apache.cloudstack.api.command.user.offering.ListServiceOfferingsCmd; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; diff --git a/server/src/com/cloud/api/ApiDispatcher.java b/server/src/com/cloud/api/ApiDispatcher.java index fc2b6256bb7..37321a1dded 100755 --- a/server/src/com/cloud/api/ApiDispatcher.java +++ b/server/src/com/cloud/api/ApiDispatcher.java @@ -34,7 +34,7 @@ import org.apache.log4j.Logger; import com.cloud.acl.ControlledEntity; import com.cloud.acl.Role; import org.apache.cloudstack.api.BaseCmd.CommandType; -import org.apache.cloudstack.api.user.event.command.ListEventsCmd; +import org.apache.cloudstack.api.command.user.event.ListEventsCmd; import com.cloud.async.AsyncCommandQueued; import com.cloud.async.AsyncJobManager; import com.cloud.configuration.Config; diff --git a/server/src/com/cloud/api/ApiResponseHelper.java b/server/src/com/cloud/api/ApiResponseHelper.java index 95d10f4c10e..15a1a791f5b 100755 --- a/server/src/com/cloud/api/ApiResponseHelper.java +++ b/server/src/com/cloud/api/ApiResponseHelper.java @@ -39,7 +39,7 @@ import com.cloud.acl.ControlledEntity; import com.cloud.acl.ControlledEntity.ACLType; import org.apache.cloudstack.api.ApiConstants.HostDetails; import org.apache.cloudstack.api.ApiConstants.VMDetails; -import org.apache.cloudstack.api.user.job.command.QueryAsyncJobResultCmd; +import org.apache.cloudstack.api.command.user.job.QueryAsyncJobResultCmd; import com.cloud.api.response.AccountResponse; import com.cloud.api.response.ApiResponseSerializer; import com.cloud.api.response.AsyncJobResponse; @@ -70,12 +70,10 @@ import com.cloud.api.response.IpForwardingRuleResponse; import com.cloud.api.response.LBStickinessPolicyResponse; import com.cloud.api.response.LBStickinessResponse; import com.cloud.api.response.LDAPConfigResponse; -import com.cloud.api.response.ListResponse; import com.cloud.api.response.LoadBalancerResponse; import com.cloud.api.response.NetworkACLResponse; import com.cloud.api.response.NetworkOfferingResponse; import com.cloud.api.response.NetworkResponse; -import com.cloud.api.response.NicResponse; import com.cloud.api.response.PhysicalNetworkResponse; import com.cloud.api.response.PodResponse; import com.cloud.api.response.PrivateGatewayResponse; @@ -88,9 +86,7 @@ import com.cloud.api.response.ResourceCountResponse; import com.cloud.api.response.ResourceLimitResponse; import com.cloud.api.response.ResourceTagResponse; import com.cloud.api.response.SecurityGroupResponse; -import com.cloud.api.response.SecurityGroupResultObject; import com.cloud.api.response.SecurityGroupRuleResponse; -import com.cloud.api.response.SecurityGroupRuleResultObject; import com.cloud.api.response.ServiceOfferingResponse; import com.cloud.api.response.ServiceResponse; import com.cloud.api.response.Site2SiteCustomerGatewayResponse; @@ -178,8 +174,6 @@ import com.cloud.network.rules.PortForwardingRule; import com.cloud.network.rules.StaticNatRule; import com.cloud.network.rules.StickinessPolicy; import com.cloud.network.security.SecurityGroup; -import com.cloud.network.security.SecurityGroupRules; -import com.cloud.network.security.SecurityGroupVO; import com.cloud.network.security.SecurityRule; import com.cloud.network.security.SecurityRule.SecurityRuleType; import com.cloud.network.vpc.PrivateGateway; @@ -230,17 +224,11 @@ import com.cloud.utils.StringUtils; import com.cloud.utils.net.NetUtils; import com.cloud.vm.ConsoleProxyVO; import com.cloud.vm.InstanceGroup; -import com.cloud.vm.InstanceGroupVO; import com.cloud.vm.NicProfile; -import com.cloud.vm.UserVmDetailVO; import com.cloud.vm.VMInstanceVO; import com.cloud.vm.VirtualMachine; import com.cloud.vm.VirtualMachine.State; import com.cloud.vm.VirtualMachine.Type; -import com.cloud.vm.VmStats; -import com.cloud.vm.dao.UserVmData; -import com.cloud.vm.dao.UserVmData.NicData; -import com.cloud.vm.dao.UserVmData.SecurityGroupData; public class ApiResponseHelper implements ResponseGenerator { diff --git a/server/src/com/cloud/api/ApiServer.java b/server/src/com/cloud/api/ApiServer.java index ae12715b0dd..ee4a2228be1 100755 --- a/server/src/com/cloud/api/ApiServer.java +++ b/server/src/com/cloud/api/ApiServer.java @@ -50,6 +50,7 @@ import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import org.apache.cloudstack.api.*; +import org.apache.cloudstack.api.command.user.event.ListEventsCmd; import org.apache.commons.codec.binary.Base64; import org.apache.http.ConnectionClosedException; import org.apache.http.HttpException; @@ -78,10 +79,9 @@ 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.event.command.ListEventsCmd; -import org.apache.cloudstack.api.user.securitygroup.command.ListSecurityGroupsCmd; -import org.apache.cloudstack.api.user.tag.command.ListTagsCmd; +import org.apache.cloudstack.api.command.admin.router.ListRoutersCmd; +import org.apache.cloudstack.api.command.user.securitygroup.ListSecurityGroupsCmd; +import org.apache.cloudstack.api.command.user.tag.ListTagsCmd; import org.apache.cloudstack.api.user.vm.command.ListVMsCmd; import com.cloud.acl.ControlledEntity; import com.cloud.api.response.ApiResponseSerializer; diff --git a/server/src/com/cloud/api/commands/ListTrafficMonitorsCmd.java b/server/src/com/cloud/api/commands/ListTrafficMonitorsCmd.java index a6f35976758..0bdc362fdf9 100644 --- a/server/src/com/cloud/api/commands/ListTrafficMonitorsCmd.java +++ b/server/src/com/cloud/api/commands/ListTrafficMonitorsCmd.java @@ -19,7 +19,7 @@ package com.cloud.api.commands; import java.util.ArrayList; import java.util.List; -import org.apache.cloudstack.api.user.offering.command.ListServiceOfferingsCmd; +import org.apache.cloudstack.api.command.user.offering.ListServiceOfferingsCmd; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; diff --git a/server/src/com/cloud/async/AsyncJobManager.java b/server/src/com/cloud/async/AsyncJobManager.java index 7876b551903..4cd67f3e39c 100644 --- a/server/src/com/cloud/async/AsyncJobManager.java +++ b/server/src/com/cloud/async/AsyncJobManager.java @@ -18,7 +18,7 @@ package com.cloud.async; import java.util.List; -import org.apache.cloudstack.api.user.job.command.QueryAsyncJobResultCmd; +import org.apache.cloudstack.api.command.user.job.QueryAsyncJobResultCmd; import com.cloud.utils.component.Manager; public interface AsyncJobManager extends Manager { diff --git a/server/src/com/cloud/async/AsyncJobManagerImpl.java b/server/src/com/cloud/async/AsyncJobManagerImpl.java index a451f28c438..86a23c9c0a3 100644 --- a/server/src/com/cloud/async/AsyncJobManagerImpl.java +++ b/server/src/com/cloud/async/AsyncJobManagerImpl.java @@ -34,7 +34,7 @@ import java.util.concurrent.TimeUnit; import javax.ejb.Local; import javax.naming.ConfigurationException; -import org.apache.cloudstack.api.user.job.command.QueryAsyncJobResultCmd; +import org.apache.cloudstack.api.command.user.job.QueryAsyncJobResultCmd; import org.apache.log4j.Logger; import org.apache.log4j.NDC; diff --git a/server/src/com/cloud/baremetal/BareMetalTemplateAdapter.java b/server/src/com/cloud/baremetal/BareMetalTemplateAdapter.java index c609e83468b..25298a9eebd 100755 --- a/server/src/com/cloud/baremetal/BareMetalTemplateAdapter.java +++ b/server/src/com/cloud/baremetal/BareMetalTemplateAdapter.java @@ -21,11 +21,11 @@ import java.util.List; import javax.ejb.Local; -import org.apache.cloudstack.api.user.iso.command.DeleteIsoCmd; -import org.apache.cloudstack.api.user.iso.command.RegisterIsoCmd; +import org.apache.cloudstack.api.command.user.iso.DeleteIsoCmd; +import org.apache.cloudstack.api.command.user.iso.RegisterIsoCmd; +import org.apache.cloudstack.api.command.user.template.RegisterTemplateCmd; import org.apache.log4j.Logger; -import org.apache.cloudstack.api.user.template.command.RegisterTemplateCmd; import com.cloud.configuration.Resource.ResourceType; import com.cloud.dc.DataCenterVO; import com.cloud.event.EventTypes; diff --git a/server/src/com/cloud/baremetal/BareMetalVmManagerImpl.java b/server/src/com/cloud/baremetal/BareMetalVmManagerImpl.java index b5abd82af7b..e4fcdf8b14d 100755 --- a/server/src/com/cloud/baremetal/BareMetalVmManagerImpl.java +++ b/server/src/com/cloud/baremetal/BareMetalVmManagerImpl.java @@ -25,7 +25,7 @@ import java.util.concurrent.Executors; import javax.ejb.Local; import javax.naming.ConfigurationException; -import org.apache.cloudstack.api.user.template.command.CreateTemplateCmd; +import org.apache.cloudstack.api.command.user.template.CreateTemplateCmd; import org.apache.cloudstack.api.user.volume.command.AttachVolumeCmd; import org.apache.cloudstack.api.user.volume.command.DetachVolumeCmd; import org.apache.log4j.Logger; diff --git a/server/src/com/cloud/configuration/ConfigurationManagerImpl.java b/server/src/com/cloud/configuration/ConfigurationManagerImpl.java index f5dea7ed09b..c25b3b7ba6f 100755 --- a/server/src/com/cloud/configuration/ConfigurationManagerImpl.java +++ b/server/src/com/cloud/configuration/ConfigurationManagerImpl.java @@ -38,32 +38,30 @@ import javax.naming.NamingException; import javax.naming.directory.DirContext; import javax.naming.directory.InitialDirContext; -import org.apache.cloudstack.api.admin.config.command.UpdateCfgCmd; -import org.apache.cloudstack.api.admin.ldap.command.LDAPConfigCmd; -import org.apache.cloudstack.api.admin.ldap.command.LDAPRemoveCmd; -import org.apache.cloudstack.api.admin.network.command.DeleteNetworkOfferingCmd; -import org.apache.cloudstack.api.admin.network.command.UpdateNetworkOfferingCmd; -import org.apache.cloudstack.api.admin.offering.command.CreateDiskOfferingCmd; -import org.apache.cloudstack.api.admin.offering.command.CreateServiceOfferingCmd; -import org.apache.cloudstack.api.admin.pod.command.DeletePodCmd; -import org.apache.cloudstack.api.admin.pod.command.UpdatePodCmd; -import org.apache.cloudstack.api.admin.vlan.command.CreateVlanIpRangeCmd; -import org.apache.cloudstack.api.admin.zone.command.CreateZoneCmd; -import org.apache.cloudstack.api.admin.zone.command.UpdateZoneCmd; +import org.apache.cloudstack.api.command.admin.config.UpdateCfgCmd; +import org.apache.cloudstack.api.command.admin.ldap.LDAPConfigCmd; +import org.apache.cloudstack.api.command.admin.ldap.LDAPRemoveCmd; +import org.apache.cloudstack.api.command.admin.network.DeleteNetworkOfferingCmd; +import org.apache.cloudstack.api.command.admin.network.CreateNetworkOfferingCmd; +import org.apache.cloudstack.api.command.admin.network.UpdateNetworkOfferingCmd; +import org.apache.cloudstack.api.command.admin.offering.CreateDiskOfferingCmd; +import org.apache.cloudstack.api.command.admin.offering.*; +import org.apache.cloudstack.api.command.admin.pod.DeletePodCmd; +import org.apache.cloudstack.api.command.admin.pod.UpdatePodCmd; +import org.apache.cloudstack.api.command.admin.vlan.CreateVlanIpRangeCmd; +import org.apache.cloudstack.api.command.admin.zone.CreateZoneCmd; +import org.apache.cloudstack.api.command.admin.zone.DeleteZoneCmd; +import org.apache.cloudstack.api.command.admin.zone.UpdateZoneCmd; +import org.apache.cloudstack.api.command.admin.offering.CreateServiceOfferingCmd; import org.apache.log4j.Logger; import com.cloud.acl.SecurityChecker; import com.cloud.alert.AlertManager; import org.apache.cloudstack.api.ApiConstants.LDAPParams; import com.cloud.api.ApiDBUtils; -import org.apache.cloudstack.api.admin.network.command.CreateNetworkOfferingCmd; -import org.apache.cloudstack.api.admin.offering.command.DeleteDiskOfferingCmd; -import org.apache.cloudstack.api.admin.offering.command.DeleteServiceOfferingCmd; -import org.apache.cloudstack.api.admin.vlan.command.DeleteVlanIpRangeCmd; -import org.apache.cloudstack.api.admin.zone.command.DeleteZoneCmd; -import org.apache.cloudstack.api.user.network.command.ListNetworkOfferingsCmd; -import org.apache.cloudstack.api.admin.offering.command.UpdateDiskOfferingCmd; -import org.apache.cloudstack.api.admin.offering.command.UpdateServiceOfferingCmd; +import org.apache.cloudstack.api.command.admin.offering.DeleteServiceOfferingCmd; +import org.apache.cloudstack.api.command.admin.vlan.DeleteVlanIpRangeCmd; +import org.apache.cloudstack.api.command.user.network.ListNetworkOfferingsCmd; import com.cloud.capacity.dao.CapacityDao; import com.cloud.configuration.Resource.ResourceType; import com.cloud.configuration.dao.ConfigurationDao; diff --git a/server/src/com/cloud/network/ExternalNetworkDeviceManagerImpl.java b/server/src/com/cloud/network/ExternalNetworkDeviceManagerImpl.java index 8767f95108c..39f2cc8dbe2 100755 --- a/server/src/com/cloud/network/ExternalNetworkDeviceManagerImpl.java +++ b/server/src/com/cloud/network/ExternalNetworkDeviceManagerImpl.java @@ -26,15 +26,15 @@ import java.util.concurrent.ScheduledExecutorService; import javax.ejb.Local; import javax.naming.ConfigurationException; -import org.apache.cloudstack.api.admin.network.command.AddNetworkDeviceCmd; -import org.apache.cloudstack.api.admin.network.command.ListNetworkDeviceCmd; +import org.apache.cloudstack.api.command.admin.network.AddNetworkDeviceCmd; +import org.apache.cloudstack.api.command.admin.network.ListNetworkDeviceCmd; import org.apache.cloudstack.network.ExternalNetworkDeviceManager; import org.apache.log4j.Logger; import com.cloud.agent.AgentManager; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.IdentityService; -import org.apache.cloudstack.api.admin.network.command.DeleteNetworkDeviceCmd; +import org.apache.cloudstack.api.command.admin.network.DeleteNetworkDeviceCmd; import com.cloud.baremetal.ExternalDhcpManager; import com.cloud.baremetal.PxeServerManager; import com.cloud.baremetal.PxeServerProfile; @@ -59,7 +59,7 @@ import com.cloud.network.dao.VpnUserDao; import com.cloud.network.rules.dao.PortForwardingRulesDao; import com.cloud.offerings.dao.NetworkOfferingDao; import com.cloud.server.ManagementServer; -import org.apache.cloudstack.api.admin.network.response.NetworkDeviceResponse; +import org.apache.cloudstack.api.response.NetworkDeviceResponse; import com.cloud.server.api.response.NwDeviceDhcpResponse; import com.cloud.server.api.response.PxePingResponse; import com.cloud.user.AccountManager; diff --git a/server/src/com/cloud/network/NetworkManagerImpl.java b/server/src/com/cloud/network/NetworkManagerImpl.java index 542efa7e7b6..651f33b3948 100755 --- a/server/src/com/cloud/network/NetworkManagerImpl.java +++ b/server/src/com/cloud/network/NetworkManagerImpl.java @@ -40,8 +40,9 @@ import java.util.concurrent.TimeUnit; import javax.ejb.Local; import javax.naming.ConfigurationException; -import org.apache.cloudstack.api.admin.usage.command.ListTrafficTypeImplementorsCmd; -import org.apache.cloudstack.api.user.network.command.CreateNetworkCmd; +import org.apache.cloudstack.api.command.admin.usage.ListTrafficTypeImplementorsCmd; +import org.apache.cloudstack.api.command.user.network.CreateNetworkCmd; +import org.apache.cloudstack.api.command.user.network.RestartNetworkCmd; import org.apache.log4j.Logger; import com.cloud.acl.ControlledEntity.ACLType; @@ -58,8 +59,7 @@ import com.cloud.agent.api.StartupCommand; import com.cloud.agent.api.StartupRoutingCommand; import com.cloud.agent.api.to.NicTO; import com.cloud.alert.AlertManager; -import org.apache.cloudstack.api.user.network.command.ListNetworksCmd; -import org.apache.cloudstack.api.user.network.command.RestartNetworkCmd; +import org.apache.cloudstack.api.command.user.network.ListNetworksCmd; import com.cloud.configuration.Config; import com.cloud.configuration.ConfigurationManager; import com.cloud.configuration.Resource.ResourceType; diff --git a/server/src/com/cloud/network/StorageNetworkManagerImpl.java b/server/src/com/cloud/network/StorageNetworkManagerImpl.java index 04dfcd3431f..f46081c9de0 100755 --- a/server/src/com/cloud/network/StorageNetworkManagerImpl.java +++ b/server/src/com/cloud/network/StorageNetworkManagerImpl.java @@ -25,12 +25,12 @@ import java.util.Map; import javax.ejb.Local; import javax.naming.ConfigurationException; -import org.apache.cloudstack.api.admin.network.command.CreateStorageNetworkIpRangeCmd; -import org.apache.cloudstack.api.admin.network.command.ListStorageNetworkIpRangeCmd; -import org.apache.cloudstack.api.admin.network.command.UpdateStorageNetworkIpRangeCmd; +import org.apache.cloudstack.api.command.admin.network.CreateStorageNetworkIpRangeCmd; +import org.apache.cloudstack.api.command.admin.network.ListStorageNetworkIpRangeCmd; +import org.apache.cloudstack.api.command.admin.network.UpdateStorageNetworkIpRangeCmd; import org.apache.log4j.Logger; -import org.apache.cloudstack.api.admin.network.command.DeleteStorageNetworkIpRangeCmd; +import org.apache.cloudstack.api.command.admin.network.DeleteStorageNetworkIpRangeCmd; import com.cloud.dc.HostPodVO; import com.cloud.dc.StorageNetworkIpRange; import com.cloud.dc.StorageNetworkIpAddressVO; diff --git a/server/src/com/cloud/network/as/AutoScaleManagerImpl.java b/server/src/com/cloud/network/as/AutoScaleManagerImpl.java index 35b6c9beac1..018369d7b31 100644 --- a/server/src/com/cloud/network/as/AutoScaleManagerImpl.java +++ b/server/src/com/cloud/network/as/AutoScaleManagerImpl.java @@ -25,7 +25,8 @@ import java.util.Map; import javax.ejb.Local; import javax.naming.ConfigurationException; -import org.apache.cloudstack.api.user.autoscale.command.*; +import org.apache.cloudstack.api.command.admin.autoscale.CreateCounterCmd; +import org.apache.cloudstack.api.command.user.autoscale.*; import org.apache.log4j.Logger; import com.cloud.acl.ControlledEntity; @@ -33,18 +34,14 @@ import org.apache.cloudstack.api.ApiConstants; import com.cloud.api.ApiDBUtils; import com.cloud.api.ApiDispatcher; import org.apache.cloudstack.api.BaseListAccountResourcesCmd; -import org.apache.cloudstack.api.user.autoscale.command.CreateAutoScalePolicyCmd; -import org.apache.cloudstack.api.user.autoscale.command.CreateAutoScaleVmGroupCmd; -import org.apache.cloudstack.api.user.autoscale.command.CreateAutoScaleVmProfileCmd; -import org.apache.cloudstack.api.user.autoscale.command.CreateConditionCmd; -import org.apache.cloudstack.api.admin.autoscale.command.CreateCounterCmd; +import org.apache.cloudstack.api.command.user.autoscale.CreateAutoScalePolicyCmd; +import org.apache.cloudstack.api.command.user.autoscale.CreateAutoScaleVmGroupCmd; +import org.apache.cloudstack.api.command.user.autoscale.CreateConditionCmd; import org.apache.cloudstack.api.user.vm.command.DeployVMCmd; -import org.apache.cloudstack.api.user.autoscale.command.ListAutoScalePoliciesCmd; -import org.apache.cloudstack.api.user.autoscale.command.ListAutoScaleVmGroupsCmd; -import org.apache.cloudstack.api.user.autoscale.command.ListConditionsCmd; -import org.apache.cloudstack.api.user.autoscale.command.ListCountersCmd; -import org.apache.cloudstack.api.user.autoscale.command.UpdateAutoScalePolicyCmd; -import org.apache.cloudstack.api.user.autoscale.command.UpdateAutoScaleVmProfileCmd; +import org.apache.cloudstack.api.command.user.autoscale.ListAutoScaleVmGroupsCmd; +import org.apache.cloudstack.api.command.user.autoscale.ListConditionsCmd; +import org.apache.cloudstack.api.command.user.autoscale.UpdateAutoScalePolicyCmd; +import org.apache.cloudstack.api.command.user.autoscale.UpdateAutoScaleVmProfileCmd; import com.cloud.configuration.Config; import com.cloud.configuration.ConfigurationManager; import com.cloud.configuration.dao.ConfigurationDao; diff --git a/server/src/com/cloud/network/element/VirtualRouterElement.java b/server/src/com/cloud/network/element/VirtualRouterElement.java index 5339b3f50a4..5167616f085 100755 --- a/server/src/com/cloud/network/element/VirtualRouterElement.java +++ b/server/src/com/cloud/network/element/VirtualRouterElement.java @@ -24,8 +24,8 @@ import java.util.Set; import javax.ejb.Local; -import org.apache.cloudstack.api.admin.router.command.ConfigureVirtualRouterElementCmd; -import org.apache.cloudstack.api.admin.router.command.ListVirtualRouterElementsCmd; +import org.apache.cloudstack.api.command.admin.router.ConfigureVirtualRouterElementCmd; +import org.apache.cloudstack.api.command.admin.router.ListVirtualRouterElementsCmd; import org.apache.log4j.Logger; import com.cloud.configuration.ConfigurationManager; diff --git a/server/src/com/cloud/network/firewall/FirewallManagerImpl.java b/server/src/com/cloud/network/firewall/FirewallManagerImpl.java index f7ee1c7e719..340e872a9de 100644 --- a/server/src/com/cloud/network/firewall/FirewallManagerImpl.java +++ b/server/src/com/cloud/network/firewall/FirewallManagerImpl.java @@ -26,7 +26,7 @@ import java.util.Set; import javax.ejb.Local; import javax.naming.ConfigurationException; -import org.apache.cloudstack.api.user.firewall.command.ListFirewallRulesCmd; +import org.apache.cloudstack.api.command.user.firewall.ListFirewallRulesCmd; import org.apache.log4j.Logger; import com.cloud.configuration.Config; diff --git a/server/src/com/cloud/network/lb/LoadBalancingRulesManager.java b/server/src/com/cloud/network/lb/LoadBalancingRulesManager.java index c6aba418556..c9b3f9336b8 100644 --- a/server/src/com/cloud/network/lb/LoadBalancingRulesManager.java +++ b/server/src/com/cloud/network/lb/LoadBalancingRulesManager.java @@ -18,7 +18,7 @@ package com.cloud.network.lb; import java.util.List; -import org.apache.cloudstack.api.user.lb.command.CreateLoadBalancerRuleCmd; +import org.apache.cloudstack.api.command.user.loadbalancer.CreateLoadBalancerRuleCmd; import com.cloud.exception.NetworkRuleConflictException; import com.cloud.exception.ResourceUnavailableException; import com.cloud.network.lb.LoadBalancingRule.LbDestination; diff --git a/server/src/com/cloud/network/lb/LoadBalancingRulesManagerImpl.java b/server/src/com/cloud/network/lb/LoadBalancingRulesManagerImpl.java index 7d0acfa3e2b..0a0ea005c69 100755 --- a/server/src/com/cloud/network/lb/LoadBalancingRulesManagerImpl.java +++ b/server/src/com/cloud/network/lb/LoadBalancingRulesManagerImpl.java @@ -30,12 +30,12 @@ import java.util.Set; import javax.ejb.Local; import javax.naming.ConfigurationException; -import org.apache.cloudstack.api.user.lb.command.*; +import org.apache.cloudstack.api.command.user.loadbalancer.*; import org.apache.log4j.Logger; -import org.apache.cloudstack.api.user.lb.command.CreateLBStickinessPolicyCmd; -import org.apache.cloudstack.api.user.lb.command.ListLoadBalancerRuleInstancesCmd; -import org.apache.cloudstack.api.user.lb.command.ListLoadBalancerRulesCmd; +import org.apache.cloudstack.api.command.user.loadbalancer.CreateLBStickinessPolicyCmd; +import org.apache.cloudstack.api.command.user.loadbalancer.ListLoadBalancerRuleInstancesCmd; +import org.apache.cloudstack.api.command.user.loadbalancer.ListLoadBalancerRulesCmd; import com.cloud.api.response.ServiceResponse; import com.cloud.configuration.Config; import com.cloud.configuration.ConfigurationManager; diff --git a/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java b/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java index d06c3263f0f..2026c8e6ba3 100755 --- a/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java +++ b/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java @@ -36,7 +36,7 @@ import java.util.concurrent.TimeUnit; import javax.ejb.Local; import javax.naming.ConfigurationException; -import org.apache.cloudstack.api.admin.router.command.UpgradeRouterCmd; +import org.apache.cloudstack.api.command.admin.router.UpgradeRouterCmd; import org.apache.log4j.Logger; import com.cloud.agent.AgentManager; diff --git a/server/src/com/cloud/network/rules/RulesManagerImpl.java b/server/src/com/cloud/network/rules/RulesManagerImpl.java index 422dae1f39c..dced8f9ca97 100755 --- a/server/src/com/cloud/network/rules/RulesManagerImpl.java +++ b/server/src/com/cloud/network/rules/RulesManagerImpl.java @@ -25,9 +25,9 @@ import java.util.Set; import javax.ejb.Local; import javax.naming.ConfigurationException; +import org.apache.cloudstack.api.command.user.firewall.ListPortForwardingRulesCmd; import org.apache.log4j.Logger; -import org.apache.cloudstack.api.user.firewall.command.ListPortForwardingRulesCmd; import com.cloud.configuration.ConfigurationManager; import com.cloud.domain.dao.DomainDao; import com.cloud.event.ActionEvent; diff --git a/server/src/com/cloud/network/security/SecurityGroupManagerImpl.java b/server/src/com/cloud/network/security/SecurityGroupManagerImpl.java index 8421a80cb04..b22f2446e6d 100755 --- a/server/src/com/cloud/network/security/SecurityGroupManagerImpl.java +++ b/server/src/com/cloud/network/security/SecurityGroupManagerImpl.java @@ -36,7 +36,7 @@ import java.util.concurrent.TimeUnit; import javax.ejb.Local; import javax.naming.ConfigurationException; -import org.apache.cloudstack.api.user.securitygroup.command.*; +import org.apache.cloudstack.api.command.user.securitygroup.*; import org.apache.commons.codec.digest.DigestUtils; import org.apache.log4j.Logger; @@ -45,9 +45,8 @@ import com.cloud.agent.api.NetworkRulesSystemVmCommand; import com.cloud.agent.api.SecurityGroupRulesCmd; import com.cloud.agent.api.SecurityGroupRulesCmd.IpPortAndProto; import com.cloud.agent.manager.Commands; -import org.apache.cloudstack.api.user.securitygroup.command.RevokeSecurityGroupEgressCmd; +import org.apache.cloudstack.api.command.user.securitygroup.RevokeSecurityGroupEgressCmd; import com.cloud.api.view.vo.SecurityGroupJoinVO; -import com.cloud.api.view.vo.UserVmJoinVO; import com.cloud.configuration.Config; import com.cloud.configuration.dao.ConfigurationDao; import com.cloud.domain.dao.DomainDao; @@ -75,8 +74,6 @@ import com.cloud.network.security.dao.VmRulesetLogDao; import com.cloud.projects.Project.ListProjectResourcesCriteria; import com.cloud.projects.ProjectManager; import com.cloud.server.ManagementServer; -import com.cloud.server.ResourceTag.TaggedResourceType; -import com.cloud.tags.ResourceTagVO; import com.cloud.tags.dao.ResourceTagDao; import com.cloud.user.Account; import com.cloud.user.AccountManager; @@ -94,7 +91,6 @@ import com.cloud.utils.concurrency.NamedThreadFactory; import com.cloud.utils.db.DB; import com.cloud.utils.db.Filter; import com.cloud.utils.db.GlobalLock; -import com.cloud.utils.db.JoinBuilder; import com.cloud.utils.db.SearchBuilder; import com.cloud.utils.db.SearchCriteria; import com.cloud.utils.db.Transaction; diff --git a/server/src/com/cloud/network/vpc/NetworkACLManagerImpl.java b/server/src/com/cloud/network/vpc/NetworkACLManagerImpl.java index dc08af23f9d..fcac5b7eb92 100644 --- a/server/src/com/cloud/network/vpc/NetworkACLManagerImpl.java +++ b/server/src/com/cloud/network/vpc/NetworkACLManagerImpl.java @@ -23,10 +23,10 @@ import java.util.Map; import javax.ejb.Local; import javax.naming.ConfigurationException; +import org.apache.cloudstack.api.command.user.network.ListNetworkACLsCmd; import org.apache.log4j.Logger; import com.cloud.acl.SecurityChecker.AccessType; -import org.apache.cloudstack.api.user.network.command.ListNetworkACLsCmd; import com.cloud.event.ActionEvent; import com.cloud.event.EventTypes; import com.cloud.exception.InvalidParameterValueException; diff --git a/server/src/com/cloud/network/vpn/RemoteAccessVpnManagerImpl.java b/server/src/com/cloud/network/vpn/RemoteAccessVpnManagerImpl.java index 1c60251867f..2309cd3229e 100755 --- a/server/src/com/cloud/network/vpn/RemoteAccessVpnManagerImpl.java +++ b/server/src/com/cloud/network/vpn/RemoteAccessVpnManagerImpl.java @@ -23,7 +23,7 @@ import java.util.Map; import javax.ejb.Local; import javax.naming.ConfigurationException; -import org.apache.cloudstack.api.user.user.command.ListVpnUsersCmd; +import org.apache.cloudstack.api.command.user.user.ListVpnUsersCmd; import org.apache.log4j.Logger; import org.apache.cloudstack.api.user.vpn.command.ListRemoteAccessVpnsCmd; diff --git a/server/src/com/cloud/resource/ResourceManagerImpl.java b/server/src/com/cloud/resource/ResourceManagerImpl.java index 10f0ea962c0..59873479eb1 100755 --- a/server/src/com/cloud/resource/ResourceManagerImpl.java +++ b/server/src/com/cloud/resource/ResourceManagerImpl.java @@ -30,9 +30,11 @@ import java.util.Set; import javax.ejb.Local; import javax.naming.ConfigurationException; -import org.apache.cloudstack.api.admin.cluster.command.AddClusterCmd; -import org.apache.cloudstack.api.admin.host.command.*; -import org.apache.cloudstack.api.admin.swift.command.AddSwiftCmd; +import org.apache.cloudstack.api.command.admin.cluster.AddClusterCmd; +import org.apache.cloudstack.api.command.admin.swift.AddSwiftCmd; +import org.apache.cloudstack.api.command.admin.cluster.DeleteClusterCmd; +import org.apache.cloudstack.api.command.admin.host.*; +import org.apache.cloudstack.api.command.admin.swift.ListSwiftsCmd; import org.apache.log4j.Logger; import com.cloud.agent.AgentManager; @@ -51,13 +53,10 @@ import com.cloud.agent.manager.allocator.PodAllocator; import com.cloud.agent.transport.Request; import org.apache.cloudstack.api.ApiConstants; import com.cloud.api.ApiDBUtils; -import org.apache.cloudstack.api.admin.host.command.AddHostCmd; -import org.apache.cloudstack.api.admin.host.command.AddSecondaryStorageCmd; -import org.apache.cloudstack.api.admin.host.command.CancelMaintenanceCmd; -import org.apache.cloudstack.api.admin.cluster.command.DeleteClusterCmd; -import org.apache.cloudstack.api.admin.swift.command.ListSwiftsCmd; -import org.apache.cloudstack.api.admin.host.command.PrepareForMaintenanceCmd; -import org.apache.cloudstack.api.admin.host.command.UpdateHostCmd; +import org.apache.cloudstack.api.command.admin.host.AddHostCmd; +import org.apache.cloudstack.api.command.admin.host.CancelMaintenanceCmd; +import org.apache.cloudstack.api.command.admin.host.PrepareForMaintenanceCmd; +import org.apache.cloudstack.api.command.admin.host.UpdateHostCmd; import com.cloud.capacity.Capacity; import com.cloud.capacity.CapacityVO; import com.cloud.capacity.dao.CapacityDao; diff --git a/server/src/com/cloud/server/ManagementServerImpl.java b/server/src/com/cloud/server/ManagementServerImpl.java index 41727b68dfa..40b88c543fd 100755 --- a/server/src/com/cloud/server/ManagementServerImpl.java +++ b/server/src/com/cloud/server/ManagementServerImpl.java @@ -42,21 +42,27 @@ import java.util.concurrent.TimeUnit; import javax.crypto.Mac; import javax.crypto.spec.SecretKeySpec; -import org.apache.cloudstack.api.admin.cluster.command.ListClustersCmd; -import org.apache.cloudstack.api.admin.config.command.ListCfgsByCmd; -import org.apache.cloudstack.api.admin.resource.command.ListAlertsCmd; -import org.apache.cloudstack.api.admin.router.command.ListRoutersCmd; -import org.apache.cloudstack.api.user.config.command.ListCapabilitiesCmd; -import org.apache.cloudstack.api.user.guest.command.ListGuestOsCategoriesCmd; -import org.apache.cloudstack.api.user.guest.command.ListGuestOsCmd; -import org.apache.cloudstack.api.user.iso.command.ListIsosCmd; -import org.apache.cloudstack.api.user.job.command.ListAsyncJobsCmd; -import org.apache.cloudstack.api.user.offering.command.ListDiskOfferingsCmd; -import org.apache.cloudstack.api.user.offering.command.ListServiceOfferingsCmd; -import org.apache.cloudstack.api.user.ssh.command.DeleteSSHKeyPairCmd; -import org.apache.cloudstack.api.user.ssh.command.RegisterSSHKeyPairCmd; -import org.apache.cloudstack.api.user.template.command.ListTemplatesCmd; -import org.apache.cloudstack.api.user.template.command.UpdateTemplateCmd; +import org.apache.cloudstack.api.command.admin.cluster.ListClustersCmd; +import org.apache.cloudstack.api.command.admin.config.ListCfgsByCmd; +import org.apache.cloudstack.api.command.admin.resource.ListAlertsCmd; +import org.apache.cloudstack.api.command.admin.router.ListRoutersCmd; +import org.apache.cloudstack.api.command.admin.storagepool.ListStoragePoolsCmd; +import org.apache.cloudstack.api.command.admin.systemvm.DestroySystemVmCmd; +import org.apache.cloudstack.api.command.admin.systemvm.UpgradeSystemVMCmd; +import org.apache.cloudstack.api.command.user.address.ListPublicIpAddressesCmd; +import org.apache.cloudstack.api.command.user.config.ListCapabilitiesCmd; +import org.apache.cloudstack.api.command.user.guest.ListGuestOsCategoriesCmd; +import org.apache.cloudstack.api.command.user.guest.ListGuestOsCmd; +import org.apache.cloudstack.api.command.user.iso.ListIsosCmd; +import org.apache.cloudstack.api.command.user.iso.UpdateIsoCmd; +import org.apache.cloudstack.api.command.user.job.ListAsyncJobsCmd; +import org.apache.cloudstack.api.command.user.offering.ListDiskOfferingsCmd; +import org.apache.cloudstack.api.command.user.offering.ListServiceOfferingsCmd; +import org.apache.cloudstack.api.command.user.ssh.ListSSHKeyPairsCmd; +import org.apache.cloudstack.api.command.user.ssh.DeleteSSHKeyPairCmd; +import org.apache.cloudstack.api.command.user.ssh.RegisterSSHKeyPairCmd; +import org.apache.cloudstack.api.command.user.template.ListTemplatesCmd; +import org.apache.cloudstack.api.command.user.template.UpdateTemplateCmd; import org.apache.cloudstack.api.user.vmgroup.command.ListVMGroupsCmd; import org.apache.cloudstack.api.user.zone.command.ListZonesByCmd; import org.apache.commons.codec.binary.Base64; @@ -75,28 +81,22 @@ import com.cloud.alert.AlertVO; import com.cloud.alert.dao.AlertDao; import org.apache.cloudstack.api.ApiConstants; import com.cloud.api.ApiDBUtils; -import org.apache.cloudstack.api.user.ssh.command.CreateSSHKeyPairCmd; -import org.apache.cloudstack.api.admin.systemvm.command.DestroySystemVmCmd; +import org.apache.cloudstack.api.command.user.ssh.CreateSSHKeyPairCmd; import org.apache.cloudstack.api.user.volume.command.ExtractVolumeCmd; import org.apache.cloudstack.api.user.vm.command.GetVMPasswordCmd; -import org.apache.cloudstack.api.admin.resource.command.ListCapacityCmd; -import org.apache.cloudstack.api.user.event.command.ListEventsCmd; -import org.apache.cloudstack.api.admin.host.command.ListHostsCmd; -import org.apache.cloudstack.api.admin.pod.command.ListPodsByCmd; -import org.apache.cloudstack.api.user.address.command.ListPublicIpAddressesCmd; -import org.apache.cloudstack.api.user.ssh.command.ListSSHKeyPairsCmd; -import org.apache.cloudstack.api.admin.storagepool.command.ListStoragePoolsCmd; -import org.apache.cloudstack.api.admin.systemvm.command.ListSystemVMsCmd; -import org.apache.cloudstack.api.admin.vlan.command.ListVlanIpRangesCmd; -import org.apache.cloudstack.api.admin.systemvm.command.RebootSystemVmCmd; -import org.apache.cloudstack.api.admin.systemvm.command.StopSystemVmCmd; -import org.apache.cloudstack.api.admin.domain.command.UpdateDomainCmd; -import org.apache.cloudstack.api.admin.host.command.UpdateHostPasswordCmd; -import org.apache.cloudstack.api.user.iso.command.UpdateIsoCmd; +import org.apache.cloudstack.api.command.admin.resource.ListCapacityCmd; +import org.apache.cloudstack.api.command.user.event.ListEventsCmd; +import org.apache.cloudstack.api.command.admin.host.ListHostsCmd; +import org.apache.cloudstack.api.command.admin.pod.ListPodsByCmd; +import org.apache.cloudstack.api.command.admin.systemvm.ListSystemVMsCmd; +import org.apache.cloudstack.api.command.admin.vlan.ListVlanIpRangesCmd; +import org.apache.cloudstack.api.command.admin.systemvm.RebootSystemVmCmd; +import org.apache.cloudstack.api.command.admin.systemvm.StopSystemVmCmd; +import org.apache.cloudstack.api.command.admin.domain.UpdateDomainCmd; +import org.apache.cloudstack.api.command.admin.host.UpdateHostPasswordCmd; import com.cloud.api.commands.UpdateTemplateOrIsoCmd; import org.apache.cloudstack.api.user.vmgroup.command.UpdateVMGroupCmd; -import org.apache.cloudstack.api.admin.systemvm.command.UpgradeSystemVMCmd; -import org.apache.cloudstack.api.admin.resource.command.UploadCustomCertificateCmd; +import org.apache.cloudstack.api.command.admin.resource.UploadCustomCertificateCmd; import com.cloud.api.response.ExtractResponse; import com.cloud.api.view.vo.DomainRouterJoinVO; import com.cloud.api.view.vo.EventJoinVO; diff --git a/server/src/com/cloud/server/api/response/ExternalFirewallResponse.java b/server/src/com/cloud/server/api/response/ExternalFirewallResponse.java index 6023ab61cad..a5913cf5e47 100644 --- a/server/src/com/cloud/server/api/response/ExternalFirewallResponse.java +++ b/server/src/com/cloud/server/api/response/ExternalFirewallResponse.java @@ -20,7 +20,7 @@ import org.apache.cloudstack.api.ApiConstants; import com.cloud.utils.IdentityProxy; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; -import org.apache.cloudstack.api.admin.network.response.NetworkDeviceResponse; +import org.apache.cloudstack.api.response.NetworkDeviceResponse; public class ExternalFirewallResponse extends NetworkDeviceResponse { diff --git a/server/src/com/cloud/server/api/response/ExternalLoadBalancerResponse.java b/server/src/com/cloud/server/api/response/ExternalLoadBalancerResponse.java index ed8d8be2605..c5dfa5a6949 100644 --- a/server/src/com/cloud/server/api/response/ExternalLoadBalancerResponse.java +++ b/server/src/com/cloud/server/api/response/ExternalLoadBalancerResponse.java @@ -20,7 +20,7 @@ import org.apache.cloudstack.api.ApiConstants; import com.cloud.utils.IdentityProxy; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; -import org.apache.cloudstack.api.admin.network.response.NetworkDeviceResponse; +import org.apache.cloudstack.api.response.NetworkDeviceResponse; public class ExternalLoadBalancerResponse extends NetworkDeviceResponse { diff --git a/server/src/com/cloud/server/api/response/NwDeviceDhcpResponse.java b/server/src/com/cloud/server/api/response/NwDeviceDhcpResponse.java index d4c0046163b..480107b1b9f 100644 --- a/server/src/com/cloud/server/api/response/NwDeviceDhcpResponse.java +++ b/server/src/com/cloud/server/api/response/NwDeviceDhcpResponse.java @@ -19,7 +19,7 @@ package com.cloud.server.api.response; import org.apache.cloudstack.api.ApiConstants; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; -import org.apache.cloudstack.api.admin.network.response.NetworkDeviceResponse; +import org.apache.cloudstack.api.response.NetworkDeviceResponse; public class NwDeviceDhcpResponse extends NetworkDeviceResponse { @SerializedName(ApiConstants.ZONE_ID) @Param(description="Zone where to add PXE server") diff --git a/server/src/com/cloud/server/api/response/NwDevicePxeServerResponse.java b/server/src/com/cloud/server/api/response/NwDevicePxeServerResponse.java index df1faec3519..a59e6c2eddf 100644 --- a/server/src/com/cloud/server/api/response/NwDevicePxeServerResponse.java +++ b/server/src/com/cloud/server/api/response/NwDevicePxeServerResponse.java @@ -20,7 +20,7 @@ import org.apache.cloudstack.api.ApiConstants; import com.cloud.utils.IdentityProxy; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; -import org.apache.cloudstack.api.admin.network.response.NetworkDeviceResponse; +import org.apache.cloudstack.api.response.NetworkDeviceResponse; public class NwDevicePxeServerResponse extends NetworkDeviceResponse { diff --git a/server/src/com/cloud/storage/StorageManagerImpl.java b/server/src/com/cloud/storage/StorageManagerImpl.java index 330d41eee9a..a86ec01c09a 100755 --- a/server/src/com/cloud/storage/StorageManagerImpl.java +++ b/server/src/com/cloud/storage/StorageManagerImpl.java @@ -44,6 +44,7 @@ import java.util.concurrent.TimeUnit; import javax.ejb.Local; import javax.naming.ConfigurationException; +import org.apache.cloudstack.api.command.admin.storagepool.*; import org.apache.cloudstack.api.user.volume.command.CreateVolumeCmd; import org.apache.log4j.Logger; @@ -72,11 +73,10 @@ import com.cloud.agent.api.to.VolumeTO; import com.cloud.agent.manager.Commands; import com.cloud.alert.AlertManager; import com.cloud.api.ApiDBUtils; -import org.apache.cloudstack.api.admin.storagepool.command.CancelPrimaryStorageMaintenanceCmd; -import org.apache.cloudstack.api.admin.storagepool.command.CreateStoragePoolCmd; -import org.apache.cloudstack.api.admin.storagepool.command.DeletePoolCmd; +import org.apache.cloudstack.api.command.admin.storagepool.CancelPrimaryStorageMaintenanceCmd; +import org.apache.cloudstack.api.command.admin.storagepool.CreateStoragePoolCmd; import org.apache.cloudstack.api.user.volume.command.ListVolumesCmd; -import org.apache.cloudstack.api.admin.storagepool.command.UpdateStoragePoolCmd; +import org.apache.cloudstack.api.command.admin.storagepool.UpdateStoragePoolCmd; import org.apache.cloudstack.api.user.volume.command.UploadVolumeCmd; import com.cloud.async.AsyncJobManager; import com.cloud.capacity.Capacity; diff --git a/server/src/com/cloud/storage/snapshot/SnapshotManagerImpl.java b/server/src/com/cloud/storage/snapshot/SnapshotManagerImpl.java index d3ca3902813..242125f7f5b 100755 --- a/server/src/com/cloud/storage/snapshot/SnapshotManagerImpl.java +++ b/server/src/com/cloud/storage/snapshot/SnapshotManagerImpl.java @@ -25,7 +25,8 @@ import java.util.TimeZone; import javax.ejb.Local; import javax.naming.ConfigurationException; -import org.apache.cloudstack.api.user.snapshot.command.*; +import org.apache.cloudstack.api.command.user.snapshot.CreateSnapshotPolicyCmd; +import org.apache.cloudstack.api.command.user.snapshot.ListSnapshotsCmd; import org.apache.log4j.Logger; import com.cloud.agent.AgentManager; @@ -40,9 +41,9 @@ import com.cloud.agent.api.ManageSnapshotCommand; import com.cloud.agent.api.downloadSnapshotFromSwiftCommand; import com.cloud.agent.api.to.SwiftTO; import com.cloud.alert.AlertManager; -import org.apache.cloudstack.api.user.snapshot.command.DeleteSnapshotPoliciesCmd; +import org.apache.cloudstack.api.command.user.snapshot.DeleteSnapshotPoliciesCmd; import com.cloud.api.commands.ListRecurringSnapshotScheduleCmd; -import org.apache.cloudstack.api.user.snapshot.command.ListSnapshotPoliciesCmd; +import org.apache.cloudstack.api.command.user.snapshot.ListSnapshotPoliciesCmd; import com.cloud.configuration.Config; import com.cloud.configuration.Resource.ResourceType; import com.cloud.configuration.dao.ConfigurationDao; diff --git a/server/src/com/cloud/storage/snapshot/SnapshotSchedulerImpl.java b/server/src/com/cloud/storage/snapshot/SnapshotSchedulerImpl.java index c42e5fbbeef..d7deb6fa74b 100644 --- a/server/src/com/cloud/storage/snapshot/SnapshotSchedulerImpl.java +++ b/server/src/com/cloud/storage/snapshot/SnapshotSchedulerImpl.java @@ -26,7 +26,7 @@ import java.util.TimerTask; import javax.ejb.Local; import javax.naming.ConfigurationException; -import org.apache.cloudstack.api.user.snapshot.command.CreateSnapshotCmd; +import org.apache.cloudstack.api.command.user.snapshot.CreateSnapshotCmd; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; diff --git a/server/src/com/cloud/storage/swift/SwiftManager.java b/server/src/com/cloud/storage/swift/SwiftManager.java index 075c985defa..0dd6e1cf22a 100644 --- a/server/src/com/cloud/storage/swift/SwiftManager.java +++ b/server/src/com/cloud/storage/swift/SwiftManager.java @@ -19,10 +19,10 @@ package com.cloud.storage.swift; import java.util.List; import com.cloud.agent.api.to.SwiftTO; -import org.apache.cloudstack.api.admin.swift.command.AddSwiftCmd; -import org.apache.cloudstack.api.admin.swift.command.ListSwiftsCmd; -import org.apache.cloudstack.api.user.iso.command.DeleteIsoCmd; -import org.apache.cloudstack.api.user.template.command.DeleteTemplateCmd; +import org.apache.cloudstack.api.command.admin.swift.AddSwiftCmd; +import org.apache.cloudstack.api.command.admin.swift.ListSwiftsCmd; +import org.apache.cloudstack.api.command.user.iso.DeleteIsoCmd; +import org.apache.cloudstack.api.command.user.template.DeleteTemplateCmd; import com.cloud.exception.DiscoveryException; import com.cloud.storage.Swift; import com.cloud.storage.SwiftVO; diff --git a/server/src/com/cloud/storage/swift/SwiftManagerImpl.java b/server/src/com/cloud/storage/swift/SwiftManagerImpl.java index e83d6cbb017..dab16ced985 100644 --- a/server/src/com/cloud/storage/swift/SwiftManagerImpl.java +++ b/server/src/com/cloud/storage/swift/SwiftManagerImpl.java @@ -25,16 +25,16 @@ import java.util.Map; import javax.ejb.Local; import javax.naming.ConfigurationException; -import org.apache.cloudstack.api.admin.swift.command.ListSwiftsCmd; -import org.apache.cloudstack.api.user.iso.command.DeleteIsoCmd; -import org.apache.cloudstack.api.user.template.command.DeleteTemplateCmd; +import org.apache.cloudstack.api.command.admin.swift.ListSwiftsCmd; +import org.apache.cloudstack.api.command.user.iso.DeleteIsoCmd; +import org.apache.cloudstack.api.command.user.template.DeleteTemplateCmd; import org.apache.log4j.Logger; import com.cloud.agent.AgentManager; import com.cloud.agent.api.Answer; import com.cloud.agent.api.DeleteObjectFromSwiftCommand; import com.cloud.agent.api.to.SwiftTO; -import org.apache.cloudstack.api.admin.swift.command.AddSwiftCmd; +import org.apache.cloudstack.api.command.admin.swift.AddSwiftCmd; import com.cloud.configuration.Config; import com.cloud.configuration.dao.ConfigurationDao; import com.cloud.dc.DataCenterVO; diff --git a/server/src/com/cloud/storage/upload/UploadListener.java b/server/src/com/cloud/storage/upload/UploadListener.java index 35bf732c2b1..a2d9f01c8f9 100755 --- a/server/src/com/cloud/storage/upload/UploadListener.java +++ b/server/src/com/cloud/storage/upload/UploadListener.java @@ -24,7 +24,7 @@ import java.util.Map; import java.util.Timer; import java.util.TimerTask; -import org.apache.cloudstack.api.user.iso.command.ExtractIsoCmd; +import org.apache.cloudstack.api.command.user.iso.ExtractIsoCmd; import org.apache.cloudstack.api.user.volume.command.ExtractVolumeCmd; import org.apache.log4j.Level; import org.apache.log4j.Logger; @@ -40,7 +40,7 @@ import com.cloud.agent.api.storage.UploadAnswer; import com.cloud.agent.api.storage.UploadCommand; import com.cloud.agent.api.storage.UploadProgressCommand; import com.cloud.agent.api.storage.UploadProgressCommand.RequestType; -import org.apache.cloudstack.api.user.template.command.ExtractTemplateCmd; +import org.apache.cloudstack.api.command.user.template.ExtractTemplateCmd; import com.cloud.api.response.ExtractResponse; import com.cloud.async.AsyncJobManager; import com.cloud.async.AsyncJobResult; diff --git a/server/src/com/cloud/tags/TaggedResourceManagerImpl.java b/server/src/com/cloud/tags/TaggedResourceManagerImpl.java index 966dfbd5764..56240117ee8 100644 --- a/server/src/com/cloud/tags/TaggedResourceManagerImpl.java +++ b/server/src/com/cloud/tags/TaggedResourceManagerImpl.java @@ -24,10 +24,9 @@ import java.util.Map; import javax.ejb.Local; import javax.naming.ConfigurationException; +import org.apache.cloudstack.api.command.user.tag.ListTagsCmd; import org.apache.log4j.Logger; -import org.apache.cloudstack.api.user.tag.command.ListTagsCmd; - import com.cloud.api.view.vo.ResourceTagJoinVO; import com.cloud.domain.Domain; import com.cloud.event.ActionEvent; diff --git a/server/src/com/cloud/template/HyervisorTemplateAdapter.java b/server/src/com/cloud/template/HyervisorTemplateAdapter.java index 4d5ee65eac5..c80d1de0fbf 100755 --- a/server/src/com/cloud/template/HyervisorTemplateAdapter.java +++ b/server/src/com/cloud/template/HyervisorTemplateAdapter.java @@ -25,15 +25,15 @@ import java.util.List; import javax.ejb.Local; -import org.apache.cloudstack.api.user.iso.command.DeleteIsoCmd; -import org.apache.cloudstack.api.user.iso.command.RegisterIsoCmd; +import org.apache.cloudstack.api.command.user.iso.DeleteIsoCmd; +import org.apache.cloudstack.api.command.user.iso.RegisterIsoCmd; import org.apache.log4j.Logger; import com.cloud.agent.AgentManager; import com.cloud.agent.api.Answer; import com.cloud.agent.api.storage.DeleteTemplateCommand; -import org.apache.cloudstack.api.user.template.command.DeleteTemplateCmd; -import org.apache.cloudstack.api.user.template.command.RegisterTemplateCmd; +import org.apache.cloudstack.api.command.user.template.DeleteTemplateCmd; +import org.apache.cloudstack.api.command.user.template.RegisterTemplateCmd; import com.cloud.configuration.Resource.ResourceType; import com.cloud.dc.DataCenterVO; import com.cloud.event.EventTypes; diff --git a/server/src/com/cloud/template/TemplateAdapter.java b/server/src/com/cloud/template/TemplateAdapter.java index ec6ed46b4cf..a5eb42d1b84 100755 --- a/server/src/com/cloud/template/TemplateAdapter.java +++ b/server/src/com/cloud/template/TemplateAdapter.java @@ -18,10 +18,10 @@ package com.cloud.template; import java.util.Map; -import org.apache.cloudstack.api.user.iso.command.DeleteIsoCmd; -import org.apache.cloudstack.api.user.iso.command.RegisterIsoCmd; -import org.apache.cloudstack.api.user.template.command.DeleteTemplateCmd; -import org.apache.cloudstack.api.user.template.command.RegisterTemplateCmd; +import org.apache.cloudstack.api.command.user.iso.DeleteIsoCmd; +import org.apache.cloudstack.api.command.user.iso.RegisterIsoCmd; +import org.apache.cloudstack.api.command.user.template.DeleteTemplateCmd; +import org.apache.cloudstack.api.command.user.template.RegisterTemplateCmd; import com.cloud.exception.ResourceAllocationException; import com.cloud.hypervisor.Hypervisor.HypervisorType; import com.cloud.storage.VMTemplateVO; diff --git a/server/src/com/cloud/template/TemplateAdapterBase.java b/server/src/com/cloud/template/TemplateAdapterBase.java index 6ac11976ed9..c938daa9b27 100755 --- a/server/src/com/cloud/template/TemplateAdapterBase.java +++ b/server/src/com/cloud/template/TemplateAdapterBase.java @@ -21,14 +21,14 @@ import java.util.Map; import javax.naming.ConfigurationException; -import org.apache.cloudstack.api.user.iso.command.RegisterIsoCmd; -import org.apache.cloudstack.api.user.template.command.RegisterTemplateCmd; +import org.apache.cloudstack.api.command.user.iso.DeleteIsoCmd; +import org.apache.cloudstack.api.command.user.iso.RegisterIsoCmd; +import org.apache.cloudstack.api.command.user.template.RegisterTemplateCmd; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import com.cloud.api.ApiDBUtils; -import org.apache.cloudstack.api.user.iso.command.DeleteIsoCmd; -import org.apache.cloudstack.api.user.template.command.DeleteTemplateCmd; +import org.apache.cloudstack.api.command.user.template.DeleteTemplateCmd; import com.cloud.configuration.Resource.ResourceType; import com.cloud.configuration.dao.ConfigurationDao; import com.cloud.dc.DataCenterVO; diff --git a/server/src/com/cloud/template/TemplateManagerImpl.java b/server/src/com/cloud/template/TemplateManagerImpl.java index f789e46859c..74da1e23f8c 100755 --- a/server/src/com/cloud/template/TemplateManagerImpl.java +++ b/server/src/com/cloud/template/TemplateManagerImpl.java @@ -34,8 +34,8 @@ import java.util.concurrent.TimeUnit; import javax.ejb.Local; import javax.naming.ConfigurationException; -import org.apache.cloudstack.api.user.iso.command.*; -import org.apache.cloudstack.api.user.template.command.*; +import org.apache.cloudstack.api.command.user.iso.*; +import org.apache.cloudstack.api.command.user.template.*; import org.apache.log4j.Logger; import com.cloud.acl.SecurityChecker.AccessType; @@ -48,8 +48,8 @@ import com.cloud.agent.api.storage.PrimaryStorageDownloadAnswer; import com.cloud.agent.api.storage.PrimaryStorageDownloadCommand; import com.cloud.agent.api.to.SwiftTO; import com.cloud.api.commands.ListTemplateOrIsoPermissionsCmd; -import org.apache.cloudstack.api.user.iso.command.RegisterIsoCmd; -import org.apache.cloudstack.api.user.template.command.RegisterTemplateCmd; +import org.apache.cloudstack.api.command.user.iso.RegisterIsoCmd; +import org.apache.cloudstack.api.command.user.template.RegisterTemplateCmd; import com.cloud.api.commands.UpdateTemplateOrIsoPermissionsCmd; import com.cloud.async.AsyncJobManager; import com.cloud.async.AsyncJobVO; diff --git a/server/src/com/cloud/user/AccountManagerImpl.java b/server/src/com/cloud/user/AccountManagerImpl.java index 980ee3a7ef2..36dc4989132 100755 --- a/server/src/com/cloud/user/AccountManagerImpl.java +++ b/server/src/com/cloud/user/AccountManagerImpl.java @@ -36,8 +36,9 @@ import javax.crypto.spec.SecretKeySpec; import javax.ejb.Local; import javax.naming.ConfigurationException; -import org.apache.cloudstack.api.admin.user.command.ListUsersCmd; -import org.apache.cloudstack.api.admin.user.command.RegisterCmd; +import org.apache.cloudstack.api.command.admin.user.*; +import org.apache.cloudstack.api.command.admin.account.UpdateAccountCmd; +import org.apache.cloudstack.api.command.admin.user.RegisterCmd; import org.apache.commons.codec.binary.Base64; import org.apache.log4j.Logger; @@ -46,10 +47,9 @@ import com.cloud.api.view.vo.ControlledViewEntity; import com.cloud.acl.SecurityChecker; import com.cloud.acl.SecurityChecker.AccessType; import com.cloud.api.ApiDBUtils; -import org.apache.cloudstack.api.admin.user.command.DeleteUserCmd; -import org.apache.cloudstack.api.user.account.command.ListAccountsCmd; -import org.apache.cloudstack.api.admin.account.command.UpdateAccountCmd; -import org.apache.cloudstack.api.admin.user.command.UpdateUserCmd; +import org.apache.cloudstack.api.command.admin.user.DeleteUserCmd; +import org.apache.cloudstack.api.command.user.account.ListAccountsCmd; +import org.apache.cloudstack.api.command.admin.user.UpdateUserCmd; import com.cloud.configuration.Config; import com.cloud.configuration.ConfigurationManager; import com.cloud.configuration.ResourceLimit; diff --git a/server/src/com/cloud/user/DomainManagerImpl.java b/server/src/com/cloud/user/DomainManagerImpl.java index 3e8e226fdaf..123b8951b2e 100644 --- a/server/src/com/cloud/user/DomainManagerImpl.java +++ b/server/src/com/cloud/user/DomainManagerImpl.java @@ -24,10 +24,10 @@ import java.util.Set; import javax.ejb.Local; import javax.naming.ConfigurationException; -import org.apache.cloudstack.api.admin.domain.command.ListDomainChildrenCmd; +import org.apache.cloudstack.api.command.admin.domain.ListDomainChildrenCmd; +import org.apache.cloudstack.api.command.admin.domain.ListDomainsCmd; import org.apache.log4j.Logger; -import org.apache.cloudstack.api.admin.domain.command.ListDomainsCmd; import com.cloud.configuration.ResourceLimit; import com.cloud.configuration.dao.ResourceCountDao; import com.cloud.domain.Domain; diff --git a/server/src/com/cloud/vm/UserVmManagerImpl.java b/server/src/com/cloud/vm/UserVmManagerImpl.java index 5729035a1ff..e04f009e8d5 100755 --- a/server/src/com/cloud/vm/UserVmManagerImpl.java +++ b/server/src/com/cloud/vm/UserVmManagerImpl.java @@ -31,7 +31,7 @@ import java.util.concurrent.TimeUnit; import javax.ejb.Local; import javax.naming.ConfigurationException; -import org.apache.cloudstack.api.user.template.command.CreateTemplateCmd; +import org.apache.cloudstack.api.command.user.template.CreateTemplateCmd; import org.apache.cloudstack.api.user.vmgroup.command.DeleteVMGroupCmd; import org.apache.cloudstack.api.user.volume.command.AttachVolumeCmd; import org.apache.cloudstack.api.user.volume.command.DetachVolumeCmd; @@ -62,13 +62,13 @@ import com.cloud.agent.manager.Commands; import com.cloud.alert.AlertManager; import com.cloud.api.ApiDBUtils; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.admin.vm.command.AssignVMCmd; +import org.apache.cloudstack.api.command.admin.vm.AssignVMCmd; import org.apache.cloudstack.api.user.vmgroup.command.CreateVMGroupCmd; import org.apache.cloudstack.api.user.vm.command.DeployVMCmd; import org.apache.cloudstack.api.user.vm.command.DestroyVMCmd; import org.apache.cloudstack.api.user.vm.command.ListVMsCmd; import org.apache.cloudstack.api.user.vm.command.RebootVMCmd; -import org.apache.cloudstack.api.admin.vm.command.RecoverVMCmd; +import org.apache.cloudstack.api.command.admin.vm.RecoverVMCmd; import org.apache.cloudstack.api.user.vm.command.ResetVMPasswordCmd; import org.apache.cloudstack.api.user.vm.command.RestoreVMCmd; import org.apache.cloudstack.api.user.vm.command.StartVMCmd; @@ -142,7 +142,6 @@ import com.cloud.network.security.SecurityGroupManager; import com.cloud.network.security.dao.SecurityGroupDao; import com.cloud.network.security.dao.SecurityGroupVMMapDao; import com.cloud.network.vpc.VpcManager; -import com.cloud.network.vpc.VpcVO; import com.cloud.network.vpc.dao.VpcDao; import com.cloud.offering.NetworkOffering; import com.cloud.offering.NetworkOffering.Availability; @@ -152,13 +151,10 @@ 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; import com.cloud.server.Criteria; -import com.cloud.server.ResourceTag.TaggedResourceType; import com.cloud.service.ServiceOfferingVO; import com.cloud.service.dao.ServiceOfferingDao; import com.cloud.storage.DiskOfferingVO; @@ -192,7 +188,6 @@ import com.cloud.storage.dao.VMTemplateZoneDao; import com.cloud.storage.dao.VolumeDao; import com.cloud.storage.dao.VolumeHostDao; import com.cloud.storage.snapshot.SnapshotManager; -import com.cloud.tags.ResourceTagVO; import com.cloud.tags.dao.ResourceTagDao; import com.cloud.template.VirtualMachineTemplate; import com.cloud.template.VirtualMachineTemplate.BootloaderType; @@ -221,7 +216,6 @@ import com.cloud.utils.crypt.RSAHelper; import com.cloud.utils.db.DB; import com.cloud.utils.db.Filter; import com.cloud.utils.db.GlobalLock; -import com.cloud.utils.db.JoinBuilder; import com.cloud.utils.db.SearchBuilder; import com.cloud.utils.db.SearchCriteria; import com.cloud.utils.db.Transaction; diff --git a/server/test/com/cloud/network/MockNetworkManagerImpl.java b/server/test/com/cloud/network/MockNetworkManagerImpl.java index 99e491f60b3..bcc9ba2b604 100755 --- a/server/test/com/cloud/network/MockNetworkManagerImpl.java +++ b/server/test/com/cloud/network/MockNetworkManagerImpl.java @@ -25,10 +25,10 @@ import javax.ejb.Local; import javax.naming.ConfigurationException; import com.cloud.acl.ControlledEntity.ACLType; -import org.apache.cloudstack.api.admin.usage.command.ListTrafficTypeImplementorsCmd; -import org.apache.cloudstack.api.user.network.command.CreateNetworkCmd; -import org.apache.cloudstack.api.user.network.command.ListNetworksCmd; -import org.apache.cloudstack.api.user.network.command.RestartNetworkCmd; +import org.apache.cloudstack.api.command.admin.usage.ListTrafficTypeImplementorsCmd; +import org.apache.cloudstack.api.command.user.network.CreateNetworkCmd; +import org.apache.cloudstack.api.command.user.network.ListNetworksCmd; +import org.apache.cloudstack.api.command.user.network.RestartNetworkCmd; import com.cloud.dc.DataCenter; import com.cloud.dc.Vlan; import com.cloud.dc.Vlan.VlanType; diff --git a/server/test/com/cloud/user/MockAccountManagerImpl.java b/server/test/com/cloud/user/MockAccountManagerImpl.java index 03e2c1adfd5..2c002fde9be 100644 --- a/server/test/com/cloud/user/MockAccountManagerImpl.java +++ b/server/test/com/cloud/user/MockAccountManagerImpl.java @@ -24,12 +24,12 @@ import javax.naming.ConfigurationException; import com.cloud.acl.ControlledEntity; import com.cloud.acl.SecurityChecker.AccessType; -import org.apache.cloudstack.api.admin.user.command.DeleteUserCmd; -import org.apache.cloudstack.api.admin.user.command.ListUsersCmd; -import org.apache.cloudstack.api.admin.user.command.RegisterCmd; -import org.apache.cloudstack.api.user.account.command.ListAccountsCmd; -import org.apache.cloudstack.api.admin.account.command.UpdateAccountCmd; -import org.apache.cloudstack.api.admin.user.command.UpdateUserCmd; +import org.apache.cloudstack.api.command.admin.user.DeleteUserCmd; +import org.apache.cloudstack.api.command.admin.user.ListUsersCmd; +import org.apache.cloudstack.api.command.admin.user.RegisterCmd; +import org.apache.cloudstack.api.command.user.account.ListAccountsCmd; +import org.apache.cloudstack.api.command.admin.account.UpdateAccountCmd; +import org.apache.cloudstack.api.command.admin.user.UpdateUserCmd; import com.cloud.api.view.vo.ControlledViewEntity; import com.cloud.domain.Domain; import com.cloud.exception.ConcurrentOperationException; diff --git a/server/test/com/cloud/user/MockDomainManagerImpl.java b/server/test/com/cloud/user/MockDomainManagerImpl.java index dc986926d03..6dc4d075b9e 100644 --- a/server/test/com/cloud/user/MockDomainManagerImpl.java +++ b/server/test/com/cloud/user/MockDomainManagerImpl.java @@ -23,8 +23,8 @@ import java.util.Set; import javax.ejb.Local; import javax.naming.ConfigurationException; -import org.apache.cloudstack.api.admin.domain.command.ListDomainChildrenCmd; -import org.apache.cloudstack.api.admin.domain.command.ListDomainsCmd; +import org.apache.cloudstack.api.command.admin.domain.ListDomainChildrenCmd; +import org.apache.cloudstack.api.command.admin.domain.ListDomainsCmd; import com.cloud.domain.Domain; import com.cloud.domain.DomainVO; import com.cloud.exception.PermissionDeniedException; diff --git a/server/test/com/cloud/vm/MockUserVmManagerImpl.java b/server/test/com/cloud/vm/MockUserVmManagerImpl.java index d9360959d6c..074000bc1a3 100644 --- a/server/test/com/cloud/vm/MockUserVmManagerImpl.java +++ b/server/test/com/cloud/vm/MockUserVmManagerImpl.java @@ -28,9 +28,10 @@ import com.cloud.agent.api.VmStatsEntry; import com.cloud.agent.api.to.NicTO; import com.cloud.agent.api.to.VirtualMachineTO; import com.cloud.agent.manager.Commands; -import org.apache.cloudstack.api.admin.vm.command.AssignVMCmd; +import org.apache.cloudstack.api.command.admin.vm.AssignVMCmd; +import org.apache.cloudstack.api.command.admin.vm.RecoverVMCmd; import org.apache.cloudstack.api.user.volume.command.AttachVolumeCmd; -import org.apache.cloudstack.api.user.template.command.CreateTemplateCmd; +import org.apache.cloudstack.api.command.user.template.CreateTemplateCmd; import org.apache.cloudstack.api.user.vmgroup.command.CreateVMGroupCmd; import org.apache.cloudstack.api.user.vmgroup.command.DeleteVMGroupCmd; import org.apache.cloudstack.api.user.vm.command.DeployVMCmd; @@ -38,7 +39,6 @@ import org.apache.cloudstack.api.user.vm.command.DestroyVMCmd; import org.apache.cloudstack.api.user.volume.command.DetachVolumeCmd; import org.apache.cloudstack.api.user.vm.command.ListVMsCmd; import org.apache.cloudstack.api.user.vm.command.RebootVMCmd; -import org.apache.cloudstack.api.admin.vm.command.RecoverVMCmd; import org.apache.cloudstack.api.user.vm.command.ResetVMPasswordCmd; import org.apache.cloudstack.api.user.vm.command.RestoreVMCmd; import org.apache.cloudstack.api.user.vm.command.StartVMCmd; diff --git a/server/test/com/cloud/vpc/MockConfigurationManagerImpl.java b/server/test/com/cloud/vpc/MockConfigurationManagerImpl.java index c303cfb5435..3989ecfd0e3 100644 --- a/server/test/com/cloud/vpc/MockConfigurationManagerImpl.java +++ b/server/test/com/cloud/vpc/MockConfigurationManagerImpl.java @@ -24,26 +24,24 @@ import javax.ejb.Local; import javax.naming.ConfigurationException; import javax.naming.NamingException; -import org.apache.cloudstack.api.admin.offering.command.CreateDiskOfferingCmd; -import org.apache.cloudstack.api.admin.config.command.UpdateCfgCmd; -import org.apache.cloudstack.api.admin.network.command.CreateNetworkOfferingCmd; -import org.apache.cloudstack.api.admin.offering.command.CreateServiceOfferingCmd; -import org.apache.cloudstack.api.admin.vlan.command.CreateVlanIpRangeCmd; -import org.apache.cloudstack.api.admin.offering.command.DeleteDiskOfferingCmd; -import org.apache.cloudstack.api.admin.offering.command.UpdateServiceOfferingCmd; -import org.apache.cloudstack.api.admin.pod.command.UpdatePodCmd; -import org.apache.cloudstack.api.admin.vlan.command.DeleteVlanIpRangeCmd; -import org.apache.cloudstack.api.admin.zone.command.CreateZoneCmd; -import org.apache.cloudstack.api.admin.network.command.DeleteNetworkOfferingCmd; -import org.apache.cloudstack.api.admin.pod.command.DeletePodCmd; -import org.apache.cloudstack.api.admin.offering.command.DeleteServiceOfferingCmd; -import org.apache.cloudstack.api.admin.zone.command.DeleteZoneCmd; -import org.apache.cloudstack.api.admin.ldap.command.LDAPConfigCmd; -import org.apache.cloudstack.api.admin.ldap.command.LDAPRemoveCmd; -import org.apache.cloudstack.api.admin.zone.command.UpdateZoneCmd; -import org.apache.cloudstack.api.user.network.command.ListNetworkOfferingsCmd; -import org.apache.cloudstack.api.admin.offering.command.UpdateDiskOfferingCmd; -import org.apache.cloudstack.api.admin.network.command.UpdateNetworkOfferingCmd; +import org.apache.cloudstack.api.command.admin.offering.*; +import org.apache.cloudstack.api.command.admin.config.UpdateCfgCmd; +import org.apache.cloudstack.api.command.admin.network.CreateNetworkOfferingCmd; +import org.apache.cloudstack.api.command.admin.offering.CreateServiceOfferingCmd; +import org.apache.cloudstack.api.command.admin.vlan.CreateVlanIpRangeCmd; +import org.apache.cloudstack.api.command.admin.offering.UpdateServiceOfferingCmd; +import org.apache.cloudstack.api.command.admin.pod.UpdatePodCmd; +import org.apache.cloudstack.api.command.admin.vlan.DeleteVlanIpRangeCmd; +import org.apache.cloudstack.api.command.admin.zone.CreateZoneCmd; +import org.apache.cloudstack.api.command.admin.network.DeleteNetworkOfferingCmd; +import org.apache.cloudstack.api.command.admin.pod.DeletePodCmd; +import org.apache.cloudstack.api.command.admin.offering.DeleteServiceOfferingCmd; +import org.apache.cloudstack.api.command.admin.zone.DeleteZoneCmd; +import org.apache.cloudstack.api.command.admin.ldap.LDAPConfigCmd; +import org.apache.cloudstack.api.command.admin.ldap.LDAPRemoveCmd; +import org.apache.cloudstack.api.command.admin.zone.UpdateZoneCmd; +import org.apache.cloudstack.api.command.user.network.ListNetworkOfferingsCmd; +import org.apache.cloudstack.api.command.admin.network.UpdateNetworkOfferingCmd; import com.cloud.configuration.Configuration; import com.cloud.configuration.ConfigurationManager; import com.cloud.configuration.ConfigurationService; diff --git a/server/test/com/cloud/vpc/MockNetworkManagerImpl.java b/server/test/com/cloud/vpc/MockNetworkManagerImpl.java index 8a7866e88cb..adb80f08178 100644 --- a/server/test/com/cloud/vpc/MockNetworkManagerImpl.java +++ b/server/test/com/cloud/vpc/MockNetworkManagerImpl.java @@ -25,13 +25,13 @@ import java.util.Set; import javax.ejb.Local; import javax.naming.ConfigurationException; -import org.apache.cloudstack.api.admin.usage.command.ListTrafficTypeImplementorsCmd; -import org.apache.cloudstack.api.user.network.command.ListNetworksCmd; +import org.apache.cloudstack.api.command.admin.usage.ListTrafficTypeImplementorsCmd; +import org.apache.cloudstack.api.command.user.network.ListNetworksCmd; import org.apache.log4j.Logger; import com.cloud.acl.ControlledEntity.ACLType; -import org.apache.cloudstack.api.user.network.command.CreateNetworkCmd; -import org.apache.cloudstack.api.user.network.command.RestartNetworkCmd; +import org.apache.cloudstack.api.command.user.network.CreateNetworkCmd; +import org.apache.cloudstack.api.command.user.network.RestartNetworkCmd; import com.cloud.dc.DataCenter; import com.cloud.dc.Vlan; import com.cloud.dc.Vlan.VlanType; From ad50d226cd5ffa3d84fb1aed33f1d581909ec6e1 Mon Sep 17 00:00:00 2001 From: Fang Wang Date: Fri, 7 Dec 2012 17:39:25 -0800 Subject: [PATCH 082/421] api: Refactoring, add the parameter annotation for user VM. - Fix some errors in the previous deployVMCmd. modified: api/src/org/apache/cloudstack/api/user/vm/command/DeployVMCmd.java modified: api/src/org/apache/cloudstack/api/user/vm/command/DestroyVMCmd.java modified: api/src/org/apache/cloudstack/api/user/vm/command/GetVMPasswordCmd.java modified: api/src/org/apache/cloudstack/api/user/vm/command/ListVMsCmd.java modified: api/src/org/apache/cloudstack/api/user/vm/command/RebootVMCmd.java modified: api/src/org/apache/cloudstack/api/user/vm/command/ResetVMPasswordCmd.java modified: api/src/org/apache/cloudstack/api/user/vm/command/RestoreVMCmd.java modified: api/src/org/apache/cloudstack/api/user/vm/command/StartVMCmd.java modified: api/src/org/apache/cloudstack/api/user/vm/command/StopVMCmd.java modified: api/src/org/apache/cloudstack/api/user/vm/command/UpdateVMCmd.java modified: api/src/org/apache/cloudstack/api/user/vm/command/UpgradeVMCmd.java Signed-off-by: Rohit Yadav --- .../api/user/vm/command/DeployVMCmd.java | 46 ++++++++++------- .../api/user/vm/command/DestroyVMCmd.java | 4 +- .../api/user/vm/command/GetVMPasswordCmd.java | 5 +- .../api/user/vm/command/ListVMsCmd.java | 50 +++++++++++-------- .../api/user/vm/command/RebootVMCmd.java | 2 +- .../user/vm/command/ResetVMPasswordCmd.java | 2 +- .../api/user/vm/command/RestoreVMCmd.java | 2 +- .../api/user/vm/command/StartVMCmd.java | 6 ++- .../api/user/vm/command/StopVMCmd.java | 2 +- .../api/user/vm/command/UpdateVMCmd.java | 6 ++- .../api/user/vm/command/UpgradeVMCmd.java | 6 ++- 11 files changed, 79 insertions(+), 52 deletions(-) diff --git a/api/src/org/apache/cloudstack/api/user/vm/command/DeployVMCmd.java b/api/src/org/apache/cloudstack/api/user/vm/command/DeployVMCmd.java index ac67297071e..2cf9e8c7784 100644 --- a/api/src/org/apache/cloudstack/api/user/vm/command/DeployVMCmd.java +++ b/api/src/org/apache/cloudstack/api/user/vm/command/DeployVMCmd.java @@ -34,7 +34,17 @@ import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; + +import com.cloud.api.response.DiskOfferingResponse; +import com.cloud.api.response.DomainResponse; +import com.cloud.api.response.HostResponse; +import com.cloud.api.response.NetworkResponse; +import com.cloud.api.response.ProjectAccountResponse; +import com.cloud.api.response.SecurityGroupResponse; +import com.cloud.api.response.ServiceOfferingResponse; +import com.cloud.api.response.TemplateResponse; import com.cloud.api.response.UserVmResponse; +import com.cloud.api.response.ZoneResponse; import com.cloud.async.AsyncJob; import com.cloud.dc.DataCenter; import com.cloud.dc.DataCenter.NetworkType; @@ -67,18 +77,18 @@ public class DeployVMCmd extends BaseAsyncCreateCmd { //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - @IdentityMapper(entityTableName="data_center") - @Parameter(name=ApiConstants.ZONE_ID, type=CommandType.LONG, required=true, description="availability zone for the virtual machine") + //@IdentityMapper(entityTableName="data_center") + @Parameter(name=ApiConstants.ZONE_ID, type=CommandType.LONG, required=true, description="availability zone for the virtual machine", entityType=ZoneResponse.class) private Long zoneId; @ACL - @IdentityMapper(entityTableName="disk_offering") - @Parameter(name=ApiConstants.SERVICE_OFFERING_ID, type=CommandType.LONG, required=true, description="the ID of the service offering for the virtual machine", resourceType=ServiceOffering.class) + //@IdentityMapper(entityTableName="disk_offering") + @Parameter(name=ApiConstants.SERVICE_OFFERING_ID, type=CommandType.LONG, required=true, description="the ID of the service offering for the virtual machine", resourceType=ServiceOffering.class, entityType=ServiceOfferingResponse.class) private Long serviceOfferingId; @ACL - @IdentityMapper(entityTableName="vm_template") - @Parameter(name=ApiConstants.TEMPLATE_ID, type=CommandType.LONG, required=true, description="the ID of the template for the virtual machine",resourceType=VirtualMachineTemplate.class) + //@IdentityMapper(entityTableName="vm_template") + @Parameter(name=ApiConstants.TEMPLATE_ID, type=CommandType.LONG, required=true, description="the ID of the template for the virtual machine", entityType=TemplateResponse.class) private Long templateId; @Parameter(name=ApiConstants.NAME, type=CommandType.STRING, description="host name for the virtual machine") @@ -91,20 +101,20 @@ public class DeployVMCmd extends BaseAsyncCreateCmd { @Parameter(name=ApiConstants.ACCOUNT, type=CommandType.STRING, description="an optional account for the virtual machine. Must be used with domainId.") private String accountName; - @IdentityMapper(entityTableName="domain") - @Parameter(name=ApiConstants.DOMAIN_ID, type=CommandType.LONG, description="an optional domainId for the virtual machine. If the account parameter is used, domainId must also be used.", entityType=Domain.class) + //@IdentityMapper(entityTableName="domain") + @Parameter(name=ApiConstants.DOMAIN_ID, type=CommandType.LONG, description="an optional domainId for the virtual machine. If the account parameter is used, domainId must also be used.", entityType=DomainResponse.class) private Long domainId; //Network information @ACL - @IdentityMapper(entityTableName="networks") - @Parameter(name=ApiConstants.NETWORK_IDS, type=CommandType.LIST, collectionType=CommandType.LONG, description="list of network ids used by virtual machine. Can't be specified with ipToNetworkList parameter", resourceType=Network.class) + //@IdentityMapper(entityTableName="networks") + @Parameter(name=ApiConstants.NETWORK_IDS, type=CommandType.LIST, collectionType=CommandType.LONG, description="list of network ids used by virtual machine. Can't be specified with ipToNetworkList parameter", entityType=NetworkResponse.class) private List networkIds; //DataDisk information @ACL - @IdentityMapper(entityTableName="disk_offering") - @Parameter(name=ApiConstants.DISK_OFFERING_ID, type=CommandType.LONG, description="the ID of the disk offering for the virtual machine. If the template is of ISO format, the diskOfferingId is for the root disk volume. Otherwise this parameter is used to indicate the offering for the data disk volume. If the templateId parameter passed is from a Template object, the diskOfferingId refers to a DATA Disk Volume created. If the templateId parameter passed is from an ISO object, the diskOfferingId refers to a ROOT Disk Volume created.", resourceType=DiskOffering.class) + //@IdentityMapper(entityTableName="disk_offering") + @Parameter(name=ApiConstants.DISK_OFFERING_ID, type=CommandType.LONG, description="the ID of the disk offering for the virtual machine. If the template is of ISO format, the diskOfferingId is for the root disk volume. Otherwise this parameter is used to indicate the offering for the data disk volume. If the templateId parameter passed is from a Template object, the diskOfferingId refers to a DATA Disk Volume created. If the templateId parameter passed is from an ISO object, the diskOfferingId refers to a ROOT Disk Volume created.", entityType=DiskOfferingResponse.class) private Long diskOfferingId; @Parameter(name=ApiConstants.SIZE, type=CommandType.LONG, description="the arbitrary size for the DATADISK volume. Mutually exclusive with diskOfferingId") @@ -123,13 +133,13 @@ public class DeployVMCmd extends BaseAsyncCreateCmd { private String sshKeyPairName; - @IdentityMapper(entityTableName="host") - @Parameter(name=ApiConstants.HOST_ID, type=CommandType.LONG, description="destination Host ID to deploy the VM to - parameter available for root admin only") + //@IdentityMapper(entityTableName="host") + @Parameter(name=ApiConstants.HOST_ID, type=CommandType.LONG, description="destination Host ID to deploy the VM to - parameter available for root admin only", entityType=HostResponse.class) private Long hostId; @ACL - @IdentityMapper(entityTableName="security_group") - @Parameter(name=ApiConstants.SECURITY_GROUP_IDS, type=CommandType.LIST, collectionType=CommandType.LONG, description="comma separated list of security groups id that going to be applied to the virtual machine. Should be passed only when vm is created from a zone with Basic Network support. Mutually exclusive with securitygroupnames parameter", resourceType=SecurityGroup.class) + //@IdentityMapper(entityTableName="security_group") + @Parameter(name=ApiConstants.SECURITY_GROUP_IDS, type=CommandType.LIST, collectionType=CommandType.LONG, description="comma separated list of security groups id that going to be applied to the virtual machine. Should be passed only when vm is created from a zone with Basic Network support. Mutually exclusive with securitygroupnames parameter", resourceType=SecurityGroup.class, entityType=SecurityGroupResponse.class) private List securityGroupIdList; @ACL @@ -146,8 +156,8 @@ public class DeployVMCmd extends BaseAsyncCreateCmd { @Parameter(name=ApiConstants.KEYBOARD, type=CommandType.STRING, description="an optional keyboard device type for the virtual machine. valid value can be one of de,de-ch,es,fi,fr,fr-be,fr-ch,is,it,jp,nl-be,no,pt,uk,us") private String keyboard; - @IdentityMapper(entityTableName="projects") - @Parameter(name=ApiConstants.PROJECT_ID, type=CommandType.LONG, description="Deploy vm for the project") + //@IdentityMapper(entityTableName="projects") + @Parameter(name=ApiConstants.PROJECT_ID, type=CommandType.LONG, description="Deploy vm for the project", entityType=ProjectAccountResponse.class) private Long projectId; @Parameter(name=ApiConstants.START_VM, type=CommandType.BOOLEAN, description="true if network offering supports specifying ip ranges; defaulted to true if not specified") diff --git a/api/src/org/apache/cloudstack/api/user/vm/command/DestroyVMCmd.java b/api/src/org/apache/cloudstack/api/user/vm/command/DestroyVMCmd.java index a308b69a9dd..06c3c0d7047 100644 --- a/api/src/org/apache/cloudstack/api/user/vm/command/DestroyVMCmd.java +++ b/api/src/org/apache/cloudstack/api/user/vm/command/DestroyVMCmd.java @@ -45,8 +45,8 @@ public class DestroyVMCmd extends BaseAsyncCmd { //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - @IdentityMapper(entityTableName="vm_instance") - @Parameter(name=ApiConstants.ID, type=CommandType.LONG, required=true, description="The ID of the virtual machine") + //@IdentityMapper(entityTableName="vm_instance") + @Parameter(name=ApiConstants.ID, type=CommandType.LONG, required=true, description="The ID of the virtual machine", entityType=UserVmResponse.class) private Long id; ///////////////////////////////////////////////////// diff --git a/api/src/org/apache/cloudstack/api/user/vm/command/GetVMPasswordCmd.java b/api/src/org/apache/cloudstack/api/user/vm/command/GetVMPasswordCmd.java index 54464eed2fb..ee8eee4f28b 100644 --- a/api/src/org/apache/cloudstack/api/user/vm/command/GetVMPasswordCmd.java +++ b/api/src/org/apache/cloudstack/api/user/vm/command/GetVMPasswordCmd.java @@ -26,6 +26,7 @@ import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import com.cloud.api.response.GetVMPasswordResponse; +import com.cloud.api.response.UserVmResponse; import com.cloud.user.Account; import com.cloud.uservm.UserVm; @@ -39,8 +40,8 @@ public class GetVMPasswordCmd extends BaseCmd { //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - @IdentityMapper(entityTableName="vm_instance") - @Parameter(name=ApiConstants.ID, type=CommandType.LONG, required=true, description="The ID of the virtual machine") + //@IdentityMapper(entityTableName="vm_instance") + @Parameter(name=ApiConstants.ID, type=CommandType.LONG, required=true, description="The ID of the virtual machine", entityType=UserVmResponse.class) private Long id; diff --git a/api/src/org/apache/cloudstack/api/user/vm/command/ListVMsCmd.java b/api/src/org/apache/cloudstack/api/user/vm/command/ListVMsCmd.java index 9ed9bb3e0a7..335a3261bca 100644 --- a/api/src/org/apache/cloudstack/api/user/vm/command/ListVMsCmd.java +++ b/api/src/org/apache/cloudstack/api/user/vm/command/ListVMsCmd.java @@ -28,8 +28,18 @@ import org.apache.cloudstack.api.BaseListTaggedResourcesCmd; import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; + +import com.cloud.api.response.HostResponse; +import com.cloud.api.response.InstanceGroupResponse; +import com.cloud.api.response.IsoVmResponse; import com.cloud.api.response.ListResponse; +import com.cloud.api.response.NetworkResponse; +import com.cloud.api.response.PodResponse; +import com.cloud.api.response.StoragePoolResponse; +import com.cloud.api.response.TemplateResponse; import com.cloud.api.response.UserVmResponse; +import com.cloud.api.response.VpcResponse; +import com.cloud.api.response.ZoneResponse; import com.cloud.async.AsyncJob; import com.cloud.exception.InvalidParameterValueException; import com.cloud.utils.Pair; @@ -46,60 +56,60 @@ public class ListVMsCmd extends BaseListTaggedResourcesCmd { //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - @IdentityMapper(entityTableName="instance_group") - @Parameter(name=ApiConstants.GROUP_ID, type=CommandType.LONG, description="the group ID") + //@IdentityMapper(entityTableName="instance_group") + @Parameter(name=ApiConstants.GROUP_ID, type=CommandType.LONG, description="the group ID", entityType=InstanceGroupResponse.class) private Long groupId; - @IdentityMapper(entityTableName="host") - @Parameter(name=ApiConstants.HOST_ID, type=CommandType.LONG, description="the host ID") + //@IdentityMapper(entityTableName="host") + @Parameter(name=ApiConstants.HOST_ID, type=CommandType.LONG, description="the host ID", entityType=HostResponse.class) private Long hostId; - @IdentityMapper(entityTableName="vm_instance") - @Parameter(name=ApiConstants.ID, type=CommandType.LONG, description="the ID of the virtual machine") + //@IdentityMapper(entityTableName="vm_instance") + @Parameter(name=ApiConstants.ID, type=CommandType.LONG, description="the ID of the virtual machine", entityType=UserVmResponse.class) private Long id; @Parameter(name=ApiConstants.NAME, type=CommandType.STRING, description="name of the virtual machine") private String instanceName; - @IdentityMapper(entityTableName="host_pod_ref") - @Parameter(name=ApiConstants.POD_ID, type=CommandType.LONG, description="the pod ID") + //@IdentityMapper(entityTableName="host_pod_ref") + @Parameter(name=ApiConstants.POD_ID, type=CommandType.LONG, description="the pod ID", entityType=PodResponse.class) private Long podId; @Parameter(name=ApiConstants.STATE, type=CommandType.STRING, description="state of the virtual machine") private String state; - @IdentityMapper(entityTableName="data_center") - @Parameter(name=ApiConstants.ZONE_ID, type=CommandType.LONG, description="the availability zone ID") + //@IdentityMapper(entityTableName="data_center") + @Parameter(name=ApiConstants.ZONE_ID, type=CommandType.LONG, description="the availability zone ID", entityType=ZoneResponse.class) private Long zoneId; @Parameter(name=ApiConstants.FOR_VIRTUAL_NETWORK, type=CommandType.BOOLEAN, description="list by network type; true if need to list vms using Virtual Network, false otherwise") private Boolean forVirtualNetwork; - @IdentityMapper(entityTableName="networks") - @Parameter(name=ApiConstants.NETWORK_ID, type=CommandType.LONG, description="list by network id") + //@IdentityMapper(entityTableName="networks") + @Parameter(name=ApiConstants.NETWORK_ID, type=CommandType.LONG, description="list by network id", entityType=NetworkResponse.class) private Long networkId; @Parameter(name=ApiConstants.HYPERVISOR, type=CommandType.STRING, description="the target hypervisor for the template") private String hypervisor; - @IdentityMapper(entityTableName="storage_pool") - @Parameter(name=ApiConstants.STORAGE_ID, type=CommandType.LONG, description="the storage ID where vm's volumes belong to") + //@IdentityMapper(entityTableName="storage_pool") + @Parameter(name=ApiConstants.STORAGE_ID, type=CommandType.LONG, description="the storage ID where vm's volumes belong to", entityType=StoragePoolResponse.class) private Long storageId; @Parameter(name=ApiConstants.DETAILS, type=CommandType.LIST, collectionType=CommandType.STRING, description="comma separated list of host details requested, " + "value can be a list of [all, group, nics, stats, secgrp, tmpl, servoff, iso, volume, min]. If no parameter is passed in, the details will be defaulted to all" ) private List viewDetails; - @IdentityMapper(entityTableName="vm_template") - @Parameter(name=ApiConstants.TEMPLATE_ID, type=CommandType.LONG, description="list vms by template") + //@IdentityMapper(entityTableName="vm_template") + @Parameter(name=ApiConstants.TEMPLATE_ID, type=CommandType.LONG, description="list vms by template", entityType=TemplateResponse.class) private Long templateId; - @IdentityMapper(entityTableName="vm_template") - @Parameter(name=ApiConstants.ISO_ID, type=CommandType.LONG, description="list vms by iso") + //@IdentityMapper(entityTableName="vm_template") + @Parameter(name=ApiConstants.ISO_ID, type=CommandType.LONG, description="list vms by iso", entityType=IsoVmResponse.class) private Long isoId; - @IdentityMapper(entityTableName="vpc") - @Parameter(name=ApiConstants.VPC_ID, type=CommandType.LONG, description="list vms by vpc") + //@IdentityMapper(entityTableName="vpc") + @Parameter(name=ApiConstants.VPC_ID, type=CommandType.LONG, description="list vms by vpc", entityType=VpcResponse.class) private Long vpcId; ///////////////////////////////////////////////////// /////////////////// Accessors /////////////////////// diff --git a/api/src/org/apache/cloudstack/api/user/vm/command/RebootVMCmd.java b/api/src/org/apache/cloudstack/api/user/vm/command/RebootVMCmd.java index 3d496b57039..45ed4eef86e 100644 --- a/api/src/org/apache/cloudstack/api/user/vm/command/RebootVMCmd.java +++ b/api/src/org/apache/cloudstack/api/user/vm/command/RebootVMCmd.java @@ -45,7 +45,7 @@ public class RebootVMCmd extends BaseAsyncCmd { ///////////////////////////////////////////////////// @IdentityMapper(entityTableName="vm_instance") - @Parameter(name=ApiConstants.ID, type=CommandType.LONG, required=true, description="The ID of the virtual machine") + @Parameter(name=ApiConstants.ID, type=CommandType.LONG, required=true, description="The ID of the virtual machine", entityType=UserVmResponse.class) private Long id; ///////////////////////////////////////////////////// diff --git a/api/src/org/apache/cloudstack/api/user/vm/command/ResetVMPasswordCmd.java b/api/src/org/apache/cloudstack/api/user/vm/command/ResetVMPasswordCmd.java index d3fab261cb2..c41c51f14eb 100644 --- a/api/src/org/apache/cloudstack/api/user/vm/command/ResetVMPasswordCmd.java +++ b/api/src/org/apache/cloudstack/api/user/vm/command/ResetVMPasswordCmd.java @@ -47,7 +47,7 @@ public class ResetVMPasswordCmd extends BaseAsyncCmd { ///////////////////////////////////////////////////// @IdentityMapper(entityTableName="vm_instance") - @Parameter(name=ApiConstants.ID, type=CommandType.LONG, required=true, description="The ID of the virtual machine") + @Parameter(name=ApiConstants.ID, type=CommandType.LONG, required=true, description="The ID of the virtual machine", entityType=UserVmResponse.class) private Long id; // unexposed parameter needed for serializing/deserializing the command diff --git a/api/src/org/apache/cloudstack/api/user/vm/command/RestoreVMCmd.java b/api/src/org/apache/cloudstack/api/user/vm/command/RestoreVMCmd.java index c4ff9aad485..926362f4cfa 100644 --- a/api/src/org/apache/cloudstack/api/user/vm/command/RestoreVMCmd.java +++ b/api/src/org/apache/cloudstack/api/user/vm/command/RestoreVMCmd.java @@ -41,7 +41,7 @@ public class RestoreVMCmd extends BaseAsyncCmd { private static final String s_name = "restorevmresponse"; @IdentityMapper(entityTableName="vm_instance") - @Parameter(name=ApiConstants.VIRTUAL_MACHINE_ID, type=CommandType.LONG, required=true, description="Virtual Machine ID") + @Parameter(name=ApiConstants.VIRTUAL_MACHINE_ID, type=CommandType.LONG, required=true, description="Virtual Machine ID", entityType=UserVmResponse.class) private Long vmId; @Override diff --git a/api/src/org/apache/cloudstack/api/user/vm/command/StartVMCmd.java b/api/src/org/apache/cloudstack/api/user/vm/command/StartVMCmd.java index 406ffb9f799..f00e082a8fa 100644 --- a/api/src/org/apache/cloudstack/api/user/vm/command/StartVMCmd.java +++ b/api/src/org/apache/cloudstack/api/user/vm/command/StartVMCmd.java @@ -25,6 +25,8 @@ import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; + +import com.cloud.api.response.HostResponse; import com.cloud.api.response.UserVmResponse; import com.cloud.async.AsyncJob; import com.cloud.event.EventTypes; @@ -50,11 +52,11 @@ public class StartVMCmd extends BaseAsyncCmd { // /////////////////////////////////////////////////// @IdentityMapper(entityTableName = "vm_instance") - @Parameter(name = ApiConstants.ID, type = CommandType.LONG, required = true, description = "The ID of the virtual machine") + @Parameter(name = ApiConstants.ID, type = CommandType.LONG, required = true, description = "The ID of the virtual machine", entityType=UserVmResponse.class) private Long id; @IdentityMapper(entityTableName="host") - @Parameter(name=ApiConstants.HOST_ID, type=CommandType.LONG, description="destination Host ID to deploy the VM to - parameter available for root admin only", since="3.0.1") + @Parameter(name=ApiConstants.HOST_ID, type=CommandType.LONG, description="destination Host ID to deploy the VM to - parameter available for root admin only", entityType=HostResponse.class, since="3.0.1") private Long hostId; // /////////////////////////////////////////////////// diff --git a/api/src/org/apache/cloudstack/api/user/vm/command/StopVMCmd.java b/api/src/org/apache/cloudstack/api/user/vm/command/StopVMCmd.java index 2de20577b0a..53262a212f6 100644 --- a/api/src/org/apache/cloudstack/api/user/vm/command/StopVMCmd.java +++ b/api/src/org/apache/cloudstack/api/user/vm/command/StopVMCmd.java @@ -45,7 +45,7 @@ public class StopVMCmd extends BaseAsyncCmd { // /////////////////////////////////////////////////// @IdentityMapper(entityTableName = "vm_instance") - @Parameter(name = ApiConstants.ID, type = CommandType.LONG, required = true, description = "The ID of the virtual machine") + @Parameter(name = ApiConstants.ID, type = CommandType.LONG, required = true, description = "The ID of the virtual machine", entityType=UserVmResponse.class) private Long id; @Parameter(name = ApiConstants.FORCED, type = CommandType.BOOLEAN, required = false, description = "Force stop the VM " + diff --git a/api/src/org/apache/cloudstack/api/user/vm/command/UpdateVMCmd.java b/api/src/org/apache/cloudstack/api/user/vm/command/UpdateVMCmd.java index 2a8dfca847e..4b4ecf44e63 100644 --- a/api/src/org/apache/cloudstack/api/user/vm/command/UpdateVMCmd.java +++ b/api/src/org/apache/cloudstack/api/user/vm/command/UpdateVMCmd.java @@ -24,6 +24,8 @@ import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; + +import com.cloud.api.response.GuestOSResponse; import com.cloud.api.response.UserVmResponse; import com.cloud.exception.InsufficientCapacityException; import com.cloud.exception.ResourceUnavailableException; @@ -53,11 +55,11 @@ public class UpdateVMCmd extends BaseCmd{ private Boolean haEnable; @IdentityMapper(entityTableName="vm_instance") - @Parameter(name=ApiConstants.ID, type=CommandType.LONG, required=true, description="The ID of the virtual machine") + @Parameter(name=ApiConstants.ID, type=CommandType.LONG, required=true, description="The ID of the virtual machine", entityType=UserVmResponse.class) private Long id; @IdentityMapper(entityTableName="guest_os") - @Parameter(name=ApiConstants.OS_TYPE_ID, type=CommandType.LONG, description="the ID of the OS type that best represents this VM.") + @Parameter(name=ApiConstants.OS_TYPE_ID, type=CommandType.LONG, description="the ID of the OS type that best represents this VM.", entityType=GuestOSResponse.class) private Long osTypeId; @Parameter(name=ApiConstants.USER_DATA, type=CommandType.STRING, description="an optional binary data that can be sent to the virtual machine upon a successful deployment. This binary data must be base64 encoded before adding it to the request. Currently only HTTP GET is supported. Using HTTP GET (via querystring), you can send up to 2KB of data after base64 encoding.", length=2048) diff --git a/api/src/org/apache/cloudstack/api/user/vm/command/UpgradeVMCmd.java b/api/src/org/apache/cloudstack/api/user/vm/command/UpgradeVMCmd.java index 32ff9189710..995218ee6a2 100644 --- a/api/src/org/apache/cloudstack/api/user/vm/command/UpgradeVMCmd.java +++ b/api/src/org/apache/cloudstack/api/user/vm/command/UpgradeVMCmd.java @@ -24,6 +24,8 @@ import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; + +import com.cloud.api.response.DiskOfferingResponse; import com.cloud.api.response.UserVmResponse; import com.cloud.exception.InvalidParameterValueException; import com.cloud.offering.ServiceOffering; @@ -43,11 +45,11 @@ public class UpgradeVMCmd extends BaseCmd { ///////////////////////////////////////////////////// @IdentityMapper(entityTableName="vm_instance") - @Parameter(name=ApiConstants.ID, type=CommandType.LONG, required=true, description="The ID of the virtual machine") + @Parameter(name=ApiConstants.ID, type=CommandType.LONG, required=true, description="The ID of the virtual machine", entityType=UserVmResponse.class) private Long id; @IdentityMapper(entityTableName="disk_offering") - @Parameter(name=ApiConstants.SERVICE_OFFERING_ID, type=CommandType.LONG, required=true, description="the service offering ID to apply to the virtual machine") + @Parameter(name=ApiConstants.SERVICE_OFFERING_ID, type=CommandType.LONG, required=true, description="the service offering ID to apply to the virtual machine", entityType=DiskOfferingResponse.class) private Long serviceOfferingId; ///////////////////////////////////////////////////// From e398b1e47a2558005c66b555e55d62bab2c7e149 Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Fri, 7 Dec 2012 19:16:44 -0800 Subject: [PATCH 083/421] api: Refactor command and response classes to org.apache.cloudstack.api.* Signed-off-by: Rohit Yadav --- .../api/commands/CreatePrivateNetworkCmd.java | 2 +- .../api/commands/DestroyConsoleProxyCmd.java | 2 +- .../ListRecurringSnapshotScheduleCmd.java | 4 +- .../ListTemplateOrIsoPermissionsCmd.java | 2 +- .../UpdateTemplateOrIsoPermissionsCmd.java | 2 +- .../security/SecurityGroupService.java | 2 +- api/src/com/cloud/network/vpc/VpcService.java | 4 +- .../network/vpn/RemoteAccessVpnService.java | 2 +- .../network/vpn/Site2SiteVpnService.java | 22 +-- .../com/cloud/server/ManagementService.java | 14 +- .../cloud/server/TaggedResourceService.java | 2 +- api/src/com/cloud/storage/StorageService.java | 6 +- api/src/com/cloud/vm/UserVmService.java | 27 ++- .../apache/cloudstack/api/ApiConstants.java | 0 .../apache/cloudstack/api/BaseAsyncCmd.java | 2 +- .../cloudstack/api/BaseAsyncCreateCmd.java | 2 +- .../org/apache/cloudstack/api/BaseCmd.java | 0 .../apache/cloudstack/api/BaseListCmd.java | 0 .../apache/cloudstack/api}/BaseResponse.java | 2 +- api/src/org/apache/cloudstack/api/Entity.java | 2 +- .../apache/cloudstack/api/Implementation.java | 2 - .../cloudstack/api/ResponseGenerator.java | 142 ++++++++-------- .../admin/account/CreateAccountCmd.java | 4 +- .../admin/account/DeleteAccountCmd.java | 2 +- .../admin/account/DisableAccountCmd.java | 2 +- .../admin/account/EnableAccountCmd.java | 2 +- .../command/admin/account/LockAccountCmd.java | 2 +- .../admin/account/UpdateAccountCmd.java | 2 +- .../admin/autoscale/CreateCounterCmd.java | 2 +- .../admin/autoscale/DeleteCounterCmd.java | 2 +- .../command/admin/cluster/AddClusterCmd.java | 4 +- .../admin/cluster/DeleteClusterCmd.java | 2 +- .../admin/cluster/ListClustersCmd.java | 4 +- .../admin/cluster/UpdateClusterCmd.java | 2 +- .../command/admin/config/ListCfgsByCmd.java | 4 +- .../config/ListHypervisorCapabilitiesCmd.java | 4 +- .../command/admin/config/UpdateCfgCmd.java | 2 +- .../UpdateHypervisorCapabilitiesCmd.java | 4 +- .../command/admin/domain/CreateDomainCmd.java | 2 +- .../command/admin/domain/DeleteDomainCmd.java | 2 +- .../admin/domain/ListDomainChildrenCmd.java | 4 +- .../command/admin/domain/ListDomainsCmd.java | 4 +- .../command/admin/domain/UpdateDomainCmd.java | 2 +- .../api/command/admin/host/AddHostCmd.java | 4 +- .../admin/host/AddSecondaryStorageCmd.java | 2 +- .../admin/host/CancelMaintenanceCmd.java | 2 +- .../api/command/admin/host/DeleteHostCmd.java | 2 +- .../api/command/admin/host/ListHostsCmd.java | 4 +- .../admin/host/PrepareForMaintenanceCmd.java | 2 +- .../command/admin/host/ReconnectHostCmd.java | 2 +- .../api/command/admin/host/UpdateHostCmd.java | 2 +- .../admin/host/UpdateHostPasswordCmd.java | 2 +- .../api/command/admin/ldap/LDAPConfigCmd.java | 2 +- .../api/command/admin/ldap/LDAPRemoveCmd.java | 4 +- .../admin/network/AddNetworkDeviceCmd.java | 90 +++++----- .../network/AddNetworkServiceProviderCmd.java | 2 +- .../network/CreateNetworkOfferingCmd.java | 2 +- .../network/CreatePhysicalNetworkCmd.java | 2 +- .../CreateStorageNetworkIpRangeCmd.java | 2 +- .../admin/network/DeleteNetworkDeviceCmd.java | 84 +++++----- .../network/DeleteNetworkOfferingCmd.java | 2 +- .../DeleteNetworkServiceProviderCmd.java | 2 +- .../network/DeletePhysicalNetworkCmd.java | 2 +- .../DeleteStorageNetworkIpRangeCmd.java | 2 +- .../admin/network/ListNetworkDeviceCmd.java | 94 +++++------ .../ListNetworkServiceProvidersCmd.java | 4 +- .../network/ListPhysicalNetworksCmd.java | 4 +- .../network/ListStorageNetworkIpRangeCmd.java | 4 +- .../ListSupportedNetworkServicesCmd.java | 4 +- .../network/UpdateNetworkOfferingCmd.java | 2 +- .../UpdateNetworkServiceProviderCmd.java | 2 +- .../network/UpdatePhysicalNetworkCmd.java | 2 +- .../UpdateStorageNetworkIpRangeCmd.java | 2 +- .../admin/offering/CreateDiskOfferingCmd.java | 2 +- .../offering/CreateServiceOfferingCmd.java | 2 +- .../admin/offering/DeleteDiskOfferingCmd.java | 2 +- .../offering/DeleteServiceOfferingCmd.java | 2 +- .../admin/offering/UpdateDiskOfferingCmd.java | 2 +- .../offering/UpdateServiceOfferingCmd.java | 2 +- .../api/command/admin/pod/CreatePodCmd.java | 2 +- .../api/command/admin/pod/DeletePodCmd.java | 2 +- .../api/command/admin/pod/ListPodsByCmd.java | 4 +- .../api/command/admin/pod/UpdatePodCmd.java | 2 +- .../command/admin/resource/ListAlertsCmd.java | 4 +- .../admin/resource/ListCapacityCmd.java | 4 +- .../resource/UploadCustomCertificateCmd.java | 2 +- .../ConfigureVirtualRouterElementCmd.java | 2 +- .../router/CreateVirtualRouterElementCmd.java | 2 +- .../admin/router/DestroyRouterCmd.java | 2 +- .../command/admin/router/ListRoutersCmd.java | 6 +- .../router/ListVirtualRouterElementsCmd.java | 4 +- .../command/admin/router/RebootRouterCmd.java | 2 +- .../command/admin/router/StartRouterCmd.java | 2 +- .../command/admin/router/StopRouterCmd.java | 2 +- .../admin/router/UpgradeRouterCmd.java | 2 +- .../CancelPrimaryStorageMaintenanceCmd.java | 2 +- .../storagepool/CreateStoragePoolCmd.java | 2 +- .../admin/storagepool/DeletePoolCmd.java | 2 +- .../storagepool/ListStoragePoolsCmd.java | 4 +- ...reparePrimaryStorageForMaintenanceCmd.java | 2 +- .../storagepool/UpdateStoragePoolCmd.java | 2 +- .../api/command/admin/swift/AddSwiftCmd.java | 4 +- .../command/admin/swift/ListSwiftsCmd.java | 6 +- .../admin/systemvm/DestroySystemVmCmd.java | 2 +- .../admin/systemvm/ListSystemVMsCmd.java | 4 +- .../admin/systemvm/MigrateSystemVMCmd.java | 2 +- .../admin/systemvm/RebootSystemVmCmd.java | 2 +- .../admin/systemvm/StartSystemVMCmd.java | 2 +- .../admin/systemvm/StopSystemVmCmd.java | 2 +- .../admin/systemvm/UpgradeSystemVMCmd.java | 4 +- .../admin/template/PrepareTemplateCmd.java | 4 +- .../admin/usage/AddTrafficTypeCmd.java | 2 +- .../admin/usage/DeleteTrafficTypeCmd.java | 2 +- .../usage/ListTrafficTypeImplementorsCmd.java | 4 +- .../admin/usage/ListTrafficTypesCmd.java | 6 +- .../admin/usage/UpdateTrafficTypeCmd.java | 2 +- .../api/command/admin/user/CreateUserCmd.java | 2 +- .../api/command/admin/user/DeleteUserCmd.java | 4 +- .../command/admin/user/DisableUserCmd.java | 2 +- .../api/command/admin/user/EnableUserCmd.java | 2 +- .../api/command/admin/user/GetUserCmd.java | 2 +- .../api/command/admin/user/ListUsersCmd.java | 4 +- .../api/command/admin/user/LockUserCmd.java | 2 +- .../api/command/admin/user/RegisterCmd.java | 2 +- .../api/command/admin/user/UpdateUserCmd.java | 2 +- .../admin/vlan/CreateVlanIpRangeCmd.java | 2 +- .../admin/vlan/DeleteVlanIpRangeCmd.java | 2 +- .../admin/vlan/ListVlanIpRangesCmd.java | 4 +- .../api/command/admin/vm/AssignVMCmd.java | 10 +- .../api/command/admin/vm/MigrateVMCmd.java | 6 +- .../api/command/admin/vm/RecoverVMCmd.java | 2 +- .../admin/vpc/CreatePrivateGatewayCmd.java | 2 +- .../admin/vpc/CreateVPCOfferingCmd.java | 2 +- .../admin/vpc/DeletePrivateGatewayCmd.java | 2 +- .../admin/vpc/DeleteVPCOfferingCmd.java | 2 +- .../admin/vpc/UpdateVPCOfferingCmd.java | 2 +- .../api/command/admin/zone/CreateZoneCmd.java | 4 +- .../api/command/admin/zone/DeleteZoneCmd.java | 4 +- .../zone/MarkDefaultZoneForAccountCmd.java | 6 +- .../api/command/admin/zone/UpdateZoneCmd.java | 2 +- .../user/account/AddAccountToProjectCmd.java | 2 +- .../account/DeleteAccountFromProjectCmd.java | 2 +- .../command/user/account/ListAccountsCmd.java | 4 +- .../user/account/ListProjectAccountsCmd.java | 6 +- .../user/address/AssociateIPAddrCmd.java | 2 +- .../user/address/DisassociateIPAddrCmd.java | 2 +- .../address/ListPublicIpAddressesCmd.java | 4 +- .../autoscale/CreateAutoScalePolicyCmd.java | 2 +- .../autoscale/CreateAutoScaleVmGroupCmd.java | 2 +- .../CreateAutoScaleVmProfileCmd.java | 2 +- .../user/autoscale/CreateConditionCmd.java | 2 +- .../autoscale/DeleteAutoScalePolicyCmd.java | 2 +- .../autoscale/DeleteAutoScaleVmGroupCmd.java | 2 +- .../DeleteAutoScaleVmProfileCmd.java | 2 +- .../user/autoscale/DeleteConditionCmd.java | 2 +- .../autoscale/DisableAutoScaleVmGroupCmd.java | 2 +- .../autoscale/EnableAutoScaleVmGroupCmd.java | 2 +- .../autoscale/ListAutoScalePoliciesCmd.java | 4 +- .../autoscale/ListAutoScaleVmGroupsCmd.java | 4 +- .../autoscale/ListAutoScaleVmProfilesCmd.java | 4 +- .../user/autoscale/ListConditionsCmd.java | 6 +- .../user/autoscale/ListCountersCmd.java | 4 +- .../autoscale/UpdateAutoScalePolicyCmd.java | 2 +- .../autoscale/UpdateAutoScaleVmGroupCmd.java | 2 +- .../UpdateAutoScaleVmProfileCmd.java | 2 +- .../user/config/ListCapabilitiesCmd.java | 2 +- .../command/user/event/ListEventTypesCmd.java | 4 +- .../api/command/user/event/ListEventsCmd.java | 6 +- .../user/firewall/CreateFirewallRuleCmd.java | 2 +- .../firewall/CreatePortForwardingRuleCmd.java | 2 +- .../user/firewall/DeleteFirewallRuleCmd.java | 2 +- .../firewall/DeletePortForwardingRuleCmd.java | 2 +- .../user/firewall/ListFirewallRulesCmd.java | 4 +- .../firewall/ListPortForwardingRulesCmd.java | 4 +- .../firewall/UpdatePortForwardingRuleCmd.java | 2 +- .../user/guest/ListGuestOsCategoriesCmd.java | 4 +- .../command/user/guest/ListGuestOsCmd.java | 4 +- .../api/command/user/iso/AttachIsoCmd.java | 4 +- .../api/command/user/iso/DeleteIsoCmd.java | 2 +- .../api/command/user/iso/DetachIsoCmd.java | 4 +- .../api/command/user/iso/ExtractIsoCmd.java | 2 +- .../user/iso/ListIsoPermissionsCmd.java | 20 +-- .../api/command/user/iso/ListIsosCmd.java | 4 +- .../api/command/user/iso/RegisterIsoCmd.java | 4 +- .../api/command/user/iso/UpdateIsoCmd.java | 2 +- .../user/iso/UpdateIsoPermissionsCmd.java | 2 +- .../command/user/job/ListAsyncJobsCmd.java | 4 +- .../user/job/QueryAsyncJobResultCmd.java | 2 +- .../AssignToLoadBalancerRuleCmd.java | 2 +- .../CreateLBStickinessPolicyCmd.java | 2 +- .../CreateLoadBalancerRuleCmd.java | 2 +- .../DeleteLBStickinessPolicyCmd.java | 2 +- .../DeleteLoadBalancerRuleCmd.java | 2 +- .../ListLBStickinessPoliciesCmd.java | 4 +- .../ListLoadBalancerRuleInstancesCmd.java | 4 +- .../ListLoadBalancerRulesCmd.java | 4 +- .../RemoveFromLoadBalancerRuleCmd.java | 2 +- .../UpdateLoadBalancerRuleCmd.java | 2 +- .../user/nat/CreateIpForwardingRuleCmd.java | 4 +- .../user/nat/DeleteIpForwardingRuleCmd.java | 2 +- .../command/user/nat/DisableStaticNatCmd.java | 2 +- .../command/user/nat/EnableStaticNatCmd.java | 2 +- .../user/nat/ListIpForwardingRulesCmd.java | 6 +- .../user/network/CreateNetworkACLCmd.java | 2 +- .../user/network/CreateNetworkCmd.java | 2 +- .../user/network/DeleteNetworkACLCmd.java | 2 +- .../user/network/DeleteNetworkCmd.java | 2 +- .../user/network/ListNetworkACLsCmd.java | 4 +- .../user/network/ListNetworkOfferingsCmd.java | 4 +- .../command/user/network/ListNetworksCmd.java | 4 +- .../user/network/RestartNetworkCmd.java | 4 +- .../user/network/UpdateNetworkCmd.java | 2 +- .../user/offering/ListDiskOfferingsCmd.java | 4 +- .../offering/ListServiceOfferingsCmd.java | 4 +- .../user/project/ActivateProjectCmd.java | 2 +- .../user/project/CreateProjectCmd.java | 2 +- .../user/project/DeleteProjectCmd.java | 2 +- .../project/DeleteProjectInvitationCmd.java | 2 +- .../project/ListProjectInvitationsCmd.java | 4 +- .../command/user/project/ListProjectsCmd.java | 4 +- .../user/project/SuspendProjectCmd.java | 2 +- .../user/project/UpdateProjectCmd.java | 2 +- .../project/UpdateProjectInvitationCmd.java | 2 +- .../user/resource/GetCloudIdentifierCmd.java | 2 +- .../user/resource/ListHypervisorsCmd.java | 4 +- .../user/resource/ListResourceLimitsCmd.java | 4 +- .../user/resource/UpdateResourceCountCmd.java | 4 +- .../user/resource/UpdateResourceLimitCmd.java | 2 +- .../AuthorizeSecurityGroupEgressCmd.java | 4 +- .../AuthorizeSecurityGroupIngressCmd.java | 4 +- .../securitygroup/CreateSecurityGroupCmd.java | 2 +- .../securitygroup/DeleteSecurityGroupCmd.java | 2 +- .../securitygroup/ListSecurityGroupsCmd.java | 6 +- .../RevokeSecurityGroupEgressCmd.java | 2 +- .../RevokeSecurityGroupIngressCmd.java | 2 +- .../user/snapshot/CreateSnapshotCmd.java | 2 +- .../snapshot/CreateSnapshotPolicyCmd.java | 2 +- .../user/snapshot/DeleteSnapshotCmd.java | 2 +- .../snapshot/DeleteSnapshotPoliciesCmd.java | 2 +- .../snapshot/ListSnapshotPoliciesCmd.java | 4 +- .../user/snapshot/ListSnapshotsCmd.java | 4 +- .../command/user/ssh/CreateSSHKeyPairCmd.java | 2 +- .../command/user/ssh/DeleteSSHKeyPairCmd.java | 2 +- .../command/user/ssh/ListSSHKeyPairsCmd.java | 4 +- .../user/ssh/RegisterSSHKeyPairCmd.java | 2 +- .../api/command/user/tag/CreateTagsCmd.java | 2 +- .../api/command/user/tag/DeleteTagsCmd.java | 2 +- .../api/command/user/tag/ListTagsCmd.java | 8 +- .../user/template/CopyTemplateCmd.java | 2 +- .../user/template/CreateTemplateCmd.java | 4 +- .../user/template/DeleteTemplateCmd.java | 2 +- .../user/template/ExtractTemplateCmd.java | 2 +- .../template/ListTemplatePermissionsCmd.java | 20 +-- .../user/template/ListTemplatesCmd.java | 4 +- .../user/template/RegisterTemplateCmd.java | 4 +- .../user/template/UpdateTemplateCmd.java | 2 +- .../UpdateTemplatePermissionsCmd.java | 2 +- .../api/command/user/user/AddVpnUserCmd.java | 2 +- .../command/user/user/ListVpnUsersCmd.java | 4 +- .../command/user/user/RemoveVpnUserCmd.java | 2 +- .../user/vm}/DeployVMCmd.java | 24 ++- .../user/vm}/DestroyVMCmd.java | 5 +- .../user/vm}/GetVMPasswordCmd.java | 7 +- .../user/vm}/ListVMsCmd.java | 27 ++- .../user/vm}/RebootVMCmd.java | 4 +- .../user/vm}/ResetVMPasswordCmd.java | 4 +- .../user/vm}/RestoreVMCmd.java | 4 +- .../user/vm}/StartVMCmd.java | 6 +- .../user/vm}/StopVMCmd.java | 4 +- .../user/vm}/UpdateVMCmd.java | 6 +- .../user/vm}/UpgradeVMCmd.java | 6 +- .../user/vmgroup}/CreateVMGroupCmd.java | 9 +- .../user/vmgroup}/DeleteVMGroupCmd.java | 7 +- .../user/vmgroup}/ListVMGroupsCmd.java | 6 +- .../user/vmgroup}/UpdateVMGroupCmd.java | 5 +- .../user/volume}/AttachVolumeCmd.java | 4 +- .../user/volume}/CreateVolumeCmd.java | 4 +- .../user/volume}/DeleteVolumeCmd.java | 4 +- .../user/volume}/DetachVolumeCmd.java | 4 +- .../user/volume}/ExtractVolumeCmd.java | 4 +- .../user/volume}/ListVolumesCmd.java | 6 +- .../user/volume}/MigrateVolumeCmd.java | 4 +- .../user/volume}/UploadVolumeCmd.java | 4 +- .../user/vpc}/CreateStaticRouteCmd.java | 4 +- .../user/vpc}/CreateVPCCmd.java | 4 +- .../user/vpc}/DeleteStaticRouteCmd.java | 4 +- .../user/vpc}/DeleteVPCCmd.java | 4 +- .../user/vpc}/ListPrivateGatewaysCmd.java | 6 +- .../user/vpc}/ListStaticRoutesCmd.java | 6 +- .../user/vpc}/ListVPCOfferingsCmd.java | 6 +- .../user/vpc}/ListVPCsCmd.java | 6 +- .../user/vpc}/RestartVPCCmd.java | 6 +- .../user/vpc}/UpdateVPCCmd.java | 4 +- .../user/vpn}/CreateRemoteAccessVpnCmd.java | 4 +- .../user/vpn}/CreateVpnConnectionCmd.java | 4 +- .../vpn}/CreateVpnCustomerGatewayCmd.java | 4 +- .../user/vpn}/CreateVpnGatewayCmd.java | 4 +- .../user/vpn}/DeleteRemoteAccessVpnCmd.java | 4 +- .../user/vpn}/DeleteVpnConnectionCmd.java | 4 +- .../vpn}/DeleteVpnCustomerGatewayCmd.java | 4 +- .../user/vpn}/DeleteVpnGatewayCmd.java | 4 +- .../user/vpn}/ListRemoteAccessVpnsCmd.java | 6 +- .../user/vpn}/ListVpnConnectionsCmd.java | 6 +- .../user/vpn}/ListVpnCustomerGatewaysCmd.java | 6 +- .../user/vpn}/ListVpnGatewaysCmd.java | 6 +- .../user/vpn}/ResetVpnConnectionCmd.java | 4 +- .../vpn}/UpdateVpnCustomerGatewayCmd.java | 4 +- .../user/zone}/ListZonesByCmd.java | 6 +- .../api/response/AccountResponse.java | 3 +- .../api/response/AlertResponse.java | 3 +- .../api/response/AsyncJobResponse.java | 3 +- .../api/response/AutoScalePolicyResponse.java | 3 +- .../response/AutoScaleVmGroupResponse.java | 3 +- .../response/AutoScaleVmProfileResponse.java | 3 +- .../api/response/CapabilitiesResponse.java | 3 +- .../api/response/CapabilityResponse.java | 3 +- .../api/response/CapacityResponse.java | 3 +- .../api/response/CloudIdentifierResponse.java | 3 +- .../api/response/ClusterResponse.java | 3 +- .../api/response/ConditionResponse.java | 3 +- .../api/response/ConfigurationResponse.java | 3 +- .../response/ControlledEntityResponse.java | 2 +- .../ControlledViewEntityResponse.java | 2 +- .../api/response/CounterResponse.java | 3 +- .../api/response/CreateCmdResponse.java | 3 +- .../response/CustomCertificateResponse.java | 15 +- .../api/response/DiskOfferingResponse.java | 3 +- .../api/response/DomainResponse.java | 3 +- .../api/response/DomainRouterResponse.java | 5 +- .../api/response/EventResponse.java | 4 +- .../api/response/EventTypeResponse.java | 3 +- .../api/response/ExceptionResponse.java | 3 +- .../api/response/ExtractResponse.java | 3 +- .../api/response/FirewallResponse.java | 3 +- .../api/response/FirewallRuleResponse.java | 5 +- .../api/response/GetVMPasswordResponse.java | 31 ++-- .../api/response/GuestOSCategoryResponse.java | 3 +- .../api/response/GuestOSResponse.java | 3 +- .../api/response/HostResponse.java | 3 +- .../HypervisorCapabilitiesResponse.java | 3 +- .../api/response/HypervisorResponse.java | 3 +- .../api/response/IPAddressResponse.java | 3 +- .../api/response/InstanceGroupResponse.java | 3 +- .../response/IpForwardingRuleResponse.java | 3 +- .../api/response/IsoVmResponse.java | 3 +- .../response/LBStickinessPolicyResponse.java | 3 +- .../api/response/LBStickinessResponse.java | 3 +- .../api/response/LDAPConfigResponse.java | 3 +- .../api/response/LDAPRemoveResponse.java | 10 +- .../api/response/ListResponse.java | 3 +- .../api/response/LoadBalancerResponse.java | 3 +- .../api/response/NetworkACLResponse.java | 3 +- .../api/response/NetworkDeviceResponse.java | 20 +-- .../api/response/NetworkOfferingResponse.java | 5 +- .../api/response/NetworkResponse.java | 3 +- .../cloudstack}/api/response/NicResponse.java | 3 +- .../api/response/PhysicalNetworkResponse.java | 5 +- .../cloudstack}/api/response/PodResponse.java | 3 +- .../api/response/PrivateGatewayResponse.java | 3 +- .../api/response/ProjectAccountResponse.java | 3 +- .../response/ProjectInvitationResponse.java | 3 +- .../api/response/ProjectResponse.java | 5 +- .../api/response/ProviderResponse.java | 3 +- .../api/response/RegisterResponse.java | 3 +- .../api/response/RemoteAccessVpnResponse.java | 3 +- .../api/response/ResourceCountResponse.java | 3 +- .../api/response/ResourceLimitResponse.java | 3 +- .../api/response/ResourceTagResponse.java | 4 +- .../api/response/SSHKeyPairResponse.java | 3 +- .../api/response/SecurityGroupResponse.java | 6 +- .../response/SecurityGroupRuleResponse.java | 4 +- .../api/response/ServiceOfferingResponse.java | 3 +- .../api/response/ServiceResponse.java | 3 +- .../Site2SiteCustomerGatewayResponse.java | 3 +- .../Site2SiteVpnConnectionResponse.java | 3 +- .../response/Site2SiteVpnGatewayResponse.java | 3 +- .../api/response/SnapshotPolicyResponse.java | 3 +- .../api/response/SnapshotResponse.java | 3 +- .../response/SnapshotScheduleResponse.java | 3 +- .../api/response/StaticRouteResponse.java | 3 +- .../api/response/StatusResponse.java | 3 +- .../StorageNetworkIpRangeResponse.java | 3 +- .../api/response/StoragePoolResponse.java | 3 +- .../api/response/SuccessResponse.java | 27 +-- .../api/response/SwiftResponse.java | 3 +- .../response/SystemVmInstanceResponse.java | 5 +- .../api/response/SystemVmResponse.java | 3 +- .../response/TemplatePermissionsResponse.java | 3 +- .../api/response/TemplateResponse.java | 3 +- .../TrafficTypeImplementorResponse.java | 3 +- .../api/response/TrafficTypeResponse.java | 3 +- .../api/response/UpgradeVmResponse.java | 3 +- .../api/response/UserResponse.java | 3 +- .../api/response/UserVmResponse.java | 4 +- .../VirtualRouterProviderResponse.java | 3 +- .../api/response/VlanIpRangeResponse.java | 3 +- .../api/response/VolumeResponse.java | 3 +- .../api/response/VpcOfferingResponse.java | 5 +- .../cloudstack}/api/response/VpcResponse.java | 3 +- .../api/response/VpnUsersResponse.java | 37 +++-- .../api/response/ZoneResponse.java | 35 ++-- .../api/view/vo/ControlledViewEntity.java | 2 +- .../api/view/vo/DomainRouterJoinVO.java | 2 +- .../cloudstack}/api/view/vo/EventJoinVO.java | 2 +- .../api/view/vo/ResourceTagJoinVO.java | 2 +- .../api/view/vo/SecurityGroupJoinVO.java | 2 +- .../cloudstack}/api/view/vo/UserVmJoinVO.java | 2 +- .../network/ExternalNetworkDeviceManager.java | 12 +- .../api/commands/test/AddHostCmdTest.java | 4 +- .../test/AddSecondaryStorageCmdTest.java | 2 +- .../api/commands/test/AddSwiftCmdTest.java | 2 +- .../api/commands/test/ListRoutersCmdTest.java | 6 +- .../api/commands/test/ListVmsCmdTest.java | 13 +- client/tomcatconf/commands.properties.in | 96 +++++------ .../api/commands/netapp/ListLunsCmd.java | 2 +- .../commands/netapp/ListVolumePoolsCmd.java | 2 +- .../netapp/ListVolumesOnFilerCmd.java | 2 +- .../api/commands/DeleteCiscoNexusVSMCmd.java | 2 +- .../api/commands/ListCiscoNexusVSMsCmd.java | 2 +- .../api/response/CiscoNexusVSMResponse.java | 1 + .../DeleteExternalLoadBalancerCmd.java | 2 +- .../api/commands/DeleteF5LoadBalancerCmd.java | 2 +- .../ListExternalLoadBalancersCmd.java | 4 +- .../ListF5LoadBalancerNetworksCmd.java | 4 +- .../api/commands/ListF5LoadBalancersCmd.java | 2 +- .../api/response/F5LoadBalancerResponse.java | 1 + .../commands/DeleteExternalFirewallCmd.java | 2 +- .../api/commands/DeleteSrxFirewallCmd.java | 2 +- .../commands/ListExternalFirewallsCmd.java | 2 +- .../commands/ListSrxFirewallNetworksCmd.java | 4 +- .../api/commands/ListSrxFirewallsCmd.java | 2 +- .../api/response/SrxFirewallResponse.java | 1 + .../DeleteNetscalerLoadBalancerCmd.java | 2 +- .../ListNetscalerLoadBalancerNetworksCmd.java | 4 +- .../ListNetscalerLoadBalancersCmd.java | 2 +- .../NetscalerLoadBalancerResponse.java | 1 + .../commands/DeleteNiciraNvpDeviceCmd.java | 2 +- .../ListNiciraNvpDeviceNetworksCmd.java | 4 +- .../api/commands/ListNiciraNvpDevicesCmd.java | 2 +- .../api/response/NiciraNvpDeviceResponse.java | 1 + server/src/com/cloud/api/ApiDBUtils.java | 21 ++- .../src/com/cloud/api/ApiResponseHelper.java | 154 +++++++++--------- server/src/com/cloud/api/ApiServer.java | 6 +- .../cloud/api/ResponseObjectTypeAdapter.java | 4 +- .../api/commands/DeleteTrafficMonitorCmd.java | 2 +- .../api/commands/GenerateUsageRecordsCmd.java | 2 +- .../api/commands/GetUsageRecordsCmd.java | 2 +- .../api/commands/ListTrafficMonitorsCmd.java | 2 +- .../cloud/api/commands/ListUsageTypesCmd.java | 2 +- .../com/cloud/api/doc/ApiXmlDocWriter.java | 20 +-- .../api/response/ApiResponseSerializer.java | 4 +- .../com/cloud/async/AsyncJobManagerImpl.java | 2 +- .../baremetal/BareMetalVmManagerImpl.java | 10 +- .../cloud/baremetal/DhcpServerResponse.java | 2 +- .../cloud/baremetal/PxeServerResponse.java | 2 +- .../src/com/cloud/event/dao/EventJoinDao.java | 5 +- .../com/cloud/event/dao/EventJoinDaoImpl.java | 35 +--- .../network/as/AutoScaleManagerImpl.java | 2 +- .../lb/LoadBalancingRulesManagerImpl.java | 2 +- .../security/SecurityGroupManagerImpl.java | 2 +- .../security/dao/SecurityGroupJoinDao.java | 4 +- .../dao/SecurityGroupJoinDaoImpl.java | 32 +--- .../com/cloud/network/vpc/VpcManagerImpl.java | 4 +- .../vpn/RemoteAccessVpnManagerImpl.java | 2 +- .../network/vpn/Site2SiteVpnManagerImpl.java | 22 +-- .../cloud/server/ManagementServerImpl.java | 16 +- .../response/BaremetalTemplateResponse.java | 2 +- .../api/response/TrafficMonitorResponse.java | 2 +- .../api/response/UsageRecordResponse.java | 4 +- .../api/response/UsageTypeResponse.java | 2 +- .../netapp/AssociateLunCmdResponse.java | 2 +- .../response/netapp/CreateLunCmdResponse.java | 2 +- .../CreateVolumeOnFilerCmdResponse.java | 2 +- .../netapp/CreateVolumePoolCmdResponse.java | 2 +- .../response/netapp/DeleteLUNCmdResponse.java | 2 +- .../DeleteVolumeOnFilerCmdResponse.java | 2 +- .../netapp/DeleteVolumePoolCmdResponse.java | 2 +- .../netapp/DissociateLunCmdResponse.java | 2 +- .../response/netapp/ListLunsCmdResponse.java | 2 +- .../netapp/ListVolumePoolsCmdResponse.java | 2 +- .../netapp/ListVolumesOnFilerCmdResponse.java | 2 +- .../netapp/ModifyVolumePoolCmdResponse.java | 2 +- .../com/cloud/storage/StorageManagerImpl.java | 6 +- .../cloud/storage/upload/UploadListener.java | 4 +- .../cloud/tags/TaggedResourceManagerImpl.java | 2 +- .../cloud/tags/dao/ResourceTagJoinDao.java | 5 +- .../tags/dao/ResourceTagJoinDaoImpl.java | 31 +--- server/src/com/cloud/user/AccountManager.java | 5 +- .../com/cloud/user/AccountManagerImpl.java | 2 +- server/src/com/cloud/vm/UserVmManager.java | 2 +- .../src/com/cloud/vm/UserVmManagerImpl.java | 28 ++-- .../com/cloud/vm/dao/DomainRouterJoinDao.java | 4 +- .../cloud/vm/dao/DomainRouterJoinDaoImpl.java | 27 +-- server/src/com/cloud/vm/dao/UserVmData.java | 2 +- .../src/com/cloud/vm/dao/UserVmJoinDao.java | 4 +- .../com/cloud/vm/dao/UserVmJoinDaoImpl.java | 22 +-- .../test/com/cloud/keystore/KeystoreTest.java | 4 +- .../cloud/user/MockAccountManagerImpl.java | 2 +- .../com/cloud/vm/MockUserVmManagerImpl.java | 28 ++-- .../vpc/MockSite2SiteVpnManagerImpl.java | 21 ++- .../com/cloud/vpc/MockVpcManagerImpl.java | 4 +- 501 files changed, 1346 insertions(+), 1397 deletions(-) mode change 100755 => 100644 api/src/org/apache/cloudstack/api/ApiConstants.java mode change 100755 => 100644 api/src/org/apache/cloudstack/api/BaseCmd.java mode change 100755 => 100644 api/src/org/apache/cloudstack/api/BaseListCmd.java rename api/src/{com/cloud/api/response => org/apache/cloudstack/api}/BaseResponse.java (98%) mode change 100755 => 100644 mode change 100755 => 100644 api/src/org/apache/cloudstack/api/ResponseGenerator.java mode change 100755 => 100644 api/src/org/apache/cloudstack/api/command/admin/account/CreateAccountCmd.java mode change 100755 => 100644 api/src/org/apache/cloudstack/api/command/admin/account/DeleteAccountCmd.java mode change 100755 => 100644 api/src/org/apache/cloudstack/api/command/admin/account/UpdateAccountCmd.java mode change 100755 => 100644 api/src/org/apache/cloudstack/api/command/admin/cluster/AddClusterCmd.java mode change 100755 => 100644 api/src/org/apache/cloudstack/api/command/admin/cluster/DeleteClusterCmd.java mode change 100755 => 100644 api/src/org/apache/cloudstack/api/command/admin/cluster/ListClustersCmd.java mode change 100755 => 100644 api/src/org/apache/cloudstack/api/command/admin/cluster/UpdateClusterCmd.java mode change 100755 => 100644 api/src/org/apache/cloudstack/api/command/admin/host/AddHostCmd.java mode change 100755 => 100644 api/src/org/apache/cloudstack/api/command/admin/host/ListHostsCmd.java mode change 100755 => 100644 api/src/org/apache/cloudstack/api/command/admin/host/ReconnectHostCmd.java mode change 100755 => 100644 api/src/org/apache/cloudstack/api/command/admin/host/UpdateHostCmd.java mode change 100755 => 100644 api/src/org/apache/cloudstack/api/command/admin/network/CreateStorageNetworkIpRangeCmd.java mode change 100755 => 100644 api/src/org/apache/cloudstack/api/command/admin/network/DeleteStorageNetworkIpRangeCmd.java mode change 100755 => 100644 api/src/org/apache/cloudstack/api/command/admin/network/ListStorageNetworkIpRangeCmd.java mode change 100755 => 100644 api/src/org/apache/cloudstack/api/command/admin/network/UpdateNetworkOfferingCmd.java mode change 100755 => 100644 api/src/org/apache/cloudstack/api/command/admin/network/UpdateStorageNetworkIpRangeCmd.java mode change 100755 => 100644 api/src/org/apache/cloudstack/api/command/admin/offering/CreateDiskOfferingCmd.java mode change 100755 => 100644 api/src/org/apache/cloudstack/api/command/admin/offering/UpdateDiskOfferingCmd.java mode change 100755 => 100644 api/src/org/apache/cloudstack/api/command/admin/offering/UpdateServiceOfferingCmd.java mode change 100755 => 100644 api/src/org/apache/cloudstack/api/command/admin/pod/CreatePodCmd.java mode change 100755 => 100644 api/src/org/apache/cloudstack/api/command/admin/pod/ListPodsByCmd.java mode change 100755 => 100644 api/src/org/apache/cloudstack/api/command/admin/pod/UpdatePodCmd.java mode change 100755 => 100644 api/src/org/apache/cloudstack/api/command/admin/resource/ListCapacityCmd.java mode change 100755 => 100644 api/src/org/apache/cloudstack/api/command/admin/usage/ListTrafficTypeImplementorsCmd.java mode change 100755 => 100644 api/src/org/apache/cloudstack/api/command/admin/usage/ListTrafficTypesCmd.java mode change 100755 => 100644 api/src/org/apache/cloudstack/api/command/admin/zone/CreateZoneCmd.java mode change 100755 => 100644 api/src/org/apache/cloudstack/api/command/admin/zone/UpdateZoneCmd.java mode change 100755 => 100644 api/src/org/apache/cloudstack/api/command/user/account/ListAccountsCmd.java mode change 100755 => 100644 api/src/org/apache/cloudstack/api/command/user/event/ListEventsCmd.java mode change 100755 => 100644 api/src/org/apache/cloudstack/api/command/user/iso/AttachIsoCmd.java mode change 100755 => 100644 api/src/org/apache/cloudstack/api/command/user/iso/DeleteIsoCmd.java mode change 100755 => 100644 api/src/org/apache/cloudstack/api/command/user/iso/DetachIsoCmd.java mode change 100755 => 100644 api/src/org/apache/cloudstack/api/command/user/iso/ExtractIsoCmd.java mode change 100755 => 100644 api/src/org/apache/cloudstack/api/command/user/iso/ListIsosCmd.java mode change 100755 => 100644 api/src/org/apache/cloudstack/api/command/user/iso/RegisterIsoCmd.java mode change 100755 => 100644 api/src/org/apache/cloudstack/api/command/user/iso/UpdateIsoCmd.java mode change 100755 => 100644 api/src/org/apache/cloudstack/api/command/user/snapshot/CreateSnapshotCmd.java mode change 100755 => 100644 api/src/org/apache/cloudstack/api/command/user/snapshot/DeleteSnapshotPoliciesCmd.java mode change 100755 => 100644 api/src/org/apache/cloudstack/api/command/user/template/CopyTemplateCmd.java mode change 100755 => 100644 api/src/org/apache/cloudstack/api/command/user/template/CreateTemplateCmd.java mode change 100755 => 100644 api/src/org/apache/cloudstack/api/command/user/template/DeleteTemplateCmd.java mode change 100755 => 100644 api/src/org/apache/cloudstack/api/command/user/template/ExtractTemplateCmd.java mode change 100755 => 100644 api/src/org/apache/cloudstack/api/command/user/template/ListTemplatesCmd.java mode change 100755 => 100644 api/src/org/apache/cloudstack/api/command/user/template/RegisterTemplateCmd.java mode change 100755 => 100644 api/src/org/apache/cloudstack/api/command/user/template/UpdateTemplateCmd.java rename api/src/org/apache/cloudstack/api/{user/vm/command => command/user/vm}/DeployVMCmd.java (96%) rename api/src/org/apache/cloudstack/api/{user/vm/command => command/user/vm}/DestroyVMCmd.java (96%) rename api/src/org/apache/cloudstack/api/{user/vm/command => command/user/vm}/GetVMPasswordCmd.java (93%) rename api/src/org/apache/cloudstack/api/{user/vm/command => command/user/vm}/ListVMsCmd.java (91%) rename api/src/org/apache/cloudstack/api/{user/vm/command => command/user/vm}/RebootVMCmd.java (97%) rename api/src/org/apache/cloudstack/api/{user/vm/command => command/user/vm}/ResetVMPasswordCmd.java (97%) rename api/src/org/apache/cloudstack/api/{user/vm/command => command/user/vm}/RestoreVMCmd.java (96%) rename api/src/org/apache/cloudstack/api/{user/vm/command => command/user/vm}/StartVMCmd.java (97%) rename api/src/org/apache/cloudstack/api/{user/vm/command => command/user/vm}/StopVMCmd.java (97%) rename api/src/org/apache/cloudstack/api/{user/vm/command => command/user/vm}/UpdateVMCmd.java (96%) rename api/src/org/apache/cloudstack/api/{user/vm/command => command/user/vm}/UpgradeVMCmd.java (96%) rename api/src/org/apache/cloudstack/api/{user/vmgroup/command => command/user/vmgroup}/CreateVMGroupCmd.java (93%) rename api/src/org/apache/cloudstack/api/{user/vmgroup/command => command/user/vmgroup}/DeleteVMGroupCmd.java (93%) rename api/src/org/apache/cloudstack/api/{user/vmgroup/command => command/user/vmgroup}/ListVMGroupsCmd.java (95%) rename api/src/org/apache/cloudstack/api/{user/vmgroup/command => command/user/vmgroup}/UpdateVMGroupCmd.java (95%) rename api/src/org/apache/cloudstack/api/{user/volume/command => command/user/volume}/AttachVolumeCmd.java (97%) mode change 100755 => 100644 rename api/src/org/apache/cloudstack/api/{user/volume/command => command/user/volume}/CreateVolumeCmd.java (98%) rename api/src/org/apache/cloudstack/api/{user/volume/command => command/user/volume}/DeleteVolumeCmd.java (96%) rename api/src/org/apache/cloudstack/api/{user/volume/command => command/user/volume}/DetachVolumeCmd.java (97%) mode change 100755 => 100644 rename api/src/org/apache/cloudstack/api/{user/volume/command => command/user/volume}/ExtractVolumeCmd.java (97%) mode change 100755 => 100644 rename api/src/org/apache/cloudstack/api/{user/volume/command => command/user/volume}/ListVolumesCmd.java (96%) mode change 100755 => 100644 rename api/src/org/apache/cloudstack/api/{user/volume/command => command/user/volume}/MigrateVolumeCmd.java (97%) rename api/src/org/apache/cloudstack/api/{user/volume/command => command/user/volume}/UploadVolumeCmd.java (97%) mode change 100755 => 100644 rename api/src/org/apache/cloudstack/api/{user/vpc/command => command/user/vpc}/CreateStaticRouteCmd.java (98%) rename api/src/org/apache/cloudstack/api/{user/vpc/command => command/user/vpc}/CreateVPCCmd.java (98%) rename api/src/org/apache/cloudstack/api/{user/vpc/command => command/user/vpc}/DeleteStaticRouteCmd.java (97%) rename api/src/org/apache/cloudstack/api/{user/vpc/command => command/user/vpc}/DeleteVPCCmd.java (97%) rename api/src/org/apache/cloudstack/api/{user/vpc/command => command/user/vpc}/ListPrivateGatewaysCmd.java (95%) rename api/src/org/apache/cloudstack/api/{user/vpc/command => command/user/vpc}/ListStaticRoutesCmd.java (95%) rename api/src/org/apache/cloudstack/api/{user/vpc/command => command/user/vpc}/ListVPCOfferingsCmd.java (96%) rename api/src/org/apache/cloudstack/api/{user/vpc/command => command/user/vpc}/ListVPCsCmd.java (97%) rename api/src/org/apache/cloudstack/api/{user/vpc/command => command/user/vpc}/RestartVPCCmd.java (96%) rename api/src/org/apache/cloudstack/api/{user/vpc/command => command/user/vpc}/UpdateVPCCmd.java (97%) rename api/src/org/apache/cloudstack/api/{user/vpn/command => command/user/vpn}/CreateRemoteAccessVpnCmd.java (98%) rename api/src/org/apache/cloudstack/api/{user/vpn/command => command/user/vpn}/CreateVpnConnectionCmd.java (97%) rename api/src/org/apache/cloudstack/api/{user/vpn/command => command/user/vpn}/CreateVpnCustomerGatewayCmd.java (97%) rename api/src/org/apache/cloudstack/api/{user/vpn/command => command/user/vpn}/CreateVpnGatewayCmd.java (96%) rename api/src/org/apache/cloudstack/api/{user/vpn/command => command/user/vpn}/DeleteRemoteAccessVpnCmd.java (97%) rename api/src/org/apache/cloudstack/api/{user/vpn/command => command/user/vpn}/DeleteVpnConnectionCmd.java (97%) rename api/src/org/apache/cloudstack/api/{user/vpn/command => command/user/vpn}/DeleteVpnCustomerGatewayCmd.java (96%) rename api/src/org/apache/cloudstack/api/{user/vpn/command => command/user/vpn}/DeleteVpnGatewayCmd.java (96%) rename api/src/org/apache/cloudstack/api/{user/vpn/command => command/user/vpn}/ListRemoteAccessVpnsCmd.java (94%) rename api/src/org/apache/cloudstack/api/{user/vpn/command => command/user/vpn}/ListVpnConnectionsCmd.java (95%) rename api/src/org/apache/cloudstack/api/{user/vpn/command => command/user/vpn}/ListVpnCustomerGatewaysCmd.java (94%) rename api/src/org/apache/cloudstack/api/{user/vpn/command => command/user/vpn}/ListVpnGatewaysCmd.java (95%) rename api/src/org/apache/cloudstack/api/{user/vpn/command => command/user/vpn}/ResetVpnConnectionCmd.java (97%) rename api/src/org/apache/cloudstack/api/{user/vpn/command => command/user/vpn}/UpdateVpnCustomerGatewayCmd.java (98%) rename api/src/org/apache/cloudstack/api/{user/zone/command => command/user/zone}/ListZonesByCmd.java (95%) mode change 100755 => 100644 rename api/src/{com/cloud => org/apache/cloudstack}/api/response/AccountResponse.java (99%) mode change 100755 => 100644 rename api/src/{com/cloud => org/apache/cloudstack}/api/response/AlertResponse.java (96%) rename api/src/{com/cloud => org/apache/cloudstack}/api/response/AsyncJobResponse.java (98%) rename api/src/{com/cloud => org/apache/cloudstack}/api/response/AutoScalePolicyResponse.java (97%) rename api/src/{com/cloud => org/apache/cloudstack}/api/response/AutoScaleVmGroupResponse.java (98%) rename api/src/{com/cloud => org/apache/cloudstack}/api/response/AutoScaleVmProfileResponse.java (98%) rename api/src/{com/cloud => org/apache/cloudstack}/api/response/CapabilitiesResponse.java (97%) rename api/src/{com/cloud => org/apache/cloudstack}/api/response/CapabilityResponse.java (95%) rename api/src/{com/cloud => org/apache/cloudstack}/api/response/CapacityResponse.java (97%) mode change 100755 => 100644 rename api/src/{com/cloud => org/apache/cloudstack}/api/response/CloudIdentifierResponse.java (95%) rename api/src/{com/cloud => org/apache/cloudstack}/api/response/ClusterResponse.java (97%) mode change 100755 => 100644 rename api/src/{com/cloud => org/apache/cloudstack}/api/response/ConditionResponse.java (97%) rename api/src/{com/cloud => org/apache/cloudstack}/api/response/ConfigurationResponse.java (95%) rename api/src/{com/cloud => org/apache/cloudstack}/api/response/ControlledEntityResponse.java (96%) rename api/src/{com/cloud => org/apache/cloudstack}/api/response/ControlledViewEntityResponse.java (96%) rename api/src/{com/cloud => org/apache/cloudstack}/api/response/CounterResponse.java (95%) rename api/src/{com/cloud => org/apache/cloudstack}/api/response/CreateCmdResponse.java (93%) rename api/src/{com/cloud => org/apache/cloudstack}/api/response/CustomCertificateResponse.java (81%) rename api/src/{com/cloud => org/apache/cloudstack}/api/response/DiskOfferingResponse.java (97%) rename api/src/{com/cloud => org/apache/cloudstack}/api/response/DomainResponse.java (97%) rename api/src/{com/cloud => org/apache/cloudstack}/api/response/DomainRouterResponse.java (99%) rename api/src/{com/cloud => org/apache/cloudstack}/api/response/EventResponse.java (97%) rename api/src/{com/cloud => org/apache/cloudstack}/api/response/EventTypeResponse.java (93%) rename api/src/{com/cloud => org/apache/cloudstack}/api/response/ExceptionResponse.java (96%) rename api/src/{com/cloud => org/apache/cloudstack}/api/response/ExtractResponse.java (98%) mode change 100755 => 100644 rename api/src/{com/cloud => org/apache/cloudstack}/api/response/FirewallResponse.java (97%) rename api/src/{com/cloud => org/apache/cloudstack}/api/response/FirewallRuleResponse.java (97%) rename api/src/{com/cloud => org/apache/cloudstack}/api/response/GetVMPasswordResponse.java (58%) rename api/src/{com/cloud => org/apache/cloudstack}/api/response/GuestOSCategoryResponse.java (94%) rename api/src/{com/cloud => org/apache/cloudstack}/api/response/GuestOSResponse.java (95%) rename api/src/{com/cloud => org/apache/cloudstack}/api/response/HostResponse.java (99%) mode change 100755 => 100644 rename api/src/{com/cloud => org/apache/cloudstack}/api/response/HypervisorCapabilitiesResponse.java (96%) rename api/src/{com/cloud => org/apache/cloudstack}/api/response/HypervisorResponse.java (93%) rename api/src/{com/cloud => org/apache/cloudstack}/api/response/IPAddressResponse.java (98%) rename api/src/{com/cloud => org/apache/cloudstack}/api/response/InstanceGroupResponse.java (97%) rename api/src/{com/cloud => org/apache/cloudstack}/api/response/IpForwardingRuleResponse.java (97%) rename api/src/{com/cloud => org/apache/cloudstack}/api/response/IsoVmResponse.java (97%) mode change 100755 => 100644 rename api/src/{com/cloud => org/apache/cloudstack}/api/response/LBStickinessPolicyResponse.java (97%) rename api/src/{com/cloud => org/apache/cloudstack}/api/response/LBStickinessResponse.java (97%) rename api/src/{com/cloud => org/apache/cloudstack}/api/response/LDAPConfigResponse.java (97%) rename api/src/{com/cloud => org/apache/cloudstack}/api/response/LDAPRemoveResponse.java (85%) rename api/src/{com/cloud => org/apache/cloudstack}/api/response/ListResponse.java (94%) rename api/src/{com/cloud => org/apache/cloudstack}/api/response/LoadBalancerResponse.java (98%) rename api/src/{com/cloud => org/apache/cloudstack}/api/response/NetworkACLResponse.java (97%) rename api/src/{com/cloud => org/apache/cloudstack}/api/response/NetworkOfferingResponse.java (97%) rename api/src/{com/cloud => org/apache/cloudstack}/api/response/NetworkResponse.java (99%) rename api/src/{com/cloud => org/apache/cloudstack}/api/response/NicResponse.java (97%) mode change 100755 => 100644 rename api/src/{com/cloud => org/apache/cloudstack}/api/response/PhysicalNetworkResponse.java (96%) rename api/src/{com/cloud => org/apache/cloudstack}/api/response/PodResponse.java (97%) mode change 100755 => 100644 rename api/src/{com/cloud => org/apache/cloudstack}/api/response/PrivateGatewayResponse.java (98%) rename api/src/{com/cloud => org/apache/cloudstack}/api/response/ProjectAccountResponse.java (97%) rename api/src/{com/cloud => org/apache/cloudstack}/api/response/ProjectInvitationResponse.java (97%) rename api/src/{com/cloud => org/apache/cloudstack}/api/response/ProjectResponse.java (95%) rename api/src/{com/cloud => org/apache/cloudstack}/api/response/ProviderResponse.java (97%) rename api/src/{com/cloud => org/apache/cloudstack}/api/response/RegisterResponse.java (94%) rename api/src/{com/cloud => org/apache/cloudstack}/api/response/RemoteAccessVpnResponse.java (97%) rename api/src/{com/cloud => org/apache/cloudstack}/api/response/ResourceCountResponse.java (97%) rename api/src/{com/cloud => org/apache/cloudstack}/api/response/ResourceLimitResponse.java (96%) rename api/src/{com/cloud => org/apache/cloudstack}/api/response/ResourceTagResponse.java (97%) rename api/src/{com/cloud => org/apache/cloudstack}/api/response/SSHKeyPairResponse.java (95%) rename api/src/{com/cloud => org/apache/cloudstack}/api/response/SecurityGroupResponse.java (97%) rename api/src/{com/cloud => org/apache/cloudstack}/api/response/SecurityGroupRuleResponse.java (97%) rename api/src/{com/cloud => org/apache/cloudstack}/api/response/ServiceOfferingResponse.java (98%) rename api/src/{com/cloud => org/apache/cloudstack}/api/response/ServiceResponse.java (95%) rename api/src/{com/cloud => org/apache/cloudstack}/api/response/Site2SiteCustomerGatewayResponse.java (98%) rename api/src/{com/cloud => org/apache/cloudstack}/api/response/Site2SiteVpnConnectionResponse.java (98%) rename api/src/{com/cloud => org/apache/cloudstack}/api/response/Site2SiteVpnGatewayResponse.java (97%) rename api/src/{com/cloud => org/apache/cloudstack}/api/response/SnapshotPolicyResponse.java (96%) rename api/src/{com/cloud => org/apache/cloudstack}/api/response/SnapshotResponse.java (98%) rename api/src/{com/cloud => org/apache/cloudstack}/api/response/SnapshotScheduleResponse.java (96%) rename api/src/{com/cloud => org/apache/cloudstack}/api/response/StaticRouteResponse.java (97%) rename api/src/{com/cloud => org/apache/cloudstack}/api/response/StatusResponse.java (92%) rename api/src/{com/cloud => org/apache/cloudstack}/api/response/StorageNetworkIpRangeResponse.java (97%) mode change 100755 => 100644 rename api/src/{com/cloud => org/apache/cloudstack}/api/response/StoragePoolResponse.java (98%) mode change 100755 => 100644 rename api/src/{com/cloud => org/apache/cloudstack}/api/response/SuccessResponse.java (72%) rename api/src/{com/cloud => org/apache/cloudstack}/api/response/SwiftResponse.java (96%) mode change 100755 => 100644 rename api/src/{com/cloud => org/apache/cloudstack}/api/response/SystemVmInstanceResponse.java (95%) rename api/src/{com/cloud => org/apache/cloudstack}/api/response/SystemVmResponse.java (99%) rename api/src/{com/cloud => org/apache/cloudstack}/api/response/TemplatePermissionsResponse.java (96%) rename api/src/{com/cloud => org/apache/cloudstack}/api/response/TemplateResponse.java (99%) mode change 100755 => 100644 rename api/src/{com/cloud => org/apache/cloudstack}/api/response/TrafficTypeImplementorResponse.java (94%) mode change 100755 => 100644 rename api/src/{com/cloud => org/apache/cloudstack}/api/response/TrafficTypeResponse.java (97%) rename api/src/{com/cloud => org/apache/cloudstack}/api/response/UpgradeVmResponse.java (98%) rename api/src/{com/cloud => org/apache/cloudstack}/api/response/UserResponse.java (98%) rename api/src/{com/cloud => org/apache/cloudstack}/api/response/UserVmResponse.java (99%) mode change 100755 => 100644 rename api/src/{com/cloud => org/apache/cloudstack}/api/response/VirtualRouterProviderResponse.java (97%) rename api/src/{com/cloud => org/apache/cloudstack}/api/response/VlanIpRangeResponse.java (98%) rename api/src/{com/cloud => org/apache/cloudstack}/api/response/VolumeResponse.java (99%) mode change 100755 => 100644 rename api/src/{com/cloud => org/apache/cloudstack}/api/response/VpcOfferingResponse.java (94%) rename api/src/{com/cloud => org/apache/cloudstack}/api/response/VpcResponse.java (98%) rename api/src/{com/cloud => org/apache/cloudstack}/api/response/VpnUsersResponse.java (78%) rename api/src/{com/cloud => org/apache/cloudstack}/api/response/ZoneResponse.java (89%) mode change 100755 => 100644 rename api/src/{com/cloud => org/apache/cloudstack}/api/view/vo/ControlledViewEntity.java (96%) rename api/src/{com/cloud => org/apache/cloudstack}/api/view/vo/DomainRouterJoinVO.java (99%) rename api/src/{com/cloud => org/apache/cloudstack}/api/view/vo/EventJoinVO.java (99%) rename api/src/{com/cloud => org/apache/cloudstack}/api/view/vo/ResourceTagJoinVO.java (99%) rename api/src/{com/cloud => org/apache/cloudstack}/api/view/vo/SecurityGroupJoinVO.java (99%) rename api/src/{com/cloud => org/apache/cloudstack}/api/view/vo/UserVmJoinVO.java (99%) diff --git a/api/src/com/cloud/api/commands/CreatePrivateNetworkCmd.java b/api/src/com/cloud/api/commands/CreatePrivateNetworkCmd.java index 46ab2d29189..7f97f51f75e 100644 --- a/api/src/com/cloud/api/commands/CreatePrivateNetworkCmd.java +++ b/api/src/com/cloud/api/commands/CreatePrivateNetworkCmd.java @@ -25,7 +25,7 @@ import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; -import com.cloud.api.response.NetworkResponse; +import org.apache.cloudstack.api.response.NetworkResponse; import com.cloud.event.EventTypes; import com.cloud.exception.ConcurrentOperationException; import com.cloud.exception.InsufficientCapacityException; diff --git a/api/src/com/cloud/api/commands/DestroyConsoleProxyCmd.java b/api/src/com/cloud/api/commands/DestroyConsoleProxyCmd.java index 7e5db636cc2..ef9be6b0598 100644 --- a/api/src/com/cloud/api/commands/DestroyConsoleProxyCmd.java +++ b/api/src/com/cloud/api/commands/DestroyConsoleProxyCmd.java @@ -24,7 +24,7 @@ import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; -import com.cloud.api.response.SuccessResponse; +import org.apache.cloudstack.api.response.SuccessResponse; import com.cloud.event.EventTypes; import com.cloud.user.Account; import com.cloud.user.UserContext; diff --git a/api/src/com/cloud/api/commands/ListRecurringSnapshotScheduleCmd.java b/api/src/com/cloud/api/commands/ListRecurringSnapshotScheduleCmd.java index 85aa7e84d78..065383fff93 100644 --- a/api/src/com/cloud/api/commands/ListRecurringSnapshotScheduleCmd.java +++ b/api/src/com/cloud/api/commands/ListRecurringSnapshotScheduleCmd.java @@ -23,8 +23,8 @@ import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseListCmd; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; -import com.cloud.api.response.ListResponse; -import com.cloud.api.response.SnapshotScheduleResponse; +import org.apache.cloudstack.api.response.ListResponse; +import org.apache.cloudstack.api.response.SnapshotScheduleResponse; import com.cloud.storage.snapshot.SnapshotSchedule; @Implementation(description="Lists recurring snapshot schedule", responseObject=SnapshotScheduleResponse.class) diff --git a/api/src/com/cloud/api/commands/ListTemplateOrIsoPermissionsCmd.java b/api/src/com/cloud/api/commands/ListTemplateOrIsoPermissionsCmd.java index bbae302522b..031f2437bc2 100644 --- a/api/src/com/cloud/api/commands/ListTemplateOrIsoPermissionsCmd.java +++ b/api/src/com/cloud/api/commands/ListTemplateOrIsoPermissionsCmd.java @@ -25,7 +25,7 @@ import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; -import com.cloud.api.response.TemplatePermissionsResponse; +import org.apache.cloudstack.api.response.TemplatePermissionsResponse; import com.cloud.template.VirtualMachineTemplate; import com.cloud.user.Account; import com.cloud.user.UserContext; diff --git a/api/src/com/cloud/api/commands/UpdateTemplateOrIsoPermissionsCmd.java b/api/src/com/cloud/api/commands/UpdateTemplateOrIsoPermissionsCmd.java index 94c8d2b252e..f9123006b97 100755 --- a/api/src/com/cloud/api/commands/UpdateTemplateOrIsoPermissionsCmd.java +++ b/api/src/com/cloud/api/commands/UpdateTemplateOrIsoPermissionsCmd.java @@ -25,7 +25,7 @@ import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; -import com.cloud.api.response.SuccessResponse; +import org.apache.cloudstack.api.response.SuccessResponse; import com.cloud.exception.InvalidParameterValueException; public abstract class UpdateTemplateOrIsoPermissionsCmd extends BaseCmd { diff --git a/api/src/com/cloud/network/security/SecurityGroupService.java b/api/src/com/cloud/network/security/SecurityGroupService.java index be86efda1bb..dac42505c7d 100644 --- a/api/src/com/cloud/network/security/SecurityGroupService.java +++ b/api/src/com/cloud/network/security/SecurityGroupService.java @@ -23,7 +23,7 @@ import org.apache.cloudstack.api.command.user.securitygroup.AuthorizeSecurityGro import com.cloud.exception.InvalidParameterValueException; import com.cloud.exception.PermissionDeniedException; import com.cloud.exception.ResourceInUseException; -import com.cloud.api.view.vo.SecurityGroupJoinVO; +import org.apache.cloudstack.api.view.vo.SecurityGroupJoinVO; import com.cloud.utils.Pair; public interface SecurityGroupService { diff --git a/api/src/com/cloud/network/vpc/VpcService.java b/api/src/com/cloud/network/vpc/VpcService.java index 18e4fa1e371..68e062c7d79 100644 --- a/api/src/com/cloud/network/vpc/VpcService.java +++ b/api/src/com/cloud/network/vpc/VpcService.java @@ -20,8 +20,8 @@ import java.util.List; import java.util.Map; import java.util.Set; -import org.apache.cloudstack.api.user.vpc.command.ListPrivateGatewaysCmd; -import org.apache.cloudstack.api.user.vpc.command.ListStaticRoutesCmd; +import org.apache.cloudstack.api.command.user.vpc.ListPrivateGatewaysCmd; +import org.apache.cloudstack.api.command.user.vpc.ListStaticRoutesCmd; import com.cloud.exception.ConcurrentOperationException; import com.cloud.exception.InsufficientAddressCapacityException; import com.cloud.exception.InsufficientCapacityException; diff --git a/api/src/com/cloud/network/vpn/RemoteAccessVpnService.java b/api/src/com/cloud/network/vpn/RemoteAccessVpnService.java index fdc1ee960c5..b5828acbc7e 100644 --- a/api/src/com/cloud/network/vpn/RemoteAccessVpnService.java +++ b/api/src/com/cloud/network/vpn/RemoteAccessVpnService.java @@ -19,7 +19,7 @@ package com.cloud.network.vpn; import java.util.List; import org.apache.cloudstack.api.command.user.user.ListVpnUsersCmd; -import org.apache.cloudstack.api.user.vpn.command.ListRemoteAccessVpnsCmd; +import org.apache.cloudstack.api.command.user.vpn.ListRemoteAccessVpnsCmd; import com.cloud.exception.NetworkRuleConflictException; import com.cloud.exception.ResourceUnavailableException; import com.cloud.network.RemoteAccessVpn; diff --git a/api/src/com/cloud/network/vpn/Site2SiteVpnService.java b/api/src/com/cloud/network/vpn/Site2SiteVpnService.java index 94863cf45f7..7ac567774d8 100644 --- a/api/src/com/cloud/network/vpn/Site2SiteVpnService.java +++ b/api/src/com/cloud/network/vpn/Site2SiteVpnService.java @@ -18,17 +18,17 @@ package com.cloud.network.vpn; import java.util.List; -import org.apache.cloudstack.api.user.vpn.command.CreateVpnConnectionCmd; -import org.apache.cloudstack.api.user.vpn.command.CreateVpnCustomerGatewayCmd; -import org.apache.cloudstack.api.user.vpn.command.CreateVpnGatewayCmd; -import org.apache.cloudstack.api.user.vpn.command.DeleteVpnConnectionCmd; -import org.apache.cloudstack.api.user.vpn.command.DeleteVpnCustomerGatewayCmd; -import org.apache.cloudstack.api.user.vpn.command.DeleteVpnGatewayCmd; -import org.apache.cloudstack.api.user.vpn.command.ListVpnConnectionsCmd; -import org.apache.cloudstack.api.user.vpn.command.ListVpnCustomerGatewaysCmd; -import org.apache.cloudstack.api.user.vpn.command.ListVpnGatewaysCmd; -import org.apache.cloudstack.api.user.vpn.command.ResetVpnConnectionCmd; -import org.apache.cloudstack.api.user.vpn.command.UpdateVpnCustomerGatewayCmd; +import org.apache.cloudstack.api.command.user.vpn.*; +import org.apache.cloudstack.api.command.user.vpn.CreateVpnConnectionCmd; +import org.apache.cloudstack.api.command.user.vpn.CreateVpnCustomerGatewayCmd; +import org.apache.cloudstack.api.command.user.vpn.CreateVpnGatewayCmd; +import org.apache.cloudstack.api.command.user.vpn.DeleteVpnConnectionCmd; +import org.apache.cloudstack.api.command.user.vpn.DeleteVpnCustomerGatewayCmd; +import org.apache.cloudstack.api.command.user.vpn.DeleteVpnGatewayCmd; +import org.apache.cloudstack.api.command.user.vpn.ListVpnConnectionsCmd; +import org.apache.cloudstack.api.command.user.vpn.ListVpnGatewaysCmd; +import org.apache.cloudstack.api.command.user.vpn.ResetVpnConnectionCmd; +import org.apache.cloudstack.api.command.user.vpn.UpdateVpnCustomerGatewayCmd; import com.cloud.exception.NetworkRuleConflictException; import com.cloud.exception.ResourceUnavailableException; import com.cloud.network.Site2SiteCustomerGateway; diff --git a/api/src/com/cloud/server/ManagementService.java b/api/src/com/cloud/server/ManagementService.java index 06df410be49..75c042d0dd4 100755 --- a/api/src/com/cloud/server/ManagementService.java +++ b/api/src/com/cloud/server/ManagementService.java @@ -44,26 +44,26 @@ import org.apache.cloudstack.api.command.user.offering.ListServiceOfferingsCmd; import org.apache.cloudstack.api.command.user.ssh.DeleteSSHKeyPairCmd; import org.apache.cloudstack.api.command.user.ssh.CreateSSHKeyPairCmd; import org.apache.cloudstack.api.command.user.template.ListTemplatesCmd; -import org.apache.cloudstack.api.user.volume.command.ExtractVolumeCmd; +import org.apache.cloudstack.api.command.user.vm.GetVMPasswordCmd; +import org.apache.cloudstack.api.command.user.volume.ExtractVolumeCmd; import org.apache.cloudstack.api.command.user.template.UpdateTemplateCmd; -import org.apache.cloudstack.api.user.vm.command.GetVMPasswordCmd; import org.apache.cloudstack.api.command.admin.config.ListCfgsByCmd; import org.apache.cloudstack.api.command.user.event.ListEventsCmd; import org.apache.cloudstack.api.command.user.guest.ListGuestOsCategoriesCmd; import org.apache.cloudstack.api.command.user.iso.ListIsosCmd; import org.apache.cloudstack.api.command.user.ssh.ListSSHKeyPairsCmd; import org.apache.cloudstack.api.command.admin.systemvm.ListSystemVMsCmd; -import org.apache.cloudstack.api.user.vmgroup.command.ListVMGroupsCmd; -import org.apache.cloudstack.api.user.zone.command.ListZonesByCmd; +import org.apache.cloudstack.api.command.user.vmgroup.ListVMGroupsCmd; +import org.apache.cloudstack.api.command.user.zone.ListZonesByCmd; import org.apache.cloudstack.api.command.admin.systemvm.RebootSystemVmCmd; import org.apache.cloudstack.api.command.user.ssh.RegisterSSHKeyPairCmd; import org.apache.cloudstack.api.command.admin.systemvm.StopSystemVmCmd; import org.apache.cloudstack.api.command.user.iso.UpdateIsoCmd; -import org.apache.cloudstack.api.user.vmgroup.command.UpdateVMGroupCmd; +import org.apache.cloudstack.api.command.user.vmgroup.UpdateVMGroupCmd; import org.apache.cloudstack.api.command.admin.systemvm.UpgradeSystemVMCmd; import org.apache.cloudstack.api.command.admin.resource.UploadCustomCertificateCmd; -import com.cloud.api.view.vo.DomainRouterJoinVO; -import com.cloud.api.view.vo.EventJoinVO; +import org.apache.cloudstack.api.view.vo.DomainRouterJoinVO; +import org.apache.cloudstack.api.view.vo.EventJoinVO; import com.cloud.async.AsyncJob; import com.cloud.capacity.Capacity; import com.cloud.configuration.Configuration; diff --git a/api/src/com/cloud/server/TaggedResourceService.java b/api/src/com/cloud/server/TaggedResourceService.java index 2549f79587e..f28d9e9828e 100644 --- a/api/src/com/cloud/server/TaggedResourceService.java +++ b/api/src/com/cloud/server/TaggedResourceService.java @@ -21,7 +21,7 @@ import java.util.Map; import org.apache.cloudstack.api.command.user.tag.ListTagsCmd; -import com.cloud.api.view.vo.ResourceTagJoinVO; +import org.apache.cloudstack.api.view.vo.ResourceTagJoinVO; import com.cloud.server.ResourceTag.TaggedResourceType; import com.cloud.utils.Pair; diff --git a/api/src/com/cloud/storage/StorageService.java b/api/src/com/cloud/storage/StorageService.java index a5f9261c2c1..80f64d875d0 100644 --- a/api/src/com/cloud/storage/StorageService.java +++ b/api/src/com/cloud/storage/StorageService.java @@ -23,9 +23,9 @@ import org.apache.cloudstack.api.command.admin.storagepool.CancelPrimaryStorageM import org.apache.cloudstack.api.command.admin.storagepool.CreateStoragePoolCmd; import org.apache.cloudstack.api.command.admin.storagepool.DeletePoolCmd; import org.apache.cloudstack.api.command.admin.storagepool.UpdateStoragePoolCmd; -import org.apache.cloudstack.api.user.volume.command.CreateVolumeCmd; -import org.apache.cloudstack.api.user.volume.command.ListVolumesCmd; -import org.apache.cloudstack.api.user.volume.command.UploadVolumeCmd; +import org.apache.cloudstack.api.command.user.volume.CreateVolumeCmd; +import org.apache.cloudstack.api.command.user.volume.ListVolumesCmd; +import org.apache.cloudstack.api.command.user.volume.UploadVolumeCmd; import com.cloud.exception.ConcurrentOperationException; import com.cloud.exception.InsufficientCapacityException; import com.cloud.exception.PermissionDeniedException; diff --git a/api/src/com/cloud/vm/UserVmService.java b/api/src/com/cloud/vm/UserVmService.java index c926f26775a..bf02c5c3bcc 100755 --- a/api/src/com/cloud/vm/UserVmService.java +++ b/api/src/com/cloud/vm/UserVmService.java @@ -23,21 +23,20 @@ import javax.naming.InsufficientResourcesException; import org.apache.cloudstack.api.command.admin.vm.AssignVMCmd; import org.apache.cloudstack.api.command.user.template.CreateTemplateCmd; -import org.apache.cloudstack.api.user.volume.command.AttachVolumeCmd; -import org.apache.cloudstack.api.user.vmgroup.command.CreateVMGroupCmd; -import org.apache.cloudstack.api.user.vmgroup.command.DeleteVMGroupCmd; -import org.apache.cloudstack.api.user.vm.command.DeployVMCmd; -import org.apache.cloudstack.api.user.vm.command.DestroyVMCmd; -import org.apache.cloudstack.api.user.volume.command.DetachVolumeCmd; -import org.apache.cloudstack.api.user.vm.command.ListVMsCmd; -import org.apache.cloudstack.api.user.vm.command.RebootVMCmd; +import org.apache.cloudstack.api.command.user.vm.*; +import org.apache.cloudstack.api.command.user.volume.AttachVolumeCmd; +import org.apache.cloudstack.api.command.user.vmgroup.CreateVMGroupCmd; +import org.apache.cloudstack.api.command.user.vmgroup.DeleteVMGroupCmd; +import org.apache.cloudstack.api.command.user.vm.DeployVMCmd; +import org.apache.cloudstack.api.command.user.vm.DestroyVMCmd; +import org.apache.cloudstack.api.command.user.volume.DetachVolumeCmd; +import org.apache.cloudstack.api.command.user.vm.ListVMsCmd; +import org.apache.cloudstack.api.command.user.vm.RebootVMCmd; import org.apache.cloudstack.api.command.admin.vm.RecoverVMCmd; -import org.apache.cloudstack.api.user.vm.command.ResetVMPasswordCmd; -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 org.apache.cloudstack.api.command.user.vm.ResetVMPasswordCmd; +import org.apache.cloudstack.api.command.user.vm.RestoreVMCmd; +import org.apache.cloudstack.api.command.user.vm.UpgradeVMCmd; +import org.apache.cloudstack.api.view.vo.UserVmJoinVO; import com.cloud.dc.DataCenter; import com.cloud.exception.ConcurrentOperationException; import com.cloud.exception.InsufficientCapacityException; diff --git a/api/src/org/apache/cloudstack/api/ApiConstants.java b/api/src/org/apache/cloudstack/api/ApiConstants.java old mode 100755 new mode 100644 diff --git a/api/src/org/apache/cloudstack/api/BaseAsyncCmd.java b/api/src/org/apache/cloudstack/api/BaseAsyncCmd.java index 4bcd9ebc40d..2bc8a6e8002 100644 --- a/api/src/org/apache/cloudstack/api/BaseAsyncCmd.java +++ b/api/src/org/apache/cloudstack/api/BaseAsyncCmd.java @@ -16,7 +16,7 @@ // under the License. package org.apache.cloudstack.api; -import com.cloud.api.response.AsyncJobResponse; +import org.apache.cloudstack.api.response.AsyncJobResponse; import com.cloud.async.AsyncJob; import com.cloud.user.User; import com.cloud.user.UserContext; diff --git a/api/src/org/apache/cloudstack/api/BaseAsyncCreateCmd.java b/api/src/org/apache/cloudstack/api/BaseAsyncCreateCmd.java index 44b05ed4785..63cab8be63b 100644 --- a/api/src/org/apache/cloudstack/api/BaseAsyncCreateCmd.java +++ b/api/src/org/apache/cloudstack/api/BaseAsyncCreateCmd.java @@ -16,7 +16,7 @@ // under the License. package org.apache.cloudstack.api; -import com.cloud.api.response.CreateCmdResponse; +import org.apache.cloudstack.api.response.CreateCmdResponse; import com.cloud.exception.ResourceAllocationException; public abstract class BaseAsyncCreateCmd extends BaseAsyncCmd { diff --git a/api/src/org/apache/cloudstack/api/BaseCmd.java b/api/src/org/apache/cloudstack/api/BaseCmd.java old mode 100755 new mode 100644 diff --git a/api/src/org/apache/cloudstack/api/BaseListCmd.java b/api/src/org/apache/cloudstack/api/BaseListCmd.java old mode 100755 new mode 100644 diff --git a/api/src/com/cloud/api/response/BaseResponse.java b/api/src/org/apache/cloudstack/api/BaseResponse.java old mode 100755 new mode 100644 similarity index 98% rename from api/src/com/cloud/api/response/BaseResponse.java rename to api/src/org/apache/cloudstack/api/BaseResponse.java index dbe84202e39..06171d9d944 --- a/api/src/com/cloud/api/response/BaseResponse.java +++ b/api/src/org/apache/cloudstack/api/BaseResponse.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.response; +package org.apache.cloudstack.api; import org.apache.cloudstack.api.ApiConstants; import com.cloud.utils.IdentityProxy; diff --git a/api/src/org/apache/cloudstack/api/Entity.java b/api/src/org/apache/cloudstack/api/Entity.java index 58c27bacc36..f6e6235770d 100644 --- a/api/src/org/apache/cloudstack/api/Entity.java +++ b/api/src/org/apache/cloudstack/api/Entity.java @@ -25,4 +25,4 @@ import java.lang.annotation.RetentionPolicy; @Retention(RetentionPolicy.RUNTIME) public @interface Entity { Class[] value() default {}; -} \ No newline at end of file +} diff --git a/api/src/org/apache/cloudstack/api/Implementation.java b/api/src/org/apache/cloudstack/api/Implementation.java index ec8e867f256..b1c1b774629 100644 --- a/api/src/org/apache/cloudstack/api/Implementation.java +++ b/api/src/org/apache/cloudstack/api/Implementation.java @@ -22,8 +22,6 @@ import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; -import com.cloud.api.response.BaseResponse; - @Retention(RetentionPolicy.RUNTIME) @Target({ TYPE }) public @interface Implementation { diff --git a/api/src/org/apache/cloudstack/api/ResponseGenerator.java b/api/src/org/apache/cloudstack/api/ResponseGenerator.java old mode 100755 new mode 100644 index 3578be353df..b0a2fafa33c --- a/api/src/org/apache/cloudstack/api/ResponseGenerator.java +++ b/api/src/org/apache/cloudstack/api/ResponseGenerator.java @@ -23,72 +23,72 @@ import java.util.List; import org.apache.cloudstack.api.ApiConstants.HostDetails; import org.apache.cloudstack.api.ApiConstants.VMDetails; import org.apache.cloudstack.api.command.user.job.QueryAsyncJobResultCmd; -import com.cloud.api.response.AccountResponse; -import com.cloud.api.response.AsyncJobResponse; -import com.cloud.api.response.AutoScalePolicyResponse; -import com.cloud.api.response.AutoScaleVmGroupResponse; -import com.cloud.api.response.AutoScaleVmProfileResponse; -import com.cloud.api.response.CapacityResponse; -import com.cloud.api.response.ClusterResponse; -import com.cloud.api.response.ConditionResponse; -import com.cloud.api.response.ConfigurationResponse; -import com.cloud.api.response.CounterResponse; -import com.cloud.api.response.CreateCmdResponse; -import com.cloud.api.response.DiskOfferingResponse; -import com.cloud.api.response.DomainResponse; -import com.cloud.api.response.DomainRouterResponse; -import com.cloud.api.response.EventResponse; -import com.cloud.api.response.ExtractResponse; -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.IPAddressResponse; -import com.cloud.api.response.InstanceGroupResponse; -import com.cloud.api.response.IpForwardingRuleResponse; -import com.cloud.api.response.LBStickinessResponse; -import com.cloud.api.response.LDAPConfigResponse; -import com.cloud.api.response.LoadBalancerResponse; -import com.cloud.api.response.NetworkACLResponse; -import com.cloud.api.response.NetworkOfferingResponse; -import com.cloud.api.response.NetworkResponse; -import com.cloud.api.response.PhysicalNetworkResponse; -import com.cloud.api.response.PodResponse; -import com.cloud.api.response.PrivateGatewayResponse; -import com.cloud.api.response.ProjectAccountResponse; -import com.cloud.api.response.ProjectInvitationResponse; -import com.cloud.api.response.ProjectResponse; -import com.cloud.api.response.ProviderResponse; -import com.cloud.api.response.RemoteAccessVpnResponse; -import com.cloud.api.response.ResourceCountResponse; -import com.cloud.api.response.ResourceLimitResponse; -import com.cloud.api.response.ResourceTagResponse; -import com.cloud.api.response.SecurityGroupResponse; -import com.cloud.api.response.ServiceOfferingResponse; -import com.cloud.api.response.ServiceResponse; -import com.cloud.api.response.Site2SiteCustomerGatewayResponse; -import com.cloud.api.response.Site2SiteVpnConnectionResponse; -import com.cloud.api.response.Site2SiteVpnGatewayResponse; -import com.cloud.api.response.SnapshotPolicyResponse; -import com.cloud.api.response.SnapshotResponse; -import com.cloud.api.response.StaticRouteResponse; -import com.cloud.api.response.StorageNetworkIpRangeResponse; -import com.cloud.api.response.StoragePoolResponse; -import com.cloud.api.response.SwiftResponse; -import com.cloud.api.response.SystemVmInstanceResponse; -import com.cloud.api.response.SystemVmResponse; -import com.cloud.api.response.TemplatePermissionsResponse; -import com.cloud.api.response.TemplateResponse; -import com.cloud.api.response.TrafficTypeResponse; -import com.cloud.api.response.UserResponse; -import com.cloud.api.response.UserVmResponse; -import com.cloud.api.response.VirtualRouterProviderResponse; -import com.cloud.api.response.VlanIpRangeResponse; -import com.cloud.api.response.VolumeResponse; -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 org.apache.cloudstack.api.response.AccountResponse; +import org.apache.cloudstack.api.response.AsyncJobResponse; +import org.apache.cloudstack.api.response.AutoScalePolicyResponse; +import org.apache.cloudstack.api.response.AutoScaleVmGroupResponse; +import org.apache.cloudstack.api.response.AutoScaleVmProfileResponse; +import org.apache.cloudstack.api.response.CapacityResponse; +import org.apache.cloudstack.api.response.ClusterResponse; +import org.apache.cloudstack.api.response.ConditionResponse; +import org.apache.cloudstack.api.response.ConfigurationResponse; +import org.apache.cloudstack.api.response.CounterResponse; +import org.apache.cloudstack.api.response.CreateCmdResponse; +import org.apache.cloudstack.api.response.DiskOfferingResponse; +import org.apache.cloudstack.api.response.DomainResponse; +import org.apache.cloudstack.api.response.DomainRouterResponse; +import org.apache.cloudstack.api.response.EventResponse; +import org.apache.cloudstack.api.response.ExtractResponse; +import org.apache.cloudstack.api.response.FirewallResponse; +import org.apache.cloudstack.api.response.FirewallRuleResponse; +import org.apache.cloudstack.api.response.HostResponse; +import org.apache.cloudstack.api.response.HypervisorCapabilitiesResponse; +import org.apache.cloudstack.api.response.IPAddressResponse; +import org.apache.cloudstack.api.response.InstanceGroupResponse; +import org.apache.cloudstack.api.response.IpForwardingRuleResponse; +import org.apache.cloudstack.api.response.LBStickinessResponse; +import org.apache.cloudstack.api.response.LDAPConfigResponse; +import org.apache.cloudstack.api.response.LoadBalancerResponse; +import org.apache.cloudstack.api.response.NetworkACLResponse; +import org.apache.cloudstack.api.response.NetworkOfferingResponse; +import org.apache.cloudstack.api.response.NetworkResponse; +import org.apache.cloudstack.api.response.PhysicalNetworkResponse; +import org.apache.cloudstack.api.response.PodResponse; +import org.apache.cloudstack.api.response.PrivateGatewayResponse; +import org.apache.cloudstack.api.response.ProjectAccountResponse; +import org.apache.cloudstack.api.response.ProjectInvitationResponse; +import org.apache.cloudstack.api.response.ProjectResponse; +import org.apache.cloudstack.api.response.ProviderResponse; +import org.apache.cloudstack.api.response.RemoteAccessVpnResponse; +import org.apache.cloudstack.api.response.ResourceCountResponse; +import org.apache.cloudstack.api.response.ResourceLimitResponse; +import org.apache.cloudstack.api.response.ResourceTagResponse; +import org.apache.cloudstack.api.response.SecurityGroupResponse; +import org.apache.cloudstack.api.response.ServiceOfferingResponse; +import org.apache.cloudstack.api.response.ServiceResponse; +import org.apache.cloudstack.api.response.Site2SiteCustomerGatewayResponse; +import org.apache.cloudstack.api.response.Site2SiteVpnConnectionResponse; +import org.apache.cloudstack.api.response.Site2SiteVpnGatewayResponse; +import org.apache.cloudstack.api.response.SnapshotPolicyResponse; +import org.apache.cloudstack.api.response.SnapshotResponse; +import org.apache.cloudstack.api.response.StaticRouteResponse; +import org.apache.cloudstack.api.response.StorageNetworkIpRangeResponse; +import org.apache.cloudstack.api.response.StoragePoolResponse; +import org.apache.cloudstack.api.response.SwiftResponse; +import org.apache.cloudstack.api.response.SystemVmInstanceResponse; +import org.apache.cloudstack.api.response.SystemVmResponse; +import org.apache.cloudstack.api.response.TemplatePermissionsResponse; +import org.apache.cloudstack.api.response.TemplateResponse; +import org.apache.cloudstack.api.response.TrafficTypeResponse; +import org.apache.cloudstack.api.response.UserResponse; +import org.apache.cloudstack.api.response.UserVmResponse; +import org.apache.cloudstack.api.response.VirtualRouterProviderResponse; +import org.apache.cloudstack.api.response.VlanIpRangeResponse; +import org.apache.cloudstack.api.response.VolumeResponse; +import org.apache.cloudstack.api.response.VpcOfferingResponse; +import org.apache.cloudstack.api.response.VpcResponse; +import org.apache.cloudstack.api.response.VpnUsersResponse; +import org.apache.cloudstack.api.response.ZoneResponse; import com.cloud.async.AsyncJob; import com.cloud.capacity.Capacity; import com.cloud.configuration.Configuration; @@ -150,11 +150,11 @@ 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.EventJoinVO; -import com.cloud.api.view.vo.ResourceTagJoinVO; -import com.cloud.api.view.vo.SecurityGroupJoinVO; -import com.cloud.api.view.vo.UserVmJoinVO; +import org.apache.cloudstack.api.view.vo.DomainRouterJoinVO; +import org.apache.cloudstack.api.view.vo.EventJoinVO; +import org.apache.cloudstack.api.view.vo.ResourceTagJoinVO; +import org.apache.cloudstack.api.view.vo.SecurityGroupJoinVO; +import org.apache.cloudstack.api.view.vo.UserVmJoinVO; import com.cloud.vm.VirtualMachine; public interface ResponseGenerator { diff --git a/api/src/org/apache/cloudstack/api/command/admin/account/CreateAccountCmd.java b/api/src/org/apache/cloudstack/api/command/admin/account/CreateAccountCmd.java old mode 100755 new mode 100644 index 28187258c28..1d40f9dc056 --- a/api/src/org/apache/cloudstack/api/command/admin/account/CreateAccountCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/account/CreateAccountCmd.java @@ -27,8 +27,8 @@ import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; -import com.cloud.api.response.AccountResponse; -import com.cloud.api.response.UserResponse; +import org.apache.cloudstack.api.response.AccountResponse; +import org.apache.cloudstack.api.response.UserResponse; import com.cloud.user.Account; import com.cloud.user.UserAccount; import com.cloud.user.UserContext; diff --git a/api/src/org/apache/cloudstack/api/command/admin/account/DeleteAccountCmd.java b/api/src/org/apache/cloudstack/api/command/admin/account/DeleteAccountCmd.java old mode 100755 new mode 100644 index 81e2efde059..66780c8c778 --- a/api/src/org/apache/cloudstack/api/command/admin/account/DeleteAccountCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/account/DeleteAccountCmd.java @@ -25,7 +25,7 @@ import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; -import com.cloud.api.response.SuccessResponse; +import org.apache.cloudstack.api.response.SuccessResponse; import com.cloud.async.AsyncJob; import com.cloud.event.EventTypes; import com.cloud.user.Account; diff --git a/api/src/org/apache/cloudstack/api/command/admin/account/DisableAccountCmd.java b/api/src/org/apache/cloudstack/api/command/admin/account/DisableAccountCmd.java index cf519df5ef7..8666bfe8e0e 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/account/DisableAccountCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/account/DisableAccountCmd.java @@ -25,7 +25,7 @@ import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; -import com.cloud.api.response.AccountResponse; +import org.apache.cloudstack.api.response.AccountResponse; import com.cloud.async.AsyncJob; import com.cloud.event.EventTypes; import com.cloud.exception.ConcurrentOperationException; diff --git a/api/src/org/apache/cloudstack/api/command/admin/account/EnableAccountCmd.java b/api/src/org/apache/cloudstack/api/command/admin/account/EnableAccountCmd.java index 91e24b05237..a8336b11cb8 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/account/EnableAccountCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/account/EnableAccountCmd.java @@ -24,7 +24,7 @@ import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; -import com.cloud.api.response.AccountResponse; +import org.apache.cloudstack.api.response.AccountResponse; import com.cloud.user.Account; @Implementation(description="Enables an account", responseObject=AccountResponse.class) diff --git a/api/src/org/apache/cloudstack/api/command/admin/account/LockAccountCmd.java b/api/src/org/apache/cloudstack/api/command/admin/account/LockAccountCmd.java index 6f9bea05e53..d088abf8710 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/account/LockAccountCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/account/LockAccountCmd.java @@ -23,7 +23,7 @@ import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; -import com.cloud.api.response.AccountResponse; +import org.apache.cloudstack.api.response.AccountResponse; import com.cloud.user.Account; @Implementation(description="Locks an account", responseObject=AccountResponse.class) diff --git a/api/src/org/apache/cloudstack/api/command/admin/account/UpdateAccountCmd.java b/api/src/org/apache/cloudstack/api/command/admin/account/UpdateAccountCmd.java old mode 100755 new mode 100644 index 6463265effc..1c61be19c69 --- a/api/src/org/apache/cloudstack/api/command/admin/account/UpdateAccountCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/account/UpdateAccountCmd.java @@ -27,7 +27,7 @@ import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; -import com.cloud.api.response.AccountResponse; +import org.apache.cloudstack.api.response.AccountResponse; import com.cloud.user.Account; @Implementation(description="Updates account information for the authenticated user", responseObject=AccountResponse.class) diff --git a/api/src/org/apache/cloudstack/api/command/admin/autoscale/CreateCounterCmd.java b/api/src/org/apache/cloudstack/api/command/admin/autoscale/CreateCounterCmd.java index c97ddca5ba8..c68ed9ff94a 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/autoscale/CreateCounterCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/autoscale/CreateCounterCmd.java @@ -25,7 +25,7 @@ import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; -import com.cloud.api.response.CounterResponse; +import org.apache.cloudstack.api.response.CounterResponse; import com.cloud.async.AsyncJob; import com.cloud.event.EventTypes; import com.cloud.network.as.Counter; diff --git a/api/src/org/apache/cloudstack/api/command/admin/autoscale/DeleteCounterCmd.java b/api/src/org/apache/cloudstack/api/command/admin/autoscale/DeleteCounterCmd.java index 750d2abca1f..1e7f70a4f9e 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/autoscale/DeleteCounterCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/autoscale/DeleteCounterCmd.java @@ -26,7 +26,7 @@ import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; -import com.cloud.api.response.SuccessResponse; +import org.apache.cloudstack.api.response.SuccessResponse; import com.cloud.async.AsyncJob; import com.cloud.event.EventTypes; import com.cloud.exception.ResourceInUseException; diff --git a/api/src/org/apache/cloudstack/api/command/admin/cluster/AddClusterCmd.java b/api/src/org/apache/cloudstack/api/command/admin/cluster/AddClusterCmd.java old mode 100755 new mode 100644 index d5e6aee689a..595963e651a --- a/api/src/org/apache/cloudstack/api/command/admin/cluster/AddClusterCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/cluster/AddClusterCmd.java @@ -28,8 +28,8 @@ import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; -import com.cloud.api.response.ClusterResponse; -import com.cloud.api.response.ListResponse; +import org.apache.cloudstack.api.response.ClusterResponse; +import org.apache.cloudstack.api.response.ListResponse; import com.cloud.exception.DiscoveryException; import com.cloud.exception.ResourceInUseException; import com.cloud.org.Cluster; diff --git a/api/src/org/apache/cloudstack/api/command/admin/cluster/DeleteClusterCmd.java b/api/src/org/apache/cloudstack/api/command/admin/cluster/DeleteClusterCmd.java old mode 100755 new mode 100644 index 70eeb9a35c6..1a16ebceee1 --- a/api/src/org/apache/cloudstack/api/command/admin/cluster/DeleteClusterCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/cluster/DeleteClusterCmd.java @@ -24,7 +24,7 @@ import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; -import com.cloud.api.response.SuccessResponse; +import org.apache.cloudstack.api.response.SuccessResponse; import com.cloud.user.Account; diff --git a/api/src/org/apache/cloudstack/api/command/admin/cluster/ListClustersCmd.java b/api/src/org/apache/cloudstack/api/command/admin/cluster/ListClustersCmd.java old mode 100755 new mode 100644 index 7a01ba60299..06dba9d827d --- a/api/src/org/apache/cloudstack/api/command/admin/cluster/ListClustersCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/cluster/ListClustersCmd.java @@ -27,8 +27,8 @@ import org.apache.cloudstack.api.BaseListCmd; import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; -import com.cloud.api.response.ClusterResponse; -import com.cloud.api.response.ListResponse; +import org.apache.cloudstack.api.response.ClusterResponse; +import org.apache.cloudstack.api.response.ListResponse; import com.cloud.org.Cluster; import com.cloud.utils.Pair; diff --git a/api/src/org/apache/cloudstack/api/command/admin/cluster/UpdateClusterCmd.java b/api/src/org/apache/cloudstack/api/command/admin/cluster/UpdateClusterCmd.java old mode 100755 new mode 100644 index 81c3114a866..6695db283c8 --- a/api/src/org/apache/cloudstack/api/command/admin/cluster/UpdateClusterCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/cluster/UpdateClusterCmd.java @@ -24,7 +24,7 @@ import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; -import com.cloud.api.response.ClusterResponse; +import org.apache.cloudstack.api.response.ClusterResponse; import com.cloud.exception.InvalidParameterValueException; import com.cloud.org.Cluster; import com.cloud.user.Account; diff --git a/api/src/org/apache/cloudstack/api/command/admin/config/ListCfgsByCmd.java b/api/src/org/apache/cloudstack/api/command/admin/config/ListCfgsByCmd.java index ba583e8fd44..c7ef7737b25 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/config/ListCfgsByCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/config/ListCfgsByCmd.java @@ -25,8 +25,8 @@ import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseListCmd; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; -import com.cloud.api.response.ConfigurationResponse; -import com.cloud.api.response.ListResponse; +import org.apache.cloudstack.api.response.ConfigurationResponse; +import org.apache.cloudstack.api.response.ListResponse; import com.cloud.configuration.Configuration; import com.cloud.utils.Pair; diff --git a/api/src/org/apache/cloudstack/api/command/admin/config/ListHypervisorCapabilitiesCmd.java b/api/src/org/apache/cloudstack/api/command/admin/config/ListHypervisorCapabilitiesCmd.java index d8e2ac55ce0..924e4d4cecd 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/config/ListHypervisorCapabilitiesCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/config/ListHypervisorCapabilitiesCmd.java @@ -26,8 +26,8 @@ import org.apache.cloudstack.api.BaseListCmd; import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; -import com.cloud.api.response.HypervisorCapabilitiesResponse; -import com.cloud.api.response.ListResponse; +import org.apache.cloudstack.api.response.HypervisorCapabilitiesResponse; +import org.apache.cloudstack.api.response.ListResponse; import com.cloud.hypervisor.Hypervisor.HypervisorType; import com.cloud.hypervisor.HypervisorCapabilities; import com.cloud.utils.Pair; diff --git a/api/src/org/apache/cloudstack/api/command/admin/config/UpdateCfgCmd.java b/api/src/org/apache/cloudstack/api/command/admin/config/UpdateCfgCmd.java index dc25e4dbaa5..ced4b7911ee 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/config/UpdateCfgCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/config/UpdateCfgCmd.java @@ -23,7 +23,7 @@ import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; -import com.cloud.api.response.ConfigurationResponse; +import org.apache.cloudstack.api.response.ConfigurationResponse; import com.cloud.configuration.Configuration; import com.cloud.user.Account; diff --git a/api/src/org/apache/cloudstack/api/command/admin/config/UpdateHypervisorCapabilitiesCmd.java b/api/src/org/apache/cloudstack/api/command/admin/config/UpdateHypervisorCapabilitiesCmd.java index 3f4f234cd0c..9f4e11088be 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/config/UpdateHypervisorCapabilitiesCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/config/UpdateHypervisorCapabilitiesCmd.java @@ -24,8 +24,8 @@ import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; -import com.cloud.api.response.HypervisorCapabilitiesResponse; -import com.cloud.api.response.ServiceOfferingResponse; +import org.apache.cloudstack.api.response.HypervisorCapabilitiesResponse; +import org.apache.cloudstack.api.response.ServiceOfferingResponse; import com.cloud.hypervisor.HypervisorCapabilities; import com.cloud.user.Account; diff --git a/api/src/org/apache/cloudstack/api/command/admin/domain/CreateDomainCmd.java b/api/src/org/apache/cloudstack/api/command/admin/domain/CreateDomainCmd.java index c8a653d5273..e789c175c76 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/domain/CreateDomainCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/domain/CreateDomainCmd.java @@ -24,7 +24,7 @@ import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; -import com.cloud.api.response.DomainResponse; +import org.apache.cloudstack.api.response.DomainResponse; import com.cloud.domain.Domain; import com.cloud.user.Account; import com.cloud.user.UserContext; diff --git a/api/src/org/apache/cloudstack/api/command/admin/domain/DeleteDomainCmd.java b/api/src/org/apache/cloudstack/api/command/admin/domain/DeleteDomainCmd.java index 6b9831b8743..b18cb7420a8 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/domain/DeleteDomainCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/domain/DeleteDomainCmd.java @@ -25,7 +25,7 @@ import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; -import com.cloud.api.response.SuccessResponse; +import org.apache.cloudstack.api.response.SuccessResponse; import com.cloud.domain.Domain; import com.cloud.event.EventTypes; import com.cloud.user.Account; diff --git a/api/src/org/apache/cloudstack/api/command/admin/domain/ListDomainChildrenCmd.java b/api/src/org/apache/cloudstack/api/command/admin/domain/ListDomainChildrenCmd.java index 553247851a7..d653ccd9b69 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/domain/ListDomainChildrenCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/domain/ListDomainChildrenCmd.java @@ -26,8 +26,8 @@ import org.apache.cloudstack.api.BaseListCmd; import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; -import com.cloud.api.response.DomainResponse; -import com.cloud.api.response.ListResponse; +import org.apache.cloudstack.api.response.DomainResponse; +import org.apache.cloudstack.api.response.ListResponse; import com.cloud.domain.Domain; import com.cloud.utils.Pair; diff --git a/api/src/org/apache/cloudstack/api/command/admin/domain/ListDomainsCmd.java b/api/src/org/apache/cloudstack/api/command/admin/domain/ListDomainsCmd.java index cb7d65a8ec9..45bd236571d 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/domain/ListDomainsCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/domain/ListDomainsCmd.java @@ -26,8 +26,8 @@ import org.apache.cloudstack.api.BaseListCmd; import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; -import com.cloud.api.response.DomainResponse; -import com.cloud.api.response.ListResponse; +import org.apache.cloudstack.api.response.DomainResponse; +import org.apache.cloudstack.api.response.ListResponse; import com.cloud.domain.Domain; import com.cloud.utils.Pair; diff --git a/api/src/org/apache/cloudstack/api/command/admin/domain/UpdateDomainCmd.java b/api/src/org/apache/cloudstack/api/command/admin/domain/UpdateDomainCmd.java index 41070976a30..78535d89876 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/domain/UpdateDomainCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/domain/UpdateDomainCmd.java @@ -24,7 +24,7 @@ import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; -import com.cloud.api.response.DomainResponse; +import org.apache.cloudstack.api.response.DomainResponse; import com.cloud.domain.Domain; import com.cloud.user.Account; import com.cloud.user.UserContext; diff --git a/api/src/org/apache/cloudstack/api/command/admin/host/AddHostCmd.java b/api/src/org/apache/cloudstack/api/command/admin/host/AddHostCmd.java old mode 100755 new mode 100644 index e3ac4aaccbc..9b06bdd5656 --- a/api/src/org/apache/cloudstack/api/command/admin/host/AddHostCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/host/AddHostCmd.java @@ -27,8 +27,8 @@ import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; -import com.cloud.api.response.HostResponse; -import com.cloud.api.response.ListResponse; +import org.apache.cloudstack.api.response.HostResponse; +import org.apache.cloudstack.api.response.ListResponse; import com.cloud.exception.DiscoveryException; import com.cloud.host.Host; import com.cloud.user.Account; diff --git a/api/src/org/apache/cloudstack/api/command/admin/host/AddSecondaryStorageCmd.java b/api/src/org/apache/cloudstack/api/command/admin/host/AddSecondaryStorageCmd.java index 31ab929a72c..39162e965bf 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/host/AddSecondaryStorageCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/host/AddSecondaryStorageCmd.java @@ -26,7 +26,7 @@ import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; -import com.cloud.api.response.HostResponse; +import org.apache.cloudstack.api.response.HostResponse; import com.cloud.exception.DiscoveryException; import com.cloud.host.Host; import com.cloud.user.Account; diff --git a/api/src/org/apache/cloudstack/api/command/admin/host/CancelMaintenanceCmd.java b/api/src/org/apache/cloudstack/api/command/admin/host/CancelMaintenanceCmd.java index 74b16d84617..354e9a9d234 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/host/CancelMaintenanceCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/host/CancelMaintenanceCmd.java @@ -25,7 +25,7 @@ import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; -import com.cloud.api.response.HostResponse; +import org.apache.cloudstack.api.response.HostResponse; import com.cloud.async.AsyncJob; import com.cloud.event.EventTypes; import com.cloud.host.Host; diff --git a/api/src/org/apache/cloudstack/api/command/admin/host/DeleteHostCmd.java b/api/src/org/apache/cloudstack/api/command/admin/host/DeleteHostCmd.java index cff893d193f..168dcb8e2c4 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/host/DeleteHostCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/host/DeleteHostCmd.java @@ -24,7 +24,7 @@ import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; -import com.cloud.api.response.SuccessResponse; +import org.apache.cloudstack.api.response.SuccessResponse; import com.cloud.user.Account; @Implementation(description = "Deletes a host.", responseObject = SuccessResponse.class) diff --git a/api/src/org/apache/cloudstack/api/command/admin/host/ListHostsCmd.java b/api/src/org/apache/cloudstack/api/command/admin/host/ListHostsCmd.java old mode 100755 new mode 100644 index e163ada2736..7c33c52713c --- a/api/src/org/apache/cloudstack/api/command/admin/host/ListHostsCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/host/ListHostsCmd.java @@ -28,8 +28,8 @@ import org.apache.cloudstack.api.BaseListCmd; import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; -import com.cloud.api.response.HostResponse; -import com.cloud.api.response.ListResponse; +import org.apache.cloudstack.api.response.HostResponse; +import org.apache.cloudstack.api.response.ListResponse; import com.cloud.async.AsyncJob; import com.cloud.exception.InvalidParameterValueException; import com.cloud.host.Host; diff --git a/api/src/org/apache/cloudstack/api/command/admin/host/PrepareForMaintenanceCmd.java b/api/src/org/apache/cloudstack/api/command/admin/host/PrepareForMaintenanceCmd.java index cf4326a00b1..cb728270f91 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/host/PrepareForMaintenanceCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/host/PrepareForMaintenanceCmd.java @@ -25,7 +25,7 @@ import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; -import com.cloud.api.response.HostResponse; +import org.apache.cloudstack.api.response.HostResponse; import com.cloud.async.AsyncJob; import com.cloud.event.EventTypes; import com.cloud.host.Host; diff --git a/api/src/org/apache/cloudstack/api/command/admin/host/ReconnectHostCmd.java b/api/src/org/apache/cloudstack/api/command/admin/host/ReconnectHostCmd.java old mode 100755 new mode 100644 index d8f245c676f..b1a95883284 --- a/api/src/org/apache/cloudstack/api/command/admin/host/ReconnectHostCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/host/ReconnectHostCmd.java @@ -25,7 +25,7 @@ import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; -import com.cloud.api.response.HostResponse; +import org.apache.cloudstack.api.response.HostResponse; import com.cloud.async.AsyncJob; import com.cloud.event.EventTypes; import com.cloud.host.Host; diff --git a/api/src/org/apache/cloudstack/api/command/admin/host/UpdateHostCmd.java b/api/src/org/apache/cloudstack/api/command/admin/host/UpdateHostCmd.java old mode 100755 new mode 100644 index 07af547e04f..5e0f125066f --- a/api/src/org/apache/cloudstack/api/command/admin/host/UpdateHostCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/host/UpdateHostCmd.java @@ -26,7 +26,7 @@ import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; -import com.cloud.api.response.HostResponse; +import org.apache.cloudstack.api.response.HostResponse; import com.cloud.host.Host; import com.cloud.user.Account; diff --git a/api/src/org/apache/cloudstack/api/command/admin/host/UpdateHostPasswordCmd.java b/api/src/org/apache/cloudstack/api/command/admin/host/UpdateHostPasswordCmd.java index 96cdaaeb88e..c3059236d81 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/host/UpdateHostPasswordCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/host/UpdateHostPasswordCmd.java @@ -24,7 +24,7 @@ import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; -import com.cloud.api.response.SuccessResponse; +import org.apache.cloudstack.api.response.SuccessResponse; import com.cloud.user.Account; @Implementation(description = "Update password of a host/pool on management server.", responseObject = SuccessResponse.class) diff --git a/api/src/org/apache/cloudstack/api/command/admin/ldap/LDAPConfigCmd.java b/api/src/org/apache/cloudstack/api/command/admin/ldap/LDAPConfigCmd.java index a84c2c4d2aa..d5e0d2f2175 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/ldap/LDAPConfigCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/ldap/LDAPConfigCmd.java @@ -26,7 +26,7 @@ import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; -import com.cloud.api.response.LDAPConfigResponse; +import org.apache.cloudstack.api.response.LDAPConfigResponse; import com.cloud.exception.ConcurrentOperationException; import com.cloud.exception.InsufficientCapacityException; import com.cloud.exception.ResourceAllocationException; diff --git a/api/src/org/apache/cloudstack/api/command/admin/ldap/LDAPRemoveCmd.java b/api/src/org/apache/cloudstack/api/command/admin/ldap/LDAPRemoveCmd.java index e4f713f2960..666e1545f7d 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/ldap/LDAPRemoveCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/ldap/LDAPRemoveCmd.java @@ -21,8 +21,8 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.Implementation; -import com.cloud.api.response.LDAPConfigResponse; -import com.cloud.api.response.LDAPRemoveResponse; +import org.apache.cloudstack.api.response.LDAPConfigResponse; +import org.apache.cloudstack.api.response.LDAPRemoveResponse; import com.cloud.user.Account; @Implementation(description="Remove the LDAP context for this site.", responseObject=LDAPConfigResponse.class, since="3.0.1") diff --git a/api/src/org/apache/cloudstack/api/command/admin/network/AddNetworkDeviceCmd.java b/api/src/org/apache/cloudstack/api/command/admin/network/AddNetworkDeviceCmd.java index 5c0f2ff2bae..111cd8db506 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/network/AddNetworkDeviceCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/network/AddNetworkDeviceCmd.java @@ -39,57 +39,57 @@ import com.cloud.utils.exception.CloudRuntimeException; @Implementation(description="Adds a network device of one of the following types: ExternalDhcp, ExternalFirewall, ExternalLoadBalancer, PxeServer", responseObject = NetworkDeviceResponse.class) public class AddNetworkDeviceCmd extends BaseCmd { - public static final Logger s_logger = Logger.getLogger(AddNetworkDeviceCmd.class); - private static final String s_name = "addnetworkdeviceresponse"; - - // /////////////////////////////////////////////////// + public static final Logger s_logger = Logger.getLogger(AddNetworkDeviceCmd.class); + private static final String s_name = "addnetworkdeviceresponse"; + + // /////////////////////////////////////////////////// // ////////////// API parameters ///////////////////// // /////////////////////////////////////////////////// - - @Parameter(name = ApiConstants.NETWORK_DEVICE_TYPE, type = CommandType.STRING, description = "Network device type, now supports ExternalDhcp, PxeServer, NetscalerMPXLoadBalancer, NetscalerVPXLoadBalancer, NetscalerSDXLoadBalancer, F5BigIpLoadBalancer, JuniperSRXFirewall") + + @Parameter(name = ApiConstants.NETWORK_DEVICE_TYPE, type = CommandType.STRING, description = "Network device type, now supports ExternalDhcp, PxeServer, NetscalerMPXLoadBalancer, NetscalerVPXLoadBalancer, NetscalerSDXLoadBalancer, F5BigIpLoadBalancer, JuniperSRXFirewall") private String type; - - @Parameter(name = ApiConstants.NETWORK_DEVICE_PARAMETER_LIST, type = CommandType.MAP, description = "parameters for network device") + + @Parameter(name = ApiConstants.NETWORK_DEVICE_PARAMETER_LIST, type = CommandType.MAP, description = "parameters for network device") private Map paramList; - - - public String getDeviceType() { - return type; - } - - public Map getParamList() { - return paramList; - } - - @Override - public void execute() throws ResourceUnavailableException, InsufficientCapacityException, ServerApiException, ConcurrentOperationException, - ResourceAllocationException { - try { - ExternalNetworkDeviceManager nwDeviceMgr; - ComponentLocator locator = ComponentLocator.getLocator(ManagementService.Name); - nwDeviceMgr = locator.getManager(ExternalNetworkDeviceManager.class); - Host device = nwDeviceMgr.addNetworkDevice(this); - NetworkDeviceResponse response = nwDeviceMgr.getApiResponse(device); - response.setObjectName("networkdevice"); - response.setResponseName(getCommandName()); - this.setResponseObject(response); - } catch (InvalidParameterValueException ipve) { - throw new ServerApiException(BaseCmd.PARAM_ERROR, ipve.getMessage()); - } catch (CloudRuntimeException cre) { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, cre.getMessage()); - } - } - @Override - public String getCommandName() { - return s_name; - } + public String getDeviceType() { + return type; + } - @Override - public long getEntityOwnerId() { - // TODO Auto-generated method stub - return 0; - } + public Map getParamList() { + return paramList; + } + + @Override + public void execute() throws ResourceUnavailableException, InsufficientCapacityException, ServerApiException, ConcurrentOperationException, + ResourceAllocationException { + try { + ExternalNetworkDeviceManager nwDeviceMgr; + ComponentLocator locator = ComponentLocator.getLocator(ManagementService.Name); + nwDeviceMgr = locator.getManager(ExternalNetworkDeviceManager.class); + Host device = nwDeviceMgr.addNetworkDevice(this); + NetworkDeviceResponse response = nwDeviceMgr.getApiResponse(device); + response.setObjectName("networkdevice"); + response.setResponseName(getCommandName()); + this.setResponseObject(response); + } catch (InvalidParameterValueException ipve) { + throw new ServerApiException(BaseCmd.PARAM_ERROR, ipve.getMessage()); + } catch (CloudRuntimeException cre) { + throw new ServerApiException(BaseCmd.INTERNAL_ERROR, cre.getMessage()); + } + + } + + @Override + public String getCommandName() { + return s_name; + } + + @Override + public long getEntityOwnerId() { + // TODO Auto-generated method stub + return 0; + } } diff --git a/api/src/org/apache/cloudstack/api/command/admin/network/AddNetworkServiceProviderCmd.java b/api/src/org/apache/cloudstack/api/command/admin/network/AddNetworkServiceProviderCmd.java index f24e0d70b99..6146a93020e 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/network/AddNetworkServiceProviderCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/network/AddNetworkServiceProviderCmd.java @@ -27,7 +27,7 @@ import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; -import com.cloud.api.response.ProviderResponse; +import org.apache.cloudstack.api.response.ProviderResponse; import com.cloud.async.AsyncJob; import com.cloud.event.EventTypes; import com.cloud.exception.ResourceAllocationException; diff --git a/api/src/org/apache/cloudstack/api/command/admin/network/CreateNetworkOfferingCmd.java b/api/src/org/apache/cloudstack/api/command/admin/network/CreateNetworkOfferingCmd.java index c7c4e53e2c2..0c1a2bdfbb6 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/network/CreateNetworkOfferingCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/network/CreateNetworkOfferingCmd.java @@ -31,7 +31,7 @@ import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; -import com.cloud.api.response.NetworkOfferingResponse; +import org.apache.cloudstack.api.response.NetworkOfferingResponse; import com.cloud.exception.InvalidParameterValueException; import com.cloud.network.Network.Capability; import com.cloud.network.Network.Service; diff --git a/api/src/org/apache/cloudstack/api/command/admin/network/CreatePhysicalNetworkCmd.java b/api/src/org/apache/cloudstack/api/command/admin/network/CreatePhysicalNetworkCmd.java index 601d0971740..fc9a1662a98 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/network/CreatePhysicalNetworkCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/network/CreatePhysicalNetworkCmd.java @@ -27,7 +27,7 @@ import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; -import com.cloud.api.response.PhysicalNetworkResponse; +import org.apache.cloudstack.api.response.PhysicalNetworkResponse; import com.cloud.async.AsyncJob; import com.cloud.event.EventTypes; import com.cloud.exception.ResourceAllocationException; diff --git a/api/src/org/apache/cloudstack/api/command/admin/network/CreateStorageNetworkIpRangeCmd.java b/api/src/org/apache/cloudstack/api/command/admin/network/CreateStorageNetworkIpRangeCmd.java old mode 100755 new mode 100644 index 05f68d93393..dda92af8ba0 --- a/api/src/org/apache/cloudstack/api/command/admin/network/CreateStorageNetworkIpRangeCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/network/CreateStorageNetworkIpRangeCmd.java @@ -25,7 +25,7 @@ import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; -import com.cloud.api.response.StorageNetworkIpRangeResponse; +import org.apache.cloudstack.api.response.StorageNetworkIpRangeResponse; import com.cloud.dc.StorageNetworkIpRange; import com.cloud.event.EventTypes; import com.cloud.exception.ConcurrentOperationException; diff --git a/api/src/org/apache/cloudstack/api/command/admin/network/DeleteNetworkDeviceCmd.java b/api/src/org/apache/cloudstack/api/command/admin/network/DeleteNetworkDeviceCmd.java index 0afe40284b0..0a83118f1d1 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/network/DeleteNetworkDeviceCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/network/DeleteNetworkDeviceCmd.java @@ -25,7 +25,7 @@ import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; import org.apache.cloudstack.network.ExternalNetworkDeviceManager; -import com.cloud.api.response.SuccessResponse; +import org.apache.cloudstack.api.response.SuccessResponse; import com.cloud.exception.ConcurrentOperationException; import com.cloud.exception.InsufficientCapacityException; import com.cloud.exception.InvalidParameterValueException; @@ -37,54 +37,54 @@ import com.cloud.utils.exception.CloudRuntimeException; @Implementation(description="Deletes network device.", responseObject=SuccessResponse.class) public class DeleteNetworkDeviceCmd extends BaseCmd { - public static final Logger s_logger = Logger.getLogger(DeleteNetworkDeviceCmd.class); - private static final String s_name = "deletenetworkdeviceresponse"; - - ///////////////////////////////////////////////////// + public static final Logger s_logger = Logger.getLogger(DeleteNetworkDeviceCmd.class); + private static final String s_name = "deletenetworkdeviceresponse"; + + ///////////////////////////////////////////////////// //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// @IdentityMapper(entityTableName="host") - @Parameter(name = ApiConstants.ID, type = CommandType.LONG, required=true, description = "Id of network device to delete") + @Parameter(name = ApiConstants.ID, type = CommandType.LONG, required=true, description = "Id of network device to delete") private Long id; - - - public Long getId() { - return id; - } - - @Override - public void execute() throws ResourceUnavailableException, InsufficientCapacityException, ServerApiException, ConcurrentOperationException, - ResourceAllocationException { - try { - ExternalNetworkDeviceManager nwDeviceMgr; - ComponentLocator locator = ComponentLocator.getLocator(ManagementService.Name); - nwDeviceMgr = locator.getManager(ExternalNetworkDeviceManager.class); - boolean result = nwDeviceMgr.deleteNetworkDevice(this); - if (result) { - SuccessResponse response = new SuccessResponse(getCommandName()); - response.setResponseName(getCommandName()); - this.setResponseObject(response); - } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to delete network device:" + getId()); - } - } catch (InvalidParameterValueException ipve) { - throw new ServerApiException(BaseCmd.PARAM_ERROR, ipve.getMessage()); - } catch (CloudRuntimeException cre) { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, cre.getMessage()); - } - } - @Override - public String getCommandName() { - return s_name; - } + public Long getId() { + return id; + } - @Override - public long getEntityOwnerId() { - // TODO Auto-generated method stub - return 0; - } + @Override + public void execute() throws ResourceUnavailableException, InsufficientCapacityException, ServerApiException, ConcurrentOperationException, + ResourceAllocationException { + try { + ExternalNetworkDeviceManager nwDeviceMgr; + ComponentLocator locator = ComponentLocator.getLocator(ManagementService.Name); + nwDeviceMgr = locator.getManager(ExternalNetworkDeviceManager.class); + boolean result = nwDeviceMgr.deleteNetworkDevice(this); + if (result) { + SuccessResponse response = new SuccessResponse(getCommandName()); + response.setResponseName(getCommandName()); + this.setResponseObject(response); + } else { + throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to delete network device:" + getId()); + } + } catch (InvalidParameterValueException ipve) { + throw new ServerApiException(BaseCmd.PARAM_ERROR, ipve.getMessage()); + } catch (CloudRuntimeException cre) { + throw new ServerApiException(BaseCmd.INTERNAL_ERROR, cre.getMessage()); + } + + } + + @Override + public String getCommandName() { + return s_name; + } + + @Override + public long getEntityOwnerId() { + // TODO Auto-generated method stub + return 0; + } } diff --git a/api/src/org/apache/cloudstack/api/command/admin/network/DeleteNetworkOfferingCmd.java b/api/src/org/apache/cloudstack/api/command/admin/network/DeleteNetworkOfferingCmd.java index cf76044ef0d..8914e016a41 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/network/DeleteNetworkOfferingCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/network/DeleteNetworkOfferingCmd.java @@ -24,7 +24,7 @@ import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; -import com.cloud.api.response.SuccessResponse; +import org.apache.cloudstack.api.response.SuccessResponse; import com.cloud.user.Account; @Implementation(description="Deletes a network offering.", responseObject=SuccessResponse.class, since="3.0.0") diff --git a/api/src/org/apache/cloudstack/api/command/admin/network/DeleteNetworkServiceProviderCmd.java b/api/src/org/apache/cloudstack/api/command/admin/network/DeleteNetworkServiceProviderCmd.java index 1c366953d1f..c44e21f5c6e 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/network/DeleteNetworkServiceProviderCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/network/DeleteNetworkServiceProviderCmd.java @@ -25,7 +25,7 @@ import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; -import com.cloud.api.response.SuccessResponse; +import org.apache.cloudstack.api.response.SuccessResponse; import com.cloud.async.AsyncJob; import com.cloud.event.EventTypes; import com.cloud.exception.ConcurrentOperationException; diff --git a/api/src/org/apache/cloudstack/api/command/admin/network/DeletePhysicalNetworkCmd.java b/api/src/org/apache/cloudstack/api/command/admin/network/DeletePhysicalNetworkCmd.java index a2eaad82141..8f2be210acf 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/network/DeletePhysicalNetworkCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/network/DeletePhysicalNetworkCmd.java @@ -25,7 +25,7 @@ import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; -import com.cloud.api.response.SuccessResponse; +import org.apache.cloudstack.api.response.SuccessResponse; import com.cloud.async.AsyncJob; import com.cloud.event.EventTypes; import com.cloud.user.Account; diff --git a/api/src/org/apache/cloudstack/api/command/admin/network/DeleteStorageNetworkIpRangeCmd.java b/api/src/org/apache/cloudstack/api/command/admin/network/DeleteStorageNetworkIpRangeCmd.java old mode 100755 new mode 100644 index cfcd6b43357..def8dacdcde --- a/api/src/org/apache/cloudstack/api/command/admin/network/DeleteStorageNetworkIpRangeCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/network/DeleteStorageNetworkIpRangeCmd.java @@ -25,7 +25,7 @@ import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; -import com.cloud.api.response.SuccessResponse; +import org.apache.cloudstack.api.response.SuccessResponse; import com.cloud.event.EventTypes; import com.cloud.exception.ConcurrentOperationException; import com.cloud.exception.InsufficientCapacityException; diff --git a/api/src/org/apache/cloudstack/api/command/admin/network/ListNetworkDeviceCmd.java b/api/src/org/apache/cloudstack/api/command/admin/network/ListNetworkDeviceCmd.java index 384b59541fb..ebe5ef9b7b5 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/network/ListNetworkDeviceCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/network/ListNetworkDeviceCmd.java @@ -30,7 +30,7 @@ import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; import org.apache.cloudstack.network.ExternalNetworkDeviceManager; import org.apache.cloudstack.api.response.NetworkDeviceResponse; -import com.cloud.api.response.ListResponse; +import org.apache.cloudstack.api.response.ListResponse; import com.cloud.exception.ConcurrentOperationException; import com.cloud.exception.InsufficientCapacityException; import com.cloud.exception.InvalidParameterValueException; @@ -43,57 +43,57 @@ import com.cloud.utils.exception.CloudRuntimeException; @Implementation(description="List network devices", responseObject = NetworkDeviceResponse.class) public class ListNetworkDeviceCmd extends BaseListCmd { - public static final Logger s_logger = Logger.getLogger(ListNetworkDeviceCmd.class); - private static final String s_name = "listnetworkdevice"; - + public static final Logger s_logger = Logger.getLogger(ListNetworkDeviceCmd.class); + private static final String s_name = "listnetworkdevice"; + ///////////////////////////////////////////////////// //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - @Parameter(name = ApiConstants.NETWORK_DEVICE_TYPE, type = CommandType.STRING, description = "Network device type, now supports ExternalDhcp, PxeServer, NetscalerMPXLoadBalancer, NetscalerVPXLoadBalancer, NetscalerSDXLoadBalancer, F5BigIpLoadBalancer, JuniperSRXFirewall") + @Parameter(name = ApiConstants.NETWORK_DEVICE_TYPE, type = CommandType.STRING, description = "Network device type, now supports ExternalDhcp, PxeServer, NetscalerMPXLoadBalancer, NetscalerVPXLoadBalancer, NetscalerSDXLoadBalancer, F5BigIpLoadBalancer, JuniperSRXFirewall") private String type; - - @Parameter(name = ApiConstants.NETWORK_DEVICE_PARAMETER_LIST, type = CommandType.MAP, description = "parameters for network device") - private Map paramList; - - public String getDeviceType() { - return type; - } - - public Map getParamList() { - return paramList; - } - - @Override - public void execute() throws ResourceUnavailableException, InsufficientCapacityException, ServerApiException, ConcurrentOperationException, - ResourceAllocationException { - try { - ExternalNetworkDeviceManager nwDeviceMgr; - ComponentLocator locator = ComponentLocator.getLocator(ManagementService.Name); - nwDeviceMgr = locator.getManager(ExternalNetworkDeviceManager.class); - List devices = nwDeviceMgr.listNetworkDevice(this); - List nwdeviceResponses = new ArrayList(); - ListResponse listResponse = new ListResponse(); - for (Host d : devices) { - NetworkDeviceResponse response = nwDeviceMgr.getApiResponse(d); - response.setObjectName("networkdevice"); - response.setResponseName(getCommandName()); - nwdeviceResponses.add(response); - } - - listResponse.setResponses(nwdeviceResponses); - listResponse.setResponseName(getCommandName()); - this.setResponseObject(listResponse); - } catch (InvalidParameterValueException ipve) { - throw new ServerApiException(BaseCmd.PARAM_ERROR, ipve.getMessage()); - } catch (CloudRuntimeException cre) { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, cre.getMessage()); - } - } - @Override - public String getCommandName() { - return s_name; - } + @Parameter(name = ApiConstants.NETWORK_DEVICE_PARAMETER_LIST, type = CommandType.MAP, description = "parameters for network device") + private Map paramList; + + public String getDeviceType() { + return type; + } + + public Map getParamList() { + return paramList; + } + + @Override + public void execute() throws ResourceUnavailableException, InsufficientCapacityException, ServerApiException, ConcurrentOperationException, + ResourceAllocationException { + try { + ExternalNetworkDeviceManager nwDeviceMgr; + ComponentLocator locator = ComponentLocator.getLocator(ManagementService.Name); + nwDeviceMgr = locator.getManager(ExternalNetworkDeviceManager.class); + List devices = nwDeviceMgr.listNetworkDevice(this); + List nwdeviceResponses = new ArrayList(); + ListResponse listResponse = new ListResponse(); + for (Host d : devices) { + NetworkDeviceResponse response = nwDeviceMgr.getApiResponse(d); + response.setObjectName("networkdevice"); + response.setResponseName(getCommandName()); + nwdeviceResponses.add(response); + } + + listResponse.setResponses(nwdeviceResponses); + listResponse.setResponseName(getCommandName()); + this.setResponseObject(listResponse); + } catch (InvalidParameterValueException ipve) { + throw new ServerApiException(BaseCmd.PARAM_ERROR, ipve.getMessage()); + } catch (CloudRuntimeException cre) { + throw new ServerApiException(BaseCmd.INTERNAL_ERROR, cre.getMessage()); + } + } + + @Override + public String getCommandName() { + return s_name; + } } diff --git a/api/src/org/apache/cloudstack/api/command/admin/network/ListNetworkServiceProvidersCmd.java b/api/src/org/apache/cloudstack/api/command/admin/network/ListNetworkServiceProvidersCmd.java index 24119156900..c4713784593 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/network/ListNetworkServiceProvidersCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/network/ListNetworkServiceProvidersCmd.java @@ -26,8 +26,8 @@ import org.apache.cloudstack.api.BaseListCmd; import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; -import com.cloud.api.response.ListResponse; -import com.cloud.api.response.ProviderResponse; +import org.apache.cloudstack.api.response.ListResponse; +import org.apache.cloudstack.api.response.ProviderResponse; import com.cloud.network.PhysicalNetworkServiceProvider; import com.cloud.user.Account; import com.cloud.utils.Pair; diff --git a/api/src/org/apache/cloudstack/api/command/admin/network/ListPhysicalNetworksCmd.java b/api/src/org/apache/cloudstack/api/command/admin/network/ListPhysicalNetworksCmd.java index eb2515505b3..099adf80ebc 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/network/ListPhysicalNetworksCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/network/ListPhysicalNetworksCmd.java @@ -28,8 +28,8 @@ import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; -import com.cloud.api.response.ListResponse; -import com.cloud.api.response.PhysicalNetworkResponse; +import org.apache.cloudstack.api.response.ListResponse; +import org.apache.cloudstack.api.response.PhysicalNetworkResponse; import com.cloud.network.PhysicalNetwork; import com.cloud.user.Account; import com.cloud.utils.Pair; diff --git a/api/src/org/apache/cloudstack/api/command/admin/network/ListStorageNetworkIpRangeCmd.java b/api/src/org/apache/cloudstack/api/command/admin/network/ListStorageNetworkIpRangeCmd.java old mode 100755 new mode 100644 index 4e0e844a434..96c9737682a --- a/api/src/org/apache/cloudstack/api/command/admin/network/ListStorageNetworkIpRangeCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/network/ListStorageNetworkIpRangeCmd.java @@ -28,8 +28,8 @@ import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; -import com.cloud.api.response.ListResponse; -import com.cloud.api.response.StorageNetworkIpRangeResponse; +import org.apache.cloudstack.api.response.ListResponse; +import org.apache.cloudstack.api.response.StorageNetworkIpRangeResponse; import com.cloud.dc.StorageNetworkIpRange; import com.cloud.exception.ConcurrentOperationException; import com.cloud.exception.InsufficientCapacityException; diff --git a/api/src/org/apache/cloudstack/api/command/admin/network/ListSupportedNetworkServicesCmd.java b/api/src/org/apache/cloudstack/api/command/admin/network/ListSupportedNetworkServicesCmd.java index a422242b6b3..6326bc8d4eb 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/network/ListSupportedNetworkServicesCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/network/ListSupportedNetworkServicesCmd.java @@ -25,8 +25,8 @@ import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseListCmd; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; -import com.cloud.api.response.ListResponse; -import com.cloud.api.response.ServiceResponse; +import org.apache.cloudstack.api.response.ListResponse; +import org.apache.cloudstack.api.response.ServiceResponse; import com.cloud.exception.InvalidParameterValueException; import com.cloud.network.Network; import com.cloud.network.Network.Service; diff --git a/api/src/org/apache/cloudstack/api/command/admin/network/UpdateNetworkOfferingCmd.java b/api/src/org/apache/cloudstack/api/command/admin/network/UpdateNetworkOfferingCmd.java old mode 100755 new mode 100644 index a3400fb918e..adf52b32bc0 --- a/api/src/org/apache/cloudstack/api/command/admin/network/UpdateNetworkOfferingCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/network/UpdateNetworkOfferingCmd.java @@ -24,7 +24,7 @@ import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; -import com.cloud.api.response.NetworkOfferingResponse; +import org.apache.cloudstack.api.response.NetworkOfferingResponse; import com.cloud.offering.NetworkOffering; import com.cloud.user.Account; diff --git a/api/src/org/apache/cloudstack/api/command/admin/network/UpdateNetworkServiceProviderCmd.java b/api/src/org/apache/cloudstack/api/command/admin/network/UpdateNetworkServiceProviderCmd.java index 2b9c83f44f3..6b642410e11 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/network/UpdateNetworkServiceProviderCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/network/UpdateNetworkServiceProviderCmd.java @@ -27,7 +27,7 @@ import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; -import com.cloud.api.response.ProviderResponse; +import org.apache.cloudstack.api.response.ProviderResponse; import com.cloud.async.AsyncJob; import com.cloud.event.EventTypes; import com.cloud.network.PhysicalNetworkServiceProvider; diff --git a/api/src/org/apache/cloudstack/api/command/admin/network/UpdatePhysicalNetworkCmd.java b/api/src/org/apache/cloudstack/api/command/admin/network/UpdatePhysicalNetworkCmd.java index ef224bf93af..fc43d5133c2 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/network/UpdatePhysicalNetworkCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/network/UpdatePhysicalNetworkCmd.java @@ -25,7 +25,7 @@ import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; -import com.cloud.api.response.PhysicalNetworkResponse; +import org.apache.cloudstack.api.response.PhysicalNetworkResponse; import com.cloud.async.AsyncJob; import com.cloud.event.EventTypes; import com.cloud.network.PhysicalNetwork; diff --git a/api/src/org/apache/cloudstack/api/command/admin/network/UpdateStorageNetworkIpRangeCmd.java b/api/src/org/apache/cloudstack/api/command/admin/network/UpdateStorageNetworkIpRangeCmd.java old mode 100755 new mode 100644 index 057b1b87cd3..094a908bdf2 --- a/api/src/org/apache/cloudstack/api/command/admin/network/UpdateStorageNetworkIpRangeCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/network/UpdateStorageNetworkIpRangeCmd.java @@ -25,7 +25,7 @@ import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; -import com.cloud.api.response.StorageNetworkIpRangeResponse; +import org.apache.cloudstack.api.response.StorageNetworkIpRangeResponse; import com.cloud.dc.StorageNetworkIpRange; import com.cloud.event.EventTypes; import com.cloud.exception.ConcurrentOperationException; diff --git a/api/src/org/apache/cloudstack/api/command/admin/offering/CreateDiskOfferingCmd.java b/api/src/org/apache/cloudstack/api/command/admin/offering/CreateDiskOfferingCmd.java old mode 100755 new mode 100644 index 915de5d0671..e8496288aee --- a/api/src/org/apache/cloudstack/api/command/admin/offering/CreateDiskOfferingCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/offering/CreateDiskOfferingCmd.java @@ -24,7 +24,7 @@ import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; -import com.cloud.api.response.DiskOfferingResponse; +import org.apache.cloudstack.api.response.DiskOfferingResponse; import com.cloud.offering.DiskOffering; import com.cloud.offering.ServiceOffering; import com.cloud.user.Account; diff --git a/api/src/org/apache/cloudstack/api/command/admin/offering/CreateServiceOfferingCmd.java b/api/src/org/apache/cloudstack/api/command/admin/offering/CreateServiceOfferingCmd.java index cb439e3c333..020eee4f713 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/offering/CreateServiceOfferingCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/offering/CreateServiceOfferingCmd.java @@ -24,7 +24,7 @@ import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; -import com.cloud.api.response.ServiceOfferingResponse; +import org.apache.cloudstack.api.response.ServiceOfferingResponse; import com.cloud.offering.ServiceOffering; import com.cloud.user.Account; diff --git a/api/src/org/apache/cloudstack/api/command/admin/offering/DeleteDiskOfferingCmd.java b/api/src/org/apache/cloudstack/api/command/admin/offering/DeleteDiskOfferingCmd.java index 2cb5307b8dd..7640928aa2d 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/offering/DeleteDiskOfferingCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/offering/DeleteDiskOfferingCmd.java @@ -24,7 +24,7 @@ import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; -import com.cloud.api.response.SuccessResponse; +import org.apache.cloudstack.api.response.SuccessResponse; import com.cloud.user.Account; @Implementation(description="Updates a disk offering.", responseObject=SuccessResponse.class) diff --git a/api/src/org/apache/cloudstack/api/command/admin/offering/DeleteServiceOfferingCmd.java b/api/src/org/apache/cloudstack/api/command/admin/offering/DeleteServiceOfferingCmd.java index 1ddbf74f933..e58e6316173 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/offering/DeleteServiceOfferingCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/offering/DeleteServiceOfferingCmd.java @@ -24,7 +24,7 @@ import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; -import com.cloud.api.response.SuccessResponse; +import org.apache.cloudstack.api.response.SuccessResponse; import com.cloud.user.Account; @Implementation(description="Deletes a service offering.", responseObject=SuccessResponse.class) diff --git a/api/src/org/apache/cloudstack/api/command/admin/offering/UpdateDiskOfferingCmd.java b/api/src/org/apache/cloudstack/api/command/admin/offering/UpdateDiskOfferingCmd.java old mode 100755 new mode 100644 index dd69d9bda2f..fbcda617e11 --- a/api/src/org/apache/cloudstack/api/command/admin/offering/UpdateDiskOfferingCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/offering/UpdateDiskOfferingCmd.java @@ -23,7 +23,7 @@ import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; -import com.cloud.api.response.DiskOfferingResponse; +import org.apache.cloudstack.api.response.DiskOfferingResponse; import com.cloud.offering.DiskOffering; import com.cloud.user.Account; diff --git a/api/src/org/apache/cloudstack/api/command/admin/offering/UpdateServiceOfferingCmd.java b/api/src/org/apache/cloudstack/api/command/admin/offering/UpdateServiceOfferingCmd.java old mode 100755 new mode 100644 index 1bb8346881d..fb5d47e7600 --- a/api/src/org/apache/cloudstack/api/command/admin/offering/UpdateServiceOfferingCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/offering/UpdateServiceOfferingCmd.java @@ -24,7 +24,7 @@ import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; -import com.cloud.api.response.ServiceOfferingResponse; +import org.apache.cloudstack.api.response.ServiceOfferingResponse; import com.cloud.offering.ServiceOffering; import com.cloud.user.Account; diff --git a/api/src/org/apache/cloudstack/api/command/admin/pod/CreatePodCmd.java b/api/src/org/apache/cloudstack/api/command/admin/pod/CreatePodCmd.java old mode 100755 new mode 100644 index c735698c77a..f1763b411e8 --- a/api/src/org/apache/cloudstack/api/command/admin/pod/CreatePodCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/pod/CreatePodCmd.java @@ -24,7 +24,7 @@ import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; -import com.cloud.api.response.PodResponse; +import org.apache.cloudstack.api.response.PodResponse; import com.cloud.dc.Pod; import com.cloud.user.Account; diff --git a/api/src/org/apache/cloudstack/api/command/admin/pod/DeletePodCmd.java b/api/src/org/apache/cloudstack/api/command/admin/pod/DeletePodCmd.java index 62688f8365c..fcf22df8011 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/pod/DeletePodCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/pod/DeletePodCmd.java @@ -24,7 +24,7 @@ import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; -import com.cloud.api.response.SuccessResponse; +import org.apache.cloudstack.api.response.SuccessResponse; import com.cloud.user.Account; @Implementation(description="Deletes a Pod.", responseObject=SuccessResponse.class) diff --git a/api/src/org/apache/cloudstack/api/command/admin/pod/ListPodsByCmd.java b/api/src/org/apache/cloudstack/api/command/admin/pod/ListPodsByCmd.java old mode 100755 new mode 100644 index 8b2b731935c..1516c0e5434 --- a/api/src/org/apache/cloudstack/api/command/admin/pod/ListPodsByCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/pod/ListPodsByCmd.java @@ -26,8 +26,8 @@ import org.apache.cloudstack.api.BaseListCmd; import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; -import com.cloud.api.response.ListResponse; -import com.cloud.api.response.PodResponse; +import org.apache.cloudstack.api.response.ListResponse; +import org.apache.cloudstack.api.response.PodResponse; import com.cloud.dc.Pod; import com.cloud.utils.Pair; diff --git a/api/src/org/apache/cloudstack/api/command/admin/pod/UpdatePodCmd.java b/api/src/org/apache/cloudstack/api/command/admin/pod/UpdatePodCmd.java old mode 100755 new mode 100644 index 48afb09232f..30b8a2ffe5f --- a/api/src/org/apache/cloudstack/api/command/admin/pod/UpdatePodCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/pod/UpdatePodCmd.java @@ -24,7 +24,7 @@ import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; -import com.cloud.api.response.PodResponse; +import org.apache.cloudstack.api.response.PodResponse; import com.cloud.dc.Pod; import com.cloud.user.Account; diff --git a/api/src/org/apache/cloudstack/api/command/admin/resource/ListAlertsCmd.java b/api/src/org/apache/cloudstack/api/command/admin/resource/ListAlertsCmd.java index db3b55c5ce3..f58744a7c99 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/resource/ListAlertsCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/resource/ListAlertsCmd.java @@ -27,8 +27,8 @@ import org.apache.cloudstack.api.BaseListCmd; import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; -import com.cloud.api.response.AlertResponse; -import com.cloud.api.response.ListResponse; +import org.apache.cloudstack.api.response.AlertResponse; +import org.apache.cloudstack.api.response.ListResponse; import com.cloud.utils.Pair; @Implementation(description = "Lists all alerts.", responseObject = AlertResponse.class) diff --git a/api/src/org/apache/cloudstack/api/command/admin/resource/ListCapacityCmd.java b/api/src/org/apache/cloudstack/api/command/admin/resource/ListCapacityCmd.java old mode 100755 new mode 100644 index 9f1b69642f0..bd3634a8a9b --- a/api/src/org/apache/cloudstack/api/command/admin/resource/ListCapacityCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/resource/ListCapacityCmd.java @@ -26,8 +26,8 @@ import org.apache.cloudstack.api.BaseListCmd; import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; -import com.cloud.api.response.CapacityResponse; -import com.cloud.api.response.ListResponse; +import org.apache.cloudstack.api.response.CapacityResponse; +import org.apache.cloudstack.api.response.ListResponse; import com.cloud.capacity.Capacity; import com.cloud.exception.InvalidParameterValueException; diff --git a/api/src/org/apache/cloudstack/api/command/admin/resource/UploadCustomCertificateCmd.java b/api/src/org/apache/cloudstack/api/command/admin/resource/UploadCustomCertificateCmd.java index 09bfd12ba45..6588c0a047c 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/resource/UploadCustomCertificateCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/resource/UploadCustomCertificateCmd.java @@ -24,7 +24,7 @@ import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; -import com.cloud.api.response.CustomCertificateResponse; +import org.apache.cloudstack.api.response.CustomCertificateResponse; import com.cloud.event.EventTypes; import com.cloud.user.Account; diff --git a/api/src/org/apache/cloudstack/api/command/admin/router/ConfigureVirtualRouterElementCmd.java b/api/src/org/apache/cloudstack/api/command/admin/router/ConfigureVirtualRouterElementCmd.java index dcf4f6389f3..ca6108c0085 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/router/ConfigureVirtualRouterElementCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/router/ConfigureVirtualRouterElementCmd.java @@ -26,7 +26,7 @@ import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.PlugService; import org.apache.cloudstack.api.ServerApiException; -import com.cloud.api.response.VirtualRouterProviderResponse; +import org.apache.cloudstack.api.response.VirtualRouterProviderResponse; import com.cloud.network.VirtualRouterProvider; import com.cloud.network.element.VirtualRouterElementService; import com.cloud.async.AsyncJob; diff --git a/api/src/org/apache/cloudstack/api/command/admin/router/CreateVirtualRouterElementCmd.java b/api/src/org/apache/cloudstack/api/command/admin/router/CreateVirtualRouterElementCmd.java index 4d8c492bbf7..41990250a15 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/router/CreateVirtualRouterElementCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/router/CreateVirtualRouterElementCmd.java @@ -26,7 +26,7 @@ import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.PlugService; import org.apache.cloudstack.api.ServerApiException; -import com.cloud.api.response.VirtualRouterProviderResponse; +import org.apache.cloudstack.api.response.VirtualRouterProviderResponse; import com.cloud.event.EventTypes; import com.cloud.exception.ResourceAllocationException; import com.cloud.network.VirtualRouterProvider; diff --git a/api/src/org/apache/cloudstack/api/command/admin/router/DestroyRouterCmd.java b/api/src/org/apache/cloudstack/api/command/admin/router/DestroyRouterCmd.java index 13e16b540bc..f9a19e1f79a 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/router/DestroyRouterCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/router/DestroyRouterCmd.java @@ -25,7 +25,7 @@ import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; -import com.cloud.api.response.DomainRouterResponse; +import org.apache.cloudstack.api.response.DomainRouterResponse; import com.cloud.async.AsyncJob; import com.cloud.event.EventTypes; import com.cloud.exception.ConcurrentOperationException; diff --git a/api/src/org/apache/cloudstack/api/command/admin/router/ListRoutersCmd.java b/api/src/org/apache/cloudstack/api/command/admin/router/ListRoutersCmd.java index 1119463c4c3..ca4ad727da0 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/router/ListRoutersCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/router/ListRoutersCmd.java @@ -26,10 +26,10 @@ import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; -import com.cloud.api.view.vo.DomainRouterJoinVO; +import org.apache.cloudstack.api.view.vo.DomainRouterJoinVO; -import com.cloud.api.response.DomainRouterResponse; -import com.cloud.api.response.ListResponse; +import org.apache.cloudstack.api.response.DomainRouterResponse; +import org.apache.cloudstack.api.response.ListResponse; import com.cloud.async.AsyncJob; import com.cloud.utils.Pair; diff --git a/api/src/org/apache/cloudstack/api/command/admin/router/ListVirtualRouterElementsCmd.java b/api/src/org/apache/cloudstack/api/command/admin/router/ListVirtualRouterElementsCmd.java index cfd7db573f1..6528733a98f 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/router/ListVirtualRouterElementsCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/router/ListVirtualRouterElementsCmd.java @@ -29,8 +29,8 @@ import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.PlugService; import org.apache.cloudstack.api.ServerApiException; -import com.cloud.api.response.ListResponse; -import com.cloud.api.response.VirtualRouterProviderResponse; +import org.apache.cloudstack.api.response.ListResponse; +import org.apache.cloudstack.api.response.VirtualRouterProviderResponse; import com.cloud.exception.ConcurrentOperationException; import com.cloud.exception.InsufficientCapacityException; import com.cloud.exception.ResourceAllocationException; diff --git a/api/src/org/apache/cloudstack/api/command/admin/router/RebootRouterCmd.java b/api/src/org/apache/cloudstack/api/command/admin/router/RebootRouterCmd.java index 74bad42b5ce..d3474e54e73 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/router/RebootRouterCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/router/RebootRouterCmd.java @@ -25,7 +25,7 @@ import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; -import com.cloud.api.response.DomainRouterResponse; +import org.apache.cloudstack.api.response.DomainRouterResponse; import com.cloud.async.AsyncJob; import com.cloud.event.EventTypes; import com.cloud.exception.ConcurrentOperationException; diff --git a/api/src/org/apache/cloudstack/api/command/admin/router/StartRouterCmd.java b/api/src/org/apache/cloudstack/api/command/admin/router/StartRouterCmd.java index 0b56068f0d5..37ee33141da 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/router/StartRouterCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/router/StartRouterCmd.java @@ -25,7 +25,7 @@ import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; -import com.cloud.api.response.DomainRouterResponse; +import org.apache.cloudstack.api.response.DomainRouterResponse; import com.cloud.async.AsyncJob; import com.cloud.event.EventTypes; import com.cloud.exception.ConcurrentOperationException; diff --git a/api/src/org/apache/cloudstack/api/command/admin/router/StopRouterCmd.java b/api/src/org/apache/cloudstack/api/command/admin/router/StopRouterCmd.java index bb300b29808..823453a302c 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/router/StopRouterCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/router/StopRouterCmd.java @@ -25,7 +25,7 @@ import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; -import com.cloud.api.response.DomainRouterResponse; +import org.apache.cloudstack.api.response.DomainRouterResponse; import com.cloud.async.AsyncJob; import com.cloud.event.EventTypes; import com.cloud.exception.ConcurrentOperationException; diff --git a/api/src/org/apache/cloudstack/api/command/admin/router/UpgradeRouterCmd.java b/api/src/org/apache/cloudstack/api/command/admin/router/UpgradeRouterCmd.java index e941a897852..f5b5fcef4b9 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/router/UpgradeRouterCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/router/UpgradeRouterCmd.java @@ -24,7 +24,7 @@ import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; -import com.cloud.api.response.DomainRouterResponse; +import org.apache.cloudstack.api.response.DomainRouterResponse; import com.cloud.network.router.VirtualRouter; import com.cloud.user.Account; diff --git a/api/src/org/apache/cloudstack/api/command/admin/storagepool/CancelPrimaryStorageMaintenanceCmd.java b/api/src/org/apache/cloudstack/api/command/admin/storagepool/CancelPrimaryStorageMaintenanceCmd.java index a50db6abeb8..66fe965f0e9 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/storagepool/CancelPrimaryStorageMaintenanceCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/storagepool/CancelPrimaryStorageMaintenanceCmd.java @@ -25,7 +25,7 @@ import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; -import com.cloud.api.response.StoragePoolResponse; +import org.apache.cloudstack.api.response.StoragePoolResponse; import com.cloud.async.AsyncJob; import com.cloud.event.EventTypes; import com.cloud.exception.ResourceUnavailableException; diff --git a/api/src/org/apache/cloudstack/api/command/admin/storagepool/CreateStoragePoolCmd.java b/api/src/org/apache/cloudstack/api/command/admin/storagepool/CreateStoragePoolCmd.java index 563e2ae856b..506f766840a 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/storagepool/CreateStoragePoolCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/storagepool/CreateStoragePoolCmd.java @@ -27,7 +27,7 @@ import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; -import com.cloud.api.response.StoragePoolResponse; +import org.apache.cloudstack.api.response.StoragePoolResponse; import com.cloud.exception.ResourceInUseException; import com.cloud.exception.ResourceUnavailableException; import com.cloud.storage.StoragePool; diff --git a/api/src/org/apache/cloudstack/api/command/admin/storagepool/DeletePoolCmd.java b/api/src/org/apache/cloudstack/api/command/admin/storagepool/DeletePoolCmd.java index fcabb4ced48..f2ab4d2f66c 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/storagepool/DeletePoolCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/storagepool/DeletePoolCmd.java @@ -24,7 +24,7 @@ import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; -import com.cloud.api.response.SuccessResponse; +import org.apache.cloudstack.api.response.SuccessResponse; import com.cloud.storage.StoragePool; import com.cloud.storage.StoragePoolStatus; import com.cloud.user.Account; diff --git a/api/src/org/apache/cloudstack/api/command/admin/storagepool/ListStoragePoolsCmd.java b/api/src/org/apache/cloudstack/api/command/admin/storagepool/ListStoragePoolsCmd.java index e96ffd382a3..74ea191795b 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/storagepool/ListStoragePoolsCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/storagepool/ListStoragePoolsCmd.java @@ -26,8 +26,8 @@ import org.apache.cloudstack.api.BaseListCmd; import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; -import com.cloud.api.response.ListResponse; -import com.cloud.api.response.StoragePoolResponse; +import org.apache.cloudstack.api.response.ListResponse; +import org.apache.cloudstack.api.response.StoragePoolResponse; import com.cloud.async.AsyncJob; import com.cloud.storage.StoragePool; import com.cloud.utils.Pair; diff --git a/api/src/org/apache/cloudstack/api/command/admin/storagepool/PreparePrimaryStorageForMaintenanceCmd.java b/api/src/org/apache/cloudstack/api/command/admin/storagepool/PreparePrimaryStorageForMaintenanceCmd.java index eb7aaaeeecb..2b269346b0d 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/storagepool/PreparePrimaryStorageForMaintenanceCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/storagepool/PreparePrimaryStorageForMaintenanceCmd.java @@ -25,7 +25,7 @@ import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; -import com.cloud.api.response.StoragePoolResponse; +import org.apache.cloudstack.api.response.StoragePoolResponse; import com.cloud.async.AsyncJob; import com.cloud.event.EventTypes; import com.cloud.exception.InsufficientCapacityException; diff --git a/api/src/org/apache/cloudstack/api/command/admin/storagepool/UpdateStoragePoolCmd.java b/api/src/org/apache/cloudstack/api/command/admin/storagepool/UpdateStoragePoolCmd.java index 3ba7676870c..62aa5da5d5a 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/storagepool/UpdateStoragePoolCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/storagepool/UpdateStoragePoolCmd.java @@ -26,7 +26,7 @@ import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; -import com.cloud.api.response.StoragePoolResponse; +import org.apache.cloudstack.api.response.StoragePoolResponse; import com.cloud.storage.StoragePool; import com.cloud.user.Account; diff --git a/api/src/org/apache/cloudstack/api/command/admin/swift/AddSwiftCmd.java b/api/src/org/apache/cloudstack/api/command/admin/swift/AddSwiftCmd.java index fd3c15424e6..11c8e04868a 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/swift/AddSwiftCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/swift/AddSwiftCmd.java @@ -23,8 +23,8 @@ import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; -import com.cloud.api.response.HostResponse; -import com.cloud.api.response.SwiftResponse; +import org.apache.cloudstack.api.response.HostResponse; +import org.apache.cloudstack.api.response.SwiftResponse; import com.cloud.exception.DiscoveryException; import com.cloud.storage.Swift; import com.cloud.user.Account; diff --git a/api/src/org/apache/cloudstack/api/command/admin/swift/ListSwiftsCmd.java b/api/src/org/apache/cloudstack/api/command/admin/swift/ListSwiftsCmd.java index 625054d2247..9121a9f142f 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/swift/ListSwiftsCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/swift/ListSwiftsCmd.java @@ -25,9 +25,9 @@ import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseListCmd; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; -import com.cloud.api.response.HostResponse; -import com.cloud.api.response.ListResponse; -import com.cloud.api.response.SwiftResponse; +import org.apache.cloudstack.api.response.HostResponse; +import org.apache.cloudstack.api.response.ListResponse; +import org.apache.cloudstack.api.response.SwiftResponse; import com.cloud.storage.Swift; import com.cloud.user.Account; diff --git a/api/src/org/apache/cloudstack/api/command/admin/systemvm/DestroySystemVmCmd.java b/api/src/org/apache/cloudstack/api/command/admin/systemvm/DestroySystemVmCmd.java index c45922fa3ca..816cbe418d0 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/systemvm/DestroySystemVmCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/systemvm/DestroySystemVmCmd.java @@ -25,7 +25,7 @@ import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; -import com.cloud.api.response.SystemVmResponse; +import org.apache.cloudstack.api.response.SystemVmResponse; import com.cloud.async.AsyncJob; import com.cloud.event.EventTypes; import com.cloud.user.Account; diff --git a/api/src/org/apache/cloudstack/api/command/admin/systemvm/ListSystemVMsCmd.java b/api/src/org/apache/cloudstack/api/command/admin/systemvm/ListSystemVMsCmd.java index 187ca6efc47..279e1a4697c 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/systemvm/ListSystemVMsCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/systemvm/ListSystemVMsCmd.java @@ -26,8 +26,8 @@ import org.apache.cloudstack.api.BaseListCmd; import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; -import com.cloud.api.response.ListResponse; -import com.cloud.api.response.SystemVmResponse; +import org.apache.cloudstack.api.response.ListResponse; +import org.apache.cloudstack.api.response.SystemVmResponse; import com.cloud.async.AsyncJob; import com.cloud.utils.Pair; import com.cloud.vm.VirtualMachine; diff --git a/api/src/org/apache/cloudstack/api/command/admin/systemvm/MigrateSystemVMCmd.java b/api/src/org/apache/cloudstack/api/command/admin/systemvm/MigrateSystemVMCmd.java index b1c9587df13..1d20496a376 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/systemvm/MigrateSystemVMCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/systemvm/MigrateSystemVMCmd.java @@ -25,7 +25,7 @@ import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; -import com.cloud.api.response.SystemVmInstanceResponse; +import org.apache.cloudstack.api.response.SystemVmInstanceResponse; import com.cloud.event.EventTypes; import com.cloud.exception.ConcurrentOperationException; import com.cloud.exception.InvalidParameterValueException; diff --git a/api/src/org/apache/cloudstack/api/command/admin/systemvm/RebootSystemVmCmd.java b/api/src/org/apache/cloudstack/api/command/admin/systemvm/RebootSystemVmCmd.java index ac295cffcf9..97015985fd2 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/systemvm/RebootSystemVmCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/systemvm/RebootSystemVmCmd.java @@ -25,7 +25,7 @@ import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; -import com.cloud.api.response.SystemVmResponse; +import org.apache.cloudstack.api.response.SystemVmResponse; import com.cloud.async.AsyncJob; import com.cloud.event.EventTypes; import com.cloud.user.Account; diff --git a/api/src/org/apache/cloudstack/api/command/admin/systemvm/StartSystemVMCmd.java b/api/src/org/apache/cloudstack/api/command/admin/systemvm/StartSystemVMCmd.java index ea3917f8345..9414c641981 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/systemvm/StartSystemVMCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/systemvm/StartSystemVMCmd.java @@ -25,7 +25,7 @@ import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; -import com.cloud.api.response.SystemVmResponse; +import org.apache.cloudstack.api.response.SystemVmResponse; import com.cloud.async.AsyncJob; import com.cloud.event.EventTypes; import com.cloud.user.Account; diff --git a/api/src/org/apache/cloudstack/api/command/admin/systemvm/StopSystemVmCmd.java b/api/src/org/apache/cloudstack/api/command/admin/systemvm/StopSystemVmCmd.java index 36f22c3d0b2..654ba4fc256 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/systemvm/StopSystemVmCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/systemvm/StopSystemVmCmd.java @@ -25,7 +25,7 @@ import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; -import com.cloud.api.response.SystemVmResponse; +import org.apache.cloudstack.api.response.SystemVmResponse; import com.cloud.async.AsyncJob; import com.cloud.event.EventTypes; import com.cloud.exception.ConcurrentOperationException; diff --git a/api/src/org/apache/cloudstack/api/command/admin/systemvm/UpgradeSystemVMCmd.java b/api/src/org/apache/cloudstack/api/command/admin/systemvm/UpgradeSystemVMCmd.java index 3a4f97ba0f9..3383c562a3e 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/systemvm/UpgradeSystemVMCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/systemvm/UpgradeSystemVMCmd.java @@ -16,7 +16,7 @@ // under the License. package org.apache.cloudstack.api.command.admin.systemvm; -import org.apache.cloudstack.api.user.vm.command.UpgradeVMCmd; +import org.apache.cloudstack.api.command.user.vm.UpgradeVMCmd; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; @@ -25,7 +25,7 @@ import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; -import com.cloud.api.response.SystemVmResponse; +import org.apache.cloudstack.api.response.SystemVmResponse; import com.cloud.exception.InvalidParameterValueException; import com.cloud.offering.ServiceOffering; import com.cloud.user.Account; diff --git a/api/src/org/apache/cloudstack/api/command/admin/template/PrepareTemplateCmd.java b/api/src/org/apache/cloudstack/api/command/admin/template/PrepareTemplateCmd.java index 7951a7647a3..cc543c86f7d 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/template/PrepareTemplateCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/template/PrepareTemplateCmd.java @@ -25,8 +25,8 @@ import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; -import com.cloud.api.response.ListResponse; -import com.cloud.api.response.TemplateResponse; +import org.apache.cloudstack.api.response.ListResponse; +import org.apache.cloudstack.api.response.TemplateResponse; import com.cloud.template.VirtualMachineTemplate; import com.cloud.user.Account; diff --git a/api/src/org/apache/cloudstack/api/command/admin/usage/AddTrafficTypeCmd.java b/api/src/org/apache/cloudstack/api/command/admin/usage/AddTrafficTypeCmd.java index 4c8cefaf31f..25786e08d80 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/usage/AddTrafficTypeCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/usage/AddTrafficTypeCmd.java @@ -25,7 +25,7 @@ import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; -import com.cloud.api.response.TrafficTypeResponse; +import org.apache.cloudstack.api.response.TrafficTypeResponse; import com.cloud.async.AsyncJob; import com.cloud.event.EventTypes; import com.cloud.exception.ResourceAllocationException; diff --git a/api/src/org/apache/cloudstack/api/command/admin/usage/DeleteTrafficTypeCmd.java b/api/src/org/apache/cloudstack/api/command/admin/usage/DeleteTrafficTypeCmd.java index 56499f32fe0..0f994298a8b 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/usage/DeleteTrafficTypeCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/usage/DeleteTrafficTypeCmd.java @@ -25,7 +25,7 @@ import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; -import com.cloud.api.response.SuccessResponse; +import org.apache.cloudstack.api.response.SuccessResponse; import com.cloud.async.AsyncJob; import com.cloud.event.EventTypes; import com.cloud.user.Account; diff --git a/api/src/org/apache/cloudstack/api/command/admin/usage/ListTrafficTypeImplementorsCmd.java b/api/src/org/apache/cloudstack/api/command/admin/usage/ListTrafficTypeImplementorsCmd.java old mode 100755 new mode 100644 index 54faadd9ede..b96b7454bd3 --- a/api/src/org/apache/cloudstack/api/command/admin/usage/ListTrafficTypeImplementorsCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/usage/ListTrafficTypeImplementorsCmd.java @@ -26,8 +26,8 @@ import org.apache.cloudstack.api.BaseListCmd; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; -import com.cloud.api.response.ListResponse; -import com.cloud.api.response.TrafficTypeImplementorResponse; +import org.apache.cloudstack.api.response.ListResponse; +import org.apache.cloudstack.api.response.TrafficTypeImplementorResponse; import com.cloud.exception.ConcurrentOperationException; import com.cloud.exception.InsufficientCapacityException; import com.cloud.exception.ResourceAllocationException; diff --git a/api/src/org/apache/cloudstack/api/command/admin/usage/ListTrafficTypesCmd.java b/api/src/org/apache/cloudstack/api/command/admin/usage/ListTrafficTypesCmd.java old mode 100755 new mode 100644 index 23819dee1a9..e97d1e1527e --- a/api/src/org/apache/cloudstack/api/command/admin/usage/ListTrafficTypesCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/usage/ListTrafficTypesCmd.java @@ -26,9 +26,9 @@ import org.apache.cloudstack.api.BaseListCmd; import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; -import com.cloud.api.response.ListResponse; -import com.cloud.api.response.ProviderResponse; -import com.cloud.api.response.TrafficTypeResponse; +import org.apache.cloudstack.api.response.ListResponse; +import org.apache.cloudstack.api.response.ProviderResponse; +import org.apache.cloudstack.api.response.TrafficTypeResponse; import com.cloud.network.PhysicalNetworkTrafficType; import com.cloud.user.Account; import com.cloud.utils.Pair; diff --git a/api/src/org/apache/cloudstack/api/command/admin/usage/UpdateTrafficTypeCmd.java b/api/src/org/apache/cloudstack/api/command/admin/usage/UpdateTrafficTypeCmd.java index de2938f2ae9..389ed09f977 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/usage/UpdateTrafficTypeCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/usage/UpdateTrafficTypeCmd.java @@ -25,7 +25,7 @@ import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; -import com.cloud.api.response.TrafficTypeResponse; +import org.apache.cloudstack.api.response.TrafficTypeResponse; import com.cloud.async.AsyncJob; import com.cloud.event.EventTypes; import com.cloud.network.PhysicalNetworkTrafficType; diff --git a/api/src/org/apache/cloudstack/api/command/admin/user/CreateUserCmd.java b/api/src/org/apache/cloudstack/api/command/admin/user/CreateUserCmd.java index 0ecefd344c7..e7cd44be04a 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/user/CreateUserCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/user/CreateUserCmd.java @@ -24,7 +24,7 @@ import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; -import com.cloud.api.response.UserResponse; +import org.apache.cloudstack.api.response.UserResponse; import com.cloud.user.Account; import com.cloud.user.User; import com.cloud.user.UserContext; diff --git a/api/src/org/apache/cloudstack/api/command/admin/user/DeleteUserCmd.java b/api/src/org/apache/cloudstack/api/command/admin/user/DeleteUserCmd.java index 99aafc498c1..ba9cafb32e3 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/user/DeleteUserCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/user/DeleteUserCmd.java @@ -24,8 +24,8 @@ import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; -import com.cloud.api.response.SuccessResponse; -import com.cloud.api.response.UserResponse; +import org.apache.cloudstack.api.response.SuccessResponse; +import org.apache.cloudstack.api.response.UserResponse; import com.cloud.user.Account; import com.cloud.user.User; import com.cloud.user.UserContext; diff --git a/api/src/org/apache/cloudstack/api/command/admin/user/DisableUserCmd.java b/api/src/org/apache/cloudstack/api/command/admin/user/DisableUserCmd.java index ab5831bc619..b726b913d2f 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/user/DisableUserCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/user/DisableUserCmd.java @@ -25,7 +25,7 @@ import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; -import com.cloud.api.response.UserResponse; +import org.apache.cloudstack.api.response.UserResponse; import com.cloud.async.AsyncJob; import com.cloud.event.EventTypes; import com.cloud.user.Account; diff --git a/api/src/org/apache/cloudstack/api/command/admin/user/EnableUserCmd.java b/api/src/org/apache/cloudstack/api/command/admin/user/EnableUserCmd.java index 066eae845f9..0ac28c33089 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/user/EnableUserCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/user/EnableUserCmd.java @@ -24,7 +24,7 @@ import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; -import com.cloud.api.response.UserResponse; +import org.apache.cloudstack.api.response.UserResponse; import com.cloud.user.Account; import com.cloud.user.User; import com.cloud.user.UserAccount; diff --git a/api/src/org/apache/cloudstack/api/command/admin/user/GetUserCmd.java b/api/src/org/apache/cloudstack/api/command/admin/user/GetUserCmd.java index 5083a492e57..420de6a290d 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/user/GetUserCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/user/GetUserCmd.java @@ -22,7 +22,7 @@ import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; -import com.cloud.api.response.UserResponse; +import org.apache.cloudstack.api.response.UserResponse; import com.cloud.exception.InvalidParameterValueException; import com.cloud.user.UserAccount; diff --git a/api/src/org/apache/cloudstack/api/command/admin/user/ListUsersCmd.java b/api/src/org/apache/cloudstack/api/command/admin/user/ListUsersCmd.java index 84b85c0141f..c7f0cbbf321 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/user/ListUsersCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/user/ListUsersCmd.java @@ -26,8 +26,8 @@ import org.apache.cloudstack.api.BaseListAccountResourcesCmd; import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; -import com.cloud.api.response.ListResponse; -import com.cloud.api.response.UserResponse; +import org.apache.cloudstack.api.response.ListResponse; +import org.apache.cloudstack.api.response.UserResponse; import com.cloud.user.UserAccount; import com.cloud.utils.Pair; diff --git a/api/src/org/apache/cloudstack/api/command/admin/user/LockUserCmd.java b/api/src/org/apache/cloudstack/api/command/admin/user/LockUserCmd.java index 3eee1da77be..30cfd15650b 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/user/LockUserCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/user/LockUserCmd.java @@ -24,7 +24,7 @@ import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; -import com.cloud.api.response.UserResponse; +import org.apache.cloudstack.api.response.UserResponse; import com.cloud.user.Account; import com.cloud.user.User; import com.cloud.user.UserAccount; diff --git a/api/src/org/apache/cloudstack/api/command/admin/user/RegisterCmd.java b/api/src/org/apache/cloudstack/api/command/admin/user/RegisterCmd.java index 5a38fdca5f8..becba814bc4 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/user/RegisterCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/user/RegisterCmd.java @@ -23,7 +23,7 @@ import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; -import com.cloud.api.response.RegisterResponse; +import org.apache.cloudstack.api.response.RegisterResponse; import com.cloud.user.Account; import com.cloud.user.User; diff --git a/api/src/org/apache/cloudstack/api/command/admin/user/UpdateUserCmd.java b/api/src/org/apache/cloudstack/api/command/admin/user/UpdateUserCmd.java index 021a93e23b5..8a6789d34d6 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/user/UpdateUserCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/user/UpdateUserCmd.java @@ -24,7 +24,7 @@ import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; -import com.cloud.api.response.UserResponse; +import org.apache.cloudstack.api.response.UserResponse; import com.cloud.user.Account; import com.cloud.user.User; import com.cloud.user.UserAccount; diff --git a/api/src/org/apache/cloudstack/api/command/admin/vlan/CreateVlanIpRangeCmd.java b/api/src/org/apache/cloudstack/api/command/admin/vlan/CreateVlanIpRangeCmd.java index f50820b1a1e..2ae907b42ed 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/vlan/CreateVlanIpRangeCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/vlan/CreateVlanIpRangeCmd.java @@ -24,7 +24,7 @@ import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; -import com.cloud.api.response.VlanIpRangeResponse; +import org.apache.cloudstack.api.response.VlanIpRangeResponse; import com.cloud.dc.Vlan; import com.cloud.exception.ConcurrentOperationException; import com.cloud.exception.InsufficientCapacityException; diff --git a/api/src/org/apache/cloudstack/api/command/admin/vlan/DeleteVlanIpRangeCmd.java b/api/src/org/apache/cloudstack/api/command/admin/vlan/DeleteVlanIpRangeCmd.java index 55272a67582..5286152f9cb 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/vlan/DeleteVlanIpRangeCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/vlan/DeleteVlanIpRangeCmd.java @@ -24,7 +24,7 @@ import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; -import com.cloud.api.response.SuccessResponse; +import org.apache.cloudstack.api.response.SuccessResponse; import com.cloud.user.Account; @Implementation(description="Creates a VLAN IP range.", responseObject=SuccessResponse.class) diff --git a/api/src/org/apache/cloudstack/api/command/admin/vlan/ListVlanIpRangesCmd.java b/api/src/org/apache/cloudstack/api/command/admin/vlan/ListVlanIpRangesCmd.java index 3554c4fafd6..6f7186a9187 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/vlan/ListVlanIpRangesCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/vlan/ListVlanIpRangesCmd.java @@ -26,8 +26,8 @@ import org.apache.cloudstack.api.BaseListCmd; import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; -import com.cloud.api.response.ListResponse; -import com.cloud.api.response.VlanIpRangeResponse; +import org.apache.cloudstack.api.response.ListResponse; +import org.apache.cloudstack.api.response.VlanIpRangeResponse; import com.cloud.dc.Vlan; import com.cloud.utils.Pair; diff --git a/api/src/org/apache/cloudstack/api/command/admin/vm/AssignVMCmd.java b/api/src/org/apache/cloudstack/api/command/admin/vm/AssignVMCmd.java index 12647dc01d0..73d9c9dc7c0 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/vm/AssignVMCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/vm/AssignVMCmd.java @@ -19,7 +19,7 @@ package org.apache.cloudstack.api.command.admin.vm; import java.util.List; -import org.apache.cloudstack.api.user.vm.command.DeployVMCmd; +import org.apache.cloudstack.api.command.user.vm.DeployVMCmd; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; @@ -28,10 +28,10 @@ import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; -import com.cloud.api.response.DomainResponse; -import com.cloud.api.response.NetworkResponse; -import com.cloud.api.response.SecurityGroupResponse; -import com.cloud.api.response.UserVmResponse; +import org.apache.cloudstack.api.response.DomainResponse; +import org.apache.cloudstack.api.response.NetworkResponse; +import org.apache.cloudstack.api.response.SecurityGroupResponse; +import org.apache.cloudstack.api.response.UserVmResponse; import com.cloud.user.Account; import com.cloud.uservm.UserVm; diff --git a/api/src/org/apache/cloudstack/api/command/admin/vm/MigrateVMCmd.java b/api/src/org/apache/cloudstack/api/command/admin/vm/MigrateVMCmd.java index 011ff7868ca..1d2f87ff5a1 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/vm/MigrateVMCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/vm/MigrateVMCmd.java @@ -26,9 +26,9 @@ import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; -import com.cloud.api.response.HostResponse; -import com.cloud.api.response.StoragePoolResponse; -import com.cloud.api.response.UserVmResponse; +import org.apache.cloudstack.api.response.HostResponse; +import org.apache.cloudstack.api.response.StoragePoolResponse; +import org.apache.cloudstack.api.response.UserVmResponse; import com.cloud.event.EventTypes; import com.cloud.exception.ConcurrentOperationException; import com.cloud.exception.InvalidParameterValueException; diff --git a/api/src/org/apache/cloudstack/api/command/admin/vm/RecoverVMCmd.java b/api/src/org/apache/cloudstack/api/command/admin/vm/RecoverVMCmd.java index c08c30b93be..9e32768c459 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/vm/RecoverVMCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/vm/RecoverVMCmd.java @@ -23,7 +23,7 @@ import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; -import com.cloud.api.response.UserVmResponse; +import org.apache.cloudstack.api.response.UserVmResponse; import com.cloud.exception.ResourceAllocationException; import com.cloud.user.Account; import com.cloud.uservm.UserVm; diff --git a/api/src/org/apache/cloudstack/api/command/admin/vpc/CreatePrivateGatewayCmd.java b/api/src/org/apache/cloudstack/api/command/admin/vpc/CreatePrivateGatewayCmd.java index 300ffa09308..800a54c0d35 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/vpc/CreatePrivateGatewayCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/vpc/CreatePrivateGatewayCmd.java @@ -26,7 +26,7 @@ import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; -import com.cloud.api.response.PrivateGatewayResponse; +import org.apache.cloudstack.api.response.PrivateGatewayResponse; import com.cloud.async.AsyncJob; import com.cloud.event.EventTypes; import com.cloud.exception.ConcurrentOperationException; diff --git a/api/src/org/apache/cloudstack/api/command/admin/vpc/CreateVPCOfferingCmd.java b/api/src/org/apache/cloudstack/api/command/admin/vpc/CreateVPCOfferingCmd.java index c2fcb22a6d7..8e64087e432 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/vpc/CreateVPCOfferingCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/vpc/CreateVPCOfferingCmd.java @@ -26,7 +26,7 @@ import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; -import com.cloud.api.response.VpcOfferingResponse; +import org.apache.cloudstack.api.response.VpcOfferingResponse; import com.cloud.event.EventTypes; import com.cloud.exception.ResourceAllocationException; import com.cloud.network.vpc.VpcOffering; diff --git a/api/src/org/apache/cloudstack/api/command/admin/vpc/DeletePrivateGatewayCmd.java b/api/src/org/apache/cloudstack/api/command/admin/vpc/DeletePrivateGatewayCmd.java index b6a921af249..01576e85ce4 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/vpc/DeletePrivateGatewayCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/vpc/DeletePrivateGatewayCmd.java @@ -25,7 +25,7 @@ import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; -import com.cloud.api.response.SuccessResponse; +import org.apache.cloudstack.api.response.SuccessResponse; import com.cloud.async.AsyncJob; import com.cloud.event.EventTypes; import com.cloud.exception.ConcurrentOperationException; diff --git a/api/src/org/apache/cloudstack/api/command/admin/vpc/DeleteVPCOfferingCmd.java b/api/src/org/apache/cloudstack/api/command/admin/vpc/DeleteVPCOfferingCmd.java index ed91dfea621..6d81f2e80ae 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/vpc/DeleteVPCOfferingCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/vpc/DeleteVPCOfferingCmd.java @@ -25,7 +25,7 @@ import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; -import com.cloud.api.response.SuccessResponse; +import org.apache.cloudstack.api.response.SuccessResponse; import com.cloud.event.EventTypes; import com.cloud.user.Account; diff --git a/api/src/org/apache/cloudstack/api/command/admin/vpc/UpdateVPCOfferingCmd.java b/api/src/org/apache/cloudstack/api/command/admin/vpc/UpdateVPCOfferingCmd.java index 81affa1386e..0fa03cab189 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/vpc/UpdateVPCOfferingCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/vpc/UpdateVPCOfferingCmd.java @@ -25,7 +25,7 @@ import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; -import com.cloud.api.response.VpcOfferingResponse; +import org.apache.cloudstack.api.response.VpcOfferingResponse; import com.cloud.event.EventTypes; import com.cloud.network.vpc.VpcOffering; import com.cloud.user.Account; diff --git a/api/src/org/apache/cloudstack/api/command/admin/zone/CreateZoneCmd.java b/api/src/org/apache/cloudstack/api/command/admin/zone/CreateZoneCmd.java old mode 100755 new mode 100644 index 6b59f936517..c3d8ef9d1b4 --- a/api/src/org/apache/cloudstack/api/command/admin/zone/CreateZoneCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/zone/CreateZoneCmd.java @@ -24,8 +24,8 @@ import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; -import com.cloud.api.response.DomainResponse; -import com.cloud.api.response.ZoneResponse; +import org.apache.cloudstack.api.response.DomainResponse; +import org.apache.cloudstack.api.response.ZoneResponse; import com.cloud.dc.DataCenter; import com.cloud.user.Account; import com.cloud.user.UserContext; diff --git a/api/src/org/apache/cloudstack/api/command/admin/zone/DeleteZoneCmd.java b/api/src/org/apache/cloudstack/api/command/admin/zone/DeleteZoneCmd.java index c62c5362f5a..fb64a263e7e 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/zone/DeleteZoneCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/zone/DeleteZoneCmd.java @@ -23,8 +23,8 @@ import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; -import com.cloud.api.response.SuccessResponse; -import com.cloud.api.response.ZoneResponse; +import org.apache.cloudstack.api.response.SuccessResponse; +import org.apache.cloudstack.api.response.ZoneResponse; import com.cloud.user.Account; import com.cloud.user.UserContext; diff --git a/api/src/org/apache/cloudstack/api/command/admin/zone/MarkDefaultZoneForAccountCmd.java b/api/src/org/apache/cloudstack/api/command/admin/zone/MarkDefaultZoneForAccountCmd.java index 22ddfbfdaa1..c488d135501 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/zone/MarkDefaultZoneForAccountCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/zone/MarkDefaultZoneForAccountCmd.java @@ -26,9 +26,9 @@ import org.apache.cloudstack.api.ApiConstants; import com.cloud.user.Account; import com.cloud.event.EventTypes; import com.cloud.async.AsyncJob; -import com.cloud.api.response.AccountResponse; -import com.cloud.api.response.DomainResponse; -import com.cloud.api.response.ZoneResponse; +import org.apache.cloudstack.api.response.AccountResponse; +import org.apache.cloudstack.api.response.DomainResponse; +import org.apache.cloudstack.api.response.ZoneResponse; import org.apache.cloudstack.api.ServerApiException; import org.apache.cloudstack.api.BaseCmd; diff --git a/api/src/org/apache/cloudstack/api/command/admin/zone/UpdateZoneCmd.java b/api/src/org/apache/cloudstack/api/command/admin/zone/UpdateZoneCmd.java old mode 100755 new mode 100644 index c67607fd34d..20fff448485 --- a/api/src/org/apache/cloudstack/api/command/admin/zone/UpdateZoneCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/zone/UpdateZoneCmd.java @@ -26,7 +26,7 @@ import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; -import com.cloud.api.response.ZoneResponse; +import org.apache.cloudstack.api.response.ZoneResponse; import com.cloud.dc.DataCenter; import com.cloud.user.Account; import com.cloud.user.UserContext; diff --git a/api/src/org/apache/cloudstack/api/command/user/account/AddAccountToProjectCmd.java b/api/src/org/apache/cloudstack/api/command/user/account/AddAccountToProjectCmd.java index ba94d4d3e28..d0103215a8b 100644 --- a/api/src/org/apache/cloudstack/api/command/user/account/AddAccountToProjectCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/account/AddAccountToProjectCmd.java @@ -25,7 +25,7 @@ import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; -import com.cloud.api.response.SuccessResponse; +import org.apache.cloudstack.api.response.SuccessResponse; import com.cloud.event.EventTypes; import com.cloud.exception.InvalidParameterValueException; import com.cloud.projects.Project; diff --git a/api/src/org/apache/cloudstack/api/command/user/account/DeleteAccountFromProjectCmd.java b/api/src/org/apache/cloudstack/api/command/user/account/DeleteAccountFromProjectCmd.java index 29c247f9968..74e43857c03 100644 --- a/api/src/org/apache/cloudstack/api/command/user/account/DeleteAccountFromProjectCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/account/DeleteAccountFromProjectCmd.java @@ -26,7 +26,7 @@ import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; -import com.cloud.api.response.SuccessResponse; +import org.apache.cloudstack.api.response.SuccessResponse; import com.cloud.event.EventTypes; import com.cloud.exception.InvalidParameterValueException; import com.cloud.projects.Project; diff --git a/api/src/org/apache/cloudstack/api/command/user/account/ListAccountsCmd.java b/api/src/org/apache/cloudstack/api/command/user/account/ListAccountsCmd.java old mode 100755 new mode 100644 index c6d9adb6a35..d4c08f7b5f2 --- a/api/src/org/apache/cloudstack/api/command/user/account/ListAccountsCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/account/ListAccountsCmd.java @@ -26,8 +26,8 @@ import org.apache.cloudstack.api.BaseListDomainResourcesCmd; import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; -import com.cloud.api.response.AccountResponse; -import com.cloud.api.response.ListResponse; +import org.apache.cloudstack.api.response.AccountResponse; +import org.apache.cloudstack.api.response.ListResponse; import com.cloud.user.Account; import com.cloud.utils.Pair; diff --git a/api/src/org/apache/cloudstack/api/command/user/account/ListProjectAccountsCmd.java b/api/src/org/apache/cloudstack/api/command/user/account/ListProjectAccountsCmd.java index f4850165cc5..b0cdcd94da0 100644 --- a/api/src/org/apache/cloudstack/api/command/user/account/ListProjectAccountsCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/account/ListProjectAccountsCmd.java @@ -26,9 +26,9 @@ import org.apache.cloudstack.api.BaseListCmd; import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; -import com.cloud.api.response.ListResponse; -import com.cloud.api.response.ProjectAccountResponse; -import com.cloud.api.response.ProjectResponse; +import org.apache.cloudstack.api.response.ListResponse; +import org.apache.cloudstack.api.response.ProjectAccountResponse; +import org.apache.cloudstack.api.response.ProjectResponse; import com.cloud.projects.ProjectAccount; import com.cloud.user.Account; import com.cloud.utils.Pair; diff --git a/api/src/org/apache/cloudstack/api/command/user/address/AssociateIPAddrCmd.java b/api/src/org/apache/cloudstack/api/command/user/address/AssociateIPAddrCmd.java index 806a90d504c..594dff56da1 100644 --- a/api/src/org/apache/cloudstack/api/command/user/address/AssociateIPAddrCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/address/AssociateIPAddrCmd.java @@ -28,7 +28,7 @@ import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; -import com.cloud.api.response.IPAddressResponse; +import org.apache.cloudstack.api.response.IPAddressResponse; import com.cloud.async.AsyncJob; import com.cloud.dc.DataCenter; import com.cloud.dc.DataCenter.NetworkType; diff --git a/api/src/org/apache/cloudstack/api/command/user/address/DisassociateIPAddrCmd.java b/api/src/org/apache/cloudstack/api/command/user/address/DisassociateIPAddrCmd.java index de0a5d894ce..bcdf09d7fd7 100644 --- a/api/src/org/apache/cloudstack/api/command/user/address/DisassociateIPAddrCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/address/DisassociateIPAddrCmd.java @@ -25,7 +25,7 @@ import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; -import com.cloud.api.response.SuccessResponse; +import org.apache.cloudstack.api.response.SuccessResponse; import com.cloud.async.AsyncJob; import com.cloud.event.EventTypes; import com.cloud.exception.InsufficientAddressCapacityException; diff --git a/api/src/org/apache/cloudstack/api/command/user/address/ListPublicIpAddressesCmd.java b/api/src/org/apache/cloudstack/api/command/user/address/ListPublicIpAddressesCmd.java index f889a9d3018..fdd19efc738 100644 --- a/api/src/org/apache/cloudstack/api/command/user/address/ListPublicIpAddressesCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/address/ListPublicIpAddressesCmd.java @@ -26,8 +26,8 @@ import org.apache.cloudstack.api.BaseListTaggedResourcesCmd; import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; -import com.cloud.api.response.IPAddressResponse; -import com.cloud.api.response.ListResponse; +import org.apache.cloudstack.api.response.IPAddressResponse; +import org.apache.cloudstack.api.response.ListResponse; import com.cloud.async.AsyncJob; import com.cloud.network.IpAddress; import com.cloud.utils.Pair; diff --git a/api/src/org/apache/cloudstack/api/command/user/autoscale/CreateAutoScalePolicyCmd.java b/api/src/org/apache/cloudstack/api/command/user/autoscale/CreateAutoScalePolicyCmd.java index d88fe4f51b4..47549aba6d7 100644 --- a/api/src/org/apache/cloudstack/api/command/user/autoscale/CreateAutoScalePolicyCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/autoscale/CreateAutoScalePolicyCmd.java @@ -27,7 +27,7 @@ import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; -import com.cloud.api.response.AutoScalePolicyResponse; +import org.apache.cloudstack.api.response.AutoScalePolicyResponse; import com.cloud.async.AsyncJob; import com.cloud.domain.Domain; import com.cloud.event.EventTypes; diff --git a/api/src/org/apache/cloudstack/api/command/user/autoscale/CreateAutoScaleVmGroupCmd.java b/api/src/org/apache/cloudstack/api/command/user/autoscale/CreateAutoScaleVmGroupCmd.java index 411458cc472..70ec7d57928 100644 --- a/api/src/org/apache/cloudstack/api/command/user/autoscale/CreateAutoScaleVmGroupCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/autoscale/CreateAutoScaleVmGroupCmd.java @@ -27,7 +27,7 @@ import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; -import com.cloud.api.response.AutoScaleVmGroupResponse; +import org.apache.cloudstack.api.response.AutoScaleVmGroupResponse; import com.cloud.async.AsyncJob; import com.cloud.event.EventTypes; import com.cloud.exception.InvalidParameterValueException; diff --git a/api/src/org/apache/cloudstack/api/command/user/autoscale/CreateAutoScaleVmProfileCmd.java b/api/src/org/apache/cloudstack/api/command/user/autoscale/CreateAutoScaleVmProfileCmd.java index d152c61122b..6ad4c61a0aa 100644 --- a/api/src/org/apache/cloudstack/api/command/user/autoscale/CreateAutoScaleVmProfileCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/autoscale/CreateAutoScaleVmProfileCmd.java @@ -28,7 +28,7 @@ import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; -import com.cloud.api.response.AutoScaleVmProfileResponse; +import org.apache.cloudstack.api.response.AutoScaleVmProfileResponse; import com.cloud.async.AsyncJob; import com.cloud.event.EventTypes; import com.cloud.exception.InvalidParameterValueException; diff --git a/api/src/org/apache/cloudstack/api/command/user/autoscale/CreateConditionCmd.java b/api/src/org/apache/cloudstack/api/command/user/autoscale/CreateConditionCmd.java index f48653d6efc..fbc610abd59 100644 --- a/api/src/org/apache/cloudstack/api/command/user/autoscale/CreateConditionCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/autoscale/CreateConditionCmd.java @@ -26,7 +26,7 @@ import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; -import com.cloud.api.response.ConditionResponse; +import org.apache.cloudstack.api.response.ConditionResponse; import com.cloud.async.AsyncJob; import com.cloud.event.EventTypes; import com.cloud.exception.ResourceAllocationException; diff --git a/api/src/org/apache/cloudstack/api/command/user/autoscale/DeleteAutoScalePolicyCmd.java b/api/src/org/apache/cloudstack/api/command/user/autoscale/DeleteAutoScalePolicyCmd.java index d13783b1f8b..33c758cf6fd 100644 --- a/api/src/org/apache/cloudstack/api/command/user/autoscale/DeleteAutoScalePolicyCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/autoscale/DeleteAutoScalePolicyCmd.java @@ -25,7 +25,7 @@ import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; -import com.cloud.api.response.SuccessResponse; +import org.apache.cloudstack.api.response.SuccessResponse; import com.cloud.async.AsyncJob; import com.cloud.event.EventTypes; import com.cloud.network.as.AutoScalePolicy; diff --git a/api/src/org/apache/cloudstack/api/command/user/autoscale/DeleteAutoScaleVmGroupCmd.java b/api/src/org/apache/cloudstack/api/command/user/autoscale/DeleteAutoScaleVmGroupCmd.java index cb4de7f524d..e78cced0172 100644 --- a/api/src/org/apache/cloudstack/api/command/user/autoscale/DeleteAutoScaleVmGroupCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/autoscale/DeleteAutoScaleVmGroupCmd.java @@ -25,7 +25,7 @@ import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; -import com.cloud.api.response.SuccessResponse; +import org.apache.cloudstack.api.response.SuccessResponse; import com.cloud.async.AsyncJob; import com.cloud.event.EventTypes; import com.cloud.network.as.AutoScaleVmGroup; diff --git a/api/src/org/apache/cloudstack/api/command/user/autoscale/DeleteAutoScaleVmProfileCmd.java b/api/src/org/apache/cloudstack/api/command/user/autoscale/DeleteAutoScaleVmProfileCmd.java index 1d6caf2b3c9..a1ae31bb187 100644 --- a/api/src/org/apache/cloudstack/api/command/user/autoscale/DeleteAutoScaleVmProfileCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/autoscale/DeleteAutoScaleVmProfileCmd.java @@ -25,7 +25,7 @@ import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; -import com.cloud.api.response.SuccessResponse; +import org.apache.cloudstack.api.response.SuccessResponse; import com.cloud.async.AsyncJob; import com.cloud.event.EventTypes; import com.cloud.network.as.AutoScaleVmProfile; diff --git a/api/src/org/apache/cloudstack/api/command/user/autoscale/DeleteConditionCmd.java b/api/src/org/apache/cloudstack/api/command/user/autoscale/DeleteConditionCmd.java index 43f0fc1cdd5..a300ee553a2 100644 --- a/api/src/org/apache/cloudstack/api/command/user/autoscale/DeleteConditionCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/autoscale/DeleteConditionCmd.java @@ -26,7 +26,7 @@ import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; -import com.cloud.api.response.SuccessResponse; +import org.apache.cloudstack.api.response.SuccessResponse; import com.cloud.async.AsyncJob; import com.cloud.event.EventTypes; import com.cloud.exception.ResourceInUseException; diff --git a/api/src/org/apache/cloudstack/api/command/user/autoscale/DisableAutoScaleVmGroupCmd.java b/api/src/org/apache/cloudstack/api/command/user/autoscale/DisableAutoScaleVmGroupCmd.java index 7552e41182a..fdf5fb45696 100644 --- a/api/src/org/apache/cloudstack/api/command/user/autoscale/DisableAutoScaleVmGroupCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/autoscale/DisableAutoScaleVmGroupCmd.java @@ -26,7 +26,7 @@ import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; -import com.cloud.api.response.AutoScaleVmGroupResponse; +import org.apache.cloudstack.api.response.AutoScaleVmGroupResponse; import com.cloud.async.AsyncJob; import com.cloud.event.EventTypes; import com.cloud.network.as.AutoScaleVmGroup; diff --git a/api/src/org/apache/cloudstack/api/command/user/autoscale/EnableAutoScaleVmGroupCmd.java b/api/src/org/apache/cloudstack/api/command/user/autoscale/EnableAutoScaleVmGroupCmd.java index 9c63327aad3..cc76e6c3bef 100644 --- a/api/src/org/apache/cloudstack/api/command/user/autoscale/EnableAutoScaleVmGroupCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/autoscale/EnableAutoScaleVmGroupCmd.java @@ -26,7 +26,7 @@ import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; -import com.cloud.api.response.AutoScaleVmGroupResponse; +import org.apache.cloudstack.api.response.AutoScaleVmGroupResponse; import com.cloud.async.AsyncJob; import com.cloud.event.EventTypes; import com.cloud.network.as.AutoScaleVmGroup; diff --git a/api/src/org/apache/cloudstack/api/command/user/autoscale/ListAutoScalePoliciesCmd.java b/api/src/org/apache/cloudstack/api/command/user/autoscale/ListAutoScalePoliciesCmd.java index e8bc8318b75..b7df018df91 100644 --- a/api/src/org/apache/cloudstack/api/command/user/autoscale/ListAutoScalePoliciesCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/autoscale/ListAutoScalePoliciesCmd.java @@ -26,8 +26,8 @@ import org.apache.cloudstack.api.BaseListAccountResourcesCmd; import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; -import com.cloud.api.response.AutoScalePolicyResponse; -import com.cloud.api.response.ListResponse; +import org.apache.cloudstack.api.response.AutoScalePolicyResponse; +import org.apache.cloudstack.api.response.ListResponse; import com.cloud.network.as.AutoScalePolicy; @Implementation(description = "Lists autoscale policies.", responseObject = AutoScalePolicyResponse.class) diff --git a/api/src/org/apache/cloudstack/api/command/user/autoscale/ListAutoScaleVmGroupsCmd.java b/api/src/org/apache/cloudstack/api/command/user/autoscale/ListAutoScaleVmGroupsCmd.java index 37d0945a788..63719ac2de8 100644 --- a/api/src/org/apache/cloudstack/api/command/user/autoscale/ListAutoScaleVmGroupsCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/autoscale/ListAutoScaleVmGroupsCmd.java @@ -26,8 +26,8 @@ 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 com.cloud.api.response.AutoScaleVmGroupResponse; -import com.cloud.api.response.ListResponse; +import org.apache.cloudstack.api.response.AutoScaleVmGroupResponse; +import org.apache.cloudstack.api.response.ListResponse; import com.cloud.exception.InvalidParameterValueException; import com.cloud.network.as.AutoScaleVmGroup; diff --git a/api/src/org/apache/cloudstack/api/command/user/autoscale/ListAutoScaleVmProfilesCmd.java b/api/src/org/apache/cloudstack/api/command/user/autoscale/ListAutoScaleVmProfilesCmd.java index e8554d965b7..71459849c84 100644 --- a/api/src/org/apache/cloudstack/api/command/user/autoscale/ListAutoScaleVmProfilesCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/autoscale/ListAutoScaleVmProfilesCmd.java @@ -26,8 +26,8 @@ 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 com.cloud.api.response.AutoScaleVmProfileResponse; -import com.cloud.api.response.ListResponse; +import org.apache.cloudstack.api.response.AutoScaleVmProfileResponse; +import org.apache.cloudstack.api.response.ListResponse; import com.cloud.network.as.AutoScaleVmProfile; @Implementation(description = "Lists autoscale vm profiles.", responseObject = AutoScaleVmProfileResponse.class) diff --git a/api/src/org/apache/cloudstack/api/command/user/autoscale/ListConditionsCmd.java b/api/src/org/apache/cloudstack/api/command/user/autoscale/ListConditionsCmd.java index be5b17ef16b..7686910cb44 100644 --- a/api/src/org/apache/cloudstack/api/command/user/autoscale/ListConditionsCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/autoscale/ListConditionsCmd.java @@ -27,9 +27,9 @@ import org.apache.cloudstack.api.BaseListAccountResourcesCmd; import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; -import com.cloud.api.response.ConditionResponse; -import com.cloud.api.response.CounterResponse; -import com.cloud.api.response.ListResponse; +import org.apache.cloudstack.api.response.ConditionResponse; +import org.apache.cloudstack.api.response.CounterResponse; +import org.apache.cloudstack.api.response.ListResponse; import com.cloud.network.as.Condition; @Implementation(description = "List Conditions for the specific user", responseObject = CounterResponse.class) diff --git a/api/src/org/apache/cloudstack/api/command/user/autoscale/ListCountersCmd.java b/api/src/org/apache/cloudstack/api/command/user/autoscale/ListCountersCmd.java index abb2fc0504f..47803c54541 100644 --- a/api/src/org/apache/cloudstack/api/command/user/autoscale/ListCountersCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/autoscale/ListCountersCmd.java @@ -27,8 +27,8 @@ import org.apache.cloudstack.api.BaseListCmd; import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; -import com.cloud.api.response.CounterResponse; -import com.cloud.api.response.ListResponse; +import org.apache.cloudstack.api.response.CounterResponse; +import org.apache.cloudstack.api.response.ListResponse; import com.cloud.network.as.Counter; import com.cloud.user.Account; diff --git a/api/src/org/apache/cloudstack/api/command/user/autoscale/UpdateAutoScalePolicyCmd.java b/api/src/org/apache/cloudstack/api/command/user/autoscale/UpdateAutoScalePolicyCmd.java index 17ee90d6132..918aa8e7c7e 100644 --- a/api/src/org/apache/cloudstack/api/command/user/autoscale/UpdateAutoScalePolicyCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/autoscale/UpdateAutoScalePolicyCmd.java @@ -28,7 +28,7 @@ import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; -import com.cloud.api.response.AutoScalePolicyResponse; +import org.apache.cloudstack.api.response.AutoScalePolicyResponse; import com.cloud.async.AsyncJob; import com.cloud.event.EventTypes; import com.cloud.network.as.AutoScalePolicy; diff --git a/api/src/org/apache/cloudstack/api/command/user/autoscale/UpdateAutoScaleVmGroupCmd.java b/api/src/org/apache/cloudstack/api/command/user/autoscale/UpdateAutoScaleVmGroupCmd.java index d0f84e50232..ecc86ab4554 100644 --- a/api/src/org/apache/cloudstack/api/command/user/autoscale/UpdateAutoScaleVmGroupCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/autoscale/UpdateAutoScaleVmGroupCmd.java @@ -28,7 +28,7 @@ import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; -import com.cloud.api.response.AutoScaleVmGroupResponse; +import org.apache.cloudstack.api.response.AutoScaleVmGroupResponse; import com.cloud.async.AsyncJob; import com.cloud.event.EventTypes; import com.cloud.network.as.AutoScaleVmGroup; diff --git a/api/src/org/apache/cloudstack/api/command/user/autoscale/UpdateAutoScaleVmProfileCmd.java b/api/src/org/apache/cloudstack/api/command/user/autoscale/UpdateAutoScaleVmProfileCmd.java index 5f5d808e63f..45911c1bb64 100644 --- a/api/src/org/apache/cloudstack/api/command/user/autoscale/UpdateAutoScaleVmProfileCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/autoscale/UpdateAutoScaleVmProfileCmd.java @@ -28,7 +28,7 @@ import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; -import com.cloud.api.response.AutoScaleVmProfileResponse; +import org.apache.cloudstack.api.response.AutoScaleVmProfileResponse; import com.cloud.async.AsyncJob; import com.cloud.event.EventTypes; import com.cloud.network.as.AutoScaleVmProfile; diff --git a/api/src/org/apache/cloudstack/api/command/user/config/ListCapabilitiesCmd.java b/api/src/org/apache/cloudstack/api/command/user/config/ListCapabilitiesCmd.java index d9f2195d76c..c72e8a03b2c 100644 --- a/api/src/org/apache/cloudstack/api/command/user/config/ListCapabilitiesCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/config/ListCapabilitiesCmd.java @@ -22,7 +22,7 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.Implementation; -import com.cloud.api.response.CapabilitiesResponse; +import org.apache.cloudstack.api.response.CapabilitiesResponse; import com.cloud.user.Account; @Implementation(description="Lists capabilities", responseObject=CapabilitiesResponse.class) diff --git a/api/src/org/apache/cloudstack/api/command/user/event/ListEventTypesCmd.java b/api/src/org/apache/cloudstack/api/command/user/event/ListEventTypesCmd.java index 2828b32a82b..42520d4a026 100644 --- a/api/src/org/apache/cloudstack/api/command/user/event/ListEventTypesCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/event/ListEventTypesCmd.java @@ -22,8 +22,8 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.Implementation; -import com.cloud.api.response.EventTypeResponse; -import com.cloud.api.response.ListResponse; +import org.apache.cloudstack.api.response.EventTypeResponse; +import org.apache.cloudstack.api.response.ListResponse; import com.cloud.user.Account; @Implementation(description = "List Event Types", responseObject = EventTypeResponse.class) diff --git a/api/src/org/apache/cloudstack/api/command/user/event/ListEventsCmd.java b/api/src/org/apache/cloudstack/api/command/user/event/ListEventsCmd.java old mode 100755 new mode 100644 index 769c97e17ac..42b08d4be08 --- a/api/src/org/apache/cloudstack/api/command/user/event/ListEventsCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/event/ListEventsCmd.java @@ -26,9 +26,9 @@ 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 com.cloud.api.response.EventResponse; -import com.cloud.api.response.ListResponse; -import com.cloud.api.view.vo.EventJoinVO; +import org.apache.cloudstack.api.response.EventResponse; +import org.apache.cloudstack.api.response.ListResponse; +import org.apache.cloudstack.api.view.vo.EventJoinVO; import com.cloud.utils.Pair; @Implementation(description="A command to list events.", responseObject=EventResponse.class) diff --git a/api/src/org/apache/cloudstack/api/command/user/firewall/CreateFirewallRuleCmd.java b/api/src/org/apache/cloudstack/api/command/user/firewall/CreateFirewallRuleCmd.java index 4daf3f6ae75..89fd14c3f16 100644 --- a/api/src/org/apache/cloudstack/api/command/user/firewall/CreateFirewallRuleCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/firewall/CreateFirewallRuleCmd.java @@ -29,7 +29,7 @@ import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; -import com.cloud.api.response.FirewallResponse; +import org.apache.cloudstack.api.response.FirewallResponse; import com.cloud.async.AsyncJob; import com.cloud.event.EventTypes; import com.cloud.exception.InvalidParameterValueException; diff --git a/api/src/org/apache/cloudstack/api/command/user/firewall/CreatePortForwardingRuleCmd.java b/api/src/org/apache/cloudstack/api/command/user/firewall/CreatePortForwardingRuleCmd.java index 97ec651cd4c..4389e8e6b68 100644 --- a/api/src/org/apache/cloudstack/api/command/user/firewall/CreatePortForwardingRuleCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/firewall/CreatePortForwardingRuleCmd.java @@ -28,7 +28,7 @@ import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; -import com.cloud.api.response.FirewallRuleResponse; +import org.apache.cloudstack.api.response.FirewallRuleResponse; import com.cloud.async.AsyncJob; import com.cloud.event.EventTypes; import com.cloud.exception.InvalidParameterValueException; diff --git a/api/src/org/apache/cloudstack/api/command/user/firewall/DeleteFirewallRuleCmd.java b/api/src/org/apache/cloudstack/api/command/user/firewall/DeleteFirewallRuleCmd.java index 6f714b078db..e23f8384a24 100644 --- a/api/src/org/apache/cloudstack/api/command/user/firewall/DeleteFirewallRuleCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/firewall/DeleteFirewallRuleCmd.java @@ -25,7 +25,7 @@ import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; -import com.cloud.api.response.SuccessResponse; +import org.apache.cloudstack.api.response.SuccessResponse; import com.cloud.async.AsyncJob; import com.cloud.event.EventTypes; import com.cloud.exception.InvalidParameterValueException; diff --git a/api/src/org/apache/cloudstack/api/command/user/firewall/DeletePortForwardingRuleCmd.java b/api/src/org/apache/cloudstack/api/command/user/firewall/DeletePortForwardingRuleCmd.java index 10b5f27fa29..e993c55804c 100644 --- a/api/src/org/apache/cloudstack/api/command/user/firewall/DeletePortForwardingRuleCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/firewall/DeletePortForwardingRuleCmd.java @@ -25,7 +25,7 @@ import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; -import com.cloud.api.response.SuccessResponse; +import org.apache.cloudstack.api.response.SuccessResponse; import com.cloud.async.AsyncJob; import com.cloud.event.EventTypes; import com.cloud.exception.InvalidParameterValueException; diff --git a/api/src/org/apache/cloudstack/api/command/user/firewall/ListFirewallRulesCmd.java b/api/src/org/apache/cloudstack/api/command/user/firewall/ListFirewallRulesCmd.java index 20c908b8175..cf9a3ed95b6 100644 --- a/api/src/org/apache/cloudstack/api/command/user/firewall/ListFirewallRulesCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/firewall/ListFirewallRulesCmd.java @@ -26,8 +26,8 @@ import org.apache.cloudstack.api.BaseListTaggedResourcesCmd; import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; -import com.cloud.api.response.FirewallResponse; -import com.cloud.api.response.ListResponse; +import org.apache.cloudstack.api.response.FirewallResponse; +import org.apache.cloudstack.api.response.ListResponse; import com.cloud.network.rules.FirewallRule; import com.cloud.utils.Pair; diff --git a/api/src/org/apache/cloudstack/api/command/user/firewall/ListPortForwardingRulesCmd.java b/api/src/org/apache/cloudstack/api/command/user/firewall/ListPortForwardingRulesCmd.java index 930133d00c2..b752b305c12 100644 --- a/api/src/org/apache/cloudstack/api/command/user/firewall/ListPortForwardingRulesCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/firewall/ListPortForwardingRulesCmd.java @@ -26,8 +26,8 @@ import org.apache.cloudstack.api.BaseListTaggedResourcesCmd; import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; -import com.cloud.api.response.FirewallRuleResponse; -import com.cloud.api.response.ListResponse; +import org.apache.cloudstack.api.response.FirewallRuleResponse; +import org.apache.cloudstack.api.response.ListResponse; import com.cloud.network.rules.PortForwardingRule; import com.cloud.utils.Pair; diff --git a/api/src/org/apache/cloudstack/api/command/user/firewall/UpdatePortForwardingRuleCmd.java b/api/src/org/apache/cloudstack/api/command/user/firewall/UpdatePortForwardingRuleCmd.java index d7599c65993..135455219ad 100644 --- a/api/src/org/apache/cloudstack/api/command/user/firewall/UpdatePortForwardingRuleCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/firewall/UpdatePortForwardingRuleCmd.java @@ -23,7 +23,7 @@ import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; -import com.cloud.api.response.FirewallRuleResponse; +import org.apache.cloudstack.api.response.FirewallRuleResponse; import com.cloud.event.EventTypes; import com.cloud.network.IpAddress; import com.cloud.user.Account; diff --git a/api/src/org/apache/cloudstack/api/command/user/guest/ListGuestOsCategoriesCmd.java b/api/src/org/apache/cloudstack/api/command/user/guest/ListGuestOsCategoriesCmd.java index 6a8d00bfc84..06c2208b06f 100644 --- a/api/src/org/apache/cloudstack/api/command/user/guest/ListGuestOsCategoriesCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/guest/ListGuestOsCategoriesCmd.java @@ -27,8 +27,8 @@ import org.apache.cloudstack.api.BaseListCmd; import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; -import com.cloud.api.response.GuestOSCategoryResponse; -import com.cloud.api.response.ListResponse; +import org.apache.cloudstack.api.response.GuestOSCategoryResponse; +import org.apache.cloudstack.api.response.ListResponse; import com.cloud.storage.GuestOsCategory; import com.cloud.utils.Pair; diff --git a/api/src/org/apache/cloudstack/api/command/user/guest/ListGuestOsCmd.java b/api/src/org/apache/cloudstack/api/command/user/guest/ListGuestOsCmd.java index 1bed7cabe2e..7a43f2bda7d 100644 --- a/api/src/org/apache/cloudstack/api/command/user/guest/ListGuestOsCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/guest/ListGuestOsCmd.java @@ -27,8 +27,8 @@ import org.apache.cloudstack.api.BaseListCmd; import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; -import com.cloud.api.response.GuestOSResponse; -import com.cloud.api.response.ListResponse; +import org.apache.cloudstack.api.response.GuestOSResponse; +import org.apache.cloudstack.api.response.ListResponse; import com.cloud.storage.GuestOS; import com.cloud.utils.Pair; diff --git a/api/src/org/apache/cloudstack/api/command/user/iso/AttachIsoCmd.java b/api/src/org/apache/cloudstack/api/command/user/iso/AttachIsoCmd.java old mode 100755 new mode 100644 index 8fdfb3dbee8..d2026ea49db --- a/api/src/org/apache/cloudstack/api/command/user/iso/AttachIsoCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/iso/AttachIsoCmd.java @@ -16,7 +16,7 @@ // under the License. package org.apache.cloudstack.api.command.user.iso; -import org.apache.cloudstack.api.user.vm.command.DeployVMCmd; +import org.apache.cloudstack.api.command.user.vm.DeployVMCmd; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; @@ -26,7 +26,7 @@ import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; -import com.cloud.api.response.UserVmResponse; +import org.apache.cloudstack.api.response.UserVmResponse; import com.cloud.event.EventTypes; import com.cloud.exception.InvalidParameterValueException; import com.cloud.user.UserContext; diff --git a/api/src/org/apache/cloudstack/api/command/user/iso/DeleteIsoCmd.java b/api/src/org/apache/cloudstack/api/command/user/iso/DeleteIsoCmd.java old mode 100755 new mode 100644 index b3c47202bc3..3d6122e6c27 --- a/api/src/org/apache/cloudstack/api/command/user/iso/DeleteIsoCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/iso/DeleteIsoCmd.java @@ -25,7 +25,7 @@ import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; -import com.cloud.api.response.SuccessResponse; +import org.apache.cloudstack.api.response.SuccessResponse; import com.cloud.async.AsyncJob; import com.cloud.event.EventTypes; import com.cloud.template.VirtualMachineTemplate; diff --git a/api/src/org/apache/cloudstack/api/command/user/iso/DetachIsoCmd.java b/api/src/org/apache/cloudstack/api/command/user/iso/DetachIsoCmd.java old mode 100755 new mode 100644 index 58c6bc4959b..36555f290c8 --- a/api/src/org/apache/cloudstack/api/command/user/iso/DetachIsoCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/iso/DetachIsoCmd.java @@ -16,7 +16,7 @@ // under the License. package org.apache.cloudstack.api.command.user.iso; -import org.apache.cloudstack.api.user.vm.command.DeployVMCmd; +import org.apache.cloudstack.api.command.user.vm.DeployVMCmd; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; @@ -26,7 +26,7 @@ import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; -import com.cloud.api.response.UserVmResponse; +import org.apache.cloudstack.api.response.UserVmResponse; import com.cloud.event.EventTypes; import com.cloud.exception.InvalidParameterValueException; import com.cloud.uservm.UserVm; diff --git a/api/src/org/apache/cloudstack/api/command/user/iso/ExtractIsoCmd.java b/api/src/org/apache/cloudstack/api/command/user/iso/ExtractIsoCmd.java old mode 100755 new mode 100644 index ac595503225..1fbb7e83710 --- a/api/src/org/apache/cloudstack/api/command/user/iso/ExtractIsoCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/iso/ExtractIsoCmd.java @@ -25,7 +25,7 @@ import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; -import com.cloud.api.response.ExtractResponse; +import org.apache.cloudstack.api.response.ExtractResponse; import com.cloud.async.AsyncJob; import com.cloud.event.EventTypes; import com.cloud.exception.InternalErrorException; diff --git a/api/src/org/apache/cloudstack/api/command/user/iso/ListIsoPermissionsCmd.java b/api/src/org/apache/cloudstack/api/command/user/iso/ListIsoPermissionsCmd.java index 45ca87552a7..a2e17121750 100644 --- a/api/src/org/apache/cloudstack/api/command/user/iso/ListIsoPermissionsCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/iso/ListIsoPermissionsCmd.java @@ -23,21 +23,21 @@ import com.cloud.storage.Storage.ImageFormat; import com.cloud.template.VirtualMachineTemplate; public class ListIsoPermissionsCmd extends ListTemplateOrIsoPermissionsCmd { - protected String getResponseName() { - return "listisopermissionsresponse"; + protected String getResponseName() { + return "listisopermissionsresponse"; } - @Override + @Override public String getMediaType() { - return "iso"; + return "iso"; } - @Override + @Override protected Logger getLogger() { - return Logger.getLogger(ListIsoPermissionsCmd.class.getName()); - } + return Logger.getLogger(ListIsoPermissionsCmd.class.getName()); + } - protected boolean templateIsCorrectType(VirtualMachineTemplate template) { - return template.getFormat().equals(ImageFormat.ISO); - } + protected boolean templateIsCorrectType(VirtualMachineTemplate template) { + return template.getFormat().equals(ImageFormat.ISO); + } } diff --git a/api/src/org/apache/cloudstack/api/command/user/iso/ListIsosCmd.java b/api/src/org/apache/cloudstack/api/command/user/iso/ListIsosCmd.java old mode 100755 new mode 100644 index 0c1ae2223cf..8b641f2e4da --- a/api/src/org/apache/cloudstack/api/command/user/iso/ListIsosCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/iso/ListIsosCmd.java @@ -27,8 +27,8 @@ import org.apache.cloudstack.api.BaseListTaggedResourcesCmd; import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; -import com.cloud.api.response.ListResponse; -import com.cloud.api.response.TemplateResponse; +import org.apache.cloudstack.api.response.ListResponse; +import org.apache.cloudstack.api.response.TemplateResponse; import com.cloud.async.AsyncJob; import com.cloud.template.VirtualMachineTemplate.TemplateFilter; import com.cloud.user.Account; diff --git a/api/src/org/apache/cloudstack/api/command/user/iso/RegisterIsoCmd.java b/api/src/org/apache/cloudstack/api/command/user/iso/RegisterIsoCmd.java old mode 100755 new mode 100644 index 3aea186c9fd..0961800e892 --- a/api/src/org/apache/cloudstack/api/command/user/iso/RegisterIsoCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/iso/RegisterIsoCmd.java @@ -26,8 +26,8 @@ import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; -import com.cloud.api.response.ListResponse; -import com.cloud.api.response.TemplateResponse; +import org.apache.cloudstack.api.response.ListResponse; +import org.apache.cloudstack.api.response.TemplateResponse; import com.cloud.exception.ResourceAllocationException; import com.cloud.template.VirtualMachineTemplate; import com.cloud.user.UserContext; diff --git a/api/src/org/apache/cloudstack/api/command/user/iso/UpdateIsoCmd.java b/api/src/org/apache/cloudstack/api/command/user/iso/UpdateIsoCmd.java old mode 100755 new mode 100644 index f2c8dbfaf5b..629cdb8bb1e --- a/api/src/org/apache/cloudstack/api/command/user/iso/UpdateIsoCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/iso/UpdateIsoCmd.java @@ -22,7 +22,7 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.ServerApiException; -import com.cloud.api.response.TemplateResponse; +import org.apache.cloudstack.api.response.TemplateResponse; import com.cloud.template.VirtualMachineTemplate; import com.cloud.user.Account; diff --git a/api/src/org/apache/cloudstack/api/command/user/iso/UpdateIsoPermissionsCmd.java b/api/src/org/apache/cloudstack/api/command/user/iso/UpdateIsoPermissionsCmd.java index d5199d8be04..f0f9c468810 100644 --- a/api/src/org/apache/cloudstack/api/command/user/iso/UpdateIsoPermissionsCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/iso/UpdateIsoPermissionsCmd.java @@ -20,7 +20,7 @@ import com.cloud.api.commands.UpdateTemplateOrIsoPermissionsCmd; import org.apache.log4j.Logger; import org.apache.cloudstack.api.Implementation; -import com.cloud.api.response.SuccessResponse; +import org.apache.cloudstack.api.response.SuccessResponse; import com.cloud.template.VirtualMachineTemplate; import com.cloud.user.Account; diff --git a/api/src/org/apache/cloudstack/api/command/user/job/ListAsyncJobsCmd.java b/api/src/org/apache/cloudstack/api/command/user/job/ListAsyncJobsCmd.java index 471c5436113..a07e8be785f 100644 --- a/api/src/org/apache/cloudstack/api/command/user/job/ListAsyncJobsCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/job/ListAsyncJobsCmd.java @@ -24,8 +24,8 @@ import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseListAccountResourcesCmd; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; -import com.cloud.api.response.AsyncJobResponse; -import com.cloud.api.response.ListResponse; +import org.apache.cloudstack.api.response.AsyncJobResponse; +import org.apache.cloudstack.api.response.ListResponse; import com.cloud.async.AsyncJob; import com.cloud.utils.Pair; diff --git a/api/src/org/apache/cloudstack/api/command/user/job/QueryAsyncJobResultCmd.java b/api/src/org/apache/cloudstack/api/command/user/job/QueryAsyncJobResultCmd.java index 0eb7e345cd0..74a8a177ca4 100644 --- a/api/src/org/apache/cloudstack/api/command/user/job/QueryAsyncJobResultCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/job/QueryAsyncJobResultCmd.java @@ -23,7 +23,7 @@ import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; -import com.cloud.api.response.AsyncJobResponse; +import org.apache.cloudstack.api.response.AsyncJobResponse; import com.cloud.user.Account; @Implementation(description="Retrieves the current status of asynchronous job.", responseObject=AsyncJobResponse.class) diff --git a/api/src/org/apache/cloudstack/api/command/user/loadbalancer/AssignToLoadBalancerRuleCmd.java b/api/src/org/apache/cloudstack/api/command/user/loadbalancer/AssignToLoadBalancerRuleCmd.java index 8395bb1d5cb..82ff8ebaea9 100644 --- a/api/src/org/apache/cloudstack/api/command/user/loadbalancer/AssignToLoadBalancerRuleCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/loadbalancer/AssignToLoadBalancerRuleCmd.java @@ -27,7 +27,7 @@ import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; -import com.cloud.api.response.SuccessResponse; +import org.apache.cloudstack.api.response.SuccessResponse; import com.cloud.event.EventTypes; import com.cloud.exception.InvalidParameterValueException; import com.cloud.network.rules.LoadBalancer; diff --git a/api/src/org/apache/cloudstack/api/command/user/loadbalancer/CreateLBStickinessPolicyCmd.java b/api/src/org/apache/cloudstack/api/command/user/loadbalancer/CreateLBStickinessPolicyCmd.java index 99aeed7bd8c..3583bfabeec 100644 --- a/api/src/org/apache/cloudstack/api/command/user/loadbalancer/CreateLBStickinessPolicyCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/loadbalancer/CreateLBStickinessPolicyCmd.java @@ -33,7 +33,7 @@ import com.cloud.exception.NetworkRuleConflictException; import com.cloud.exception.ResourceAllocationException; import com.cloud.exception.ResourceUnavailableException; import com.cloud.network.rules.StickinessPolicy; -import com.cloud.api.response.LBStickinessResponse; +import org.apache.cloudstack.api.response.LBStickinessResponse; import com.cloud.network.rules.LoadBalancer; import com.cloud.user.Account; import com.cloud.user.UserContext; diff --git a/api/src/org/apache/cloudstack/api/command/user/loadbalancer/CreateLoadBalancerRuleCmd.java b/api/src/org/apache/cloudstack/api/command/user/loadbalancer/CreateLoadBalancerRuleCmd.java index 1183f5b49c6..669fd01c04a 100644 --- a/api/src/org/apache/cloudstack/api/command/user/loadbalancer/CreateLoadBalancerRuleCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/loadbalancer/CreateLoadBalancerRuleCmd.java @@ -27,7 +27,7 @@ import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; -import com.cloud.api.response.LoadBalancerResponse; +import org.apache.cloudstack.api.response.LoadBalancerResponse; import com.cloud.async.AsyncJob; import com.cloud.dc.DataCenter; import com.cloud.dc.DataCenter.NetworkType; diff --git a/api/src/org/apache/cloudstack/api/command/user/loadbalancer/DeleteLBStickinessPolicyCmd.java b/api/src/org/apache/cloudstack/api/command/user/loadbalancer/DeleteLBStickinessPolicyCmd.java index 8b5601fd828..99abf2e2ffa 100644 --- a/api/src/org/apache/cloudstack/api/command/user/loadbalancer/DeleteLBStickinessPolicyCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/loadbalancer/DeleteLBStickinessPolicyCmd.java @@ -25,7 +25,7 @@ import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; -import com.cloud.api.response.SuccessResponse; +import org.apache.cloudstack.api.response.SuccessResponse; import com.cloud.event.EventTypes; import com.cloud.exception.InvalidParameterValueException; import com.cloud.network.rules.StickinessPolicy; diff --git a/api/src/org/apache/cloudstack/api/command/user/loadbalancer/DeleteLoadBalancerRuleCmd.java b/api/src/org/apache/cloudstack/api/command/user/loadbalancer/DeleteLoadBalancerRuleCmd.java index 7713dc74b2c..c8e6479f77b 100644 --- a/api/src/org/apache/cloudstack/api/command/user/loadbalancer/DeleteLoadBalancerRuleCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/loadbalancer/DeleteLoadBalancerRuleCmd.java @@ -25,7 +25,7 @@ import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; -import com.cloud.api.response.SuccessResponse; +import org.apache.cloudstack.api.response.SuccessResponse; import com.cloud.async.AsyncJob; import com.cloud.event.EventTypes; import com.cloud.exception.InvalidParameterValueException; diff --git a/api/src/org/apache/cloudstack/api/command/user/loadbalancer/ListLBStickinessPoliciesCmd.java b/api/src/org/apache/cloudstack/api/command/user/loadbalancer/ListLBStickinessPoliciesCmd.java index c0cb77af976..683b12aa11d 100644 --- a/api/src/org/apache/cloudstack/api/command/user/loadbalancer/ListLBStickinessPoliciesCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/loadbalancer/ListLBStickinessPoliciesCmd.java @@ -26,8 +26,8 @@ import org.apache.cloudstack.api.BaseListCmd; import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; -import com.cloud.api.response.LBStickinessResponse; -import com.cloud.api.response.ListResponse; +import org.apache.cloudstack.api.response.LBStickinessResponse; +import org.apache.cloudstack.api.response.ListResponse; import com.cloud.network.rules.LoadBalancer; import com.cloud.network.rules.StickinessPolicy; import com.cloud.user.Account; diff --git a/api/src/org/apache/cloudstack/api/command/user/loadbalancer/ListLoadBalancerRuleInstancesCmd.java b/api/src/org/apache/cloudstack/api/command/user/loadbalancer/ListLoadBalancerRuleInstancesCmd.java index 8e84e9c5ff0..1fc082672d0 100644 --- a/api/src/org/apache/cloudstack/api/command/user/loadbalancer/ListLoadBalancerRuleInstancesCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/loadbalancer/ListLoadBalancerRuleInstancesCmd.java @@ -26,8 +26,8 @@ import org.apache.cloudstack.api.BaseListCmd; import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; -import com.cloud.api.response.ListResponse; -import com.cloud.api.response.UserVmResponse; +import org.apache.cloudstack.api.response.ListResponse; +import org.apache.cloudstack.api.response.UserVmResponse; import com.cloud.uservm.UserVm; @Implementation(description="List all virtual machine instances that are assigned to a load balancer rule.", responseObject=UserVmResponse.class) diff --git a/api/src/org/apache/cloudstack/api/command/user/loadbalancer/ListLoadBalancerRulesCmd.java b/api/src/org/apache/cloudstack/api/command/user/loadbalancer/ListLoadBalancerRulesCmd.java index 2f014f6833a..a0d0f9d8a97 100644 --- a/api/src/org/apache/cloudstack/api/command/user/loadbalancer/ListLoadBalancerRulesCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/loadbalancer/ListLoadBalancerRulesCmd.java @@ -26,8 +26,8 @@ import org.apache.cloudstack.api.BaseListTaggedResourcesCmd; import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; -import com.cloud.api.response.ListResponse; -import com.cloud.api.response.LoadBalancerResponse; +import org.apache.cloudstack.api.response.ListResponse; +import org.apache.cloudstack.api.response.LoadBalancerResponse; import com.cloud.network.rules.LoadBalancer; import com.cloud.utils.Pair; diff --git a/api/src/org/apache/cloudstack/api/command/user/loadbalancer/RemoveFromLoadBalancerRuleCmd.java b/api/src/org/apache/cloudstack/api/command/user/loadbalancer/RemoveFromLoadBalancerRuleCmd.java index ae65d8d5ab6..e20aae94723 100644 --- a/api/src/org/apache/cloudstack/api/command/user/loadbalancer/RemoveFromLoadBalancerRuleCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/loadbalancer/RemoveFromLoadBalancerRuleCmd.java @@ -27,7 +27,7 @@ import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; -import com.cloud.api.response.SuccessResponse; +import org.apache.cloudstack.api.response.SuccessResponse; import com.cloud.event.EventTypes; import com.cloud.exception.InvalidParameterValueException; import com.cloud.network.rules.LoadBalancer; diff --git a/api/src/org/apache/cloudstack/api/command/user/loadbalancer/UpdateLoadBalancerRuleCmd.java b/api/src/org/apache/cloudstack/api/command/user/loadbalancer/UpdateLoadBalancerRuleCmd.java index 6c1b5a2a75e..34f78be83b2 100644 --- a/api/src/org/apache/cloudstack/api/command/user/loadbalancer/UpdateLoadBalancerRuleCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/loadbalancer/UpdateLoadBalancerRuleCmd.java @@ -25,7 +25,7 @@ import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; -import com.cloud.api.response.LoadBalancerResponse; +import org.apache.cloudstack.api.response.LoadBalancerResponse; import com.cloud.event.EventTypes; import com.cloud.network.rules.LoadBalancer; import com.cloud.user.Account; diff --git a/api/src/org/apache/cloudstack/api/command/user/nat/CreateIpForwardingRuleCmd.java b/api/src/org/apache/cloudstack/api/command/user/nat/CreateIpForwardingRuleCmd.java index 6afa8fa7b61..da435ec12d7 100644 --- a/api/src/org/apache/cloudstack/api/command/user/nat/CreateIpForwardingRuleCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/nat/CreateIpForwardingRuleCmd.java @@ -28,8 +28,8 @@ import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; -import com.cloud.api.response.FirewallRuleResponse; -import com.cloud.api.response.IpForwardingRuleResponse; +import org.apache.cloudstack.api.response.FirewallRuleResponse; +import org.apache.cloudstack.api.response.IpForwardingRuleResponse; import com.cloud.async.AsyncJob; import com.cloud.event.EventTypes; import com.cloud.exception.InvalidParameterValueException; diff --git a/api/src/org/apache/cloudstack/api/command/user/nat/DeleteIpForwardingRuleCmd.java b/api/src/org/apache/cloudstack/api/command/user/nat/DeleteIpForwardingRuleCmd.java index 0986f98463f..d8fa878600d 100644 --- a/api/src/org/apache/cloudstack/api/command/user/nat/DeleteIpForwardingRuleCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/nat/DeleteIpForwardingRuleCmd.java @@ -25,7 +25,7 @@ import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; -import com.cloud.api.response.SuccessResponse; +import org.apache.cloudstack.api.response.SuccessResponse; import com.cloud.async.AsyncJob; import com.cloud.event.EventTypes; import com.cloud.exception.InvalidParameterValueException; diff --git a/api/src/org/apache/cloudstack/api/command/user/nat/DisableStaticNatCmd.java b/api/src/org/apache/cloudstack/api/command/user/nat/DisableStaticNatCmd.java index 228cbd89fea..e3c2ede55a9 100644 --- a/api/src/org/apache/cloudstack/api/command/user/nat/DisableStaticNatCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/nat/DisableStaticNatCmd.java @@ -26,7 +26,7 @@ import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; -import com.cloud.api.response.SuccessResponse; +import org.apache.cloudstack.api.response.SuccessResponse; import com.cloud.event.EventTypes; import com.cloud.exception.InsufficientAddressCapacityException; import com.cloud.exception.InvalidParameterValueException; diff --git a/api/src/org/apache/cloudstack/api/command/user/nat/EnableStaticNatCmd.java b/api/src/org/apache/cloudstack/api/command/user/nat/EnableStaticNatCmd.java index b5fa549a145..5a77a0a395f 100644 --- a/api/src/org/apache/cloudstack/api/command/user/nat/EnableStaticNatCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/nat/EnableStaticNatCmd.java @@ -24,7 +24,7 @@ import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; -import com.cloud.api.response.SuccessResponse; +import org.apache.cloudstack.api.response.SuccessResponse; import com.cloud.exception.InvalidParameterValueException; import com.cloud.exception.NetworkRuleConflictException; import com.cloud.exception.ResourceUnavailableException; diff --git a/api/src/org/apache/cloudstack/api/command/user/nat/ListIpForwardingRulesCmd.java b/api/src/org/apache/cloudstack/api/command/user/nat/ListIpForwardingRulesCmd.java index 337a8795a3b..1560111e64f 100644 --- a/api/src/org/apache/cloudstack/api/command/user/nat/ListIpForwardingRulesCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/nat/ListIpForwardingRulesCmd.java @@ -26,9 +26,9 @@ 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 com.cloud.api.response.FirewallRuleResponse; -import com.cloud.api.response.IpForwardingRuleResponse; -import com.cloud.api.response.ListResponse; +import org.apache.cloudstack.api.response.FirewallRuleResponse; +import org.apache.cloudstack.api.response.IpForwardingRuleResponse; +import org.apache.cloudstack.api.response.ListResponse; import com.cloud.network.rules.FirewallRule; import com.cloud.network.rules.StaticNatRule; import com.cloud.utils.Pair; diff --git a/api/src/org/apache/cloudstack/api/command/user/network/CreateNetworkACLCmd.java b/api/src/org/apache/cloudstack/api/command/user/network/CreateNetworkACLCmd.java index 0e6a0838e1e..04406278f84 100644 --- a/api/src/org/apache/cloudstack/api/command/user/network/CreateNetworkACLCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/network/CreateNetworkACLCmd.java @@ -29,7 +29,7 @@ import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; -import com.cloud.api.response.NetworkACLResponse; +import org.apache.cloudstack.api.response.NetworkACLResponse; import com.cloud.async.AsyncJob; import com.cloud.event.EventTypes; import com.cloud.exception.InvalidParameterValueException; diff --git a/api/src/org/apache/cloudstack/api/command/user/network/CreateNetworkCmd.java b/api/src/org/apache/cloudstack/api/command/user/network/CreateNetworkCmd.java index 331664e21f0..2a10447a18e 100644 --- a/api/src/org/apache/cloudstack/api/command/user/network/CreateNetworkCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/network/CreateNetworkCmd.java @@ -24,7 +24,7 @@ import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; -import com.cloud.api.response.NetworkResponse; +import org.apache.cloudstack.api.response.NetworkResponse; import com.cloud.exception.ConcurrentOperationException; import com.cloud.exception.InsufficientCapacityException; import com.cloud.exception.InvalidParameterValueException; diff --git a/api/src/org/apache/cloudstack/api/command/user/network/DeleteNetworkACLCmd.java b/api/src/org/apache/cloudstack/api/command/user/network/DeleteNetworkACLCmd.java index 6aeed16d7f4..2cd9dc89035 100644 --- a/api/src/org/apache/cloudstack/api/command/user/network/DeleteNetworkACLCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/network/DeleteNetworkACLCmd.java @@ -25,7 +25,7 @@ import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; -import com.cloud.api.response.SuccessResponse; +import org.apache.cloudstack.api.response.SuccessResponse; import com.cloud.async.AsyncJob; import com.cloud.event.EventTypes; import com.cloud.exception.InvalidParameterValueException; diff --git a/api/src/org/apache/cloudstack/api/command/user/network/DeleteNetworkCmd.java b/api/src/org/apache/cloudstack/api/command/user/network/DeleteNetworkCmd.java index 8e47e7699b1..b5912503991 100644 --- a/api/src/org/apache/cloudstack/api/command/user/network/DeleteNetworkCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/network/DeleteNetworkCmd.java @@ -26,7 +26,7 @@ import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; -import com.cloud.api.response.SuccessResponse; +import org.apache.cloudstack.api.response.SuccessResponse; import com.cloud.event.EventTypes; import com.cloud.exception.InvalidParameterValueException; import com.cloud.network.Network; diff --git a/api/src/org/apache/cloudstack/api/command/user/network/ListNetworkACLsCmd.java b/api/src/org/apache/cloudstack/api/command/user/network/ListNetworkACLsCmd.java index a14066a689d..47329f4338a 100644 --- a/api/src/org/apache/cloudstack/api/command/user/network/ListNetworkACLsCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/network/ListNetworkACLsCmd.java @@ -27,8 +27,8 @@ import org.apache.cloudstack.api.BaseListTaggedResourcesCmd; import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; -import com.cloud.api.response.ListResponse; -import com.cloud.api.response.NetworkACLResponse; +import org.apache.cloudstack.api.response.ListResponse; +import org.apache.cloudstack.api.response.NetworkACLResponse; import com.cloud.network.rules.FirewallRule; import com.cloud.utils.Pair; diff --git a/api/src/org/apache/cloudstack/api/command/user/network/ListNetworkOfferingsCmd.java b/api/src/org/apache/cloudstack/api/command/user/network/ListNetworkOfferingsCmd.java index 33003423d8b..63b9d002872 100644 --- a/api/src/org/apache/cloudstack/api/command/user/network/ListNetworkOfferingsCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/network/ListNetworkOfferingsCmd.java @@ -26,8 +26,8 @@ import org.apache.cloudstack.api.BaseListCmd; import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; -import com.cloud.api.response.ListResponse; -import com.cloud.api.response.NetworkOfferingResponse; +import org.apache.cloudstack.api.response.ListResponse; +import org.apache.cloudstack.api.response.NetworkOfferingResponse; import com.cloud.offering.NetworkOffering; diff --git a/api/src/org/apache/cloudstack/api/command/user/network/ListNetworksCmd.java b/api/src/org/apache/cloudstack/api/command/user/network/ListNetworksCmd.java index e9be8c41439..d1688c00fce 100644 --- a/api/src/org/apache/cloudstack/api/command/user/network/ListNetworksCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/network/ListNetworksCmd.java @@ -26,8 +26,8 @@ import org.apache.cloudstack.api.BaseListTaggedResourcesCmd; import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; -import com.cloud.api.response.ListResponse; -import com.cloud.api.response.NetworkResponse; +import org.apache.cloudstack.api.response.ListResponse; +import org.apache.cloudstack.api.response.NetworkResponse; import com.cloud.network.Network; diff --git a/api/src/org/apache/cloudstack/api/command/user/network/RestartNetworkCmd.java b/api/src/org/apache/cloudstack/api/command/user/network/RestartNetworkCmd.java index f73fc5691e2..2f3466439dd 100644 --- a/api/src/org/apache/cloudstack/api/command/user/network/RestartNetworkCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/network/RestartNetworkCmd.java @@ -25,8 +25,8 @@ import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; -import com.cloud.api.response.IPAddressResponse; -import com.cloud.api.response.SuccessResponse; +import org.apache.cloudstack.api.response.IPAddressResponse; +import org.apache.cloudstack.api.response.SuccessResponse; import com.cloud.event.EventTypes; import com.cloud.exception.ConcurrentOperationException; import com.cloud.exception.InsufficientCapacityException; diff --git a/api/src/org/apache/cloudstack/api/command/user/network/UpdateNetworkCmd.java b/api/src/org/apache/cloudstack/api/command/user/network/UpdateNetworkCmd.java index 4aafee5bc52..56142a9726e 100644 --- a/api/src/org/apache/cloudstack/api/command/user/network/UpdateNetworkCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/network/UpdateNetworkCmd.java @@ -25,7 +25,7 @@ import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; -import com.cloud.api.response.NetworkResponse; +import org.apache.cloudstack.api.response.NetworkResponse; import com.cloud.event.EventTypes; import com.cloud.exception.ConcurrentOperationException; import com.cloud.exception.InsufficientCapacityException; diff --git a/api/src/org/apache/cloudstack/api/command/user/offering/ListDiskOfferingsCmd.java b/api/src/org/apache/cloudstack/api/command/user/offering/ListDiskOfferingsCmd.java index a9a4eb69eda..31b03e80485 100644 --- a/api/src/org/apache/cloudstack/api/command/user/offering/ListDiskOfferingsCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/offering/ListDiskOfferingsCmd.java @@ -26,8 +26,8 @@ import org.apache.cloudstack.api.BaseListCmd; import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; -import com.cloud.api.response.DiskOfferingResponse; -import com.cloud.api.response.ListResponse; +import org.apache.cloudstack.api.response.DiskOfferingResponse; +import org.apache.cloudstack.api.response.ListResponse; import com.cloud.offering.DiskOffering; @Implementation(description="Lists all available disk offerings.", responseObject=DiskOfferingResponse.class) diff --git a/api/src/org/apache/cloudstack/api/command/user/offering/ListServiceOfferingsCmd.java b/api/src/org/apache/cloudstack/api/command/user/offering/ListServiceOfferingsCmd.java index 42aabc205aa..9dfa82da78a 100644 --- a/api/src/org/apache/cloudstack/api/command/user/offering/ListServiceOfferingsCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/offering/ListServiceOfferingsCmd.java @@ -26,8 +26,8 @@ import org.apache.cloudstack.api.BaseListCmd; import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; -import com.cloud.api.response.ListResponse; -import com.cloud.api.response.ServiceOfferingResponse; +import org.apache.cloudstack.api.response.ListResponse; +import org.apache.cloudstack.api.response.ServiceOfferingResponse; import com.cloud.offering.ServiceOffering; @Implementation(description="Lists all available service offerings.", responseObject=ServiceOfferingResponse.class) diff --git a/api/src/org/apache/cloudstack/api/command/user/project/ActivateProjectCmd.java b/api/src/org/apache/cloudstack/api/command/user/project/ActivateProjectCmd.java index c44c0241988..40535d84d30 100644 --- a/api/src/org/apache/cloudstack/api/command/user/project/ActivateProjectCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/project/ActivateProjectCmd.java @@ -25,7 +25,7 @@ import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; -import com.cloud.api.response.ProjectResponse; +import org.apache.cloudstack.api.response.ProjectResponse; import com.cloud.event.EventTypes; import com.cloud.exception.InvalidParameterValueException; import com.cloud.projects.Project; diff --git a/api/src/org/apache/cloudstack/api/command/user/project/CreateProjectCmd.java b/api/src/org/apache/cloudstack/api/command/user/project/CreateProjectCmd.java index 9154b2633bb..c979158d916 100644 --- a/api/src/org/apache/cloudstack/api/command/user/project/CreateProjectCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/project/CreateProjectCmd.java @@ -25,7 +25,7 @@ import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; -import com.cloud.api.response.ProjectResponse; +import org.apache.cloudstack.api.response.ProjectResponse; import com.cloud.event.EventTypes; import com.cloud.exception.InvalidParameterValueException; import com.cloud.exception.ResourceAllocationException; diff --git a/api/src/org/apache/cloudstack/api/command/user/project/DeleteProjectCmd.java b/api/src/org/apache/cloudstack/api/command/user/project/DeleteProjectCmd.java index b0fb2b97763..0c489fbfdc7 100644 --- a/api/src/org/apache/cloudstack/api/command/user/project/DeleteProjectCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/project/DeleteProjectCmd.java @@ -25,7 +25,7 @@ import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; -import com.cloud.api.response.SuccessResponse; +import org.apache.cloudstack.api.response.SuccessResponse; import com.cloud.event.EventTypes; import com.cloud.exception.InvalidParameterValueException; import com.cloud.projects.Project; diff --git a/api/src/org/apache/cloudstack/api/command/user/project/DeleteProjectInvitationCmd.java b/api/src/org/apache/cloudstack/api/command/user/project/DeleteProjectInvitationCmd.java index 76740734edd..0efe491587d 100644 --- a/api/src/org/apache/cloudstack/api/command/user/project/DeleteProjectInvitationCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/project/DeleteProjectInvitationCmd.java @@ -25,7 +25,7 @@ import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; -import com.cloud.api.response.SuccessResponse; +import org.apache.cloudstack.api.response.SuccessResponse; import com.cloud.event.EventTypes; import com.cloud.user.Account; import com.cloud.user.UserContext; diff --git a/api/src/org/apache/cloudstack/api/command/user/project/ListProjectInvitationsCmd.java b/api/src/org/apache/cloudstack/api/command/user/project/ListProjectInvitationsCmd.java index 9083f03b61b..206a9a9e80f 100644 --- a/api/src/org/apache/cloudstack/api/command/user/project/ListProjectInvitationsCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/project/ListProjectInvitationsCmd.java @@ -26,8 +26,8 @@ import org.apache.cloudstack.api.BaseListAccountResourcesCmd; import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; -import com.cloud.api.response.ListResponse; -import com.cloud.api.response.ProjectInvitationResponse; +import org.apache.cloudstack.api.response.ListResponse; +import org.apache.cloudstack.api.response.ProjectInvitationResponse; import com.cloud.projects.ProjectInvitation; import com.cloud.utils.Pair; diff --git a/api/src/org/apache/cloudstack/api/command/user/project/ListProjectsCmd.java b/api/src/org/apache/cloudstack/api/command/user/project/ListProjectsCmd.java index 649746664b1..2350a2c0af4 100644 --- a/api/src/org/apache/cloudstack/api/command/user/project/ListProjectsCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/project/ListProjectsCmd.java @@ -30,8 +30,8 @@ import org.apache.cloudstack.api.BaseListAccountResourcesCmd; import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; -import com.cloud.api.response.ListResponse; -import com.cloud.api.response.ProjectResponse; +import org.apache.cloudstack.api.response.ListResponse; +import org.apache.cloudstack.api.response.ProjectResponse; import com.cloud.exception.InvalidParameterValueException; import com.cloud.projects.Project; import com.cloud.utils.Pair; diff --git a/api/src/org/apache/cloudstack/api/command/user/project/SuspendProjectCmd.java b/api/src/org/apache/cloudstack/api/command/user/project/SuspendProjectCmd.java index 9542fa9dc78..4de4f04fac7 100644 --- a/api/src/org/apache/cloudstack/api/command/user/project/SuspendProjectCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/project/SuspendProjectCmd.java @@ -25,7 +25,7 @@ import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; -import com.cloud.api.response.ProjectResponse; +import org.apache.cloudstack.api.response.ProjectResponse; import com.cloud.event.EventTypes; import com.cloud.exception.ConcurrentOperationException; import com.cloud.exception.InvalidParameterValueException; diff --git a/api/src/org/apache/cloudstack/api/command/user/project/UpdateProjectCmd.java b/api/src/org/apache/cloudstack/api/command/user/project/UpdateProjectCmd.java index 071571b8f45..8b3e6365457 100644 --- a/api/src/org/apache/cloudstack/api/command/user/project/UpdateProjectCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/project/UpdateProjectCmd.java @@ -25,7 +25,7 @@ import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; -import com.cloud.api.response.ProjectResponse; +import org.apache.cloudstack.api.response.ProjectResponse; import com.cloud.event.EventTypes; import com.cloud.exception.InvalidParameterValueException; import com.cloud.exception.ResourceAllocationException; diff --git a/api/src/org/apache/cloudstack/api/command/user/project/UpdateProjectInvitationCmd.java b/api/src/org/apache/cloudstack/api/command/user/project/UpdateProjectInvitationCmd.java index 1d9d7318d9e..279e4a27d61 100644 --- a/api/src/org/apache/cloudstack/api/command/user/project/UpdateProjectInvitationCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/project/UpdateProjectInvitationCmd.java @@ -25,7 +25,7 @@ import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; -import com.cloud.api.response.SuccessResponse; +import org.apache.cloudstack.api.response.SuccessResponse; import com.cloud.event.EventTypes; import com.cloud.user.Account; import com.cloud.user.UserContext; diff --git a/api/src/org/apache/cloudstack/api/command/user/resource/GetCloudIdentifierCmd.java b/api/src/org/apache/cloudstack/api/command/user/resource/GetCloudIdentifierCmd.java index ca33036ad4c..feec81fa1c8 100644 --- a/api/src/org/apache/cloudstack/api/command/user/resource/GetCloudIdentifierCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/resource/GetCloudIdentifierCmd.java @@ -26,7 +26,7 @@ import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; -import com.cloud.api.response.CloudIdentifierResponse; +import org.apache.cloudstack.api.response.CloudIdentifierResponse; import com.cloud.user.Account; @Implementation(description="Retrieves a cloud identifier.", responseObject=CloudIdentifierResponse.class) diff --git a/api/src/org/apache/cloudstack/api/command/user/resource/ListHypervisorsCmd.java b/api/src/org/apache/cloudstack/api/command/user/resource/ListHypervisorsCmd.java index dd4bf989179..4ee11113d45 100644 --- a/api/src/org/apache/cloudstack/api/command/user/resource/ListHypervisorsCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/resource/ListHypervisorsCmd.java @@ -27,8 +27,8 @@ import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; -import com.cloud.api.response.HypervisorResponse; -import com.cloud.api.response.ListResponse; +import org.apache.cloudstack.api.response.HypervisorResponse; +import org.apache.cloudstack.api.response.ListResponse; import com.cloud.user.Account; @Implementation(description = "List hypervisors", responseObject = HypervisorResponse.class) diff --git a/api/src/org/apache/cloudstack/api/command/user/resource/ListResourceLimitsCmd.java b/api/src/org/apache/cloudstack/api/command/user/resource/ListResourceLimitsCmd.java index 3e0d9a2ed08..72f96095ced 100644 --- a/api/src/org/apache/cloudstack/api/command/user/resource/ListResourceLimitsCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/resource/ListResourceLimitsCmd.java @@ -25,8 +25,8 @@ import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseListProjectAndAccountResourcesCmd; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; -import com.cloud.api.response.ListResponse; -import com.cloud.api.response.ResourceLimitResponse; +import org.apache.cloudstack.api.response.ListResponse; +import org.apache.cloudstack.api.response.ResourceLimitResponse; import com.cloud.configuration.ResourceLimit; @Implementation(description="Lists resource limits.", responseObject=ResourceLimitResponse.class) diff --git a/api/src/org/apache/cloudstack/api/command/user/resource/UpdateResourceCountCmd.java b/api/src/org/apache/cloudstack/api/command/user/resource/UpdateResourceCountCmd.java index 30888c7c2d7..3db1b987fd6 100644 --- a/api/src/org/apache/cloudstack/api/command/user/resource/UpdateResourceCountCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/resource/UpdateResourceCountCmd.java @@ -27,8 +27,8 @@ import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; -import com.cloud.api.response.ListResponse; -import com.cloud.api.response.ResourceCountResponse; +import org.apache.cloudstack.api.response.ListResponse; +import org.apache.cloudstack.api.response.ResourceCountResponse; import com.cloud.configuration.ResourceCount; import com.cloud.user.Account; import com.cloud.user.UserContext; diff --git a/api/src/org/apache/cloudstack/api/command/user/resource/UpdateResourceLimitCmd.java b/api/src/org/apache/cloudstack/api/command/user/resource/UpdateResourceLimitCmd.java index 743c8244911..0e74d50a4bb 100644 --- a/api/src/org/apache/cloudstack/api/command/user/resource/UpdateResourceLimitCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/resource/UpdateResourceLimitCmd.java @@ -24,7 +24,7 @@ import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; -import com.cloud.api.response.ResourceLimitResponse; +import org.apache.cloudstack.api.response.ResourceLimitResponse; import com.cloud.configuration.ResourceLimit; import com.cloud.user.UserContext; diff --git a/api/src/org/apache/cloudstack/api/command/user/securitygroup/AuthorizeSecurityGroupEgressCmd.java b/api/src/org/apache/cloudstack/api/command/user/securitygroup/AuthorizeSecurityGroupEgressCmd.java index ab9631810ab..566e5c0b5e1 100644 --- a/api/src/org/apache/cloudstack/api/command/user/securitygroup/AuthorizeSecurityGroupEgressCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/securitygroup/AuthorizeSecurityGroupEgressCmd.java @@ -29,8 +29,8 @@ import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; -import com.cloud.api.response.SecurityGroupRuleResponse; -import com.cloud.api.response.SecurityGroupResponse; +import org.apache.cloudstack.api.response.SecurityGroupRuleResponse; +import org.apache.cloudstack.api.response.SecurityGroupResponse; import com.cloud.async.AsyncJob; import com.cloud.event.EventTypes; import com.cloud.exception.InvalidParameterValueException; diff --git a/api/src/org/apache/cloudstack/api/command/user/securitygroup/AuthorizeSecurityGroupIngressCmd.java b/api/src/org/apache/cloudstack/api/command/user/securitygroup/AuthorizeSecurityGroupIngressCmd.java index 43e419a947a..b5e6aa24dc6 100644 --- a/api/src/org/apache/cloudstack/api/command/user/securitygroup/AuthorizeSecurityGroupIngressCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/securitygroup/AuthorizeSecurityGroupIngressCmd.java @@ -31,8 +31,8 @@ import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; -import com.cloud.api.response.SecurityGroupResponse; -import com.cloud.api.response.SecurityGroupRuleResponse; +import org.apache.cloudstack.api.response.SecurityGroupResponse; +import org.apache.cloudstack.api.response.SecurityGroupRuleResponse; import com.cloud.async.AsyncJob; import com.cloud.event.EventTypes; import com.cloud.exception.InvalidParameterValueException; diff --git a/api/src/org/apache/cloudstack/api/command/user/securitygroup/CreateSecurityGroupCmd.java b/api/src/org/apache/cloudstack/api/command/user/securitygroup/CreateSecurityGroupCmd.java index 965df1972a0..b83a9722fb6 100644 --- a/api/src/org/apache/cloudstack/api/command/user/securitygroup/CreateSecurityGroupCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/securitygroup/CreateSecurityGroupCmd.java @@ -24,7 +24,7 @@ import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; -import com.cloud.api.response.SecurityGroupResponse; +import org.apache.cloudstack.api.response.SecurityGroupResponse; import com.cloud.network.security.SecurityGroup; import com.cloud.user.Account; import com.cloud.user.UserContext; diff --git a/api/src/org/apache/cloudstack/api/command/user/securitygroup/DeleteSecurityGroupCmd.java b/api/src/org/apache/cloudstack/api/command/user/securitygroup/DeleteSecurityGroupCmd.java index 1300464b7e3..5ca76ef5a72 100644 --- a/api/src/org/apache/cloudstack/api/command/user/securitygroup/DeleteSecurityGroupCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/securitygroup/DeleteSecurityGroupCmd.java @@ -24,7 +24,7 @@ import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; -import com.cloud.api.response.SuccessResponse; +import org.apache.cloudstack.api.response.SuccessResponse; import com.cloud.exception.InvalidParameterValueException; import com.cloud.exception.ResourceInUseException; import com.cloud.user.UserContext; diff --git a/api/src/org/apache/cloudstack/api/command/user/securitygroup/ListSecurityGroupsCmd.java b/api/src/org/apache/cloudstack/api/command/user/securitygroup/ListSecurityGroupsCmd.java index c375c7a1970..0149a0a6f16 100644 --- a/api/src/org/apache/cloudstack/api/command/user/securitygroup/ListSecurityGroupsCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/securitygroup/ListSecurityGroupsCmd.java @@ -25,9 +25,9 @@ import org.apache.cloudstack.api.BaseListTaggedResourcesCmd; import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; -import com.cloud.api.response.ListResponse; -import com.cloud.api.response.SecurityGroupResponse; -import com.cloud.api.view.vo.SecurityGroupJoinVO; +import org.apache.cloudstack.api.response.ListResponse; +import org.apache.cloudstack.api.response.SecurityGroupResponse; +import org.apache.cloudstack.api.view.vo.SecurityGroupJoinVO; import com.cloud.async.AsyncJob; import com.cloud.utils.Pair; diff --git a/api/src/org/apache/cloudstack/api/command/user/securitygroup/RevokeSecurityGroupEgressCmd.java b/api/src/org/apache/cloudstack/api/command/user/securitygroup/RevokeSecurityGroupEgressCmd.java index 809e089aa27..97832181a12 100644 --- a/api/src/org/apache/cloudstack/api/command/user/securitygroup/RevokeSecurityGroupEgressCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/securitygroup/RevokeSecurityGroupEgressCmd.java @@ -25,7 +25,7 @@ import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; -import com.cloud.api.response.SuccessResponse; +import org.apache.cloudstack.api.response.SuccessResponse; import com.cloud.async.AsyncJob; import com.cloud.event.EventTypes; import com.cloud.network.security.SecurityGroup; diff --git a/api/src/org/apache/cloudstack/api/command/user/securitygroup/RevokeSecurityGroupIngressCmd.java b/api/src/org/apache/cloudstack/api/command/user/securitygroup/RevokeSecurityGroupIngressCmd.java index b319d842697..34c0004ded1 100644 --- a/api/src/org/apache/cloudstack/api/command/user/securitygroup/RevokeSecurityGroupIngressCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/securitygroup/RevokeSecurityGroupIngressCmd.java @@ -25,7 +25,7 @@ import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; -import com.cloud.api.response.SuccessResponse; +import org.apache.cloudstack.api.response.SuccessResponse; import com.cloud.async.AsyncJob; import com.cloud.event.EventTypes; import com.cloud.network.security.SecurityGroup; diff --git a/api/src/org/apache/cloudstack/api/command/user/snapshot/CreateSnapshotCmd.java b/api/src/org/apache/cloudstack/api/command/user/snapshot/CreateSnapshotCmd.java old mode 100755 new mode 100644 index a685bd0abc7..9d9c7475e07 --- a/api/src/org/apache/cloudstack/api/command/user/snapshot/CreateSnapshotCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/snapshot/CreateSnapshotCmd.java @@ -26,7 +26,7 @@ import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; -import com.cloud.api.response.SnapshotResponse; +import org.apache.cloudstack.api.response.SnapshotResponse; import com.cloud.async.AsyncJob; import com.cloud.event.EventTypes; import com.cloud.exception.InvalidParameterValueException; diff --git a/api/src/org/apache/cloudstack/api/command/user/snapshot/CreateSnapshotPolicyCmd.java b/api/src/org/apache/cloudstack/api/command/user/snapshot/CreateSnapshotPolicyCmd.java index 14cf553e1f2..53a84d32010 100644 --- a/api/src/org/apache/cloudstack/api/command/user/snapshot/CreateSnapshotPolicyCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/snapshot/CreateSnapshotPolicyCmd.java @@ -24,7 +24,7 @@ import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; -import com.cloud.api.response.SnapshotPolicyResponse; +import org.apache.cloudstack.api.response.SnapshotPolicyResponse; import com.cloud.exception.InvalidParameterValueException; import com.cloud.exception.PermissionDeniedException; import com.cloud.projects.Project; diff --git a/api/src/org/apache/cloudstack/api/command/user/snapshot/DeleteSnapshotCmd.java b/api/src/org/apache/cloudstack/api/command/user/snapshot/DeleteSnapshotCmd.java index 3e380a00464..92e8d38be35 100644 --- a/api/src/org/apache/cloudstack/api/command/user/snapshot/DeleteSnapshotCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/snapshot/DeleteSnapshotCmd.java @@ -25,7 +25,7 @@ import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; -import com.cloud.api.response.SuccessResponse; +import org.apache.cloudstack.api.response.SuccessResponse; import com.cloud.async.AsyncJob; import com.cloud.event.EventTypes; import com.cloud.storage.Snapshot; diff --git a/api/src/org/apache/cloudstack/api/command/user/snapshot/DeleteSnapshotPoliciesCmd.java b/api/src/org/apache/cloudstack/api/command/user/snapshot/DeleteSnapshotPoliciesCmd.java old mode 100755 new mode 100644 index 053de7f2496..f3a3baa4de5 --- a/api/src/org/apache/cloudstack/api/command/user/snapshot/DeleteSnapshotPoliciesCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/snapshot/DeleteSnapshotPoliciesCmd.java @@ -26,7 +26,7 @@ import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; -import com.cloud.api.response.SuccessResponse; +import org.apache.cloudstack.api.response.SuccessResponse; import com.cloud.user.Account; @Implementation(description="Deletes snapshot policies for the account.", responseObject=SuccessResponse.class) diff --git a/api/src/org/apache/cloudstack/api/command/user/snapshot/ListSnapshotPoliciesCmd.java b/api/src/org/apache/cloudstack/api/command/user/snapshot/ListSnapshotPoliciesCmd.java index 0b01e5ed41b..e1a6fd692d3 100644 --- a/api/src/org/apache/cloudstack/api/command/user/snapshot/ListSnapshotPoliciesCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/snapshot/ListSnapshotPoliciesCmd.java @@ -26,8 +26,8 @@ import org.apache.cloudstack.api.BaseListCmd; import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; -import com.cloud.api.response.ListResponse; -import com.cloud.api.response.SnapshotPolicyResponse; +import org.apache.cloudstack.api.response.ListResponse; +import org.apache.cloudstack.api.response.SnapshotPolicyResponse; import com.cloud.storage.snapshot.SnapshotPolicy; @Implementation(description="Lists snapshot policies.", responseObject=SnapshotPolicyResponse.class) diff --git a/api/src/org/apache/cloudstack/api/command/user/snapshot/ListSnapshotsCmd.java b/api/src/org/apache/cloudstack/api/command/user/snapshot/ListSnapshotsCmd.java index bfda3ade4fa..ae152b39f75 100644 --- a/api/src/org/apache/cloudstack/api/command/user/snapshot/ListSnapshotsCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/snapshot/ListSnapshotsCmd.java @@ -26,8 +26,8 @@ import org.apache.cloudstack.api.BaseListTaggedResourcesCmd; import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; -import com.cloud.api.response.ListResponse; -import com.cloud.api.response.SnapshotResponse; +import org.apache.cloudstack.api.response.ListResponse; +import org.apache.cloudstack.api.response.SnapshotResponse; import com.cloud.async.AsyncJob; import com.cloud.storage.Snapshot; import com.cloud.utils.Pair; diff --git a/api/src/org/apache/cloudstack/api/command/user/ssh/CreateSSHKeyPairCmd.java b/api/src/org/apache/cloudstack/api/command/user/ssh/CreateSSHKeyPairCmd.java index 9be649d5ded..b296acd4512 100644 --- a/api/src/org/apache/cloudstack/api/command/user/ssh/CreateSSHKeyPairCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/ssh/CreateSSHKeyPairCmd.java @@ -23,7 +23,7 @@ import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; -import com.cloud.api.response.SSHKeyPairResponse; +import org.apache.cloudstack.api.response.SSHKeyPairResponse; import com.cloud.user.SSHKeyPair; import com.cloud.user.UserContext; diff --git a/api/src/org/apache/cloudstack/api/command/user/ssh/DeleteSSHKeyPairCmd.java b/api/src/org/apache/cloudstack/api/command/user/ssh/DeleteSSHKeyPairCmd.java index 768a4dd082c..f8d2946a5c9 100644 --- a/api/src/org/apache/cloudstack/api/command/user/ssh/DeleteSSHKeyPairCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/ssh/DeleteSSHKeyPairCmd.java @@ -23,7 +23,7 @@ import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; -import com.cloud.api.response.SuccessResponse; +import org.apache.cloudstack.api.response.SuccessResponse; import com.cloud.user.Account; import com.cloud.user.UserContext; diff --git a/api/src/org/apache/cloudstack/api/command/user/ssh/ListSSHKeyPairsCmd.java b/api/src/org/apache/cloudstack/api/command/user/ssh/ListSSHKeyPairsCmd.java index ee2aa1894fc..336825b8bd6 100644 --- a/api/src/org/apache/cloudstack/api/command/user/ssh/ListSSHKeyPairsCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/ssh/ListSSHKeyPairsCmd.java @@ -25,8 +25,8 @@ import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseListProjectAndAccountResourcesCmd; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; -import com.cloud.api.response.ListResponse; -import com.cloud.api.response.SSHKeyPairResponse; +import org.apache.cloudstack.api.response.ListResponse; +import org.apache.cloudstack.api.response.SSHKeyPairResponse; import com.cloud.user.SSHKeyPair; import com.cloud.utils.Pair; diff --git a/api/src/org/apache/cloudstack/api/command/user/ssh/RegisterSSHKeyPairCmd.java b/api/src/org/apache/cloudstack/api/command/user/ssh/RegisterSSHKeyPairCmd.java index 6603578b721..f31d2d892fa 100644 --- a/api/src/org/apache/cloudstack/api/command/user/ssh/RegisterSSHKeyPairCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/ssh/RegisterSSHKeyPairCmd.java @@ -23,7 +23,7 @@ import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; -import com.cloud.api.response.SSHKeyPairResponse; +import org.apache.cloudstack.api.response.SSHKeyPairResponse; import com.cloud.user.SSHKeyPair; import com.cloud.user.UserContext; diff --git a/api/src/org/apache/cloudstack/api/command/user/tag/CreateTagsCmd.java b/api/src/org/apache/cloudstack/api/command/user/tag/CreateTagsCmd.java index 0a2d3b3d3df..14c6167ff84 100644 --- a/api/src/org/apache/cloudstack/api/command/user/tag/CreateTagsCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/tag/CreateTagsCmd.java @@ -31,7 +31,7 @@ import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; -import com.cloud.api.response.SuccessResponse; +import org.apache.cloudstack.api.response.SuccessResponse; import com.cloud.event.EventTypes; import com.cloud.server.ResourceTag; import com.cloud.server.ResourceTag.TaggedResourceType; diff --git a/api/src/org/apache/cloudstack/api/command/user/tag/DeleteTagsCmd.java b/api/src/org/apache/cloudstack/api/command/user/tag/DeleteTagsCmd.java index 2278384fc82..f5de4a3d6ea 100644 --- a/api/src/org/apache/cloudstack/api/command/user/tag/DeleteTagsCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/tag/DeleteTagsCmd.java @@ -31,7 +31,7 @@ import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; -import com.cloud.api.response.SuccessResponse; +import org.apache.cloudstack.api.response.SuccessResponse; import com.cloud.event.EventTypes; import com.cloud.server.ResourceTag.TaggedResourceType; @Implementation(description = "Deleting resource tag(s)", responseObject = SuccessResponse.class, since = "Burbank") diff --git a/api/src/org/apache/cloudstack/api/command/user/tag/ListTagsCmd.java b/api/src/org/apache/cloudstack/api/command/user/tag/ListTagsCmd.java index e0abc17460a..94194dbf230 100644 --- a/api/src/org/apache/cloudstack/api/command/user/tag/ListTagsCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/tag/ListTagsCmd.java @@ -17,17 +17,15 @@ package org.apache.cloudstack.api.command.user.tag; -import java.util.ArrayList; import java.util.List; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseListProjectAndAccountResourcesCmd; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; -import com.cloud.api.response.ListResponse; -import com.cloud.api.response.ResourceTagResponse; -import com.cloud.api.view.vo.ResourceTagJoinVO; -import com.cloud.server.ResourceTag; +import org.apache.cloudstack.api.response.ListResponse; +import org.apache.cloudstack.api.response.ResourceTagResponse; +import org.apache.cloudstack.api.view.vo.ResourceTagJoinVO; import com.cloud.utils.Pair; @Implementation(description = "List resource tag(s)", responseObject = ResourceTagResponse.class, since = "Burbank") diff --git a/api/src/org/apache/cloudstack/api/command/user/template/CopyTemplateCmd.java b/api/src/org/apache/cloudstack/api/command/user/template/CopyTemplateCmd.java old mode 100755 new mode 100644 index 0b8f7e43b84..31003be9794 --- a/api/src/org/apache/cloudstack/api/command/user/template/CopyTemplateCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/template/CopyTemplateCmd.java @@ -27,7 +27,7 @@ import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; -import com.cloud.api.response.TemplateResponse; +import org.apache.cloudstack.api.response.TemplateResponse; import com.cloud.async.AsyncJob; import com.cloud.event.EventTypes; import com.cloud.exception.ResourceAllocationException; diff --git a/api/src/org/apache/cloudstack/api/command/user/template/CreateTemplateCmd.java b/api/src/org/apache/cloudstack/api/command/user/template/CreateTemplateCmd.java old mode 100755 new mode 100644 index 0a52e3058fc..8ce2ad92718 --- a/api/src/org/apache/cloudstack/api/command/user/template/CreateTemplateCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/template/CreateTemplateCmd.java @@ -29,8 +29,8 @@ import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; -import com.cloud.api.response.StoragePoolResponse; -import com.cloud.api.response.TemplateResponse; +import org.apache.cloudstack.api.response.StoragePoolResponse; +import org.apache.cloudstack.api.response.TemplateResponse; import com.cloud.async.AsyncJob; import com.cloud.event.EventTypes; import com.cloud.exception.InvalidParameterValueException; diff --git a/api/src/org/apache/cloudstack/api/command/user/template/DeleteTemplateCmd.java b/api/src/org/apache/cloudstack/api/command/user/template/DeleteTemplateCmd.java old mode 100755 new mode 100644 index 56d6f846c7d..fc830fa462b --- a/api/src/org/apache/cloudstack/api/command/user/template/DeleteTemplateCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/template/DeleteTemplateCmd.java @@ -25,7 +25,7 @@ import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; -import com.cloud.api.response.SuccessResponse; +import org.apache.cloudstack.api.response.SuccessResponse; import com.cloud.async.AsyncJob; import com.cloud.event.EventTypes; import com.cloud.template.VirtualMachineTemplate; diff --git a/api/src/org/apache/cloudstack/api/command/user/template/ExtractTemplateCmd.java b/api/src/org/apache/cloudstack/api/command/user/template/ExtractTemplateCmd.java old mode 100755 new mode 100644 index 0adfdd82c42..9be1297358e --- a/api/src/org/apache/cloudstack/api/command/user/template/ExtractTemplateCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/template/ExtractTemplateCmd.java @@ -25,7 +25,7 @@ import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; -import com.cloud.api.response.ExtractResponse; +import org.apache.cloudstack.api.response.ExtractResponse; import com.cloud.async.AsyncJob; import com.cloud.event.EventTypes; import com.cloud.exception.InternalErrorException; diff --git a/api/src/org/apache/cloudstack/api/command/user/template/ListTemplatePermissionsCmd.java b/api/src/org/apache/cloudstack/api/command/user/template/ListTemplatePermissionsCmd.java index 934e2e8a1a0..cd38215ca4f 100644 --- a/api/src/org/apache/cloudstack/api/command/user/template/ListTemplatePermissionsCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/template/ListTemplatePermissionsCmd.java @@ -23,21 +23,21 @@ import com.cloud.storage.Storage.ImageFormat; import com.cloud.template.VirtualMachineTemplate; public class ListTemplatePermissionsCmd extends ListTemplateOrIsoPermissionsCmd { - protected String getResponseName() { - return "listtemplatepermissionsresponse"; + protected String getResponseName() { + return "listtemplatepermissionsresponse"; } - @Override + @Override public String getMediaType() { - return "template"; + return "template"; } - @Override + @Override protected Logger getLogger() { - return Logger.getLogger(ListTemplatePermissionsCmd.class.getName()); - } + return Logger.getLogger(ListTemplatePermissionsCmd.class.getName()); + } - protected boolean templateIsCorrectType(VirtualMachineTemplate template) { - return !template.getFormat().equals(ImageFormat.ISO); - } + protected boolean templateIsCorrectType(VirtualMachineTemplate template) { + return !template.getFormat().equals(ImageFormat.ISO); + } } diff --git a/api/src/org/apache/cloudstack/api/command/user/template/ListTemplatesCmd.java b/api/src/org/apache/cloudstack/api/command/user/template/ListTemplatesCmd.java old mode 100755 new mode 100644 index f16b7e27c4d..52051b291ed --- a/api/src/org/apache/cloudstack/api/command/user/template/ListTemplatesCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/template/ListTemplatesCmd.java @@ -27,8 +27,8 @@ import org.apache.cloudstack.api.BaseListTaggedResourcesCmd; import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; -import com.cloud.api.response.ListResponse; -import com.cloud.api.response.TemplateResponse; +import org.apache.cloudstack.api.response.ListResponse; +import org.apache.cloudstack.api.response.TemplateResponse; import com.cloud.async.AsyncJob; import com.cloud.template.VirtualMachineTemplate.TemplateFilter; import com.cloud.user.Account; diff --git a/api/src/org/apache/cloudstack/api/command/user/template/RegisterTemplateCmd.java b/api/src/org/apache/cloudstack/api/command/user/template/RegisterTemplateCmd.java old mode 100755 new mode 100644 index 54269ac975e..802e23327a5 --- a/api/src/org/apache/cloudstack/api/command/user/template/RegisterTemplateCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/template/RegisterTemplateCmd.java @@ -29,8 +29,8 @@ import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; -import com.cloud.api.response.ListResponse; -import com.cloud.api.response.TemplateResponse; +import org.apache.cloudstack.api.response.ListResponse; +import org.apache.cloudstack.api.response.TemplateResponse; import com.cloud.async.AsyncJob; import com.cloud.exception.ResourceAllocationException; import com.cloud.template.VirtualMachineTemplate; diff --git a/api/src/org/apache/cloudstack/api/command/user/template/UpdateTemplateCmd.java b/api/src/org/apache/cloudstack/api/command/user/template/UpdateTemplateCmd.java old mode 100755 new mode 100644 index 5d2af34b9d3..92c608c29c0 --- a/api/src/org/apache/cloudstack/api/command/user/template/UpdateTemplateCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/template/UpdateTemplateCmd.java @@ -22,7 +22,7 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.ServerApiException; -import com.cloud.api.response.TemplateResponse; +import org.apache.cloudstack.api.response.TemplateResponse; import com.cloud.template.VirtualMachineTemplate; import com.cloud.user.Account; diff --git a/api/src/org/apache/cloudstack/api/command/user/template/UpdateTemplatePermissionsCmd.java b/api/src/org/apache/cloudstack/api/command/user/template/UpdateTemplatePermissionsCmd.java index bdd4a0c4997..4a29d9cbb92 100644 --- a/api/src/org/apache/cloudstack/api/command/user/template/UpdateTemplatePermissionsCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/template/UpdateTemplatePermissionsCmd.java @@ -20,7 +20,7 @@ import com.cloud.api.commands.UpdateTemplateOrIsoPermissionsCmd; import org.apache.log4j.Logger; import org.apache.cloudstack.api.Implementation; -import com.cloud.api.response.SuccessResponse; +import org.apache.cloudstack.api.response.SuccessResponse; import com.cloud.template.VirtualMachineTemplate; import com.cloud.user.Account; diff --git a/api/src/org/apache/cloudstack/api/command/user/user/AddVpnUserCmd.java b/api/src/org/apache/cloudstack/api/command/user/user/AddVpnUserCmd.java index a7ec871c254..abd58b897c0 100644 --- a/api/src/org/apache/cloudstack/api/command/user/user/AddVpnUserCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/user/AddVpnUserCmd.java @@ -25,7 +25,7 @@ import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; -import com.cloud.api.response.VpnUsersResponse; +import org.apache.cloudstack.api.response.VpnUsersResponse; import com.cloud.domain.Domain; import com.cloud.event.EventTypes; import com.cloud.network.VpnUser; diff --git a/api/src/org/apache/cloudstack/api/command/user/user/ListVpnUsersCmd.java b/api/src/org/apache/cloudstack/api/command/user/user/ListVpnUsersCmd.java index 6149b408348..1fa15b597f9 100644 --- a/api/src/org/apache/cloudstack/api/command/user/user/ListVpnUsersCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/user/ListVpnUsersCmd.java @@ -26,8 +26,8 @@ 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 com.cloud.api.response.ListResponse; -import com.cloud.api.response.VpnUsersResponse; +import org.apache.cloudstack.api.response.ListResponse; +import org.apache.cloudstack.api.response.VpnUsersResponse; import com.cloud.network.VpnUser; import com.cloud.utils.Pair; diff --git a/api/src/org/apache/cloudstack/api/command/user/user/RemoveVpnUserCmd.java b/api/src/org/apache/cloudstack/api/command/user/user/RemoveVpnUserCmd.java index f03c1a84848..5e144bdaf76 100644 --- a/api/src/org/apache/cloudstack/api/command/user/user/RemoveVpnUserCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/user/RemoveVpnUserCmd.java @@ -25,7 +25,7 @@ import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; -import com.cloud.api.response.SuccessResponse; +import org.apache.cloudstack.api.response.SuccessResponse; import com.cloud.event.EventTypes; import com.cloud.user.Account; import com.cloud.user.UserContext; diff --git a/api/src/org/apache/cloudstack/api/user/vm/command/DeployVMCmd.java b/api/src/org/apache/cloudstack/api/command/user/vm/DeployVMCmd.java similarity index 96% rename from api/src/org/apache/cloudstack/api/user/vm/command/DeployVMCmd.java rename to api/src/org/apache/cloudstack/api/command/user/vm/DeployVMCmd.java index 2cf9e8c7784..3ca94da4f78 100644 --- a/api/src/org/apache/cloudstack/api/user/vm/command/DeployVMCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vm/DeployVMCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.user.vm.command; +package org.apache.cloudstack.api.command.user.vm; import java.util.ArrayList; import java.util.Collection; @@ -30,25 +30,23 @@ import org.apache.cloudstack.api.ACL; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseAsyncCreateCmd; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; -import com.cloud.api.response.DiskOfferingResponse; -import com.cloud.api.response.DomainResponse; -import com.cloud.api.response.HostResponse; -import com.cloud.api.response.NetworkResponse; -import com.cloud.api.response.ProjectAccountResponse; -import com.cloud.api.response.SecurityGroupResponse; -import com.cloud.api.response.ServiceOfferingResponse; -import com.cloud.api.response.TemplateResponse; -import com.cloud.api.response.UserVmResponse; -import com.cloud.api.response.ZoneResponse; +import org.apache.cloudstack.api.response.DiskOfferingResponse; +import org.apache.cloudstack.api.response.DomainResponse; +import org.apache.cloudstack.api.response.HostResponse; +import org.apache.cloudstack.api.response.NetworkResponse; +import org.apache.cloudstack.api.response.ProjectAccountResponse; +import org.apache.cloudstack.api.response.SecurityGroupResponse; +import org.apache.cloudstack.api.response.ServiceOfferingResponse; +import org.apache.cloudstack.api.response.TemplateResponse; +import org.apache.cloudstack.api.response.UserVmResponse; +import org.apache.cloudstack.api.response.ZoneResponse; import com.cloud.async.AsyncJob; import com.cloud.dc.DataCenter; import com.cloud.dc.DataCenter.NetworkType; -import com.cloud.domain.Domain; import com.cloud.event.EventTypes; import com.cloud.exception.ConcurrentOperationException; import com.cloud.exception.InsufficientCapacityException; diff --git a/api/src/org/apache/cloudstack/api/user/vm/command/DestroyVMCmd.java b/api/src/org/apache/cloudstack/api/command/user/vm/DestroyVMCmd.java similarity index 96% rename from api/src/org/apache/cloudstack/api/user/vm/command/DestroyVMCmd.java rename to api/src/org/apache/cloudstack/api/command/user/vm/DestroyVMCmd.java index 06c3c0d7047..48777c6bc5a 100644 --- a/api/src/org/apache/cloudstack/api/user/vm/command/DestroyVMCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vm/DestroyVMCmd.java @@ -14,18 +14,17 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.user.vm.command; +package org.apache.cloudstack.api.command.user.vm; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; -import com.cloud.api.response.UserVmResponse; +import org.apache.cloudstack.api.response.UserVmResponse; import com.cloud.async.AsyncJob; import com.cloud.event.EventTypes; import com.cloud.exception.ConcurrentOperationException; diff --git a/api/src/org/apache/cloudstack/api/user/vm/command/GetVMPasswordCmd.java b/api/src/org/apache/cloudstack/api/command/user/vm/GetVMPasswordCmd.java similarity index 93% rename from api/src/org/apache/cloudstack/api/user/vm/command/GetVMPasswordCmd.java rename to api/src/org/apache/cloudstack/api/command/user/vm/GetVMPasswordCmd.java index ee8eee4f28b..b9ebbda40cb 100644 --- a/api/src/org/apache/cloudstack/api/user/vm/command/GetVMPasswordCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vm/GetVMPasswordCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.user.vm.command; +package org.apache.cloudstack.api.command.user.vm; import java.security.InvalidParameterException; @@ -22,11 +22,10 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; -import com.cloud.api.response.GetVMPasswordResponse; -import com.cloud.api.response.UserVmResponse; +import org.apache.cloudstack.api.response.GetVMPasswordResponse; +import org.apache.cloudstack.api.response.UserVmResponse; import com.cloud.user.Account; import com.cloud.uservm.UserVm; diff --git a/api/src/org/apache/cloudstack/api/user/vm/command/ListVMsCmd.java b/api/src/org/apache/cloudstack/api/command/user/vm/ListVMsCmd.java similarity index 91% rename from api/src/org/apache/cloudstack/api/user/vm/command/ListVMsCmd.java rename to api/src/org/apache/cloudstack/api/command/user/vm/ListVMsCmd.java index 335a3261bca..220b9eee951 100644 --- a/api/src/org/apache/cloudstack/api/user/vm/command/ListVMsCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vm/ListVMsCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.user.vm.command; +package org.apache.cloudstack.api.command.user.vm; import java.util.ArrayList; import java.util.EnumSet; @@ -25,25 +25,24 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.ApiConstants.VMDetails; import org.apache.cloudstack.api.BaseListTaggedResourcesCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; -import com.cloud.api.response.HostResponse; -import com.cloud.api.response.InstanceGroupResponse; -import com.cloud.api.response.IsoVmResponse; -import com.cloud.api.response.ListResponse; -import com.cloud.api.response.NetworkResponse; -import com.cloud.api.response.PodResponse; -import com.cloud.api.response.StoragePoolResponse; -import com.cloud.api.response.TemplateResponse; -import com.cloud.api.response.UserVmResponse; -import com.cloud.api.response.VpcResponse; -import com.cloud.api.response.ZoneResponse; +import org.apache.cloudstack.api.response.HostResponse; +import org.apache.cloudstack.api.response.InstanceGroupResponse; +import org.apache.cloudstack.api.response.IsoVmResponse; +import org.apache.cloudstack.api.response.ListResponse; +import org.apache.cloudstack.api.response.NetworkResponse; +import org.apache.cloudstack.api.response.PodResponse; +import org.apache.cloudstack.api.response.StoragePoolResponse; +import org.apache.cloudstack.api.response.TemplateResponse; +import org.apache.cloudstack.api.response.UserVmResponse; +import org.apache.cloudstack.api.response.VpcResponse; +import org.apache.cloudstack.api.response.ZoneResponse; import com.cloud.async.AsyncJob; import com.cloud.exception.InvalidParameterValueException; import com.cloud.utils.Pair; -import com.cloud.api.view.vo.UserVmJoinVO; +import org.apache.cloudstack.api.view.vo.UserVmJoinVO; @Implementation(description="List the virtual machines owned by the account.", responseObject=UserVmResponse.class) diff --git a/api/src/org/apache/cloudstack/api/user/vm/command/RebootVMCmd.java b/api/src/org/apache/cloudstack/api/command/user/vm/RebootVMCmd.java similarity index 97% rename from api/src/org/apache/cloudstack/api/user/vm/command/RebootVMCmd.java rename to api/src/org/apache/cloudstack/api/command/user/vm/RebootVMCmd.java index 45ed4eef86e..6477d5d23f0 100644 --- a/api/src/org/apache/cloudstack/api/user/vm/command/RebootVMCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vm/RebootVMCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.user.vm.command; +package org.apache.cloudstack.api.command.user.vm; import org.apache.log4j.Logger; @@ -25,7 +25,7 @@ import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; -import com.cloud.api.response.UserVmResponse; +import org.apache.cloudstack.api.response.UserVmResponse; import com.cloud.async.AsyncJob; import com.cloud.event.EventTypes; import com.cloud.exception.InsufficientCapacityException; diff --git a/api/src/org/apache/cloudstack/api/user/vm/command/ResetVMPasswordCmd.java b/api/src/org/apache/cloudstack/api/command/user/vm/ResetVMPasswordCmd.java similarity index 97% rename from api/src/org/apache/cloudstack/api/user/vm/command/ResetVMPasswordCmd.java rename to api/src/org/apache/cloudstack/api/command/user/vm/ResetVMPasswordCmd.java index c41c51f14eb..c724245c820 100644 --- a/api/src/org/apache/cloudstack/api/user/vm/command/ResetVMPasswordCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vm/ResetVMPasswordCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.user.vm.command; +package org.apache.cloudstack.api.command.user.vm; import org.apache.log4j.Logger; @@ -25,7 +25,7 @@ import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; -import com.cloud.api.response.UserVmResponse; +import org.apache.cloudstack.api.response.UserVmResponse; import com.cloud.async.AsyncJob; import com.cloud.event.EventTypes; import com.cloud.exception.InsufficientCapacityException; diff --git a/api/src/org/apache/cloudstack/api/user/vm/command/RestoreVMCmd.java b/api/src/org/apache/cloudstack/api/command/user/vm/RestoreVMCmd.java similarity index 96% rename from api/src/org/apache/cloudstack/api/user/vm/command/RestoreVMCmd.java rename to api/src/org/apache/cloudstack/api/command/user/vm/RestoreVMCmd.java index 926362f4cfa..3a94a11b5d0 100644 --- a/api/src/org/apache/cloudstack/api/user/vm/command/RestoreVMCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vm/RestoreVMCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.user.vm.command; +package org.apache.cloudstack.api.command.user.vm; import org.apache.log4j.Logger; @@ -25,7 +25,7 @@ import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; -import com.cloud.api.response.UserVmResponse; +import org.apache.cloudstack.api.response.UserVmResponse; import com.cloud.event.EventTypes; import com.cloud.exception.ConcurrentOperationException; import com.cloud.exception.InsufficientCapacityException; diff --git a/api/src/org/apache/cloudstack/api/user/vm/command/StartVMCmd.java b/api/src/org/apache/cloudstack/api/command/user/vm/StartVMCmd.java similarity index 97% rename from api/src/org/apache/cloudstack/api/user/vm/command/StartVMCmd.java rename to api/src/org/apache/cloudstack/api/command/user/vm/StartVMCmd.java index f00e082a8fa..8e5877dec09 100644 --- a/api/src/org/apache/cloudstack/api/user/vm/command/StartVMCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vm/StartVMCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.user.vm.command; +package org.apache.cloudstack.api.command.user.vm; import org.apache.log4j.Logger; @@ -26,8 +26,8 @@ import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; -import com.cloud.api.response.HostResponse; -import com.cloud.api.response.UserVmResponse; +import org.apache.cloudstack.api.response.HostResponse; +import org.apache.cloudstack.api.response.UserVmResponse; import com.cloud.async.AsyncJob; import com.cloud.event.EventTypes; import com.cloud.exception.ConcurrentOperationException; diff --git a/api/src/org/apache/cloudstack/api/user/vm/command/StopVMCmd.java b/api/src/org/apache/cloudstack/api/command/user/vm/StopVMCmd.java similarity index 97% rename from api/src/org/apache/cloudstack/api/user/vm/command/StopVMCmd.java rename to api/src/org/apache/cloudstack/api/command/user/vm/StopVMCmd.java index 53262a212f6..9262327ed45 100644 --- a/api/src/org/apache/cloudstack/api/user/vm/command/StopVMCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vm/StopVMCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.user.vm.command; +package org.apache.cloudstack.api.command.user.vm; import org.apache.log4j.Logger; @@ -25,7 +25,7 @@ import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; -import com.cloud.api.response.UserVmResponse; +import org.apache.cloudstack.api.response.UserVmResponse; import com.cloud.async.AsyncJob; import com.cloud.event.EventTypes; import com.cloud.exception.ConcurrentOperationException; diff --git a/api/src/org/apache/cloudstack/api/user/vm/command/UpdateVMCmd.java b/api/src/org/apache/cloudstack/api/command/user/vm/UpdateVMCmd.java similarity index 96% rename from api/src/org/apache/cloudstack/api/user/vm/command/UpdateVMCmd.java rename to api/src/org/apache/cloudstack/api/command/user/vm/UpdateVMCmd.java index 4b4ecf44e63..a17366dec7d 100644 --- a/api/src/org/apache/cloudstack/api/user/vm/command/UpdateVMCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vm/UpdateVMCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.user.vm.command; +package org.apache.cloudstack.api.command.user.vm; import org.apache.log4j.Logger; @@ -25,8 +25,8 @@ import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; -import com.cloud.api.response.GuestOSResponse; -import com.cloud.api.response.UserVmResponse; +import org.apache.cloudstack.api.response.GuestOSResponse; +import org.apache.cloudstack.api.response.UserVmResponse; import com.cloud.exception.InsufficientCapacityException; import com.cloud.exception.ResourceUnavailableException; import com.cloud.user.Account; diff --git a/api/src/org/apache/cloudstack/api/user/vm/command/UpgradeVMCmd.java b/api/src/org/apache/cloudstack/api/command/user/vm/UpgradeVMCmd.java similarity index 96% rename from api/src/org/apache/cloudstack/api/user/vm/command/UpgradeVMCmd.java rename to api/src/org/apache/cloudstack/api/command/user/vm/UpgradeVMCmd.java index 995218ee6a2..c9390e91060 100644 --- a/api/src/org/apache/cloudstack/api/user/vm/command/UpgradeVMCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vm/UpgradeVMCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.user.vm.command; +package org.apache.cloudstack.api.command.user.vm; import org.apache.log4j.Logger; @@ -25,8 +25,8 @@ import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; -import com.cloud.api.response.DiskOfferingResponse; -import com.cloud.api.response.UserVmResponse; +import org.apache.cloudstack.api.response.DiskOfferingResponse; +import org.apache.cloudstack.api.response.UserVmResponse; import com.cloud.exception.InvalidParameterValueException; import com.cloud.offering.ServiceOffering; import com.cloud.user.Account; diff --git a/api/src/org/apache/cloudstack/api/user/vmgroup/command/CreateVMGroupCmd.java b/api/src/org/apache/cloudstack/api/command/user/vmgroup/CreateVMGroupCmd.java similarity index 93% rename from api/src/org/apache/cloudstack/api/user/vmgroup/command/CreateVMGroupCmd.java rename to api/src/org/apache/cloudstack/api/command/user/vmgroup/CreateVMGroupCmd.java index e452533b689..ad2d5ee4f31 100644 --- a/api/src/org/apache/cloudstack/api/user/vmgroup/command/CreateVMGroupCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vmgroup/CreateVMGroupCmd.java @@ -14,20 +14,19 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.user.vmgroup.command; +package org.apache.cloudstack.api.command.user.vmgroup; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; -import com.cloud.api.response.DomainResponse; -import com.cloud.api.response.InstanceGroupResponse; -import com.cloud.api.response.ProjectAccountResponse; +import org.apache.cloudstack.api.response.DomainResponse; +import org.apache.cloudstack.api.response.InstanceGroupResponse; +import org.apache.cloudstack.api.response.ProjectAccountResponse; import com.cloud.user.UserContext; import com.cloud.vm.InstanceGroup; diff --git a/api/src/org/apache/cloudstack/api/user/vmgroup/command/DeleteVMGroupCmd.java b/api/src/org/apache/cloudstack/api/command/user/vmgroup/DeleteVMGroupCmd.java similarity index 93% rename from api/src/org/apache/cloudstack/api/user/vmgroup/command/DeleteVMGroupCmd.java rename to api/src/org/apache/cloudstack/api/command/user/vmgroup/DeleteVMGroupCmd.java index 9001b6cf250..d81d5c413c0 100644 --- a/api/src/org/apache/cloudstack/api/user/vmgroup/command/DeleteVMGroupCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vmgroup/DeleteVMGroupCmd.java @@ -14,19 +14,18 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.user.vmgroup.command; +package org.apache.cloudstack.api.command.user.vmgroup; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; -import com.cloud.api.response.InstanceGroupResponse; -import com.cloud.api.response.SuccessResponse; +import org.apache.cloudstack.api.response.InstanceGroupResponse; +import org.apache.cloudstack.api.response.SuccessResponse; import com.cloud.user.Account; import com.cloud.vm.InstanceGroup; diff --git a/api/src/org/apache/cloudstack/api/user/vmgroup/command/ListVMGroupsCmd.java b/api/src/org/apache/cloudstack/api/command/user/vmgroup/ListVMGroupsCmd.java similarity index 95% rename from api/src/org/apache/cloudstack/api/user/vmgroup/command/ListVMGroupsCmd.java rename to api/src/org/apache/cloudstack/api/command/user/vmgroup/ListVMGroupsCmd.java index ff5158d89fa..c94571b9cd8 100644 --- a/api/src/org/apache/cloudstack/api/user/vmgroup/command/ListVMGroupsCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vmgroup/ListVMGroupsCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.user.vmgroup.command; +package org.apache.cloudstack.api.command.user.vmgroup; import java.util.ArrayList; import java.util.List; @@ -26,8 +26,8 @@ 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 com.cloud.api.response.InstanceGroupResponse; -import com.cloud.api.response.ListResponse; +import org.apache.cloudstack.api.response.InstanceGroupResponse; +import org.apache.cloudstack.api.response.ListResponse; import com.cloud.utils.Pair; import com.cloud.vm.InstanceGroup; diff --git a/api/src/org/apache/cloudstack/api/user/vmgroup/command/UpdateVMGroupCmd.java b/api/src/org/apache/cloudstack/api/command/user/vmgroup/UpdateVMGroupCmd.java similarity index 95% rename from api/src/org/apache/cloudstack/api/user/vmgroup/command/UpdateVMGroupCmd.java rename to api/src/org/apache/cloudstack/api/command/user/vmgroup/UpdateVMGroupCmd.java index 6735f16deab..5762db9fcff 100644 --- a/api/src/org/apache/cloudstack/api/user/vmgroup/command/UpdateVMGroupCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vmgroup/UpdateVMGroupCmd.java @@ -14,17 +14,16 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.user.vmgroup.command; +package org.apache.cloudstack.api.command.user.vmgroup; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; -import com.cloud.api.response.InstanceGroupResponse; +import org.apache.cloudstack.api.response.InstanceGroupResponse; import com.cloud.user.Account; import com.cloud.vm.InstanceGroup; diff --git a/api/src/org/apache/cloudstack/api/user/volume/command/AttachVolumeCmd.java b/api/src/org/apache/cloudstack/api/command/user/volume/AttachVolumeCmd.java old mode 100755 new mode 100644 similarity index 97% rename from api/src/org/apache/cloudstack/api/user/volume/command/AttachVolumeCmd.java rename to api/src/org/apache/cloudstack/api/command/user/volume/AttachVolumeCmd.java index 5dcd9168fbe..20a76286b9e --- a/api/src/org/apache/cloudstack/api/user/volume/command/AttachVolumeCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/volume/AttachVolumeCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.user.volume.command; +package org.apache.cloudstack.api.command.user.volume; import org.apache.log4j.Logger; @@ -25,7 +25,7 @@ import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; -import com.cloud.api.response.VolumeResponse; +import org.apache.cloudstack.api.response.VolumeResponse; import com.cloud.async.AsyncJob; import com.cloud.event.EventTypes; import com.cloud.storage.Volume; diff --git a/api/src/org/apache/cloudstack/api/user/volume/command/CreateVolumeCmd.java b/api/src/org/apache/cloudstack/api/command/user/volume/CreateVolumeCmd.java similarity index 98% rename from api/src/org/apache/cloudstack/api/user/volume/command/CreateVolumeCmd.java rename to api/src/org/apache/cloudstack/api/command/user/volume/CreateVolumeCmd.java index acc4598c4cd..6d235deee82 100644 --- a/api/src/org/apache/cloudstack/api/user/volume/command/CreateVolumeCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/volume/CreateVolumeCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.user.volume.command; +package org.apache.cloudstack.api.command.user.volume; import org.apache.log4j.Logger; @@ -25,7 +25,7 @@ import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; -import com.cloud.api.response.VolumeResponse; +import org.apache.cloudstack.api.response.VolumeResponse; import com.cloud.async.AsyncJob; import com.cloud.event.EventTypes; import com.cloud.exception.ResourceAllocationException; diff --git a/api/src/org/apache/cloudstack/api/user/volume/command/DeleteVolumeCmd.java b/api/src/org/apache/cloudstack/api/command/user/volume/DeleteVolumeCmd.java similarity index 96% rename from api/src/org/apache/cloudstack/api/user/volume/command/DeleteVolumeCmd.java rename to api/src/org/apache/cloudstack/api/command/user/volume/DeleteVolumeCmd.java index d6e44c39d98..4d6b6065d03 100644 --- a/api/src/org/apache/cloudstack/api/user/volume/command/DeleteVolumeCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/volume/DeleteVolumeCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.user.volume.command; +package org.apache.cloudstack.api.command.user.volume; import org.apache.log4j.Logger; @@ -24,7 +24,7 @@ import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; -import com.cloud.api.response.SuccessResponse; +import org.apache.cloudstack.api.response.SuccessResponse; import com.cloud.exception.ConcurrentOperationException; import com.cloud.storage.Volume; import com.cloud.user.Account; diff --git a/api/src/org/apache/cloudstack/api/user/volume/command/DetachVolumeCmd.java b/api/src/org/apache/cloudstack/api/command/user/volume/DetachVolumeCmd.java old mode 100755 new mode 100644 similarity index 97% rename from api/src/org/apache/cloudstack/api/user/volume/command/DetachVolumeCmd.java rename to api/src/org/apache/cloudstack/api/command/user/volume/DetachVolumeCmd.java index 03ffe14fdb5..d4df4453bc7 --- a/api/src/org/apache/cloudstack/api/user/volume/command/DetachVolumeCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/volume/DetachVolumeCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.user.volume.command; +package org.apache.cloudstack.api.command.user.volume; import org.apache.log4j.Logger; @@ -25,7 +25,7 @@ import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; -import com.cloud.api.response.VolumeResponse; +import org.apache.cloudstack.api.response.VolumeResponse; import com.cloud.async.AsyncJob; import com.cloud.event.EventTypes; import com.cloud.storage.Volume; diff --git a/api/src/org/apache/cloudstack/api/user/volume/command/ExtractVolumeCmd.java b/api/src/org/apache/cloudstack/api/command/user/volume/ExtractVolumeCmd.java old mode 100755 new mode 100644 similarity index 97% rename from api/src/org/apache/cloudstack/api/user/volume/command/ExtractVolumeCmd.java rename to api/src/org/apache/cloudstack/api/command/user/volume/ExtractVolumeCmd.java index 469b4861391..787e096f26a --- a/api/src/org/apache/cloudstack/api/user/volume/command/ExtractVolumeCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/volume/ExtractVolumeCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.user.volume.command; +package org.apache.cloudstack.api.command.user.volume; import java.net.URISyntaxException; @@ -27,7 +27,7 @@ import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; -import com.cloud.api.response.ExtractResponse; +import org.apache.cloudstack.api.response.ExtractResponse; import com.cloud.async.AsyncJob; import com.cloud.dc.DataCenter; import com.cloud.event.EventTypes; diff --git a/api/src/org/apache/cloudstack/api/user/volume/command/ListVolumesCmd.java b/api/src/org/apache/cloudstack/api/command/user/volume/ListVolumesCmd.java old mode 100755 new mode 100644 similarity index 96% rename from api/src/org/apache/cloudstack/api/user/volume/command/ListVolumesCmd.java rename to api/src/org/apache/cloudstack/api/command/user/volume/ListVolumesCmd.java index 1d6aac8c297..14d664e243e --- a/api/src/org/apache/cloudstack/api/user/volume/command/ListVolumesCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/volume/ListVolumesCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.user.volume.command; +package org.apache.cloudstack.api.command.user.volume; import java.util.ArrayList; import java.util.List; @@ -26,8 +26,8 @@ import org.apache.cloudstack.api.BaseListTaggedResourcesCmd; import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; -import com.cloud.api.response.ListResponse; -import com.cloud.api.response.VolumeResponse; +import org.apache.cloudstack.api.response.ListResponse; +import org.apache.cloudstack.api.response.VolumeResponse; import com.cloud.async.AsyncJob; import com.cloud.storage.Volume; import com.cloud.utils.Pair; diff --git a/api/src/org/apache/cloudstack/api/user/volume/command/MigrateVolumeCmd.java b/api/src/org/apache/cloudstack/api/command/user/volume/MigrateVolumeCmd.java similarity index 97% rename from api/src/org/apache/cloudstack/api/user/volume/command/MigrateVolumeCmd.java rename to api/src/org/apache/cloudstack/api/command/user/volume/MigrateVolumeCmd.java index 947e89a09e7..a1e8f35800c 100644 --- a/api/src/org/apache/cloudstack/api/user/volume/command/MigrateVolumeCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/volume/MigrateVolumeCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.user.volume.command; +package org.apache.cloudstack.api.command.user.volume; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseAsyncCmd; @@ -23,7 +23,7 @@ import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; -import com.cloud.api.response.VolumeResponse; +import org.apache.cloudstack.api.response.VolumeResponse; import com.cloud.event.EventTypes; import com.cloud.exception.ConcurrentOperationException; import com.cloud.storage.Volume; diff --git a/api/src/org/apache/cloudstack/api/user/volume/command/UploadVolumeCmd.java b/api/src/org/apache/cloudstack/api/command/user/volume/UploadVolumeCmd.java old mode 100755 new mode 100644 similarity index 97% rename from api/src/org/apache/cloudstack/api/user/volume/command/UploadVolumeCmd.java rename to api/src/org/apache/cloudstack/api/command/user/volume/UploadVolumeCmd.java index 164a4bb7f85..be150481e0b --- a/api/src/org/apache/cloudstack/api/user/volume/command/UploadVolumeCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/volume/UploadVolumeCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.user.volume.command; +package org.apache.cloudstack.api.command.user.volume; import org.apache.log4j.Logger; @@ -25,7 +25,7 @@ import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; -import com.cloud.api.response.VolumeResponse; +import org.apache.cloudstack.api.response.VolumeResponse; import com.cloud.event.EventTypes; import com.cloud.exception.ConcurrentOperationException; import com.cloud.exception.InsufficientCapacityException; diff --git a/api/src/org/apache/cloudstack/api/user/vpc/command/CreateStaticRouteCmd.java b/api/src/org/apache/cloudstack/api/command/user/vpc/CreateStaticRouteCmd.java similarity index 98% rename from api/src/org/apache/cloudstack/api/user/vpc/command/CreateStaticRouteCmd.java rename to api/src/org/apache/cloudstack/api/command/user/vpc/CreateStaticRouteCmd.java index bcd1bbb38b9..a1d2c5de6e9 100644 --- a/api/src/org/apache/cloudstack/api/user/vpc/command/CreateStaticRouteCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vpc/CreateStaticRouteCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.user.vpc.command; +package org.apache.cloudstack.api.command.user.vpc; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; @@ -25,7 +25,7 @@ import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; -import com.cloud.api.response.StaticRouteResponse; +import org.apache.cloudstack.api.response.StaticRouteResponse; import com.cloud.async.AsyncJob; import com.cloud.event.EventTypes; import com.cloud.exception.InvalidParameterValueException; diff --git a/api/src/org/apache/cloudstack/api/user/vpc/command/CreateVPCCmd.java b/api/src/org/apache/cloudstack/api/command/user/vpc/CreateVPCCmd.java similarity index 98% rename from api/src/org/apache/cloudstack/api/user/vpc/command/CreateVPCCmd.java rename to api/src/org/apache/cloudstack/api/command/user/vpc/CreateVPCCmd.java index c56f71587b7..111f9fac24f 100644 --- a/api/src/org/apache/cloudstack/api/user/vpc/command/CreateVPCCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vpc/CreateVPCCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.user.vpc.command; +package org.apache.cloudstack.api.command.user.vpc; import org.apache.log4j.Logger; @@ -25,7 +25,7 @@ import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; -import com.cloud.api.response.VpcResponse; +import org.apache.cloudstack.api.response.VpcResponse; import com.cloud.event.EventTypes; import com.cloud.exception.ConcurrentOperationException; import com.cloud.exception.InsufficientCapacityException; diff --git a/api/src/org/apache/cloudstack/api/user/vpc/command/DeleteStaticRouteCmd.java b/api/src/org/apache/cloudstack/api/command/user/vpc/DeleteStaticRouteCmd.java similarity index 97% rename from api/src/org/apache/cloudstack/api/user/vpc/command/DeleteStaticRouteCmd.java rename to api/src/org/apache/cloudstack/api/command/user/vpc/DeleteStaticRouteCmd.java index 1235729016d..f3f48254738 100644 --- a/api/src/org/apache/cloudstack/api/user/vpc/command/DeleteStaticRouteCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vpc/DeleteStaticRouteCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.user.vpc.command; +package org.apache.cloudstack.api.command.user.vpc; import org.apache.log4j.Logger; @@ -25,7 +25,7 @@ import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; -import com.cloud.api.response.SuccessResponse; +import org.apache.cloudstack.api.response.SuccessResponse; import com.cloud.async.AsyncJob; import com.cloud.event.EventTypes; import com.cloud.exception.InvalidParameterValueException; diff --git a/api/src/org/apache/cloudstack/api/user/vpc/command/DeleteVPCCmd.java b/api/src/org/apache/cloudstack/api/command/user/vpc/DeleteVPCCmd.java similarity index 97% rename from api/src/org/apache/cloudstack/api/user/vpc/command/DeleteVPCCmd.java rename to api/src/org/apache/cloudstack/api/command/user/vpc/DeleteVPCCmd.java index 78dbfc1499e..7165db7bdc1 100644 --- a/api/src/org/apache/cloudstack/api/user/vpc/command/DeleteVPCCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vpc/DeleteVPCCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.user.vpc.command; +package org.apache.cloudstack.api.command.user.vpc; import org.apache.log4j.Logger; @@ -25,7 +25,7 @@ import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; -import com.cloud.api.response.SuccessResponse; +import org.apache.cloudstack.api.response.SuccessResponse; import com.cloud.event.EventTypes; import com.cloud.exception.ConcurrentOperationException; import com.cloud.exception.ResourceUnavailableException; diff --git a/api/src/org/apache/cloudstack/api/user/vpc/command/ListPrivateGatewaysCmd.java b/api/src/org/apache/cloudstack/api/command/user/vpc/ListPrivateGatewaysCmd.java similarity index 95% rename from api/src/org/apache/cloudstack/api/user/vpc/command/ListPrivateGatewaysCmd.java rename to api/src/org/apache/cloudstack/api/command/user/vpc/ListPrivateGatewaysCmd.java index a76b07f51f8..3cde18c3c1f 100644 --- a/api/src/org/apache/cloudstack/api/user/vpc/command/ListPrivateGatewaysCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vpc/ListPrivateGatewaysCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.user.vpc.command; +package org.apache.cloudstack.api.command.user.vpc; import java.util.ArrayList; import java.util.List; @@ -26,8 +26,8 @@ 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 com.cloud.api.response.ListResponse; -import com.cloud.api.response.PrivateGatewayResponse; +import org.apache.cloudstack.api.response.ListResponse; +import org.apache.cloudstack.api.response.PrivateGatewayResponse; import com.cloud.network.vpc.PrivateGateway; import com.cloud.utils.Pair; diff --git a/api/src/org/apache/cloudstack/api/user/vpc/command/ListStaticRoutesCmd.java b/api/src/org/apache/cloudstack/api/command/user/vpc/ListStaticRoutesCmd.java similarity index 95% rename from api/src/org/apache/cloudstack/api/user/vpc/command/ListStaticRoutesCmd.java rename to api/src/org/apache/cloudstack/api/command/user/vpc/ListStaticRoutesCmd.java index e5ae9f07ffa..173db0cb02e 100644 --- a/api/src/org/apache/cloudstack/api/user/vpc/command/ListStaticRoutesCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vpc/ListStaticRoutesCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.user.vpc.command; +package org.apache.cloudstack.api.command.user.vpc; import java.util.ArrayList; import java.util.List; @@ -23,8 +23,8 @@ import org.apache.cloudstack.api.BaseListTaggedResourcesCmd; import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; -import com.cloud.api.response.ListResponse; -import com.cloud.api.response.StaticRouteResponse; +import org.apache.cloudstack.api.response.ListResponse; +import org.apache.cloudstack.api.response.StaticRouteResponse; import com.cloud.network.vpc.StaticRoute; import com.cloud.utils.Pair; diff --git a/api/src/org/apache/cloudstack/api/user/vpc/command/ListVPCOfferingsCmd.java b/api/src/org/apache/cloudstack/api/command/user/vpc/ListVPCOfferingsCmd.java similarity index 96% rename from api/src/org/apache/cloudstack/api/user/vpc/command/ListVPCOfferingsCmd.java rename to api/src/org/apache/cloudstack/api/command/user/vpc/ListVPCOfferingsCmd.java index 727b43c33f7..04b2d9a4c41 100644 --- a/api/src/org/apache/cloudstack/api/user/vpc/command/ListVPCOfferingsCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vpc/ListVPCOfferingsCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.user.vpc.command; +package org.apache.cloudstack.api.command.user.vpc; import java.util.ArrayList; import java.util.List; @@ -26,8 +26,8 @@ import org.apache.cloudstack.api.BaseListCmd; import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; -import com.cloud.api.response.ListResponse; -import com.cloud.api.response.VpcOfferingResponse; +import org.apache.cloudstack.api.response.ListResponse; +import org.apache.cloudstack.api.response.VpcOfferingResponse; import com.cloud.network.vpc.VpcOffering; @Implementation(description="Lists VPC offerings", responseObject=VpcOfferingResponse.class) diff --git a/api/src/org/apache/cloudstack/api/user/vpc/command/ListVPCsCmd.java b/api/src/org/apache/cloudstack/api/command/user/vpc/ListVPCsCmd.java similarity index 97% rename from api/src/org/apache/cloudstack/api/user/vpc/command/ListVPCsCmd.java rename to api/src/org/apache/cloudstack/api/command/user/vpc/ListVPCsCmd.java index 657dbd84be7..9a244c349d5 100644 --- a/api/src/org/apache/cloudstack/api/user/vpc/command/ListVPCsCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vpc/ListVPCsCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.user.vpc.command; +package org.apache.cloudstack.api.command.user.vpc; import java.util.ArrayList; import java.util.List; @@ -26,8 +26,8 @@ import org.apache.cloudstack.api.BaseListTaggedResourcesCmd; import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; -import com.cloud.api.response.ListResponse; -import com.cloud.api.response.VpcResponse; +import org.apache.cloudstack.api.response.ListResponse; +import org.apache.cloudstack.api.response.VpcResponse; import com.cloud.network.vpc.Vpc; diff --git a/api/src/org/apache/cloudstack/api/user/vpc/command/RestartVPCCmd.java b/api/src/org/apache/cloudstack/api/command/user/vpc/RestartVPCCmd.java similarity index 96% rename from api/src/org/apache/cloudstack/api/user/vpc/command/RestartVPCCmd.java rename to api/src/org/apache/cloudstack/api/command/user/vpc/RestartVPCCmd.java index 8421cdeef94..e954474ab29 100644 --- a/api/src/org/apache/cloudstack/api/user/vpc/command/RestartVPCCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vpc/RestartVPCCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.user.vpc.command; +package org.apache.cloudstack.api.command.user.vpc; import org.apache.log4j.Logger; @@ -25,8 +25,8 @@ import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; -import com.cloud.api.response.SuccessResponse; -import com.cloud.api.response.VpcResponse; +import org.apache.cloudstack.api.response.SuccessResponse; +import org.apache.cloudstack.api.response.VpcResponse; import com.cloud.event.EventTypes; import com.cloud.exception.ConcurrentOperationException; import com.cloud.exception.InsufficientCapacityException; diff --git a/api/src/org/apache/cloudstack/api/user/vpc/command/UpdateVPCCmd.java b/api/src/org/apache/cloudstack/api/command/user/vpc/UpdateVPCCmd.java similarity index 97% rename from api/src/org/apache/cloudstack/api/user/vpc/command/UpdateVPCCmd.java rename to api/src/org/apache/cloudstack/api/command/user/vpc/UpdateVPCCmd.java index 14b8ce7b97a..a0c16e15a0a 100644 --- a/api/src/org/apache/cloudstack/api/user/vpc/command/UpdateVPCCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vpc/UpdateVPCCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.user.vpc.command; +package org.apache.cloudstack.api.command.user.vpc; import org.apache.log4j.Logger; @@ -25,7 +25,7 @@ import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; -import com.cloud.api.response.VpcResponse; +import org.apache.cloudstack.api.response.VpcResponse; import com.cloud.event.EventTypes; import com.cloud.network.vpc.Vpc; import com.cloud.user.Account; diff --git a/api/src/org/apache/cloudstack/api/user/vpn/command/CreateRemoteAccessVpnCmd.java b/api/src/org/apache/cloudstack/api/command/user/vpn/CreateRemoteAccessVpnCmd.java similarity index 98% rename from api/src/org/apache/cloudstack/api/user/vpn/command/CreateRemoteAccessVpnCmd.java rename to api/src/org/apache/cloudstack/api/command/user/vpn/CreateRemoteAccessVpnCmd.java index 161c064096f..4d9e685467a 100644 --- a/api/src/org/apache/cloudstack/api/user/vpn/command/CreateRemoteAccessVpnCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vpn/CreateRemoteAccessVpnCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.user.vpn.command; +package org.apache.cloudstack.api.command.user.vpn; import org.apache.log4j.Logger; @@ -26,7 +26,7 @@ import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; -import com.cloud.api.response.RemoteAccessVpnResponse; +import org.apache.cloudstack.api.response.RemoteAccessVpnResponse; import com.cloud.event.EventTypes; import com.cloud.exception.InvalidParameterValueException; import com.cloud.exception.NetworkRuleConflictException; diff --git a/api/src/org/apache/cloudstack/api/user/vpn/command/CreateVpnConnectionCmd.java b/api/src/org/apache/cloudstack/api/command/user/vpn/CreateVpnConnectionCmd.java similarity index 97% rename from api/src/org/apache/cloudstack/api/user/vpn/command/CreateVpnConnectionCmd.java rename to api/src/org/apache/cloudstack/api/command/user/vpn/CreateVpnConnectionCmd.java index b3d2824e90a..99567bf09b5 100644 --- a/api/src/org/apache/cloudstack/api/user/vpn/command/CreateVpnConnectionCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vpn/CreateVpnConnectionCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.user.vpn.command; +package org.apache.cloudstack.api.command.user.vpn; import org.apache.log4j.Logger; @@ -26,7 +26,7 @@ import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; -import com.cloud.api.response.Site2SiteVpnConnectionResponse; +import org.apache.cloudstack.api.response.Site2SiteVpnConnectionResponse; import com.cloud.event.EventTypes; import com.cloud.exception.NetworkRuleConflictException; import com.cloud.exception.ResourceUnavailableException; diff --git a/api/src/org/apache/cloudstack/api/user/vpn/command/CreateVpnCustomerGatewayCmd.java b/api/src/org/apache/cloudstack/api/command/user/vpn/CreateVpnCustomerGatewayCmd.java similarity index 97% rename from api/src/org/apache/cloudstack/api/user/vpn/command/CreateVpnCustomerGatewayCmd.java rename to api/src/org/apache/cloudstack/api/command/user/vpn/CreateVpnCustomerGatewayCmd.java index 99cb62b1f15..af335402e0e 100644 --- a/api/src/org/apache/cloudstack/api/user/vpn/command/CreateVpnCustomerGatewayCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vpn/CreateVpnCustomerGatewayCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.user.vpn.command; +package org.apache.cloudstack.api.command.user.vpn; import org.apache.log4j.Logger; @@ -25,7 +25,7 @@ import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; -import com.cloud.api.response.Site2SiteCustomerGatewayResponse; +import org.apache.cloudstack.api.response.Site2SiteCustomerGatewayResponse; import com.cloud.event.EventTypes; import com.cloud.network.Site2SiteCustomerGateway; import com.cloud.user.UserContext; diff --git a/api/src/org/apache/cloudstack/api/user/vpn/command/CreateVpnGatewayCmd.java b/api/src/org/apache/cloudstack/api/command/user/vpn/CreateVpnGatewayCmd.java similarity index 96% rename from api/src/org/apache/cloudstack/api/user/vpn/command/CreateVpnGatewayCmd.java rename to api/src/org/apache/cloudstack/api/command/user/vpn/CreateVpnGatewayCmd.java index 7a13c028c64..22c77511801 100644 --- a/api/src/org/apache/cloudstack/api/user/vpn/command/CreateVpnGatewayCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vpn/CreateVpnGatewayCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.user.vpn.command; +package org.apache.cloudstack.api.command.user.vpn; import org.apache.log4j.Logger; @@ -25,7 +25,7 @@ import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; -import com.cloud.api.response.Site2SiteVpnGatewayResponse; +import org.apache.cloudstack.api.response.Site2SiteVpnGatewayResponse; import com.cloud.event.EventTypes; import com.cloud.network.Site2SiteVpnGateway; import com.cloud.network.vpc.Vpc; diff --git a/api/src/org/apache/cloudstack/api/user/vpn/command/DeleteRemoteAccessVpnCmd.java b/api/src/org/apache/cloudstack/api/command/user/vpn/DeleteRemoteAccessVpnCmd.java similarity index 97% rename from api/src/org/apache/cloudstack/api/user/vpn/command/DeleteRemoteAccessVpnCmd.java rename to api/src/org/apache/cloudstack/api/command/user/vpn/DeleteRemoteAccessVpnCmd.java index 03baf97d47b..38a050a94f2 100644 --- a/api/src/org/apache/cloudstack/api/user/vpn/command/DeleteRemoteAccessVpnCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vpn/DeleteRemoteAccessVpnCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.user.vpn.command; +package org.apache.cloudstack.api.command.user.vpn; import org.apache.log4j.Logger; @@ -23,7 +23,7 @@ import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; -import com.cloud.api.response.SuccessResponse; +import org.apache.cloudstack.api.response.SuccessResponse; import com.cloud.event.EventTypes; import com.cloud.exception.InvalidParameterValueException; import com.cloud.exception.ResourceUnavailableException; diff --git a/api/src/org/apache/cloudstack/api/user/vpn/command/DeleteVpnConnectionCmd.java b/api/src/org/apache/cloudstack/api/command/user/vpn/DeleteVpnConnectionCmd.java similarity index 97% rename from api/src/org/apache/cloudstack/api/user/vpn/command/DeleteVpnConnectionCmd.java rename to api/src/org/apache/cloudstack/api/command/user/vpn/DeleteVpnConnectionCmd.java index 19603bc33b2..98c0c55ec8a 100644 --- a/api/src/org/apache/cloudstack/api/user/vpn/command/DeleteVpnConnectionCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vpn/DeleteVpnConnectionCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.user.vpn.command; +package org.apache.cloudstack.api.command.user.vpn; import org.apache.log4j.Logger; @@ -25,7 +25,7 @@ import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; -import com.cloud.api.response.SuccessResponse; +import org.apache.cloudstack.api.response.SuccessResponse; import com.cloud.event.EventTypes; import com.cloud.exception.ResourceUnavailableException; import com.cloud.network.Site2SiteVpnConnection; diff --git a/api/src/org/apache/cloudstack/api/user/vpn/command/DeleteVpnCustomerGatewayCmd.java b/api/src/org/apache/cloudstack/api/command/user/vpn/DeleteVpnCustomerGatewayCmd.java similarity index 96% rename from api/src/org/apache/cloudstack/api/user/vpn/command/DeleteVpnCustomerGatewayCmd.java rename to api/src/org/apache/cloudstack/api/command/user/vpn/DeleteVpnCustomerGatewayCmd.java index 7002d93e261..f6c25bf2b0c 100644 --- a/api/src/org/apache/cloudstack/api/user/vpn/command/DeleteVpnCustomerGatewayCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vpn/DeleteVpnCustomerGatewayCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.user.vpn.command; +package org.apache.cloudstack.api.command.user.vpn; import org.apache.log4j.Logger; @@ -25,7 +25,7 @@ import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; -import com.cloud.api.response.SuccessResponse; +import org.apache.cloudstack.api.response.SuccessResponse; import com.cloud.event.EventTypes; import com.cloud.network.Site2SiteCustomerGateway; import com.cloud.user.Account; diff --git a/api/src/org/apache/cloudstack/api/user/vpn/command/DeleteVpnGatewayCmd.java b/api/src/org/apache/cloudstack/api/command/user/vpn/DeleteVpnGatewayCmd.java similarity index 96% rename from api/src/org/apache/cloudstack/api/user/vpn/command/DeleteVpnGatewayCmd.java rename to api/src/org/apache/cloudstack/api/command/user/vpn/DeleteVpnGatewayCmd.java index b5c4c9f35d2..fcc3c9b8783 100644 --- a/api/src/org/apache/cloudstack/api/user/vpn/command/DeleteVpnGatewayCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vpn/DeleteVpnGatewayCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.user.vpn.command; +package org.apache.cloudstack.api.command.user.vpn; import org.apache.log4j.Logger; @@ -25,7 +25,7 @@ import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; -import com.cloud.api.response.SuccessResponse; +import org.apache.cloudstack.api.response.SuccessResponse; import com.cloud.event.EventTypes; import com.cloud.network.Site2SiteVpnGateway; import com.cloud.user.Account; diff --git a/api/src/org/apache/cloudstack/api/user/vpn/command/ListRemoteAccessVpnsCmd.java b/api/src/org/apache/cloudstack/api/command/user/vpn/ListRemoteAccessVpnsCmd.java similarity index 94% rename from api/src/org/apache/cloudstack/api/user/vpn/command/ListRemoteAccessVpnsCmd.java rename to api/src/org/apache/cloudstack/api/command/user/vpn/ListRemoteAccessVpnsCmd.java index 1125fbab981..210b864e240 100644 --- a/api/src/org/apache/cloudstack/api/user/vpn/command/ListRemoteAccessVpnsCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vpn/ListRemoteAccessVpnsCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.user.vpn.command; +package org.apache.cloudstack.api.command.user.vpn; import java.util.ArrayList; import java.util.List; @@ -26,8 +26,8 @@ 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 com.cloud.api.response.ListResponse; -import com.cloud.api.response.RemoteAccessVpnResponse; +import org.apache.cloudstack.api.response.ListResponse; +import org.apache.cloudstack.api.response.RemoteAccessVpnResponse; import com.cloud.network.RemoteAccessVpn; import com.cloud.utils.Pair; diff --git a/api/src/org/apache/cloudstack/api/user/vpn/command/ListVpnConnectionsCmd.java b/api/src/org/apache/cloudstack/api/command/user/vpn/ListVpnConnectionsCmd.java similarity index 95% rename from api/src/org/apache/cloudstack/api/user/vpn/command/ListVpnConnectionsCmd.java rename to api/src/org/apache/cloudstack/api/command/user/vpn/ListVpnConnectionsCmd.java index 276cbc0a8ee..36bc89c6d75 100644 --- a/api/src/org/apache/cloudstack/api/user/vpn/command/ListVpnConnectionsCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vpn/ListVpnConnectionsCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.user.vpn.command; +package org.apache.cloudstack.api.command.user.vpn; import java.util.ArrayList; import java.util.List; @@ -26,8 +26,8 @@ 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 com.cloud.api.response.ListResponse; -import com.cloud.api.response.Site2SiteVpnConnectionResponse; +import org.apache.cloudstack.api.response.ListResponse; +import org.apache.cloudstack.api.response.Site2SiteVpnConnectionResponse; import com.cloud.network.Site2SiteVpnConnection; import com.cloud.utils.Pair; diff --git a/api/src/org/apache/cloudstack/api/user/vpn/command/ListVpnCustomerGatewaysCmd.java b/api/src/org/apache/cloudstack/api/command/user/vpn/ListVpnCustomerGatewaysCmd.java similarity index 94% rename from api/src/org/apache/cloudstack/api/user/vpn/command/ListVpnCustomerGatewaysCmd.java rename to api/src/org/apache/cloudstack/api/command/user/vpn/ListVpnCustomerGatewaysCmd.java index 474cc151906..b1836e99d7b 100644 --- a/api/src/org/apache/cloudstack/api/user/vpn/command/ListVpnCustomerGatewaysCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vpn/ListVpnCustomerGatewaysCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.user.vpn.command; +package org.apache.cloudstack.api.command.user.vpn; import java.util.ArrayList; import java.util.List; @@ -26,8 +26,8 @@ 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 com.cloud.api.response.ListResponse; -import com.cloud.api.response.Site2SiteCustomerGatewayResponse; +import org.apache.cloudstack.api.response.ListResponse; +import org.apache.cloudstack.api.response.Site2SiteCustomerGatewayResponse; import com.cloud.network.Site2SiteCustomerGateway; import com.cloud.utils.Pair; diff --git a/api/src/org/apache/cloudstack/api/user/vpn/command/ListVpnGatewaysCmd.java b/api/src/org/apache/cloudstack/api/command/user/vpn/ListVpnGatewaysCmd.java similarity index 95% rename from api/src/org/apache/cloudstack/api/user/vpn/command/ListVpnGatewaysCmd.java rename to api/src/org/apache/cloudstack/api/command/user/vpn/ListVpnGatewaysCmd.java index 05075025250..239d5033745 100644 --- a/api/src/org/apache/cloudstack/api/user/vpn/command/ListVpnGatewaysCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vpn/ListVpnGatewaysCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.user.vpn.command; +package org.apache.cloudstack.api.command.user.vpn; import java.util.ArrayList; import java.util.List; @@ -26,8 +26,8 @@ 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 com.cloud.api.response.ListResponse; -import com.cloud.api.response.Site2SiteVpnGatewayResponse; +import org.apache.cloudstack.api.response.ListResponse; +import org.apache.cloudstack.api.response.Site2SiteVpnGatewayResponse; import com.cloud.network.Site2SiteVpnGateway; import com.cloud.utils.Pair; diff --git a/api/src/org/apache/cloudstack/api/user/vpn/command/ResetVpnConnectionCmd.java b/api/src/org/apache/cloudstack/api/command/user/vpn/ResetVpnConnectionCmd.java similarity index 97% rename from api/src/org/apache/cloudstack/api/user/vpn/command/ResetVpnConnectionCmd.java rename to api/src/org/apache/cloudstack/api/command/user/vpn/ResetVpnConnectionCmd.java index 8be9d9296c5..6d6f240efc0 100644 --- a/api/src/org/apache/cloudstack/api/user/vpn/command/ResetVpnConnectionCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vpn/ResetVpnConnectionCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.user.vpn.command; +package org.apache.cloudstack.api.command.user.vpn; import org.apache.log4j.Logger; @@ -25,7 +25,7 @@ import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; -import com.cloud.api.response.Site2SiteVpnConnectionResponse; +import org.apache.cloudstack.api.response.Site2SiteVpnConnectionResponse; import com.cloud.event.EventTypes; import com.cloud.exception.ResourceUnavailableException; import com.cloud.network.Site2SiteVpnConnection; diff --git a/api/src/org/apache/cloudstack/api/user/vpn/command/UpdateVpnCustomerGatewayCmd.java b/api/src/org/apache/cloudstack/api/command/user/vpn/UpdateVpnCustomerGatewayCmd.java similarity index 98% rename from api/src/org/apache/cloudstack/api/user/vpn/command/UpdateVpnCustomerGatewayCmd.java rename to api/src/org/apache/cloudstack/api/command/user/vpn/UpdateVpnCustomerGatewayCmd.java index 760599896f9..7520c6dc2a8 100644 --- a/api/src/org/apache/cloudstack/api/user/vpn/command/UpdateVpnCustomerGatewayCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vpn/UpdateVpnCustomerGatewayCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.user.vpn.command; +package org.apache.cloudstack.api.command.user.vpn; import org.apache.log4j.Logger; @@ -25,7 +25,7 @@ import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; -import com.cloud.api.response.Site2SiteCustomerGatewayResponse; +import org.apache.cloudstack.api.response.Site2SiteCustomerGatewayResponse; import com.cloud.event.EventTypes; import com.cloud.network.Site2SiteCustomerGateway; import com.cloud.user.UserContext; diff --git a/api/src/org/apache/cloudstack/api/user/zone/command/ListZonesByCmd.java b/api/src/org/apache/cloudstack/api/command/user/zone/ListZonesByCmd.java old mode 100755 new mode 100644 similarity index 95% rename from api/src/org/apache/cloudstack/api/user/zone/command/ListZonesByCmd.java rename to api/src/org/apache/cloudstack/api/command/user/zone/ListZonesByCmd.java index 16403b840b6..7bb6549514d --- a/api/src/org/apache/cloudstack/api/user/zone/command/ListZonesByCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/zone/ListZonesByCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.user.zone.command; +package org.apache.cloudstack.api.command.user.zone; import java.util.ArrayList; import java.util.List; @@ -26,8 +26,8 @@ import org.apache.cloudstack.api.BaseListCmd; import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; -import com.cloud.api.response.ListResponse; -import com.cloud.api.response.ZoneResponse; +import org.apache.cloudstack.api.response.ListResponse; +import org.apache.cloudstack.api.response.ZoneResponse; import com.cloud.dc.DataCenter; @Implementation(description="Lists zones", responseObject=ZoneResponse.class) diff --git a/api/src/com/cloud/api/response/AccountResponse.java b/api/src/org/apache/cloudstack/api/response/AccountResponse.java old mode 100755 new mode 100644 similarity index 99% rename from api/src/com/cloud/api/response/AccountResponse.java rename to api/src/org/apache/cloudstack/api/response/AccountResponse.java index 169dba28816..3fa5f7ed8d6 --- a/api/src/com/cloud/api/response/AccountResponse.java +++ b/api/src/org/apache/cloudstack/api/response/AccountResponse.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.response; +package org.apache.cloudstack.api.response; import java.util.List; import java.util.Map; @@ -23,6 +23,7 @@ import org.apache.cloudstack.api.ApiConstants; import com.cloud.serializer.Param; import com.cloud.utils.IdentityProxy; import com.google.gson.annotations.SerializedName; +import org.apache.cloudstack.api.BaseResponse; @SuppressWarnings("unused") public class AccountResponse extends BaseResponse { diff --git a/api/src/com/cloud/api/response/AlertResponse.java b/api/src/org/apache/cloudstack/api/response/AlertResponse.java similarity index 96% rename from api/src/com/cloud/api/response/AlertResponse.java rename to api/src/org/apache/cloudstack/api/response/AlertResponse.java index dc97dc8a8dd..c35aad21bc8 100644 --- a/api/src/com/cloud/api/response/AlertResponse.java +++ b/api/src/org/apache/cloudstack/api/response/AlertResponse.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.response; +package org.apache.cloudstack.api.response; import java.util.Date; @@ -22,6 +22,7 @@ import org.apache.cloudstack.api.ApiConstants; import com.cloud.utils.IdentityProxy; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; +import org.apache.cloudstack.api.BaseResponse; @SuppressWarnings("unused") public class AlertResponse extends BaseResponse { diff --git a/api/src/com/cloud/api/response/AsyncJobResponse.java b/api/src/org/apache/cloudstack/api/response/AsyncJobResponse.java similarity index 98% rename from api/src/com/cloud/api/response/AsyncJobResponse.java rename to api/src/org/apache/cloudstack/api/response/AsyncJobResponse.java index 9dc43130631..d255ec42359 100644 --- a/api/src/com/cloud/api/response/AsyncJobResponse.java +++ b/api/src/org/apache/cloudstack/api/response/AsyncJobResponse.java @@ -14,11 +14,12 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.response; +package org.apache.cloudstack.api.response; import java.util.Date; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseResponse; import org.apache.cloudstack.api.ResponseObject; import com.cloud.async.AsyncJob; import com.cloud.serializer.Param; diff --git a/api/src/com/cloud/api/response/AutoScalePolicyResponse.java b/api/src/org/apache/cloudstack/api/response/AutoScalePolicyResponse.java similarity index 97% rename from api/src/com/cloud/api/response/AutoScalePolicyResponse.java rename to api/src/org/apache/cloudstack/api/response/AutoScalePolicyResponse.java index 52a2f93ef94..681147f6d0a 100644 --- a/api/src/com/cloud/api/response/AutoScalePolicyResponse.java +++ b/api/src/org/apache/cloudstack/api/response/AutoScalePolicyResponse.java @@ -14,12 +14,13 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.response; +package org.apache.cloudstack.api.response; import org.apache.cloudstack.api.ApiConstants; import com.cloud.utils.IdentityProxy; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; +import org.apache.cloudstack.api.BaseResponse; import java.util.List; diff --git a/api/src/com/cloud/api/response/AutoScaleVmGroupResponse.java b/api/src/org/apache/cloudstack/api/response/AutoScaleVmGroupResponse.java similarity index 98% rename from api/src/com/cloud/api/response/AutoScaleVmGroupResponse.java rename to api/src/org/apache/cloudstack/api/response/AutoScaleVmGroupResponse.java index e3955778575..6f2a28df87f 100644 --- a/api/src/com/cloud/api/response/AutoScaleVmGroupResponse.java +++ b/api/src/org/apache/cloudstack/api/response/AutoScaleVmGroupResponse.java @@ -14,12 +14,13 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.response; +package org.apache.cloudstack.api.response; import org.apache.cloudstack.api.ApiConstants; import com.cloud.utils.IdentityProxy; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; +import org.apache.cloudstack.api.BaseResponse; import java.util.List; diff --git a/api/src/com/cloud/api/response/AutoScaleVmProfileResponse.java b/api/src/org/apache/cloudstack/api/response/AutoScaleVmProfileResponse.java similarity index 98% rename from api/src/com/cloud/api/response/AutoScaleVmProfileResponse.java rename to api/src/org/apache/cloudstack/api/response/AutoScaleVmProfileResponse.java index 1d0525b475f..7205daa7ad3 100644 --- a/api/src/com/cloud/api/response/AutoScaleVmProfileResponse.java +++ b/api/src/org/apache/cloudstack/api/response/AutoScaleVmProfileResponse.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.response; +package org.apache.cloudstack.api.response; import java.util.HashMap; import java.util.List; @@ -22,6 +22,7 @@ import java.util.Map; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseCmd.CommandType; +import org.apache.cloudstack.api.BaseResponse; import org.apache.cloudstack.api.Parameter; import com.cloud.serializer.Param; import com.cloud.utils.IdentityProxy; diff --git a/api/src/com/cloud/api/response/CapabilitiesResponse.java b/api/src/org/apache/cloudstack/api/response/CapabilitiesResponse.java similarity index 97% rename from api/src/com/cloud/api/response/CapabilitiesResponse.java rename to api/src/org/apache/cloudstack/api/response/CapabilitiesResponse.java index fbcb385de01..20d160dd2d5 100644 --- a/api/src/com/cloud/api/response/CapabilitiesResponse.java +++ b/api/src/org/apache/cloudstack/api/response/CapabilitiesResponse.java @@ -14,11 +14,12 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.response; +package org.apache.cloudstack.api.response; import org.apache.cloudstack.api.ApiConstants; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; +import org.apache.cloudstack.api.BaseResponse; @SuppressWarnings("unused") public class CapabilitiesResponse extends BaseResponse { diff --git a/api/src/com/cloud/api/response/CapabilityResponse.java b/api/src/org/apache/cloudstack/api/response/CapabilityResponse.java similarity index 95% rename from api/src/com/cloud/api/response/CapabilityResponse.java rename to api/src/org/apache/cloudstack/api/response/CapabilityResponse.java index adb3b26895e..5fe3072fe87 100644 --- a/api/src/com/cloud/api/response/CapabilityResponse.java +++ b/api/src/org/apache/cloudstack/api/response/CapabilityResponse.java @@ -14,11 +14,12 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.response; +package org.apache.cloudstack.api.response; import org.apache.cloudstack.api.ApiConstants; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; +import org.apache.cloudstack.api.BaseResponse; public class CapabilityResponse extends BaseResponse { diff --git a/api/src/com/cloud/api/response/CapacityResponse.java b/api/src/org/apache/cloudstack/api/response/CapacityResponse.java old mode 100755 new mode 100644 similarity index 97% rename from api/src/com/cloud/api/response/CapacityResponse.java rename to api/src/org/apache/cloudstack/api/response/CapacityResponse.java index a631bf0d274..a826d5594c4 --- a/api/src/com/cloud/api/response/CapacityResponse.java +++ b/api/src/org/apache/cloudstack/api/response/CapacityResponse.java @@ -14,12 +14,13 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.response; +package org.apache.cloudstack.api.response; import org.apache.cloudstack.api.ApiConstants; import com.cloud.utils.IdentityProxy; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; +import org.apache.cloudstack.api.BaseResponse; public class CapacityResponse extends BaseResponse { @SerializedName(ApiConstants.TYPE) @Param(description="the capacity type") diff --git a/api/src/com/cloud/api/response/CloudIdentifierResponse.java b/api/src/org/apache/cloudstack/api/response/CloudIdentifierResponse.java similarity index 95% rename from api/src/com/cloud/api/response/CloudIdentifierResponse.java rename to api/src/org/apache/cloudstack/api/response/CloudIdentifierResponse.java index a6e6b375ebf..2da1221b804 100644 --- a/api/src/com/cloud/api/response/CloudIdentifierResponse.java +++ b/api/src/org/apache/cloudstack/api/response/CloudIdentifierResponse.java @@ -14,12 +14,13 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.response; +package org.apache.cloudstack.api.response; import org.apache.cloudstack.api.ApiConstants; import com.cloud.utils.IdentityProxy; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; +import org.apache.cloudstack.api.BaseResponse; public class CloudIdentifierResponse extends BaseResponse { diff --git a/api/src/com/cloud/api/response/ClusterResponse.java b/api/src/org/apache/cloudstack/api/response/ClusterResponse.java old mode 100755 new mode 100644 similarity index 97% rename from api/src/com/cloud/api/response/ClusterResponse.java rename to api/src/org/apache/cloudstack/api/response/ClusterResponse.java index 811731cbe10..f6578558e84 --- a/api/src/com/cloud/api/response/ClusterResponse.java +++ b/api/src/org/apache/cloudstack/api/response/ClusterResponse.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.response; +package org.apache.cloudstack.api.response; import java.util.ArrayList; import java.util.List; @@ -23,6 +23,7 @@ import org.apache.cloudstack.api.ApiConstants; import com.cloud.utils.IdentityProxy; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; +import org.apache.cloudstack.api.BaseResponse; public class ClusterResponse extends BaseResponse { @SerializedName(ApiConstants.ID) @Param(description="the cluster ID") diff --git a/api/src/com/cloud/api/response/ConditionResponse.java b/api/src/org/apache/cloudstack/api/response/ConditionResponse.java similarity index 97% rename from api/src/com/cloud/api/response/ConditionResponse.java rename to api/src/org/apache/cloudstack/api/response/ConditionResponse.java index 3f846ed54c2..144d4f33066 100644 --- a/api/src/com/cloud/api/response/ConditionResponse.java +++ b/api/src/org/apache/cloudstack/api/response/ConditionResponse.java @@ -15,7 +15,7 @@ // specific language governing permissions and limitations // under the License. -package com.cloud.api.response; +package org.apache.cloudstack.api.response; import java.util.List; @@ -23,6 +23,7 @@ import org.apache.cloudstack.api.ApiConstants; import com.cloud.serializer.Param; import com.cloud.utils.IdentityProxy; import com.google.gson.annotations.SerializedName; +import org.apache.cloudstack.api.BaseResponse; @SuppressWarnings("unused") public class ConditionResponse extends BaseResponse implements ControlledEntityResponse { diff --git a/api/src/com/cloud/api/response/ConfigurationResponse.java b/api/src/org/apache/cloudstack/api/response/ConfigurationResponse.java similarity index 95% rename from api/src/com/cloud/api/response/ConfigurationResponse.java rename to api/src/org/apache/cloudstack/api/response/ConfigurationResponse.java index 9a21f00ae04..ded0fb5fb39 100644 --- a/api/src/com/cloud/api/response/ConfigurationResponse.java +++ b/api/src/org/apache/cloudstack/api/response/ConfigurationResponse.java @@ -14,11 +14,12 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.response; +package org.apache.cloudstack.api.response; import org.apache.cloudstack.api.ApiConstants; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; +import org.apache.cloudstack.api.BaseResponse; public class ConfigurationResponse extends BaseResponse { @SerializedName(ApiConstants.CATEGORY) @Param(description="the category of the configuration") diff --git a/api/src/com/cloud/api/response/ControlledEntityResponse.java b/api/src/org/apache/cloudstack/api/response/ControlledEntityResponse.java similarity index 96% rename from api/src/com/cloud/api/response/ControlledEntityResponse.java rename to api/src/org/apache/cloudstack/api/response/ControlledEntityResponse.java index f44efa48159..250e432961a 100644 --- a/api/src/com/cloud/api/response/ControlledEntityResponse.java +++ b/api/src/org/apache/cloudstack/api/response/ControlledEntityResponse.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.response; +package org.apache.cloudstack.api.response; public interface ControlledEntityResponse { diff --git a/api/src/com/cloud/api/response/ControlledViewEntityResponse.java b/api/src/org/apache/cloudstack/api/response/ControlledViewEntityResponse.java similarity index 96% rename from api/src/com/cloud/api/response/ControlledViewEntityResponse.java rename to api/src/org/apache/cloudstack/api/response/ControlledViewEntityResponse.java index 471a8d1000d..116863256a9 100644 --- a/api/src/com/cloud/api/response/ControlledViewEntityResponse.java +++ b/api/src/org/apache/cloudstack/api/response/ControlledViewEntityResponse.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.response; +package org.apache.cloudstack.api.response; public interface ControlledViewEntityResponse { diff --git a/api/src/com/cloud/api/response/CounterResponse.java b/api/src/org/apache/cloudstack/api/response/CounterResponse.java similarity index 95% rename from api/src/com/cloud/api/response/CounterResponse.java rename to api/src/org/apache/cloudstack/api/response/CounterResponse.java index 3aca3fcd90f..5260f1e8f55 100644 --- a/api/src/com/cloud/api/response/CounterResponse.java +++ b/api/src/org/apache/cloudstack/api/response/CounterResponse.java @@ -15,12 +15,13 @@ // specific language governing permissions and limitations // under the License. -package com.cloud.api.response; +package org.apache.cloudstack.api.response; import org.apache.cloudstack.api.ApiConstants; import com.cloud.serializer.Param; import com.cloud.utils.IdentityProxy; import com.google.gson.annotations.SerializedName; +import org.apache.cloudstack.api.BaseResponse; @SuppressWarnings("unused") public class CounterResponse extends BaseResponse { diff --git a/api/src/com/cloud/api/response/CreateCmdResponse.java b/api/src/org/apache/cloudstack/api/response/CreateCmdResponse.java similarity index 93% rename from api/src/com/cloud/api/response/CreateCmdResponse.java rename to api/src/org/apache/cloudstack/api/response/CreateCmdResponse.java index 7dd922b7efa..3c26324e10b 100644 --- a/api/src/com/cloud/api/response/CreateCmdResponse.java +++ b/api/src/org/apache/cloudstack/api/response/CreateCmdResponse.java @@ -14,11 +14,12 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.response; +package org.apache.cloudstack.api.response; import org.apache.cloudstack.api.ApiConstants; import com.cloud.utils.IdentityProxy; import com.google.gson.annotations.SerializedName; +import org.apache.cloudstack.api.BaseResponse; public class CreateCmdResponse extends BaseResponse { @SerializedName(ApiConstants.ID) diff --git a/api/src/com/cloud/api/response/CustomCertificateResponse.java b/api/src/org/apache/cloudstack/api/response/CustomCertificateResponse.java similarity index 81% rename from api/src/com/cloud/api/response/CustomCertificateResponse.java rename to api/src/org/apache/cloudstack/api/response/CustomCertificateResponse.java index 0738c33e271..f45b0c8e49b 100644 --- a/api/src/com/cloud/api/response/CustomCertificateResponse.java +++ b/api/src/org/apache/cloudstack/api/response/CustomCertificateResponse.java @@ -14,21 +14,22 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.response; +package org.apache.cloudstack.api.response; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; +import org.apache.cloudstack.api.BaseResponse; public class CustomCertificateResponse extends BaseResponse { @SerializedName("message") @Param(description="message of the certificate upload operation") private String message; - public String getResultMessage() { - return message; - } + public String getResultMessage() { + return message; + } - public void setResultMessage(String msg) { - this.message = msg; - } + public void setResultMessage(String msg) { + this.message = msg; + } } diff --git a/api/src/com/cloud/api/response/DiskOfferingResponse.java b/api/src/org/apache/cloudstack/api/response/DiskOfferingResponse.java similarity index 97% rename from api/src/com/cloud/api/response/DiskOfferingResponse.java rename to api/src/org/apache/cloudstack/api/response/DiskOfferingResponse.java index be86ee7394e..96aef99926b 100644 --- a/api/src/com/cloud/api/response/DiskOfferingResponse.java +++ b/api/src/org/apache/cloudstack/api/response/DiskOfferingResponse.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.response; +package org.apache.cloudstack.api.response; import java.util.Date; @@ -22,6 +22,7 @@ import org.apache.cloudstack.api.ApiConstants; import com.cloud.utils.IdentityProxy; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; +import org.apache.cloudstack.api.BaseResponse; public class DiskOfferingResponse extends BaseResponse { @SerializedName(ApiConstants.ID) @Param(description="unique ID of the disk offering") diff --git a/api/src/com/cloud/api/response/DomainResponse.java b/api/src/org/apache/cloudstack/api/response/DomainResponse.java similarity index 97% rename from api/src/com/cloud/api/response/DomainResponse.java rename to api/src/org/apache/cloudstack/api/response/DomainResponse.java index 4568f910695..e97653ba777 100644 --- a/api/src/com/cloud/api/response/DomainResponse.java +++ b/api/src/org/apache/cloudstack/api/response/DomainResponse.java @@ -14,9 +14,10 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.response; +package org.apache.cloudstack.api.response; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseResponse; import org.apache.cloudstack.api.Entity; import com.cloud.domain.Domain; import com.cloud.utils.IdentityProxy; diff --git a/api/src/com/cloud/api/response/DomainRouterResponse.java b/api/src/org/apache/cloudstack/api/response/DomainRouterResponse.java similarity index 99% rename from api/src/com/cloud/api/response/DomainRouterResponse.java rename to api/src/org/apache/cloudstack/api/response/DomainRouterResponse.java index 6db46fad429..b899a1d1257 100644 --- a/api/src/com/cloud/api/response/DomainRouterResponse.java +++ b/api/src/org/apache/cloudstack/api/response/DomainRouterResponse.java @@ -14,19 +14,18 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.response; +package org.apache.cloudstack.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; -import com.cloud.utils.IdentityProxy; import com.cloud.vm.VirtualMachine.State; import com.google.gson.annotations.SerializedName; +import org.apache.cloudstack.api.BaseResponse; @SuppressWarnings("unused") public class DomainRouterResponse extends BaseResponse implements ControlledViewEntityResponse{ diff --git a/api/src/com/cloud/api/response/EventResponse.java b/api/src/org/apache/cloudstack/api/response/EventResponse.java similarity index 97% rename from api/src/com/cloud/api/response/EventResponse.java rename to api/src/org/apache/cloudstack/api/response/EventResponse.java index 990f196986c..641b586853f 100644 --- a/api/src/com/cloud/api/response/EventResponse.java +++ b/api/src/org/apache/cloudstack/api/response/EventResponse.java @@ -14,15 +14,15 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.response; +package org.apache.cloudstack.api.response; import java.util.Date; import org.apache.cloudstack.api.ApiConstants; -import com.cloud.utils.IdentityProxy; import com.cloud.event.Event; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; +import org.apache.cloudstack.api.BaseResponse; @SuppressWarnings("unused") public class EventResponse extends BaseResponse implements ControlledViewEntityResponse{ diff --git a/api/src/com/cloud/api/response/EventTypeResponse.java b/api/src/org/apache/cloudstack/api/response/EventTypeResponse.java similarity index 93% rename from api/src/com/cloud/api/response/EventTypeResponse.java rename to api/src/org/apache/cloudstack/api/response/EventTypeResponse.java index 72adcd8f215..4dcc44179a6 100644 --- a/api/src/com/cloud/api/response/EventTypeResponse.java +++ b/api/src/org/apache/cloudstack/api/response/EventTypeResponse.java @@ -14,11 +14,12 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.response; +package org.apache.cloudstack.api.response; import org.apache.cloudstack.api.ApiConstants; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; +import org.apache.cloudstack.api.BaseResponse; public class EventTypeResponse extends BaseResponse { @SerializedName(ApiConstants.NAME) @Param(description="Event Type") diff --git a/api/src/com/cloud/api/response/ExceptionResponse.java b/api/src/org/apache/cloudstack/api/response/ExceptionResponse.java similarity index 96% rename from api/src/com/cloud/api/response/ExceptionResponse.java rename to api/src/org/apache/cloudstack/api/response/ExceptionResponse.java index 995f5c448ed..a4050a24af4 100644 --- a/api/src/com/cloud/api/response/ExceptionResponse.java +++ b/api/src/org/apache/cloudstack/api/response/ExceptionResponse.java @@ -14,13 +14,14 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.response; +package org.apache.cloudstack.api.response; import java.util.ArrayList; import com.cloud.serializer.Param; import com.cloud.utils.IdentityProxy; import com.google.gson.annotations.SerializedName; +import org.apache.cloudstack.api.BaseResponse; public class ExceptionResponse extends BaseResponse { diff --git a/api/src/com/cloud/api/response/ExtractResponse.java b/api/src/org/apache/cloudstack/api/response/ExtractResponse.java old mode 100755 new mode 100644 similarity index 98% rename from api/src/com/cloud/api/response/ExtractResponse.java rename to api/src/org/apache/cloudstack/api/response/ExtractResponse.java index 5d9fde9514f..ac5cc3d3e79 --- a/api/src/com/cloud/api/response/ExtractResponse.java +++ b/api/src/org/apache/cloudstack/api/response/ExtractResponse.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.response; +package org.apache.cloudstack.api.response; import java.util.Date; @@ -22,6 +22,7 @@ import org.apache.cloudstack.api.ApiConstants; import com.cloud.utils.IdentityProxy; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; +import org.apache.cloudstack.api.BaseResponse; public class ExtractResponse extends BaseResponse { @SerializedName(ApiConstants.ID) @Param(description="the id of extracted object") diff --git a/api/src/com/cloud/api/response/FirewallResponse.java b/api/src/org/apache/cloudstack/api/response/FirewallResponse.java similarity index 97% rename from api/src/com/cloud/api/response/FirewallResponse.java rename to api/src/org/apache/cloudstack/api/response/FirewallResponse.java index fa9ebdf6090..eb5ba89f566 100644 --- a/api/src/com/cloud/api/response/FirewallResponse.java +++ b/api/src/org/apache/cloudstack/api/response/FirewallResponse.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.response; +package org.apache.cloudstack.api.response; import java.util.List; @@ -22,6 +22,7 @@ import org.apache.cloudstack.api.ApiConstants; import com.cloud.serializer.Param; import com.cloud.utils.IdentityProxy; import com.google.gson.annotations.SerializedName; +import org.apache.cloudstack.api.BaseResponse; @SuppressWarnings("unused") public class FirewallResponse extends BaseResponse { diff --git a/api/src/com/cloud/api/response/FirewallRuleResponse.java b/api/src/org/apache/cloudstack/api/response/FirewallRuleResponse.java similarity index 97% rename from api/src/com/cloud/api/response/FirewallRuleResponse.java rename to api/src/org/apache/cloudstack/api/response/FirewallRuleResponse.java index adf735316d3..718fb966f8e 100644 --- a/api/src/com/cloud/api/response/FirewallRuleResponse.java +++ b/api/src/org/apache/cloudstack/api/response/FirewallRuleResponse.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.response; +package org.apache.cloudstack.api.response; import java.util.List; @@ -22,9 +22,10 @@ import org.apache.cloudstack.api.ApiConstants; import com.cloud.serializer.Param; import com.cloud.utils.IdentityProxy; import com.google.gson.annotations.SerializedName; +import org.apache.cloudstack.api.BaseResponse; @SuppressWarnings("unused") -public class FirewallRuleResponse extends BaseResponse{ +public class FirewallRuleResponse extends BaseResponse { @SerializedName(ApiConstants.ID) @Param(description="the ID of the port forwarding rule") private IdentityProxy id = new IdentityProxy("firewall_rules"); diff --git a/api/src/com/cloud/api/response/GetVMPasswordResponse.java b/api/src/org/apache/cloudstack/api/response/GetVMPasswordResponse.java similarity index 58% rename from api/src/com/cloud/api/response/GetVMPasswordResponse.java rename to api/src/org/apache/cloudstack/api/response/GetVMPasswordResponse.java index c9638fff3f6..8147df3fae1 100644 --- a/api/src/com/cloud/api/response/GetVMPasswordResponse.java +++ b/api/src/org/apache/cloudstack/api/response/GetVMPasswordResponse.java @@ -14,30 +14,31 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.response; +package org.apache.cloudstack.api.response; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; +import org.apache.cloudstack.api.BaseResponse; public class GetVMPasswordResponse extends BaseResponse { - @SerializedName("encryptedpassword") @Param(description="The encrypted password of the VM") - private String encryptedPassword; + @SerializedName("encryptedpassword") @Param(description="The encrypted password of the VM") + private String encryptedPassword; - public GetVMPasswordResponse() {} + public GetVMPasswordResponse() {} - public GetVMPasswordResponse(String responseName, String encryptedPassword) { - setResponseName(responseName); - setObjectName("password"); - setEncryptedPassword(encryptedPassword); - } + public GetVMPasswordResponse(String responseName, String encryptedPassword) { + setResponseName(responseName); + setObjectName("password"); + setEncryptedPassword(encryptedPassword); + } - public String getEncryptedPassword() { - return encryptedPassword; - } + public String getEncryptedPassword() { + return encryptedPassword; + } - public void setEncryptedPassword(String encryptedPassword) { - this.encryptedPassword = encryptedPassword; - } + public void setEncryptedPassword(String encryptedPassword) { + this.encryptedPassword = encryptedPassword; + } } diff --git a/api/src/com/cloud/api/response/GuestOSCategoryResponse.java b/api/src/org/apache/cloudstack/api/response/GuestOSCategoryResponse.java similarity index 94% rename from api/src/com/cloud/api/response/GuestOSCategoryResponse.java rename to api/src/org/apache/cloudstack/api/response/GuestOSCategoryResponse.java index 1f7e7ad0e0e..a2716862bf1 100644 --- a/api/src/com/cloud/api/response/GuestOSCategoryResponse.java +++ b/api/src/org/apache/cloudstack/api/response/GuestOSCategoryResponse.java @@ -14,12 +14,13 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.response; +package org.apache.cloudstack.api.response; import org.apache.cloudstack.api.ApiConstants; import com.cloud.utils.IdentityProxy; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; +import org.apache.cloudstack.api.BaseResponse; public class GuestOSCategoryResponse extends BaseResponse { @SerializedName(ApiConstants.ID) @Param(description="the ID of the OS category") diff --git a/api/src/com/cloud/api/response/GuestOSResponse.java b/api/src/org/apache/cloudstack/api/response/GuestOSResponse.java similarity index 95% rename from api/src/com/cloud/api/response/GuestOSResponse.java rename to api/src/org/apache/cloudstack/api/response/GuestOSResponse.java index c747df4e735..6c154809f7f 100644 --- a/api/src/com/cloud/api/response/GuestOSResponse.java +++ b/api/src/org/apache/cloudstack/api/response/GuestOSResponse.java @@ -14,12 +14,13 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.response; +package org.apache.cloudstack.api.response; import org.apache.cloudstack.api.ApiConstants; import com.cloud.utils.IdentityProxy; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; +import org.apache.cloudstack.api.BaseResponse; public class GuestOSResponse extends BaseResponse { @SerializedName(ApiConstants.ID) @Param(description="the ID of the OS type") diff --git a/api/src/com/cloud/api/response/HostResponse.java b/api/src/org/apache/cloudstack/api/response/HostResponse.java old mode 100755 new mode 100644 similarity index 99% rename from api/src/com/cloud/api/response/HostResponse.java rename to api/src/org/apache/cloudstack/api/response/HostResponse.java index db0b26a00e6..8b4cd3eeb95 --- a/api/src/com/cloud/api/response/HostResponse.java +++ b/api/src/org/apache/cloudstack/api/response/HostResponse.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.response; +package org.apache.cloudstack.api.response; import java.util.Date; @@ -25,6 +25,7 @@ import com.cloud.host.Status; import com.cloud.hypervisor.Hypervisor.HypervisorType; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; +import org.apache.cloudstack.api.BaseResponse; public class HostResponse extends BaseResponse { @SerializedName(ApiConstants.ID) @Param(description="the ID of the host") diff --git a/api/src/com/cloud/api/response/HypervisorCapabilitiesResponse.java b/api/src/org/apache/cloudstack/api/response/HypervisorCapabilitiesResponse.java similarity index 96% rename from api/src/com/cloud/api/response/HypervisorCapabilitiesResponse.java rename to api/src/org/apache/cloudstack/api/response/HypervisorCapabilitiesResponse.java index d06cceaece9..a4abb93fe9e 100644 --- a/api/src/com/cloud/api/response/HypervisorCapabilitiesResponse.java +++ b/api/src/org/apache/cloudstack/api/response/HypervisorCapabilitiesResponse.java @@ -14,13 +14,14 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.response; +package org.apache.cloudstack.api.response; import org.apache.cloudstack.api.ApiConstants; import com.cloud.utils.IdentityProxy; import com.cloud.hypervisor.Hypervisor.HypervisorType; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; +import org.apache.cloudstack.api.BaseResponse; public class HypervisorCapabilitiesResponse extends BaseResponse { @SerializedName(ApiConstants.ID) @Param(description="the ID of the hypervisor capabilities row") diff --git a/api/src/com/cloud/api/response/HypervisorResponse.java b/api/src/org/apache/cloudstack/api/response/HypervisorResponse.java similarity index 93% rename from api/src/com/cloud/api/response/HypervisorResponse.java rename to api/src/org/apache/cloudstack/api/response/HypervisorResponse.java index 1270a58e031..3828539746b 100644 --- a/api/src/com/cloud/api/response/HypervisorResponse.java +++ b/api/src/org/apache/cloudstack/api/response/HypervisorResponse.java @@ -14,11 +14,12 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.response; +package org.apache.cloudstack.api.response; import org.apache.cloudstack.api.ApiConstants; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; +import org.apache.cloudstack.api.BaseResponse; public class HypervisorResponse extends BaseResponse { @SerializedName(ApiConstants.NAME) @Param(description="Hypervisor name") diff --git a/api/src/com/cloud/api/response/IPAddressResponse.java b/api/src/org/apache/cloudstack/api/response/IPAddressResponse.java similarity index 98% rename from api/src/com/cloud/api/response/IPAddressResponse.java rename to api/src/org/apache/cloudstack/api/response/IPAddressResponse.java index a8294dfeb56..15ac72d5b2c 100644 --- a/api/src/com/cloud/api/response/IPAddressResponse.java +++ b/api/src/org/apache/cloudstack/api/response/IPAddressResponse.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.response; +package org.apache.cloudstack.api.response; import java.util.Date; import java.util.List; @@ -23,6 +23,7 @@ import org.apache.cloudstack.api.ApiConstants; import com.cloud.serializer.Param; import com.cloud.utils.IdentityProxy; import com.google.gson.annotations.SerializedName; +import org.apache.cloudstack.api.BaseResponse; @SuppressWarnings("unused") public class IPAddressResponse extends BaseResponse implements ControlledEntityResponse { diff --git a/api/src/com/cloud/api/response/InstanceGroupResponse.java b/api/src/org/apache/cloudstack/api/response/InstanceGroupResponse.java similarity index 97% rename from api/src/com/cloud/api/response/InstanceGroupResponse.java rename to api/src/org/apache/cloudstack/api/response/InstanceGroupResponse.java index ec450c39c62..ec92397e31e 100644 --- a/api/src/com/cloud/api/response/InstanceGroupResponse.java +++ b/api/src/org/apache/cloudstack/api/response/InstanceGroupResponse.java @@ -14,11 +14,12 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.response; +package org.apache.cloudstack.api.response; import java.util.Date; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseResponse; import org.apache.cloudstack.api.Entity; import com.cloud.vm.InstanceGroup; import com.cloud.utils.IdentityProxy; diff --git a/api/src/com/cloud/api/response/IpForwardingRuleResponse.java b/api/src/org/apache/cloudstack/api/response/IpForwardingRuleResponse.java similarity index 97% rename from api/src/com/cloud/api/response/IpForwardingRuleResponse.java rename to api/src/org/apache/cloudstack/api/response/IpForwardingRuleResponse.java index 65a349ab9ee..f3ae797fb5d 100644 --- a/api/src/com/cloud/api/response/IpForwardingRuleResponse.java +++ b/api/src/org/apache/cloudstack/api/response/IpForwardingRuleResponse.java @@ -14,12 +14,13 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.response; +package org.apache.cloudstack.api.response; import org.apache.cloudstack.api.ApiConstants; import com.cloud.utils.IdentityProxy; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; +import org.apache.cloudstack.api.BaseResponse; public class IpForwardingRuleResponse extends BaseResponse { @SerializedName(ApiConstants.ID) @Param(description="the ID of the port forwarding rule") diff --git a/api/src/com/cloud/api/response/IsoVmResponse.java b/api/src/org/apache/cloudstack/api/response/IsoVmResponse.java old mode 100755 new mode 100644 similarity index 97% rename from api/src/com/cloud/api/response/IsoVmResponse.java rename to api/src/org/apache/cloudstack/api/response/IsoVmResponse.java index fb5fa86b42f..53174d1cdcf --- a/api/src/com/cloud/api/response/IsoVmResponse.java +++ b/api/src/org/apache/cloudstack/api/response/IsoVmResponse.java @@ -14,11 +14,12 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.response; +package org.apache.cloudstack.api.response; import com.cloud.utils.IdentityProxy; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; +import org.apache.cloudstack.api.BaseResponse; public class IsoVmResponse extends BaseResponse { @SerializedName("id") @Param(description="the ISO ID") diff --git a/api/src/com/cloud/api/response/LBStickinessPolicyResponse.java b/api/src/org/apache/cloudstack/api/response/LBStickinessPolicyResponse.java similarity index 97% rename from api/src/com/cloud/api/response/LBStickinessPolicyResponse.java rename to api/src/org/apache/cloudstack/api/response/LBStickinessPolicyResponse.java index a6743a78ceb..bfb91b08d14 100644 --- a/api/src/com/cloud/api/response/LBStickinessPolicyResponse.java +++ b/api/src/org/apache/cloudstack/api/response/LBStickinessPolicyResponse.java @@ -14,13 +14,14 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.response; +package org.apache.cloudstack.api.response; import com.cloud.utils.IdentityProxy; import com.cloud.network.rules.StickinessPolicy; import com.cloud.serializer.Param; import com.cloud.utils.Pair; import com.google.gson.annotations.SerializedName; +import org.apache.cloudstack.api.BaseResponse; import java.util.List; import java.util.Map; diff --git a/api/src/com/cloud/api/response/LBStickinessResponse.java b/api/src/org/apache/cloudstack/api/response/LBStickinessResponse.java similarity index 97% rename from api/src/com/cloud/api/response/LBStickinessResponse.java rename to api/src/org/apache/cloudstack/api/response/LBStickinessResponse.java index ea3be69cb36..6b4143b660d 100644 --- a/api/src/com/cloud/api/response/LBStickinessResponse.java +++ b/api/src/org/apache/cloudstack/api/response/LBStickinessResponse.java @@ -14,12 +14,13 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.response; +package org.apache.cloudstack.api.response; import org.apache.cloudstack.api.ApiConstants; import com.cloud.utils.IdentityProxy; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; +import org.apache.cloudstack.api.BaseResponse; import java.util.List; diff --git a/api/src/com/cloud/api/response/LDAPConfigResponse.java b/api/src/org/apache/cloudstack/api/response/LDAPConfigResponse.java similarity index 97% rename from api/src/com/cloud/api/response/LDAPConfigResponse.java rename to api/src/org/apache/cloudstack/api/response/LDAPConfigResponse.java index db89bdf7c78..e851e38e2bd 100644 --- a/api/src/com/cloud/api/response/LDAPConfigResponse.java +++ b/api/src/org/apache/cloudstack/api/response/LDAPConfigResponse.java @@ -14,11 +14,12 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.response; +package org.apache.cloudstack.api.response; import org.apache.cloudstack.api.ApiConstants; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; +import org.apache.cloudstack.api.BaseResponse; public class LDAPConfigResponse extends BaseResponse { diff --git a/api/src/com/cloud/api/response/LDAPRemoveResponse.java b/api/src/org/apache/cloudstack/api/response/LDAPRemoveResponse.java similarity index 85% rename from api/src/com/cloud/api/response/LDAPRemoveResponse.java rename to api/src/org/apache/cloudstack/api/response/LDAPRemoveResponse.java index aaa529738b4..0feec5bc5b5 100644 --- a/api/src/com/cloud/api/response/LDAPRemoveResponse.java +++ b/api/src/org/apache/cloudstack/api/response/LDAPRemoveResponse.java @@ -14,11 +14,13 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.response; +package org.apache.cloudstack.api.response; + +import org.apache.cloudstack.api.BaseResponse; public class LDAPRemoveResponse extends BaseResponse { - public LDAPRemoveResponse(){ - super(); - } + public LDAPRemoveResponse(){ + super(); + } } diff --git a/api/src/com/cloud/api/response/ListResponse.java b/api/src/org/apache/cloudstack/api/response/ListResponse.java similarity index 94% rename from api/src/com/cloud/api/response/ListResponse.java rename to api/src/org/apache/cloudstack/api/response/ListResponse.java index 5c8e83c1651..3f28887f95e 100644 --- a/api/src/com/cloud/api/response/ListResponse.java +++ b/api/src/org/apache/cloudstack/api/response/ListResponse.java @@ -14,10 +14,11 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.response; +package org.apache.cloudstack.api.response; import java.util.List; +import org.apache.cloudstack.api.BaseResponse; import org.apache.cloudstack.api.ResponseObject; public class ListResponse extends BaseResponse { diff --git a/api/src/com/cloud/api/response/LoadBalancerResponse.java b/api/src/org/apache/cloudstack/api/response/LoadBalancerResponse.java similarity index 98% rename from api/src/com/cloud/api/response/LoadBalancerResponse.java rename to api/src/org/apache/cloudstack/api/response/LoadBalancerResponse.java index 6b104f5fbdf..6e02b70d8de 100644 --- a/api/src/com/cloud/api/response/LoadBalancerResponse.java +++ b/api/src/org/apache/cloudstack/api/response/LoadBalancerResponse.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.response; +package org.apache.cloudstack.api.response; import java.util.List; @@ -22,6 +22,7 @@ import org.apache.cloudstack.api.ApiConstants; import com.cloud.serializer.Param; import com.cloud.utils.IdentityProxy; import com.google.gson.annotations.SerializedName; +import org.apache.cloudstack.api.BaseResponse; @SuppressWarnings("unused") public class LoadBalancerResponse extends BaseResponse implements ControlledEntityResponse { diff --git a/api/src/com/cloud/api/response/NetworkACLResponse.java b/api/src/org/apache/cloudstack/api/response/NetworkACLResponse.java similarity index 97% rename from api/src/com/cloud/api/response/NetworkACLResponse.java rename to api/src/org/apache/cloudstack/api/response/NetworkACLResponse.java index fc567d5b57a..1b670218814 100644 --- a/api/src/com/cloud/api/response/NetworkACLResponse.java +++ b/api/src/org/apache/cloudstack/api/response/NetworkACLResponse.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.response; +package org.apache.cloudstack.api.response; import java.util.List; @@ -22,6 +22,7 @@ import org.apache.cloudstack.api.ApiConstants; import com.cloud.serializer.Param; import com.cloud.utils.IdentityProxy; import com.google.gson.annotations.SerializedName; +import org.apache.cloudstack.api.BaseResponse; @SuppressWarnings("unused") public class NetworkACLResponse extends BaseResponse { diff --git a/api/src/org/apache/cloudstack/api/response/NetworkDeviceResponse.java b/api/src/org/apache/cloudstack/api/response/NetworkDeviceResponse.java index c7fb7e842b6..30900e382e6 100644 --- a/api/src/org/apache/cloudstack/api/response/NetworkDeviceResponse.java +++ b/api/src/org/apache/cloudstack/api/response/NetworkDeviceResponse.java @@ -18,20 +18,20 @@ package org.apache.cloudstack.api.response; import org.apache.cloudstack.api.ApiConstants; import com.cloud.utils.IdentityProxy; -import com.cloud.api.response.BaseResponse; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; +import org.apache.cloudstack.api.BaseResponse; public class NetworkDeviceResponse extends BaseResponse { - @SerializedName(ApiConstants.ID) - @Param(description = "the ID of the network device") - private IdentityProxy id = new IdentityProxy("host"); + @SerializedName(ApiConstants.ID) + @Param(description = "the ID of the network device") + private IdentityProxy id = new IdentityProxy("host"); - public Long getId() { - return id.getValue(); - } + public Long getId() { + return id.getValue(); + } - public void setId(Long id) { - this.id.setValue(id); - } + public void setId(Long id) { + this.id.setValue(id); + } } diff --git a/api/src/com/cloud/api/response/NetworkOfferingResponse.java b/api/src/org/apache/cloudstack/api/response/NetworkOfferingResponse.java similarity index 97% rename from api/src/com/cloud/api/response/NetworkOfferingResponse.java rename to api/src/org/apache/cloudstack/api/response/NetworkOfferingResponse.java index af6bbe1ca88..8fe94a78702 100644 --- a/api/src/com/cloud/api/response/NetworkOfferingResponse.java +++ b/api/src/org/apache/cloudstack/api/response/NetworkOfferingResponse.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.response; +package org.apache.cloudstack.api.response; import java.util.Date; import java.util.List; @@ -23,9 +23,10 @@ import org.apache.cloudstack.api.ApiConstants; import com.cloud.utils.IdentityProxy; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; +import org.apache.cloudstack.api.BaseResponse; @SuppressWarnings("unused") -public class NetworkOfferingResponse extends BaseResponse{ +public class NetworkOfferingResponse extends BaseResponse { @SerializedName("id") @Param(description="the id of the network offering") private final IdentityProxy id = new IdentityProxy("network_offerings"); diff --git a/api/src/com/cloud/api/response/NetworkResponse.java b/api/src/org/apache/cloudstack/api/response/NetworkResponse.java similarity index 99% rename from api/src/com/cloud/api/response/NetworkResponse.java rename to api/src/org/apache/cloudstack/api/response/NetworkResponse.java index 5b6c4acc895..3f0af615155 100644 --- a/api/src/com/cloud/api/response/NetworkResponse.java +++ b/api/src/org/apache/cloudstack/api/response/NetworkResponse.java @@ -14,11 +14,12 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.response; +package org.apache.cloudstack.api.response; import java.util.List; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseResponse; import org.apache.cloudstack.api.Entity; import com.cloud.projects.ProjectAccount; import com.cloud.utils.IdentityProxy; diff --git a/api/src/com/cloud/api/response/NicResponse.java b/api/src/org/apache/cloudstack/api/response/NicResponse.java old mode 100755 new mode 100644 similarity index 97% rename from api/src/com/cloud/api/response/NicResponse.java rename to api/src/org/apache/cloudstack/api/response/NicResponse.java index 7001e12c015..1ac00846190 --- a/api/src/com/cloud/api/response/NicResponse.java +++ b/api/src/org/apache/cloudstack/api/response/NicResponse.java @@ -14,11 +14,12 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.response; +package org.apache.cloudstack.api.response; import org.apache.cloudstack.api.ApiConstants; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; +import org.apache.cloudstack.api.BaseResponse; @SuppressWarnings("unused") public class NicResponse extends BaseResponse { diff --git a/api/src/com/cloud/api/response/PhysicalNetworkResponse.java b/api/src/org/apache/cloudstack/api/response/PhysicalNetworkResponse.java similarity index 96% rename from api/src/com/cloud/api/response/PhysicalNetworkResponse.java rename to api/src/org/apache/cloudstack/api/response/PhysicalNetworkResponse.java index c39071342dd..3cb479b4610 100644 --- a/api/src/com/cloud/api/response/PhysicalNetworkResponse.java +++ b/api/src/org/apache/cloudstack/api/response/PhysicalNetworkResponse.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.response; +package org.apache.cloudstack.api.response; import java.util.List; @@ -22,9 +22,10 @@ import org.apache.cloudstack.api.ApiConstants; import com.cloud.utils.IdentityProxy; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; +import org.apache.cloudstack.api.BaseResponse; @SuppressWarnings("unused") -public class PhysicalNetworkResponse extends BaseResponse{ +public class PhysicalNetworkResponse extends BaseResponse { @SerializedName(ApiConstants.ID) @Param(description="the uuid of the physical network") private String id; diff --git a/api/src/com/cloud/api/response/PodResponse.java b/api/src/org/apache/cloudstack/api/response/PodResponse.java old mode 100755 new mode 100644 similarity index 97% rename from api/src/com/cloud/api/response/PodResponse.java rename to api/src/org/apache/cloudstack/api/response/PodResponse.java index c2cb94650a4..1bd94edf632 --- a/api/src/com/cloud/api/response/PodResponse.java +++ b/api/src/org/apache/cloudstack/api/response/PodResponse.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.response; +package org.apache.cloudstack.api.response; import java.util.List; @@ -22,6 +22,7 @@ import org.apache.cloudstack.api.ApiConstants; import com.cloud.utils.IdentityProxy; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; +import org.apache.cloudstack.api.BaseResponse; public class PodResponse extends BaseResponse { @SerializedName("id") @Param(description="the ID of the Pod") diff --git a/api/src/com/cloud/api/response/PrivateGatewayResponse.java b/api/src/org/apache/cloudstack/api/response/PrivateGatewayResponse.java similarity index 98% rename from api/src/com/cloud/api/response/PrivateGatewayResponse.java rename to api/src/org/apache/cloudstack/api/response/PrivateGatewayResponse.java index 47ed05efd31..ef2d06a4812 100644 --- a/api/src/com/cloud/api/response/PrivateGatewayResponse.java +++ b/api/src/org/apache/cloudstack/api/response/PrivateGatewayResponse.java @@ -14,11 +14,12 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.response; +package org.apache.cloudstack.api.response; import org.apache.cloudstack.api.ApiConstants; import com.cloud.serializer.Param; import com.cloud.utils.IdentityProxy; import com.google.gson.annotations.SerializedName; +import org.apache.cloudstack.api.BaseResponse; @SuppressWarnings("unused") public class PrivateGatewayResponse extends BaseResponse implements ControlledEntityResponse{ diff --git a/api/src/com/cloud/api/response/ProjectAccountResponse.java b/api/src/org/apache/cloudstack/api/response/ProjectAccountResponse.java similarity index 97% rename from api/src/com/cloud/api/response/ProjectAccountResponse.java rename to api/src/org/apache/cloudstack/api/response/ProjectAccountResponse.java index 61fb7f31aca..c20c0234376 100644 --- a/api/src/com/cloud/api/response/ProjectAccountResponse.java +++ b/api/src/org/apache/cloudstack/api/response/ProjectAccountResponse.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.response; +package org.apache.cloudstack.api.response; import java.util.List; @@ -22,6 +22,7 @@ import org.apache.cloudstack.api.ApiConstants; import com.cloud.utils.IdentityProxy; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; +import org.apache.cloudstack.api.BaseResponse; @SuppressWarnings("unused") public class ProjectAccountResponse extends BaseResponse implements ControlledEntityResponse { diff --git a/api/src/com/cloud/api/response/ProjectInvitationResponse.java b/api/src/org/apache/cloudstack/api/response/ProjectInvitationResponse.java similarity index 97% rename from api/src/com/cloud/api/response/ProjectInvitationResponse.java rename to api/src/org/apache/cloudstack/api/response/ProjectInvitationResponse.java index 3533fa8f773..80202a51d4c 100644 --- a/api/src/com/cloud/api/response/ProjectInvitationResponse.java +++ b/api/src/org/apache/cloudstack/api/response/ProjectInvitationResponse.java @@ -14,12 +14,13 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.response; +package org.apache.cloudstack.api.response; import org.apache.cloudstack.api.ApiConstants; import com.cloud.utils.IdentityProxy; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; +import org.apache.cloudstack.api.BaseResponse; @SuppressWarnings("unused") public class ProjectInvitationResponse extends BaseResponse implements ControlledEntityResponse{ diff --git a/api/src/com/cloud/api/response/ProjectResponse.java b/api/src/org/apache/cloudstack/api/response/ProjectResponse.java similarity index 95% rename from api/src/com/cloud/api/response/ProjectResponse.java rename to api/src/org/apache/cloudstack/api/response/ProjectResponse.java index e17b9dc5009..dea1a68cdbf 100644 --- a/api/src/com/cloud/api/response/ProjectResponse.java +++ b/api/src/org/apache/cloudstack/api/response/ProjectResponse.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.response; +package org.apache.cloudstack.api.response; import java.util.List; @@ -22,9 +22,10 @@ import org.apache.cloudstack.api.ApiConstants; import com.cloud.serializer.Param; import com.cloud.utils.IdentityProxy; import com.google.gson.annotations.SerializedName; +import org.apache.cloudstack.api.BaseResponse; @SuppressWarnings("unused") -public class ProjectResponse extends BaseResponse{ +public class ProjectResponse extends BaseResponse { @SerializedName(ApiConstants.ID) @Param(description="the id of the project") private IdentityProxy id = new IdentityProxy("projects"); diff --git a/api/src/com/cloud/api/response/ProviderResponse.java b/api/src/org/apache/cloudstack/api/response/ProviderResponse.java similarity index 97% rename from api/src/com/cloud/api/response/ProviderResponse.java rename to api/src/org/apache/cloudstack/api/response/ProviderResponse.java index 605d9f84cee..4ff34f7c6b9 100644 --- a/api/src/com/cloud/api/response/ProviderResponse.java +++ b/api/src/org/apache/cloudstack/api/response/ProviderResponse.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.response; +package org.apache.cloudstack.api.response; import java.util.List; @@ -22,6 +22,7 @@ import org.apache.cloudstack.api.ApiConstants; import com.cloud.utils.IdentityProxy; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; +import org.apache.cloudstack.api.BaseResponse; @SuppressWarnings("unused") public class ProviderResponse extends BaseResponse { diff --git a/api/src/com/cloud/api/response/RegisterResponse.java b/api/src/org/apache/cloudstack/api/response/RegisterResponse.java similarity index 94% rename from api/src/com/cloud/api/response/RegisterResponse.java rename to api/src/org/apache/cloudstack/api/response/RegisterResponse.java index 6f9f3404b31..eee924940fb 100644 --- a/api/src/com/cloud/api/response/RegisterResponse.java +++ b/api/src/org/apache/cloudstack/api/response/RegisterResponse.java @@ -14,10 +14,11 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.response; +package org.apache.cloudstack.api.response; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; +import org.apache.cloudstack.api.BaseResponse; public class RegisterResponse extends BaseResponse { @SerializedName("apikey") @Param(description="the api key of the registered user") diff --git a/api/src/com/cloud/api/response/RemoteAccessVpnResponse.java b/api/src/org/apache/cloudstack/api/response/RemoteAccessVpnResponse.java similarity index 97% rename from api/src/com/cloud/api/response/RemoteAccessVpnResponse.java rename to api/src/org/apache/cloudstack/api/response/RemoteAccessVpnResponse.java index 6a5acaf4569..038ba73bdb2 100644 --- a/api/src/com/cloud/api/response/RemoteAccessVpnResponse.java +++ b/api/src/org/apache/cloudstack/api/response/RemoteAccessVpnResponse.java @@ -14,12 +14,13 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.response; +package org.apache.cloudstack.api.response; import org.apache.cloudstack.api.ApiConstants; import com.cloud.utils.IdentityProxy; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; +import org.apache.cloudstack.api.BaseResponse; @SuppressWarnings("unused") public class RemoteAccessVpnResponse extends BaseResponse implements ControlledEntityResponse{ diff --git a/api/src/com/cloud/api/response/ResourceCountResponse.java b/api/src/org/apache/cloudstack/api/response/ResourceCountResponse.java similarity index 97% rename from api/src/com/cloud/api/response/ResourceCountResponse.java rename to api/src/org/apache/cloudstack/api/response/ResourceCountResponse.java index e308e542eb8..ac3ba4e881f 100644 --- a/api/src/com/cloud/api/response/ResourceCountResponse.java +++ b/api/src/org/apache/cloudstack/api/response/ResourceCountResponse.java @@ -14,12 +14,13 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.response; +package org.apache.cloudstack.api.response; import org.apache.cloudstack.api.ApiConstants; import com.cloud.utils.IdentityProxy; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; +import org.apache.cloudstack.api.BaseResponse; @SuppressWarnings("unused") public class ResourceCountResponse extends BaseResponse implements ControlledEntityResponse{ diff --git a/api/src/com/cloud/api/response/ResourceLimitResponse.java b/api/src/org/apache/cloudstack/api/response/ResourceLimitResponse.java similarity index 96% rename from api/src/com/cloud/api/response/ResourceLimitResponse.java rename to api/src/org/apache/cloudstack/api/response/ResourceLimitResponse.java index 6493917dd76..854ebee0d3b 100644 --- a/api/src/com/cloud/api/response/ResourceLimitResponse.java +++ b/api/src/org/apache/cloudstack/api/response/ResourceLimitResponse.java @@ -14,12 +14,13 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.response; +package org.apache.cloudstack.api.response; import org.apache.cloudstack.api.ApiConstants; import com.cloud.utils.IdentityProxy; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; +import org.apache.cloudstack.api.BaseResponse; @SuppressWarnings("unused") public class ResourceLimitResponse extends BaseResponse implements ControlledEntityResponse { diff --git a/api/src/com/cloud/api/response/ResourceTagResponse.java b/api/src/org/apache/cloudstack/api/response/ResourceTagResponse.java similarity index 97% rename from api/src/com/cloud/api/response/ResourceTagResponse.java rename to api/src/org/apache/cloudstack/api/response/ResourceTagResponse.java index 4f94e999a89..30bcbfd38a2 100644 --- a/api/src/com/cloud/api/response/ResourceTagResponse.java +++ b/api/src/org/apache/cloudstack/api/response/ResourceTagResponse.java @@ -14,12 +14,12 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.response; +package org.apache.cloudstack.api.response; import org.apache.cloudstack.api.ApiConstants; import com.cloud.serializer.Param; -import com.cloud.utils.IdentityProxy; import com.google.gson.annotations.SerializedName; +import org.apache.cloudstack.api.BaseResponse; @SuppressWarnings("unused") public class ResourceTagResponse extends BaseResponse implements ControlledViewEntityResponse{ diff --git a/api/src/com/cloud/api/response/SSHKeyPairResponse.java b/api/src/org/apache/cloudstack/api/response/SSHKeyPairResponse.java similarity index 95% rename from api/src/com/cloud/api/response/SSHKeyPairResponse.java rename to api/src/org/apache/cloudstack/api/response/SSHKeyPairResponse.java index 4f0bea4021b..606636382a1 100644 --- a/api/src/com/cloud/api/response/SSHKeyPairResponse.java +++ b/api/src/org/apache/cloudstack/api/response/SSHKeyPairResponse.java @@ -14,11 +14,12 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.response; +package org.apache.cloudstack.api.response; import org.apache.cloudstack.api.ApiConstants; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; +import org.apache.cloudstack.api.BaseResponse; public class SSHKeyPairResponse extends BaseResponse { diff --git a/api/src/com/cloud/api/response/SecurityGroupResponse.java b/api/src/org/apache/cloudstack/api/response/SecurityGroupResponse.java similarity index 97% rename from api/src/com/cloud/api/response/SecurityGroupResponse.java rename to api/src/org/apache/cloudstack/api/response/SecurityGroupResponse.java index c4a9b0f520f..6900ca519bf 100644 --- a/api/src/com/cloud/api/response/SecurityGroupResponse.java +++ b/api/src/org/apache/cloudstack/api/response/SecurityGroupResponse.java @@ -14,18 +14,16 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.response; +package org.apache.cloudstack.api.response; -import java.util.ArrayList; import java.util.HashSet; -import java.util.List; import java.util.Set; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseResponse; import org.apache.cloudstack.api.Entity; import com.cloud.network.security.SecurityGroup; import com.cloud.serializer.Param; -import com.cloud.utils.IdentityProxy; import com.google.gson.annotations.SerializedName; @SuppressWarnings("unused") diff --git a/api/src/com/cloud/api/response/SecurityGroupRuleResponse.java b/api/src/org/apache/cloudstack/api/response/SecurityGroupRuleResponse.java similarity index 97% rename from api/src/com/cloud/api/response/SecurityGroupRuleResponse.java rename to api/src/org/apache/cloudstack/api/response/SecurityGroupRuleResponse.java index 8ef39b0260f..206e5fbac83 100644 --- a/api/src/com/cloud/api/response/SecurityGroupRuleResponse.java +++ b/api/src/org/apache/cloudstack/api/response/SecurityGroupRuleResponse.java @@ -14,12 +14,12 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.response; +package org.apache.cloudstack.api.response; import org.apache.cloudstack.api.ApiConstants; -import com.cloud.utils.IdentityProxy; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; +import org.apache.cloudstack.api.BaseResponse; public class SecurityGroupRuleResponse extends BaseResponse { @SerializedName("ruleid") @Param(description="the id of the security group rule") diff --git a/api/src/com/cloud/api/response/ServiceOfferingResponse.java b/api/src/org/apache/cloudstack/api/response/ServiceOfferingResponse.java similarity index 98% rename from api/src/com/cloud/api/response/ServiceOfferingResponse.java rename to api/src/org/apache/cloudstack/api/response/ServiceOfferingResponse.java index 2d6a2889893..788d8e8df2d 100644 --- a/api/src/com/cloud/api/response/ServiceOfferingResponse.java +++ b/api/src/org/apache/cloudstack/api/response/ServiceOfferingResponse.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.response; +package org.apache.cloudstack.api.response; import java.util.Date; @@ -22,6 +22,7 @@ import org.apache.cloudstack.api.ApiConstants; import com.cloud.utils.IdentityProxy; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; +import org.apache.cloudstack.api.BaseResponse; public class ServiceOfferingResponse extends BaseResponse { @SerializedName("id") @Param(description="the id of the service offering") diff --git a/api/src/com/cloud/api/response/ServiceResponse.java b/api/src/org/apache/cloudstack/api/response/ServiceResponse.java similarity index 95% rename from api/src/com/cloud/api/response/ServiceResponse.java rename to api/src/org/apache/cloudstack/api/response/ServiceResponse.java index ac7d88b1941..11f7d710383 100644 --- a/api/src/com/cloud/api/response/ServiceResponse.java +++ b/api/src/org/apache/cloudstack/api/response/ServiceResponse.java @@ -14,13 +14,14 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.response; +package org.apache.cloudstack.api.response; import java.util.List; import org.apache.cloudstack.api.ApiConstants; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; +import org.apache.cloudstack.api.BaseResponse; @SuppressWarnings("unused") public class ServiceResponse extends BaseResponse { diff --git a/api/src/com/cloud/api/response/Site2SiteCustomerGatewayResponse.java b/api/src/org/apache/cloudstack/api/response/Site2SiteCustomerGatewayResponse.java similarity index 98% rename from api/src/com/cloud/api/response/Site2SiteCustomerGatewayResponse.java rename to api/src/org/apache/cloudstack/api/response/Site2SiteCustomerGatewayResponse.java index 3b06033fa73..29bfeaafad9 100644 --- a/api/src/com/cloud/api/response/Site2SiteCustomerGatewayResponse.java +++ b/api/src/org/apache/cloudstack/api/response/Site2SiteCustomerGatewayResponse.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.response; +package org.apache.cloudstack.api.response; import java.util.Date; @@ -22,6 +22,7 @@ import org.apache.cloudstack.api.ApiConstants; import com.cloud.utils.IdentityProxy; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; +import org.apache.cloudstack.api.BaseResponse; @SuppressWarnings("unused") public class Site2SiteCustomerGatewayResponse extends BaseResponse implements ControlledEntityResponse { diff --git a/api/src/com/cloud/api/response/Site2SiteVpnConnectionResponse.java b/api/src/org/apache/cloudstack/api/response/Site2SiteVpnConnectionResponse.java similarity index 98% rename from api/src/com/cloud/api/response/Site2SiteVpnConnectionResponse.java rename to api/src/org/apache/cloudstack/api/response/Site2SiteVpnConnectionResponse.java index 911416bceeb..cbddee7545f 100644 --- a/api/src/com/cloud/api/response/Site2SiteVpnConnectionResponse.java +++ b/api/src/org/apache/cloudstack/api/response/Site2SiteVpnConnectionResponse.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.response; +package org.apache.cloudstack.api.response; import java.util.Date; @@ -22,6 +22,7 @@ import org.apache.cloudstack.api.ApiConstants; import com.cloud.utils.IdentityProxy; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; +import org.apache.cloudstack.api.BaseResponse; @SuppressWarnings("unused") public class Site2SiteVpnConnectionResponse extends BaseResponse implements ControlledEntityResponse { diff --git a/api/src/com/cloud/api/response/Site2SiteVpnGatewayResponse.java b/api/src/org/apache/cloudstack/api/response/Site2SiteVpnGatewayResponse.java similarity index 97% rename from api/src/com/cloud/api/response/Site2SiteVpnGatewayResponse.java rename to api/src/org/apache/cloudstack/api/response/Site2SiteVpnGatewayResponse.java index 0022019d742..5165912830e 100644 --- a/api/src/com/cloud/api/response/Site2SiteVpnGatewayResponse.java +++ b/api/src/org/apache/cloudstack/api/response/Site2SiteVpnGatewayResponse.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.response; +package org.apache.cloudstack.api.response; import java.util.Date; @@ -22,6 +22,7 @@ import org.apache.cloudstack.api.ApiConstants; import com.cloud.utils.IdentityProxy; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; +import org.apache.cloudstack.api.BaseResponse; @SuppressWarnings("unused") public class Site2SiteVpnGatewayResponse extends BaseResponse implements ControlledEntityResponse { diff --git a/api/src/com/cloud/api/response/SnapshotPolicyResponse.java b/api/src/org/apache/cloudstack/api/response/SnapshotPolicyResponse.java similarity index 96% rename from api/src/com/cloud/api/response/SnapshotPolicyResponse.java rename to api/src/org/apache/cloudstack/api/response/SnapshotPolicyResponse.java index ac1b6cbe3ae..01eed3c33e8 100644 --- a/api/src/com/cloud/api/response/SnapshotPolicyResponse.java +++ b/api/src/org/apache/cloudstack/api/response/SnapshotPolicyResponse.java @@ -14,11 +14,12 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.response; +package org.apache.cloudstack.api.response; import com.cloud.utils.IdentityProxy; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; +import org.apache.cloudstack.api.BaseResponse; public class SnapshotPolicyResponse extends BaseResponse { @SerializedName("id") @Param(description="the ID of the snapshot policy") diff --git a/api/src/com/cloud/api/response/SnapshotResponse.java b/api/src/org/apache/cloudstack/api/response/SnapshotResponse.java similarity index 98% rename from api/src/com/cloud/api/response/SnapshotResponse.java rename to api/src/org/apache/cloudstack/api/response/SnapshotResponse.java index 9a6d53f6971..05b178b9079 100644 --- a/api/src/com/cloud/api/response/SnapshotResponse.java +++ b/api/src/org/apache/cloudstack/api/response/SnapshotResponse.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.response; +package org.apache.cloudstack.api.response; import java.util.Date; import java.util.List; @@ -24,6 +24,7 @@ import com.cloud.serializer.Param; import com.cloud.storage.Snapshot; import com.cloud.utils.IdentityProxy; import com.google.gson.annotations.SerializedName; +import org.apache.cloudstack.api.BaseResponse; @SuppressWarnings("unused") public class SnapshotResponse extends BaseResponse implements ControlledEntityResponse { diff --git a/api/src/com/cloud/api/response/SnapshotScheduleResponse.java b/api/src/org/apache/cloudstack/api/response/SnapshotScheduleResponse.java similarity index 96% rename from api/src/com/cloud/api/response/SnapshotScheduleResponse.java rename to api/src/org/apache/cloudstack/api/response/SnapshotScheduleResponse.java index 37f82b83290..3d8de3e38be 100644 --- a/api/src/com/cloud/api/response/SnapshotScheduleResponse.java +++ b/api/src/org/apache/cloudstack/api/response/SnapshotScheduleResponse.java @@ -14,13 +14,14 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.response; +package org.apache.cloudstack.api.response; import java.util.Date; import com.cloud.utils.IdentityProxy; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; +import org.apache.cloudstack.api.BaseResponse; public class SnapshotScheduleResponse extends BaseResponse { @SerializedName("id") @Param(description="the ID of the snapshot schedule") diff --git a/api/src/com/cloud/api/response/StaticRouteResponse.java b/api/src/org/apache/cloudstack/api/response/StaticRouteResponse.java similarity index 97% rename from api/src/com/cloud/api/response/StaticRouteResponse.java rename to api/src/org/apache/cloudstack/api/response/StaticRouteResponse.java index b607e328dec..d6103808d6f 100644 --- a/api/src/com/cloud/api/response/StaticRouteResponse.java +++ b/api/src/org/apache/cloudstack/api/response/StaticRouteResponse.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.response; +package org.apache.cloudstack.api.response; import java.util.List; @@ -22,6 +22,7 @@ import org.apache.cloudstack.api.ApiConstants; import com.cloud.serializer.Param; import com.cloud.utils.IdentityProxy; import com.google.gson.annotations.SerializedName; +import org.apache.cloudstack.api.BaseResponse; @SuppressWarnings("unused") public class StaticRouteResponse extends BaseResponse implements ControlledEntityResponse{ diff --git a/api/src/com/cloud/api/response/StatusResponse.java b/api/src/org/apache/cloudstack/api/response/StatusResponse.java similarity index 92% rename from api/src/com/cloud/api/response/StatusResponse.java rename to api/src/org/apache/cloudstack/api/response/StatusResponse.java index 283766eef12..ffe7c7c0c1e 100644 --- a/api/src/com/cloud/api/response/StatusResponse.java +++ b/api/src/org/apache/cloudstack/api/response/StatusResponse.java @@ -14,9 +14,10 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.response; +package org.apache.cloudstack.api.response; import com.google.gson.annotations.SerializedName; +import org.apache.cloudstack.api.BaseResponse; public class StatusResponse extends BaseResponse { @SerializedName("status") diff --git a/api/src/com/cloud/api/response/StorageNetworkIpRangeResponse.java b/api/src/org/apache/cloudstack/api/response/StorageNetworkIpRangeResponse.java old mode 100755 new mode 100644 similarity index 97% rename from api/src/com/cloud/api/response/StorageNetworkIpRangeResponse.java rename to api/src/org/apache/cloudstack/api/response/StorageNetworkIpRangeResponse.java index 18e122fbf26..beb2fbd8ae3 --- a/api/src/com/cloud/api/response/StorageNetworkIpRangeResponse.java +++ b/api/src/org/apache/cloudstack/api/response/StorageNetworkIpRangeResponse.java @@ -14,11 +14,12 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.response; +package org.apache.cloudstack.api.response; import org.apache.cloudstack.api.ApiConstants; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; +import org.apache.cloudstack.api.BaseResponse; public class StorageNetworkIpRangeResponse extends BaseResponse { @SerializedName(ApiConstants.ID) @Param(description="the uuid of storage network IP range.") diff --git a/api/src/com/cloud/api/response/StoragePoolResponse.java b/api/src/org/apache/cloudstack/api/response/StoragePoolResponse.java old mode 100755 new mode 100644 similarity index 98% rename from api/src/com/cloud/api/response/StoragePoolResponse.java rename to api/src/org/apache/cloudstack/api/response/StoragePoolResponse.java index d0d60ece3a9..64174ebc2bc --- a/api/src/com/cloud/api/response/StoragePoolResponse.java +++ b/api/src/org/apache/cloudstack/api/response/StoragePoolResponse.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.response; +package org.apache.cloudstack.api.response; import java.util.Date; @@ -23,6 +23,7 @@ import com.cloud.utils.IdentityProxy; import com.cloud.serializer.Param; import com.cloud.storage.StoragePoolStatus; import com.google.gson.annotations.SerializedName; +import org.apache.cloudstack.api.BaseResponse; public class StoragePoolResponse extends BaseResponse { @SerializedName("id") @Param(description="the ID of the storage pool") diff --git a/api/src/com/cloud/api/response/SuccessResponse.java b/api/src/org/apache/cloudstack/api/response/SuccessResponse.java similarity index 72% rename from api/src/com/cloud/api/response/SuccessResponse.java rename to api/src/org/apache/cloudstack/api/response/SuccessResponse.java index 7f221168abe..47c65b6a068 100644 --- a/api/src/com/cloud/api/response/SuccessResponse.java +++ b/api/src/org/apache/cloudstack/api/response/SuccessResponse.java @@ -14,29 +14,30 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.response; +package org.apache.cloudstack.api.response; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; +import org.apache.cloudstack.api.BaseResponse; public class SuccessResponse extends BaseResponse { - @SerializedName("success") @Param(description="true if operation is executed successfully") - private Boolean success = true; + @SerializedName("success") @Param(description="true if operation is executed successfully") + private Boolean success = true; @SerializedName("displaytext") @Param(description="any text associated with the success or failure") private String displayText; - public Boolean getSuccess() { - return success; - } + public Boolean getSuccess() { + return success; + } - public void setSuccess(Boolean success) { - this.success = success; - } + public void setSuccess(Boolean success) { + this.success = success; + } - public String getDisplayText() { - return displayText; - } + public String getDisplayText() { + return displayText; + } public void setDisplayText(String displayText) { this.displayText = displayText; @@ -45,6 +46,6 @@ public class SuccessResponse extends BaseResponse { public SuccessResponse() {} public SuccessResponse(String responseName) { - super.setResponseName(responseName); + super.setResponseName(responseName); } } diff --git a/api/src/com/cloud/api/response/SwiftResponse.java b/api/src/org/apache/cloudstack/api/response/SwiftResponse.java old mode 100755 new mode 100644 similarity index 96% rename from api/src/com/cloud/api/response/SwiftResponse.java rename to api/src/org/apache/cloudstack/api/response/SwiftResponse.java index bf77149444c..f3c219facb0 --- a/api/src/com/cloud/api/response/SwiftResponse.java +++ b/api/src/org/apache/cloudstack/api/response/SwiftResponse.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.response; +package org.apache.cloudstack.api.response; import java.util.Date; @@ -22,6 +22,7 @@ import org.apache.cloudstack.api.ApiConstants; import com.cloud.utils.IdentityProxy; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; +import org.apache.cloudstack.api.BaseResponse; public class SwiftResponse extends BaseResponse { @SerializedName(ApiConstants.ID) diff --git a/api/src/com/cloud/api/response/SystemVmInstanceResponse.java b/api/src/org/apache/cloudstack/api/response/SystemVmInstanceResponse.java similarity index 95% rename from api/src/com/cloud/api/response/SystemVmInstanceResponse.java rename to api/src/org/apache/cloudstack/api/response/SystemVmInstanceResponse.java index 322c5323981..5ede9f361e8 100644 --- a/api/src/com/cloud/api/response/SystemVmInstanceResponse.java +++ b/api/src/org/apache/cloudstack/api/response/SystemVmInstanceResponse.java @@ -14,11 +14,12 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.response; +package org.apache.cloudstack.api.response; import com.cloud.utils.IdentityProxy; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; +import org.apache.cloudstack.api.BaseResponse; /* * This is the generic response for all types of System VMs (SSVM, consoleproxy, domain routers(router, LB, DHCP)) @@ -44,7 +45,7 @@ public class SystemVmInstanceResponse extends BaseResponse { public Long getObjectId() { - return getId(); + return getId(); } public Long getId() { diff --git a/api/src/com/cloud/api/response/SystemVmResponse.java b/api/src/org/apache/cloudstack/api/response/SystemVmResponse.java similarity index 99% rename from api/src/com/cloud/api/response/SystemVmResponse.java rename to api/src/org/apache/cloudstack/api/response/SystemVmResponse.java index 40ca34b68b8..cc1f5ae2e25 100644 --- a/api/src/com/cloud/api/response/SystemVmResponse.java +++ b/api/src/org/apache/cloudstack/api/response/SystemVmResponse.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.response; +package org.apache.cloudstack.api.response; import java.util.Date; @@ -22,6 +22,7 @@ import org.apache.cloudstack.api.ApiConstants; import com.cloud.utils.IdentityProxy; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; +import org.apache.cloudstack.api.BaseResponse; public class SystemVmResponse extends BaseResponse { @SerializedName("id") @Param(description="the ID of the system VM") diff --git a/api/src/com/cloud/api/response/TemplatePermissionsResponse.java b/api/src/org/apache/cloudstack/api/response/TemplatePermissionsResponse.java similarity index 96% rename from api/src/com/cloud/api/response/TemplatePermissionsResponse.java rename to api/src/org/apache/cloudstack/api/response/TemplatePermissionsResponse.java index b578f66c5dc..59e82d39ca1 100644 --- a/api/src/com/cloud/api/response/TemplatePermissionsResponse.java +++ b/api/src/org/apache/cloudstack/api/response/TemplatePermissionsResponse.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.response; +package org.apache.cloudstack.api.response; import java.util.List; @@ -22,6 +22,7 @@ import org.apache.cloudstack.api.ApiConstants; import com.cloud.utils.IdentityProxy; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; +import org.apache.cloudstack.api.BaseResponse; @SuppressWarnings("unused") public class TemplatePermissionsResponse extends BaseResponse { diff --git a/api/src/com/cloud/api/response/TemplateResponse.java b/api/src/org/apache/cloudstack/api/response/TemplateResponse.java old mode 100755 new mode 100644 similarity index 99% rename from api/src/com/cloud/api/response/TemplateResponse.java rename to api/src/org/apache/cloudstack/api/response/TemplateResponse.java index 3cb693811be..2cea0f682ef --- a/api/src/com/cloud/api/response/TemplateResponse.java +++ b/api/src/org/apache/cloudstack/api/response/TemplateResponse.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.response; +package org.apache.cloudstack.api.response; import java.util.Date; import java.util.List; @@ -25,6 +25,7 @@ import com.cloud.serializer.Param; import com.cloud.storage.Storage.ImageFormat; import com.cloud.utils.IdentityProxy; import com.google.gson.annotations.SerializedName; +import org.apache.cloudstack.api.BaseResponse; @SuppressWarnings("unused") public class TemplateResponse extends BaseResponse implements ControlledEntityResponse { diff --git a/api/src/com/cloud/api/response/TrafficTypeImplementorResponse.java b/api/src/org/apache/cloudstack/api/response/TrafficTypeImplementorResponse.java old mode 100755 new mode 100644 similarity index 94% rename from api/src/com/cloud/api/response/TrafficTypeImplementorResponse.java rename to api/src/org/apache/cloudstack/api/response/TrafficTypeImplementorResponse.java index b2691b3585e..30adc3d87ca --- a/api/src/com/cloud/api/response/TrafficTypeImplementorResponse.java +++ b/api/src/org/apache/cloudstack/api/response/TrafficTypeImplementorResponse.java @@ -14,11 +14,12 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.response; +package org.apache.cloudstack.api.response; import org.apache.cloudstack.api.ApiConstants; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; +import org.apache.cloudstack.api.BaseResponse; public class TrafficTypeImplementorResponse extends BaseResponse { @SerializedName(ApiConstants.TRAFFIC_TYPE) @Param(description="network traffic type") diff --git a/api/src/com/cloud/api/response/TrafficTypeResponse.java b/api/src/org/apache/cloudstack/api/response/TrafficTypeResponse.java similarity index 97% rename from api/src/com/cloud/api/response/TrafficTypeResponse.java rename to api/src/org/apache/cloudstack/api/response/TrafficTypeResponse.java index cca7f63f5ec..d32e5802f57 100644 --- a/api/src/com/cloud/api/response/TrafficTypeResponse.java +++ b/api/src/org/apache/cloudstack/api/response/TrafficTypeResponse.java @@ -14,12 +14,13 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.response; +package org.apache.cloudstack.api.response; import org.apache.cloudstack.api.ApiConstants; import com.cloud.utils.IdentityProxy; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; +import org.apache.cloudstack.api.BaseResponse; public class TrafficTypeResponse extends BaseResponse { diff --git a/api/src/com/cloud/api/response/UpgradeVmResponse.java b/api/src/org/apache/cloudstack/api/response/UpgradeVmResponse.java similarity index 98% rename from api/src/com/cloud/api/response/UpgradeVmResponse.java rename to api/src/org/apache/cloudstack/api/response/UpgradeVmResponse.java index 079d1a5cd07..0bc22dc7c3f 100644 --- a/api/src/com/cloud/api/response/UpgradeVmResponse.java +++ b/api/src/org/apache/cloudstack/api/response/UpgradeVmResponse.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.response; +package org.apache.cloudstack.api.response; import java.util.Date; @@ -22,6 +22,7 @@ import org.apache.cloudstack.api.ApiConstants; import com.cloud.utils.IdentityProxy; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; +import org.apache.cloudstack.api.BaseResponse; public class UpgradeVmResponse extends BaseResponse { @SerializedName("id") diff --git a/api/src/com/cloud/api/response/UserResponse.java b/api/src/org/apache/cloudstack/api/response/UserResponse.java similarity index 98% rename from api/src/com/cloud/api/response/UserResponse.java rename to api/src/org/apache/cloudstack/api/response/UserResponse.java index 6ecede61351..2868be4bbfd 100644 --- a/api/src/com/cloud/api/response/UserResponse.java +++ b/api/src/org/apache/cloudstack/api/response/UserResponse.java @@ -14,13 +14,14 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.response; +package org.apache.cloudstack.api.response; import java.util.Date; import com.cloud.utils.IdentityProxy; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; +import org.apache.cloudstack.api.BaseResponse; public class UserResponse extends BaseResponse { @SerializedName("id") @Param(description="the user ID") diff --git a/api/src/com/cloud/api/response/UserVmResponse.java b/api/src/org/apache/cloudstack/api/response/UserVmResponse.java old mode 100755 new mode 100644 similarity index 99% rename from api/src/com/cloud/api/response/UserVmResponse.java rename to api/src/org/apache/cloudstack/api/response/UserVmResponse.java index 0e0d5c60426..4934d8b362e --- a/api/src/com/cloud/api/response/UserVmResponse.java +++ b/api/src/org/apache/cloudstack/api/response/UserVmResponse.java @@ -14,14 +14,14 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.response; +package org.apache.cloudstack.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.BaseResponse; import org.apache.cloudstack.api.Entity; import com.cloud.vm.VirtualMachine; import com.cloud.serializer.Param; diff --git a/api/src/com/cloud/api/response/VirtualRouterProviderResponse.java b/api/src/org/apache/cloudstack/api/response/VirtualRouterProviderResponse.java similarity index 97% rename from api/src/com/cloud/api/response/VirtualRouterProviderResponse.java rename to api/src/org/apache/cloudstack/api/response/VirtualRouterProviderResponse.java index 8f27ff3654e..85e7f118376 100644 --- a/api/src/com/cloud/api/response/VirtualRouterProviderResponse.java +++ b/api/src/org/apache/cloudstack/api/response/VirtualRouterProviderResponse.java @@ -14,12 +14,13 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.response; +package org.apache.cloudstack.api.response; import org.apache.cloudstack.api.ApiConstants; import com.cloud.utils.IdentityProxy; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; +import org.apache.cloudstack.api.BaseResponse; public class VirtualRouterProviderResponse extends BaseResponse implements ControlledEntityResponse { @SerializedName(ApiConstants.ID) @Param(description="the id of the router") diff --git a/api/src/com/cloud/api/response/VlanIpRangeResponse.java b/api/src/org/apache/cloudstack/api/response/VlanIpRangeResponse.java similarity index 98% rename from api/src/com/cloud/api/response/VlanIpRangeResponse.java rename to api/src/org/apache/cloudstack/api/response/VlanIpRangeResponse.java index 527e27239bc..4993cc358fb 100644 --- a/api/src/com/cloud/api/response/VlanIpRangeResponse.java +++ b/api/src/org/apache/cloudstack/api/response/VlanIpRangeResponse.java @@ -14,12 +14,13 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.response; +package org.apache.cloudstack.api.response; import org.apache.cloudstack.api.ApiConstants; import com.cloud.utils.IdentityProxy; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; +import org.apache.cloudstack.api.BaseResponse; @SuppressWarnings("unused") public class VlanIpRangeResponse extends BaseResponse implements ControlledEntityResponse{ diff --git a/api/src/com/cloud/api/response/VolumeResponse.java b/api/src/org/apache/cloudstack/api/response/VolumeResponse.java old mode 100755 new mode 100644 similarity index 99% rename from api/src/com/cloud/api/response/VolumeResponse.java rename to api/src/org/apache/cloudstack/api/response/VolumeResponse.java index 07722780b18..8085e698971 --- a/api/src/com/cloud/api/response/VolumeResponse.java +++ b/api/src/org/apache/cloudstack/api/response/VolumeResponse.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.response; +package org.apache.cloudstack.api.response; import java.util.Date; import java.util.List; @@ -23,6 +23,7 @@ import org.apache.cloudstack.api.ApiConstants; import com.cloud.serializer.Param; import com.cloud.utils.IdentityProxy; import com.google.gson.annotations.SerializedName; +import org.apache.cloudstack.api.BaseResponse; @SuppressWarnings("unused") public class VolumeResponse extends BaseResponse implements ControlledEntityResponse{ diff --git a/api/src/com/cloud/api/response/VpcOfferingResponse.java b/api/src/org/apache/cloudstack/api/response/VpcOfferingResponse.java similarity index 94% rename from api/src/com/cloud/api/response/VpcOfferingResponse.java rename to api/src/org/apache/cloudstack/api/response/VpcOfferingResponse.java index 14d5c9ca564..f8c13511ae3 100644 --- a/api/src/com/cloud/api/response/VpcOfferingResponse.java +++ b/api/src/org/apache/cloudstack/api/response/VpcOfferingResponse.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.response; +package org.apache.cloudstack.api.response; import java.util.Date; import java.util.List; @@ -23,9 +23,10 @@ import org.apache.cloudstack.api.ApiConstants; import com.cloud.serializer.Param; import com.cloud.utils.IdentityProxy; import com.google.gson.annotations.SerializedName; +import org.apache.cloudstack.api.BaseResponse; @SuppressWarnings("unused") -public class VpcOfferingResponse extends BaseResponse{ +public class VpcOfferingResponse extends BaseResponse { @SerializedName("id") @Param(description="the id of the vpc offering") private final IdentityProxy id = new IdentityProxy("vpc_offerings"); diff --git a/api/src/com/cloud/api/response/VpcResponse.java b/api/src/org/apache/cloudstack/api/response/VpcResponse.java similarity index 98% rename from api/src/com/cloud/api/response/VpcResponse.java rename to api/src/org/apache/cloudstack/api/response/VpcResponse.java index 88a46106ab9..0c5f02a7fee 100644 --- a/api/src/com/cloud/api/response/VpcResponse.java +++ b/api/src/org/apache/cloudstack/api/response/VpcResponse.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.response; +package org.apache.cloudstack.api.response; import java.util.Date; import java.util.List; @@ -23,6 +23,7 @@ import org.apache.cloudstack.api.ApiConstants; import com.cloud.serializer.Param; import com.cloud.utils.IdentityProxy; import com.google.gson.annotations.SerializedName; +import org.apache.cloudstack.api.BaseResponse; @SuppressWarnings("unused") public class VpcResponse extends BaseResponse implements ControlledEntityResponse{ diff --git a/api/src/com/cloud/api/response/VpnUsersResponse.java b/api/src/org/apache/cloudstack/api/response/VpnUsersResponse.java similarity index 78% rename from api/src/com/cloud/api/response/VpnUsersResponse.java rename to api/src/org/apache/cloudstack/api/response/VpnUsersResponse.java index db12593c0ed..d1f45deb45e 100644 --- a/api/src/com/cloud/api/response/VpnUsersResponse.java +++ b/api/src/org/apache/cloudstack/api/response/VpnUsersResponse.java @@ -14,12 +14,13 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.response; +package org.apache.cloudstack.api.response; import org.apache.cloudstack.api.ApiConstants; import com.cloud.utils.IdentityProxy; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; +import org.apache.cloudstack.api.BaseResponse; @SuppressWarnings("unused") public class VpnUsersResponse extends BaseResponse implements ControlledEntityResponse{ @@ -33,10 +34,10 @@ public class VpnUsersResponse extends BaseResponse implements ControlledEntityRe private String accountName; @SerializedName(ApiConstants.DOMAIN_ID) @Param(description="the domain id of the account of the remote access vpn") - private IdentityProxy domainId = new IdentityProxy("domain"); + private IdentityProxy domainId = new IdentityProxy("domain"); @SerializedName(ApiConstants.DOMAIN) @Param(description="the domain name of the account of the remote access vpn") - private String domainName; + private String domainName; @SerializedName(ApiConstants.PROJECT_ID) @Param(description="the project id of the vpn") private IdentityProxy projectId = new IdentityProxy("projects"); @@ -45,25 +46,25 @@ public class VpnUsersResponse extends BaseResponse implements ControlledEntityRe private String projectName; - public void setId(Long id) { - this.id.setValue(id); - } + public void setId(Long id) { + this.id.setValue(id); + } - public void setUserName(String name) { - this.userName = name; - } + public void setUserName(String name) { + this.userName = name; + } - public void setAccountName(String accountName) { - this.accountName = accountName; - } + public void setAccountName(String accountName) { + this.accountName = accountName; + } - public void setDomainId(Long domainId) { - this.domainId.setValue(domainId); - } + public void setDomainId(Long domainId) { + this.domainId.setValue(domainId); + } - public void setDomainName(String name) { - this.domainName = name; - } + public void setDomainName(String name) { + this.domainName = name; + } @Override public void setProjectId(Long projectId) { diff --git a/api/src/com/cloud/api/response/ZoneResponse.java b/api/src/org/apache/cloudstack/api/response/ZoneResponse.java old mode 100755 new mode 100644 similarity index 89% rename from api/src/com/cloud/api/response/ZoneResponse.java rename to api/src/org/apache/cloudstack/api/response/ZoneResponse.java index 12967449791..22ab827cd7d --- a/api/src/com/cloud/api/response/ZoneResponse.java +++ b/api/src/org/apache/cloudstack/api/response/ZoneResponse.java @@ -14,11 +14,12 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.response; +package org.apache.cloudstack.api.response; import java.util.List; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseResponse; import org.apache.cloudstack.api.Entity; import com.cloud.dc.DataCenter; import com.cloud.utils.IdentityProxy; @@ -140,9 +141,9 @@ public class ZoneResponse extends BaseResponse { this.domain = domain; } - public void setDomainId(Long domainId) { - this.domainId = domainId; - } + public void setDomainId(Long domainId) { + this.domainId = domainId; + } public void setType(String networkType) { this.networkType = networkType; @@ -153,24 +154,24 @@ public class ZoneResponse extends BaseResponse { } public void setAllocationState(String allocationState) { - this.allocationState = allocationState; + this.allocationState = allocationState; } - public void setZoneToken(String zoneToken) { - this.zoneToken = zoneToken; - } + public void setZoneToken(String zoneToken) { + this.zoneToken = zoneToken; + } - public void setDhcpProvider(String dhcpProvider) { - this.dhcpProvider = dhcpProvider; - } + public void setDhcpProvider(String dhcpProvider) { + this.dhcpProvider = dhcpProvider; + } - public void setCapacitites(List capacitites) { - this.capacitites = capacitites; - } + public void setCapacitites(List capacitites) { + this.capacitites = capacitites; + } - public void setDomainName(String domainName) { - this.domainName = domainName; - } + public void setDomainName(String domainName) { + this.domainName = domainName; + } public void setLocalStorageEnabled(boolean localStorageEnabled) { this.localStorageEnabled = localStorageEnabled; diff --git a/api/src/com/cloud/api/view/vo/ControlledViewEntity.java b/api/src/org/apache/cloudstack/api/view/vo/ControlledViewEntity.java similarity index 96% rename from api/src/com/cloud/api/view/vo/ControlledViewEntity.java rename to api/src/org/apache/cloudstack/api/view/vo/ControlledViewEntity.java index 163e001a3c1..f98e1bbc3f5 100644 --- a/api/src/com/cloud/api/view/vo/ControlledViewEntity.java +++ b/api/src/org/apache/cloudstack/api/view/vo/ControlledViewEntity.java @@ -14,7 +14,7 @@ // 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; +package org.apache.cloudstack.api.view.vo; import com.cloud.acl.ControlledEntity; diff --git a/api/src/com/cloud/api/view/vo/DomainRouterJoinVO.java b/api/src/org/apache/cloudstack/api/view/vo/DomainRouterJoinVO.java similarity index 99% rename from api/src/com/cloud/api/view/vo/DomainRouterJoinVO.java rename to api/src/org/apache/cloudstack/api/view/vo/DomainRouterJoinVO.java index 58e69bfbb6c..747cde5411a 100644 --- a/api/src/com/cloud/api/view/vo/DomainRouterJoinVO.java +++ b/api/src/org/apache/cloudstack/api/view/vo/DomainRouterJoinVO.java @@ -14,7 +14,7 @@ // 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; +package org.apache.cloudstack.api.view.vo; import java.net.URI; import java.util.Date; diff --git a/api/src/com/cloud/api/view/vo/EventJoinVO.java b/api/src/org/apache/cloudstack/api/view/vo/EventJoinVO.java similarity index 99% rename from api/src/com/cloud/api/view/vo/EventJoinVO.java rename to api/src/org/apache/cloudstack/api/view/vo/EventJoinVO.java index 00e4d20e2cc..da322fbca8f 100644 --- a/api/src/com/cloud/api/view/vo/EventJoinVO.java +++ b/api/src/org/apache/cloudstack/api/view/vo/EventJoinVO.java @@ -14,7 +14,7 @@ // 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; +package org.apache.cloudstack.api.view.vo; import java.util.Date; diff --git a/api/src/com/cloud/api/view/vo/ResourceTagJoinVO.java b/api/src/org/apache/cloudstack/api/view/vo/ResourceTagJoinVO.java similarity index 99% rename from api/src/com/cloud/api/view/vo/ResourceTagJoinVO.java rename to api/src/org/apache/cloudstack/api/view/vo/ResourceTagJoinVO.java index 2237119833e..e39c1155f6e 100644 --- a/api/src/com/cloud/api/view/vo/ResourceTagJoinVO.java +++ b/api/src/org/apache/cloudstack/api/view/vo/ResourceTagJoinVO.java @@ -14,7 +14,7 @@ // 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; +package org.apache.cloudstack.api.view.vo; import javax.persistence.Column; import javax.persistence.Entity; diff --git a/api/src/com/cloud/api/view/vo/SecurityGroupJoinVO.java b/api/src/org/apache/cloudstack/api/view/vo/SecurityGroupJoinVO.java similarity index 99% rename from api/src/com/cloud/api/view/vo/SecurityGroupJoinVO.java rename to api/src/org/apache/cloudstack/api/view/vo/SecurityGroupJoinVO.java index cd4c738f251..725ee90af45 100644 --- a/api/src/com/cloud/api/view/vo/SecurityGroupJoinVO.java +++ b/api/src/org/apache/cloudstack/api/view/vo/SecurityGroupJoinVO.java @@ -14,7 +14,7 @@ // 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; +package org.apache.cloudstack.api.view.vo; import javax.persistence.Column; import javax.persistence.Entity; diff --git a/api/src/com/cloud/api/view/vo/UserVmJoinVO.java b/api/src/org/apache/cloudstack/api/view/vo/UserVmJoinVO.java similarity index 99% rename from api/src/com/cloud/api/view/vo/UserVmJoinVO.java rename to api/src/org/apache/cloudstack/api/view/vo/UserVmJoinVO.java index 1aa137bbda0..aff2a1b5a4d 100644 --- a/api/src/com/cloud/api/view/vo/UserVmJoinVO.java +++ b/api/src/org/apache/cloudstack/api/view/vo/UserVmJoinVO.java @@ -14,7 +14,7 @@ // 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; +package org.apache.cloudstack.api.view.vo; import java.net.URI; import java.util.Date; diff --git a/api/src/org/apache/cloudstack/network/ExternalNetworkDeviceManager.java b/api/src/org/apache/cloudstack/network/ExternalNetworkDeviceManager.java index 418cd653a9d..426a3b57dd9 100644 --- a/api/src/org/apache/cloudstack/network/ExternalNetworkDeviceManager.java +++ b/api/src/org/apache/cloudstack/network/ExternalNetworkDeviceManager.java @@ -28,7 +28,7 @@ import org.apache.cloudstack.api.response.NetworkDeviceResponse; import com.cloud.utils.component.Manager; public interface ExternalNetworkDeviceManager extends Manager { - + public static class NetworkDevice { private String _name; private String _provider; @@ -49,7 +49,7 @@ public interface ExternalNetworkDeviceManager extends Manager { _provider = ntwkServiceprovider; supportedNetworkDevices.add(this); } - + public String getName() { return _name; } @@ -69,11 +69,11 @@ public interface ExternalNetworkDeviceManager extends Manager { } public Host addNetworkDevice(AddNetworkDeviceCmd cmd); - + public NetworkDeviceResponse getApiResponse(Host device); - + public List listNetworkDevice(ListNetworkDeviceCmd cmd); - + public boolean deleteNetworkDevice(DeleteNetworkDeviceCmd cmd); - + } diff --git a/api/test/src/com/cloud/api/commands/test/AddHostCmdTest.java b/api/test/src/com/cloud/api/commands/test/AddHostCmdTest.java index c0cf2297e2b..e4bfcdd2f26 100644 --- a/api/test/src/com/cloud/api/commands/test/AddHostCmdTest.java +++ b/api/test/src/com/cloud/api/commands/test/AddHostCmdTest.java @@ -28,8 +28,8 @@ import org.mockito.Mockito; import org.apache.cloudstack.api.ResponseGenerator; import org.apache.cloudstack.api.ServerApiException; -import com.cloud.api.response.HostResponse; -import com.cloud.api.response.ListResponse; +import org.apache.cloudstack.api.response.HostResponse; +import org.apache.cloudstack.api.response.ListResponse; import com.cloud.exception.DiscoveryException; import com.cloud.exception.InvalidParameterValueException; import com.cloud.host.Host; diff --git a/api/test/src/com/cloud/api/commands/test/AddSecondaryStorageCmdTest.java b/api/test/src/com/cloud/api/commands/test/AddSecondaryStorageCmdTest.java index 5065e9d5180..3a613157307 100644 --- a/api/test/src/com/cloud/api/commands/test/AddSecondaryStorageCmdTest.java +++ b/api/test/src/com/cloud/api/commands/test/AddSecondaryStorageCmdTest.java @@ -28,7 +28,7 @@ import org.mockito.Mockito; import org.apache.cloudstack.api.ResponseGenerator; import org.apache.cloudstack.api.ServerApiException; -import com.cloud.api.response.HostResponse; +import org.apache.cloudstack.api.response.HostResponse; import com.cloud.host.Host; import com.cloud.resource.ResourceService; diff --git a/api/test/src/com/cloud/api/commands/test/AddSwiftCmdTest.java b/api/test/src/com/cloud/api/commands/test/AddSwiftCmdTest.java index 92048570842..b5dfa886dbd 100644 --- a/api/test/src/com/cloud/api/commands/test/AddSwiftCmdTest.java +++ b/api/test/src/com/cloud/api/commands/test/AddSwiftCmdTest.java @@ -28,7 +28,7 @@ import org.mockito.Mockito; import org.apache.cloudstack.api.ResponseGenerator; import org.apache.cloudstack.api.ServerApiException; -import com.cloud.api.response.SwiftResponse; +import org.apache.cloudstack.api.response.SwiftResponse; import com.cloud.exception.DiscoveryException; import com.cloud.resource.ResourceService; import com.cloud.storage.Swift; diff --git a/api/test/src/com/cloud/api/commands/test/ListRoutersCmdTest.java b/api/test/src/com/cloud/api/commands/test/ListRoutersCmdTest.java index 68083984683..21e75a0731b 100644 --- a/api/test/src/com/cloud/api/commands/test/ListRoutersCmdTest.java +++ b/api/test/src/com/cloud/api/commands/test/ListRoutersCmdTest.java @@ -31,9 +31,9 @@ import org.mockito.Mockito; import org.apache.cloudstack.api.ResponseGenerator; import org.apache.cloudstack.api.ServerApiException; -import com.cloud.api.response.DomainRouterResponse; -import com.cloud.api.response.ListResponse; -import com.cloud.api.view.vo.DomainRouterJoinVO; +import org.apache.cloudstack.api.response.DomainRouterResponse; +import org.apache.cloudstack.api.response.ListResponse; +import org.apache.cloudstack.api.view.vo.DomainRouterJoinVO; import com.cloud.server.ManagementService; import com.cloud.utils.Pair; diff --git a/api/test/src/com/cloud/api/commands/test/ListVmsCmdTest.java b/api/test/src/com/cloud/api/commands/test/ListVmsCmdTest.java index 19ce047d241..1adfb1540fa 100644 --- a/api/test/src/com/cloud/api/commands/test/ListVmsCmdTest.java +++ b/api/test/src/com/cloud/api/commands/test/ListVmsCmdTest.java @@ -18,29 +18,24 @@ 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.apache.cloudstack.api.command.user.vm.ListVMsCmd; import org.junit.Before; import org.junit.Rule; import org.junit.Test; import org.junit.rules.ExpectedException; import org.mockito.Mockito; -import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.ApiConstants.VMDetails; -import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.ResponseGenerator; import org.apache.cloudstack.api.ServerApiException; -import org.apache.cloudstack.api.user.vm.command.ListVMsCmd; -import com.cloud.api.response.ListResponse; -import com.cloud.api.response.UserVmResponse; -import com.cloud.api.view.vo.UserVmJoinVO; +import org.apache.cloudstack.api.response.ListResponse; +import org.apache.cloudstack.api.response.UserVmResponse; +import org.apache.cloudstack.api.view.vo.UserVmJoinVO; import com.cloud.utils.Pair; import com.cloud.vm.UserVmService; diff --git a/client/tomcatconf/commands.properties.in b/client/tomcatconf/commands.properties.in index 33daafd0d7d..ccb98bf5ef8 100755 --- a/client/tomcatconf/commands.properties.in +++ b/client/tomcatconf/commands.properties.in @@ -54,17 +54,17 @@ updateResourceCount=org.apache.cloudstack.api.command.user.resource.UpdateResour listResourceLimits=org.apache.cloudstack.api.command.user.resource.ListResourceLimitsCmd;15 #### VM commands -deployVirtualMachine=org.apache.cloudstack.api.user.vm.command.DeployVMCmd;15 -destroyVirtualMachine=org.apache.cloudstack.api.user.vm.command.DestroyVMCmd;15 -rebootVirtualMachine=org.apache.cloudstack.api.user.vm.command.RebootVMCmd;15 -startVirtualMachine=org.apache.cloudstack.api.user.vm.command.StartVMCmd;15 -stopVirtualMachine=org.apache.cloudstack.api.user.vm.command.StopVMCmd;15 -resetPasswordForVirtualMachine=org.apache.cloudstack.api.user.vm.command.ResetVMPasswordCmd;15 -updateVirtualMachine=org.apache.cloudstack.api.user.vm.command.UpdateVMCmd;15 -listVirtualMachines=org.apache.cloudstack.api.user.vm.command.ListVMsCmd;15 -getVMPassword=org.apache.cloudstack.api.user.vm.command.GetVMPasswordCmd;15 -restoreVirtualMachine=org.apache.cloudstack.api.user.vm.command.RestoreVMCmd;15 -changeServiceForVirtualMachine=org.apache.cloudstack.api.user.vm.command.UpgradeVMCmd;15 +deployVirtualMachine=org.apache.cloudstack.api.command.user.vm.DeployVMCmd;15 +destroyVirtualMachine=org.apache.cloudstack.api.command.user.vm.DestroyVMCmd;15 +rebootVirtualMachine=org.apache.cloudstack.api.command.user.vm.RebootVMCmd;15 +startVirtualMachine=org.apache.cloudstack.api.command.user.vm.StartVMCmd;15 +stopVirtualMachine=org.apache.cloudstack.api.command.user.vm.StopVMCmd;15 +resetPasswordForVirtualMachine=org.apache.cloudstack.api.command.user.vm.ResetVMPasswordCmd;15 +updateVirtualMachine=org.apache.cloudstack.api.command.user.vm.UpdateVMCmd;15 +listVirtualMachines=org.apache.cloudstack.api.command.user.vm.ListVMsCmd;15 +getVMPassword=org.apache.cloudstack.api.command.user.vm.GetVMPasswordCmd;15 +restoreVirtualMachine=org.apache.cloudstack.api.command.user.vm.RestoreVMCmd;15 +changeServiceForVirtualMachine=org.apache.cloudstack.api.command.user.vm.UpgradeVMCmd;15 assignVirtualMachine=org.apache.cloudstack.api.command.admin.vm.AssignVMCmd;1 migrateVirtualMachine=org.apache.cloudstack.api.command.admin.vm.MigrateVMCmd;1 recoverVirtualMachine=org.apache.cloudstack.api.command.admin.vm.RecoverVMCmd;7 @@ -212,7 +212,7 @@ listPods=org.apache.cloudstack.api.command.admin.pod.ListPodsByCmd;3 createZone=org.apache.cloudstack.api.command.admin.zone.CreateZoneCmd;1 updateZone=org.apache.cloudstack.api.command.admin.zone.UpdateZoneCmd;1 deleteZone=org.apache.cloudstack.api.command.admin.zone.DeleteZoneCmd;1 -listZones=org.apache.cloudstack.api.user.zone.command.ListZonesByCmd;15 +listZones=org.apache.cloudstack.api.command.user.zone.ListZonesByCmd;15 #### events commands listEvents=org.apache.cloudstack.api.command.user.event.ListEventsCmd;15 @@ -243,14 +243,14 @@ addSecondaryStorage=org.apache.cloudstack.api.command.admin.host.AddSecondarySto updateHostPassword=org.apache.cloudstack.api.command.admin.host.UpdateHostPasswordCmd;1 #### volume commands -attachVolume=org.apache.cloudstack.api.user.volume.command.AttachVolumeCmd;15 -uploadVolume=org.apache.cloudstack.api.user.volume.command.UploadVolumeCmd;15 -detachVolume=org.apache.cloudstack.api.user.volume.command.DetachVolumeCmd;15 -createVolume=org.apache.cloudstack.api.user.volume.command.CreateVolumeCmd;15 -deleteVolume=org.apache.cloudstack.api.user.volume.command.DeleteVolumeCmd;15 -listVolumes=org.apache.cloudstack.api.user.volume.command.ListVolumesCmd;15 -extractVolume=org.apache.cloudstack.api.user.volume.command.ExtractVolumeCmd;15 -migrateVolume=org.apache.cloudstack.api.user.volume.command.MigrateVolumeCmd;15 +attachVolume=org.apache.cloudstack.api.command.user.volume.AttachVolumeCmd;15 +uploadVolume=org.apache.cloudstack.api.command.user.volume.UploadVolumeCmd;15 +detachVolume=org.apache.cloudstack.api.command.user.volume.DetachVolumeCmd;15 +createVolume=org.apache.cloudstack.api.command.user.volume.CreateVolumeCmd;15 +deleteVolume=org.apache.cloudstack.api.command.user.volume.DeleteVolumeCmd;15 +listVolumes=org.apache.cloudstack.api.command.user.volume.ListVolumesCmd;15 +extractVolume=org.apache.cloudstack.api.command.user.volume.ExtractVolumeCmd;15 +migrateVolume=org.apache.cloudstack.api.command.user.volume.MigrateVolumeCmd;15 #### registration command: FIXME -- this really should be something in management server that #### generates a new key for the user and they just have to @@ -282,10 +282,10 @@ revokeSecurityGroupEgress=org.apache.cloudstack.api.command.user.securitygroup.R listSecurityGroups=org.apache.cloudstack.api.command.user.securitygroup.ListSecurityGroupsCmd;15 #### vm group commands -createInstanceGroup=org.apache.cloudstack.api.user.vmgroup.command.CreateVMGroupCmd;15 -deleteInstanceGroup=org.apache.cloudstack.api.user.vmgroup.command.DeleteVMGroupCmd;15 -updateInstanceGroup=org.apache.cloudstack.api.user.vmgroup.command.UpdateVMGroupCmd;15 -listInstanceGroups=org.apache.cloudstack.api.user.vmgroup.command.ListVMGroupsCmd;15 +createInstanceGroup=org.apache.cloudstack.api.command.user.vmgroup.CreateVMGroupCmd;15 +deleteInstanceGroup=org.apache.cloudstack.api.command.user.vmgroup.DeleteVMGroupCmd;15 +updateInstanceGroup=org.apache.cloudstack.api.command.user.vmgroup.UpdateVMGroupCmd;15 +listInstanceGroups=org.apache.cloudstack.api.command.user.vmgroup.ListVMGroupsCmd;15 ### Certificate commands uploadCustomCertificate=org.apache.cloudstack.api.command.admin.resource.UploadCustomCertificateCmd;1 @@ -294,9 +294,9 @@ uploadCustomCertificate=org.apache.cloudstack.api.command.admin.resource.UploadC listHypervisors=org.apache.cloudstack.api.command.user.resource.ListHypervisorsCmd;15 ### VPN -createRemoteAccessVpn=org.apache.cloudstack.api.user.vpn.command.CreateRemoteAccessVpnCmd;15 -deleteRemoteAccessVpn=org.apache.cloudstack.api.user.vpn.command.DeleteRemoteAccessVpnCmd;15 -listRemoteAccessVpns=org.apache.cloudstack.api.user.vpn.command.ListRemoteAccessVpnsCmd;15 +createRemoteAccessVpn=org.apache.cloudstack.api.command.user.vpn.CreateRemoteAccessVpnCmd;15 +deleteRemoteAccessVpn=org.apache.cloudstack.api.command.user.vpn.DeleteRemoteAccessVpnCmd;15 +listRemoteAccessVpns=org.apache.cloudstack.api.command.user.vpn.ListRemoteAccessVpnsCmd;15 addVpnUser=org.apache.cloudstack.api.command.user.user.AddVpnUserCmd;15 removeVpnUser=org.apache.cloudstack.api.command.user.user.RemoveVpnUserCmd;15 @@ -376,21 +376,21 @@ listNetworkDevice=org.apache.cloudstack.api.command.admin.network.ListNetworkDev deleteNetworkDevice=org.apache.cloudstack.api.command.admin.network.DeleteNetworkDeviceCmd;1 ### VPC commands -createVPC=org.apache.cloudstack.api.user.vpc.command.CreateVPCCmd;15 -listVPCs=org.apache.cloudstack.api.user.vpc.command.ListVPCsCmd;15 -deleteVPC=org.apache.cloudstack.api.user.vpc.command.DeleteVPCCmd;15 -updateVPC=org.apache.cloudstack.api.user.vpc.command.UpdateVPCCmd;15 -restartVPC=org.apache.cloudstack.api.user.vpc.command.RestartVPCCmd;15 +createVPC=org.apache.cloudstack.api.command.user.vpc.CreateVPCCmd;15 +listVPCs=org.apache.cloudstack.api.command.user.vpc.ListVPCsCmd;15 +deleteVPC=org.apache.cloudstack.api.command.user.vpc.DeleteVPCCmd;15 +updateVPC=org.apache.cloudstack.api.command.user.vpc.UpdateVPCCmd;15 +restartVPC=org.apache.cloudstack.api.command.user.vpc.RestartVPCCmd;15 #### VPC offering commands createVPCOffering=org.apache.cloudstack.api.command.admin.vpc.CreateVPCOfferingCmd;1 updateVPCOffering=org.apache.cloudstack.api.command.admin.vpc.UpdateVPCOfferingCmd;1 deleteVPCOffering=org.apache.cloudstack.api.command.admin.vpc.DeleteVPCOfferingCmd;1 -listVPCOfferings=org.apache.cloudstack.api.user.vpc.command.ListVPCOfferingsCmd;15 +listVPCOfferings=org.apache.cloudstack.api.command.user.vpc.ListVPCOfferingsCmd;15 #### Private gateway commands createPrivateGateway=org.apache.cloudstack.api.command.admin.vpc.CreatePrivateGatewayCmd;1 -listPrivateGateways=org.apache.cloudstack.api.user.vpc.command.ListPrivateGatewaysCmd;15 +listPrivateGateways=org.apache.cloudstack.api.command.user.vpc.ListPrivateGatewaysCmd;15 deletePrivateGateway=org.apache.cloudstack.api.command.admin.vpc.DeletePrivateGatewayCmd;1 #### Network ACL commands @@ -399,9 +399,9 @@ deleteNetworkACL=org.apache.cloudstack.api.command.user.network.DeleteNetworkACL listNetworkACLs=org.apache.cloudstack.api.command.user.network.ListNetworkACLsCmd;15 #### Static route commands -createStaticRoute=org.apache.cloudstack.api.user.vpc.command.CreateStaticRouteCmd;15 -deleteStaticRoute=org.apache.cloudstack.api.user.vpc.command.DeleteStaticRouteCmd;15 -listStaticRoutes=org.apache.cloudstack.api.user.vpc.command.ListStaticRoutesCmd;15 +createStaticRoute=org.apache.cloudstack.api.command.user.vpc.CreateStaticRouteCmd;15 +deleteStaticRoute=org.apache.cloudstack.api.command.user.vpc.DeleteStaticRouteCmd;15 +listStaticRoutes=org.apache.cloudstack.api.command.user.vpc.ListStaticRoutesCmd;15 #### Tags commands createTags=org.apache.cloudstack.api.command.user.tag.CreateTagsCmd;15 @@ -409,14 +409,14 @@ deleteTags=org.apache.cloudstack.api.command.user.tag.DeleteTagsCmd;15 listTags=org.apache.cloudstack.api.command.user.tag.ListTagsCmd;15 ### Site-to-site VPN commands -createVpnCustomerGateway=org.apache.cloudstack.api.user.vpn.command.CreateVpnCustomerGatewayCmd;15 -createVpnGateway=org.apache.cloudstack.api.user.vpn.command.CreateVpnGatewayCmd;15 -createVpnConnection=org.apache.cloudstack.api.user.vpn.command.CreateVpnConnectionCmd;15 -deleteVpnCustomerGateway=org.apache.cloudstack.api.user.vpn.command.DeleteVpnCustomerGatewayCmd;15 -deleteVpnGateway=org.apache.cloudstack.api.user.vpn.command.DeleteVpnGatewayCmd;15 -deleteVpnConnection=org.apache.cloudstack.api.user.vpn.command.DeleteVpnConnectionCmd;15 -updateVpnCustomerGateway=org.apache.cloudstack.api.user.vpn.command.UpdateVpnCustomerGatewayCmd;15 -resetVpnConnection=org.apache.cloudstack.api.user.vpn.command.ResetVpnConnectionCmd;15 -listVpnCustomerGateways=org.apache.cloudstack.api.user.vpn.command.ListVpnCustomerGatewaysCmd;15 -listVpnGateways=org.apache.cloudstack.api.user.vpn.command.ListVpnGatewaysCmd;15 -listVpnConnections=org.apache.cloudstack.api.user.vpn.command.ListVpnConnectionsCmd;15 +createVpnCustomerGateway=org.apache.cloudstack.api.command.user.vpn.CreateVpnCustomerGatewayCmd;15 +createVpnGateway=org.apache.cloudstack.api.command.user.vpn.CreateVpnGatewayCmd;15 +createVpnConnection=org.apache.cloudstack.api.command.user.vpn.CreateVpnConnectionCmd;15 +deleteVpnCustomerGateway=org.apache.cloudstack.api.command.user.vpn.DeleteVpnCustomerGatewayCmd;15 +deleteVpnGateway=org.apache.cloudstack.api.command.user.vpn.DeleteVpnGatewayCmd;15 +deleteVpnConnection=org.apache.cloudstack.api.command.user.vpn.DeleteVpnConnectionCmd;15 +updateVpnCustomerGateway=org.apache.cloudstack.api.command.user.vpn.UpdateVpnCustomerGatewayCmd;15 +resetVpnConnection=org.apache.cloudstack.api.command.user.vpn.ResetVpnConnectionCmd;15 +listVpnCustomerGateways=org.apache.cloudstack.api.command.user.vpn.ListVpnCustomerGatewaysCmd;15 +listVpnGateways=org.apache.cloudstack.api.command.user.vpn.ListVpnGatewaysCmd;15 +listVpnConnections=org.apache.cloudstack.api.command.user.vpn.ListVpnConnectionsCmd;15 diff --git a/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/ListLunsCmd.java b/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/ListLunsCmd.java index 03d431218dc..4b8254e35bb 100644 --- a/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/ListLunsCmd.java +++ b/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/ListLunsCmd.java @@ -26,7 +26,7 @@ import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; -import com.cloud.api.response.ListResponse; +import org.apache.cloudstack.api.response.ListResponse; import com.cloud.exception.ConcurrentOperationException; import com.cloud.exception.InsufficientCapacityException; import com.cloud.exception.InvalidParameterValueException; diff --git a/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/ListVolumePoolsCmd.java b/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/ListVolumePoolsCmd.java index bd3669eb640..78033ff0893 100644 --- a/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/ListVolumePoolsCmd.java +++ b/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/ListVolumePoolsCmd.java @@ -24,7 +24,7 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.ServerApiException; -import com.cloud.api.response.ListResponse; +import org.apache.cloudstack.api.response.ListResponse; import com.cloud.exception.ConcurrentOperationException; import com.cloud.exception.InsufficientCapacityException; import com.cloud.exception.InvalidParameterValueException; diff --git a/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/ListVolumesOnFilerCmd.java b/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/ListVolumesOnFilerCmd.java index 0006a2f8b33..597af5dfef1 100644 --- a/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/ListVolumesOnFilerCmd.java +++ b/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/ListVolumesOnFilerCmd.java @@ -26,7 +26,7 @@ import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; -import com.cloud.api.response.ListResponse; +import org.apache.cloudstack.api.response.ListResponse; import com.cloud.exception.ConcurrentOperationException; import com.cloud.exception.InsufficientCapacityException; import com.cloud.exception.InvalidParameterValueException; diff --git a/plugins/hypervisors/vmware/src/com/cloud/api/commands/DeleteCiscoNexusVSMCmd.java b/plugins/hypervisors/vmware/src/com/cloud/api/commands/DeleteCiscoNexusVSMCmd.java index 4b9b196c2ce..8c228685a8e 100644 --- a/plugins/hypervisors/vmware/src/com/cloud/api/commands/DeleteCiscoNexusVSMCmd.java +++ b/plugins/hypervisors/vmware/src/com/cloud/api/commands/DeleteCiscoNexusVSMCmd.java @@ -26,7 +26,7 @@ import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.PlugService; import org.apache.cloudstack.api.ServerApiException; -import com.cloud.api.response.SuccessResponse; +import org.apache.cloudstack.api.response.SuccessResponse; import com.cloud.event.EventTypes; import com.cloud.exception.ConcurrentOperationException; import com.cloud.exception.InsufficientCapacityException; diff --git a/plugins/hypervisors/vmware/src/com/cloud/api/commands/ListCiscoNexusVSMsCmd.java b/plugins/hypervisors/vmware/src/com/cloud/api/commands/ListCiscoNexusVSMsCmd.java index a075d27cc70..f0ecd55e712 100755 --- a/plugins/hypervisors/vmware/src/com/cloud/api/commands/ListCiscoNexusVSMsCmd.java +++ b/plugins/hypervisors/vmware/src/com/cloud/api/commands/ListCiscoNexusVSMsCmd.java @@ -26,7 +26,7 @@ import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.PlugService; import org.apache.cloudstack.api.ServerApiException; import com.cloud.api.response.CiscoNexusVSMResponse; -import com.cloud.api.response.ListResponse; +import org.apache.cloudstack.api.response.ListResponse; import com.cloud.exception.ConcurrentOperationException; import com.cloud.exception.InsufficientCapacityException; import com.cloud.exception.ResourceAllocationException; diff --git a/plugins/hypervisors/vmware/src/com/cloud/api/response/CiscoNexusVSMResponse.java b/plugins/hypervisors/vmware/src/com/cloud/api/response/CiscoNexusVSMResponse.java index 5bab173f158..95f645461fa 100644 --- a/plugins/hypervisors/vmware/src/com/cloud/api/response/CiscoNexusVSMResponse.java +++ b/plugins/hypervisors/vmware/src/com/cloud/api/response/CiscoNexusVSMResponse.java @@ -20,6 +20,7 @@ import org.apache.cloudstack.api.ApiConstants; import com.cloud.utils.IdentityProxy; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; +import org.apache.cloudstack.api.BaseResponse; public class CiscoNexusVSMResponse extends BaseResponse { diff --git a/plugins/network-elements/f5/src/com/cloud/api/commands/DeleteExternalLoadBalancerCmd.java b/plugins/network-elements/f5/src/com/cloud/api/commands/DeleteExternalLoadBalancerCmd.java index d579ff25057..1c9c146a982 100644 --- a/plugins/network-elements/f5/src/com/cloud/api/commands/DeleteExternalLoadBalancerCmd.java +++ b/plugins/network-elements/f5/src/com/cloud/api/commands/DeleteExternalLoadBalancerCmd.java @@ -26,7 +26,7 @@ import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.PlugService; import org.apache.cloudstack.api.ServerApiException; -import com.cloud.api.response.SuccessResponse; +import org.apache.cloudstack.api.response.SuccessResponse; import com.cloud.exception.InvalidParameterValueException; import com.cloud.network.element.F5ExternalLoadBalancerElementService; import com.cloud.user.Account; diff --git a/plugins/network-elements/f5/src/com/cloud/api/commands/DeleteF5LoadBalancerCmd.java b/plugins/network-elements/f5/src/com/cloud/api/commands/DeleteF5LoadBalancerCmd.java index 5c4a4698a2a..867fbf9aa0f 100644 --- a/plugins/network-elements/f5/src/com/cloud/api/commands/DeleteF5LoadBalancerCmd.java +++ b/plugins/network-elements/f5/src/com/cloud/api/commands/DeleteF5LoadBalancerCmd.java @@ -28,7 +28,7 @@ import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.PlugService; import org.apache.cloudstack.api.ServerApiException; -import com.cloud.api.response.SuccessResponse; +import org.apache.cloudstack.api.response.SuccessResponse; import com.cloud.event.EventTypes; import com.cloud.exception.ConcurrentOperationException; import com.cloud.exception.InsufficientCapacityException; diff --git a/plugins/network-elements/f5/src/com/cloud/api/commands/ListExternalLoadBalancersCmd.java b/plugins/network-elements/f5/src/com/cloud/api/commands/ListExternalLoadBalancersCmd.java index b31ea4fef9a..c6c74ef42f6 100644 --- a/plugins/network-elements/f5/src/com/cloud/api/commands/ListExternalLoadBalancersCmd.java +++ b/plugins/network-elements/f5/src/com/cloud/api/commands/ListExternalLoadBalancersCmd.java @@ -28,8 +28,8 @@ import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.PlugService; -import com.cloud.api.response.HostResponse; -import com.cloud.api.response.ListResponse; +import org.apache.cloudstack.api.response.HostResponse; +import org.apache.cloudstack.api.response.ListResponse; import com.cloud.host.Host; import com.cloud.network.element.F5ExternalLoadBalancerElementService; import com.cloud.server.api.response.ExternalLoadBalancerResponse; diff --git a/plugins/network-elements/f5/src/com/cloud/api/commands/ListF5LoadBalancerNetworksCmd.java b/plugins/network-elements/f5/src/com/cloud/api/commands/ListF5LoadBalancerNetworksCmd.java index f974bdbbc01..38570225892 100644 --- a/plugins/network-elements/f5/src/com/cloud/api/commands/ListF5LoadBalancerNetworksCmd.java +++ b/plugins/network-elements/f5/src/com/cloud/api/commands/ListF5LoadBalancerNetworksCmd.java @@ -30,8 +30,8 @@ import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.PlugService; import org.apache.cloudstack.api.ServerApiException; -import com.cloud.api.response.ListResponse; -import com.cloud.api.response.NetworkResponse; +import org.apache.cloudstack.api.response.ListResponse; +import org.apache.cloudstack.api.response.NetworkResponse; import com.cloud.exception.ConcurrentOperationException; import com.cloud.exception.InsufficientCapacityException; import com.cloud.exception.InvalidParameterValueException; diff --git a/plugins/network-elements/f5/src/com/cloud/api/commands/ListF5LoadBalancersCmd.java b/plugins/network-elements/f5/src/com/cloud/api/commands/ListF5LoadBalancersCmd.java index 827aba3e590..8df7177ff9b 100644 --- a/plugins/network-elements/f5/src/com/cloud/api/commands/ListF5LoadBalancersCmd.java +++ b/plugins/network-elements/f5/src/com/cloud/api/commands/ListF5LoadBalancersCmd.java @@ -31,7 +31,7 @@ import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.PlugService; import org.apache.cloudstack.api.ServerApiException; import com.cloud.api.response.F5LoadBalancerResponse; -import com.cloud.api.response.ListResponse; +import org.apache.cloudstack.api.response.ListResponse; import com.cloud.exception.ConcurrentOperationException; import com.cloud.exception.InsufficientCapacityException; import com.cloud.exception.InvalidParameterValueException; diff --git a/plugins/network-elements/f5/src/com/cloud/api/response/F5LoadBalancerResponse.java b/plugins/network-elements/f5/src/com/cloud/api/response/F5LoadBalancerResponse.java index 03c8faf8df6..07be630e783 100644 --- a/plugins/network-elements/f5/src/com/cloud/api/response/F5LoadBalancerResponse.java +++ b/plugins/network-elements/f5/src/com/cloud/api/response/F5LoadBalancerResponse.java @@ -20,6 +20,7 @@ import org.apache.cloudstack.api.ApiConstants; import com.cloud.utils.IdentityProxy; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; +import org.apache.cloudstack.api.BaseResponse; public class F5LoadBalancerResponse extends BaseResponse { @SerializedName(ApiConstants.LOAD_BALANCER_DEVICE_ID) @Param(description="device id of the F5 load balancer") diff --git a/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/DeleteExternalFirewallCmd.java b/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/DeleteExternalFirewallCmd.java index f9b27cbd3bc..640de7839ce 100644 --- a/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/DeleteExternalFirewallCmd.java +++ b/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/DeleteExternalFirewallCmd.java @@ -25,7 +25,7 @@ import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.PlugService; import org.apache.cloudstack.api.ServerApiException; -import com.cloud.api.response.SuccessResponse; +import org.apache.cloudstack.api.response.SuccessResponse; import com.cloud.exception.InvalidParameterValueException; import com.cloud.network.element.JuniperSRXFirewallElementService; import com.cloud.user.Account; diff --git a/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/DeleteSrxFirewallCmd.java b/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/DeleteSrxFirewallCmd.java index 5870d4c8f05..b416fefbf5f 100644 --- a/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/DeleteSrxFirewallCmd.java +++ b/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/DeleteSrxFirewallCmd.java @@ -26,7 +26,7 @@ import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.PlugService; import org.apache.cloudstack.api.ServerApiException; -import com.cloud.api.response.SuccessResponse; +import org.apache.cloudstack.api.response.SuccessResponse; import com.cloud.event.EventTypes; import com.cloud.exception.ConcurrentOperationException; import com.cloud.exception.InsufficientCapacityException; diff --git a/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/ListExternalFirewallsCmd.java b/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/ListExternalFirewallsCmd.java index 153f9e1b29f..c993d8983e4 100644 --- a/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/ListExternalFirewallsCmd.java +++ b/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/ListExternalFirewallsCmd.java @@ -28,7 +28,7 @@ import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.PlugService; -import com.cloud.api.response.ListResponse; +import org.apache.cloudstack.api.response.ListResponse; import com.cloud.host.Host; import com.cloud.network.element.JuniperSRXFirewallElementService; import com.cloud.server.api.response.ExternalFirewallResponse; diff --git a/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/ListSrxFirewallNetworksCmd.java b/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/ListSrxFirewallNetworksCmd.java index a352fa15f75..73af77f74e4 100644 --- a/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/ListSrxFirewallNetworksCmd.java +++ b/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/ListSrxFirewallNetworksCmd.java @@ -29,8 +29,8 @@ import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.PlugService; import org.apache.cloudstack.api.ServerApiException; -import com.cloud.api.response.ListResponse; -import com.cloud.api.response.NetworkResponse; +import org.apache.cloudstack.api.response.ListResponse; +import org.apache.cloudstack.api.response.NetworkResponse; import com.cloud.exception.ConcurrentOperationException; import com.cloud.exception.InsufficientCapacityException; import com.cloud.exception.InvalidParameterValueException; diff --git a/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/ListSrxFirewallsCmd.java b/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/ListSrxFirewallsCmd.java index 3acbc806e62..0ba8a9503ff 100644 --- a/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/ListSrxFirewallsCmd.java +++ b/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/ListSrxFirewallsCmd.java @@ -29,7 +29,7 @@ import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.PlugService; import org.apache.cloudstack.api.ServerApiException; -import com.cloud.api.response.ListResponse; +import org.apache.cloudstack.api.response.ListResponse; import com.cloud.api.response.SrxFirewallResponse; import com.cloud.exception.ConcurrentOperationException; import com.cloud.exception.InsufficientCapacityException; diff --git a/plugins/network-elements/juniper-srx/src/com/cloud/api/response/SrxFirewallResponse.java b/plugins/network-elements/juniper-srx/src/com/cloud/api/response/SrxFirewallResponse.java index 4382b5e84b1..8ad8597cff5 100644 --- a/plugins/network-elements/juniper-srx/src/com/cloud/api/response/SrxFirewallResponse.java +++ b/plugins/network-elements/juniper-srx/src/com/cloud/api/response/SrxFirewallResponse.java @@ -20,6 +20,7 @@ import org.apache.cloudstack.api.ApiConstants; import com.cloud.utils.IdentityProxy; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; +import org.apache.cloudstack.api.BaseResponse; @SuppressWarnings("unused") public class SrxFirewallResponse extends BaseResponse { diff --git a/plugins/network-elements/netscaler/src/com/cloud/api/commands/DeleteNetscalerLoadBalancerCmd.java b/plugins/network-elements/netscaler/src/com/cloud/api/commands/DeleteNetscalerLoadBalancerCmd.java index b5620323bf1..00e898e6bba 100644 --- a/plugins/network-elements/netscaler/src/com/cloud/api/commands/DeleteNetscalerLoadBalancerCmd.java +++ b/plugins/network-elements/netscaler/src/com/cloud/api/commands/DeleteNetscalerLoadBalancerCmd.java @@ -25,7 +25,7 @@ import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.PlugService; import org.apache.cloudstack.api.ServerApiException; -import com.cloud.api.response.SuccessResponse; +import org.apache.cloudstack.api.response.SuccessResponse; import com.cloud.event.EventTypes; import com.cloud.exception.ConcurrentOperationException; import com.cloud.exception.InsufficientCapacityException; diff --git a/plugins/network-elements/netscaler/src/com/cloud/api/commands/ListNetscalerLoadBalancerNetworksCmd.java b/plugins/network-elements/netscaler/src/com/cloud/api/commands/ListNetscalerLoadBalancerNetworksCmd.java index 2877f3c5071..6e02c35a21f 100644 --- a/plugins/network-elements/netscaler/src/com/cloud/api/commands/ListNetscalerLoadBalancerNetworksCmd.java +++ b/plugins/network-elements/netscaler/src/com/cloud/api/commands/ListNetscalerLoadBalancerNetworksCmd.java @@ -27,8 +27,8 @@ import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.PlugService; import org.apache.cloudstack.api.ServerApiException; -import com.cloud.api.response.ListResponse; -import com.cloud.api.response.NetworkResponse; +import org.apache.cloudstack.api.response.ListResponse; +import org.apache.cloudstack.api.response.NetworkResponse; import com.cloud.exception.ConcurrentOperationException; import com.cloud.exception.InsufficientCapacityException; import com.cloud.exception.InvalidParameterValueException; diff --git a/plugins/network-elements/netscaler/src/com/cloud/api/commands/ListNetscalerLoadBalancersCmd.java b/plugins/network-elements/netscaler/src/com/cloud/api/commands/ListNetscalerLoadBalancersCmd.java index 4e5e3d59626..fbd49e146c8 100644 --- a/plugins/network-elements/netscaler/src/com/cloud/api/commands/ListNetscalerLoadBalancersCmd.java +++ b/plugins/network-elements/netscaler/src/com/cloud/api/commands/ListNetscalerLoadBalancersCmd.java @@ -27,7 +27,7 @@ import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.PlugService; import org.apache.cloudstack.api.ServerApiException; -import com.cloud.api.response.ListResponse; +import org.apache.cloudstack.api.response.ListResponse; import com.cloud.api.response.NetscalerLoadBalancerResponse; import com.cloud.exception.ConcurrentOperationException; import com.cloud.exception.InsufficientCapacityException; diff --git a/plugins/network-elements/netscaler/src/com/cloud/api/response/NetscalerLoadBalancerResponse.java b/plugins/network-elements/netscaler/src/com/cloud/api/response/NetscalerLoadBalancerResponse.java index 428cdc18513..290018c3c28 100644 --- a/plugins/network-elements/netscaler/src/com/cloud/api/response/NetscalerLoadBalancerResponse.java +++ b/plugins/network-elements/netscaler/src/com/cloud/api/response/NetscalerLoadBalancerResponse.java @@ -22,6 +22,7 @@ import org.apache.cloudstack.api.ApiConstants; import com.cloud.utils.IdentityProxy; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; +import org.apache.cloudstack.api.BaseResponse; @SuppressWarnings("unused") public class NetscalerLoadBalancerResponse extends BaseResponse { diff --git a/plugins/network-elements/nicira-nvp/src/com/cloud/api/commands/DeleteNiciraNvpDeviceCmd.java b/plugins/network-elements/nicira-nvp/src/com/cloud/api/commands/DeleteNiciraNvpDeviceCmd.java index 8bce91cf989..d02b324a623 100644 --- a/plugins/network-elements/nicira-nvp/src/com/cloud/api/commands/DeleteNiciraNvpDeviceCmd.java +++ b/plugins/network-elements/nicira-nvp/src/com/cloud/api/commands/DeleteNiciraNvpDeviceCmd.java @@ -26,7 +26,7 @@ import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.PlugService; import org.apache.cloudstack.api.ServerApiException; -import com.cloud.api.response.SuccessResponse; +import org.apache.cloudstack.api.response.SuccessResponse; import com.cloud.event.EventTypes; import com.cloud.exception.ConcurrentOperationException; import com.cloud.exception.InsufficientCapacityException; diff --git a/plugins/network-elements/nicira-nvp/src/com/cloud/api/commands/ListNiciraNvpDeviceNetworksCmd.java b/plugins/network-elements/nicira-nvp/src/com/cloud/api/commands/ListNiciraNvpDeviceNetworksCmd.java index e3236463bf9..07932952d0c 100644 --- a/plugins/network-elements/nicira-nvp/src/com/cloud/api/commands/ListNiciraNvpDeviceNetworksCmd.java +++ b/plugins/network-elements/nicira-nvp/src/com/cloud/api/commands/ListNiciraNvpDeviceNetworksCmd.java @@ -29,8 +29,8 @@ import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.PlugService; import org.apache.cloudstack.api.ServerApiException; -import com.cloud.api.response.ListResponse; -import com.cloud.api.response.NetworkResponse; +import org.apache.cloudstack.api.response.ListResponse; +import org.apache.cloudstack.api.response.NetworkResponse; import com.cloud.exception.ConcurrentOperationException; import com.cloud.exception.InsufficientCapacityException; import com.cloud.exception.InvalidParameterValueException; diff --git a/plugins/network-elements/nicira-nvp/src/com/cloud/api/commands/ListNiciraNvpDevicesCmd.java b/plugins/network-elements/nicira-nvp/src/com/cloud/api/commands/ListNiciraNvpDevicesCmd.java index b2c3238320e..56e6be5dcd5 100644 --- a/plugins/network-elements/nicira-nvp/src/com/cloud/api/commands/ListNiciraNvpDevicesCmd.java +++ b/plugins/network-elements/nicira-nvp/src/com/cloud/api/commands/ListNiciraNvpDevicesCmd.java @@ -29,7 +29,7 @@ import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.PlugService; import org.apache.cloudstack.api.ServerApiException; -import com.cloud.api.response.ListResponse; +import org.apache.cloudstack.api.response.ListResponse; import com.cloud.api.response.NiciraNvpDeviceResponse; import com.cloud.exception.ConcurrentOperationException; import com.cloud.exception.InsufficientCapacityException; diff --git a/plugins/network-elements/nicira-nvp/src/com/cloud/api/response/NiciraNvpDeviceResponse.java b/plugins/network-elements/nicira-nvp/src/com/cloud/api/response/NiciraNvpDeviceResponse.java index ca41e7f68e7..74f852b9f28 100644 --- a/plugins/network-elements/nicira-nvp/src/com/cloud/api/response/NiciraNvpDeviceResponse.java +++ b/plugins/network-elements/nicira-nvp/src/com/cloud/api/response/NiciraNvpDeviceResponse.java @@ -20,6 +20,7 @@ import org.apache.cloudstack.api.ApiConstants; import com.cloud.serializer.Param; import com.cloud.utils.IdentityProxy; import com.google.gson.annotations.SerializedName; +import org.apache.cloudstack.api.BaseResponse; public class NiciraNvpDeviceResponse extends BaseResponse { @SerializedName(ApiConstants.NICIRA_NVP_DEVICE_ID) @Param(description="device id of the Nicire Nvp") diff --git a/server/src/com/cloud/api/ApiDBUtils.java b/server/src/com/cloud/api/ApiDBUtils.java index 3d232c65062..a86f09bf7e6 100755 --- a/server/src/com/cloud/api/ApiDBUtils.java +++ b/server/src/com/cloud/api/ApiDBUtils.java @@ -23,16 +23,16 @@ 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.EventResponse; -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.api.view.vo.EventJoinVO; -import com.cloud.api.view.vo.ResourceTagJoinVO; -import com.cloud.api.view.vo.SecurityGroupJoinVO; -import com.cloud.api.view.vo.UserVmJoinVO; +import org.apache.cloudstack.api.response.DomainRouterResponse; +import org.apache.cloudstack.api.response.EventResponse; +import org.apache.cloudstack.api.response.ResourceTagResponse; +import org.apache.cloudstack.api.response.SecurityGroupResponse; +import org.apache.cloudstack.api.response.UserVmResponse; +import org.apache.cloudstack.api.view.vo.DomainRouterJoinVO; +import org.apache.cloudstack.api.view.vo.EventJoinVO; +import org.apache.cloudstack.api.view.vo.ResourceTagJoinVO; +import org.apache.cloudstack.api.view.vo.SecurityGroupJoinVO; +import org.apache.cloudstack.api.view.vo.UserVmJoinVO; import com.cloud.async.AsyncJobManager; import com.cloud.async.AsyncJobVO; import com.cloud.capacity.CapacityVO; @@ -178,7 +178,6 @@ 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; diff --git a/server/src/com/cloud/api/ApiResponseHelper.java b/server/src/com/cloud/api/ApiResponseHelper.java index 15a1a791f5b..992c0f403a1 100755 --- a/server/src/com/cloud/api/ApiResponseHelper.java +++ b/server/src/com/cloud/api/ApiResponseHelper.java @@ -40,84 +40,84 @@ import com.cloud.acl.ControlledEntity.ACLType; import org.apache.cloudstack.api.ApiConstants.HostDetails; import org.apache.cloudstack.api.ApiConstants.VMDetails; import org.apache.cloudstack.api.command.user.job.QueryAsyncJobResultCmd; -import com.cloud.api.response.AccountResponse; +import org.apache.cloudstack.api.response.AccountResponse; import com.cloud.api.response.ApiResponseSerializer; -import com.cloud.api.response.AsyncJobResponse; -import com.cloud.api.response.AutoScalePolicyResponse; -import com.cloud.api.response.AutoScaleVmGroupResponse; -import com.cloud.api.response.AutoScaleVmProfileResponse; -import com.cloud.api.response.CapabilityResponse; -import com.cloud.api.response.CapacityResponse; -import com.cloud.api.response.ClusterResponse; -import com.cloud.api.response.ConditionResponse; -import com.cloud.api.response.ConfigurationResponse; -import com.cloud.api.response.ControlledEntityResponse; -import com.cloud.api.response.CounterResponse; -import com.cloud.api.response.CreateCmdResponse; -import com.cloud.api.response.DiskOfferingResponse; -import com.cloud.api.response.DomainResponse; -import com.cloud.api.response.DomainRouterResponse; -import com.cloud.api.response.EventResponse; -import com.cloud.api.response.ExtractResponse; -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; -import com.cloud.api.response.LBStickinessPolicyResponse; -import com.cloud.api.response.LBStickinessResponse; -import com.cloud.api.response.LDAPConfigResponse; -import com.cloud.api.response.LoadBalancerResponse; -import com.cloud.api.response.NetworkACLResponse; -import com.cloud.api.response.NetworkOfferingResponse; -import com.cloud.api.response.NetworkResponse; -import com.cloud.api.response.PhysicalNetworkResponse; -import com.cloud.api.response.PodResponse; -import com.cloud.api.response.PrivateGatewayResponse; -import com.cloud.api.response.ProjectAccountResponse; -import com.cloud.api.response.ProjectInvitationResponse; -import com.cloud.api.response.ProjectResponse; -import com.cloud.api.response.ProviderResponse; -import com.cloud.api.response.RemoteAccessVpnResponse; -import com.cloud.api.response.ResourceCountResponse; -import com.cloud.api.response.ResourceLimitResponse; -import com.cloud.api.response.ResourceTagResponse; -import com.cloud.api.response.SecurityGroupResponse; -import com.cloud.api.response.SecurityGroupRuleResponse; -import com.cloud.api.response.ServiceOfferingResponse; -import com.cloud.api.response.ServiceResponse; -import com.cloud.api.response.Site2SiteCustomerGatewayResponse; -import com.cloud.api.response.Site2SiteVpnConnectionResponse; -import com.cloud.api.response.Site2SiteVpnGatewayResponse; -import com.cloud.api.response.SnapshotPolicyResponse; -import com.cloud.api.response.SnapshotResponse; -import com.cloud.api.response.StaticRouteResponse; -import com.cloud.api.response.StorageNetworkIpRangeResponse; -import com.cloud.api.response.StoragePoolResponse; -import com.cloud.api.response.SwiftResponse; -import com.cloud.api.response.SystemVmInstanceResponse; -import com.cloud.api.response.SystemVmResponse; -import com.cloud.api.response.TemplatePermissionsResponse; -import com.cloud.api.response.TemplateResponse; -import com.cloud.api.response.TrafficTypeResponse; -import com.cloud.api.response.UserResponse; -import com.cloud.api.response.UserVmResponse; -import com.cloud.api.response.VirtualRouterProviderResponse; -import com.cloud.api.response.VlanIpRangeResponse; -import com.cloud.api.response.VolumeResponse; -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.EventJoinVO; -import com.cloud.api.view.vo.ResourceTagJoinVO; -import com.cloud.api.view.vo.SecurityGroupJoinVO; -import com.cloud.api.view.vo.UserVmJoinVO; +import org.apache.cloudstack.api.response.AsyncJobResponse; +import org.apache.cloudstack.api.response.AutoScalePolicyResponse; +import org.apache.cloudstack.api.response.AutoScaleVmGroupResponse; +import org.apache.cloudstack.api.response.AutoScaleVmProfileResponse; +import org.apache.cloudstack.api.response.CapabilityResponse; +import org.apache.cloudstack.api.response.CapacityResponse; +import org.apache.cloudstack.api.response.ClusterResponse; +import org.apache.cloudstack.api.response.ConditionResponse; +import org.apache.cloudstack.api.response.ConfigurationResponse; +import org.apache.cloudstack.api.response.ControlledEntityResponse; +import org.apache.cloudstack.api.response.CounterResponse; +import org.apache.cloudstack.api.response.CreateCmdResponse; +import org.apache.cloudstack.api.response.DiskOfferingResponse; +import org.apache.cloudstack.api.response.DomainResponse; +import org.apache.cloudstack.api.response.DomainRouterResponse; +import org.apache.cloudstack.api.response.EventResponse; +import org.apache.cloudstack.api.response.ExtractResponse; +import org.apache.cloudstack.api.response.FirewallResponse; +import org.apache.cloudstack.api.response.FirewallRuleResponse; +import org.apache.cloudstack.api.response.HostResponse; +import org.apache.cloudstack.api.response.HypervisorCapabilitiesResponse; +import org.apache.cloudstack.api.response.ControlledViewEntityResponse; +import org.apache.cloudstack.api.response.IPAddressResponse; +import org.apache.cloudstack.api.response.InstanceGroupResponse; +import org.apache.cloudstack.api.response.IpForwardingRuleResponse; +import org.apache.cloudstack.api.response.LBStickinessPolicyResponse; +import org.apache.cloudstack.api.response.LBStickinessResponse; +import org.apache.cloudstack.api.response.LDAPConfigResponse; +import org.apache.cloudstack.api.response.LoadBalancerResponse; +import org.apache.cloudstack.api.response.NetworkACLResponse; +import org.apache.cloudstack.api.response.NetworkOfferingResponse; +import org.apache.cloudstack.api.response.NetworkResponse; +import org.apache.cloudstack.api.response.PhysicalNetworkResponse; +import org.apache.cloudstack.api.response.PodResponse; +import org.apache.cloudstack.api.response.PrivateGatewayResponse; +import org.apache.cloudstack.api.response.ProjectAccountResponse; +import org.apache.cloudstack.api.response.ProjectInvitationResponse; +import org.apache.cloudstack.api.response.ProjectResponse; +import org.apache.cloudstack.api.response.ProviderResponse; +import org.apache.cloudstack.api.response.RemoteAccessVpnResponse; +import org.apache.cloudstack.api.response.ResourceCountResponse; +import org.apache.cloudstack.api.response.ResourceLimitResponse; +import org.apache.cloudstack.api.response.ResourceTagResponse; +import org.apache.cloudstack.api.response.SecurityGroupResponse; +import org.apache.cloudstack.api.response.SecurityGroupRuleResponse; +import org.apache.cloudstack.api.response.ServiceOfferingResponse; +import org.apache.cloudstack.api.response.ServiceResponse; +import org.apache.cloudstack.api.response.Site2SiteCustomerGatewayResponse; +import org.apache.cloudstack.api.response.Site2SiteVpnConnectionResponse; +import org.apache.cloudstack.api.response.Site2SiteVpnGatewayResponse; +import org.apache.cloudstack.api.response.SnapshotPolicyResponse; +import org.apache.cloudstack.api.response.SnapshotResponse; +import org.apache.cloudstack.api.response.StaticRouteResponse; +import org.apache.cloudstack.api.response.StorageNetworkIpRangeResponse; +import org.apache.cloudstack.api.response.StoragePoolResponse; +import org.apache.cloudstack.api.response.SwiftResponse; +import org.apache.cloudstack.api.response.SystemVmInstanceResponse; +import org.apache.cloudstack.api.response.SystemVmResponse; +import org.apache.cloudstack.api.response.TemplatePermissionsResponse; +import org.apache.cloudstack.api.response.TemplateResponse; +import org.apache.cloudstack.api.response.TrafficTypeResponse; +import org.apache.cloudstack.api.response.UserResponse; +import org.apache.cloudstack.api.response.UserVmResponse; +import org.apache.cloudstack.api.response.VirtualRouterProviderResponse; +import org.apache.cloudstack.api.response.VlanIpRangeResponse; +import org.apache.cloudstack.api.response.VolumeResponse; +import org.apache.cloudstack.api.response.VpcOfferingResponse; +import org.apache.cloudstack.api.response.VpcResponse; +import org.apache.cloudstack.api.response.VpnUsersResponse; +import org.apache.cloudstack.api.response.ZoneResponse; +import org.apache.cloudstack.api.view.vo.DomainRouterJoinVO; +import org.apache.cloudstack.api.view.vo.ControlledViewEntity; +import org.apache.cloudstack.api.view.vo.EventJoinVO; +import org.apache.cloudstack.api.view.vo.ResourceTagJoinVO; +import org.apache.cloudstack.api.view.vo.SecurityGroupJoinVO; +import org.apache.cloudstack.api.view.vo.UserVmJoinVO; import com.cloud.async.AsyncJob; import com.cloud.capacity.Capacity; import com.cloud.capacity.CapacityVO; diff --git a/server/src/com/cloud/api/ApiServer.java b/server/src/com/cloud/api/ApiServer.java index ee4a2228be1..183249f5a6d 100755 --- a/server/src/com/cloud/api/ApiServer.java +++ b/server/src/com/cloud/api/ApiServer.java @@ -51,6 +51,7 @@ import javax.servlet.http.HttpSession; import org.apache.cloudstack.api.*; import org.apache.cloudstack.api.command.user.event.ListEventsCmd; +import org.apache.cloudstack.api.command.user.vm.ListVMsCmd; import org.apache.commons.codec.binary.Base64; import org.apache.http.ConnectionClosedException; import org.apache.http.HttpException; @@ -82,11 +83,10 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.command.admin.router.ListRoutersCmd; import org.apache.cloudstack.api.command.user.securitygroup.ListSecurityGroupsCmd; import org.apache.cloudstack.api.command.user.tag.ListTagsCmd; -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; -import com.cloud.api.response.ListResponse; +import org.apache.cloudstack.api.response.ExceptionResponse; +import org.apache.cloudstack.api.response.ListResponse; import com.cloud.async.AsyncJob; import com.cloud.async.AsyncJobManager; import com.cloud.async.AsyncJobVO; diff --git a/server/src/com/cloud/api/ResponseObjectTypeAdapter.java b/server/src/com/cloud/api/ResponseObjectTypeAdapter.java index be2a5384e80..b49792334f4 100644 --- a/server/src/com/cloud/api/ResponseObjectTypeAdapter.java +++ b/server/src/com/cloud/api/ResponseObjectTypeAdapter.java @@ -22,8 +22,8 @@ import java.lang.reflect.Type; import org.apache.cloudstack.api.ResponseObject; import org.apache.log4j.Logger; -import com.cloud.api.response.ExceptionResponse; -import com.cloud.api.response.SuccessResponse; +import org.apache.cloudstack.api.response.ExceptionResponse; +import org.apache.cloudstack.api.response.SuccessResponse; import com.google.gson.JsonElement; import com.google.gson.JsonObject; import com.google.gson.JsonSerializationContext; diff --git a/server/src/com/cloud/api/commands/DeleteTrafficMonitorCmd.java b/server/src/com/cloud/api/commands/DeleteTrafficMonitorCmd.java index 3c6d9f6b805..6e03cca6665 100644 --- a/server/src/com/cloud/api/commands/DeleteTrafficMonitorCmd.java +++ b/server/src/com/cloud/api/commands/DeleteTrafficMonitorCmd.java @@ -24,7 +24,7 @@ import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; -import com.cloud.api.response.SuccessResponse; +import org.apache.cloudstack.api.response.SuccessResponse; import com.cloud.exception.InvalidParameterValueException; import com.cloud.network.NetworkUsageManager; import com.cloud.server.ManagementService; diff --git a/server/src/com/cloud/api/commands/GenerateUsageRecordsCmd.java b/server/src/com/cloud/api/commands/GenerateUsageRecordsCmd.java index 71f555d0d53..15e04303202 100644 --- a/server/src/com/cloud/api/commands/GenerateUsageRecordsCmd.java +++ b/server/src/com/cloud/api/commands/GenerateUsageRecordsCmd.java @@ -26,7 +26,7 @@ import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; -import com.cloud.api.response.SuccessResponse; +import org.apache.cloudstack.api.response.SuccessResponse; import com.cloud.server.ManagementServerExt; import com.cloud.user.Account; diff --git a/server/src/com/cloud/api/commands/GetUsageRecordsCmd.java b/server/src/com/cloud/api/commands/GetUsageRecordsCmd.java index a0af93b90f1..9f1e21a4ed3 100644 --- a/server/src/com/cloud/api/commands/GetUsageRecordsCmd.java +++ b/server/src/com/cloud/api/commands/GetUsageRecordsCmd.java @@ -31,7 +31,7 @@ import org.apache.cloudstack.api.BaseListCmd; import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; -import com.cloud.api.response.ListResponse; +import org.apache.cloudstack.api.response.ListResponse; import com.cloud.projects.Project; import com.cloud.server.ManagementServerExt; import com.cloud.server.api.response.UsageRecordResponse; diff --git a/server/src/com/cloud/api/commands/ListTrafficMonitorsCmd.java b/server/src/com/cloud/api/commands/ListTrafficMonitorsCmd.java index 0bdc362fdf9..4db5f9f38ab 100644 --- a/server/src/com/cloud/api/commands/ListTrafficMonitorsCmd.java +++ b/server/src/com/cloud/api/commands/ListTrafficMonitorsCmd.java @@ -27,7 +27,7 @@ import org.apache.cloudstack.api.BaseListCmd; import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; -import com.cloud.api.response.ListResponse; +import org.apache.cloudstack.api.response.ListResponse; import com.cloud.host.Host; import com.cloud.network.NetworkUsageManager; import com.cloud.server.ManagementService; diff --git a/server/src/com/cloud/api/commands/ListUsageTypesCmd.java b/server/src/com/cloud/api/commands/ListUsageTypesCmd.java index 8c21d4f088e..5193cd786a7 100644 --- a/server/src/com/cloud/api/commands/ListUsageTypesCmd.java +++ b/server/src/com/cloud/api/commands/ListUsageTypesCmd.java @@ -22,7 +22,7 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.Implementation; -import com.cloud.api.response.ListResponse; +import org.apache.cloudstack.api.response.ListResponse; import com.cloud.server.ManagementServerExt; import com.cloud.server.api.response.UsageTypeResponse; import com.cloud.user.Account; diff --git a/server/src/com/cloud/api/doc/ApiXmlDocWriter.java b/server/src/com/cloud/api/doc/ApiXmlDocWriter.java index 46836f8799f..5a1deeca7e6 100644 --- a/server/src/com/cloud/api/doc/ApiXmlDocWriter.java +++ b/server/src/com/cloud/api/doc/ApiXmlDocWriter.java @@ -45,16 +45,16 @@ import org.apache.cloudstack.api.BaseAsyncCreateCmd; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; -import com.cloud.api.response.AsyncJobResponse; -import com.cloud.api.response.BaseResponse; -import com.cloud.api.response.HostResponse; -import com.cloud.api.response.IPAddressResponse; -import com.cloud.api.response.SecurityGroupResponse; -import com.cloud.api.response.SnapshotResponse; -import com.cloud.api.response.StoragePoolResponse; -import com.cloud.api.response.TemplateResponse; -import com.cloud.api.response.UserVmResponse; -import com.cloud.api.response.VolumeResponse; +import org.apache.cloudstack.api.response.AsyncJobResponse; +import org.apache.cloudstack.api.BaseResponse; +import org.apache.cloudstack.api.response.HostResponse; +import org.apache.cloudstack.api.response.IPAddressResponse; +import org.apache.cloudstack.api.response.SecurityGroupResponse; +import org.apache.cloudstack.api.response.SnapshotResponse; +import org.apache.cloudstack.api.response.StoragePoolResponse; +import org.apache.cloudstack.api.response.TemplateResponse; +import org.apache.cloudstack.api.response.UserVmResponse; +import org.apache.cloudstack.api.response.VolumeResponse; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; import com.thoughtworks.xstream.XStream; diff --git a/server/src/com/cloud/api/response/ApiResponseSerializer.java b/server/src/com/cloud/api/response/ApiResponseSerializer.java index cc2725eea8b..4a4d94306b1 100644 --- a/server/src/com/cloud/api/response/ApiResponseSerializer.java +++ b/server/src/com/cloud/api/response/ApiResponseSerializer.java @@ -27,6 +27,8 @@ import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; +import org.apache.cloudstack.api.response.ListResponse; +import org.apache.cloudstack.api.response.*; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; @@ -103,7 +105,7 @@ public class ApiResponseSerializer { } } else if (result instanceof SuccessResponse) { sb.append("{ \"success\" : \"").append(((SuccessResponse) result).getSuccess()).append("\"} "); - } else if (result instanceof ExceptionResponse) { + } else if (result instanceof ExceptionResponse) { String jsonErrorText = gson.toJson((ExceptionResponse) result); jsonErrorText = unescape(jsonErrorText); sb.append(jsonErrorText); diff --git a/server/src/com/cloud/async/AsyncJobManagerImpl.java b/server/src/com/cloud/async/AsyncJobManagerImpl.java index 86a23c9c0a3..7bf5c5a83cc 100644 --- a/server/src/com/cloud/async/AsyncJobManagerImpl.java +++ b/server/src/com/cloud/async/AsyncJobManagerImpl.java @@ -44,7 +44,7 @@ import com.cloud.api.ApiSerializerHelper; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.ServerApiException; -import com.cloud.api.response.ExceptionResponse; +import org.apache.cloudstack.api.response.ExceptionResponse; import com.cloud.async.dao.AsyncJobDao; import com.cloud.cluster.ClusterManager; import com.cloud.cluster.ClusterManagerListener; diff --git a/server/src/com/cloud/baremetal/BareMetalVmManagerImpl.java b/server/src/com/cloud/baremetal/BareMetalVmManagerImpl.java index e4fcdf8b14d..2e325ec4f02 100755 --- a/server/src/com/cloud/baremetal/BareMetalVmManagerImpl.java +++ b/server/src/com/cloud/baremetal/BareMetalVmManagerImpl.java @@ -26,8 +26,10 @@ import javax.ejb.Local; import javax.naming.ConfigurationException; import org.apache.cloudstack.api.command.user.template.CreateTemplateCmd; -import org.apache.cloudstack.api.user.volume.command.AttachVolumeCmd; -import org.apache.cloudstack.api.user.volume.command.DetachVolumeCmd; +import org.apache.cloudstack.api.command.user.vm.DeployVMCmd; +import org.apache.cloudstack.api.command.user.vm.UpgradeVMCmd; +import org.apache.cloudstack.api.command.user.volume.AttachVolumeCmd; +import org.apache.cloudstack.api.command.user.volume.DetachVolumeCmd; import org.apache.log4j.Logger; import com.cloud.agent.api.Answer; @@ -35,9 +37,7 @@ import com.cloud.agent.api.StopAnswer; import com.cloud.agent.api.baremetal.IpmISetBootDevCommand; import com.cloud.agent.api.baremetal.IpmiBootorResetCommand; import com.cloud.agent.manager.Commands; -import org.apache.cloudstack.api.user.vm.command.DeployVMCmd; -import org.apache.cloudstack.api.user.vm.command.StartVMCmd; -import org.apache.cloudstack.api.user.vm.command.UpgradeVMCmd; +import org.apache.cloudstack.api.command.user.vm.StartVMCmd; import com.cloud.baremetal.PxeServerManager.PxeServerType; import com.cloud.configuration.Resource.ResourceType; import com.cloud.configuration.dao.ConfigurationDao; diff --git a/server/src/com/cloud/baremetal/DhcpServerResponse.java b/server/src/com/cloud/baremetal/DhcpServerResponse.java index dafc78114e5..69b507190bf 100644 --- a/server/src/com/cloud/baremetal/DhcpServerResponse.java +++ b/server/src/com/cloud/baremetal/DhcpServerResponse.java @@ -18,7 +18,7 @@ package com.cloud.baremetal; import org.apache.cloudstack.api.ApiConstants; import com.cloud.utils.IdentityProxy; -import com.cloud.api.response.BaseResponse; +import org.apache.cloudstack.api.BaseResponse; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; diff --git a/server/src/com/cloud/baremetal/PxeServerResponse.java b/server/src/com/cloud/baremetal/PxeServerResponse.java index 30e809c4980..aa050960273 100644 --- a/server/src/com/cloud/baremetal/PxeServerResponse.java +++ b/server/src/com/cloud/baremetal/PxeServerResponse.java @@ -18,7 +18,7 @@ package com.cloud.baremetal; import org.apache.cloudstack.api.ApiConstants; import com.cloud.utils.IdentityProxy; -import com.cloud.api.response.BaseResponse; +import org.apache.cloudstack.api.BaseResponse; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; diff --git a/server/src/com/cloud/event/dao/EventJoinDao.java b/server/src/com/cloud/event/dao/EventJoinDao.java index bfdcd095cfb..d67653d2cd9 100644 --- a/server/src/com/cloud/event/dao/EventJoinDao.java +++ b/server/src/com/cloud/event/dao/EventJoinDao.java @@ -18,10 +18,9 @@ package com.cloud.event.dao; import java.util.List; -import com.cloud.api.response.EventResponse; -import com.cloud.api.view.vo.EventJoinVO; +import org.apache.cloudstack.api.response.EventResponse; +import org.apache.cloudstack.api.view.vo.EventJoinVO; import com.cloud.event.Event; -import com.cloud.event.EventVO; import com.cloud.utils.db.Filter; import com.cloud.utils.db.GenericDao; import com.cloud.utils.db.SearchCriteria; diff --git a/server/src/com/cloud/event/dao/EventJoinDaoImpl.java b/server/src/com/cloud/event/dao/EventJoinDaoImpl.java index a00d1b33aaf..91e7f369cd5 100644 --- a/server/src/com/cloud/event/dao/EventJoinDaoImpl.java +++ b/server/src/com/cloud/event/dao/EventJoinDaoImpl.java @@ -16,53 +16,22 @@ // under the License. package com.cloud.event.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.EventResponse; -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.api.view.vo.EventJoinVO; -import com.cloud.api.view.vo.ResourceTagJoinVO; -import com.cloud.dc.DataCenter; +import org.apache.cloudstack.api.response.EventResponse; +import org.apache.cloudstack.api.view.vo.EventJoinVO; import com.cloud.event.Event; -import com.cloud.event.EventVO; import com.cloud.event.Event.State; -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.projects.Project; -import com.cloud.server.ResourceTag; -import com.cloud.user.Account; -import com.cloud.user.User; -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={EventJoinDao.class}) diff --git a/server/src/com/cloud/network/as/AutoScaleManagerImpl.java b/server/src/com/cloud/network/as/AutoScaleManagerImpl.java index 018369d7b31..57509ffea12 100644 --- a/server/src/com/cloud/network/as/AutoScaleManagerImpl.java +++ b/server/src/com/cloud/network/as/AutoScaleManagerImpl.java @@ -37,7 +37,7 @@ import org.apache.cloudstack.api.BaseListAccountResourcesCmd; import org.apache.cloudstack.api.command.user.autoscale.CreateAutoScalePolicyCmd; import org.apache.cloudstack.api.command.user.autoscale.CreateAutoScaleVmGroupCmd; import org.apache.cloudstack.api.command.user.autoscale.CreateConditionCmd; -import org.apache.cloudstack.api.user.vm.command.DeployVMCmd; +import org.apache.cloudstack.api.command.user.vm.DeployVMCmd; import org.apache.cloudstack.api.command.user.autoscale.ListAutoScaleVmGroupsCmd; import org.apache.cloudstack.api.command.user.autoscale.ListConditionsCmd; import org.apache.cloudstack.api.command.user.autoscale.UpdateAutoScalePolicyCmd; diff --git a/server/src/com/cloud/network/lb/LoadBalancingRulesManagerImpl.java b/server/src/com/cloud/network/lb/LoadBalancingRulesManagerImpl.java index 0a0ea005c69..c63e855eee0 100755 --- a/server/src/com/cloud/network/lb/LoadBalancingRulesManagerImpl.java +++ b/server/src/com/cloud/network/lb/LoadBalancingRulesManagerImpl.java @@ -36,7 +36,7 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.command.user.loadbalancer.CreateLBStickinessPolicyCmd; import org.apache.cloudstack.api.command.user.loadbalancer.ListLoadBalancerRuleInstancesCmd; import org.apache.cloudstack.api.command.user.loadbalancer.ListLoadBalancerRulesCmd; -import com.cloud.api.response.ServiceResponse; +import org.apache.cloudstack.api.response.ServiceResponse; import com.cloud.configuration.Config; import com.cloud.configuration.ConfigurationManager; import com.cloud.configuration.dao.ConfigurationDao; diff --git a/server/src/com/cloud/network/security/SecurityGroupManagerImpl.java b/server/src/com/cloud/network/security/SecurityGroupManagerImpl.java index b22f2446e6d..a9d1f0bd7a3 100755 --- a/server/src/com/cloud/network/security/SecurityGroupManagerImpl.java +++ b/server/src/com/cloud/network/security/SecurityGroupManagerImpl.java @@ -46,7 +46,7 @@ import com.cloud.agent.api.SecurityGroupRulesCmd; import com.cloud.agent.api.SecurityGroupRulesCmd.IpPortAndProto; import com.cloud.agent.manager.Commands; import org.apache.cloudstack.api.command.user.securitygroup.RevokeSecurityGroupEgressCmd; -import com.cloud.api.view.vo.SecurityGroupJoinVO; +import org.apache.cloudstack.api.view.vo.SecurityGroupJoinVO; import com.cloud.configuration.Config; import com.cloud.configuration.dao.ConfigurationDao; import com.cloud.domain.dao.DomainDao; diff --git a/server/src/com/cloud/network/security/dao/SecurityGroupJoinDao.java b/server/src/com/cloud/network/security/dao/SecurityGroupJoinDao.java index cc79cdaff14..30c089762d5 100644 --- a/server/src/com/cloud/network/security/dao/SecurityGroupJoinDao.java +++ b/server/src/com/cloud/network/security/dao/SecurityGroupJoinDao.java @@ -18,8 +18,8 @@ package com.cloud.network.security.dao; import java.util.List; -import com.cloud.api.response.SecurityGroupResponse; -import com.cloud.api.view.vo.SecurityGroupJoinVO; +import org.apache.cloudstack.api.response.SecurityGroupResponse; +import org.apache.cloudstack.api.view.vo.SecurityGroupJoinVO; import com.cloud.network.security.SecurityGroup; import com.cloud.user.Account; import com.cloud.utils.db.GenericDao; diff --git a/server/src/com/cloud/network/security/dao/SecurityGroupJoinDaoImpl.java b/server/src/com/cloud/network/security/dao/SecurityGroupJoinDaoImpl.java index 019cf2c4f1e..8afb0cd4883 100644 --- a/server/src/com/cloud/network/security/dao/SecurityGroupJoinDaoImpl.java +++ b/server/src/com/cloud/network/security/dao/SecurityGroupJoinDaoImpl.java @@ -16,12 +16,7 @@ // under the License. package com.cloud.network.security.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; @@ -30,35 +25,16 @@ 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.SecurityGroupRuleResponse; -import com.cloud.api.response.UserVmResponse; -import com.cloud.api.view.vo.DomainRouterJoinVO; -import com.cloud.api.view.vo.ResourceTagJoinVO; -import com.cloud.api.view.vo.SecurityGroupJoinVO; -import com.cloud.dc.DataCenter; -import com.cloud.network.Network; -import com.cloud.network.Networks.TrafficType; -import com.cloud.network.router.VirtualRouter; +import org.apache.cloudstack.api.response.SecurityGroupResponse; +import org.apache.cloudstack.api.response.SecurityGroupRuleResponse; +import org.apache.cloudstack.api.view.vo.ResourceTagJoinVO; +import org.apache.cloudstack.api.view.vo.SecurityGroupJoinVO; import com.cloud.network.security.SecurityGroup; import com.cloud.network.security.SecurityRule.SecurityRuleType; -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={SecurityGroupJoinDao.class}) public class SecurityGroupJoinDaoImpl extends GenericDaoBase implements SecurityGroupJoinDao { diff --git a/server/src/com/cloud/network/vpc/VpcManagerImpl.java b/server/src/com/cloud/network/vpc/VpcManagerImpl.java index 5a8d2851170..b24bf3f4f53 100644 --- a/server/src/com/cloud/network/vpc/VpcManagerImpl.java +++ b/server/src/com/cloud/network/vpc/VpcManagerImpl.java @@ -30,11 +30,11 @@ import java.util.concurrent.TimeUnit; import javax.ejb.Local; import javax.naming.ConfigurationException; +import org.apache.cloudstack.api.command.user.vpc.ListStaticRoutesCmd; import org.apache.log4j.Logger; import com.cloud.acl.ControlledEntity.ACLType; -import org.apache.cloudstack.api.user.vpc.command.ListPrivateGatewaysCmd; -import org.apache.cloudstack.api.user.vpc.command.ListStaticRoutesCmd; +import org.apache.cloudstack.api.command.user.vpc.ListPrivateGatewaysCmd; import com.cloud.configuration.Config; import com.cloud.configuration.ConfigurationManager; import com.cloud.configuration.Resource.ResourceType; diff --git a/server/src/com/cloud/network/vpn/RemoteAccessVpnManagerImpl.java b/server/src/com/cloud/network/vpn/RemoteAccessVpnManagerImpl.java index 2309cd3229e..46b5af95eb8 100755 --- a/server/src/com/cloud/network/vpn/RemoteAccessVpnManagerImpl.java +++ b/server/src/com/cloud/network/vpn/RemoteAccessVpnManagerImpl.java @@ -26,7 +26,7 @@ import javax.naming.ConfigurationException; import org.apache.cloudstack.api.command.user.user.ListVpnUsersCmd; import org.apache.log4j.Logger; -import org.apache.cloudstack.api.user.vpn.command.ListRemoteAccessVpnsCmd; +import org.apache.cloudstack.api.command.user.vpn.ListRemoteAccessVpnsCmd; import com.cloud.configuration.Config; import com.cloud.configuration.dao.ConfigurationDao; import com.cloud.domain.DomainVO; diff --git a/server/src/com/cloud/network/vpn/Site2SiteVpnManagerImpl.java b/server/src/com/cloud/network/vpn/Site2SiteVpnManagerImpl.java index 95ce099b5a5..5416db7e075 100644 --- a/server/src/com/cloud/network/vpn/Site2SiteVpnManagerImpl.java +++ b/server/src/com/cloud/network/vpn/Site2SiteVpnManagerImpl.java @@ -25,17 +25,17 @@ import javax.naming.ConfigurationException; import org.apache.log4j.Logger; -import org.apache.cloudstack.api.user.vpn.command.CreateVpnConnectionCmd; -import org.apache.cloudstack.api.user.vpn.command.CreateVpnCustomerGatewayCmd; -import org.apache.cloudstack.api.user.vpn.command.CreateVpnGatewayCmd; -import org.apache.cloudstack.api.user.vpn.command.DeleteVpnConnectionCmd; -import org.apache.cloudstack.api.user.vpn.command.DeleteVpnCustomerGatewayCmd; -import org.apache.cloudstack.api.user.vpn.command.DeleteVpnGatewayCmd; -import org.apache.cloudstack.api.user.vpn.command.ListVpnConnectionsCmd; -import org.apache.cloudstack.api.user.vpn.command.ListVpnCustomerGatewaysCmd; -import org.apache.cloudstack.api.user.vpn.command.ListVpnGatewaysCmd; -import org.apache.cloudstack.api.user.vpn.command.ResetVpnConnectionCmd; -import org.apache.cloudstack.api.user.vpn.command.UpdateVpnCustomerGatewayCmd; +import org.apache.cloudstack.api.command.user.vpn.CreateVpnConnectionCmd; +import org.apache.cloudstack.api.command.user.vpn.CreateVpnCustomerGatewayCmd; +import org.apache.cloudstack.api.command.user.vpn.CreateVpnGatewayCmd; +import org.apache.cloudstack.api.command.user.vpn.DeleteVpnConnectionCmd; +import org.apache.cloudstack.api.command.user.vpn.DeleteVpnCustomerGatewayCmd; +import org.apache.cloudstack.api.command.user.vpn.DeleteVpnGatewayCmd; +import org.apache.cloudstack.api.command.user.vpn.ListVpnConnectionsCmd; +import org.apache.cloudstack.api.command.user.vpn.ListVpnCustomerGatewaysCmd; +import org.apache.cloudstack.api.command.user.vpn.ListVpnGatewaysCmd; +import org.apache.cloudstack.api.command.user.vpn.ResetVpnConnectionCmd; +import org.apache.cloudstack.api.command.user.vpn.UpdateVpnCustomerGatewayCmd; import com.cloud.configuration.Config; import com.cloud.configuration.dao.ConfigurationDao; import com.cloud.event.ActionEvent; diff --git a/server/src/com/cloud/server/ManagementServerImpl.java b/server/src/com/cloud/server/ManagementServerImpl.java index 40b88c543fd..be6bbefc6c5 100755 --- a/server/src/com/cloud/server/ManagementServerImpl.java +++ b/server/src/com/cloud/server/ManagementServerImpl.java @@ -63,8 +63,9 @@ import org.apache.cloudstack.api.command.user.ssh.DeleteSSHKeyPairCmd; import org.apache.cloudstack.api.command.user.ssh.RegisterSSHKeyPairCmd; import org.apache.cloudstack.api.command.user.template.ListTemplatesCmd; import org.apache.cloudstack.api.command.user.template.UpdateTemplateCmd; -import org.apache.cloudstack.api.user.vmgroup.command.ListVMGroupsCmd; -import org.apache.cloudstack.api.user.zone.command.ListZonesByCmd; +import org.apache.cloudstack.api.command.user.vm.GetVMPasswordCmd; +import org.apache.cloudstack.api.command.user.vmgroup.ListVMGroupsCmd; +import org.apache.cloudstack.api.command.user.zone.ListZonesByCmd; import org.apache.commons.codec.binary.Base64; import org.apache.log4j.Logger; @@ -82,8 +83,7 @@ import com.cloud.alert.dao.AlertDao; import org.apache.cloudstack.api.ApiConstants; import com.cloud.api.ApiDBUtils; import org.apache.cloudstack.api.command.user.ssh.CreateSSHKeyPairCmd; -import org.apache.cloudstack.api.user.volume.command.ExtractVolumeCmd; -import org.apache.cloudstack.api.user.vm.command.GetVMPasswordCmd; +import org.apache.cloudstack.api.command.user.volume.ExtractVolumeCmd; import org.apache.cloudstack.api.command.admin.resource.ListCapacityCmd; import org.apache.cloudstack.api.command.user.event.ListEventsCmd; import org.apache.cloudstack.api.command.admin.host.ListHostsCmd; @@ -95,11 +95,11 @@ import org.apache.cloudstack.api.command.admin.systemvm.StopSystemVmCmd; import org.apache.cloudstack.api.command.admin.domain.UpdateDomainCmd; import org.apache.cloudstack.api.command.admin.host.UpdateHostPasswordCmd; import com.cloud.api.commands.UpdateTemplateOrIsoCmd; -import org.apache.cloudstack.api.user.vmgroup.command.UpdateVMGroupCmd; +import org.apache.cloudstack.api.command.user.vmgroup.UpdateVMGroupCmd; import org.apache.cloudstack.api.command.admin.resource.UploadCustomCertificateCmd; -import com.cloud.api.response.ExtractResponse; -import com.cloud.api.view.vo.DomainRouterJoinVO; -import com.cloud.api.view.vo.EventJoinVO; +import org.apache.cloudstack.api.response.ExtractResponse; +import org.apache.cloudstack.api.view.vo.DomainRouterJoinVO; +import org.apache.cloudstack.api.view.vo.EventJoinVO; import com.cloud.async.AsyncJob; import com.cloud.async.AsyncJobExecutor; import com.cloud.async.AsyncJobManager; diff --git a/server/src/com/cloud/server/api/response/BaremetalTemplateResponse.java b/server/src/com/cloud/server/api/response/BaremetalTemplateResponse.java index 1be4c285260..9718717c052 100644 --- a/server/src/com/cloud/server/api/response/BaremetalTemplateResponse.java +++ b/server/src/com/cloud/server/api/response/BaremetalTemplateResponse.java @@ -17,7 +17,7 @@ package com.cloud.server.api.response; import com.cloud.utils.IdentityProxy; -import com.cloud.api.response.BaseResponse; +import org.apache.cloudstack.api.BaseResponse; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; diff --git a/server/src/com/cloud/server/api/response/TrafficMonitorResponse.java b/server/src/com/cloud/server/api/response/TrafficMonitorResponse.java index 70732fbcc80..a01e658656c 100644 --- a/server/src/com/cloud/server/api/response/TrafficMonitorResponse.java +++ b/server/src/com/cloud/server/api/response/TrafficMonitorResponse.java @@ -18,7 +18,7 @@ package com.cloud.server.api.response; import org.apache.cloudstack.api.ApiConstants; import com.cloud.utils.IdentityProxy; -import com.cloud.api.response.BaseResponse; +import org.apache.cloudstack.api.BaseResponse; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; diff --git a/server/src/com/cloud/server/api/response/UsageRecordResponse.java b/server/src/com/cloud/server/api/response/UsageRecordResponse.java index 65361a11add..63712e14256 100644 --- a/server/src/com/cloud/server/api/response/UsageRecordResponse.java +++ b/server/src/com/cloud/server/api/response/UsageRecordResponse.java @@ -18,8 +18,8 @@ package com.cloud.server.api.response; import org.apache.cloudstack.api.ApiConstants; import com.cloud.utils.IdentityProxy; -import com.cloud.api.response.BaseResponse; -import com.cloud.api.response.ControlledEntityResponse; +import org.apache.cloudstack.api.BaseResponse; +import org.apache.cloudstack.api.response.ControlledEntityResponse; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; diff --git a/server/src/com/cloud/server/api/response/UsageTypeResponse.java b/server/src/com/cloud/server/api/response/UsageTypeResponse.java index 068f43c6a66..ea834fc3b57 100644 --- a/server/src/com/cloud/server/api/response/UsageTypeResponse.java +++ b/server/src/com/cloud/server/api/response/UsageTypeResponse.java @@ -17,7 +17,7 @@ package com.cloud.server.api.response; import org.apache.cloudstack.api.ApiConstants; -import com.cloud.api.response.BaseResponse; +import org.apache.cloudstack.api.BaseResponse; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; diff --git a/server/src/com/cloud/server/api/response/netapp/AssociateLunCmdResponse.java b/server/src/com/cloud/server/api/response/netapp/AssociateLunCmdResponse.java index 4093cf2a588..441b9788108 100644 --- a/server/src/com/cloud/server/api/response/netapp/AssociateLunCmdResponse.java +++ b/server/src/com/cloud/server/api/response/netapp/AssociateLunCmdResponse.java @@ -17,7 +17,7 @@ package com.cloud.server.api.response.netapp; import org.apache.cloudstack.api.ApiConstants; -import com.cloud.api.response.BaseResponse; +import org.apache.cloudstack.api.BaseResponse; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; diff --git a/server/src/com/cloud/server/api/response/netapp/CreateLunCmdResponse.java b/server/src/com/cloud/server/api/response/netapp/CreateLunCmdResponse.java index e87f6a117a4..56164eb7843 100644 --- a/server/src/com/cloud/server/api/response/netapp/CreateLunCmdResponse.java +++ b/server/src/com/cloud/server/api/response/netapp/CreateLunCmdResponse.java @@ -17,7 +17,7 @@ package com.cloud.server.api.response.netapp; import org.apache.cloudstack.api.ApiConstants; -import com.cloud.api.response.BaseResponse; +import org.apache.cloudstack.api.BaseResponse; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; diff --git a/server/src/com/cloud/server/api/response/netapp/CreateVolumeOnFilerCmdResponse.java b/server/src/com/cloud/server/api/response/netapp/CreateVolumeOnFilerCmdResponse.java index b561b01823a..066c1c0fa2c 100644 --- a/server/src/com/cloud/server/api/response/netapp/CreateVolumeOnFilerCmdResponse.java +++ b/server/src/com/cloud/server/api/response/netapp/CreateVolumeOnFilerCmdResponse.java @@ -16,7 +16,7 @@ // under the License. package com.cloud.server.api.response.netapp; -import com.cloud.api.response.BaseResponse; +import org.apache.cloudstack.api.BaseResponse; public class CreateVolumeOnFilerCmdResponse extends BaseResponse { } diff --git a/server/src/com/cloud/server/api/response/netapp/CreateVolumePoolCmdResponse.java b/server/src/com/cloud/server/api/response/netapp/CreateVolumePoolCmdResponse.java index 21afec15022..0c7acfa9189 100644 --- a/server/src/com/cloud/server/api/response/netapp/CreateVolumePoolCmdResponse.java +++ b/server/src/com/cloud/server/api/response/netapp/CreateVolumePoolCmdResponse.java @@ -16,7 +16,7 @@ // under the License. package com.cloud.server.api.response.netapp; -import com.cloud.api.response.BaseResponse; +import org.apache.cloudstack.api.BaseResponse; public class CreateVolumePoolCmdResponse extends BaseResponse{ } diff --git a/server/src/com/cloud/server/api/response/netapp/DeleteLUNCmdResponse.java b/server/src/com/cloud/server/api/response/netapp/DeleteLUNCmdResponse.java index 57af127ae58..b4e697b116e 100644 --- a/server/src/com/cloud/server/api/response/netapp/DeleteLUNCmdResponse.java +++ b/server/src/com/cloud/server/api/response/netapp/DeleteLUNCmdResponse.java @@ -16,7 +16,7 @@ // under the License. package com.cloud.server.api.response.netapp; -import com.cloud.api.response.BaseResponse; +import org.apache.cloudstack.api.BaseResponse; public class DeleteLUNCmdResponse extends BaseResponse{ } diff --git a/server/src/com/cloud/server/api/response/netapp/DeleteVolumeOnFilerCmdResponse.java b/server/src/com/cloud/server/api/response/netapp/DeleteVolumeOnFilerCmdResponse.java index 6d6f367302c..40083ec3a98 100644 --- a/server/src/com/cloud/server/api/response/netapp/DeleteVolumeOnFilerCmdResponse.java +++ b/server/src/com/cloud/server/api/response/netapp/DeleteVolumeOnFilerCmdResponse.java @@ -16,7 +16,7 @@ // under the License. package com.cloud.server.api.response.netapp; -import com.cloud.api.response.BaseResponse; +import org.apache.cloudstack.api.BaseResponse; public class DeleteVolumeOnFilerCmdResponse extends BaseResponse { } diff --git a/server/src/com/cloud/server/api/response/netapp/DeleteVolumePoolCmdResponse.java b/server/src/com/cloud/server/api/response/netapp/DeleteVolumePoolCmdResponse.java index 4f9dc46338f..1740ddc222a 100644 --- a/server/src/com/cloud/server/api/response/netapp/DeleteVolumePoolCmdResponse.java +++ b/server/src/com/cloud/server/api/response/netapp/DeleteVolumePoolCmdResponse.java @@ -16,7 +16,7 @@ // under the License. package com.cloud.server.api.response.netapp; -import com.cloud.api.response.BaseResponse; +import org.apache.cloudstack.api.BaseResponse; public class DeleteVolumePoolCmdResponse extends BaseResponse { } diff --git a/server/src/com/cloud/server/api/response/netapp/DissociateLunCmdResponse.java b/server/src/com/cloud/server/api/response/netapp/DissociateLunCmdResponse.java index fd9cd606038..ce3160b699d 100644 --- a/server/src/com/cloud/server/api/response/netapp/DissociateLunCmdResponse.java +++ b/server/src/com/cloud/server/api/response/netapp/DissociateLunCmdResponse.java @@ -16,7 +16,7 @@ // under the License. package com.cloud.server.api.response.netapp; -import com.cloud.api.response.BaseResponse; +import org.apache.cloudstack.api.BaseResponse; public class DissociateLunCmdResponse extends BaseResponse { } diff --git a/server/src/com/cloud/server/api/response/netapp/ListLunsCmdResponse.java b/server/src/com/cloud/server/api/response/netapp/ListLunsCmdResponse.java index ed907265bb0..bd0ee3f4614 100644 --- a/server/src/com/cloud/server/api/response/netapp/ListLunsCmdResponse.java +++ b/server/src/com/cloud/server/api/response/netapp/ListLunsCmdResponse.java @@ -17,7 +17,7 @@ package com.cloud.server.api.response.netapp; import org.apache.cloudstack.api.ApiConstants; -import com.cloud.api.response.BaseResponse; +import org.apache.cloudstack.api.BaseResponse; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; diff --git a/server/src/com/cloud/server/api/response/netapp/ListVolumePoolsCmdResponse.java b/server/src/com/cloud/server/api/response/netapp/ListVolumePoolsCmdResponse.java index 56359e52ee3..b3f0fe31b3b 100644 --- a/server/src/com/cloud/server/api/response/netapp/ListVolumePoolsCmdResponse.java +++ b/server/src/com/cloud/server/api/response/netapp/ListVolumePoolsCmdResponse.java @@ -17,7 +17,7 @@ package com.cloud.server.api.response.netapp; import org.apache.cloudstack.api.ApiConstants; -import com.cloud.api.response.BaseResponse; +import org.apache.cloudstack.api.BaseResponse; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; diff --git a/server/src/com/cloud/server/api/response/netapp/ListVolumesOnFilerCmdResponse.java b/server/src/com/cloud/server/api/response/netapp/ListVolumesOnFilerCmdResponse.java index 8c9ccba6b87..222e45c1320 100644 --- a/server/src/com/cloud/server/api/response/netapp/ListVolumesOnFilerCmdResponse.java +++ b/server/src/com/cloud/server/api/response/netapp/ListVolumesOnFilerCmdResponse.java @@ -17,7 +17,7 @@ package com.cloud.server.api.response.netapp; import org.apache.cloudstack.api.ApiConstants; -import com.cloud.api.response.BaseResponse; +import org.apache.cloudstack.api.BaseResponse; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; diff --git a/server/src/com/cloud/server/api/response/netapp/ModifyVolumePoolCmdResponse.java b/server/src/com/cloud/server/api/response/netapp/ModifyVolumePoolCmdResponse.java index 444c2e7f5a0..fa0c069c842 100644 --- a/server/src/com/cloud/server/api/response/netapp/ModifyVolumePoolCmdResponse.java +++ b/server/src/com/cloud/server/api/response/netapp/ModifyVolumePoolCmdResponse.java @@ -16,7 +16,7 @@ // under the License. package com.cloud.server.api.response.netapp; -import com.cloud.api.response.BaseResponse; +import org.apache.cloudstack.api.BaseResponse; public class ModifyVolumePoolCmdResponse extends BaseResponse { } diff --git a/server/src/com/cloud/storage/StorageManagerImpl.java b/server/src/com/cloud/storage/StorageManagerImpl.java index a86ec01c09a..1f625d3f69b 100755 --- a/server/src/com/cloud/storage/StorageManagerImpl.java +++ b/server/src/com/cloud/storage/StorageManagerImpl.java @@ -45,7 +45,8 @@ import javax.ejb.Local; import javax.naming.ConfigurationException; import org.apache.cloudstack.api.command.admin.storagepool.*; -import org.apache.cloudstack.api.user.volume.command.CreateVolumeCmd; +import org.apache.cloudstack.api.command.user.volume.CreateVolumeCmd; +import org.apache.cloudstack.api.command.user.volume.UploadVolumeCmd; import org.apache.log4j.Logger; import com.cloud.agent.AgentManager; @@ -75,9 +76,8 @@ import com.cloud.alert.AlertManager; import com.cloud.api.ApiDBUtils; import org.apache.cloudstack.api.command.admin.storagepool.CancelPrimaryStorageMaintenanceCmd; import org.apache.cloudstack.api.command.admin.storagepool.CreateStoragePoolCmd; -import org.apache.cloudstack.api.user.volume.command.ListVolumesCmd; +import org.apache.cloudstack.api.command.user.volume.ListVolumesCmd; import org.apache.cloudstack.api.command.admin.storagepool.UpdateStoragePoolCmd; -import org.apache.cloudstack.api.user.volume.command.UploadVolumeCmd; import com.cloud.async.AsyncJobManager; import com.cloud.capacity.Capacity; import com.cloud.capacity.CapacityManager; diff --git a/server/src/com/cloud/storage/upload/UploadListener.java b/server/src/com/cloud/storage/upload/UploadListener.java index a2d9f01c8f9..4303e437bb6 100755 --- a/server/src/com/cloud/storage/upload/UploadListener.java +++ b/server/src/com/cloud/storage/upload/UploadListener.java @@ -25,7 +25,7 @@ import java.util.Timer; import java.util.TimerTask; import org.apache.cloudstack.api.command.user.iso.ExtractIsoCmd; -import org.apache.cloudstack.api.user.volume.command.ExtractVolumeCmd; +import org.apache.cloudstack.api.command.user.volume.ExtractVolumeCmd; import org.apache.log4j.Level; import org.apache.log4j.Logger; @@ -41,7 +41,7 @@ import com.cloud.agent.api.storage.UploadCommand; import com.cloud.agent.api.storage.UploadProgressCommand; import com.cloud.agent.api.storage.UploadProgressCommand.RequestType; import org.apache.cloudstack.api.command.user.template.ExtractTemplateCmd; -import com.cloud.api.response.ExtractResponse; +import org.apache.cloudstack.api.response.ExtractResponse; import com.cloud.async.AsyncJobManager; import com.cloud.async.AsyncJobResult; import com.cloud.exception.AgentUnavailableException; diff --git a/server/src/com/cloud/tags/TaggedResourceManagerImpl.java b/server/src/com/cloud/tags/TaggedResourceManagerImpl.java index 56240117ee8..0f82142d6b5 100644 --- a/server/src/com/cloud/tags/TaggedResourceManagerImpl.java +++ b/server/src/com/cloud/tags/TaggedResourceManagerImpl.java @@ -27,7 +27,7 @@ import javax.naming.ConfigurationException; import org.apache.cloudstack.api.command.user.tag.ListTagsCmd; import org.apache.log4j.Logger; -import com.cloud.api.view.vo.ResourceTagJoinVO; +import org.apache.cloudstack.api.view.vo.ResourceTagJoinVO; import com.cloud.domain.Domain; import com.cloud.event.ActionEvent; import com.cloud.event.EventTypes; diff --git a/server/src/com/cloud/tags/dao/ResourceTagJoinDao.java b/server/src/com/cloud/tags/dao/ResourceTagJoinDao.java index 8aa0a16f285..8dd3d82d02e 100644 --- a/server/src/com/cloud/tags/dao/ResourceTagJoinDao.java +++ b/server/src/com/cloud/tags/dao/ResourceTagJoinDao.java @@ -18,10 +18,9 @@ package com.cloud.tags.dao; import java.util.List; -import com.cloud.api.response.ResourceTagResponse; -import com.cloud.api.view.vo.ResourceTagJoinVO; +import org.apache.cloudstack.api.response.ResourceTagResponse; +import org.apache.cloudstack.api.view.vo.ResourceTagJoinVO; import com.cloud.server.ResourceTag; -import com.cloud.user.Account; import com.cloud.utils.db.GenericDao; public interface ResourceTagJoinDao extends GenericDao { diff --git a/server/src/com/cloud/tags/dao/ResourceTagJoinDaoImpl.java b/server/src/com/cloud/tags/dao/ResourceTagJoinDaoImpl.java index 55b2f7f69ed..59f8cad0eaa 100644 --- a/server/src/com/cloud/tags/dao/ResourceTagJoinDaoImpl.java +++ b/server/src/com/cloud/tags/dao/ResourceTagJoinDaoImpl.java @@ -16,47 +16,20 @@ // under the License. package com.cloud.tags.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.api.view.vo.ResourceTagJoinVO; -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.projects.Project; +import org.apache.cloudstack.api.response.ResourceTagResponse; +import org.apache.cloudstack.api.view.vo.ResourceTagJoinVO; import com.cloud.server.ResourceTag; -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={ResourceTagJoinDao.class}) diff --git a/server/src/com/cloud/user/AccountManager.java b/server/src/com/cloud/user/AccountManager.java index 3cc7d12e7a2..56a2394d3c6 100755 --- a/server/src/com/cloud/user/AccountManager.java +++ b/server/src/com/cloud/user/AccountManager.java @@ -20,11 +20,8 @@ import java.util.List; 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 org.apache.cloudstack.api.view.vo.ControlledViewEntity; import com.cloud.exception.ConcurrentOperationException; -import com.cloud.exception.PermissionDeniedException; import com.cloud.exception.ResourceUnavailableException; import com.cloud.projects.Project.ListProjectResourcesCriteria; import com.cloud.utils.Pair; diff --git a/server/src/com/cloud/user/AccountManagerImpl.java b/server/src/com/cloud/user/AccountManagerImpl.java index 36dc4989132..c0cbe474636 100755 --- a/server/src/com/cloud/user/AccountManagerImpl.java +++ b/server/src/com/cloud/user/AccountManagerImpl.java @@ -43,7 +43,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 org.apache.cloudstack.api.view.vo.ControlledViewEntity; import com.cloud.acl.SecurityChecker; import com.cloud.acl.SecurityChecker.AccessType; import com.cloud.api.ApiDBUtils; diff --git a/server/src/com/cloud/vm/UserVmManager.java b/server/src/com/cloud/vm/UserVmManager.java index 1a2f50808d3..f58b10e3034 100755 --- a/server/src/com/cloud/vm/UserVmManager.java +++ b/server/src/com/cloud/vm/UserVmManager.java @@ -21,7 +21,7 @@ import java.util.List; import java.util.Map; import com.cloud.agent.api.VmStatsEntry; -import com.cloud.api.view.vo.UserVmJoinVO; +import org.apache.cloudstack.api.view.vo.UserVmJoinVO; import com.cloud.exception.ConcurrentOperationException; import com.cloud.exception.InsufficientCapacityException; import com.cloud.exception.ResourceUnavailableException; diff --git a/server/src/com/cloud/vm/UserVmManagerImpl.java b/server/src/com/cloud/vm/UserVmManagerImpl.java index e04f009e8d5..a8241d02ea7 100755 --- a/server/src/com/cloud/vm/UserVmManagerImpl.java +++ b/server/src/com/cloud/vm/UserVmManagerImpl.java @@ -32,9 +32,11 @@ import javax.ejb.Local; import javax.naming.ConfigurationException; import org.apache.cloudstack.api.command.user.template.CreateTemplateCmd; -import org.apache.cloudstack.api.user.vmgroup.command.DeleteVMGroupCmd; -import org.apache.cloudstack.api.user.volume.command.AttachVolumeCmd; -import org.apache.cloudstack.api.user.volume.command.DetachVolumeCmd; +import org.apache.cloudstack.api.command.user.vm.*; +import org.apache.cloudstack.api.command.user.vmgroup.CreateVMGroupCmd; +import org.apache.cloudstack.api.command.user.vmgroup.DeleteVMGroupCmd; +import org.apache.cloudstack.api.command.user.volume.AttachVolumeCmd; +import org.apache.cloudstack.api.command.user.volume.DetachVolumeCmd; import org.apache.commons.codec.binary.Base64; import org.apache.log4j.Logger; @@ -63,18 +65,16 @@ import com.cloud.alert.AlertManager; import com.cloud.api.ApiDBUtils; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.command.admin.vm.AssignVMCmd; -import org.apache.cloudstack.api.user.vmgroup.command.CreateVMGroupCmd; -import org.apache.cloudstack.api.user.vm.command.DeployVMCmd; -import org.apache.cloudstack.api.user.vm.command.DestroyVMCmd; -import org.apache.cloudstack.api.user.vm.command.ListVMsCmd; -import org.apache.cloudstack.api.user.vm.command.RebootVMCmd; +import org.apache.cloudstack.api.command.user.vm.DeployVMCmd; +import org.apache.cloudstack.api.command.user.vm.DestroyVMCmd; +import org.apache.cloudstack.api.command.user.vm.ListVMsCmd; +import org.apache.cloudstack.api.command.user.vm.RebootVMCmd; import org.apache.cloudstack.api.command.admin.vm.RecoverVMCmd; -import org.apache.cloudstack.api.user.vm.command.ResetVMPasswordCmd; -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 org.apache.cloudstack.api.command.user.vm.ResetVMPasswordCmd; +import org.apache.cloudstack.api.command.user.vm.RestoreVMCmd; +import org.apache.cloudstack.api.command.user.vm.UpdateVMCmd; +import org.apache.cloudstack.api.command.user.vm.UpgradeVMCmd; +import org.apache.cloudstack.api.view.vo.UserVmJoinVO; import com.cloud.async.AsyncJobExecutor; import com.cloud.async.AsyncJobManager; import com.cloud.async.AsyncJobVO; diff --git a/server/src/com/cloud/vm/dao/DomainRouterJoinDao.java b/server/src/com/cloud/vm/dao/DomainRouterJoinDao.java index c7c749b5690..9bb03be7539 100644 --- a/server/src/com/cloud/vm/dao/DomainRouterJoinDao.java +++ b/server/src/com/cloud/vm/dao/DomainRouterJoinDao.java @@ -18,8 +18,8 @@ package com.cloud.vm.dao; import java.util.List; -import com.cloud.api.response.DomainRouterResponse; -import com.cloud.api.view.vo.DomainRouterJoinVO; +import org.apache.cloudstack.api.response.DomainRouterResponse; +import org.apache.cloudstack.api.view.vo.DomainRouterJoinVO; import com.cloud.network.router.VirtualRouter; import com.cloud.user.Account; import com.cloud.utils.db.GenericDao; diff --git a/server/src/com/cloud/vm/dao/DomainRouterJoinDaoImpl.java b/server/src/com/cloud/vm/dao/DomainRouterJoinDaoImpl.java index a3f7d77bcdf..f7a91466d5c 100644 --- a/server/src/com/cloud/vm/dao/DomainRouterJoinDaoImpl.java +++ b/server/src/com/cloud/vm/dao/DomainRouterJoinDaoImpl.java @@ -16,44 +16,23 @@ // 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 org.apache.cloudstack.api.response.DomainRouterResponse; +import org.apache.cloudstack.api.response.NicResponse; +import org.apache.cloudstack.api.view.vo.DomainRouterJoinVO; import com.cloud.network.Networks.TrafficType; import com.cloud.network.router.VirtualRouter; -import com.cloud.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}) diff --git a/server/src/com/cloud/vm/dao/UserVmData.java b/server/src/com/cloud/vm/dao/UserVmData.java index 82c737c0e5b..674fc005a85 100644 --- a/server/src/com/cloud/vm/dao/UserVmData.java +++ b/server/src/com/cloud/vm/dao/UserVmData.java @@ -21,7 +21,7 @@ import java.util.HashSet; import java.util.List; import java.util.Set; -import com.cloud.api.response.SecurityGroupRuleResponse; +import org.apache.cloudstack.api.response.SecurityGroupRuleResponse; public class UserVmData { private Long id; diff --git a/server/src/com/cloud/vm/dao/UserVmJoinDao.java b/server/src/com/cloud/vm/dao/UserVmJoinDao.java index 057e043295f..7788a62dca7 100644 --- a/server/src/com/cloud/vm/dao/UserVmJoinDao.java +++ b/server/src/com/cloud/vm/dao/UserVmJoinDao.java @@ -20,8 +20,8 @@ import java.util.EnumSet; import java.util.List; import org.apache.cloudstack.api.ApiConstants.VMDetails; -import com.cloud.api.response.UserVmResponse; -import com.cloud.api.view.vo.UserVmJoinVO; +import org.apache.cloudstack.api.response.UserVmResponse; +import org.apache.cloudstack.api.view.vo.UserVmJoinVO; import com.cloud.user.Account; import com.cloud.uservm.UserVm; import com.cloud.utils.db.GenericDao; diff --git a/server/src/com/cloud/vm/dao/UserVmJoinDaoImpl.java b/server/src/com/cloud/vm/dao/UserVmJoinDaoImpl.java index 742784cd42b..b20e53f10ea 100644 --- a/server/src/com/cloud/vm/dao/UserVmJoinDaoImpl.java +++ b/server/src/com/cloud/vm/dao/UserVmJoinDaoImpl.java @@ -16,12 +16,8 @@ // 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; @@ -32,24 +28,16 @@ import org.apache.log4j.Logger; import com.cloud.api.ApiDBUtils; import org.apache.cloudstack.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.ResourceTagJoinVO; -import com.cloud.api.view.vo.UserVmJoinVO; +import org.apache.cloudstack.api.response.NicResponse; +import org.apache.cloudstack.api.response.SecurityGroupResponse; +import org.apache.cloudstack.api.response.UserVmResponse; +import org.apache.cloudstack.api.view.vo.ResourceTagJoinVO; +import org.apache.cloudstack.api.view.vo.UserVmJoinVO; import com.cloud.user.Account; import com.cloud.uservm.UserVm; -import com.cloud.utils.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; diff --git a/server/test/com/cloud/keystore/KeystoreTest.java b/server/test/com/cloud/keystore/KeystoreTest.java index a0ffb688f26..21d5d9c13e0 100644 --- a/server/test/com/cloud/keystore/KeystoreTest.java +++ b/server/test/com/cloud/keystore/KeystoreTest.java @@ -23,8 +23,8 @@ import org.junit.After; import org.junit.Before; import com.cloud.api.ApiSerializerHelper; -import com.cloud.api.response.AlertResponse; -import com.cloud.api.response.UserVmResponse; +import org.apache.cloudstack.api.response.AlertResponse; +import org.apache.cloudstack.api.response.UserVmResponse; public class KeystoreTest extends TestCase { private final static Logger s_logger = Logger.getLogger(KeystoreTest.class); diff --git a/server/test/com/cloud/user/MockAccountManagerImpl.java b/server/test/com/cloud/user/MockAccountManagerImpl.java index 2c002fde9be..90422c72668 100644 --- a/server/test/com/cloud/user/MockAccountManagerImpl.java +++ b/server/test/com/cloud/user/MockAccountManagerImpl.java @@ -30,7 +30,7 @@ import org.apache.cloudstack.api.command.admin.user.RegisterCmd; import org.apache.cloudstack.api.command.user.account.ListAccountsCmd; import org.apache.cloudstack.api.command.admin.account.UpdateAccountCmd; import org.apache.cloudstack.api.command.admin.user.UpdateUserCmd; -import com.cloud.api.view.vo.ControlledViewEntity; +import org.apache.cloudstack.api.view.vo.ControlledViewEntity; import com.cloud.domain.Domain; import com.cloud.exception.ConcurrentOperationException; import com.cloud.exception.PermissionDeniedException; diff --git a/server/test/com/cloud/vm/MockUserVmManagerImpl.java b/server/test/com/cloud/vm/MockUserVmManagerImpl.java index 074000bc1a3..08e7ee27555 100644 --- a/server/test/com/cloud/vm/MockUserVmManagerImpl.java +++ b/server/test/com/cloud/vm/MockUserVmManagerImpl.java @@ -30,21 +30,21 @@ import com.cloud.agent.api.to.VirtualMachineTO; import com.cloud.agent.manager.Commands; import org.apache.cloudstack.api.command.admin.vm.AssignVMCmd; import org.apache.cloudstack.api.command.admin.vm.RecoverVMCmd; -import org.apache.cloudstack.api.user.volume.command.AttachVolumeCmd; +import org.apache.cloudstack.api.command.user.vm.*; +import org.apache.cloudstack.api.command.user.vmgroup.DeleteVMGroupCmd; +import org.apache.cloudstack.api.command.user.volume.AttachVolumeCmd; +import org.apache.cloudstack.api.command.user.volume.DetachVolumeCmd; import org.apache.cloudstack.api.command.user.template.CreateTemplateCmd; -import org.apache.cloudstack.api.user.vmgroup.command.CreateVMGroupCmd; -import org.apache.cloudstack.api.user.vmgroup.command.DeleteVMGroupCmd; -import org.apache.cloudstack.api.user.vm.command.DeployVMCmd; -import org.apache.cloudstack.api.user.vm.command.DestroyVMCmd; -import org.apache.cloudstack.api.user.volume.command.DetachVolumeCmd; -import org.apache.cloudstack.api.user.vm.command.ListVMsCmd; -import org.apache.cloudstack.api.user.vm.command.RebootVMCmd; -import org.apache.cloudstack.api.user.vm.command.ResetVMPasswordCmd; -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 org.apache.cloudstack.api.command.user.vmgroup.CreateVMGroupCmd; +import org.apache.cloudstack.api.command.user.vm.DestroyVMCmd; +import org.apache.cloudstack.api.command.user.vm.ListVMsCmd; +import org.apache.cloudstack.api.command.user.vm.RebootVMCmd; +import org.apache.cloudstack.api.command.user.vm.ResetVMPasswordCmd; +import org.apache.cloudstack.api.command.user.vm.RestoreVMCmd; +import org.apache.cloudstack.api.command.user.vm.StartVMCmd; +import org.apache.cloudstack.api.command.user.vm.UpdateVMCmd; +import org.apache.cloudstack.api.command.user.vm.UpgradeVMCmd; +import org.apache.cloudstack.api.view.vo.UserVmJoinVO; import com.cloud.dc.DataCenter; import com.cloud.deploy.DeployDestination; import com.cloud.exception.ConcurrentOperationException; diff --git a/server/test/com/cloud/vpc/MockSite2SiteVpnManagerImpl.java b/server/test/com/cloud/vpc/MockSite2SiteVpnManagerImpl.java index 59ec5ce16f9..c112f31f73b 100644 --- a/server/test/com/cloud/vpc/MockSite2SiteVpnManagerImpl.java +++ b/server/test/com/cloud/vpc/MockSite2SiteVpnManagerImpl.java @@ -22,17 +22,16 @@ import java.util.Map; import javax.ejb.Local; import javax.naming.ConfigurationException; -import org.apache.cloudstack.api.user.vpn.command.CreateVpnConnectionCmd; -import org.apache.cloudstack.api.user.vpn.command.CreateVpnCustomerGatewayCmd; -import org.apache.cloudstack.api.user.vpn.command.CreateVpnGatewayCmd; -import org.apache.cloudstack.api.user.vpn.command.DeleteVpnConnectionCmd; -import org.apache.cloudstack.api.user.vpn.command.DeleteVpnCustomerGatewayCmd; -import org.apache.cloudstack.api.user.vpn.command.DeleteVpnGatewayCmd; -import org.apache.cloudstack.api.user.vpn.command.ListVpnConnectionsCmd; -import org.apache.cloudstack.api.user.vpn.command.ListVpnCustomerGatewaysCmd; -import org.apache.cloudstack.api.user.vpn.command.ListVpnGatewaysCmd; -import org.apache.cloudstack.api.user.vpn.command.ResetVpnConnectionCmd; -import org.apache.cloudstack.api.user.vpn.command.UpdateVpnCustomerGatewayCmd; +import org.apache.cloudstack.api.command.user.vpn.*; +import org.apache.cloudstack.api.command.user.vpn.CreateVpnCustomerGatewayCmd; +import org.apache.cloudstack.api.command.user.vpn.CreateVpnGatewayCmd; +import org.apache.cloudstack.api.command.user.vpn.DeleteVpnConnectionCmd; +import org.apache.cloudstack.api.command.user.vpn.DeleteVpnCustomerGatewayCmd; +import org.apache.cloudstack.api.command.user.vpn.DeleteVpnGatewayCmd; +import org.apache.cloudstack.api.command.user.vpn.ListVpnConnectionsCmd; +import org.apache.cloudstack.api.command.user.vpn.ListVpnCustomerGatewaysCmd; +import org.apache.cloudstack.api.command.user.vpn.ListVpnGatewaysCmd; +import org.apache.cloudstack.api.command.user.vpn.UpdateVpnCustomerGatewayCmd; import com.cloud.exception.NetworkRuleConflictException; import com.cloud.exception.ResourceUnavailableException; import com.cloud.network.Site2SiteCustomerGateway; diff --git a/server/test/com/cloud/vpc/MockVpcManagerImpl.java b/server/test/com/cloud/vpc/MockVpcManagerImpl.java index 27ca4c1b607..090fc240bc6 100644 --- a/server/test/com/cloud/vpc/MockVpcManagerImpl.java +++ b/server/test/com/cloud/vpc/MockVpcManagerImpl.java @@ -24,8 +24,8 @@ import javax.ejb.Local; import javax.naming.ConfigurationException; import com.cloud.acl.ControlledEntity.ACLType; -import org.apache.cloudstack.api.user.vpc.command.ListPrivateGatewaysCmd; -import org.apache.cloudstack.api.user.vpc.command.ListStaticRoutesCmd; +import org.apache.cloudstack.api.command.user.vpc.ListPrivateGatewaysCmd; +import org.apache.cloudstack.api.command.user.vpc.ListStaticRoutesCmd; import com.cloud.exception.ConcurrentOperationException; import com.cloud.exception.InsufficientAddressCapacityException; import com.cloud.exception.InsufficientCapacityException; From 9a3632d807ee899a08938b4b343a52514e21181f Mon Sep 17 00:00:00 2001 From: Min Chen Date: Mon, 10 Dec 2012 11:21:01 -0800 Subject: [PATCH 084/421] Create Base view VO object to remove some code duplication. --- .../cloudstack/api/view/vo/BaseViewVO.java | 44 +++++++++++++++++++ .../api/view/vo/DomainRouterJoinVO.java | 36 +-------------- .../cloudstack/api/view/vo/EventJoinVO.java | 33 +------------- .../api/view/vo/ResourceTagJoinVO.java | 25 +---------- .../api/view/vo/SecurityGroupJoinVO.java | 32 +------------- .../cloudstack/api/view/vo/UserVmJoinVO.java | 35 +-------------- 6 files changed, 49 insertions(+), 156 deletions(-) create mode 100644 api/src/org/apache/cloudstack/api/view/vo/BaseViewVO.java diff --git a/api/src/org/apache/cloudstack/api/view/vo/BaseViewVO.java b/api/src/org/apache/cloudstack/api/view/vo/BaseViewVO.java new file mode 100644 index 00000000000..f6149b78cef --- /dev/null +++ b/api/src/org/apache/cloudstack/api/view/vo/BaseViewVO.java @@ -0,0 +1,44 @@ +package org.apache.cloudstack.api.view.vo; + +import javax.persistence.Column; + +/** + * Base class for all VO objects for db views. + * @author minc + * + */ +public abstract class BaseViewVO { + + @Column(name="id", updatable=false, nullable = false) + protected long id; + + public long getId() { + return id; + } + + public void setId(long id) { + this.id = id; + } + + @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; + BaseViewVO other = (BaseViewVO) obj; + if (id != other.id) + return false; + return true; + } +} diff --git a/api/src/org/apache/cloudstack/api/view/vo/DomainRouterJoinVO.java b/api/src/org/apache/cloudstack/api/view/vo/DomainRouterJoinVO.java index 747cde5411a..d7d31b0ba00 100644 --- a/api/src/org/apache/cloudstack/api/view/vo/DomainRouterJoinVO.java +++ b/api/src/org/apache/cloudstack/api/view/vo/DomainRouterJoinVO.java @@ -33,10 +33,8 @@ import com.cloud.vm.VirtualMachine.State; @Entity @Table(name="domain_router_view") -public class DomainRouterJoinVO implements ControlledViewEntity { +public class DomainRouterJoinVO extends BaseViewVO 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; @@ -239,15 +237,6 @@ public class DomainRouterJoinVO implements ControlledViewEntity { } - public long getId() { - return id; - } - - - public void setId(long id) { - this.id = id; - } - public String getName() { return name; @@ -902,27 +891,4 @@ public class DomainRouterJoinVO implements ControlledViewEntity { } - - - @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; - } } diff --git a/api/src/org/apache/cloudstack/api/view/vo/EventJoinVO.java b/api/src/org/apache/cloudstack/api/view/vo/EventJoinVO.java index da322fbca8f..e8619d6fef9 100644 --- a/api/src/org/apache/cloudstack/api/view/vo/EventJoinVO.java +++ b/api/src/org/apache/cloudstack/api/view/vo/EventJoinVO.java @@ -29,10 +29,7 @@ import com.cloud.event.Event.State; @Entity @Table(name="event_view") -public class EventJoinVO implements ControlledViewEntity { - - @Column(name="id", updatable=false, nullable = false) - private long id; +public class EventJoinVO extends BaseViewVO implements ControlledViewEntity { @Column(name="uuid") private String uuid; @@ -115,14 +112,6 @@ public class EventJoinVO implements ControlledViewEntity { this.uuid = uuid; } - public long getId() { - return id; - } - - public void setId(long id) { - this.id = id; - } - @Override public long getAccountId() { @@ -307,25 +296,5 @@ public class EventJoinVO implements ControlledViewEntity { this.parameters = parameters; } - @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; - EventJoinVO other = (EventJoinVO) obj; - if (id != other.id) - return false; - return true; - } } diff --git a/api/src/org/apache/cloudstack/api/view/vo/ResourceTagJoinVO.java b/api/src/org/apache/cloudstack/api/view/vo/ResourceTagJoinVO.java index e39c1155f6e..052149b2eed 100644 --- a/api/src/org/apache/cloudstack/api/view/vo/ResourceTagJoinVO.java +++ b/api/src/org/apache/cloudstack/api/view/vo/ResourceTagJoinVO.java @@ -26,10 +26,8 @@ import com.cloud.server.ResourceTag.TaggedResourceType; @Entity @Table(name="resource_tag_view") -public class ResourceTagJoinVO implements ControlledViewEntity { +public class ResourceTagJoinVO extends BaseViewVO implements ControlledViewEntity { - @Column(name="id", updatable=false, nullable = false) - private long id; @Column(name="uuid") private String uuid; @@ -41,7 +39,6 @@ public class ResourceTagJoinVO implements ControlledViewEntity { String value; - @Column(name="resource_id") long resourceId; @@ -260,25 +257,5 @@ public class ResourceTagJoinVO implements ControlledViewEntity { this.customer = customer; } - @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; - ResourceTagJoinVO other = (ResourceTagJoinVO) obj; - if (id != other.id) - return false; - return true; - } } diff --git a/api/src/org/apache/cloudstack/api/view/vo/SecurityGroupJoinVO.java b/api/src/org/apache/cloudstack/api/view/vo/SecurityGroupJoinVO.java index 725ee90af45..80cab110a97 100644 --- a/api/src/org/apache/cloudstack/api/view/vo/SecurityGroupJoinVO.java +++ b/api/src/org/apache/cloudstack/api/view/vo/SecurityGroupJoinVO.java @@ -27,10 +27,7 @@ import com.cloud.server.ResourceTag.TaggedResourceType; @Entity @Table(name="security_group_view") -public class SecurityGroupJoinVO implements ControlledViewEntity { - - @Column(name="id", updatable=false, nullable = false) - private long id; +public class SecurityGroupJoinVO extends BaseViewVO implements ControlledViewEntity { @Column(name="name") private String name; @@ -149,13 +146,6 @@ public class SecurityGroupJoinVO implements ControlledViewEntity { this.uuid = uuid; } - public long getId() { - return id; - } - - public void setId(long id) { - this.id = id; - } public String getName() { return name; @@ -443,25 +433,5 @@ public class SecurityGroupJoinVO implements ControlledViewEntity { this.tagCustomer = tagCustomer; } - @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; - SecurityGroupJoinVO other = (SecurityGroupJoinVO) obj; - if (id != other.id) - return false; - return true; - } } diff --git a/api/src/org/apache/cloudstack/api/view/vo/UserVmJoinVO.java b/api/src/org/apache/cloudstack/api/view/vo/UserVmJoinVO.java index aff2a1b5a4d..0edf0be3114 100644 --- a/api/src/org/apache/cloudstack/api/view/vo/UserVmJoinVO.java +++ b/api/src/org/apache/cloudstack/api/view/vo/UserVmJoinVO.java @@ -40,10 +40,8 @@ import com.cloud.vm.VirtualMachine.State; @Entity @Table(name="user_vm_view") -public class UserVmJoinVO implements ControlledViewEntity { +public class UserVmJoinVO extends BaseViewVO 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; @@ -388,15 +386,6 @@ public class UserVmJoinVO implements ControlledViewEntity { this.password = password; } - public long getId() { - return id; - } - - - public void setId(long id) { - this.id = id; - } - public String getName() { return name; @@ -1598,26 +1587,4 @@ public class UserVmJoinVO implements ControlledViewEntity { return toString; } - - @Override - public int hashCode() { - final int prime = 31; - int result = 1; - result = prime * result + (int) (id ^ (id >>> 32)); - return result; - } - - @Override - public boolean equals(Object obj) { - if (this == obj) - return true; - if (obj == null) - return false; - if (getClass() != obj.getClass()) - return false; - UserVmJoinVO other = (UserVmJoinVO) obj; - if (id != other.id) - return false; - return true; - } } From 98033905e4ba6596361c11cbccf3ff9d11c39078 Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Mon, 10 Dec 2012 11:34:10 -0800 Subject: [PATCH 085/421] api: Add missing license header to BaseViewVO Signed-off-by: Rohit Yadav --- .../cloudstack/api/view/vo/BaseViewVO.java | 21 ++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/api/src/org/apache/cloudstack/api/view/vo/BaseViewVO.java b/api/src/org/apache/cloudstack/api/view/vo/BaseViewVO.java index f6149b78cef..ca7cacb3557 100644 --- a/api/src/org/apache/cloudstack/api/view/vo/BaseViewVO.java +++ b/api/src/org/apache/cloudstack/api/view/vo/BaseViewVO.java @@ -1,12 +1,23 @@ +// 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 org.apache.cloudstack.api.view.vo; import javax.persistence.Column; -/** - * Base class for all VO objects for db views. - * @author minc - * - */ public abstract class BaseViewVO { @Column(name="id", updatable=false, nullable = false) From bba96254f500f90c05c8059dfe7938fb1857fe7f Mon Sep 17 00:00:00 2001 From: Min Chen Date: Mon, 10 Dec 2012 13:52:33 -0800 Subject: [PATCH 086/421] Refactoring ListVMGroupsCmd and InstanceGroupResponse. --- .../com/cloud/server/ManagementService.java | 4 +- .../cloudstack/api/ResponseGenerator.java | 3 + .../command/user/vmgroup/ListVMGroupsCmd.java | 16 +- .../api/response/InstanceGroupResponse.java | 20 +- .../api/view/vo/InstanceGroupJoinVO.java | 215 ++++++++++++++++++ server/src/com/cloud/api/ApiDBUtils.java | 13 ++ .../src/com/cloud/api/ApiResponseHelper.java | 20 +- server/src/com/cloud/api/ApiServer.java | 4 +- .../com/cloud/event/dao/EventJoinDaoImpl.java | 1 - .../dao/SecurityGroupJoinDaoImpl.java | 10 +- .../cloud/server/ManagementServerImpl.java | 52 ++--- .../tags/dao/ResourceTagJoinDaoImpl.java | 1 - .../cloud/vm/dao/DomainRouterJoinDaoImpl.java | 10 +- .../cloud/vm/dao/InstanceGroupJoinDao.java | 35 +++ .../vm/dao/InstanceGroupJoinDaoImpl.java | 96 ++++++++ setup/db/create-schema.sql | 24 ++ 16 files changed, 440 insertions(+), 84 deletions(-) create mode 100644 api/src/org/apache/cloudstack/api/view/vo/InstanceGroupJoinVO.java create mode 100644 server/src/com/cloud/vm/dao/InstanceGroupJoinDao.java create mode 100644 server/src/com/cloud/vm/dao/InstanceGroupJoinDaoImpl.java diff --git a/api/src/com/cloud/server/ManagementService.java b/api/src/com/cloud/server/ManagementService.java index 75c042d0dd4..a79dd13469f 100755 --- a/api/src/com/cloud/server/ManagementService.java +++ b/api/src/com/cloud/server/ManagementService.java @@ -64,6 +64,8 @@ import org.apache.cloudstack.api.command.admin.systemvm.UpgradeSystemVMCmd; import org.apache.cloudstack.api.command.admin.resource.UploadCustomCertificateCmd; import org.apache.cloudstack.api.view.vo.DomainRouterJoinVO; import org.apache.cloudstack.api.view.vo.EventJoinVO; +import org.apache.cloudstack.api.view.vo.InstanceGroupJoinVO; + import com.cloud.async.AsyncJob; import com.cloud.capacity.Capacity; import com.cloud.configuration.Configuration; @@ -307,7 +309,7 @@ public interface ManagementService { InstanceGroup updateVmGroup(UpdateVMGroupCmd cmd); - Pair, Integer> searchForVmGroups(ListVMGroupsCmd cmd); + Pair, Integer> searchForVmGroups(ListVMGroupsCmd cmd); Map listCapabilities(ListCapabilitiesCmd cmd); diff --git a/api/src/org/apache/cloudstack/api/ResponseGenerator.java b/api/src/org/apache/cloudstack/api/ResponseGenerator.java index b0a2fafa33c..2ccbec54db6 100644 --- a/api/src/org/apache/cloudstack/api/ResponseGenerator.java +++ b/api/src/org/apache/cloudstack/api/ResponseGenerator.java @@ -152,6 +152,7 @@ import com.cloud.uservm.UserVm; import com.cloud.vm.InstanceGroup; import org.apache.cloudstack.api.view.vo.DomainRouterJoinVO; import org.apache.cloudstack.api.view.vo.EventJoinVO; +import org.apache.cloudstack.api.view.vo.InstanceGroupJoinVO; import org.apache.cloudstack.api.view.vo.ResourceTagJoinVO; import org.apache.cloudstack.api.view.vo.SecurityGroupJoinVO; import org.apache.cloudstack.api.view.vo.UserVmJoinVO; @@ -214,6 +215,8 @@ public interface ResponseGenerator { InstanceGroupResponse createInstanceGroupResponse(InstanceGroup group); + List createInstanceGroupResponse(InstanceGroupJoinVO... groups); + StoragePoolResponse createStoragePoolResponse(StoragePool pool); ClusterResponse createClusterResponse(Cluster cluster, Boolean showCapacities); diff --git a/api/src/org/apache/cloudstack/api/command/user/vmgroup/ListVMGroupsCmd.java b/api/src/org/apache/cloudstack/api/command/user/vmgroup/ListVMGroupsCmd.java index c94571b9cd8..139e0962c46 100644 --- a/api/src/org/apache/cloudstack/api/command/user/vmgroup/ListVMGroupsCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vmgroup/ListVMGroupsCmd.java @@ -26,8 +26,12 @@ 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.response.EventResponse; import org.apache.cloudstack.api.response.InstanceGroupResponse; import org.apache.cloudstack.api.response.ListResponse; +import org.apache.cloudstack.api.view.vo.EventJoinVO; +import org.apache.cloudstack.api.view.vo.InstanceGroupJoinVO; + import com.cloud.utils.Pair; import com.cloud.vm.InstanceGroup; @@ -71,16 +75,10 @@ public class ListVMGroupsCmd extends BaseListProjectAndAccountResourcesCmd { @Override public void execute(){ - Pair, Integer> groups = _mgr.searchForVmGroups(this); + Pair, Integer> groups = _mgr.searchForVmGroups(this); ListResponse response = new ListResponse(); - List responses = new ArrayList(); - for (InstanceGroup group : groups.first()) { - InstanceGroupResponse groupResponse = _responseGenerator.createInstanceGroupResponse(group); - groupResponse.setObjectName("instancegroup"); - responses.add(groupResponse); - } - - response.setResponses(responses, groups.second()); + List grpResponses = _responseGenerator.createInstanceGroupResponse(groups.first().toArray(new InstanceGroupJoinVO[groups.first().size()])); + response.setResponses(grpResponses, groups.second()); response.setResponseName(getCommandName()); this.setResponseObject(response); } diff --git a/api/src/org/apache/cloudstack/api/response/InstanceGroupResponse.java b/api/src/org/apache/cloudstack/api/response/InstanceGroupResponse.java index ec92397e31e..7231958ea62 100644 --- a/api/src/org/apache/cloudstack/api/response/InstanceGroupResponse.java +++ b/api/src/org/apache/cloudstack/api/response/InstanceGroupResponse.java @@ -28,9 +28,9 @@ import com.google.gson.annotations.SerializedName; @SuppressWarnings("unused") @Entity(value = InstanceGroup.class) -public class InstanceGroupResponse extends BaseResponse implements ControlledEntityResponse{ +public class InstanceGroupResponse extends BaseResponse implements ControlledViewEntityResponse{ @SerializedName(ApiConstants.ID) @Param(description="the id of the instance group") - private IdentityProxy id = new IdentityProxy("instance_group"); + private String id; @SerializedName(ApiConstants.NAME) @Param(description="the name of the instance group") private String name; @@ -42,19 +42,19 @@ public class InstanceGroupResponse extends BaseResponse implements ControlledEnt private String accountName; @SerializedName(ApiConstants.PROJECT_ID) @Param(description="the project id of the group") - private IdentityProxy projectId = new IdentityProxy("projects"); + private String projectId; @SerializedName(ApiConstants.PROJECT) @Param(description="the project name of the group") private String projectName; @SerializedName(ApiConstants.DOMAIN_ID) @Param(description="the domain ID of the instance group") - private IdentityProxy domainId = new IdentityProxy("domain"); + private String domainId; @SerializedName(ApiConstants.DOMAIN) @Param(description="the domain name of the instance group") private String domainName; - public void setId(Long id) { - this.id.setValue(id); + public void setId(String id) { + this.id = id; } public void setName(String name) { @@ -71,8 +71,8 @@ public class InstanceGroupResponse extends BaseResponse implements ControlledEnt } @Override - public void setDomainId(Long domainId) { - this.domainId.setValue(domainId); + public void setDomainId(String domainId) { + this.domainId = domainId; } @Override @@ -81,8 +81,8 @@ public class InstanceGroupResponse extends BaseResponse implements ControlledEnt } @Override - public void setProjectId(Long projectId) { - this.projectId.setValue(projectId); + public void setProjectId(String projectId) { + this.projectId = projectId; } @Override diff --git a/api/src/org/apache/cloudstack/api/view/vo/InstanceGroupJoinVO.java b/api/src/org/apache/cloudstack/api/view/vo/InstanceGroupJoinVO.java new file mode 100644 index 00000000000..09194876f1a --- /dev/null +++ b/api/src/org/apache/cloudstack/api/view/vo/InstanceGroupJoinVO.java @@ -0,0 +1,215 @@ +// 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 org.apache.cloudstack.api.view.vo; + +import java.util.Date; + +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.Table; + +import com.cloud.utils.db.GenericDao; + +@Entity +@Table(name="instance_group_view") +public class InstanceGroupJoinVO extends BaseViewVO implements ControlledViewEntity { + + @Column(name="uuid") + private String uuid; + + @Column(name="name") + String name; + + + @Column(name=GenericDao.REMOVED_COLUMN) + private Date removed; + + @Column(name=GenericDao.CREATED_COLUMN) + private Date created; + + + @Column(name="account_id") + private long accountId; + + @Column(name="account_uuid") + private String accountUuid; + + @Column(name="account_name") + private String accountName = null; + + @Column(name="account_type") + private short accountType; + + @Column(name="domain_id") + private long domainId; + + @Column(name="domain_uuid") + private String domainUuid; + + @Column(name="domain_name") + private String domainName = null; + + @Column(name="domain_path") + private String domainPath = null; + + @Column(name="project_id") + private long projectId; + + @Column(name="project_uuid") + private String projectUuid; + + @Column(name="project_name") + private String projectName; + + + + public InstanceGroupJoinVO() { + } + + public String getUuid() { + return uuid; + } + + public void setUuid(String uuid) { + this.uuid = uuid; + } + + + @Override + public long getAccountId() { + return accountId; + } + + public void setAccountId(long accountId) { + this.accountId = accountId; + } + + @Override + public String getAccountUuid() { + return accountUuid; + } + + public void setAccountUuid(String accountUuid) { + this.accountUuid = accountUuid; + } + + @Override + public String getAccountName() { + return accountName; + } + + public void setAccountName(String accountName) { + this.accountName = accountName; + } + + @Override + public short getAccountType() { + return accountType; + } + + public void setAccountType(short accountType) { + this.accountType = accountType; + } + + @Override + 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; + } + + @Override + public String getDomainName() { + return domainName; + } + + public void setDomainName(String domainName) { + this.domainName = domainName; + } + + @Override + public String getDomainPath() { + return domainPath; + } + + public void setDomainPath(String domainPath) { + this.domainPath = domainPath; + } + + public long getProjectId() { + return projectId; + } + + public void setProjectId(long projectId) { + this.projectId = projectId; + } + + @Override + public String getProjectUuid() { + return projectUuid; + } + + public void setProjectUuid(String projectUuid) { + this.projectUuid = projectUuid; + } + + @Override + public String getProjectName() { + return projectName; + } + + public void setProjectName(String projectName) { + this.projectName = projectName; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public Date getRemoved() { + return removed; + } + + public void setRemoved(Date removed) { + this.removed = removed; + } + + public Date getCreated() { + return created; + } + + public void setCreated(Date created) { + this.created = created; + } + + +} diff --git a/server/src/com/cloud/api/ApiDBUtils.java b/server/src/com/cloud/api/ApiDBUtils.java index a86f09bf7e6..f3ee0eda7fb 100755 --- a/server/src/com/cloud/api/ApiDBUtils.java +++ b/server/src/com/cloud/api/ApiDBUtils.java @@ -25,11 +25,13 @@ import java.util.Set; import org.apache.cloudstack.api.ApiConstants.VMDetails; import org.apache.cloudstack.api.response.DomainRouterResponse; import org.apache.cloudstack.api.response.EventResponse; +import org.apache.cloudstack.api.response.InstanceGroupResponse; import org.apache.cloudstack.api.response.ResourceTagResponse; import org.apache.cloudstack.api.response.SecurityGroupResponse; import org.apache.cloudstack.api.response.UserVmResponse; import org.apache.cloudstack.api.view.vo.DomainRouterJoinVO; import org.apache.cloudstack.api.view.vo.EventJoinVO; +import org.apache.cloudstack.api.view.vo.InstanceGroupJoinVO; import org.apache.cloudstack.api.view.vo.ResourceTagJoinVO; import org.apache.cloudstack.api.view.vo.SecurityGroupJoinVO; import org.apache.cloudstack.api.view.vo.UserVmJoinVO; @@ -166,6 +168,7 @@ import com.cloud.utils.Pair; import com.cloud.utils.component.ComponentLocator; import com.cloud.vm.ConsoleProxyVO; import com.cloud.vm.DomainRouterVO; +import com.cloud.vm.InstanceGroup; import com.cloud.vm.InstanceGroupVO; import com.cloud.vm.NicProfile; import com.cloud.vm.UserVmDetailVO; @@ -177,6 +180,7 @@ 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.InstanceGroupJoinDao; import com.cloud.vm.dao.UserVmDao; import com.cloud.vm.dao.UserVmDetailsDao; import com.cloud.vm.dao.UserVmJoinDao; @@ -251,6 +255,7 @@ public class ApiDBUtils { private static CounterDao _counterDao; private static ResourceTagJoinDao _tagJoinDao; private static EventJoinDao _eventJoinDao; + private static InstanceGroupJoinDao _vmGroupJoinDao; static { _ms = (ManagementServer) ComponentLocator.getComponent(ManagementServer.Name); @@ -983,4 +988,12 @@ public class ApiDBUtils { public static EventJoinVO newEventView(Event e){ return _eventJoinDao.newEventView(e); } + + public static InstanceGroupResponse newInstanceGroupResponse(InstanceGroupJoinVO ve) { + return _vmGroupJoinDao.newInstanceGroupResponse(ve); + } + + public static InstanceGroupJoinVO newInstanceGroupView(InstanceGroup e){ + return _vmGroupJoinDao.newInstanceGroupView(e); + } } diff --git a/server/src/com/cloud/api/ApiResponseHelper.java b/server/src/com/cloud/api/ApiResponseHelper.java index 992c0f403a1..04a931447b3 100755 --- a/server/src/com/cloud/api/ApiResponseHelper.java +++ b/server/src/com/cloud/api/ApiResponseHelper.java @@ -115,6 +115,7 @@ import org.apache.cloudstack.api.response.ZoneResponse; import org.apache.cloudstack.api.view.vo.DomainRouterJoinVO; import org.apache.cloudstack.api.view.vo.ControlledViewEntity; import org.apache.cloudstack.api.view.vo.EventJoinVO; +import org.apache.cloudstack.api.view.vo.InstanceGroupJoinVO; import org.apache.cloudstack.api.view.vo.ResourceTagJoinVO; import org.apache.cloudstack.api.view.vo.SecurityGroupJoinVO; import org.apache.cloudstack.api.view.vo.UserVmJoinVO; @@ -1188,15 +1189,20 @@ public class ApiResponseHelper implements ResponseGenerator { @Override public InstanceGroupResponse createInstanceGroupResponse(InstanceGroup group) { - InstanceGroupResponse groupResponse = new InstanceGroupResponse(); - groupResponse.setId(group.getId()); - groupResponse.setName(group.getName()); - groupResponse.setCreated(group.getCreated()); + InstanceGroupJoinVO vgroup = ApiDBUtils.newInstanceGroupView(group); + return ApiDBUtils.newInstanceGroupResponse(vgroup); - populateOwner(groupResponse, group); + } - groupResponse.setObjectName("instancegroup"); - return groupResponse; + + + @Override + public List createInstanceGroupResponse(InstanceGroupJoinVO... groups) { + List respList = new ArrayList(); + for (InstanceGroupJoinVO vt : groups){ + respList.add(ApiDBUtils.newInstanceGroupResponse(vt)); + } + return respList; } @Override diff --git a/server/src/com/cloud/api/ApiServer.java b/server/src/com/cloud/api/ApiServer.java index 183249f5a6d..bb14d4c5dd0 100755 --- a/server/src/com/cloud/api/ApiServer.java +++ b/server/src/com/cloud/api/ApiServer.java @@ -52,6 +52,7 @@ import javax.servlet.http.HttpSession; import org.apache.cloudstack.api.*; import org.apache.cloudstack.api.command.user.event.ListEventsCmd; import org.apache.cloudstack.api.command.user.vm.ListVMsCmd; +import org.apache.cloudstack.api.command.user.vmgroup.ListVMGroupsCmd; import org.apache.commons.codec.binary.Base64; import org.apache.http.ConnectionClosedException; import org.apache.http.HttpException; @@ -443,7 +444,8 @@ public class ApiServer implements HttpRequestHandler { if (cmdObj instanceof BaseListCmd && !(cmdObj instanceof ListVMsCmd) && !(cmdObj instanceof ListRoutersCmd) && !(cmdObj instanceof ListSecurityGroupsCmd) && !(cmdObj instanceof ListTagsCmd) - && !(cmdObj instanceof ListEventsCmd)) { + && !(cmdObj instanceof ListEventsCmd) + && !(cmdObj instanceof ListVMGroupsCmd)) { buildAsyncListResponse((BaseListCmd) cmdObj, caller); } diff --git a/server/src/com/cloud/event/dao/EventJoinDaoImpl.java b/server/src/com/cloud/event/dao/EventJoinDaoImpl.java index 91e7f369cd5..be2a6dc917a 100644 --- a/server/src/com/cloud/event/dao/EventJoinDaoImpl.java +++ b/server/src/com/cloud/event/dao/EventJoinDaoImpl.java @@ -112,7 +112,6 @@ public class EventJoinDaoImpl extends GenericDaoBase implemen @Override public EventJoinVO newEventView(Event vr) { - List uvList = new ArrayList(); SearchCriteria sc = vrIdSearch.create(); sc.setParameters("id", vr.getId()); List vms = searchIncludingRemoved(sc, null, null, false); diff --git a/server/src/com/cloud/network/security/dao/SecurityGroupJoinDaoImpl.java b/server/src/com/cloud/network/security/dao/SecurityGroupJoinDaoImpl.java index 8afb0cd4883..6ecb258b39a 100644 --- a/server/src/com/cloud/network/security/dao/SecurityGroupJoinDaoImpl.java +++ b/server/src/com/cloud/network/security/dao/SecurityGroupJoinDaoImpl.java @@ -162,16 +162,10 @@ public class SecurityGroupJoinDaoImpl extends GenericDaoBase newSecurityGroupView(SecurityGroup sg) { - List uvList = new ArrayList(); + SearchCriteria sc = sgIdSearch.create(); sc.setParameters("id", sg.getId()); - List sgs = searchIncludingRemoved(sc, null, null, false); - if (sgs != null) { - for (SecurityGroupJoinVO uvm : sgs) { - uvList.add(uvm); - } - } - return uvList; + return searchIncludingRemoved(sc, null, null, false); } @Override diff --git a/server/src/com/cloud/server/ManagementServerImpl.java b/server/src/com/cloud/server/ManagementServerImpl.java index be6bbefc6c5..a196cd35769 100755 --- a/server/src/com/cloud/server/ManagementServerImpl.java +++ b/server/src/com/cloud/server/ManagementServerImpl.java @@ -100,6 +100,8 @@ import org.apache.cloudstack.api.command.admin.resource.UploadCustomCertificateC import org.apache.cloudstack.api.response.ExtractResponse; import org.apache.cloudstack.api.view.vo.DomainRouterJoinVO; import org.apache.cloudstack.api.view.vo.EventJoinVO; +import org.apache.cloudstack.api.view.vo.InstanceGroupJoinVO; + import com.cloud.async.AsyncJob; import com.cloud.async.AsyncJobExecutor; import com.cloud.async.AsyncJobManager; @@ -262,6 +264,7 @@ 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.InstanceGroupJoinDao; import com.cloud.vm.dao.NicDao; import com.cloud.vm.dao.SecondaryStorageVmDao; import com.cloud.vm.dao.UserVmDao; @@ -317,6 +320,7 @@ public class ManagementServerImpl implements ManagementServer { private final AsyncJobManager _asyncMgr; private final int _purgeDelay; private final InstanceGroupDao _vmGroupDao; + private final InstanceGroupJoinDao _vmGroupJoinDao; private final UploadMonitor _uploadMonitor; private final UploadDao _uploadDao; private final SSHKeyPairDao _sshKeyPairDao; @@ -393,6 +397,7 @@ public class ManagementServerImpl implements ManagementServer { _guestOSCategoryDao = locator.getDao(GuestOSCategoryDao.class); _poolDao = locator.getDao(StoragePoolDao.class); _vmGroupDao = locator.getDao(InstanceGroupDao.class); + _vmGroupJoinDao = locator.getDao(InstanceGroupJoinDao.class); _uploadDao = locator.getDao(UploadDao.class); _configs = _configDao.getConfiguration(); _vmInstanceDao = locator.getDao(VMInstanceDao.class); @@ -3205,7 +3210,7 @@ public class ManagementServerImpl implements ManagementServer { } @Override - public Pair, Integer> searchForVmGroups(ListVMGroupsCmd cmd) { + public Pair, Integer> searchForVmGroups(ListVMGroupsCmd cmd) { Long id = cmd.getId(); String name = cmd.getGroupName(); String keyword = cmd.getKeyword(); @@ -3221,52 +3226,26 @@ public class ManagementServerImpl implements ManagementServer { Boolean isRecursive = domainIdRecursiveListProject.second(); ListProjectResourcesCriteria listProjectResourcesCriteria = domainIdRecursiveListProject.third(); - Filter searchFilter = new Filter(InstanceGroupVO.class, "id", true, cmd.getStartIndex(), cmd.getPageSizeVal()); + Filter searchFilter = new Filter(InstanceGroupJoinVO.class, "id", true, cmd.getStartIndex(), cmd.getPageSizeVal()); - SearchBuilder sb = _vmGroupDao.createSearchBuilder(); + SearchBuilder sb = _vmGroupJoinDao.createSearchBuilder(); + _accountMgr.buildACLViewSearchBuilder(sb, domainId, isRecursive, permittedAccounts, 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 - SearchBuilder domainSearch = _domainDao.createSearchBuilder(); - domainSearch.and("path", domainSearch.entity().getPath(), SearchCriteria.Op.LIKE); - sb.join("domainSearch", domainSearch, sb.entity().getDomainId(), domainSearch.entity().getId(), JoinBuilder.JoinType.INNER); - } - - 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); - } - } sb.and("id", sb.entity().getId(), SearchCriteria.Op.EQ); sb.and("name", sb.entity().getName(), SearchCriteria.Op.LIKE); - SearchCriteria sc = sb.create(); - 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.setJoinParameters("domainSearch", "path", domain.getPath() + "%"); - } else { - sc.setParameters("domainId", domainId); - } - } + SearchCriteria sc = sb.create(); + _accountMgr.buildACLViewSearchCriteria(sc, domainId, isRecursive, permittedAccounts, listProjectResourcesCriteria); if (keyword != null) { - SearchCriteria ssc = _vmGroupDao.createSearchCriteria(); + SearchCriteria ssc = _vmGroupJoinDao.createSearchCriteria(); ssc.addOr("name", SearchCriteria.Op.LIKE, "%" + keyword + "%"); + sc.addAnd("name", SearchCriteria.Op.SC, ssc); } + if (id != null) { sc.setParameters("id", id); } @@ -3275,8 +3254,7 @@ public class ManagementServerImpl implements ManagementServer { sc.setParameters("name", "%" + name + "%"); } - Pair, Integer> result = _vmGroupDao.searchAndCount(sc, searchFilter); - return new Pair, Integer>(result.first(), result.second()); + return _vmGroupJoinDao.searchAndCount(sc, searchFilter); } @Override diff --git a/server/src/com/cloud/tags/dao/ResourceTagJoinDaoImpl.java b/server/src/com/cloud/tags/dao/ResourceTagJoinDaoImpl.java index 59f8cad0eaa..3c2dafa03e4 100644 --- a/server/src/com/cloud/tags/dao/ResourceTagJoinDaoImpl.java +++ b/server/src/com/cloud/tags/dao/ResourceTagJoinDaoImpl.java @@ -92,7 +92,6 @@ public class ResourceTagJoinDaoImpl extends GenericDaoBase uvList = new ArrayList(); SearchCriteria sc = vrIdSearch.create(); sc.setParameters("id", vr.getId()); List vms = searchIncludingRemoved(sc, null, null, false); diff --git a/server/src/com/cloud/vm/dao/DomainRouterJoinDaoImpl.java b/server/src/com/cloud/vm/dao/DomainRouterJoinDaoImpl.java index f7a91466d5c..38839e3255c 100644 --- a/server/src/com/cloud/vm/dao/DomainRouterJoinDaoImpl.java +++ b/server/src/com/cloud/vm/dao/DomainRouterJoinDaoImpl.java @@ -194,17 +194,9 @@ public class DomainRouterJoinDaoImpl extends GenericDaoBase newDomainRouterView(VirtualRouter vr) { - List uvList = new ArrayList(); SearchCriteria sc = vrIdSearch.create(); sc.setParameters("id", vr.getId()); - List vms = searchIncludingRemoved(sc, null, null, false); - if (vms != null) { - for (DomainRouterJoinVO uvm : vms) { - uvList.add(uvm); - } - } - return uvList; - + return searchIncludingRemoved(sc, null, null, false); } } diff --git a/server/src/com/cloud/vm/dao/InstanceGroupJoinDao.java b/server/src/com/cloud/vm/dao/InstanceGroupJoinDao.java new file mode 100644 index 00000000000..64599be010e --- /dev/null +++ b/server/src/com/cloud/vm/dao/InstanceGroupJoinDao.java @@ -0,0 +1,35 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. +package com.cloud.vm.dao; + +import java.util.List; + +import org.apache.cloudstack.api.response.InstanceGroupResponse; +import org.apache.cloudstack.api.view.vo.InstanceGroupJoinVO; + +import com.cloud.utils.db.GenericDao; +import com.cloud.vm.InstanceGroup; + +public interface InstanceGroupJoinDao extends GenericDao { + + InstanceGroupResponse newInstanceGroupResponse(InstanceGroupJoinVO group); + + InstanceGroupJoinVO newInstanceGroupView(InstanceGroup group); + + List searchByIds(Long... ids); + +} diff --git a/server/src/com/cloud/vm/dao/InstanceGroupJoinDaoImpl.java b/server/src/com/cloud/vm/dao/InstanceGroupJoinDaoImpl.java new file mode 100644 index 00000000000..aa20b770dc3 --- /dev/null +++ b/server/src/com/cloud/vm/dao/InstanceGroupJoinDaoImpl.java @@ -0,0 +1,96 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. +package com.cloud.vm.dao; + +import java.util.List; + +import javax.ejb.Local; + +import org.apache.log4j.Logger; + +import com.cloud.api.ApiResponseHelper; +import org.apache.cloudstack.api.response.InstanceGroupResponse; +import org.apache.cloudstack.api.view.vo.InstanceGroupJoinVO; + +import com.cloud.utils.db.GenericDaoBase; +import com.cloud.utils.db.SearchBuilder; +import com.cloud.utils.db.SearchCriteria; +import com.cloud.vm.InstanceGroup; + + +@Local(value={InstanceGroupJoinDao.class}) +public class InstanceGroupJoinDaoImpl extends GenericDaoBase implements InstanceGroupJoinDao { + public static final Logger s_logger = Logger.getLogger(InstanceGroupJoinDaoImpl.class); + + private SearchBuilder vrSearch; + + private SearchBuilder vrIdSearch; + + + protected InstanceGroupJoinDaoImpl() { + + vrSearch = createSearchBuilder(); + vrSearch.and("idIN", vrSearch.entity().getId(), SearchCriteria.Op.IN); + vrSearch.done(); + + vrIdSearch = createSearchBuilder(); + vrIdSearch.and("id", vrIdSearch.entity().getId(), SearchCriteria.Op.EQ); + vrIdSearch.done(); + + this._count = "select count(distinct id) from instance_group_view WHERE "; + } + + + + @Override + public InstanceGroupResponse newInstanceGroupResponse(InstanceGroupJoinVO group) { + InstanceGroupResponse groupResponse = new InstanceGroupResponse(); + groupResponse.setId(group.getUuid()); + groupResponse.setName(group.getName()); + groupResponse.setCreated(group.getCreated()); + + ApiResponseHelper.populateOwner(groupResponse, group); + + groupResponse.setObjectName("instancegroup"); + return groupResponse; + } + + + + @Override + public InstanceGroupJoinVO newInstanceGroupView(InstanceGroup group) { + SearchCriteria sc = vrIdSearch.create(); + sc.setParameters("id", group.getId()); + List grps = searchIncludingRemoved(sc, null, null, false); + assert grps != null && grps.size() == 1 : "No vm group found for group id " + group.getId(); + return grps.get(0); + + } + + + + @Override + public List searchByIds(Long... ids) { + SearchCriteria sc = vrSearch.create(); + sc.setParameters("idIN", ids); + return searchIncludingRemoved(sc, null, null, false); + } + + + + +} diff --git a/setup/db/create-schema.sql b/setup/db/create-schema.sql index d0c49c80f62..406145ce2b3 100755 --- a/setup/db/create-schema.sql +++ b/setup/db/create-schema.sql @@ -2835,3 +2835,27 @@ inner join domain on event.domain_id=domain.id inner join user on event.user_id = user.id left join projects on projects.project_account_id = event.account_id left join event eve on event.start_id = eve.id; + +DROP VIEW IF EXISTS `cloud`.`instance_group_view`; +CREATE VIEW instance_group_view AS +select +instance_group.id, +instance_group.uuid, +instance_group.name, +instance_group.removed, +instance_group.created, +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 +from instance_group +inner join account on instance_group.account_id=account.id +inner join domain on account.domain_id=domain.id +left join projects on projects.project_account_id = instance_group.account_id; From 1cf8b86ce5734ebdfff39c141a6697607d2c09b6 Mon Sep 17 00:00:00 2001 From: Min Chen Date: Mon, 10 Dec 2012 15:10:21 -0800 Subject: [PATCH 087/421] api: Load InstanceGroupJoinDao to component Library Signed-off-by: Rohit Yadav --- server/src/com/cloud/configuration/DefaultComponentLibrary.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/server/src/com/cloud/configuration/DefaultComponentLibrary.java b/server/src/com/cloud/configuration/DefaultComponentLibrary.java index b3ef40a4112..5dc1c803692 100755 --- a/server/src/com/cloud/configuration/DefaultComponentLibrary.java +++ b/server/src/com/cloud/configuration/DefaultComponentLibrary.java @@ -202,6 +202,7 @@ 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.InstanceGroupJoinDaoImpl; import com.cloud.vm.dao.InstanceGroupVMMapDaoImpl; import com.cloud.vm.dao.NicDaoImpl; import com.cloud.vm.dao.SecondaryStorageVmDaoImpl; @@ -311,6 +312,7 @@ public class DefaultComponentLibrary extends ComponentLibraryBase implements Com addDao("NetworkOfferingDao", NetworkOfferingDaoImpl.class); addDao("NicDao", NicDaoImpl.class); addDao("InstanceGroupDao", InstanceGroupDaoImpl.class); + addDao("InstanceGroupJoinDao", InstanceGroupJoinDaoImpl.class); addDao("InstanceGroupVMMapDao", InstanceGroupVMMapDaoImpl.class); addDao("RemoteAccessVpnDao", RemoteAccessVpnDaoImpl.class); addDao("VpnUserDao", VpnUserDaoImpl.class); From 293665fafb0f450cb7e0c821975f13a656f02add Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Mon, 10 Dec 2012 15:22:37 -0800 Subject: [PATCH 088/421] api: Add license headers for APIAccessChecker and StaticRoleBasedAPIAccessChecker - Fix license headers - Fix tabs, trailing whitespaces Signed-off-by: Rohit Yadav --- api/src/com/cloud/acl/APIAccessChecker.java | 16 ++++ .../acl/StaticRoleBasedAPIAccessChecker.java | 82 +++++++++++-------- 2 files changed, 64 insertions(+), 34 deletions(-) diff --git a/api/src/com/cloud/acl/APIAccessChecker.java b/api/src/com/cloud/acl/APIAccessChecker.java index e54e036f2ec..4ccf49f49fb 100644 --- a/api/src/com/cloud/acl/APIAccessChecker.java +++ b/api/src/com/cloud/acl/APIAccessChecker.java @@ -1,3 +1,19 @@ +// 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.acl; import com.cloud.exception.PermissionDeniedException; diff --git a/server/src/com/cloud/acl/StaticRoleBasedAPIAccessChecker.java b/server/src/com/cloud/acl/StaticRoleBasedAPIAccessChecker.java index 73a26468a26..923eff8300c 100644 --- a/server/src/com/cloud/acl/StaticRoleBasedAPIAccessChecker.java +++ b/server/src/com/cloud/acl/StaticRoleBasedAPIAccessChecker.java @@ -1,3 +1,19 @@ +// 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.acl; import java.io.File; @@ -34,7 +50,7 @@ import com.cloud.utils.component.PluggableService; @Local(value=APIAccessChecker.class) public class StaticRoleBasedAPIAccessChecker extends AdapterBase implements APIAccessChecker { - protected static final Logger s_logger = Logger.getLogger(StaticRoleBasedAPIAccessChecker.class); + protected static final Logger s_logger = Logger.getLogger(StaticRoleBasedAPIAccessChecker.class); public static final short ADMIN_COMMAND = 1; public static final short DOMAIN_ADMIN_COMMAND = 4; public static final short RESOURCE_DOMAIN_ADMIN_COMMAND = 2; @@ -45,35 +61,35 @@ public class StaticRoleBasedAPIAccessChecker extends AdapterBase implements APIA private static List s_resourceDomainAdminCommands = null; private static List s_allCommands = null; private static List s_pluggableServiceCommands = null; - + protected @Inject AccountManager _accountMgr; static { - s_allCommands = new ArrayList(); - s_userCommands = new ArrayList(); + s_allCommands = new ArrayList(); + s_userCommands = new ArrayList(); s_resellerCommands = new ArrayList(); s_adminCommands = new ArrayList(); s_resourceDomainAdminCommands = new ArrayList(); s_pluggableServiceCommands = new ArrayList(); } - @Override - public boolean canAccessAPI(User user, String apiCommandName) - throws PermissionDeniedException{ - - boolean commandExists = s_allCommands.contains(apiCommandName); + @Override + public boolean canAccessAPI(User user, String apiCommandName) + throws PermissionDeniedException{ - if(commandExists && user != null){ - Long accountId = user.getAccountId(); - Account userAccount = _accountMgr.getAccount(accountId); - short accountType = userAccount.getType(); - return isCommandAvailableForAccount(accountType, apiCommandName); - } - - return commandExists; - } + boolean commandExists = s_allCommands.contains(apiCommandName); - private static boolean isCommandAvailableForAccount(short accountType, String commandName) { + if(commandExists && user != null){ + Long accountId = user.getAccountId(); + Account userAccount = _accountMgr.getAccount(accountId); + short accountType = userAccount.getType(); + return isCommandAvailableForAccount(accountType, apiCommandName); + } + + return commandExists; + } + + private static boolean isCommandAvailableForAccount(short accountType, String commandName) { boolean isCommandAvailable = false; switch (accountType) { case Account.ACCOUNT_TYPE_ADMIN: @@ -92,24 +108,23 @@ public class StaticRoleBasedAPIAccessChecker extends AdapterBase implements APIA return isCommandAvailable; } - @Override public boolean configure(String name, Map params) throws ConfigurationException { - super.configure(name, params); - - //load command.properties to build the static map per role. + super.configure(name, params); + + //load command.properties to build the static map per role. ComponentLocator locator = ComponentLocator.getLocator(ManagementServer.Name); String[] apiConfig = ((ManagementServer) ComponentLocator.getComponent(ManagementServer.Name)).getApiConfig(); processConfigFiles(apiConfig, false); - + // get commands for all pluggable services String[] pluggableServicesApiConfigs = getPluggableServicesApiConfigs(); processConfigFiles(pluggableServicesApiConfigs, true); - - return true; + + return true; } - + private String[] getPluggableServicesApiConfigs() { List pluggableServicesApiConfigs = new ArrayList(); @@ -121,9 +136,9 @@ public class StaticRoleBasedAPIAccessChecker extends AdapterBase implements APIA } return pluggableServicesApiConfigs.toArray(new String[0]); } - + private void processConfigFiles(String[] apiConfig, boolean pluggableServicesConfig) { - try { + try { Properties preProcessedCommands = new Properties(); if (apiConfig != null) { for (String configFile : apiConfig) { @@ -146,11 +161,11 @@ public class StaticRoleBasedAPIAccessChecker extends AdapterBase implements APIA String preProcessedCommand = preProcessedCommands.getProperty((String) key); String[] commandParts = preProcessedCommand.split(";"); - + if (pluggableServicesConfig) { s_pluggableServiceCommands.add(commandParts[0]); } - + if (commandParts.length > 1) { try { short cmdPermissions = Short.parseShort(commandParts[1]); @@ -178,11 +193,10 @@ public class StaticRoleBasedAPIAccessChecker extends AdapterBase implements APIA } } catch (FileNotFoundException fnfex) { - s_logger.error("Unable to find properites file", fnfex); + s_logger.error("Unable to find properties file", fnfex); } catch (IOException ioex) { s_logger.error("Exception loading properties file", ioex); } } - - + } From c8923c9625619f379b42d9888d7b7d6dfe56c760 Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Mon, 10 Dec 2012 16:18:35 -0800 Subject: [PATCH 089/421] api: Fix license header for acl/Role.java Signed-off-by: Rohit Yadav --- api/src/com/cloud/acl/Role.java | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/api/src/com/cloud/acl/Role.java b/api/src/com/cloud/acl/Role.java index 0ab69e90db5..801606036da 100644 --- a/api/src/com/cloud/acl/Role.java +++ b/api/src/com/cloud/acl/Role.java @@ -1,3 +1,19 @@ +// 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.acl; //metadata - consists of default dynamic roles in CS + any custom roles added by user @@ -13,8 +29,5 @@ public interface Role { public static final short CHILD_DOMAIN_USER = 7; public long getId(); - public short getRoleType(); - - } From 8fbbc7646648c86da56239d9cfee8633edaf2484 Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Mon, 10 Dec 2012 16:19:40 -0800 Subject: [PATCH 090/421] api: minor fixes in ApiServlet - Reusing local variable for string splitting/processing - Fix comments - Fix indentations Signed-off-by: Rohit Yadav --- server/src/com/cloud/api/ApiServlet.java | 30 ++++++++++-------------- 1 file changed, 13 insertions(+), 17 deletions(-) diff --git a/server/src/com/cloud/api/ApiServlet.java b/server/src/com/cloud/api/ApiServlet.java index 4c2739cb323..7e1f2c39bf6 100755 --- a/server/src/com/cloud/api/ApiServlet.java +++ b/server/src/com/cloud/api/ApiServlet.java @@ -86,8 +86,8 @@ public class ApiServlet extends HttpServlet { for (String param : paramsInQueryString) { String[] paramTokens = param.split("="); if (paramTokens != null && paramTokens.length == 2) { - String name = param.split("=")[0]; - String value = param.split("=")[1]; + String name = paramTokens[0]; + String value = paramTokens[1]; try { name = URLDecoder.decode(name, "UTF-8"); @@ -99,7 +99,7 @@ public class ApiServlet extends HttpServlet { } params.put(name, new String[] { value }); } else { - s_logger.debug("Invalid paramemter in URL found. param: " + param); + s_logger.debug("Invalid parameter in URL found. param: " + param); } } } @@ -115,13 +115,10 @@ public class ApiServlet extends HttpServlet { Map params = new HashMap(); params.putAll(req.getParameterMap()); - // // For HTTP GET requests, it seems that HttpServletRequest.getParameterMap() actually tries // to unwrap URL encoded content from ISO-9959-1. - // - // After failed in using setCharacterEncoding() to control it, end up with following hacking : for all GET requests, - // we will override it with our-own way of UTF-8 based URL decoding. - // + // After failed in using setCharacterEncoding() to control it, end up with following hacking: + // for all GET requests, we will override it with our-own way of UTF-8 based URL decoding. utf8Fixup(req, params); // logging the request start and end in management log for easy debugging @@ -265,7 +262,8 @@ public class ApiServlet extends HttpServlet { } // Do a sanity check here to make sure the user hasn't already been deleted - if ((userId != null) && (account != null) && (accountObj != null) && _apiServer.verifyUser(userId)) { + if ((userId != null) && (account != null) + && (accountObj != null) && _apiServer.verifyUser(userId)) { String[] command = (String[]) params.get("command"); if (command == null) { s_logger.info("missing command, ignoring request..."); @@ -276,9 +274,8 @@ public class ApiServlet extends HttpServlet { } UserContext.updateContext(userId, (Account) accountObj, session.getId()); } else { - // Invalidate the session to ensure we won't allow a request across management server restarts if the userId - // was serialized to the - // stored session + // Invalidate the session to ensure we won't allow a request across management server + // restarts if the userId was serialized to the stored session try { session.invalidate(); } catch (IllegalStateException ise) { @@ -389,12 +386,11 @@ public class ApiServlet extends HttpServlet { StringBuffer sb = new StringBuffer(); int inactiveInterval = session.getMaxInactiveInterval(); - String user_UUID = (String)session.getAttribute("user_UUID"); - session.removeAttribute("user_UUID"); + String user_UUID = (String)session.getAttribute("user_UUID"); + session.removeAttribute("user_UUID"); - String domain_UUID = (String)session.getAttribute("domain_UUID"); - session.removeAttribute("domain_UUID"); - + String domain_UUID = (String)session.getAttribute("domain_UUID"); + session.removeAttribute("domain_UUID"); if (BaseCmd.RESPONSE_TYPE_JSON.equalsIgnoreCase(responseType)) { sb.append("{ \"loginresponse\" : { "); From 151a7643ced3a022d78eab0f6a4cf34b19928a7a Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Mon, 10 Dec 2012 16:27:33 -0800 Subject: [PATCH 091/421] api: Don't silently fail apiserver instance initialization - ApiServer instance assumes cloudstartup servlet will initialize it - Check and log if initialization fails Signed-off-by: Rohit Yadav --- server/src/com/cloud/api/ApiServer.java | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/server/src/com/cloud/api/ApiServer.java b/server/src/com/cloud/api/ApiServer.java index bb14d4c5dd0..693ab1e91c5 100755 --- a/server/src/com/cloud/api/ApiServer.java +++ b/server/src/com/cloud/api/ApiServer.java @@ -121,7 +121,6 @@ import com.cloud.utils.exception.CSExceptionErrorCode; import com.cloud.uuididentity.dao.IdentityDao; import com.cloud.acl.APIAccessChecker; - public class ApiServer implements HttpRequestHandler { private static final Logger s_logger = Logger.getLogger(ApiServer.class.getName()); private static final Logger s_accessLogger = Logger.getLogger("apiserver." + ApiServer.class.getName()); @@ -143,7 +142,6 @@ public class ApiServer implements HttpRequestHandler { private static ExecutorService _executor = new ThreadPoolExecutor(10, 150, 60, TimeUnit.SECONDS, new LinkedBlockingQueue(), new NamedThreadFactory("ApiServer")); - private ApiServer() { } @@ -155,11 +153,14 @@ public class ApiServer implements HttpRequestHandler { } public static ApiServer getInstance() { - // initApiServer(); + // Assumption: CloudStartupServlet would initialize ApiServer + // initApiServer(null); + if (s_instance == null) { + s_logger.fatal("ApiServer instance failed to initialize"); + } return s_instance; } - public void init(String[] apiConfig) { BaseCmd.setComponents(new ApiResponseHelper()); BaseListCmd.configure(); @@ -908,7 +909,6 @@ public class ApiServer implements HttpRequestHandler { public String getSerializedApiError(int errorCode, String errorText, Map apiCommandParams, String responseType, Exception ex) { String responseName = null; String cmdClassName = null; - String responseText = null; try { From 503082a49e0218bac937687164fe4151d774c52e Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Mon, 10 Dec 2012 17:27:11 -0800 Subject: [PATCH 092/421] api: Add ACL adapter for components.xml Signed-off-by: Rohit Yadav --- client/tomcatconf/components.xml.in | 3 +++ 1 file changed, 3 insertions(+) diff --git a/client/tomcatconf/components.xml.in b/client/tomcatconf/components.xml.in index 5957b61c0fb..990bf6a2180 100755 --- a/client/tomcatconf/components.xml.in +++ b/client/tomcatconf/components.xml.in @@ -53,6 +53,9 @@ under the License. true + + + From 214668711229e8b2c79e8373604be488c69f7552 Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Mon, 10 Dec 2012 17:28:06 -0800 Subject: [PATCH 093/421] api: initialize vars in constructor of StaticRoleBasedAPIAccessChecker Signed-off-by: Rohit Yadav --- server/src/com/cloud/acl/StaticRoleBasedAPIAccessChecker.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/server/src/com/cloud/acl/StaticRoleBasedAPIAccessChecker.java b/server/src/com/cloud/acl/StaticRoleBasedAPIAccessChecker.java index 923eff8300c..cff098a3a52 100644 --- a/server/src/com/cloud/acl/StaticRoleBasedAPIAccessChecker.java +++ b/server/src/com/cloud/acl/StaticRoleBasedAPIAccessChecker.java @@ -64,7 +64,8 @@ public class StaticRoleBasedAPIAccessChecker extends AdapterBase implements APIA protected @Inject AccountManager _accountMgr; - static { + protected StaticRoleBasedAPIAccessChecker() { + super(); s_allCommands = new ArrayList(); s_userCommands = new ArrayList(); s_resellerCommands = new ArrayList(); From 8c4096dc5946c6d91a6445300278cb05a6a0f200 Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Mon, 10 Dec 2012 17:38:44 -0800 Subject: [PATCH 094/421] api: Have apiserver injected by component locator - Instantiate apiserver by injection, so all its entities are also created and injected - Make the constructor protected Thanks to Alex for helping out on this one. Signed-off-by: Rohit Yadav --- server/src/com/cloud/api/ApiServer.java | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/server/src/com/cloud/api/ApiServer.java b/server/src/com/cloud/api/ApiServer.java index 693ab1e91c5..8a41966ff67 100755 --- a/server/src/com/cloud/api/ApiServer.java +++ b/server/src/com/cloud/api/ApiServer.java @@ -142,12 +142,16 @@ public class ApiServer implements HttpRequestHandler { private static ExecutorService _executor = new ThreadPoolExecutor(10, 150, 60, TimeUnit.SECONDS, new LinkedBlockingQueue(), new NamedThreadFactory("ApiServer")); - private ApiServer() { + protected ApiServer() { + super(); } public static void initApiServer(String[] apiConfig) { if (s_instance == null) { - s_instance = new ApiServer(); + //Injecting will create ApiServer object with all its + //vars injected as well, no need to do the following: + //s_instance = new ApiServer(); + s_instance = ComponentLocator.inject(ApiServer.class); s_instance.init(apiConfig); } } From c83323fea77ebbd87adf0f793362f4ba915a007b Mon Sep 17 00:00:00 2001 From: Min Chen Date: Mon, 10 Dec 2012 17:39:25 -0800 Subject: [PATCH 095/421] api: Refactoring ListUsersCmd and UserResponse. Signed-off-by: Rohit Yadav --- api/src/com/cloud/user/AccountService.java | 4 +- .../cloudstack/api/ResponseGenerator.java | 3 + .../api/command/admin/user/ListUsersCmd.java | 10 +- .../cloudstack/api/response/UserResponse.java | 31 +- .../api/view/vo/UserAccountJoinVO.java | 302 ++++++++++++++++++ server/src/com/cloud/api/ApiDBUtils.java | 17 + .../src/com/cloud/api/ApiResponseHelper.java | 54 +--- .../DefaultComponentLibrary.java | 2 + .../com/cloud/user/AccountManagerImpl.java | 75 ++--- .../cloud/user/dao/UserAccountJoinDao.java | 38 +++ .../user/dao/UserAccountJoinDaoImpl.java | 122 +++++++ .../cloud/user/MockAccountManagerImpl.java | 8 +- setup/db/create-schema.sql | 31 ++ 13 files changed, 597 insertions(+), 100 deletions(-) create mode 100644 api/src/org/apache/cloudstack/api/view/vo/UserAccountJoinVO.java create mode 100644 server/src/com/cloud/user/dao/UserAccountJoinDao.java create mode 100644 server/src/com/cloud/user/dao/UserAccountJoinDaoImpl.java diff --git a/api/src/com/cloud/user/AccountService.java b/api/src/com/cloud/user/AccountService.java index e9558fc283e..10d666c38f1 100755 --- a/api/src/com/cloud/user/AccountService.java +++ b/api/src/com/cloud/user/AccountService.java @@ -27,6 +27,8 @@ import org.apache.cloudstack.api.command.admin.user.RegisterCmd; import org.apache.cloudstack.api.command.admin.user.UpdateUserCmd; import org.apache.cloudstack.api.command.admin.account.UpdateAccountCmd; import org.apache.cloudstack.api.command.user.account.ListAccountsCmd; +import org.apache.cloudstack.api.view.vo.UserAccountJoinVO; + import com.cloud.domain.Domain; import com.cloud.exception.ConcurrentOperationException; import com.cloud.exception.PermissionDeniedException; @@ -193,7 +195,7 @@ public interface AccountService { Pair, Integer> searchForAccounts(ListAccountsCmd cmd); - Pair, Integer> searchForUsers(ListUsersCmd cmd) + Pair, Integer> searchForUsers(ListUsersCmd cmd) throws PermissionDeniedException; UserAccount getUserByApiKey(String apiKey); diff --git a/api/src/org/apache/cloudstack/api/ResponseGenerator.java b/api/src/org/apache/cloudstack/api/ResponseGenerator.java index 2ccbec54db6..acb548ab0a7 100644 --- a/api/src/org/apache/cloudstack/api/ResponseGenerator.java +++ b/api/src/org/apache/cloudstack/api/ResponseGenerator.java @@ -155,6 +155,7 @@ import org.apache.cloudstack.api.view.vo.EventJoinVO; import org.apache.cloudstack.api.view.vo.InstanceGroupJoinVO; import org.apache.cloudstack.api.view.vo.ResourceTagJoinVO; import org.apache.cloudstack.api.view.vo.SecurityGroupJoinVO; +import org.apache.cloudstack.api.view.vo.UserAccountJoinVO; import org.apache.cloudstack.api.view.vo.UserVmJoinVO; import com.cloud.vm.VirtualMachine; @@ -280,6 +281,8 @@ public interface ResponseGenerator { UserResponse createUserResponse(User user); + List createUserResponse(UserAccountJoinVO... users); + AccountResponse createUserAccountResponse(UserAccount user); Long getSecurityGroupId(String groupName, long accountId); diff --git a/api/src/org/apache/cloudstack/api/command/admin/user/ListUsersCmd.java b/api/src/org/apache/cloudstack/api/command/admin/user/ListUsersCmd.java index c7f0cbbf321..cb480d266ad 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/user/ListUsersCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/user/ListUsersCmd.java @@ -28,6 +28,8 @@ import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.response.ListResponse; import org.apache.cloudstack.api.response.UserResponse; +import org.apache.cloudstack.api.view.vo.UserAccountJoinVO; + import com.cloud.user.UserAccount; import com.cloud.utils.Pair; @@ -86,13 +88,9 @@ public class ListUsersCmd extends BaseListAccountResourcesCmd { @Override public void execute(){ - Pair, Integer> result = _accountService.searchForUsers(this); + Pair, Integer> result = _accountService.searchForUsers(this); ListResponse response = new ListResponse(); - List userResponses = new ArrayList(); - for (UserAccount user : result.first()) { - UserResponse userResponse = _responseGenerator.createUserResponse(user); - userResponses.add(userResponse); - } + List userResponses = _responseGenerator.createUserResponse(result.first().toArray(new UserAccountJoinVO[result.first().size()])); response.setResponses(userResponses, result.second()); response.setResponseName(getCommandName()); this.setResponseObject(response); diff --git a/api/src/org/apache/cloudstack/api/response/UserResponse.java b/api/src/org/apache/cloudstack/api/response/UserResponse.java index 2868be4bbfd..bb161264d12 100644 --- a/api/src/org/apache/cloudstack/api/response/UserResponse.java +++ b/api/src/org/apache/cloudstack/api/response/UserResponse.java @@ -18,14 +18,13 @@ package org.apache.cloudstack.api.response; import java.util.Date; -import com.cloud.utils.IdentityProxy; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; import org.apache.cloudstack.api.BaseResponse; public class UserResponse extends BaseResponse { @SerializedName("id") @Param(description="the user ID") - private IdentityProxy id = new IdentityProxy("user"); + private String id; @SerializedName("username") @Param(description="the user name") private String username; @@ -52,7 +51,7 @@ public class UserResponse extends BaseResponse { private Short accountType; @SerializedName("domainid") @Param(description="the domain ID of the user") - private IdentityProxy domainId = new IdentityProxy("domain"); + private String domainId; @SerializedName("domain") @Param(description="the domain name of the user") private String domainName; @@ -67,15 +66,15 @@ public class UserResponse extends BaseResponse { private String secretKey; @SerializedName("accountid") @Param(description="the account ID of the user") - private IdentityProxy accountId = new IdentityProxy("account"); + private String accountId; - 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 String getUsername() { @@ -142,12 +141,12 @@ public class UserResponse extends BaseResponse { this.accountType = accountType; } - public Long getDomainId() { - return domainId.getValue(); + public String getDomainId() { + return domainId; } - public void setDomainId(Long domainId) { - this.domainId.setValue(domainId); + public void setDomainId(String domainId) { + this.domainId = domainId; } public String getDomainName() { @@ -181,11 +180,11 @@ public class UserResponse extends BaseResponse { public void setSecretKey(String secretKey) { this.secretKey = secretKey; } - public Long getAccountId() { - return accountId.getValue(); + public String getAccountId() { + return accountId; } - public void setAccountId(Long accountId) { - this.accountId.setValue(accountId); + public void setAccountId(String accountId) { + this.accountId = accountId; } } diff --git a/api/src/org/apache/cloudstack/api/view/vo/UserAccountJoinVO.java b/api/src/org/apache/cloudstack/api/view/vo/UserAccountJoinVO.java new file mode 100644 index 00000000000..2cecd2cebfa --- /dev/null +++ b/api/src/org/apache/cloudstack/api/view/vo/UserAccountJoinVO.java @@ -0,0 +1,302 @@ +// 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 org.apache.cloudstack.api.view.vo; + +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.utils.db.Encrypt; +import com.cloud.utils.db.GenericDao; +import com.cloud.event.Event.State; + +@Entity +@Table(name="user_view") +public class UserAccountJoinVO extends BaseViewVO { + + @Column(name="uuid") + private String uuid; + + @Column(name="username") + private String username = null; + + @Column(name="password") + private String password = null; + + @Column(name="firstname") + private String firstname = null; + + @Column(name="lastname") + private String lastname = null; + + @Column(name="email") + private String email = null; + + @Column(name="state") + private String state; + + @Column(name="api_key") + private String apiKey = null; + + @Encrypt + @Column(name="secret_key") + private String secretKey = null; + + @Column(name=GenericDao.CREATED_COLUMN) + private Date created; + + @Column(name=GenericDao.REMOVED_COLUMN) + private Date removed; + + @Column(name="timezone") + private String timezone; + + @Column(name="registration_token") + private String registrationToken = null; + + @Column(name="is_registered") + boolean registered; + + @Column (name="incorrect_login_attempts") + int loginAttempts; + + + @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; + + + public UserAccountJoinVO() { + } + + public String getUuid() { + return uuid; + } + + public void setUuid(String uuid) { + this.uuid = uuid; + } + + + public long getAccountId() { + return accountId; + } + + public void setAccountId(long accountId) { + this.accountId = accountId; + } + + public String getAccountUuid() { + return accountUuid; + } + + public void setAccountUuid(String accountUuid) { + this.accountUuid = accountUuid; + } + + public String getAccountName() { + return accountName; + } + + public void setAccountName(String accountName) { + this.accountName = accountName; + } + + + public short getAccountType() { + return accountType; + } + + public void setAccountType(short accountType) { + this.accountType = accountType; + } + + + public long getDomainId() { + return domainId; + } + + public void setDomainId(long domainId) { + this.domainId = domainId; + } + + + public String getDomainUuid() { + return domainUuid; + } + + public void setDomainUuid(String domainUuid) { + this.domainUuid = domainUuid; + } + + + public String getDomainName() { + return domainName; + } + + public void setDomainName(String domainName) { + this.domainName = domainName; + } + + + public String getDomainPath() { + return domainPath; + } + + public void setDomainPath(String domainPath) { + this.domainPath = domainPath; + } + + public String getUsername() { + return username; + } + + public void setUsername(String username) { + this.username = username; + } + + public String getPassword() { + return password; + } + + public void setPassword(String password) { + this.password = password; + } + + public String getFirstname() { + return firstname; + } + + public void setFirstname(String firstname) { + this.firstname = firstname; + } + + public String getLastname() { + return lastname; + } + + public void setLastname(String lastname) { + this.lastname = lastname; + } + + public String getEmail() { + return email; + } + + public void setEmail(String email) { + this.email = email; + } + + public String getState() { + return state; + } + + public void setState(String state) { + this.state = state; + } + + public String getApiKey() { + return apiKey; + } + + public void setApiKey(String apiKey) { + this.apiKey = apiKey; + } + + public String getSecretKey() { + return secretKey; + } + + public void setSecretKey(String secretKey) { + this.secretKey = secretKey; + } + + 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 getTimezone() { + return timezone; + } + + public void setTimezone(String timezone) { + this.timezone = timezone; + } + + public String getRegistrationToken() { + return registrationToken; + } + + public void setRegistrationToken(String registrationToken) { + this.registrationToken = registrationToken; + } + + public boolean isRegistered() { + return registered; + } + + public void setRegistered(boolean registered) { + this.registered = registered; + } + + public int getLoginAttempts() { + return loginAttempts; + } + + public void setLoginAttempts(int loginAttempts) { + this.loginAttempts = loginAttempts; + } + + + +} diff --git a/server/src/com/cloud/api/ApiDBUtils.java b/server/src/com/cloud/api/ApiDBUtils.java index f3ee0eda7fb..3cebe462c55 100755 --- a/server/src/com/cloud/api/ApiDBUtils.java +++ b/server/src/com/cloud/api/ApiDBUtils.java @@ -28,12 +28,14 @@ import org.apache.cloudstack.api.response.EventResponse; import org.apache.cloudstack.api.response.InstanceGroupResponse; import org.apache.cloudstack.api.response.ResourceTagResponse; import org.apache.cloudstack.api.response.SecurityGroupResponse; +import org.apache.cloudstack.api.response.UserResponse; import org.apache.cloudstack.api.response.UserVmResponse; import org.apache.cloudstack.api.view.vo.DomainRouterJoinVO; import org.apache.cloudstack.api.view.vo.EventJoinVO; import org.apache.cloudstack.api.view.vo.InstanceGroupJoinVO; import org.apache.cloudstack.api.view.vo.ResourceTagJoinVO; import org.apache.cloudstack.api.view.vo.SecurityGroupJoinVO; +import org.apache.cloudstack.api.view.vo.UserAccountJoinVO; import org.apache.cloudstack.api.view.vo.UserVmJoinVO; import com.cloud.async.AsyncJobManager; import com.cloud.async.AsyncJobVO; @@ -156,10 +158,12 @@ import com.cloud.user.AccountVO; import com.cloud.user.ResourceLimitService; import com.cloud.user.SSHKeyPairVO; import com.cloud.user.User; +import com.cloud.user.UserAccount; import com.cloud.user.UserStatisticsVO; import com.cloud.user.UserVO; import com.cloud.user.dao.AccountDao; import com.cloud.user.dao.SSHKeyPairDao; +import com.cloud.user.dao.UserAccountJoinDao; import com.cloud.user.dao.UserDao; import com.cloud.user.dao.UserStatisticsDao; import com.cloud.uservm.UserVm; @@ -256,6 +260,7 @@ public class ApiDBUtils { private static ResourceTagJoinDao _tagJoinDao; private static EventJoinDao _eventJoinDao; private static InstanceGroupJoinDao _vmGroupJoinDao; + private static UserAccountJoinDao _userAccountJoinDao; static { _ms = (ManagementServer) ComponentLocator.getComponent(ManagementServer.Name); @@ -996,4 +1001,16 @@ public class ApiDBUtils { public static InstanceGroupJoinVO newInstanceGroupView(InstanceGroup e){ return _vmGroupJoinDao.newInstanceGroupView(e); } + + public static UserResponse newUserResponse(UserAccountJoinVO usr) { + return _userAccountJoinDao.newUserResponse(usr); + } + + public static UserAccountJoinVO newUserView(User usr){ + return _userAccountJoinDao.newUserView(usr); + } + + public static UserAccountJoinVO newUserView(UserAccount usr){ + return _userAccountJoinDao.newUserView(usr); + } } diff --git a/server/src/com/cloud/api/ApiResponseHelper.java b/server/src/com/cloud/api/ApiResponseHelper.java index 04a931447b3..c8c78d027fe 100755 --- a/server/src/com/cloud/api/ApiResponseHelper.java +++ b/server/src/com/cloud/api/ApiResponseHelper.java @@ -118,6 +118,7 @@ import org.apache.cloudstack.api.view.vo.EventJoinVO; import org.apache.cloudstack.api.view.vo.InstanceGroupJoinVO; import org.apache.cloudstack.api.view.vo.ResourceTagJoinVO; import org.apache.cloudstack.api.view.vo.SecurityGroupJoinVO; +import org.apache.cloudstack.api.view.vo.UserAccountJoinVO; import org.apache.cloudstack.api.view.vo.UserVmJoinVO; import com.cloud.async.AsyncJob; import com.cloud.capacity.Capacity; @@ -238,27 +239,21 @@ public class ApiResponseHelper implements ResponseGenerator { @Override public UserResponse createUserResponse(User user) { - UserResponse userResponse = new UserResponse(); - Account account = ApiDBUtils.findAccountById(user.getAccountId()); - userResponse.setAccountName(account.getAccountName()); - userResponse.setAccountType(account.getType()); - userResponse.setCreated(user.getCreated()); - userResponse.setDomainId(account.getDomainId()); - userResponse.setDomainName(ApiDBUtils.findDomainById(account.getDomainId()).getName()); - userResponse.setEmail(user.getEmail()); - userResponse.setFirstname(user.getFirstname()); - userResponse.setId(user.getId()); - userResponse.setLastname(user.getLastname()); - userResponse.setState(user.getState().toString()); - userResponse.setTimezone(user.getTimezone()); - userResponse.setUsername(user.getUsername()); - userResponse.setApiKey(user.getApiKey()); - userResponse.setSecretKey(user.getSecretKey()); - userResponse.setObjectName("user"); - - return userResponse; + UserAccountJoinVO vUser = ApiDBUtils.newUserView(user); + return ApiDBUtils.newUserResponse(vUser); } + + @Override + public List createUserResponse(UserAccountJoinVO... users) { + List respList = new ArrayList(); + for (UserAccountJoinVO vt : users){ + respList.add(ApiDBUtils.newUserResponse(vt)); + } + return respList; + } + + // this method is used for response generation via createAccount (which creates an account + user) @Override public AccountResponse createUserAccountResponse(UserAccount user) { @@ -417,25 +412,8 @@ public class ApiResponseHelper implements ResponseGenerator { @Override public UserResponse createUserResponse(UserAccount user) { - UserResponse userResponse = new UserResponse(); - userResponse.setAccountName(user.getAccountName()); - userResponse.setAccountType(user.getType()); - userResponse.setCreated(user.getCreated()); - userResponse.setDomainId(user.getDomainId()); - userResponse.setDomainName(ApiDBUtils.findDomainById(user.getDomainId()).getName()); - userResponse.setEmail(user.getEmail()); - userResponse.setFirstname(user.getFirstname()); - userResponse.setId(user.getId()); - userResponse.setLastname(user.getLastname()); - userResponse.setState(user.getState()); - userResponse.setTimezone(user.getTimezone()); - userResponse.setUsername(user.getUsername()); - userResponse.setApiKey(user.getApiKey()); - userResponse.setSecretKey(user.getSecretKey()); - userResponse.setAccountId((user.getAccountId())); - userResponse.setObjectName("user"); - - return userResponse; + UserAccountJoinVO vUser = ApiDBUtils.newUserView(user); + return ApiDBUtils.newUserResponse(vUser); } @Override diff --git a/server/src/com/cloud/configuration/DefaultComponentLibrary.java b/server/src/com/cloud/configuration/DefaultComponentLibrary.java index 5dc1c803692..c1703bc3729 100755 --- a/server/src/com/cloud/configuration/DefaultComponentLibrary.java +++ b/server/src/com/cloud/configuration/DefaultComponentLibrary.java @@ -183,6 +183,7 @@ import com.cloud.user.DomainManagerImpl; import com.cloud.user.dao.AccountDaoImpl; import com.cloud.user.dao.SSHKeyPairDaoImpl; import com.cloud.user.dao.UserAccountDaoImpl; +import com.cloud.user.dao.UserAccountJoinDaoImpl; import com.cloud.user.dao.UserDaoImpl; import com.cloud.user.dao.UserStatisticsDaoImpl; import com.cloud.user.dao.UserStatsLogDaoImpl; @@ -227,6 +228,7 @@ public class DefaultComponentLibrary extends ComponentLibraryBase implements Com addDao("SecurityGroupJoinDao", SecurityGroupJoinDaoImpl.class); addDao("ResourceTagJoinDao", ResourceTagJoinDaoImpl.class); addDao("EventJoinDao", EventJoinDaoImpl.class); + addDao("UserAccountJoinDao", UserAccountJoinDaoImpl.class); ComponentInfo> info = addDao("ServiceOfferingDao", ServiceOfferingDaoImpl.class); info.addParameter("cache.size", "50"); info.addParameter("cache.time.to.live", "600"); diff --git a/server/src/com/cloud/user/AccountManagerImpl.java b/server/src/com/cloud/user/AccountManagerImpl.java index c0cbe474636..e1b806dc603 100755 --- a/server/src/com/cloud/user/AccountManagerImpl.java +++ b/server/src/com/cloud/user/AccountManagerImpl.java @@ -5,7 +5,7 @@ // 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, @@ -44,6 +44,8 @@ import org.apache.log4j.Logger; import com.cloud.acl.ControlledEntity; import org.apache.cloudstack.api.view.vo.ControlledViewEntity; +import org.apache.cloudstack.api.view.vo.UserAccountJoinVO; + import com.cloud.acl.SecurityChecker; import com.cloud.acl.SecurityChecker.AccessType; import com.cloud.api.ApiDBUtils; @@ -108,6 +110,7 @@ import com.cloud.template.VirtualMachineTemplate; import com.cloud.user.Account.State; import com.cloud.user.dao.AccountDao; import com.cloud.user.dao.UserAccountDao; +import com.cloud.user.dao.UserAccountJoinDao; import com.cloud.user.dao.UserDao; import com.cloud.utils.NumbersUtil; import com.cloud.utils.Pair; @@ -157,6 +160,8 @@ public class AccountManagerImpl implements AccountManager, AccountService, Manag @Inject private UserAccountDao _userAccountDao; @Inject + private UserAccountJoinDao _userAccountJoinDao; + @Inject private VolumeDao _volumeDao; @Inject private UserVmDao _userVmDao; @@ -293,7 +298,7 @@ public class AccountManagerImpl implements AccountManager, AccountService, Manag @Override public boolean isAdmin(short accountType) { - return ((accountType == Account.ACCOUNT_TYPE_ADMIN) || (accountType == Account.ACCOUNT_TYPE_RESOURCE_DOMAIN_ADMIN) + return ((accountType == Account.ACCOUNT_TYPE_ADMIN) || (accountType == Account.ACCOUNT_TYPE_RESOURCE_DOMAIN_ADMIN) || (accountType == Account.ACCOUNT_TYPE_DOMAIN_ADMIN) || (accountType == Account.ACCOUNT_TYPE_READ_ONLY_ADMIN)); } @@ -491,7 +496,7 @@ public class AccountManagerImpl implements AccountManager, AccountService, Manag @Override public boolean deleteAccount(AccountVO account, long callerUserId, Account caller) { long accountId = account.getId(); - + //delete the account record if (!_accountDao.remove(accountId)) { s_logger.error("Unable to delete account " + accountId); @@ -509,7 +514,7 @@ public class AccountManagerImpl implements AccountManager, AccountService, Manag public boolean cleanupAccount(AccountVO account, long callerUserId, Account caller) { long accountId = account.getId(); boolean accountCleanupNeeded = false; - + try { //cleanup the users from the account List users = _userDao.listByAccount(accountId); @@ -519,10 +524,10 @@ public class AccountManagerImpl implements AccountManager, AccountService, Manag accountCleanupNeeded = true; } } - + //delete the account from project accounts _projectAccountDao.removeAccountFromProjects(accountId); - + // delete all vm groups belonging to accont List groups = _vmGroupDao.listByAccountId(accountId); for (InstanceGroupVO group : groups) { @@ -600,7 +605,7 @@ public class AccountManagerImpl implements AccountManager, AccountService, Manag s_logger.warn("Failed to cleanup remote access vpn resources as a part of account id=" + accountId + " cleanup due to Exception: ", ex); accountCleanupNeeded = true; } - + // Cleanup security groups int numRemoved = _securityGroupDao.removeByAccountId(accountId); s_logger.info("deleteAccount: Deleted " + numRemoved + " network groups for account " + accountId); @@ -623,7 +628,7 @@ public class AccountManagerImpl implements AccountManager, AccountService, Manag } } } - + //Delete all VPCs boolean vpcsDeleted = true; s_logger.debug("Deleting vpcs for account " + account.getId()); @@ -774,7 +779,7 @@ public class AccountManagerImpl implements AccountManager, AccountService, Manag if (userName.isEmpty()) { throw new InvalidParameterValueException("Username is empty"); } - + if (firstName.isEmpty()) { throw new InvalidParameterValueException("Firstname is empty"); } @@ -846,7 +851,7 @@ public class AccountManagerImpl implements AccountManager, AccountService, Manag if (account == null || account.getType() == Account.ACCOUNT_TYPE_PROJECT) { throw new InvalidParameterValueException("Unable to find account " + accountName + " in domain id=" + domainId + " to create user"); } - + if (account.getId() == Account.ACCOUNT_ID_SYSTEM) { throw new PermissionDeniedException("Account id : " + account.getId() + " is a system account, can't add a user to it"); } @@ -903,21 +908,21 @@ public class AccountManagerImpl implements AccountManager, AccountService, Manag if (firstName.isEmpty()) { throw new InvalidParameterValueException("Firstname is empty"); } - + user.setFirstname(firstName); } if (lastName != null) { if (lastName.isEmpty()) { throw new InvalidParameterValueException("Lastname is empty"); } - + user.setLastname(lastName); } if (userName != null) { if (userName.isEmpty()) { throw new InvalidParameterValueException("Username is empty"); } - + // don't allow to have same user names in the same domain List duplicatedUsers = _userDao.findUsersByName(userName); for (UserVO duplicatedUser : duplicatedUsers) { @@ -931,7 +936,7 @@ public class AccountManagerImpl implements AccountManager, AccountService, Manag user.setUsername(userName); } - + if (password != null) { String encodedPassword = null; for (Enumeration en = _userAuthenticators.enumeration(); en.hasMoreElements();) { @@ -1213,7 +1218,7 @@ public class AccountManagerImpl implements AccountManager, AccountService, Manag if (account == null || account.getType() == Account.ACCOUNT_TYPE_PROJECT) { throw new InvalidParameterValueException("Unable to find active account by accountId: " + accountId + " OR by name: " + accountName + " in domain " + domainId); } - + if (account.getId() == Account.ACCOUNT_ID_SYSTEM) { throw new PermissionDeniedException("Account id : " + accountId + " is a system account, lock is not allowed"); } @@ -1242,7 +1247,7 @@ public class AccountManagerImpl implements AccountManager, AccountService, Manag if (account == null || account.getType() == Account.ACCOUNT_TYPE_PROJECT) { throw new InvalidParameterValueException("Unable to find account by accountId: " + accountId + " OR by name: " + accountName + " in domain " + domainId); } - + if (account.getId() == Account.ACCOUNT_ID_SYSTEM) { throw new PermissionDeniedException("Account id : " + accountId + " is a system account, disable is not allowed"); } @@ -1394,7 +1399,7 @@ public class AccountManagerImpl implements AccountManager, AccountService, Manag s_logger.info("Found " + removedAccounts.size() + " removed accounts to cleanup"); for (AccountVO account : removedAccounts) { s_logger.debug("Cleaning up " + account.getId()); - cleanupAccount(account, getSystemUser().getId(), getSystemAccount()); + cleanupAccount(account, getSystemUser().getId(), getSystemAccount()); } // cleanup disabled accounts @@ -1693,7 +1698,7 @@ public class AccountManagerImpl implements AccountManager, AccountService, Manag if (s_logger.isDebugEnabled()) { s_logger.debug("Creating user: " + userName + ", accountId: " + accountId + " timezone:" + timezone); } - + String encodedPassword = null; for (Enumeration en = _userAuthenticators.enumeration(); en.hasMoreElements();) { UserAuthenticator authenticator = en.nextElement(); @@ -1841,7 +1846,7 @@ public class AccountManagerImpl implements AccountManager, AccountService, Manag s_logger.error("Failed to authenticate user: " + username + " in domain " + domainId); return null; } - + if (s_logger.isDebugEnabled()) { s_logger.debug("User: " + username + " in domain " + domainId + " has successfully logged in"); } @@ -1940,10 +1945,10 @@ public class AccountManagerImpl implements AccountManager, AccountService, Manag Long userId = cmd.getId(); User user = getUserIncludingRemoved(userId); - if (user == null) { + if (user == null) { throw new InvalidParameterValueException("unable to find user by id"); } - + //don't allow updating system user if (user.getId() == User.UID_SYSTEM) { throw new PermissionDeniedException("user id : " + user.getId() + " is system account, update is not allowed"); @@ -2136,9 +2141,10 @@ public class AccountManagerImpl implements AccountManager, AccountService, Manag } @Override - public Pair, Integer> searchForUsers(ListUsersCmd cmd) throws PermissionDeniedException { + public Pair, Integer> searchForUsers(ListUsersCmd cmd) throws PermissionDeniedException { Account caller = UserContext.current().getCaller(); + //TODO: Integrate with ACL checkAccess refactoring Long domainId = cmd.getDomainId(); if (domainId != null) { Domain domain = _domainDao.findById(domainId); @@ -2152,7 +2158,7 @@ public class AccountManagerImpl implements AccountManager, AccountService, Manag domainId = caller.getDomainId(); } - Filter searchFilter = new Filter(UserAccountVO.class, "id", true, cmd.getStartIndex(), cmd.getPageSizeVal()); + Filter searchFilter = new Filter(UserAccountJoinVO.class, "id", true, cmd.getStartIndex(), cmd.getPageSizeVal()); Long id = cmd.getId(); Object username = cmd.getUsername(); @@ -2161,12 +2167,12 @@ public class AccountManagerImpl implements AccountManager, AccountService, Manag Object state = cmd.getState(); Object keyword = cmd.getKeyword(); - SearchBuilder sb = _userAccountDao.createSearchBuilder(); + SearchBuilder sb = _userAccountJoinDao.createSearchBuilder(); sb.and("username", sb.entity().getUsername(), SearchCriteria.Op.LIKE); if (id != null && id == 1) { // system user should NOT be searchable - List emptyList = new ArrayList(); - return new Pair, Integer>(emptyList, 0); + List emptyList = new ArrayList(); + return new Pair, Integer>(emptyList, 0); } else if (id != null) { sb.and("id", sb.entity().getId(), SearchCriteria.Op.EQ); } else { @@ -2174,20 +2180,18 @@ public class AccountManagerImpl implements AccountManager, AccountService, Manag sb.and("id", sb.entity().getId(), SearchCriteria.Op.NEQ); } - sb.and("type", sb.entity().getType(), SearchCriteria.Op.EQ); + sb.and("type", sb.entity().getAccountType(), SearchCriteria.Op.EQ); sb.and("domainId", sb.entity().getDomainId(), SearchCriteria.Op.EQ); sb.and("accountName", sb.entity().getAccountName(), SearchCriteria.Op.EQ); sb.and("state", sb.entity().getState(), SearchCriteria.Op.EQ); if ((accountName == null) && (domainId != null)) { - SearchBuilder domainSearch = _domainDao.createSearchBuilder(); - domainSearch.and("path", domainSearch.entity().getPath(), SearchCriteria.Op.LIKE); - sb.join("domainSearch", domainSearch, sb.entity().getDomainId(), domainSearch.entity().getId(), JoinBuilder.JoinType.INNER); + sb.and("domainPath", sb.entity().getDomainPath(), SearchCriteria.Op.LIKE); } - SearchCriteria sc = sb.create(); + SearchCriteria sc = sb.create(); if (keyword != null) { - SearchCriteria ssc = _userAccountDao.createSearchCriteria(); + SearchCriteria ssc = _userAccountJoinDao.createSearchCriteria(); ssc.addOr("username", SearchCriteria.Op.LIKE, "%" + keyword + "%"); ssc.addOr("firstname", SearchCriteria.Op.LIKE, "%" + keyword + "%"); ssc.addOr("lastname", SearchCriteria.Op.LIKE, "%" + keyword + "%"); @@ -2222,15 +2226,14 @@ public class AccountManagerImpl implements AccountManager, AccountService, Manag } } else if (domainId != null) { DomainVO domainVO = _domainDao.findById(domainId); - sc.setJoinParameters("domainSearch", "path", domainVO.getPath() + "%"); + sc.setParameters("domainPath", domainVO.getPath() + "%"); } if (state != null) { sc.setParameters("state", state); } - Pair, Integer> result = _userAccountDao.searchAndCount(sc, searchFilter); - return new Pair, Integer>(result.first(), result.second()); + return _userAccountJoinDao.searchAndCount(sc, searchFilter); } @Override @@ -2301,7 +2304,7 @@ public class AccountManagerImpl implements AccountManager, AccountService, Manag } @Override - public void buildACLSearchParameters(Account caller, Long id, String accountName, Long projectId, List + public void buildACLSearchParameters(Account caller, Long id, String accountName, Long projectId, List permittedAccounts, Ternary domainIdRecursiveListProject, boolean listAll, boolean forProjectInvitation) { Long domainId = domainIdRecursiveListProject.first(); diff --git a/server/src/com/cloud/user/dao/UserAccountJoinDao.java b/server/src/com/cloud/user/dao/UserAccountJoinDao.java new file mode 100644 index 00000000000..05858d022c2 --- /dev/null +++ b/server/src/com/cloud/user/dao/UserAccountJoinDao.java @@ -0,0 +1,38 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. +package com.cloud.user.dao; + +import java.util.List; + +import org.apache.cloudstack.api.response.UserResponse; +import org.apache.cloudstack.api.view.vo.UserAccountJoinVO; + +import com.cloud.user.User; +import com.cloud.user.UserAccount; +import com.cloud.utils.db.GenericDao; + +public interface UserAccountJoinDao extends GenericDao { + + UserResponse newUserResponse(UserAccountJoinVO usr); + + UserAccountJoinVO newUserView(User usr); + + UserAccountJoinVO newUserView(UserAccount usr); + + List searchByIds(Long... ids); + +} diff --git a/server/src/com/cloud/user/dao/UserAccountJoinDaoImpl.java b/server/src/com/cloud/user/dao/UserAccountJoinDaoImpl.java new file mode 100644 index 00000000000..8ffff0f82f0 --- /dev/null +++ b/server/src/com/cloud/user/dao/UserAccountJoinDaoImpl.java @@ -0,0 +1,122 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. +package com.cloud.user.dao; + +import java.util.List; + +import javax.ejb.Local; + +import org.apache.log4j.Logger; + +import com.cloud.api.ApiDBUtils; +import com.cloud.api.ApiResponseHelper; +import org.apache.cloudstack.api.response.InstanceGroupResponse; +import org.apache.cloudstack.api.response.UserResponse; +import org.apache.cloudstack.api.view.vo.InstanceGroupJoinVO; +import org.apache.cloudstack.api.view.vo.UserAccountJoinVO; + +import com.cloud.user.Account; +import com.cloud.user.User; +import com.cloud.user.UserAccount; +import com.cloud.utils.db.GenericDaoBase; +import com.cloud.utils.db.SearchBuilder; +import com.cloud.utils.db.SearchCriteria; +import com.cloud.vm.InstanceGroup; + + +@Local(value={UserAccountJoinDao.class}) +public class UserAccountJoinDaoImpl extends GenericDaoBase implements UserAccountJoinDao { + public static final Logger s_logger = Logger.getLogger(UserAccountJoinDaoImpl.class); + + private SearchBuilder vrSearch; + + private SearchBuilder vrIdSearch; + + + protected UserAccountJoinDaoImpl() { + + vrSearch = createSearchBuilder(); + vrSearch.and("idIN", vrSearch.entity().getId(), SearchCriteria.Op.IN); + vrSearch.done(); + + vrIdSearch = createSearchBuilder(); + vrIdSearch.and("id", vrIdSearch.entity().getId(), SearchCriteria.Op.EQ); + vrIdSearch.done(); + + this._count = "select count(distinct id) from user_view WHERE "; + } + + + + @Override + public UserResponse newUserResponse(UserAccountJoinVO usr) { + UserResponse userResponse = new UserResponse(); + userResponse.setAccountId(usr.getAccountUuid()); + userResponse.setAccountName(usr.getAccountName()); + userResponse.setAccountType(usr.getAccountType()); + userResponse.setCreated(usr.getCreated()); + userResponse.setDomainId(usr.getDomainUuid()); + userResponse.setDomainName(usr.getDomainName()); + userResponse.setEmail(usr.getEmail()); + userResponse.setFirstname(usr.getFirstname()); + userResponse.setId(usr.getUuid()); + userResponse.setLastname(usr.getLastname()); + userResponse.setState(usr.getState().toString()); + userResponse.setTimezone(usr.getTimezone()); + userResponse.setUsername(usr.getUsername()); + userResponse.setApiKey(usr.getApiKey()); + userResponse.setSecretKey(usr.getSecretKey()); + userResponse.setObjectName("user"); + + return userResponse; + } + + + @Override + public UserAccountJoinVO newUserView(User usr) { + SearchCriteria sc = vrIdSearch.create(); + sc.setParameters("id", usr.getId()); + List users = searchIncludingRemoved(sc, null, null, false); + assert users != null && users.size() == 1 : "No user found for user id " + usr.getId(); + return users.get(0); + } + + + + + @Override + public UserAccountJoinVO newUserView(UserAccount usr) { + SearchCriteria sc = vrIdSearch.create(); + sc.setParameters("id", usr.getId()); + List users = searchIncludingRemoved(sc, null, null, false); + assert users != null && users.size() == 1 : "No user found for user id " + usr.getId(); + return users.get(0); + } + + + + @Override + public List searchByIds(Long... ids) { + SearchCriteria sc = vrSearch.create(); + sc.setParameters("idIN", ids); + return searchIncludingRemoved(sc, null, null, false); + } + + + + +} diff --git a/server/test/com/cloud/user/MockAccountManagerImpl.java b/server/test/com/cloud/user/MockAccountManagerImpl.java index 90422c72668..dbe616991c1 100644 --- a/server/test/com/cloud/user/MockAccountManagerImpl.java +++ b/server/test/com/cloud/user/MockAccountManagerImpl.java @@ -31,6 +31,8 @@ import org.apache.cloudstack.api.command.user.account.ListAccountsCmd; import org.apache.cloudstack.api.command.admin.account.UpdateAccountCmd; import org.apache.cloudstack.api.command.admin.user.UpdateUserCmd; import org.apache.cloudstack.api.view.vo.ControlledViewEntity; +import org.apache.cloudstack.api.view.vo.UserAccountJoinVO; + import com.cloud.domain.Domain; import com.cloud.exception.ConcurrentOperationException; import com.cloud.exception.PermissionDeniedException; @@ -305,7 +307,7 @@ public class MockAccountManagerImpl implements Manager, AccountManager, AccountS } @Override - public Pair, Integer> searchForUsers(ListUsersCmd cmd) throws PermissionDeniedException { + public Pair, Integer> searchForUsers(ListUsersCmd cmd) throws PermissionDeniedException { // TODO Auto-generated method stub return null; } @@ -320,14 +322,14 @@ public class MockAccountManagerImpl implements Manager, AccountManager, AccountS public void buildACLSearchBuilder(SearchBuilder sb, Long domainId, boolean isRecursive, List permittedAccounts, ListProjectResourcesCriteria listProjectResourcesCriteria) { // TODO Auto-generated method stub - + } @Override public void buildACLSearchCriteria(SearchCriteria sc, Long domainId, boolean isRecursive, List permittedAccounts, ListProjectResourcesCriteria listProjectResourcesCriteria) { // TODO Auto-generated method stub - + } @Override diff --git a/setup/db/create-schema.sql b/setup/db/create-schema.sql index 406145ce2b3..722b31f440f 100755 --- a/setup/db/create-schema.sql +++ b/setup/db/create-schema.sql @@ -2859,3 +2859,34 @@ from instance_group inner join account on instance_group.account_id=account.id inner join domain on account.domain_id=domain.id left join projects on projects.project_account_id = instance_group.account_id; + +DROP VIEW IF EXISTS `cloud`.`user_view`; +CREATE VIEW user_view AS +select +user.id, +user.uuid, +user.username, +user.password, +user.firstname, +user.lastname, +user.email, +user.state, +user.api_key, +user.secret_key, +user.created, +user.removed, +user.timezone, +user.registration_token, +user.is_registered, +user.incorrect_login_attempts, +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 +from user +inner join account on user.account_id = account.id +inner join domain on account.domain_id=domain.id; From 8735716ba02c89dfd33ad86748a665b4ab081f96 Mon Sep 17 00:00:00 2001 From: Min Chen Date: Tue, 11 Dec 2012 12:29:00 -0800 Subject: [PATCH 096/421] Refactor ListProjectsCmd and ProjectResponse. --- .../com/cloud/projects/ProjectService.java | 4 +- .../cloudstack/api/ResponseGenerator.java | 3 + .../command/user/project/ListProjectsCmd.java | 10 +- .../api/response/ProjectResponse.java | 19 +- .../cloudstack/api/view/vo/ProjectJoinVO.java | 395 +++++++++++++ server/src/com/cloud/api/ApiDBUtils.java | 17 + .../src/com/cloud/api/ApiResponseHelper.java | 49 +- .../DefaultComponentLibrary.java | 2 + .../cloud/projects/ProjectManagerImpl.java | 542 +++++++++--------- .../cloud/projects/dao/ProjectJoinDao.java | 36 ++ .../projects/dao/ProjectJoinDaoImpl.java | 130 +++++ .../projects/MockProjectManagerImpl.java | 6 +- setup/db/create-schema.sql | 33 ++ 13 files changed, 942 insertions(+), 304 deletions(-) create mode 100644 api/src/org/apache/cloudstack/api/view/vo/ProjectJoinVO.java create mode 100644 server/src/com/cloud/projects/dao/ProjectJoinDao.java create mode 100644 server/src/com/cloud/projects/dao/ProjectJoinDaoImpl.java diff --git a/api/src/com/cloud/projects/ProjectService.java b/api/src/com/cloud/projects/ProjectService.java index c0ec91bd511..2ef367b8f75 100644 --- a/api/src/com/cloud/projects/ProjectService.java +++ b/api/src/com/cloud/projects/ProjectService.java @@ -19,6 +19,8 @@ package com.cloud.projects; import java.util.List; import java.util.Map; +import org.apache.cloudstack.api.view.vo.ProjectJoinVO; + import com.cloud.exception.ConcurrentOperationException; import com.cloud.exception.ResourceAllocationException; import com.cloud.exception.ResourceUnavailableException; @@ -61,7 +63,7 @@ public interface ProjectService { */ Project getProject(long id); - Pair, Integer> listProjects(Long id, String name, String displayText, String state, String accountName, + Pair, Integer> listProjects(Long id, String name, String displayText, String state, String accountName, Long domainId, String keyword, Long startIndex, Long pageSize, boolean listAll, boolean isRecursive, Map tags); ProjectAccount assignAccountToProject(Project project, long accountId, Role accountRole); diff --git a/api/src/org/apache/cloudstack/api/ResponseGenerator.java b/api/src/org/apache/cloudstack/api/ResponseGenerator.java index acb548ab0a7..383ecf81253 100644 --- a/api/src/org/apache/cloudstack/api/ResponseGenerator.java +++ b/api/src/org/apache/cloudstack/api/ResponseGenerator.java @@ -153,6 +153,7 @@ import com.cloud.vm.InstanceGroup; import org.apache.cloudstack.api.view.vo.DomainRouterJoinVO; import org.apache.cloudstack.api.view.vo.EventJoinVO; import org.apache.cloudstack.api.view.vo.InstanceGroupJoinVO; +import org.apache.cloudstack.api.view.vo.ProjectJoinVO; import org.apache.cloudstack.api.view.vo.ResourceTagJoinVO; import org.apache.cloudstack.api.view.vo.SecurityGroupJoinVO; import org.apache.cloudstack.api.view.vo.UserAccountJoinVO; @@ -291,6 +292,8 @@ public interface ResponseGenerator { ProjectResponse createProjectResponse(Project project); + List createProjectResponse(ProjectJoinVO... projects); + List createIsoResponses(VirtualMachineTemplate iso, long zoneId, boolean readyOnly); List createTemplateResponses(long templateId, Long vmId); diff --git a/api/src/org/apache/cloudstack/api/command/user/project/ListProjectsCmd.java b/api/src/org/apache/cloudstack/api/command/user/project/ListProjectsCmd.java index 2350a2c0af4..cc1ccdda8e6 100644 --- a/api/src/org/apache/cloudstack/api/command/user/project/ListProjectsCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/project/ListProjectsCmd.java @@ -32,6 +32,8 @@ import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.response.ListResponse; import org.apache.cloudstack.api.response.ProjectResponse; +import org.apache.cloudstack.api.view.vo.ProjectJoinVO; + import com.cloud.exception.InvalidParameterValueException; import com.cloud.projects.Project; import com.cloud.utils.Pair; @@ -107,15 +109,11 @@ public class ListProjectsCmd extends BaseListAccountResourcesCmd { @Override public void execute(){ - Pair, Integer> projects = _projectService.listProjects(id, name, displayText, state, + Pair, Integer> projects = _projectService.listProjects(id, name, displayText, state, this.getAccountName(), this.getDomainId(), this.getKeyword(), this.getStartIndex(), this.getPageSizeVal(), this.listAll(), this.isRecursive(), getTags()); ListResponse response = new ListResponse(); - List projectResponses = new ArrayList(); - for (Project project : projects.first()) { - ProjectResponse projectResponse = _responseGenerator.createProjectResponse(project); - projectResponses.add(projectResponse); - } + List projectResponses = _responseGenerator.createProjectResponse(projects.first().toArray(new ProjectJoinVO[projects.first().size()])); response.setResponses(projectResponses, projects.second()); response.setResponseName(getCommandName()); diff --git a/api/src/org/apache/cloudstack/api/response/ProjectResponse.java b/api/src/org/apache/cloudstack/api/response/ProjectResponse.java index dea1a68cdbf..c47e7b6fc09 100644 --- a/api/src/org/apache/cloudstack/api/response/ProjectResponse.java +++ b/api/src/org/apache/cloudstack/api/response/ProjectResponse.java @@ -16,6 +16,7 @@ // under the License. package org.apache.cloudstack.api.response; +import java.util.ArrayList; import java.util.List; import org.apache.cloudstack.api.ApiConstants; @@ -28,7 +29,7 @@ import org.apache.cloudstack.api.BaseResponse; public class ProjectResponse extends BaseResponse { @SerializedName(ApiConstants.ID) @Param(description="the id of the project") - private IdentityProxy id = new IdentityProxy("projects"); + private String id; @SerializedName(ApiConstants.NAME) @Param(description="the name of the project") private String name; @@ -37,7 +38,7 @@ public class ProjectResponse extends BaseResponse { private String displaytext; @SerializedName(ApiConstants.DOMAIN_ID) @Param(description="the domain id the project belongs to") - private IdentityProxy domainId = new IdentityProxy("domain"); + private String domainId; @SerializedName(ApiConstants.DOMAIN) @Param(description="the domain name where the project belongs to") private String domain; @@ -49,11 +50,11 @@ public class ProjectResponse extends BaseResponse { private String state; @SerializedName(ApiConstants.TAGS) @Param(description="the list of resource tags associated with vm", responseObject = ResourceTagResponse.class) - private List tags; + private List tags = new ArrayList(); - public void setId(Long id) { - this.id.setValue(id); + public void setId(String id) { + this.id = id; } public void setName(String name) { @@ -64,8 +65,8 @@ public class ProjectResponse extends BaseResponse { this.displaytext = displaytext; } - public void setDomainId(Long domainId) { - this.domainId.setValue(domainId); + public void setDomainId(String domainId) { + this.domainId = domainId; } public void setDomain(String domain) { @@ -83,4 +84,8 @@ public class ProjectResponse extends BaseResponse { public void setTags(List tags) { this.tags = tags; } + + public void addTag(ResourceTagResponse tag){ + this.tags.add(tag); + } } diff --git a/api/src/org/apache/cloudstack/api/view/vo/ProjectJoinVO.java b/api/src/org/apache/cloudstack/api/view/vo/ProjectJoinVO.java new file mode 100644 index 00000000000..f4226d3bbea --- /dev/null +++ b/api/src/org/apache/cloudstack/api/view/vo/ProjectJoinVO.java @@ -0,0 +1,395 @@ +// 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 org.apache.cloudstack.api.view.vo; + +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.server.ResourceTag.TaggedResourceType; +import com.cloud.utils.db.GenericDao; +import com.cloud.vm.VirtualMachine.State; + +@Entity +@Table(name="project_view") +public class ProjectJoinVO extends BaseViewVO { + + @Column(name="uuid") + private String uuid; + + @Column(name="name") + private String name; + + @Column(name="display_text") + String displayText; + + + @Column(name="owner") + String owner; + + @Column(name="state") + @Enumerated(value=EnumType.STRING) + private State state; + + @Column(name=GenericDao.CREATED_COLUMN) + private Date created; + + @Column(name=GenericDao.REMOVED_COLUMN) + private Date removed; + + @Column(name="account_id") + private long accountId; + + @Column(name="domain_id") + private long domainId; + + @Column(name="domain_uuid") + private String domainUuid; + + @Column(name="domain_name") + private String domainName; + + @Column(name="domain_path") + private String domainPath; + + @Column(name="tag_id") + private long tagId; + + @Column(name="tag_uuid") + private String tagUuid; + + @Column(name="tag_key") + private String tagKey; + + @Column(name="tag_value") + private String tagValue; + + @Column(name="tag_domain_id") + private long tagDomainId; + + @Column(name="tag_account_id") + private long tagAccountId; + + @Column(name="tag_resource_id") + private long tagResourceId; + + @Column(name="tag_resource_uuid") + private String tagResourceUuid; + + @Column(name="tag_resource_type") + @Enumerated(value=EnumType.STRING) + private TaggedResourceType tagResourceType; + + @Column(name="tag_customer") + private String tagCustomer; + + + public ProjectJoinVO() { + } + + + + + public String getUuid() { + return uuid; + } + + + + + public void setUuid(String uuid) { + this.uuid = uuid; + } + + + + public String getName() { + return name; + } + + + public void setName(String name) { + this.name = name; + } + + + + + + + public long getDomainId() { + return domainId; + } + + + public void setDomainId(long domainId) { + this.domainId = domainId; + } + + + public String getDomainUuid() { + return domainUuid; + } + + + + + public void setDomainUuid(String domainUuid) { + this.domainUuid = domainUuid; + } + + + + + public String getDomainName() { + return domainName; + } + + + public void setDomainName(String domainName) { + this.domainName = domainName; + } + + public String getDomainPath() { + return domainPath; + } + + + public void setDomainPath(String domainPath) { + this.domainPath = domainPath; + } + + + public 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 getDisplayText() { + return displayText; + } + + + + + public void setDisplayText(String displayText) { + this.displayText = displayText; + } + + + + + public String getOwner() { + return owner; + } + + + + + public void setOwner(String owner) { + this.owner = owner; + } + + + + + public long getTagId() { + return tagId; + } + + + + + public void setTagId(long tagId) { + this.tagId = tagId; + } + + + + + public String getTagUuid() { + return tagUuid; + } + + + + + public void setTagUuid(String tagUuid) { + this.tagUuid = tagUuid; + } + + + + + public String getTagKey() { + return tagKey; + } + + + + + public void setTagKey(String tagKey) { + this.tagKey = tagKey; + } + + + + + public String getTagValue() { + return tagValue; + } + + + + + public void setTagValue(String tagValue) { + this.tagValue = tagValue; + } + + + + + public long getTagDomainId() { + return tagDomainId; + } + + + + + public void setTagDomainId(long tagDomainId) { + this.tagDomainId = tagDomainId; + } + + + + + public long getTagAccountId() { + return tagAccountId; + } + + + + + public void setTagAccountId(long tagAccountId) { + this.tagAccountId = tagAccountId; + } + + + + + public long getTagResourceId() { + return tagResourceId; + } + + + + + public void setTagResourceId(long tagResourceId) { + this.tagResourceId = tagResourceId; + } + + + + + public String getTagResourceUuid() { + return tagResourceUuid; + } + + + + + public void setTagResourceUuid(String tagResourceUuid) { + this.tagResourceUuid = tagResourceUuid; + } + + + + + public TaggedResourceType getTagResourceType() { + return tagResourceType; + } + + + + + public void setTagResourceType(TaggedResourceType tagResourceType) { + this.tagResourceType = tagResourceType; + } + + + + + public String getTagCustomer() { + return tagCustomer; + } + + + + + public void setTagCustomer(String tagCustomer) { + this.tagCustomer = tagCustomer; + } + + + + + public long getAccountId() { + return accountId; + } + + + + + public void setAccountId(long accountId) { + this.accountId = accountId; + } + + + + +} diff --git a/server/src/com/cloud/api/ApiDBUtils.java b/server/src/com/cloud/api/ApiDBUtils.java index 3cebe462c55..a60f91b3676 100755 --- a/server/src/com/cloud/api/ApiDBUtils.java +++ b/server/src/com/cloud/api/ApiDBUtils.java @@ -26,6 +26,7 @@ import org.apache.cloudstack.api.ApiConstants.VMDetails; import org.apache.cloudstack.api.response.DomainRouterResponse; import org.apache.cloudstack.api.response.EventResponse; import org.apache.cloudstack.api.response.InstanceGroupResponse; +import org.apache.cloudstack.api.response.ProjectResponse; import org.apache.cloudstack.api.response.ResourceTagResponse; import org.apache.cloudstack.api.response.SecurityGroupResponse; import org.apache.cloudstack.api.response.UserResponse; @@ -33,6 +34,7 @@ import org.apache.cloudstack.api.response.UserVmResponse; import org.apache.cloudstack.api.view.vo.DomainRouterJoinVO; import org.apache.cloudstack.api.view.vo.EventJoinVO; import org.apache.cloudstack.api.view.vo.InstanceGroupJoinVO; +import org.apache.cloudstack.api.view.vo.ProjectJoinVO; import org.apache.cloudstack.api.view.vo.ResourceTagJoinVO; import org.apache.cloudstack.api.view.vo.SecurityGroupJoinVO; import org.apache.cloudstack.api.view.vo.UserAccountJoinVO; @@ -114,6 +116,7 @@ import com.cloud.offerings.NetworkOfferingVO; import com.cloud.offerings.dao.NetworkOfferingDao; import com.cloud.projects.Project; import com.cloud.projects.ProjectService; +import com.cloud.projects.dao.ProjectJoinDao; import com.cloud.resource.ResourceManager; import com.cloud.server.Criteria; import com.cloud.server.ManagementServer; @@ -261,6 +264,7 @@ public class ApiDBUtils { private static EventJoinDao _eventJoinDao; private static InstanceGroupJoinDao _vmGroupJoinDao; private static UserAccountJoinDao _userAccountJoinDao; + private static ProjectJoinDao _projectJoinDao; static { _ms = (ManagementServer) ComponentLocator.getComponent(ManagementServer.Name); @@ -332,6 +336,7 @@ public class ApiDBUtils { _counterDao = locator.getDao(CounterDao.class); _tagJoinDao = locator.getDao(ResourceTagJoinDao.class); _eventJoinDao = locator.getDao(EventJoinDao.class); + _projectJoinDao = locator.getDao(ProjectJoinDao.class); // Note: stats collector should already have been initialized by this time, otherwise a null instance is returned _statsCollector = StatsCollector.getInstance(); @@ -1013,4 +1018,16 @@ public class ApiDBUtils { public static UserAccountJoinVO newUserView(UserAccount usr){ return _userAccountJoinDao.newUserView(usr); } + + public static ProjectResponse newProjectResponse(ProjectJoinVO proj) { + return _projectJoinDao.newProjectResponse(proj); + } + + public static ProjectResponse fillProjectDetails(ProjectResponse rsp, ProjectJoinVO proj){ + return _projectJoinDao.setProjectResponse(rsp,proj); + } + + public static List newProjectView(Project proj){ + return _projectJoinDao.newProjectView(proj); + } } diff --git a/server/src/com/cloud/api/ApiResponseHelper.java b/server/src/com/cloud/api/ApiResponseHelper.java index c8c78d027fe..76fe58d43b5 100755 --- a/server/src/com/cloud/api/ApiResponseHelper.java +++ b/server/src/com/cloud/api/ApiResponseHelper.java @@ -116,6 +116,7 @@ import org.apache.cloudstack.api.view.vo.DomainRouterJoinVO; import org.apache.cloudstack.api.view.vo.ControlledViewEntity; import org.apache.cloudstack.api.view.vo.EventJoinVO; import org.apache.cloudstack.api.view.vo.InstanceGroupJoinVO; +import org.apache.cloudstack.api.view.vo.ProjectJoinVO; import org.apache.cloudstack.api.view.vo.ResourceTagJoinVO; import org.apache.cloudstack.api.view.vo.SecurityGroupJoinVO; import org.apache.cloudstack.api.view.vo.UserAccountJoinVO; @@ -2671,31 +2672,33 @@ public class ApiResponseHelper implements ResponseGenerator { @Override public ProjectResponse createProjectResponse(Project project) { - ProjectResponse response = new ProjectResponse(); - response.setId(project.getId()); - response.setName(project.getName()); - response.setDisplaytext(project.getDisplayText()); - response.setState(project.getState().toString()); - - Domain domain = ApiDBUtils.findDomainById(project.getDomainId()); - response.setDomainId(domain.getId()); - response.setDomain(domain.getName()); - - response.setOwner(ApiDBUtils.getProjectOwner(project.getId()).getAccountName()); - - //set tag information - List tags = ApiDBUtils.listByResourceTypeAndId(TaggedResourceType.Project, project.getId()); - List tagResponses = new ArrayList(); - for (ResourceTag tag : tags) { - ResourceTagResponse tagResponse = createResourceTagResponse(tag, true); - tagResponses.add(tagResponse); - } - response.setTags(tagResponses); - - response.setObjectName("project"); - return response; + List viewPrjs = ApiDBUtils.newProjectView(project); + List listPrjs = createProjectResponse(viewPrjs.toArray(new ProjectJoinVO[viewPrjs.size()])); + assert listPrjs != null && listPrjs.size() == 1 : "There should be one project returned"; + return listPrjs.get(0); } + + @Override + public List createProjectResponse(ProjectJoinVO... projects) { + Hashtable prjDataList = new Hashtable(); + // Initialise the prjdatalist with the input data + for (ProjectJoinVO p : projects) { + ProjectResponse pData = prjDataList.get(p.getId()); + if ( pData == null ){ + // first time encountering this vm + pData = ApiDBUtils.newProjectResponse(p); + } + else{ + // update those 1 to many mapping fields + pData = ApiDBUtils.fillProjectDetails(pData, p); + } + prjDataList.put(p.getId(), pData); + } + return new ArrayList(prjDataList.values()); + } + + @Override public FirewallResponse createFirewallResponse(FirewallRule fwRule) { FirewallResponse response = new FirewallResponse(); diff --git a/server/src/com/cloud/configuration/DefaultComponentLibrary.java b/server/src/com/cloud/configuration/DefaultComponentLibrary.java index c1703bc3729..af7a84dcfc6 100755 --- a/server/src/com/cloud/configuration/DefaultComponentLibrary.java +++ b/server/src/com/cloud/configuration/DefaultComponentLibrary.java @@ -139,6 +139,7 @@ import com.cloud.projects.ProjectManagerImpl; import com.cloud.projects.dao.ProjectAccountDaoImpl; import com.cloud.projects.dao.ProjectDaoImpl; import com.cloud.projects.dao.ProjectInvitationDaoImpl; +import com.cloud.projects.dao.ProjectJoinDaoImpl; import com.cloud.resource.ResourceManagerImpl; import com.cloud.resourcelimit.ResourceLimitManagerImpl; import com.cloud.service.dao.ServiceOfferingDaoImpl; @@ -229,6 +230,7 @@ public class DefaultComponentLibrary extends ComponentLibraryBase implements Com addDao("ResourceTagJoinDao", ResourceTagJoinDaoImpl.class); addDao("EventJoinDao", EventJoinDaoImpl.class); addDao("UserAccountJoinDao", UserAccountJoinDaoImpl.class); + addDao("ProjectJoinDao", ProjectJoinDaoImpl.class); ComponentInfo> info = addDao("ServiceOfferingDao", ServiceOfferingDaoImpl.class); info.addParameter("cache.size", "50"); info.addParameter("cache.time.to.live", "600"); diff --git a/server/src/com/cloud/projects/ProjectManagerImpl.java b/server/src/com/cloud/projects/ProjectManagerImpl.java index c922ddb2c12..d9ff0b34277 100755 --- a/server/src/com/cloud/projects/ProjectManagerImpl.java +++ b/server/src/com/cloud/projects/ProjectManagerImpl.java @@ -5,7 +5,7 @@ // 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, @@ -38,6 +38,8 @@ import javax.mail.URLName; import javax.mail.internet.InternetAddress; import javax.naming.ConfigurationException; +import org.apache.cloudstack.api.view.vo.ProjectJoinVO; +import org.apache.cloudstack.api.view.vo.UserVmJoinVO; import org.apache.log4j.Logger; import com.cloud.acl.SecurityChecker.AccessType; @@ -60,6 +62,7 @@ import com.cloud.projects.ProjectAccount.Role; import com.cloud.projects.dao.ProjectAccountDao; import com.cloud.projects.dao.ProjectDao; import com.cloud.projects.dao.ProjectInvitationDao; +import com.cloud.projects.dao.ProjectJoinDao; import com.cloud.server.ResourceTag.TaggedResourceType; import com.cloud.tags.ResourceTagVO; import com.cloud.tags.dao.ResourceTagDao; @@ -83,6 +86,7 @@ import com.cloud.utils.db.Filter; import com.cloud.utils.db.JoinBuilder; import com.cloud.utils.db.SearchBuilder; import com.cloud.utils.db.SearchCriteria; +import com.cloud.utils.db.SearchCriteria.Func; import com.cloud.utils.db.SearchCriteria.Op; import com.cloud.utils.db.Transaction; import com.cloud.utils.exception.CloudRuntimeException; @@ -95,17 +99,19 @@ public class ProjectManagerImpl implements ProjectManager, Manager{ public static final Logger s_logger = Logger.getLogger(ProjectManagerImpl.class); private String _name; private EmailInvite _emailInvite; - + @Inject private DomainDao _domainDao; @Inject private ProjectDao _projectDao; @Inject + private ProjectJoinDao _projectJoinDao; + @Inject AccountManager _accountMgr; @Inject DomainManager _domainMgr; @Inject - ConfigurationManager _configMgr; + ConfigurationManager _configMgr; @Inject ResourceLimitService _resourceLimitMgr; @Inject @@ -118,24 +124,24 @@ public class ProjectManagerImpl implements ProjectManager, Manager{ private ProjectInvitationDao _projectInvitationDao; @Inject protected ResourceTagDao _resourceTagDao; - + protected boolean _invitationRequired = false; protected long _invitationTimeOut = 86400000; protected boolean _allowUserToCreateProject = true; protected ScheduledExecutorService _executor; protected int _projectCleanupExpInvInterval = 60; //Interval defining how often project invitation cleanup thread is running - - + + @Override public boolean configure(final String name, final Map params) throws ConfigurationException { _name = name; - + Map configs = _configDao.getConfiguration(params); _invitationRequired = Boolean.valueOf(configs.get(Config.ProjectInviteRequired.key())); _invitationTimeOut = Long.valueOf(configs.get(Config.ProjectInvitationExpirationTime.key()))*1000; _allowUserToCreateProject = Boolean.valueOf(configs.get(Config.AllowUserToCreateProject.key())); - - + + // set up the email system for project invitations String smtpHost = configs.get("project.smtp.host"); @@ -153,13 +159,13 @@ public class ProjectManagerImpl implements ProjectManager, Manager{ _emailInvite = new EmailInvite(smtpHost, smtpPort, useAuth, smtpUsername, smtpPassword, emailSender, smtpDebug); _executor = Executors.newScheduledThreadPool(1, new NamedThreadFactory("Project-ExpireInvitations")); - + return true; } - + @Override public boolean start() { - _executor.scheduleWithFixedDelay(new ExpiredInvitationsCleanup(), _projectCleanupExpInvInterval, _projectCleanupExpInvInterval, TimeUnit.SECONDS); + _executor.scheduleWithFixedDelay(new ExpiredInvitationsCleanup(), _projectCleanupExpInvInterval, _projectCleanupExpInvInterval, TimeUnit.SECONDS); return true; } @@ -172,99 +178,99 @@ public class ProjectManagerImpl implements ProjectManager, Manager{ public String getName() { return _name; } - + @Override @ActionEvent(eventType = EventTypes.EVENT_PROJECT_CREATE, eventDescription = "creating project", create=true) @DB public Project createProject(String name, String displayText, String accountName, Long domainId) throws ResourceAllocationException{ Account caller = UserContext.current().getCaller(); Account owner = caller; - + //check if the user authorized to create the project if (caller.getType() == Account.ACCOUNT_TYPE_NORMAL && !_allowUserToCreateProject) { - throw new PermissionDeniedException("Regular user is not permitted to create a project"); + throw new PermissionDeniedException("Regular user is not permitted to create a project"); } - + //Verify request parameters if ((accountName != null && domainId == null) || (domainId != null && accountName == null)) { throw new InvalidParameterValueException("Account name and domain id must be specified together"); } - + if (accountName != null) { owner = _accountMgr.finalizeOwner(caller, accountName, domainId, null); } - + //don't allow 2 projects with the same name inside the same domain if (_projectDao.findByNameAndDomain(name, owner.getDomainId()) != null) { throw new InvalidParameterValueException("Project with name " + name + " already exists in domain id=" + owner.getDomainId()); } - + //do resource limit check _resourceLimitMgr.checkResourceLimit(owner, ResourceType.project); - + Transaction txn = Transaction.currentTxn(); txn.start(); - + //Create an account associated with the project StringBuilder acctNm = new StringBuilder("PrjAcct-"); acctNm.append(name).append("-").append(owner.getDomainId()); - + Account projectAccount = _accountMgr.createAccount(acctNm.toString(), Account.ACCOUNT_TYPE_PROJECT, domainId, null, null); - + Project project = _projectDao.persist(new ProjectVO(name, displayText, owner.getDomainId(), projectAccount.getId())); - + //assign owner to the project assignAccountToProject(project, owner.getId(), ProjectAccount.Role.Admin); - + if (project != null) { UserContext.current().setEventDetails("Project id=" + project.getId()); } - + //Increment resource count _resourceLimitMgr.incrementResourceCount(owner.getId(), ResourceType.project); - + txn.commit(); - + return project; } - - + + @Override @ActionEvent(eventType = EventTypes.EVENT_PROJECT_CREATE, eventDescription = "creating project", async=true) @DB public Project enableProject(long projectId){ Account caller = UserContext.current().getCaller(); - + ProjectVO project= getProject(projectId); //verify input parameters if (project == null) { throw new InvalidParameterValueException("Unable to find project by id " + projectId); } - + _accountMgr.checkAccess(caller,AccessType.ModifyProject, true, _accountMgr.getAccount(project.getProjectAccountId())); - + //at this point enabling project doesn't require anything, so just update the state project.setState(State.Active); _projectDao.update(projectId, project); - + return project; } - - + + @Override - @ActionEvent(eventType = EventTypes.EVENT_PROJECT_DELETE, eventDescription = "deleting project", async = true) + @ActionEvent(eventType = EventTypes.EVENT_PROJECT_DELETE, eventDescription = "deleting project", async = true) public boolean deleteProject(long projectId) { UserContext ctx = UserContext.current(); - + ProjectVO project= getProject(projectId); //verify input parameters if (project == null) { throw new InvalidParameterValueException("Unable to find project by id " + projectId); } - + _accountMgr.checkAccess(ctx.getCaller(),AccessType.ModifyProject, true, _accountMgr.getAccount(project.getProjectAccountId())); - - return deleteProject(ctx.getCaller(), ctx.getCallerUserId(), project); + + return deleteProject(ctx.getCaller(), ctx.getCallerUserId(), project); } @DB @@ -280,10 +286,10 @@ public class ProjectManagerImpl implements ProjectManager, Manager{ Account projectOwner = getProjectOwner(project.getId()); if (projectOwner != null) { _resourceLimitMgr.decrementResourceCount(projectOwner.getId(), ResourceType.project); - } - + } + txn.commit(); - + if (updateResult) { //pass system caller when clenaup projects account if (!cleanupProject(project, _accountDao.findById(Account.ACCOUNT_ID_SYSTEM), User.UID_SYSTEM)) { @@ -297,31 +303,31 @@ public class ProjectManagerImpl implements ProjectManager, Manager{ return false; } } - + @DB private boolean cleanupProject(Project project, AccountVO caller, Long callerUserId) { - boolean result=true; + boolean result=true; //Delete project's account AccountVO account = _accountDao.findById(project.getProjectAccountId()); s_logger.debug("Deleting projects " + project + " internal account id=" + account.getId() + " as a part of project cleanup..."); - + result = result && _accountMgr.deleteAccount(account, callerUserId, caller); - + if (result) { //Unassign all users from the project - + Transaction txn = Transaction.currentTxn(); txn.start(); - + s_logger.debug("Unassigning all accounts from project " + project + " as a part of project cleanup..."); List projectAccounts = _projectAccountDao.listByProjectId(project.getId()); for (ProjectAccount projectAccount : projectAccounts) { result = result && unassignAccountFromProject(projectAccount.getProjectId(), projectAccount.getAccountId()); } - + s_logger.debug("Removing all invitations for the project " + project + " as a part of project cleanup..."); _projectInvitationDao.cleanupInvitations(project.getId()); - + txn.commit(); if (result) { s_logger.debug("Accounts are unassign successfully from project " + project + " as a part of project cleanup..."); @@ -329,10 +335,10 @@ public class ProjectManagerImpl implements ProjectManager, Manager{ } else { s_logger.warn("Failed to cleanup project's internal account"); } - + return result; } - + @Override public boolean unassignAccountFromProject(long projectId, long accountId) { ProjectAccountVO projectAccount = _projectAccountDao.findByProjectIdAccountId(projectId, accountId); @@ -340,7 +346,7 @@ public class ProjectManagerImpl implements ProjectManager, Manager{ s_logger.debug("Account id=" + accountId + " is not assigned to project id=" + projectId + " so no need to unassign"); return true; } - + if ( _projectAccountDao.remove(projectAccount.getId())) { return true; } else { @@ -348,23 +354,24 @@ public class ProjectManagerImpl implements ProjectManager, Manager{ return false; } } - + @Override public ProjectVO getProject (long projectId) { return _projectDao.findById(projectId); } - + @Override - public Pair, Integer> listProjects(Long id, String name, String displayText, String state, - String accountName, Long domainId, String keyword, Long startIndex, Long pageSize, boolean listAll, + public Pair, Integer> listProjects(Long id, String name, String displayText, String state, + String accountName, Long domainId, String keyword, Long startIndex, Long pageSize, boolean listAll, boolean isRecursive, Map tags) { Account caller = UserContext.current().getCaller(); Long accountId = null; String path = null; - - Filter searchFilter = new Filter(ProjectVO.class, "id", false, startIndex, pageSize); - SearchBuilder sb = _projectDao.createSearchBuilder(); - + + Filter searchFilter = new Filter(ProjectJoinVO.class, "id", false, startIndex, pageSize); + SearchBuilder sb = _projectJoinDao.createSearchBuilder(); + sb.select(null, Func.DISTINCT, sb.entity().getId()); // select distinct ids + if (_accountMgr.isAdmin(caller.getType())) { if (domainId != null) { DomainVO domain = _domainDao.findById(domainId); @@ -383,120 +390,125 @@ public class ProjectManagerImpl implements ProjectManager, Manager{ } } else { //domainId == null - if (accountName != null) { - throw new InvalidParameterValueException("could not find account " + accountName + " because domain is not specified"); - } - + if (accountName != null) { + throw new InvalidParameterValueException("could not find account " + accountName + " because domain is not specified"); + } + } } else { if (accountName != null && !accountName.equals(caller.getAccountName())) { throw new PermissionDeniedException("Can't list account " + accountName + " projects; unauthorized"); } - + if (domainId != null && domainId.equals(caller.getDomainId())) { throw new PermissionDeniedException("Can't list domain id= " + domainId + " projects; unauthorized"); } - + accountId = caller.getId(); } - - if (domainId == null && accountId == null && (caller.getType() == Account.ACCOUNT_TYPE_NORMAL || !listAll)) { - accountId = caller.getId(); - } else if (caller.getType() == Account.ACCOUNT_TYPE_DOMAIN_ADMIN || (isRecursive && !listAll)) { + + if (domainId == null && accountId == null && (caller.getType() == Account.ACCOUNT_TYPE_NORMAL || !listAll)) { + accountId = caller.getId(); + } else if (caller.getType() == Account.ACCOUNT_TYPE_DOMAIN_ADMIN || (isRecursive && !listAll)) { DomainVO domain = _domainDao.findById(caller.getDomainId()); path = domain.getPath(); } - + if (path != null) { - SearchBuilder domainSearch = _domainDao.createSearchBuilder(); - domainSearch.and("path", domainSearch.entity().getPath(), SearchCriteria.Op.LIKE); - sb.join("domainSearch", domainSearch, sb.entity().getDomainId(), domainSearch.entity().getId(), JoinBuilder.JoinType.INNER); + sb.and("domainPath", sb.entity().getDomainPath(), SearchCriteria.Op.LIKE); } - + if (accountId != null) { - SearchBuilder projectAccountSearch = _projectAccountDao.createSearchBuilder(); - projectAccountSearch.and("accountId", projectAccountSearch.entity().getAccountId(), SearchCriteria.Op.EQ); - sb.join("projectAccountSearch", projectAccountSearch, sb.entity().getId(), projectAccountSearch.entity().getProjectId(), JoinBuilder.JoinType.INNER); + sb.and("accountId", sb.entity().getAccountId(), SearchCriteria.Op.EQ); } - + if (tags != null && !tags.isEmpty()) { - SearchBuilder 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(); - } - 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); + for (int count=0; count < tags.size(); count++) { + 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(); + } } - - SearchCriteria sc = sb.create(); - + + + SearchCriteria sc = sb.create(); + if (id != null) { sc.addAnd("id", Op.EQ, id); } - + if (domainId != null && !isRecursive) { sc.addAnd("domainId", Op.EQ, domainId); } - + if (name != null) { sc.addAnd("name", Op.EQ, name); } - + if (displayText != null) { sc.addAnd("displayText", Op.EQ, displayText); } - + if (accountId != null) { - sc.setJoinParameters("projectAccountSearch", "accountId", accountId); + sc.setParameters("accountId", accountId); } - + if (state != null) { sc.addAnd("state", Op.EQ, state); } - + if (keyword != null) { - SearchCriteria ssc = _projectDao.createSearchCriteria(); + SearchCriteria ssc = _projectJoinDao.createSearchCriteria(); ssc.addOr("name", SearchCriteria.Op.LIKE, "%" + keyword + "%"); ssc.addOr("displayText", SearchCriteria.Op.LIKE, "%" + keyword + "%"); sc.addAnd("name", SearchCriteria.Op.SC, ssc); } - + if (path != null) { - sc.setJoinParameters("domainSearch", "path", path); + sc.setParameters("domainPath", path); } - + if (tags != null && !tags.isEmpty()) { int count = 0; - sc.setJoinParameters("tagSearch", "resourceType", TaggedResourceType.Project.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++; } } - Pair, Integer> result = _projectDao.searchAndCount(sc, searchFilter); - return new Pair, Integer>(result.first(), result.second()); + // search distinct projects to get count + Pair, Integer> uniquePrjPair = _projectJoinDao.searchAndCount(sc, searchFilter); + Integer count = uniquePrjPair.second(); + if ( count.intValue() == 0 ){ + // handle empty result cases + return uniquePrjPair; + } + List uniquePrjs = uniquePrjPair.first(); + Long[] prjIds = new Long[uniquePrjs.size()]; + int i = 0; + for (ProjectJoinVO v : uniquePrjs ){ + prjIds[i++] = v.getId(); + } + List prjs = _projectJoinDao.searchByIds(prjIds); + return new Pair, Integer>(prjs, count); } - + @Override public ProjectAccount assignAccountToProject(Project project, long accountId, ProjectAccount.Role accountRole) { return _projectAccountDao.persist(new ProjectAccountVO(project, accountId, accountRole)); } - + @Override @DB public boolean deleteAccountFromProject(long projectId, long accountId) { boolean success = true; Transaction txn = Transaction.currentTxn(); txn.start(); - + //remove account ProjectAccountVO projectAccount = _projectAccountDao.findByProjectIdAccountId(projectId, accountId); success = _projectAccountDao.remove(projectAccount.getId()); - + //remove all invitations for account if (success) { s_logger.debug("Removed account " + accountId + " from project " + projectId + " , cleaning up old invitations for account/project..."); @@ -505,36 +517,36 @@ public class ProjectManagerImpl implements ProjectManager, Manager{ success = success && _projectInvitationDao.remove(invite.getId()); } } - + txn.commit(); return success; } - + @Override public Account getProjectOwner(long projectId) { ProjectAccount prAcct = _projectAccountDao.getProjectOwner(projectId); if (prAcct != null) { return _accountMgr.getAccount(prAcct.getAccountId()); } - + return null; } - + @Override public ProjectVO findByProjectAccountId(long projectAccountId) { return _projectDao.findByProjectAccountId(projectAccountId); } - + @Override public ProjectVO findByProjectAccountIdIncludingRemoved(long projectAccountId) { return _projectDao.findByProjectAccountIdIncludingRemoved(projectAccountId); } - + @Override public Project findByNameAndDomainId(String name, long domainId) { return _projectDao.findByNameAndDomain(name, domainId); } - + @Override public boolean canAccessProjectAccount(Account caller, long accountId) { //ROOT admin always can access the project @@ -545,10 +557,10 @@ public class ProjectManagerImpl implements ProjectManager, Manager{ _accountMgr.checkAccess(caller, _domainDao.findById(owner.getDomainId())); return true; } - + return _projectAccountDao.canAccessProjectAccount(caller.getId(), accountId); } - + public boolean canModifyProjectAccount(Account caller, long accountId) { //ROOT admin always can access the project if (caller.getType() == Account.ACCOUNT_TYPE_ADMIN) { @@ -560,29 +572,29 @@ public class ProjectManagerImpl implements ProjectManager, Manager{ } return _projectAccountDao.canModifyProjectAccount(caller.getId(), accountId); } - + @Override @DB @ActionEvent(eventType = EventTypes.EVENT_PROJECT_UPDATE, eventDescription = "updating project", async=true) public Project updateProject(long projectId, String displayText, String newOwnerName) throws ResourceAllocationException{ Account caller = UserContext.current().getCaller(); - + //check that the project exists ProjectVO project = getProject(projectId); - + if (project == null) { throw new InvalidParameterValueException("Unable to find the project id=" + projectId); } - + //verify permissions _accountMgr.checkAccess(caller,AccessType.ModifyProject, true, _accountMgr.getAccount(project.getProjectAccountId())); - + Transaction txn = Transaction.currentTxn(); txn.start(); if (displayText != null) { project.setDisplayText(displayText); _projectDao.update(projectId, project); } - + if (newOwnerName != null) { //check that the new owner exists Account futureOwnerAccount = _accountMgr.getActiveAccountByName(newOwnerName, project.getDomainId()); @@ -595,68 +607,68 @@ public class ProjectManagerImpl implements ProjectManager, Manager{ if (futureOwner == null) { throw new InvalidParameterValueException("Account " + newOwnerName + " doesn't belong to the project. Add it to the project first and then change the project's ownership"); } - + //do resource limit check _resourceLimitMgr.checkResourceLimit(_accountMgr.getAccount(futureOwnerAccount.getId()), ResourceType.project); - + //unset the role for the old owner ProjectAccountVO currentOwner = _projectAccountDao.findByProjectIdAccountId(projectId, currentOwnerAccount.getId()); currentOwner.setAccountRole(Role.Regular); _projectAccountDao.update(currentOwner.getId(), currentOwner); _resourceLimitMgr.decrementResourceCount(currentOwnerAccount.getId(), ResourceType.project); - + //set new owner futureOwner.setAccountRole(Role.Admin); _projectAccountDao.update(futureOwner.getId(), futureOwner); _resourceLimitMgr.incrementResourceCount(futureOwnerAccount.getId(), ResourceType.project); - + } else { s_logger.trace("Future owner " + newOwnerName + "is already the owner of the project id=" + projectId); } } - + txn.commit(); - + return _projectDao.findById(projectId); - + } - + @Override @ActionEvent(eventType = EventTypes.EVENT_PROJECT_ACCOUNT_ADD, eventDescription = "adding account to project", async=true) public boolean addAccountToProject(long projectId, String accountName, String email) { Account caller = UserContext.current().getCaller(); - + //check that the project exists Project project = getProject(projectId); - + if (project == null) { - InvalidParameterValueException ex = new InvalidParameterValueException("Unable to find project with specified id"); - ex.addProxyObject(project, projectId, "projectId"); + InvalidParameterValueException ex = new InvalidParameterValueException("Unable to find project with specified id"); + ex.addProxyObject(project, projectId, "projectId"); throw ex; } - + //User can be added to Active project only if (project.getState() != Project.State.Active) { - InvalidParameterValueException ex = new InvalidParameterValueException("Can't add account to the specified project id in state=" + project.getState() + " as it's no longer active"); - ex.addProxyObject(project, projectId, "projectId"); + InvalidParameterValueException ex = new InvalidParameterValueException("Can't add account to the specified project id in state=" + project.getState() + " as it's no longer active"); + ex.addProxyObject(project, projectId, "projectId"); throw ex; } - + //check that account-to-add exists Account account = null; if (accountName != null) { account = _accountMgr.getActiveAccountByName(accountName, project.getDomainId()); if (account == null) { - InvalidParameterValueException ex = new InvalidParameterValueException("Unable to find account name=" + accountName + " in specified domain id"); - // We don't have a DomainVO object with us, so just pass the tablename "domain" manually. + InvalidParameterValueException ex = new InvalidParameterValueException("Unable to find account name=" + accountName + " in specified domain id"); + // We don't have a DomainVO object with us, so just pass the tablename "domain" manually. ex.addProxyObject("domain", project.getDomainId(), "domainId"); throw ex; } - + //verify permissions - only project owner can assign _accountMgr.checkAccess(caller, AccessType.ModifyProject, true, _accountMgr.getAccount(project.getProjectAccountId())); - + //Check if the account already added to the project ProjectAccount projectAccount = _projectAccountDao.findByProjectIdAccountId(projectId, account.getId()); if (projectAccount != null) { @@ -664,7 +676,7 @@ public class ProjectManagerImpl implements ProjectManager, Manager{ return true; } } - + if (_invitationRequired) { return inviteAccountToProject(project, account, email); } else { @@ -679,7 +691,7 @@ public class ProjectManagerImpl implements ProjectManager, Manager{ } } } - + private boolean inviteAccountToProject(Project project, Account account, String email) { if (account != null) { if (createAccountInvitation(project, account.getId()) != null) { @@ -687,9 +699,9 @@ public class ProjectManagerImpl implements ProjectManager, Manager{ } else { s_logger.warn("Failed to generate invitation for account " + account.getAccountName() + " to project id=" + project); return false; - } + } } - + if (email != null) { //generate the token String token = generateToken(10); @@ -698,93 +710,93 @@ public class ProjectManagerImpl implements ProjectManager, Manager{ } else { s_logger.warn("Failed to generate invitation for email " + email + " to project id=" + project); return false; - } + } } - + return false; } - + @Override @ActionEvent(eventType = EventTypes.EVENT_PROJECT_ACCOUNT_REMOVE, eventDescription = "removing account from project", async=true) public boolean deleteAccountFromProject(long projectId, String accountName) { Account caller = UserContext.current().getCaller(); - + //check that the project exists Project project = getProject(projectId); - + if (project == null) { - InvalidParameterValueException ex = new InvalidParameterValueException("Unable to find project with specified id"); - ex.addProxyObject(project, projectId, "projectId"); + InvalidParameterValueException ex = new InvalidParameterValueException("Unable to find project with specified id"); + ex.addProxyObject(project, projectId, "projectId"); throw ex; } - + //check that account-to-remove exists Account account = _accountMgr.getActiveAccountByName(accountName, project.getDomainId()); if (account == null) { - InvalidParameterValueException ex = new InvalidParameterValueException("Unable to find account name=" + accountName + " in domain id=" + project.getDomainId()); + InvalidParameterValueException ex = new InvalidParameterValueException("Unable to find account name=" + accountName + " in domain id=" + project.getDomainId()); // Since we don't have a domainVO object, pass the table name manually. - ex.addProxyObject("domain", project.getDomainId(), "domainId"); + ex.addProxyObject("domain", project.getDomainId(), "domainId"); } - + //verify permissions _accountMgr.checkAccess(caller,AccessType.ModifyProject, true, _accountMgr.getAccount(project.getProjectAccountId())); - + //Check if the account exists in the project ProjectAccount projectAccount = _projectAccountDao.findByProjectIdAccountId(projectId, account.getId()); if (projectAccount == null) { InvalidParameterValueException ex = new InvalidParameterValueException("Account " + accountName + " is not assigned to the project with specified id"); // Use the projectVO object and not the projectAccount object to inject the projectId. - ex.addProxyObject(project, projectId, "projectId"); + ex.addProxyObject(project, projectId, "projectId"); throw ex; } - + //can't remove the owner of the project if (projectAccount.getAccountRole() == Role.Admin) { - InvalidParameterValueException ex = new InvalidParameterValueException("Unable to delete account " + accountName + " from the project with specified id as the account is the owner of the project"); - ex.addProxyObject(project, projectId, "projectId"); + InvalidParameterValueException ex = new InvalidParameterValueException("Unable to delete account " + accountName + " from the project with specified id as the account is the owner of the project"); + ex.addProxyObject(project, projectId, "projectId"); throw ex; } - + return deleteAccountFromProject(projectId, account.getId()); } - - + + @Override public Pair, Integer> listProjectAccounts(long projectId, String accountName, String role, Long startIndex, Long pageSizeVal) { Account caller = UserContext.current().getCaller(); - + //check that the project exists Project project = getProject(projectId); - + if (project == null) { throw new InvalidParameterValueException("Unable to find the project id=" + projectId); } - + //verify permissions - only accounts belonging to the project can list project's account if (!_accountMgr.isAdmin(caller.getType()) && _projectAccountDao.findByProjectIdAccountId(projectId, caller.getAccountId()) == null) { throw new PermissionDeniedException("Account " + caller + " is not authorized to list users of the project id=" + projectId); } - + Filter searchFilter = new Filter(ProjectAccountVO.class, "id", false, startIndex, pageSizeVal); SearchBuilder sb = _projectAccountDao.createSearchBuilder(); sb.and("accountRole", sb.entity().getAccountRole(), Op.EQ); sb.and("projectId", sb.entity().getProjectId(), Op.EQ); - + SearchBuilder accountSearch; if (accountName != null) { accountSearch = _accountDao.createSearchBuilder(); accountSearch.and("accountName", accountSearch.entity().getAccountName(), SearchCriteria.Op.EQ); sb.join("accountSearch", accountSearch, sb.entity().getAccountId(), accountSearch.entity().getId(), JoinBuilder.JoinType.INNER); } - + SearchCriteria sc = sb.create(); - + sc.setParameters("projectId", projectId); - + if (role != null) { sc.setParameters("accountRole", role); } - + if (accountName != null) { sc.setJoinParameters("accountSearch", "accountName", accountName); } @@ -792,14 +804,14 @@ public class ProjectManagerImpl implements ProjectManager, Manager{ Pair, Integer> result = _projectAccountDao.searchAndCount(sc, searchFilter); return new Pair, Integer>(result.first(), result.second()); } - - public ProjectInvitation createAccountInvitation(Project project, Long accountId) { + + public ProjectInvitation createAccountInvitation(Project project, Long accountId) { if (activeInviteExists(project, accountId, null)) { throw new InvalidParameterValueException("There is already a pending invitation for account id=" + accountId + " to the project id=" + project); } - + ProjectInvitation invitation= _projectInvitationDao.persist(new ProjectInvitationVO(project.getId(), accountId, project.getDomainId(), null, null)); - + return invitation; } @@ -811,14 +823,14 @@ public class ProjectManagerImpl implements ProjectManager, Manager{ ProjectInvitationVO invite = null; if (accountId != null) { invite = _projectInvitationDao.findByAccountIdProjectId(accountId, project.getId()); - } else if (email != null) { - invite = _projectInvitationDao.findByEmailAndProjectId(email, project.getId()); - } - + } else if (email != null) { + invite = _projectInvitationDao.findByEmailAndProjectId(email, project.getId()); + } + if (invite != null) { - if (invite.getState() == ProjectInvitation.State.Completed || + if (invite.getState() == ProjectInvitation.State.Completed || (invite.getState() == ProjectInvitation.State.Pending && _projectInvitationDao.isActive(invite.getId(), _invitationTimeOut))) { - return true; + return true; } else { if (invite.getState() == ProjectInvitation.State.Pending) { expireInvitation(invite); @@ -836,13 +848,13 @@ public class ProjectManagerImpl implements ProjectManager, Manager{ txn.commit(); return false; } - + public ProjectInvitation generateTokenBasedInvitation(Project project, String email, String token) { //verify if the invitation was already generated - if (activeInviteExists(project, null, email)) { + if (activeInviteExists(project, null, email)) { throw new InvalidParameterValueException("There is already a pending invitation for email " + email + " to the project id=" + project); } - + ProjectInvitation projectInvitation = _projectInvitationDao.persist(new ProjectInvitationVO(project.getId(), null, project.getDomainId(), email, token)); try { _emailInvite.sendInvite(token, email, project.getId()); @@ -851,28 +863,28 @@ public class ProjectManagerImpl implements ProjectManager, Manager{ _projectInvitationDao.remove(projectInvitation.getId()); return null; } - + return projectInvitation; } - + private boolean expireInvitation(ProjectInvitationVO invite) { s_logger.debug("Expiring invitation id=" + invite.getId()); invite.setState(ProjectInvitation.State.Expired); return _projectInvitationDao.update(invite.getId(), invite); } - + @Override public Pair, Integer> listProjectInvitations(Long id, Long projectId, String accountName, Long domainId, String state, boolean activeOnly, Long startIndex, Long pageSizeVal, boolean isRecursive, boolean listAll) { Account caller = UserContext.current().getCaller(); List permittedAccounts = new ArrayList(); - + Ternary domainIdRecursiveListProject = new Ternary(domainId, isRecursive, null); _accountMgr.buildACLSearchParameters(caller, id, accountName, projectId, permittedAccounts, domainIdRecursiveListProject, listAll, true); domainId = domainIdRecursiveListProject.first(); isRecursive = domainIdRecursiveListProject.second(); - ListProjectResourcesCriteria listProjectResourcesCriteria = domainIdRecursiveListProject.third(); - + ListProjectResourcesCriteria listProjectResourcesCriteria = domainIdRecursiveListProject.third(); + Filter searchFilter = new Filter(ProjectInvitationVO.class, "id", true, startIndex, pageSizeVal); SearchBuilder sb = _projectInvitationDao.createSearchBuilder(); _accountMgr.buildACLSearchBuilder(sb, domainId, isRecursive, permittedAccounts, listProjectResourcesCriteria); @@ -885,19 +897,19 @@ public class ProjectManagerImpl implements ProjectManager, Manager{ SearchCriteria sc = sb.create(); _accountMgr.buildACLSearchCriteria(sc, domainId, isRecursive, permittedAccounts, listProjectResourcesCriteria); - + if (projectId != null){ sc.setParameters("projectId", projectId); } - + if (state != null) { sc.setParameters("state", state); } - + if (id != null) { sc.setParameters("id", id); } - + if (activeOnly) { sc.setParameters("state", ProjectInvitation.State.Pending); sc.setParameters("created", new Date((DateUtil.currentGMTTime().getTime()) - _invitationTimeOut)); @@ -906,41 +918,41 @@ public class ProjectManagerImpl implements ProjectManager, Manager{ Pair, Integer> result = _projectInvitationDao.searchAndCount(sc, searchFilter); return new Pair, Integer>(result.first(), result.second()); } - + @Override @DB @ActionEvent(eventType = EventTypes.EVENT_PROJECT_INVITATION_UPDATE, eventDescription = "updating project invitation", async=true) public boolean updateInvitation(long projectId, String accountName, String token, boolean accept) { Account caller = UserContext.current().getCaller(); Long accountId = null; boolean result = true; - + //if accountname and token are null, default accountname to caller's account name if (accountName == null && token == null) { accountName = caller.getAccountName(); } - + //check that the project exists Project project = getProject(projectId); - + if (project == null) { throw new InvalidParameterValueException("Unable to find the project id=" + projectId); } - + if (accountName != null) { //check that account-to-remove exists Account account = _accountMgr.getActiveAccountByName(accountName, project.getDomainId()); if (account == null) { throw new InvalidParameterValueException("Unable to find account name=" + accountName + " in domain id=" + project.getDomainId()); } - + //verify permissions _accountMgr.checkAccess(caller, null, true, account); - + accountId = account.getId(); } else { accountId = caller.getId(); } - + //check that invitation exists ProjectInvitationVO invite = null; if (token == null) { @@ -948,7 +960,7 @@ public class ProjectManagerImpl implements ProjectManager, Manager{ } else { invite = _projectInvitationDao.findPendingByTokenAndProjectId(token, projectId, ProjectInvitation.State.Pending); } - + if (invite != null) { if (!_projectInvitationDao.isActive(invite.getId(), _invitationTimeOut) && accept) { expireInvitation(invite); @@ -956,116 +968,116 @@ public class ProjectManagerImpl implements ProjectManager, Manager{ } else { Transaction txn = Transaction.currentTxn(); txn.start(); - + ProjectInvitation.State newState = accept ? ProjectInvitation.State.Completed : ProjectInvitation.State.Declined; - + //update invitation s_logger.debug("Marking invitation " + invite + " with state " + newState); invite.setState(newState); result = _projectInvitationDao.update(invite.getId(), invite); - + if (result && accept) { //check if account already exists for the project (was added before invitation got accepted) ProjectAccount projectAccount = _projectAccountDao.findByProjectIdAccountId(projectId, accountId); if (projectAccount != null) { s_logger.debug("Account " + accountName + " already added to the project id=" + projectId); } else { - assignAccountToProject(project, accountId, ProjectAccount.Role.Regular); + assignAccountToProject(project, accountId, ProjectAccount.Role.Regular); } } else { s_logger.warn("Failed to update project invitation " + invite + " with state " + newState); } - + txn.commit(); } } else { throw new InvalidParameterValueException("Unable to find invitation for account name=" + accountName + " to the project id=" + projectId); } - + return result; } - + @Override public List listPermittedProjectAccounts(long accountId) { return _projectAccountDao.listPermittedAccountIds(accountId); } - + @Override @ActionEvent(eventType = EventTypes.EVENT_PROJECT_ACTIVATE, eventDescription = "activating project") @DB public Project activateProject(long projectId) { Account caller = UserContext.current().getCaller(); - + //check that the project exists ProjectVO project = getProject(projectId); - + if (project == null) { - InvalidParameterValueException ex = new InvalidParameterValueException("Unable to find project with specified id"); - ex.addProxyObject(project, projectId, "projectId"); + InvalidParameterValueException ex = new InvalidParameterValueException("Unable to find project with specified id"); + ex.addProxyObject(project, projectId, "projectId"); throw ex; } - + //verify permissions _accountMgr.checkAccess(caller,AccessType.ModifyProject, true, _accountMgr.getAccount(project.getProjectAccountId())); - + //allow project activation only when it's in Suspended state Project.State currentState = project.getState(); - + if (currentState == State.Active) { s_logger.debug("The project id=" + projectId + " is already active, no need to activate it again"); return project; - } - + } + if (currentState != State.Suspended) { throw new InvalidParameterValueException("Can't activate the project in " + currentState + " state"); } - + Transaction txn = Transaction.currentTxn(); txn.start(); - + project.setState(Project.State.Active); _projectDao.update(projectId, project); - + _accountMgr.enableAccount(project.getProjectAccountId()); - + txn.commit(); - + return _projectDao.findById(projectId); } - - + + @Override @ActionEvent(eventType = EventTypes.EVENT_PROJECT_SUSPEND, eventDescription = "suspending project", async = true) public Project suspendProject (long projectId) throws ConcurrentOperationException, ResourceUnavailableException { Account caller = UserContext.current().getCaller(); - + ProjectVO project= getProject(projectId); //verify input parameters if (project == null) { InvalidParameterValueException ex = new InvalidParameterValueException("Unable to find project with specified id"); - ex.addProxyObject(project, projectId, "projectId"); + ex.addProxyObject(project, projectId, "projectId"); throw ex; } - + _accountMgr.checkAccess(caller,AccessType.ModifyProject, true, _accountMgr.getAccount(project.getProjectAccountId())); - + if (suspendProject(project)) { s_logger.debug("Successfully suspended project id=" + projectId); return _projectDao.findById(projectId); } else { CloudRuntimeException ex = new CloudRuntimeException("Failed to suspend project with specified id"); - ex.addProxyObject(project, projectId, "projectId"); + ex.addProxyObject(project, projectId, "projectId"); throw ex; } - + } - + private boolean suspendProject(ProjectVO project) throws ConcurrentOperationException, ResourceUnavailableException { - + s_logger.debug("Marking project " + project + " with state " + State.Suspended + " as a part of project suspend..."); project.setState(State.Suspended); boolean updateResult = _projectDao.update(project.getId(), project); - + if (updateResult) { long projectAccountId = project.getProjectAccountId(); if (!_accountMgr.disableAccount(projectAccountId)) { @@ -1076,8 +1088,8 @@ public class ProjectManagerImpl implements ProjectManager, Manager{ } return true; } - - + + public static String generateToken(int length) { String charset = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"; Random rand = new Random(System.currentTimeMillis()); @@ -1088,7 +1100,7 @@ public class ProjectManagerImpl implements ProjectManager, Manager{ } return sb.toString(); } - + class EmailInvite { private Session _smtpSession; private final String _smtpHost; @@ -1138,7 +1150,7 @@ public class ProjectManagerImpl implements ProjectManager, Manager{ } } - public void sendInvite(String token, String email, long projectId) throws MessagingException, UnsupportedEncodingException { + public void sendInvite(String token, String email, long projectId) throws MessagingException, UnsupportedEncodingException { if (_smtpSession != null) { InternetAddress address = null; if (email != null) { @@ -1148,9 +1160,9 @@ public class ProjectManagerImpl implements ProjectManager, Manager{ s_logger.error("Exception creating address for: " + email, ex); } } - + String content = "You've been invited to join the CloudStack project id=" + projectId + ". Please use token " + token + " to complete registration"; - + SMTPMessage msg = new SMTPMessage(_smtpSession); msg.setSender(new InternetAddress(_emailSender, _emailSender)); msg.setFrom(new InternetAddress(_emailSender, _emailSender)); @@ -1174,36 +1186,36 @@ public class ProjectManagerImpl implements ProjectManager, Manager{ } } } - - + + @Override @DB @ActionEvent(eventType = EventTypes.EVENT_PROJECT_INVITATION_REMOVE, eventDescription = "removing project invitation", async=true) public boolean deleteProjectInvitation(long id) { Account caller = UserContext.current().getCaller(); - + ProjectInvitation invitation = _projectInvitationDao.findById(id); if (invitation == null) { throw new InvalidParameterValueException("Unable to find project invitation by id " + id); } - + //check that the project exists Project project = getProject(invitation.getProjectId()); - + //check permissions - only project owner can remove the invitations _accountMgr.checkAccess(caller, AccessType.ModifyProject, true, _accountMgr.getAccount(project.getProjectAccountId())); - + if (_projectInvitationDao.remove(id)) { s_logger.debug("Project Invitation id=" + id + " is removed"); return true; } else { s_logger.debug("Failed to remove project invitation id=" + id); - return false; + return false; } } - + public class ExpiredInvitationsCleanup implements Runnable { - @Override - public void run() { + @Override + public void run() { try { TimeZone.getDefault(); List invitationsToExpire = _projectInvitationDao.listInvitationsToExpire(_invitationTimeOut); @@ -1228,7 +1240,7 @@ public class ProjectManagerImpl implements ProjectManager, Manager{ @Override public boolean allowUserToCreateProject() { - return _allowUserToCreateProject; + return _allowUserToCreateProject; } - + } diff --git a/server/src/com/cloud/projects/dao/ProjectJoinDao.java b/server/src/com/cloud/projects/dao/ProjectJoinDao.java new file mode 100644 index 00000000000..c5cc4227eee --- /dev/null +++ b/server/src/com/cloud/projects/dao/ProjectJoinDao.java @@ -0,0 +1,36 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. +package com.cloud.projects.dao; + +import java.util.List; + +import org.apache.cloudstack.api.response.ProjectResponse; +import org.apache.cloudstack.api.view.vo.ProjectJoinVO; +import com.cloud.projects.Project; +import com.cloud.utils.db.GenericDao; + +public interface ProjectJoinDao extends GenericDao { + + ProjectResponse newProjectResponse(ProjectJoinVO proj); + + ProjectResponse setProjectResponse(ProjectResponse rsp, ProjectJoinVO proj); + + List newProjectView(Project proj); + + List searchByIds(Long... ids); + +} diff --git a/server/src/com/cloud/projects/dao/ProjectJoinDaoImpl.java b/server/src/com/cloud/projects/dao/ProjectJoinDaoImpl.java new file mode 100644 index 00000000000..dc6ba866d06 --- /dev/null +++ b/server/src/com/cloud/projects/dao/ProjectJoinDaoImpl.java @@ -0,0 +1,130 @@ +// 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.projects.dao; + +import java.util.List; + +import javax.ejb.Local; + +import org.apache.log4j.Logger; + +import com.cloud.api.ApiDBUtils; +import org.apache.cloudstack.api.response.ProjectResponse; +import org.apache.cloudstack.api.view.vo.ProjectJoinVO; +import org.apache.cloudstack.api.view.vo.ResourceTagJoinVO; +import com.cloud.projects.Project; +import com.cloud.utils.db.GenericDaoBase; +import com.cloud.utils.db.SearchBuilder; +import com.cloud.utils.db.SearchCriteria; + + +@Local(value={ProjectJoinDao.class}) +public class ProjectJoinDaoImpl extends GenericDaoBase implements ProjectJoinDao { + public static final Logger s_logger = Logger.getLogger(ProjectJoinDaoImpl.class); + + private SearchBuilder vrSearch; + + private SearchBuilder vrIdSearch; + + + protected ProjectJoinDaoImpl() { + + 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 project_view WHERE "; + } + + + + + + + @Override + public ProjectResponse newProjectResponse(ProjectJoinVO proj) { + ProjectResponse response = new ProjectResponse(); + response.setId(proj.getUuid()); + response.setName(proj.getName()); + response.setDisplaytext(proj.getDisplayText()); + response.setState(proj.getState().toString()); + + response.setDomainId(proj.getDomainUuid()); + response.setDomain(proj.getDomainName()); + + response.setOwner(proj.getOwner()); + + // update tag information + Long tag_id = proj.getTagId(); + if (tag_id != null && tag_id.longValue() > 0) { + ResourceTagJoinVO vtag = ApiDBUtils.findResourceTagViewById(tag_id); + if ( vtag != null ){ + response.addTag(ApiDBUtils.newResourceTagResponse(vtag, false)); + } + } + + response.setObjectName("project"); + return response; + } + + + + @Override + public ProjectResponse setProjectResponse(ProjectResponse rsp, ProjectJoinVO proj) { + // update tag information + Long tag_id = proj.getTagId(); + if (tag_id != null && tag_id.longValue() > 0) { + ResourceTagJoinVO vtag = ApiDBUtils.findResourceTagViewById(tag_id); + if ( vtag != null ){ + rsp.addTag(ApiDBUtils.newResourceTagResponse(vtag, false)); + } + } + return rsp; + } + + + + + + + @Override + public List newProjectView(Project proj) { + SearchCriteria sc = vrIdSearch.create(); + sc.setParameters("id", proj.getId()); + return searchIncludingRemoved(sc, null, null, false); + } + + + + + + + @Override + public List searchByIds(Long... ids) { + SearchCriteria sc = vrSearch.create(); + sc.setParameters("idIN", ids); + return searchIncludingRemoved(sc, null, null, false); + } + + + + +} diff --git a/server/test/com/cloud/projects/MockProjectManagerImpl.java b/server/test/com/cloud/projects/MockProjectManagerImpl.java index d8bce2fcf81..dad777a8b77 100644 --- a/server/test/com/cloud/projects/MockProjectManagerImpl.java +++ b/server/test/com/cloud/projects/MockProjectManagerImpl.java @@ -22,6 +22,8 @@ import java.util.Map; import javax.ejb.Local; import javax.naming.ConfigurationException; +import org.apache.cloudstack.api.view.vo.ProjectJoinVO; + import com.cloud.exception.ConcurrentOperationException; import com.cloud.exception.ResourceAllocationException; import com.cloud.exception.ResourceUnavailableException; @@ -225,12 +227,12 @@ public class MockProjectManagerImpl implements ProjectManager, Manager { * @see com.cloud.projects.ProjectService#listProjects(java.lang.Long, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.Long, java.lang.String, java.lang.Long, java.lang.Long, boolean, boolean, java.util.Map) */ @Override - public Pair, Integer> listProjects(Long id, String name, String displayText, String state, String accountName, Long domainId, String keyword, Long startIndex, Long pageSize, boolean listAll, + public Pair, Integer> listProjects(Long id, String name, String displayText, String state, String accountName, Long domainId, String keyword, Long startIndex, Long pageSize, boolean listAll, boolean isRecursive, Map tags) { // TODO Auto-generated method stub return null; } - + @Override public Project findByProjectAccountIdIncludingRemoved(long projectAccountId) { return null; diff --git a/setup/db/create-schema.sql b/setup/db/create-schema.sql index 722b31f440f..6699d766193 100755 --- a/setup/db/create-schema.sql +++ b/setup/db/create-schema.sql @@ -2890,3 +2890,36 @@ domain.path domain_path from user inner join account on user.account_id = account.id inner join domain on account.domain_id=domain.id; + +DROP VIEW IF EXISTS `cloud`.`project_view`; +CREATE VIEW project_view AS +select +projects.id, +projects.uuid, +projects.name, +projects.display_text, +projects.state, +projects.removed, +projects.created, +account.account_name owner, +pacct.account_id, +domain.id domain_id, +domain.uuid domain_uuid, +domain.name domain_name, +domain.path domain_path, +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 +from projects +inner join domain on projects.domain_id=domain.id +inner join project_account on projects.id = project_account.project_id and project_account.account_role = "Admin" +inner join account on account.id = project_account.account_id +left join resource_tags on resource_tags.resource_id = projects.id and resource_tags.resource_type = "Project" +left join project_account pacct on projects.id = pacct.project_id; From f4892fbb8482572605ac5aff01de419ced5f8f5c Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Tue, 11 Dec 2012 13:38:32 -0800 Subject: [PATCH 097/421] api: remove those evil extra newlines Signed-off-by: Rohit Yadav --- .../cloudstack/api/view/vo/ProjectJoinVO.java | 112 ------------------ .../projects/dao/ProjectJoinDaoImpl.java | 22 ---- 2 files changed, 134 deletions(-) diff --git a/api/src/org/apache/cloudstack/api/view/vo/ProjectJoinVO.java b/api/src/org/apache/cloudstack/api/view/vo/ProjectJoinVO.java index f4226d3bbea..a3f28a19ca3 100644 --- a/api/src/org/apache/cloudstack/api/view/vo/ProjectJoinVO.java +++ b/api/src/org/apache/cloudstack/api/view/vo/ProjectJoinVO.java @@ -101,69 +101,45 @@ public class ProjectJoinVO extends BaseViewVO { @Column(name="tag_customer") private String tagCustomer; - public ProjectJoinVO() { } - - - public String getUuid() { return uuid; } - - - public void setUuid(String uuid) { this.uuid = uuid; } - - public String getName() { return name; } - public void setName(String name) { this.name = name; } - - - - - public long getDomainId() { return domainId; } - public void setDomainId(long domainId) { this.domainId = domainId; } - public String getDomainUuid() { return domainUuid; } - - - public void setDomainUuid(String domainUuid) { this.domainUuid = domainUuid; } - - - public String getDomainName() { return domainName; } - public void setDomainName(String domainName) { this.domainName = domainName; } @@ -172,224 +148,136 @@ public class ProjectJoinVO extends BaseViewVO { 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 getDisplayText() { return displayText; } - - - public void setDisplayText(String displayText) { this.displayText = displayText; } - - - public String getOwner() { return owner; } - - - public void setOwner(String owner) { this.owner = owner; } - - - public long getTagId() { return tagId; } - - - public void setTagId(long tagId) { this.tagId = tagId; } - - - public String getTagUuid() { return tagUuid; } - - - public void setTagUuid(String tagUuid) { this.tagUuid = tagUuid; } - - - public String getTagKey() { return tagKey; } - - - public void setTagKey(String tagKey) { this.tagKey = tagKey; } - - - public String getTagValue() { return tagValue; } - - - public void setTagValue(String tagValue) { this.tagValue = tagValue; } - - - public long getTagDomainId() { return tagDomainId; } - - - public void setTagDomainId(long tagDomainId) { this.tagDomainId = tagDomainId; } - - - public long getTagAccountId() { return tagAccountId; } - - - public void setTagAccountId(long tagAccountId) { this.tagAccountId = tagAccountId; } - - - public long getTagResourceId() { return tagResourceId; } - - - public void setTagResourceId(long tagResourceId) { this.tagResourceId = tagResourceId; } - - - public String getTagResourceUuid() { return tagResourceUuid; } - - - public void setTagResourceUuid(String tagResourceUuid) { this.tagResourceUuid = tagResourceUuid; } - - - public TaggedResourceType getTagResourceType() { return tagResourceType; } - - - public void setTagResourceType(TaggedResourceType tagResourceType) { this.tagResourceType = tagResourceType; } - - - public String getTagCustomer() { return tagCustomer; } - - - public void setTagCustomer(String tagCustomer) { this.tagCustomer = tagCustomer; } - - - public long getAccountId() { return accountId; } - - - public void setAccountId(long accountId) { this.accountId = accountId; } - - - } diff --git a/server/src/com/cloud/projects/dao/ProjectJoinDaoImpl.java b/server/src/com/cloud/projects/dao/ProjectJoinDaoImpl.java index dc6ba866d06..81ccb7f5256 100644 --- a/server/src/com/cloud/projects/dao/ProjectJoinDaoImpl.java +++ b/server/src/com/cloud/projects/dao/ProjectJoinDaoImpl.java @@ -31,7 +31,6 @@ import com.cloud.utils.db.GenericDaoBase; import com.cloud.utils.db.SearchBuilder; import com.cloud.utils.db.SearchCriteria; - @Local(value={ProjectJoinDao.class}) public class ProjectJoinDaoImpl extends GenericDaoBase implements ProjectJoinDao { public static final Logger s_logger = Logger.getLogger(ProjectJoinDaoImpl.class); @@ -40,7 +39,6 @@ public class ProjectJoinDaoImpl extends GenericDaoBase impl private SearchBuilder vrIdSearch; - protected ProjectJoinDaoImpl() { vrSearch = createSearchBuilder(); @@ -54,11 +52,6 @@ public class ProjectJoinDaoImpl extends GenericDaoBase impl this._count = "select count(distinct id) from project_view WHERE "; } - - - - - @Override public ProjectResponse newProjectResponse(ProjectJoinVO proj) { ProjectResponse response = new ProjectResponse(); @@ -85,8 +78,6 @@ public class ProjectJoinDaoImpl extends GenericDaoBase impl return response; } - - @Override public ProjectResponse setProjectResponse(ProjectResponse rsp, ProjectJoinVO proj) { // update tag information @@ -100,11 +91,6 @@ public class ProjectJoinDaoImpl extends GenericDaoBase impl return rsp; } - - - - - @Override public List newProjectView(Project proj) { SearchCriteria sc = vrIdSearch.create(); @@ -112,11 +98,6 @@ public class ProjectJoinDaoImpl extends GenericDaoBase impl return searchIncludingRemoved(sc, null, null, false); } - - - - - @Override public List searchByIds(Long... ids) { SearchCriteria sc = vrSearch.create(); @@ -124,7 +105,4 @@ public class ProjectJoinDaoImpl extends GenericDaoBase impl return searchIncludingRemoved(sc, null, null, false); } - - - } From 6ce68b93ccfe23c4001713ae38c6422029891726 Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Tue, 11 Dec 2012 14:10:36 -0800 Subject: [PATCH 098/421] api: Fix APIAccessChecker and StaticRoleBasedAPIAccessChecker - Add getCmd api interface in APIAccessChecker adapter to get cmd properties - Add mechanism in StaticRoleBasedAPIAccessChecker to get config properties - Add public interface to get the cmd properties for the adapter impl Signed-off-by: Rohit Yadav --- api/src/com/cloud/acl/APIAccessChecker.java | 8 ++++++-- .../cloud/acl/StaticRoleBasedAPIAccessChecker.java | 14 +++++++++++--- 2 files changed, 17 insertions(+), 5 deletions(-) diff --git a/api/src/com/cloud/acl/APIAccessChecker.java b/api/src/com/cloud/acl/APIAccessChecker.java index 4ccf49f49fb..234f665cfe4 100644 --- a/api/src/com/cloud/acl/APIAccessChecker.java +++ b/api/src/com/cloud/acl/APIAccessChecker.java @@ -16,6 +16,8 @@ // under the License. package com.cloud.acl; +import java.util.Properties; + import com.cloud.exception.PermissionDeniedException; import com.cloud.user.Account; import com.cloud.user.User; @@ -25,6 +27,8 @@ import com.cloud.utils.component.Adapter; * APIAccessChecker checks the ownership and access control to API requests */ public interface APIAccessChecker extends Adapter { - - boolean canAccessAPI(User user, String apiCommandName) throws PermissionDeniedException; + // Interface for checking access to an API for a user + boolean canAccessAPI(User user, String apiCommandName) throws PermissionDeniedException; + // Interface for getting API Cmd properties + Properties getApiCommands(); } diff --git a/server/src/com/cloud/acl/StaticRoleBasedAPIAccessChecker.java b/server/src/com/cloud/acl/StaticRoleBasedAPIAccessChecker.java index cff098a3a52..29dbc13b0f4 100644 --- a/server/src/com/cloud/acl/StaticRoleBasedAPIAccessChecker.java +++ b/server/src/com/cloud/acl/StaticRoleBasedAPIAccessChecker.java @@ -61,6 +61,7 @@ public class StaticRoleBasedAPIAccessChecker extends AdapterBase implements APIA private static List s_resourceDomainAdminCommands = null; private static List s_allCommands = null; private static List s_pluggableServiceCommands = null; + private Properties _apiCommands = null; protected @Inject AccountManager _accountMgr; @@ -90,6 +91,11 @@ public class StaticRoleBasedAPIAccessChecker extends AdapterBase implements APIA return commandExists; } + @Override + public Properties getApiCommands() { + return _apiCommands; + } + private static boolean isCommandAvailableForAccount(short accountType, String commandName) { boolean isCommandAvailable = false; switch (accountType) { @@ -140,6 +146,9 @@ public class StaticRoleBasedAPIAccessChecker extends AdapterBase implements APIA private void processConfigFiles(String[] apiConfig, boolean pluggableServicesConfig) { try { + if (_apiCommands == null) + _apiCommands = new Properties(); + Properties preProcessedCommands = new Properties(); if (apiConfig != null) { for (String configFile : apiConfig) { @@ -161,7 +170,7 @@ public class StaticRoleBasedAPIAccessChecker extends AdapterBase implements APIA for (Object key : preProcessedCommands.keySet()) { String preProcessedCommand = preProcessedCommands.getProperty((String) key); String[] commandParts = preProcessedCommand.split(";"); - + _apiCommands.setProperty(key.toString(), commandParts[0]); if (pluggableServicesConfig) { s_pluggableServiceCommands.add(commandParts[0]); @@ -196,8 +205,7 @@ public class StaticRoleBasedAPIAccessChecker extends AdapterBase implements APIA } catch (FileNotFoundException fnfex) { s_logger.error("Unable to find properties file", fnfex); } catch (IOException ioex) { - s_logger.error("Exception loading properties file", ioex); + s_logger.error("IO Exception loading properties file", ioex); } } - } From 79b54e6ac1eea7ccc6a76255be3770f4e8b03703 Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Tue, 11 Dec 2012 14:16:25 -0800 Subject: [PATCH 099/421] api: Fix obj injections in ApiServer - Inject classes using Inject annotation - Don't misuse component locator Signed-off-by: Rohit Yadav --- server/src/com/cloud/api/ApiServer.java | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/server/src/com/cloud/api/ApiServer.java b/server/src/com/cloud/api/ApiServer.java index 8a41966ff67..2719765227b 100755 --- a/server/src/com/cloud/api/ApiServer.java +++ b/server/src/com/cloud/api/ApiServer.java @@ -127,18 +127,19 @@ public class ApiServer implements HttpRequestHandler { public static boolean encodeApiResponse = false; public static String jsonContentType = "text/javascript"; - private Properties _apiCommands = null; private ApiDispatcher _dispatcher; - private AccountManager _accountMgr = null; - private DomainManager _domainMgr = null; - private AsyncJobManager _asyncMgr = null; + + @Inject private AccountManager _accountMgr = null; + @Inject private DomainManager _domainMgr = null; + @Inject private AsyncJobManager _asyncMgr = null; + @Inject(adapter = APIAccessChecker.class) + protected Adapters _apiAccessCheckers; + private Account _systemAccount = null; private User _systemUser = null; private static int _workerCount = 0; private static ApiServer s_instance = null; private static final DateFormat _dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ"); - @Inject(adapter = APIAccessChecker.class) - protected Adapters _apiAccessCheckers; private static ExecutorService _executor = new ThreadPoolExecutor(10, 150, 60, TimeUnit.SECONDS, new LinkedBlockingQueue(), new NamedThreadFactory("ApiServer")); @@ -169,15 +170,12 @@ public class ApiServer implements HttpRequestHandler { BaseCmd.setComponents(new ApiResponseHelper()); BaseListCmd.configure(); - ComponentLocator locator = ComponentLocator.getLocator(ManagementServer.Name); - _accountMgr = locator.getManager(AccountManager.class); - _asyncMgr = locator.getManager(AsyncJobManager.class); _systemAccount = _accountMgr.getSystemAccount(); _systemUser = _accountMgr.getSystemUser(); _dispatcher = ApiDispatcher.getInstance(); - _domainMgr = locator.getManager(DomainManager.class); Integer apiPort = null; // api port, null by default + ComponentLocator locator = ComponentLocator.getLocator(ManagementServer.Name); ConfigurationDao configDao = locator.getDao(ConfigurationDao.class); SearchCriteria sc = configDao.createSearchCriteria(); sc.addAnd("name", SearchCriteria.Op.EQ, "integration.api.port"); From c455cf9271042b7897a55fc12e96cc8ce2640259 Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Tue, 11 Dec 2012 14:17:47 -0800 Subject: [PATCH 100/421] api: refactor common code to get classname for an api in ApiServer - Refactor common code to get classname from apiname - Fix search mechanism within api access checker adapter to: * check permissions * get class name for an apiname Signed-off-by: Rohit Yadav --- server/src/com/cloud/api/ApiServer.java | 24 +++++++++++++++++------- 1 file changed, 17 insertions(+), 7 deletions(-) diff --git a/server/src/com/cloud/api/ApiServer.java b/server/src/com/cloud/api/ApiServer.java index 2719765227b..38bae138786 100755 --- a/server/src/com/cloud/api/ApiServer.java +++ b/server/src/com/cloud/api/ApiServer.java @@ -310,7 +310,8 @@ public class ApiServer implements HttpRequestHandler { } paramMap.put(key, decodedValue); } - String cmdClassName = _apiCommands.getProperty(command[0]); + + String cmdClassName = getCmdClassName(command[0]); if (cmdClassName != null) { Class cmdClass = Class.forName(cmdClassName); BaseCmd cmdObj = (BaseCmd) cmdClass.newInstance(); @@ -768,13 +769,22 @@ public class ApiServer implements HttpRequestHandler { } private boolean isCommandAvailable(User user, String commandName) { - boolean isCommandAvailable = false; - - for(APIAccessChecker apichecker : _apiAccessCheckers){ - isCommandAvailable = apichecker.canAccessAPI(user, commandName); + for(APIAccessChecker apichecker : _apiAccessCheckers) { + if (apichecker.canAccessAPI(user, commandName)) + return true; } + return false; + } - return isCommandAvailable; + private String getCmdClassName(String cmdName) { + String cmdClassName = null; + for(APIAccessChecker apiChecker : _apiAccessCheckers){ + cmdClassName = apiChecker.getApiCommands().getProperty(cmdName); + // Break on the first non-null value + if (cmdClassName != null) + return cmdClassName; + } + return null; } // FIXME: rather than isError, we might was to pass in the status code to give more flexibility @@ -921,7 +931,7 @@ public class ApiServer implements HttpRequestHandler { // cmd name can be null when "command" parameter is missing in the request if (cmdObj != null) { String cmdName = ((String[]) cmdObj)[0]; - cmdClassName = _apiCommands.getProperty(cmdName); + cmdClassName = getCmdClassName(cmdName); if (cmdClassName != null) { Class claz = Class.forName(cmdClassName); responseName = ((BaseCmd) claz.newInstance()).getCommandName(); From 9c93fee0dcde2927d9819cf82b86237b632f35d0 Mon Sep 17 00:00:00 2001 From: Min Chen Date: Tue, 11 Dec 2012 15:42:52 -0800 Subject: [PATCH 101/421] Refactor ListProjectAccountCmd and ProjectAccountResponse. --- .../com/cloud/projects/ProjectService.java | 3 +- .../cloudstack/api/ResponseGenerator.java | 3 + .../user/account/ListProjectAccountsCmd.java | 10 +- .../api/response/ProjectAccountResponse.java | 20 +- .../api/view/vo/ProjectAccountJoinVO.java | 205 ++++++++++++++++++ server/src/com/cloud/api/ApiDBUtils.java | 18 ++ .../src/com/cloud/api/ApiResponseHelper.java | 38 ++-- .../DefaultComponentLibrary.java | 2 + .../cloud/projects/ProjectManagerImpl.java | 21 +- .../projects/dao/ProjectAccountJoinDao.java | 33 +++ .../dao/ProjectAccountJoinDaoImpl.java | 85 ++++++++ .../cloud/user/dao/UserAccountJoinDao.java | 2 + .../user/dao/UserAccountJoinDaoImpl.java | 16 ++ .../projects/MockProjectManagerImpl.java | 3 +- setup/db/create-schema.sql | 21 ++ 15 files changed, 430 insertions(+), 50 deletions(-) create mode 100644 api/src/org/apache/cloudstack/api/view/vo/ProjectAccountJoinVO.java create mode 100644 server/src/com/cloud/projects/dao/ProjectAccountJoinDao.java create mode 100644 server/src/com/cloud/projects/dao/ProjectAccountJoinDaoImpl.java diff --git a/api/src/com/cloud/projects/ProjectService.java b/api/src/com/cloud/projects/ProjectService.java index 2ef367b8f75..1e58a9b8ab1 100644 --- a/api/src/com/cloud/projects/ProjectService.java +++ b/api/src/com/cloud/projects/ProjectService.java @@ -19,6 +19,7 @@ package com.cloud.projects; import java.util.List; import java.util.Map; +import org.apache.cloudstack.api.view.vo.ProjectAccountJoinVO; import org.apache.cloudstack.api.view.vo.ProjectJoinVO; import com.cloud.exception.ConcurrentOperationException; @@ -82,7 +83,7 @@ public interface ProjectService { boolean deleteAccountFromProject(long projectId, String accountName); - Pair, Integer> listProjectAccounts(long projectId, String accountName, String role, Long startIndex, Long pageSizeVal); + Pair, Integer> listProjectAccounts(long projectId, String accountName, String role, Long startIndex, Long pageSizeVal); Pair, Integer> listProjectInvitations(Long id, Long projectId, String accountName, Long domainId, String state, boolean activeOnly, Long startIndex, Long pageSizeVal, boolean isRecursive, boolean listAll); diff --git a/api/src/org/apache/cloudstack/api/ResponseGenerator.java b/api/src/org/apache/cloudstack/api/ResponseGenerator.java index 383ecf81253..97fd6d970e3 100644 --- a/api/src/org/apache/cloudstack/api/ResponseGenerator.java +++ b/api/src/org/apache/cloudstack/api/ResponseGenerator.java @@ -153,6 +153,7 @@ import com.cloud.vm.InstanceGroup; import org.apache.cloudstack.api.view.vo.DomainRouterJoinVO; import org.apache.cloudstack.api.view.vo.EventJoinVO; import org.apache.cloudstack.api.view.vo.InstanceGroupJoinVO; +import org.apache.cloudstack.api.view.vo.ProjectAccountJoinVO; import org.apache.cloudstack.api.view.vo.ProjectJoinVO; import org.apache.cloudstack.api.view.vo.ResourceTagJoinVO; import org.apache.cloudstack.api.view.vo.SecurityGroupJoinVO; @@ -304,6 +305,8 @@ public interface ResponseGenerator { ProjectAccountResponse createProjectAccountResponse(ProjectAccount projectAccount); + List createProjectAccountResponse(ProjectAccountJoinVO... projectAccounts); + ProjectInvitationResponse createProjectInvitationResponse(ProjectInvitation invite); SystemVmInstanceResponse createSystemVmInstanceResponse(VirtualMachine systemVM); diff --git a/api/src/org/apache/cloudstack/api/command/user/account/ListProjectAccountsCmd.java b/api/src/org/apache/cloudstack/api/command/user/account/ListProjectAccountsCmd.java index b0cdcd94da0..6db70e7db6a 100644 --- a/api/src/org/apache/cloudstack/api/command/user/account/ListProjectAccountsCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/account/ListProjectAccountsCmd.java @@ -29,6 +29,8 @@ import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.response.ListResponse; import org.apache.cloudstack.api.response.ProjectAccountResponse; import org.apache.cloudstack.api.response.ProjectResponse; +import org.apache.cloudstack.api.view.vo.ProjectAccountJoinVO; + import com.cloud.projects.ProjectAccount; import com.cloud.user.Account; import com.cloud.utils.Pair; @@ -79,14 +81,10 @@ public class ListProjectAccountsCmd extends BaseListCmd { @Override public void execute(){ - Pair, Integer> projectAccounts = _projectService.listProjectAccounts(projectId, + Pair, Integer> projectAccounts = _projectService.listProjectAccounts(projectId, accountName, role, this.getStartIndex(), this.getPageSizeVal()); ListResponse response = new ListResponse(); - List projectResponses = new ArrayList(); - for (ProjectAccount projectAccount : projectAccounts.first()) { - ProjectAccountResponse projectAccountResponse = _responseGenerator.createProjectAccountResponse(projectAccount); - projectResponses.add(projectAccountResponse); - } + List projectResponses = _responseGenerator.createProjectAccountResponse(projectAccounts.first().toArray(new ProjectAccountJoinVO[projectAccounts.first().size()])); response.setResponses(projectResponses, projectAccounts.second()); response.setResponseName(getCommandName()); diff --git a/api/src/org/apache/cloudstack/api/response/ProjectAccountResponse.java b/api/src/org/apache/cloudstack/api/response/ProjectAccountResponse.java index c20c0234376..fadf423b4f7 100644 --- a/api/src/org/apache/cloudstack/api/response/ProjectAccountResponse.java +++ b/api/src/org/apache/cloudstack/api/response/ProjectAccountResponse.java @@ -25,10 +25,10 @@ import com.google.gson.annotations.SerializedName; import org.apache.cloudstack.api.BaseResponse; @SuppressWarnings("unused") -public class ProjectAccountResponse extends BaseResponse implements ControlledEntityResponse { +public class ProjectAccountResponse extends BaseResponse implements ControlledViewEntityResponse { @SerializedName(ApiConstants.PROJECT_ID) @Param(description = "project id") - private IdentityProxy projectId = new IdentityProxy("projects"); + private String projectId; @SerializedName(ApiConstants.PROJECT) @Param(description = "project name") @@ -36,7 +36,7 @@ public class ProjectAccountResponse extends BaseResponse implements ControlledEn @SerializedName(ApiConstants.ACCOUNT_ID) @Param(description = "the id of the account") - private IdentityProxy id = new IdentityProxy("account"); + private String accountId; @SerializedName(ApiConstants.ACCOUNT) @Param(description = "the name of the account") @@ -52,7 +52,7 @@ public class ProjectAccountResponse extends BaseResponse implements ControlledEn @SerializedName(ApiConstants.DOMAIN_ID) @Param(description = "id of the Domain the account belongs too") - private IdentityProxy domainId = new IdentityProxy("domain"); + private String domainId; @SerializedName(ApiConstants.DOMAIN) @Param(description = "name of the Domain the account belongs too") @@ -62,16 +62,16 @@ public class ProjectAccountResponse extends BaseResponse implements ControlledEn @Param(description = "the list of users associated with account", responseObject = UserResponse.class) private List users; - public void setProjectId(Long projectId) { - this.projectId.setValue(projectId); + public void setProjectId(String projectId) { + this.projectId = projectId; } public void setProjectName(String projectName) { this.projectName = projectName; } - public void setId(Long id) { - this.id.setValue(id); + public void setAccountId(String id) { + this.accountId = id; } public void setAccountName(String accountName) { @@ -82,8 +82,8 @@ public class ProjectAccountResponse extends BaseResponse implements ControlledEn this.accountType = accountType; } - public void setDomainId(Long domainId) { - this.domainId.setValue(domainId); + public void setDomainId(String domainId) { + this.domainId = domainId; } public void setDomainName(String domainName) { diff --git a/api/src/org/apache/cloudstack/api/view/vo/ProjectAccountJoinVO.java b/api/src/org/apache/cloudstack/api/view/vo/ProjectAccountJoinVO.java new file mode 100644 index 00000000000..3f253e889dd --- /dev/null +++ b/api/src/org/apache/cloudstack/api/view/vo/ProjectAccountJoinVO.java @@ -0,0 +1,205 @@ +// 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 org.apache.cloudstack.api.view.vo; + +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.projects.ProjectAccount.Role; +import com.cloud.server.ResourceTag.TaggedResourceType; +import com.cloud.utils.db.GenericDao; +import com.cloud.vm.VirtualMachine.State; + +@Entity +@Table(name="project_account_view") +public class ProjectAccountJoinVO extends BaseViewVO { + + @Column(name="account_id") + private long accountId; + + @Column(name="account_uuid") + private String accountUuid; + + @Column(name="account_name") + private String accountName; + + @Column(name="account_type") + private short accountType; + + @Column(name="account_role") + @Enumerated(value=EnumType.STRING) + private Role accountRole; + + @Column(name="domain_id") + private long domainId; + + @Column(name="domain_uuid") + private String domainUuid; + + @Column(name="domain_name") + private String domainName; + + @Column(name="domain_path") + private String domainPath; + + @Column(name="project_id") + private long projectId; + + @Column(name="project_uuid") + private String projectUuid; + + @Column(name="project_name") + private String projectName; + + + public ProjectAccountJoinVO() { + } + + + + public long getDomainId() { + return domainId; + } + + public void setDomainId(long domainId) { + this.domainId = domainId; + } + + public String getDomainUuid() { + return domainUuid; + } + + public void setDomainUuid(String domainUuid) { + this.domainUuid = domainUuid; + } + + public String getDomainName() { + return domainName; + } + + public void setDomainName(String domainName) { + this.domainName = domainName; + } + + public String getDomainPath() { + return domainPath; + } + + public void setDomainPath(String domainPath) { + this.domainPath = domainPath; + } + + public long 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 Role getAccountRole() { + return accountRole; + } + + + + public void setAccountRole(Role accountRole) { + this.accountRole = accountRole; + } + + + + 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; + } + + + +} diff --git a/server/src/com/cloud/api/ApiDBUtils.java b/server/src/com/cloud/api/ApiDBUtils.java index a60f91b3676..4b889d641da 100755 --- a/server/src/com/cloud/api/ApiDBUtils.java +++ b/server/src/com/cloud/api/ApiDBUtils.java @@ -26,6 +26,7 @@ import org.apache.cloudstack.api.ApiConstants.VMDetails; import org.apache.cloudstack.api.response.DomainRouterResponse; import org.apache.cloudstack.api.response.EventResponse; import org.apache.cloudstack.api.response.InstanceGroupResponse; +import org.apache.cloudstack.api.response.ProjectAccountResponse; import org.apache.cloudstack.api.response.ProjectResponse; import org.apache.cloudstack.api.response.ResourceTagResponse; import org.apache.cloudstack.api.response.SecurityGroupResponse; @@ -34,6 +35,7 @@ import org.apache.cloudstack.api.response.UserVmResponse; import org.apache.cloudstack.api.view.vo.DomainRouterJoinVO; import org.apache.cloudstack.api.view.vo.EventJoinVO; import org.apache.cloudstack.api.view.vo.InstanceGroupJoinVO; +import org.apache.cloudstack.api.view.vo.ProjectAccountJoinVO; import org.apache.cloudstack.api.view.vo.ProjectJoinVO; import org.apache.cloudstack.api.view.vo.ResourceTagJoinVO; import org.apache.cloudstack.api.view.vo.SecurityGroupJoinVO; @@ -115,7 +117,9 @@ import com.cloud.offering.ServiceOffering; import com.cloud.offerings.NetworkOfferingVO; import com.cloud.offerings.dao.NetworkOfferingDao; import com.cloud.projects.Project; +import com.cloud.projects.ProjectAccount; import com.cloud.projects.ProjectService; +import com.cloud.projects.dao.ProjectAccountJoinDao; import com.cloud.projects.dao.ProjectJoinDao; import com.cloud.resource.ResourceManager; import com.cloud.server.Criteria; @@ -265,6 +269,7 @@ public class ApiDBUtils { private static InstanceGroupJoinDao _vmGroupJoinDao; private static UserAccountJoinDao _userAccountJoinDao; private static ProjectJoinDao _projectJoinDao; + private static ProjectAccountJoinDao _projectAccountJoinDao; static { _ms = (ManagementServer) ComponentLocator.getComponent(ManagementServer.Name); @@ -1030,4 +1035,17 @@ public class ApiDBUtils { public static List newProjectView(Project proj){ return _projectJoinDao.newProjectView(proj); } + + public static List findUserViewByAccountId(Long accountId){ + return _userAccountJoinDao.searchByAccountId(accountId); + } + + public static ProjectAccountResponse newProjectAccountResponse(ProjectAccountJoinVO proj) { + return _projectAccountJoinDao.newProjectAccountResponse(proj); + } + + public static ProjectAccountJoinVO newProjectAccountView(ProjectAccount proj) { + return _projectAccountJoinDao.newProjectAccountView(proj); + } + } diff --git a/server/src/com/cloud/api/ApiResponseHelper.java b/server/src/com/cloud/api/ApiResponseHelper.java index 76fe58d43b5..604df8191da 100755 --- a/server/src/com/cloud/api/ApiResponseHelper.java +++ b/server/src/com/cloud/api/ApiResponseHelper.java @@ -116,6 +116,7 @@ import org.apache.cloudstack.api.view.vo.DomainRouterJoinVO; import org.apache.cloudstack.api.view.vo.ControlledViewEntity; import org.apache.cloudstack.api.view.vo.EventJoinVO; import org.apache.cloudstack.api.view.vo.InstanceGroupJoinVO; +import org.apache.cloudstack.api.view.vo.ProjectAccountJoinVO; import org.apache.cloudstack.api.view.vo.ProjectJoinVO; import org.apache.cloudstack.api.view.vo.ResourceTagJoinVO; import org.apache.cloudstack.api.view.vo.SecurityGroupJoinVO; @@ -2850,31 +2851,24 @@ public class ApiResponseHelper implements ResponseGenerator { @Override public ProjectAccountResponse createProjectAccountResponse(ProjectAccount projectAccount) { - Account account = ApiDBUtils.findAccountById(projectAccount.getAccountId()); - ProjectAccountResponse projectAccountResponse = new ProjectAccountResponse(); + ProjectAccountJoinVO vProj = ApiDBUtils.newProjectAccountView(projectAccount); + List listProjs = createProjectAccountResponse(vProj); + assert listProjs != null && listProjs.size() == 1 : "There should be one project account returned"; + return listProjs.get(0); + } - long projectId = projectAccount.getProjectId(); - projectAccountResponse.setProjectId(projectId); - projectAccountResponse.setProjectName(ApiDBUtils.findProjectById(projectId).getName()); - projectAccountResponse.setId(account.getId()); - projectAccountResponse.setAccountName(account.getAccountName()); - projectAccountResponse.setAccountType(account.getType()); - projectAccountResponse.setRole(projectAccount.getAccountRole().toString()); - populateDomain(projectAccountResponse, account.getDomainId()); - - // add all the users for an account as part of the response obj - List usersForAccount = ApiDBUtils.listUsersByAccount(account.getAccountId()); - List userResponseList = new ArrayList(); - for (UserVO user : usersForAccount) { - UserResponse userResponse = createUserResponse(user); - userResponseList.add(userResponse); + @Override + public List createProjectAccountResponse(ProjectAccountJoinVO... projectAccounts) { + List responseList = new ArrayList(); + for (ProjectAccountJoinVO proj : projectAccounts){ + ProjectAccountResponse resp = ApiDBUtils.newProjectAccountResponse(proj); + // update user list + List users = ApiDBUtils.findUserViewByAccountId(proj.getAccountId()); + resp.setUsers(createUserResponse(users.toArray(new UserAccountJoinVO[users.size()]))); + responseList.add(resp); } - - projectAccountResponse.setUsers(userResponseList); - projectAccountResponse.setObjectName("projectaccount"); - - return projectAccountResponse; + return responseList; } @Override diff --git a/server/src/com/cloud/configuration/DefaultComponentLibrary.java b/server/src/com/cloud/configuration/DefaultComponentLibrary.java index af7a84dcfc6..0dcdfd2e10e 100755 --- a/server/src/com/cloud/configuration/DefaultComponentLibrary.java +++ b/server/src/com/cloud/configuration/DefaultComponentLibrary.java @@ -213,6 +213,7 @@ import com.cloud.vm.dao.UserVmJoinDaoImpl; import com.cloud.vm.dao.UserVmDetailsDaoImpl; import com.cloud.vm.dao.VMInstanceDaoImpl; import com.cloud.event.dao.EventJoinDaoImpl; +import com.cloud.projects.dao.ProjectAccountJoinDaoImpl; public class DefaultComponentLibrary extends ComponentLibraryBase implements ComponentLibrary { @@ -231,6 +232,7 @@ public class DefaultComponentLibrary extends ComponentLibraryBase implements Com addDao("EventJoinDao", EventJoinDaoImpl.class); addDao("UserAccountJoinDao", UserAccountJoinDaoImpl.class); addDao("ProjectJoinDao", ProjectJoinDaoImpl.class); + addDao("ProjectAccountJoinDao", ProjectAccountJoinDaoImpl.class); ComponentInfo> info = addDao("ServiceOfferingDao", ServiceOfferingDaoImpl.class); info.addParameter("cache.size", "50"); info.addParameter("cache.time.to.live", "600"); diff --git a/server/src/com/cloud/projects/ProjectManagerImpl.java b/server/src/com/cloud/projects/ProjectManagerImpl.java index d9ff0b34277..c84395d6227 100755 --- a/server/src/com/cloud/projects/ProjectManagerImpl.java +++ b/server/src/com/cloud/projects/ProjectManagerImpl.java @@ -38,6 +38,7 @@ import javax.mail.URLName; import javax.mail.internet.InternetAddress; import javax.naming.ConfigurationException; +import org.apache.cloudstack.api.view.vo.ProjectAccountJoinVO; import org.apache.cloudstack.api.view.vo.ProjectJoinVO; import org.apache.cloudstack.api.view.vo.UserVmJoinVO; import org.apache.log4j.Logger; @@ -60,6 +61,7 @@ import com.cloud.projects.Project.ListProjectResourcesCriteria; import com.cloud.projects.Project.State; import com.cloud.projects.ProjectAccount.Role; import com.cloud.projects.dao.ProjectAccountDao; +import com.cloud.projects.dao.ProjectAccountJoinDao; import com.cloud.projects.dao.ProjectDao; import com.cloud.projects.dao.ProjectInvitationDao; import com.cloud.projects.dao.ProjectJoinDao; @@ -117,6 +119,8 @@ public class ProjectManagerImpl implements ProjectManager, Manager{ @Inject private ProjectAccountDao _projectAccountDao; @Inject + private ProjectAccountJoinDao _projectAccountJoinDao; + @Inject private AccountDao _accountDao; @Inject private ConfigurationDao _configDao; @@ -762,7 +766,7 @@ public class ProjectManagerImpl implements ProjectManager, Manager{ @Override - public Pair, Integer> listProjectAccounts(long projectId, String accountName, String role, Long startIndex, Long pageSizeVal) { + public Pair, Integer> listProjectAccounts(long projectId, String accountName, String role, Long startIndex, Long pageSizeVal) { Account caller = UserContext.current().getCaller(); //check that the project exists @@ -777,19 +781,17 @@ public class ProjectManagerImpl implements ProjectManager, Manager{ throw new PermissionDeniedException("Account " + caller + " is not authorized to list users of the project id=" + projectId); } - Filter searchFilter = new Filter(ProjectAccountVO.class, "id", false, startIndex, pageSizeVal); - SearchBuilder sb = _projectAccountDao.createSearchBuilder(); + Filter searchFilter = new Filter(ProjectAccountJoinVO.class, "id", false, startIndex, pageSizeVal); + SearchBuilder sb = _projectAccountJoinDao.createSearchBuilder(); sb.and("accountRole", sb.entity().getAccountRole(), Op.EQ); sb.and("projectId", sb.entity().getProjectId(), Op.EQ); SearchBuilder accountSearch; if (accountName != null) { - accountSearch = _accountDao.createSearchBuilder(); - accountSearch.and("accountName", accountSearch.entity().getAccountName(), SearchCriteria.Op.EQ); - sb.join("accountSearch", accountSearch, sb.entity().getAccountId(), accountSearch.entity().getId(), JoinBuilder.JoinType.INNER); + sb.and("accountName", sb.entity().getAccountName(), Op.EQ); } - SearchCriteria sc = sb.create(); + SearchCriteria sc = sb.create(); sc.setParameters("projectId", projectId); @@ -798,11 +800,10 @@ public class ProjectManagerImpl implements ProjectManager, Manager{ } if (accountName != null) { - sc.setJoinParameters("accountSearch", "accountName", accountName); + sc.setParameters("accountName", accountName); } - Pair, Integer> result = _projectAccountDao.searchAndCount(sc, searchFilter); - return new Pair, Integer>(result.first(), result.second()); + return _projectAccountJoinDao.searchAndCount(sc, searchFilter); } public ProjectInvitation createAccountInvitation(Project project, Long accountId) { diff --git a/server/src/com/cloud/projects/dao/ProjectAccountJoinDao.java b/server/src/com/cloud/projects/dao/ProjectAccountJoinDao.java new file mode 100644 index 00000000000..bdee7aa0970 --- /dev/null +++ b/server/src/com/cloud/projects/dao/ProjectAccountJoinDao.java @@ -0,0 +1,33 @@ +// 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.projects.dao; + +import java.util.List; + +import org.apache.cloudstack.api.response.ProjectAccountResponse; +import org.apache.cloudstack.api.view.vo.ProjectAccountJoinVO; +import com.cloud.projects.ProjectAccount; +import com.cloud.utils.db.GenericDao; + +public interface ProjectAccountJoinDao extends GenericDao { + + ProjectAccountResponse newProjectAccountResponse(ProjectAccountJoinVO proj); + + ProjectAccountJoinVO newProjectAccountView(ProjectAccount proj); + + +} diff --git a/server/src/com/cloud/projects/dao/ProjectAccountJoinDaoImpl.java b/server/src/com/cloud/projects/dao/ProjectAccountJoinDaoImpl.java new file mode 100644 index 00000000000..afea1cb2acc --- /dev/null +++ b/server/src/com/cloud/projects/dao/ProjectAccountJoinDaoImpl.java @@ -0,0 +1,85 @@ +// 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.projects.dao; + +import java.util.List; + +import javax.ejb.Local; + +import org.apache.log4j.Logger; + +import org.apache.cloudstack.api.response.ProjectAccountResponse; +import org.apache.cloudstack.api.view.vo.ProjectAccountJoinVO; +import com.cloud.projects.ProjectAccount; +import com.cloud.utils.db.GenericDaoBase; +import com.cloud.utils.db.SearchBuilder; +import com.cloud.utils.db.SearchCriteria; + +@Local(value={ProjectAccountJoinDao.class}) +public class ProjectAccountJoinDaoImpl extends GenericDaoBase implements ProjectAccountJoinDao { + public static final Logger s_logger = Logger.getLogger(ProjectAccountJoinDaoImpl.class); + + + private SearchBuilder vrIdSearch; + + protected ProjectAccountJoinDaoImpl() { + + vrIdSearch = createSearchBuilder(); + vrIdSearch.and("accountId", vrIdSearch.entity().getAccountId(), SearchCriteria.Op.EQ); + vrIdSearch.and("projectId", vrIdSearch.entity().getProjectId(), SearchCriteria.Op.EQ); + vrIdSearch.done(); + + this._count = "select count(distinct id) from project_account_view WHERE "; + } + + + + + @Override + public ProjectAccountResponse newProjectAccountResponse(ProjectAccountJoinVO proj) { + ProjectAccountResponse projectAccountResponse = new ProjectAccountResponse(); + + projectAccountResponse.setProjectId(proj.getProjectUuid()); + projectAccountResponse.setProjectName(proj.getProjectName()); + + projectAccountResponse.setAccountId(proj.getAccountUuid()); + projectAccountResponse.setAccountName(proj.getAccountName()); + projectAccountResponse.setAccountType(proj.getAccountType()); + projectAccountResponse.setRole(proj.getAccountRole().toString()); + projectAccountResponse.setDomainId(proj.getDomainUuid()); + projectAccountResponse.setDomainName(proj.getDomainName()); + + projectAccountResponse.setObjectName("projectaccount"); + + return projectAccountResponse; + } + + + + + @Override + public ProjectAccountJoinVO newProjectAccountView(ProjectAccount proj) { + SearchCriteria sc = vrIdSearch.create(); + sc.setParameters("accountId", proj.getAccountId()); + sc.setParameters("projectId", proj.getProjectId()); + List grps = searchIncludingRemoved(sc, null, null, false); + assert grps != null && grps.size() == 1 : "No project account found for account id = " + proj.getAccountId() + " and project id = " + proj.getProjectId(); + return grps.get(0); + } + + +} diff --git a/server/src/com/cloud/user/dao/UserAccountJoinDao.java b/server/src/com/cloud/user/dao/UserAccountJoinDao.java index 05858d022c2..39a82d05c74 100644 --- a/server/src/com/cloud/user/dao/UserAccountJoinDao.java +++ b/server/src/com/cloud/user/dao/UserAccountJoinDao.java @@ -35,4 +35,6 @@ public interface UserAccountJoinDao extends GenericDao List searchByIds(Long... ids); + List searchByAccountId(Long accountId); + } diff --git a/server/src/com/cloud/user/dao/UserAccountJoinDaoImpl.java b/server/src/com/cloud/user/dao/UserAccountJoinDaoImpl.java index 8ffff0f82f0..e854ae5c493 100644 --- a/server/src/com/cloud/user/dao/UserAccountJoinDaoImpl.java +++ b/server/src/com/cloud/user/dao/UserAccountJoinDaoImpl.java @@ -46,6 +46,8 @@ public class UserAccountJoinDaoImpl extends GenericDaoBase vrIdSearch; + private SearchBuilder vrAcctIdSearch; + protected UserAccountJoinDaoImpl() { @@ -57,6 +59,11 @@ public class UserAccountJoinDaoImpl extends GenericDaoBase searchByAccountId(Long accountId) { + SearchCriteria sc = vrAcctIdSearch.create(); + sc.setParameters("accountId", accountId); + return searchIncludingRemoved(sc, null, null, false); + } + + + } diff --git a/server/test/com/cloud/projects/MockProjectManagerImpl.java b/server/test/com/cloud/projects/MockProjectManagerImpl.java index dad777a8b77..6529d12721e 100644 --- a/server/test/com/cloud/projects/MockProjectManagerImpl.java +++ b/server/test/com/cloud/projects/MockProjectManagerImpl.java @@ -22,6 +22,7 @@ import java.util.Map; import javax.ejb.Local; import javax.naming.ConfigurationException; +import org.apache.cloudstack.api.view.vo.ProjectAccountJoinVO; import org.apache.cloudstack.api.view.vo.ProjectJoinVO; import com.cloud.exception.ConcurrentOperationException; @@ -108,7 +109,7 @@ public class MockProjectManagerImpl implements ProjectManager, Manager { } @Override - public Pair, Integer> listProjectAccounts(long projectId, + public Pair, Integer> listProjectAccounts(long projectId, String accountName, String role, Long startIndex, Long pageSizeVal) { // TODO Auto-generated method stub return null; diff --git a/setup/db/create-schema.sql b/setup/db/create-schema.sql index 6699d766193..8e8c448fdd8 100755 --- a/setup/db/create-schema.sql +++ b/setup/db/create-schema.sql @@ -2923,3 +2923,24 @@ inner join project_account on projects.id = project_account.project_id and proje inner join account on account.id = project_account.account_id left join resource_tags on resource_tags.resource_id = projects.id and resource_tags.resource_type = "Project" left join project_account pacct on projects.id = pacct.project_id; + +DROP VIEW IF EXISTS `cloud`.`project_account_view`; +CREATE VIEW project_account_view AS +select +project_account.id, +account.id account_id, +account.uuid account_uuid, +account.account_name, +account.type account_type, +project_account.account_role, +projects.id project_id, +projects.uuid project_uuid, +projects.name project_name, +domain.id domain_id, +domain.uuid domain_uuid, +domain.name domain_name, +domain.path domain_path +from project_account +inner join account on project_account.account_id = account.id +inner join domain on account.domain_id=domain.id +inner join projects on projects.id = project_account.project_id; From 3661f7f99293838d18b53326b43cd486456ec60f Mon Sep 17 00:00:00 2001 From: Min Chen Date: Tue, 11 Dec 2012 17:14:14 -0800 Subject: [PATCH 102/421] Fix several bugs of new refactored list apis. --- .../cloudstack/api/view/vo/BaseViewVO.java | 14 +++------ .../api/view/vo/DomainRouterJoinVO.java | 30 +++++++++++++++++-- .../cloudstack/api/view/vo/EventJoinVO.java | 14 +++++++++ .../api/view/vo/InstanceGroupJoinVO.java | 15 ++++++++++ .../api/view/vo/ProjectAccountJoinVO.java | 18 +++++++---- .../cloudstack/api/view/vo/ProjectJoinVO.java | 15 ++++++++++ .../api/view/vo/ResourceTagJoinVO.java | 4 +++ .../api/view/vo/SecurityGroupJoinVO.java | 13 ++++++++ .../api/view/vo/UserAccountJoinVO.java | 16 ++++++++-- .../cloudstack/api/view/vo/UserVmJoinVO.java | 21 +++++++++++++ server/src/com/cloud/api/ApiDBUtils.java | 4 +++ 11 files changed, 144 insertions(+), 20 deletions(-) diff --git a/api/src/org/apache/cloudstack/api/view/vo/BaseViewVO.java b/api/src/org/apache/cloudstack/api/view/vo/BaseViewVO.java index ca7cacb3557..469944f5926 100644 --- a/api/src/org/apache/cloudstack/api/view/vo/BaseViewVO.java +++ b/api/src/org/apache/cloudstack/api/view/vo/BaseViewVO.java @@ -20,22 +20,16 @@ import javax.persistence.Column; public abstract class BaseViewVO { - @Column(name="id", updatable=false, nullable = false) - protected long id; + public abstract long getId(); - public long getId() { - return id; - } + public abstract void setId(long id); - public void setId(long id) { - this.id = id; - } @Override public int hashCode() { final int prime = 31; int result = 1; - result = prime * result + (int) (id ^ (id >>> 32)); + result = prime * result + (int) (getId() ^ (getId() >>> 32)); return result; } @@ -48,7 +42,7 @@ public abstract class BaseViewVO { if (getClass() != obj.getClass()) return false; BaseViewVO other = (BaseViewVO) obj; - if (id != other.id) + if (getId() != other.getId()) return false; return true; } diff --git a/api/src/org/apache/cloudstack/api/view/vo/DomainRouterJoinVO.java b/api/src/org/apache/cloudstack/api/view/vo/DomainRouterJoinVO.java index d7d31b0ba00..e6615f44df5 100644 --- a/api/src/org/apache/cloudstack/api/view/vo/DomainRouterJoinVO.java +++ b/api/src/org/apache/cloudstack/api/view/vo/DomainRouterJoinVO.java @@ -35,9 +35,11 @@ import com.cloud.vm.VirtualMachine.State; @Table(name="domain_router_view") public class DomainRouterJoinVO extends BaseViewVO 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; + private String name = null; @Column(name="account_id") @@ -225,7 +227,22 @@ public class DomainRouterJoinVO extends BaseViewVO implements ControlledViewEnti - public String getUuid() { + @Override + public long getId() { + return id; + } + + + @Override + public void setId(long id) { + this.id = id; + + } + + + + + public String getUuid() { return uuid; } @@ -250,6 +267,7 @@ public class DomainRouterJoinVO extends BaseViewVO implements ControlledViewEnti + @Override public long getAccountId() { return accountId; } @@ -260,6 +278,7 @@ public class DomainRouterJoinVO extends BaseViewVO implements ControlledViewEnti } + @Override public String getAccountUuid() { return accountUuid; } @@ -274,6 +293,7 @@ public class DomainRouterJoinVO extends BaseViewVO implements ControlledViewEnti + @Override public String getAccountName() { return accountName; } @@ -284,6 +304,7 @@ public class DomainRouterJoinVO extends BaseViewVO implements ControlledViewEnti } + @Override public short getAccountType() { return accountType; } @@ -294,6 +315,7 @@ public class DomainRouterJoinVO extends BaseViewVO implements ControlledViewEnti } + @Override public long getDomainId() { return domainId; } @@ -318,6 +340,7 @@ public class DomainRouterJoinVO extends BaseViewVO implements ControlledViewEnti + @Override public String getDomainName() { return domainName; } @@ -327,6 +350,7 @@ public class DomainRouterJoinVO extends BaseViewVO implements ControlledViewEnti this.domainName = domainName; } + @Override public String getDomainPath() { return domainPath; } @@ -656,6 +680,7 @@ public class DomainRouterJoinVO extends BaseViewVO implements ControlledViewEnti + @Override public String getProjectUuid() { return projectUuid; } @@ -670,6 +695,7 @@ public class DomainRouterJoinVO extends BaseViewVO implements ControlledViewEnti + @Override public String getProjectName() { return projectName; } diff --git a/api/src/org/apache/cloudstack/api/view/vo/EventJoinVO.java b/api/src/org/apache/cloudstack/api/view/vo/EventJoinVO.java index e8619d6fef9..7a3de601d7c 100644 --- a/api/src/org/apache/cloudstack/api/view/vo/EventJoinVO.java +++ b/api/src/org/apache/cloudstack/api/view/vo/EventJoinVO.java @@ -31,6 +31,9 @@ import com.cloud.event.Event.State; @Table(name="event_view") public class EventJoinVO extends BaseViewVO implements ControlledViewEntity { + @Column(name="id", updatable=false, nullable = false) + private long id; + @Column(name="uuid") private String uuid; @@ -104,6 +107,17 @@ public class EventJoinVO extends BaseViewVO implements ControlledViewEntity { public EventJoinVO() { } + @Override + public long getId() { + return id; + } + + @Override + public void setId(long id) { + this.id = id; + + } + public String getUuid() { return uuid; } diff --git a/api/src/org/apache/cloudstack/api/view/vo/InstanceGroupJoinVO.java b/api/src/org/apache/cloudstack/api/view/vo/InstanceGroupJoinVO.java index 09194876f1a..a473216432b 100644 --- a/api/src/org/apache/cloudstack/api/view/vo/InstanceGroupJoinVO.java +++ b/api/src/org/apache/cloudstack/api/view/vo/InstanceGroupJoinVO.java @@ -28,6 +28,9 @@ import com.cloud.utils.db.GenericDao; @Table(name="instance_group_view") public class InstanceGroupJoinVO extends BaseViewVO implements ControlledViewEntity { + @Column(name="id", updatable=false, nullable = false) + private long id; + @Column(name="uuid") private String uuid; @@ -80,6 +83,18 @@ public class InstanceGroupJoinVO extends BaseViewVO implements ControlledViewEnt public InstanceGroupJoinVO() { } + @Override + public long getId() { + return id; + } + + + @Override + public void setId(long id) { + this.id = id; + + } + public String getUuid() { return uuid; } diff --git a/api/src/org/apache/cloudstack/api/view/vo/ProjectAccountJoinVO.java b/api/src/org/apache/cloudstack/api/view/vo/ProjectAccountJoinVO.java index 3f253e889dd..d6845bdd137 100644 --- a/api/src/org/apache/cloudstack/api/view/vo/ProjectAccountJoinVO.java +++ b/api/src/org/apache/cloudstack/api/view/vo/ProjectAccountJoinVO.java @@ -16,8 +16,6 @@ // under the License. package org.apache.cloudstack.api.view.vo; -import java.util.Date; - import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.EnumType; @@ -25,14 +23,14 @@ import javax.persistence.Enumerated; import javax.persistence.Table; import com.cloud.projects.ProjectAccount.Role; -import com.cloud.server.ResourceTag.TaggedResourceType; -import com.cloud.utils.db.GenericDao; -import com.cloud.vm.VirtualMachine.State; @Entity @Table(name="project_account_view") public class ProjectAccountJoinVO extends BaseViewVO { + @Column(name="id", updatable=false, nullable = false) + private long id; + @Column(name="account_id") private long accountId; @@ -74,8 +72,18 @@ public class ProjectAccountJoinVO extends BaseViewVO { public ProjectAccountJoinVO() { } + @Override + public long getId() { + return id; + } + @Override + public void setId(long id) { + this.id = id; + + } + public long getDomainId() { return domainId; } diff --git a/api/src/org/apache/cloudstack/api/view/vo/ProjectJoinVO.java b/api/src/org/apache/cloudstack/api/view/vo/ProjectJoinVO.java index a3f28a19ca3..0bc9cd8b013 100644 --- a/api/src/org/apache/cloudstack/api/view/vo/ProjectJoinVO.java +++ b/api/src/org/apache/cloudstack/api/view/vo/ProjectJoinVO.java @@ -32,6 +32,9 @@ import com.cloud.vm.VirtualMachine.State; @Table(name="project_view") public class ProjectJoinVO extends BaseViewVO { + @Column(name="id", updatable=false, nullable = false) + private long id; + @Column(name="uuid") private String uuid; @@ -104,6 +107,18 @@ public class ProjectJoinVO extends BaseViewVO { public ProjectJoinVO() { } + @Override + public long getId() { + return id; + } + + + @Override + public void setId(long id) { + this.id = id; + + } + public String getUuid() { return uuid; } diff --git a/api/src/org/apache/cloudstack/api/view/vo/ResourceTagJoinVO.java b/api/src/org/apache/cloudstack/api/view/vo/ResourceTagJoinVO.java index 052149b2eed..00d161115d4 100644 --- a/api/src/org/apache/cloudstack/api/view/vo/ResourceTagJoinVO.java +++ b/api/src/org/apache/cloudstack/api/view/vo/ResourceTagJoinVO.java @@ -28,6 +28,8 @@ import com.cloud.server.ResourceTag.TaggedResourceType; @Table(name="resource_tag_view") public class ResourceTagJoinVO extends BaseViewVO implements ControlledViewEntity { + @Column(name="id", updatable=false, nullable = false) + private long id; @Column(name="uuid") private String uuid; @@ -100,10 +102,12 @@ public class ResourceTagJoinVO extends BaseViewVO implements ControlledViewEntit this.uuid = uuid; } + @Override public long getId() { return id; } + @Override public void setId(long id) { this.id = id; } diff --git a/api/src/org/apache/cloudstack/api/view/vo/SecurityGroupJoinVO.java b/api/src/org/apache/cloudstack/api/view/vo/SecurityGroupJoinVO.java index 80cab110a97..ac4c114466e 100644 --- a/api/src/org/apache/cloudstack/api/view/vo/SecurityGroupJoinVO.java +++ b/api/src/org/apache/cloudstack/api/view/vo/SecurityGroupJoinVO.java @@ -29,6 +29,9 @@ import com.cloud.server.ResourceTag.TaggedResourceType; @Table(name="security_group_view") public class SecurityGroupJoinVO extends BaseViewVO implements ControlledViewEntity { + @Column(name="id", updatable=false, nullable = false) + private long id; + @Column(name="name") private String name; @@ -138,6 +141,16 @@ public class SecurityGroupJoinVO extends BaseViewVO implements ControlledViewEnt public SecurityGroupJoinVO() { } + @Override + public long getId() { + return id; + } + + @Override + public void setId(long id) { + this.id = id; + } + public String getUuid() { return uuid; } diff --git a/api/src/org/apache/cloudstack/api/view/vo/UserAccountJoinVO.java b/api/src/org/apache/cloudstack/api/view/vo/UserAccountJoinVO.java index 2cecd2cebfa..b3a1b2017ef 100644 --- a/api/src/org/apache/cloudstack/api/view/vo/UserAccountJoinVO.java +++ b/api/src/org/apache/cloudstack/api/view/vo/UserAccountJoinVO.java @@ -20,18 +20,18 @@ 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.utils.db.Encrypt; import com.cloud.utils.db.GenericDao; -import com.cloud.event.Event.State; @Entity @Table(name="user_view") public class UserAccountJoinVO extends BaseViewVO { + @Column(name="id", updatable=false, nullable = false) + private long id; + @Column(name="uuid") private String uuid; @@ -107,6 +107,16 @@ public class UserAccountJoinVO extends BaseViewVO { public UserAccountJoinVO() { } + @Override + public long getId() { + return id; + } + + @Override + public void setId(long id) { + this.id = id; + } + public String getUuid() { return uuid; } diff --git a/api/src/org/apache/cloudstack/api/view/vo/UserVmJoinVO.java b/api/src/org/apache/cloudstack/api/view/vo/UserVmJoinVO.java index 0edf0be3114..d337bdde3a2 100644 --- a/api/src/org/apache/cloudstack/api/view/vo/UserVmJoinVO.java +++ b/api/src/org/apache/cloudstack/api/view/vo/UserVmJoinVO.java @@ -42,6 +42,8 @@ import com.cloud.vm.VirtualMachine.State; @Table(name="user_vm_view") public class UserVmJoinVO extends BaseViewVO 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; @@ -364,6 +366,15 @@ public class UserVmJoinVO extends BaseViewVO implements ControlledViewEntity { } + @Override + public long getId() { + return id; + } + + @Override + public void setId(long id) { + this.id = id; + } public String getUuid() { @@ -407,6 +418,7 @@ public class UserVmJoinVO extends BaseViewVO implements ControlledViewEntity { } + @Override public long getAccountId() { return accountId; } @@ -417,6 +429,7 @@ public class UserVmJoinVO extends BaseViewVO implements ControlledViewEntity { } + @Override public String getAccountUuid() { return accountUuid; } @@ -431,6 +444,7 @@ public class UserVmJoinVO extends BaseViewVO implements ControlledViewEntity { + @Override public String getAccountName() { return accountName; } @@ -441,6 +455,7 @@ public class UserVmJoinVO extends BaseViewVO implements ControlledViewEntity { } + @Override public short getAccountType() { return accountType; } @@ -451,6 +466,7 @@ public class UserVmJoinVO extends BaseViewVO implements ControlledViewEntity { } + @Override public long getDomainId() { return domainId; } @@ -461,6 +477,7 @@ public class UserVmJoinVO extends BaseViewVO implements ControlledViewEntity { } + @Override public String getDomainUuid() { return domainUuid; } @@ -475,6 +492,7 @@ public class UserVmJoinVO extends BaseViewVO implements ControlledViewEntity { + @Override public String getDomainName() { return domainName; } @@ -485,6 +503,7 @@ public class UserVmJoinVO extends BaseViewVO implements ControlledViewEntity { } + @Override public String getDomainPath() { return domainPath; } @@ -1252,6 +1271,7 @@ public class UserVmJoinVO extends BaseViewVO implements ControlledViewEntity { + @Override public String getProjectUuid() { return projectUuid; } @@ -1266,6 +1286,7 @@ public class UserVmJoinVO extends BaseViewVO implements ControlledViewEntity { + @Override public String getProjectName() { return projectName; } diff --git a/server/src/com/cloud/api/ApiDBUtils.java b/server/src/com/cloud/api/ApiDBUtils.java index 4b889d641da..459df8d91a6 100755 --- a/server/src/com/cloud/api/ApiDBUtils.java +++ b/server/src/com/cloud/api/ApiDBUtils.java @@ -340,8 +340,12 @@ public class ApiDBUtils { _asVmGroupPolicyMapDao = locator.getDao(AutoScaleVmGroupPolicyMapDao.class); _counterDao = locator.getDao(CounterDao.class); _tagJoinDao = locator.getDao(ResourceTagJoinDao.class); + _vmGroupJoinDao = locator.getDao(InstanceGroupJoinDao.class); _eventJoinDao = locator.getDao(EventJoinDao.class); + _userAccountJoinDao = locator.getDao(UserAccountJoinDao.class); _projectJoinDao = locator.getDao(ProjectJoinDao.class); + _projectAccountJoinDao = locator.getDao(ProjectAccountJoinDao.class); + // Note: stats collector should already have been initialized by this time, otherwise a null instance is returned _statsCollector = StatsCollector.getInstance(); From 472f4f91b9af18802d34e3a8631441b1752c18f3 Mon Sep 17 00:00:00 2001 From: Min Chen Date: Tue, 11 Dec 2012 22:36:25 -0800 Subject: [PATCH 103/421] Refactor ListProjectInvitationsCmd and ProjectInvitationResponse. --- .../com/cloud/projects/ProjectService.java | 3 +- .../cloudstack/api/ResponseGenerator.java | 3 + .../project/ListProjectInvitationsCmd.java | 12 +- .../response/ProjectInvitationResponse.java | 20 +- .../api/view/vo/ProjectInvitationJoinVO.java | 232 ++++++++++++++++++ server/src/com/cloud/api/ApiDBUtils.java | 15 ++ .../src/com/cloud/api/ApiResponseHelper.java | 33 ++- .../DefaultComponentLibrary.java | 2 + .../cloud/projects/ProjectManagerImpl.java | 20 +- .../dao/ProjectInvitationJoinDao.java | 29 +++ .../dao/ProjectInvitationJoinDaoImpl.java | 86 +++++++ .../projects/MockProjectManagerImpl.java | 3 +- setup/db/create-schema.sql | 24 ++ 13 files changed, 438 insertions(+), 44 deletions(-) create mode 100644 api/src/org/apache/cloudstack/api/view/vo/ProjectInvitationJoinVO.java create mode 100644 server/src/com/cloud/projects/dao/ProjectInvitationJoinDao.java create mode 100644 server/src/com/cloud/projects/dao/ProjectInvitationJoinDaoImpl.java diff --git a/api/src/com/cloud/projects/ProjectService.java b/api/src/com/cloud/projects/ProjectService.java index 1e58a9b8ab1..0f58ef915d4 100644 --- a/api/src/com/cloud/projects/ProjectService.java +++ b/api/src/com/cloud/projects/ProjectService.java @@ -20,6 +20,7 @@ import java.util.List; import java.util.Map; import org.apache.cloudstack.api.view.vo.ProjectAccountJoinVO; +import org.apache.cloudstack.api.view.vo.ProjectInvitationJoinVO; import org.apache.cloudstack.api.view.vo.ProjectJoinVO; import com.cloud.exception.ConcurrentOperationException; @@ -85,7 +86,7 @@ public interface ProjectService { Pair, Integer> listProjectAccounts(long projectId, String accountName, String role, Long startIndex, Long pageSizeVal); - Pair, Integer> listProjectInvitations(Long id, Long projectId, String accountName, Long domainId, String state, boolean activeOnly, Long startIndex, Long pageSizeVal, boolean isRecursive, + Pair, Integer> listProjectInvitations(Long id, Long projectId, String accountName, Long domainId, String state, boolean activeOnly, Long startIndex, Long pageSizeVal, boolean isRecursive, boolean listAll); boolean updateInvitation(long projectId, String accountName, String token, boolean accept); diff --git a/api/src/org/apache/cloudstack/api/ResponseGenerator.java b/api/src/org/apache/cloudstack/api/ResponseGenerator.java index 97fd6d970e3..ccdf93ced1a 100644 --- a/api/src/org/apache/cloudstack/api/ResponseGenerator.java +++ b/api/src/org/apache/cloudstack/api/ResponseGenerator.java @@ -154,6 +154,7 @@ import org.apache.cloudstack.api.view.vo.DomainRouterJoinVO; import org.apache.cloudstack.api.view.vo.EventJoinVO; import org.apache.cloudstack.api.view.vo.InstanceGroupJoinVO; import org.apache.cloudstack.api.view.vo.ProjectAccountJoinVO; +import org.apache.cloudstack.api.view.vo.ProjectInvitationJoinVO; import org.apache.cloudstack.api.view.vo.ProjectJoinVO; import org.apache.cloudstack.api.view.vo.ResourceTagJoinVO; import org.apache.cloudstack.api.view.vo.SecurityGroupJoinVO; @@ -309,6 +310,8 @@ public interface ResponseGenerator { ProjectInvitationResponse createProjectInvitationResponse(ProjectInvitation invite); + List createProjectInvitationResponse(ProjectInvitationJoinVO... invites); + SystemVmInstanceResponse createSystemVmInstanceResponse(VirtualMachine systemVM); SwiftResponse createSwiftResponse(Swift swift); diff --git a/api/src/org/apache/cloudstack/api/command/user/project/ListProjectInvitationsCmd.java b/api/src/org/apache/cloudstack/api/command/user/project/ListProjectInvitationsCmd.java index 206a9a9e80f..6b6a7a7c39d 100644 --- a/api/src/org/apache/cloudstack/api/command/user/project/ListProjectInvitationsCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/project/ListProjectInvitationsCmd.java @@ -28,6 +28,8 @@ import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.response.ListResponse; import org.apache.cloudstack.api.response.ProjectInvitationResponse; +import org.apache.cloudstack.api.view.vo.ProjectInvitationJoinVO; + import com.cloud.projects.ProjectInvitation; import com.cloud.utils.Pair; @@ -83,15 +85,13 @@ public class ListProjectInvitationsCmd extends BaseListAccountResourcesCmd { @Override public void execute() { - Pair, Integer> invites = _projectService.listProjectInvitations(id, projectId, + Pair, Integer> invites = _projectService.listProjectInvitations(id, projectId, this.getAccountName(), this.getDomainId(), state, activeOnly, this.getStartIndex(), this.getPageSizeVal(), this.isRecursive(), this.listAll()); ListResponse response = new ListResponse(); - List projectInvitationResponses = new ArrayList(); - for (ProjectInvitation invite : invites.first()) { - ProjectInvitationResponse projectResponse = _responseGenerator.createProjectInvitationResponse(invite); - projectInvitationResponses.add(projectResponse); - } + List projectInvitationResponses = + _responseGenerator.createProjectInvitationResponse(invites.first().toArray(new ProjectInvitationJoinVO[invites.first().size()])); + response.setResponses(projectInvitationResponses, invites.second()); response.setResponseName(getCommandName()); diff --git a/api/src/org/apache/cloudstack/api/response/ProjectInvitationResponse.java b/api/src/org/apache/cloudstack/api/response/ProjectInvitationResponse.java index 80202a51d4c..1c616d1e866 100644 --- a/api/src/org/apache/cloudstack/api/response/ProjectInvitationResponse.java +++ b/api/src/org/apache/cloudstack/api/response/ProjectInvitationResponse.java @@ -23,18 +23,18 @@ import com.google.gson.annotations.SerializedName; import org.apache.cloudstack.api.BaseResponse; @SuppressWarnings("unused") -public class ProjectInvitationResponse extends BaseResponse implements ControlledEntityResponse{ +public class ProjectInvitationResponse extends BaseResponse implements ControlledViewEntityResponse{ @SerializedName(ApiConstants.ID) @Param(description="the id of the invitation") - private IdentityProxy id = new IdentityProxy("project_invitations"); + private String id; @SerializedName(ApiConstants.PROJECT_ID) @Param(description="the id of the project") - private IdentityProxy projectId = new IdentityProxy("projects"); + private String projectId; @SerializedName(ApiConstants.PROJECT) @Param(description="the name of the project") private String projectName; @SerializedName(ApiConstants.DOMAIN_ID) @Param(description="the domain id the project belongs to") - private IdentityProxy domainId = new IdentityProxy("domain"); + private String domainId; @SerializedName(ApiConstants.DOMAIN) @Param(description="the domain name where the project belongs to") private String domainName; @@ -48,20 +48,20 @@ public class ProjectInvitationResponse extends BaseResponse implements Controlle @SerializedName(ApiConstants.STATE) @Param(description="the invitation state") private String invitationState; - public void setId(Long id) { - this.id.setValue(id); + public void setId(String id) { + this.id = id; } - public void setProjectId(Long projectId) { - this.projectId.setValue(projectId); + public void setProjectId(String projectId) { + this.projectId = projectId; } public void setProjectName(String projectName) { this.projectName = projectName; } - public void setDomainId(Long domainId) { - this.domainId.setValue(domainId); + public void setDomainId(String domainId) { + this.domainId = domainId; } public void setDomainName(String domain) { diff --git a/api/src/org/apache/cloudstack/api/view/vo/ProjectInvitationJoinVO.java b/api/src/org/apache/cloudstack/api/view/vo/ProjectInvitationJoinVO.java new file mode 100644 index 00000000000..b33df0428bb --- /dev/null +++ b/api/src/org/apache/cloudstack/api/view/vo/ProjectInvitationJoinVO.java @@ -0,0 +1,232 @@ +// 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 org.apache.cloudstack.api.view.vo; + +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.utils.db.GenericDao; +import com.cloud.vm.VirtualMachine.State; + +@Entity +@Table(name="project_invitation_view") +public class ProjectInvitationJoinVO extends BaseViewVO implements ControlledViewEntity { + + @Column(name="id", updatable=false, nullable = false) + private long id; + + @Column(name="uuid") + private String uuid; + + @Column(name = "email") + private String email; + + @Column(name = "state") + @Enumerated(value = EnumType.STRING) + private State state; + + @Column(name = GenericDao.CREATED_COLUMN) + private Date created; + + @Column(name="account_id") + private long accountId; + + @Column(name="account_uuid") + private String accountUuid; + + @Column(name="account_name") + private String accountName; + + @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; + + @Column(name="domain_path") + private String domainPath; + + @Column(name="project_id") + private long projectId; + + @Column(name="project_uuid") + private String projectUuid; + + @Column(name="project_name") + private String projectName; + + public ProjectInvitationJoinVO() { + } + + @Override + public long getId() { + return id; + } + + + @Override + public void setId(long id) { + this.id = id; + + } + + public String getUuid() { + return uuid; + } + + public void setUuid(String uuid) { + this.uuid = uuid; + } + + + @Override + 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; + } + + @Override + public String getDomainName() { + return domainName; + } + + public void setDomainName(String domainName) { + this.domainName = domainName; + } + + + + public State getState() { + return state; + } + + public void setState(State state) { + this.state = state; + } + + @Override + public long getAccountId() { + return accountId; + } + + public void setAccountId(long accountId) { + this.accountId = accountId; + } + + public String getEmail() { + return email; + } + + public void setEmail(String email) { + this.email = email; + } + + @Override + public String getAccountName() { + return accountName; + } + + public void setAccountName(String accountName) { + this.accountName = accountName; + } + + public long getProjectId() { + return projectId; + } + + public void setProjectId(long projectId) { + this.projectId = projectId; + } + + @Override + public String getProjectUuid() { + return projectUuid; + } + + public void setProjectUuid(String projectUuid) { + this.projectUuid = projectUuid; + } + + @Override + public String getProjectName() { + return projectName; + } + + public void setProjectName(String projectName) { + this.projectName = projectName; + } + + public Date getCreated() { + return created; + } + + public void setCreated(Date created) { + this.created = created; + } + + @Override + public String getAccountUuid() { + return accountUuid; + } + + public void setAccountUuid(String accountUuid) { + this.accountUuid = accountUuid; + } + + @Override + public short getAccountType() { + return accountType; + } + + public void setAccountType(short accountType) { + this.accountType = accountType; + } + + @Override + public String getDomainPath() { + return domainPath; + } + + public void setDomainPath(String domainPath) { + this.domainPath = domainPath; + } + + +} diff --git a/server/src/com/cloud/api/ApiDBUtils.java b/server/src/com/cloud/api/ApiDBUtils.java index 459df8d91a6..d5cce52e5f9 100755 --- a/server/src/com/cloud/api/ApiDBUtils.java +++ b/server/src/com/cloud/api/ApiDBUtils.java @@ -27,6 +27,7 @@ import org.apache.cloudstack.api.response.DomainRouterResponse; import org.apache.cloudstack.api.response.EventResponse; import org.apache.cloudstack.api.response.InstanceGroupResponse; import org.apache.cloudstack.api.response.ProjectAccountResponse; +import org.apache.cloudstack.api.response.ProjectInvitationResponse; import org.apache.cloudstack.api.response.ProjectResponse; import org.apache.cloudstack.api.response.ResourceTagResponse; import org.apache.cloudstack.api.response.SecurityGroupResponse; @@ -36,6 +37,7 @@ import org.apache.cloudstack.api.view.vo.DomainRouterJoinVO; import org.apache.cloudstack.api.view.vo.EventJoinVO; import org.apache.cloudstack.api.view.vo.InstanceGroupJoinVO; import org.apache.cloudstack.api.view.vo.ProjectAccountJoinVO; +import org.apache.cloudstack.api.view.vo.ProjectInvitationJoinVO; import org.apache.cloudstack.api.view.vo.ProjectJoinVO; import org.apache.cloudstack.api.view.vo.ResourceTagJoinVO; import org.apache.cloudstack.api.view.vo.SecurityGroupJoinVO; @@ -118,8 +120,10 @@ import com.cloud.offerings.NetworkOfferingVO; import com.cloud.offerings.dao.NetworkOfferingDao; import com.cloud.projects.Project; import com.cloud.projects.ProjectAccount; +import com.cloud.projects.ProjectInvitation; import com.cloud.projects.ProjectService; import com.cloud.projects.dao.ProjectAccountJoinDao; +import com.cloud.projects.dao.ProjectInvitationJoinDao; import com.cloud.projects.dao.ProjectJoinDao; import com.cloud.resource.ResourceManager; import com.cloud.server.Criteria; @@ -270,6 +274,7 @@ public class ApiDBUtils { private static UserAccountJoinDao _userAccountJoinDao; private static ProjectJoinDao _projectJoinDao; private static ProjectAccountJoinDao _projectAccountJoinDao; + private static ProjectInvitationJoinDao _projectInvitationJoinDao; static { _ms = (ManagementServer) ComponentLocator.getComponent(ManagementServer.Name); @@ -345,6 +350,7 @@ public class ApiDBUtils { _userAccountJoinDao = locator.getDao(UserAccountJoinDao.class); _projectJoinDao = locator.getDao(ProjectJoinDao.class); _projectAccountJoinDao = locator.getDao(ProjectAccountJoinDao.class); + _projectInvitationJoinDao = locator.getDao(ProjectInvitationJoinDao.class); // Note: stats collector should already have been initialized by this time, otherwise a null instance is returned @@ -1052,4 +1058,13 @@ public class ApiDBUtils { return _projectAccountJoinDao.newProjectAccountView(proj); } + public static ProjectInvitationResponse newProjectInvitationResponse(ProjectInvitationJoinVO proj) { + return _projectInvitationJoinDao.newProjectInvitationResponse(proj); + } + + public static ProjectInvitationJoinVO newProjectInvitationView(ProjectInvitation proj) { + return _projectInvitationJoinDao.newProjectInvitationView(proj); + } + + } diff --git a/server/src/com/cloud/api/ApiResponseHelper.java b/server/src/com/cloud/api/ApiResponseHelper.java index 604df8191da..1e2b87d0941 100755 --- a/server/src/com/cloud/api/ApiResponseHelper.java +++ b/server/src/com/cloud/api/ApiResponseHelper.java @@ -117,6 +117,7 @@ import org.apache.cloudstack.api.view.vo.ControlledViewEntity; import org.apache.cloudstack.api.view.vo.EventJoinVO; import org.apache.cloudstack.api.view.vo.InstanceGroupJoinVO; import org.apache.cloudstack.api.view.vo.ProjectAccountJoinVO; +import org.apache.cloudstack.api.view.vo.ProjectInvitationJoinVO; import org.apache.cloudstack.api.view.vo.ProjectJoinVO; import org.apache.cloudstack.api.view.vo.ResourceTagJoinVO; import org.apache.cloudstack.api.view.vo.SecurityGroupJoinVO; @@ -2873,26 +2874,22 @@ public class ApiResponseHelper implements ResponseGenerator { @Override public ProjectInvitationResponse createProjectInvitationResponse(ProjectInvitation invite) { - ProjectInvitationResponse response = new ProjectInvitationResponse(); - response.setId(invite.getId()); - response.setProjectId(invite.getProjectId()); - response.setProjectName(ApiDBUtils.findProjectById(invite.getProjectId()).getName()); - response.setInvitationState(invite.getState().toString()); - - if (invite.getForAccountId() != null) { - Account account = ApiDBUtils.findAccountById(invite.getForAccountId()); - response.setAccountName(account.getAccountName()); - - } else { - response.setEmail(invite.getEmail()); - } - - populateDomain(response, invite.getInDomainId()); - - response.setObjectName("projectinvitation"); - return response; + ProjectInvitationJoinVO vInvite = ApiDBUtils.newProjectInvitationView(invite); + return ApiDBUtils.newProjectInvitationResponse(vInvite); } + + + @Override + public List createProjectInvitationResponse(ProjectInvitationJoinVO... invites) { + List respList = new ArrayList(); + for (ProjectInvitationJoinVO v : invites){ + respList.add(ApiDBUtils.newProjectInvitationResponse(v)); + } + return respList; + } + + @Override public SystemVmInstanceResponse createSystemVmInstanceResponse(VirtualMachine vm) { SystemVmInstanceResponse vmResponse = new SystemVmInstanceResponse(); diff --git a/server/src/com/cloud/configuration/DefaultComponentLibrary.java b/server/src/com/cloud/configuration/DefaultComponentLibrary.java index 0dcdfd2e10e..2dd46fd9ad9 100755 --- a/server/src/com/cloud/configuration/DefaultComponentLibrary.java +++ b/server/src/com/cloud/configuration/DefaultComponentLibrary.java @@ -139,6 +139,7 @@ import com.cloud.projects.ProjectManagerImpl; import com.cloud.projects.dao.ProjectAccountDaoImpl; import com.cloud.projects.dao.ProjectDaoImpl; import com.cloud.projects.dao.ProjectInvitationDaoImpl; +import com.cloud.projects.dao.ProjectInvitationJoinDaoImpl; import com.cloud.projects.dao.ProjectJoinDaoImpl; import com.cloud.resource.ResourceManagerImpl; import com.cloud.resourcelimit.ResourceLimitManagerImpl; @@ -233,6 +234,7 @@ public class DefaultComponentLibrary extends ComponentLibraryBase implements Com addDao("UserAccountJoinDao", UserAccountJoinDaoImpl.class); addDao("ProjectJoinDao", ProjectJoinDaoImpl.class); addDao("ProjectAccountJoinDao", ProjectAccountJoinDaoImpl.class); + addDao("ProjectInvitationJoinDao", ProjectInvitationJoinDaoImpl.class); ComponentInfo> info = addDao("ServiceOfferingDao", ServiceOfferingDaoImpl.class); info.addParameter("cache.size", "50"); info.addParameter("cache.time.to.live", "600"); diff --git a/server/src/com/cloud/projects/ProjectManagerImpl.java b/server/src/com/cloud/projects/ProjectManagerImpl.java index c84395d6227..7c97af2699d 100755 --- a/server/src/com/cloud/projects/ProjectManagerImpl.java +++ b/server/src/com/cloud/projects/ProjectManagerImpl.java @@ -39,6 +39,7 @@ import javax.mail.internet.InternetAddress; import javax.naming.ConfigurationException; import org.apache.cloudstack.api.view.vo.ProjectAccountJoinVO; +import org.apache.cloudstack.api.view.vo.ProjectInvitationJoinVO; import org.apache.cloudstack.api.view.vo.ProjectJoinVO; import org.apache.cloudstack.api.view.vo.UserVmJoinVO; import org.apache.log4j.Logger; @@ -64,6 +65,7 @@ import com.cloud.projects.dao.ProjectAccountDao; import com.cloud.projects.dao.ProjectAccountJoinDao; import com.cloud.projects.dao.ProjectDao; import com.cloud.projects.dao.ProjectInvitationDao; +import com.cloud.projects.dao.ProjectInvitationJoinDao; import com.cloud.projects.dao.ProjectJoinDao; import com.cloud.server.ResourceTag.TaggedResourceType; import com.cloud.tags.ResourceTagVO; @@ -127,6 +129,8 @@ public class ProjectManagerImpl implements ProjectManager, Manager{ @Inject private ProjectInvitationDao _projectInvitationDao; @Inject + private ProjectInvitationJoinDao _projectInvitationJoinDao; + @Inject protected ResourceTagDao _resourceTagDao; protected boolean _invitationRequired = false; @@ -875,7 +879,7 @@ public class ProjectManagerImpl implements ProjectManager, Manager{ } @Override - public Pair, Integer> listProjectInvitations(Long id, Long projectId, + public Pair, Integer> listProjectInvitations(Long id, Long projectId, String accountName, Long domainId, String state, boolean activeOnly, Long startIndex, Long pageSizeVal, boolean isRecursive, boolean listAll) { Account caller = UserContext.current().getCaller(); List permittedAccounts = new ArrayList(); @@ -886,17 +890,17 @@ public class ProjectManagerImpl implements ProjectManager, Manager{ isRecursive = domainIdRecursiveListProject.second(); ListProjectResourcesCriteria listProjectResourcesCriteria = domainIdRecursiveListProject.third(); - Filter searchFilter = new Filter(ProjectInvitationVO.class, "id", true, startIndex, pageSizeVal); - SearchBuilder sb = _projectInvitationDao.createSearchBuilder(); - _accountMgr.buildACLSearchBuilder(sb, domainId, isRecursive, permittedAccounts, listProjectResourcesCriteria); + Filter searchFilter = new Filter(ProjectInvitationJoinVO.class, "id", true, startIndex, pageSizeVal); + SearchBuilder sb = _projectInvitationJoinDao.createSearchBuilder(); + _accountMgr.buildACLViewSearchBuilder(sb, domainId, isRecursive, permittedAccounts, listProjectResourcesCriteria); sb.and("projectId", sb.entity().getProjectId(), SearchCriteria.Op.EQ); sb.and("state", sb.entity().getState(), SearchCriteria.Op.EQ); sb.and("created", sb.entity().getCreated(), SearchCriteria.Op.GT); sb.and("id", sb.entity().getId(), SearchCriteria.Op.EQ); - SearchCriteria sc = sb.create(); - _accountMgr.buildACLSearchCriteria(sc, domainId, isRecursive, permittedAccounts, listProjectResourcesCriteria); + SearchCriteria sc = sb.create(); + _accountMgr.buildACLViewSearchCriteria(sc, domainId, isRecursive, permittedAccounts, listProjectResourcesCriteria); if (projectId != null){ @@ -916,8 +920,8 @@ public class ProjectManagerImpl implements ProjectManager, Manager{ sc.setParameters("created", new Date((DateUtil.currentGMTTime().getTime()) - _invitationTimeOut)); } - Pair, Integer> result = _projectInvitationDao.searchAndCount(sc, searchFilter); - return new Pair, Integer>(result.first(), result.second()); + return _projectInvitationJoinDao.searchAndCount(sc, searchFilter); + } @Override @DB diff --git a/server/src/com/cloud/projects/dao/ProjectInvitationJoinDao.java b/server/src/com/cloud/projects/dao/ProjectInvitationJoinDao.java new file mode 100644 index 00000000000..2ee7de095f0 --- /dev/null +++ b/server/src/com/cloud/projects/dao/ProjectInvitationJoinDao.java @@ -0,0 +1,29 @@ +// 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.projects.dao; + +import org.apache.cloudstack.api.response.ProjectInvitationResponse; +import org.apache.cloudstack.api.view.vo.ProjectInvitationJoinVO; +import com.cloud.projects.ProjectInvitation; +import com.cloud.utils.db.GenericDao; + +public interface ProjectInvitationJoinDao extends GenericDao { + + ProjectInvitationResponse newProjectInvitationResponse(ProjectInvitationJoinVO proj); + + ProjectInvitationJoinVO newProjectInvitationView(ProjectInvitation proj); +} diff --git a/server/src/com/cloud/projects/dao/ProjectInvitationJoinDaoImpl.java b/server/src/com/cloud/projects/dao/ProjectInvitationJoinDaoImpl.java new file mode 100644 index 00000000000..0ee0ef8fce9 --- /dev/null +++ b/server/src/com/cloud/projects/dao/ProjectInvitationJoinDaoImpl.java @@ -0,0 +1,86 @@ +// 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.projects.dao; + +import java.util.List; + +import javax.ejb.Local; + +import org.apache.log4j.Logger; + +import org.apache.cloudstack.api.response.ProjectInvitationResponse; +import org.apache.cloudstack.api.view.vo.ProjectInvitationJoinVO; + +import com.cloud.api.ApiDBUtils; +import com.cloud.projects.ProjectInvitation; +import com.cloud.user.Account; +import com.cloud.utils.db.GenericDaoBase; +import com.cloud.utils.db.SearchBuilder; +import com.cloud.utils.db.SearchCriteria; + +@Local(value={ProjectInvitationJoinDao.class}) +public class ProjectInvitationJoinDaoImpl extends GenericDaoBase implements ProjectInvitationJoinDao { + public static final Logger s_logger = Logger.getLogger(ProjectInvitationJoinDaoImpl.class); + + + private SearchBuilder vrIdSearch; + + protected ProjectInvitationJoinDaoImpl() { + + vrIdSearch = createSearchBuilder(); + vrIdSearch.and("id", vrIdSearch.entity().getId(), SearchCriteria.Op.EQ); + vrIdSearch.done(); + + this._count = "select count(distinct id) from project_invitation_view WHERE "; + } + + + + @Override + public ProjectInvitationResponse newProjectInvitationResponse(ProjectInvitationJoinVO invite) { + ProjectInvitationResponse response = new ProjectInvitationResponse(); + response.setId(invite.getUuid()); + response.setProjectId(invite.getProjectUuid()); + response.setProjectName(invite.getProjectName()); + response.setInvitationState(invite.getState().toString()); + + if (invite.getAccountName() != null) { + response.setAccountName(invite.getAccountName()); + } else { + response.setEmail(invite.getEmail()); + } + + response.setDomainId(invite.getDomainUuid()); + response.setDomainName(invite.getDomainName()); + + response.setObjectName("projectinvitation"); + return response; + } + + + + @Override + public ProjectInvitationJoinVO newProjectInvitationView(ProjectInvitation proj) { + SearchCriteria sc = vrIdSearch.create(); + sc.setParameters("id", proj.getId()); + List grps = searchIncludingRemoved(sc, null, null, false); + assert grps != null && grps.size() == 1 : "No project invitation found for id " + proj.getId(); + return grps.get(0); + } + + +} diff --git a/server/test/com/cloud/projects/MockProjectManagerImpl.java b/server/test/com/cloud/projects/MockProjectManagerImpl.java index 6529d12721e..3911ceb8eb3 100644 --- a/server/test/com/cloud/projects/MockProjectManagerImpl.java +++ b/server/test/com/cloud/projects/MockProjectManagerImpl.java @@ -23,6 +23,7 @@ import javax.ejb.Local; import javax.naming.ConfigurationException; import org.apache.cloudstack.api.view.vo.ProjectAccountJoinVO; +import org.apache.cloudstack.api.view.vo.ProjectInvitationJoinVO; import org.apache.cloudstack.api.view.vo.ProjectJoinVO; import com.cloud.exception.ConcurrentOperationException; @@ -116,7 +117,7 @@ public class MockProjectManagerImpl implements ProjectManager, Manager { } @Override - public Pair, Integer> listProjectInvitations(Long id, + public Pair, Integer> listProjectInvitations(Long id, Long projectId, String accountName, Long domainId, String state, boolean activeOnly, Long startIndex, Long pageSizeVal, boolean isRecursive, boolean listAll) { diff --git a/setup/db/create-schema.sql b/setup/db/create-schema.sql index 8e8c448fdd8..9891371bbb2 100755 --- a/setup/db/create-schema.sql +++ b/setup/db/create-schema.sql @@ -2944,3 +2944,27 @@ from project_account inner join account on project_account.account_id = account.id inner join domain on account.domain_id=domain.id inner join projects on projects.id = project_account.project_id; + +DROP VIEW IF EXISTS `cloud`.`project_invitation_view`; +CREATE VIEW project_invitation_view AS +select +project_invitations.id, +project_invitations.uuid, +project_invitations.email, +project_invitations.created, +project_invitations.state, +projects.id project_id, +projects.uuid project_uuid, +projects.name project_name, +account.id account_id, +account.uuid account_uuid, +account.account_name, +account.type account_type, +domain.id domain_id, +domain.uuid domain_uuid, +domain.name domain_name, +domain.path domain_path +from project_invitations +left join account on project_invitations.account_id = account.id +left join domain on project_invitations.domain_id=domain.id +left join projects on projects.id = project_invitations.project_id; From 7dbdf786cc48244943da7dc7884b23763d4eeb31 Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Wed, 12 Dec 2012 14:21:38 -0800 Subject: [PATCH 104/421] api: FIXME for api access checker adapter Signed-off-by: Rohit Yadav --- server/src/com/cloud/api/ApiServer.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/server/src/com/cloud/api/ApiServer.java b/server/src/com/cloud/api/ApiServer.java index 38bae138786..c7cbaa18d19 100755 --- a/server/src/com/cloud/api/ApiServer.java +++ b/server/src/com/cloud/api/ApiServer.java @@ -770,6 +770,8 @@ public class ApiServer implements HttpRequestHandler { private boolean isCommandAvailable(User user, String commandName) { for(APIAccessChecker apichecker : _apiAccessCheckers) { + // Break on the first adapter that validates + // FIXME: In case of multiple adapters, this may not be the best way of validation. See CLOUDSTACK-618 if (apichecker.canAccessAPI(user, commandName)) return true; } From 7597a38f7a255e49b73c833918f30b51504e0c53 Mon Sep 17 00:00:00 2001 From: Min Chen Date: Wed, 12 Dec 2012 18:05:04 -0800 Subject: [PATCH 105/421] Move all the DB view DAOs from cloud-server to cloud-api for future api-server package. BUG-ID: CLOUDSTACK-527 Signed-off-by: Rohit Yadav --- .../cloudstack/api/view/DBViewUtils.java | 225 ++++++++++++++++++ .../api/view/ViewResponseHelper.java | 43 ++++ .../api/view}/dao/DomainRouterJoinDao.java | 2 +- .../view}/dao/DomainRouterJoinDaoImpl.java | 7 +- .../api/view}/dao/EventJoinDao.java | 2 +- .../api/view}/dao/EventJoinDaoImpl.java | 8 +- .../api/view}/dao/InstanceGroupJoinDao.java | 2 +- .../view}/dao/InstanceGroupJoinDaoImpl.java | 6 +- .../api/view}/dao/ProjectAccountJoinDao.java | 2 +- .../view}/dao/ProjectAccountJoinDaoImpl.java | 2 +- .../view}/dao/ProjectInvitationJoinDao.java | 2 +- .../dao/ProjectInvitationJoinDaoImpl.java | 5 +- .../api/view}/dao/ProjectJoinDao.java | 2 +- .../api/view}/dao/ProjectJoinDaoImpl.java | 13 +- .../api/view}/dao/ResourceTagJoinDao.java | 2 +- .../api/view}/dao/ResourceTagJoinDaoImpl.java | 8 +- .../api/view}/dao/SecurityGroupJoinDao.java | 3 +- .../view}/dao/SecurityGroupJoinDaoImpl.java | 17 +- .../api/view}/dao/UserAccountJoinDao.java | 2 +- .../api/view}/dao/UserAccountJoinDaoImpl.java | 9 +- .../api/view}/dao/UserVmJoinDao.java | 2 +- .../api/view}/dao/UserVmJoinDaoImpl.java | 16 +- server/src/com/cloud/api/ApiDBUtils.java | 141 +---------- .../src/com/cloud/api/ApiResponseHelper.java | 71 +++--- .../DefaultComponentLibrary.java | 21 +- .../security/SecurityGroupManagerImpl.java | 2 +- .../cloud/projects/ProjectManagerImpl.java | 6 +- .../cloud/server/ManagementServerImpl.java | 6 +- .../cloud/tags/TaggedResourceManagerImpl.java | 2 +- .../com/cloud/user/AccountManagerImpl.java | 3 +- .../src/com/cloud/vm/UserVmManagerImpl.java | 2 +- .../SecurityGroupManagerImpl2Test.java | 2 +- 32 files changed, 392 insertions(+), 244 deletions(-) create mode 100644 api/src/org/apache/cloudstack/api/view/DBViewUtils.java create mode 100644 api/src/org/apache/cloudstack/api/view/ViewResponseHelper.java rename {server/src/com/cloud/vm => api/src/org/apache/cloudstack/api/view}/dao/DomainRouterJoinDao.java (97%) rename {server/src/com/cloud/vm => api/src/org/apache/cloudstack/api/view}/dao/DomainRouterJoinDaoImpl.java (98%) rename {server/src/com/cloud/event => api/src/org/apache/cloudstack/api/view}/dao/EventJoinDao.java (97%) rename {server/src/com/cloud/event => api/src/org/apache/cloudstack/api/view}/dao/EventJoinDaoImpl.java (96%) rename {server/src/com/cloud/vm => api/src/org/apache/cloudstack/api/view}/dao/InstanceGroupJoinDao.java (96%) rename {server/src/com/cloud/vm => api/src/org/apache/cloudstack/api/view}/dao/InstanceGroupJoinDaoImpl.java (94%) rename {server/src/com/cloud/projects => api/src/org/apache/cloudstack/api/view}/dao/ProjectAccountJoinDao.java (96%) rename {server/src/com/cloud/projects => api/src/org/apache/cloudstack/api/view}/dao/ProjectAccountJoinDaoImpl.java (98%) rename {server/src/com/cloud/projects => api/src/org/apache/cloudstack/api/view}/dao/ProjectInvitationJoinDao.java (96%) rename {server/src/com/cloud/projects => api/src/org/apache/cloudstack/api/view}/dao/ProjectInvitationJoinDaoImpl.java (96%) rename {server/src/com/cloud/projects => api/src/org/apache/cloudstack/api/view}/dao/ProjectJoinDao.java (96%) rename {server/src/com/cloud/projects => api/src/org/apache/cloudstack/api/view}/dao/ProjectJoinDaoImpl.java (89%) rename {server/src/com/cloud/tags => api/src/org/apache/cloudstack/api/view}/dao/ResourceTagJoinDao.java (96%) rename {server/src/com/cloud/tags => api/src/org/apache/cloudstack/api/view}/dao/ResourceTagJoinDaoImpl.java (95%) rename {server/src/com/cloud/network/security => api/src/org/apache/cloudstack/api/view}/dao/SecurityGroupJoinDao.java (97%) rename {server/src/com/cloud/network/security => api/src/org/apache/cloudstack/api/view}/dao/SecurityGroupJoinDaoImpl.java (92%) rename {server/src/com/cloud/user => api/src/org/apache/cloudstack/api/view}/dao/UserAccountJoinDao.java (96%) rename {server/src/com/cloud/user => api/src/org/apache/cloudstack/api/view}/dao/UserAccountJoinDaoImpl.java (93%) rename {server/src/com/cloud/vm => api/src/org/apache/cloudstack/api/view}/dao/UserVmJoinDao.java (97%) rename {server/src/com/cloud/vm => api/src/org/apache/cloudstack/api/view}/dao/UserVmJoinDaoImpl.java (95%) diff --git a/api/src/org/apache/cloudstack/api/view/DBViewUtils.java b/api/src/org/apache/cloudstack/api/view/DBViewUtils.java new file mode 100644 index 00000000000..5ea7eb7dab0 --- /dev/null +++ b/api/src/org/apache/cloudstack/api/view/DBViewUtils.java @@ -0,0 +1,225 @@ +// 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 org.apache.cloudstack.api.view; + +import java.util.EnumSet; +import java.util.List; + +import org.apache.cloudstack.api.ApiConstants.VMDetails; +import org.apache.cloudstack.api.response.DomainRouterResponse; +import org.apache.cloudstack.api.response.EventResponse; +import org.apache.cloudstack.api.response.InstanceGroupResponse; +import org.apache.cloudstack.api.response.ProjectAccountResponse; +import org.apache.cloudstack.api.response.ProjectInvitationResponse; +import org.apache.cloudstack.api.response.ProjectResponse; +import org.apache.cloudstack.api.response.ResourceTagResponse; +import org.apache.cloudstack.api.response.SecurityGroupResponse; +import org.apache.cloudstack.api.response.UserResponse; +import org.apache.cloudstack.api.response.UserVmResponse; +import org.apache.cloudstack.api.view.dao.DomainRouterJoinDao; +import org.apache.cloudstack.api.view.dao.EventJoinDao; +import org.apache.cloudstack.api.view.dao.InstanceGroupJoinDao; +import org.apache.cloudstack.api.view.dao.ProjectAccountJoinDao; +import org.apache.cloudstack.api.view.dao.ProjectInvitationJoinDao; +import org.apache.cloudstack.api.view.dao.ProjectJoinDao; +import org.apache.cloudstack.api.view.dao.ResourceTagJoinDao; +import org.apache.cloudstack.api.view.dao.SecurityGroupJoinDao; +import org.apache.cloudstack.api.view.dao.UserAccountJoinDao; +import org.apache.cloudstack.api.view.dao.UserVmJoinDao; +import org.apache.cloudstack.api.view.vo.DomainRouterJoinVO; +import org.apache.cloudstack.api.view.vo.EventJoinVO; +import org.apache.cloudstack.api.view.vo.InstanceGroupJoinVO; +import org.apache.cloudstack.api.view.vo.ProjectAccountJoinVO; +import org.apache.cloudstack.api.view.vo.ProjectInvitationJoinVO; +import org.apache.cloudstack.api.view.vo.ProjectJoinVO; +import org.apache.cloudstack.api.view.vo.ResourceTagJoinVO; +import org.apache.cloudstack.api.view.vo.SecurityGroupJoinVO; +import org.apache.cloudstack.api.view.vo.UserAccountJoinVO; +import org.apache.cloudstack.api.view.vo.UserVmJoinVO; + + +import com.cloud.configuration.ConfigurationService; +import com.cloud.event.Event; +import com.cloud.network.router.VirtualRouter; +import com.cloud.network.security.SecurityGroup; +import com.cloud.projects.Project; +import com.cloud.projects.ProjectAccount; +import com.cloud.projects.ProjectInvitation; +import com.cloud.projects.ProjectService; +import com.cloud.server.ResourceTag; +import com.cloud.server.TaggedResourceService; +import com.cloud.user.Account; +import com.cloud.user.ResourceLimitService; +import com.cloud.user.User; +import com.cloud.user.UserAccount; + +import com.cloud.uservm.UserVm; +import com.cloud.utils.component.ComponentLocator; +import com.cloud.vm.InstanceGroup; + + +/** + * @author minc + * + */ +public class DBViewUtils { + + private static DomainRouterJoinDao _domainRouterJoinDao; + private static SecurityGroupJoinDao _securityGroupJoinDao; + private static UserVmJoinDao _userVmJoinDao; + private static ResourceTagJoinDao _tagJoinDao; + private static EventJoinDao _eventJoinDao; + private static InstanceGroupJoinDao _vmGroupJoinDao; + private static UserAccountJoinDao _userAccountJoinDao; + private static ProjectJoinDao _projectJoinDao; + private static ProjectAccountJoinDao _projectAccountJoinDao; + private static ProjectInvitationJoinDao _projectInvitationJoinDao; + + static { + ComponentLocator locator = ComponentLocator.getLocator("management-server"); + _domainRouterJoinDao = locator.getDao(DomainRouterJoinDao.class); + _userVmJoinDao = locator.getDao(UserVmJoinDao.class); + _securityGroupJoinDao = locator.getDao(SecurityGroupJoinDao.class); + _tagJoinDao = locator.getDao(ResourceTagJoinDao.class); + _vmGroupJoinDao = locator.getDao(InstanceGroupJoinDao.class); + _eventJoinDao = locator.getDao(EventJoinDao.class); + _userAccountJoinDao = locator.getDao(UserAccountJoinDao.class); + _projectJoinDao = locator.getDao(ProjectJoinDao.class); + _projectAccountJoinDao = locator.getDao(ProjectAccountJoinDao.class); + _projectInvitationJoinDao = locator.getDao(ProjectInvitationJoinDao.class); + } + + + 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 newDomainRouterView(VirtualRouter vr){ + return _domainRouterJoinDao.newDomainRouterView(vr); + } + + public static UserVmResponse newUserVmResponse(String objectName, UserVmJoinVO userVm, EnumSet 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 newUserVmView(UserVm... userVms){ + return _userVmJoinDao.newUserVmView(userVms); + } + + public static SecurityGroupResponse newSecurityGroupResponse(SecurityGroupJoinVO vsg, Account caller) { + return _securityGroupJoinDao.newSecurityGroupResponse(vsg, caller); + } + + public static SecurityGroupResponse fillSecurityGroupDetails(SecurityGroupResponse vsgData, SecurityGroupJoinVO sg){ + return _securityGroupJoinDao.setSecurityGroupResponse(vsgData, sg); + } + + public static List newSecurityGroupView(SecurityGroup sg){ + return _securityGroupJoinDao.newSecurityGroupView(sg); + } + + public static List findSecurityGroupViewById(Long sgId){ + return _securityGroupJoinDao.searchByIds(sgId); + } + + public static ResourceTagResponse newResourceTagResponse(ResourceTagJoinVO vsg, boolean keyValueOnly) { + return _tagJoinDao.newResourceTagResponse(vsg, keyValueOnly); + } + + public static ResourceTagJoinVO newResourceTagView(ResourceTag sg){ + return _tagJoinDao.newResourceTagView(sg); + } + + public static ResourceTagJoinVO findResourceTagViewById(Long tagId){ + List tags = _tagJoinDao.searchByIds(tagId); + if ( tags != null && tags.size() > 0 ){ + return tags.get(0); + } + else{ + return null; + } + } + + public static EventResponse newEventResponse(EventJoinVO ve) { + return _eventJoinDao.newEventResponse(ve); + } + + public static EventJoinVO newEventView(Event e){ + return _eventJoinDao.newEventView(e); + } + + public static InstanceGroupResponse newInstanceGroupResponse(InstanceGroupJoinVO ve) { + return _vmGroupJoinDao.newInstanceGroupResponse(ve); + } + + public static InstanceGroupJoinVO newInstanceGroupView(InstanceGroup e){ + return _vmGroupJoinDao.newInstanceGroupView(e); + } + + public static UserResponse newUserResponse(UserAccountJoinVO usr) { + return _userAccountJoinDao.newUserResponse(usr); + } + + public static UserAccountJoinVO newUserView(User usr){ + return _userAccountJoinDao.newUserView(usr); + } + + public static UserAccountJoinVO newUserView(UserAccount usr){ + return _userAccountJoinDao.newUserView(usr); + } + + public static ProjectResponse newProjectResponse(ProjectJoinVO proj) { + return _projectJoinDao.newProjectResponse(proj); + } + + public static ProjectResponse fillProjectDetails(ProjectResponse rsp, ProjectJoinVO proj){ + return _projectJoinDao.setProjectResponse(rsp,proj); + } + + public static List newProjectView(Project proj){ + return _projectJoinDao.newProjectView(proj); + } + + public static List findUserViewByAccountId(Long accountId){ + return _userAccountJoinDao.searchByAccountId(accountId); + } + + public static ProjectAccountResponse newProjectAccountResponse(ProjectAccountJoinVO proj) { + return _projectAccountJoinDao.newProjectAccountResponse(proj); + } + + public static ProjectAccountJoinVO newProjectAccountView(ProjectAccount proj) { + return _projectAccountJoinDao.newProjectAccountView(proj); + } + + public static ProjectInvitationResponse newProjectInvitationResponse(ProjectInvitationJoinVO proj) { + return _projectInvitationJoinDao.newProjectInvitationResponse(proj); + } + + public static ProjectInvitationJoinVO newProjectInvitationView(ProjectInvitation proj) { + return _projectInvitationJoinDao.newProjectInvitationView(proj); + } + +} diff --git a/api/src/org/apache/cloudstack/api/view/ViewResponseHelper.java b/api/src/org/apache/cloudstack/api/view/ViewResponseHelper.java new file mode 100644 index 00000000000..39c0429047c --- /dev/null +++ b/api/src/org/apache/cloudstack/api/view/ViewResponseHelper.java @@ -0,0 +1,43 @@ +// 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 org.apache.cloudstack.api.view; + +import org.apache.cloudstack.api.response.ControlledViewEntityResponse; +import org.apache.cloudstack.api.view.vo.ControlledViewEntity; + +import com.cloud.user.Account; + +/** + * Some helper routine in generating response from db view. + * @author minc + * + */ +public class ViewResponseHelper { + + 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()); + } +} diff --git a/server/src/com/cloud/vm/dao/DomainRouterJoinDao.java b/api/src/org/apache/cloudstack/api/view/dao/DomainRouterJoinDao.java similarity index 97% rename from server/src/com/cloud/vm/dao/DomainRouterJoinDao.java rename to api/src/org/apache/cloudstack/api/view/dao/DomainRouterJoinDao.java index 9bb03be7539..54390c17f37 100644 --- a/server/src/com/cloud/vm/dao/DomainRouterJoinDao.java +++ b/api/src/org/apache/cloudstack/api/view/dao/DomainRouterJoinDao.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.vm.dao; +package org.apache.cloudstack.api.view.dao; import java.util.List; diff --git a/server/src/com/cloud/vm/dao/DomainRouterJoinDaoImpl.java b/api/src/org/apache/cloudstack/api/view/dao/DomainRouterJoinDaoImpl.java similarity index 98% rename from server/src/com/cloud/vm/dao/DomainRouterJoinDaoImpl.java rename to api/src/org/apache/cloudstack/api/view/dao/DomainRouterJoinDaoImpl.java index 38839e3255c..0f3a96c7026 100644 --- a/server/src/com/cloud/vm/dao/DomainRouterJoinDaoImpl.java +++ b/api/src/org/apache/cloudstack/api/view/dao/DomainRouterJoinDaoImpl.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.vm.dao; +package org.apache.cloudstack.api.view.dao; import java.util.ArrayList; import java.util.List; @@ -23,9 +23,10 @@ import javax.ejb.Local; import org.apache.log4j.Logger; -import com.cloud.api.ApiResponseHelper; + import org.apache.cloudstack.api.response.DomainRouterResponse; import org.apache.cloudstack.api.response.NicResponse; +import org.apache.cloudstack.api.view.ViewResponseHelper; import org.apache.cloudstack.api.view.vo.DomainRouterJoinVO; import com.cloud.network.Networks.TrafficType; import com.cloud.network.router.VirtualRouter; @@ -132,7 +133,7 @@ public class DomainRouterJoinDaoImpl extends GenericDaoBase implemen responseEvent.setState(event.getState()); responseEvent.setUsername(event.getUserName()); - ApiResponseHelper.populateOwner(responseEvent, event); + ViewResponseHelper.populateOwner(responseEvent, event); responseEvent.setObjectName("event"); return responseEvent; } diff --git a/server/src/com/cloud/vm/dao/InstanceGroupJoinDao.java b/api/src/org/apache/cloudstack/api/view/dao/InstanceGroupJoinDao.java similarity index 96% rename from server/src/com/cloud/vm/dao/InstanceGroupJoinDao.java rename to api/src/org/apache/cloudstack/api/view/dao/InstanceGroupJoinDao.java index 64599be010e..1d067fc3519 100644 --- a/server/src/com/cloud/vm/dao/InstanceGroupJoinDao.java +++ b/api/src/org/apache/cloudstack/api/view/dao/InstanceGroupJoinDao.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.vm.dao; +package org.apache.cloudstack.api.view.dao; import java.util.List; diff --git a/server/src/com/cloud/vm/dao/InstanceGroupJoinDaoImpl.java b/api/src/org/apache/cloudstack/api/view/dao/InstanceGroupJoinDaoImpl.java similarity index 94% rename from server/src/com/cloud/vm/dao/InstanceGroupJoinDaoImpl.java rename to api/src/org/apache/cloudstack/api/view/dao/InstanceGroupJoinDaoImpl.java index aa20b770dc3..cdc65915eb8 100644 --- a/server/src/com/cloud/vm/dao/InstanceGroupJoinDaoImpl.java +++ b/api/src/org/apache/cloudstack/api/view/dao/InstanceGroupJoinDaoImpl.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.vm.dao; +package org.apache.cloudstack.api.view.dao; import java.util.List; @@ -22,8 +22,8 @@ import javax.ejb.Local; import org.apache.log4j.Logger; -import com.cloud.api.ApiResponseHelper; import org.apache.cloudstack.api.response.InstanceGroupResponse; +import org.apache.cloudstack.api.view.ViewResponseHelper; import org.apache.cloudstack.api.view.vo.InstanceGroupJoinVO; import com.cloud.utils.db.GenericDaoBase; @@ -63,7 +63,7 @@ public class InstanceGroupJoinDaoImpl extends GenericDaoBase impl // update tag information Long tag_id = proj.getTagId(); if (tag_id != null && tag_id.longValue() > 0) { - ResourceTagJoinVO vtag = ApiDBUtils.findResourceTagViewById(tag_id); + ResourceTagJoinVO vtag = DBViewUtils.findResourceTagViewById(tag_id); if ( vtag != null ){ - response.addTag(ApiDBUtils.newResourceTagResponse(vtag, false)); + response.addTag(DBViewUtils.newResourceTagResponse(vtag, false)); } } @@ -83,9 +84,9 @@ public class ProjectJoinDaoImpl extends GenericDaoBase impl // update tag information Long tag_id = proj.getTagId(); if (tag_id != null && tag_id.longValue() > 0) { - ResourceTagJoinVO vtag = ApiDBUtils.findResourceTagViewById(tag_id); + ResourceTagJoinVO vtag = DBViewUtils.findResourceTagViewById(tag_id); if ( vtag != null ){ - rsp.addTag(ApiDBUtils.newResourceTagResponse(vtag, false)); + rsp.addTag(DBViewUtils.newResourceTagResponse(vtag, false)); } } return rsp; diff --git a/server/src/com/cloud/tags/dao/ResourceTagJoinDao.java b/api/src/org/apache/cloudstack/api/view/dao/ResourceTagJoinDao.java similarity index 96% rename from server/src/com/cloud/tags/dao/ResourceTagJoinDao.java rename to api/src/org/apache/cloudstack/api/view/dao/ResourceTagJoinDao.java index 8dd3d82d02e..38f3e0d7b92 100644 --- a/server/src/com/cloud/tags/dao/ResourceTagJoinDao.java +++ b/api/src/org/apache/cloudstack/api/view/dao/ResourceTagJoinDao.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.tags.dao; +package org.apache.cloudstack.api.view.dao; import java.util.List; diff --git a/server/src/com/cloud/tags/dao/ResourceTagJoinDaoImpl.java b/api/src/org/apache/cloudstack/api/view/dao/ResourceTagJoinDaoImpl.java similarity index 95% rename from server/src/com/cloud/tags/dao/ResourceTagJoinDaoImpl.java rename to api/src/org/apache/cloudstack/api/view/dao/ResourceTagJoinDaoImpl.java index 3c2dafa03e4..519ef3d0194 100644 --- a/server/src/com/cloud/tags/dao/ResourceTagJoinDaoImpl.java +++ b/api/src/org/apache/cloudstack/api/view/dao/ResourceTagJoinDaoImpl.java @@ -14,17 +14,17 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.tags.dao; +package org.apache.cloudstack.api.view.dao; -import java.util.ArrayList; import java.util.List; import javax.ejb.Local; import org.apache.log4j.Logger; -import com.cloud.api.ApiResponseHelper; + import org.apache.cloudstack.api.response.ResourceTagResponse; +import org.apache.cloudstack.api.view.ViewResponseHelper; import org.apache.cloudstack.api.view.vo.ResourceTagJoinVO; import com.cloud.server.ResourceTag; import com.cloud.utils.db.GenericDaoBase; @@ -67,7 +67,7 @@ public class ResourceTagJoinDaoImpl extends GenericDaoBase searchByIds(Long... ids); } - diff --git a/server/src/com/cloud/network/security/dao/SecurityGroupJoinDaoImpl.java b/api/src/org/apache/cloudstack/api/view/dao/SecurityGroupJoinDaoImpl.java similarity index 92% rename from server/src/com/cloud/network/security/dao/SecurityGroupJoinDaoImpl.java rename to api/src/org/apache/cloudstack/api/view/dao/SecurityGroupJoinDaoImpl.java index 6ecb258b39a..95256c5c77b 100644 --- a/server/src/com/cloud/network/security/dao/SecurityGroupJoinDaoImpl.java +++ b/api/src/org/apache/cloudstack/api/view/dao/SecurityGroupJoinDaoImpl.java @@ -14,19 +14,18 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.network.security.dao; +package org.apache.cloudstack.api.view.dao; -import java.util.ArrayList; import java.util.List; import javax.ejb.Local; import org.apache.log4j.Logger; -import com.cloud.api.ApiDBUtils; -import com.cloud.api.ApiResponseHelper; import org.apache.cloudstack.api.response.SecurityGroupResponse; import org.apache.cloudstack.api.response.SecurityGroupRuleResponse; +import org.apache.cloudstack.api.view.DBViewUtils; +import org.apache.cloudstack.api.view.ViewResponseHelper; import org.apache.cloudstack.api.view.vo.ResourceTagJoinVO; import org.apache.cloudstack.api.view.vo.SecurityGroupJoinVO; import com.cloud.network.security.SecurityGroup; @@ -64,7 +63,7 @@ public class SecurityGroupJoinDaoImpl extends GenericDaoBase 0) { @@ -103,9 +102,9 @@ public class SecurityGroupJoinDaoImpl extends GenericDaoBase 0) { - ResourceTagJoinVO vtag = ApiDBUtils.findResourceTagViewById(tag_id); + ResourceTagJoinVO vtag = DBViewUtils.findResourceTagViewById(tag_id); if ( vtag != null ){ - sgResponse.addTag(ApiDBUtils.newResourceTagResponse(vtag, false)); + sgResponse.addTag(DBViewUtils.newResourceTagResponse(vtag, false)); } } sgResponse.setObjectName("securitygroup"); @@ -152,9 +151,9 @@ public class SecurityGroupJoinDaoImpl extends GenericDaoBase 0 ) { - ResourceTagJoinVO vtag = ApiDBUtils.findResourceTagViewById(tag_id); + ResourceTagJoinVO vtag = DBViewUtils.findResourceTagViewById(tag_id); if ( vtag != null ){ - vsgData.addTag(ApiDBUtils.newResourceTagResponse(vtag, false)); + vsgData.addTag(DBViewUtils.newResourceTagResponse(vtag, false)); } } return vsgData; diff --git a/server/src/com/cloud/user/dao/UserAccountJoinDao.java b/api/src/org/apache/cloudstack/api/view/dao/UserAccountJoinDao.java similarity index 96% rename from server/src/com/cloud/user/dao/UserAccountJoinDao.java rename to api/src/org/apache/cloudstack/api/view/dao/UserAccountJoinDao.java index 39a82d05c74..d13d932c0f4 100644 --- a/server/src/com/cloud/user/dao/UserAccountJoinDao.java +++ b/api/src/org/apache/cloudstack/api/view/dao/UserAccountJoinDao.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.user.dao; +package org.apache.cloudstack.api.view.dao; import java.util.List; diff --git a/server/src/com/cloud/user/dao/UserAccountJoinDaoImpl.java b/api/src/org/apache/cloudstack/api/view/dao/UserAccountJoinDaoImpl.java similarity index 93% rename from server/src/com/cloud/user/dao/UserAccountJoinDaoImpl.java rename to api/src/org/apache/cloudstack/api/view/dao/UserAccountJoinDaoImpl.java index e854ae5c493..556da8c87bc 100644 --- a/server/src/com/cloud/user/dao/UserAccountJoinDaoImpl.java +++ b/api/src/org/apache/cloudstack/api/view/dao/UserAccountJoinDaoImpl.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.user.dao; +package org.apache.cloudstack.api.view.dao; import java.util.List; @@ -22,20 +22,15 @@ import javax.ejb.Local; import org.apache.log4j.Logger; -import com.cloud.api.ApiDBUtils; -import com.cloud.api.ApiResponseHelper; -import org.apache.cloudstack.api.response.InstanceGroupResponse; + import org.apache.cloudstack.api.response.UserResponse; -import org.apache.cloudstack.api.view.vo.InstanceGroupJoinVO; import org.apache.cloudstack.api.view.vo.UserAccountJoinVO; -import com.cloud.user.Account; import com.cloud.user.User; import com.cloud.user.UserAccount; import com.cloud.utils.db.GenericDaoBase; import com.cloud.utils.db.SearchBuilder; import com.cloud.utils.db.SearchCriteria; -import com.cloud.vm.InstanceGroup; @Local(value={UserAccountJoinDao.class}) diff --git a/server/src/com/cloud/vm/dao/UserVmJoinDao.java b/api/src/org/apache/cloudstack/api/view/dao/UserVmJoinDao.java similarity index 97% rename from server/src/com/cloud/vm/dao/UserVmJoinDao.java rename to api/src/org/apache/cloudstack/api/view/dao/UserVmJoinDao.java index 7788a62dca7..9f8618c98ee 100644 --- a/server/src/com/cloud/vm/dao/UserVmJoinDao.java +++ b/api/src/org/apache/cloudstack/api/view/dao/UserVmJoinDao.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.vm.dao; +package org.apache.cloudstack.api.view.dao; import java.util.EnumSet; import java.util.List; diff --git a/server/src/com/cloud/vm/dao/UserVmJoinDaoImpl.java b/api/src/org/apache/cloudstack/api/view/dao/UserVmJoinDaoImpl.java similarity index 95% rename from server/src/com/cloud/vm/dao/UserVmJoinDaoImpl.java rename to api/src/org/apache/cloudstack/api/view/dao/UserVmJoinDaoImpl.java index b20e53f10ea..b7821cc01a4 100644 --- a/server/src/com/cloud/vm/dao/UserVmJoinDaoImpl.java +++ b/api/src/org/apache/cloudstack/api/view/dao/UserVmJoinDaoImpl.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.vm.dao; +package org.apache.cloudstack.api.view.dao; import java.text.DecimalFormat; import java.util.ArrayList; @@ -26,11 +26,12 @@ import javax.ejb.Local; import org.apache.log4j.Logger; -import com.cloud.api.ApiDBUtils; +//import com.cloud.api.ApiDBUtils; import org.apache.cloudstack.api.ApiConstants.VMDetails; import org.apache.cloudstack.api.response.NicResponse; import org.apache.cloudstack.api.response.SecurityGroupResponse; import org.apache.cloudstack.api.response.UserVmResponse; +import org.apache.cloudstack.api.view.DBViewUtils; import org.apache.cloudstack.api.view.vo.ResourceTagJoinVO; import org.apache.cloudstack.api.view.vo.UserVmJoinVO; import com.cloud.user.Account; @@ -131,6 +132,8 @@ public class UserVmJoinDaoImpl extends GenericDaoBase implem userVmResponse.setPublicIp(userVm.getPublicIpAddress()); userVmResponse.setKeyPairName(userVm.getKeypairName()); + /*TODO: we need to invoke cloud-engine API to get Vm statistics or StatsConnector needs + * to put them into DB tables if (details.contains(VMDetails.all) || details.contains(VMDetails.stats)) { DecimalFormat decimalFormat = new DecimalFormat("#.##"); // stats calculation @@ -148,6 +151,7 @@ public class UserVmJoinDaoImpl extends GenericDaoBase implem userVmResponse.setNetworkKbsWrite(networkKbWrite.longValue()); } } + */ if (details.contains(VMDetails.all) || details.contains(VMDetails.secgrp)) { Long securityGroupId = userVm.getSecurityGroupId(); @@ -198,9 +202,9 @@ public class UserVmJoinDaoImpl extends GenericDaoBase implem // update tag information long tag_id = userVm.getTagId(); if (tag_id > 0) { - ResourceTagJoinVO vtag = ApiDBUtils.findResourceTagViewById(tag_id); + ResourceTagJoinVO vtag = DBViewUtils.findResourceTagViewById(tag_id); if ( vtag != null ){ - userVmResponse.addTag(ApiDBUtils.newResourceTagResponse(vtag, false)); + userVmResponse.addTag(DBViewUtils.newResourceTagResponse(vtag, false)); } } userVmResponse.setObjectName(objectName); @@ -253,9 +257,9 @@ public class UserVmJoinDaoImpl extends GenericDaoBase implem long tag_id = uvo.getTagId(); if (tag_id > 0) { - ResourceTagJoinVO vtag = ApiDBUtils.findResourceTagViewById(tag_id); + ResourceTagJoinVO vtag = DBViewUtils.findResourceTagViewById(tag_id); if ( vtag != null ){ - userVmData.addTag(ApiDBUtils.newResourceTagResponse(vtag, false)); + userVmData.addTag(DBViewUtils.newResourceTagResponse(vtag, false)); } } return userVmData; diff --git a/server/src/com/cloud/api/ApiDBUtils.java b/server/src/com/cloud/api/ApiDBUtils.java index d5cce52e5f9..ae4260929a3 100755 --- a/server/src/com/cloud/api/ApiDBUtils.java +++ b/server/src/com/cloud/api/ApiDBUtils.java @@ -33,6 +33,16 @@ import org.apache.cloudstack.api.response.ResourceTagResponse; import org.apache.cloudstack.api.response.SecurityGroupResponse; import org.apache.cloudstack.api.response.UserResponse; import org.apache.cloudstack.api.response.UserVmResponse; +import org.apache.cloudstack.api.view.dao.DomainRouterJoinDao; +import org.apache.cloudstack.api.view.dao.EventJoinDao; +import org.apache.cloudstack.api.view.dao.InstanceGroupJoinDao; +import org.apache.cloudstack.api.view.dao.ProjectAccountJoinDao; +import org.apache.cloudstack.api.view.dao.ProjectInvitationJoinDao; +import org.apache.cloudstack.api.view.dao.ProjectJoinDao; +import org.apache.cloudstack.api.view.dao.ResourceTagJoinDao; +import org.apache.cloudstack.api.view.dao.SecurityGroupJoinDao; +import org.apache.cloudstack.api.view.dao.UserAccountJoinDao; +import org.apache.cloudstack.api.view.dao.UserVmJoinDao; import org.apache.cloudstack.api.view.vo.DomainRouterJoinVO; import org.apache.cloudstack.api.view.vo.EventJoinVO; import org.apache.cloudstack.api.view.vo.InstanceGroupJoinVO; @@ -66,7 +76,6 @@ import com.cloud.dc.dao.VlanDao; import com.cloud.domain.DomainVO; import com.cloud.domain.dao.DomainDao; import com.cloud.event.Event; -import com.cloud.event.dao.EventJoinDao; import com.cloud.exception.InvalidParameterValueException; import com.cloud.ha.HighAvailabilityManager; import com.cloud.host.Host; @@ -112,7 +121,6 @@ import com.cloud.network.security.SecurityGroup; import com.cloud.network.security.SecurityGroupManager; import com.cloud.network.security.SecurityGroupVO; import com.cloud.network.security.dao.SecurityGroupDao; -import com.cloud.network.security.dao.SecurityGroupJoinDao; import com.cloud.network.vpc.VpcManager; import com.cloud.offering.NetworkOffering; import com.cloud.offering.ServiceOffering; @@ -122,9 +130,6 @@ import com.cloud.projects.Project; import com.cloud.projects.ProjectAccount; import com.cloud.projects.ProjectInvitation; import com.cloud.projects.ProjectService; -import com.cloud.projects.dao.ProjectAccountJoinDao; -import com.cloud.projects.dao.ProjectInvitationJoinDao; -import com.cloud.projects.dao.ProjectJoinDao; import com.cloud.resource.ResourceManager; import com.cloud.server.Criteria; import com.cloud.server.ManagementServer; @@ -162,7 +167,6 @@ import com.cloud.storage.dao.VMTemplateHostDao; import com.cloud.storage.dao.VMTemplateSwiftDao; import com.cloud.storage.dao.VolumeDao; import com.cloud.storage.dao.VolumeHostDao; -import com.cloud.tags.dao.ResourceTagJoinDao; import com.cloud.user.Account; import com.cloud.user.AccountDetailsDao; import com.cloud.user.AccountVO; @@ -174,7 +178,6 @@ import com.cloud.user.UserStatisticsVO; import com.cloud.user.UserVO; import com.cloud.user.dao.AccountDao; import com.cloud.user.dao.SSHKeyPairDao; -import com.cloud.user.dao.UserAccountJoinDao; import com.cloud.user.dao.UserDao; import com.cloud.user.dao.UserStatisticsDao; import com.cloud.uservm.UserVm; @@ -194,11 +197,8 @@ 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.InstanceGroupJoinDao; import com.cloud.vm.dao.UserVmDao; import com.cloud.vm.dao.UserVmDetailsDao; -import com.cloud.vm.dao.UserVmJoinDao; import com.cloud.vm.dao.VMInstanceDao; public class ApiDBUtils { @@ -944,127 +944,6 @@ public class ApiDBUtils { 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 newDomainRouterView(VirtualRouter vr){ - return _domainRouterJoinDao.newDomainRouterView(vr); - } - - public static UserVmResponse newUserVmResponse(String objectName, UserVmJoinVO userVm, EnumSet 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 newUserVmView(UserVm... userVms){ - return _userVmJoinDao.newUserVmView(userVms); - } - - public static SecurityGroupResponse newSecurityGroupResponse(SecurityGroupJoinVO vsg, Account caller) { - return _securityGroupJoinDao.newSecurityGroupResponse(vsg, caller); - } - - public static SecurityGroupResponse fillSecurityGroupDetails(SecurityGroupResponse vsgData, SecurityGroupJoinVO sg){ - return _securityGroupJoinDao.setSecurityGroupResponse(vsgData, sg); - } - - public static List newSecurityGroupView(SecurityGroup sg){ - return _securityGroupJoinDao.newSecurityGroupView(sg); - } - - public static List findSecurityGroupViewById(Long sgId){ - return _securityGroupJoinDao.searchByIds(sgId); - } - - public static ResourceTagResponse newResourceTagResponse(ResourceTagJoinVO vsg, boolean keyValueOnly) { - return _tagJoinDao.newResourceTagResponse(vsg, keyValueOnly); - } - - public static ResourceTagJoinVO newResourceTagView(ResourceTag sg){ - return _tagJoinDao.newResourceTagView(sg); - } - - public static ResourceTagJoinVO findResourceTagViewById(Long tagId){ - List tags = _tagJoinDao.searchByIds(tagId); - if ( tags != null && tags.size() > 0 ){ - return tags.get(0); - } - else{ - return null; - } - } - - public static EventResponse newEventResponse(EventJoinVO ve) { - return _eventJoinDao.newEventResponse(ve); - } - - public static EventJoinVO newEventView(Event e){ - return _eventJoinDao.newEventView(e); - } - - public static InstanceGroupResponse newInstanceGroupResponse(InstanceGroupJoinVO ve) { - return _vmGroupJoinDao.newInstanceGroupResponse(ve); - } - - public static InstanceGroupJoinVO newInstanceGroupView(InstanceGroup e){ - return _vmGroupJoinDao.newInstanceGroupView(e); - } - - public static UserResponse newUserResponse(UserAccountJoinVO usr) { - return _userAccountJoinDao.newUserResponse(usr); - } - - public static UserAccountJoinVO newUserView(User usr){ - return _userAccountJoinDao.newUserView(usr); - } - - public static UserAccountJoinVO newUserView(UserAccount usr){ - return _userAccountJoinDao.newUserView(usr); - } - - public static ProjectResponse newProjectResponse(ProjectJoinVO proj) { - return _projectJoinDao.newProjectResponse(proj); - } - - public static ProjectResponse fillProjectDetails(ProjectResponse rsp, ProjectJoinVO proj){ - return _projectJoinDao.setProjectResponse(rsp,proj); - } - - public static List newProjectView(Project proj){ - return _projectJoinDao.newProjectView(proj); - } - - public static List findUserViewByAccountId(Long accountId){ - return _userAccountJoinDao.searchByAccountId(accountId); - } - - public static ProjectAccountResponse newProjectAccountResponse(ProjectAccountJoinVO proj) { - return _projectAccountJoinDao.newProjectAccountResponse(proj); - } - - public static ProjectAccountJoinVO newProjectAccountView(ProjectAccount proj) { - return _projectAccountJoinDao.newProjectAccountView(proj); - } - - public static ProjectInvitationResponse newProjectInvitationResponse(ProjectInvitationJoinVO proj) { - return _projectInvitationJoinDao.newProjectInvitationResponse(proj); - } - - public static ProjectInvitationJoinVO newProjectInvitationView(ProjectInvitation proj) { - return _projectInvitationJoinDao.newProjectInvitationView(proj); - } } diff --git a/server/src/com/cloud/api/ApiResponseHelper.java b/server/src/com/cloud/api/ApiResponseHelper.java index 1e2b87d0941..72c3bc8d85a 100755 --- a/server/src/com/cloud/api/ApiResponseHelper.java +++ b/server/src/com/cloud/api/ApiResponseHelper.java @@ -112,6 +112,7 @@ import org.apache.cloudstack.api.response.VpcOfferingResponse; import org.apache.cloudstack.api.response.VpcResponse; import org.apache.cloudstack.api.response.VpnUsersResponse; import org.apache.cloudstack.api.response.ZoneResponse; +import org.apache.cloudstack.api.view.DBViewUtils; import org.apache.cloudstack.api.view.vo.DomainRouterJoinVO; import org.apache.cloudstack.api.view.vo.ControlledViewEntity; import org.apache.cloudstack.api.view.vo.EventJoinVO; @@ -242,8 +243,8 @@ public class ApiResponseHelper implements ResponseGenerator { @Override public UserResponse createUserResponse(User user) { - UserAccountJoinVO vUser = ApiDBUtils.newUserView(user); - return ApiDBUtils.newUserResponse(vUser); + UserAccountJoinVO vUser = DBViewUtils.newUserView(user); + return DBViewUtils.newUserResponse(vUser); } @@ -251,7 +252,7 @@ public class ApiResponseHelper implements ResponseGenerator { public List createUserResponse(UserAccountJoinVO... users) { List respList = new ArrayList(); for (UserAccountJoinVO vt : users){ - respList.add(ApiDBUtils.newUserResponse(vt)); + respList.add(DBViewUtils.newUserResponse(vt)); } return respList; } @@ -415,8 +416,8 @@ public class ApiResponseHelper implements ResponseGenerator { @Override public UserResponse createUserResponse(UserAccount user) { - UserAccountJoinVO vUser = ApiDBUtils.newUserView(user); - return ApiDBUtils.newUserResponse(vUser); + UserAccountJoinVO vUser = DBViewUtils.newUserView(user); + return DBViewUtils.newUserResponse(vUser); } @Override @@ -1170,8 +1171,8 @@ public class ApiResponseHelper implements ResponseGenerator { @Override public InstanceGroupResponse createInstanceGroupResponse(InstanceGroup group) { - InstanceGroupJoinVO vgroup = ApiDBUtils.newInstanceGroupView(group); - return ApiDBUtils.newInstanceGroupResponse(vgroup); + InstanceGroupJoinVO vgroup = DBViewUtils.newInstanceGroupView(group); + return DBViewUtils.newInstanceGroupResponse(vgroup); } @@ -1181,7 +1182,7 @@ public class ApiResponseHelper implements ResponseGenerator { public List createInstanceGroupResponse(InstanceGroupJoinVO... groups) { List respList = new ArrayList(); for (InstanceGroupJoinVO vt : groups){ - respList.add(ApiDBUtils.newInstanceGroupResponse(vt)); + respList.add(DBViewUtils.newInstanceGroupResponse(vt)); } return respList; } @@ -1368,14 +1369,14 @@ public class ApiResponseHelper implements ResponseGenerator { @Override public List createUserVmResponse(String objectName, EnumSet details, UserVm... userVms) { - List viewVms = ApiDBUtils.newUserVmView(userVms); + List viewVms = DBViewUtils.newUserVmView(userVms); return createUserVmResponse(objectName, details, viewVms.toArray(new UserVmJoinVO[viewVms.size()])); } @Override public List createUserVmResponse(String objectName, UserVm... userVms) { - List viewVms = ApiDBUtils.newUserVmView(userVms); + List viewVms = DBViewUtils.newUserVmView(userVms); return createUserVmResponse(objectName, viewVms.toArray(new UserVmJoinVO[viewVms.size()])); } @@ -1397,10 +1398,10 @@ public class ApiResponseHelper implements ResponseGenerator { UserVmResponse userVmData = vmDataList.get(userVm.getId()); if ( userVmData == null ){ // first time encountering this vm - userVmData = ApiDBUtils.newUserVmResponse(objectName, userVm, details, caller); + userVmData = DBViewUtils.newUserVmResponse(objectName, userVm, details, caller); } else{ // update nics, securitygroups, tags for 1 to many mapping fields - userVmData = ApiDBUtils.fillVmDetails(userVmData, userVm); + userVmData = DBViewUtils.fillVmDetails(userVmData, userVm); } vmDataList.put(userVm.getId(), userVmData); } @@ -1410,7 +1411,7 @@ public class ApiResponseHelper implements ResponseGenerator { @Override public DomainRouterResponse createDomainRouterResponse(VirtualRouter router) { - List viewVrs = ApiDBUtils.newDomainRouterView(router); + List viewVrs = DBViewUtils.newDomainRouterView(router); List 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); @@ -1425,11 +1426,11 @@ public class ApiResponseHelper implements ResponseGenerator { DomainRouterResponse vrData = vrDataList.get(vr.getId()); if ( vrData == null ){ // first time encountering this vm - vrData = ApiDBUtils.newDomainRouterResponse(vr, caller); + vrData = DBViewUtils.newDomainRouterResponse(vr, caller); } else{ // update nics for 1 to many mapping fields - vrData = ApiDBUtils.fillRouterDetails(vrData, vr); + vrData = DBViewUtils.fillRouterDetails(vrData, vr); } vrDataList.put(vr.getId(), vrData); } @@ -2015,11 +2016,11 @@ public class ApiResponseHelper implements ResponseGenerator { SecurityGroupResponse vrData = vrDataList.get(vr.getId()); if ( vrData == null ) { // first time encountering this sg - vrData = ApiDBUtils.newSecurityGroupResponse(vr, caller); + vrData = DBViewUtils.newSecurityGroupResponse(vr, caller); } else { // update rules for 1 to many mapping fields - vrData = ApiDBUtils.fillSecurityGroupDetails(vrData, vr); + vrData = DBViewUtils.fillSecurityGroupDetails(vrData, vr); } vrDataList.put(vr.getId(), vrData); } @@ -2028,7 +2029,7 @@ public class ApiResponseHelper implements ResponseGenerator { @Override public SecurityGroupResponse createSecurityGroupResponse(SecurityGroup group) { - List viewSgs = ApiDBUtils.newSecurityGroupView(group); + List viewSgs = DBViewUtils.newSecurityGroupView(group); List listSgs = createSecurityGroupResponses(viewSgs); assert listSgs != null && listSgs.size() == 1 : "There should be one security group returned"; return listSgs.get(0); @@ -2121,15 +2122,15 @@ public class ApiResponseHelper implements ResponseGenerator { public List createEventResponse(EventJoinVO... events) { List respList = new ArrayList(); for (EventJoinVO vt : events){ - respList.add(ApiDBUtils.newEventResponse(vt)); + respList.add(DBViewUtils.newEventResponse(vt)); } return respList; } @Override public EventResponse createEventResponse(Event event) { - EventJoinVO vEvent = ApiDBUtils.newEventView(event); - return ApiDBUtils.newEventResponse(vEvent); + EventJoinVO vEvent = DBViewUtils.newEventView(event); + return DBViewUtils.newEventResponse(vEvent); } private List sumCapacities(List hostCapacities) { @@ -2383,7 +2384,7 @@ public class ApiResponseHelper implements ResponseGenerator { Map allowedSecuriytGroupAccounts = new HashMap(); if ((securityRules != null) && !securityRules.isEmpty()) { - SecurityGroupJoinVO securityGroup = ApiDBUtils.findSecurityGroupViewById(securityRules.get(0).getSecurityGroupId()).get(0); + SecurityGroupJoinVO securityGroup = DBViewUtils.findSecurityGroupViewById(securityRules.get(0).getSecurityGroupId()).get(0); response.setId(securityGroup.getUuid()); response.setName(securityGroup.getName()); response.setDescription(securityGroup.getDescription()); @@ -2415,7 +2416,7 @@ public class ApiResponseHelper implements ResponseGenerator { Long allowedSecurityGroupId = securityRule.getAllowedNetworkId(); if (allowedSecurityGroupId != null) { - List sgs = ApiDBUtils.findSecurityGroupViewById(allowedSecurityGroupId); + List sgs = DBViewUtils.findSecurityGroupViewById(allowedSecurityGroupId); if (sgs != null && sgs.size() > 0) { SecurityGroupJoinVO sg = sgs.get(0); securityGroupData.setSecurityGroupName(sg.getName()); @@ -2674,7 +2675,7 @@ public class ApiResponseHelper implements ResponseGenerator { @Override public ProjectResponse createProjectResponse(Project project) { - List viewPrjs = ApiDBUtils.newProjectView(project); + List viewPrjs = DBViewUtils.newProjectView(project); List listPrjs = createProjectResponse(viewPrjs.toArray(new ProjectJoinVO[viewPrjs.size()])); assert listPrjs != null && listPrjs.size() == 1 : "There should be one project returned"; return listPrjs.get(0); @@ -2689,11 +2690,11 @@ public class ApiResponseHelper implements ResponseGenerator { ProjectResponse pData = prjDataList.get(p.getId()); if ( pData == null ){ // first time encountering this vm - pData = ApiDBUtils.newProjectResponse(p); + pData = DBViewUtils.newProjectResponse(p); } else{ // update those 1 to many mapping fields - pData = ApiDBUtils.fillProjectDetails(pData, p); + pData = DBViewUtils.fillProjectDetails(pData, p); } prjDataList.put(p.getId(), pData); } @@ -2852,7 +2853,7 @@ public class ApiResponseHelper implements ResponseGenerator { @Override public ProjectAccountResponse createProjectAccountResponse(ProjectAccount projectAccount) { - ProjectAccountJoinVO vProj = ApiDBUtils.newProjectAccountView(projectAccount); + ProjectAccountJoinVO vProj = DBViewUtils.newProjectAccountView(projectAccount); List listProjs = createProjectAccountResponse(vProj); assert listProjs != null && listProjs.size() == 1 : "There should be one project account returned"; return listProjs.get(0); @@ -2863,9 +2864,9 @@ public class ApiResponseHelper implements ResponseGenerator { public List createProjectAccountResponse(ProjectAccountJoinVO... projectAccounts) { List responseList = new ArrayList(); for (ProjectAccountJoinVO proj : projectAccounts){ - ProjectAccountResponse resp = ApiDBUtils.newProjectAccountResponse(proj); + ProjectAccountResponse resp = DBViewUtils.newProjectAccountResponse(proj); // update user list - List users = ApiDBUtils.findUserViewByAccountId(proj.getAccountId()); + List users = DBViewUtils.findUserViewByAccountId(proj.getAccountId()); resp.setUsers(createUserResponse(users.toArray(new UserAccountJoinVO[users.size()]))); responseList.add(resp); } @@ -2874,8 +2875,8 @@ public class ApiResponseHelper implements ResponseGenerator { @Override public ProjectInvitationResponse createProjectInvitationResponse(ProjectInvitation invite) { - ProjectInvitationJoinVO vInvite = ApiDBUtils.newProjectInvitationView(invite); - return ApiDBUtils.newProjectInvitationResponse(vInvite); + ProjectInvitationJoinVO vInvite = DBViewUtils.newProjectInvitationView(invite); + return DBViewUtils.newProjectInvitationResponse(vInvite); } @@ -2884,7 +2885,7 @@ public class ApiResponseHelper implements ResponseGenerator { public List createProjectInvitationResponse(ProjectInvitationJoinVO... invites) { List respList = new ArrayList(); for (ProjectInvitationJoinVO v : invites){ - respList.add(ApiDBUtils.newProjectInvitationResponse(v)); + respList.add(DBViewUtils.newProjectInvitationResponse(v)); } return respList; } @@ -3121,8 +3122,8 @@ public class ApiResponseHelper implements ResponseGenerator { @Override public ResourceTagResponse createResourceTagResponse(ResourceTag resourceTag, boolean keyValueOnly) { - ResourceTagJoinVO rto = ApiDBUtils.newResourceTagView(resourceTag); - return ApiDBUtils.newResourceTagResponse(rto, keyValueOnly); + ResourceTagJoinVO rto = DBViewUtils.newResourceTagView(resourceTag); + return DBViewUtils.newResourceTagResponse(rto, keyValueOnly); } @@ -3130,7 +3131,7 @@ public class ApiResponseHelper implements ResponseGenerator { public List createResourceTagResponse(boolean keyValueOnly, ResourceTagJoinVO... tags) { List respList = new ArrayList(); for (ResourceTagJoinVO vt : tags){ - respList.add(ApiDBUtils.newResourceTagResponse(vt, keyValueOnly)); + respList.add(DBViewUtils.newResourceTagResponse(vt, keyValueOnly)); } return respList; } diff --git a/server/src/com/cloud/configuration/DefaultComponentLibrary.java b/server/src/com/cloud/configuration/DefaultComponentLibrary.java index 2dd46fd9ad9..e49425eca83 100755 --- a/server/src/com/cloud/configuration/DefaultComponentLibrary.java +++ b/server/src/com/cloud/configuration/DefaultComponentLibrary.java @@ -21,6 +21,17 @@ import java.util.HashMap; import java.util.List; import java.util.Map; +import org.apache.cloudstack.api.view.dao.DomainRouterJoinDaoImpl; +import org.apache.cloudstack.api.view.dao.EventJoinDaoImpl; +import org.apache.cloudstack.api.view.dao.InstanceGroupJoinDaoImpl; +import org.apache.cloudstack.api.view.dao.ProjectAccountJoinDaoImpl; +import org.apache.cloudstack.api.view.dao.ProjectInvitationJoinDaoImpl; +import org.apache.cloudstack.api.view.dao.ProjectJoinDaoImpl; +import org.apache.cloudstack.api.view.dao.ResourceTagJoinDaoImpl; +import org.apache.cloudstack.api.view.dao.SecurityGroupJoinDaoImpl; +import org.apache.cloudstack.api.view.dao.UserAccountJoinDaoImpl; +import org.apache.cloudstack.api.view.dao.UserVmJoinDaoImpl; + import com.cloud.agent.manager.ClusteredAgentManagerImpl; import com.cloud.alert.AlertManagerImpl; import com.cloud.alert.dao.AlertDaoImpl; @@ -117,7 +128,6 @@ import com.cloud.network.rules.RulesManagerImpl; import com.cloud.network.rules.dao.PortForwardingRulesDaoImpl; import com.cloud.network.security.SecurityGroupManagerImpl2; import com.cloud.network.security.dao.SecurityGroupDaoImpl; -import com.cloud.network.security.dao.SecurityGroupJoinDaoImpl; import com.cloud.network.security.dao.SecurityGroupRuleDaoImpl; import com.cloud.network.security.dao.SecurityGroupRulesDaoImpl; import com.cloud.network.security.dao.SecurityGroupVMMapDaoImpl; @@ -139,8 +149,6 @@ import com.cloud.projects.ProjectManagerImpl; import com.cloud.projects.dao.ProjectAccountDaoImpl; import com.cloud.projects.dao.ProjectDaoImpl; import com.cloud.projects.dao.ProjectInvitationDaoImpl; -import com.cloud.projects.dao.ProjectInvitationJoinDaoImpl; -import com.cloud.projects.dao.ProjectJoinDaoImpl; import com.cloud.resource.ResourceManagerImpl; import com.cloud.resourcelimit.ResourceLimitManagerImpl; import com.cloud.service.dao.ServiceOfferingDaoImpl; @@ -173,7 +181,6 @@ import com.cloud.storage.snapshot.SnapshotSchedulerImpl; import com.cloud.storage.swift.SwiftManagerImpl; import com.cloud.storage.upload.UploadMonitorImpl; import com.cloud.tags.TaggedResourceManagerImpl; -import com.cloud.tags.dao.ResourceTagJoinDaoImpl; import com.cloud.tags.dao.ResourceTagsDaoImpl; import com.cloud.template.HyervisorTemplateAdapter; import com.cloud.template.TemplateAdapter; @@ -185,7 +192,6 @@ import com.cloud.user.DomainManagerImpl; import com.cloud.user.dao.AccountDaoImpl; import com.cloud.user.dao.SSHKeyPairDaoImpl; import com.cloud.user.dao.UserAccountDaoImpl; -import com.cloud.user.dao.UserAccountJoinDaoImpl; import com.cloud.user.dao.UserDaoImpl; import com.cloud.user.dao.UserStatisticsDaoImpl; import com.cloud.user.dao.UserStatsLogDaoImpl; @@ -203,18 +209,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.InstanceGroupJoinDaoImpl; 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; -import com.cloud.event.dao.EventJoinDaoImpl; -import com.cloud.projects.dao.ProjectAccountJoinDaoImpl; public class DefaultComponentLibrary extends ComponentLibraryBase implements ComponentLibrary { diff --git a/server/src/com/cloud/network/security/SecurityGroupManagerImpl.java b/server/src/com/cloud/network/security/SecurityGroupManagerImpl.java index a9d1f0bd7a3..a017f536395 100755 --- a/server/src/com/cloud/network/security/SecurityGroupManagerImpl.java +++ b/server/src/com/cloud/network/security/SecurityGroupManagerImpl.java @@ -46,6 +46,7 @@ import com.cloud.agent.api.SecurityGroupRulesCmd; import com.cloud.agent.api.SecurityGroupRulesCmd.IpPortAndProto; import com.cloud.agent.manager.Commands; import org.apache.cloudstack.api.command.user.securitygroup.RevokeSecurityGroupEgressCmd; +import org.apache.cloudstack.api.view.dao.SecurityGroupJoinDao; import org.apache.cloudstack.api.view.vo.SecurityGroupJoinVO; import com.cloud.configuration.Config; import com.cloud.configuration.dao.ConfigurationDao; @@ -65,7 +66,6 @@ import com.cloud.network.NetworkManager; import com.cloud.network.security.SecurityGroupWork.Step; import com.cloud.network.security.SecurityRule.SecurityRuleType; import com.cloud.network.security.dao.SecurityGroupDao; -import com.cloud.network.security.dao.SecurityGroupJoinDao; import com.cloud.network.security.dao.SecurityGroupRuleDao; import com.cloud.network.security.dao.SecurityGroupRulesDao; import com.cloud.network.security.dao.SecurityGroupVMMapDao; diff --git a/server/src/com/cloud/projects/ProjectManagerImpl.java b/server/src/com/cloud/projects/ProjectManagerImpl.java index 7c97af2699d..51a98ae1481 100755 --- a/server/src/com/cloud/projects/ProjectManagerImpl.java +++ b/server/src/com/cloud/projects/ProjectManagerImpl.java @@ -38,6 +38,9 @@ import javax.mail.URLName; import javax.mail.internet.InternetAddress; import javax.naming.ConfigurationException; +import org.apache.cloudstack.api.view.dao.ProjectAccountJoinDao; +import org.apache.cloudstack.api.view.dao.ProjectInvitationJoinDao; +import org.apache.cloudstack.api.view.dao.ProjectJoinDao; import org.apache.cloudstack.api.view.vo.ProjectAccountJoinVO; import org.apache.cloudstack.api.view.vo.ProjectInvitationJoinVO; import org.apache.cloudstack.api.view.vo.ProjectJoinVO; @@ -62,11 +65,8 @@ import com.cloud.projects.Project.ListProjectResourcesCriteria; import com.cloud.projects.Project.State; import com.cloud.projects.ProjectAccount.Role; import com.cloud.projects.dao.ProjectAccountDao; -import com.cloud.projects.dao.ProjectAccountJoinDao; import com.cloud.projects.dao.ProjectDao; import com.cloud.projects.dao.ProjectInvitationDao; -import com.cloud.projects.dao.ProjectInvitationJoinDao; -import com.cloud.projects.dao.ProjectJoinDao; import com.cloud.server.ResourceTag.TaggedResourceType; import com.cloud.tags.ResourceTagVO; import com.cloud.tags.dao.ResourceTagDao; diff --git a/server/src/com/cloud/server/ManagementServerImpl.java b/server/src/com/cloud/server/ManagementServerImpl.java index a196cd35769..a608a79020b 100755 --- a/server/src/com/cloud/server/ManagementServerImpl.java +++ b/server/src/com/cloud/server/ManagementServerImpl.java @@ -98,6 +98,9 @@ import com.cloud.api.commands.UpdateTemplateOrIsoCmd; import org.apache.cloudstack.api.command.user.vmgroup.UpdateVMGroupCmd; import org.apache.cloudstack.api.command.admin.resource.UploadCustomCertificateCmd; import org.apache.cloudstack.api.response.ExtractResponse; +import org.apache.cloudstack.api.view.dao.DomainRouterJoinDao; +import org.apache.cloudstack.api.view.dao.EventJoinDao; +import org.apache.cloudstack.api.view.dao.InstanceGroupJoinDao; import org.apache.cloudstack.api.view.vo.DomainRouterJoinVO; import org.apache.cloudstack.api.view.vo.EventJoinVO; import org.apache.cloudstack.api.view.vo.InstanceGroupJoinVO; @@ -144,7 +147,6 @@ import com.cloud.event.EventTypes; import com.cloud.event.EventUtils; import com.cloud.event.EventVO; import com.cloud.event.dao.EventDao; -import com.cloud.event.dao.EventJoinDao; import com.cloud.exception.CloudAuthenticationException; import com.cloud.exception.ConcurrentOperationException; import com.cloud.exception.InvalidParameterValueException; @@ -262,9 +264,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.InstanceGroupJoinDao; import com.cloud.vm.dao.NicDao; import com.cloud.vm.dao.SecondaryStorageVmDao; import com.cloud.vm.dao.UserVmDao; diff --git a/server/src/com/cloud/tags/TaggedResourceManagerImpl.java b/server/src/com/cloud/tags/TaggedResourceManagerImpl.java index 0f82142d6b5..6e69bd467da 100644 --- a/server/src/com/cloud/tags/TaggedResourceManagerImpl.java +++ b/server/src/com/cloud/tags/TaggedResourceManagerImpl.java @@ -27,6 +27,7 @@ import javax.naming.ConfigurationException; import org.apache.cloudstack.api.command.user.tag.ListTagsCmd; import org.apache.log4j.Logger; +import org.apache.cloudstack.api.view.dao.ResourceTagJoinDao; import org.apache.cloudstack.api.view.vo.ResourceTagJoinVO; import com.cloud.domain.Domain; import com.cloud.event.ActionEvent; @@ -51,7 +52,6 @@ import com.cloud.storage.dao.SnapshotDao; import com.cloud.storage.dao.VMTemplateDao; import com.cloud.storage.dao.VolumeDao; import com.cloud.tags.dao.ResourceTagDao; -import com.cloud.tags.dao.ResourceTagJoinDao; import com.cloud.user.Account; import com.cloud.user.AccountManager; import com.cloud.user.DomainManager; diff --git a/server/src/com/cloud/user/AccountManagerImpl.java b/server/src/com/cloud/user/AccountManagerImpl.java index e1b806dc603..9bf0de66e1c 100755 --- a/server/src/com/cloud/user/AccountManagerImpl.java +++ b/server/src/com/cloud/user/AccountManagerImpl.java @@ -43,6 +43,8 @@ import org.apache.commons.codec.binary.Base64; import org.apache.log4j.Logger; import com.cloud.acl.ControlledEntity; + +import org.apache.cloudstack.api.view.dao.UserAccountJoinDao; import org.apache.cloudstack.api.view.vo.ControlledViewEntity; import org.apache.cloudstack.api.view.vo.UserAccountJoinVO; @@ -110,7 +112,6 @@ import com.cloud.template.VirtualMachineTemplate; import com.cloud.user.Account.State; import com.cloud.user.dao.AccountDao; import com.cloud.user.dao.UserAccountDao; -import com.cloud.user.dao.UserAccountJoinDao; import com.cloud.user.dao.UserDao; import com.cloud.utils.NumbersUtil; import com.cloud.utils.Pair; diff --git a/server/src/com/cloud/vm/UserVmManagerImpl.java b/server/src/com/cloud/vm/UserVmManagerImpl.java index a8241d02ea7..2e1465533da 100755 --- a/server/src/com/cloud/vm/UserVmManagerImpl.java +++ b/server/src/com/cloud/vm/UserVmManagerImpl.java @@ -74,6 +74,7 @@ import org.apache.cloudstack.api.command.user.vm.ResetVMPasswordCmd; import org.apache.cloudstack.api.command.user.vm.RestoreVMCmd; import org.apache.cloudstack.api.command.user.vm.UpdateVMCmd; import org.apache.cloudstack.api.command.user.vm.UpgradeVMCmd; +import org.apache.cloudstack.api.view.dao.UserVmJoinDao; import org.apache.cloudstack.api.view.vo.UserVmJoinVO; import com.cloud.async.AsyncJobExecutor; import com.cloud.async.AsyncJobManager; @@ -230,7 +231,6 @@ 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 }) diff --git a/server/test/com/cloud/network/security/SecurityGroupManagerImpl2Test.java b/server/test/com/cloud/network/security/SecurityGroupManagerImpl2Test.java index 46b7018f4d2..93bccf481dc 100644 --- a/server/test/com/cloud/network/security/SecurityGroupManagerImpl2Test.java +++ b/server/test/com/cloud/network/security/SecurityGroupManagerImpl2Test.java @@ -23,6 +23,7 @@ import javax.naming.ConfigurationException; import junit.framework.TestCase; +import org.apache.cloudstack.api.view.dao.SecurityGroupJoinDaoImpl; import org.junit.After; import org.junit.Before; import org.junit.Ignore; @@ -34,7 +35,6 @@ import com.cloud.domain.dao.DomainDaoImpl; import com.cloud.event.dao.UsageEventDaoImpl; import com.cloud.network.MockNetworkManagerImpl; import com.cloud.network.security.dao.SecurityGroupDaoImpl; -import com.cloud.network.security.dao.SecurityGroupJoinDaoImpl; import com.cloud.network.security.dao.SecurityGroupRuleDaoImpl; import com.cloud.network.security.dao.SecurityGroupRulesDaoImpl; import com.cloud.network.security.dao.SecurityGroupVMMapDaoImpl; From 88b7af18e6cba787d821ff7bc079176518c212e5 Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Thu, 13 Dec 2012 09:42:28 -0800 Subject: [PATCH 106/421] api: Revert "Move all the DB view DAOs from cloud-server to cloud-api for future api-server package." Reverting commit as we don't want the daos to move to cloud-api. We'll eventually breakout cloud-server and create cloud-api-server for the standalone api server. This reverts commit 7597a38f7a255e49b73c833918f30b51504e0c53. --- .../cloudstack/api/view/DBViewUtils.java | 225 ------------------ .../api/view/ViewResponseHelper.java | 43 ---- server/src/com/cloud/api/ApiDBUtils.java | 141 ++++++++++- .../src/com/cloud/api/ApiResponseHelper.java | 71 +++--- .../DefaultComponentLibrary.java | 21 +- .../com/cloud/event}/dao/EventJoinDao.java | 2 +- .../cloud/event}/dao/EventJoinDaoImpl.java | 8 +- .../security/SecurityGroupManagerImpl.java | 2 +- .../security}/dao/SecurityGroupJoinDao.java | 3 +- .../dao/SecurityGroupJoinDaoImpl.java | 17 +- .../cloud/projects/ProjectManagerImpl.java | 6 +- .../projects}/dao/ProjectAccountJoinDao.java | 2 +- .../dao/ProjectAccountJoinDaoImpl.java | 2 +- .../dao/ProjectInvitationJoinDao.java | 2 +- .../dao/ProjectInvitationJoinDaoImpl.java | 5 +- .../cloud/projects}/dao/ProjectJoinDao.java | 2 +- .../projects}/dao/ProjectJoinDaoImpl.java | 13 +- .../cloud/server/ManagementServerImpl.java | 6 +- .../cloud/tags/TaggedResourceManagerImpl.java | 2 +- .../cloud/tags}/dao/ResourceTagJoinDao.java | 2 +- .../tags}/dao/ResourceTagJoinDaoImpl.java | 8 +- .../com/cloud/user/AccountManagerImpl.java | 3 +- .../cloud/user}/dao/UserAccountJoinDao.java | 2 +- .../user}/dao/UserAccountJoinDaoImpl.java | 9 +- .../src/com/cloud/vm/UserVmManagerImpl.java | 2 +- .../cloud/vm}/dao/DomainRouterJoinDao.java | 2 +- .../vm}/dao/DomainRouterJoinDaoImpl.java | 7 +- .../cloud/vm}/dao/InstanceGroupJoinDao.java | 2 +- .../vm}/dao/InstanceGroupJoinDaoImpl.java | 6 +- .../src/com/cloud/vm}/dao/UserVmJoinDao.java | 2 +- .../com/cloud/vm}/dao/UserVmJoinDaoImpl.java | 16 +- .../SecurityGroupManagerImpl2Test.java | 2 +- 32 files changed, 244 insertions(+), 392 deletions(-) delete mode 100644 api/src/org/apache/cloudstack/api/view/DBViewUtils.java delete mode 100644 api/src/org/apache/cloudstack/api/view/ViewResponseHelper.java rename {api/src/org/apache/cloudstack/api/view => server/src/com/cloud/event}/dao/EventJoinDao.java (97%) rename {api/src/org/apache/cloudstack/api/view => server/src/com/cloud/event}/dao/EventJoinDaoImpl.java (96%) rename {api/src/org/apache/cloudstack/api/view => server/src/com/cloud/network/security}/dao/SecurityGroupJoinDao.java (97%) rename {api/src/org/apache/cloudstack/api/view => server/src/com/cloud/network/security}/dao/SecurityGroupJoinDaoImpl.java (92%) rename {api/src/org/apache/cloudstack/api/view => server/src/com/cloud/projects}/dao/ProjectAccountJoinDao.java (96%) rename {api/src/org/apache/cloudstack/api/view => server/src/com/cloud/projects}/dao/ProjectAccountJoinDaoImpl.java (98%) rename {api/src/org/apache/cloudstack/api/view => server/src/com/cloud/projects}/dao/ProjectInvitationJoinDao.java (96%) rename {api/src/org/apache/cloudstack/api/view => server/src/com/cloud/projects}/dao/ProjectInvitationJoinDaoImpl.java (96%) rename {api/src/org/apache/cloudstack/api/view => server/src/com/cloud/projects}/dao/ProjectJoinDao.java (96%) rename {api/src/org/apache/cloudstack/api/view => server/src/com/cloud/projects}/dao/ProjectJoinDaoImpl.java (89%) rename {api/src/org/apache/cloudstack/api/view => server/src/com/cloud/tags}/dao/ResourceTagJoinDao.java (96%) rename {api/src/org/apache/cloudstack/api/view => server/src/com/cloud/tags}/dao/ResourceTagJoinDaoImpl.java (95%) rename {api/src/org/apache/cloudstack/api/view => server/src/com/cloud/user}/dao/UserAccountJoinDao.java (96%) rename {api/src/org/apache/cloudstack/api/view => server/src/com/cloud/user}/dao/UserAccountJoinDaoImpl.java (93%) rename {api/src/org/apache/cloudstack/api/view => server/src/com/cloud/vm}/dao/DomainRouterJoinDao.java (97%) rename {api/src/org/apache/cloudstack/api/view => server/src/com/cloud/vm}/dao/DomainRouterJoinDaoImpl.java (98%) rename {api/src/org/apache/cloudstack/api/view => server/src/com/cloud/vm}/dao/InstanceGroupJoinDao.java (96%) rename {api/src/org/apache/cloudstack/api/view => server/src/com/cloud/vm}/dao/InstanceGroupJoinDaoImpl.java (94%) rename {api/src/org/apache/cloudstack/api/view => server/src/com/cloud/vm}/dao/UserVmJoinDao.java (97%) rename {api/src/org/apache/cloudstack/api/view => server/src/com/cloud/vm}/dao/UserVmJoinDaoImpl.java (95%) diff --git a/api/src/org/apache/cloudstack/api/view/DBViewUtils.java b/api/src/org/apache/cloudstack/api/view/DBViewUtils.java deleted file mode 100644 index 5ea7eb7dab0..00000000000 --- a/api/src/org/apache/cloudstack/api/view/DBViewUtils.java +++ /dev/null @@ -1,225 +0,0 @@ -// 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 org.apache.cloudstack.api.view; - -import java.util.EnumSet; -import java.util.List; - -import org.apache.cloudstack.api.ApiConstants.VMDetails; -import org.apache.cloudstack.api.response.DomainRouterResponse; -import org.apache.cloudstack.api.response.EventResponse; -import org.apache.cloudstack.api.response.InstanceGroupResponse; -import org.apache.cloudstack.api.response.ProjectAccountResponse; -import org.apache.cloudstack.api.response.ProjectInvitationResponse; -import org.apache.cloudstack.api.response.ProjectResponse; -import org.apache.cloudstack.api.response.ResourceTagResponse; -import org.apache.cloudstack.api.response.SecurityGroupResponse; -import org.apache.cloudstack.api.response.UserResponse; -import org.apache.cloudstack.api.response.UserVmResponse; -import org.apache.cloudstack.api.view.dao.DomainRouterJoinDao; -import org.apache.cloudstack.api.view.dao.EventJoinDao; -import org.apache.cloudstack.api.view.dao.InstanceGroupJoinDao; -import org.apache.cloudstack.api.view.dao.ProjectAccountJoinDao; -import org.apache.cloudstack.api.view.dao.ProjectInvitationJoinDao; -import org.apache.cloudstack.api.view.dao.ProjectJoinDao; -import org.apache.cloudstack.api.view.dao.ResourceTagJoinDao; -import org.apache.cloudstack.api.view.dao.SecurityGroupJoinDao; -import org.apache.cloudstack.api.view.dao.UserAccountJoinDao; -import org.apache.cloudstack.api.view.dao.UserVmJoinDao; -import org.apache.cloudstack.api.view.vo.DomainRouterJoinVO; -import org.apache.cloudstack.api.view.vo.EventJoinVO; -import org.apache.cloudstack.api.view.vo.InstanceGroupJoinVO; -import org.apache.cloudstack.api.view.vo.ProjectAccountJoinVO; -import org.apache.cloudstack.api.view.vo.ProjectInvitationJoinVO; -import org.apache.cloudstack.api.view.vo.ProjectJoinVO; -import org.apache.cloudstack.api.view.vo.ResourceTagJoinVO; -import org.apache.cloudstack.api.view.vo.SecurityGroupJoinVO; -import org.apache.cloudstack.api.view.vo.UserAccountJoinVO; -import org.apache.cloudstack.api.view.vo.UserVmJoinVO; - - -import com.cloud.configuration.ConfigurationService; -import com.cloud.event.Event; -import com.cloud.network.router.VirtualRouter; -import com.cloud.network.security.SecurityGroup; -import com.cloud.projects.Project; -import com.cloud.projects.ProjectAccount; -import com.cloud.projects.ProjectInvitation; -import com.cloud.projects.ProjectService; -import com.cloud.server.ResourceTag; -import com.cloud.server.TaggedResourceService; -import com.cloud.user.Account; -import com.cloud.user.ResourceLimitService; -import com.cloud.user.User; -import com.cloud.user.UserAccount; - -import com.cloud.uservm.UserVm; -import com.cloud.utils.component.ComponentLocator; -import com.cloud.vm.InstanceGroup; - - -/** - * @author minc - * - */ -public class DBViewUtils { - - private static DomainRouterJoinDao _domainRouterJoinDao; - private static SecurityGroupJoinDao _securityGroupJoinDao; - private static UserVmJoinDao _userVmJoinDao; - private static ResourceTagJoinDao _tagJoinDao; - private static EventJoinDao _eventJoinDao; - private static InstanceGroupJoinDao _vmGroupJoinDao; - private static UserAccountJoinDao _userAccountJoinDao; - private static ProjectJoinDao _projectJoinDao; - private static ProjectAccountJoinDao _projectAccountJoinDao; - private static ProjectInvitationJoinDao _projectInvitationJoinDao; - - static { - ComponentLocator locator = ComponentLocator.getLocator("management-server"); - _domainRouterJoinDao = locator.getDao(DomainRouterJoinDao.class); - _userVmJoinDao = locator.getDao(UserVmJoinDao.class); - _securityGroupJoinDao = locator.getDao(SecurityGroupJoinDao.class); - _tagJoinDao = locator.getDao(ResourceTagJoinDao.class); - _vmGroupJoinDao = locator.getDao(InstanceGroupJoinDao.class); - _eventJoinDao = locator.getDao(EventJoinDao.class); - _userAccountJoinDao = locator.getDao(UserAccountJoinDao.class); - _projectJoinDao = locator.getDao(ProjectJoinDao.class); - _projectAccountJoinDao = locator.getDao(ProjectAccountJoinDao.class); - _projectInvitationJoinDao = locator.getDao(ProjectInvitationJoinDao.class); - } - - - 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 newDomainRouterView(VirtualRouter vr){ - return _domainRouterJoinDao.newDomainRouterView(vr); - } - - public static UserVmResponse newUserVmResponse(String objectName, UserVmJoinVO userVm, EnumSet 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 newUserVmView(UserVm... userVms){ - return _userVmJoinDao.newUserVmView(userVms); - } - - public static SecurityGroupResponse newSecurityGroupResponse(SecurityGroupJoinVO vsg, Account caller) { - return _securityGroupJoinDao.newSecurityGroupResponse(vsg, caller); - } - - public static SecurityGroupResponse fillSecurityGroupDetails(SecurityGroupResponse vsgData, SecurityGroupJoinVO sg){ - return _securityGroupJoinDao.setSecurityGroupResponse(vsgData, sg); - } - - public static List newSecurityGroupView(SecurityGroup sg){ - return _securityGroupJoinDao.newSecurityGroupView(sg); - } - - public static List findSecurityGroupViewById(Long sgId){ - return _securityGroupJoinDao.searchByIds(sgId); - } - - public static ResourceTagResponse newResourceTagResponse(ResourceTagJoinVO vsg, boolean keyValueOnly) { - return _tagJoinDao.newResourceTagResponse(vsg, keyValueOnly); - } - - public static ResourceTagJoinVO newResourceTagView(ResourceTag sg){ - return _tagJoinDao.newResourceTagView(sg); - } - - public static ResourceTagJoinVO findResourceTagViewById(Long tagId){ - List tags = _tagJoinDao.searchByIds(tagId); - if ( tags != null && tags.size() > 0 ){ - return tags.get(0); - } - else{ - return null; - } - } - - public static EventResponse newEventResponse(EventJoinVO ve) { - return _eventJoinDao.newEventResponse(ve); - } - - public static EventJoinVO newEventView(Event e){ - return _eventJoinDao.newEventView(e); - } - - public static InstanceGroupResponse newInstanceGroupResponse(InstanceGroupJoinVO ve) { - return _vmGroupJoinDao.newInstanceGroupResponse(ve); - } - - public static InstanceGroupJoinVO newInstanceGroupView(InstanceGroup e){ - return _vmGroupJoinDao.newInstanceGroupView(e); - } - - public static UserResponse newUserResponse(UserAccountJoinVO usr) { - return _userAccountJoinDao.newUserResponse(usr); - } - - public static UserAccountJoinVO newUserView(User usr){ - return _userAccountJoinDao.newUserView(usr); - } - - public static UserAccountJoinVO newUserView(UserAccount usr){ - return _userAccountJoinDao.newUserView(usr); - } - - public static ProjectResponse newProjectResponse(ProjectJoinVO proj) { - return _projectJoinDao.newProjectResponse(proj); - } - - public static ProjectResponse fillProjectDetails(ProjectResponse rsp, ProjectJoinVO proj){ - return _projectJoinDao.setProjectResponse(rsp,proj); - } - - public static List newProjectView(Project proj){ - return _projectJoinDao.newProjectView(proj); - } - - public static List findUserViewByAccountId(Long accountId){ - return _userAccountJoinDao.searchByAccountId(accountId); - } - - public static ProjectAccountResponse newProjectAccountResponse(ProjectAccountJoinVO proj) { - return _projectAccountJoinDao.newProjectAccountResponse(proj); - } - - public static ProjectAccountJoinVO newProjectAccountView(ProjectAccount proj) { - return _projectAccountJoinDao.newProjectAccountView(proj); - } - - public static ProjectInvitationResponse newProjectInvitationResponse(ProjectInvitationJoinVO proj) { - return _projectInvitationJoinDao.newProjectInvitationResponse(proj); - } - - public static ProjectInvitationJoinVO newProjectInvitationView(ProjectInvitation proj) { - return _projectInvitationJoinDao.newProjectInvitationView(proj); - } - -} diff --git a/api/src/org/apache/cloudstack/api/view/ViewResponseHelper.java b/api/src/org/apache/cloudstack/api/view/ViewResponseHelper.java deleted file mode 100644 index 39c0429047c..00000000000 --- a/api/src/org/apache/cloudstack/api/view/ViewResponseHelper.java +++ /dev/null @@ -1,43 +0,0 @@ -// 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 org.apache.cloudstack.api.view; - -import org.apache.cloudstack.api.response.ControlledViewEntityResponse; -import org.apache.cloudstack.api.view.vo.ControlledViewEntity; - -import com.cloud.user.Account; - -/** - * Some helper routine in generating response from db view. - * @author minc - * - */ -public class ViewResponseHelper { - - 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()); - } -} diff --git a/server/src/com/cloud/api/ApiDBUtils.java b/server/src/com/cloud/api/ApiDBUtils.java index ae4260929a3..d5cce52e5f9 100755 --- a/server/src/com/cloud/api/ApiDBUtils.java +++ b/server/src/com/cloud/api/ApiDBUtils.java @@ -33,16 +33,6 @@ import org.apache.cloudstack.api.response.ResourceTagResponse; import org.apache.cloudstack.api.response.SecurityGroupResponse; import org.apache.cloudstack.api.response.UserResponse; import org.apache.cloudstack.api.response.UserVmResponse; -import org.apache.cloudstack.api.view.dao.DomainRouterJoinDao; -import org.apache.cloudstack.api.view.dao.EventJoinDao; -import org.apache.cloudstack.api.view.dao.InstanceGroupJoinDao; -import org.apache.cloudstack.api.view.dao.ProjectAccountJoinDao; -import org.apache.cloudstack.api.view.dao.ProjectInvitationJoinDao; -import org.apache.cloudstack.api.view.dao.ProjectJoinDao; -import org.apache.cloudstack.api.view.dao.ResourceTagJoinDao; -import org.apache.cloudstack.api.view.dao.SecurityGroupJoinDao; -import org.apache.cloudstack.api.view.dao.UserAccountJoinDao; -import org.apache.cloudstack.api.view.dao.UserVmJoinDao; import org.apache.cloudstack.api.view.vo.DomainRouterJoinVO; import org.apache.cloudstack.api.view.vo.EventJoinVO; import org.apache.cloudstack.api.view.vo.InstanceGroupJoinVO; @@ -76,6 +66,7 @@ import com.cloud.dc.dao.VlanDao; import com.cloud.domain.DomainVO; import com.cloud.domain.dao.DomainDao; import com.cloud.event.Event; +import com.cloud.event.dao.EventJoinDao; import com.cloud.exception.InvalidParameterValueException; import com.cloud.ha.HighAvailabilityManager; import com.cloud.host.Host; @@ -121,6 +112,7 @@ import com.cloud.network.security.SecurityGroup; import com.cloud.network.security.SecurityGroupManager; import com.cloud.network.security.SecurityGroupVO; import com.cloud.network.security.dao.SecurityGroupDao; +import com.cloud.network.security.dao.SecurityGroupJoinDao; import com.cloud.network.vpc.VpcManager; import com.cloud.offering.NetworkOffering; import com.cloud.offering.ServiceOffering; @@ -130,6 +122,9 @@ import com.cloud.projects.Project; import com.cloud.projects.ProjectAccount; import com.cloud.projects.ProjectInvitation; import com.cloud.projects.ProjectService; +import com.cloud.projects.dao.ProjectAccountJoinDao; +import com.cloud.projects.dao.ProjectInvitationJoinDao; +import com.cloud.projects.dao.ProjectJoinDao; import com.cloud.resource.ResourceManager; import com.cloud.server.Criteria; import com.cloud.server.ManagementServer; @@ -167,6 +162,7 @@ import com.cloud.storage.dao.VMTemplateHostDao; import com.cloud.storage.dao.VMTemplateSwiftDao; import com.cloud.storage.dao.VolumeDao; import com.cloud.storage.dao.VolumeHostDao; +import com.cloud.tags.dao.ResourceTagJoinDao; import com.cloud.user.Account; import com.cloud.user.AccountDetailsDao; import com.cloud.user.AccountVO; @@ -178,6 +174,7 @@ import com.cloud.user.UserStatisticsVO; import com.cloud.user.UserVO; import com.cloud.user.dao.AccountDao; import com.cloud.user.dao.SSHKeyPairDao; +import com.cloud.user.dao.UserAccountJoinDao; import com.cloud.user.dao.UserDao; import com.cloud.user.dao.UserStatisticsDao; import com.cloud.uservm.UserVm; @@ -197,8 +194,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.InstanceGroupJoinDao; import com.cloud.vm.dao.UserVmDao; import com.cloud.vm.dao.UserVmDetailsDao; +import com.cloud.vm.dao.UserVmJoinDao; import com.cloud.vm.dao.VMInstanceDao; public class ApiDBUtils { @@ -944,6 +944,127 @@ public class ApiDBUtils { 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 newDomainRouterView(VirtualRouter vr){ + return _domainRouterJoinDao.newDomainRouterView(vr); + } + + public static UserVmResponse newUserVmResponse(String objectName, UserVmJoinVO userVm, EnumSet 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 newUserVmView(UserVm... userVms){ + return _userVmJoinDao.newUserVmView(userVms); + } + + public static SecurityGroupResponse newSecurityGroupResponse(SecurityGroupJoinVO vsg, Account caller) { + return _securityGroupJoinDao.newSecurityGroupResponse(vsg, caller); + } + + public static SecurityGroupResponse fillSecurityGroupDetails(SecurityGroupResponse vsgData, SecurityGroupJoinVO sg){ + return _securityGroupJoinDao.setSecurityGroupResponse(vsgData, sg); + } + + public static List newSecurityGroupView(SecurityGroup sg){ + return _securityGroupJoinDao.newSecurityGroupView(sg); + } + + public static List findSecurityGroupViewById(Long sgId){ + return _securityGroupJoinDao.searchByIds(sgId); + } + + public static ResourceTagResponse newResourceTagResponse(ResourceTagJoinVO vsg, boolean keyValueOnly) { + return _tagJoinDao.newResourceTagResponse(vsg, keyValueOnly); + } + + public static ResourceTagJoinVO newResourceTagView(ResourceTag sg){ + return _tagJoinDao.newResourceTagView(sg); + } + + public static ResourceTagJoinVO findResourceTagViewById(Long tagId){ + List tags = _tagJoinDao.searchByIds(tagId); + if ( tags != null && tags.size() > 0 ){ + return tags.get(0); + } + else{ + return null; + } + } + + public static EventResponse newEventResponse(EventJoinVO ve) { + return _eventJoinDao.newEventResponse(ve); + } + + public static EventJoinVO newEventView(Event e){ + return _eventJoinDao.newEventView(e); + } + + public static InstanceGroupResponse newInstanceGroupResponse(InstanceGroupJoinVO ve) { + return _vmGroupJoinDao.newInstanceGroupResponse(ve); + } + + public static InstanceGroupJoinVO newInstanceGroupView(InstanceGroup e){ + return _vmGroupJoinDao.newInstanceGroupView(e); + } + + public static UserResponse newUserResponse(UserAccountJoinVO usr) { + return _userAccountJoinDao.newUserResponse(usr); + } + + public static UserAccountJoinVO newUserView(User usr){ + return _userAccountJoinDao.newUserView(usr); + } + + public static UserAccountJoinVO newUserView(UserAccount usr){ + return _userAccountJoinDao.newUserView(usr); + } + + public static ProjectResponse newProjectResponse(ProjectJoinVO proj) { + return _projectJoinDao.newProjectResponse(proj); + } + + public static ProjectResponse fillProjectDetails(ProjectResponse rsp, ProjectJoinVO proj){ + return _projectJoinDao.setProjectResponse(rsp,proj); + } + + public static List newProjectView(Project proj){ + return _projectJoinDao.newProjectView(proj); + } + + public static List findUserViewByAccountId(Long accountId){ + return _userAccountJoinDao.searchByAccountId(accountId); + } + + public static ProjectAccountResponse newProjectAccountResponse(ProjectAccountJoinVO proj) { + return _projectAccountJoinDao.newProjectAccountResponse(proj); + } + + public static ProjectAccountJoinVO newProjectAccountView(ProjectAccount proj) { + return _projectAccountJoinDao.newProjectAccountView(proj); + } + + public static ProjectInvitationResponse newProjectInvitationResponse(ProjectInvitationJoinVO proj) { + return _projectInvitationJoinDao.newProjectInvitationResponse(proj); + } + + public static ProjectInvitationJoinVO newProjectInvitationView(ProjectInvitation proj) { + return _projectInvitationJoinDao.newProjectInvitationView(proj); + } } diff --git a/server/src/com/cloud/api/ApiResponseHelper.java b/server/src/com/cloud/api/ApiResponseHelper.java index 72c3bc8d85a..1e2b87d0941 100755 --- a/server/src/com/cloud/api/ApiResponseHelper.java +++ b/server/src/com/cloud/api/ApiResponseHelper.java @@ -112,7 +112,6 @@ import org.apache.cloudstack.api.response.VpcOfferingResponse; import org.apache.cloudstack.api.response.VpcResponse; import org.apache.cloudstack.api.response.VpnUsersResponse; import org.apache.cloudstack.api.response.ZoneResponse; -import org.apache.cloudstack.api.view.DBViewUtils; import org.apache.cloudstack.api.view.vo.DomainRouterJoinVO; import org.apache.cloudstack.api.view.vo.ControlledViewEntity; import org.apache.cloudstack.api.view.vo.EventJoinVO; @@ -243,8 +242,8 @@ public class ApiResponseHelper implements ResponseGenerator { @Override public UserResponse createUserResponse(User user) { - UserAccountJoinVO vUser = DBViewUtils.newUserView(user); - return DBViewUtils.newUserResponse(vUser); + UserAccountJoinVO vUser = ApiDBUtils.newUserView(user); + return ApiDBUtils.newUserResponse(vUser); } @@ -252,7 +251,7 @@ public class ApiResponseHelper implements ResponseGenerator { public List createUserResponse(UserAccountJoinVO... users) { List respList = new ArrayList(); for (UserAccountJoinVO vt : users){ - respList.add(DBViewUtils.newUserResponse(vt)); + respList.add(ApiDBUtils.newUserResponse(vt)); } return respList; } @@ -416,8 +415,8 @@ public class ApiResponseHelper implements ResponseGenerator { @Override public UserResponse createUserResponse(UserAccount user) { - UserAccountJoinVO vUser = DBViewUtils.newUserView(user); - return DBViewUtils.newUserResponse(vUser); + UserAccountJoinVO vUser = ApiDBUtils.newUserView(user); + return ApiDBUtils.newUserResponse(vUser); } @Override @@ -1171,8 +1170,8 @@ public class ApiResponseHelper implements ResponseGenerator { @Override public InstanceGroupResponse createInstanceGroupResponse(InstanceGroup group) { - InstanceGroupJoinVO vgroup = DBViewUtils.newInstanceGroupView(group); - return DBViewUtils.newInstanceGroupResponse(vgroup); + InstanceGroupJoinVO vgroup = ApiDBUtils.newInstanceGroupView(group); + return ApiDBUtils.newInstanceGroupResponse(vgroup); } @@ -1182,7 +1181,7 @@ public class ApiResponseHelper implements ResponseGenerator { public List createInstanceGroupResponse(InstanceGroupJoinVO... groups) { List respList = new ArrayList(); for (InstanceGroupJoinVO vt : groups){ - respList.add(DBViewUtils.newInstanceGroupResponse(vt)); + respList.add(ApiDBUtils.newInstanceGroupResponse(vt)); } return respList; } @@ -1369,14 +1368,14 @@ public class ApiResponseHelper implements ResponseGenerator { @Override public List createUserVmResponse(String objectName, EnumSet details, UserVm... userVms) { - List viewVms = DBViewUtils.newUserVmView(userVms); + List viewVms = ApiDBUtils.newUserVmView(userVms); return createUserVmResponse(objectName, details, viewVms.toArray(new UserVmJoinVO[viewVms.size()])); } @Override public List createUserVmResponse(String objectName, UserVm... userVms) { - List viewVms = DBViewUtils.newUserVmView(userVms); + List viewVms = ApiDBUtils.newUserVmView(userVms); return createUserVmResponse(objectName, viewVms.toArray(new UserVmJoinVO[viewVms.size()])); } @@ -1398,10 +1397,10 @@ public class ApiResponseHelper implements ResponseGenerator { UserVmResponse userVmData = vmDataList.get(userVm.getId()); if ( userVmData == null ){ // first time encountering this vm - userVmData = DBViewUtils.newUserVmResponse(objectName, userVm, details, caller); + userVmData = ApiDBUtils.newUserVmResponse(objectName, userVm, details, caller); } else{ // update nics, securitygroups, tags for 1 to many mapping fields - userVmData = DBViewUtils.fillVmDetails(userVmData, userVm); + userVmData = ApiDBUtils.fillVmDetails(userVmData, userVm); } vmDataList.put(userVm.getId(), userVmData); } @@ -1411,7 +1410,7 @@ public class ApiResponseHelper implements ResponseGenerator { @Override public DomainRouterResponse createDomainRouterResponse(VirtualRouter router) { - List viewVrs = DBViewUtils.newDomainRouterView(router); + List viewVrs = ApiDBUtils.newDomainRouterView(router); List 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); @@ -1426,11 +1425,11 @@ public class ApiResponseHelper implements ResponseGenerator { DomainRouterResponse vrData = vrDataList.get(vr.getId()); if ( vrData == null ){ // first time encountering this vm - vrData = DBViewUtils.newDomainRouterResponse(vr, caller); + vrData = ApiDBUtils.newDomainRouterResponse(vr, caller); } else{ // update nics for 1 to many mapping fields - vrData = DBViewUtils.fillRouterDetails(vrData, vr); + vrData = ApiDBUtils.fillRouterDetails(vrData, vr); } vrDataList.put(vr.getId(), vrData); } @@ -2016,11 +2015,11 @@ public class ApiResponseHelper implements ResponseGenerator { SecurityGroupResponse vrData = vrDataList.get(vr.getId()); if ( vrData == null ) { // first time encountering this sg - vrData = DBViewUtils.newSecurityGroupResponse(vr, caller); + vrData = ApiDBUtils.newSecurityGroupResponse(vr, caller); } else { // update rules for 1 to many mapping fields - vrData = DBViewUtils.fillSecurityGroupDetails(vrData, vr); + vrData = ApiDBUtils.fillSecurityGroupDetails(vrData, vr); } vrDataList.put(vr.getId(), vrData); } @@ -2029,7 +2028,7 @@ public class ApiResponseHelper implements ResponseGenerator { @Override public SecurityGroupResponse createSecurityGroupResponse(SecurityGroup group) { - List viewSgs = DBViewUtils.newSecurityGroupView(group); + List viewSgs = ApiDBUtils.newSecurityGroupView(group); List listSgs = createSecurityGroupResponses(viewSgs); assert listSgs != null && listSgs.size() == 1 : "There should be one security group returned"; return listSgs.get(0); @@ -2122,15 +2121,15 @@ public class ApiResponseHelper implements ResponseGenerator { public List createEventResponse(EventJoinVO... events) { List respList = new ArrayList(); for (EventJoinVO vt : events){ - respList.add(DBViewUtils.newEventResponse(vt)); + respList.add(ApiDBUtils.newEventResponse(vt)); } return respList; } @Override public EventResponse createEventResponse(Event event) { - EventJoinVO vEvent = DBViewUtils.newEventView(event); - return DBViewUtils.newEventResponse(vEvent); + EventJoinVO vEvent = ApiDBUtils.newEventView(event); + return ApiDBUtils.newEventResponse(vEvent); } private List sumCapacities(List hostCapacities) { @@ -2384,7 +2383,7 @@ public class ApiResponseHelper implements ResponseGenerator { Map allowedSecuriytGroupAccounts = new HashMap(); if ((securityRules != null) && !securityRules.isEmpty()) { - SecurityGroupJoinVO securityGroup = DBViewUtils.findSecurityGroupViewById(securityRules.get(0).getSecurityGroupId()).get(0); + SecurityGroupJoinVO securityGroup = ApiDBUtils.findSecurityGroupViewById(securityRules.get(0).getSecurityGroupId()).get(0); response.setId(securityGroup.getUuid()); response.setName(securityGroup.getName()); response.setDescription(securityGroup.getDescription()); @@ -2416,7 +2415,7 @@ public class ApiResponseHelper implements ResponseGenerator { Long allowedSecurityGroupId = securityRule.getAllowedNetworkId(); if (allowedSecurityGroupId != null) { - List sgs = DBViewUtils.findSecurityGroupViewById(allowedSecurityGroupId); + List sgs = ApiDBUtils.findSecurityGroupViewById(allowedSecurityGroupId); if (sgs != null && sgs.size() > 0) { SecurityGroupJoinVO sg = sgs.get(0); securityGroupData.setSecurityGroupName(sg.getName()); @@ -2675,7 +2674,7 @@ public class ApiResponseHelper implements ResponseGenerator { @Override public ProjectResponse createProjectResponse(Project project) { - List viewPrjs = DBViewUtils.newProjectView(project); + List viewPrjs = ApiDBUtils.newProjectView(project); List listPrjs = createProjectResponse(viewPrjs.toArray(new ProjectJoinVO[viewPrjs.size()])); assert listPrjs != null && listPrjs.size() == 1 : "There should be one project returned"; return listPrjs.get(0); @@ -2690,11 +2689,11 @@ public class ApiResponseHelper implements ResponseGenerator { ProjectResponse pData = prjDataList.get(p.getId()); if ( pData == null ){ // first time encountering this vm - pData = DBViewUtils.newProjectResponse(p); + pData = ApiDBUtils.newProjectResponse(p); } else{ // update those 1 to many mapping fields - pData = DBViewUtils.fillProjectDetails(pData, p); + pData = ApiDBUtils.fillProjectDetails(pData, p); } prjDataList.put(p.getId(), pData); } @@ -2853,7 +2852,7 @@ public class ApiResponseHelper implements ResponseGenerator { @Override public ProjectAccountResponse createProjectAccountResponse(ProjectAccount projectAccount) { - ProjectAccountJoinVO vProj = DBViewUtils.newProjectAccountView(projectAccount); + ProjectAccountJoinVO vProj = ApiDBUtils.newProjectAccountView(projectAccount); List listProjs = createProjectAccountResponse(vProj); assert listProjs != null && listProjs.size() == 1 : "There should be one project account returned"; return listProjs.get(0); @@ -2864,9 +2863,9 @@ public class ApiResponseHelper implements ResponseGenerator { public List createProjectAccountResponse(ProjectAccountJoinVO... projectAccounts) { List responseList = new ArrayList(); for (ProjectAccountJoinVO proj : projectAccounts){ - ProjectAccountResponse resp = DBViewUtils.newProjectAccountResponse(proj); + ProjectAccountResponse resp = ApiDBUtils.newProjectAccountResponse(proj); // update user list - List users = DBViewUtils.findUserViewByAccountId(proj.getAccountId()); + List users = ApiDBUtils.findUserViewByAccountId(proj.getAccountId()); resp.setUsers(createUserResponse(users.toArray(new UserAccountJoinVO[users.size()]))); responseList.add(resp); } @@ -2875,8 +2874,8 @@ public class ApiResponseHelper implements ResponseGenerator { @Override public ProjectInvitationResponse createProjectInvitationResponse(ProjectInvitation invite) { - ProjectInvitationJoinVO vInvite = DBViewUtils.newProjectInvitationView(invite); - return DBViewUtils.newProjectInvitationResponse(vInvite); + ProjectInvitationJoinVO vInvite = ApiDBUtils.newProjectInvitationView(invite); + return ApiDBUtils.newProjectInvitationResponse(vInvite); } @@ -2885,7 +2884,7 @@ public class ApiResponseHelper implements ResponseGenerator { public List createProjectInvitationResponse(ProjectInvitationJoinVO... invites) { List respList = new ArrayList(); for (ProjectInvitationJoinVO v : invites){ - respList.add(DBViewUtils.newProjectInvitationResponse(v)); + respList.add(ApiDBUtils.newProjectInvitationResponse(v)); } return respList; } @@ -3122,8 +3121,8 @@ public class ApiResponseHelper implements ResponseGenerator { @Override public ResourceTagResponse createResourceTagResponse(ResourceTag resourceTag, boolean keyValueOnly) { - ResourceTagJoinVO rto = DBViewUtils.newResourceTagView(resourceTag); - return DBViewUtils.newResourceTagResponse(rto, keyValueOnly); + ResourceTagJoinVO rto = ApiDBUtils.newResourceTagView(resourceTag); + return ApiDBUtils.newResourceTagResponse(rto, keyValueOnly); } @@ -3131,7 +3130,7 @@ public class ApiResponseHelper implements ResponseGenerator { public List createResourceTagResponse(boolean keyValueOnly, ResourceTagJoinVO... tags) { List respList = new ArrayList(); for (ResourceTagJoinVO vt : tags){ - respList.add(DBViewUtils.newResourceTagResponse(vt, keyValueOnly)); + respList.add(ApiDBUtils.newResourceTagResponse(vt, keyValueOnly)); } return respList; } diff --git a/server/src/com/cloud/configuration/DefaultComponentLibrary.java b/server/src/com/cloud/configuration/DefaultComponentLibrary.java index e49425eca83..2dd46fd9ad9 100755 --- a/server/src/com/cloud/configuration/DefaultComponentLibrary.java +++ b/server/src/com/cloud/configuration/DefaultComponentLibrary.java @@ -21,17 +21,6 @@ import java.util.HashMap; import java.util.List; import java.util.Map; -import org.apache.cloudstack.api.view.dao.DomainRouterJoinDaoImpl; -import org.apache.cloudstack.api.view.dao.EventJoinDaoImpl; -import org.apache.cloudstack.api.view.dao.InstanceGroupJoinDaoImpl; -import org.apache.cloudstack.api.view.dao.ProjectAccountJoinDaoImpl; -import org.apache.cloudstack.api.view.dao.ProjectInvitationJoinDaoImpl; -import org.apache.cloudstack.api.view.dao.ProjectJoinDaoImpl; -import org.apache.cloudstack.api.view.dao.ResourceTagJoinDaoImpl; -import org.apache.cloudstack.api.view.dao.SecurityGroupJoinDaoImpl; -import org.apache.cloudstack.api.view.dao.UserAccountJoinDaoImpl; -import org.apache.cloudstack.api.view.dao.UserVmJoinDaoImpl; - import com.cloud.agent.manager.ClusteredAgentManagerImpl; import com.cloud.alert.AlertManagerImpl; import com.cloud.alert.dao.AlertDaoImpl; @@ -128,6 +117,7 @@ import com.cloud.network.rules.RulesManagerImpl; import com.cloud.network.rules.dao.PortForwardingRulesDaoImpl; import com.cloud.network.security.SecurityGroupManagerImpl2; import com.cloud.network.security.dao.SecurityGroupDaoImpl; +import com.cloud.network.security.dao.SecurityGroupJoinDaoImpl; import com.cloud.network.security.dao.SecurityGroupRuleDaoImpl; import com.cloud.network.security.dao.SecurityGroupRulesDaoImpl; import com.cloud.network.security.dao.SecurityGroupVMMapDaoImpl; @@ -149,6 +139,8 @@ import com.cloud.projects.ProjectManagerImpl; import com.cloud.projects.dao.ProjectAccountDaoImpl; import com.cloud.projects.dao.ProjectDaoImpl; import com.cloud.projects.dao.ProjectInvitationDaoImpl; +import com.cloud.projects.dao.ProjectInvitationJoinDaoImpl; +import com.cloud.projects.dao.ProjectJoinDaoImpl; import com.cloud.resource.ResourceManagerImpl; import com.cloud.resourcelimit.ResourceLimitManagerImpl; import com.cloud.service.dao.ServiceOfferingDaoImpl; @@ -181,6 +173,7 @@ import com.cloud.storage.snapshot.SnapshotSchedulerImpl; import com.cloud.storage.swift.SwiftManagerImpl; import com.cloud.storage.upload.UploadMonitorImpl; import com.cloud.tags.TaggedResourceManagerImpl; +import com.cloud.tags.dao.ResourceTagJoinDaoImpl; import com.cloud.tags.dao.ResourceTagsDaoImpl; import com.cloud.template.HyervisorTemplateAdapter; import com.cloud.template.TemplateAdapter; @@ -192,6 +185,7 @@ import com.cloud.user.DomainManagerImpl; import com.cloud.user.dao.AccountDaoImpl; import com.cloud.user.dao.SSHKeyPairDaoImpl; import com.cloud.user.dao.UserAccountDaoImpl; +import com.cloud.user.dao.UserAccountJoinDaoImpl; import com.cloud.user.dao.UserDaoImpl; import com.cloud.user.dao.UserStatisticsDaoImpl; import com.cloud.user.dao.UserStatsLogDaoImpl; @@ -209,13 +203,18 @@ 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.InstanceGroupJoinDaoImpl; 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; +import com.cloud.event.dao.EventJoinDaoImpl; +import com.cloud.projects.dao.ProjectAccountJoinDaoImpl; public class DefaultComponentLibrary extends ComponentLibraryBase implements ComponentLibrary { diff --git a/api/src/org/apache/cloudstack/api/view/dao/EventJoinDao.java b/server/src/com/cloud/event/dao/EventJoinDao.java similarity index 97% rename from api/src/org/apache/cloudstack/api/view/dao/EventJoinDao.java rename to server/src/com/cloud/event/dao/EventJoinDao.java index abf2c21240e..d67653d2cd9 100644 --- a/api/src/org/apache/cloudstack/api/view/dao/EventJoinDao.java +++ b/server/src/com/cloud/event/dao/EventJoinDao.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.view.dao; +package com.cloud.event.dao; import java.util.List; diff --git a/api/src/org/apache/cloudstack/api/view/dao/EventJoinDaoImpl.java b/server/src/com/cloud/event/dao/EventJoinDaoImpl.java similarity index 96% rename from api/src/org/apache/cloudstack/api/view/dao/EventJoinDaoImpl.java rename to server/src/com/cloud/event/dao/EventJoinDaoImpl.java index ee99d12738b..be2a6dc917a 100644 --- a/api/src/org/apache/cloudstack/api/view/dao/EventJoinDaoImpl.java +++ b/server/src/com/cloud/event/dao/EventJoinDaoImpl.java @@ -14,17 +14,17 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.view.dao; +package com.cloud.event.dao; +import java.util.ArrayList; import java.util.List; import javax.ejb.Local; import org.apache.log4j.Logger; - +import com.cloud.api.ApiResponseHelper; import org.apache.cloudstack.api.response.EventResponse; -import org.apache.cloudstack.api.view.ViewResponseHelper; import org.apache.cloudstack.api.view.vo.EventJoinVO; import com.cloud.event.Event; import com.cloud.event.Event.State; @@ -94,7 +94,7 @@ public class EventJoinDaoImpl extends GenericDaoBase implemen responseEvent.setState(event.getState()); responseEvent.setUsername(event.getUserName()); - ViewResponseHelper.populateOwner(responseEvent, event); + ApiResponseHelper.populateOwner(responseEvent, event); responseEvent.setObjectName("event"); return responseEvent; } diff --git a/server/src/com/cloud/network/security/SecurityGroupManagerImpl.java b/server/src/com/cloud/network/security/SecurityGroupManagerImpl.java index a017f536395..a9d1f0bd7a3 100755 --- a/server/src/com/cloud/network/security/SecurityGroupManagerImpl.java +++ b/server/src/com/cloud/network/security/SecurityGroupManagerImpl.java @@ -46,7 +46,6 @@ import com.cloud.agent.api.SecurityGroupRulesCmd; import com.cloud.agent.api.SecurityGroupRulesCmd.IpPortAndProto; import com.cloud.agent.manager.Commands; import org.apache.cloudstack.api.command.user.securitygroup.RevokeSecurityGroupEgressCmd; -import org.apache.cloudstack.api.view.dao.SecurityGroupJoinDao; import org.apache.cloudstack.api.view.vo.SecurityGroupJoinVO; import com.cloud.configuration.Config; import com.cloud.configuration.dao.ConfigurationDao; @@ -66,6 +65,7 @@ import com.cloud.network.NetworkManager; import com.cloud.network.security.SecurityGroupWork.Step; import com.cloud.network.security.SecurityRule.SecurityRuleType; import com.cloud.network.security.dao.SecurityGroupDao; +import com.cloud.network.security.dao.SecurityGroupJoinDao; import com.cloud.network.security.dao.SecurityGroupRuleDao; import com.cloud.network.security.dao.SecurityGroupRulesDao; import com.cloud.network.security.dao.SecurityGroupVMMapDao; diff --git a/api/src/org/apache/cloudstack/api/view/dao/SecurityGroupJoinDao.java b/server/src/com/cloud/network/security/dao/SecurityGroupJoinDao.java similarity index 97% rename from api/src/org/apache/cloudstack/api/view/dao/SecurityGroupJoinDao.java rename to server/src/com/cloud/network/security/dao/SecurityGroupJoinDao.java index c9eabec66c1..30c089762d5 100644 --- a/api/src/org/apache/cloudstack/api/view/dao/SecurityGroupJoinDao.java +++ b/server/src/com/cloud/network/security/dao/SecurityGroupJoinDao.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.view.dao; +package com.cloud.network.security.dao; import java.util.List; @@ -34,3 +34,4 @@ public interface SecurityGroupJoinDao extends GenericDao searchByIds(Long... ids); } + diff --git a/api/src/org/apache/cloudstack/api/view/dao/SecurityGroupJoinDaoImpl.java b/server/src/com/cloud/network/security/dao/SecurityGroupJoinDaoImpl.java similarity index 92% rename from api/src/org/apache/cloudstack/api/view/dao/SecurityGroupJoinDaoImpl.java rename to server/src/com/cloud/network/security/dao/SecurityGroupJoinDaoImpl.java index 95256c5c77b..6ecb258b39a 100644 --- a/api/src/org/apache/cloudstack/api/view/dao/SecurityGroupJoinDaoImpl.java +++ b/server/src/com/cloud/network/security/dao/SecurityGroupJoinDaoImpl.java @@ -14,18 +14,19 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.view.dao; +package com.cloud.network.security.dao; +import java.util.ArrayList; import java.util.List; import javax.ejb.Local; import org.apache.log4j.Logger; +import com.cloud.api.ApiDBUtils; +import com.cloud.api.ApiResponseHelper; import org.apache.cloudstack.api.response.SecurityGroupResponse; import org.apache.cloudstack.api.response.SecurityGroupRuleResponse; -import org.apache.cloudstack.api.view.DBViewUtils; -import org.apache.cloudstack.api.view.ViewResponseHelper; import org.apache.cloudstack.api.view.vo.ResourceTagJoinVO; import org.apache.cloudstack.api.view.vo.SecurityGroupJoinVO; import com.cloud.network.security.SecurityGroup; @@ -63,7 +64,7 @@ public class SecurityGroupJoinDaoImpl extends GenericDaoBase 0) { @@ -102,9 +103,9 @@ public class SecurityGroupJoinDaoImpl extends GenericDaoBase 0) { - ResourceTagJoinVO vtag = DBViewUtils.findResourceTagViewById(tag_id); + ResourceTagJoinVO vtag = ApiDBUtils.findResourceTagViewById(tag_id); if ( vtag != null ){ - sgResponse.addTag(DBViewUtils.newResourceTagResponse(vtag, false)); + sgResponse.addTag(ApiDBUtils.newResourceTagResponse(vtag, false)); } } sgResponse.setObjectName("securitygroup"); @@ -151,9 +152,9 @@ public class SecurityGroupJoinDaoImpl extends GenericDaoBase 0 ) { - ResourceTagJoinVO vtag = DBViewUtils.findResourceTagViewById(tag_id); + ResourceTagJoinVO vtag = ApiDBUtils.findResourceTagViewById(tag_id); if ( vtag != null ){ - vsgData.addTag(DBViewUtils.newResourceTagResponse(vtag, false)); + vsgData.addTag(ApiDBUtils.newResourceTagResponse(vtag, false)); } } return vsgData; diff --git a/server/src/com/cloud/projects/ProjectManagerImpl.java b/server/src/com/cloud/projects/ProjectManagerImpl.java index 51a98ae1481..7c97af2699d 100755 --- a/server/src/com/cloud/projects/ProjectManagerImpl.java +++ b/server/src/com/cloud/projects/ProjectManagerImpl.java @@ -38,9 +38,6 @@ import javax.mail.URLName; import javax.mail.internet.InternetAddress; import javax.naming.ConfigurationException; -import org.apache.cloudstack.api.view.dao.ProjectAccountJoinDao; -import org.apache.cloudstack.api.view.dao.ProjectInvitationJoinDao; -import org.apache.cloudstack.api.view.dao.ProjectJoinDao; import org.apache.cloudstack.api.view.vo.ProjectAccountJoinVO; import org.apache.cloudstack.api.view.vo.ProjectInvitationJoinVO; import org.apache.cloudstack.api.view.vo.ProjectJoinVO; @@ -65,8 +62,11 @@ import com.cloud.projects.Project.ListProjectResourcesCriteria; import com.cloud.projects.Project.State; import com.cloud.projects.ProjectAccount.Role; import com.cloud.projects.dao.ProjectAccountDao; +import com.cloud.projects.dao.ProjectAccountJoinDao; import com.cloud.projects.dao.ProjectDao; import com.cloud.projects.dao.ProjectInvitationDao; +import com.cloud.projects.dao.ProjectInvitationJoinDao; +import com.cloud.projects.dao.ProjectJoinDao; import com.cloud.server.ResourceTag.TaggedResourceType; import com.cloud.tags.ResourceTagVO; import com.cloud.tags.dao.ResourceTagDao; diff --git a/api/src/org/apache/cloudstack/api/view/dao/ProjectAccountJoinDao.java b/server/src/com/cloud/projects/dao/ProjectAccountJoinDao.java similarity index 96% rename from api/src/org/apache/cloudstack/api/view/dao/ProjectAccountJoinDao.java rename to server/src/com/cloud/projects/dao/ProjectAccountJoinDao.java index 3320d9e720a..bdee7aa0970 100644 --- a/api/src/org/apache/cloudstack/api/view/dao/ProjectAccountJoinDao.java +++ b/server/src/com/cloud/projects/dao/ProjectAccountJoinDao.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.view.dao; +package com.cloud.projects.dao; import java.util.List; diff --git a/api/src/org/apache/cloudstack/api/view/dao/ProjectAccountJoinDaoImpl.java b/server/src/com/cloud/projects/dao/ProjectAccountJoinDaoImpl.java similarity index 98% rename from api/src/org/apache/cloudstack/api/view/dao/ProjectAccountJoinDaoImpl.java rename to server/src/com/cloud/projects/dao/ProjectAccountJoinDaoImpl.java index 59e789b55d2..afea1cb2acc 100644 --- a/api/src/org/apache/cloudstack/api/view/dao/ProjectAccountJoinDaoImpl.java +++ b/server/src/com/cloud/projects/dao/ProjectAccountJoinDaoImpl.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.view.dao; +package com.cloud.projects.dao; import java.util.List; diff --git a/api/src/org/apache/cloudstack/api/view/dao/ProjectInvitationJoinDao.java b/server/src/com/cloud/projects/dao/ProjectInvitationJoinDao.java similarity index 96% rename from api/src/org/apache/cloudstack/api/view/dao/ProjectInvitationJoinDao.java rename to server/src/com/cloud/projects/dao/ProjectInvitationJoinDao.java index ba22c04caf3..2ee7de095f0 100644 --- a/api/src/org/apache/cloudstack/api/view/dao/ProjectInvitationJoinDao.java +++ b/server/src/com/cloud/projects/dao/ProjectInvitationJoinDao.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.view.dao; +package com.cloud.projects.dao; import org.apache.cloudstack.api.response.ProjectInvitationResponse; import org.apache.cloudstack.api.view.vo.ProjectInvitationJoinVO; diff --git a/api/src/org/apache/cloudstack/api/view/dao/ProjectInvitationJoinDaoImpl.java b/server/src/com/cloud/projects/dao/ProjectInvitationJoinDaoImpl.java similarity index 96% rename from api/src/org/apache/cloudstack/api/view/dao/ProjectInvitationJoinDaoImpl.java rename to server/src/com/cloud/projects/dao/ProjectInvitationJoinDaoImpl.java index 5c8231ce0f6..0ee0ef8fce9 100644 --- a/api/src/org/apache/cloudstack/api/view/dao/ProjectInvitationJoinDaoImpl.java +++ b/server/src/com/cloud/projects/dao/ProjectInvitationJoinDaoImpl.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.view.dao; +package com.cloud.projects.dao; import java.util.List; @@ -25,8 +25,9 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.response.ProjectInvitationResponse; import org.apache.cloudstack.api.view.vo.ProjectInvitationJoinVO; - +import com.cloud.api.ApiDBUtils; import com.cloud.projects.ProjectInvitation; +import com.cloud.user.Account; import com.cloud.utils.db.GenericDaoBase; import com.cloud.utils.db.SearchBuilder; import com.cloud.utils.db.SearchCriteria; diff --git a/api/src/org/apache/cloudstack/api/view/dao/ProjectJoinDao.java b/server/src/com/cloud/projects/dao/ProjectJoinDao.java similarity index 96% rename from api/src/org/apache/cloudstack/api/view/dao/ProjectJoinDao.java rename to server/src/com/cloud/projects/dao/ProjectJoinDao.java index 173f57e3faf..c5cc4227eee 100644 --- a/api/src/org/apache/cloudstack/api/view/dao/ProjectJoinDao.java +++ b/server/src/com/cloud/projects/dao/ProjectJoinDao.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.view.dao; +package com.cloud.projects.dao; import java.util.List; diff --git a/api/src/org/apache/cloudstack/api/view/dao/ProjectJoinDaoImpl.java b/server/src/com/cloud/projects/dao/ProjectJoinDaoImpl.java similarity index 89% rename from api/src/org/apache/cloudstack/api/view/dao/ProjectJoinDaoImpl.java rename to server/src/com/cloud/projects/dao/ProjectJoinDaoImpl.java index 8b8d145f11a..81ccb7f5256 100644 --- a/api/src/org/apache/cloudstack/api/view/dao/ProjectJoinDaoImpl.java +++ b/server/src/com/cloud/projects/dao/ProjectJoinDaoImpl.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.view.dao; +package com.cloud.projects.dao; import java.util.List; @@ -22,9 +22,8 @@ import javax.ejb.Local; import org.apache.log4j.Logger; - +import com.cloud.api.ApiDBUtils; import org.apache.cloudstack.api.response.ProjectResponse; -import org.apache.cloudstack.api.view.DBViewUtils; import org.apache.cloudstack.api.view.vo.ProjectJoinVO; import org.apache.cloudstack.api.view.vo.ResourceTagJoinVO; import com.cloud.projects.Project; @@ -69,9 +68,9 @@ public class ProjectJoinDaoImpl extends GenericDaoBase impl // update tag information Long tag_id = proj.getTagId(); if (tag_id != null && tag_id.longValue() > 0) { - ResourceTagJoinVO vtag = DBViewUtils.findResourceTagViewById(tag_id); + ResourceTagJoinVO vtag = ApiDBUtils.findResourceTagViewById(tag_id); if ( vtag != null ){ - response.addTag(DBViewUtils.newResourceTagResponse(vtag, false)); + response.addTag(ApiDBUtils.newResourceTagResponse(vtag, false)); } } @@ -84,9 +83,9 @@ public class ProjectJoinDaoImpl extends GenericDaoBase impl // update tag information Long tag_id = proj.getTagId(); if (tag_id != null && tag_id.longValue() > 0) { - ResourceTagJoinVO vtag = DBViewUtils.findResourceTagViewById(tag_id); + ResourceTagJoinVO vtag = ApiDBUtils.findResourceTagViewById(tag_id); if ( vtag != null ){ - rsp.addTag(DBViewUtils.newResourceTagResponse(vtag, false)); + rsp.addTag(ApiDBUtils.newResourceTagResponse(vtag, false)); } } return rsp; diff --git a/server/src/com/cloud/server/ManagementServerImpl.java b/server/src/com/cloud/server/ManagementServerImpl.java index a608a79020b..a196cd35769 100755 --- a/server/src/com/cloud/server/ManagementServerImpl.java +++ b/server/src/com/cloud/server/ManagementServerImpl.java @@ -98,9 +98,6 @@ import com.cloud.api.commands.UpdateTemplateOrIsoCmd; import org.apache.cloudstack.api.command.user.vmgroup.UpdateVMGroupCmd; import org.apache.cloudstack.api.command.admin.resource.UploadCustomCertificateCmd; import org.apache.cloudstack.api.response.ExtractResponse; -import org.apache.cloudstack.api.view.dao.DomainRouterJoinDao; -import org.apache.cloudstack.api.view.dao.EventJoinDao; -import org.apache.cloudstack.api.view.dao.InstanceGroupJoinDao; import org.apache.cloudstack.api.view.vo.DomainRouterJoinVO; import org.apache.cloudstack.api.view.vo.EventJoinVO; import org.apache.cloudstack.api.view.vo.InstanceGroupJoinVO; @@ -147,6 +144,7 @@ import com.cloud.event.EventTypes; import com.cloud.event.EventUtils; import com.cloud.event.EventVO; import com.cloud.event.dao.EventDao; +import com.cloud.event.dao.EventJoinDao; import com.cloud.exception.CloudAuthenticationException; import com.cloud.exception.ConcurrentOperationException; import com.cloud.exception.InvalidParameterValueException; @@ -264,7 +262,9 @@ 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.InstanceGroupJoinDao; import com.cloud.vm.dao.NicDao; import com.cloud.vm.dao.SecondaryStorageVmDao; import com.cloud.vm.dao.UserVmDao; diff --git a/server/src/com/cloud/tags/TaggedResourceManagerImpl.java b/server/src/com/cloud/tags/TaggedResourceManagerImpl.java index 6e69bd467da..0f82142d6b5 100644 --- a/server/src/com/cloud/tags/TaggedResourceManagerImpl.java +++ b/server/src/com/cloud/tags/TaggedResourceManagerImpl.java @@ -27,7 +27,6 @@ import javax.naming.ConfigurationException; import org.apache.cloudstack.api.command.user.tag.ListTagsCmd; import org.apache.log4j.Logger; -import org.apache.cloudstack.api.view.dao.ResourceTagJoinDao; import org.apache.cloudstack.api.view.vo.ResourceTagJoinVO; import com.cloud.domain.Domain; import com.cloud.event.ActionEvent; @@ -52,6 +51,7 @@ import com.cloud.storage.dao.SnapshotDao; import com.cloud.storage.dao.VMTemplateDao; import com.cloud.storage.dao.VolumeDao; import com.cloud.tags.dao.ResourceTagDao; +import com.cloud.tags.dao.ResourceTagJoinDao; import com.cloud.user.Account; import com.cloud.user.AccountManager; import com.cloud.user.DomainManager; diff --git a/api/src/org/apache/cloudstack/api/view/dao/ResourceTagJoinDao.java b/server/src/com/cloud/tags/dao/ResourceTagJoinDao.java similarity index 96% rename from api/src/org/apache/cloudstack/api/view/dao/ResourceTagJoinDao.java rename to server/src/com/cloud/tags/dao/ResourceTagJoinDao.java index 38f3e0d7b92..8dd3d82d02e 100644 --- a/api/src/org/apache/cloudstack/api/view/dao/ResourceTagJoinDao.java +++ b/server/src/com/cloud/tags/dao/ResourceTagJoinDao.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.view.dao; +package com.cloud.tags.dao; import java.util.List; diff --git a/api/src/org/apache/cloudstack/api/view/dao/ResourceTagJoinDaoImpl.java b/server/src/com/cloud/tags/dao/ResourceTagJoinDaoImpl.java similarity index 95% rename from api/src/org/apache/cloudstack/api/view/dao/ResourceTagJoinDaoImpl.java rename to server/src/com/cloud/tags/dao/ResourceTagJoinDaoImpl.java index 519ef3d0194..3c2dafa03e4 100644 --- a/api/src/org/apache/cloudstack/api/view/dao/ResourceTagJoinDaoImpl.java +++ b/server/src/com/cloud/tags/dao/ResourceTagJoinDaoImpl.java @@ -14,17 +14,17 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.view.dao; +package com.cloud.tags.dao; +import java.util.ArrayList; import java.util.List; import javax.ejb.Local; import org.apache.log4j.Logger; - +import com.cloud.api.ApiResponseHelper; import org.apache.cloudstack.api.response.ResourceTagResponse; -import org.apache.cloudstack.api.view.ViewResponseHelper; import org.apache.cloudstack.api.view.vo.ResourceTagJoinVO; import com.cloud.server.ResourceTag; import com.cloud.utils.db.GenericDaoBase; @@ -67,7 +67,7 @@ public class ResourceTagJoinDaoImpl extends GenericDaoBase implem userVmResponse.setPublicIp(userVm.getPublicIpAddress()); userVmResponse.setKeyPairName(userVm.getKeypairName()); - /*TODO: we need to invoke cloud-engine API to get Vm statistics or StatsConnector needs - * to put them into DB tables if (details.contains(VMDetails.all) || details.contains(VMDetails.stats)) { DecimalFormat decimalFormat = new DecimalFormat("#.##"); // stats calculation @@ -151,7 +148,6 @@ public class UserVmJoinDaoImpl extends GenericDaoBase implem userVmResponse.setNetworkKbsWrite(networkKbWrite.longValue()); } } - */ if (details.contains(VMDetails.all) || details.contains(VMDetails.secgrp)) { Long securityGroupId = userVm.getSecurityGroupId(); @@ -202,9 +198,9 @@ public class UserVmJoinDaoImpl extends GenericDaoBase implem // update tag information long tag_id = userVm.getTagId(); if (tag_id > 0) { - ResourceTagJoinVO vtag = DBViewUtils.findResourceTagViewById(tag_id); + ResourceTagJoinVO vtag = ApiDBUtils.findResourceTagViewById(tag_id); if ( vtag != null ){ - userVmResponse.addTag(DBViewUtils.newResourceTagResponse(vtag, false)); + userVmResponse.addTag(ApiDBUtils.newResourceTagResponse(vtag, false)); } } userVmResponse.setObjectName(objectName); @@ -257,9 +253,9 @@ public class UserVmJoinDaoImpl extends GenericDaoBase implem long tag_id = uvo.getTagId(); if (tag_id > 0) { - ResourceTagJoinVO vtag = DBViewUtils.findResourceTagViewById(tag_id); + ResourceTagJoinVO vtag = ApiDBUtils.findResourceTagViewById(tag_id); if ( vtag != null ){ - userVmData.addTag(DBViewUtils.newResourceTagResponse(vtag, false)); + userVmData.addTag(ApiDBUtils.newResourceTagResponse(vtag, false)); } } return userVmData; diff --git a/server/test/com/cloud/network/security/SecurityGroupManagerImpl2Test.java b/server/test/com/cloud/network/security/SecurityGroupManagerImpl2Test.java index 93bccf481dc..46b7018f4d2 100644 --- a/server/test/com/cloud/network/security/SecurityGroupManagerImpl2Test.java +++ b/server/test/com/cloud/network/security/SecurityGroupManagerImpl2Test.java @@ -23,7 +23,6 @@ import javax.naming.ConfigurationException; import junit.framework.TestCase; -import org.apache.cloudstack.api.view.dao.SecurityGroupJoinDaoImpl; import org.junit.After; import org.junit.Before; import org.junit.Ignore; @@ -35,6 +34,7 @@ import com.cloud.domain.dao.DomainDaoImpl; import com.cloud.event.dao.UsageEventDaoImpl; import com.cloud.network.MockNetworkManagerImpl; import com.cloud.network.security.dao.SecurityGroupDaoImpl; +import com.cloud.network.security.dao.SecurityGroupJoinDaoImpl; import com.cloud.network.security.dao.SecurityGroupRuleDaoImpl; import com.cloud.network.security.dao.SecurityGroupRulesDaoImpl; import com.cloud.network.security.dao.SecurityGroupVMMapDaoImpl; From c167ad45e3480160c086e5bf532a72d9704c072b Mon Sep 17 00:00:00 2001 From: Min Chen Date: Fri, 14 Dec 2012 10:47:58 -0800 Subject: [PATCH 107/421] Move view based VO and Dao classes to cloud-server module to hide the details from API client, also extract query related methods into QueryService interface. --- .../security/SecurityGroupService.java | 10 +- .../com/cloud/projects/ProjectService.java | 14 - .../com/cloud/server/ManagementService.java | 22 - .../cloud/server/TaggedResourceService.java | 9 - api/src/com/cloud/user/AccountService.java | 6 +- api/src/com/cloud/vm/UserVmService.java | 13 +- .../org/apache/cloudstack/api/BaseCmd.java | 4 + .../cloudstack/api/ResponseGenerator.java | 34 +- .../command/admin/router/ListRoutersCmd.java | 12 +- .../api/command/admin/user/ListUsersCmd.java | 13 +- .../user/account/ListProjectAccountsCmd.java | 23 +- .../api/command/user/event/ListEventsCmd.java | 10 +- .../project/ListProjectInvitationsCmd.java | 17 +- .../command/user/project/ListProjectsCmd.java | 18 +- .../securitygroup/ListSecurityGroupsCmd.java | 11 +- .../api/command/user/tag/ListTagsCmd.java | 9 +- .../api/command/user/vm/ListVMsCmd.java | 9 +- .../command/user/vmgroup/ListVMGroupsCmd.java | 14 +- .../apache/cloudstack/query/QueryService.java | 71 + .../api/commands/test/ListRoutersCmdTest.java | 168 --- .../api/commands/test/ListVmsCmdTest.java | 168 --- server/src/com/cloud/api/ApiDBUtils.java | 37 +- .../src/com/cloud/api/ApiResponseHelper.java | 177 +-- .../com/cloud/api/query/QueryManagerImpl.java | 1309 +++++++++++++++++ .../cloud/api/query/ViewResponseHelper.java | 196 +++ .../query}/dao/DomainRouterJoinDao.java | 5 +- .../query}/dao/DomainRouterJoinDaoImpl.java | 5 +- .../query}/dao/InstanceGroupJoinDao.java | 4 +- .../query}/dao/InstanceGroupJoinDaoImpl.java | 5 +- .../query}/dao/ProjectAccountJoinDao.java | 5 +- .../query}/dao/ProjectAccountJoinDaoImpl.java | 5 +- .../query}/dao/ProjectInvitationJoinDao.java | 5 +- .../dao/ProjectInvitationJoinDaoImpl.java | 4 +- .../query}/dao/ProjectJoinDao.java | 5 +- .../query}/dao/ProjectJoinDaoImpl.java | 7 +- .../query}/dao/ResourceTagJoinDao.java | 5 +- .../query}/dao/ResourceTagJoinDaoImpl.java | 5 +- .../query}/dao/SecurityGroupJoinDao.java | 5 +- .../query}/dao/SecurityGroupJoinDaoImpl.java | 7 +- .../{vm => api/query}/dao/UserVmJoinDao.java | 5 +- .../query}/dao/UserVmJoinDaoImpl.java | 7 +- .../com/cloud/api/query}/vo/BaseViewVO.java | 2 +- .../api/query}/vo/ControlledViewEntity.java | 2 +- .../api/query}/vo/DomainRouterJoinVO.java | 2 +- .../com/cloud/api/query}/vo/EventJoinVO.java | 2 +- .../api/query}/vo/InstanceGroupJoinVO.java | 2 +- .../api/query}/vo/ProjectAccountJoinVO.java | 2 +- .../query}/vo/ProjectInvitationJoinVO.java | 2 +- .../cloud/api/query}/vo/ProjectJoinVO.java | 2 +- .../api/query}/vo/ResourceTagJoinVO.java | 2 +- .../api/query}/vo/SecurityGroupJoinVO.java | 2 +- .../api/query}/vo/UserAccountJoinVO.java | 2 +- .../com/cloud/api/query}/vo/UserVmJoinVO.java | 2 +- .../DefaultComponentLibrary.java | 18 +- .../src/com/cloud/event/dao/EventJoinDao.java | 3 +- .../com/cloud/event/dao/EventJoinDaoImpl.java | 3 +- .../security/SecurityGroupManagerImpl.java | 113 +- .../com/cloud/projects/ProjectManager.java | 2 + .../cloud/projects/ProjectManagerImpl.java | 232 +-- .../cloud/server/ManagementServerImpl.java | 270 +--- .../cloud/tags/TaggedResourceManagerImpl.java | 70 +- server/src/com/cloud/user/AccountManager.java | 2 +- .../com/cloud/user/AccountManagerImpl.java | 102 +- .../cloud/user/dao/UserAccountJoinDao.java | 2 +- .../user/dao/UserAccountJoinDaoImpl.java | 5 +- server/src/com/cloud/vm/UserVmManager.java | 2 +- .../src/com/cloud/vm/UserVmManagerImpl.java | 151 +- .../SecurityGroupManagerImpl2Test.java | 2 +- .../projects/MockProjectManagerImpl.java | 33 +- .../cloud/user/MockAccountManagerImpl.java | 10 +- .../com/cloud/vm/MockUserVmManagerImpl.java | 11 +- 71 files changed, 1848 insertions(+), 1665 deletions(-) create mode 100644 api/src/org/apache/cloudstack/query/QueryService.java delete mode 100644 api/test/src/com/cloud/api/commands/test/ListRoutersCmdTest.java delete mode 100644 api/test/src/com/cloud/api/commands/test/ListVmsCmdTest.java create mode 100644 server/src/com/cloud/api/query/QueryManagerImpl.java create mode 100644 server/src/com/cloud/api/query/ViewResponseHelper.java rename server/src/com/cloud/{vm => api/query}/dao/DomainRouterJoinDao.java (94%) rename server/src/com/cloud/{vm => api/query}/dao/DomainRouterJoinDaoImpl.java (99%) rename server/src/com/cloud/{vm => api/query}/dao/InstanceGroupJoinDao.java (93%) rename server/src/com/cloud/{vm => api/query}/dao/InstanceGroupJoinDaoImpl.java (97%) rename server/src/com/cloud/{projects => api/query}/dao/ProjectAccountJoinDao.java (92%) rename server/src/com/cloud/{projects => api/query}/dao/ProjectAccountJoinDaoImpl.java (97%) rename server/src/com/cloud/{projects => api/query}/dao/ProjectInvitationJoinDao.java (92%) rename server/src/com/cloud/{projects => api/query}/dao/ProjectInvitationJoinDaoImpl.java (96%) rename server/src/com/cloud/{projects => api/query}/dao/ProjectJoinDao.java (93%) rename server/src/com/cloud/{projects => api/query}/dao/ProjectJoinDaoImpl.java (96%) rename server/src/com/cloud/{tags => api/query}/dao/ResourceTagJoinDao.java (93%) rename server/src/com/cloud/{tags => api/query}/dao/ResourceTagJoinDaoImpl.java (97%) rename server/src/com/cloud/{network/security => api/query}/dao/SecurityGroupJoinDao.java (93%) rename server/src/com/cloud/{network/security => api/query}/dao/SecurityGroupJoinDaoImpl.java (97%) rename server/src/com/cloud/{vm => api/query}/dao/UserVmJoinDao.java (94%) rename server/src/com/cloud/{vm => api/query}/dao/UserVmJoinDaoImpl.java (99%) rename {api/src/org/apache/cloudstack/api/view => server/src/com/cloud/api/query}/vo/BaseViewVO.java (97%) rename {api/src/org/apache/cloudstack/api/view => server/src/com/cloud/api/query}/vo/ControlledViewEntity.java (96%) rename {api/src/org/apache/cloudstack/api/view => server/src/com/cloud/api/query}/vo/DomainRouterJoinVO.java (99%) rename {api/src/org/apache/cloudstack/api/view => server/src/com/cloud/api/query}/vo/EventJoinVO.java (99%) rename {api/src/org/apache/cloudstack/api/view => server/src/com/cloud/api/query}/vo/InstanceGroupJoinVO.java (99%) rename {api/src/org/apache/cloudstack/api/view => server/src/com/cloud/api/query}/vo/ProjectAccountJoinVO.java (98%) rename {api/src/org/apache/cloudstack/api/view => server/src/com/cloud/api/query}/vo/ProjectInvitationJoinVO.java (99%) rename {api/src/org/apache/cloudstack/api/view => server/src/com/cloud/api/query}/vo/ProjectJoinVO.java (99%) rename {api/src/org/apache/cloudstack/api/view => server/src/com/cloud/api/query}/vo/ResourceTagJoinVO.java (99%) rename {api/src/org/apache/cloudstack/api/view => server/src/com/cloud/api/query}/vo/SecurityGroupJoinVO.java (99%) rename {api/src/org/apache/cloudstack/api/view => server/src/com/cloud/api/query}/vo/UserAccountJoinVO.java (99%) rename {api/src/org/apache/cloudstack/api/view => server/src/com/cloud/api/query}/vo/UserVmJoinVO.java (99%) diff --git a/api/src/com/cloud/network/security/SecurityGroupService.java b/api/src/com/cloud/network/security/SecurityGroupService.java index dac42505c7d..741f179db50 100644 --- a/api/src/com/cloud/network/security/SecurityGroupService.java +++ b/api/src/com/cloud/network/security/SecurityGroupService.java @@ -19,12 +19,10 @@ package com.cloud.network.security; import java.util.List; import org.apache.cloudstack.api.command.user.securitygroup.*; -import org.apache.cloudstack.api.command.user.securitygroup.AuthorizeSecurityGroupIngressCmd; + import com.cloud.exception.InvalidParameterValueException; import com.cloud.exception.PermissionDeniedException; import com.cloud.exception.ResourceInUseException; -import org.apache.cloudstack.api.view.vo.SecurityGroupJoinVO; -import com.cloud.utils.Pair; public interface SecurityGroupService { /** @@ -38,12 +36,6 @@ public interface SecurityGroupService { boolean deleteSecurityGroup(DeleteSecurityGroupCmd cmd) throws ResourceInUseException; - /** - * Search for security groups and associated ingress rules for the given account, domain, group name, and/or keyword. - * The search terms are specified in the search criteria. - * @return the list of security groups and associated ingress rules - */ - public Pair, Integer> searchForSecurityGroupRules(ListSecurityGroupsCmd cmd) throws PermissionDeniedException, InvalidParameterValueException; public List authorizeSecurityGroupIngress(AuthorizeSecurityGroupIngressCmd cmd); diff --git a/api/src/com/cloud/projects/ProjectService.java b/api/src/com/cloud/projects/ProjectService.java index 0f58ef915d4..01975188dd9 100644 --- a/api/src/com/cloud/projects/ProjectService.java +++ b/api/src/com/cloud/projects/ProjectService.java @@ -16,19 +16,11 @@ // under the License. package com.cloud.projects; -import java.util.List; -import java.util.Map; - -import org.apache.cloudstack.api.view.vo.ProjectAccountJoinVO; -import org.apache.cloudstack.api.view.vo.ProjectInvitationJoinVO; -import org.apache.cloudstack.api.view.vo.ProjectJoinVO; - import com.cloud.exception.ConcurrentOperationException; import com.cloud.exception.ResourceAllocationException; import com.cloud.exception.ResourceUnavailableException; import com.cloud.projects.ProjectAccount.Role; import com.cloud.user.Account; -import com.cloud.utils.Pair; public interface ProjectService { /** @@ -65,9 +57,6 @@ public interface ProjectService { */ Project getProject(long id); - Pair, Integer> listProjects(Long id, String name, String displayText, String state, String accountName, - Long domainId, String keyword, Long startIndex, Long pageSize, boolean listAll, boolean isRecursive, Map tags); - ProjectAccount assignAccountToProject(Project project, long accountId, Role accountRole); Account getProjectOwner(long projectId); @@ -84,10 +73,7 @@ public interface ProjectService { boolean deleteAccountFromProject(long projectId, String accountName); - Pair, Integer> listProjectAccounts(long projectId, String accountName, String role, Long startIndex, Long pageSizeVal); - Pair, Integer> listProjectInvitations(Long id, Long projectId, String accountName, Long domainId, String state, boolean activeOnly, Long startIndex, Long pageSizeVal, boolean isRecursive, - boolean listAll); boolean updateInvitation(long projectId, String accountName, String token, boolean accept); diff --git a/api/src/com/cloud/server/ManagementService.java b/api/src/com/cloud/server/ManagementService.java index a79dd13469f..70ef79973ac 100755 --- a/api/src/com/cloud/server/ManagementService.java +++ b/api/src/com/cloud/server/ManagementService.java @@ -62,9 +62,6 @@ import org.apache.cloudstack.api.command.user.iso.UpdateIsoCmd; import org.apache.cloudstack.api.command.user.vmgroup.UpdateVMGroupCmd; import org.apache.cloudstack.api.command.admin.systemvm.UpgradeSystemVMCmd; import org.apache.cloudstack.api.command.admin.resource.UploadCustomCertificateCmd; -import org.apache.cloudstack.api.view.vo.DomainRouterJoinVO; -import org.apache.cloudstack.api.view.vo.EventJoinVO; -import org.apache.cloudstack.api.view.vo.InstanceGroupJoinVO; import com.cloud.async.AsyncJob; import com.cloud.capacity.Capacity; @@ -168,25 +165,7 @@ public interface ManagementService { VirtualMachineTemplate updateTemplate(UpdateTemplateCmd cmd); - /** - * Obtains a list of events by the specified search criteria. Can search by: "username", "type", "level", - * "startDate", - * "endDate" - * - * @param c - * @return List of Events. - */ - Pair, Integer> searchForEvents(ListEventsCmd c); - /** - * Obtains a list of routers by the specified search criteria. Can search by: "userId", "name", "state", - * "dataCenterId", - * "podId", "hostId" - * - * @param cmd - * @return List of DomainRouters. - */ - Pair, Integer> searchForRouters(ListRoutersCmd cmd); /** * Obtains a list of IP Addresses by the specified search criteria. Can search by: "userId", "dataCenterId", @@ -309,7 +288,6 @@ public interface ManagementService { InstanceGroup updateVmGroup(UpdateVMGroupCmd cmd); - Pair, Integer> searchForVmGroups(ListVMGroupsCmd cmd); Map listCapabilities(ListCapabilitiesCmd cmd); diff --git a/api/src/com/cloud/server/TaggedResourceService.java b/api/src/com/cloud/server/TaggedResourceService.java index f28d9e9828e..92a4300db0a 100644 --- a/api/src/com/cloud/server/TaggedResourceService.java +++ b/api/src/com/cloud/server/TaggedResourceService.java @@ -19,11 +19,7 @@ package com.cloud.server; import java.util.List; import java.util.Map; -import org.apache.cloudstack.api.command.user.tag.ListTagsCmd; - -import org.apache.cloudstack.api.view.vo.ResourceTagJoinVO; import com.cloud.server.ResourceTag.TaggedResourceType; -import com.cloud.utils.Pair; public interface TaggedResourceService { @@ -45,11 +41,6 @@ public interface TaggedResourceService { */ String getUuid(String resourceId, TaggedResourceType resourceType); - /** - * @param listTagsCmd - * @return - */ - Pair, Integer> listTags(ListTagsCmd listTagsCmd); /** * @param resourceIds diff --git a/api/src/com/cloud/user/AccountService.java b/api/src/com/cloud/user/AccountService.java index 10d666c38f1..0a6cc6bd59c 100755 --- a/api/src/com/cloud/user/AccountService.java +++ b/api/src/com/cloud/user/AccountService.java @@ -21,13 +21,12 @@ import java.util.Map; import com.cloud.acl.ControlledEntity; import com.cloud.acl.SecurityChecker.AccessType; + import org.apache.cloudstack.api.command.admin.user.DeleteUserCmd; -import org.apache.cloudstack.api.command.admin.user.ListUsersCmd; import org.apache.cloudstack.api.command.admin.user.RegisterCmd; import org.apache.cloudstack.api.command.admin.user.UpdateUserCmd; import org.apache.cloudstack.api.command.admin.account.UpdateAccountCmd; import org.apache.cloudstack.api.command.user.account.ListAccountsCmd; -import org.apache.cloudstack.api.view.vo.UserAccountJoinVO; import com.cloud.domain.Domain; import com.cloud.exception.ConcurrentOperationException; @@ -195,8 +194,7 @@ public interface AccountService { Pair, Integer> searchForAccounts(ListAccountsCmd cmd); - Pair, Integer> searchForUsers(ListUsersCmd cmd) - throws PermissionDeniedException; + UserAccount getUserByApiKey(String apiKey); diff --git a/api/src/com/cloud/vm/UserVmService.java b/api/src/com/cloud/vm/UserVmService.java index bf02c5c3bcc..b1ebe10596d 100755 --- a/api/src/com/cloud/vm/UserVmService.java +++ b/api/src/com/cloud/vm/UserVmService.java @@ -30,13 +30,12 @@ import org.apache.cloudstack.api.command.user.vmgroup.DeleteVMGroupCmd; import org.apache.cloudstack.api.command.user.vm.DeployVMCmd; import org.apache.cloudstack.api.command.user.vm.DestroyVMCmd; import org.apache.cloudstack.api.command.user.volume.DetachVolumeCmd; -import org.apache.cloudstack.api.command.user.vm.ListVMsCmd; import org.apache.cloudstack.api.command.user.vm.RebootVMCmd; import org.apache.cloudstack.api.command.admin.vm.RecoverVMCmd; import org.apache.cloudstack.api.command.user.vm.ResetVMPasswordCmd; import org.apache.cloudstack.api.command.user.vm.RestoreVMCmd; import org.apache.cloudstack.api.command.user.vm.UpgradeVMCmd; -import org.apache.cloudstack.api.view.vo.UserVmJoinVO; + import com.cloud.dc.DataCenter; import com.cloud.exception.ConcurrentOperationException; import com.cloud.exception.InsufficientCapacityException; @@ -53,7 +52,6 @@ import com.cloud.storage.Volume; import com.cloud.template.VirtualMachineTemplate; import com.cloud.user.Account; import com.cloud.uservm.UserVm; -import com.cloud.utils.Pair; import com.cloud.utils.exception.ExecutionException; public interface UserVmService { @@ -371,15 +369,6 @@ public interface UserVmService { void deletePrivateTemplateRecord(Long templateId); - /** - * Obtains a list of virtual machines by the specified search criteria. Can search by: "userId", "name", "state", - * "dataCenterId", "podId", "hostId" - * - * @param cmd - * the API command that wraps the search criteria - * @return List of UserVMs. - */ - Pair, Integer> searchForUserVMs(ListVMsCmd cmd); HypervisorType getHypervisorTypeOfUserVM(long vmid); diff --git a/api/src/org/apache/cloudstack/api/BaseCmd.java b/api/src/org/apache/cloudstack/api/BaseCmd.java index 24e36dd7019..21e5a332a7a 100644 --- a/api/src/org/apache/cloudstack/api/BaseCmd.java +++ b/api/src/org/apache/cloudstack/api/BaseCmd.java @@ -26,6 +26,7 @@ import java.util.List; import java.util.Map; import java.util.regex.Pattern; +import org.apache.cloudstack.query.QueryService; import org.apache.log4j.Logger; import com.cloud.configuration.ConfigurationService; @@ -141,6 +142,8 @@ public abstract class BaseCmd { public static NetworkACLService _networkACLService; public static Site2SiteVpnService _s2sVpnService; + public static QueryService _queryService; + public static void setComponents(ResponseGenerator generator) { ComponentLocator locator = ComponentLocator.getLocator(ManagementService.Name); _mgr = (ManagementService) ComponentLocator.getComponent(ManagementService.Name); @@ -172,6 +175,7 @@ public abstract class BaseCmd { _vpcService = locator.getManager(VpcService.class); _networkACLService = locator.getManager(NetworkACLService.class); _s2sVpnService = locator.getManager(Site2SiteVpnService.class); + _queryService = locator.getManager(QueryService.class); } public abstract void execute() throws ResourceUnavailableException, InsufficientCapacityException, ServerApiException, ConcurrentOperationException, ResourceAllocationException, NetworkRuleConflictException; diff --git a/api/src/org/apache/cloudstack/api/ResponseGenerator.java b/api/src/org/apache/cloudstack/api/ResponseGenerator.java index ccdf93ced1a..7f1ef48144d 100644 --- a/api/src/org/apache/cloudstack/api/ResponseGenerator.java +++ b/api/src/org/apache/cloudstack/api/ResponseGenerator.java @@ -89,6 +89,8 @@ import org.apache.cloudstack.api.response.VpcOfferingResponse; import org.apache.cloudstack.api.response.VpcResponse; import org.apache.cloudstack.api.response.VpnUsersResponse; import org.apache.cloudstack.api.response.ZoneResponse; + + import com.cloud.async.AsyncJob; import com.cloud.capacity.Capacity; import com.cloud.configuration.Configuration; @@ -150,16 +152,6 @@ import com.cloud.user.User; import com.cloud.user.UserAccount; import com.cloud.uservm.UserVm; import com.cloud.vm.InstanceGroup; -import org.apache.cloudstack.api.view.vo.DomainRouterJoinVO; -import org.apache.cloudstack.api.view.vo.EventJoinVO; -import org.apache.cloudstack.api.view.vo.InstanceGroupJoinVO; -import org.apache.cloudstack.api.view.vo.ProjectAccountJoinVO; -import org.apache.cloudstack.api.view.vo.ProjectInvitationJoinVO; -import org.apache.cloudstack.api.view.vo.ProjectJoinVO; -import org.apache.cloudstack.api.view.vo.ResourceTagJoinVO; -import org.apache.cloudstack.api.view.vo.SecurityGroupJoinVO; -import org.apache.cloudstack.api.view.vo.UserAccountJoinVO; -import org.apache.cloudstack.api.view.vo.UserVmJoinVO; import com.cloud.vm.VirtualMachine; public interface ResponseGenerator { @@ -183,10 +175,6 @@ public interface ResponseGenerator { SnapshotPolicyResponse createSnapshotPolicyResponse(SnapshotPolicy policy); - List createUserVmResponse(String objectName, UserVmJoinVO... userVms); - - List createUserVmResponse(String objectName, EnumSet details, UserVmJoinVO... userVms); - List createUserVmResponse(String objectName, UserVm... userVms); List createUserVmResponse(String objectName, EnumSet details, UserVm... userVms); @@ -195,8 +183,6 @@ public interface ResponseGenerator { DomainRouterResponse createDomainRouterResponse(VirtualRouter router); - List createDomainRouterResponse(DomainRouterJoinVO... router); - HostResponse createHostResponse(Host host, EnumSet details); HostResponse createHostResponse(Host host); @@ -219,8 +205,6 @@ public interface ResponseGenerator { InstanceGroupResponse createInstanceGroupResponse(InstanceGroup group); - List createInstanceGroupResponse(InstanceGroupJoinVO... groups); - StoragePoolResponse createStoragePoolResponse(StoragePool pool); ClusterResponse createClusterResponse(Cluster cluster, Boolean showCapacities); @@ -253,9 +237,6 @@ public interface ResponseGenerator { //ListResponse createSecurityGroupResponses(List networkGroups); - List createSecurityGroupResponses(List securityGroups); - - SecurityGroupResponse createSecurityGroupResponseFromSecurityGroupRule(List SecurityRules); SecurityGroupResponse createSecurityGroupResponse(SecurityGroup group); @@ -268,7 +249,7 @@ public interface ResponseGenerator { EventResponse createEventResponse(Event event); - List createEventResponse(EventJoinVO... events); + //List createEventResponse(EventJoinVO... events); TemplateResponse createIsoResponse(VirtualMachineTemplate result); @@ -284,7 +265,7 @@ public interface ResponseGenerator { UserResponse createUserResponse(User user); - List createUserResponse(UserAccountJoinVO... users); + //List createUserResponse(UserAccountJoinVO... users); AccountResponse createUserAccountResponse(UserAccount user); @@ -294,7 +275,6 @@ public interface ResponseGenerator { ProjectResponse createProjectResponse(Project project); - List createProjectResponse(ProjectJoinVO... projects); List createIsoResponses(VirtualMachineTemplate iso, long zoneId, boolean readyOnly); @@ -306,12 +286,8 @@ public interface ResponseGenerator { ProjectAccountResponse createProjectAccountResponse(ProjectAccount projectAccount); - List createProjectAccountResponse(ProjectAccountJoinVO... projectAccounts); - ProjectInvitationResponse createProjectInvitationResponse(ProjectInvitation invite); - List createProjectInvitationResponse(ProjectInvitationJoinVO... invites); - SystemVmInstanceResponse createSystemVmInstanceResponse(VirtualMachine systemVM); SwiftResponse createSwiftResponse(Swift swift); @@ -344,8 +320,6 @@ public interface ResponseGenerator { */ ResourceTagResponse createResourceTagResponse(ResourceTag resourceTag, boolean keyValueOnly); - List createResourceTagResponse(boolean keyValueOnly, ResourceTagJoinVO... resourceTag); - Site2SiteVpnGatewayResponse createSite2SiteVpnGatewayResponse(Site2SiteVpnGateway result); diff --git a/api/src/org/apache/cloudstack/api/command/admin/router/ListRoutersCmd.java b/api/src/org/apache/cloudstack/api/command/admin/router/ListRoutersCmd.java index ca4ad727da0..1995384593d 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/router/ListRoutersCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/router/ListRoutersCmd.java @@ -16,8 +16,6 @@ // under the License. package org.apache.cloudstack.api.command.admin.router; -import java.util.List; - import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; @@ -26,12 +24,11 @@ import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; -import org.apache.cloudstack.api.view.vo.DomainRouterJoinVO; import org.apache.cloudstack.api.response.DomainRouterResponse; import org.apache.cloudstack.api.response.ListResponse; + import com.cloud.async.AsyncJob; -import com.cloud.utils.Pair; @Implementation(description="List routers.", responseObject=DomainRouterResponse.class) public class ListRoutersCmd extends BaseListProjectAndAccountResourcesCmd { @@ -125,17 +122,14 @@ public class ListRoutersCmd extends BaseListProjectAndAccountResourcesCmd { return s_name; } + @Override public AsyncJob.Type getInstanceType() { return AsyncJob.Type.DomainRouter; } @Override public void execute(){ - Pair, Integer> result = _mgr.searchForRouters(this); - ListResponse response = new ListResponse(); - - List routerResponses = _responseGenerator.createDomainRouterResponse(result.first().toArray(new DomainRouterJoinVO[result.first().size()])); - response.setResponses(routerResponses, result.second()); + ListResponse response = _queryService.searchForRouters(this); response.setResponseName(getCommandName()); this.setResponseObject(response); } diff --git a/api/src/org/apache/cloudstack/api/command/admin/user/ListUsersCmd.java b/api/src/org/apache/cloudstack/api/command/admin/user/ListUsersCmd.java index cb480d266ad..7d918b2090d 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/user/ListUsersCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/user/ListUsersCmd.java @@ -16,9 +16,6 @@ // under the License. package org.apache.cloudstack.api.command.admin.user; -import java.util.ArrayList; -import java.util.List; - import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; @@ -28,10 +25,6 @@ import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.response.ListResponse; import org.apache.cloudstack.api.response.UserResponse; -import org.apache.cloudstack.api.view.vo.UserAccountJoinVO; - -import com.cloud.user.UserAccount; -import com.cloud.utils.Pair; @Implementation(description="Lists user accounts", responseObject=UserResponse.class) public class ListUsersCmd extends BaseListAccountResourcesCmd { @@ -88,10 +81,8 @@ public class ListUsersCmd extends BaseListAccountResourcesCmd { @Override public void execute(){ - Pair, Integer> result = _accountService.searchForUsers(this); - ListResponse response = new ListResponse(); - List userResponses = _responseGenerator.createUserResponse(result.first().toArray(new UserAccountJoinVO[result.first().size()])); - response.setResponses(userResponses, result.second()); + + ListResponse response = _queryService.searchForUsers(this); response.setResponseName(getCommandName()); this.setResponseObject(response); } diff --git a/api/src/org/apache/cloudstack/api/command/user/account/ListProjectAccountsCmd.java b/api/src/org/apache/cloudstack/api/command/user/account/ListProjectAccountsCmd.java index 6db70e7db6a..1d56a60d175 100644 --- a/api/src/org/apache/cloudstack/api/command/user/account/ListProjectAccountsCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/account/ListProjectAccountsCmd.java @@ -16,9 +16,6 @@ // under the License. package org.apache.cloudstack.api.command.user.account; -import java.util.ArrayList; -import java.util.List; - import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; @@ -29,11 +26,8 @@ import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.response.ListResponse; import org.apache.cloudstack.api.response.ProjectAccountResponse; import org.apache.cloudstack.api.response.ProjectResponse; -import org.apache.cloudstack.api.view.vo.ProjectAccountJoinVO; -import com.cloud.projects.ProjectAccount; import com.cloud.user.Account; -import com.cloud.utils.Pair; @Implementation(description="Lists project's accounts", responseObject=ProjectResponse.class, since="3.0.0") public class ListProjectAccountsCmd extends BaseListCmd { @@ -62,6 +56,17 @@ public class ListProjectAccountsCmd extends BaseListCmd { return accountName; } + + public Long getProjectId() { + return projectId; + } + + + public String getRole() { + return role; + } + + @Override public String getCommandName() { return s_name; @@ -81,11 +86,7 @@ public class ListProjectAccountsCmd extends BaseListCmd { @Override public void execute(){ - Pair, Integer> projectAccounts = _projectService.listProjectAccounts(projectId, - accountName, role, this.getStartIndex(), this.getPageSizeVal()); - ListResponse response = new ListResponse(); - List projectResponses = _responseGenerator.createProjectAccountResponse(projectAccounts.first().toArray(new ProjectAccountJoinVO[projectAccounts.first().size()])); - response.setResponses(projectResponses, projectAccounts.second()); + ListResponse response = _queryService.listProjectAccounts(this); response.setResponseName(getCommandName()); this.setResponseObject(response); diff --git a/api/src/org/apache/cloudstack/api/command/user/event/ListEventsCmd.java b/api/src/org/apache/cloudstack/api/command/user/event/ListEventsCmd.java index 42b08d4be08..f44ccf19fc5 100644 --- a/api/src/org/apache/cloudstack/api/command/user/event/ListEventsCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/event/ListEventsCmd.java @@ -17,8 +17,6 @@ package org.apache.cloudstack.api.command.user.event; import java.util.Date; -import java.util.List; - import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; @@ -28,8 +26,6 @@ import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.response.EventResponse; import org.apache.cloudstack.api.response.ListResponse; -import org.apache.cloudstack.api.view.vo.EventJoinVO; -import com.cloud.utils.Pair; @Implementation(description="A command to list events.", responseObject=EventResponse.class) public class ListEventsCmd extends BaseListProjectAndAccountResourcesCmd { @@ -106,10 +102,8 @@ public class ListEventsCmd extends BaseListProjectAndAccountResourcesCmd { @Override public void execute(){ - Pair, Integer> result = _mgr.searchForEvents(this); - ListResponse response = new ListResponse(); - List eventResponses = _responseGenerator.createEventResponse(result.first().toArray(new EventJoinVO[result.first().size()])); - response.setResponses(eventResponses, result.second()); + + ListResponse response = _queryService.searchForEvents(this); response.setResponseName(getCommandName()); this.setResponseObject(response); } diff --git a/api/src/org/apache/cloudstack/api/command/user/project/ListProjectInvitationsCmd.java b/api/src/org/apache/cloudstack/api/command/user/project/ListProjectInvitationsCmd.java index 6b6a7a7c39d..b315ab06047 100644 --- a/api/src/org/apache/cloudstack/api/command/user/project/ListProjectInvitationsCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/project/ListProjectInvitationsCmd.java @@ -16,9 +16,6 @@ // under the License. package org.apache.cloudstack.api.command.user.project; -import java.util.ArrayList; -import java.util.List; - import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; @@ -28,10 +25,6 @@ import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.response.ListResponse; import org.apache.cloudstack.api.response.ProjectInvitationResponse; -import org.apache.cloudstack.api.view.vo.ProjectInvitationJoinVO; - -import com.cloud.projects.ProjectInvitation; -import com.cloud.utils.Pair; @Implementation(description = "Lists projects and provides detailed information for listed projects", responseObject = ProjectInvitationResponse.class, since = "3.0.0") public class ListProjectInvitationsCmd extends BaseListAccountResourcesCmd { @@ -85,16 +78,8 @@ public class ListProjectInvitationsCmd extends BaseListAccountResourcesCmd { @Override public void execute() { - Pair, Integer> invites = _projectService.listProjectInvitations(id, projectId, - this.getAccountName(), this.getDomainId(), state, activeOnly, this.getStartIndex(), this.getPageSizeVal(), - this.isRecursive(), this.listAll()); - ListResponse response = new ListResponse(); - List projectInvitationResponses = - _responseGenerator.createProjectInvitationResponse(invites.first().toArray(new ProjectInvitationJoinVO[invites.first().size()])); - - response.setResponses(projectInvitationResponses, invites.second()); + ListResponse response = _queryService.listProjectInvitations(this); response.setResponseName(getCommandName()); - this.setResponseObject(response); } diff --git a/api/src/org/apache/cloudstack/api/command/user/project/ListProjectsCmd.java b/api/src/org/apache/cloudstack/api/command/user/project/ListProjectsCmd.java index cc1ccdda8e6..285844f56d3 100644 --- a/api/src/org/apache/cloudstack/api/command/user/project/ListProjectsCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/project/ListProjectsCmd.java @@ -16,11 +16,9 @@ // under the License. package org.apache.cloudstack.api.command.user.project; -import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; import java.util.Iterator; -import java.util.List; import java.util.Map; import org.apache.log4j.Logger; @@ -32,11 +30,8 @@ import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.response.ListResponse; import org.apache.cloudstack.api.response.ProjectResponse; -import org.apache.cloudstack.api.view.vo.ProjectJoinVO; import com.cloud.exception.InvalidParameterValueException; -import com.cloud.projects.Project; -import com.cloud.utils.Pair; @Implementation(description="Lists projects and provides detailed information for listed projects", responseObject=ProjectResponse.class, since="3.0.0") public class ListProjectsCmd extends BaseListAccountResourcesCmd { @@ -79,6 +74,11 @@ public class ListProjectsCmd extends BaseListAccountResourcesCmd { return displayText; } + + public String getState() { + return state; + } + @Override public String getCommandName() { return s_name; @@ -109,14 +109,8 @@ public class ListProjectsCmd extends BaseListAccountResourcesCmd { @Override public void execute(){ - Pair, Integer> projects = _projectService.listProjects(id, name, displayText, state, - this.getAccountName(), this.getDomainId(), this.getKeyword(), this.getStartIndex(), this.getPageSizeVal(), - this.listAll(), this.isRecursive(), getTags()); - ListResponse response = new ListResponse(); - List projectResponses = _responseGenerator.createProjectResponse(projects.first().toArray(new ProjectJoinVO[projects.first().size()])); - response.setResponses(projectResponses, projects.second()); + ListResponse response = _queryService.listProjects(this); response.setResponseName(getCommandName()); - this.setResponseObject(response); } } diff --git a/api/src/org/apache/cloudstack/api/command/user/securitygroup/ListSecurityGroupsCmd.java b/api/src/org/apache/cloudstack/api/command/user/securitygroup/ListSecurityGroupsCmd.java index 0149a0a6f16..3a49b26d2a2 100644 --- a/api/src/org/apache/cloudstack/api/command/user/securitygroup/ListSecurityGroupsCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/securitygroup/ListSecurityGroupsCmd.java @@ -16,8 +16,6 @@ // under the License. package org.apache.cloudstack.api.command.user.securitygroup; -import java.util.List; - import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; @@ -27,9 +25,8 @@ import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.response.ListResponse; import org.apache.cloudstack.api.response.SecurityGroupResponse; -import org.apache.cloudstack.api.view.vo.SecurityGroupJoinVO; + import com.cloud.async.AsyncJob; -import com.cloud.utils.Pair; @Implementation(description="Lists security groups", responseObject=SecurityGroupResponse.class) public class ListSecurityGroupsCmd extends BaseListTaggedResourcesCmd { @@ -78,11 +75,7 @@ public class ListSecurityGroupsCmd extends BaseListTaggedResourcesCmd { @Override public void execute(){ - Pair, Integer> result = _securityGroupService.searchForSecurityGroupRules(this); - ListResponse response = new ListResponse(); - List routerResponses = _responseGenerator.createSecurityGroupResponses(result.first()); - response.setResponses(routerResponses, result.second()); - + ListResponse response = _queryService.searchForSecurityGroups(this); response.setResponseName(getCommandName()); this.setResponseObject(response); } diff --git a/api/src/org/apache/cloudstack/api/command/user/tag/ListTagsCmd.java b/api/src/org/apache/cloudstack/api/command/user/tag/ListTagsCmd.java index 94194dbf230..d5f732e1f4b 100644 --- a/api/src/org/apache/cloudstack/api/command/user/tag/ListTagsCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/tag/ListTagsCmd.java @@ -17,16 +17,12 @@ package org.apache.cloudstack.api.command.user.tag; -import java.util.List; - import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseListProjectAndAccountResourcesCmd; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.response.ListResponse; import org.apache.cloudstack.api.response.ResourceTagResponse; -import org.apache.cloudstack.api.view.vo.ResourceTagJoinVO; -import com.cloud.utils.Pair; @Implementation(description = "List resource tag(s)", responseObject = ResourceTagResponse.class, since = "Burbank") public class ListTagsCmd extends BaseListProjectAndAccountResourcesCmd{ @@ -55,10 +51,7 @@ public class ListTagsCmd extends BaseListProjectAndAccountResourcesCmd{ @Override public void execute() { - Pair, Integer> tags = _taggedResourceService.listTags(this); - ListResponse response = new ListResponse(); - List tagResponses = _responseGenerator.createResourceTagResponse(false, tags.first().toArray(new ResourceTagJoinVO[tags.first().size()])); - response.setResponses(tagResponses, tags.second()); + ListResponse response = _queryService.listTags(this); response.setResponseName(getCommandName()); this.setResponseObject(response); } diff --git a/api/src/org/apache/cloudstack/api/command/user/vm/ListVMsCmd.java b/api/src/org/apache/cloudstack/api/command/user/vm/ListVMsCmd.java index 220b9eee951..bdf75991f18 100644 --- a/api/src/org/apache/cloudstack/api/command/user/vm/ListVMsCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vm/ListVMsCmd.java @@ -39,10 +39,10 @@ import org.apache.cloudstack.api.response.TemplateResponse; import org.apache.cloudstack.api.response.UserVmResponse; import org.apache.cloudstack.api.response.VpcResponse; import org.apache.cloudstack.api.response.ZoneResponse; + import com.cloud.async.AsyncJob; import com.cloud.exception.InvalidParameterValueException; import com.cloud.utils.Pair; -import org.apache.cloudstack.api.view.vo.UserVmJoinVO; @Implementation(description="List the virtual machines owned by the account.", responseObject=UserVmResponse.class) @@ -202,17 +202,14 @@ public class ListVMsCmd extends BaseListTaggedResourcesCmd { return s_name; } + @Override public AsyncJob.Type getInstanceType() { return AsyncJob.Type.VirtualMachine; } @Override public void execute(){ - Pair, Integer> result = _userVmService.searchForUserVMs(this); - ListResponse response = new ListResponse(); - EnumSet details = getDetails(); - List vmResponses = _responseGenerator.createUserVmResponse("virtualmachine", getDetails(), result.first().toArray(new UserVmJoinVO[result.first().size()])); - response.setResponses(vmResponses, result.second()); + ListResponse response = _queryService.searchForUserVMs(this); response.setResponseName(getCommandName()); this.setResponseObject(response); } diff --git a/api/src/org/apache/cloudstack/api/command/user/vmgroup/ListVMGroupsCmd.java b/api/src/org/apache/cloudstack/api/command/user/vmgroup/ListVMGroupsCmd.java index 139e0962c46..1aa51f8170f 100644 --- a/api/src/org/apache/cloudstack/api/command/user/vmgroup/ListVMGroupsCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vmgroup/ListVMGroupsCmd.java @@ -16,9 +16,6 @@ // under the License. package org.apache.cloudstack.api.command.user.vmgroup; -import java.util.ArrayList; -import java.util.List; - import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; @@ -26,14 +23,8 @@ 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.response.EventResponse; import org.apache.cloudstack.api.response.InstanceGroupResponse; import org.apache.cloudstack.api.response.ListResponse; -import org.apache.cloudstack.api.view.vo.EventJoinVO; -import org.apache.cloudstack.api.view.vo.InstanceGroupJoinVO; - -import com.cloud.utils.Pair; -import com.cloud.vm.InstanceGroup; @Implementation(description="Lists vm groups", responseObject=InstanceGroupResponse.class) public class ListVMGroupsCmd extends BaseListProjectAndAccountResourcesCmd { @@ -75,10 +66,7 @@ public class ListVMGroupsCmd extends BaseListProjectAndAccountResourcesCmd { @Override public void execute(){ - Pair, Integer> groups = _mgr.searchForVmGroups(this); - ListResponse response = new ListResponse(); - List grpResponses = _responseGenerator.createInstanceGroupResponse(groups.first().toArray(new InstanceGroupJoinVO[groups.first().size()])); - response.setResponses(grpResponses, groups.second()); + ListResponse response = _queryService.searchForVmGroups(this); response.setResponseName(getCommandName()); this.setResponseObject(response); } diff --git a/api/src/org/apache/cloudstack/query/QueryService.java b/api/src/org/apache/cloudstack/query/QueryService.java new file mode 100644 index 00000000000..f3d346f6253 --- /dev/null +++ b/api/src/org/apache/cloudstack/query/QueryService.java @@ -0,0 +1,71 @@ +// 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 org.apache.cloudstack.query; + +import org.apache.cloudstack.api.command.admin.router.ListRoutersCmd; +import org.apache.cloudstack.api.command.admin.user.ListUsersCmd; +import org.apache.cloudstack.api.command.user.account.ListProjectAccountsCmd; +import org.apache.cloudstack.api.command.user.event.ListEventsCmd; +import org.apache.cloudstack.api.command.user.project.ListProjectInvitationsCmd; +import org.apache.cloudstack.api.command.user.project.ListProjectsCmd; +import org.apache.cloudstack.api.command.user.securitygroup.ListSecurityGroupsCmd; +import org.apache.cloudstack.api.command.user.tag.ListTagsCmd; +import org.apache.cloudstack.api.command.user.vm.ListVMsCmd; +import org.apache.cloudstack.api.command.user.vmgroup.ListVMGroupsCmd; +import org.apache.cloudstack.api.response.DomainRouterResponse; +import org.apache.cloudstack.api.response.EventResponse; +import org.apache.cloudstack.api.response.InstanceGroupResponse; +import org.apache.cloudstack.api.response.ListResponse; +import org.apache.cloudstack.api.response.ProjectAccountResponse; +import org.apache.cloudstack.api.response.ProjectInvitationResponse; +import org.apache.cloudstack.api.response.ProjectResponse; +import org.apache.cloudstack.api.response.ResourceTagResponse; +import org.apache.cloudstack.api.response.SecurityGroupResponse; +import org.apache.cloudstack.api.response.UserResponse; +import org.apache.cloudstack.api.response.UserVmResponse; + + +import com.cloud.exception.PermissionDeniedException; + +/** + * Service used for list api query. + * @author minc + * + */ +public interface QueryService { + + public ListResponse searchForUsers(ListUsersCmd cmd) throws PermissionDeniedException; + + public ListResponse searchForEvents(ListEventsCmd cmd); + + public ListResponse listTags(ListTagsCmd cmd); + + public ListResponse searchForVmGroups(ListVMGroupsCmd cmd); + + public ListResponse searchForUserVMs(ListVMsCmd cmd); + + public ListResponse searchForSecurityGroups(ListSecurityGroupsCmd cmd); + + public ListResponse searchForRouters(ListRoutersCmd cmd); + + public ListResponse listProjectInvitations(ListProjectInvitationsCmd cmd); + + public ListResponse listProjects(ListProjectsCmd cmd); + + public ListResponse listProjectAccounts(ListProjectAccountsCmd cmd); + +} diff --git a/api/test/src/com/cloud/api/commands/test/ListRoutersCmdTest.java b/api/test/src/com/cloud/api/commands/test/ListRoutersCmdTest.java deleted file mode 100644 index 21e75a0731b..00000000000 --- a/api/test/src/com/cloud/api/commands/test/ListRoutersCmdTest.java +++ /dev/null @@ -1,168 +0,0 @@ -// 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.TestCase; - -import org.apache.cloudstack.api.command.admin.router.ListRoutersCmd; -import org.junit.Before; -import org.junit.Rule; -import org.junit.Test; -import org.junit.rules.ExpectedException; -import org.mockito.Mockito; - -import org.apache.cloudstack.api.ResponseGenerator; -import org.apache.cloudstack.api.ServerApiException; -import org.apache.cloudstack.api.response.DomainRouterResponse; -import org.apache.cloudstack.api.response.ListResponse; -import org.apache.cloudstack.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 vrList = new ArrayList(); - DomainRouterJoinVO vr = new DomainRouterJoinVO(); - String uuid = UUID.randomUUID().toString(); - vr.setUuid(uuid); - vrList.add(vr); - - List respList = new ArrayList(); - DomainRouterResponse resp = new DomainRouterResponse(); - resp.setId(uuid); - respList.add(resp); - - Mockito.when(mgrService.searchForRouters(listVrCmd)) - .thenReturn(new Pair, Integer>(vrList, 1)); - Mockito.when(responseGenerator.createDomainRouterResponse(vr)).thenReturn(respList); - - - try { - listVrCmd.execute(); - ListResponse listResp = (ListResponse)listVrCmd.getResponseObject(); - assertNotNull(listResp); - assertEquals(1, listResp.getCount().intValue()); - List 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 vrList = new ArrayList(); - 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 respList = new ArrayList(); - 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, Integer>(vrList, 2)); - Mockito.when(responseGenerator.createDomainRouterResponse(vr1, vr2)).thenReturn(respList); - try { - listVrCmd.execute(); - ListResponse listResp = (ListResponse)listVrCmd.getResponseObject(); - assertNotNull(listResp); - assertEquals(2, listResp.getCount().intValue()); - List 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 pVrList = new ArrayList(); - pVrList.add(vr1); - - List pRespList = new ArrayList(); - pRespList.add(resp1); - - listVrCmd = new ListRoutersCmd() { - public Integer getPage() { - return 1; - } - - public Integer getPageSize() { - return 1; - } - - }; - Mockito.when(mgrService.searchForRouters(listVrCmd)) - .thenReturn(new Pair, Integer>(pVrList, 2)); - Mockito.when(responseGenerator.createDomainRouterResponse(vr1)).thenReturn(pRespList); - - try { - listVrCmd.execute(); - ListResponse listResp = (ListResponse)listVrCmd.getResponseObject(); - assertNotNull(listResp); - assertEquals(2, listResp.getCount().intValue()); - List 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()); - } - } -} - diff --git a/api/test/src/com/cloud/api/commands/test/ListVmsCmdTest.java b/api/test/src/com/cloud/api/commands/test/ListVmsCmdTest.java deleted file mode 100644 index 1adfb1540fa..00000000000 --- a/api/test/src/com/cloud/api/commands/test/ListVmsCmdTest.java +++ /dev/null @@ -1,168 +0,0 @@ -// 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.List; -import java.util.UUID; - -import junit.framework.TestCase; - -import org.apache.cloudstack.api.command.user.vm.ListVMsCmd; -import org.junit.Before; -import org.junit.Rule; -import org.junit.Test; -import org.junit.rules.ExpectedException; -import org.mockito.Mockito; - -import org.apache.cloudstack.api.ApiConstants.VMDetails; -import org.apache.cloudstack.api.ResponseGenerator; -import org.apache.cloudstack.api.ServerApiException; -import org.apache.cloudstack.api.response.ListResponse; -import org.apache.cloudstack.api.response.UserVmResponse; -import org.apache.cloudstack.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 vmList = new ArrayList(); - UserVmJoinVO vm = new UserVmJoinVO(); - String uuid = UUID.randomUUID().toString(); - vm.setUuid(uuid); - vmList.add(vm); - - List respList = new ArrayList(); - UserVmResponse resp = new UserVmResponse(); - resp.setId(uuid); - respList.add(resp); - - Mockito.when(userVmService.searchForUserVMs(listVmCmd)) - .thenReturn(new Pair, Integer>(vmList, 1)); - Mockito.when(responseGenerator.createUserVmResponse("virtualmachine", EnumSet.of(VMDetails.all), vm)).thenReturn(respList); - - - try { - listVmCmd.execute(); - ListResponse listResp = (ListResponse)listVmCmd.getResponseObject(); - assertNotNull(listResp); - assertEquals(1, listResp.getCount().intValue()); - List 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 vmList = new ArrayList(); - 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 respList = new ArrayList(); - 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, Integer>(vmList, 2)); - Mockito.when(responseGenerator.createUserVmResponse("virtualmachine", EnumSet.of(VMDetails.all), vm1, vm2)).thenReturn(respList); - try { - listVmCmd.execute(); - ListResponse listResp = (ListResponse)listVmCmd.getResponseObject(); - assertNotNull(listResp); - assertEquals(2, listResp.getCount().intValue()); - List 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 pVmList = new ArrayList(); - pVmList.add(vm1); - - List pRespList = new ArrayList(); - pRespList.add(resp1); - - listVmCmd = new ListVMsCmd() { - public Integer getPage() { - return 1; - } - - public Integer getPageSize() { - return 1; - } - - }; - Mockito.when(userVmService.searchForUserVMs(listVmCmd)) - .thenReturn(new Pair, Integer>(pVmList, 2)); - Mockito.when(responseGenerator.createUserVmResponse("virtualmachine", EnumSet.of(VMDetails.all), vm1)).thenReturn(pRespList); - - try { - listVmCmd.execute(); - ListResponse listResp = (ListResponse)listVmCmd.getResponseObject(); - assertNotNull(listResp); - assertEquals(2, listResp.getCount().intValue()); - List 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()); - } - } -} diff --git a/server/src/com/cloud/api/ApiDBUtils.java b/server/src/com/cloud/api/ApiDBUtils.java index d5cce52e5f9..4e41d682773 100755 --- a/server/src/com/cloud/api/ApiDBUtils.java +++ b/server/src/com/cloud/api/ApiDBUtils.java @@ -33,16 +33,25 @@ import org.apache.cloudstack.api.response.ResourceTagResponse; import org.apache.cloudstack.api.response.SecurityGroupResponse; import org.apache.cloudstack.api.response.UserResponse; import org.apache.cloudstack.api.response.UserVmResponse; -import org.apache.cloudstack.api.view.vo.DomainRouterJoinVO; -import org.apache.cloudstack.api.view.vo.EventJoinVO; -import org.apache.cloudstack.api.view.vo.InstanceGroupJoinVO; -import org.apache.cloudstack.api.view.vo.ProjectAccountJoinVO; -import org.apache.cloudstack.api.view.vo.ProjectInvitationJoinVO; -import org.apache.cloudstack.api.view.vo.ProjectJoinVO; -import org.apache.cloudstack.api.view.vo.ResourceTagJoinVO; -import org.apache.cloudstack.api.view.vo.SecurityGroupJoinVO; -import org.apache.cloudstack.api.view.vo.UserAccountJoinVO; -import org.apache.cloudstack.api.view.vo.UserVmJoinVO; + +import com.cloud.api.query.dao.DomainRouterJoinDao; +import com.cloud.api.query.dao.InstanceGroupJoinDao; +import com.cloud.api.query.dao.ProjectAccountJoinDao; +import com.cloud.api.query.dao.ProjectInvitationJoinDao; +import com.cloud.api.query.dao.ProjectJoinDao; +import com.cloud.api.query.dao.ResourceTagJoinDao; +import com.cloud.api.query.dao.SecurityGroupJoinDao; +import com.cloud.api.query.dao.UserVmJoinDao; +import com.cloud.api.query.vo.DomainRouterJoinVO; +import com.cloud.api.query.vo.EventJoinVO; +import com.cloud.api.query.vo.InstanceGroupJoinVO; +import com.cloud.api.query.vo.ProjectAccountJoinVO; +import com.cloud.api.query.vo.ProjectInvitationJoinVO; +import com.cloud.api.query.vo.ProjectJoinVO; +import com.cloud.api.query.vo.ResourceTagJoinVO; +import com.cloud.api.query.vo.SecurityGroupJoinVO; +import com.cloud.api.query.vo.UserAccountJoinVO; +import com.cloud.api.query.vo.UserVmJoinVO; import com.cloud.async.AsyncJobManager; import com.cloud.async.AsyncJobVO; import com.cloud.capacity.CapacityVO; @@ -112,7 +121,6 @@ import com.cloud.network.security.SecurityGroup; import com.cloud.network.security.SecurityGroupManager; import com.cloud.network.security.SecurityGroupVO; import com.cloud.network.security.dao.SecurityGroupDao; -import com.cloud.network.security.dao.SecurityGroupJoinDao; import com.cloud.network.vpc.VpcManager; import com.cloud.offering.NetworkOffering; import com.cloud.offering.ServiceOffering; @@ -122,9 +130,6 @@ import com.cloud.projects.Project; import com.cloud.projects.ProjectAccount; import com.cloud.projects.ProjectInvitation; import com.cloud.projects.ProjectService; -import com.cloud.projects.dao.ProjectAccountJoinDao; -import com.cloud.projects.dao.ProjectInvitationJoinDao; -import com.cloud.projects.dao.ProjectJoinDao; import com.cloud.resource.ResourceManager; import com.cloud.server.Criteria; import com.cloud.server.ManagementServer; @@ -162,7 +167,6 @@ import com.cloud.storage.dao.VMTemplateHostDao; import com.cloud.storage.dao.VMTemplateSwiftDao; import com.cloud.storage.dao.VolumeDao; import com.cloud.storage.dao.VolumeHostDao; -import com.cloud.tags.dao.ResourceTagJoinDao; import com.cloud.user.Account; import com.cloud.user.AccountDetailsDao; import com.cloud.user.AccountVO; @@ -194,11 +198,8 @@ 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.InstanceGroupJoinDao; import com.cloud.vm.dao.UserVmDao; import com.cloud.vm.dao.UserVmDetailsDao; -import com.cloud.vm.dao.UserVmJoinDao; import com.cloud.vm.dao.VMInstanceDao; public class ApiDBUtils { diff --git a/server/src/com/cloud/api/ApiResponseHelper.java b/server/src/com/cloud/api/ApiResponseHelper.java index 1e2b87d0941..903799d3f0f 100755 --- a/server/src/com/cloud/api/ApiResponseHelper.java +++ b/server/src/com/cloud/api/ApiResponseHelper.java @@ -22,7 +22,6 @@ import java.util.Date; import java.util.EnumSet; import java.util.HashMap; import java.util.HashSet; -import java.util.Hashtable; import java.util.Iterator; import java.util.List; import java.util.Map; @@ -41,6 +40,19 @@ import org.apache.cloudstack.api.ApiConstants.HostDetails; import org.apache.cloudstack.api.ApiConstants.VMDetails; import org.apache.cloudstack.api.command.user.job.QueryAsyncJobResultCmd; import org.apache.cloudstack.api.response.AccountResponse; + +import com.cloud.api.query.ViewResponseHelper; +import com.cloud.api.query.vo.ControlledViewEntity; +import com.cloud.api.query.vo.DomainRouterJoinVO; +import com.cloud.api.query.vo.EventJoinVO; +import com.cloud.api.query.vo.InstanceGroupJoinVO; +import com.cloud.api.query.vo.ProjectAccountJoinVO; +import com.cloud.api.query.vo.ProjectInvitationJoinVO; +import com.cloud.api.query.vo.ProjectJoinVO; +import com.cloud.api.query.vo.ResourceTagJoinVO; +import com.cloud.api.query.vo.SecurityGroupJoinVO; +import com.cloud.api.query.vo.UserAccountJoinVO; +import com.cloud.api.query.vo.UserVmJoinVO; import com.cloud.api.response.ApiResponseSerializer; import org.apache.cloudstack.api.response.AsyncJobResponse; import org.apache.cloudstack.api.response.AutoScalePolicyResponse; @@ -112,17 +124,6 @@ import org.apache.cloudstack.api.response.VpcOfferingResponse; import org.apache.cloudstack.api.response.VpcResponse; import org.apache.cloudstack.api.response.VpnUsersResponse; import org.apache.cloudstack.api.response.ZoneResponse; -import org.apache.cloudstack.api.view.vo.DomainRouterJoinVO; -import org.apache.cloudstack.api.view.vo.ControlledViewEntity; -import org.apache.cloudstack.api.view.vo.EventJoinVO; -import org.apache.cloudstack.api.view.vo.InstanceGroupJoinVO; -import org.apache.cloudstack.api.view.vo.ProjectAccountJoinVO; -import org.apache.cloudstack.api.view.vo.ProjectInvitationJoinVO; -import org.apache.cloudstack.api.view.vo.ProjectJoinVO; -import org.apache.cloudstack.api.view.vo.ResourceTagJoinVO; -import org.apache.cloudstack.api.view.vo.SecurityGroupJoinVO; -import org.apache.cloudstack.api.view.vo.UserAccountJoinVO; -import org.apache.cloudstack.api.view.vo.UserVmJoinVO; import com.cloud.async.AsyncJob; import com.cloud.capacity.Capacity; import com.cloud.capacity.CapacityVO; @@ -247,15 +248,6 @@ public class ApiResponseHelper implements ResponseGenerator { } - @Override - public List createUserResponse(UserAccountJoinVO... users) { - List respList = new ArrayList(); - for (UserAccountJoinVO vt : users){ - respList.add(ApiDBUtils.newUserResponse(vt)); - } - return respList; - } - // this method is used for response generation via createAccount (which creates an account + user) @Override @@ -1177,15 +1169,6 @@ public class ApiResponseHelper implements ResponseGenerator { - @Override - public List createInstanceGroupResponse(InstanceGroupJoinVO... groups) { - List respList = new ArrayList(); - for (InstanceGroupJoinVO vt : groups){ - respList.add(ApiDBUtils.newInstanceGroupResponse(vt)); - } - return respList; - } - @Override public StoragePoolResponse createStoragePoolResponse(StoragePool pool) { StoragePoolResponse poolResponse = new StoragePoolResponse(); @@ -1369,72 +1352,26 @@ public class ApiResponseHelper implements ResponseGenerator { @Override public List createUserVmResponse(String objectName, EnumSet details, UserVm... userVms) { List viewVms = ApiDBUtils.newUserVmView(userVms); - return createUserVmResponse(objectName, details, viewVms.toArray(new UserVmJoinVO[viewVms.size()])); + return ViewResponseHelper.createUserVmResponse(objectName, details, viewVms.toArray(new UserVmJoinVO[viewVms.size()])); } @Override public List createUserVmResponse(String objectName, UserVm... userVms) { List viewVms = ApiDBUtils.newUserVmView(userVms); - return createUserVmResponse(objectName, viewVms.toArray(new UserVmJoinVO[viewVms.size()])); + return ViewResponseHelper.createUserVmResponse(objectName, viewVms.toArray(new UserVmJoinVO[viewVms.size()])); } - @Override - public List createUserVmResponse(String objectName, UserVmJoinVO... userVms) { - return createUserVmResponse(objectName, EnumSet.of(VMDetails.all), userVms); - } - @Override - public List createUserVmResponse(String objectName, EnumSet details, UserVmJoinVO... userVms) { - Account caller = UserContext.current().getCaller(); - - s_logger.debug(">>>Converting UserVm VO to UserVmResponse"); - Hashtable vmDataList = new Hashtable(); - // Initialise the vmdatalist with the input data - - - 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); - } - s_logger.debug(">>>Done with creating vm response"); - return new ArrayList(vmDataList.values()); - } @Override public DomainRouterResponse createDomainRouterResponse(VirtualRouter router) { List viewVrs = ApiDBUtils.newDomainRouterView(router); - List listVrs = createDomainRouterResponse(viewVrs.toArray(new DomainRouterJoinVO[viewVrs.size()])); + List listVrs = ViewResponseHelper.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 createDomainRouterResponse(DomainRouterJoinVO... routers) { - Account caller = UserContext.current().getCaller(); - Hashtable vrDataList = new Hashtable(); - // 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); - } - else{ - // update nics for 1 to many mapping fields - vrData = ApiDBUtils.fillRouterDetails(vrData, vr); - } - vrDataList.put(vr.getId(), vrData); - } - return new ArrayList(vrDataList.values()); - } @Override public SystemVmResponse createSystemVmResponse(VirtualMachine vm) { @@ -2006,30 +1943,12 @@ public class ApiResponseHelper implements ResponseGenerator { return isoResponses; } - @Override - public List createSecurityGroupResponses(List securityGroups) { - Account caller = UserContext.current().getCaller(); - Hashtable vrDataList = new Hashtable(); - // Initialise the vrdatalist with the input data - for (SecurityGroupJoinVO vr : securityGroups) { - SecurityGroupResponse vrData = vrDataList.get(vr.getId()); - if ( vrData == null ) { - // first time encountering this sg - vrData = ApiDBUtils.newSecurityGroupResponse(vr, caller); - } else { - // update rules for 1 to many mapping fields - vrData = ApiDBUtils.fillSecurityGroupDetails(vrData, vr); - } - vrDataList.put(vr.getId(), vrData); - } - return new ArrayList(vrDataList.values()); - } @Override public SecurityGroupResponse createSecurityGroupResponse(SecurityGroup group) { List viewSgs = ApiDBUtils.newSecurityGroupView(group); - List listSgs = createSecurityGroupResponses(viewSgs); + List listSgs = ViewResponseHelper.createSecurityGroupResponses(viewSgs); assert listSgs != null && listSgs.size() == 1 : "There should be one security group returned"; return listSgs.get(0); } @@ -2117,14 +2036,6 @@ public class ApiResponseHelper implements ResponseGenerator { } - @Override - public List createEventResponse(EventJoinVO... events) { - List respList = new ArrayList(); - for (EventJoinVO vt : events){ - respList.add(ApiDBUtils.newEventResponse(vt)); - } - return respList; - } @Override public EventResponse createEventResponse(Event event) { @@ -2675,30 +2586,12 @@ public class ApiResponseHelper implements ResponseGenerator { @Override public ProjectResponse createProjectResponse(Project project) { List viewPrjs = ApiDBUtils.newProjectView(project); - List listPrjs = createProjectResponse(viewPrjs.toArray(new ProjectJoinVO[viewPrjs.size()])); + List listPrjs = ViewResponseHelper.createProjectResponse(viewPrjs.toArray(new ProjectJoinVO[viewPrjs.size()])); assert listPrjs != null && listPrjs.size() == 1 : "There should be one project returned"; return listPrjs.get(0); } - @Override - public List createProjectResponse(ProjectJoinVO... projects) { - Hashtable prjDataList = new Hashtable(); - // Initialise the prjdatalist with the input data - for (ProjectJoinVO p : projects) { - ProjectResponse pData = prjDataList.get(p.getId()); - if ( pData == null ){ - // first time encountering this vm - pData = ApiDBUtils.newProjectResponse(p); - } - else{ - // update those 1 to many mapping fields - pData = ApiDBUtils.fillProjectDetails(pData, p); - } - prjDataList.put(p.getId(), pData); - } - return new ArrayList(prjDataList.values()); - } @Override @@ -2853,24 +2746,13 @@ public class ApiResponseHelper implements ResponseGenerator { @Override public ProjectAccountResponse createProjectAccountResponse(ProjectAccount projectAccount) { ProjectAccountJoinVO vProj = ApiDBUtils.newProjectAccountView(projectAccount); - List listProjs = createProjectAccountResponse(vProj); + List listProjs = ViewResponseHelper.createProjectAccountResponse(vProj); assert listProjs != null && listProjs.size() == 1 : "There should be one project account returned"; return listProjs.get(0); } - @Override - public List createProjectAccountResponse(ProjectAccountJoinVO... projectAccounts) { - List responseList = new ArrayList(); - for (ProjectAccountJoinVO proj : projectAccounts){ - ProjectAccountResponse resp = ApiDBUtils.newProjectAccountResponse(proj); - // update user list - List users = ApiDBUtils.findUserViewByAccountId(proj.getAccountId()); - resp.setUsers(createUserResponse(users.toArray(new UserAccountJoinVO[users.size()]))); - responseList.add(resp); - } - return responseList; - } + @Override public ProjectInvitationResponse createProjectInvitationResponse(ProjectInvitation invite) { @@ -2879,17 +2761,6 @@ public class ApiResponseHelper implements ResponseGenerator { } - - @Override - public List createProjectInvitationResponse(ProjectInvitationJoinVO... invites) { - List respList = new ArrayList(); - for (ProjectInvitationJoinVO v : invites){ - respList.add(ApiDBUtils.newProjectInvitationResponse(v)); - } - return respList; - } - - @Override public SystemVmInstanceResponse createSystemVmInstanceResponse(VirtualMachine vm) { SystemVmInstanceResponse vmResponse = new SystemVmInstanceResponse(); @@ -3126,14 +2997,6 @@ public class ApiResponseHelper implements ResponseGenerator { } - @Override - public List createResourceTagResponse(boolean keyValueOnly, ResourceTagJoinVO... tags) { - List respList = new ArrayList(); - for (ResourceTagJoinVO vt : tags){ - respList.add(ApiDBUtils.newResourceTagResponse(vt, keyValueOnly)); - } - return respList; - } @Override public VpcOfferingResponse createVpcOfferingResponse(VpcOffering offering) { diff --git a/server/src/com/cloud/api/query/QueryManagerImpl.java b/server/src/com/cloud/api/query/QueryManagerImpl.java new file mode 100644 index 00000000000..78687b18d16 --- /dev/null +++ b/server/src/com/cloud/api/query/QueryManagerImpl.java @@ -0,0 +1,1309 @@ +// 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.query; + +import java.util.ArrayList; +import java.util.Date; +import java.util.EnumSet; +import java.util.List; +import java.util.Map; + +import javax.ejb.Local; +import javax.naming.ConfigurationException; + +import org.apache.cloudstack.api.ResponseGenerator; +import org.apache.cloudstack.api.ApiConstants.VMDetails; +import org.apache.cloudstack.api.command.admin.router.ListRoutersCmd; +import org.apache.cloudstack.api.command.admin.user.ListUsersCmd; +import org.apache.cloudstack.api.command.user.account.ListProjectAccountsCmd; +import org.apache.cloudstack.api.command.user.event.ListEventsCmd; +import org.apache.cloudstack.api.command.user.project.ListProjectInvitationsCmd; +import org.apache.cloudstack.api.command.user.project.ListProjectsCmd; +import org.apache.cloudstack.api.command.user.securitygroup.ListSecurityGroupsCmd; +import org.apache.cloudstack.api.command.user.tag.ListTagsCmd; +import org.apache.cloudstack.api.command.user.vm.ListVMsCmd; +import org.apache.cloudstack.api.command.user.vmgroup.ListVMGroupsCmd; +import org.apache.cloudstack.api.response.DomainRouterResponse; +import org.apache.cloudstack.api.response.EventResponse; +import org.apache.cloudstack.api.response.InstanceGroupResponse; +import org.apache.cloudstack.api.response.ListResponse; +import org.apache.cloudstack.api.response.ProjectAccountResponse; +import org.apache.cloudstack.api.response.ProjectInvitationResponse; +import org.apache.cloudstack.api.response.ProjectResponse; +import org.apache.cloudstack.api.response.ResourceTagResponse; +import org.apache.cloudstack.api.response.SecurityGroupResponse; +import org.apache.cloudstack.api.response.UserResponse; +import org.apache.cloudstack.api.response.UserVmResponse; +import org.apache.cloudstack.query.QueryService; +import org.apache.log4j.Logger; + +import com.cloud.api.ApiResponseHelper; +import com.cloud.api.query.dao.DomainRouterJoinDao; +import com.cloud.api.query.dao.InstanceGroupJoinDao; +import com.cloud.api.query.dao.ProjectAccountJoinDao; +import com.cloud.api.query.dao.ProjectInvitationJoinDao; +import com.cloud.api.query.dao.ProjectJoinDao; +import com.cloud.api.query.dao.ResourceTagJoinDao; +import com.cloud.api.query.dao.SecurityGroupJoinDao; +import com.cloud.api.query.dao.UserVmJoinDao; +import com.cloud.api.query.vo.DomainRouterJoinVO; +import com.cloud.api.query.vo.EventJoinVO; +import com.cloud.api.query.vo.InstanceGroupJoinVO; +import com.cloud.api.query.vo.ProjectAccountJoinVO; +import com.cloud.api.query.vo.ProjectInvitationJoinVO; +import com.cloud.api.query.vo.ProjectJoinVO; +import com.cloud.api.query.vo.ResourceTagJoinVO; +import com.cloud.api.query.vo.SecurityGroupJoinVO; +import com.cloud.api.query.vo.UserAccountJoinVO; +import com.cloud.api.query.vo.UserVmJoinVO; +import com.cloud.domain.Domain; +import com.cloud.domain.DomainVO; +import com.cloud.domain.dao.DomainDao; +import com.cloud.event.dao.EventJoinDao; +import com.cloud.exception.InvalidParameterValueException; +import com.cloud.exception.PermissionDeniedException; +import com.cloud.hypervisor.Hypervisor.HypervisorType; +import com.cloud.network.security.SecurityGroupVMMapVO; +import com.cloud.network.security.dao.SecurityGroupVMMapDao; +import com.cloud.projects.ProjectInvitation; +import com.cloud.projects.Project.ListProjectResourcesCriteria; +import com.cloud.projects.Project; +import com.cloud.projects.ProjectManager; +import com.cloud.projects.ProjectService; +import com.cloud.projects.dao.ProjectAccountDao; +import com.cloud.projects.dao.ProjectDao; +import com.cloud.server.Criteria; +import com.cloud.user.Account; +import com.cloud.user.AccountManager; +import com.cloud.user.AccountManagerImpl; +import com.cloud.user.AccountService; +import com.cloud.user.AccountVO; +import com.cloud.user.DomainManager; +import com.cloud.user.UserContext; +import com.cloud.user.dao.UserAccountJoinDao; +import com.cloud.utils.DateUtil; +import com.cloud.utils.Pair; +import com.cloud.utils.Ternary; +import com.cloud.utils.component.Inject; +import com.cloud.utils.component.Manager; +import com.cloud.utils.db.Filter; +import com.cloud.utils.db.SearchBuilder; +import com.cloud.utils.db.SearchCriteria; +import com.cloud.utils.db.SearchCriteria.Func; +import com.cloud.utils.db.SearchCriteria.Op; +import com.cloud.vm.UserVmVO; +import com.cloud.vm.dao.UserVmDao; + +/** + * @author minc + * + */ +@Local(value = {QueryService.class }) +public class QueryManagerImpl implements QueryService, Manager { + + public static final Logger s_logger = Logger.getLogger(QueryManagerImpl.class); + + private String _name; + + // public static ViewResponseHelper _responseGenerator; + + @Inject + private AccountManager _accountMgr; + + @Inject + private ProjectManager _projectMgr; + + @Inject + private DomainDao _domainDao; + + @Inject + private UserAccountJoinDao _userAccountJoinDao; + + @Inject + private EventJoinDao _eventJoinDao; + + @Inject + private ResourceTagJoinDao _resourceTagJoinDao; + + @Inject + private InstanceGroupJoinDao _vmGroupJoinDao; + + @Inject + private UserVmJoinDao _userVmJoinDao; + + @Inject + private UserVmDao _userVmDao; + + @Inject + private SecurityGroupJoinDao _securityGroupJoinDao; + + @Inject + private SecurityGroupVMMapDao _securityGroupVMMapDao; + + @Inject + private DomainRouterJoinDao _routerJoinDao; + + @Inject + private ProjectInvitationJoinDao _projectInvitationJoinDao; + + @Inject + private ProjectJoinDao _projectJoinDao; + + @Inject + private ProjectDao _projectDao; + + @Inject + private ProjectAccountDao _projectAccountDao; + + @Inject + private ProjectAccountJoinDao _projectAccountJoinDao; + + @Override + public boolean configure(String name, Map params) throws ConfigurationException { + _name = name; + // _responseGenerator = new ViewResponseHelper(); + return false; + } + + @Override + public boolean start() { + return true; + } + + @Override + public boolean stop() { + return true; + } + + @Override + public String getName() { + return _name; + } + + /* (non-Javadoc) + * @see com.cloud.api.query.QueryService#searchForUsers(org.apache.cloudstack.api.command.admin.user.ListUsersCmd) + */ + @Override + public ListResponse searchForUsers(ListUsersCmd cmd) throws PermissionDeniedException { + Pair, Integer> result = searchForUsersInternal(cmd); + ListResponse response = new ListResponse(); + List userResponses = ViewResponseHelper.createUserResponse(result.first().toArray(new UserAccountJoinVO[result.first().size()])); + response.setResponses(userResponses, result.second()); + return response; + } + + private Pair, Integer> searchForUsersInternal(ListUsersCmd cmd) throws PermissionDeniedException { + Account caller = UserContext.current().getCaller(); + + //TODO: Integrate with ACL checkAccess refactoring + Long domainId = cmd.getDomainId(); + if (domainId != null) { + Domain domain = _domainDao.findById(domainId); + if (domain == null) { + throw new InvalidParameterValueException("Unable to find domain by id=" + domainId); + } + + _accountMgr.checkAccess(caller, domain); + } else { + // default domainId to the caller's domain + domainId = caller.getDomainId(); + } + + Filter searchFilter = new Filter(UserAccountJoinVO.class, "id", true, cmd.getStartIndex(), cmd.getPageSizeVal()); + + Long id = cmd.getId(); + Object username = cmd.getUsername(); + Object type = cmd.getAccountType(); + Object accountName = cmd.getAccountName(); + Object state = cmd.getState(); + Object keyword = cmd.getKeyword(); + + SearchBuilder sb = _userAccountJoinDao.createSearchBuilder(); + sb.and("username", sb.entity().getUsername(), SearchCriteria.Op.LIKE); + if (id != null && id == 1) { + // system user should NOT be searchable + List emptyList = new ArrayList(); + return new Pair, Integer>(emptyList, 0); + } else if (id != null) { + sb.and("id", sb.entity().getId(), SearchCriteria.Op.EQ); + } else { + // this condition is used to exclude system user from the search results + sb.and("id", sb.entity().getId(), SearchCriteria.Op.NEQ); + } + + sb.and("type", sb.entity().getAccountType(), SearchCriteria.Op.EQ); + sb.and("domainId", sb.entity().getDomainId(), SearchCriteria.Op.EQ); + sb.and("accountName", sb.entity().getAccountName(), SearchCriteria.Op.EQ); + sb.and("state", sb.entity().getState(), SearchCriteria.Op.EQ); + + if ((accountName == null) && (domainId != null)) { + sb.and("domainPath", sb.entity().getDomainPath(), SearchCriteria.Op.LIKE); + } + + SearchCriteria sc = sb.create(); + if (keyword != null) { + SearchCriteria ssc = _userAccountJoinDao.createSearchCriteria(); + ssc.addOr("username", SearchCriteria.Op.LIKE, "%" + keyword + "%"); + ssc.addOr("firstname", SearchCriteria.Op.LIKE, "%" + keyword + "%"); + ssc.addOr("lastname", SearchCriteria.Op.LIKE, "%" + keyword + "%"); + ssc.addOr("email", SearchCriteria.Op.LIKE, "%" + keyword + "%"); + ssc.addOr("state", SearchCriteria.Op.LIKE, "%" + keyword + "%"); + ssc.addOr("accountName", SearchCriteria.Op.LIKE, "%" + keyword + "%"); + ssc.addOr("type", SearchCriteria.Op.LIKE, "%" + keyword + "%"); + ssc.addOr("accountState", SearchCriteria.Op.LIKE, "%" + keyword + "%"); + + sc.addAnd("username", SearchCriteria.Op.SC, ssc); + } + + if (username != null) { + sc.setParameters("username", username); + } + + if (id != null) { + sc.setParameters("id", id); + } else { + // Don't return system user, search builder with NEQ + sc.setParameters("id", 1); + } + + if (type != null) { + sc.setParameters("type", type); + } + + if (accountName != null) { + sc.setParameters("accountName", accountName); + if (domainId != null) { + sc.setParameters("domainId", domainId); + } + } else if (domainId != null) { + DomainVO domainVO = _domainDao.findById(domainId); + sc.setParameters("domainPath", domainVO.getPath() + "%"); + } + + if (state != null) { + sc.setParameters("state", state); + } + + return _userAccountJoinDao.searchAndCount(sc, searchFilter); + } + + @Override + public ListResponse searchForEvents(ListEventsCmd cmd) { + Pair, Integer> result = searchForEventsInternal(cmd); + ListResponse response = new ListResponse(); + List eventResponses = ViewResponseHelper.createEventResponse(result.first().toArray(new EventJoinVO[result.first().size()])); + response.setResponses(eventResponses, result.second()); + return response; + } + + private Pair, Integer> searchForEventsInternal(ListEventsCmd cmd) { + Account caller = UserContext.current().getCaller(); + List permittedAccounts = new ArrayList(); + + Long id = cmd.getId(); + String type = cmd.getType(); + String level = cmd.getLevel(); + Date startDate = cmd.getStartDate(); + Date endDate = cmd.getEndDate(); + String keyword = cmd.getKeyword(); + Integer entryTime = cmd.getEntryTime(); + Integer duration = cmd.getDuration(); + + Ternary domainIdRecursiveListProject = new Ternary( + cmd.getDomainId(), cmd.isRecursive(), null); + _accountMgr.buildACLSearchParameters(caller, id, cmd.getAccountName(), cmd.getProjectId(), permittedAccounts, domainIdRecursiveListProject, + cmd.listAll(), false); + Long domainId = domainIdRecursiveListProject.first(); + Boolean isRecursive = domainIdRecursiveListProject.second(); + ListProjectResourcesCriteria listProjectResourcesCriteria = domainIdRecursiveListProject.third(); + + Filter searchFilter = new Filter(EventJoinVO.class, "createDate", false, cmd.getStartIndex(), cmd.getPageSizeVal()); + SearchBuilder sb = _eventJoinDao.createSearchBuilder(); + _accountMgr.buildACLViewSearchBuilder(sb, domainId, isRecursive, permittedAccounts, listProjectResourcesCriteria); + + sb.and("id", sb.entity().getId(), SearchCriteria.Op.EQ); + sb.and("levelL", sb.entity().getLevel(), SearchCriteria.Op.LIKE); + sb.and("levelEQ", sb.entity().getLevel(), SearchCriteria.Op.EQ); + sb.and("type", sb.entity().getType(), SearchCriteria.Op.EQ); + sb.and("createDateB", sb.entity().getCreateDate(), SearchCriteria.Op.BETWEEN); + sb.and("createDateG", sb.entity().getCreateDate(), SearchCriteria.Op.GTEQ); + sb.and("createDateL", sb.entity().getCreateDate(), SearchCriteria.Op.LTEQ); + sb.and("state", sb.entity().getState(), SearchCriteria.Op.NEQ); + sb.and("startId", sb.entity().getStartId(), SearchCriteria.Op.EQ); + sb.and("createDate", sb.entity().getCreateDate(), SearchCriteria.Op.BETWEEN); + + SearchCriteria sc = sb.create(); + // building ACL condition + _accountMgr.buildACLViewSearchCriteria(sc, domainId, isRecursive, permittedAccounts, listProjectResourcesCriteria); + + if (id != null) { + sc.setParameters("id", id); + } + + if (keyword != null) { + SearchCriteria ssc = _eventJoinDao.createSearchCriteria(); + ssc.addOr("type", SearchCriteria.Op.LIKE, "%" + keyword + "%"); + ssc.addOr("description", SearchCriteria.Op.LIKE, "%" + keyword + "%"); + ssc.addOr("level", SearchCriteria.Op.LIKE, "%" + keyword + "%"); + sc.addAnd("level", SearchCriteria.Op.SC, ssc); + } + + if (level != null) { + sc.setParameters("levelEQ", level); + } + + if (type != null) { + sc.setParameters("type", type); + } + + if (startDate != null && endDate != null) { + sc.setParameters("createDateB", startDate, endDate); + } else if (startDate != null) { + sc.setParameters("createDateG", startDate); + } else if (endDate != null) { + sc.setParameters("createDateL", endDate); + } + + Pair, Integer> eventPair = null; + // event_view will not have duplicate rows for each event, so searchAndCount should be good enough. + if ((entryTime != null) && (duration != null)) { + // TODO: waiting for response from dev list, logic is mystery to + // me!! + /* + * if (entryTime <= duration) { throw new + * InvalidParameterValueException + * ("Entry time must be greater than duration"); } Calendar calMin = + * Calendar.getInstance(); Calendar calMax = Calendar.getInstance(); + * calMin.add(Calendar.SECOND, -entryTime); + * calMax.add(Calendar.SECOND, -duration); Date minTime = + * calMin.getTime(); Date maxTime = calMax.getTime(); + * + * sc.setParameters("state", com.cloud.event.Event.State.Completed); + * sc.setParameters("startId", 0); sc.setParameters("createDate", + * minTime, maxTime); List startedEvents = + * _eventJoinDao.searchAllEvents(sc, searchFilter); + * List pendingEvents = new ArrayList(); + * for (EventVO event : startedEvents) { EventVO completedEvent = + * _eventDao.findCompletedEvent(event.getId()); if (completedEvent + * == null) { pendingEvents.add(event); } } return pendingEvents; + */ + } else { + eventPair = _eventJoinDao.searchAndCount(sc, searchFilter); + } + return eventPair; + + } + + @Override + public ListResponse listTags(ListTagsCmd cmd) { + Pair, Integer> tags = listTagsInternal(cmd); + ListResponse response = new ListResponse(); + List tagResponses = ViewResponseHelper.createResourceTagResponse(false, tags.first().toArray(new ResourceTagJoinVO[tags.first().size()])); + response.setResponses(tagResponses, tags.second()); + return response; + } + + private Pair, Integer> listTagsInternal(ListTagsCmd cmd) { + Account caller = UserContext.current().getCaller(); + List permittedAccounts = new ArrayList(); + String key = cmd.getKey(); + String value = cmd.getValue(); + String resourceId = cmd.getResourceId(); + String resourceType = cmd.getResourceType(); + String customerName = cmd.getCustomer(); + boolean listAll = cmd.listAll(); + + Ternary domainIdRecursiveListProject = + new Ternary(cmd.getDomainId(), cmd.isRecursive(), null); + + _accountMgr.buildACLSearchParameters(caller, null, cmd.getAccountName(), + cmd.getProjectId(), permittedAccounts, domainIdRecursiveListProject, listAll, false); + Long domainId = domainIdRecursiveListProject.first(); + Boolean isRecursive = domainIdRecursiveListProject.second(); + ListProjectResourcesCriteria listProjectResourcesCriteria = domainIdRecursiveListProject.third(); + Filter searchFilter = new Filter(ResourceTagJoinVO.class, "resourceType", false, cmd.getStartIndex(), cmd.getPageSizeVal()); + + SearchBuilder sb = _resourceTagJoinDao.createSearchBuilder(); + _accountMgr.buildACLViewSearchBuilder(sb, domainId, isRecursive, permittedAccounts, listProjectResourcesCriteria); + + sb.and("key", sb.entity().getKey(), SearchCriteria.Op.EQ); + sb.and("value", sb.entity().getValue(), SearchCriteria.Op.EQ); + + if (resourceId != null) { + sb.and().op("resourceId", sb.entity().getResourceId(), SearchCriteria.Op.EQ); + sb.or("resourceUuid", sb.entity().getResourceUuid(), SearchCriteria.Op.EQ); + sb.cp(); + } + + sb.and("resourceType", sb.entity().getResourceType(), SearchCriteria.Op.EQ); + sb.and("customer", sb.entity().getCustomer(), SearchCriteria.Op.EQ); + + // now set the SC criteria... + SearchCriteria sc = sb.create(); + _accountMgr.buildACLViewSearchCriteria(sc, domainId, isRecursive, permittedAccounts, listProjectResourcesCriteria); + + if (key != null) { + sc.setParameters("key", key); + } + + if (value != null) { + sc.setParameters("value", value); + } + + if (resourceId != null) { + sc.setParameters("resourceId", resourceId); + sc.setParameters("resourceUuid", resourceId); + } + + if (resourceType != null) { + sc.setParameters("resourceType", resourceType); + } + + if (customerName != null) { + sc.setParameters("customer", customerName); + } + + Pair, Integer> result = _resourceTagJoinDao.searchAndCount(sc, searchFilter); + return result; + } + + + + @Override + public ListResponse searchForVmGroups(ListVMGroupsCmd cmd) { + Pair, Integer> groups = searchForVmGroupsInternal(cmd); + ListResponse response = new ListResponse(); + List grpResponses = ViewResponseHelper.createInstanceGroupResponse(groups.first().toArray(new InstanceGroupJoinVO[groups.first().size()])); + response.setResponses(grpResponses, groups.second()); + return response; + } + + private Pair, Integer> searchForVmGroupsInternal(ListVMGroupsCmd cmd) { + Long id = cmd.getId(); + String name = cmd.getGroupName(); + String keyword = cmd.getKeyword(); + + Account caller = UserContext.current().getCaller(); + List permittedAccounts = new ArrayList(); + + Ternary domainIdRecursiveListProject = new Ternary( + cmd.getDomainId(), cmd.isRecursive(), null); + _accountMgr.buildACLSearchParameters(caller, id, cmd.getAccountName(), cmd.getProjectId(), permittedAccounts, domainIdRecursiveListProject, + cmd.listAll(), false); + Long domainId = domainIdRecursiveListProject.first(); + Boolean isRecursive = domainIdRecursiveListProject.second(); + ListProjectResourcesCriteria listProjectResourcesCriteria = domainIdRecursiveListProject.third(); + + Filter searchFilter = new Filter(InstanceGroupJoinVO.class, "id", true, cmd.getStartIndex(), cmd.getPageSizeVal()); + + SearchBuilder sb = _vmGroupJoinDao.createSearchBuilder(); + _accountMgr.buildACLViewSearchBuilder(sb, domainId, isRecursive, permittedAccounts, listProjectResourcesCriteria); + + + sb.and("id", sb.entity().getId(), SearchCriteria.Op.EQ); + sb.and("name", sb.entity().getName(), SearchCriteria.Op.LIKE); + + + SearchCriteria sc = sb.create(); + _accountMgr.buildACLViewSearchCriteria(sc, domainId, isRecursive, permittedAccounts, listProjectResourcesCriteria); + + if (keyword != null) { + SearchCriteria ssc = _vmGroupJoinDao.createSearchCriteria(); + ssc.addOr("name", SearchCriteria.Op.LIKE, "%" + keyword + "%"); + sc.addAnd("name", SearchCriteria.Op.SC, ssc); + } + + + if (id != null) { + sc.setParameters("id", id); + } + + if (name != null) { + sc.setParameters("name", "%" + name + "%"); + } + + return _vmGroupJoinDao.searchAndCount(sc, searchFilter); + } + + @Override + public ListResponse searchForUserVMs(ListVMsCmd cmd) { + Pair, Integer> result = searchForUserVMsInternal(cmd); + ListResponse response = new ListResponse(); + List vmResponses = ViewResponseHelper.createUserVmResponse("virtualmachine", cmd.getDetails(), result.first().toArray(new UserVmJoinVO[result.first().size()])); + response.setResponses(vmResponses, result.second()); + return response; + } + + private Pair, Integer> searchForUserVMsInternal(ListVMsCmd cmd) { + Account caller = UserContext.current().getCaller(); + List permittedAccounts = new ArrayList(); + String hypervisor = cmd.getHypervisor(); + boolean listAll = cmd.listAll(); + Long id = cmd.getId(); + Map tags = cmd.getTags(); + + Ternary domainIdRecursiveListProject = new Ternary(cmd.getDomainId(), cmd.isRecursive(), null); + _accountMgr.buildACLSearchParameters(caller, id, cmd.getAccountName(), cmd.getProjectId(), permittedAccounts, domainIdRecursiveListProject, listAll, false); + Long domainId = domainIdRecursiveListProject.first(); + Boolean isRecursive = domainIdRecursiveListProject.second(); + ListProjectResourcesCriteria listProjectResourcesCriteria = domainIdRecursiveListProject.third(); + + // 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()); + c.addCriteria(Criteria.STATE, cmd.getState()); + c.addCriteria(Criteria.DATACENTERID, cmd.getZoneId()); + c.addCriteria(Criteria.GROUPID, cmd.getGroupId()); + c.addCriteria(Criteria.FOR_VIRTUAL_NETWORK, cmd.getForVirtualNetwork()); + c.addCriteria(Criteria.NETWORKID, cmd.getNetworkId()); + c.addCriteria(Criteria.TEMPLATE_ID, cmd.getTemplateId()); + c.addCriteria(Criteria.ISO_ID, cmd.getIsoId()); + c.addCriteria(Criteria.VPC_ID, cmd.getVpcId()); + + if (domainId != null) { + c.addCriteria(Criteria.DOMAINID, domainId); + } + + if (HypervisorType.getType(hypervisor) != HypervisorType.None) { + c.addCriteria(Criteria.HYPERVISOR, hypervisor); + } else if (hypervisor != null) { + throw new InvalidParameterValueException("Invalid HypervisorType " + hypervisor); + } + + // ignore these search requests if it's not an admin + if (_accountMgr.isAdmin(caller.getType())) { + c.addCriteria(Criteria.PODID, cmd.getPodId()); + c.addCriteria(Criteria.HOSTID, cmd.getHostId()); + c.addCriteria(Criteria.STORAGE_ID, cmd.getStorageId()); + } + + if (!permittedAccounts.isEmpty()) { + c.addCriteria(Criteria.ACCOUNTID, permittedAccounts.toArray()); + } + c.addCriteria(Criteria.ISADMIN, _accountMgr.isAdmin(caller.getType())); + + return searchForUserVMsByCriteria(c, caller, domainId, isRecursive, + permittedAccounts, listAll, listProjectResourcesCriteria, tags); + } + + + private Pair, Integer> searchForUserVMsByCriteria(Criteria c, Account caller, Long domainId, boolean isRecursive, + List permittedAccounts, boolean listAll, ListProjectResourcesCriteria listProjectResourcesCriteria, Map tags) { + Filter searchFilter = new Filter(UserVmJoinVO.class, c.getOrderBy(), c.getAscending(), c.getOffset(), c.getLimit()); + + //first search distinct vm id by using query criteria and pagination + SearchBuilder sb = _userVmJoinDao.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); + Object state = c.getCriteria(Criteria.STATE); + Object notState = c.getCriteria(Criteria.NOTSTATE); + Object zone = c.getCriteria(Criteria.DATACENTERID); + Object pod = c.getCriteria(Criteria.PODID); + Object hostId = c.getCriteria(Criteria.HOSTID); + Object hostName = c.getCriteria(Criteria.HOSTNAME); + Object keyword = c.getCriteria(Criteria.KEYWORD); + Object isAdmin = c.getCriteria(Criteria.ISADMIN); + assert c.getCriteria(Criteria.IPADDRESS) == null : "We don't support search by ip address on VM any more. If you see this assert, it means we have to find a different way to search by the nic table."; + Object groupId = c.getCriteria(Criteria.GROUPID); + Object networkId = c.getCriteria(Criteria.NETWORKID); + Object hypervisor = c.getCriteria(Criteria.HYPERVISOR); + Object storageId = c.getCriteria(Criteria.STORAGE_ID); + Object templateId = c.getCriteria(Criteria.TEMPLATE_ID); + Object isoId = c.getCriteria(Criteria.ISO_ID); + Object vpcId = c.getCriteria(Criteria.VPC_ID); + + sb.and("displayName", sb.entity().getDisplayName(), SearchCriteria.Op.LIKE); + sb.and("id", sb.entity().getId(), SearchCriteria.Op.EQ); + sb.and("name", sb.entity().getHostName(), SearchCriteria.Op.LIKE); + 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().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("hostName", sb.entity().getHostName(), SearchCriteria.Op.LIKE); + sb.and("templateId", 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) { + sb.and("instanceGroupId", sb.entity().getInstanceGroupId(), SearchCriteria.Op.EQ); + } + + if (tags != null && !tags.isEmpty()) { + for (int count=0; count < tags.size(); count++) { + 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(); + } + } + + if (networkId != null) { + sb.and("networkId", sb.entity().getNetworkId(), SearchCriteria.Op.EQ); + } + + if(vpcId != null && networkId == null){ + sb.and("vpcId", sb.entity().getVpcId(), SearchCriteria.Op.EQ); + } + + if (storageId != null) { + sb.and("poolId", sb.entity().getPoolId(), SearchCriteria.Op.EQ); + } + + // populate the search criteria with the values passed in + SearchCriteria sc = sb.create(); + + // building ACL condition + _accountMgr.buildACLViewSearchCriteria(sc, domainId, isRecursive, permittedAccounts, listProjectResourcesCriteria); + + if (tags != null && !tags.isEmpty()) { + int count = 0; + 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.setParameters("instanceGroupId", groupId); + } + + if (keyword != null) { + SearchCriteria ssc = _userVmJoinDao.createSearchCriteria(); + ssc.addOr("displayName", SearchCriteria.Op.LIKE, "%" + keyword + "%"); + ssc.addOr("hostName", SearchCriteria.Op.LIKE, "%" + keyword + "%"); + ssc.addOr("instanceName", SearchCriteria.Op.LIKE, "%" + keyword + "%"); + ssc.addOr("state", SearchCriteria.Op.EQ, keyword); + + sc.addAnd("displayName", SearchCriteria.Op.SC, ssc); + } + + if (id != null) { + sc.setParameters("id", id); + } + + if (templateId != null) { + sc.setParameters("templateId", templateId); + } + + if (isoId != null) { + sc.setParameters("isoId", isoId); + } + + if (networkId != null) { + sc.setParameters("networkId", networkId); + } + + if(vpcId != null && networkId == null){ + sc.setParameters("vpcId", vpcId); + } + + if (name != null) { + sc.setParameters("name", "%" + name + "%"); + } + + if (state != null) { + if (notState != null && (Boolean) notState == true) { + sc.setParameters("stateNEQ", state); + } else { + sc.setParameters("stateEQ", state); + } + } + + if (hypervisor != null) { + sc.setParameters("hypervisorType", hypervisor); + } + + // Don't show Destroyed and Expunging vms to the end user + if ((isAdmin != null) && ((Boolean) isAdmin != true)) { + sc.setParameters("stateNIN", "Destroyed", "Expunging"); + } + + if (zone != null) { + sc.setParameters("dataCenterId", zone); + + if (state == null) { + sc.setParameters("stateNEQ", "Destroyed"); + } + } + if (pod != null) { + sc.setParameters("podId", pod); + + if (state == null) { + sc.setParameters("stateNEQ", "Destroyed"); + } + } + + if (hostId != null) { + sc.setParameters("hostIdEQ", hostId); + } else { + if (hostName != null) { + sc.setParameters("hostName", hostName); + } + } + + if (storageId != null) { + sc.setParameters("poolId", storageId); + } + + // search vm details by ids + Pair, Integer> uniqueVmPair = _userVmJoinDao.searchAndCount(sc, searchFilter); + Integer count = uniqueVmPair.second(); + if ( count.intValue() == 0 ){ + // handle empty result cases + return uniqueVmPair; + } + List uniqueVms = uniqueVmPair.first(); + Long[] vmIds = new Long[uniqueVms.size()]; + int i = 0; + for (UserVmJoinVO v : uniqueVms ){ + vmIds[i++] = v.getId(); + } + List vms = _userVmJoinDao.searchByIds(vmIds); + return new Pair, Integer>(vms, count); + } + + + @Override + public ListResponse searchForSecurityGroups(ListSecurityGroupsCmd cmd) { + Pair, Integer> result = searchForSecurityGroupsInternal(cmd); + ListResponse response = new ListResponse(); + List routerResponses = ViewResponseHelper.createSecurityGroupResponses(result.first()); + response.setResponses(routerResponses, result.second()); + return response; + } + + private Pair, Integer> searchForSecurityGroupsInternal(ListSecurityGroupsCmd cmd) throws PermissionDeniedException, InvalidParameterValueException { + Account caller = UserContext.current().getCaller(); + Long instanceId = cmd.getVirtualMachineId(); + String securityGroup = cmd.getSecurityGroupName(); + Long id = cmd.getId(); + Object keyword = cmd.getKeyword(); + List permittedAccounts = new ArrayList(); + Map tags = cmd.getTags(); + + if (instanceId != null) { + UserVmVO userVM = _userVmDao.findById(instanceId); + if (userVM == null) { + throw new InvalidParameterValueException("Unable to list network groups for virtual machine instance " + instanceId + "; instance not found."); + } + _accountMgr.checkAccess(caller, null, true, userVM); + return listSecurityGroupRulesByVM(instanceId.longValue(), cmd.getStartIndex(), cmd.getPageSizeVal()); + } + + Ternary domainIdRecursiveListProject = new Ternary(cmd.getDomainId(), cmd.isRecursive(), null); + _accountMgr.buildACLSearchParameters(caller, id, cmd.getAccountName(), cmd.getProjectId(), permittedAccounts, domainIdRecursiveListProject, cmd.listAll(), false); + Long domainId = domainIdRecursiveListProject.first(); + Boolean isRecursive = domainIdRecursiveListProject.second(); + ListProjectResourcesCriteria listProjectResourcesCriteria = domainIdRecursiveListProject.third(); + + Filter searchFilter = new Filter(SecurityGroupJoinVO.class, "id", true, cmd.getStartIndex(), cmd.getPageSizeVal()); + SearchBuilder sb = _securityGroupJoinDao.createSearchBuilder(); + sb.select(null, Func.DISTINCT, sb.entity().getId()); // select distinct ids + _accountMgr.buildACLViewSearchBuilder(sb, domainId, isRecursive, permittedAccounts, listProjectResourcesCriteria); + + sb.and("id", sb.entity().getId(), SearchCriteria.Op.EQ); + sb.and("name", sb.entity().getName(), SearchCriteria.Op.EQ); + + if (tags != null && !tags.isEmpty()) { + for (int count=0; count < tags.size(); count++) { + 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(); + } + } + + SearchCriteria sc = sb.create(); + _accountMgr.buildACLViewSearchCriteria(sc, domainId, isRecursive, permittedAccounts, listProjectResourcesCriteria); + + if (id != null) { + sc.setParameters("id", id); + } + + if (tags != null && !tags.isEmpty()) { + int count = 0; + for (String key : tags.keySet()) { + sc.setParameters("key" + String.valueOf(count), key); + sc.setParameters("value" + String.valueOf(count), tags.get(key)); + count++; + } + } + + if (securityGroup != null) { + sc.setParameters("name", securityGroup); + } + + if (keyword != null) { + SearchCriteria ssc = _securityGroupJoinDao.createSearchCriteria(); + ssc.addOr("name", SearchCriteria.Op.LIKE, "%" + keyword + "%"); + ssc.addOr("description", SearchCriteria.Op.LIKE, "%" + keyword + "%"); + sc.addAnd("name", SearchCriteria.Op.SC, ssc); + } + + // search security group together with rules + Pair, Integer> uniqueSgPair = _securityGroupJoinDao.searchAndCount(sc, searchFilter); + Integer count = uniqueSgPair.second(); + if ( count.intValue() == 0 ){ + // handle empty result cases + return uniqueSgPair; + } + + List uniqueSgs = uniqueSgPair.first(); + Long[] sgIds = new Long[uniqueSgs.size()]; + int i = 0; + for (SecurityGroupJoinVO v : uniqueSgs ){ + sgIds[i++] = v.getId(); + } + List sgs = _securityGroupJoinDao.searchByIds(sgIds); + return new Pair, Integer>(sgs, count); + } + + private Pair, Integer> listSecurityGroupRulesByVM(long vmId, long pageInd, long pageSize) { + Filter sf = new Filter(SecurityGroupVMMapVO.class, null, true, pageInd, pageSize); + Pair, Integer> sgVmMappingPair = _securityGroupVMMapDao.listByInstanceId(vmId, sf); + Integer count = sgVmMappingPair.second(); + if (count.intValue() == 0) { + // handle empty result cases + return new Pair, Integer>(new ArrayList(), count); + } + List sgVmMappings = sgVmMappingPair.first(); + Long[] sgIds = new Long[sgVmMappings.size()]; + int i = 0; + for (SecurityGroupVMMapVO sgVm : sgVmMappings) { + sgIds[i++] = sgVm.getSecurityGroupId(); + } + List sgs = _securityGroupJoinDao.searchByIds(sgIds); + return new Pair, Integer>(sgs, count); + } + + + @Override + public ListResponse searchForRouters(ListRoutersCmd cmd) { + Pair, Integer> result = searchForRoutersInternal(cmd); + ListResponse response = new ListResponse(); + + List routerResponses = ViewResponseHelper.createDomainRouterResponse(result.first().toArray(new DomainRouterJoinVO[result.first().size()])); + response.setResponses(routerResponses, result.second()); + return response; + } + + + private Pair, Integer> searchForRoutersInternal(ListRoutersCmd cmd) { + Long id = cmd.getId(); + String name = cmd.getRouterName(); + String state = cmd.getState(); + Long zone = cmd.getZoneId(); + Long pod = cmd.getPodId(); + Long hostId = cmd.getHostId(); + String keyword = cmd.getKeyword(); + Long networkId = cmd.getNetworkId(); + Long vpcId = cmd.getVpcId(); + Boolean forVpc = cmd.getForVpc(); + + Account caller = UserContext.current().getCaller(); + List permittedAccounts = new ArrayList(); + + Ternary domainIdRecursiveListProject = new Ternary( + cmd.getDomainId(), cmd.isRecursive(), null); + _accountMgr.buildACLSearchParameters(caller, id, cmd.getAccountName(), cmd.getProjectId(), permittedAccounts, domainIdRecursiveListProject, + cmd.listAll(), false); + Long domainId = domainIdRecursiveListProject.first(); + Boolean isRecursive = domainIdRecursiveListProject.second(); + ListProjectResourcesCriteria listProjectResourcesCriteria = domainIdRecursiveListProject.third(); + // 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 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().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); + + if (forVpc != null) { + if (forVpc) { + sb.and("forVpc", sb.entity().getVpcId(), SearchCriteria.Op.NNULL); + } else { + sb.and("forVpc", sb.entity().getVpcId(), SearchCriteria.Op.NULL); + } + } + + if (networkId != null) { + sb.and("networkId", sb.entity().getNetworkId(), SearchCriteria.Op.EQ); + } + + SearchCriteria sc = sb.create(); + _accountMgr.buildACLViewSearchCriteria(sc, domainId, isRecursive, permittedAccounts, listProjectResourcesCriteria); + + if (keyword != null) { + SearchCriteria ssc = _routerJoinDao.createSearchCriteria(); + ssc.addOr("hostName", SearchCriteria.Op.LIKE, "%" + keyword + "%"); + ssc.addOr("instanceName", SearchCriteria.Op.LIKE, "%" + keyword + "%"); + ssc.addOr("state", SearchCriteria.Op.LIKE, "%" + keyword + "%"); + + sc.addAnd("hostName", SearchCriteria.Op.SC, ssc); + } + + if (name != null) { + sc.setParameters("name", "%" + name + "%"); + } + + if (id != null) { + sc.setParameters("id", id); + } + + if (state != null) { + sc.setParameters("state", state); + } + + if (zone != null) { + sc.setParameters("dataCenterId", zone); + } + + if (pod != null) { + sc.setParameters("podId", pod); + } + + if (hostId != null) { + sc.setParameters("hostId", hostId); + } + + if (networkId != null) { + sc.setJoinParameters("nicSearch", "networkId", networkId); + } + + if (vpcId != null) { + sc.setParameters("vpcId", vpcId); + } + + // search VR details by ids + Pair, Integer> uniqueVrPair = _routerJoinDao.searchAndCount(sc, searchFilter); + Integer count = uniqueVrPair.second(); + if (count.intValue() == 0) { + // empty result + return uniqueVrPair; + } + List uniqueVrs = uniqueVrPair.first(); + Long[] vrIds = new Long[uniqueVrs.size()]; + int i = 0; + for (DomainRouterJoinVO v : uniqueVrs) { + vrIds[i++] = v.getId(); + } + List vrs = _routerJoinDao.searchByIds(vrIds); + return new Pair, Integer>(vrs, count); + } + + + + @Override + public ListResponse listProjects(ListProjectsCmd cmd) { + Pair, Integer> projects = listProjectsInternal(cmd); + ListResponse response = new ListResponse(); + List projectResponses = ViewResponseHelper.createProjectResponse(projects.first().toArray(new ProjectJoinVO[projects.first().size()])); + response.setResponses(projectResponses, projects.second()); + return response; + } + + private Pair, Integer> listProjectsInternal(ListProjectsCmd cmd) { + + Long id = cmd.getId(); + String name = cmd.getName(); + String displayText = cmd.getDisplayText(); + String state = cmd.getState(); + String accountName = cmd.getAccountName(); + Long domainId = cmd.getDomainId(); + String keyword = cmd.getKeyword(); + Long startIndex = cmd.getStartIndex(); + Long pageSize = cmd.getPageSizeVal(); + boolean listAll = cmd.listAll(); + boolean isRecursive = cmd.isRecursive(); + Map tags = cmd.getTags(); + + Account caller = UserContext.current().getCaller(); + Long accountId = null; + String path = null; + + Filter searchFilter = new Filter(ProjectJoinVO.class, "id", false, startIndex, pageSize); + SearchBuilder sb = _projectJoinDao.createSearchBuilder(); + sb.select(null, Func.DISTINCT, sb.entity().getId()); // select distinct + // ids + + if (_accountMgr.isAdmin(caller.getType())) { + if (domainId != null) { + DomainVO domain = _domainDao.findById(domainId); + if (domain == null) { + throw new InvalidParameterValueException("Domain id=" + domainId + " doesn't exist in the system"); + } + + _accountMgr.checkAccess(caller, domain); + + if (accountName != null) { + Account owner = _accountMgr.getActiveAccountByName(accountName, domainId); + if (owner == null) { + throw new InvalidParameterValueException("Unable to find account " + accountName + " in domain " + domainId); + } + accountId = owner.getId(); + } + } else { // domainId == null + if (accountName != null) { + throw new InvalidParameterValueException("could not find account " + accountName + " because domain is not specified"); + } + + } + } else { + if (accountName != null && !accountName.equals(caller.getAccountName())) { + throw new PermissionDeniedException("Can't list account " + accountName + " projects; unauthorized"); + } + + if (domainId != null && domainId.equals(caller.getDomainId())) { + throw new PermissionDeniedException("Can't list domain id= " + domainId + " projects; unauthorized"); + } + + accountId = caller.getId(); + } + + if (domainId == null && accountId == null && (caller.getType() == Account.ACCOUNT_TYPE_NORMAL || !listAll)) { + accountId = caller.getId(); + } else if (caller.getType() == Account.ACCOUNT_TYPE_DOMAIN_ADMIN || (isRecursive && !listAll)) { + DomainVO domain = _domainDao.findById(caller.getDomainId()); + path = domain.getPath(); + } + + if (path != null) { + sb.and("domainPath", sb.entity().getDomainPath(), SearchCriteria.Op.LIKE); + } + + if (accountId != null) { + sb.and("accountId", sb.entity().getAccountId(), SearchCriteria.Op.EQ); + } + + if (tags != null && !tags.isEmpty()) { + for (int count = 0; count < tags.size(); count++) { + 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(); + } + } + + SearchCriteria sc = sb.create(); + + if (id != null) { + sc.addAnd("id", Op.EQ, id); + } + + if (domainId != null && !isRecursive) { + sc.addAnd("domainId", Op.EQ, domainId); + } + + if (name != null) { + sc.addAnd("name", Op.EQ, name); + } + + if (displayText != null) { + sc.addAnd("displayText", Op.EQ, displayText); + } + + if (accountId != null) { + sc.setParameters("accountId", accountId); + } + + if (state != null) { + sc.addAnd("state", Op.EQ, state); + } + + if (keyword != null) { + SearchCriteria ssc = _projectJoinDao.createSearchCriteria(); + ssc.addOr("name", SearchCriteria.Op.LIKE, "%" + keyword + "%"); + ssc.addOr("displayText", SearchCriteria.Op.LIKE, "%" + keyword + "%"); + sc.addAnd("name", SearchCriteria.Op.SC, ssc); + } + + if (path != null) { + sc.setParameters("domainPath", path); + } + + if (tags != null && !tags.isEmpty()) { + int count = 0; + for (String key : tags.keySet()) { + sc.setParameters("key" + String.valueOf(count), key); + sc.setParameters("value" + String.valueOf(count), tags.get(key)); + count++; + } + } + + // search distinct projects to get count + Pair, Integer> uniquePrjPair = _projectJoinDao.searchAndCount(sc, searchFilter); + Integer count = uniquePrjPair.second(); + if (count.intValue() == 0) { + // handle empty result cases + return uniquePrjPair; + } + List uniquePrjs = uniquePrjPair.first(); + Long[] prjIds = new Long[uniquePrjs.size()]; + int i = 0; + for (ProjectJoinVO v : uniquePrjs) { + prjIds[i++] = v.getId(); + } + List prjs = _projectJoinDao.searchByIds(prjIds); + return new Pair, Integer>(prjs, count); + } + + + @Override + public ListResponse listProjectInvitations(ListProjectInvitationsCmd cmd) { + Pair, Integer> invites = listProjectInvitationsInternal(cmd); + ListResponse response = new ListResponse(); + List projectInvitationResponses = + ViewResponseHelper.createProjectInvitationResponse(invites.first().toArray(new ProjectInvitationJoinVO[invites.first().size()])); + + response.setResponses(projectInvitationResponses, invites.second()); + return response; + } + + public Pair, Integer> listProjectInvitationsInternal(ListProjectInvitationsCmd cmd){ + Long id = cmd.getId(); + Long projectId = cmd.getProjectId(); + String accountName = cmd.getAccountName(); + Long domainId = cmd.getDomainId(); + String state = cmd.getState(); + boolean activeOnly = cmd.isActiveOnly(); + Long startIndex = cmd.getStartIndex(); + Long pageSizeVal = cmd.getPageSizeVal(); + boolean isRecursive = cmd.isRecursive(); + boolean listAll = cmd.listAll(); + + Account caller = UserContext.current().getCaller(); + List permittedAccounts = new ArrayList(); + + Ternary domainIdRecursiveListProject = new Ternary(domainId, isRecursive, null); + _accountMgr.buildACLSearchParameters(caller, id, accountName, projectId, permittedAccounts, domainIdRecursiveListProject, listAll, true); + domainId = domainIdRecursiveListProject.first(); + isRecursive = domainIdRecursiveListProject.second(); + ListProjectResourcesCriteria listProjectResourcesCriteria = domainIdRecursiveListProject.third(); + + Filter searchFilter = new Filter(ProjectInvitationJoinVO.class, "id", true, startIndex, pageSizeVal); + SearchBuilder sb = _projectInvitationJoinDao.createSearchBuilder(); + _accountMgr.buildACLViewSearchBuilder(sb, domainId, isRecursive, permittedAccounts, listProjectResourcesCriteria); + + sb.and("projectId", sb.entity().getProjectId(), SearchCriteria.Op.EQ); + sb.and("state", sb.entity().getState(), SearchCriteria.Op.EQ); + sb.and("created", sb.entity().getCreated(), SearchCriteria.Op.GT); + sb.and("id", sb.entity().getId(), SearchCriteria.Op.EQ); + + SearchCriteria sc = sb.create(); + _accountMgr.buildACLViewSearchCriteria(sc, domainId, isRecursive, permittedAccounts, listProjectResourcesCriteria); + + + if (projectId != null){ + sc.setParameters("projectId", projectId); + } + + if (state != null) { + sc.setParameters("state", state); + } + + if (id != null) { + sc.setParameters("id", id); + } + + if (activeOnly) { + sc.setParameters("state", ProjectInvitation.State.Pending); + sc.setParameters("created", new Date((DateUtil.currentGMTTime().getTime()) - _projectMgr.getInvitationTimeout())); + } + + return _projectInvitationJoinDao.searchAndCount(sc, searchFilter); + + } + + + @Override + public ListResponse listProjectAccounts(ListProjectAccountsCmd cmd) { + Pair, Integer> projectAccounts = listProjectAccountsInternal(cmd); + ListResponse response = new ListResponse(); + List projectResponses = ViewResponseHelper.createProjectAccountResponse(projectAccounts.first().toArray(new ProjectAccountJoinVO[projectAccounts.first().size()])); + response.setResponses(projectResponses, projectAccounts.second()); + return response; + } + + + public Pair, Integer> listProjectAccountsInternal(ListProjectAccountsCmd cmd) { + long projectId = cmd.getProjectId(); + String accountName = cmd.getAccountName(); + String role = cmd.getRole(); + Long startIndex = cmd.getStartIndex(); + Long pageSizeVal = cmd.getPageSizeVal(); + + //long projectId, String accountName, String role, Long startIndex, Long pageSizeVal) { + Account caller = UserContext.current().getCaller(); + + //check that the project exists + Project project = _projectDao.findById(projectId); + + if (project == null) { + throw new InvalidParameterValueException("Unable to find the project id=" + projectId); + } + + //verify permissions - only accounts belonging to the project can list project's account + if (!_accountMgr.isAdmin(caller.getType()) && _projectAccountDao.findByProjectIdAccountId(projectId, caller.getAccountId()) == null) { + throw new PermissionDeniedException("Account " + caller + " is not authorized to list users of the project id=" + projectId); + } + + Filter searchFilter = new Filter(ProjectAccountJoinVO.class, "id", false, startIndex, pageSizeVal); + SearchBuilder sb = _projectAccountJoinDao.createSearchBuilder(); + sb.and("accountRole", sb.entity().getAccountRole(), Op.EQ); + sb.and("projectId", sb.entity().getProjectId(), Op.EQ); + + SearchBuilder accountSearch; + if (accountName != null) { + sb.and("accountName", sb.entity().getAccountName(), Op.EQ); + } + + SearchCriteria sc = sb.create(); + + sc.setParameters("projectId", projectId); + + if (role != null) { + sc.setParameters("accountRole", role); + } + + if (accountName != null) { + sc.setParameters("accountName", accountName); + } + + return _projectAccountJoinDao.searchAndCount(sc, searchFilter); + } + +} diff --git a/server/src/com/cloud/api/query/ViewResponseHelper.java b/server/src/com/cloud/api/query/ViewResponseHelper.java new file mode 100644 index 00000000000..d2072753a15 --- /dev/null +++ b/server/src/com/cloud/api/query/ViewResponseHelper.java @@ -0,0 +1,196 @@ +// 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.query; + +import java.util.ArrayList; +import java.util.EnumSet; +import java.util.Hashtable; +import java.util.List; + +import org.apache.cloudstack.api.ApiConstants.VMDetails; +import org.apache.cloudstack.api.response.DomainRouterResponse; +import org.apache.cloudstack.api.response.EventResponse; +import org.apache.cloudstack.api.response.InstanceGroupResponse; +import org.apache.cloudstack.api.response.ProjectAccountResponse; +import org.apache.cloudstack.api.response.ProjectInvitationResponse; +import org.apache.cloudstack.api.response.ProjectResponse; +import org.apache.cloudstack.api.response.ResourceTagResponse; +import org.apache.cloudstack.api.response.SecurityGroupResponse; +import org.apache.cloudstack.api.response.UserResponse; +import org.apache.cloudstack.api.response.UserVmResponse; +import org.apache.log4j.Logger; + +import com.cloud.api.ApiDBUtils; +import com.cloud.api.query.vo.DomainRouterJoinVO; +import com.cloud.api.query.vo.EventJoinVO; +import com.cloud.api.query.vo.InstanceGroupJoinVO; +import com.cloud.api.query.vo.ProjectAccountJoinVO; +import com.cloud.api.query.vo.ProjectInvitationJoinVO; +import com.cloud.api.query.vo.ProjectJoinVO; +import com.cloud.api.query.vo.ResourceTagJoinVO; +import com.cloud.api.query.vo.SecurityGroupJoinVO; +import com.cloud.api.query.vo.UserAccountJoinVO; +import com.cloud.api.query.vo.UserVmJoinVO; +import com.cloud.user.Account; +import com.cloud.user.UserContext; + +/** + * Helper class to generate response from DB view VO objects. + * @author minc + * + */ +public class ViewResponseHelper { + + public static final Logger s_logger = Logger.getLogger(ViewResponseHelper.class); + + public static List createUserResponse(UserAccountJoinVO... users) { + List respList = new ArrayList(); + for (UserAccountJoinVO vt : users){ + respList.add(ApiDBUtils.newUserResponse(vt)); + } + return respList; + } + + public static List createEventResponse(EventJoinVO... events) { + List respList = new ArrayList(); + for (EventJoinVO vt : events){ + respList.add(ApiDBUtils.newEventResponse(vt)); + } + return respList; + } + + public static List createResourceTagResponse(boolean keyValueOnly, ResourceTagJoinVO... tags) { + List respList = new ArrayList(); + for (ResourceTagJoinVO vt : tags){ + respList.add(ApiDBUtils.newResourceTagResponse(vt, keyValueOnly)); + } + return respList; + } + + public static List createInstanceGroupResponse(InstanceGroupJoinVO... groups) { + List respList = new ArrayList(); + for (InstanceGroupJoinVO vt : groups){ + respList.add(ApiDBUtils.newInstanceGroupResponse(vt)); + } + return respList; + } + + + public static List createUserVmResponse(String objectName, UserVmJoinVO... userVms) { + return createUserVmResponse(objectName, EnumSet.of(VMDetails.all), userVms); + } + + public static List createUserVmResponse(String objectName, EnumSet details, UserVmJoinVO... userVms) { + Account caller = UserContext.current().getCaller(); + + Hashtable vmDataList = new Hashtable(); + // Initialise the vmdatalist with the input data + + + 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); + } + return new ArrayList(vmDataList.values()); + } + + public static List createDomainRouterResponse(DomainRouterJoinVO... routers) { + Account caller = UserContext.current().getCaller(); + Hashtable vrDataList = new Hashtable(); + // 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); + } + else{ + // update nics for 1 to many mapping fields + vrData = ApiDBUtils.fillRouterDetails(vrData, vr); + } + vrDataList.put(vr.getId(), vrData); + } + return new ArrayList(vrDataList.values()); + } + + + public static List createSecurityGroupResponses(List securityGroups) { + Account caller = UserContext.current().getCaller(); + Hashtable vrDataList = new Hashtable(); + // Initialise the vrdatalist with the input data + for (SecurityGroupJoinVO vr : securityGroups) { + SecurityGroupResponse vrData = vrDataList.get(vr.getId()); + if ( vrData == null ) { + // first time encountering this sg + vrData = ApiDBUtils.newSecurityGroupResponse(vr, caller); + + } else { + // update rules for 1 to many mapping fields + vrData = ApiDBUtils.fillSecurityGroupDetails(vrData, vr); + } + vrDataList.put(vr.getId(), vrData); + } + return new ArrayList(vrDataList.values()); + } + + + public static List createProjectResponse(ProjectJoinVO... projects) { + Hashtable prjDataList = new Hashtable(); + // Initialise the prjdatalist with the input data + for (ProjectJoinVO p : projects) { + ProjectResponse pData = prjDataList.get(p.getId()); + if ( pData == null ){ + // first time encountering this vm + pData = ApiDBUtils.newProjectResponse(p); + } + else{ + // update those 1 to many mapping fields + pData = ApiDBUtils.fillProjectDetails(pData, p); + } + prjDataList.put(p.getId(), pData); + } + return new ArrayList(prjDataList.values()); + } + + + public static List createProjectAccountResponse(ProjectAccountJoinVO... projectAccounts) { + List responseList = new ArrayList(); + for (ProjectAccountJoinVO proj : projectAccounts){ + ProjectAccountResponse resp = ApiDBUtils.newProjectAccountResponse(proj); + // update user list + List users = ApiDBUtils.findUserViewByAccountId(proj.getAccountId()); + resp.setUsers(ViewResponseHelper.createUserResponse(users.toArray(new UserAccountJoinVO[users.size()]))); + responseList.add(resp); + } + return responseList; + } + + public static List createProjectInvitationResponse(ProjectInvitationJoinVO... invites) { + List respList = new ArrayList(); + for (ProjectInvitationJoinVO v : invites){ + respList.add(ApiDBUtils.newProjectInvitationResponse(v)); + } + return respList; + } +} diff --git a/server/src/com/cloud/vm/dao/DomainRouterJoinDao.java b/server/src/com/cloud/api/query/dao/DomainRouterJoinDao.java similarity index 94% rename from server/src/com/cloud/vm/dao/DomainRouterJoinDao.java rename to server/src/com/cloud/api/query/dao/DomainRouterJoinDao.java index 9bb03be7539..961ab40a88d 100644 --- a/server/src/com/cloud/vm/dao/DomainRouterJoinDao.java +++ b/server/src/com/cloud/api/query/dao/DomainRouterJoinDao.java @@ -14,12 +14,13 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.vm.dao; +package com.cloud.api.query.dao; import java.util.List; import org.apache.cloudstack.api.response.DomainRouterResponse; -import org.apache.cloudstack.api.view.vo.DomainRouterJoinVO; + +import com.cloud.api.query.vo.DomainRouterJoinVO; import com.cloud.network.router.VirtualRouter; import com.cloud.user.Account; import com.cloud.utils.db.GenericDao; diff --git a/server/src/com/cloud/vm/dao/DomainRouterJoinDaoImpl.java b/server/src/com/cloud/api/query/dao/DomainRouterJoinDaoImpl.java similarity index 99% rename from server/src/com/cloud/vm/dao/DomainRouterJoinDaoImpl.java rename to server/src/com/cloud/api/query/dao/DomainRouterJoinDaoImpl.java index 38839e3255c..9d5c36da07b 100644 --- a/server/src/com/cloud/vm/dao/DomainRouterJoinDaoImpl.java +++ b/server/src/com/cloud/api/query/dao/DomainRouterJoinDaoImpl.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.vm.dao; +package com.cloud.api.query.dao; import java.util.ArrayList; import java.util.List; @@ -24,9 +24,10 @@ import javax.ejb.Local; import org.apache.log4j.Logger; import com.cloud.api.ApiResponseHelper; +import com.cloud.api.query.vo.DomainRouterJoinVO; + import org.apache.cloudstack.api.response.DomainRouterResponse; import org.apache.cloudstack.api.response.NicResponse; -import org.apache.cloudstack.api.view.vo.DomainRouterJoinVO; import com.cloud.network.Networks.TrafficType; import com.cloud.network.router.VirtualRouter; import com.cloud.user.Account; diff --git a/server/src/com/cloud/vm/dao/InstanceGroupJoinDao.java b/server/src/com/cloud/api/query/dao/InstanceGroupJoinDao.java similarity index 93% rename from server/src/com/cloud/vm/dao/InstanceGroupJoinDao.java rename to server/src/com/cloud/api/query/dao/InstanceGroupJoinDao.java index 64599be010e..79e5728de75 100644 --- a/server/src/com/cloud/vm/dao/InstanceGroupJoinDao.java +++ b/server/src/com/cloud/api/query/dao/InstanceGroupJoinDao.java @@ -14,13 +14,13 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.vm.dao; +package com.cloud.api.query.dao; import java.util.List; import org.apache.cloudstack.api.response.InstanceGroupResponse; -import org.apache.cloudstack.api.view.vo.InstanceGroupJoinVO; +import com.cloud.api.query.vo.InstanceGroupJoinVO; import com.cloud.utils.db.GenericDao; import com.cloud.vm.InstanceGroup; diff --git a/server/src/com/cloud/vm/dao/InstanceGroupJoinDaoImpl.java b/server/src/com/cloud/api/query/dao/InstanceGroupJoinDaoImpl.java similarity index 97% rename from server/src/com/cloud/vm/dao/InstanceGroupJoinDaoImpl.java rename to server/src/com/cloud/api/query/dao/InstanceGroupJoinDaoImpl.java index aa20b770dc3..83746059c87 100644 --- a/server/src/com/cloud/vm/dao/InstanceGroupJoinDaoImpl.java +++ b/server/src/com/cloud/api/query/dao/InstanceGroupJoinDaoImpl.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.vm.dao; +package com.cloud.api.query.dao; import java.util.List; @@ -23,8 +23,9 @@ import javax.ejb.Local; import org.apache.log4j.Logger; import com.cloud.api.ApiResponseHelper; +import com.cloud.api.query.vo.InstanceGroupJoinVO; + import org.apache.cloudstack.api.response.InstanceGroupResponse; -import org.apache.cloudstack.api.view.vo.InstanceGroupJoinVO; import com.cloud.utils.db.GenericDaoBase; import com.cloud.utils.db.SearchBuilder; diff --git a/server/src/com/cloud/projects/dao/ProjectAccountJoinDao.java b/server/src/com/cloud/api/query/dao/ProjectAccountJoinDao.java similarity index 92% rename from server/src/com/cloud/projects/dao/ProjectAccountJoinDao.java rename to server/src/com/cloud/api/query/dao/ProjectAccountJoinDao.java index bdee7aa0970..a653ddde238 100644 --- a/server/src/com/cloud/projects/dao/ProjectAccountJoinDao.java +++ b/server/src/com/cloud/api/query/dao/ProjectAccountJoinDao.java @@ -14,12 +14,13 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.projects.dao; +package com.cloud.api.query.dao; import java.util.List; import org.apache.cloudstack.api.response.ProjectAccountResponse; -import org.apache.cloudstack.api.view.vo.ProjectAccountJoinVO; + +import com.cloud.api.query.vo.ProjectAccountJoinVO; import com.cloud.projects.ProjectAccount; import com.cloud.utils.db.GenericDao; diff --git a/server/src/com/cloud/projects/dao/ProjectAccountJoinDaoImpl.java b/server/src/com/cloud/api/query/dao/ProjectAccountJoinDaoImpl.java similarity index 97% rename from server/src/com/cloud/projects/dao/ProjectAccountJoinDaoImpl.java rename to server/src/com/cloud/api/query/dao/ProjectAccountJoinDaoImpl.java index afea1cb2acc..59eeb46bdeb 100644 --- a/server/src/com/cloud/projects/dao/ProjectAccountJoinDaoImpl.java +++ b/server/src/com/cloud/api/query/dao/ProjectAccountJoinDaoImpl.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.projects.dao; +package com.cloud.api.query.dao; import java.util.List; @@ -23,7 +23,8 @@ import javax.ejb.Local; import org.apache.log4j.Logger; import org.apache.cloudstack.api.response.ProjectAccountResponse; -import org.apache.cloudstack.api.view.vo.ProjectAccountJoinVO; + +import com.cloud.api.query.vo.ProjectAccountJoinVO; import com.cloud.projects.ProjectAccount; import com.cloud.utils.db.GenericDaoBase; import com.cloud.utils.db.SearchBuilder; diff --git a/server/src/com/cloud/projects/dao/ProjectInvitationJoinDao.java b/server/src/com/cloud/api/query/dao/ProjectInvitationJoinDao.java similarity index 92% rename from server/src/com/cloud/projects/dao/ProjectInvitationJoinDao.java rename to server/src/com/cloud/api/query/dao/ProjectInvitationJoinDao.java index 2ee7de095f0..ae81f0eae3b 100644 --- a/server/src/com/cloud/projects/dao/ProjectInvitationJoinDao.java +++ b/server/src/com/cloud/api/query/dao/ProjectInvitationJoinDao.java @@ -14,10 +14,11 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.projects.dao; +package com.cloud.api.query.dao; import org.apache.cloudstack.api.response.ProjectInvitationResponse; -import org.apache.cloudstack.api.view.vo.ProjectInvitationJoinVO; + +import com.cloud.api.query.vo.ProjectInvitationJoinVO; import com.cloud.projects.ProjectInvitation; import com.cloud.utils.db.GenericDao; diff --git a/server/src/com/cloud/projects/dao/ProjectInvitationJoinDaoImpl.java b/server/src/com/cloud/api/query/dao/ProjectInvitationJoinDaoImpl.java similarity index 96% rename from server/src/com/cloud/projects/dao/ProjectInvitationJoinDaoImpl.java rename to server/src/com/cloud/api/query/dao/ProjectInvitationJoinDaoImpl.java index 0ee0ef8fce9..41738615141 100644 --- a/server/src/com/cloud/projects/dao/ProjectInvitationJoinDaoImpl.java +++ b/server/src/com/cloud/api/query/dao/ProjectInvitationJoinDaoImpl.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.projects.dao; +package com.cloud.api.query.dao; import java.util.List; @@ -23,9 +23,9 @@ import javax.ejb.Local; import org.apache.log4j.Logger; import org.apache.cloudstack.api.response.ProjectInvitationResponse; -import org.apache.cloudstack.api.view.vo.ProjectInvitationJoinVO; import com.cloud.api.ApiDBUtils; +import com.cloud.api.query.vo.ProjectInvitationJoinVO; import com.cloud.projects.ProjectInvitation; import com.cloud.user.Account; import com.cloud.utils.db.GenericDaoBase; diff --git a/server/src/com/cloud/projects/dao/ProjectJoinDao.java b/server/src/com/cloud/api/query/dao/ProjectJoinDao.java similarity index 93% rename from server/src/com/cloud/projects/dao/ProjectJoinDao.java rename to server/src/com/cloud/api/query/dao/ProjectJoinDao.java index c5cc4227eee..9eeb8aa65f2 100644 --- a/server/src/com/cloud/projects/dao/ProjectJoinDao.java +++ b/server/src/com/cloud/api/query/dao/ProjectJoinDao.java @@ -14,12 +14,13 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.projects.dao; +package com.cloud.api.query.dao; import java.util.List; import org.apache.cloudstack.api.response.ProjectResponse; -import org.apache.cloudstack.api.view.vo.ProjectJoinVO; + +import com.cloud.api.query.vo.ProjectJoinVO; import com.cloud.projects.Project; import com.cloud.utils.db.GenericDao; diff --git a/server/src/com/cloud/projects/dao/ProjectJoinDaoImpl.java b/server/src/com/cloud/api/query/dao/ProjectJoinDaoImpl.java similarity index 96% rename from server/src/com/cloud/projects/dao/ProjectJoinDaoImpl.java rename to server/src/com/cloud/api/query/dao/ProjectJoinDaoImpl.java index 81ccb7f5256..a2aaa215b2b 100644 --- a/server/src/com/cloud/projects/dao/ProjectJoinDaoImpl.java +++ b/server/src/com/cloud/api/query/dao/ProjectJoinDaoImpl.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.projects.dao; +package com.cloud.api.query.dao; import java.util.List; @@ -23,9 +23,10 @@ import javax.ejb.Local; import org.apache.log4j.Logger; import com.cloud.api.ApiDBUtils; +import com.cloud.api.query.vo.ProjectJoinVO; +import com.cloud.api.query.vo.ResourceTagJoinVO; + import org.apache.cloudstack.api.response.ProjectResponse; -import org.apache.cloudstack.api.view.vo.ProjectJoinVO; -import org.apache.cloudstack.api.view.vo.ResourceTagJoinVO; import com.cloud.projects.Project; import com.cloud.utils.db.GenericDaoBase; import com.cloud.utils.db.SearchBuilder; diff --git a/server/src/com/cloud/tags/dao/ResourceTagJoinDao.java b/server/src/com/cloud/api/query/dao/ResourceTagJoinDao.java similarity index 93% rename from server/src/com/cloud/tags/dao/ResourceTagJoinDao.java rename to server/src/com/cloud/api/query/dao/ResourceTagJoinDao.java index 8dd3d82d02e..57fc130de55 100644 --- a/server/src/com/cloud/tags/dao/ResourceTagJoinDao.java +++ b/server/src/com/cloud/api/query/dao/ResourceTagJoinDao.java @@ -14,12 +14,13 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.tags.dao; +package com.cloud.api.query.dao; import java.util.List; import org.apache.cloudstack.api.response.ResourceTagResponse; -import org.apache.cloudstack.api.view.vo.ResourceTagJoinVO; + +import com.cloud.api.query.vo.ResourceTagJoinVO; import com.cloud.server.ResourceTag; import com.cloud.utils.db.GenericDao; diff --git a/server/src/com/cloud/tags/dao/ResourceTagJoinDaoImpl.java b/server/src/com/cloud/api/query/dao/ResourceTagJoinDaoImpl.java similarity index 97% rename from server/src/com/cloud/tags/dao/ResourceTagJoinDaoImpl.java rename to server/src/com/cloud/api/query/dao/ResourceTagJoinDaoImpl.java index 3c2dafa03e4..badf45758c2 100644 --- a/server/src/com/cloud/tags/dao/ResourceTagJoinDaoImpl.java +++ b/server/src/com/cloud/api/query/dao/ResourceTagJoinDaoImpl.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.tags.dao; +package com.cloud.api.query.dao; import java.util.ArrayList; import java.util.List; @@ -24,8 +24,9 @@ import javax.ejb.Local; import org.apache.log4j.Logger; import com.cloud.api.ApiResponseHelper; +import com.cloud.api.query.vo.ResourceTagJoinVO; + import org.apache.cloudstack.api.response.ResourceTagResponse; -import org.apache.cloudstack.api.view.vo.ResourceTagJoinVO; import com.cloud.server.ResourceTag; import com.cloud.utils.db.GenericDaoBase; import com.cloud.utils.db.SearchBuilder; diff --git a/server/src/com/cloud/network/security/dao/SecurityGroupJoinDao.java b/server/src/com/cloud/api/query/dao/SecurityGroupJoinDao.java similarity index 93% rename from server/src/com/cloud/network/security/dao/SecurityGroupJoinDao.java rename to server/src/com/cloud/api/query/dao/SecurityGroupJoinDao.java index 30c089762d5..de1b72ae487 100644 --- a/server/src/com/cloud/network/security/dao/SecurityGroupJoinDao.java +++ b/server/src/com/cloud/api/query/dao/SecurityGroupJoinDao.java @@ -14,12 +14,13 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.network.security.dao; +package com.cloud.api.query.dao; import java.util.List; import org.apache.cloudstack.api.response.SecurityGroupResponse; -import org.apache.cloudstack.api.view.vo.SecurityGroupJoinVO; + +import com.cloud.api.query.vo.SecurityGroupJoinVO; import com.cloud.network.security.SecurityGroup; import com.cloud.user.Account; import com.cloud.utils.db.GenericDao; diff --git a/server/src/com/cloud/network/security/dao/SecurityGroupJoinDaoImpl.java b/server/src/com/cloud/api/query/dao/SecurityGroupJoinDaoImpl.java similarity index 97% rename from server/src/com/cloud/network/security/dao/SecurityGroupJoinDaoImpl.java rename to server/src/com/cloud/api/query/dao/SecurityGroupJoinDaoImpl.java index 6ecb258b39a..b7994cbb322 100644 --- a/server/src/com/cloud/network/security/dao/SecurityGroupJoinDaoImpl.java +++ b/server/src/com/cloud/api/query/dao/SecurityGroupJoinDaoImpl.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.network.security.dao; +package com.cloud.api.query.dao; import java.util.ArrayList; import java.util.List; @@ -25,10 +25,11 @@ import org.apache.log4j.Logger; import com.cloud.api.ApiDBUtils; import com.cloud.api.ApiResponseHelper; +import com.cloud.api.query.vo.ResourceTagJoinVO; +import com.cloud.api.query.vo.SecurityGroupJoinVO; + import org.apache.cloudstack.api.response.SecurityGroupResponse; import org.apache.cloudstack.api.response.SecurityGroupRuleResponse; -import org.apache.cloudstack.api.view.vo.ResourceTagJoinVO; -import org.apache.cloudstack.api.view.vo.SecurityGroupJoinVO; import com.cloud.network.security.SecurityGroup; import com.cloud.network.security.SecurityRule.SecurityRuleType; import com.cloud.user.Account; diff --git a/server/src/com/cloud/vm/dao/UserVmJoinDao.java b/server/src/com/cloud/api/query/dao/UserVmJoinDao.java similarity index 94% rename from server/src/com/cloud/vm/dao/UserVmJoinDao.java rename to server/src/com/cloud/api/query/dao/UserVmJoinDao.java index 7788a62dca7..2617a7475ef 100644 --- a/server/src/com/cloud/vm/dao/UserVmJoinDao.java +++ b/server/src/com/cloud/api/query/dao/UserVmJoinDao.java @@ -14,14 +14,15 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.vm.dao; +package com.cloud.api.query.dao; import java.util.EnumSet; import java.util.List; import org.apache.cloudstack.api.ApiConstants.VMDetails; import org.apache.cloudstack.api.response.UserVmResponse; -import org.apache.cloudstack.api.view.vo.UserVmJoinVO; + +import com.cloud.api.query.vo.UserVmJoinVO; import com.cloud.user.Account; import com.cloud.uservm.UserVm; import com.cloud.utils.db.GenericDao; diff --git a/server/src/com/cloud/vm/dao/UserVmJoinDaoImpl.java b/server/src/com/cloud/api/query/dao/UserVmJoinDaoImpl.java similarity index 99% rename from server/src/com/cloud/vm/dao/UserVmJoinDaoImpl.java rename to server/src/com/cloud/api/query/dao/UserVmJoinDaoImpl.java index b20e53f10ea..e8317a850e1 100644 --- a/server/src/com/cloud/vm/dao/UserVmJoinDaoImpl.java +++ b/server/src/com/cloud/api/query/dao/UserVmJoinDaoImpl.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.vm.dao; +package com.cloud.api.query.dao; import java.text.DecimalFormat; import java.util.ArrayList; @@ -27,12 +27,13 @@ import javax.ejb.Local; import org.apache.log4j.Logger; import com.cloud.api.ApiDBUtils; +import com.cloud.api.query.vo.ResourceTagJoinVO; +import com.cloud.api.query.vo.UserVmJoinVO; + import org.apache.cloudstack.api.ApiConstants.VMDetails; import org.apache.cloudstack.api.response.NicResponse; import org.apache.cloudstack.api.response.SecurityGroupResponse; import org.apache.cloudstack.api.response.UserVmResponse; -import org.apache.cloudstack.api.view.vo.ResourceTagJoinVO; -import org.apache.cloudstack.api.view.vo.UserVmJoinVO; import com.cloud.user.Account; import com.cloud.uservm.UserVm; import com.cloud.utils.db.GenericDaoBase; diff --git a/api/src/org/apache/cloudstack/api/view/vo/BaseViewVO.java b/server/src/com/cloud/api/query/vo/BaseViewVO.java similarity index 97% rename from api/src/org/apache/cloudstack/api/view/vo/BaseViewVO.java rename to server/src/com/cloud/api/query/vo/BaseViewVO.java index 469944f5926..604f4597a0e 100644 --- a/api/src/org/apache/cloudstack/api/view/vo/BaseViewVO.java +++ b/server/src/com/cloud/api/query/vo/BaseViewVO.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.view.vo; +package com.cloud.api.query.vo; import javax.persistence.Column; diff --git a/api/src/org/apache/cloudstack/api/view/vo/ControlledViewEntity.java b/server/src/com/cloud/api/query/vo/ControlledViewEntity.java similarity index 96% rename from api/src/org/apache/cloudstack/api/view/vo/ControlledViewEntity.java rename to server/src/com/cloud/api/query/vo/ControlledViewEntity.java index f98e1bbc3f5..8b3687420a0 100644 --- a/api/src/org/apache/cloudstack/api/view/vo/ControlledViewEntity.java +++ b/server/src/com/cloud/api/query/vo/ControlledViewEntity.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.view.vo; +package com.cloud.api.query.vo; import com.cloud.acl.ControlledEntity; diff --git a/api/src/org/apache/cloudstack/api/view/vo/DomainRouterJoinVO.java b/server/src/com/cloud/api/query/vo/DomainRouterJoinVO.java similarity index 99% rename from api/src/org/apache/cloudstack/api/view/vo/DomainRouterJoinVO.java rename to server/src/com/cloud/api/query/vo/DomainRouterJoinVO.java index e6615f44df5..cf598276236 100644 --- a/api/src/org/apache/cloudstack/api/view/vo/DomainRouterJoinVO.java +++ b/server/src/com/cloud/api/query/vo/DomainRouterJoinVO.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.view.vo; +package com.cloud.api.query.vo; import java.net.URI; import java.util.Date; diff --git a/api/src/org/apache/cloudstack/api/view/vo/EventJoinVO.java b/server/src/com/cloud/api/query/vo/EventJoinVO.java similarity index 99% rename from api/src/org/apache/cloudstack/api/view/vo/EventJoinVO.java rename to server/src/com/cloud/api/query/vo/EventJoinVO.java index 7a3de601d7c..def1b1d2f2a 100644 --- a/api/src/org/apache/cloudstack/api/view/vo/EventJoinVO.java +++ b/server/src/com/cloud/api/query/vo/EventJoinVO.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.view.vo; +package com.cloud.api.query.vo; import java.util.Date; diff --git a/api/src/org/apache/cloudstack/api/view/vo/InstanceGroupJoinVO.java b/server/src/com/cloud/api/query/vo/InstanceGroupJoinVO.java similarity index 99% rename from api/src/org/apache/cloudstack/api/view/vo/InstanceGroupJoinVO.java rename to server/src/com/cloud/api/query/vo/InstanceGroupJoinVO.java index a473216432b..2ab375598bd 100644 --- a/api/src/org/apache/cloudstack/api/view/vo/InstanceGroupJoinVO.java +++ b/server/src/com/cloud/api/query/vo/InstanceGroupJoinVO.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.view.vo; +package com.cloud.api.query.vo; import java.util.Date; diff --git a/api/src/org/apache/cloudstack/api/view/vo/ProjectAccountJoinVO.java b/server/src/com/cloud/api/query/vo/ProjectAccountJoinVO.java similarity index 98% rename from api/src/org/apache/cloudstack/api/view/vo/ProjectAccountJoinVO.java rename to server/src/com/cloud/api/query/vo/ProjectAccountJoinVO.java index d6845bdd137..c8158cc5621 100644 --- a/api/src/org/apache/cloudstack/api/view/vo/ProjectAccountJoinVO.java +++ b/server/src/com/cloud/api/query/vo/ProjectAccountJoinVO.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.view.vo; +package com.cloud.api.query.vo; import javax.persistence.Column; import javax.persistence.Entity; diff --git a/api/src/org/apache/cloudstack/api/view/vo/ProjectInvitationJoinVO.java b/server/src/com/cloud/api/query/vo/ProjectInvitationJoinVO.java similarity index 99% rename from api/src/org/apache/cloudstack/api/view/vo/ProjectInvitationJoinVO.java rename to server/src/com/cloud/api/query/vo/ProjectInvitationJoinVO.java index b33df0428bb..7fe36d1095e 100644 --- a/api/src/org/apache/cloudstack/api/view/vo/ProjectInvitationJoinVO.java +++ b/server/src/com/cloud/api/query/vo/ProjectInvitationJoinVO.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.view.vo; +package com.cloud.api.query.vo; import java.util.Date; diff --git a/api/src/org/apache/cloudstack/api/view/vo/ProjectJoinVO.java b/server/src/com/cloud/api/query/vo/ProjectJoinVO.java similarity index 99% rename from api/src/org/apache/cloudstack/api/view/vo/ProjectJoinVO.java rename to server/src/com/cloud/api/query/vo/ProjectJoinVO.java index 0bc9cd8b013..bf278e160e0 100644 --- a/api/src/org/apache/cloudstack/api/view/vo/ProjectJoinVO.java +++ b/server/src/com/cloud/api/query/vo/ProjectJoinVO.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.view.vo; +package com.cloud.api.query.vo; import java.util.Date; diff --git a/api/src/org/apache/cloudstack/api/view/vo/ResourceTagJoinVO.java b/server/src/com/cloud/api/query/vo/ResourceTagJoinVO.java similarity index 99% rename from api/src/org/apache/cloudstack/api/view/vo/ResourceTagJoinVO.java rename to server/src/com/cloud/api/query/vo/ResourceTagJoinVO.java index 00d161115d4..63dc0b3ea9e 100644 --- a/api/src/org/apache/cloudstack/api/view/vo/ResourceTagJoinVO.java +++ b/server/src/com/cloud/api/query/vo/ResourceTagJoinVO.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.view.vo; +package com.cloud.api.query.vo; import javax.persistence.Column; import javax.persistence.Entity; diff --git a/api/src/org/apache/cloudstack/api/view/vo/SecurityGroupJoinVO.java b/server/src/com/cloud/api/query/vo/SecurityGroupJoinVO.java similarity index 99% rename from api/src/org/apache/cloudstack/api/view/vo/SecurityGroupJoinVO.java rename to server/src/com/cloud/api/query/vo/SecurityGroupJoinVO.java index ac4c114466e..6b4106e26f8 100644 --- a/api/src/org/apache/cloudstack/api/view/vo/SecurityGroupJoinVO.java +++ b/server/src/com/cloud/api/query/vo/SecurityGroupJoinVO.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.view.vo; +package com.cloud.api.query.vo; import javax.persistence.Column; import javax.persistence.Entity; diff --git a/api/src/org/apache/cloudstack/api/view/vo/UserAccountJoinVO.java b/server/src/com/cloud/api/query/vo/UserAccountJoinVO.java similarity index 99% rename from api/src/org/apache/cloudstack/api/view/vo/UserAccountJoinVO.java rename to server/src/com/cloud/api/query/vo/UserAccountJoinVO.java index b3a1b2017ef..df20ede9e75 100644 --- a/api/src/org/apache/cloudstack/api/view/vo/UserAccountJoinVO.java +++ b/server/src/com/cloud/api/query/vo/UserAccountJoinVO.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.view.vo; +package com.cloud.api.query.vo; import java.util.Date; diff --git a/api/src/org/apache/cloudstack/api/view/vo/UserVmJoinVO.java b/server/src/com/cloud/api/query/vo/UserVmJoinVO.java similarity index 99% rename from api/src/org/apache/cloudstack/api/view/vo/UserVmJoinVO.java rename to server/src/com/cloud/api/query/vo/UserVmJoinVO.java index d337bdde3a2..c01d2d94378 100644 --- a/api/src/org/apache/cloudstack/api/view/vo/UserVmJoinVO.java +++ b/server/src/com/cloud/api/query/vo/UserVmJoinVO.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.view.vo; +package com.cloud.api.query.vo; import java.net.URI; import java.util.Date; diff --git a/server/src/com/cloud/configuration/DefaultComponentLibrary.java b/server/src/com/cloud/configuration/DefaultComponentLibrary.java index 2dd46fd9ad9..d41bda67324 100755 --- a/server/src/com/cloud/configuration/DefaultComponentLibrary.java +++ b/server/src/com/cloud/configuration/DefaultComponentLibrary.java @@ -24,6 +24,15 @@ import java.util.Map; import com.cloud.agent.manager.ClusteredAgentManagerImpl; import com.cloud.alert.AlertManagerImpl; import com.cloud.alert.dao.AlertDaoImpl; +import com.cloud.api.query.QueryManagerImpl; +import com.cloud.api.query.dao.DomainRouterJoinDaoImpl; +import com.cloud.api.query.dao.InstanceGroupJoinDaoImpl; +import com.cloud.api.query.dao.ProjectAccountJoinDaoImpl; +import com.cloud.api.query.dao.ProjectInvitationJoinDaoImpl; +import com.cloud.api.query.dao.ProjectJoinDaoImpl; +import com.cloud.api.query.dao.ResourceTagJoinDaoImpl; +import com.cloud.api.query.dao.SecurityGroupJoinDaoImpl; +import com.cloud.api.query.dao.UserVmJoinDaoImpl; import com.cloud.async.AsyncJobExecutorContextImpl; import com.cloud.async.AsyncJobManagerImpl; import com.cloud.async.SyncQueueManagerImpl; @@ -117,7 +126,6 @@ import com.cloud.network.rules.RulesManagerImpl; import com.cloud.network.rules.dao.PortForwardingRulesDaoImpl; import com.cloud.network.security.SecurityGroupManagerImpl2; import com.cloud.network.security.dao.SecurityGroupDaoImpl; -import com.cloud.network.security.dao.SecurityGroupJoinDaoImpl; import com.cloud.network.security.dao.SecurityGroupRuleDaoImpl; import com.cloud.network.security.dao.SecurityGroupRulesDaoImpl; import com.cloud.network.security.dao.SecurityGroupVMMapDaoImpl; @@ -139,8 +147,6 @@ import com.cloud.projects.ProjectManagerImpl; import com.cloud.projects.dao.ProjectAccountDaoImpl; import com.cloud.projects.dao.ProjectDaoImpl; import com.cloud.projects.dao.ProjectInvitationDaoImpl; -import com.cloud.projects.dao.ProjectInvitationJoinDaoImpl; -import com.cloud.projects.dao.ProjectJoinDaoImpl; import com.cloud.resource.ResourceManagerImpl; import com.cloud.resourcelimit.ResourceLimitManagerImpl; import com.cloud.service.dao.ServiceOfferingDaoImpl; @@ -173,7 +179,6 @@ import com.cloud.storage.snapshot.SnapshotSchedulerImpl; import com.cloud.storage.swift.SwiftManagerImpl; import com.cloud.storage.upload.UploadMonitorImpl; import com.cloud.tags.TaggedResourceManagerImpl; -import com.cloud.tags.dao.ResourceTagJoinDaoImpl; import com.cloud.tags.dao.ResourceTagsDaoImpl; import com.cloud.template.HyervisorTemplateAdapter; import com.cloud.template.TemplateAdapter; @@ -203,18 +208,14 @@ 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.InstanceGroupJoinDaoImpl; 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; import com.cloud.event.dao.EventJoinDaoImpl; -import com.cloud.projects.dao.ProjectAccountJoinDaoImpl; public class DefaultComponentLibrary extends ComponentLibraryBase implements ComponentLibrary { @@ -432,6 +433,7 @@ public class DefaultComponentLibrary extends ComponentLibraryBase implements Com addManager("NetworkACLManager", NetworkACLManagerImpl.class); addManager("TaggedResourcesManager", TaggedResourceManagerImpl.class); addManager("Site2SiteVpnManager", Site2SiteVpnManagerImpl.class); + addManager("QueryManager", QueryManagerImpl.class); } @Override diff --git a/server/src/com/cloud/event/dao/EventJoinDao.java b/server/src/com/cloud/event/dao/EventJoinDao.java index d67653d2cd9..cd37d7893df 100644 --- a/server/src/com/cloud/event/dao/EventJoinDao.java +++ b/server/src/com/cloud/event/dao/EventJoinDao.java @@ -19,7 +19,8 @@ package com.cloud.event.dao; import java.util.List; import org.apache.cloudstack.api.response.EventResponse; -import org.apache.cloudstack.api.view.vo.EventJoinVO; + +import com.cloud.api.query.vo.EventJoinVO; import com.cloud.event.Event; import com.cloud.utils.db.Filter; import com.cloud.utils.db.GenericDao; diff --git a/server/src/com/cloud/event/dao/EventJoinDaoImpl.java b/server/src/com/cloud/event/dao/EventJoinDaoImpl.java index be2a6dc917a..764df99557f 100644 --- a/server/src/com/cloud/event/dao/EventJoinDaoImpl.java +++ b/server/src/com/cloud/event/dao/EventJoinDaoImpl.java @@ -24,8 +24,9 @@ import javax.ejb.Local; import org.apache.log4j.Logger; import com.cloud.api.ApiResponseHelper; +import com.cloud.api.query.vo.EventJoinVO; + import org.apache.cloudstack.api.response.EventResponse; -import org.apache.cloudstack.api.view.vo.EventJoinVO; import com.cloud.event.Event; import com.cloud.event.Event.State; import com.cloud.utils.db.Filter; diff --git a/server/src/com/cloud/network/security/SecurityGroupManagerImpl.java b/server/src/com/cloud/network/security/SecurityGroupManagerImpl.java index a9d1f0bd7a3..8e458999fb5 100755 --- a/server/src/com/cloud/network/security/SecurityGroupManagerImpl.java +++ b/server/src/com/cloud/network/security/SecurityGroupManagerImpl.java @@ -45,8 +45,10 @@ import com.cloud.agent.api.NetworkRulesSystemVmCommand; import com.cloud.agent.api.SecurityGroupRulesCmd; import com.cloud.agent.api.SecurityGroupRulesCmd.IpPortAndProto; import com.cloud.agent.manager.Commands; +import com.cloud.api.query.dao.SecurityGroupJoinDao; +import com.cloud.api.query.vo.SecurityGroupJoinVO; + import org.apache.cloudstack.api.command.user.securitygroup.RevokeSecurityGroupEgressCmd; -import org.apache.cloudstack.api.view.vo.SecurityGroupJoinVO; import com.cloud.configuration.Config; import com.cloud.configuration.dao.ConfigurationDao; import com.cloud.domain.dao.DomainDao; @@ -65,7 +67,6 @@ import com.cloud.network.NetworkManager; import com.cloud.network.security.SecurityGroupWork.Step; import com.cloud.network.security.SecurityRule.SecurityRuleType; import com.cloud.network.security.dao.SecurityGroupDao; -import com.cloud.network.security.dao.SecurityGroupJoinDao; import com.cloud.network.security.dao.SecurityGroupRuleDao; import com.cloud.network.security.dao.SecurityGroupRulesDao; import com.cloud.network.security.dao.SecurityGroupVMMapDao; @@ -158,7 +159,7 @@ public class SecurityGroupManagerImpl implements SecurityGroupManager, SecurityG UsageEventDao _usageEventDao; @Inject ResourceTagDao _resourceTagDao; - + ScheduledExecutorService _executorPool; ScheduledExecutorService _cleanupExecutor; @@ -396,7 +397,7 @@ public class SecurityGroupManagerImpl implements SecurityGroupManager, SecurityG if (s_logger.isTraceEnabled()) { s_logger.trace("Security Group Mgr: scheduling ruleset updates for " + affectedVms.size() + " vms"); } - boolean locked = _workLock.lock(_globalWorkLockTimeout); + boolean locked = _workLock.lock(_globalWorkLockTimeout); if (!locked) { s_logger.warn("Security Group Mgr: failed to acquire global work lock"); return; @@ -575,11 +576,11 @@ public class SecurityGroupManagerImpl implements SecurityGroupManager, SecurityG Map groupList = cmd.getUserSecurityGroupList(); return authorizeSecurityGroupRule(securityGroupId,protocol,startPort,endPort,icmpType,icmpCode,cidrList,groupList,SecurityRuleType.IngressRule); } - + private List authorizeSecurityGroupRule(Long securityGroupId,String protocol,Integer startPort,Integer endPort,Integer icmpType,Integer icmpCode,List cidrList,Map groupList,SecurityRuleType ruleType) { Integer startPortOrType = null; Integer endPortOrCode = null; - + // Validate parameters SecurityGroup securityGroup = _securityGroupDao.findById(securityGroupId); if (securityGroup == null) { @@ -747,7 +748,7 @@ public class SecurityGroupManagerImpl implements SecurityGroupManager, SecurityG } } } - + @Override @DB @ActionEvent(eventType = EventTypes.EVENT_SECURITY_GROUP_REVOKE_EGRESS, eventDescription = "Revoking Egress Rule ", async = true) @@ -755,7 +756,7 @@ public class SecurityGroupManagerImpl implements SecurityGroupManager, SecurityG Long id = cmd.getId(); return revokeSecurityGroupRule(id, SecurityRuleType.EgressRule); } - + @Override @DB @ActionEvent(eventType = EventTypes.EVENT_SECURITY_GROUP_REVOKE_INGRESS, eventDescription = "Revoking Ingress Rule ", async = true) @@ -764,11 +765,11 @@ public class SecurityGroupManagerImpl implements SecurityGroupManager, SecurityG Long id = cmd.getId(); return revokeSecurityGroupRule(id, SecurityRuleType.IngressRule); } - + private boolean revokeSecurityGroupRule(Long id, SecurityRuleType type) { // input validation Account caller = UserContext.current().getCaller(); - + SecurityGroupRuleVO rule = _securityGroupRuleDao.findById(id); if (rule == null) { s_logger.debug("Unable to find security rule with id " + id); @@ -780,7 +781,7 @@ public class SecurityGroupManagerImpl implements SecurityGroupManager, SecurityG s_logger.debug("Mismatch in rule type for security rule with id " + id ); throw new InvalidParameterValueException("Mismatch in rule type for security rule with id " + id); } - + // Check permissions SecurityGroup securityGroup = _securityGroupDao.findById(rule.getSecurityGroupId()); _accountMgr.checkAccess(caller, null, true, securityGroup); @@ -861,13 +862,13 @@ public class SecurityGroupManagerImpl implements SecurityGroupManager, SecurityG _serverId = ((ManagementServer) ComponentLocator.getComponent(ManagementServer.Name)).getId(); - s_logger.info("SecurityGroupManager: num worker threads=" + _numWorkerThreads + + s_logger.info("SecurityGroupManager: num worker threads=" + _numWorkerThreads + ", time between cleanups=" + _timeBetweenCleanups + " global lock timeout=" + _globalWorkLockTimeout); createThreadPools(); return true; } - + protected void createThreadPools() { _executorPool = Executors.newScheduledThreadPool(_numWorkerThreads, new NamedThreadFactory("NWGRP")); _cleanupExecutor = Executors.newScheduledThreadPool(1, new NamedThreadFactory("NWGRP-Cleanup")); @@ -964,7 +965,7 @@ public class SecurityGroupManagerImpl implements SecurityGroupManager, SecurityG s_logger.debug("Unable to send ingress rules updates for vm: " + userVmId + "(agentid=" + agentId + ")"); _workDao.updateStep(work.getInstanceId(), seqnum, Step.Done); } - + } } } finally { @@ -1088,91 +1089,7 @@ public class SecurityGroupManagerImpl implements SecurityGroupManager, SecurityG return true; } - @Override - public Pair, Integer> searchForSecurityGroupRules(ListSecurityGroupsCmd cmd) throws PermissionDeniedException, InvalidParameterValueException { - Account caller = UserContext.current().getCaller(); - Long instanceId = cmd.getVirtualMachineId(); - String securityGroup = cmd.getSecurityGroupName(); - Long id = cmd.getId(); - Object keyword = cmd.getKeyword(); - List permittedAccounts = new ArrayList(); - Map tags = cmd.getTags(); - if (instanceId != null) { - UserVmVO userVM = _userVMDao.findById(instanceId); - if (userVM == null) { - throw new InvalidParameterValueException("Unable to list network groups for virtual machine instance " + instanceId + "; instance not found."); - } - _accountMgr.checkAccess(caller, null, true, userVM); - return listSecurityGroupRulesByVM(instanceId.longValue(), cmd.getStartIndex(), cmd.getPageSizeVal()); - } - - Ternary domainIdRecursiveListProject = new Ternary(cmd.getDomainId(), cmd.isRecursive(), null); - _accountMgr.buildACLSearchParameters(caller, id, cmd.getAccountName(), cmd.getProjectId(), permittedAccounts, domainIdRecursiveListProject, cmd.listAll(), false); - Long domainId = domainIdRecursiveListProject.first(); - Boolean isRecursive = domainIdRecursiveListProject.second(); - ListProjectResourcesCriteria listProjectResourcesCriteria = domainIdRecursiveListProject.third(); - - Filter searchFilter = new Filter(SecurityGroupJoinVO.class, "id", true, cmd.getStartIndex(), cmd.getPageSizeVal()); - SearchBuilder sb = _securityGroupJoinDao.createSearchBuilder(); - sb.select(null, Func.DISTINCT, sb.entity().getId()); // select distinct ids - _accountMgr.buildACLViewSearchBuilder(sb, domainId, isRecursive, permittedAccounts, listProjectResourcesCriteria); - - sb.and("id", sb.entity().getId(), SearchCriteria.Op.EQ); - sb.and("name", sb.entity().getName(), SearchCriteria.Op.EQ); - - if (tags != null && !tags.isEmpty()) { - for (int count=0; count < tags.size(); count++) { - 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(); - } - } - - SearchCriteria sc = sb.create(); - _accountMgr.buildACLViewSearchCriteria(sc, domainId, isRecursive, permittedAccounts, listProjectResourcesCriteria); - - if (id != null) { - sc.setParameters("id", id); - } - - if (tags != null && !tags.isEmpty()) { - int count = 0; - for (String key : tags.keySet()) { - sc.setParameters("key" + String.valueOf(count), key); - sc.setParameters("value" + String.valueOf(count), tags.get(key)); - count++; - } - } - - if (securityGroup != null) { - sc.setParameters("name", securityGroup); - } - - if (keyword != null) { - SearchCriteria ssc = _securityGroupJoinDao.createSearchCriteria(); - ssc.addOr("name", SearchCriteria.Op.LIKE, "%" + keyword + "%"); - ssc.addOr("description", SearchCriteria.Op.LIKE, "%" + keyword + "%"); - sc.addAnd("name", SearchCriteria.Op.SC, ssc); - } - - // search security group together with rules - Pair, Integer> uniqueSgPair = _securityGroupJoinDao.searchAndCount(sc, searchFilter); - Integer count = uniqueSgPair.second(); - if ( count.intValue() == 0 ){ - // handle empty result cases - return uniqueSgPair; - } - - List uniqueSgs = uniqueSgPair.first(); - Long[] sgIds = new Long[uniqueSgs.size()]; - int i = 0; - for (SecurityGroupJoinVO v : uniqueSgs ){ - sgIds[i++] = v.getId(); - } - List sgs = _securityGroupJoinDao.searchByIds(sgIds); - return new Pair, Integer>(sgs, count); - } private Pair, Integer> listSecurityGroupRulesByVM(long vmId, long pageInd, long pageSize) { Filter sf = new Filter(SecurityGroupVMMapVO.class, null, true, pageInd, pageSize); diff --git a/server/src/com/cloud/projects/ProjectManager.java b/server/src/com/cloud/projects/ProjectManager.java index a243d2d3891..f5681464615 100644 --- a/server/src/com/cloud/projects/ProjectManager.java +++ b/server/src/com/cloud/projects/ProjectManager.java @@ -35,4 +35,6 @@ public interface ProjectManager extends ProjectService { boolean deleteProject(Account caller, long callerUserId, ProjectVO project); + long getInvitationTimeout(); + } diff --git a/server/src/com/cloud/projects/ProjectManagerImpl.java b/server/src/com/cloud/projects/ProjectManagerImpl.java index 7c97af2699d..4fbbc7d2254 100755 --- a/server/src/com/cloud/projects/ProjectManagerImpl.java +++ b/server/src/com/cloud/projects/ProjectManagerImpl.java @@ -38,13 +38,16 @@ import javax.mail.URLName; import javax.mail.internet.InternetAddress; import javax.naming.ConfigurationException; -import org.apache.cloudstack.api.view.vo.ProjectAccountJoinVO; -import org.apache.cloudstack.api.view.vo.ProjectInvitationJoinVO; -import org.apache.cloudstack.api.view.vo.ProjectJoinVO; -import org.apache.cloudstack.api.view.vo.UserVmJoinVO; import org.apache.log4j.Logger; import com.cloud.acl.SecurityChecker.AccessType; +import com.cloud.api.query.dao.ProjectAccountJoinDao; +import com.cloud.api.query.dao.ProjectInvitationJoinDao; +import com.cloud.api.query.dao.ProjectJoinDao; +import com.cloud.api.query.vo.ProjectAccountJoinVO; +import com.cloud.api.query.vo.ProjectInvitationJoinVO; +import com.cloud.api.query.vo.ProjectJoinVO; +import com.cloud.api.query.vo.UserVmJoinVO; import com.cloud.configuration.Config; import com.cloud.configuration.ConfigurationManager; import com.cloud.configuration.Resource.ResourceType; @@ -62,11 +65,8 @@ import com.cloud.projects.Project.ListProjectResourcesCriteria; import com.cloud.projects.Project.State; import com.cloud.projects.ProjectAccount.Role; import com.cloud.projects.dao.ProjectAccountDao; -import com.cloud.projects.dao.ProjectAccountJoinDao; import com.cloud.projects.dao.ProjectDao; import com.cloud.projects.dao.ProjectInvitationDao; -import com.cloud.projects.dao.ProjectInvitationJoinDao; -import com.cloud.projects.dao.ProjectJoinDao; import com.cloud.server.ResourceTag.TaggedResourceType; import com.cloud.tags.ResourceTagVO; import com.cloud.tags.dao.ResourceTagDao; @@ -368,140 +368,13 @@ public class ProjectManagerImpl implements ProjectManager, Manager{ return _projectDao.findById(projectId); } + @Override - public Pair, Integer> listProjects(Long id, String name, String displayText, String state, - String accountName, Long domainId, String keyword, Long startIndex, Long pageSize, boolean listAll, - boolean isRecursive, Map tags) { - Account caller = UserContext.current().getCaller(); - Long accountId = null; - String path = null; - - Filter searchFilter = new Filter(ProjectJoinVO.class, "id", false, startIndex, pageSize); - SearchBuilder sb = _projectJoinDao.createSearchBuilder(); - sb.select(null, Func.DISTINCT, sb.entity().getId()); // select distinct ids - - if (_accountMgr.isAdmin(caller.getType())) { - if (domainId != null) { - DomainVO domain = _domainDao.findById(domainId); - if (domain == null) { - throw new InvalidParameterValueException("Domain id=" + domainId + " doesn't exist in the system"); - } - - _accountMgr.checkAccess(caller, domain); - - if (accountName != null) { - Account owner = _accountMgr.getActiveAccountByName(accountName, domainId); - if (owner == null) { - throw new InvalidParameterValueException("Unable to find account " + accountName + " in domain " + domainId); - } - accountId = owner.getId(); - } - } - else { //domainId == null - if (accountName != null) { - throw new InvalidParameterValueException("could not find account " + accountName + " because domain is not specified"); - } - - } - } else { - if (accountName != null && !accountName.equals(caller.getAccountName())) { - throw new PermissionDeniedException("Can't list account " + accountName + " projects; unauthorized"); - } - - if (domainId != null && domainId.equals(caller.getDomainId())) { - throw new PermissionDeniedException("Can't list domain id= " + domainId + " projects; unauthorized"); - } - - accountId = caller.getId(); - } - - if (domainId == null && accountId == null && (caller.getType() == Account.ACCOUNT_TYPE_NORMAL || !listAll)) { - accountId = caller.getId(); - } else if (caller.getType() == Account.ACCOUNT_TYPE_DOMAIN_ADMIN || (isRecursive && !listAll)) { - DomainVO domain = _domainDao.findById(caller.getDomainId()); - path = domain.getPath(); - } - - if (path != null) { - sb.and("domainPath", sb.entity().getDomainPath(), SearchCriteria.Op.LIKE); - } - - if (accountId != null) { - sb.and("accountId", sb.entity().getAccountId(), SearchCriteria.Op.EQ); - } - - if (tags != null && !tags.isEmpty()) { - for (int count=0; count < tags.size(); count++) { - 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(); - } - } - - - SearchCriteria sc = sb.create(); - - if (id != null) { - sc.addAnd("id", Op.EQ, id); - } - - if (domainId != null && !isRecursive) { - sc.addAnd("domainId", Op.EQ, domainId); - } - - if (name != null) { - sc.addAnd("name", Op.EQ, name); - } - - if (displayText != null) { - sc.addAnd("displayText", Op.EQ, displayText); - } - - if (accountId != null) { - sc.setParameters("accountId", accountId); - } - - if (state != null) { - sc.addAnd("state", Op.EQ, state); - } - - if (keyword != null) { - SearchCriteria ssc = _projectJoinDao.createSearchCriteria(); - ssc.addOr("name", SearchCriteria.Op.LIKE, "%" + keyword + "%"); - ssc.addOr("displayText", SearchCriteria.Op.LIKE, "%" + keyword + "%"); - sc.addAnd("name", SearchCriteria.Op.SC, ssc); - } - - if (path != null) { - sc.setParameters("domainPath", path); - } - - if (tags != null && !tags.isEmpty()) { - int count = 0; - for (String key : tags.keySet()) { - sc.setParameters("key" + String.valueOf(count), key); - sc.setParameters("value" + String.valueOf(count), tags.get(key)); - count++; - } - } - - // search distinct projects to get count - Pair, Integer> uniquePrjPair = _projectJoinDao.searchAndCount(sc, searchFilter); - Integer count = uniquePrjPair.second(); - if ( count.intValue() == 0 ){ - // handle empty result cases - return uniquePrjPair; - } - List uniquePrjs = uniquePrjPair.first(); - Long[] prjIds = new Long[uniquePrjs.size()]; - int i = 0; - for (ProjectJoinVO v : uniquePrjs ){ - prjIds[i++] = v.getId(); - } - List prjs = _projectJoinDao.searchByIds(prjIds); - return new Pair, Integer>(prjs, count); + public long getInvitationTimeout() { + return _invitationTimeOut; } + @Override public ProjectAccount assignAccountToProject(Project project, long accountId, ProjectAccount.Role accountRole) { return _projectAccountDao.persist(new ProjectAccountVO(project, accountId, accountRole)); @@ -769,46 +642,7 @@ public class ProjectManagerImpl implements ProjectManager, Manager{ } - @Override - public Pair, Integer> listProjectAccounts(long projectId, String accountName, String role, Long startIndex, Long pageSizeVal) { - Account caller = UserContext.current().getCaller(); - //check that the project exists - Project project = getProject(projectId); - - if (project == null) { - throw new InvalidParameterValueException("Unable to find the project id=" + projectId); - } - - //verify permissions - only accounts belonging to the project can list project's account - if (!_accountMgr.isAdmin(caller.getType()) && _projectAccountDao.findByProjectIdAccountId(projectId, caller.getAccountId()) == null) { - throw new PermissionDeniedException("Account " + caller + " is not authorized to list users of the project id=" + projectId); - } - - Filter searchFilter = new Filter(ProjectAccountJoinVO.class, "id", false, startIndex, pageSizeVal); - SearchBuilder sb = _projectAccountJoinDao.createSearchBuilder(); - sb.and("accountRole", sb.entity().getAccountRole(), Op.EQ); - sb.and("projectId", sb.entity().getProjectId(), Op.EQ); - - SearchBuilder accountSearch; - if (accountName != null) { - sb.and("accountName", sb.entity().getAccountName(), Op.EQ); - } - - SearchCriteria sc = sb.create(); - - sc.setParameters("projectId", projectId); - - if (role != null) { - sc.setParameters("accountRole", role); - } - - if (accountName != null) { - sc.setParameters("accountName", accountName); - } - - return _projectAccountJoinDao.searchAndCount(sc, searchFilter); - } public ProjectInvitation createAccountInvitation(Project project, Long accountId) { if (activeInviteExists(project, accountId, null)) { @@ -878,51 +712,7 @@ public class ProjectManagerImpl implements ProjectManager, Manager{ return _projectInvitationDao.update(invite.getId(), invite); } - @Override - public Pair, Integer> listProjectInvitations(Long id, Long projectId, - String accountName, Long domainId, String state, boolean activeOnly, Long startIndex, Long pageSizeVal, boolean isRecursive, boolean listAll) { - Account caller = UserContext.current().getCaller(); - List permittedAccounts = new ArrayList(); - Ternary domainIdRecursiveListProject = new Ternary(domainId, isRecursive, null); - _accountMgr.buildACLSearchParameters(caller, id, accountName, projectId, permittedAccounts, domainIdRecursiveListProject, listAll, true); - domainId = domainIdRecursiveListProject.first(); - isRecursive = domainIdRecursiveListProject.second(); - ListProjectResourcesCriteria listProjectResourcesCriteria = domainIdRecursiveListProject.third(); - - Filter searchFilter = new Filter(ProjectInvitationJoinVO.class, "id", true, startIndex, pageSizeVal); - SearchBuilder sb = _projectInvitationJoinDao.createSearchBuilder(); - _accountMgr.buildACLViewSearchBuilder(sb, domainId, isRecursive, permittedAccounts, listProjectResourcesCriteria); - - sb.and("projectId", sb.entity().getProjectId(), SearchCriteria.Op.EQ); - sb.and("state", sb.entity().getState(), SearchCriteria.Op.EQ); - sb.and("created", sb.entity().getCreated(), SearchCriteria.Op.GT); - sb.and("id", sb.entity().getId(), SearchCriteria.Op.EQ); - - SearchCriteria sc = sb.create(); - _accountMgr.buildACLViewSearchCriteria(sc, domainId, isRecursive, permittedAccounts, listProjectResourcesCriteria); - - - if (projectId != null){ - sc.setParameters("projectId", projectId); - } - - if (state != null) { - sc.setParameters("state", state); - } - - if (id != null) { - sc.setParameters("id", id); - } - - if (activeOnly) { - sc.setParameters("state", ProjectInvitation.State.Pending); - sc.setParameters("created", new Date((DateUtil.currentGMTTime().getTime()) - _invitationTimeOut)); - } - - return _projectInvitationJoinDao.searchAndCount(sc, searchFilter); - - } @Override @DB @ActionEvent(eventType = EventTypes.EVENT_PROJECT_INVITATION_UPDATE, eventDescription = "updating project invitation", async=true) diff --git a/server/src/com/cloud/server/ManagementServerImpl.java b/server/src/com/cloud/server/ManagementServerImpl.java index a196cd35769..ddf91dc3500 100755 --- a/server/src/com/cloud/server/ManagementServerImpl.java +++ b/server/src/com/cloud/server/ManagementServerImpl.java @@ -95,12 +95,15 @@ import org.apache.cloudstack.api.command.admin.systemvm.StopSystemVmCmd; import org.apache.cloudstack.api.command.admin.domain.UpdateDomainCmd; import org.apache.cloudstack.api.command.admin.host.UpdateHostPasswordCmd; import com.cloud.api.commands.UpdateTemplateOrIsoCmd; +import com.cloud.api.query.dao.DomainRouterJoinDao; +import com.cloud.api.query.dao.InstanceGroupJoinDao; +import com.cloud.api.query.vo.DomainRouterJoinVO; +import com.cloud.api.query.vo.EventJoinVO; +import com.cloud.api.query.vo.InstanceGroupJoinVO; + import org.apache.cloudstack.api.command.user.vmgroup.UpdateVMGroupCmd; import org.apache.cloudstack.api.command.admin.resource.UploadCustomCertificateCmd; import org.apache.cloudstack.api.response.ExtractResponse; -import org.apache.cloudstack.api.view.vo.DomainRouterJoinVO; -import org.apache.cloudstack.api.view.vo.EventJoinVO; -import org.apache.cloudstack.api.view.vo.InstanceGroupJoinVO; import com.cloud.async.AsyncJob; import com.cloud.async.AsyncJobExecutor; @@ -262,9 +265,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.InstanceGroupJoinDao; import com.cloud.vm.dao.NicDao; import com.cloud.vm.dao.SecondaryStorageVmDao; import com.cloud.vm.dao.UserVmDao; @@ -1548,221 +1549,8 @@ public class ManagementServerImpl implements ManagementServer { return _templateDao.findById(id); } - @Override - public Pair, Integer> searchForEvents(ListEventsCmd cmd) { - Account caller = UserContext.current().getCaller(); - List permittedAccounts = new ArrayList(); - Long id = cmd.getId(); - String type = cmd.getType(); - String level = cmd.getLevel(); - Date startDate = cmd.getStartDate(); - Date endDate = cmd.getEndDate(); - String keyword = cmd.getKeyword(); - Integer entryTime = cmd.getEntryTime(); - Integer duration = cmd.getDuration(); - Ternary domainIdRecursiveListProject = new Ternary( - cmd.getDomainId(), cmd.isRecursive(), null); - _accountMgr.buildACLSearchParameters(caller, id, cmd.getAccountName(), cmd.getProjectId(), permittedAccounts, domainIdRecursiveListProject, - cmd.listAll(), false); - Long domainId = domainIdRecursiveListProject.first(); - Boolean isRecursive = domainIdRecursiveListProject.second(); - ListProjectResourcesCriteria listProjectResourcesCriteria = domainIdRecursiveListProject.third(); - - Filter searchFilter = new Filter(EventJoinVO.class, "createDate", false, cmd.getStartIndex(), cmd.getPageSizeVal()); - SearchBuilder sb = _eventJoinDao.createSearchBuilder(); - _accountMgr.buildACLViewSearchBuilder(sb, domainId, isRecursive, permittedAccounts, listProjectResourcesCriteria); - - sb.and("id", sb.entity().getId(), SearchCriteria.Op.EQ); - sb.and("levelL", sb.entity().getLevel(), SearchCriteria.Op.LIKE); - sb.and("levelEQ", sb.entity().getLevel(), SearchCriteria.Op.EQ); - sb.and("type", sb.entity().getType(), SearchCriteria.Op.EQ); - sb.and("createDateB", sb.entity().getCreateDate(), SearchCriteria.Op.BETWEEN); - sb.and("createDateG", sb.entity().getCreateDate(), SearchCriteria.Op.GTEQ); - sb.and("createDateL", sb.entity().getCreateDate(), SearchCriteria.Op.LTEQ); - sb.and("state", sb.entity().getState(), SearchCriteria.Op.NEQ); - sb.and("startId", sb.entity().getStartId(), SearchCriteria.Op.EQ); - sb.and("createDate", sb.entity().getCreateDate(), SearchCriteria.Op.BETWEEN); - - SearchCriteria sc = sb.create(); - // building ACL condition - _accountMgr.buildACLViewSearchCriteria(sc, domainId, isRecursive, permittedAccounts, listProjectResourcesCriteria); - - if (id != null) { - sc.setParameters("id", id); - } - - if (keyword != null) { - SearchCriteria ssc = _eventJoinDao.createSearchCriteria(); - ssc.addOr("type", SearchCriteria.Op.LIKE, "%" + keyword + "%"); - ssc.addOr("description", SearchCriteria.Op.LIKE, "%" + keyword + "%"); - ssc.addOr("level", SearchCriteria.Op.LIKE, "%" + keyword + "%"); - sc.addAnd("level", SearchCriteria.Op.SC, ssc); - } - - if (level != null) { - sc.setParameters("levelEQ", level); - } - - if (type != null) { - sc.setParameters("type", type); - } - - if (startDate != null && endDate != null) { - sc.setParameters("createDateB", startDate, endDate); - } else if (startDate != null) { - sc.setParameters("createDateG", startDate); - } else if (endDate != null) { - sc.setParameters("createDateL", endDate); - } - - Pair, Integer> eventPair = null; - // event_view will not have duplicate rows for each event, so searchAndCount should be good enough. - if ((entryTime != null) && (duration != null)) { - // TODO: waiting for response from dev list, logic is mystery to - // me!! - /* - * if (entryTime <= duration) { throw new - * InvalidParameterValueException - * ("Entry time must be greater than duration"); } Calendar calMin = - * Calendar.getInstance(); Calendar calMax = Calendar.getInstance(); - * calMin.add(Calendar.SECOND, -entryTime); - * calMax.add(Calendar.SECOND, -duration); Date minTime = - * calMin.getTime(); Date maxTime = calMax.getTime(); - * - * sc.setParameters("state", com.cloud.event.Event.State.Completed); - * sc.setParameters("startId", 0); sc.setParameters("createDate", - * minTime, maxTime); List startedEvents = - * _eventJoinDao.searchAllEvents(sc, searchFilter); - * List pendingEvents = new ArrayList(); - * for (EventVO event : startedEvents) { EventVO completedEvent = - * _eventDao.findCompletedEvent(event.getId()); if (completedEvent - * == null) { pendingEvents.add(event); } } return pendingEvents; - */ - } else { - eventPair = _eventJoinDao.searchAndCount(sc, searchFilter); - } - return eventPair; - - } - - @Override - public Pair, Integer> searchForRouters(ListRoutersCmd cmd) { - Long id = cmd.getId(); - String name = cmd.getRouterName(); - String state = cmd.getState(); - Long zone = cmd.getZoneId(); - Long pod = cmd.getPodId(); - Long hostId = cmd.getHostId(); - String keyword = cmd.getKeyword(); - Long networkId = cmd.getNetworkId(); - Long vpcId = cmd.getVpcId(); - Boolean forVpc = cmd.getForVpc(); - - Account caller = UserContext.current().getCaller(); - List permittedAccounts = new ArrayList(); - - Ternary domainIdRecursiveListProject = new Ternary( - cmd.getDomainId(), cmd.isRecursive(), null); - _accountMgr.buildACLSearchParameters(caller, id, cmd.getAccountName(), cmd.getProjectId(), permittedAccounts, domainIdRecursiveListProject, - cmd.listAll(), false); - Long domainId = domainIdRecursiveListProject.first(); - Boolean isRecursive = domainIdRecursiveListProject.second(); - ListProjectResourcesCriteria listProjectResourcesCriteria = domainIdRecursiveListProject.third(); - // 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 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().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); - - if (forVpc != null) { - if (forVpc) { - sb.and("forVpc", sb.entity().getVpcId(), SearchCriteria.Op.NNULL); - } else { - sb.and("forVpc", sb.entity().getVpcId(), SearchCriteria.Op.NULL); - } - } - - if (networkId != null) { - sb.and("networkId", sb.entity().getNetworkId(), SearchCriteria.Op.EQ); - } - - SearchCriteria sc = sb.create(); - _accountMgr.buildACLViewSearchCriteria(sc, domainId, isRecursive, permittedAccounts, listProjectResourcesCriteria); - - if (keyword != null) { - SearchCriteria ssc = _routerJoinDao.createSearchCriteria(); - ssc.addOr("hostName", SearchCriteria.Op.LIKE, "%" + keyword + "%"); - ssc.addOr("instanceName", SearchCriteria.Op.LIKE, "%" + keyword + "%"); - ssc.addOr("state", SearchCriteria.Op.LIKE, "%" + keyword + "%"); - - sc.addAnd("hostName", SearchCriteria.Op.SC, ssc); - } - - if (name != null) { - sc.setParameters("name", "%" + name + "%"); - } - - if (id != null) { - sc.setParameters("id", id); - } - - if (state != null) { - sc.setParameters("state", state); - } - - if (zone != null) { - sc.setParameters("dataCenterId", zone); - } - - if (pod != null) { - sc.setParameters("podId", pod); - } - - if (hostId != null) { - sc.setParameters("hostId", hostId); - } - - if (networkId != null) { - sc.setJoinParameters("nicSearch", "networkId", networkId); - } - - if (vpcId != null) { - sc.setParameters("vpcId", vpcId); - } - - // search VR details by ids - Pair, Integer> uniqueVrPair = _routerJoinDao.searchAndCount(sc, searchFilter); - Integer count = uniqueVrPair.second(); - if (count.intValue() == 0) { - // empty result - return uniqueVrPair; - } - List uniqueVrs = uniqueVrPair.first(); - Long[] vrIds = new Long[uniqueVrs.size()]; - int i = 0; - for (DomainRouterJoinVO v : uniqueVrs) { - vrIds[i++] = v.getId(); - } - List vrs = _routerJoinDao.searchByIds(vrIds); - return new Pair, Integer>(vrs, count); - } @Override public Pair, Integer> searchForIPAddresses(ListPublicIpAddressesCmd cmd) { @@ -3209,53 +2997,7 @@ public class ManagementServerImpl implements ManagementServer { return _vmGroupDao.findById(groupId); } - @Override - public Pair, Integer> searchForVmGroups(ListVMGroupsCmd cmd) { - Long id = cmd.getId(); - String name = cmd.getGroupName(); - String keyword = cmd.getKeyword(); - Account caller = UserContext.current().getCaller(); - List permittedAccounts = new ArrayList(); - - Ternary domainIdRecursiveListProject = new Ternary( - cmd.getDomainId(), cmd.isRecursive(), null); - _accountMgr.buildACLSearchParameters(caller, id, cmd.getAccountName(), cmd.getProjectId(), permittedAccounts, domainIdRecursiveListProject, - cmd.listAll(), false); - Long domainId = domainIdRecursiveListProject.first(); - Boolean isRecursive = domainIdRecursiveListProject.second(); - ListProjectResourcesCriteria listProjectResourcesCriteria = domainIdRecursiveListProject.third(); - - Filter searchFilter = new Filter(InstanceGroupJoinVO.class, "id", true, cmd.getStartIndex(), cmd.getPageSizeVal()); - - SearchBuilder sb = _vmGroupJoinDao.createSearchBuilder(); - _accountMgr.buildACLViewSearchBuilder(sb, domainId, isRecursive, permittedAccounts, listProjectResourcesCriteria); - - - sb.and("id", sb.entity().getId(), SearchCriteria.Op.EQ); - sb.and("name", sb.entity().getName(), SearchCriteria.Op.LIKE); - - - SearchCriteria sc = sb.create(); - _accountMgr.buildACLViewSearchCriteria(sc, domainId, isRecursive, permittedAccounts, listProjectResourcesCriteria); - - if (keyword != null) { - SearchCriteria ssc = _vmGroupJoinDao.createSearchCriteria(); - ssc.addOr("name", SearchCriteria.Op.LIKE, "%" + keyword + "%"); - sc.addAnd("name", SearchCriteria.Op.SC, ssc); - } - - - if (id != null) { - sc.setParameters("id", id); - } - - if (name != null) { - sc.setParameters("name", "%" + name + "%"); - } - - return _vmGroupJoinDao.searchAndCount(sc, searchFilter); - } @Override public String getVersion() { diff --git a/server/src/com/cloud/tags/TaggedResourceManagerImpl.java b/server/src/com/cloud/tags/TaggedResourceManagerImpl.java index 0f82142d6b5..42d3c8332da 100644 --- a/server/src/com/cloud/tags/TaggedResourceManagerImpl.java +++ b/server/src/com/cloud/tags/TaggedResourceManagerImpl.java @@ -27,7 +27,9 @@ import javax.naming.ConfigurationException; import org.apache.cloudstack.api.command.user.tag.ListTagsCmd; import org.apache.log4j.Logger; -import org.apache.cloudstack.api.view.vo.ResourceTagJoinVO; + +import com.cloud.api.query.dao.ResourceTagJoinDao; +import com.cloud.api.query.vo.ResourceTagJoinVO; import com.cloud.domain.Domain; import com.cloud.event.ActionEvent; import com.cloud.event.EventTypes; @@ -51,7 +53,6 @@ import com.cloud.storage.dao.SnapshotDao; import com.cloud.storage.dao.VMTemplateDao; import com.cloud.storage.dao.VolumeDao; import com.cloud.tags.dao.ResourceTagDao; -import com.cloud.tags.dao.ResourceTagJoinDao; import com.cloud.user.Account; import com.cloud.user.AccountManager; import com.cloud.user.DomainManager; @@ -325,71 +326,6 @@ public class TaggedResourceManagerImpl implements TaggedResourceService, Manager return identiyUUId; } - @Override - public Pair, Integer> listTags(ListTagsCmd cmd) { - Account caller = UserContext.current().getCaller(); - List permittedAccounts = new ArrayList(); - String key = cmd.getKey(); - String value = cmd.getValue(); - String resourceId = cmd.getResourceId(); - String resourceType = cmd.getResourceType(); - String customerName = cmd.getCustomer(); - boolean listAll = cmd.listAll(); - - Ternary domainIdRecursiveListProject = - new Ternary(cmd.getDomainId(), cmd.isRecursive(), null); - - _accountMgr.buildACLSearchParameters(caller, null, cmd.getAccountName(), - cmd.getProjectId(), permittedAccounts, domainIdRecursiveListProject, listAll, false); - Long domainId = domainIdRecursiveListProject.first(); - Boolean isRecursive = domainIdRecursiveListProject.second(); - ListProjectResourcesCriteria listProjectResourcesCriteria = domainIdRecursiveListProject.third(); - Filter searchFilter = new Filter(ResourceTagJoinVO.class, "resourceType", false, cmd.getStartIndex(), cmd.getPageSizeVal()); - - SearchBuilder sb = _resourceTagJoinDao.createSearchBuilder(); - _accountMgr.buildACLViewSearchBuilder(sb, domainId, isRecursive, permittedAccounts, listProjectResourcesCriteria); - - sb.and("key", sb.entity().getKey(), SearchCriteria.Op.EQ); - sb.and("value", sb.entity().getValue(), SearchCriteria.Op.EQ); - - if (resourceId != null) { - sb.and().op("resourceId", sb.entity().getResourceId(), SearchCriteria.Op.EQ); - sb.or("resourceUuid", sb.entity().getResourceUuid(), SearchCriteria.Op.EQ); - sb.cp(); - } - - sb.and("resourceType", sb.entity().getResourceType(), SearchCriteria.Op.EQ); - sb.and("customer", sb.entity().getCustomer(), SearchCriteria.Op.EQ); - - // now set the SC criteria... - SearchCriteria sc = sb.create(); - _accountMgr.buildACLViewSearchCriteria(sc, domainId, isRecursive, permittedAccounts, listProjectResourcesCriteria); - - if (key != null) { - sc.setParameters("key", key); - } - - if (value != null) { - sc.setParameters("value", value); - } - - if (resourceId != null) { - sc.setParameters("resourceId", resourceId); - sc.setParameters("resourceUuid", resourceId); - } - - if (resourceType != null) { - sc.setParameters("resourceType", resourceType); - } - - if (customerName != null) { - sc.setParameters("customer", customerName); - } - - Pair, Integer> result = _resourceTagJoinDao.searchAndCount(sc, searchFilter); - return result; - } - @Override @DB @ActionEvent(eventType = EventTypes.EVENT_TAGS_DELETE, eventDescription = "deleting resource tags") diff --git a/server/src/com/cloud/user/AccountManager.java b/server/src/com/cloud/user/AccountManager.java index 56a2394d3c6..3e5e1764281 100755 --- a/server/src/com/cloud/user/AccountManager.java +++ b/server/src/com/cloud/user/AccountManager.java @@ -20,7 +20,7 @@ import java.util.List; import java.util.Map; import com.cloud.acl.ControlledEntity; -import org.apache.cloudstack.api.view.vo.ControlledViewEntity; +import com.cloud.api.query.vo.ControlledViewEntity; import com.cloud.exception.ConcurrentOperationException; import com.cloud.exception.ResourceUnavailableException; import com.cloud.projects.Project.ListProjectResourcesCriteria; diff --git a/server/src/com/cloud/user/AccountManagerImpl.java b/server/src/com/cloud/user/AccountManagerImpl.java index e1b806dc603..593d2950e97 100755 --- a/server/src/com/cloud/user/AccountManagerImpl.java +++ b/server/src/com/cloud/user/AccountManagerImpl.java @@ -36,19 +36,19 @@ import javax.crypto.spec.SecretKeySpec; import javax.ejb.Local; import javax.naming.ConfigurationException; -import org.apache.cloudstack.api.command.admin.user.*; import org.apache.cloudstack.api.command.admin.account.UpdateAccountCmd; import org.apache.cloudstack.api.command.admin.user.RegisterCmd; import org.apache.commons.codec.binary.Base64; import org.apache.log4j.Logger; import com.cloud.acl.ControlledEntity; -import org.apache.cloudstack.api.view.vo.ControlledViewEntity; -import org.apache.cloudstack.api.view.vo.UserAccountJoinVO; import com.cloud.acl.SecurityChecker; import com.cloud.acl.SecurityChecker.AccessType; import com.cloud.api.ApiDBUtils; +import com.cloud.api.query.vo.ControlledViewEntity; + + import org.apache.cloudstack.api.command.admin.user.DeleteUserCmd; import org.apache.cloudstack.api.command.user.account.ListAccountsCmd; import org.apache.cloudstack.api.command.admin.user.UpdateUserCmd; @@ -763,6 +763,7 @@ public class AccountManagerImpl implements AccountManager, AccountService, Manag // ////////////// API commands ///////////////////// // /////////////////////////////////////////////////// + @Override @DB @ActionEvent(eventType = EventTypes.EVENT_ACCOUNT_CREATE, eventDescription = "creating Account") @@ -2140,101 +2141,6 @@ public class AccountManagerImpl implements AccountManager, AccountService, Manag return new Pair, Integer>(result.first(), result.second()); } - @Override - public Pair, Integer> searchForUsers(ListUsersCmd cmd) throws PermissionDeniedException { - Account caller = UserContext.current().getCaller(); - - //TODO: Integrate with ACL checkAccess refactoring - Long domainId = cmd.getDomainId(); - if (domainId != null) { - Domain domain = _domainDao.findById(domainId); - if (domain == null) { - throw new InvalidParameterValueException("Unable to find domain by id=" + domainId); - } - - checkAccess(caller, domain); - } else { - // default domainId to the caller's domain - domainId = caller.getDomainId(); - } - - Filter searchFilter = new Filter(UserAccountJoinVO.class, "id", true, cmd.getStartIndex(), cmd.getPageSizeVal()); - - Long id = cmd.getId(); - Object username = cmd.getUsername(); - Object type = cmd.getAccountType(); - Object accountName = cmd.getAccountName(); - Object state = cmd.getState(); - Object keyword = cmd.getKeyword(); - - SearchBuilder sb = _userAccountJoinDao.createSearchBuilder(); - sb.and("username", sb.entity().getUsername(), SearchCriteria.Op.LIKE); - if (id != null && id == 1) { - // system user should NOT be searchable - List emptyList = new ArrayList(); - return new Pair, Integer>(emptyList, 0); - } else if (id != null) { - sb.and("id", sb.entity().getId(), SearchCriteria.Op.EQ); - } else { - // this condition is used to exclude system user from the search results - sb.and("id", sb.entity().getId(), SearchCriteria.Op.NEQ); - } - - sb.and("type", sb.entity().getAccountType(), SearchCriteria.Op.EQ); - sb.and("domainId", sb.entity().getDomainId(), SearchCriteria.Op.EQ); - sb.and("accountName", sb.entity().getAccountName(), SearchCriteria.Op.EQ); - sb.and("state", sb.entity().getState(), SearchCriteria.Op.EQ); - - if ((accountName == null) && (domainId != null)) { - sb.and("domainPath", sb.entity().getDomainPath(), SearchCriteria.Op.LIKE); - } - - SearchCriteria sc = sb.create(); - if (keyword != null) { - SearchCriteria ssc = _userAccountJoinDao.createSearchCriteria(); - ssc.addOr("username", SearchCriteria.Op.LIKE, "%" + keyword + "%"); - ssc.addOr("firstname", SearchCriteria.Op.LIKE, "%" + keyword + "%"); - ssc.addOr("lastname", SearchCriteria.Op.LIKE, "%" + keyword + "%"); - ssc.addOr("email", SearchCriteria.Op.LIKE, "%" + keyword + "%"); - ssc.addOr("state", SearchCriteria.Op.LIKE, "%" + keyword + "%"); - ssc.addOr("accountName", SearchCriteria.Op.LIKE, "%" + keyword + "%"); - ssc.addOr("type", SearchCriteria.Op.LIKE, "%" + keyword + "%"); - ssc.addOr("accountState", SearchCriteria.Op.LIKE, "%" + keyword + "%"); - - sc.addAnd("username", SearchCriteria.Op.SC, ssc); - } - - if (username != null) { - sc.setParameters("username", username); - } - - if (id != null) { - sc.setParameters("id", id); - } else { - // Don't return system user, search builder with NEQ - sc.setParameters("id", 1); - } - - if (type != null) { - sc.setParameters("type", type); - } - - if (accountName != null) { - sc.setParameters("accountName", accountName); - if (domainId != null) { - sc.setParameters("domainId", domainId); - } - } else if (domainId != null) { - DomainVO domainVO = _domainDao.findById(domainId); - sc.setParameters("domainPath", domainVO.getPath() + "%"); - } - - if (state != null) { - sc.setParameters("state", state); - } - - return _userAccountJoinDao.searchAndCount(sc, searchFilter); - } @Override public void buildACLSearchBuilder(SearchBuilder sb, diff --git a/server/src/com/cloud/user/dao/UserAccountJoinDao.java b/server/src/com/cloud/user/dao/UserAccountJoinDao.java index 39a82d05c74..0072d33c3ae 100644 --- a/server/src/com/cloud/user/dao/UserAccountJoinDao.java +++ b/server/src/com/cloud/user/dao/UserAccountJoinDao.java @@ -19,8 +19,8 @@ package com.cloud.user.dao; import java.util.List; import org.apache.cloudstack.api.response.UserResponse; -import org.apache.cloudstack.api.view.vo.UserAccountJoinVO; +import com.cloud.api.query.vo.UserAccountJoinVO; import com.cloud.user.User; import com.cloud.user.UserAccount; import com.cloud.utils.db.GenericDao; diff --git a/server/src/com/cloud/user/dao/UserAccountJoinDaoImpl.java b/server/src/com/cloud/user/dao/UserAccountJoinDaoImpl.java index e854ae5c493..4cad00b4cd7 100644 --- a/server/src/com/cloud/user/dao/UserAccountJoinDaoImpl.java +++ b/server/src/com/cloud/user/dao/UserAccountJoinDaoImpl.java @@ -24,10 +24,11 @@ import org.apache.log4j.Logger; import com.cloud.api.ApiDBUtils; import com.cloud.api.ApiResponseHelper; +import com.cloud.api.query.vo.InstanceGroupJoinVO; +import com.cloud.api.query.vo.UserAccountJoinVO; + import org.apache.cloudstack.api.response.InstanceGroupResponse; import org.apache.cloudstack.api.response.UserResponse; -import org.apache.cloudstack.api.view.vo.InstanceGroupJoinVO; -import org.apache.cloudstack.api.view.vo.UserAccountJoinVO; import com.cloud.user.Account; import com.cloud.user.User; diff --git a/server/src/com/cloud/vm/UserVmManager.java b/server/src/com/cloud/vm/UserVmManager.java index f58b10e3034..3e4a2dbf27f 100755 --- a/server/src/com/cloud/vm/UserVmManager.java +++ b/server/src/com/cloud/vm/UserVmManager.java @@ -21,7 +21,7 @@ import java.util.List; import java.util.Map; import com.cloud.agent.api.VmStatsEntry; -import org.apache.cloudstack.api.view.vo.UserVmJoinVO; +import com.cloud.api.query.vo.UserVmJoinVO; import com.cloud.exception.ConcurrentOperationException; import com.cloud.exception.InsufficientCapacityException; import com.cloud.exception.ResourceUnavailableException; diff --git a/server/src/com/cloud/vm/UserVmManagerImpl.java b/server/src/com/cloud/vm/UserVmManagerImpl.java index a8241d02ea7..6608987ee5a 100755 --- a/server/src/com/cloud/vm/UserVmManagerImpl.java +++ b/server/src/com/cloud/vm/UserVmManagerImpl.java @@ -5,7 +5,7 @@ // 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, @@ -63,6 +63,9 @@ import com.cloud.agent.api.to.VolumeTO; import com.cloud.agent.manager.Commands; import com.cloud.alert.AlertManager; import com.cloud.api.ApiDBUtils; +import com.cloud.api.query.dao.UserVmJoinDao; +import com.cloud.api.query.vo.UserVmJoinVO; + import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.command.admin.vm.AssignVMCmd; import org.apache.cloudstack.api.command.user.vm.DeployVMCmd; @@ -74,7 +77,6 @@ import org.apache.cloudstack.api.command.user.vm.ResetVMPasswordCmd; import org.apache.cloudstack.api.command.user.vm.RestoreVMCmd; import org.apache.cloudstack.api.command.user.vm.UpdateVMCmd; import org.apache.cloudstack.api.command.user.vm.UpgradeVMCmd; -import org.apache.cloudstack.api.view.vo.UserVmJoinVO; import com.cloud.async.AsyncJobExecutor; import com.cloud.async.AsyncJobManager; import com.cloud.async.AsyncJobVO; @@ -230,7 +232,6 @@ 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 }) @@ -337,9 +338,9 @@ public class UserVmManagerImpl implements UserVmManager, UserVmService, Manager protected HypervisorCapabilitiesDao _hypervisorCapabilitiesDao; @Inject protected SecurityGroupDao _securityGroupDao; - @Inject + @Inject protected CapacityManager _capacityMgr;; - @Inject + @Inject protected VMInstanceDao _vmInstanceDao; @Inject protected ResourceLimitService _resourceLimitMgr; @@ -349,7 +350,7 @@ public class UserVmManagerImpl implements UserVmManager, UserVmService, Manager protected ProjectManager _projectMgr; @Inject protected ResourceManager _resourceMgr; - @Inject + @Inject protected NetworkServiceMapDao _ntwkSrvcDao; @Inject SecurityGroupVMMapDao _securityGroupVMMapDao; @@ -414,7 +415,7 @@ public class UserVmManagerImpl implements UserVmManager, UserVmService, Manager if (result) { userVm.setPassword(password); - //update the password in vm_details table too + //update the password in vm_details table too // Check if an SSH key pair was selected for the instance and if so use it to encrypt & save the vm password String sshPublicKey = userVm.getDetail("SSH.PublicKey"); if (sshPublicKey != null && !sshPublicKey.equals("") && password != null && !password.equals("saved_password")) { @@ -457,7 +458,7 @@ public class UserVmManagerImpl implements UserVmManager, UserVmService, Manager UserDataServiceProvider element = _networkMgr.getPasswordResetProvider(defaultNetwork); if (element == null) { - throw new CloudRuntimeException("Can't find network element for " + Service.UserData.getName() + + throw new CloudRuntimeException("Can't find network element for " + Service.UserData.getName() + " provider needed for password reset"); } @@ -473,7 +474,7 @@ public class UserVmManagerImpl implements UserVmManager, UserVmService, Manager return true; } - if (rebootVirtualMachine(userId, vmId) == null) { + if (rebootVirtualMachine(userId, vmId) == null) { s_logger.warn("Failed to reboot the vm " + vmInstance); return false; } else { @@ -688,7 +689,7 @@ public class UserVmManagerImpl implements UserVmManager, UserVmService, Manager } // Check that there is some shared storage. - StoragePoolVO vmRootVolumePool = _storagePoolDao.findById(rootVolumeOfVm.getPoolId()); + StoragePoolVO vmRootVolumePool = _storagePoolDao.findById(rootVolumeOfVm.getPoolId()); List sharedVMPools = _storagePoolDao.findPoolsByTags(vmRootVolumePool.getDataCenterId(), vmRootVolumePool.getPodId(), vmRootVolumePool.getClusterId(), null, true); if (sharedVMPools.size() == 0) { throw new CloudRuntimeException("Cannot attach volume since there are no shared storage pools in the VM's cluster to copy the uploaded volume to."); @@ -1381,7 +1382,7 @@ public class UserVmManagerImpl implements UserVmManager, UserVmService, Manager } volume = _volsDao.findById(snapshot.getVolumeId()); - VolumeVO snapshotVolume = _volsDao.findByIdIncludingRemoved(snapshot.getVolumeId()); + VolumeVO snapshotVolume = _volsDao.findByIdIncludingRemoved(snapshot.getVolumeId()); //check permissions _accountMgr.checkAccess(caller, null, true, snapshot); @@ -1390,14 +1391,14 @@ public class UserVmManagerImpl implements UserVmManager, UserVmService, Manager throw new InvalidParameterValueException("Snapshot id=" + snapshotId + " is not in " + Snapshot.Status.BackedUp + " state yet and can't be used for template creation"); } - /* + /* // bug #11428. Operation not supported if vmware and snapshots parent volume = ROOT - if(snapshot.getHypervisorType() == HypervisorType.VMware && snapshotVolume.getVolumeType() == Type.DATADISK){ + if(snapshot.getHypervisorType() == HypervisorType.VMware && snapshotVolume.getVolumeType() == Type.DATADISK){ throw new UnsupportedServiceException("operation not supported, snapshot with id " + snapshotId + " is created from Data Disk"); } */ - hyperType = snapshot.getHypervisorType(); + hyperType = snapshot.getHypervisorType(); } _resourceLimitMgr.checkResourceLimit(templateOwner, ResourceType.template); @@ -2190,7 +2191,7 @@ public class UserVmManagerImpl implements UserVmManager, UserVmService, Manager throw new InvalidParameterValueException("Can't create a vm with multiple networks one of" + " which is Security Group enabled"); } - + isSecurityGroupEnabledNetworkUsed = true; } @@ -2213,7 +2214,7 @@ public class UserVmManagerImpl implements UserVmManager, UserVmService, Manager // if network is security group enabled, and no security group is specified, then add the default security group automatically if (isSecurityGroupEnabledNetworkUsed && !isVmWare && _networkMgr.canAddDefaultSecurityGroup()) { - + //add the default securityGroup only if no security group is specified if(securityGroupIdList == null || securityGroupIdList.isEmpty()){ if (securityGroupIdList == null) { @@ -2276,7 +2277,7 @@ public class UserVmManagerImpl implements UserVmManager, UserVmService, Manager throw new InvalidParameterValueException("Unable to find physical network with id: "+physicalNetworkId + " and tag: " +requiredOfferings.get(0).getTags()); } s_logger.debug("Creating network for account " + owner + " from the network offering id=" +requiredOfferings.get(0).getId() + " as a part of deployVM process"); - Network newNetwork = _networkMgr.createGuestNetwork(requiredOfferings.get(0).getId(), + Network newNetwork = _networkMgr.createGuestNetwork(requiredOfferings.get(0).getId(), owner.getAccountName() + "-network", owner.getAccountName() + "-network", null, null, null, null, owner, null, physicalNetwork, zone.getId(), ACLType.Account, null, null); defaultNetwork = _networkDao.findById(newNetwork.getId()); @@ -2286,7 +2287,7 @@ public class UserVmManagerImpl implements UserVmManager, UserVmService, Manager defaultNetwork = virtualNetworks.get(0); } } else { - throw new InvalidParameterValueException("Required network offering id=" + requiredOfferings.get(0).getId() + " is not in " + NetworkOffering.State.Enabled); + throw new InvalidParameterValueException("Required network offering id=" + requiredOfferings.get(0).getId() + " is not in " + NetworkOffering.State.Enabled); } networkList.add(defaultNetwork); @@ -2310,10 +2311,10 @@ public class UserVmManagerImpl implements UserVmManager, UserVmService, Manager } } - + _networkMgr.checkNetworkPermissions(owner, network); - //don't allow to use system networks + //don't allow to use system networks NetworkOffering networkOffering = _configMgr.getNetworkOffering(network.getNetworkOfferingId()); if (networkOffering.isSystemOnly()) { throw new InvalidParameterValueException("Network id=" + networkId + " is system only and can't be used for vm deployment"); @@ -2534,7 +2535,7 @@ public class UserVmManagerImpl implements UserVmManager, UserVmService, Manager ntwkIds.add(network.getId()); ntwkDomains.put(ntwkDomain, ntwkIds); } - } + } for (String ntwkDomain : ntwkDomains.keySet()) { for (Long ntwkId : ntwkDomains.get(ntwkDomain)) { @@ -2543,7 +2544,7 @@ public class UserVmManagerImpl implements UserVmManager, UserVmService, Manager //* verify that there are no duplicates if (hostNames.contains(hostName)) { throw new InvalidParameterValueException("The vm with hostName " + hostName - + " already exists in the network domain: " + ntwkDomain + "; network=" + + " already exists in the network domain: " + ntwkDomain + "; network=" + _networkMgr.getNetwork(ntwkId)); } } @@ -2884,7 +2885,7 @@ public class UserVmManagerImpl implements UserVmManager, UserVmService, Manager if (callerAccount != null && callerAccount.getRemoved() != null) { throw new InvalidParameterValueException("The account " + callerAccount.getId() + " is removed"); } - + UserVmVO vm = _vmDao.findById(vmId); if (vm == null) { throw new InvalidParameterValueException("unable to find a virtual machine with id " + vmId); @@ -2972,12 +2973,12 @@ public class UserVmManagerImpl implements UserVmManager, UserVmService, Manager } vm = _itMgr.start(vm, params, callerUser, callerAccount, plan); - + Pair> vmParamPair = new Pair(vm, params); if (vm != null && vm.isUpdateParameters()) { // this value is not being sent to the backend; need only for api display purposes if (template.getEnablePassword()) { - vm.setPassword((String)vmParamPair.second().get(VirtualMachineProfile.Param.VmPassword)); + vm.setPassword((String)vmParamPair.second().get(VirtualMachineProfile.Param.VmPassword)); vm.setUpdateParameters(false); _vmDao.update(vm.getId(), vm); } @@ -2997,7 +2998,7 @@ public class UserVmManagerImpl implements UserVmManager, UserVmService, Manager InvalidParameterValueException ex = new InvalidParameterValueException("Unable to find a virtual machine with specified vmId"); ex.addProxyObject(vm, vmId, "vmId"); throw ex; - } + } if (vm.getState() == State.Destroyed || vm.getState() == State.Expunging) { s_logger.trace("Vm id=" + vmId + " is already destroyed"); @@ -3040,61 +3041,7 @@ public class UserVmManagerImpl implements UserVmManager, UserVmService, Manager } } - @Override - public Pair, Integer> searchForUserVMs(ListVMsCmd cmd) { - Account caller = UserContext.current().getCaller(); - List permittedAccounts = new ArrayList(); - String hypervisor = cmd.getHypervisor(); - boolean listAll = cmd.listAll(); - Long id = cmd.getId(); - Map tags = cmd.getTags(); - Ternary domainIdRecursiveListProject = new Ternary(cmd.getDomainId(), cmd.isRecursive(), null); - _accountMgr.buildACLSearchParameters(caller, id, cmd.getAccountName(), cmd.getProjectId(), permittedAccounts, domainIdRecursiveListProject, listAll, false); - Long domainId = domainIdRecursiveListProject.first(); - Boolean isRecursive = domainIdRecursiveListProject.second(); - ListProjectResourcesCriteria listProjectResourcesCriteria = domainIdRecursiveListProject.third(); - - // 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()); - c.addCriteria(Criteria.STATE, cmd.getState()); - c.addCriteria(Criteria.DATACENTERID, cmd.getZoneId()); - c.addCriteria(Criteria.GROUPID, cmd.getGroupId()); - c.addCriteria(Criteria.FOR_VIRTUAL_NETWORK, cmd.getForVirtualNetwork()); - c.addCriteria(Criteria.NETWORKID, cmd.getNetworkId()); - c.addCriteria(Criteria.TEMPLATE_ID, cmd.getTemplateId()); - c.addCriteria(Criteria.ISO_ID, cmd.getIsoId()); - c.addCriteria(Criteria.VPC_ID, cmd.getVpcId()); - - if (domainId != null) { - c.addCriteria(Criteria.DOMAINID, domainId); - } - - if (HypervisorType.getType(hypervisor) != HypervisorType.None) { - c.addCriteria(Criteria.HYPERVISOR, hypervisor); - } else if (hypervisor != null) { - throw new InvalidParameterValueException("Invalid HypervisorType " + hypervisor); - } - - // ignore these search requests if it's not an admin - if (_accountMgr.isAdmin(caller.getType())) { - c.addCriteria(Criteria.PODID, cmd.getPodId()); - c.addCriteria(Criteria.HOSTID, cmd.getHostId()); - c.addCriteria(Criteria.STORAGE_ID, cmd.getStorageId()); - } - - if (!permittedAccounts.isEmpty()) { - c.addCriteria(Criteria.ACCOUNTID, permittedAccounts.toArray()); - } - c.addCriteria(Criteria.ISADMIN, _accountMgr.isAdmin(caller.getType())); - - return searchForUserVMs(c, caller, domainId, isRecursive, - permittedAccounts, listAll, listProjectResourcesCriteria, tags); - } @Override public Pair, Integer> searchForUserVMs(Criteria c, Account caller, Long domainId, boolean isRecursive, @@ -3105,7 +3052,7 @@ public class UserVmManagerImpl implements UserVmManager, UserVmService, Manager SearchBuilder 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); Object state = c.getCriteria(Criteria.STATE); @@ -3155,7 +3102,7 @@ public class UserVmManagerImpl implements UserVmManager, UserVmService, Manager if (networkId != null) { sb.and("networkId", sb.entity().getNetworkId(), SearchCriteria.Op.EQ); } - + if(vpcId != null && networkId == null){ sb.and("vpcId", sb.entity().getVpcId(), SearchCriteria.Op.EQ); } @@ -3208,7 +3155,7 @@ public class UserVmManagerImpl implements UserVmManager, UserVmService, Manager if (networkId != null) { sc.setParameters("networkId", networkId); } - + if(vpcId != null && networkId == null){ sc.setParameters("vpcId", vpcId); } @@ -3283,7 +3230,7 @@ public class UserVmManagerImpl implements UserVmManager, UserVmService, Manager UserVmVO userVm = _vmDao.findById(vmId); if (userVm == null) { InvalidParameterValueException ex = new InvalidParameterValueException("unable to find a virtual machine with specified id"); - ex.addProxyObject(userVm, vmId, "vmId"); + ex.addProxyObject(userVm, vmId, "vmId"); throw ex; } @@ -3399,7 +3346,7 @@ public class UserVmManagerImpl implements UserVmManager, UserVmService, Manager } throw new InvalidParameterValueException("Unsupported operation, VM uses Local storage, cannot migrate"); } - + //check if migrating to same host long srcHostId = vm.getHostId(); if(destinationHost.getId() == srcHostId){ @@ -3469,11 +3416,11 @@ public class UserVmManagerImpl implements UserVmManager, UserVmService, Manager if (newAccount == null || newAccount.getType() == Account.ACCOUNT_TYPE_PROJECT) { throw new InvalidParameterValueException("Invalid accountid=" + cmd.getAccountName() + " in domain " + cmd.getDomainId()); } - + if (newAccount.getState() == Account.State.disabled) { throw new InvalidParameterValueException("The new account owner " + cmd.getAccountName() + " is disabled."); } - + // make sure the accounts are under same domain if (oldAccount.getDomainId() != newAccount.getDomainId()){ throw new InvalidParameterValueException("The account should be under same domain for moving VM between two accounts. Old owner domain =" + oldAccount.getDomainId() + @@ -3517,7 +3464,7 @@ public class UserVmManagerImpl implements UserVmManager, UserVmService, Manager //VV 3: check if volumes are with in resource limits _resourceLimitMgr.checkResourceLimit(newAccount, ResourceType.volume, _volsDao.findByInstance(cmd.getVmId()).size()); - + // VV 4: Check if new owner can use the vm template VirtualMachineTemplate template = _templateDao.findById(vm.getTemplateId()); if (!template.isPublicTemplate()) { @@ -3532,7 +3479,7 @@ public class UserVmManagerImpl implements UserVmManager, UserVmService, Manager Transaction txn = Transaction.currentTxn(); txn.start(); //generate destroy vm event for usage - _usageEventDao.persist(new UsageEventVO(EventTypes.EVENT_VM_DESTROY, vm.getAccountId(), vm.getDataCenterIdToDeployIn(), vm.getId(), + _usageEventDao.persist(new UsageEventVO(EventTypes.EVENT_VM_DESTROY, vm.getAccountId(), vm.getDataCenterIdToDeployIn(), vm.getId(), vm.getHostName(), vm.getServiceOfferingId(), vm.getTemplateId(), vm.getHypervisorType().toString())); // update resource counts _resourceLimitMgr.decrementResourceCount(oldAccount.getAccountId(), ResourceType.user_vm); @@ -3561,7 +3508,7 @@ public class UserVmManagerImpl implements UserVmManager, UserVmService, Manager _resourceLimitMgr.incrementResourceCount(newAccount.getAccountId(), ResourceType.user_vm); //generate usage events to account for this change - _usageEventDao.persist(new UsageEventVO(EventTypes.EVENT_VM_CREATE, vm.getAccountId(), vm.getDataCenterIdToDeployIn(), vm.getId(), + _usageEventDao.persist(new UsageEventVO(EventTypes.EVENT_VM_CREATE, vm.getAccountId(), vm.getDataCenterIdToDeployIn(), vm.getId(), vm.getHostName(), vm.getServiceOfferingId(), vm.getTemplateId(), vm.getHypervisorType().toString())); txn.commit(); @@ -3572,7 +3519,7 @@ public class UserVmManagerImpl implements UserVmManager, UserVmService, Manager // OS 3: update the network List networkIdList = cmd.getNetworkIds(); List securityGroupIdList = cmd.getSecurityGroupIdList(); - + if (zone.getNetworkType() == NetworkType.Basic) { if (networkIdList != null && !networkIdList.isEmpty()) { throw new InvalidParameterValueException("Can't move vm with network Ids; this is a basic zone VM"); @@ -3632,7 +3579,7 @@ public class UserVmManagerImpl implements UserVmManager, UserVmService, Manager NicProfile profile = new NicProfile(); profile.setDefaultNic(true); networks.add(new Pair(networkList.get(0), profile)); - + VMInstanceVO vmi = _itMgr.findByIdAndType(vm.getType(), vm.getId()); VirtualMachineProfileImpl vmProfile = new VirtualMachineProfileImpl(vmi); _networkMgr.allocate(vmProfile, networks); @@ -3650,9 +3597,9 @@ public class UserVmManagerImpl implements UserVmManager, UserVmService, Manager //cleanup the network for the oldOwner _networkMgr.cleanupNics(vmOldProfile); _networkMgr.expungeNics(vmOldProfile); - + Set applicableNetworks = new HashSet(); - + if (networkIdList != null && !networkIdList.isEmpty()){ // add any additional networks for (Long networkId : networkIdList) { @@ -3665,7 +3612,7 @@ public class UserVmManagerImpl implements UserVmManager, UserVmService, Manager _networkMgr.checkNetworkPermissions(newAccount, network); - //don't allow to use system networks + //don't allow to use system networks NetworkOffering networkOffering = _configMgr.getNetworkOffering(network.getNetworkOfferingId()); if (networkOffering.isSystemOnly()) { InvalidParameterValueException ex = new InvalidParameterValueException("Specified Network id is system only and can't be used for vm deployment"); @@ -3693,10 +3640,10 @@ public class UserVmManagerImpl implements UserVmManager, UserVmService, Manager if (physicalNetwork == null) { throw new InvalidParameterValueException("Unable to find physical network with id: "+physicalNetworkId + " and tag: " +requiredOfferings.get(0).getTags()); } - - s_logger.debug("Creating network for account " + newAccount + " from the network offering id=" + + + s_logger.debug("Creating network for account " + newAccount + " from the network offering id=" + requiredOfferings.get(0).getId() + " as a part of deployVM process"); - Network newNetwork = _networkMgr.createGuestNetwork(requiredOfferings.get(0).getId(), + Network newNetwork = _networkMgr.createGuestNetwork(requiredOfferings.get(0).getId(), newAccount.getAccountName() + "-network", newAccount.getAccountName() + "-network", null, null, null, null, newAccount, null, physicalNetwork, zone.getId(), ACLType.Account, null, null); defaultNetwork = _networkDao.findById(newNetwork.getId()); @@ -3707,7 +3654,7 @@ public class UserVmManagerImpl implements UserVmManager, UserVmService, Manager defaultNetwork = virtualNetworks.get(0); } } else { - throw new InvalidParameterValueException("Required network offering id=" + requiredOfferings.get(0).getId() + " is not in " + NetworkOffering.State.Enabled); + throw new InvalidParameterValueException("Required network offering id=" + requiredOfferings.get(0).getId() + " is not in " + NetworkOffering.State.Enabled); } applicableNetworks.add(defaultNetwork); @@ -3716,7 +3663,7 @@ public class UserVmManagerImpl implements UserVmManager, UserVmService, Manager // add the new nics List> networks = new ArrayList>(); int toggle=0; - for (NetworkVO appNet: applicableNetworks){ + for (NetworkVO appNet: applicableNetworks){ NicProfile defaultNic = new NicProfile(); if (toggle==0){ defaultNic.setDefaultNic(true); @@ -3821,7 +3768,7 @@ public class UserVmManagerImpl implements UserVmManager, UserVmService, Manager s_logger.debug("Restore VM " + vmId + " with template " + root.getTemplateId() + " successfully"); return vm; } - + @Override public boolean plugNic(Network network, NicTO nic, VirtualMachineTO vm, ReservationContext context, DeployDestination dest) throws ConcurrentOperationException, ResourceUnavailableException, @@ -3841,5 +3788,5 @@ public class UserVmManagerImpl implements UserVmManager, UserVmService, Manager @Override public void prepareStop(VirtualMachineProfile profile) { } - + } diff --git a/server/test/com/cloud/network/security/SecurityGroupManagerImpl2Test.java b/server/test/com/cloud/network/security/SecurityGroupManagerImpl2Test.java index 46b7018f4d2..461bde0b95d 100644 --- a/server/test/com/cloud/network/security/SecurityGroupManagerImpl2Test.java +++ b/server/test/com/cloud/network/security/SecurityGroupManagerImpl2Test.java @@ -28,13 +28,13 @@ import org.junit.Before; import org.junit.Ignore; import com.cloud.agent.MockAgentManagerImpl; +import com.cloud.api.query.dao.SecurityGroupJoinDaoImpl; import com.cloud.configuration.DefaultInterceptorLibrary; import com.cloud.configuration.dao.ConfigurationDaoImpl; import com.cloud.domain.dao.DomainDaoImpl; import com.cloud.event.dao.UsageEventDaoImpl; import com.cloud.network.MockNetworkManagerImpl; import com.cloud.network.security.dao.SecurityGroupDaoImpl; -import com.cloud.network.security.dao.SecurityGroupJoinDaoImpl; import com.cloud.network.security.dao.SecurityGroupRuleDaoImpl; import com.cloud.network.security.dao.SecurityGroupRulesDaoImpl; import com.cloud.network.security.dao.SecurityGroupVMMapDaoImpl; diff --git a/server/test/com/cloud/projects/MockProjectManagerImpl.java b/server/test/com/cloud/projects/MockProjectManagerImpl.java index 3911ceb8eb3..309fa45d660 100644 --- a/server/test/com/cloud/projects/MockProjectManagerImpl.java +++ b/server/test/com/cloud/projects/MockProjectManagerImpl.java @@ -22,10 +22,10 @@ import java.util.Map; import javax.ejb.Local; import javax.naming.ConfigurationException; -import org.apache.cloudstack.api.view.vo.ProjectAccountJoinVO; -import org.apache.cloudstack.api.view.vo.ProjectInvitationJoinVO; -import org.apache.cloudstack.api.view.vo.ProjectJoinVO; +import com.cloud.api.query.vo.ProjectAccountJoinVO; +import com.cloud.api.query.vo.ProjectInvitationJoinVO; +import com.cloud.api.query.vo.ProjectJoinVO; import com.cloud.exception.ConcurrentOperationException; import com.cloud.exception.ResourceAllocationException; import com.cloud.exception.ResourceUnavailableException; @@ -109,21 +109,6 @@ public class MockProjectManagerImpl implements ProjectManager, Manager { return false; } - @Override - public Pair, Integer> listProjectAccounts(long projectId, - String accountName, String role, Long startIndex, Long pageSizeVal) { - // TODO Auto-generated method stub - return null; - } - - @Override - public Pair, Integer> listProjectInvitations(Long id, - Long projectId, String accountName, Long domainId, String state, - boolean activeOnly, Long startIndex, Long pageSizeVal, - boolean isRecursive, boolean listAll) { - // TODO Auto-generated method stub - return null; - } @Override public boolean updateInvitation(long projectId, String accountName, @@ -225,16 +210,16 @@ public class MockProjectManagerImpl implements ProjectManager, Manager { return false; } - /* (non-Javadoc) - * @see com.cloud.projects.ProjectService#listProjects(java.lang.Long, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.Long, java.lang.String, java.lang.Long, java.lang.Long, boolean, boolean, java.util.Map) - */ + + @Override - public Pair, Integer> listProjects(Long id, String name, String displayText, String state, String accountName, Long domainId, String keyword, Long startIndex, Long pageSize, boolean listAll, - boolean isRecursive, Map tags) { + public long getInvitationTimeout() { // TODO Auto-generated method stub - return null; + return 0; } + + @Override public Project findByProjectAccountIdIncludingRemoved(long projectAccountId) { return null; diff --git a/server/test/com/cloud/user/MockAccountManagerImpl.java b/server/test/com/cloud/user/MockAccountManagerImpl.java index dbe616991c1..29c9f6f3bb6 100644 --- a/server/test/com/cloud/user/MockAccountManagerImpl.java +++ b/server/test/com/cloud/user/MockAccountManagerImpl.java @@ -24,14 +24,15 @@ import javax.naming.ConfigurationException; import com.cloud.acl.ControlledEntity; import com.cloud.acl.SecurityChecker.AccessType; +import com.cloud.api.query.vo.ControlledViewEntity; +import com.cloud.api.query.vo.UserAccountJoinVO; + import org.apache.cloudstack.api.command.admin.user.DeleteUserCmd; import org.apache.cloudstack.api.command.admin.user.ListUsersCmd; import org.apache.cloudstack.api.command.admin.user.RegisterCmd; import org.apache.cloudstack.api.command.user.account.ListAccountsCmd; import org.apache.cloudstack.api.command.admin.account.UpdateAccountCmd; import org.apache.cloudstack.api.command.admin.user.UpdateUserCmd; -import org.apache.cloudstack.api.view.vo.ControlledViewEntity; -import org.apache.cloudstack.api.view.vo.UserAccountJoinVO; import com.cloud.domain.Domain; import com.cloud.exception.ConcurrentOperationException; @@ -306,11 +307,6 @@ public class MockAccountManagerImpl implements Manager, AccountManager, AccountS return null; } - @Override - public Pair, Integer> searchForUsers(ListUsersCmd cmd) throws PermissionDeniedException { - // TODO Auto-generated method stub - return null; - } @Override public boolean enableAccount(long accountId) { diff --git a/server/test/com/cloud/vm/MockUserVmManagerImpl.java b/server/test/com/cloud/vm/MockUserVmManagerImpl.java index 08e7ee27555..27508b14c5b 100644 --- a/server/test/com/cloud/vm/MockUserVmManagerImpl.java +++ b/server/test/com/cloud/vm/MockUserVmManagerImpl.java @@ -28,6 +28,8 @@ import com.cloud.agent.api.VmStatsEntry; import com.cloud.agent.api.to.NicTO; import com.cloud.agent.api.to.VirtualMachineTO; import com.cloud.agent.manager.Commands; +import com.cloud.api.query.vo.UserVmJoinVO; + import org.apache.cloudstack.api.command.admin.vm.AssignVMCmd; import org.apache.cloudstack.api.command.admin.vm.RecoverVMCmd; import org.apache.cloudstack.api.command.user.vm.*; @@ -44,7 +46,6 @@ import org.apache.cloudstack.api.command.user.vm.RestoreVMCmd; import org.apache.cloudstack.api.command.user.vm.StartVMCmd; import org.apache.cloudstack.api.command.user.vm.UpdateVMCmd; import org.apache.cloudstack.api.command.user.vm.UpgradeVMCmd; -import org.apache.cloudstack.api.view.vo.UserVmJoinVO; import com.cloud.dc.DataCenter; import com.cloud.deploy.DeployDestination; import com.cloud.exception.ConcurrentOperationException; @@ -401,11 +402,7 @@ public class MockUserVmManagerImpl implements UserVmManager, UserVmService, Mana return null; } - @Override - public Pair, Integer> searchForUserVMs(ListVMsCmd cmd) { - // TODO Auto-generated method stub - return null; - } + @Override public Pair> startVirtualMachine(long vmId, Long hostId, Map additionalParams) throws ConcurrentOperationException, ResourceUnavailableException, InsufficientCapacityException { @@ -416,7 +413,7 @@ public class MockUserVmManagerImpl implements UserVmManager, UserVmService, Mana @Override public void prepareStop(VirtualMachineProfile profile) { // TODO Auto-generated method stub - + } /* (non-Javadoc) From 44ef998cfc83bcb210cf257bd137073338aab4e2 Mon Sep 17 00:00:00 2001 From: Fang Wang Date: Fri, 14 Dec 2012 11:42:49 -0800 Subject: [PATCH 108/421] api: Add Validator interface that will be used for the @Validator annotation The @Validator (defined as @validate in wiki/FS) will do the following things: - DBEntityValidator (verifies if the entity exists in the db or not) - RangeValidator (min, max; limits) Signed-off-by: Rohit Yadav --- .../org/apache/cloudstack/api/Validator.java | 30 +++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 api/src/org/apache/cloudstack/api/Validator.java diff --git a/api/src/org/apache/cloudstack/api/Validator.java b/api/src/org/apache/cloudstack/api/Validator.java new file mode 100644 index 00000000000..ca2c241699f --- /dev/null +++ b/api/src/org/apache/cloudstack/api/Validator.java @@ -0,0 +1,30 @@ +// 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 org.apache.cloudstack.api; + +import static java.lang.annotation.ElementType.FIELD; + +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +@Retention(RetentionPolicy.RUNTIME) +@Target({ FIELD }) +public @interface Validator { + String DBEntityValidator(); + String RangeValidator(); +} From 27482045ceef4ee4e8165c21f97c24200888beed Mon Sep 17 00:00:00 2001 From: Fang Wang Date: Fri, 14 Dec 2012 11:31:05 -0800 Subject: [PATCH 109/421] API refactoring -- More parameter for counter group. --- .../api/command/admin/autoscale/DeleteCounterCmd.java | 3 ++- .../org/apache/cloudstack/api/response/CounterResponse.java | 4 ++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/api/src/org/apache/cloudstack/api/command/admin/autoscale/DeleteCounterCmd.java b/api/src/org/apache/cloudstack/api/command/admin/autoscale/DeleteCounterCmd.java index 1e7f70a4f9e..0476278f7d0 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/autoscale/DeleteCounterCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/autoscale/DeleteCounterCmd.java @@ -26,6 +26,7 @@ import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; +import org.apache.cloudstack.api.response.CounterResponse; import org.apache.cloudstack.api.response.SuccessResponse; import com.cloud.async.AsyncJob; import com.cloud.event.EventTypes; @@ -42,7 +43,7 @@ public class DeleteCounterCmd extends BaseAsyncCmd { // /////////////////////////////////////////////////// @IdentityMapper(entityTableName = "counter") - @Parameter(name = ApiConstants.ID, type = CommandType.LONG, required = true, description = "the ID of the counter") + @Parameter(name = ApiConstants.ID, type = CommandType.LONG, required = true, description = "the ID of the counter", entityType=CounterResponse.class) private Long id; // /////////////////////////////////////////////////// diff --git a/api/src/org/apache/cloudstack/api/response/CounterResponse.java b/api/src/org/apache/cloudstack/api/response/CounterResponse.java index 5260f1e8f55..f3cf3b33614 100644 --- a/api/src/org/apache/cloudstack/api/response/CounterResponse.java +++ b/api/src/org/apache/cloudstack/api/response/CounterResponse.java @@ -18,12 +18,16 @@ package org.apache.cloudstack.api.response; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.Entity; + +import com.cloud.network.as.Counter; import com.cloud.serializer.Param; import com.cloud.utils.IdentityProxy; import com.google.gson.annotations.SerializedName; import org.apache.cloudstack.api.BaseResponse; @SuppressWarnings("unused") +@Entity(value=Counter.class) public class CounterResponse extends BaseResponse { @SerializedName("id") @Param(description = "the id of the Counter") From 7ea690c74d56cf0442a1b421e87e3043352d4c47 Mon Sep 17 00:00:00 2001 From: Fang Wang Date: Fri, 14 Dec 2012 11:47:52 -0800 Subject: [PATCH 110/421] API refactoring -- add annotation for Account group and account response. Signed-off-by: Rohit Yadav --- .../api/command/admin/account/CreateAccountCmd.java | 5 +++-- .../api/command/admin/account/DeleteAccountCmd.java | 3 ++- .../api/command/admin/account/DisableAccountCmd.java | 10 ++++++---- .../api/command/admin/account/EnableAccountCmd.java | 10 ++++++---- .../api/command/admin/account/LockAccountCmd.java | 6 ++++-- .../api/command/admin/account/UpdateAccountCmd.java | 10 ++++++---- .../cloudstack/api/response/AccountResponse.java | 5 +++++ 7 files changed, 32 insertions(+), 17 deletions(-) diff --git a/api/src/org/apache/cloudstack/api/command/admin/account/CreateAccountCmd.java b/api/src/org/apache/cloudstack/api/command/admin/account/CreateAccountCmd.java index 1d40f9dc056..fc38ca7ad3d 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/account/CreateAccountCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/account/CreateAccountCmd.java @@ -28,6 +28,7 @@ import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; import org.apache.cloudstack.api.response.AccountResponse; +import org.apache.cloudstack.api.response.DomainResponse; import org.apache.cloudstack.api.response.UserResponse; import com.cloud.user.Account; import com.cloud.user.UserAccount; @@ -49,8 +50,8 @@ public class CreateAccountCmd extends BaseCmd { @Parameter(name=ApiConstants.ACCOUNT_TYPE, type=CommandType.SHORT, required=true, description="Type of the account. Specify 0 for user, 1 for root admin, and 2 for domain admin") private Short accountType; - @IdentityMapper(entityTableName="domain") - @Parameter(name=ApiConstants.DOMAIN_ID, type=CommandType.LONG, description="Creates the user under the specified domain.") + //@IdentityMapper(entityTableName="domain") + @Parameter(name=ApiConstants.DOMAIN_ID, type=CommandType.LONG, description="Creates the user under the specified domain.", entityType=DomainResponse.class) private Long domainId; @Parameter(name=ApiConstants.EMAIL, type=CommandType.STRING, required=true, description="email") diff --git a/api/src/org/apache/cloudstack/api/command/admin/account/DeleteAccountCmd.java b/api/src/org/apache/cloudstack/api/command/admin/account/DeleteAccountCmd.java index 66780c8c778..c25137bc488 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/account/DeleteAccountCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/account/DeleteAccountCmd.java @@ -25,6 +25,7 @@ import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; +import org.apache.cloudstack.api.response.AccountResponse; import org.apache.cloudstack.api.response.SuccessResponse; import com.cloud.async.AsyncJob; import com.cloud.event.EventTypes; @@ -43,7 +44,7 @@ public class DeleteAccountCmd extends BaseAsyncCmd { @IdentityMapper(entityTableName="account") - @Parameter(name=ApiConstants.ID, type=CommandType.LONG, required=true, description="Account id") + @Parameter(name=ApiConstants.ID, type=CommandType.LONG, required=true, description="Account id", entityType=AccountResponse.class) private Long id; diff --git a/api/src/org/apache/cloudstack/api/command/admin/account/DisableAccountCmd.java b/api/src/org/apache/cloudstack/api/command/admin/account/DisableAccountCmd.java index 8666bfe8e0e..906386e198a 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/account/DisableAccountCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/account/DisableAccountCmd.java @@ -26,6 +26,8 @@ import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; import org.apache.cloudstack.api.response.AccountResponse; +import org.apache.cloudstack.api.response.DomainResponse; + import com.cloud.async.AsyncJob; import com.cloud.event.EventTypes; import com.cloud.exception.ConcurrentOperationException; @@ -41,15 +43,15 @@ public class DisableAccountCmd extends BaseAsyncCmd { ///////////////////////////////////////////////////// //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - @IdentityMapper(entityTableName="account") - @Parameter(name=ApiConstants.ID, type=CommandType.LONG, description="Account id") + //@IdentityMapper(entityTableName="account") + @Parameter(name=ApiConstants.ID, type=CommandType.LONG, description="Account id", entityType=AccountResponse.class) private Long id; @Parameter(name=ApiConstants.ACCOUNT, type=CommandType.STRING, description="Disables specified account.") private String accountName; - @IdentityMapper(entityTableName="domain") - @Parameter(name=ApiConstants.DOMAIN_ID, type=CommandType.LONG, description="Disables specified account in this domain.") + //@IdentityMapper(entityTableName="domain") + @Parameter(name=ApiConstants.DOMAIN_ID, type=CommandType.LONG, description="Disables specified account in this domain.", entityType=DomainResponse.class) private Long domainId; @Parameter(name=ApiConstants.LOCK, type=CommandType.BOOLEAN, required=true, description="If true, only lock the account; else disable the account") diff --git a/api/src/org/apache/cloudstack/api/command/admin/account/EnableAccountCmd.java b/api/src/org/apache/cloudstack/api/command/admin/account/EnableAccountCmd.java index a8336b11cb8..3cf636007e2 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/account/EnableAccountCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/account/EnableAccountCmd.java @@ -25,6 +25,8 @@ import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; import org.apache.cloudstack.api.response.AccountResponse; +import org.apache.cloudstack.api.response.DomainResponse; + import com.cloud.user.Account; @Implementation(description="Enables an account", responseObject=AccountResponse.class) @@ -35,15 +37,15 @@ public class EnableAccountCmd extends BaseCmd { ///////////////////////////////////////////////////// //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - @IdentityMapper(entityTableName="account") - @Parameter(name=ApiConstants.ID, type=CommandType.LONG, description="Account id") + //@IdentityMapper(entityTableName="account") + @Parameter(name=ApiConstants.ID, type=CommandType.LONG, description="Account id", entityType=AccountResponse.class) private Long id; @Parameter(name=ApiConstants.ACCOUNT, type=CommandType.STRING, description="Enables specified account.") private String accountName; - @IdentityMapper(entityTableName="domain") - @Parameter(name=ApiConstants.DOMAIN_ID, type=CommandType.LONG, description="Enables specified account in this domain.") + //@IdentityMapper(entityTableName="domain") + @Parameter(name=ApiConstants.DOMAIN_ID, type=CommandType.LONG, description="Enables specified account in this domain.", entityType=DomainResponse.class) private Long domainId; ///////////////////////////////////////////////////// diff --git a/api/src/org/apache/cloudstack/api/command/admin/account/LockAccountCmd.java b/api/src/org/apache/cloudstack/api/command/admin/account/LockAccountCmd.java index d088abf8710..f50e692f0ea 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/account/LockAccountCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/account/LockAccountCmd.java @@ -24,6 +24,8 @@ import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.response.AccountResponse; +import org.apache.cloudstack.api.response.DomainResponse; + import com.cloud.user.Account; @Implementation(description="Locks an account", responseObject=AccountResponse.class) @@ -39,8 +41,8 @@ public class LockAccountCmd extends BaseCmd { @Parameter(name=ApiConstants.ACCOUNT, type=CommandType.STRING, required=true, description="Locks the specified account.") private String accountName; - @IdentityMapper(entityTableName="domain") - @Parameter(name=ApiConstants.DOMAIN_ID, type=CommandType.LONG, required=true, description="Locks the specified account on this domain.") + //@IdentityMapper(entityTableName="domain") + @Parameter(name=ApiConstants.DOMAIN_ID, type=CommandType.LONG, required=true, description="Locks the specified account on this domain.", entityType=DomainResponse.class) private Long domainId; ///////////////////////////////////////////////////// diff --git a/api/src/org/apache/cloudstack/api/command/admin/account/UpdateAccountCmd.java b/api/src/org/apache/cloudstack/api/command/admin/account/UpdateAccountCmd.java index 1c61be19c69..b3267107b33 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/account/UpdateAccountCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/account/UpdateAccountCmd.java @@ -28,6 +28,8 @@ import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; import org.apache.cloudstack.api.response.AccountResponse; +import org.apache.cloudstack.api.response.DomainResponse; + import com.cloud.user.Account; @Implementation(description="Updates account information for the authenticated user", responseObject=AccountResponse.class) @@ -39,15 +41,15 @@ public class UpdateAccountCmd extends BaseCmd{ //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - @IdentityMapper(entityTableName="account") - @Parameter(name=ApiConstants.ID, type=CommandType.LONG, description="Account id") + //@IdentityMapper(entityTableName="account") + @Parameter(name=ApiConstants.ID, type=CommandType.LONG, description="Account id", entityType=AccountResponse.class) private Long id; @Parameter(name=ApiConstants.ACCOUNT, type=CommandType.STRING, description="the current account name") private String accountName; - @IdentityMapper(entityTableName="domain") - @Parameter(name=ApiConstants.DOMAIN_ID, type=CommandType.LONG, description="the ID of the domain where the account exists") + //@IdentityMapper(entityTableName="domain") + @Parameter(name=ApiConstants.DOMAIN_ID, type=CommandType.LONG, description="the ID of the domain where the account exists", entityType=DomainResponse.class) private Long domainId; @Parameter(name=ApiConstants.NEW_NAME, type=CommandType.STRING, required=true, description="new name for the account") diff --git a/api/src/org/apache/cloudstack/api/response/AccountResponse.java b/api/src/org/apache/cloudstack/api/response/AccountResponse.java index 3fa5f7ed8d6..93d860d00c3 100644 --- a/api/src/org/apache/cloudstack/api/response/AccountResponse.java +++ b/api/src/org/apache/cloudstack/api/response/AccountResponse.java @@ -20,12 +20,17 @@ import java.util.List; import java.util.Map; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.Entity; + +import com.cloud.domain.Domain; import com.cloud.serializer.Param; +import com.cloud.user.Account; import com.cloud.utils.IdentityProxy; import com.google.gson.annotations.SerializedName; import org.apache.cloudstack.api.BaseResponse; @SuppressWarnings("unused") +@Entity(value = Account.class) public class AccountResponse extends BaseResponse { @SerializedName(ApiConstants.ID) @Param(description="the id of the account") private IdentityProxy id = new IdentityProxy("account"); From a2a3ef63c272c642457e57dfed00267ed2656bff Mon Sep 17 00:00:00 2001 From: Fang Wang Date: Fri, 14 Dec 2012 12:39:07 -0800 Subject: [PATCH 111/421] API refactoring -- add annotation for cluster group cmds and response. Signed-off-by: Rohit Yadav --- .../api/command/admin/cluster/AddClusterCmd.java | 12 +++++++----- .../api/command/admin/cluster/DeleteClusterCmd.java | 5 +++-- .../api/command/admin/cluster/ListClustersCmd.java | 6 ++++-- .../api/command/admin/cluster/UpdateClusterCmd.java | 4 ++-- .../cloudstack/api/response/ClusterResponse.java | 5 +++++ .../apache/cloudstack/api/response/PodResponse.java | 5 +++++ 6 files changed, 26 insertions(+), 11 deletions(-) diff --git a/api/src/org/apache/cloudstack/api/command/admin/cluster/AddClusterCmd.java b/api/src/org/apache/cloudstack/api/command/admin/cluster/AddClusterCmd.java index 595963e651a..0728d665d4d 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/cluster/AddClusterCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/cluster/AddClusterCmd.java @@ -30,6 +30,9 @@ import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; import org.apache.cloudstack.api.response.ClusterResponse; import org.apache.cloudstack.api.response.ListResponse; +import org.apache.cloudstack.api.response.PodResponse; +import org.apache.cloudstack.api.response.ZoneResponse; + import com.cloud.exception.DiscoveryException; import com.cloud.exception.ResourceInUseException; import com.cloud.org.Cluster; @@ -48,8 +51,8 @@ public class AddClusterCmd extends BaseCmd { @Parameter(name=ApiConstants.PASSWORD, type=CommandType.STRING, required=false, description="the password for the host") private String password; - @IdentityMapper(entityTableName="host_pod_ref") - @Parameter(name=ApiConstants.POD_ID, type=CommandType.LONG, required=true, description="the Pod ID for the host") + //@IdentityMapper(entityTableName="host_pod_ref") + @Parameter(name=ApiConstants.POD_ID, type=CommandType.LONG, required=true, description="the Pod ID for the host", entityType=PodResponse.class) private Long podId; @Parameter(name=ApiConstants.URL, type=CommandType.STRING, required=false, description="the URL") @@ -58,9 +61,8 @@ public class AddClusterCmd extends BaseCmd { @Parameter(name=ApiConstants.USERNAME, type=CommandType.STRING, required=false, description="the username for the cluster") private String username; - @IdentityMapper(entityTableName="data_center") - - @Parameter(name=ApiConstants.ZONE_ID, type=CommandType.LONG, required=true, description="the Zone ID for the cluster") + //@IdentityMapper(entityTableName="data_center") + @Parameter(name=ApiConstants.ZONE_ID, type=CommandType.LONG, required=true, description="the Zone ID for the cluster", entityType=ZoneResponse.class) private Long zoneId; @Parameter(name=ApiConstants.HYPERVISOR, type=CommandType.STRING, required=true, description="hypervisor type of the cluster: XenServer,KVM,VMware,Hyperv,BareMetal,Simulator") diff --git a/api/src/org/apache/cloudstack/api/command/admin/cluster/DeleteClusterCmd.java b/api/src/org/apache/cloudstack/api/command/admin/cluster/DeleteClusterCmd.java index 1a16ebceee1..1b4136064bd 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/cluster/DeleteClusterCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/cluster/DeleteClusterCmd.java @@ -24,6 +24,7 @@ import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; +import org.apache.cloudstack.api.response.ClusterResponse; import org.apache.cloudstack.api.response.SuccessResponse; import com.cloud.user.Account; @@ -38,8 +39,8 @@ public class DeleteClusterCmd extends BaseCmd { //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - @IdentityMapper(entityTableName="cluster") - @Parameter(name=ApiConstants.ID, type=CommandType.LONG, required=true, description="the cluster ID") + //@IdentityMapper(entityTableName="cluster") + @Parameter(name=ApiConstants.ID, type=CommandType.LONG, required=true, description="the cluster ID", entityType=ClusterResponse.class) private Long id; diff --git a/api/src/org/apache/cloudstack/api/command/admin/cluster/ListClustersCmd.java b/api/src/org/apache/cloudstack/api/command/admin/cluster/ListClustersCmd.java index 06dba9d827d..1a3934e0ec7 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/cluster/ListClustersCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/cluster/ListClustersCmd.java @@ -29,6 +29,8 @@ import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.response.ClusterResponse; import org.apache.cloudstack.api.response.ListResponse; +import org.apache.cloudstack.api.response.ZoneResponse; + import com.cloud.org.Cluster; import com.cloud.utils.Pair; @@ -53,8 +55,8 @@ public class ListClustersCmd extends BaseListCmd { @Parameter(name=ApiConstants.POD_ID, type=CommandType.LONG, description="lists clusters by Pod ID") private Long podId; - @IdentityMapper(entityTableName="data_center") - @Parameter(name=ApiConstants.ZONE_ID, type=CommandType.LONG, description="lists clusters by Zone ID") + //@IdentityMapper(entityTableName="data_center") + @Parameter(name=ApiConstants.ZONE_ID, type=CommandType.LONG, description="lists clusters by Zone ID", entityType=ZoneResponse.class) private Long zoneId; @Parameter(name=ApiConstants.HYPERVISOR, type=CommandType.STRING, description="lists clusters by hypervisor type") diff --git a/api/src/org/apache/cloudstack/api/command/admin/cluster/UpdateClusterCmd.java b/api/src/org/apache/cloudstack/api/command/admin/cluster/UpdateClusterCmd.java index 6695db283c8..1c9898031d0 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/cluster/UpdateClusterCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/cluster/UpdateClusterCmd.java @@ -35,8 +35,8 @@ public class UpdateClusterCmd extends BaseCmd { private static final String s_name = "updateclusterresponse"; - @IdentityMapper(entityTableName="cluster") - @Parameter(name=ApiConstants.ID, type=CommandType.LONG, required=true, description="the ID of the Cluster") + //@IdentityMapper(entityTableName="cluster") + @Parameter(name=ApiConstants.ID, type=CommandType.LONG, required=true, description="the ID of the Cluster", entityType=ClusterResponse.class) private Long id; @Parameter(name=ApiConstants.CLUSTER_NAME, type=CommandType.STRING, description="the cluster name") diff --git a/api/src/org/apache/cloudstack/api/response/ClusterResponse.java b/api/src/org/apache/cloudstack/api/response/ClusterResponse.java index f6578558e84..1e15653f7c6 100644 --- a/api/src/org/apache/cloudstack/api/response/ClusterResponse.java +++ b/api/src/org/apache/cloudstack/api/response/ClusterResponse.java @@ -20,11 +20,16 @@ import java.util.ArrayList; import java.util.List; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.Entity; + import com.cloud.utils.IdentityProxy; +import com.cloud.dc.DataCenter; +import com.cloud.org.Cluster; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; import org.apache.cloudstack.api.BaseResponse; +@Entity(value = Cluster.class) public class ClusterResponse extends BaseResponse { @SerializedName(ApiConstants.ID) @Param(description="the cluster ID") private IdentityProxy id = new IdentityProxy("cluster"); diff --git a/api/src/org/apache/cloudstack/api/response/PodResponse.java b/api/src/org/apache/cloudstack/api/response/PodResponse.java index 1bd94edf632..3e3cd4da26c 100644 --- a/api/src/org/apache/cloudstack/api/response/PodResponse.java +++ b/api/src/org/apache/cloudstack/api/response/PodResponse.java @@ -19,11 +19,16 @@ package org.apache.cloudstack.api.response; import java.util.List; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.Entity; + import com.cloud.utils.IdentityProxy; +import com.cloud.dc.DataCenter; +import com.cloud.dc.Pod; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; import org.apache.cloudstack.api.BaseResponse; +@Entity(value = Pod.class) public class PodResponse extends BaseResponse { @SerializedName("id") @Param(description="the ID of the Pod") private IdentityProxy id = new IdentityProxy("host_pod_ref"); From efa034e821df2333864ebaff94df2b7331905135 Mon Sep 17 00:00:00 2001 From: Fang Wang Date: Fri, 14 Dec 2012 12:50:29 -0800 Subject: [PATCH 112/421] API-refactoring -- Add pod annotation, needed for the deployVM flow test. Signed-off-by: Rohit Yadav --- .../cloudstack/api/command/admin/pod/CreatePodCmd.java | 6 ++++-- .../cloudstack/api/command/admin/pod/DeletePodCmd.java | 7 +++++-- .../api/command/admin/pod/ListPodsByCmd.java | 10 ++++++---- .../cloudstack/api/command/admin/pod/UpdatePodCmd.java | 6 ++++-- 4 files changed, 19 insertions(+), 10 deletions(-) diff --git a/api/src/org/apache/cloudstack/api/command/admin/pod/CreatePodCmd.java b/api/src/org/apache/cloudstack/api/command/admin/pod/CreatePodCmd.java index f1763b411e8..f3f1c18f22b 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/pod/CreatePodCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/pod/CreatePodCmd.java @@ -25,6 +25,8 @@ import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; import org.apache.cloudstack.api.response.PodResponse; +import org.apache.cloudstack.api.response.ZoneResponse; + import com.cloud.dc.Pod; import com.cloud.user.Account; @@ -40,8 +42,8 @@ public class CreatePodCmd extends BaseCmd { @Parameter(name=ApiConstants.NAME, type=CommandType.STRING, required=true, description="the name of the Pod") private String podName; - @IdentityMapper(entityTableName="data_center") - @Parameter(name=ApiConstants.ZONE_ID, type=CommandType.LONG, required=true, description="the Zone ID in which the Pod will be created ") + //@IdentityMapper(entityTableName="data_center") + @Parameter(name=ApiConstants.ZONE_ID, type=CommandType.LONG, required=true, description="the Zone ID in which the Pod will be created ", entityType=ZoneResponse.class) private Long zoneId; @Parameter(name=ApiConstants.START_IP, type=CommandType.STRING, required=true, description="the starting IP address for the Pod") diff --git a/api/src/org/apache/cloudstack/api/command/admin/pod/DeletePodCmd.java b/api/src/org/apache/cloudstack/api/command/admin/pod/DeletePodCmd.java index fcf22df8011..e2e3fa8838e 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/pod/DeletePodCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/pod/DeletePodCmd.java @@ -24,7 +24,10 @@ import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; +import org.apache.cloudstack.api.response.PodResponse; import org.apache.cloudstack.api.response.SuccessResponse; +import org.apache.cloudstack.api.response.ZoneResponse; + import com.cloud.user.Account; @Implementation(description="Deletes a Pod.", responseObject=SuccessResponse.class) @@ -37,8 +40,8 @@ public class DeletePodCmd extends BaseCmd { //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - @IdentityMapper(entityTableName="host_pod_ref") - @Parameter(name=ApiConstants.ID, type=CommandType.LONG, required=true, description="the ID of the Pod") + //@IdentityMapper(entityTableName="host_pod_ref") + @Parameter(name=ApiConstants.ID, type=CommandType.LONG, required=true, description="the ID of the Pod", entityType=PodResponse.class) private Long id; diff --git a/api/src/org/apache/cloudstack/api/command/admin/pod/ListPodsByCmd.java b/api/src/org/apache/cloudstack/api/command/admin/pod/ListPodsByCmd.java index 1516c0e5434..713fbb0819e 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/pod/ListPodsByCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/pod/ListPodsByCmd.java @@ -28,6 +28,8 @@ import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.response.ListResponse; import org.apache.cloudstack.api.response.PodResponse; +import org.apache.cloudstack.api.response.ZoneResponse; + import com.cloud.dc.Pod; import com.cloud.utils.Pair; @@ -41,15 +43,15 @@ public class ListPodsByCmd extends BaseListCmd { //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - @IdentityMapper(entityTableName="host_pod_ref") - @Parameter(name=ApiConstants.ID, type=CommandType.LONG, description="list Pods by ID") + //@IdentityMapper(entityTableName="host_pod_ref") + @Parameter(name=ApiConstants.ID, type=CommandType.LONG, description="list Pods by ID", entityType=PodResponse.class) private Long id; @Parameter(name=ApiConstants.NAME, type=CommandType.STRING, description="list Pods by name") private String podName; - @IdentityMapper(entityTableName="data_center") - @Parameter(name=ApiConstants.ZONE_ID, type=CommandType.LONG, description="list Pods by Zone ID") + //@IdentityMapper(entityTableName="data_center") + @Parameter(name=ApiConstants.ZONE_ID, type=CommandType.LONG, description="list Pods by Zone ID", entityType=ZoneResponse.class) private Long zoneId; @Parameter(name=ApiConstants.ALLOCATION_STATE, type=CommandType.STRING, description="list pods by allocation state") diff --git a/api/src/org/apache/cloudstack/api/command/admin/pod/UpdatePodCmd.java b/api/src/org/apache/cloudstack/api/command/admin/pod/UpdatePodCmd.java index 30b8a2ffe5f..08f1086c716 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/pod/UpdatePodCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/pod/UpdatePodCmd.java @@ -25,6 +25,8 @@ import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; import org.apache.cloudstack.api.response.PodResponse; +import org.apache.cloudstack.api.response.ZoneResponse; + import com.cloud.dc.Pod; import com.cloud.user.Account; @@ -38,8 +40,8 @@ public class UpdatePodCmd extends BaseCmd { //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - @IdentityMapper(entityTableName="host_pod_ref") - @Parameter(name=ApiConstants.ID, type=CommandType.LONG, required=true, description="the ID of the Pod") + //@IdentityMapper(entityTableName="host_pod_ref") + @Parameter(name=ApiConstants.ID, type=CommandType.LONG, required=true, description="the ID of the Pod", entityType=PodResponse.class) private Long id; @Parameter(name=ApiConstants.NAME, type=CommandType.STRING, description="the name of the Pod") From cc4030be41da3a654e6a1437528bc59cb9e18486 Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Sun, 16 Dec 2012 18:08:49 -0800 Subject: [PATCH 113/421] api: Add UUID type to CommandType in BaseCmd Signed-off-by: Rohit Yadav --- api/src/org/apache/cloudstack/api/BaseCmd.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/api/src/org/apache/cloudstack/api/BaseCmd.java b/api/src/org/apache/cloudstack/api/BaseCmd.java index 21e5a332a7a..ac8778539f2 100644 --- a/api/src/org/apache/cloudstack/api/BaseCmd.java +++ b/api/src/org/apache/cloudstack/api/BaseCmd.java @@ -80,7 +80,7 @@ public abstract class BaseCmd { public static final String RESPONSE_TYPE_JSON = "json"; public enum CommandType { - BOOLEAN, DATE, FLOAT, INTEGER, SHORT, LIST, LONG, OBJECT, MAP, STRING, TZDATE + BOOLEAN, DATE, FLOAT, INTEGER, SHORT, LIST, LONG, OBJECT, MAP, STRING, TZDATE, UUID } // FIXME: Extract these out into a separate file From 6db279583ef43b4378e02371cfab2cf1249a2059 Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Sun, 16 Dec 2012 18:09:33 -0800 Subject: [PATCH 114/421] api: Remove resourceType, use only entityType Signed-off-by: Rohit Yadav --- api/src/org/apache/cloudstack/api/Parameter.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/api/src/org/apache/cloudstack/api/Parameter.java b/api/src/org/apache/cloudstack/api/Parameter.java index 470ad260d70..6f64737ab83 100644 --- a/api/src/org/apache/cloudstack/api/Parameter.java +++ b/api/src/org/apache/cloudstack/api/Parameter.java @@ -47,7 +47,5 @@ public @interface Parameter { String since() default ""; - Class[] resourceType() default Object.class; - String retrieveMethod() default "getById"; } From 429b430721939b16e34fe9deda2c0d586765b0f6 Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Sun, 16 Dec 2012 18:12:01 -0800 Subject: [PATCH 115/421] api: Fix DeployVMCmd to use only entityType and not resourceType Signed-off-by: Rohit Yadav --- .../cloudstack/api/command/user/vm/DeployVMCmd.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/api/src/org/apache/cloudstack/api/command/user/vm/DeployVMCmd.java b/api/src/org/apache/cloudstack/api/command/user/vm/DeployVMCmd.java index 3ca94da4f78..d13e4438855 100644 --- a/api/src/org/apache/cloudstack/api/command/user/vm/DeployVMCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vm/DeployVMCmd.java @@ -81,7 +81,7 @@ public class DeployVMCmd extends BaseAsyncCreateCmd { @ACL //@IdentityMapper(entityTableName="disk_offering") - @Parameter(name=ApiConstants.SERVICE_OFFERING_ID, type=CommandType.LONG, required=true, description="the ID of the service offering for the virtual machine", resourceType=ServiceOffering.class, entityType=ServiceOfferingResponse.class) + @Parameter(name=ApiConstants.SERVICE_OFFERING_ID, type=CommandType.LONG, required=true, description="the ID of the service offering for the virtual machine", entityType=ServiceOfferingResponse.class) private Long serviceOfferingId; @ACL @@ -137,15 +137,15 @@ public class DeployVMCmd extends BaseAsyncCreateCmd { @ACL //@IdentityMapper(entityTableName="security_group") - @Parameter(name=ApiConstants.SECURITY_GROUP_IDS, type=CommandType.LIST, collectionType=CommandType.LONG, description="comma separated list of security groups id that going to be applied to the virtual machine. Should be passed only when vm is created from a zone with Basic Network support. Mutually exclusive with securitygroupnames parameter", resourceType=SecurityGroup.class, entityType=SecurityGroupResponse.class) + @Parameter(name=ApiConstants.SECURITY_GROUP_IDS, type=CommandType.LIST, collectionType=CommandType.LONG, description="comma separated list of security groups id that going to be applied to the virtual machine. Should be passed only when vm is created from a zone with Basic Network support. Mutually exclusive with securitygroupnames parameter", entityType=SecurityGroupResponse.class) private List securityGroupIdList; @ACL - @Parameter(name=ApiConstants.SECURITY_GROUP_NAMES, type=CommandType.LIST, collectionType=CommandType.STRING, description="comma separated list of security groups names that going to be applied to the virtual machine. Should be passed only when vm is created from a zone with Basic Network support. Mutually exclusive with securitygroupids parameter", resourceType=SecurityGroup.class) + @Parameter(name=ApiConstants.SECURITY_GROUP_NAMES, type=CommandType.LIST, collectionType=CommandType.STRING, description="comma separated list of security groups names that going to be applied to the virtual machine. Should be passed only when vm is created from a zone with Basic Network support. Mutually exclusive with securitygroupids parameter", entityType=SecurityGroupResponse.class) private List securityGroupNameList; @ACL(checkKeyAccess=true) - @Parameter(name = ApiConstants.IP_NETWORK_LIST, type = CommandType.MAP, description = "ip to network mapping. Can't be specified with networkIds parameter. Example: iptonetworklist[0].ip=10.10.10.11&iptonetworklist[0].networkid=204 - requests to use ip 10.10.10.11 in network id=204",resourceType={Network.class,IpAddress.class}) + @Parameter(name = ApiConstants.IP_NETWORK_LIST, type = CommandType.MAP, description = "ip to network mapping. Can't be specified with networkIds parameter. Example: iptonetworklist[0].ip=10.10.10.11&iptonetworklist[0].networkid=204 - requests to use ip 10.10.10.11 in network id=204",entityType={Network.class,IpAddress.class}) private Map ipToNetworkList; @Parameter(name=ApiConstants.IP_ADDRESS, type=CommandType.STRING, description="the ip address for default vm's network") From 59fc89abe31df863e891c36b64336700eb100d3d Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Sun, 16 Dec 2012 18:13:29 -0800 Subject: [PATCH 116/421] api: Fix ApiServer role base acl logic and response type value Signed-off-by: Rohit Yadav --- server/src/com/cloud/api/ApiServer.java | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/server/src/com/cloud/api/ApiServer.java b/server/src/com/cloud/api/ApiServer.java index c7cbaa18d19..bb2044f2206 100755 --- a/server/src/com/cloud/api/ApiServer.java +++ b/server/src/com/cloud/api/ApiServer.java @@ -36,7 +36,6 @@ import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; -import java.util.Properties; import java.util.Set; import java.util.TimeZone; import java.util.concurrent.ExecutorService; @@ -243,6 +242,11 @@ public class ApiServer implements HttpRequestHandler { parameterMap.put(/* name */paramValue[0], /* value */new String[] { paramValue[1] }); } } + + // Check responseType, if not among valid types, fallback to XML + if (!(responseType.equals(BaseCmd.RESPONSE_TYPE_JSON) || responseType.equals(BaseCmd.RESPONSE_TYPE_XML))) + responseType = BaseCmd.RESPONSE_TYPE_XML; + try { // always trust commands from API port, user context will always be UID_SYSTEM/ACCOUNT_ID_SYSTEM UserContext.registerContext(_systemUser.getId(), _systemAccount, null, true); @@ -769,18 +773,17 @@ public class ApiServer implements HttpRequestHandler { } private boolean isCommandAvailable(User user, String commandName) { - for(APIAccessChecker apichecker : _apiAccessCheckers) { - // Break on the first adapter that validates - // FIXME: In case of multiple adapters, this may not be the best way of validation. See CLOUDSTACK-618 - if (apichecker.canAccessAPI(user, commandName)) - return true; + for (APIAccessChecker apiChecker : _apiAccessCheckers) { + // Fail the checking if any checker fails to verify + if (!apiChecker.canAccessAPI(user, commandName)) + return false; } - return false; + return true; } private String getCmdClassName(String cmdName) { String cmdClassName = null; - for(APIAccessChecker apiChecker : _apiAccessCheckers){ + for (APIAccessChecker apiChecker : _apiAccessCheckers){ cmdClassName = apiChecker.getApiCommands().getProperty(cmdName); // Break on the first non-null value if (cmdClassName != null) From f8a483fc5a47cb66ac4788fcd7d53da0c9d6ea2b Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Sun, 16 Dec 2012 21:37:03 -0800 Subject: [PATCH 117/421] api: Include cloudstack-version in both xml and json api response Signed-off-by: Rohit Yadav --- api/src/org/apache/cloudstack/api/BaseCmd.java | 8 ++++---- server/src/com/cloud/api/ApiServlet.java | 14 ++++++++++---- .../cloud/api/response/ApiResponseSerializer.java | 6 ++++-- 3 files changed, 18 insertions(+), 10 deletions(-) diff --git a/api/src/org/apache/cloudstack/api/BaseCmd.java b/api/src/org/apache/cloudstack/api/BaseCmd.java index ac8778539f2..d89f5ea1b3c 100644 --- a/api/src/org/apache/cloudstack/api/BaseCmd.java +++ b/api/src/org/apache/cloudstack/api/BaseCmd.java @@ -308,14 +308,14 @@ public abstract class BaseCmd { StringBuffer sb = new StringBuffer(); if (RESPONSE_TYPE_JSON.equalsIgnoreCase(responseType)) { // JSON response - sb.append("{ \"" + getCommandName() + "\" : { " + "\"@attributes\":{\"cloud-stack-version\":\"" + _mgr.getVersion() + "\"},"); + sb.append("{ \"" + getCommandName() + "\" : { " + "\"@attributes\":{\"cloudstack-version\":\"" + _mgr.getVersion() + "\"},"); sb.append("\"errorcode\" : \"" + apiException.getErrorCode() + "\", \"description\" : \"" + apiException.getDescription() + "\" } }"); } else { sb.append(""); sb.append("<" + getCommandName() + ">"); sb.append("" + apiException.getErrorCode() + ""); sb.append("" + escapeXml(apiException.getDescription()) + ""); - sb.append(""); + sb.append(""); } return sb.toString(); } @@ -326,10 +326,10 @@ public abstract class BaseCmd { // set up the return value with the name of the response if (RESPONSE_TYPE_JSON.equalsIgnoreCase(responseType)) { - prefixSb.append("{ \"" + getCommandName() + "\" : { \"@attributes\":{\"cloud-stack-version\":\"" + _mgr.getVersion() + "\"},"); + prefixSb.append("{ \"" + getCommandName() + "\" : { \"@attributes\":{\"cloudstack-version\":\"" + _mgr.getVersion() + "\"},"); } else { prefixSb.append(""); - prefixSb.append("<" + getCommandName() + " cloud-stack-version=\"" + _mgr.getVersion() + "\">"); + prefixSb.append("<" + getCommandName() + " cloudstack-version=\"" + _mgr.getVersion() + "\">"); } int i = 0; diff --git a/server/src/com/cloud/api/ApiServlet.java b/server/src/com/cloud/api/ApiServlet.java index 7e1f2c39bf6..895481938e7 100755 --- a/server/src/com/cloud/api/ApiServlet.java +++ b/server/src/com/cloud/api/ApiServlet.java @@ -411,10 +411,13 @@ public class ApiServlet extends HttpServlet { } } } - sb.append(" } }"); + sb.append(" }"); + sb.append(", \"cloudstack-version\": \""); + sb.append(ApiDBUtils.getVersion()); + sb.append("\" }"); } else { sb.append(""); - sb.append(""); + sb.append(""); sb.append("" + inactiveInterval + ""); Enumeration attrNames = session.getAttributeNames(); if (attrNames != null) { @@ -441,10 +444,13 @@ public class ApiServlet extends HttpServlet { private String getLogoutSuccessResponse(String responseType) { StringBuffer sb = new StringBuffer(); if (BaseCmd.RESPONSE_TYPE_JSON.equalsIgnoreCase(responseType)) { - sb.append("{ \"logoutresponse\" : { \"description\" : \"success\" } }"); + sb.append("{ \"logoutresponse\" : { \"description\" : \"success\" }"); + sb.append(", \"cloudstack-version\": \""); + sb.append(ApiDBUtils.getVersion()); + sb.append("\" }"); } else { sb.append(""); - sb.append(""); + sb.append(""); sb.append("success"); sb.append(""); } diff --git a/server/src/com/cloud/api/response/ApiResponseSerializer.java b/server/src/com/cloud/api/response/ApiResponseSerializer.java index 4a4d94306b1..af37aa2807e 100644 --- a/server/src/com/cloud/api/response/ApiResponseSerializer.java +++ b/server/src/com/cloud/api/response/ApiResponseSerializer.java @@ -122,7 +122,9 @@ public class ApiResponseSerializer { sb.append("{ }"); } } - sb.append(" }"); + sb.append(", \"cloudstack-version\": \""); + sb.append(ApiDBUtils.getVersion()); + sb.append("\" }"); return sb.toString(); } return null; @@ -131,7 +133,7 @@ public class ApiResponseSerializer { private static String toXMLSerializedString(ResponseObject result) { StringBuilder sb = new StringBuilder(); sb.append(""); - sb.append("<").append(result.getResponseName()).append(" cloud-stack-version=\"").append(ApiDBUtils.getVersion()).append("\">"); + sb.append("<").append(result.getResponseName()).append(" cloudstack-version=\"").append(ApiDBUtils.getVersion()).append("\">"); if (result instanceof ListResponse) { Integer count = ((ListResponse) result).getCount(); From cba97b17423a8dda4e8d8b170088fe014754d283 Mon Sep 17 00:00:00 2001 From: Likitha Shetty Date: Mon, 17 Dec 2012 09:55:52 -0800 Subject: [PATCH 118/421] api_refactoring: add parameter annotation for user 'security-group' - Add the entityType to the parameter annotation - Annotate SecurityGroupRules response Signed-off-by: Rohit Yadav --- .../AuthorizeSecurityGroupEgressCmd.java | 12 +++++------- .../AuthorizeSecurityGroupIngressCmd.java | 12 +++++------- .../user/securitygroup/CreateSecurityGroupCmd.java | 9 ++++----- .../user/securitygroup/DeleteSecurityGroupCmd.java | 13 ++++++------- .../user/securitygroup/ListSecurityGroupsCmd.java | 8 +++----- .../securitygroup/RevokeSecurityGroupEgressCmd.java | 5 ++--- .../RevokeSecurityGroupIngressCmd.java | 5 ++--- .../api/response/SecurityGroupRuleResponse.java | 3 +++ 8 files changed, 30 insertions(+), 37 deletions(-) diff --git a/api/src/org/apache/cloudstack/api/command/user/securitygroup/AuthorizeSecurityGroupEgressCmd.java b/api/src/org/apache/cloudstack/api/command/user/securitygroup/AuthorizeSecurityGroupEgressCmd.java index 566e5c0b5e1..e5c78024d4e 100644 --- a/api/src/org/apache/cloudstack/api/command/user/securitygroup/AuthorizeSecurityGroupEgressCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/securitygroup/AuthorizeSecurityGroupEgressCmd.java @@ -25,10 +25,11 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; +import org.apache.cloudstack.api.response.DomainResponse; +import org.apache.cloudstack.api.response.ProjectAccountResponse; import org.apache.cloudstack.api.response.SecurityGroupRuleResponse; import org.apache.cloudstack.api.response.SecurityGroupResponse; import com.cloud.async.AsyncJob; @@ -70,19 +71,16 @@ public class AuthorizeSecurityGroupEgressCmd extends BaseAsyncCmd { @Parameter(name = ApiConstants.USER_SECURITY_GROUP_LIST, type = CommandType.MAP, description = "user to security group mapping") private Map userSecurityGroupList; - @IdentityMapper(entityTableName="domain") - @Parameter(name=ApiConstants.DOMAIN_ID, type=CommandType.LONG, description="an optional domainId for the security group. If the account parameter is used, domainId must also be used.") + @Parameter(name=ApiConstants.DOMAIN_ID, type=CommandType.UUID, description="an optional domainId for the security group. If the account parameter is used, domainId must also be used.", entityType = DomainResponse.class) private Long domainId; @Parameter(name=ApiConstants.ACCOUNT, type=CommandType.STRING, description="an optional account for the security group. Must be used with domainId.") private String accountName; - @IdentityMapper(entityTableName="projects") - @Parameter(name=ApiConstants.PROJECT_ID, type=CommandType.LONG, description="an optional project of the security group") + @Parameter(name=ApiConstants.PROJECT_ID, type=CommandType.UUID, description="an optional project of the security group", entityType=ProjectAccountResponse.class) private Long projectId; - @IdentityMapper(entityTableName="security_group") - @Parameter(name=ApiConstants.SECURITY_GROUP_ID, type=CommandType.LONG, description="The ID of the security group. Mutually exclusive with securityGroupName parameter") + @Parameter(name=ApiConstants.SECURITY_GROUP_ID, type=CommandType.UUID, description="The ID of the security group. Mutually exclusive with securityGroupName parameter", entityType=SecurityGroupResponse.class) private Long securityGroupId; @Parameter(name=ApiConstants.SECURITY_GROUP_NAME, type=CommandType.STRING, description="The name of the security group. Mutually exclusive with securityGroupName parameter") diff --git a/api/src/org/apache/cloudstack/api/command/user/securitygroup/AuthorizeSecurityGroupIngressCmd.java b/api/src/org/apache/cloudstack/api/command/user/securitygroup/AuthorizeSecurityGroupIngressCmd.java index b5e6aa24dc6..ac6b6afa797 100644 --- a/api/src/org/apache/cloudstack/api/command/user/securitygroup/AuthorizeSecurityGroupIngressCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/securitygroup/AuthorizeSecurityGroupIngressCmd.java @@ -27,10 +27,11 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; +import org.apache.cloudstack.api.response.DomainResponse; +import org.apache.cloudstack.api.response.ProjectAccountResponse; import org.apache.cloudstack.api.response.SecurityGroupResponse; import org.apache.cloudstack.api.response.SecurityGroupRuleResponse; import com.cloud.async.AsyncJob; @@ -73,19 +74,16 @@ public class AuthorizeSecurityGroupIngressCmd extends BaseAsyncCmd { @Parameter(name = ApiConstants.USER_SECURITY_GROUP_LIST, type = CommandType.MAP, description = "user to security group mapping") private Map userSecurityGroupList; - @IdentityMapper(entityTableName="domain") - @Parameter(name=ApiConstants.DOMAIN_ID, type=CommandType.LONG, description="an optional domainId for the security group. If the account parameter is used, domainId must also be used.") + @Parameter(name=ApiConstants.DOMAIN_ID, type=CommandType.UUID, description="an optional domainId for the security group. If the account parameter is used, domainId must also be used.", entityType = DomainResponse.class) private Long domainId; @Parameter(name=ApiConstants.ACCOUNT, type=CommandType.STRING, description="an optional account for the security group. Must be used with domainId.") private String accountName; - @IdentityMapper(entityTableName="projects") - @Parameter(name=ApiConstants.PROJECT_ID, type=CommandType.LONG, description="an optional project of the security group") + @Parameter(name=ApiConstants.PROJECT_ID, type=CommandType.UUID, description="an optional project of the security group", entityType=ProjectAccountResponse.class) private Long projectId; - @IdentityMapper(entityTableName="security_group") - @Parameter(name=ApiConstants.SECURITY_GROUP_ID, type=CommandType.LONG, description="The ID of the security group. Mutually exclusive with securityGroupName parameter") + @Parameter(name=ApiConstants.SECURITY_GROUP_ID, type=CommandType.UUID, description="The ID of the security group. Mutually exclusive with securityGroupName parameter", entityType=SecurityGroupResponse.class) private Long securityGroupId; @Parameter(name=ApiConstants.SECURITY_GROUP_NAME, type=CommandType.STRING, description="The name of the security group. Mutually exclusive with securityGroupName parameter") diff --git a/api/src/org/apache/cloudstack/api/command/user/securitygroup/CreateSecurityGroupCmd.java b/api/src/org/apache/cloudstack/api/command/user/securitygroup/CreateSecurityGroupCmd.java index b83a9722fb6..9ea7951857a 100644 --- a/api/src/org/apache/cloudstack/api/command/user/securitygroup/CreateSecurityGroupCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/securitygroup/CreateSecurityGroupCmd.java @@ -20,10 +20,11 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; +import org.apache.cloudstack.api.response.DomainResponse; +import org.apache.cloudstack.api.response.ProjectAccountResponse; import org.apache.cloudstack.api.response.SecurityGroupResponse; import com.cloud.network.security.SecurityGroup; import com.cloud.user.Account; @@ -42,8 +43,7 @@ public class CreateSecurityGroupCmd extends BaseCmd { @Parameter(name = ApiConstants.ACCOUNT, type = CommandType.STRING, description = "an optional account for the security group. Must be used with domainId.") private String accountName; - @IdentityMapper(entityTableName = "domain") - @Parameter(name = ApiConstants.DOMAIN_ID, type = CommandType.LONG, description = "an optional domainId for the security group. If the account parameter is used, domainId must also be used.") + @Parameter(name = ApiConstants.DOMAIN_ID, type = CommandType.UUID, description = "an optional domainId for the security group. If the account parameter is used, domainId must also be used.", entityType = DomainResponse.class) private Long domainId; @Parameter(name = ApiConstants.DESCRIPTION, type = CommandType.STRING, description = "the description of the security group") @@ -52,8 +52,7 @@ public class CreateSecurityGroupCmd extends BaseCmd { @Parameter(name = ApiConstants.NAME, type = CommandType.STRING, required = true, description = "name of the security group") private String securityGroupName; - @IdentityMapper(entityTableName = "projects") - @Parameter(name = ApiConstants.PROJECT_ID, type = CommandType.LONG, description = "Deploy vm for the project") + @Parameter(name = ApiConstants.PROJECT_ID, type = CommandType.UUID, description = "Deploy vm for the project", entityType=ProjectAccountResponse.class) private Long projectId; // /////////////////////////////////////////////////// diff --git a/api/src/org/apache/cloudstack/api/command/user/securitygroup/DeleteSecurityGroupCmd.java b/api/src/org/apache/cloudstack/api/command/user/securitygroup/DeleteSecurityGroupCmd.java index 5ca76ef5a72..38429adcba7 100644 --- a/api/src/org/apache/cloudstack/api/command/user/securitygroup/DeleteSecurityGroupCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/securitygroup/DeleteSecurityGroupCmd.java @@ -20,10 +20,12 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; +import org.apache.cloudstack.api.response.DomainResponse; +import org.apache.cloudstack.api.response.ProjectAccountResponse; +import org.apache.cloudstack.api.response.SecurityGroupResponse; import org.apache.cloudstack.api.response.SuccessResponse; import com.cloud.exception.InvalidParameterValueException; import com.cloud.exception.ResourceInUseException; @@ -41,16 +43,13 @@ public class DeleteSecurityGroupCmd extends BaseCmd { @Parameter(name=ApiConstants.ACCOUNT, type=CommandType.STRING, description="the account of the security group. Must be specified with domain ID") private String accountName; - @IdentityMapper(entityTableName="domain") - @Parameter(name=ApiConstants.DOMAIN_ID, type=CommandType.LONG, description="the domain ID of account owning the security group") + @Parameter(name=ApiConstants.DOMAIN_ID, type=CommandType.UUID, description="the domain ID of account owning the security group", entityType=DomainResponse.class) private Long domainId; - @IdentityMapper(entityTableName="projects") - @Parameter(name=ApiConstants.PROJECT_ID, type=CommandType.LONG, description="the project of the security group") + @Parameter(name=ApiConstants.PROJECT_ID, type=CommandType.UUID, description="the project of the security group", entityType=ProjectAccountResponse.class) private Long projectId; - @IdentityMapper(entityTableName="security_group") - @Parameter(name=ApiConstants.ID, type=CommandType.LONG, description="The ID of the security group. Mutually exclusive with name parameter") + @Parameter(name=ApiConstants.ID, type=CommandType.UUID, description="The ID of the security group. Mutually exclusive with name parameter", entityType=SecurityGroupResponse.class) private Long id; @Parameter(name=ApiConstants.NAME, type=CommandType.STRING, description="The ID of the security group. Mutually exclusive with id parameter") diff --git a/api/src/org/apache/cloudstack/api/command/user/securitygroup/ListSecurityGroupsCmd.java b/api/src/org/apache/cloudstack/api/command/user/securitygroup/ListSecurityGroupsCmd.java index 3a49b26d2a2..b43dbd7cd58 100644 --- a/api/src/org/apache/cloudstack/api/command/user/securitygroup/ListSecurityGroupsCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/securitygroup/ListSecurityGroupsCmd.java @@ -20,11 +20,11 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseListTaggedResourcesCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.response.ListResponse; import org.apache.cloudstack.api.response.SecurityGroupResponse; +import org.apache.cloudstack.api.response.UserVmResponse; import com.cloud.async.AsyncJob; @@ -41,12 +41,10 @@ public class ListSecurityGroupsCmd extends BaseListTaggedResourcesCmd { @Parameter(name=ApiConstants.SECURITY_GROUP_NAME, type=CommandType.STRING, description="lists security groups by name") private String securityGroupName; - @IdentityMapper(entityTableName="vm_instance") - @Parameter(name=ApiConstants.VIRTUAL_MACHINE_ID, type=CommandType.LONG, description="lists security groups by virtual machine id") + @Parameter(name=ApiConstants.VIRTUAL_MACHINE_ID, type=CommandType.UUID, description="lists security groups by virtual machine id", entityType=UserVmResponse.class) private Long virtualMachineId; - @IdentityMapper(entityTableName="security_group") - @Parameter(name=ApiConstants.ID, type=CommandType.LONG, description="list the security group by the id provided") + @Parameter(name=ApiConstants.ID, type=CommandType.UUID, description="list the security group by the id provided", entityType=SecurityGroupResponse.class) private Long id; ///////////////////////////////////////////////////// diff --git a/api/src/org/apache/cloudstack/api/command/user/securitygroup/RevokeSecurityGroupEgressCmd.java b/api/src/org/apache/cloudstack/api/command/user/securitygroup/RevokeSecurityGroupEgressCmd.java index 97832181a12..023896bff8b 100644 --- a/api/src/org/apache/cloudstack/api/command/user/securitygroup/RevokeSecurityGroupEgressCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/securitygroup/RevokeSecurityGroupEgressCmd.java @@ -21,10 +21,10 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; +import org.apache.cloudstack.api.response.SecurityGroupRuleResponse; import org.apache.cloudstack.api.response.SuccessResponse; import com.cloud.async.AsyncJob; import com.cloud.event.EventTypes; @@ -41,8 +41,7 @@ public class RevokeSecurityGroupEgressCmd extends BaseAsyncCmd { // ////////////// API parameters ///////////////////// // /////////////////////////////////////////////////// - @IdentityMapper(entityTableName="security_group_rule") - @Parameter(name = ApiConstants.ID, type = CommandType.LONG, required = true, description = "The ID of the egress rule") + @Parameter(name = ApiConstants.ID, type = CommandType.UUID, required = true, description = "The ID of the egress rule", entityType=SecurityGroupRuleResponse.class) private Long id; // /////////////////////////////////////////////////// diff --git a/api/src/org/apache/cloudstack/api/command/user/securitygroup/RevokeSecurityGroupIngressCmd.java b/api/src/org/apache/cloudstack/api/command/user/securitygroup/RevokeSecurityGroupIngressCmd.java index 34c0004ded1..7d7d1155148 100644 --- a/api/src/org/apache/cloudstack/api/command/user/securitygroup/RevokeSecurityGroupIngressCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/securitygroup/RevokeSecurityGroupIngressCmd.java @@ -21,10 +21,10 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; +import org.apache.cloudstack.api.response.SecurityGroupRuleResponse; import org.apache.cloudstack.api.response.SuccessResponse; import com.cloud.async.AsyncJob; import com.cloud.event.EventTypes; @@ -41,8 +41,7 @@ public class RevokeSecurityGroupIngressCmd extends BaseAsyncCmd { // ////////////// API parameters ///////////////////// // /////////////////////////////////////////////////// - @IdentityMapper(entityTableName="security_group_rule") - @Parameter(name = ApiConstants.ID, type = CommandType.LONG, required = true, description = "The ID of the ingress rule") + @Parameter(name = ApiConstants.ID, type = CommandType.UUID, required = true, description = "The ID of the ingress rule", entityType=SecurityGroupRuleResponse.class) private Long id; // /////////////////////////////////////////////////// diff --git a/api/src/org/apache/cloudstack/api/response/SecurityGroupRuleResponse.java b/api/src/org/apache/cloudstack/api/response/SecurityGroupRuleResponse.java index 206e5fbac83..314c2db9c5b 100644 --- a/api/src/org/apache/cloudstack/api/response/SecurityGroupRuleResponse.java +++ b/api/src/org/apache/cloudstack/api/response/SecurityGroupRuleResponse.java @@ -17,10 +17,13 @@ package org.apache.cloudstack.api.response; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.Entity; +import com.cloud.network.security.SecurityGroupRules; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; import org.apache.cloudstack.api.BaseResponse; +@Entity(value = SecurityGroupRules.class) public class SecurityGroupRuleResponse extends BaseResponse { @SerializedName("ruleid") @Param(description="the id of the security group rule") private String ruleId; From de8aa86542c115362209c6c3c67e79d5616ec889 Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Mon, 17 Dec 2012 10:00:27 -0800 Subject: [PATCH 119/421] api: Work in progress code in ApiDispatcher to process annotations - All id params are now uuids, basically for documentation - Use injections and not component locator - Remove resourceType field checking, it's now called entityType - Fix indents Signed-off-by: Rohit Yadav --- server/src/com/cloud/api/ApiDispatcher.java | 62 ++++++++++----------- 1 file changed, 29 insertions(+), 33 deletions(-) diff --git a/server/src/com/cloud/api/ApiDispatcher.java b/server/src/com/cloud/api/ApiDispatcher.java index 37321a1dded..646bab9b7ce 100755 --- a/server/src/com/cloud/api/ApiDispatcher.java +++ b/server/src/com/cloud/api/ApiDispatcher.java @@ -55,6 +55,7 @@ import com.cloud.user.UserContext; import com.cloud.utils.DateUtil; import com.cloud.utils.NumbersUtil; import com.cloud.utils.component.ComponentLocator; +import com.cloud.utils.component.Inject; import com.cloud.utils.component.PluggableService; import com.cloud.utils.db.GenericDao; import com.cloud.utils.exception.CSExceptionErrorCode; @@ -68,25 +69,25 @@ public class ApiDispatcher { private static final Logger s_logger = Logger.getLogger(ApiDispatcher.class.getName()); ComponentLocator _locator; - AsyncJobManager _asyncMgr; - IdentityDao _identityDao; Long _createSnapshotQueueSizeLimit; - AccountManager _accountMgr; - + @Inject AsyncJobManager _asyncMgr = null; + @Inject IdentityDao _identityDao = null; + @Inject AccountManager _accountMgr = null; Map> _daoNameMap = new HashMap>(); // singleton class - private static ApiDispatcher s_instance = new ApiDispatcher(); + private static ApiDispatcher s_instance = ApiDispatcher.getInstance(); public static ApiDispatcher getInstance() { + if (s_instance == null) { + s_instance = ComponentLocator.inject(ApiDispatcher.class); + } return s_instance; } - private ApiDispatcher() { + protected ApiDispatcher() { + super(); _locator = ComponentLocator.getLocator(ManagementServer.Name); - _asyncMgr = _locator.getManager(AsyncJobManager.class); - _identityDao = _locator.getDao(IdentityDao.class); - ConfigurationDao configDao = _locator.getDao(ConfigurationDao.class); Map configs = configDao.getConfiguration(); String strSnapshotLimit = configs.get(Config.ConcurrentSnapshotsThresholdPerHost.key()); @@ -99,12 +100,8 @@ public class ApiDispatcher { _createSnapshotQueueSizeLimit = snapshotLimit; } } - _accountMgr = _locator.getManager(AccountManager.class); - _daoNameMap.put("com.cloud.network.Network", NetworkDao.class); _daoNameMap.put("com.cloud.template.VirtualMachineTemplate", VMTemplateDao.class); - - } public void dispatchCreateCmd(BaseAsyncCreateCmd cmd, Map params) { @@ -376,7 +373,6 @@ public class ApiDispatcher { @SuppressWarnings({ "unchecked", "rawtypes" }) public static void setupParameters(BaseCmd cmd, Map params, List entitiesToAccess) { Map unpackedParams = cmd.unpackParams(params); - if (cmd instanceof BaseListCmd) { Object pageSizeObj = unpackedParams.get(ApiConstants.PAGE_SIZE); @@ -456,25 +452,24 @@ public class ApiDispatcher { // and IllegalAccessException setting one of the parameters. throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Internal error executing API command " + cmd.getCommandName().substring(0, cmd.getCommandName().length() - 8)); } - - + //check access on the resource this field points to try { - ACL checkAccess = field.getAnnotation(ACL.class); - CommandType fieldType = parameterAnnotation.type(); - - - if(checkAccess != null){ - // Verify that caller can perform actions in behalf of vm owner - //acumulate all Controlled Entities together. - - //parse the array of resource types and in case of map check access on key or value or both as specified in @acl - //implement external dao for classes that need findByName - //for maps, specify access to be checkd on key or value. - - if(parameterAnnotation.resourceType() != null){ - Class[] entityList = parameterAnnotation.resourceType(); - for (Class entity : entityList){ + ACL checkAccess = field.getAnnotation(ACL.class); + CommandType fieldType = parameterAnnotation.type(); + + if (checkAccess != null) { + // Verify that caller can perform actions in behalf of vm owner + //acumulate all Controlled Entities together. + + //parse the array of resource types and in case of map check access on key or value or both as specified in @acl + //implement external dao for classes that need findByName + //for maps, specify access to be checkd on key or value. + + // find the controlled entity DBid by uuid + if (parameterAnnotation.entityType() != null) { + Class[] entityList = parameterAnnotation.entityType(); + for (Class entity : entityList){ if (ControlledEntity.class.isAssignableFrom(entity)) { if (s_logger.isDebugEnabled()) { s_logger.debug("entity name is:" + entity.getName()); @@ -515,6 +510,7 @@ public class ApiDispatcher { } break; case LONG: + case UUID: Long entityId = (Long) field.get(cmd); ControlledEntity entityObj = (ControlledEntity) daoClassInstance.findById(entityId); entitiesToAccess.add(entityObj); @@ -621,6 +617,7 @@ public class ApiDispatcher { field.set(cmdObj, listParam); break; case LONG: + case UUID: if (identityMapper != null) field.set(cmdObj, s_instance._identityDao.getIdentityId(identityMapper, paramObj.toString())); else @@ -688,8 +685,7 @@ public class ApiDispatcher { throw new CloudRuntimeException("Internal error at plugService for command " + cmd.getCommandName() + " [field " + field.getName() + " is not accessible]"); } } - - + public static Long getIdentiyId(String tableName, String token) { return s_instance._identityDao.getIdentityId(tableName, token); } From 348d3ae448f7373395a269acc597bf1b13b02b6c Mon Sep 17 00:00:00 2001 From: Min Chen Date: Mon, 17 Dec 2012 15:41:56 -0800 Subject: [PATCH 120/421] Conflicts: api/src/org/apache/cloudstack/api/response/AccountResponse.java Signed-off-by: Min Chen --- api/src/com/cloud/dc/DataCenter.java | 2 + api/src/com/cloud/domain/Domain.java | 2 + api/src/com/cloud/host/Host.java | 2 + api/src/com/cloud/org/Cluster.java | 2 + api/src/com/cloud/user/Account.java | 2 + .../api/response/AccountResponse.java | 19 ++- .../api/response/CapacityResponse.java | 30 ++--- .../api/response/ClusterResponse.java | 30 ++--- .../api/response/DomainResponse.java | 20 +-- .../cloudstack/api/response/HostResponse.java | 55 +++----- .../cloudstack/api/response/ZoneResponse.java | 7 +- .../api/test/CheckOnHostCommandTest.java | 6 + core/src/com/cloud/host/HostVO.java | 22 ++-- core/src/com/cloud/user/AccountVO.java | 42 +++--- .../src/com/cloud/api/ApiResponseHelper.java | 98 ++++++++------ server/src/com/cloud/dc/ClusterVO.java | 46 +++---- server/src/com/cloud/dc/DataCenterVO.java | 122 +++++++++--------- server/src/com/cloud/domain/DomainVO.java | 56 ++++---- 18 files changed, 290 insertions(+), 273 deletions(-) diff --git a/api/src/com/cloud/dc/DataCenter.java b/api/src/com/cloud/dc/DataCenter.java index 707cd34524e..617c6c1ceed 100644 --- a/api/src/com/cloud/dc/DataCenter.java +++ b/api/src/com/cloud/dc/DataCenter.java @@ -31,6 +31,8 @@ public interface DataCenter extends Grouping { long getId(); + String getUuid(); + String getDns1(); String getDns2(); diff --git a/api/src/com/cloud/domain/Domain.java b/api/src/com/cloud/domain/Domain.java index 8884749d358..94117d13f24 100644 --- a/api/src/com/cloud/domain/Domain.java +++ b/api/src/com/cloud/domain/Domain.java @@ -33,6 +33,8 @@ public interface Domain extends OwnedBy { long getId(); + String getUuid(); + Long getParent(); void setParent(Long parent); diff --git a/api/src/com/cloud/host/Host.java b/api/src/com/cloud/host/Host.java index 8c95336d46a..2783cd9817d 100755 --- a/api/src/com/cloud/host/Host.java +++ b/api/src/com/cloud/host/Host.java @@ -66,6 +66,8 @@ public interface Host extends StateObject { */ long getId(); + String getUuid(); + /** * @return name of the machine. */ diff --git a/api/src/com/cloud/org/Cluster.java b/api/src/com/cloud/org/Cluster.java index 7fe64af59a5..db73db4bba2 100644 --- a/api/src/com/cloud/org/Cluster.java +++ b/api/src/com/cloud/org/Cluster.java @@ -27,6 +27,8 @@ public interface Cluster extends Grouping { long getId(); + String getUuid(); + String getName(); long getDataCenterId(); diff --git a/api/src/com/cloud/user/Account.java b/api/src/com/cloud/user/Account.java index 398091031ec..f28fbd125d0 100755 --- a/api/src/com/cloud/user/Account.java +++ b/api/src/com/cloud/user/Account.java @@ -51,6 +51,8 @@ public interface Account extends ControlledEntity { public long getId(); + public String getUuid(); + public String getAccountName(); public short getType(); diff --git a/api/src/org/apache/cloudstack/api/response/AccountResponse.java b/api/src/org/apache/cloudstack/api/response/AccountResponse.java index 93d860d00c3..dcb9142f2e8 100644 --- a/api/src/org/apache/cloudstack/api/response/AccountResponse.java +++ b/api/src/org/apache/cloudstack/api/response/AccountResponse.java @@ -25,7 +25,6 @@ import org.apache.cloudstack.api.Entity; import com.cloud.domain.Domain; import com.cloud.serializer.Param; import com.cloud.user.Account; -import com.cloud.utils.IdentityProxy; import com.google.gson.annotations.SerializedName; import org.apache.cloudstack.api.BaseResponse; @@ -33,7 +32,7 @@ import org.apache.cloudstack.api.BaseResponse; @Entity(value = Account.class) public class AccountResponse extends BaseResponse { @SerializedName(ApiConstants.ID) @Param(description="the id of the account") - private IdentityProxy id = new IdentityProxy("account"); + private String id; @SerializedName(ApiConstants.NAME) @Param(description="the name of the account") private String name; @@ -42,13 +41,13 @@ public class AccountResponse extends BaseResponse { private Short accountType; @SerializedName(ApiConstants.DOMAIN_ID) @Param(description="id of the Domain the account belongs too") - private IdentityProxy domainId = new IdentityProxy("domain"); + private String domainId; @SerializedName(ApiConstants.DOMAIN) @Param(description="name of the Domain the account belongs too") private String domainName; @SerializedName(ApiConstants.DEFAULT_ZONE_ID) @Param(description="the default zone of the account") - private IdentityProxy defaultZoneId = new IdentityProxy("data_center"); + private String defaultZoneId; @SerializedName(ApiConstants.RECEIVED_BYTES) @Param(description="the total number of network traffic bytes received") private Long bytesReceived; @@ -150,8 +149,8 @@ public class AccountResponse extends BaseResponse { @SerializedName(ApiConstants.ACCOUNT_DETAILS) @Param(description="details for the account") private Map details; - public void setId(Long id) { - this.id.setValue(id); + public void setId(String id) { + this.id = id; } public void setName(String name) { @@ -162,8 +161,8 @@ public class AccountResponse extends BaseResponse { this.accountType = accountType; } - public void setDomainId(Long domainId) { - this.domainId.setValue(domainId); + public void setDomainId(String domainId) { + this.domainId = domainId; } public void setDomainName(String domainName) { @@ -290,7 +289,7 @@ public class AccountResponse extends BaseResponse { this.networkAvailable = networkAvailable; } - public void setDefaultZone(Long defaultZoneId) { - this.defaultZoneId.setValue(defaultZoneId); + public void setDefaultZone(String defaultZoneId) { + this.defaultZoneId = defaultZoneId; } } diff --git a/api/src/org/apache/cloudstack/api/response/CapacityResponse.java b/api/src/org/apache/cloudstack/api/response/CapacityResponse.java index a826d5594c4..000705813fb 100644 --- a/api/src/org/apache/cloudstack/api/response/CapacityResponse.java +++ b/api/src/org/apache/cloudstack/api/response/CapacityResponse.java @@ -27,19 +27,19 @@ public class CapacityResponse extends BaseResponse { private Short capacityType; @SerializedName(ApiConstants.ZONE_ID) @Param(description="the Zone ID") - private IdentityProxy zoneId = new IdentityProxy("data_center"); + private String zoneId; @SerializedName(ApiConstants.ZONE_NAME) @Param(description="the Zone name") private String zoneName; @SerializedName(ApiConstants.POD_ID) @Param(description="the Pod ID") - private IdentityProxy podId = new IdentityProxy("host_pod_ref"); + private String podId; @SerializedName("podname") @Param(description="the Pod name") private String podName; @SerializedName(ApiConstants.CLUSTER_ID) @Param(description="the Cluster ID") - private IdentityProxy clusterId = new IdentityProxy("cluster"); + private String clusterId; @SerializedName("clustername") @Param(description="the Cluster name") private String clusterName; @@ -61,12 +61,12 @@ public class CapacityResponse extends BaseResponse { this.capacityType = capacityType; } - public Long getZoneId() { - return zoneId.getValue(); + public String getZoneId() { + return zoneId; } - public void setZoneId(Long zoneId) { - this.zoneId.setValue(zoneId); + public void setZoneId(String zoneId) { + this.zoneId = zoneId; } public String getZoneName() { @@ -77,12 +77,12 @@ public class CapacityResponse extends BaseResponse { this.zoneName = zoneName; } - public Long getPodId() { - return podId.getValue(); + public String getPodId() { + return podId; } - public void setPodId(Long podId) { - this.podId.setValue(podId); + public void setPodId(String podId) { + this.podId = podId; } public String getPodName() { @@ -93,12 +93,12 @@ public class CapacityResponse extends BaseResponse { this.podName = podName; } - public Long getClusterId() { - return clusterId.getValue(); + public String getClusterId() { + return clusterId; } - public void setClusterId(Long clusterId) { - this.clusterId.setValue(clusterId); + public void setClusterId(String clusterId) { + this.clusterId = clusterId; } public String getClusterName() { diff --git a/api/src/org/apache/cloudstack/api/response/ClusterResponse.java b/api/src/org/apache/cloudstack/api/response/ClusterResponse.java index 1e15653f7c6..fee550cf029 100644 --- a/api/src/org/apache/cloudstack/api/response/ClusterResponse.java +++ b/api/src/org/apache/cloudstack/api/response/ClusterResponse.java @@ -32,19 +32,19 @@ import org.apache.cloudstack.api.BaseResponse; @Entity(value = Cluster.class) public class ClusterResponse extends BaseResponse { @SerializedName(ApiConstants.ID) @Param(description="the cluster ID") - private IdentityProxy id = new IdentityProxy("cluster"); + private String id; @SerializedName(ApiConstants.NAME) @Param(description="the cluster name") private String name; @SerializedName(ApiConstants.POD_ID) @Param(description="the Pod ID of the cluster") - private IdentityProxy podId = new IdentityProxy("host_pod_ref"); + private String podId; @SerializedName("podname") @Param(description="the Pod name of the cluster") private String podName; @SerializedName(ApiConstants.ZONE_ID) @Param(description="the Zone ID of the cluster") - private IdentityProxy zoneId = new IdentityProxy("data_center"); + private String zoneId; @SerializedName(ApiConstants.ZONE_NAME) @Param(description="the Zone name of the cluster") private String zoneName; @@ -64,12 +64,12 @@ public class ClusterResponse extends BaseResponse { @SerializedName("capacity") @Param(description="the capacity of the Cluster", responseObject = CapacityResponse.class) private List capacitites; - 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 String getName() { @@ -80,12 +80,12 @@ public class ClusterResponse extends BaseResponse { this.name = name; } - public Long getPodId() { - return podId.getValue(); + public String getPodId() { + return podId; } - public void setPodId(Long podId) { - this.podId.setValue(podId); + public void setPodId(String podId) { + this.podId = podId; } public String getPodName() { @@ -96,12 +96,12 @@ public class ClusterResponse extends BaseResponse { this.podName = podName; } - public Long getZoneId() { - return zoneId.getValue(); + public String getZoneId() { + return zoneId; } - public void setZoneId(Long zoneId) { - this.zoneId.setValue(zoneId); + public void setZoneId(String zoneId) { + this.zoneId = zoneId; } public String getZoneName() { diff --git a/api/src/org/apache/cloudstack/api/response/DomainResponse.java b/api/src/org/apache/cloudstack/api/response/DomainResponse.java index e97653ba777..2888f5ed62b 100644 --- a/api/src/org/apache/cloudstack/api/response/DomainResponse.java +++ b/api/src/org/apache/cloudstack/api/response/DomainResponse.java @@ -27,7 +27,7 @@ import com.google.gson.annotations.SerializedName; @Entity(value = Domain.class) public class DomainResponse extends BaseResponse { @SerializedName(ApiConstants.ID) @Param(description="the ID of the domain") - private IdentityProxy id = new IdentityProxy("domain"); + private String id; @SerializedName(ApiConstants.NAME) @Param(description="the name of the domain") private String domainName; @@ -36,7 +36,7 @@ public class DomainResponse extends BaseResponse { private Integer level; @SerializedName("parentdomainid") @Param(description="the domain ID of the parent domain") - private IdentityProxy parentDomainId = new IdentityProxy("domain"); + private String parentDomainId; @SerializedName("parentdomainname") @Param(description="the domain name of the parent domain") private String parentDomainName; @@ -50,12 +50,12 @@ public class DomainResponse extends BaseResponse { @SerializedName(ApiConstants.PATH) @Param(description="the path of the domain") private String path; - public Long getId() { - return id.getValue(); + public String getId() { + return this.id; } - public void setId(Long id) { - this.id.setValue(id); + public void setId(String id) { + this.id = id; } public String getDomainName() { @@ -74,12 +74,12 @@ public class DomainResponse extends BaseResponse { this.level = level; } - public Long getParentDomainId() { - return parentDomainId.getValue(); + public String getParentDomainId() { + return parentDomainId; } - public void setParentDomainId(Long parentDomainId) { - this.parentDomainId.setValue(parentDomainId); + public void setParentDomainId(String parentDomainId) { + this.parentDomainId = parentDomainId; } public String getParentDomainName() { diff --git a/api/src/org/apache/cloudstack/api/response/HostResponse.java b/api/src/org/apache/cloudstack/api/response/HostResponse.java index 8b4cd3eeb95..6b74b4803aa 100644 --- a/api/src/org/apache/cloudstack/api/response/HostResponse.java +++ b/api/src/org/apache/cloudstack/api/response/HostResponse.java @@ -29,7 +29,7 @@ import org.apache.cloudstack.api.BaseResponse; public class HostResponse extends BaseResponse { @SerializedName(ApiConstants.ID) @Param(description="the ID of the host") - private IdentityProxy id = new IdentityProxy("host"); + private String id; @SerializedName(ApiConstants.NAME) @Param(description="the name of the host") private String name; @@ -44,7 +44,7 @@ public class HostResponse extends BaseResponse { private Host.Type hostType; @SerializedName("oscategoryid") @Param(description="the OS category ID of the host") - private IdentityProxy osCategoryId = new IdentityProxy("guest_os_category"); + private String osCategoryId; @SerializedName("oscategoryname") @Param(description="the OS category name of the host") private String osCategoryName; @@ -53,13 +53,13 @@ public class HostResponse extends BaseResponse { private String ipAddress; @SerializedName(ApiConstants.ZONE_ID) @Param(description="the Zone ID of the host") - private IdentityProxy zoneId = new IdentityProxy("data_center"); + private String zoneId; @SerializedName(ApiConstants.ZONE_NAME) @Param(description="the Zone name of the host") private String zoneName; @SerializedName(ApiConstants.POD_ID) @Param(description="the Pod ID of the host") - private IdentityProxy podId = new IdentityProxy("host_pod_ref"); + private String podId; @SerializedName("podname") @Param(description="the Pod name of the host") private String podName; @@ -119,7 +119,7 @@ public class HostResponse extends BaseResponse { private Long managementServerId; @SerializedName("clusterid") @Param(description="the cluster ID of the host") - private IdentityProxy clusterId = new IdentityProxy("cluster"); + private String clusterId; @SerializedName("clustername") @Param(description="the cluster name of the host") private String clusterName; @@ -158,17 +158,12 @@ public class HostResponse extends BaseResponse { private Boolean haHost; - @Override - public Long getObjectId() { - return getId(); + public String getId() { + return id; } - public Long getId() { - return id.getValue(); - } - - public void setId(Long id) { - this.id.setValue(id); + public void setId(String id) { + this.id = id; } public void setName(String name) { @@ -187,8 +182,8 @@ public class HostResponse extends BaseResponse { this.hostType = hostType; } - public void setOsCategoryId(Long osCategoryId) { - this.osCategoryId.setValue(osCategoryId); + public void setOsCategoryId(String osCategoryId) { + this.osCategoryId = osCategoryId; } public void setOsCategoryName(String osCategoryName) { @@ -199,16 +194,16 @@ public class HostResponse extends BaseResponse { this.ipAddress = ipAddress; } - 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 setPodId(Long podId) { - this.podId.setValue(podId); + public void setPodId(String podId) { + this.podId = podId; } public void setPodName(String podName) { @@ -287,8 +282,8 @@ public class HostResponse extends BaseResponse { this.managementServerId = managementServerId; } - public void setClusterId(Long clusterId) { - this.clusterId.setValue(clusterId); + public void setClusterId(String clusterId) { + this.clusterId = clusterId; } public void setClusterName(String clusterName) { @@ -348,22 +343,6 @@ public class HostResponse extends BaseResponse { this.hypervisorVersion = hypervisorVersion; } - public void setOsCategoryId(IdentityProxy osCategoryId) { - this.osCategoryId = osCategoryId; - } - - public void setZoneId(IdentityProxy zoneId) { - this.zoneId = zoneId; - } - - public void setPodId(IdentityProxy podId) { - this.podId = podId; - } - - public void setClusterId(IdentityProxy clusterId) { - this.clusterId = clusterId; - } - public void setHaHost(Boolean haHost) { this.haHost = haHost; } diff --git a/api/src/org/apache/cloudstack/api/response/ZoneResponse.java b/api/src/org/apache/cloudstack/api/response/ZoneResponse.java index 22ab827cd7d..216247267f2 100644 --- a/api/src/org/apache/cloudstack/api/response/ZoneResponse.java +++ b/api/src/org/apache/cloudstack/api/response/ZoneResponse.java @@ -22,7 +22,6 @@ import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseResponse; import org.apache.cloudstack.api.Entity; import com.cloud.dc.DataCenter; -import com.cloud.utils.IdentityProxy; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; @@ -30,7 +29,7 @@ import com.google.gson.annotations.SerializedName; @Entity(value = DataCenter.class) public class ZoneResponse extends BaseResponse { @SerializedName(ApiConstants.ID) @Param(description="Zone id") - private IdentityProxy id = new IdentityProxy("data_center"); + private String id; @SerializedName(ApiConstants.NAME) @Param(description="Zone name") private String name; @@ -93,8 +92,8 @@ public class ZoneResponse extends BaseResponse { @SerializedName(ApiConstants.LOCAL_STORAGE_ENABLED) @Param(description="true if local storage offering enabled, false otherwise") private boolean localStorageEnabled; - public void setId(Long id) { - this.id.setValue(id); + public void setId(String id) { + this.id = id; } public void setName(String name) { diff --git a/api/test/src/com/cloud/agent/api/test/CheckOnHostCommandTest.java b/api/test/src/com/cloud/agent/api/test/CheckOnHostCommandTest.java index a255399a9a1..fd948a93f61 100644 --- a/api/test/src/com/cloud/agent/api/test/CheckOnHostCommandTest.java +++ b/api/test/src/com/cloud/agent/api/test/CheckOnHostCommandTest.java @@ -43,6 +43,12 @@ public class CheckOnHostCommandTest { return 101L; }; + + @Override + public String getUuid() { + return "101"; + } + public String getName() { return "hostName"; }; diff --git a/core/src/com/cloud/host/HostVO.java b/core/src/com/cloud/host/HostVO.java index b8a26b7e79c..850211e3e60 100755 --- a/core/src/com/cloud/host/HostVO.java +++ b/core/src/com/cloud/host/HostVO.java @@ -48,7 +48,7 @@ import com.cloud.utils.db.GenericDao; @Table(name="host") @Inheritance(strategy=InheritanceType.TABLE_PER_CLASS) @DiscriminatorColumn(name="type", discriminatorType=DiscriminatorType.STRING, length=32) -public class HostVO implements Host, Identity { +public class HostVO implements Host { @Id @GeneratedValue(strategy=GenerationType.IDENTITY) @Column(name="id") @@ -128,20 +128,20 @@ public class HostVO implements Host, Identity { @Column(name="setup") private boolean setup = false; - + @Column(name="resource_state", nullable=false) @Enumerated(value=EnumType.STRING) private ResourceState resourceState; @Column(name="hypervisor_version") private String hypervisorVersion; - + @Column(name="update_count", updatable = true, nullable=false) protected long updated; // This field should be updated everytime the state is updated. There's no set method in the vo object because it is done with in the dao code. @Column(name="uuid") private String uuid; - + // This is a delayed load value. If the value is null, // then this field has not been loaded yet. // Call host dao to load it. @@ -695,36 +695,36 @@ public class HostVO implements Host, Identity { public Status getState() { return status; } - + @Override public ResourceState getResourceState() { return resourceState; } - + public void setResourceState(ResourceState state) { resourceState = state; } - + @Override public boolean isInMaintenanceStates() { return (getResourceState() == ResourceState.Maintenance || getResourceState() == ResourceState.ErrorInMaintenance || getResourceState() == ResourceState.PrepareForMaintenance); } - + public long getUpdated() { return updated; } - + public long incrUpdated() { updated++; return updated; } - + @Override public String getUuid() { return this.uuid; } - + public void setUuid(String uuid) { this.uuid = uuid; } diff --git a/core/src/com/cloud/user/AccountVO.java b/core/src/com/cloud/user/AccountVO.java index 329a3312878..f5d98844c6f 100644 --- a/core/src/com/cloud/user/AccountVO.java +++ b/core/src/com/cloud/user/AccountVO.java @@ -33,7 +33,7 @@ import com.cloud.utils.db.GenericDao; @Entity @Table(name="account") -public class AccountVO implements Account, Identity { +public class AccountVO implements Account { @Id @GeneratedValue(strategy=GenerationType.IDENTITY) @Column(name="id") @@ -54,28 +54,28 @@ public class AccountVO implements Account, Identity { @Column(name=GenericDao.REMOVED_COLUMN) private Date removed; - + @Column(name="cleanup_needed") private boolean needsCleanup = false; - + @Column(name="network_domain") private String networkDomain; @Column(name="uuid") private String uuid; - + @Column(name="default_zone_id") private Long defaultZoneId = null; public AccountVO() { this.uuid = UUID.randomUUID().toString(); } - + public AccountVO(long id) { this.id = id; this.uuid = UUID.randomUUID().toString(); } - + public AccountVO(String accountName, long domainId, String networkDomain, short type) { this.accountName = accountName; this.domainId = domainId; @@ -84,11 +84,11 @@ public class AccountVO implements Account, Identity { this.state = State.enabled; this.uuid = UUID.randomUUID().toString(); } - + public void setNeedsCleanup(boolean value) { needsCleanup = value; } - + public boolean getNeedsCleanup() { return needsCleanup; } @@ -102,16 +102,16 @@ public class AccountVO implements Account, Identity { public String getAccountName() { return accountName; } - + public void setAccountName(String accountName) { this.accountName = accountName; } - + @Override public short getType() { return type; } - + public void setType(short type) { this.type = type; } @@ -120,16 +120,16 @@ public class AccountVO implements Account, Identity { public long getDomainId() { return domainId; } - + public void setDomainId(long domainId) { this.domainId = domainId; } - + @Override public Long getDefaultZoneId() { return defaultZoneId; } - + public void setDefaultZoneId(Long defaultZoneId) { this.defaultZoneId = defaultZoneId; } @@ -138,7 +138,7 @@ public class AccountVO implements Account, Identity { public State getState() { return state; } - + public void setState(State state) { this.state = state; } @@ -147,31 +147,31 @@ public class AccountVO implements Account, Identity { public Date getRemoved() { return removed; } - + @Override public long getAccountId() { return id; } - + @Override public String toString() { return new StringBuilder("Acct[").append(id).append("-").append(accountName).append("]").toString(); } - + @Override public String getNetworkDomain() { return networkDomain; } - + public void setNetworkDomain(String networkDomain) { this.networkDomain = networkDomain; } - + @Override public String getUuid() { return this.uuid; } - + public void setUuid(String uuid) { this.uuid = uuid; } diff --git a/server/src/com/cloud/api/ApiResponseHelper.java b/server/src/com/cloud/api/ApiResponseHelper.java index 903799d3f0f..51c90171c1e 100755 --- a/server/src/com/cloud/api/ApiResponseHelper.java +++ b/server/src/com/cloud/api/ApiResponseHelper.java @@ -259,14 +259,20 @@ public class ApiResponseHelper implements ResponseGenerator { public AccountResponse createAccountResponse(Account account) { boolean accountIsAdmin = (account.getType() == Account.ACCOUNT_TYPE_ADMIN); AccountResponse accountResponse = new AccountResponse(); - accountResponse.setId(account.getId()); + accountResponse.setId(account.getUuid()); accountResponse.setName(account.getAccountName()); accountResponse.setAccountType(account.getType()); - accountResponse.setDomainId(account.getDomainId()); - accountResponse.setDomainName(ApiDBUtils.findDomainById(account.getDomainId()).getName()); + Domain domain = ApiDBUtils.findDomainById(account.getDomainId()); + if (domain != null) { + accountResponse.setDomainId(domain.getUuid()); + accountResponse.setDomainName(domain.getName()); + } accountResponse.setState(account.getState().toString()); accountResponse.setNetworkDomain(account.getNetworkDomain()); - accountResponse.setDefaultZone(account.getDefaultZoneId()); + DataCenterVO dc = ApiDBUtils.findZoneById(account.getDefaultZoneId()); + if (dc != null) { + accountResponse.setDefaultZone(dc.getUuid()); + } // get network stat List stats = ApiDBUtils.listUserStatsBy(account.getId()); @@ -415,10 +421,10 @@ public class ApiResponseHelper implements ResponseGenerator { public DomainResponse createDomainResponse(Domain domain) { DomainResponse domainResponse = new DomainResponse(); domainResponse.setDomainName(domain.getName()); - domainResponse.setId(domain.getId()); + domainResponse.setId(domain.getUuid()); domainResponse.setLevel(domain.getLevel()); domainResponse.setNetworkDomain(domain.getNetworkDomain()); - domainResponse.setParentDomainId(domain.getParent()); + domainResponse.setParentDomainId(ApiDBUtils.findDomainById(domain.getParent()).getUuid()); StringBuilder domainPath = new StringBuilder("ROOT"); (domainPath.append(domain.getPath())).deleteCharAt(domainPath.length() - 1); domainResponse.setPath(domainPath.toString()); @@ -583,18 +589,30 @@ public class ApiResponseHelper implements ResponseGenerator { @Override public HostResponse createHostResponse(Host host, EnumSet details) { HostResponse hostResponse = new HostResponse(); - hostResponse.setId(host.getId()); + hostResponse.setId(host.getUuid()); hostResponse.setCapabilities(host.getCapabilities()); - hostResponse.setClusterId(host.getClusterId()); + ClusterVO cluster = null; + if (host.getClusterId() != null) { + cluster = ApiDBUtils.findClusterById(host.getClusterId()); + if (cluster != null) { + hostResponse.setClusterId(cluster.getUuid()); + } + } hostResponse.setCpuNumber(host.getCpus()); - hostResponse.setZoneId(host.getDataCenterId()); + DataCenterVO zone = ApiDBUtils.findZoneById(host.getDataCenterId()); + if (zone != null) { + hostResponse.setZoneId(zone.getUuid()); + } hostResponse.setDisconnectedOn(host.getDisconnectedOn()); hostResponse.setHypervisor(host.getHypervisorType()); hostResponse.setHostType(host.getType()); hostResponse.setLastPinged(new Date(host.getLastPinged())); hostResponse.setManagementServerId(host.getManagementServerId()); hostResponse.setName(host.getName()); - hostResponse.setPodId(host.getPodId()); + HostPodVO pod = ApiDBUtils.findPodById(host.getPodId()); + if (pod != null) { + hostResponse.setPodId(pod.getUuid()); + } hostResponse.setRemoved(host.getRemoved()); hostResponse.setCpuSpeed(host.getSpeed()); hostResponse.setState(host.getStatus()); @@ -607,20 +625,18 @@ public class ApiResponseHelper implements ResponseGenerator { GuestOSCategoryVO guestOSCategory = ApiDBUtils.getHostGuestOSCategory(host.getId()); if (guestOSCategory != null) { - hostResponse.setOsCategoryId(guestOSCategory.getId()); + hostResponse.setOsCategoryId(guestOSCategory.getUuid()); hostResponse.setOsCategoryName(guestOSCategory.getName()); } - hostResponse.setZoneName(ApiDBUtils.findZoneById(host.getDataCenterId()).getName()); - - if (host.getPodId() != null) { - HostPodVO pod = ApiDBUtils.findPodById(host.getPodId()); - if (pod != null) { - hostResponse.setPodName(pod.getName()); - } + if (zone != null) { + hostResponse.setZoneName(zone.getName()); } - if (host.getClusterId() != null) { - ClusterVO cluster = ApiDBUtils.findClusterById(host.getClusterId()); + if (pod != null) { + hostResponse.setPodName(pod.getName()); + } + + if (cluster != null) { hostResponse.setClusterName(cluster.getName()); hostResponse.setClusterType(cluster.getClusterType().toString()); } @@ -935,7 +951,7 @@ public class ApiResponseHelper implements ResponseGenerator { public ZoneResponse createZoneResponse(DataCenter dataCenter, Boolean showCapacities) { Account account = UserContext.current().getCaller(); ZoneResponse zoneResponse = new ZoneResponse(); - zoneResponse.setId(dataCenter.getId()); + zoneResponse.setId(dataCenter.getUuid()); zoneResponse.setName(dataCenter.getName()); zoneResponse.setSecurityGroupsEnabled(ApiDBUtils.isSecurityGroupEnabledInZone(dataCenter.getId())); zoneResponse.setLocalStorageEnabled(dataCenter.isLocalStorageEnabled()); @@ -1216,20 +1232,24 @@ public class ApiResponseHelper implements ResponseGenerator { @Override public ClusterResponse createClusterResponse(Cluster cluster, Boolean showCapacities) { ClusterResponse clusterResponse = new ClusterResponse(); - clusterResponse.setId(cluster.getId()); + clusterResponse.setId(cluster.getUuid()); clusterResponse.setName(cluster.getName()); - clusterResponse.setPodId(cluster.getPodId()); - clusterResponse.setZoneId(cluster.getDataCenterId()); + HostPodVO pod = ApiDBUtils.findPodById(cluster.getPodId()); + if (pod != null) { + clusterResponse.setPodId(pod.getUuid()); + clusterResponse.setPodName(pod.getName()); + } + DataCenterVO dc = ApiDBUtils.findZoneById(cluster.getDataCenterId()); + if (dc != null) { + clusterResponse.setZoneId(dc.getUuid()); + clusterResponse.setZoneName(dc.getName()); + } clusterResponse.setHypervisorType(cluster.getHypervisorType().toString()); clusterResponse.setClusterType(cluster.getClusterType().toString()); clusterResponse.setAllocationState(cluster.getAllocationState().toString()); clusterResponse.setManagedState(cluster.getManagedState().toString()); - HostPodVO pod = ApiDBUtils.findPodById(cluster.getPodId()); - if (pod != null) { - clusterResponse.setPodName(pod.getName()); - } - DataCenterVO zone = ApiDBUtils.findZoneById(cluster.getDataCenterId()); - clusterResponse.setZoneName(zone.getName()); + + if (showCapacities != null && showCapacities) { List capacities = ApiDBUtils.getCapacityByClusterPodZone(null, null, cluster.getId()); Set capacityResponses = new HashSet(); @@ -2196,26 +2216,30 @@ public class ApiResponseHelper implements ResponseGenerator { capacityResponse.setCapacityType(summedCapacity.getCapacityType()); capacityResponse.setCapacityUsed(summedCapacity.getUsedCapacity()); if (summedCapacity.getPodId() != null) { - capacityResponse.setPodId(summedCapacity.getPodId()); + capacityResponse.setPodId(ApiDBUtils.findPodById(summedCapacity.getPodId()).getUuid()); HostPodVO pod = ApiDBUtils.findPodById(summedCapacity.getPodId()); if (pod != null) { + capacityResponse.setPodId(pod.getUuid()); capacityResponse.setPodName(pod.getName()); } } if (summedCapacity.getClusterId() != null) { - capacityResponse.setClusterId(summedCapacity.getClusterId()); ClusterVO cluster = ApiDBUtils.findClusterById(summedCapacity.getClusterId()); if (cluster != null) { + capacityResponse.setClusterId(cluster.getUuid()); capacityResponse.setClusterName(cluster.getName()); if (summedCapacity.getPodId() == null) { - long podId = cluster.getPodId(); - capacityResponse.setPodId(podId); - capacityResponse.setPodName(ApiDBUtils.findPodById(podId).getName()); + HostPodVO pod = ApiDBUtils.findPodById(cluster.getPodId()); + capacityResponse.setPodId(pod.getUuid()); + capacityResponse.setPodName(pod.getName()); } } } - capacityResponse.setZoneId(summedCapacity.getDataCenterId()); - capacityResponse.setZoneName(ApiDBUtils.findZoneById(summedCapacity.getDataCenterId()).getName()); + DataCenterVO zone = ApiDBUtils.findZoneById(summedCapacity.getDataCenterId()); + if (zone != null) { + capacityResponse.setZoneId(zone.getUuid()); + capacityResponse.setZoneName(zone.getName()); + } if (summedCapacity.getUsedPercentage() != null){ capacityResponse.setPercentUsed(format.format(summedCapacity.getUsedPercentage() * 100f)); } else if (summedCapacity.getTotalCapacity() != 0) { diff --git a/server/src/com/cloud/dc/ClusterVO.java b/server/src/com/cloud/dc/ClusterVO.java index ce74fb8e277..28e489313e5 100644 --- a/server/src/com/cloud/dc/ClusterVO.java +++ b/server/src/com/cloud/dc/ClusterVO.java @@ -38,53 +38,53 @@ import com.cloud.utils.db.GenericDao; @Entity @Table(name="cluster") -public class ClusterVO implements Cluster, Identity { +public class ClusterVO implements Cluster { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name="id") long id; - + @Column(name="name") String name; - + @Column(name="guid") String guid; - + @Column(name="data_center_id") long dataCenterId; - + @Column(name="pod_id") long podId; - + @Column(name="hypervisor_type") String hypervisorType; @Column(name="cluster_type") @Enumerated(value=EnumType.STRING) Cluster.ClusterType clusterType; - + @Column(name="allocation_state") @Enumerated(value=EnumType.STRING) AllocationState allocationState; - + @Column(name="managed_state") @Enumerated(value=EnumType.STRING) ManagedState managedState; - + @Column(name=GenericDao.REMOVED_COLUMN) private Date removed; @Column(name="uuid") String uuid; - + public ClusterVO() { clusterType = Cluster.ClusterType.CloudManaged; allocationState = Grouping.AllocationState.Enabled; - + this.uuid = UUID.randomUUID().toString(); } - + public ClusterVO(long dataCenterId, long podId, String name) { this.dataCenterId = dataCenterId; this.podId = podId; @@ -110,23 +110,23 @@ public class ClusterVO implements Cluster, Identity { public long getPodId() { return podId; } - + public Cluster.ClusterType getClusterType() { return clusterType; } - + public void setClusterType(Cluster.ClusterType clusterType) { this.clusterType = clusterType; } - + public AllocationState getAllocationState() { return allocationState; } - + public void setAllocationState(AllocationState allocationState) { this.allocationState = allocationState; } - + public ManagedState getManagedState() { return managedState; } @@ -143,7 +143,7 @@ public class ClusterVO implements Cluster, Identity { public int hashCode() { return NumbersUtil.hash(id); } - + @Override public boolean equals(Object obj) { if (!(obj instanceof ClusterVO)) { @@ -152,7 +152,7 @@ public class ClusterVO implements Cluster, Identity { ClusterVO that = (ClusterVO)obj; return this.id == that.id; } - + public HypervisorType getHypervisorType() { return HypervisorType.getType(hypervisorType); } @@ -160,11 +160,11 @@ public class ClusterVO implements Cluster, Identity { public void setHypervisorType(String hy) { hypervisorType = hy; } - + public String getGuid() { return guid; } - + public void setGuid(String guid) { this.guid = guid; } @@ -176,12 +176,12 @@ public class ClusterVO implements Cluster, Identity { public void setName(String name) { this.name = name; } - + @Override public String getUuid() { return this.uuid; } - + public void setUuid(String uuid) { this.uuid = uuid; } diff --git a/server/src/com/cloud/dc/DataCenterVO.java b/server/src/com/cloud/dc/DataCenterVO.java index 088d44f75b9..d156927b840 100644 --- a/server/src/com/cloud/dc/DataCenterVO.java +++ b/server/src/com/cloud/dc/DataCenterVO.java @@ -5,7 +5,7 @@ // 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, @@ -39,91 +39,91 @@ import com.cloud.utils.db.GenericDao; @Entity @Table(name="data_center") -public class DataCenterVO implements DataCenter, Identity { - +public class DataCenterVO implements DataCenter { + @Id @GeneratedValue(strategy=GenerationType.IDENTITY) @Column(name="id") private long id; - + @Column(name="name") private String name = null; - + @Column(name="description") private String description = null; - + @Column(name="dns1") private String dns1 = null; - + @Column(name="dns2") private String dns2 = null; - + @Column(name="internal_dns1") private String internalDns1 = null; - + @Column(name="internal_dns2") private String internalDns2 = null; - + @Column(name="router_mac_address", updatable = false, nullable=false) private String routerMacAddress = "02:00:00:00:00:01"; - + @Column(name="guest_network_cidr") private String guestNetworkCidr = null; - + @Column(name="domain_id") private Long domainId = null; @Column(name="domain") private String domain; - + @Column(name="networktype") - @Enumerated(EnumType.STRING) + @Enumerated(EnumType.STRING) NetworkType networkType; - + @Column(name="dns_provider") private String dnsProvider; - + @Column(name="dhcp_provider") private String dhcpProvider; - + @Column(name="gateway_provider") private String gatewayProvider; - + @Column(name="vpn_provider") private String vpnProvider; - + @Column(name="userdata_provider") private String userDataProvider; - + @Column(name="lb_provider") private String loadBalancerProvider; - + @Column(name="firewall_provider") private String firewallProvider; - + @Column(name="mac_address", nullable=false) @TableGenerator(name="mac_address_sq", table="data_center", pkColumnName="id", valueColumnName="mac_address", allocationSize=1) private long macAddress = 1; - + @Column(name="zone_token") - private String zoneToken; - + private String zoneToken; + @Column(name=GenericDao.REMOVED_COLUMN) private Date removed; - + // This is a delayed load value. If the value is null, // then this field has not been loaded yet. // Call the dao to load it. @Transient Map details; - + @Column(name="allocation_state") @Enumerated(value=EnumType.STRING) AllocationState allocationState; @Column(name="uuid") - private String uuid; - + private String uuid; + @Column(name="is_security_group_enabled") boolean securityGroupEnabled; @@ -168,13 +168,13 @@ public class DataCenterVO implements DataCenter, Identity { @Override public String getFirewallProvider() { - return firewallProvider; + return firewallProvider; } public void setFirewallProvider(String firewallProvider) { this.firewallProvider = firewallProvider; } - + public DataCenterVO(long id, String name, String description, String dns1, String dns2, String dns3, String dns4, String guestCidr, String domain, Long domainId, NetworkType zoneType, String zoneToken, String domainSuffix) { this(name, description, dns1, dns2, dns3, dns4, guestCidr, domain, domainId, zoneType, zoneToken, domainSuffix, false, false); this.id = id; @@ -216,7 +216,7 @@ public class DataCenterVO implements DataCenter, Identity { this.domain = domainSuffix; this.uuid = UUID.randomUUID().toString(); } - + @Override public String getVpnProvider() { return vpnProvider; @@ -234,13 +234,13 @@ public class DataCenterVO implements DataCenter, Identity { public void setUserDataProvider(String userDataProvider) { this.userDataProvider = userDataProvider; } - + @Override public String getGuestNetworkCidr() { return guestNetworkCidr; } - + public void setGuestNetworkCidr(String guestNetworkCidr) { this.guestNetworkCidr = guestNetworkCidr; @@ -254,7 +254,7 @@ public class DataCenterVO implements DataCenter, Identity { public void setDomainId(Long domainId) { this.domainId = domainId; } - + @Override public String getDescription() { return description; @@ -263,12 +263,12 @@ public class DataCenterVO implements DataCenter, Identity { public String getRouterMacAddress() { return routerMacAddress; } - + @Override public String getDns1() { return dns1; } - + @Override public String getDns2() { return dns2; @@ -291,28 +291,28 @@ public class DataCenterVO implements DataCenter, Identity { public long getId() { return id; } - + @Override public String getName() { return name; } - + public void setName(String name) { this.name = name; } - + public void setDns1(String dns1) { this.dns1 = dns1; } - + public void setDns2(String dns2) { this.dns2 = dns2; } - + public void setInternalDns1(String dns3) { this.internalDns1 = dns3; } - + public void setInternalDns2(String dns4) { this.internalDns2 = dns4; } @@ -320,7 +320,7 @@ public class DataCenterVO implements DataCenter, Identity { public void setRouterMacAddress(String routerMacAddress) { this.routerMacAddress = routerMacAddress; } - + @Override public String getDomain() { return domain; @@ -329,7 +329,7 @@ public class DataCenterVO implements DataCenter, Identity { public void setDomain(String domain) { this.domain = domain; } - + public void setNetworkType(NetworkType zoneNetworkType) { this.networkType = zoneNetworkType; } @@ -338,12 +338,12 @@ public class DataCenterVO implements DataCenter, Identity { public NetworkType getNetworkType() { return networkType; } - - @Override + + @Override public boolean isSecurityGroupEnabled() { return securityGroupEnabled; } - + public void setSecurityGroupEnabled(boolean enabled) { this.securityGroupEnabled = enabled; } @@ -364,34 +364,34 @@ public class DataCenterVO implements DataCenter, Identity { @Override public void setDetails(Map details2) { - details = details2; + details = details2; } - + public String getDetail(String name) { assert (details != null) : "Did you forget to load the details?"; - + return details != null ? details.get(name) : null; } - + public void setDetail(String name, String value) { assert (details != null) : "Did you forget to load the details?"; - + details.put(name, value); } - + public AllocationState getAllocationState() { return allocationState; } - + public void setAllocationState(AllocationState allocationState) { this.allocationState = allocationState; } - + @Override public int hashCode() { return NumbersUtil.hash(id); } - + @Override public boolean equals(Object obj) { if (!(obj instanceof DataCenterVO)) { @@ -405,20 +405,20 @@ public class DataCenterVO implements DataCenter, Identity { public String getZoneToken() { return zoneToken; } - + public void setZoneToken(String zoneToken) { this.zoneToken = zoneToken; } - + public Date getRemoved() { return removed; } - + @Override public String getUuid() { return this.uuid; } - + public void setUuid(String uuid) { this.uuid = uuid; } diff --git a/server/src/com/cloud/domain/DomainVO.java b/server/src/com/cloud/domain/DomainVO.java index a0bba31fb2b..1c9d3e034eb 100644 --- a/server/src/com/cloud/domain/DomainVO.java +++ b/server/src/com/cloud/domain/DomainVO.java @@ -33,9 +33,9 @@ import com.cloud.utils.db.GenericDao; @Entity @Table(name="domain") -public class DomainVO implements Domain, Identity { +public class DomainVO implements Domain { public static final Logger s_logger = Logger.getLogger(DomainVO.class.getName()); - + @Id @GeneratedValue(strategy=GenerationType.IDENTITY) @Column(name="id") @@ -49,10 +49,10 @@ public class DomainVO implements Domain, Identity { @Column(name="owner") private long accountId; - + @Column(name="path") private String path = null; - + @Column(name="level") private int level; @@ -64,18 +64,18 @@ public class DomainVO implements Domain, Identity { @Column(name="next_child_seq") private long nextChildSeq = 1L; - + @Column(name="state") private Domain.State state; - + @Column(name="network_domain") private String networkDomain; - + @Column(name="uuid") private String uuid; - + public DomainVO() {} - + public DomainVO(long id, String name, long owner, Long parentId, String networkDomain) { this(name, owner, parentId, networkDomain); this.id = id; @@ -102,7 +102,7 @@ public class DomainVO implements Domain, Identity { public Long getParent() { return parent; } - + @Override public void setParent(Long parent) { if(parent == null) { @@ -119,7 +119,7 @@ public class DomainVO implements Domain, Identity { public String getName() { return name; } - + @Override public void setName(String name) { this.name = name; @@ -129,59 +129,59 @@ public class DomainVO implements Domain, Identity { public long getAccountId() { return accountId; } - + @Override public Date getRemoved() { return removed; } - + @Override public String getPath() { return path; } - + @Override public void setPath(String path) { this.path = path; } - + @Override public int getLevel() { - return level; + return level; } - + public void setLevel(int level) { this.level = level; } - + @Override public int getChildCount() { - return childCount; + return childCount; } - + public void setChildCount(int count) { childCount = count; } - + @Override public long getNextChildSeq() { return nextChildSeq; } - + public void setNextChildSeq(long seq) { nextChildSeq = seq; } - - @Override + + @Override public Domain.State getState() { return state; } - + @Override public void setState(Domain.State state) { this.state = state; } - + @Override public String toString() { return new StringBuilder("Domain:").append(id).append(path).toString(); @@ -195,12 +195,12 @@ public class DomainVO implements Domain, Identity { public void setNetworkDomain(String domainSuffix) { this.networkDomain = domainSuffix; } - + @Override public String getUuid() { return this.uuid; } - + public void setUuid(String uuid) { this.uuid = uuid; } From e017dc2c00650e173b1585566acf0460340e2219 Mon Sep 17 00:00:00 2001 From: Min Chen Date: Mon, 17 Dec 2012 17:44:39 -0800 Subject: [PATCH 121/421] commit ba3fef5d0650c42463d0f225f4ca14b5f9046c44 Author: Min Chen Date: Mon Dec 17 17:42:30 2012 -0800 Remove IdentityProxy from AlertResponse and AsyncJobResponse. Signed-off-by: Min Chen --- api/src/com/cloud/alert/Alert.java | 1 + .../cloud/network/security/SecurityGroup.java | 2 + api/src/com/cloud/storage/Snapshot.java | 2 + api/src/com/cloud/user/User.java | 2 + .../command/admin/resource/ListAlertsCmd.java | 2 +- .../api/response/AlertResponse.java | 7 +- .../api/response/AsyncJobResponse.java | 70 ++------- core/src/com/cloud/storage/SnapshotVO.java | 56 ++++---- server/src/com/cloud/api/ApiDBUtils.java | 76 +++++++++- .../src/com/cloud/api/ApiResponseHelper.java | 135 +++++++++++++++++- .../test/com/cloud/keystore/KeystoreTest.java | 52 +++---- 11 files changed, 280 insertions(+), 125 deletions(-) diff --git a/api/src/com/cloud/alert/Alert.java b/api/src/com/cloud/alert/Alert.java index c9368a34522..da75de8f458 100644 --- a/api/src/com/cloud/alert/Alert.java +++ b/api/src/com/cloud/alert/Alert.java @@ -20,6 +20,7 @@ import java.util.Date; public interface Alert { long getId(); + String getUuid(); short getType(); String getSubject(); Long getPodId(); diff --git a/api/src/com/cloud/network/security/SecurityGroup.java b/api/src/com/cloud/network/security/SecurityGroup.java index f6817d7188a..a496aa5e48a 100644 --- a/api/src/com/cloud/network/security/SecurityGroup.java +++ b/api/src/com/cloud/network/security/SecurityGroup.java @@ -22,6 +22,8 @@ import com.cloud.acl.ControlledEntity; public interface SecurityGroup extends ControlledEntity { long getId(); + String getUuid(); + String getName(); String getDescription(); diff --git a/api/src/com/cloud/storage/Snapshot.java b/api/src/com/cloud/storage/Snapshot.java index a37cc94241f..c60b19aec49 100644 --- a/api/src/com/cloud/storage/Snapshot.java +++ b/api/src/com/cloud/storage/Snapshot.java @@ -69,6 +69,8 @@ public interface Snapshot extends ControlledEntity { Long getId(); + String getUuid(); + long getAccountId(); long getVolumeId(); diff --git a/api/src/com/cloud/user/User.java b/api/src/com/cloud/user/User.java index c625c168d0d..e1b9f732885 100644 --- a/api/src/com/cloud/user/User.java +++ b/api/src/com/cloud/user/User.java @@ -23,6 +23,8 @@ public interface User extends OwnedBy { public long getId(); + public String getUuid(); + public Date getCreated(); public Date getRemoved(); diff --git a/api/src/org/apache/cloudstack/api/command/admin/resource/ListAlertsCmd.java b/api/src/org/apache/cloudstack/api/command/admin/resource/ListAlertsCmd.java index f58744a7c99..32dc3d96799 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/resource/ListAlertsCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/resource/ListAlertsCmd.java @@ -77,7 +77,7 @@ public class ListAlertsCmd extends BaseListCmd { List alertResponseList = new ArrayList(); for (Alert alert : result.first()) { AlertResponse alertResponse = new AlertResponse(); - alertResponse.setId(alert.getId()); + alertResponse.setId(alert.getUuid()); alertResponse.setAlertType(alert.getType()); alertResponse.setDescription(alert.getSubject()); alertResponse.setLastSent(alert.getLastSent()); diff --git a/api/src/org/apache/cloudstack/api/response/AlertResponse.java b/api/src/org/apache/cloudstack/api/response/AlertResponse.java index c35aad21bc8..fdadd974de3 100644 --- a/api/src/org/apache/cloudstack/api/response/AlertResponse.java +++ b/api/src/org/apache/cloudstack/api/response/AlertResponse.java @@ -19,7 +19,6 @@ package org.apache.cloudstack.api.response; import java.util.Date; import org.apache.cloudstack.api.ApiConstants; -import com.cloud.utils.IdentityProxy; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; import org.apache.cloudstack.api.BaseResponse; @@ -27,7 +26,7 @@ import org.apache.cloudstack.api.BaseResponse; @SuppressWarnings("unused") public class AlertResponse extends BaseResponse { @SerializedName(ApiConstants.ID) @Param(description="the id of the alert") - private IdentityProxy id = new IdentityProxy("alert"); + private String id; @SerializedName(ApiConstants.TYPE) @Param(description="One of the following alert types: " + "MEMORY = 0, CPU = 1, STORAGE = 2, STORAGE_ALLOCATED = 3, PUBLIC_IP = 4, PRIVATE_IP = 5, HOST = 6, USERVM = 7, " + @@ -45,8 +44,8 @@ public class AlertResponse extends BaseResponse { @SerializedName(ApiConstants.SENT) @Param(description="the date and time the alert was sent") private Date lastSent; - public void setId(Long id) { - this.id.setValue(id); + public void setId(String id) { + this.id = id; } public void setAlertType(Short alertType) { diff --git a/api/src/org/apache/cloudstack/api/response/AsyncJobResponse.java b/api/src/org/apache/cloudstack/api/response/AsyncJobResponse.java index d255ec42359..42912be744a 100644 --- a/api/src/org/apache/cloudstack/api/response/AsyncJobResponse.java +++ b/api/src/org/apache/cloudstack/api/response/AsyncJobResponse.java @@ -23,17 +23,16 @@ import org.apache.cloudstack.api.BaseResponse; import org.apache.cloudstack.api.ResponseObject; import com.cloud.async.AsyncJob; import com.cloud.serializer.Param; -import com.cloud.utils.IdentityProxy; import com.google.gson.annotations.SerializedName; @SuppressWarnings("unused") public class AsyncJobResponse extends BaseResponse { @SerializedName("accountid") @Param(description="the account that executed the async command") - private IdentityProxy accountId = new IdentityProxy("account"); + private String accountId; @SerializedName(ApiConstants.USER_ID) @Param(description="the user that executed the async command") - private IdentityProxy userId = new IdentityProxy("user"); + private String userId; @SerializedName("cmd") @Param(description="the async command executed") private String cmd; @@ -57,17 +56,17 @@ public class AsyncJobResponse extends BaseResponse { private String jobInstanceType; @SerializedName("jobinstanceid") @Param(description="the unique ID of the instance/entity object related to the job") - private IdentityProxy jobInstanceId = new IdentityProxy(); + private String jobInstanceId; @SerializedName(ApiConstants.CREATED) @Param(description=" the created date of the job") private Date created; - public void setAccountId(Long accountId) { - this.accountId.setValue(accountId); + public void setAccountId(String accountId) { + this.accountId = accountId; } - public void setUserId(Long userId) { - this.userId.setValue(userId); + public void setUserId(String userId) { + this.userId = userId; } public void setCmd(String cmd) { @@ -97,61 +96,10 @@ public class AsyncJobResponse extends BaseResponse { public void setJobInstanceType(String jobInstanceType) { this.jobInstanceType = jobInstanceType; - - if(jobInstanceType != null) { - if(jobInstanceType.equalsIgnoreCase(AsyncJob.Type.Volume.toString())) { - this.jobInstanceId.setTableName("volumes"); - } else if (jobInstanceType.equalsIgnoreCase(AsyncJob.Type.Template.toString())) { - this.jobInstanceId.setTableName("vm_template"); - } else if (jobInstanceType.equalsIgnoreCase(AsyncJob.Type.Iso.toString())) { - this.jobInstanceId.setTableName("vm_template"); - } else if (jobInstanceType.equalsIgnoreCase(AsyncJob.Type.VirtualMachine.toString()) || jobInstanceType.equalsIgnoreCase(AsyncJob.Type.ConsoleProxy.toString()) || jobInstanceType.equalsIgnoreCase(AsyncJob.Type.SystemVm.toString()) || jobInstanceType.equalsIgnoreCase(AsyncJob.Type.DomainRouter.toString()) ) { - this.jobInstanceId.setTableName("vm_instance"); - } else if (jobInstanceType.equalsIgnoreCase(AsyncJob.Type.Snapshot.toString())) { - this.jobInstanceId.setTableName("snapshots"); - } else if (jobInstanceType.equalsIgnoreCase(AsyncJob.Type.Host.toString())) { - this.jobInstanceId.setTableName("host"); - } else if (jobInstanceType.equalsIgnoreCase(AsyncJob.Type.StoragePool.toString())) { - this.jobInstanceId.setTableName("storage_pool"); - } else if (jobInstanceType.equalsIgnoreCase(AsyncJob.Type.IpAddress.toString())) { - this.jobInstanceId.setTableName("user_ip_address"); - } else if (jobInstanceType.equalsIgnoreCase(AsyncJob.Type.SecurityGroup.toString())) { - this.jobInstanceId.setTableName("security_group"); - } else if (jobInstanceType.equalsIgnoreCase(AsyncJob.Type.PhysicalNetwork.toString())) { - this.jobInstanceId.setTableName("physical_network"); - } else if (jobInstanceType.equalsIgnoreCase(AsyncJob.Type.TrafficType.toString())) { - this.jobInstanceId.setTableName("physical_network_traffic_types"); - } else if (jobInstanceType.equalsIgnoreCase(AsyncJob.Type.PhysicalNetworkServiceProvider.toString())) { - this.jobInstanceId.setTableName("physical_network_service_providers"); - } else if (jobInstanceType.equalsIgnoreCase(AsyncJob.Type.FirewallRule.toString())) { - this.jobInstanceId.setTableName("firewall_rules"); - } else if (jobInstanceType.equalsIgnoreCase(AsyncJob.Type.Account.toString())) { - this.jobInstanceId.setTableName("account"); - } else if (jobInstanceType.equalsIgnoreCase(AsyncJob.Type.User.toString())) { - this.jobInstanceId.setTableName("user"); - } else if (jobInstanceType.equalsIgnoreCase(AsyncJob.Type.StaticRoute.toString())) { - this.jobInstanceId.setTableName("static_routes"); - } else if (jobInstanceType.equalsIgnoreCase(AsyncJob.Type.PrivateGateway.toString())) { - this.jobInstanceId.setTableName("vpc_gateways"); - }else if (jobInstanceType.equalsIgnoreCase(AsyncJob.Type.Counter.toString())) { - this.jobInstanceId.setTableName("counter"); - } else if (jobInstanceType.equalsIgnoreCase(AsyncJob.Type.Condition.toString())) { - this.jobInstanceId.setTableName("conditions"); - } else if (jobInstanceType.equalsIgnoreCase(AsyncJob.Type.AutoScalePolicy.toString())) { - this.jobInstanceId.setTableName("autoscale_policies"); - } else if (jobInstanceType.equalsIgnoreCase(AsyncJob.Type.AutoScaleVmProfile.toString())) { - this.jobInstanceId.setTableName("autoscale_vmprofiles"); - } else if (jobInstanceType.equalsIgnoreCase(AsyncJob.Type.AutoScaleVmGroup.toString())) { - this.jobInstanceId.setTableName("autoscale_vmgroups"); - } else if (!jobInstanceType.equalsIgnoreCase(AsyncJob.Type.None.toString())){ - // TODO : when we hit here, we need to add instanceType -> UUID entity table mapping - assert(false); - } - } } - public void setJobInstanceId(Long jobInstanceId) { - this.jobInstanceId.setValue(jobInstanceId); + public void setJobInstanceId(String jobInstanceId) { + this.jobInstanceId = jobInstanceId; } public void setCreated(Date created) { diff --git a/core/src/com/cloud/storage/SnapshotVO.java b/core/src/com/cloud/storage/SnapshotVO.java index 9bf1924ec33..05692252588 100644 --- a/core/src/com/cloud/storage/SnapshotVO.java +++ b/core/src/com/cloud/storage/SnapshotVO.java @@ -35,25 +35,25 @@ import com.google.gson.annotations.Expose; @Entity @Table(name="snapshots") -public class SnapshotVO implements Snapshot, Identity { - +public class SnapshotVO implements Snapshot { + @Id @GeneratedValue(strategy=GenerationType.IDENTITY) @Column(name="id") private long id = -1; - + @Column(name="data_center_id") long dataCenterId; @Column(name="account_id") long accountId; - + @Column(name="domain_id") long domainId; @Column(name="volume_id") Long volumeId; - + @Column(name="disk_offering_id") Long diskOfferingId; @@ -64,7 +64,7 @@ public class SnapshotVO implements Snapshot, Identity { @Expose @Column(name="name") String name; - + @Expose @Column(name="status", updatable = true, nullable=false) @Enumerated(value=EnumType.STRING) @@ -75,10 +75,10 @@ public class SnapshotVO implements Snapshot, Identity { @Column(name="type_description") String typeDescription; - + @Column(name="size") long size; - + @Column(name=GenericDao.CREATED_COLUMN) Date created; @@ -87,10 +87,10 @@ public class SnapshotVO implements Snapshot, Identity { @Column(name="backup_snap_id") String backupSnapshotId; - + @Column(name="swift_id") Long swiftId; - + @Column(name="sechost_id") Long secHostId; @@ -100,14 +100,14 @@ public class SnapshotVO implements Snapshot, Identity { @Column(name="hypervisor_type") @Enumerated(value=EnumType.STRING) HypervisorType hypervisorType; - + @Expose @Column(name="version") String version; - + @Column(name="uuid") String uuid; - + public SnapshotVO() { this.uuid = UUID.randomUUID().toString(); } @@ -129,7 +129,7 @@ public class SnapshotVO implements Snapshot, Identity { this.version = "2.2"; this.uuid = UUID.randomUUID().toString(); } - + @Override public Long getId() { return id; @@ -165,7 +165,7 @@ public class SnapshotVO implements Snapshot, Identity { public String getPath() { return path; } - + public void setPath(String path) { this.path = path; } @@ -178,7 +178,7 @@ public class SnapshotVO implements Snapshot, Identity { public short getsnapshotType() { return snapshotType; } - + @Override public Type getType() { if (snapshotType < 0 || snapshotType >= Type.values().length) { @@ -186,7 +186,7 @@ public class SnapshotVO implements Snapshot, Identity { } return Type.values()[snapshotType]; } - + public Long getSwiftId() { return swiftId; } @@ -207,11 +207,11 @@ public class SnapshotVO implements Snapshot, Identity { public HypervisorType getHypervisorType() { return hypervisorType; } - + public void setSnapshotType(short snapshotType) { this.snapshotType = snapshotType; } - + @Override public boolean isRecursive(){ if ( snapshotType >= Type.HOURLY.ordinal() && snapshotType <= Type.MONTHLY.ordinal() ) { @@ -246,32 +246,32 @@ public class SnapshotVO implements Snapshot, Identity { public Date getRemoved() { return removed; } - + @Override public Status getStatus() { return status; } - + public void setStatus(Status status) { this.status = status; } - + public String getBackupSnapshotId(){ return backupSnapshotId; } - + public long getPrevSnapshotId(){ return prevSnapshotId; } - + public void setBackupSnapshotId(String backUpSnapshotId){ this.backupSnapshotId = backUpSnapshotId; } - + public void setPrevSnapshotId(long prevSnapshotId){ this.prevSnapshotId = prevSnapshotId; } - + public static Type getSnapshotType(String snapshotType) { for ( Type type : Type.values()) { if ( type.equals(snapshotType)) { @@ -280,12 +280,12 @@ public class SnapshotVO implements Snapshot, Identity { } return null; } - + @Override public String getUuid() { return this.uuid; } - + public void setUuid(String uuid) { this.uuid = uuid; } diff --git a/server/src/com/cloud/api/ApiDBUtils.java b/server/src/com/cloud/api/ApiDBUtils.java index 4e41d682773..60a9b26db19 100755 --- a/server/src/com/cloud/api/ApiDBUtils.java +++ b/server/src/com/cloud/api/ApiDBUtils.java @@ -95,33 +95,50 @@ import com.cloud.network.NetworkManager; import com.cloud.network.NetworkProfile; import com.cloud.network.NetworkRuleConfigVO; import com.cloud.network.NetworkVO; +import com.cloud.network.PhysicalNetworkVO; import com.cloud.network.Site2SiteVpnGatewayVO; import com.cloud.network.Site2SiteCustomerGatewayVO; import com.cloud.network.Networks.TrafficType; import com.cloud.network.as.AutoScalePolicy; import com.cloud.network.as.AutoScalePolicyConditionMapVO; +import com.cloud.network.as.AutoScalePolicyVO; import com.cloud.network.as.AutoScaleVmGroupPolicyMapVO; +import com.cloud.network.as.AutoScaleVmGroupVO; +import com.cloud.network.as.AutoScaleVmProfileVO; import com.cloud.network.as.ConditionVO; import com.cloud.network.as.CounterVO; import com.cloud.network.as.dao.AutoScalePolicyConditionMapDao; import com.cloud.network.as.dao.AutoScalePolicyDao; +import com.cloud.network.as.dao.AutoScaleVmGroupDao; import com.cloud.network.as.dao.AutoScaleVmGroupPolicyMapDao; +import com.cloud.network.as.dao.AutoScaleVmProfileDao; import com.cloud.network.as.dao.ConditionDao; import com.cloud.network.as.dao.CounterDao; import com.cloud.network.dao.FirewallRulesCidrsDao; +import com.cloud.network.dao.FirewallRulesDao; import com.cloud.network.dao.IPAddressDao; import com.cloud.network.dao.LoadBalancerDao; import com.cloud.network.dao.NetworkDao; +import com.cloud.network.dao.PhysicalNetworkDao; import com.cloud.network.dao.NetworkDomainDao; import com.cloud.network.dao.NetworkRuleConfigDao; +import com.cloud.network.dao.PhysicalNetworkServiceProviderDao; +import com.cloud.network.dao.PhysicalNetworkServiceProviderVO; +import com.cloud.network.dao.PhysicalNetworkTrafficTypeDao; +import com.cloud.network.dao.PhysicalNetworkTrafficTypeVO; import com.cloud.network.dao.Site2SiteVpnGatewayDao; import com.cloud.network.dao.Site2SiteCustomerGatewayDao; import com.cloud.network.router.VirtualRouter; +import com.cloud.network.rules.FirewallRuleVO; import com.cloud.network.security.SecurityGroup; import com.cloud.network.security.SecurityGroupManager; import com.cloud.network.security.SecurityGroupVO; import com.cloud.network.security.dao.SecurityGroupDao; +import com.cloud.network.vpc.StaticRouteVO; +import com.cloud.network.vpc.VpcGatewayVO; import com.cloud.network.vpc.VpcManager; +import com.cloud.network.vpc.dao.StaticRouteDao; +import com.cloud.network.vpc.dao.VpcGatewayDao; import com.cloud.offering.NetworkOffering; import com.cloud.offering.ServiceOffering; import com.cloud.offerings.NetworkOfferingVO; @@ -248,6 +265,7 @@ public class ApiDBUtils { private static DataCenterDao _zoneDao; private static NetworkOfferingDao _networkOfferingDao; private static NetworkDao _networkDao; + private static PhysicalNetworkDao _physicalNetworkDao; private static ConfigurationService _configMgr; private static ConfigurationDao _configDao; private static ConsoleProxyDao _consoleProxyDao; @@ -268,6 +286,8 @@ public class ApiDBUtils { private static AutoScalePolicyConditionMapDao _asPolicyConditionMapDao; private static AutoScaleVmGroupPolicyMapDao _asVmGroupPolicyMapDao; private static AutoScalePolicyDao _asPolicyDao; + private static AutoScaleVmProfileDao _asVmProfileDao; + private static AutoScaleVmGroupDao _asVmGroupDao; private static CounterDao _counterDao; private static ResourceTagJoinDao _tagJoinDao; private static EventJoinDao _eventJoinDao; @@ -277,6 +297,12 @@ public class ApiDBUtils { private static ProjectAccountJoinDao _projectAccountJoinDao; private static ProjectInvitationJoinDao _projectInvitationJoinDao; + private static PhysicalNetworkTrafficTypeDao _physicalNetworkTrafficTypeDao; + private static PhysicalNetworkServiceProviderDao _physicalNetworkServiceProviderDao; + private static FirewallRulesDao _firewallRuleDao; + private static StaticRouteDao _staticRouteDao; + private static VpcGatewayDao _vpcGatewayDao; + static { _ms = (ManagementServer) ComponentLocator.getComponent(ManagementServer.Name); ComponentLocator locator = ComponentLocator.getLocator(ManagementServer.Name); @@ -324,6 +350,7 @@ public class ApiDBUtils { _securityGroupJoinDao = locator.getDao(SecurityGroupJoinDao.class); _networkOfferingDao = locator.getDao(NetworkOfferingDao.class); _networkDao = locator.getDao(NetworkDao.class); + _physicalNetworkDao = locator.getDao(PhysicalNetworkDao.class); _configDao = locator.getDao(ConfigurationDao.class); _consoleProxyDao = locator.getDao(ConsoleProxyDao.class); _firewallCidrsDao = locator.getDao(FirewallRulesCidrsDao.class); @@ -343,8 +370,6 @@ public class ApiDBUtils { _asPolicyConditionMapDao = locator.getDao(AutoScalePolicyConditionMapDao.class); _counterDao = locator.getDao(CounterDao.class); _asVmGroupPolicyMapDao = locator.getDao(AutoScaleVmGroupPolicyMapDao.class); - _asVmGroupPolicyMapDao = locator.getDao(AutoScaleVmGroupPolicyMapDao.class); - _counterDao = locator.getDao(CounterDao.class); _tagJoinDao = locator.getDao(ResourceTagJoinDao.class); _vmGroupJoinDao = locator.getDao(InstanceGroupJoinDao.class); _eventJoinDao = locator.getDao(EventJoinDao.class); @@ -353,6 +378,13 @@ public class ApiDBUtils { _projectAccountJoinDao = locator.getDao(ProjectAccountJoinDao.class); _projectInvitationJoinDao = locator.getDao(ProjectInvitationJoinDao.class); + _physicalNetworkTrafficTypeDao = locator.getDao(PhysicalNetworkTrafficTypeDao.class); + _physicalNetworkServiceProviderDao = locator.getDao(PhysicalNetworkServiceProviderDao.class); + _firewallRuleDao = locator.getDao(FirewallRulesDao.class); + _staticRouteDao = locator.getDao(StaticRouteDao.class); + _vpcGatewayDao = locator.getDao(VpcGatewayDao.class); + _asVmProfileDao = locator.getDao(AutoScaleVmProfileDao.class); + _asVmGroupDao = locator.getDao(AutoScaleVmGroupDao.class); // Note: stats collector should already have been initialized by this time, otherwise a null instance is returned _statsCollector = StatsCollector.getInstance(); @@ -738,6 +770,14 @@ public class ApiDBUtils { return _vlanDao.listVlansByNetworkId(networkId); } + public static PhysicalNetworkVO findPhysicalNetworkById(long id) { + return _physicalNetworkDao.findById(id); + } + + public static PhysicalNetworkTrafficTypeVO findPhysicalNetworkTrafficTypeById(long id) { + return _physicalNetworkTrafficTypeDao.findById(id); + } + public static NetworkVO findNetworkById(long id) { return _networkDao.findById(id); } @@ -945,6 +985,38 @@ public class ApiDBUtils { return _counterDao.findById(counterId); } + public static ConditionVO findConditionById(long conditionId){ + return _asConditionDao.findById(conditionId); + } + + public static PhysicalNetworkServiceProviderVO findPhysicalNetworkServiceProviderById(long providerId){ + return _physicalNetworkServiceProviderDao.findById(providerId); + } + + public static FirewallRuleVO findFirewallRuleById(long ruleId){ + return _firewallRuleDao.findById(ruleId); + } + + public static StaticRouteVO findStaticRouteById(long routeId){ + return _staticRouteDao.findById(routeId); + } + + public static VpcGatewayVO findVpcGatewayById(long gatewayId){ + return _vpcGatewayDao.findById(gatewayId); + } + + public static AutoScalePolicyVO findAutoScalePolicyById(long policyId){ + return _asPolicyDao.findById(policyId); + } + + public static AutoScaleVmProfileVO findAutoScaleVmProfileById(long profileId){ + return _asVmProfileDao.findById(profileId); + } + + public static AutoScaleVmGroupVO findAutoScaleVmGroupById(long groupId){ + return _asVmGroupDao.findById(groupId); + } + /////////////////////////////////////////////////////////////////////// // Newly Added Utility Methods for List API refactoring // /////////////////////////////////////////////////////////////////////// diff --git a/server/src/com/cloud/api/ApiResponseHelper.java b/server/src/com/cloud/api/ApiResponseHelper.java index 51c90171c1e..5f584f72d39 100755 --- a/server/src/com/cloud/api/ApiResponseHelper.java +++ b/server/src/com/cloud/api/ApiResponseHelper.java @@ -159,6 +159,7 @@ import com.cloud.network.Networks.TrafficType; import com.cloud.network.PhysicalNetwork; import com.cloud.network.PhysicalNetworkServiceProvider; import com.cloud.network.PhysicalNetworkTrafficType; +import com.cloud.network.PhysicalNetworkVO; import com.cloud.network.RemoteAccessVpn; import com.cloud.network.Site2SiteCustomerGateway; import com.cloud.network.Site2SiteCustomerGatewayVO; @@ -168,13 +169,19 @@ import com.cloud.network.Site2SiteVpnGatewayVO; import com.cloud.network.VirtualRouterProvider; import com.cloud.network.VpnUser; import com.cloud.network.as.AutoScalePolicy; +import com.cloud.network.as.AutoScalePolicyVO; import com.cloud.network.as.AutoScaleVmGroup; +import com.cloud.network.as.AutoScaleVmGroupVO; import com.cloud.network.as.AutoScaleVmProfile; +import com.cloud.network.as.AutoScaleVmProfileVO; import com.cloud.network.as.Condition; import com.cloud.network.as.ConditionVO; import com.cloud.network.as.Counter; +import com.cloud.network.as.CounterVO; +import com.cloud.network.dao.PhysicalNetworkTrafficTypeVO; import com.cloud.network.router.VirtualRouter; import com.cloud.network.rules.FirewallRule; +import com.cloud.network.rules.FirewallRuleVO; import com.cloud.network.rules.LoadBalancer; import com.cloud.network.rules.PortForwardingRule; import com.cloud.network.rules.StaticNatRule; @@ -184,7 +191,9 @@ import com.cloud.network.security.SecurityRule; import com.cloud.network.security.SecurityRule.SecurityRuleType; import com.cloud.network.vpc.PrivateGateway; import com.cloud.network.vpc.StaticRoute; +import com.cloud.network.vpc.StaticRouteVO; import com.cloud.network.vpc.Vpc; +import com.cloud.network.vpc.VpcGatewayVO; import com.cloud.network.vpc.VpcOffering; import com.cloud.offering.DiskOffering; import com.cloud.offering.NetworkOffering; @@ -2001,8 +2010,14 @@ public class ApiResponseHelper implements ResponseGenerator { @Override public AsyncJobResponse createAsyncJobResponse(AsyncJob job) { AsyncJobResponse jobResponse = new AsyncJobResponse(); - jobResponse.setAccountId(job.getAccountId()); - jobResponse.setUserId(job.getUserId()); + Account account = ApiDBUtils.findAccountById(job.getAccountId()); + if (account != null) { + jobResponse.setAccountId(account.getUuid()); + } + User user = ApiDBUtils.findUserById(job.getUserId()); + if (user != null) { + jobResponse.setUserId(user.getUuid()); + } jobResponse.setCmd(job.getCmd()); jobResponse.setCreated(job.getCreated()); jobResponse.setJobId(job.getId()); @@ -2011,7 +2026,121 @@ public class ApiResponseHelper implements ResponseGenerator { if (job.getInstanceType() != null && job.getInstanceId() != null) { jobResponse.setJobInstanceType(job.getInstanceType().toString()); - jobResponse.setJobInstanceId(job.getInstanceId()); + String jobInstanceId = null; + if (job.getInstanceType() == AsyncJob.Type.Volume) { + VolumeVO volume = ApiDBUtils.findVolumeById(job.getInstanceId()); + if (volume != null) { + jobInstanceId = volume.getUuid(); + } + } else if (job.getInstanceType() == AsyncJob.Type.Template || job.getInstanceType() == AsyncJob.Type.Iso) { + VMTemplateVO template = ApiDBUtils.findTemplateById(job.getInstanceId()); + if (template != null) { + jobInstanceId = template.getUuid(); + } + } else if (job.getInstanceType() == AsyncJob.Type.VirtualMachine || job.getInstanceType() == AsyncJob.Type.ConsoleProxy + || job.getInstanceType() == AsyncJob.Type.SystemVm || job.getInstanceType() == AsyncJob.Type.DomainRouter) { + VMInstanceVO vm = ApiDBUtils.findVMInstanceById(job.getInstanceId()); + if (vm != null) { + jobInstanceId = vm.getUuid(); + } + } else if (job.getInstanceType() == AsyncJob.Type.Snapshot) { + Snapshot snapshot = ApiDBUtils.findSnapshotById(job.getInstanceId()); + if (snapshot != null) { + jobInstanceId = snapshot.getUuid(); + } + } else if (job.getInstanceType() == AsyncJob.Type.Host) { + Host host = ApiDBUtils.findHostById(job.getInstanceId()); + if (host != null) { + jobInstanceId = host.getUuid(); + } + } else if (job.getInstanceType() == AsyncJob.Type.StoragePool) { + StoragePoolVO spool = ApiDBUtils.findStoragePoolById(job.getInstanceId()); + if (spool != null) { + jobInstanceId = spool.getUuid(); + } + } else if (job.getInstanceType() == AsyncJob.Type.IpAddress) { + IPAddressVO ip = ApiDBUtils.findIpAddressById(job.getInstanceId()); + if (ip != null) { + jobInstanceId = ip.getUuid(); + } + } else if (job.getInstanceType() == AsyncJob.Type.SecurityGroup) { + SecurityGroup sg = ApiDBUtils.findSecurityGroupById(job.getInstanceId()); + if (sg != null) { + jobInstanceId = sg.getUuid(); + } + } else if (job.getInstanceType() == AsyncJob.Type.PhysicalNetwork) { + PhysicalNetworkVO pnet = ApiDBUtils.findPhysicalNetworkById(job.getInstanceId()); + if (pnet != null) { + jobInstanceId = pnet.getUuid(); + } + } else if (job.getInstanceType() == AsyncJob.Type.TrafficType) { + PhysicalNetworkTrafficTypeVO trafficType = ApiDBUtils.findPhysicalNetworkTrafficTypeById(job.getInstanceId()); + if (trafficType != null) { + jobInstanceId = trafficType.getUuid(); + } + } else if (job.getInstanceType() == AsyncJob.Type.PhysicalNetworkServiceProvider) { + PhysicalNetworkServiceProvider sp = ApiDBUtils.findPhysicalNetworkServiceProviderById(job.getInstanceId()); + if (sp != null) { + jobInstanceId = sp.getUuid(); + } + } else if (job.getInstanceType() == AsyncJob.Type.FirewallRule) { + FirewallRuleVO fw = ApiDBUtils.findFirewallRuleById(job.getInstanceId()); + if (fw != null) { + jobInstanceId = fw.getUuid(); + } + } else if (job.getInstanceType() == AsyncJob.Type.Account) { + Account acct = ApiDBUtils.findAccountById(job.getInstanceId()); + if (acct != null) { + jobInstanceId = acct.getUuid(); + } + } else if (job.getInstanceType() == AsyncJob.Type.User) { + User usr = ApiDBUtils.findUserById(job.getInstanceId()); + if (usr != null) { + jobInstanceId = usr.getUuid(); + } + } else if (job.getInstanceType() == AsyncJob.Type.StaticRoute) { + StaticRouteVO route = ApiDBUtils.findStaticRouteById(job.getInstanceId()); + if (route != null) { + jobInstanceId = route.getUuid(); + } + } else if (job.getInstanceType() == AsyncJob.Type.PrivateGateway) { + VpcGatewayVO gateway = ApiDBUtils.findVpcGatewayById(job.getInstanceId()); + if (gateway != null) { + jobInstanceId = gateway.getUuid(); + } + } else if (job.getInstanceType() == AsyncJob.Type.Counter) { + CounterVO counter = ApiDBUtils.getCounter(job.getInstanceId()); + if (counter != null) { + jobInstanceId = counter.getUuid(); + } + } else if (job.getInstanceType() == AsyncJob.Type.Condition) { + ConditionVO condition = ApiDBUtils.findConditionById(job.getInstanceId()); + if (condition != null) { + jobInstanceId = condition.getUuid(); + } + } else if (job.getInstanceType() == AsyncJob.Type.AutoScalePolicy) { + AutoScalePolicyVO policy = ApiDBUtils.findAutoScalePolicyById(job.getInstanceId()); + if (policy != null) { + jobInstanceId = policy.getUuid(); + } + } else if (job.getInstanceType() == AsyncJob.Type.AutoScaleVmProfile) { + AutoScaleVmProfileVO profile = ApiDBUtils.findAutoScaleVmProfileById(job.getInstanceId()); + if (profile != null) { + jobInstanceId = profile.getUuid(); + } + } else if (job.getInstanceType() == AsyncJob.Type.AutoScaleVmGroup) { + AutoScaleVmGroupVO group = ApiDBUtils.findAutoScaleVmGroupById(job.getInstanceId()); + if (group != null) { + jobInstanceId = group.getUuid(); + } + } else if (job.getInstanceType() != AsyncJob.Type.None) { + // TODO : when we hit here, we need to add instanceType -> UUID + // entity table mapping + assert (false); + } + if (jobInstanceId != null) { + jobResponse.setJobInstanceId(jobInstanceId); + } } jobResponse.setJobResultCode(job.getResultCode()); diff --git a/server/test/com/cloud/keystore/KeystoreTest.java b/server/test/com/cloud/keystore/KeystoreTest.java index 21d5d9c13e0..47212c12cca 100644 --- a/server/test/com/cloud/keystore/KeystoreTest.java +++ b/server/test/com/cloud/keystore/KeystoreTest.java @@ -29,9 +29,9 @@ import org.apache.cloudstack.api.response.UserVmResponse; public class KeystoreTest extends TestCase { private final static Logger s_logger = Logger.getLogger(KeystoreTest.class); - private String keyContent = - "MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBALV5vGlkiWwoZX4hTRplPXP8qtST\n" + - "hwZhko8noeY5vf8ECwmd+vrCTw/JvnOtkx/8oYNbg/SeUt1EfOsk6gqJdBblGFBZRMcUJlIpqE9z\n" + + private String keyContent = + "MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBALV5vGlkiWwoZX4hTRplPXP8qtST\n" + + "hwZhko8noeY5vf8ECwmd+vrCTw/JvnOtkx/8oYNbg/SeUt1EfOsk6gqJdBblGFBZRMcUJlIpqE9z\n" + "uv68U9G8Gfi/qvRSY336hibw0J5bZ4vn1QqmyHDB+Czea9AjFUV7AEVG15+vED7why+/AgMBAAEC\n" + "gYBmFBPnNKYYMKDmUdUNA+WNWJK/ADzzWe8WlzR6TACTcbLDthl289WFC/YVG42mcHRpbxDKiEQU\n" + "MnIR0rHTO34Qb/2HcuyweStU2gqR6omxBvMnFpJr90nD1HcOMJzeLHsphau0/EmKKey+gk4PyieD\n" + @@ -42,8 +42,8 @@ public class KeystoreTest extends TestCase { "/DURBUn+1l5pyCKrZnDbvaALSLATLvjmFTuGjoHszy2OeKnOZmEqExWnKKE/VYuPyhy6V7i3TwJA\n" + "f8skDgtPK0OsBCa6IljPaHoWBjPc4kFkSTSS1d56hUcWSikTmiuKdLyBb85AADSZYsvHWrte4opN\n" + "dhNukMJuRA==\n"; - - private String certContent = + + private String certContent = "-----BEGIN CERTIFICATE-----\n" + "MIIE3jCCA8agAwIBAgIFAqv56tIwDQYJKoZIhvcNAQEFBQAwgcoxCzAJBgNVBAYT\n" + "AlVTMRAwDgYDVQQIEwdBcml6b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMRowGAYD\n" + @@ -73,27 +73,27 @@ public class KeystoreTest extends TestCase { "k0fLF4+i/pt9hVCz0QrZ28RUhXf825+EOL0Gw+Uzt+7RV2cCaJrlu4cDrDom2FRy\n" + "E8I=\n" + "-----END CERTIFICATE-----\n"; - + @Override @Before public void setUp() { -/* +/* MockComponentLocator locator = new MockComponentLocator("management-server"); locator.addDao("keystoreDao", KeystoreDaoImpl.class); locator.addManager("KeystoreManager", KeystoreManagerImpl.class); locator.makeActive(new DefaultInterceptorLibrary()); -*/ +*/ } - + @Override @After public void tearDown() throws Exception { } -/* +/* public void testKeystoreSave() throws Exception { KeystoreVO ksVo; - + ComponentLocator locator = ComponentLocator.getCurrentLocator(); KeystoreDao ksDao = locator.getDao(KeystoreDao.class); @@ -103,18 +103,18 @@ public class KeystoreTest extends TestCase { assertTrue(ksVo.getCertificate().equals("CPVMCertificate")); assertTrue(ksVo.getKey().equals("KeyForCertificate")); assertTrue(ksVo.getDomainSuffix().equals("realhostip.com")); - + ksDao.save("CPVMCertificate", "CPVMCertificate Again", "KeyForCertificate Again", "again.realhostip.com"); - + ksVo = ksDao.findByName("CPVMCertificate"); assertTrue(ksVo != null); assertTrue(ksVo.getCertificate().equals("CPVMCertificate Again")); assertTrue(ksVo.getKey().equals("KeyForCertificate Again")); assertTrue(ksVo.getDomainSuffix().equals("again.realhostip.com")); - + ksDao.expunge(ksVo.getId()); } - + public void testStripeKey() throws Exception { Pattern regex = Pattern.compile("(^[\\-]+[^\\-]+[\\-]+[\\n]?)([^\\-]+)([\\-]+[^\\-]+[\\-]+$)"); Matcher m = regex.matcher("-----BEGIN RSA PRIVATE KEY-----\nMIIEpAIBAAKCAQEAm4bLUORp9oM65GV9XrPrbs+K563DjUR1M8mP1HaE+Y4lX5pk\nvQjC/xoEqSs5pxDDWXAkoexvxij8A4AWcsKU1Q+ep2E+GcytBoz8XINGvgb8cQNn\n/4PlVWKp7j5SDDNCfleYvmiRn8k6P4mxVJOHKzwb/IwQcKghyqAF1w==\n-----END RSA PRIVATE KEY-----"); @@ -126,19 +126,19 @@ public class KeystoreTest extends TestCase { assertTrue(false); } } - + public void testKeystoreManager() throws Exception { ComponentLocator locator = ComponentLocator.getCurrentLocator(); - + KeystoreManagerImpl ksMgr = ComponentLocator.inject(KeystoreManagerImpl.class); assertTrue(ksMgr.configure("TaskManager", new HashMap())); assertTrue(ksMgr.start()); - + ksMgr.saveCertificate("CPVMCertificate", certContent, keyContent, "realhostip.com"); - + byte[] ksBits = ksMgr.getKeystoreBits("CPVMCertificate", "realhostip", "vmops.com"); assertTrue(ksBits != null); - + try { KeyStore ks = CertificateHelper.loadKeystore(ksBits, "vmops.com"); assertTrue(ks != null); @@ -150,11 +150,11 @@ public class KeystoreTest extends TestCase { KeystoreVO ksVo = ksDao.findByName("CPVMCertificate"); ksDao.expunge(ksVo.getId()); } -*/ +*/ public void testUuid() { UserVmResponse vm = new UserVmResponse(); vm.setId(Long.toString(3L)); -/* +/* vm.setAccountName("admin"); vm.setName("i-2-3-KY"); vm.setDisplayName("i-2-3-KY"); @@ -165,18 +165,18 @@ public class KeystoreTest extends TestCase { vm.setZoneId(1L); vm.setZoneName("KY"); vm.setHostId(1L); - + vm.setObjectName("virtualmachine"); -*/ +*/ String result = ApiSerializerHelper.toSerializedStringOld(vm); // String result = "org.apache.cloudstack.api.response.UserVmResponse/virtualmachine/{\"id\":{\"_tableName\":\"vm_instance\",\"_value\":3},\"name\":\"i-2-3-KY\",\"displayname\":\"i-2-3-KY\",\"account\":\"admin\",\"projectid\":{\"_tableName\":\"projects\"},\"domainid\":{\"_tableName\":\"domain\",\"_value\":1},\"domain\":\"ROOT\",\"created\":\"2011-11-02T21:54:07-0700\",\"state\":\"Running\",\"haenable\":false,\"groupid\":{\"_tableName\":\"instance_group\"},\"zoneid\":{\"_tableName\":\"data_center\",\"_value\":1},\"zonename\":\"KY\",\"hostid\":{\"_tableName\":\"host\",\"_value\":1},\"hostname\":\"xenserver-basic\",\"templateid\":{\"_tableName\":\"vm_template\",\"_value\":2},\"templatename\":\"CentOS 5.3(64-bit) no GUI (XenServer)\",\"templatedisplaytext\":\"CentOS 5.3(64-bit) no GUI (XenServer)\",\"passwordenabled\":false,\"isoid\":{\"_tableName\":\"vm_template\"},\"serviceofferingid\":{\"_tableName\":\"disk_offering\",\"_value\":7},\"serviceofferingname\":\"Small Instance\",\"cpunumber\":1,\"cpuspeed\":500,\"memory\":512,\"guestosid\":{\"_tableName\":\"guest_os\",\"_value\":12},\"rootdeviceid\":0,\"rootdevicetype\":\"NetworkFilesystem\",\"securitygroup\":[],\"jobid\":{\"_tableName\":\"async_job\"},\"nic\":[{\"id\":7,\"networkid\":200,\"netmask\":\"255.255.255.0\",\"gateway\":\"10.1.1.1\",\"ipaddress\":\"10.1.1.116\",\"isolationuri\":\"vlan://1699\",\"broadcasturi\":\"vlan://1699\",\"traffictype\":\"Guest\",\"type\":\"Virtual\",\"isdefault\":true,\"macaddress\":\"02:00:39:a7:00:01\"}],\"hypervisor\":\"XenServer\"}"; System.out.println(result); //Object obj = ApiSerializerHelper.fromSerializedString(result); AlertResponse alert = new AlertResponse(); - alert.setId(100L); + alert.setId("100"); alert.setDescription("Hello"); - + result = ApiSerializerHelper.toSerializedStringOld(alert); System.out.println(result); ApiSerializerHelper.fromSerializedString(result); From 79f8c104eb149aba7db353c9536b7b3410239cf1 Mon Sep 17 00:00:00 2001 From: Min Chen Date: Mon, 17 Dec 2012 18:01:31 -0800 Subject: [PATCH 122/421] Remove IdentityProxy from GuestOSResponse and GuestOSCategoryResponse. Signed-off-by: Min Chen --- api/src/com/cloud/storage/GuestOS.java | 2 ++ .../com/cloud/storage/GuestOsCategory.java | 2 ++ .../cloudstack/api/ResponseGenerator.java | 4 +++ .../user/guest/ListGuestOsCategoriesCmd.java | 2 +- .../command/user/guest/ListGuestOsCmd.java | 7 +--- .../api/response/GuestOSCategoryResponse.java | 10 +++--- .../api/response/GuestOSResponse.java | 20 ++++++------ .../com/cloud/storage/GuestOSCategoryVO.java | 16 +++++----- core/src/com/cloud/storage/GuestOSVO.java | 32 +++++++++---------- server/src/com/cloud/api/ApiDBUtils.java | 3 ++ .../src/com/cloud/api/ApiResponseHelper.java | 19 +++++++++++ 11 files changed, 71 insertions(+), 46 deletions(-) diff --git a/api/src/com/cloud/storage/GuestOS.java b/api/src/com/cloud/storage/GuestOS.java index b9727db6612..828ba27abaf 100644 --- a/api/src/com/cloud/storage/GuestOS.java +++ b/api/src/com/cloud/storage/GuestOS.java @@ -20,6 +20,8 @@ public interface GuestOS { long getId(); + String getUuid(); + String getName(); String getDisplayName(); diff --git a/api/src/com/cloud/storage/GuestOsCategory.java b/api/src/com/cloud/storage/GuestOsCategory.java index 42320d9eec8..cae4518fc0b 100644 --- a/api/src/com/cloud/storage/GuestOsCategory.java +++ b/api/src/com/cloud/storage/GuestOsCategory.java @@ -21,6 +21,8 @@ public interface GuestOsCategory { public static final String CATEGORY_NONE ="None"; long getId(); + String getUuid(); + String getName(); void setName(String name); diff --git a/api/src/org/apache/cloudstack/api/ResponseGenerator.java b/api/src/org/apache/cloudstack/api/ResponseGenerator.java index 7f1ef48144d..819f4dd63c1 100644 --- a/api/src/org/apache/cloudstack/api/ResponseGenerator.java +++ b/api/src/org/apache/cloudstack/api/ResponseGenerator.java @@ -41,6 +41,7 @@ import org.apache.cloudstack.api.response.EventResponse; import org.apache.cloudstack.api.response.ExtractResponse; import org.apache.cloudstack.api.response.FirewallResponse; import org.apache.cloudstack.api.response.FirewallRuleResponse; +import org.apache.cloudstack.api.response.GuestOSResponse; import org.apache.cloudstack.api.response.HostResponse; import org.apache.cloudstack.api.response.HypervisorCapabilitiesResponse; import org.apache.cloudstack.api.response.IPAddressResponse; @@ -141,6 +142,7 @@ import com.cloud.projects.Project; import com.cloud.projects.ProjectAccount; import com.cloud.projects.ProjectInvitation; import com.cloud.server.ResourceTag; +import com.cloud.storage.GuestOS; import com.cloud.storage.Snapshot; import com.cloud.storage.StoragePool; import com.cloud.storage.Swift; @@ -367,4 +369,6 @@ public interface ResponseGenerator { AutoScaleVmProfileResponse createAutoScaleVmProfileResponse(AutoScaleVmProfile profile); AutoScaleVmGroupResponse createAutoScaleVmGroupResponse(AutoScaleVmGroup vmGroup); + + GuestOSResponse createGuestOSResponse(GuestOS os); } diff --git a/api/src/org/apache/cloudstack/api/command/user/guest/ListGuestOsCategoriesCmd.java b/api/src/org/apache/cloudstack/api/command/user/guest/ListGuestOsCategoriesCmd.java index 06c2208b06f..a98bd8681b0 100644 --- a/api/src/org/apache/cloudstack/api/command/user/guest/ListGuestOsCategoriesCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/guest/ListGuestOsCategoriesCmd.java @@ -79,7 +79,7 @@ public class ListGuestOsCategoriesCmd extends BaseListCmd { List osCatResponses = new ArrayList(); for (GuestOsCategory osCategory : result.first()) { GuestOSCategoryResponse categoryResponse = new GuestOSCategoryResponse(); - categoryResponse.setId(osCategory.getId()); + categoryResponse.setId(osCategory.getUuid()); categoryResponse.setName(osCategory.getName()); categoryResponse.setObjectName("oscategory"); diff --git a/api/src/org/apache/cloudstack/api/command/user/guest/ListGuestOsCmd.java b/api/src/org/apache/cloudstack/api/command/user/guest/ListGuestOsCmd.java index 7a43f2bda7d..c47c0b4a0bd 100644 --- a/api/src/org/apache/cloudstack/api/command/user/guest/ListGuestOsCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/guest/ListGuestOsCmd.java @@ -85,12 +85,7 @@ public class ListGuestOsCmd extends BaseListCmd { ListResponse response = new ListResponse(); List osResponses = new ArrayList(); for (GuestOS guestOS : result.first()) { - GuestOSResponse guestOSResponse = new GuestOSResponse(); - guestOSResponse.setDescription(guestOS.getDisplayName()); - guestOSResponse.setId(guestOS.getId()); - guestOSResponse.setOsCategoryId(guestOS.getCategoryId()); - - guestOSResponse.setObjectName("ostype"); + GuestOSResponse guestOSResponse = _responseGenerator.createGuestOSResponse(guestOS); osResponses.add(guestOSResponse); } diff --git a/api/src/org/apache/cloudstack/api/response/GuestOSCategoryResponse.java b/api/src/org/apache/cloudstack/api/response/GuestOSCategoryResponse.java index a2716862bf1..62537d90533 100644 --- a/api/src/org/apache/cloudstack/api/response/GuestOSCategoryResponse.java +++ b/api/src/org/apache/cloudstack/api/response/GuestOSCategoryResponse.java @@ -24,17 +24,17 @@ import org.apache.cloudstack.api.BaseResponse; public class GuestOSCategoryResponse extends BaseResponse { @SerializedName(ApiConstants.ID) @Param(description="the ID of the OS category") - private IdentityProxy id = new IdentityProxy("guest_os_category"); + private String id; @SerializedName(ApiConstants.NAME) @Param(description="the name of the OS category") private String name; - 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 String getName() { diff --git a/api/src/org/apache/cloudstack/api/response/GuestOSResponse.java b/api/src/org/apache/cloudstack/api/response/GuestOSResponse.java index 6c154809f7f..469c3100941 100644 --- a/api/src/org/apache/cloudstack/api/response/GuestOSResponse.java +++ b/api/src/org/apache/cloudstack/api/response/GuestOSResponse.java @@ -24,28 +24,28 @@ import org.apache.cloudstack.api.BaseResponse; public class GuestOSResponse extends BaseResponse { @SerializedName(ApiConstants.ID) @Param(description="the ID of the OS type") - private IdentityProxy id = new IdentityProxy("guest_os"); + private String id; @SerializedName(ApiConstants.OS_CATEGORY_ID) @Param(description="the ID of the OS category") - private IdentityProxy osCategoryId = new IdentityProxy("guest_os_category"); + private String osCategoryId; @SerializedName(ApiConstants.DESCRIPTION) @Param(description="the name/description of the OS type") private String description; - 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 Long getOsCategoryId() { - return osCategoryId.getValue(); + public String getOsCategoryId() { + return osCategoryId; } - public void setOsCategoryId(Long osCategoryId) { - this.osCategoryId.setValue(osCategoryId); + public void setOsCategoryId(String osCategoryId) { + this.osCategoryId = osCategoryId; } public String getDescription() { diff --git a/core/src/com/cloud/storage/GuestOSCategoryVO.java b/core/src/com/cloud/storage/GuestOSCategoryVO.java index 76b557c654c..dfe7028dbe3 100644 --- a/core/src/com/cloud/storage/GuestOSCategoryVO.java +++ b/core/src/com/cloud/storage/GuestOSCategoryVO.java @@ -29,28 +29,28 @@ import org.apache.cloudstack.api.Identity; @Entity @Table(name="guest_os_category") -public class GuestOSCategoryVO implements GuestOsCategory, Identity { +public class GuestOSCategoryVO implements GuestOsCategory { @Id @GeneratedValue(strategy=GenerationType.IDENTITY) @Column(name="id") long id; - + @Column(name="name") String name; - + @Column(name="uuid") String uuid = UUID.randomUUID().toString(); - + @Override public long getId() { return id; } - + @Override public String getName() { - return name; + return name; } - + @Override public void setName(String name) { this.name = name; @@ -60,7 +60,7 @@ public class GuestOSCategoryVO implements GuestOsCategory, Identity { public String getUuid() { return this.uuid; } - + public void setUuid(String uuid) { this.uuid = uuid; } diff --git a/core/src/com/cloud/storage/GuestOSVO.java b/core/src/com/cloud/storage/GuestOSVO.java index 547b2b70659..7fe7f6da234 100644 --- a/core/src/com/cloud/storage/GuestOSVO.java +++ b/core/src/com/cloud/storage/GuestOSVO.java @@ -29,60 +29,60 @@ import org.apache.cloudstack.api.Identity; @Entity @Table(name="guest_os") -public class GuestOSVO implements GuestOS, Identity { +public class GuestOSVO implements GuestOS { @Id @GeneratedValue(strategy=GenerationType.IDENTITY) @Column(name="id") long id; - + @Column(name="category_id") private long categoryId; - + @Column(name="name") String name; - + @Column(name="display_name") String displayName; - + @Column(name="uuid") String uuid = UUID.randomUUID().toString(); - + @Override public long getId() { return id; } - + public long getCategoryId() { return categoryId; } - + public void setCategoryId(long categoryId) { this.categoryId = categoryId; } - + @Override public String getName() { - return name; + return name; } - + public void setName(String name) { this.name = name; } - + @Override public String getDisplayName() { return displayName; } - + public void setDisplayName(String displayName) { this.displayName = displayName; } - + @Override public String getUuid() { - return this.uuid; + return this.uuid; } - + public void setUuid(String uuid) { this.uuid = uuid; } diff --git a/server/src/com/cloud/api/ApiDBUtils.java b/server/src/com/cloud/api/ApiDBUtils.java index 60a9b26db19..7c5f4b5e311 100755 --- a/server/src/com/cloud/api/ApiDBUtils.java +++ b/server/src/com/cloud/api/ApiDBUtils.java @@ -1017,6 +1017,9 @@ public class ApiDBUtils { return _asVmGroupDao.findById(groupId); } + public static GuestOSCategoryVO findGuestOsCategoryById(long catId){ + return _guestOSCategoryDao.findById(catId); + } /////////////////////////////////////////////////////////////////////// // Newly Added Utility Methods for List API refactoring // /////////////////////////////////////////////////////////////////////// diff --git a/server/src/com/cloud/api/ApiResponseHelper.java b/server/src/com/cloud/api/ApiResponseHelper.java index 5f584f72d39..0eeb8ca6f28 100755 --- a/server/src/com/cloud/api/ApiResponseHelper.java +++ b/server/src/com/cloud/api/ApiResponseHelper.java @@ -73,6 +73,7 @@ import org.apache.cloudstack.api.response.EventResponse; import org.apache.cloudstack.api.response.ExtractResponse; import org.apache.cloudstack.api.response.FirewallResponse; import org.apache.cloudstack.api.response.FirewallRuleResponse; +import org.apache.cloudstack.api.response.GuestOSResponse; import org.apache.cloudstack.api.response.HostResponse; import org.apache.cloudstack.api.response.HypervisorCapabilitiesResponse; import org.apache.cloudstack.api.response.ControlledViewEntityResponse; @@ -3472,4 +3473,22 @@ public class ApiResponseHelper implements ResponseGenerator { response.setObjectName("vpnconnection"); return response; } + + + + @Override + public GuestOSResponse createGuestOSResponse(GuestOS guestOS) { + GuestOSResponse response = new GuestOSResponse(); + response.setDescription(guestOS.getDisplayName()); + response.setId(guestOS.getUuid()); + GuestOSCategoryVO category = ApiDBUtils.findGuestOsCategoryById(guestOS.getCategoryId()); + if ( category != null ){ + response.setOsCategoryId(category.getUuid()); + } + + response.setObjectName("ostype"); + return response; + } + + } From 6b04f326f0ac78c7e8c8692212433a1721564966 Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Mon, 17 Dec 2012 20:43:37 -0800 Subject: [PATCH 123/421] api: Enable UTF-8 URI encoding for tomcat Signed-off-by: Rohit Yadav --- client/tomcatconf/server-nonssl.xml.in | 4 ++-- client/tomcatconf/server-ssl.xml.in | 2 +- client/tomcatconf/server.xml.in | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/client/tomcatconf/server-nonssl.xml.in b/client/tomcatconf/server-nonssl.xml.in index 607b0b3b8d6..847197cbae0 100755 --- a/client/tomcatconf/server-nonssl.xml.in +++ b/client/tomcatconf/server-nonssl.xml.in @@ -68,7 +68,7 @@ redirectPort="8443" /> --> - - --> - - Date: Mon, 17 Dec 2012 20:44:48 -0800 Subject: [PATCH 124/421] maven: Bump httpcore version, add guava and httpclient dependency Signed-off-by: Rohit Yadav --- pom.xml | 3 ++- server/pom.xml | 5 +++++ utils/pom.xml | 5 +++++ 3 files changed, 12 insertions(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 4a4276e981a..1fc60f93317 100644 --- a/pom.xml +++ b/pom.xml @@ -65,9 +65,10 @@ build213-svnkit-1.3-patch 1.5.0 1.7.1 + 14.0-rc1 5.6.100-1-SNAPSHOT 3.1 - 4.0 + 4.2.1 5.1.21 1.3.1 3.1.3 diff --git a/server/pom.xml b/server/pom.xml index e3308d85ea2..99da97fbe3c 100644 --- a/server/pom.xml +++ b/server/pom.xml @@ -42,6 +42,11 @@ httpcore ${cs.httpcore.version} + + org.apache.httpcomponents + httpclient + ${cs.httpcore.version} + mysql mysql-connector-java diff --git a/utils/pom.xml b/utils/pom.xml index 6bed67f8f21..b91c122d9e9 100644 --- a/utils/pom.xml +++ b/utils/pom.xml @@ -72,6 +72,11 @@ commons-discovery ${cs.discovery.version} + + com.google.guava + guava + ${cs.guava.version} + commons-logging commons-logging From d54d8cbcd7913bcc2c82a5fa64042849753e026a Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Mon, 17 Dec 2012 20:51:51 -0800 Subject: [PATCH 125/421] api: Fix ApiServer's handle() which runs on integration.api.port - Fix URI parsing using apache hc - Remove bloated c-like parsing code - Fix param processing - TODO: To use Guava's multimap Signed-off-by: Rohit Yadav --- server/src/com/cloud/api/ApiServer.java | 61 +++++++++++++------------ 1 file changed, 32 insertions(+), 29 deletions(-) diff --git a/server/src/com/cloud/api/ApiServer.java b/server/src/com/cloud/api/ApiServer.java index bb2044f2206..b440f17b9cc 100755 --- a/server/src/com/cloud/api/ApiServer.java +++ b/server/src/com/cloud/api/ApiServer.java @@ -23,6 +23,8 @@ import java.io.UnsupportedEncodingException; import java.net.InetAddress; import java.net.ServerSocket; import java.net.Socket; +import java.net.URI; +import java.net.URISyntaxException; import java.net.URLDecoder; import java.net.URLEncoder; import java.security.SecureRandom; @@ -53,12 +55,14 @@ import org.apache.cloudstack.api.command.user.event.ListEventsCmd; import org.apache.cloudstack.api.command.user.vm.ListVMsCmd; import org.apache.cloudstack.api.command.user.vmgroup.ListVMGroupsCmd; import org.apache.commons.codec.binary.Base64; +import org.apache.http.client.utils.URLEncodedUtils; import org.apache.http.ConnectionClosedException; import org.apache.http.HttpException; import org.apache.http.HttpRequest; import org.apache.http.HttpResponse; import org.apache.http.HttpServerConnection; import org.apache.http.HttpStatus; +import org.apache.http.NameValuePair; import org.apache.http.entity.BasicHttpEntity; import org.apache.http.impl.DefaultHttpResponseFactory; import org.apache.http.impl.DefaultHttpServerConnection; @@ -187,7 +191,6 @@ public class ApiServer implements HttpRequestHandler { } encodeApiResponse = Boolean.valueOf(configDao.getValue(Config.EncodeApiResponse.key())); - String jsonType = configDao.getValue(Config.JavaScriptDefaultContentType.key()); if (jsonType != null) { jsonContentType = jsonType; @@ -199,10 +202,14 @@ public class ApiServer implements HttpRequestHandler { } } + // NOTE: handle() only handles over the wire (OTW) requests from integration.api.port 8096 + // If integration api port is not configured, actual OTW requests will be received by ApiServlet @SuppressWarnings({ "unchecked", "rawtypes" }) @Override - public void handle(HttpRequest request, HttpResponse response, HttpContext context) throws HttpException, IOException { - // get some information for the access log... + public void handle(HttpRequest request, HttpResponse response, HttpContext context) + throws HttpException, IOException { + + // Create StringBuffer to log information in access log StringBuffer sb = new StringBuffer(); HttpServerConnection connObj = (HttpServerConnection) context.getAttribute("http.connection"); if (connObj instanceof SocketHttpServerConnection) { @@ -212,40 +219,31 @@ public class ApiServer implements HttpRequestHandler { sb.append(request.getRequestLine()); try { - String uri = request.getRequestLine().getUri(); - int requestParamsStartIndex = uri.indexOf('?'); - if (requestParamsStartIndex >= 0) { - uri = uri.substring(requestParamsStartIndex + 1); - } - - String[] paramArray = uri.split("&"); - if (paramArray.length < 1) { - s_logger.info("no parameters received for request: " + uri + ", aborting..."); - return; + List paramList = null; + try { + paramList = URLEncodedUtils.parse(new URI(request.getRequestLine().getUri()), "UTF-8"); + } catch (URISyntaxException e) { + s_logger.error("Error parsing url request", e); } + // Use Multimap as the parameter map should be in the form (name=String, value=String[]) + // So parameter values are stored in a list for the same name key + // APITODO: Use Guava's (import com.google.common.collect.Multimap;) + // (Immutable)Multimap paramMultiMap = HashMultimap.create(); + // Map> parameterMap = paramMultiMap.asMap(); Map parameterMap = new HashMap(); - - String responseType = BaseCmd.RESPONSE_TYPE_XML; - for (String paramEntry : paramArray) { - String[] paramValue = paramEntry.split("="); - if (paramValue.length != 2) { - s_logger.info("malformed parameter: " + paramEntry + ", skipping"); + String responseType = BaseCmd.RESPONSE_TYPE_JSON; + for (NameValuePair param : paramList) { + if (param.getName().equalsIgnoreCase("response")) { + responseType = param.getValue(); continue; } - if ("response".equalsIgnoreCase(paramValue[0])) { - responseType = paramValue[1]; - } else { - // according to the servlet spec, the parameter map should be in the form (name=String, - // value=String[]), so - // parameter values will be stored in an array - parameterMap.put(/* name */paramValue[0], /* value */new String[] { paramValue[1] }); - } + parameterMap.put(param.getName(), new String[] { param.getValue() }); } - // Check responseType, if not among valid types, fallback to XML + // Check responseType, if not among valid types, fallback to JSON if (!(responseType.equals(BaseCmd.RESPONSE_TYPE_JSON) || responseType.equals(BaseCmd.RESPONSE_TYPE_XML))) - responseType = BaseCmd.RESPONSE_TYPE_XML; + responseType = BaseCmd.RESPONSE_TYPE_JSON; try { // always trust commands from API port, user context will always be UID_SYSTEM/ACCOUNT_ID_SYSTEM @@ -379,6 +377,11 @@ public class ApiServer implements HttpRequestHandler { UserContext ctx = UserContext.current(); Long callerUserId = ctx.getCallerUserId(); Account caller = ctx.getCaller(); + + // Queue command based on Cmd super class: + // BaseCmd: cmd is dispatched to ApiDispatcher, executed, serialized and returned. + // BaseAsyncCreateCmd: cmd params are processed and create() is called, then same workflow as BaseAsyncCmd. + // BaseAsyncCmd: cmd is processed and submitted as an AsyncJob, job related info is serialized and returned. if (cmdObj instanceof BaseAsyncCmd) { Long objectId = null; String objectEntityTable = null; From 3d344738b1faad2b05a97e3e0a45f70596a6469e Mon Sep 17 00:00:00 2001 From: Min Chen Date: Mon, 17 Dec 2012 23:24:08 -0800 Subject: [PATCH 126/421] Fix ControlledEntityResponse interface to remove IdentityProxy for projectId and domainId. Signed-off-by: Min Chen --- .../com/cloud/network/as/AutoScalePolicy.java | 2 + .../api/command/user/user/AddVpnUserCmd.java | 31 +++++----- .../api/response/AutoScalePolicyResponse.java | 21 +++---- .../response/AutoScaleVmGroupResponse.java | 13 ++-- .../response/AutoScaleVmProfileResponse.java | 12 ++-- .../api/response/ConditionResponse.java | 12 ++-- .../response/ControlledEntityResponse.java | 4 +- .../api/response/IPAddressResponse.java | 12 ++-- .../api/response/LoadBalancerResponse.java | 13 ++-- .../api/response/NetworkResponse.java | 13 ++-- .../api/response/PrivateGatewayResponse.java | 12 ++-- .../api/response/RemoteAccessVpnResponse.java | 13 ++-- .../api/response/ResourceCountResponse.java | 12 ++-- .../api/response/ResourceLimitResponse.java | 12 ++-- .../Site2SiteCustomerGatewayResponse.java | 12 ++-- .../Site2SiteVpnConnectionResponse.java | 12 ++-- .../response/Site2SiteVpnGatewayResponse.java | 12 ++-- .../api/response/SnapshotResponse.java | 17 +++--- .../api/response/StaticRouteResponse.java | 12 ++-- .../api/response/TemplateResponse.java | 12 ++-- .../api/response/UserVmResponse.java | 19 +----- .../VirtualRouterProviderResponse.java | 8 +-- .../api/response/VlanIpRangeResponse.java | 12 ++-- .../api/response/VolumeResponse.java | 13 ++-- .../cloudstack/api/response/VpcResponse.java | 12 ++-- .../api/response/VpnUsersResponse.java | 13 ++-- .../src/com/cloud/api/ApiResponseHelper.java | 22 ++++--- .../api/commands/GetUsageRecordsCmd.java | 59 ++++++++++--------- .../api/response/UsageRecordResponse.java | 36 +++++------ 29 files changed, 231 insertions(+), 222 deletions(-) diff --git a/api/src/com/cloud/network/as/AutoScalePolicy.java b/api/src/com/cloud/network/as/AutoScalePolicy.java index cef198f0947..4ba2d158d83 100644 --- a/api/src/com/cloud/network/as/AutoScalePolicy.java +++ b/api/src/com/cloud/network/as/AutoScalePolicy.java @@ -23,6 +23,8 @@ public interface AutoScalePolicy extends ControlledEntity { long getId(); + String getUuid(); + public int getDuration(); public int getQuietTime(); diff --git a/api/src/org/apache/cloudstack/api/command/user/user/AddVpnUserCmd.java b/api/src/org/apache/cloudstack/api/command/user/user/AddVpnUserCmd.java index abd58b897c0..e8f8fc9cb3e 100644 --- a/api/src/org/apache/cloudstack/api/command/user/user/AddVpnUserCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/user/AddVpnUserCmd.java @@ -118,23 +118,26 @@ public class AddVpnUserCmd extends BaseAsyncCreateCmd { @Override public void execute(){ - VpnUser vpnUser = _entityMgr.findById(VpnUser.class, getEntityId()); - Account account = _entityMgr.findById(Account.class, vpnUser.getAccountId()); - if (!_ravService.applyVpnUsers(vpnUser.getAccountId(), userName)) { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to add vpn user"); - } + VpnUser vpnUser = _entityMgr.findById(VpnUser.class, getEntityId()); + Account account = _entityMgr.findById(Account.class, vpnUser.getAccountId()); + if (!_ravService.applyVpnUsers(vpnUser.getAccountId(), userName)) { + throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to add vpn user"); + } - VpnUsersResponse vpnResponse = new VpnUsersResponse(); - vpnResponse.setId(vpnUser.getId()); - vpnResponse.setUserName(vpnUser.getUsername()); - vpnResponse.setAccountName(account.getAccountName()); + VpnUsersResponse vpnResponse = new VpnUsersResponse(); + vpnResponse.setId(vpnUser.getId()); + vpnResponse.setUserName(vpnUser.getUsername()); + vpnResponse.setAccountName(account.getAccountName()); - vpnResponse.setDomainId(account.getDomainId()); - vpnResponse.setDomainName(_entityMgr.findById(Domain.class, account.getDomainId()).getName()); + Domain domain = _entityMgr.findById(Domain.class, account.getDomainId()); + if (domain != null) { + vpnResponse.setDomainId(domain.getUuid()); + vpnResponse.setDomainName(domain.getName()); + } - vpnResponse.setResponseName(getCommandName()); - vpnResponse.setObjectName("vpnuser"); - this.setResponseObject(vpnResponse); + vpnResponse.setResponseName(getCommandName()); + vpnResponse.setObjectName("vpnuser"); + this.setResponseObject(vpnResponse); } @Override diff --git a/api/src/org/apache/cloudstack/api/response/AutoScalePolicyResponse.java b/api/src/org/apache/cloudstack/api/response/AutoScalePolicyResponse.java index 681147f6d0a..b1331394f58 100644 --- a/api/src/org/apache/cloudstack/api/response/AutoScalePolicyResponse.java +++ b/api/src/org/apache/cloudstack/api/response/AutoScalePolicyResponse.java @@ -17,7 +17,6 @@ package org.apache.cloudstack.api.response; import org.apache.cloudstack.api.ApiConstants; -import com.cloud.utils.IdentityProxy; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; import org.apache.cloudstack.api.BaseResponse; @@ -28,7 +27,7 @@ public class AutoScalePolicyResponse extends BaseResponse implements ControlledE @SerializedName(ApiConstants.ID) @Param(description = "the autoscale policy ID") - private IdentityProxy id = new IdentityProxy("autoscale_policies"); + private String id; @SerializedName(ApiConstants.ACTION) @Param(description = "the action to be executed if all the conditions evaluate to true for the specified duration.") @@ -50,19 +49,19 @@ public class AutoScalePolicyResponse extends BaseResponse implements ControlledE private String accountName; @SerializedName(ApiConstants.PROJECT_ID) @Param(description="the project id autoscale policy") - private IdentityProxy projectId = new IdentityProxy("projects"); + private String projectId; @SerializedName(ApiConstants.PROJECT) @Param(description="the project name of the autoscale policy") private String projectName; @SerializedName(ApiConstants.DOMAIN_ID) @Param(description="the domain ID of the autoscale policy") - private IdentityProxy domainId = new IdentityProxy("domain"); + private String domainId; @SerializedName(ApiConstants.DOMAIN) @Param(description="the domain name of the autoscale policy") private String domainName; - public void setId(Long id) { - this.id.setValue(id); + public void setId(String id) { + this.id = id; } public void setDuration(Integer duration) { @@ -86,9 +85,11 @@ public class AutoScalePolicyResponse extends BaseResponse implements ControlledE this.accountName = accountName; } + + @Override - public void setDomainId(Long domainId) { - this.domainId.setValue(domainId); + public void setDomainId(String domainId) { + this.domainId = domainId; } @Override @@ -97,8 +98,8 @@ public class AutoScalePolicyResponse extends BaseResponse implements ControlledE } @Override - public void setProjectId(Long projectId) { - this.projectId.setValue(projectId); + public void setProjectId(String projectId) { + this.projectId = projectId; } @Override diff --git a/api/src/org/apache/cloudstack/api/response/AutoScaleVmGroupResponse.java b/api/src/org/apache/cloudstack/api/response/AutoScaleVmGroupResponse.java index 6f2a28df87f..a6ea46f2447 100644 --- a/api/src/org/apache/cloudstack/api/response/AutoScaleVmGroupResponse.java +++ b/api/src/org/apache/cloudstack/api/response/AutoScaleVmGroupResponse.java @@ -66,13 +66,13 @@ public class AutoScaleVmGroupResponse extends BaseResponse implements Controlled private String accountName; @SerializedName(ApiConstants.PROJECT_ID) @Param(description="the project id vm profile") - private IdentityProxy projectId = new IdentityProxy("projects"); + private String projectId; @SerializedName(ApiConstants.PROJECT) @Param(description="the project name of the vm profile") private String projectName; @SerializedName(ApiConstants.DOMAIN_ID) @Param(description="the domain ID of the vm profile") - private IdentityProxy domainId = new IdentityProxy("domain"); + private String domainId; @SerializedName(ApiConstants.DOMAIN) @Param(description="the domain name of the vm profile") private String domainName; @@ -122,9 +122,10 @@ public class AutoScaleVmGroupResponse extends BaseResponse implements Controlled this.accountName = accountName; } + @Override - public void setDomainId(Long domainId) { - this.domainId.setValue(domainId); + public void setDomainId(String domainId) { + this.domainId = domainId; } @Override @@ -133,8 +134,8 @@ public class AutoScaleVmGroupResponse extends BaseResponse implements Controlled } @Override - public void setProjectId(Long projectId) { - this.projectId.setValue(projectId); + public void setProjectId(String projectId) { + this.projectId = projectId; } @Override diff --git a/api/src/org/apache/cloudstack/api/response/AutoScaleVmProfileResponse.java b/api/src/org/apache/cloudstack/api/response/AutoScaleVmProfileResponse.java index 7205daa7ad3..cc338bfa383 100644 --- a/api/src/org/apache/cloudstack/api/response/AutoScaleVmProfileResponse.java +++ b/api/src/org/apache/cloudstack/api/response/AutoScaleVmProfileResponse.java @@ -75,7 +75,7 @@ public class AutoScaleVmProfileResponse extends BaseResponse implements Controll @SerializedName(ApiConstants.PROJECT_ID) @Param(description = "the project id vm profile") - private IdentityProxy projectId = new IdentityProxy("projects"); + private String projectId; @SerializedName(ApiConstants.PROJECT) @Param(description = "the project name of the vm profile") @@ -83,7 +83,7 @@ public class AutoScaleVmProfileResponse extends BaseResponse implements Controll @SerializedName(ApiConstants.DOMAIN_ID) @Param(description = "the domain ID of the vm profile") - private IdentityProxy domainId = new IdentityProxy("domain"); + private String domainId; @SerializedName(ApiConstants.DOMAIN) @Param(description = "the domain name of the vm profile") @@ -128,8 +128,8 @@ public class AutoScaleVmProfileResponse extends BaseResponse implements Controll } @Override - public void setDomainId(Long domainId) { - this.domainId.setValue(domainId); + public void setDomainId(String domainId) { + this.domainId = domainId; } @Override @@ -138,8 +138,8 @@ public class AutoScaleVmProfileResponse extends BaseResponse implements Controll } @Override - public void setProjectId(Long projectId) { - this.projectId.setValue(projectId); + public void setProjectId(String projectId) { + this.projectId = projectId; } @Override diff --git a/api/src/org/apache/cloudstack/api/response/ConditionResponse.java b/api/src/org/apache/cloudstack/api/response/ConditionResponse.java index 144d4f33066..83ff222bf4a 100644 --- a/api/src/org/apache/cloudstack/api/response/ConditionResponse.java +++ b/api/src/org/apache/cloudstack/api/response/ConditionResponse.java @@ -45,7 +45,7 @@ public class ConditionResponse extends BaseResponse implements ControlledEntityR @SerializedName(ApiConstants.DOMAIN_ID) @Param(description = "the domain id of the Condition owner") - private final IdentityProxy domainId = new IdentityProxy("domain"); + private String domainId; @SerializedName(ApiConstants.DOMAIN) @Param(description = "the domain name of the owner.") @@ -57,7 +57,7 @@ public class ConditionResponse extends BaseResponse implements ControlledEntityR @SerializedName(ApiConstants.PROJECT_ID) @Param(description = "the project id of the Condition.") - private final IdentityProxy projectId = new IdentityProxy("projects"); + private String projectId; @SerializedName(ApiConstants.PROJECT) @Param(description = "the project name of the Condition") @@ -93,8 +93,8 @@ public class ConditionResponse extends BaseResponse implements ControlledEntityR } @Override - public void setProjectId(Long projectId) { - this.projectId.setValue(projectId); + public void setProjectId(String projectId) { + this.projectId = projectId; } public void setZoneId(Long zoneId) { @@ -107,8 +107,8 @@ public class ConditionResponse extends BaseResponse implements ControlledEntityR } @Override - public void setDomainId(Long domainId) { - this.domainId.setValue(domainId); + public void setDomainId(String domainId) { + this.domainId = domainId; } @Override diff --git a/api/src/org/apache/cloudstack/api/response/ControlledEntityResponse.java b/api/src/org/apache/cloudstack/api/response/ControlledEntityResponse.java index 250e432961a..598ef082253 100644 --- a/api/src/org/apache/cloudstack/api/response/ControlledEntityResponse.java +++ b/api/src/org/apache/cloudstack/api/response/ControlledEntityResponse.java @@ -20,11 +20,11 @@ public interface ControlledEntityResponse { public void setAccountName(String accountName); - public void setProjectId(Long projectId); + public void setProjectId(String projectId); public void setProjectName(String projectName); - public void setDomainId(Long domainId); + public void setDomainId(String domainId); public void setDomainName(String domainName); } diff --git a/api/src/org/apache/cloudstack/api/response/IPAddressResponse.java b/api/src/org/apache/cloudstack/api/response/IPAddressResponse.java index 15ac72d5b2c..44dcc694301 100644 --- a/api/src/org/apache/cloudstack/api/response/IPAddressResponse.java +++ b/api/src/org/apache/cloudstack/api/response/IPAddressResponse.java @@ -49,13 +49,13 @@ public class IPAddressResponse extends BaseResponse implements ControlledEntityR 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 the public IP address is associated with") - private IdentityProxy domainId = new IdentityProxy("domain"); + private String domainId; @SerializedName(ApiConstants.DOMAIN) @Param(description="the domain the public IP address is associated with") private String domainName; @@ -140,8 +140,8 @@ public class IPAddressResponse extends BaseResponse implements ControlledEntityR } @Override - public void setDomainId(Long domainId) { - this.domainId.setValue(domainId); + public void setDomainId(String domainId) { + this.domainId = domainId; } @Override @@ -203,8 +203,8 @@ public class IPAddressResponse extends BaseResponse implements ControlledEntityR } @Override - public void setProjectId(Long projectId) { - this.projectId.setValue(projectId); + public void setProjectId(String projectId) { + this.projectId = projectId; } @Override diff --git a/api/src/org/apache/cloudstack/api/response/LoadBalancerResponse.java b/api/src/org/apache/cloudstack/api/response/LoadBalancerResponse.java index 6e02b70d8de..c1549b06a33 100644 --- a/api/src/org/apache/cloudstack/api/response/LoadBalancerResponse.java +++ b/api/src/org/apache/cloudstack/api/response/LoadBalancerResponse.java @@ -66,14 +66,14 @@ public class LoadBalancerResponse extends BaseResponse implements ControlledEnti private String accountName; @SerializedName(ApiConstants.PROJECT_ID) @Param(description="the project id of the load balancer") - private IdentityProxy projectId = new IdentityProxy("projects"); + private String projectId; @SerializedName(ApiConstants.PROJECT) @Param(description="the project name of the load balancer") private String projectName; @SerializedName(ApiConstants.DOMAIN_ID) @Param(description = "the domain ID of the load balancer rule") - private IdentityProxy domainId = new IdentityProxy("domain"); + private String domainId; @SerializedName(ApiConstants.DOMAIN) @Param(description = "the domain of the load balancer rule") @@ -126,8 +126,9 @@ public class LoadBalancerResponse extends BaseResponse implements ControlledEnti this.accountName = accountName; } - public void setDomainId(Long domainId) { - this.domainId.setValue(domainId); + @Override + public void setDomainId(String domainId) { + this.domainId = domainId; } public void setDomainName(String domainName) { @@ -147,8 +148,8 @@ public class LoadBalancerResponse extends BaseResponse implements ControlledEnti } @Override - public void setProjectId(Long projectId) { - this.projectId.setValue(projectId); + public void setProjectId(String projectId) { + this.projectId = projectId; } @Override diff --git a/api/src/org/apache/cloudstack/api/response/NetworkResponse.java b/api/src/org/apache/cloudstack/api/response/NetworkResponse.java index 3f0af615155..03fa586076c 100644 --- a/api/src/org/apache/cloudstack/api/response/NetworkResponse.java +++ b/api/src/org/apache/cloudstack/api/response/NetworkResponse.java @@ -106,13 +106,13 @@ public class NetworkResponse extends BaseResponse implements ControlledEntityRes 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 of the network owner") - private IdentityProxy domainId = new IdentityProxy("domain"); + private String domainId; @SerializedName(ApiConstants.DOMAIN) @Param(description="the domain name of the network owner") private String domain; @@ -204,8 +204,9 @@ public class NetworkResponse extends BaseResponse implements ControlledEntityRes this.accountName = accountName; } - public void setDomainId(Long domainId) { - this.domainId.setValue(domainId); + @Override + public void setDomainId(String domainId) { + this.domainId = domainId; } public void setNetworkOfferingName(String networkOfferingName) { @@ -249,8 +250,8 @@ public class NetworkResponse extends BaseResponse implements ControlledEntityRes } @Override - public void setProjectId(Long projectId) { - this.projectId.setValue(projectId); + public void setProjectId(String projectId) { + this.projectId = projectId; } @Override diff --git a/api/src/org/apache/cloudstack/api/response/PrivateGatewayResponse.java b/api/src/org/apache/cloudstack/api/response/PrivateGatewayResponse.java index ef2d06a4812..931a6de15dc 100644 --- a/api/src/org/apache/cloudstack/api/response/PrivateGatewayResponse.java +++ b/api/src/org/apache/cloudstack/api/response/PrivateGatewayResponse.java @@ -56,14 +56,14 @@ public class PrivateGatewayResponse extends BaseResponse implements ControlledEn private String accountName; @SerializedName(ApiConstants.PROJECT_ID) @Param(description="the project id of the private gateway") - private IdentityProxy projectId = new IdentityProxy("projects"); + private String projectId; @SerializedName(ApiConstants.PROJECT) @Param(description="the project name of the private gateway") private String projectName; @SerializedName(ApiConstants.DOMAIN_ID) @Param(description = "the ID of the domain associated with the private gateway") - private IdentityProxy domainId = new IdentityProxy("domain"); + private String domainId; @SerializedName(ApiConstants.DOMAIN) @Param(description = "the domain associated with the private gateway") @@ -115,8 +115,8 @@ public class PrivateGatewayResponse extends BaseResponse implements ControlledEn } @Override - public void setDomainId(Long domainId) { - this.domainId.setValue(domainId); + public void setDomainId(String domainId) { + this.domainId = domainId; } @Override @@ -125,8 +125,8 @@ public class PrivateGatewayResponse extends BaseResponse implements ControlledEn } @Override - public void setProjectId(Long projectId) { - this.projectId.setValue(projectId); + public void setProjectId(String projectId) { + this.projectId = projectId; } @Override diff --git a/api/src/org/apache/cloudstack/api/response/RemoteAccessVpnResponse.java b/api/src/org/apache/cloudstack/api/response/RemoteAccessVpnResponse.java index 038ba73bdb2..732e2d1da6d 100644 --- a/api/src/org/apache/cloudstack/api/response/RemoteAccessVpnResponse.java +++ b/api/src/org/apache/cloudstack/api/response/RemoteAccessVpnResponse.java @@ -41,13 +41,13 @@ public class RemoteAccessVpnResponse extends BaseResponse implements ControlledE private String accountName; @SerializedName(ApiConstants.PROJECT_ID) @Param(description="the project id of the vpn") - private IdentityProxy projectId = new IdentityProxy("projects"); + private String projectId; @SerializedName(ApiConstants.PROJECT) @Param(description="the project name of the vpn") private String projectName; @SerializedName(ApiConstants.DOMAIN_ID) @Param(description="the domain id of the account of the remote access vpn") - private IdentityProxy domainId = new IdentityProxy("domain"); + private String domainId; @SerializedName(ApiConstants.DOMAIN) @Param(description="the domain name of the account of the remote access vpn") private String domainName; @@ -71,8 +71,9 @@ public class RemoteAccessVpnResponse extends BaseResponse implements ControlledE this.accountName = accountName; } - public void setDomainId(Long domainId) { - this.domainId.setValue(domainId); + @Override + public void setDomainId(String domainId) { + this.domainId = domainId; } public void setDomainName(String name) { @@ -88,8 +89,8 @@ public class RemoteAccessVpnResponse extends BaseResponse implements ControlledE } @Override - public void setProjectId(Long projectId) { - this.projectId.setValue(projectId); + public void setProjectId(String projectId) { + this.projectId = projectId; } @Override diff --git a/api/src/org/apache/cloudstack/api/response/ResourceCountResponse.java b/api/src/org/apache/cloudstack/api/response/ResourceCountResponse.java index ac3ba4e881f..9e62f4ff7f5 100644 --- a/api/src/org/apache/cloudstack/api/response/ResourceCountResponse.java +++ b/api/src/org/apache/cloudstack/api/response/ResourceCountResponse.java @@ -28,14 +28,14 @@ public class ResourceCountResponse extends BaseResponse implements ControlledEnt private String accountName; @SerializedName(ApiConstants.PROJECT_ID) @Param(description="the project id for which resource count's are updated") - private IdentityProxy projectId = new IdentityProxy("projects"); + private String projectId; @SerializedName(ApiConstants.PROJECT) @Param(description="the project name for which resource count's are updated") private String projectName; @SerializedName(ApiConstants.DOMAIN_ID) @Param(description="the domain ID for which resource count's are updated") - private IdentityProxy domainId = new IdentityProxy("domain"); + private String domainId; @SerializedName(ApiConstants.DOMAIN) @Param(description="the domain name for which resource count's are updated") private String domainName; @@ -52,8 +52,8 @@ public class ResourceCountResponse extends BaseResponse implements ControlledEnt } @Override - public void setDomainId(Long domainId) { - this.domainId.setValue(domainId); + public void setDomainId(String domainId) { + this.domainId = domainId; } @Override @@ -70,8 +70,8 @@ public class ResourceCountResponse extends BaseResponse implements ControlledEnt } @Override - public void setProjectId(Long projectId) { - this.projectId.setValue(projectId); + public void setProjectId(String projectId) { + this.projectId = projectId; } @Override diff --git a/api/src/org/apache/cloudstack/api/response/ResourceLimitResponse.java b/api/src/org/apache/cloudstack/api/response/ResourceLimitResponse.java index 854ebee0d3b..d87921abde7 100644 --- a/api/src/org/apache/cloudstack/api/response/ResourceLimitResponse.java +++ b/api/src/org/apache/cloudstack/api/response/ResourceLimitResponse.java @@ -28,7 +28,7 @@ public class ResourceLimitResponse extends BaseResponse implements ControlledEnt private String accountName; @SerializedName(ApiConstants.DOMAIN_ID) @Param(description="the domain ID of the resource limit") - private IdentityProxy domainId = new IdentityProxy("domain"); + private String domainId; @SerializedName(ApiConstants.DOMAIN) @Param(description="the domain name of the resource limit") private String domainName; @@ -40,7 +40,7 @@ public class ResourceLimitResponse extends BaseResponse implements ControlledEnt private Long max; @SerializedName(ApiConstants.PROJECT_ID) @Param(description="the project id of the resource limit") - private IdentityProxy projectId = new IdentityProxy("projects"); + private String projectId; @SerializedName(ApiConstants.PROJECT) @Param(description="the project name of the resource limit") private String projectName; @@ -56,8 +56,8 @@ public class ResourceLimitResponse extends BaseResponse implements ControlledEnt } @Override - public void setDomainId(Long domainId) { - this.domainId.setValue(domainId); + public void setDomainId(String domainId) { + this.domainId = domainId; } @Override @@ -74,7 +74,7 @@ public class ResourceLimitResponse extends BaseResponse implements ControlledEnt } @Override - public void setProjectId(Long projectId) { - this.projectId.setValue(projectId); + public void setProjectId(String projectId) { + this.projectId = projectId; } } diff --git a/api/src/org/apache/cloudstack/api/response/Site2SiteCustomerGatewayResponse.java b/api/src/org/apache/cloudstack/api/response/Site2SiteCustomerGatewayResponse.java index 29bfeaafad9..10c468da480 100644 --- a/api/src/org/apache/cloudstack/api/response/Site2SiteCustomerGatewayResponse.java +++ b/api/src/org/apache/cloudstack/api/response/Site2SiteCustomerGatewayResponse.java @@ -63,13 +63,13 @@ public class Site2SiteCustomerGatewayResponse extends BaseResponse implements Co private String accountName; @SerializedName(ApiConstants.PROJECT_ID) @Param(description="the project id") - private IdentityProxy projectId = new IdentityProxy("projects"); + private String projectId; @SerializedName(ApiConstants.PROJECT) @Param(description="the project name") private String projectName; @SerializedName(ApiConstants.DOMAIN_ID) @Param(description="the domain id of the owner") - private IdentityProxy domainId = new IdentityProxy("domain"); + private String domainId; @SerializedName(ApiConstants.DOMAIN) @Param(description="the domain name of the owner") private String domain; @@ -131,8 +131,8 @@ public class Site2SiteCustomerGatewayResponse extends BaseResponse implements Co } @Override - public void setProjectId(Long projectId) { - this.projectId.setValue(projectId); + public void setProjectId(String projectId) { + this.projectId = projectId; } @Override @@ -141,8 +141,8 @@ public class Site2SiteCustomerGatewayResponse extends BaseResponse implements Co } @Override - public void setDomainId(Long domainId) { - this.domainId.setValue(domainId); + public void setDomainId(String domainId) { + this.domainId = domainId; } @Override diff --git a/api/src/org/apache/cloudstack/api/response/Site2SiteVpnConnectionResponse.java b/api/src/org/apache/cloudstack/api/response/Site2SiteVpnConnectionResponse.java index cbddee7545f..4248acd5cc4 100644 --- a/api/src/org/apache/cloudstack/api/response/Site2SiteVpnConnectionResponse.java +++ b/api/src/org/apache/cloudstack/api/response/Site2SiteVpnConnectionResponse.java @@ -69,13 +69,13 @@ public class Site2SiteVpnConnectionResponse extends BaseResponse implements Cont private String accountName; @SerializedName(ApiConstants.PROJECT_ID) @Param(description="the project id") - private IdentityProxy projectId = new IdentityProxy("projects"); + private String projectId; @SerializedName(ApiConstants.PROJECT) @Param(description="the project name") private String projectName; @SerializedName(ApiConstants.DOMAIN_ID) @Param(description="the domain id of the owner") - private IdentityProxy domainId = new IdentityProxy("domain"); + private String domainId; @SerializedName(ApiConstants.DOMAIN) @Param(description="the domain name of the owner") private String domain; @@ -152,8 +152,8 @@ public class Site2SiteVpnConnectionResponse extends BaseResponse implements Cont } @Override - public void setProjectId(Long projectId) { - this.projectId.setValue(projectId); + public void setProjectId(String projectId) { + this.projectId = projectId; } @Override @@ -162,8 +162,8 @@ public class Site2SiteVpnConnectionResponse extends BaseResponse implements Cont } @Override - public void setDomainId(Long domainId) { - this.domainId.setValue(domainId); + public void setDomainId(String domainId) { + this.domainId = domainId; } @Override diff --git a/api/src/org/apache/cloudstack/api/response/Site2SiteVpnGatewayResponse.java b/api/src/org/apache/cloudstack/api/response/Site2SiteVpnGatewayResponse.java index 5165912830e..c193eaf2633 100644 --- a/api/src/org/apache/cloudstack/api/response/Site2SiteVpnGatewayResponse.java +++ b/api/src/org/apache/cloudstack/api/response/Site2SiteVpnGatewayResponse.java @@ -39,13 +39,13 @@ public class Site2SiteVpnGatewayResponse extends BaseResponse implements Control private String accountName; @SerializedName(ApiConstants.PROJECT_ID) @Param(description="the project id") - private IdentityProxy projectId = new IdentityProxy("projects"); + private String projectId; @SerializedName(ApiConstants.PROJECT) @Param(description="the project name") private String projectName; @SerializedName(ApiConstants.DOMAIN_ID) @Param(description="the domain id of the owner") - private IdentityProxy domainId = new IdentityProxy("domain"); + private String domainId; @SerializedName(ApiConstants.DOMAIN) @Param(description="the domain name of the owner") private String domain; @@ -75,8 +75,8 @@ public class Site2SiteVpnGatewayResponse extends BaseResponse implements Control } @Override - public void setProjectId(Long projectId) { - this.projectId.setValue(projectId); + public void setProjectId(String projectId) { + this.projectId = projectId; } @Override @@ -85,8 +85,8 @@ public class Site2SiteVpnGatewayResponse extends BaseResponse implements Control } @Override - public void setDomainId(Long domainId) { - this.domainId.setValue(domainId); + public void setDomainId(String domainId) { + this.domainId = domainId; } @Override diff --git a/api/src/org/apache/cloudstack/api/response/SnapshotResponse.java b/api/src/org/apache/cloudstack/api/response/SnapshotResponse.java index 05b178b9079..fff421c15d5 100644 --- a/api/src/org/apache/cloudstack/api/response/SnapshotResponse.java +++ b/api/src/org/apache/cloudstack/api/response/SnapshotResponse.java @@ -38,14 +38,14 @@ public class SnapshotResponse extends BaseResponse implements ControlledEntityRe @SerializedName(ApiConstants.DOMAIN_ID) @Param(description = "the domain ID of the snapshot's account") - private IdentityProxy domainId = new IdentityProxy("domain"); + private String domainId; @SerializedName(ApiConstants.DOMAIN) @Param(description = "the domain name of the snapshot's account") private String domainName; @SerializedName(ApiConstants.PROJECT_ID) @Param(description="the project id of the snapshot") - private IdentityProxy projectId = new IdentityProxy("projects"); + private String projectId; @SerializedName(ApiConstants.PROJECT) @Param(description="the project name of the snapshot") private String projectName; @@ -106,12 +106,13 @@ public class SnapshotResponse extends BaseResponse implements ControlledEntityRe this.accountName = accountName; } - public Long getDomainId() { - return domainId.getValue(); + public String getDomainId() { + return domainId; } - public void setDomainId(Long domainId) { - this.domainId.setValue(domainId); + @Override + public void setDomainId(String domainId) { + this.domainId = domainId; } public void setDomainName(String domainName) { @@ -151,8 +152,8 @@ public class SnapshotResponse extends BaseResponse implements ControlledEntityRe } @Override - public void setProjectId(Long projectId) { - this.projectId.setValue(projectId); + public void setProjectId(String projectId) { + this.projectId = projectId; } @Override diff --git a/api/src/org/apache/cloudstack/api/response/StaticRouteResponse.java b/api/src/org/apache/cloudstack/api/response/StaticRouteResponse.java index d6103808d6f..5cf4adfcef5 100644 --- a/api/src/org/apache/cloudstack/api/response/StaticRouteResponse.java +++ b/api/src/org/apache/cloudstack/api/response/StaticRouteResponse.java @@ -46,14 +46,14 @@ public class StaticRouteResponse extends BaseResponse implements ControlledEntit private String accountName; @SerializedName(ApiConstants.PROJECT_ID) @Param(description="the project id of the static route") - private IdentityProxy projectId = new IdentityProxy("projects"); + private String projectId; @SerializedName(ApiConstants.PROJECT) @Param(description="the project name of the static route") private String projectName; @SerializedName(ApiConstants.DOMAIN_ID) @Param(description = "the ID of the domain associated with the static route") - private IdentityProxy domainId = new IdentityProxy("domain"); + private String domainId; @SerializedName(ApiConstants.DOMAIN) @Param(description = "the domain associated with the static route") @@ -89,8 +89,8 @@ public class StaticRouteResponse extends BaseResponse implements ControlledEntit } @Override - public void setDomainId(Long domainId) { - this.domainId.setValue(domainId); + public void setDomainId(String domainId) { + this.domainId = domainId; } @Override @@ -99,8 +99,8 @@ public class StaticRouteResponse extends BaseResponse implements ControlledEntit } @Override - public void setProjectId(Long projectId) { - this.projectId.setValue(projectId); + public void setProjectId(String projectId) { + this.projectId = projectId; } @Override diff --git a/api/src/org/apache/cloudstack/api/response/TemplateResponse.java b/api/src/org/apache/cloudstack/api/response/TemplateResponse.java index 2cea0f682ef..0683b437ac6 100644 --- a/api/src/org/apache/cloudstack/api/response/TemplateResponse.java +++ b/api/src/org/apache/cloudstack/api/response/TemplateResponse.java @@ -101,7 +101,7 @@ public class TemplateResponse extends BaseResponse implements ControlledEntityRe private String domainName; @SerializedName(ApiConstants.DOMAIN_ID) @Param(description="the ID of the domain to which the template belongs") - private IdentityProxy domainId = new IdentityProxy("domain"); + private String domainId; @SerializedName(ApiConstants.IS_EXTRACTABLE) @Param(description="true if the template is extractable, false otherwise") private Boolean extractable; @@ -122,7 +122,7 @@ public class TemplateResponse extends BaseResponse implements ControlledEntityRe private String templateTag; @SerializedName(ApiConstants.PROJECT_ID) @Param(description="the project id of the template") - private IdentityProxy projectId = new IdentityProxy("projects"); + private String projectId; @SerializedName(ApiConstants.PROJECT) @Param(description="the project name of the template") private String projectName; @@ -237,8 +237,8 @@ public class TemplateResponse extends BaseResponse implements ControlledEntityRe } @Override - public void setDomainId(Long domainId) { - this.domainId.setValue(domainId); + public void setDomainId(String domainId) { + this.domainId = domainId; } public void setExtractable(Boolean extractable) { @@ -266,8 +266,8 @@ public class TemplateResponse extends BaseResponse implements ControlledEntityRe } @Override - public void setProjectId(Long projectId) { - this.projectId.setValue(projectId); + public void setProjectId(String projectId) { + this.projectId = projectId; } @Override diff --git a/api/src/org/apache/cloudstack/api/response/UserVmResponse.java b/api/src/org/apache/cloudstack/api/response/UserVmResponse.java index 4934d8b362e..bea841f5e09 100644 --- a/api/src/org/apache/cloudstack/api/response/UserVmResponse.java +++ b/api/src/org/apache/cloudstack/api/response/UserVmResponse.java @@ -200,6 +200,7 @@ public class UserVmResponse extends BaseResponse implements ControlledEntityResp this.accountName = accountName; } + @Override public void setDomainId(String domainId) { this.domainId = domainId; } @@ -340,6 +341,7 @@ public class UserVmResponse extends BaseResponse implements ControlledEntityResp this.securityGroupList.add(securityGroup); } + @Override public void setProjectId(String projectId) { this.projectId = projectId; } @@ -373,21 +375,4 @@ public class UserVmResponse extends BaseResponse implements ControlledEntityResp 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; - } } diff --git a/api/src/org/apache/cloudstack/api/response/VirtualRouterProviderResponse.java b/api/src/org/apache/cloudstack/api/response/VirtualRouterProviderResponse.java index 85e7f118376..f4d798828fd 100644 --- a/api/src/org/apache/cloudstack/api/response/VirtualRouterProviderResponse.java +++ b/api/src/org/apache/cloudstack/api/response/VirtualRouterProviderResponse.java @@ -36,13 +36,13 @@ public class VirtualRouterProviderResponse extends BaseResponse implements Contr private String accountName; @SerializedName(ApiConstants.PROJECT_ID) @Param(description="the project id of the ipaddress") - private Long projectId; + 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 provider") - private Long domainId; + private String domainId; @SerializedName(ApiConstants.DOMAIN) @Param(description="the domain associated with the provider") private String domainName; @@ -57,7 +57,7 @@ public class VirtualRouterProviderResponse extends BaseResponse implements Contr } @Override - public void setDomainId(Long domainId) { + public void setDomainId(String domainId) { this.domainId = domainId; } @@ -67,7 +67,7 @@ public class VirtualRouterProviderResponse extends BaseResponse implements Contr } @Override - public void setProjectId(Long projectId) { + public void setProjectId(String projectId) { this.projectId = projectId; } diff --git a/api/src/org/apache/cloudstack/api/response/VlanIpRangeResponse.java b/api/src/org/apache/cloudstack/api/response/VlanIpRangeResponse.java index 4993cc358fb..aef0dcc9b32 100644 --- a/api/src/org/apache/cloudstack/api/response/VlanIpRangeResponse.java +++ b/api/src/org/apache/cloudstack/api/response/VlanIpRangeResponse.java @@ -40,7 +40,7 @@ public class VlanIpRangeResponse extends BaseResponse implements ControlledEntit private String accountName; @SerializedName(ApiConstants.DOMAIN_ID) @Param(description="the domain ID of the VLAN IP range") - private IdentityProxy domainId = new IdentityProxy("domain"); + private String domainId; @SerializedName(ApiConstants.DOMAIN) @Param(description="the domain name of the VLAN IP range") private String domainName; @@ -70,7 +70,7 @@ public class VlanIpRangeResponse extends BaseResponse implements ControlledEntit private IdentityProxy networkId = new IdentityProxy("networks"); @SerializedName(ApiConstants.PROJECT_ID) @Param(description="the project id of the vlan range") - private IdentityProxy projectId = new IdentityProxy("projects"); + private String projectId; @SerializedName(ApiConstants.PROJECT) @Param(description="the project name of the vlan range") private String projectName; @@ -98,8 +98,8 @@ public class VlanIpRangeResponse extends BaseResponse implements ControlledEntit 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) { @@ -139,8 +139,8 @@ public class VlanIpRangeResponse extends BaseResponse implements ControlledEntit } @Override - public void setProjectId(Long projectId) { - this.projectId.setValue(projectId); + public void setProjectId(String projectId) { + this.projectId = projectId; } @Override diff --git a/api/src/org/apache/cloudstack/api/response/VolumeResponse.java b/api/src/org/apache/cloudstack/api/response/VolumeResponse.java index 8085e698971..c1adc02c0da 100644 --- a/api/src/org/apache/cloudstack/api/response/VolumeResponse.java +++ b/api/src/org/apache/cloudstack/api/response/VolumeResponse.java @@ -84,14 +84,14 @@ public class VolumeResponse extends BaseResponse implements ControlledEntityResp private String accountName; @SerializedName(ApiConstants.PROJECT_ID) @Param(description="the project id of the vpn") - private IdentityProxy projectId = new IdentityProxy("projects"); + private String projectId; @SerializedName(ApiConstants.PROJECT) @Param(description="the project name of the vpn") private String projectName; @SerializedName(ApiConstants.DOMAIN_ID) @Param(description = "the ID of the domain associated with the disk volume") - private IdentityProxy domainId = new IdentityProxy("domain"); + private String domainId; @SerializedName(ApiConstants.DOMAIN) @Param(description = "the domain associated with the disk volume") @@ -225,8 +225,9 @@ public class VolumeResponse extends BaseResponse implements ControlledEntityResp this.accountName = accountName; } - public void setDomainId(Long domainId) { - this.domainId.setValue(domainId); + @Override + public void setDomainId(String domainId) { + this.domainId = domainId; } public void setDomainName(String domainName) { @@ -290,8 +291,8 @@ public class VolumeResponse extends BaseResponse implements ControlledEntityResp } @Override - public void setProjectId(Long projectId) { - this.projectId.setValue(projectId); + public void setProjectId(String projectId) { + this.projectId = projectId; } @Override diff --git a/api/src/org/apache/cloudstack/api/response/VpcResponse.java b/api/src/org/apache/cloudstack/api/response/VpcResponse.java index 0c5f02a7fee..d23337f34c6 100644 --- a/api/src/org/apache/cloudstack/api/response/VpcResponse.java +++ b/api/src/org/apache/cloudstack/api/response/VpcResponse.java @@ -61,13 +61,13 @@ public class VpcResponse extends BaseResponse implements ControlledEntityRespons private String accountName; @SerializedName(ApiConstants.PROJECT_ID) @Param(description="the project id of the VPC") - private IdentityProxy projectId = new IdentityProxy("projects"); + private String projectId; @SerializedName(ApiConstants.PROJECT) @Param(description="the project name of the VPC") private String projectName; @SerializedName(ApiConstants.DOMAIN_ID) @Param(description="the domain id of the VPC owner") - private IdentityProxy domainId = new IdentityProxy("domain"); + private String domainId; @SerializedName(ApiConstants.DOMAIN) @Param(description="the domain name of the owner") private String domain; @@ -114,8 +114,8 @@ public class VpcResponse extends BaseResponse implements ControlledEntityRespons } @Override - public void setProjectId(Long projectId) { - this.projectId.setValue(projectId); + public void setProjectId(String projectId) { + this.projectId = projectId; } @Override @@ -124,8 +124,8 @@ public class VpcResponse extends BaseResponse implements ControlledEntityRespons } @Override - public void setDomainId(Long domainId) { - this.domainId.setValue(domainId); + public void setDomainId(String domainId) { + this.domainId = domainId; } @Override diff --git a/api/src/org/apache/cloudstack/api/response/VpnUsersResponse.java b/api/src/org/apache/cloudstack/api/response/VpnUsersResponse.java index d1f45deb45e..eace392e0de 100644 --- a/api/src/org/apache/cloudstack/api/response/VpnUsersResponse.java +++ b/api/src/org/apache/cloudstack/api/response/VpnUsersResponse.java @@ -34,13 +34,13 @@ public class VpnUsersResponse extends BaseResponse implements ControlledEntityRe private String accountName; @SerializedName(ApiConstants.DOMAIN_ID) @Param(description="the domain id of the account of the remote access vpn") - private IdentityProxy domainId = new IdentityProxy("domain"); + private String domainId; @SerializedName(ApiConstants.DOMAIN) @Param(description="the domain name of the account of the remote access vpn") private String domainName; @SerializedName(ApiConstants.PROJECT_ID) @Param(description="the project id of the vpn") - private IdentityProxy projectId = new IdentityProxy("projects"); + private String projectId; @SerializedName(ApiConstants.PROJECT) @Param(description="the project name of the vpn") private String projectName; @@ -58,8 +58,9 @@ public class VpnUsersResponse extends BaseResponse implements ControlledEntityRe this.accountName = accountName; } - public void setDomainId(Long domainId) { - this.domainId.setValue(domainId); + @Override + public void setDomainId(String domainId) { + this.domainId = domainId; } public void setDomainName(String name) { @@ -67,8 +68,8 @@ public class VpnUsersResponse extends BaseResponse implements ControlledEntityRe } @Override - public void setProjectId(Long projectId) { - this.projectId.setValue(projectId); + public void setProjectId(String projectId) { + this.projectId = projectId; } @Override diff --git a/server/src/com/cloud/api/ApiResponseHelper.java b/server/src/com/cloud/api/ApiResponseHelper.java index 0eeb8ca6f28..f9b908c388d 100755 --- a/server/src/com/cloud/api/ApiResponseHelper.java +++ b/server/src/com/cloud/api/ApiResponseHelper.java @@ -1519,7 +1519,6 @@ public class ApiResponseHelper implements ResponseGenerator { vpnResponse.setPublicIp(ApiDBUtils.findIpAddressById(vpn.getServerAddressId()).getAddress().addr()); vpnResponse.setIpRange(vpn.getIpRange()); vpnResponse.setPresharedKey(vpn.getIpsecPresharedKey()); - vpnResponse.setDomainId(vpn.getDomainId()); populateOwner(vpnResponse, vpn); @@ -2699,14 +2698,21 @@ public class ApiResponseHelper implements ResponseGenerator { } else { // get domain from network_domain table Pair domainNetworkDetails = ApiDBUtils.getDomainNetworkDetails(network.getId()); - response.setDomainId(domainNetworkDetails.first()); + if (domainNetworkDetails.first() != null) { + Domain domain = ApiDBUtils.findDomainById(domainNetworkDetails.first()); + if (domain != null) { + response.setDomainId(domain.getUuid()); + } + } response.setSubdomainAccess(domainNetworkDetails.second()); } Long dedicatedDomainId = ApiDBUtils.getDedicatedNetworkDomain(network.getId()); if (dedicatedDomainId != null) { Domain domain = ApiDBUtils.findDomainById(dedicatedDomainId); - response.setDomainId(dedicatedDomainId); + if (domain != null) { + response.setDomainId(domain.getUuid()); + } response.setDomainName(domain.getName()); } @@ -2854,14 +2860,14 @@ public class ApiResponseHelper implements ResponseGenerator { if (account.getType() == Account.ACCOUNT_TYPE_PROJECT) { // find the project Project project = ApiDBUtils.findProjectByProjectAccountIdIncludingRemoved(account.getId()); - response.setProjectId(project.getId()); + response.setProjectId(project.getUuid()); response.setProjectName(project.getName()); } else { response.setAccountName(account.getAccountName()); } Domain domain = ApiDBUtils.findDomainById(object.getDomainId()); - response.setDomainId(domain.getId()); + response.setDomainId(domain.getUuid()); response.setDomainName(domain.getName()); } @@ -2883,7 +2889,7 @@ public class ApiResponseHelper implements ResponseGenerator { if (account.getType() == Account.ACCOUNT_TYPE_PROJECT) { // find the project Project project = ApiDBUtils.findProjectByProjectAccountIdIncludingRemoved(account.getId()); - response.setProjectId(project.getId()); + response.setProjectId(project.getUuid()); response.setProjectName(project.getName()); } else { response.setAccountName(account.getAccountName()); @@ -2893,7 +2899,7 @@ public class ApiResponseHelper implements ResponseGenerator { private void populateDomain(ControlledEntityResponse response, long domainId) { Domain domain = ApiDBUtils.findDomainById(domainId); - response.setDomainId(domain.getId()); + response.setDomainId(domain.getUuid()); response.setDomainName(domain.getName()); } @@ -3319,7 +3325,7 @@ public class ApiResponseHelper implements ResponseGenerator { @Override public AutoScalePolicyResponse createAutoScalePolicyResponse(AutoScalePolicy policy) { AutoScalePolicyResponse response = new AutoScalePolicyResponse(); - response.setId(policy.getId()); + response.setId(policy.getUuid()); response.setDuration(policy.getDuration()); response.setQuietTime(policy.getQuietTime()); response.setAction(policy.getAction()); diff --git a/server/src/com/cloud/api/commands/GetUsageRecordsCmd.java b/server/src/com/cloud/api/commands/GetUsageRecordsCmd.java index 9f1e21a4ed3..6d67e05043c 100644 --- a/server/src/com/cloud/api/commands/GetUsageRecordsCmd.java +++ b/server/src/com/cloud/api/commands/GetUsageRecordsCmd.java @@ -27,6 +27,8 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import com.cloud.api.ApiDBUtils; +import com.cloud.domain.Domain; + import org.apache.cloudstack.api.BaseListCmd; import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; @@ -63,15 +65,15 @@ public class GetUsageRecordsCmd extends BaseListCmd { @Parameter(name=ApiConstants.START_DATE, type=CommandType.DATE, required=true, description="Start date range for usage record query. Use yyyy-MM-dd as the date format, e.g. startDate=2009-06-01.") private Date startDate; - + @IdentityMapper(entityTableName="account") @Parameter(name=ApiConstants.ACCOUNT_ID, type=CommandType.LONG, description="List usage records for the specified account") private Long accountId; - + @IdentityMapper(entityTableName="projects") @Parameter(name=ApiConstants.PROJECT_ID, type=CommandType.LONG, description="List usage records for specified project") private Long projectId; - + @Parameter(name=ApiConstants.TYPE, type=CommandType.LONG, description="List usage records for the specified usage type") private Long usageType; @@ -94,7 +96,7 @@ public class GetUsageRecordsCmd extends BaseListCmd { public Date getStartDate() { return startDate; } - + public Long getAccountId() { return accountId; } @@ -102,11 +104,11 @@ public class GetUsageRecordsCmd extends BaseListCmd { public Long getUsageType() { return usageType; } - + public Long getProjectId() { return projectId; } - + ///////////////////////////////////////////////////// /////////////// Misc parameters /////////////////// ///////////////////////////////////////////////////// @@ -162,7 +164,7 @@ public class GetUsageRecordsCmd extends BaseListCmd { } else { sb.append(hour+":"); } - + int minute = cal.get(Calendar.MINUTE); if (minute < 10) { sb.append("0" + minute + ":"); @@ -213,7 +215,7 @@ public class GetUsageRecordsCmd extends BaseListCmd { return sb.toString(); } - + @Override public void execute(){ ManagementServerExt _mgrExt = (ManagementServerExt)_mgr; @@ -225,20 +227,23 @@ public class GetUsageRecordsCmd extends BaseListCmd { UsageRecordResponse usageRecResponse = new UsageRecordResponse(); if (usageRecordGeneric instanceof UsageVO) { UsageVO usageRecord = (UsageVO)usageRecordGeneric; - - Account account = ApiDBUtils.findAccountByIdIncludingRemoved(usageRecord.getAccountId()); + + Account account = ApiDBUtils.findAccountByIdIncludingRemoved(usageRecord.getAccountId()); if (account.getType() == Account.ACCOUNT_TYPE_PROJECT) { //find the project Project project = ApiDBUtils.findProjectByProjectAccountId(account.getId()); - usageRecResponse.setProjectId(project.getId()); + usageRecResponse.setProjectId(project.getUuid()); usageRecResponse.setProjectName(project.getName()); } else { usageRecResponse.setAccountId(account.getId()); usageRecResponse.setAccountName(account.getAccountName()); } - - usageRecResponse.setDomainId(usageRecord.getDomainId()); - + + Domain domain = ApiDBUtils.findDomainById(usageRecord.getDomainId()); + if (domain != null) { + usageRecResponse.setDomainId(domain.getUuid()); + } + usageRecResponse.setZoneId(usageRecord.getZoneId()); usageRecResponse.setDescription(usageRecord.getDescription()); usageRecResponse.setUsage(usageRecord.getUsageDisplay()); @@ -246,7 +251,7 @@ public class GetUsageRecordsCmd extends BaseListCmd { usageRecResponse.setVirtualMachineId(usageRecord.getVmInstanceId()); usageRecResponse.setVmName(usageRecord.getVmName()); usageRecResponse.setTemplateId(usageRecord.getTemplateId()); - + if(usageRecord.getUsageType() == UsageTypes.RUNNING_VM || usageRecord.getUsageType() == UsageTypes.ALLOCATED_VM){ //Service Offering Id usageRecResponse.setOfferingId(identityDao.getIdentityUuid("disk_offering", usageRecord.getOfferingId().toString())); @@ -254,7 +259,7 @@ public class GetUsageRecordsCmd extends BaseListCmd { usageRecResponse.setUsageId(identityDao.getIdentityUuid("vm_instance", usageRecord.getUsageId().toString())); //Hypervisor Type usageRecResponse.setType(usageRecord.getType()); - + } else if(usageRecord.getUsageType() == UsageTypes.IP_ADDRESS){ //isSourceNAT usageRecResponse.setSourceNat((usageRecord.getType().equals("SourceNat"))?true:false); @@ -262,7 +267,7 @@ public class GetUsageRecordsCmd extends BaseListCmd { usageRecResponse.setSystem((usageRecord.getSize() == 1)?true:false); //IP Address ID usageRecResponse.setUsageId(identityDao.getIdentityUuid("user_ip_address", usageRecord.getUsageId().toString())); - + } else if(usageRecord.getUsageType() == UsageTypes.NETWORK_BYTES_SENT || usageRecord.getUsageType() == UsageTypes.NETWORK_BYTES_RECEIVED){ //Device Type usageRecResponse.setType(usageRecord.getType()); @@ -271,11 +276,11 @@ public class GetUsageRecordsCmd extends BaseListCmd { usageRecResponse.setUsageId(identityDao.getIdentityUuid("vm_instance", usageRecord.getUsageId().toString())); } else { //External Device Host Id - usageRecResponse.setUsageId(identityDao.getIdentityUuid("host", usageRecord.getUsageId().toString())); + usageRecResponse.setUsageId(identityDao.getIdentityUuid("host", usageRecord.getUsageId().toString())); } //Network ID usageRecResponse.setNetworkId(identityDao.getIdentityUuid("networks", usageRecord.getNetworkId().toString())); - + } else if(usageRecord.getUsageType() == UsageTypes.VOLUME){ //Volume ID usageRecResponse.setUsageId(identityDao.getIdentityUuid("volumes", usageRecord.getUsageId().toString())); @@ -291,36 +296,36 @@ public class GetUsageRecordsCmd extends BaseListCmd { usageRecResponse.setUsageId(identityDao.getIdentityUuid("vm_template", usageRecord.getUsageId().toString())); //Template/ISO Size usageRecResponse.setSize(usageRecord.getSize()); - + } else if(usageRecord.getUsageType() == UsageTypes.SNAPSHOT){ //Snapshot ID usageRecResponse.setUsageId(identityDao.getIdentityUuid("snapshots", usageRecord.getUsageId().toString())); //Snapshot Size usageRecResponse.setSize(usageRecord.getSize()); - + } else if(usageRecord.getUsageType() == UsageTypes.LOAD_BALANCER_POLICY){ //Load Balancer Policy ID usageRecResponse.setUsageId(usageRecord.getUsageId().toString()); - + } else if(usageRecord.getUsageType() == UsageTypes.PORT_FORWARDING_RULE){ //Port Forwarding Rule ID usageRecResponse.setUsageId(usageRecord.getUsageId().toString()); - + } else if(usageRecord.getUsageType() == UsageTypes.NETWORK_OFFERING){ //Network Offering Id usageRecResponse.setOfferingId(identityDao.getIdentityUuid("network_offerings", usageRecord.getOfferingId().toString())); //is Default usageRecResponse.setDefault((usageRecord.getUsageId() == 1)? true:false); - + } else if(usageRecord.getUsageType() == UsageTypes.VPN_USERS){ //VPN User ID usageRecResponse.setUsageId(usageRecord.getUsageId().toString()); - + } else if(usageRecord.getUsageType() == UsageTypes.SECURITY_GROUP){ //Security Group Id usageRecResponse.setUsageId(identityDao.getIdentityUuid("security_group", usageRecord.getUsageId().toString())); } - + if (usageRecord.getRawUsage() != null) { DecimalFormat decimalFormat = new DecimalFormat("###########.######"); usageRecResponse.setRawUsage(decimalFormat.format(usageRecord.getRawUsage())); @@ -332,7 +337,7 @@ public class GetUsageRecordsCmd extends BaseListCmd { if (usageRecord.getEndDate() != null) { usageRecResponse.setEndDate(getDateStringInternal(usageRecord.getEndDate())); } - } + } usageRecResponse.setObjectName("usagerecord"); usageResponses.add(usageRecResponse); diff --git a/server/src/com/cloud/server/api/response/UsageRecordResponse.java b/server/src/com/cloud/server/api/response/UsageRecordResponse.java index 63712e14256..bcfce2de19b 100644 --- a/server/src/com/cloud/server/api/response/UsageRecordResponse.java +++ b/server/src/com/cloud/server/api/response/UsageRecordResponse.java @@ -27,19 +27,19 @@ import com.google.gson.annotations.SerializedName; public class UsageRecordResponse extends BaseResponse implements ControlledEntityResponse{ @SerializedName(ApiConstants.ACCOUNT) @Param(description="the user account name") private String accountName; - + @SerializedName(ApiConstants.ACCOUNT_ID) @Param(description="the user account Id") private IdentityProxy accountId = new IdentityProxy("account"); - + @SerializedName(ApiConstants.PROJECT_ID) @Param(description="the project id of the resource") - private IdentityProxy projectId = new IdentityProxy("projects"); - + private String projectId; + @SerializedName(ApiConstants.PROJECT) @Param(description="the project name of the resource") private String projectName; @SerializedName(ApiConstants.DOMAIN_ID) @Param(description="the domain ID") - private IdentityProxy domainId = new IdentityProxy("domain"); - + private String domainId; + @SerializedName(ApiConstants.DOMAIN) @Param(description="the domain the resource is associated with") private String domainName; @@ -72,7 +72,7 @@ public class UsageRecordResponse extends BaseResponse implements ControlledEntit @SerializedName("usageid") @Param(description="id of the resource") private String usageId; - + @SerializedName(ApiConstants.TYPE) @Param(description="resource type") private String type; @@ -90,13 +90,13 @@ public class UsageRecordResponse extends BaseResponse implements ControlledEntit @SerializedName(ApiConstants.IS_SYSTEM) @Param(description="True if the IPAddress is system IP - allocated during vm deploy or lb rule create") private Boolean isSystem; - + @SerializedName("networkid") @Param(description="id of the network") private String networkId; - + @SerializedName("isdefault") @Param(description="True if the resource is default") private Boolean isDefault; - + @Override public void setAccountName(String accountName) { this.accountName = accountName; @@ -105,10 +105,10 @@ public class UsageRecordResponse extends BaseResponse implements ControlledEntit public void setAccountId(Long accountId) { this.accountId.setValue(accountId); } - + @Override - public void setDomainId(Long domainId) { - this.domainId.setValue(domainId); + public void setDomainId(String domainId) { + this.domainId = domainId; } public void setZoneId(Long zoneId) { @@ -174,17 +174,17 @@ public class UsageRecordResponse extends BaseResponse implements ControlledEntit public void setSystem(Boolean isSystem) { this.isSystem = isSystem; } - + @Override - public void setProjectId(Long projectId) { - this.projectId.setValue(projectId); + public void setProjectId(String projectId) { + this.projectId = projectId; } @Override public void setProjectName(String projectName) { this.projectName = projectName; } - + @Override public void setDomainName(String domainName) { this.domainName = domainName; @@ -193,7 +193,7 @@ public class UsageRecordResponse extends BaseResponse implements ControlledEntit public void setNetworkId(String networkId) { this.networkId = networkId; } - + public void setDefault(Boolean isDefault) { this.isDefault = isDefault; } From 837d21bb2daf5b719c985a88e24585634c2df35f Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Tue, 18 Dec 2012 04:10:36 -0800 Subject: [PATCH 127/421] api: Implement findByXId in GenericDaoBase and EntityManagerImpl Declare and define findByXId() in GenericDao and EntityManager. This method would return a VO by UUID and EntityManager's interface would take in the VO Interface. Signed-off-by: Rohit Yadav --- api/src/com/cloud/dao/EntityManager.java | 2 +- server/src/com/cloud/dao/EntityManagerImpl.java | 5 +++-- utils/src/com/cloud/utils/db/GenericDao.java | 3 +++ utils/src/com/cloud/utils/db/GenericDaoBase.java | 8 ++++++++ 4 files changed, 15 insertions(+), 3 deletions(-) diff --git a/api/src/com/cloud/dao/EntityManager.java b/api/src/com/cloud/dao/EntityManager.java index 552e69dabd4..4ddfcec685f 100644 --- a/api/src/com/cloud/dao/EntityManager.java +++ b/api/src/com/cloud/dao/EntityManager.java @@ -45,7 +45,7 @@ public interface EntityManager { * @param xid external id * @return T if found, null if not. */ - public T findByXid(Class entityType, String xid); + public T findByXId(Class entityType, String xid); /** * Lists all entities. Use this method at your own risk. diff --git a/server/src/com/cloud/dao/EntityManagerImpl.java b/server/src/com/cloud/dao/EntityManagerImpl.java index 1430c0834b2..4d7f7fb2dd7 100644 --- a/server/src/com/cloud/dao/EntityManagerImpl.java +++ b/server/src/com/cloud/dao/EntityManagerImpl.java @@ -45,8 +45,9 @@ public class EntityManagerImpl implements EntityManager, Manager { } @Override - public T findByXid(Class entityType, String xid) { - return null; + public T findByXId(Class entityType, String xid) { + GenericDao dao = (GenericDao)GenericDaoBase.getDao(entityType); + return dao.findByXId(xid); } @Override diff --git a/utils/src/com/cloud/utils/db/GenericDao.java b/utils/src/com/cloud/utils/db/GenericDao.java index f36c4d80164..082748a532a 100755 --- a/utils/src/com/cloud/utils/db/GenericDao.java +++ b/utils/src/com/cloud/utils/db/GenericDao.java @@ -54,6 +54,9 @@ public interface GenericDao { T findByIdIncludingRemoved(ID id); T findById(ID id, boolean fresh); + + // Finds a VO object using uuid + T findByXId(ID uuid); /** * @return VO object ready to be used for update. It won't have any fields filled in. diff --git a/utils/src/com/cloud/utils/db/GenericDaoBase.java b/utils/src/com/cloud/utils/db/GenericDaoBase.java index be0fe89f3a7..6bc49bf963e 100755 --- a/utils/src/com/cloud/utils/db/GenericDaoBase.java +++ b/utils/src/com/cloud/utils/db/GenericDaoBase.java @@ -913,6 +913,14 @@ public abstract class GenericDaoBase implements Gene } } + @Override @DB(txn=false) + @SuppressWarnings("unchecked") + public T findByXId(final ID uuid) { + SearchCriteria sc = createSearchCriteria(); + sc.addAnd("uuid", SearchCriteria.Op.EQ, uuid); + return findOneBy(sc); + } + @Override @DB(txn=false) public T findByIdIncludingRemoved(ID id) { return findById(id, true, null); From 5fdce84e81c10650d41de1837d7f4a1791fc4a6e Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Tue, 18 Dec 2012 04:16:33 -0800 Subject: [PATCH 128/421] api: Process UUID and Parameter annotations in ApiDispatcher - Use @Parameter's entityType and type annotation fields - Use @Entity annotation in Reponse class to get table info for Dao - Use findByXId to process all entities and translate UUID to ID - Handle error in reflection method invoking Signed-off-by: Rohit Yadav --- server/src/com/cloud/api/ApiDispatcher.java | 140 +++++++++++++------- 1 file changed, 91 insertions(+), 49 deletions(-) diff --git a/server/src/com/cloud/api/ApiDispatcher.java b/server/src/com/cloud/api/ApiDispatcher.java index 646bab9b7ce..e75a15cccff 100755 --- a/server/src/com/cloud/api/ApiDispatcher.java +++ b/server/src/com/cloud/api/ApiDispatcher.java @@ -17,6 +17,8 @@ package com.cloud.api; import java.lang.reflect.Field; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; import java.text.DateFormat; import java.text.ParseException; import java.util.ArrayList; @@ -28,6 +30,7 @@ import java.util.Map; import java.util.StringTokenizer; import java.util.regex.Matcher; +import com.cloud.dao.EntityManager; import org.apache.cloudstack.api.*; import org.apache.log4j.Logger; @@ -62,17 +65,16 @@ import com.cloud.utils.exception.CSExceptionErrorCode; import com.cloud.utils.exception.CloudRuntimeException; import com.cloud.uuididentity.dao.IdentityDao; -/** - * A class that dispatches API commands to the appropriate manager for execution. - */ +// ApiDispatcher: A class that dispatches API commands to the appropriate manager for execution. public class ApiDispatcher { private static final Logger s_logger = Logger.getLogger(ApiDispatcher.class.getName()); ComponentLocator _locator; Long _createSnapshotQueueSizeLimit; - @Inject AsyncJobManager _asyncMgr = null; + @Inject private AsyncJobManager _asyncMgr = null; + @Inject private AccountManager _accountMgr = null; + @Inject EntityManager _entityMgr = null; @Inject IdentityDao _identityDao = null; - @Inject AccountManager _accountMgr = null; Map> _daoNameMap = new HashMap>(); // singleton class @@ -105,7 +107,6 @@ public class ApiDispatcher { } public void dispatchCreateCmd(BaseAsyncCreateCmd cmd, Map params) { - List entitiesToAccess = new ArrayList(); setupParameters(cmd, params, entitiesToAccess); @@ -150,15 +151,12 @@ public class ApiDispatcher { } } - private void doAccessChecks(BaseAsyncCreateCmd cmd, - List entitiesToAccess) { - + private void doAccessChecks(BaseAsyncCreateCmd cmd, List entitiesToAccess) { //owner Account caller = UserContext.current().getCaller(); - Account owner = s_instance._accountMgr.getActiveAccountById(cmd.getEntityOwnerId()); + Account owner = _accountMgr.getActiveAccountById(cmd.getEntityOwnerId()); List callerRoles = determineRole(caller); - List ownerRoles = determineRole(owner); //check permission to call this command for the caller @@ -166,10 +164,9 @@ public class ApiDispatcher { checkACLOnCommand(cmd); //check that caller can access the owner account. - s_instance._accountMgr.checkAccess(caller, null, true, owner); + _accountMgr.checkAccess(caller, null, true, owner); checkACLOnEntities(caller, entitiesToAccess); - } @@ -190,15 +187,14 @@ public class ApiDispatcher { //checkACLOnEntities if(!entitiesToAccess.isEmpty()){ for(ControlledEntity entity : entitiesToAccess) - s_instance._accountMgr.checkAccess(caller, null, true, entity); + _accountMgr.checkAccess(caller, null, true, entity); } - } public void dispatch(BaseCmd cmd, Map params) { List entitiesToAccess = new ArrayList(); setupParameters(cmd, params, entitiesToAccess); - + if(!entitiesToAccess.isEmpty()){ //owner Account caller = UserContext.current().getCaller(); @@ -390,6 +386,7 @@ public class ApiDispatcher { } } + // Process all the fields of the cmd object using reflection to recursively process super class Field[] fields = cmd.getClass().getDeclaredFields(); Class superClass = cmd.getClass().getSuperclass(); while (BaseCmd.class.isAssignableFrom(superClass)) { @@ -404,20 +401,22 @@ public class ApiDispatcher { } for (Field field : fields) { - - //plug Services - PlugService plugServiceAnnotation = field.getAnnotation(PlugService.class); - if(plugServiceAnnotation != null){ - plugService(field, cmd); - } - + //plug Services + PlugService plugServiceAnnotation = field.getAnnotation(PlugService.class); + if(plugServiceAnnotation != null){ + plugService(field, cmd); + } + //APITODO: change the checking here Parameter parameterAnnotation = field.getAnnotation(Parameter.class); if ((parameterAnnotation == null) || !parameterAnnotation.expose()) { continue; } - + // APITODO Will remove this IdentityMapper identityMapper = field.getAnnotation(IdentityMapper.class); + //ACL checkAccess = field.getAnnotation(ACL.class); + + Validator validators = field.getAnnotation(Validator.class); Object paramObj = unpackedParams.get(parameterAnnotation.name()); if (paramObj == null) { if (parameterAnnotation.required()) { @@ -587,37 +586,80 @@ public class ApiDispatcher { case INTEGER: field.set(cmdObj, Integer.valueOf(paramObj.toString())); break; - case LIST: - List listParam = new ArrayList(); - StringTokenizer st = new StringTokenizer(paramObj.toString(), ","); - while (st.hasMoreTokens()) { - String token = st.nextToken(); - CommandType listType = annotation.collectionType(); - switch (listType) { - case INTEGER: - listParam.add(Integer.valueOf(token)); - break; - case LONG: { - Long val = null; - if (identityMapper != null) - val = s_instance._identityDao.getIdentityId(identityMapper, token); - else - val = Long.valueOf(token); + case LIST: + List listParam = new ArrayList(); + StringTokenizer st = new StringTokenizer(paramObj.toString(), ","); + while (st.hasMoreTokens()) { + String token = st.nextToken(); + CommandType listType = annotation.collectionType(); + switch (listType) { + case INTEGER: + listParam.add(Integer.valueOf(token)); + break; + case UUID: + //APITODO: FIXME if there is any APICmd that has List + break; + case LONG: { + Long val = null; + if (identityMapper != null) + val = s_instance._identityDao.getIdentityId(identityMapper, token); + else + val = Long.valueOf(token); - listParam.add(val); + listParam.add(val); + } + break; + case SHORT: + listParam.add(Short.valueOf(token)); + case STRING: + listParam.add(token); + break; + } } - break; - case SHORT: - listParam.add(Short.valueOf(token)); - case STRING: - listParam.add(token); - break; + field.set(cmdObj, listParam); + break; + case UUID: + // There may be multiple entities defined on the @Entity of a Response.class + // UUID CommandType would expect only one entityType, so use the first entityType + Class[] entities = annotation.entityType()[0].getAnnotation(Entity.class).value(); + Long id = null; + // Go through each entity which is an interface to a VO class and get a VO object + // Try to getId() for the object using reflection, break on first non-null value + for (Class entity: entities) { + // findByXId returns a VO object using uuid, use reflect to get the Id + Object objVO = s_instance._entityMgr.findByXId(entity, paramObj.toString()); + if (objVO == null) { + continue; } + Method method = null; + try { + method = objVO.getClass().getMethod("getId", null); + } catch (NoSuchMethodException e) { + continue; + } catch (SecurityException e) { + continue; + } + // Invoke the getId method, get the internal long ID + // If that fails hide exceptions as the uuid may not exist + try { + id = (Long) method.invoke(objVO); + } catch (InvocationTargetException e) { + } catch (IllegalArgumentException e) { + } catch (IllegalAccessException e) { + } + // Return on first non-null Id for the uuid entity + if (id != null) + break; } - field.set(cmdObj, listParam); + // If id is null, entity with the uuid was not found, throw exception + if (id == null) { + throw new InvalidParameterValueException("No entity with " + field.getName() + "(uuid)=" + + paramObj.toString() + " was found in the database."); + } + field.set(cmdObj, id); break; case LONG: - case UUID: + // APITODO: Remove identityMapper, simply convert the over the wire param to Long if (identityMapper != null) field.set(cmdObj, s_instance._identityDao.getIdentityId(identityMapper, paramObj.toString())); else From b008f31fd58c5ba496a20823af4b0608f448d355 Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Tue, 18 Dec 2012 04:19:46 -0800 Subject: [PATCH 129/421] api: Add @Entity annotation for user related response classes Signed-off-by: Rohit Yadav --- .../apache/cloudstack/api/response/ProjectResponse.java | 3 +++ .../cloudstack/api/response/ResourceLimitResponse.java | 3 +++ .../org/apache/cloudstack/api/response/UserResponse.java | 9 ++++++--- .../apache/cloudstack/api/response/VpnUsersResponse.java | 3 +++ 4 files changed, 15 insertions(+), 3 deletions(-) diff --git a/api/src/org/apache/cloudstack/api/response/ProjectResponse.java b/api/src/org/apache/cloudstack/api/response/ProjectResponse.java index c47e7b6fc09..e7d4dd31cee 100644 --- a/api/src/org/apache/cloudstack/api/response/ProjectResponse.java +++ b/api/src/org/apache/cloudstack/api/response/ProjectResponse.java @@ -19,12 +19,15 @@ package org.apache.cloudstack.api.response; import java.util.ArrayList; import java.util.List; +import com.cloud.projects.Project; import org.apache.cloudstack.api.ApiConstants; import com.cloud.serializer.Param; import com.cloud.utils.IdentityProxy; import com.google.gson.annotations.SerializedName; import org.apache.cloudstack.api.BaseResponse; +import org.apache.cloudstack.api.Entity; +@Entity(value = Project.class) @SuppressWarnings("unused") public class ProjectResponse extends BaseResponse { diff --git a/api/src/org/apache/cloudstack/api/response/ResourceLimitResponse.java b/api/src/org/apache/cloudstack/api/response/ResourceLimitResponse.java index 854ebee0d3b..dc446154a16 100644 --- a/api/src/org/apache/cloudstack/api/response/ResourceLimitResponse.java +++ b/api/src/org/apache/cloudstack/api/response/ResourceLimitResponse.java @@ -16,12 +16,15 @@ // under the License. package org.apache.cloudstack.api.response; +import com.cloud.configuration.ResourceLimit; import org.apache.cloudstack.api.ApiConstants; import com.cloud.utils.IdentityProxy; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; import org.apache.cloudstack.api.BaseResponse; +import org.apache.cloudstack.api.Entity; +@Entity(value = ResourceLimit.class) @SuppressWarnings("unused") public class ResourceLimitResponse extends BaseResponse implements ControlledEntityResponse { @SerializedName(ApiConstants.ACCOUNT) @Param(description="the account of the resource limit") diff --git a/api/src/org/apache/cloudstack/api/response/UserResponse.java b/api/src/org/apache/cloudstack/api/response/UserResponse.java index bb161264d12..8c070fd5eb8 100644 --- a/api/src/org/apache/cloudstack/api/response/UserResponse.java +++ b/api/src/org/apache/cloudstack/api/response/UserResponse.java @@ -18,10 +18,14 @@ package org.apache.cloudstack.api.response; import java.util.Date; -import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; -import org.apache.cloudstack.api.BaseResponse; +import com.cloud.serializer.Param; +import com.cloud.user.User; +import org.apache.cloudstack.api.BaseResponse; +import org.apache.cloudstack.api.Entity; + +@Entity(value = User.class) public class UserResponse extends BaseResponse { @SerializedName("id") @Param(description="the user ID") private String id; @@ -68,7 +72,6 @@ public class UserResponse extends BaseResponse { @SerializedName("accountid") @Param(description="the account ID of the user") private String accountId; - public String getId() { return id; } diff --git a/api/src/org/apache/cloudstack/api/response/VpnUsersResponse.java b/api/src/org/apache/cloudstack/api/response/VpnUsersResponse.java index d1f45deb45e..665781fa0a1 100644 --- a/api/src/org/apache/cloudstack/api/response/VpnUsersResponse.java +++ b/api/src/org/apache/cloudstack/api/response/VpnUsersResponse.java @@ -16,12 +16,15 @@ // under the License. package org.apache.cloudstack.api.response; +import com.cloud.network.VpnUser; import org.apache.cloudstack.api.ApiConstants; import com.cloud.utils.IdentityProxy; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; import org.apache.cloudstack.api.BaseResponse; +import org.apache.cloudstack.api.Entity; +@Entity(value = VpnUser.class) @SuppressWarnings("unused") public class VpnUsersResponse extends BaseResponse implements ControlledEntityResponse{ @SerializedName(ApiConstants.ID) @Param(description="the vpn userID") From dc33a8d1458fd767ce7da2f38ff35f4be74caa3a Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Tue, 18 Dec 2012 04:20:50 -0800 Subject: [PATCH 130/421] api: Fix BaseList Cmd classes to use UUID CommandType and entityType appropriately - Get rid of IdentityMapper - Use entityType which is an array of Response.class - Use UUID CommandType for params which will receive UUID string from over the wire requests Signed-off-by: Rohit Yadav --- .../apache/cloudstack/api/BaseListDomainResourcesCmd.java | 7 ++++--- .../api/BaseListProjectAndAccountResourcesCmd.java | 6 ++++-- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/api/src/org/apache/cloudstack/api/BaseListDomainResourcesCmd.java b/api/src/org/apache/cloudstack/api/BaseListDomainResourcesCmd.java index 709d107387a..6e50a159f20 100644 --- a/api/src/org/apache/cloudstack/api/BaseListDomainResourcesCmd.java +++ b/api/src/org/apache/cloudstack/api/BaseListDomainResourcesCmd.java @@ -16,15 +16,16 @@ // under the License. package org.apache.cloudstack.api; +import org.apache.cloudstack.api.response.DomainResponse; + public abstract class BaseListDomainResourcesCmd extends BaseListCmd { @Parameter(name = ApiConstants.LIST_ALL, type = CommandType.BOOLEAN, description = "If set to false, " + "list only resources belonging to the command's caller; if set to true - list resources that the caller is authorized to see. Default value is false") private Boolean listAll; - @IdentityMapper(entityTableName = "domain") - @Parameter(name = ApiConstants.DOMAIN_ID, type = CommandType.LONG, description = "list only resources" + - " belonging to the domain specified") + @Parameter(name=ApiConstants.DOMAIN_ID, type=CommandType.UUID, entityType=DomainResponse.class, + description="list only resources belonging to the domain specified") private Long domainId; @Parameter(name = ApiConstants.IS_RECURSIVE, type = CommandType.BOOLEAN, description = "defaults to false," + diff --git a/api/src/org/apache/cloudstack/api/BaseListProjectAndAccountResourcesCmd.java b/api/src/org/apache/cloudstack/api/BaseListProjectAndAccountResourcesCmd.java index d5232bc0a72..836527fc7c7 100644 --- a/api/src/org/apache/cloudstack/api/BaseListProjectAndAccountResourcesCmd.java +++ b/api/src/org/apache/cloudstack/api/BaseListProjectAndAccountResourcesCmd.java @@ -16,10 +16,12 @@ // under the License. package org.apache.cloudstack.api; +import org.apache.cloudstack.api.response.ProjectResponse; + public abstract class BaseListProjectAndAccountResourcesCmd extends BaseListAccountResourcesCmd { - @IdentityMapper(entityTableName = "projects") - @Parameter(name = ApiConstants.PROJECT_ID, type = CommandType.LONG, description = "list objects by project") + @Parameter(name=ApiConstants.PROJECT_ID, type=CommandType.UUID, entityType=ProjectResponse.class, + description="list objects by project") private Long projectId; public Long getProjectId() { From b16dde6367e9871b46869ce325e5fe0cd47341d3 Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Tue, 18 Dec 2012 04:23:05 -0800 Subject: [PATCH 131/421] api: Fix User related API Cmd classes to use entityType and CommandType.UUID - Get rid of IdentityMapper - Use entityType which is an array of Response.class - Use UUID CommandType for params which will receive UUID string from over the wire requests Signed-off-by: Rohit Yadav --- .../api/command/admin/user/CreateUserCmd.java | 6 +++--- .../api/command/admin/user/DeleteUserCmd.java | 4 +--- .../api/command/admin/user/DisableUserCmd.java | 5 ++--- .../api/command/admin/user/EnableUserCmd.java | 5 ++--- .../api/command/admin/user/ListUsersCmd.java | 5 +---- .../api/command/admin/user/LockUserCmd.java | 5 ++--- .../api/command/admin/user/RegisterCmd.java | 6 +++--- .../api/command/admin/user/UpdateUserCmd.java | 5 ++--- .../api/command/user/user/AddVpnUserCmd.java | 11 ++++++----- .../api/command/user/user/ListVpnUsersCmd.java | 5 ++--- .../api/command/user/user/RemoveVpnUserCmd.java | 12 ++++++------ 11 files changed, 30 insertions(+), 39 deletions(-) diff --git a/api/src/org/apache/cloudstack/api/command/admin/user/CreateUserCmd.java b/api/src/org/apache/cloudstack/api/command/admin/user/CreateUserCmd.java index e7cd44be04a..a1461fbba12 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/user/CreateUserCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/user/CreateUserCmd.java @@ -20,10 +20,10 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; +import org.apache.cloudstack.api.response.DomainResponse; import org.apache.cloudstack.api.response.UserResponse; import com.cloud.user.Account; import com.cloud.user.User; @@ -42,8 +42,8 @@ public class CreateUserCmd extends BaseCmd { @Parameter(name=ApiConstants.ACCOUNT, type=CommandType.STRING, required=true, description="Creates the user under the specified account. If no account is specified, the username will be used as the account name.") private String accountName; - @IdentityMapper(entityTableName="domain") - @Parameter(name=ApiConstants.DOMAIN_ID, type=CommandType.LONG, description="Creates the user under the specified domain. Has to be accompanied with the account parameter") + @Parameter(name=ApiConstants.DOMAIN_ID, type=CommandType.UUID, entityType=DomainResponse.class, + description="Creates the user under the specified domain. Has to be accompanied with the account parameter") private Long domainId; @Parameter(name=ApiConstants.EMAIL, type=CommandType.STRING, required=true, description="email") diff --git a/api/src/org/apache/cloudstack/api/command/admin/user/DeleteUserCmd.java b/api/src/org/apache/cloudstack/api/command/admin/user/DeleteUserCmd.java index ba9cafb32e3..8c85bc6965f 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/user/DeleteUserCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/user/DeleteUserCmd.java @@ -20,7 +20,6 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; @@ -39,8 +38,7 @@ public class DeleteUserCmd extends BaseCmd { ///////////////////////////////////////////////////// //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - @IdentityMapper(entityTableName="user") - @Parameter(name=ApiConstants.ID, type=CommandType.LONG, required=true, description="Deletes a user") + @Parameter(name=ApiConstants.ID, type=CommandType.UUID, entityType=UserResponse.class, required=true, description="Deletes a user") private Long id; ///////////////////////////////////////////////////// diff --git a/api/src/org/apache/cloudstack/api/command/admin/user/DisableUserCmd.java b/api/src/org/apache/cloudstack/api/command/admin/user/DisableUserCmd.java index b726b913d2f..403014bb6c5 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/user/DisableUserCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/user/DisableUserCmd.java @@ -21,7 +21,6 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; @@ -42,8 +41,8 @@ public class DisableUserCmd extends BaseAsyncCmd { //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - @IdentityMapper(entityTableName="user") - @Parameter(name=ApiConstants.ID, type=CommandType.LONG, required=true, description="Disables user by user ID.") + @Parameter(name=ApiConstants.ID, type=CommandType.UUID, entityType=UserResponse.class, + required=true, description="Disables user by user ID.") private Long id; ///////////////////////////////////////////////////// diff --git a/api/src/org/apache/cloudstack/api/command/admin/user/EnableUserCmd.java b/api/src/org/apache/cloudstack/api/command/admin/user/EnableUserCmd.java index 0ac28c33089..0e88627c43a 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/user/EnableUserCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/user/EnableUserCmd.java @@ -20,7 +20,6 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; @@ -39,8 +38,8 @@ public class EnableUserCmd extends BaseCmd { //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - @IdentityMapper(entityTableName="user") - @Parameter(name=ApiConstants.ID, type=CommandType.LONG, required=true, description="Enables user by user ID.") + @Parameter(name=ApiConstants.ID, type=CommandType.UUID, entityType=UserResponse.class, + required=true, description="Enables user by user ID.") private Long id; diff --git a/api/src/org/apache/cloudstack/api/command/admin/user/ListUsersCmd.java b/api/src/org/apache/cloudstack/api/command/admin/user/ListUsersCmd.java index 7d918b2090d..fba7a62eedd 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/user/ListUsersCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/user/ListUsersCmd.java @@ -20,7 +20,6 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseListAccountResourcesCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.response.ListResponse; @@ -39,8 +38,7 @@ public class ListUsersCmd extends BaseListAccountResourcesCmd { @Parameter(name=ApiConstants.ACCOUNT_TYPE, type=CommandType.LONG, description="List users by account type. Valid types include admin, domain-admin, read-only-admin, or user.") private Long accountType; - @IdentityMapper(entityTableName="user") - @Parameter(name=ApiConstants.ID, type=CommandType.LONG, description="List user by ID.") + @Parameter(name=ApiConstants.ID, type=CommandType.UUID, entityType=UserResponse.class, description="List user by ID.") private Long id; @Parameter(name=ApiConstants.STATE, type=CommandType.STRING, description="List users by state of the user account.") @@ -81,7 +79,6 @@ public class ListUsersCmd extends BaseListAccountResourcesCmd { @Override public void execute(){ - ListResponse response = _queryService.searchForUsers(this); response.setResponseName(getCommandName()); this.setResponseObject(response); diff --git a/api/src/org/apache/cloudstack/api/command/admin/user/LockUserCmd.java b/api/src/org/apache/cloudstack/api/command/admin/user/LockUserCmd.java index 30cfd15650b..a29739385c1 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/user/LockUserCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/user/LockUserCmd.java @@ -20,7 +20,6 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; @@ -39,8 +38,8 @@ public class LockUserCmd extends BaseCmd { //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - @IdentityMapper(entityTableName="user") - @Parameter(name=ApiConstants.ID, type=CommandType.LONG, required=true, description="Locks user by user ID.") + @Parameter(name=ApiConstants.ID, type=CommandType.UUID, entityType=UserResponse.class, + required=true, description="Locks user by user ID.") private Long id; ///////////////////////////////////////////////////// diff --git a/api/src/org/apache/cloudstack/api/command/admin/user/RegisterCmd.java b/api/src/org/apache/cloudstack/api/command/admin/user/RegisterCmd.java index becba814bc4..b762ac66e99 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/user/RegisterCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/user/RegisterCmd.java @@ -20,10 +20,10 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.response.RegisterResponse; +import org.apache.cloudstack.api.response.UserResponse; import com.cloud.user.Account; import com.cloud.user.User; @@ -37,8 +37,8 @@ public class RegisterCmd extends BaseCmd { //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - @IdentityMapper(entityTableName="user") - @Parameter(name=ApiConstants.ID, type=CommandType.LONG, required=true, description="User id") + @Parameter(name=ApiConstants.ID, type=CommandType.UUID, entityType=UserResponse.class, + required=true, description="User id") private Long id; ///////////////////////////////////////////////////// diff --git a/api/src/org/apache/cloudstack/api/command/admin/user/UpdateUserCmd.java b/api/src/org/apache/cloudstack/api/command/admin/user/UpdateUserCmd.java index 8a6789d34d6..b2f4399d172 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/user/UpdateUserCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/user/UpdateUserCmd.java @@ -20,7 +20,6 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; @@ -49,8 +48,8 @@ public class UpdateUserCmd extends BaseCmd { @Parameter(name=ApiConstants.FIRSTNAME, type=CommandType.STRING, description="first name") private String firstname; - @IdentityMapper(entityTableName="user") - @Parameter(name=ApiConstants.ID, type=CommandType.LONG, required=true, description="User id") + @Parameter(name=ApiConstants.ID, type=CommandType.UUID, entityType=UserResponse.class, + required=true, description="User uuid") private Long id; @Parameter(name=ApiConstants.LASTNAME, type=CommandType.STRING, description="last name") diff --git a/api/src/org/apache/cloudstack/api/command/user/user/AddVpnUserCmd.java b/api/src/org/apache/cloudstack/api/command/user/user/AddVpnUserCmd.java index abd58b897c0..f72b8a9df9b 100644 --- a/api/src/org/apache/cloudstack/api/command/user/user/AddVpnUserCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/user/AddVpnUserCmd.java @@ -21,10 +21,11 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseAsyncCreateCmd; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; +import org.apache.cloudstack.api.response.DomainResponse; +import org.apache.cloudstack.api.response.ProjectResponse; import org.apache.cloudstack.api.response.VpnUsersResponse; import com.cloud.domain.Domain; import com.cloud.event.EventTypes; @@ -50,12 +51,12 @@ public class AddVpnUserCmd extends BaseAsyncCreateCmd { @Parameter(name=ApiConstants.ACCOUNT, type=CommandType.STRING, description="an optional account for the vpn user. Must be used with domainId.") private String accountName; - @IdentityMapper(entityTableName="projects") - @Parameter(name=ApiConstants.PROJECT_ID, type=CommandType.LONG, description="add vpn user to the specific project") + @Parameter(name=ApiConstants.PROJECT_ID, type=CommandType.UUID, entityType=ProjectResponse.class, + description="add vpn user to the specific project") private Long projectId; - @IdentityMapper(entityTableName="domain") - @Parameter(name=ApiConstants.DOMAIN_ID, type=CommandType.LONG, description="an optional domainId for the vpn user. If the account parameter is used, domainId must also be used.") + @Parameter(name=ApiConstants.DOMAIN_ID, type=CommandType.UUID, entityType=DomainResponse.class, + description="an optional domainId for the vpn user. If the account parameter is used, domainId must also be used.") private Long domainId; ///////////////////////////////////////////////////// diff --git a/api/src/org/apache/cloudstack/api/command/user/user/ListVpnUsersCmd.java b/api/src/org/apache/cloudstack/api/command/user/user/ListVpnUsersCmd.java index 1fa15b597f9..f98d3c8ec7b 100644 --- a/api/src/org/apache/cloudstack/api/command/user/user/ListVpnUsersCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/user/ListVpnUsersCmd.java @@ -23,7 +23,6 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; 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.response.ListResponse; @@ -40,8 +39,8 @@ public class ListVpnUsersCmd extends BaseListProjectAndAccountResourcesCmd { ///////////////////////////////////////////////////// //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - @IdentityMapper(entityTableName="vpn_users") - @Parameter(name=ApiConstants.ID, type=CommandType.LONG, description="the ID of the vpn user") + @Parameter(name=ApiConstants.ID, type=CommandType.UUID, entityType=VpnUsersResponse.class, + description="The uuid of the Vpn user") private Long id; @Parameter(name=ApiConstants.USERNAME, type=CommandType.STRING, description="the username of the vpn user.") diff --git a/api/src/org/apache/cloudstack/api/command/user/user/RemoveVpnUserCmd.java b/api/src/org/apache/cloudstack/api/command/user/user/RemoveVpnUserCmd.java index 5e144bdaf76..eee343ce760 100644 --- a/api/src/org/apache/cloudstack/api/command/user/user/RemoveVpnUserCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/user/RemoveVpnUserCmd.java @@ -21,10 +21,11 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; +import org.apache.cloudstack.api.response.DomainResponse; +import org.apache.cloudstack.api.response.ProjectResponse; import org.apache.cloudstack.api.response.SuccessResponse; import com.cloud.event.EventTypes; import com.cloud.user.Account; @@ -45,12 +46,12 @@ public class RemoveVpnUserCmd extends BaseAsyncCmd { @Parameter(name=ApiConstants.ACCOUNT, type=CommandType.STRING, description="an optional account for the vpn user. Must be used with domainId.") private String accountName; - @IdentityMapper(entityTableName="projects") - @Parameter(name=ApiConstants.PROJECT_ID, type=CommandType.LONG, description="remove vpn user from the project") + @Parameter(name=ApiConstants.PROJECT_ID, type=CommandType.UUID, entityType=ProjectResponse.class, + description="remove vpn user from the project") private Long projectId; - @IdentityMapper(entityTableName="domain") - @Parameter(name=ApiConstants.DOMAIN_ID, type=CommandType.LONG, description="an optional domainId for the vpn user. If the account parameter is used, domainId must also be used.") + @Parameter(name=ApiConstants.DOMAIN_ID, type=CommandType.UUID, entityType=DomainResponse.class, + description="an optional domainId for the vpn user. If the account parameter is used, domainId must also be used.") private Long domainId; ///////////////////////////////////////////////////// @@ -99,7 +100,6 @@ public class RemoveVpnUserCmd extends BaseAsyncCmd { return "Remove Remote Access VPN user for account " + getEntityOwnerId() + " username= " + getUserName(); } - @Override public String getEventType() { return EventTypes.EVENT_VPN_USER_REMOVE; From 1aa30f03e7a99ff3bbfebca4b98823de2a25c359 Mon Sep 17 00:00:00 2001 From: Min Chen Date: Tue, 18 Dec 2012 11:19:36 -0800 Subject: [PATCH 132/421] Remove IdentityProxy from AutoScale responses. Signed-off-by: Min Chen --- .../cloud/network/as/AutoScaleVmProfile.java | 2 + api/src/com/cloud/offering/DiskOffering.java | 2 + .../com/cloud/offering/ServiceOffering.java | 2 + .../response/AutoScaleVmGroupResponse.java | 18 ++--- .../response/AutoScaleVmProfileResponse.java | 31 ++++---- .../api/response/CloudIdentifierResponse.java | 11 ++- .../api/response/ConditionResponse.java | 13 ++-- .../api/response/CounterResponse.java | 9 ++- .../src/com/cloud/storage/DiskOfferingVO.java | 72 +++++++++---------- .../src/com/cloud/api/ApiResponseHelper.java | 44 +++++++++--- .../cloud/migration/ServiceOffering21VO.java | 56 ++++++++------- .../network/as/AutoScaleVmProfileVO.java | 2 +- 12 files changed, 148 insertions(+), 114 deletions(-) diff --git a/api/src/com/cloud/network/as/AutoScaleVmProfile.java b/api/src/com/cloud/network/as/AutoScaleVmProfile.java index 8ca5415148c..b7002fd0f4a 100644 --- a/api/src/com/cloud/network/as/AutoScaleVmProfile.java +++ b/api/src/com/cloud/network/as/AutoScaleVmProfile.java @@ -29,6 +29,8 @@ public interface AutoScaleVmProfile extends ControlledEntity { public long getId(); + public String getUuid(); + public Long getZoneId(); public Long getServiceOfferingId(); diff --git a/api/src/com/cloud/offering/DiskOffering.java b/api/src/com/cloud/offering/DiskOffering.java index 32a338f0eda..10a045d330a 100644 --- a/api/src/com/cloud/offering/DiskOffering.java +++ b/api/src/com/cloud/offering/DiskOffering.java @@ -26,6 +26,8 @@ import java.util.Date; public interface DiskOffering { long getId(); + String getUuid(); + String getUniqueName(); boolean getUseLocalStorage(); diff --git a/api/src/com/cloud/offering/ServiceOffering.java b/api/src/com/cloud/offering/ServiceOffering.java index 1a1acb2ea5a..84950c65a63 100755 --- a/api/src/com/cloud/offering/ServiceOffering.java +++ b/api/src/com/cloud/offering/ServiceOffering.java @@ -34,6 +34,8 @@ public interface ServiceOffering { long getId(); + String getUuid(); + String getDisplayText(); Date getCreated(); diff --git a/api/src/org/apache/cloudstack/api/response/AutoScaleVmGroupResponse.java b/api/src/org/apache/cloudstack/api/response/AutoScaleVmGroupResponse.java index a6ea46f2447..a4f3da6899c 100644 --- a/api/src/org/apache/cloudstack/api/response/AutoScaleVmGroupResponse.java +++ b/api/src/org/apache/cloudstack/api/response/AutoScaleVmGroupResponse.java @@ -28,15 +28,15 @@ public class AutoScaleVmGroupResponse extends BaseResponse implements Controlled @SerializedName(ApiConstants.ID) @Param(description = "the autoscale vm group ID") - private IdentityProxy id = new IdentityProxy("autoscale_vmgroups"); + private String id; @SerializedName(ApiConstants.LBID) @Param(description = "the load balancer rule ID") - private IdentityProxy loadBalancerId = new IdentityProxy("firewall_rules"); + private String loadBalancerId; @SerializedName(ApiConstants.VMPROFILE_ID) @Param(description = "the autoscale profile that contains information about the vms in the vm group.") - private IdentityProxy profileId = new IdentityProxy("autoscale_vmprofiles"); + private String profileId; @SerializedName(ApiConstants.MIN_MEMBERS) @Param(description = "the minimum number of members in the vmgroup, the number of instances in the vm group will be equal to or more than this number.") @@ -81,16 +81,16 @@ public class AutoScaleVmGroupResponse extends BaseResponse implements Controlled } - public void setId(Long id) { - this.id.setValue(id); + public void setId(String id) { + this.id = id; } - public void setLoadBalancerId(Long loadBalancerId) { - this.loadBalancerId.setValue(loadBalancerId); + public void setLoadBalancerId(String loadBalancerId) { + this.loadBalancerId = loadBalancerId; } - public void setProfileId(Long profileId) { - this.profileId.setValue(profileId); + public void setProfileId(String profileId) { + this.profileId = profileId; } public void setMinMembers(int minMembers) { diff --git a/api/src/org/apache/cloudstack/api/response/AutoScaleVmProfileResponse.java b/api/src/org/apache/cloudstack/api/response/AutoScaleVmProfileResponse.java index cc338bfa383..0041be91d66 100644 --- a/api/src/org/apache/cloudstack/api/response/AutoScaleVmProfileResponse.java +++ b/api/src/org/apache/cloudstack/api/response/AutoScaleVmProfileResponse.java @@ -25,7 +25,6 @@ import org.apache.cloudstack.api.BaseCmd.CommandType; import org.apache.cloudstack.api.BaseResponse; import org.apache.cloudstack.api.Parameter; import com.cloud.serializer.Param; -import com.cloud.utils.IdentityProxy; import com.cloud.utils.Pair; import com.google.gson.annotations.SerializedName; @@ -33,20 +32,20 @@ public class AutoScaleVmProfileResponse extends BaseResponse implements Controll @SerializedName(ApiConstants.ID) @Param(description = "the autoscale vm profile ID") - private IdentityProxy id = new IdentityProxy("autoscale_vmprofiles"); + private String id; /* Parameters related to deploy virtual machine */ @SerializedName(ApiConstants.ZONE_ID) @Param(description = "the availability zone to be used while deploying a virtual machine") - private IdentityProxy zoneId = new IdentityProxy("data_center"); + private String zoneId; @SerializedName(ApiConstants.SERVICE_OFFERING_ID) @Param(description = "the service offering to be used while deploying a virtual machine") - private IdentityProxy serviceOfferingId = new IdentityProxy("disk_offering"); + private String serviceOfferingId; @SerializedName(ApiConstants.TEMPLATE_ID) @Param(description = "the template to be used while deploying a virtual machine") - private IdentityProxy templateId = new IdentityProxy("vm_template"); + private String templateId; @SerializedName(ApiConstants.OTHER_DEPLOY_PARAMS) @Param(description = "parameters other than zoneId/serviceOfferringId/templateId to be used while deploying a virtual machine") @@ -64,7 +63,7 @@ public class AutoScaleVmProfileResponse extends BaseResponse implements Controll @SerializedName(ApiConstants.AUTOSCALE_USER_ID) @Param(description = "the ID of the user used to launch and destroy the VMs") - private IdentityProxy autoscaleUserId = new IdentityProxy("user"); + private String autoscaleUserId; @Parameter(name = ApiConstants.CS_URL, type = CommandType.STRING, description = "the API URL including port of the CloudStack Management Server example: http://server.cloud.com:8080/client/api?") private String csUrl; @@ -93,20 +92,20 @@ public class AutoScaleVmProfileResponse extends BaseResponse implements Controll } - 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 setServiceOfferingId(Long serviceOfferingId) { - this.serviceOfferingId.setValue(serviceOfferingId); + public void setServiceOfferingId(String serviceOfferingId) { + this.serviceOfferingId = serviceOfferingId; } - public void setTemplateId(Long templateId) { - this.templateId.setValue(templateId); + public void setTemplateId(String templateId) { + this.templateId = templateId; } public void setOtherDeployParams(String otherDeployParams) { @@ -147,8 +146,8 @@ public class AutoScaleVmProfileResponse extends BaseResponse implements Controll this.projectName = projectName; } - public void setAutoscaleUserId(Long autoscaleUserId) { - this.autoscaleUserId.setValue(autoscaleUserId); + public void setAutoscaleUserId(String autoscaleUserId) { + this.autoscaleUserId = autoscaleUserId; } public void setDestroyVmGraceperiod(Integer destroyVmGraceperiod) { diff --git a/api/src/org/apache/cloudstack/api/response/CloudIdentifierResponse.java b/api/src/org/apache/cloudstack/api/response/CloudIdentifierResponse.java index 2da1221b804..d6d2fa70138 100644 --- a/api/src/org/apache/cloudstack/api/response/CloudIdentifierResponse.java +++ b/api/src/org/apache/cloudstack/api/response/CloudIdentifierResponse.java @@ -17,7 +17,6 @@ package org.apache.cloudstack.api.response; import org.apache.cloudstack.api.ApiConstants; -import com.cloud.utils.IdentityProxy; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; import org.apache.cloudstack.api.BaseResponse; @@ -25,7 +24,7 @@ import org.apache.cloudstack.api.BaseResponse; public class CloudIdentifierResponse extends BaseResponse { @SerializedName(ApiConstants.USER_ID) @Param(description="the user ID for the cloud identifier") - private IdentityProxy userId = new IdentityProxy("user"); + private String userId; @SerializedName("cloudidentifier") @Param(description="the cloud identifier") private String cloudIdentifier; @@ -33,12 +32,12 @@ public class CloudIdentifierResponse extends BaseResponse { @SerializedName("signature") @Param(description="the signed response for the cloud identifier") private String signature; - public Long getUserId() { - return userId.getValue(); + public String getUserId() { + return userId; } - public void setUserId(Long userId) { - this.userId.setValue(userId); + public void setUserId(String userId) { + this.userId = userId; } public String getCloudIdentifier() { diff --git a/api/src/org/apache/cloudstack/api/response/ConditionResponse.java b/api/src/org/apache/cloudstack/api/response/ConditionResponse.java index 83ff222bf4a..c90e78a3534 100644 --- a/api/src/org/apache/cloudstack/api/response/ConditionResponse.java +++ b/api/src/org/apache/cloudstack/api/response/ConditionResponse.java @@ -21,7 +21,6 @@ import java.util.List; import org.apache.cloudstack.api.ApiConstants; import com.cloud.serializer.Param; -import com.cloud.utils.IdentityProxy; import com.google.gson.annotations.SerializedName; import org.apache.cloudstack.api.BaseResponse; @@ -29,7 +28,7 @@ import org.apache.cloudstack.api.BaseResponse; public class ConditionResponse extends BaseResponse implements ControlledEntityResponse { @SerializedName("id") @Param(description = "the id of the Condition") - private final IdentityProxy id = new IdentityProxy("conditions"); + private String id; @SerializedName(value = ApiConstants.THRESHOLD) @Param(description = "Threshold Value for the counter.") @@ -53,7 +52,7 @@ public class ConditionResponse extends BaseResponse implements ControlledEntityR @SerializedName(ApiConstants.ZONE_ID) @Param(description = "zone id of counter") - private final IdentityProxy zoneId = new IdentityProxy("data_center"); + private String zoneId; @SerializedName(ApiConstants.PROJECT_ID) @Param(description = "the project id of the Condition.") @@ -71,8 +70,8 @@ public class ConditionResponse extends BaseResponse implements ControlledEntityR // ///////////////// Setters /////////////////////// // /////////////////////////////////////////////////// - public void setId(Long id) { - this.id.setValue(id); + public void setId(String id) { + this.id = id; } public void setThreshold(long threshold) { @@ -97,8 +96,8 @@ public class ConditionResponse extends BaseResponse implements ControlledEntityR this.projectId = projectId; } - public void setZoneId(Long zoneId) { - this.zoneId.setValue(zoneId); + public void setZoneId(String zoneId) { + this.zoneId = zoneId; } @Override diff --git a/api/src/org/apache/cloudstack/api/response/CounterResponse.java b/api/src/org/apache/cloudstack/api/response/CounterResponse.java index f3cf3b33614..1d13d68fdf6 100644 --- a/api/src/org/apache/cloudstack/api/response/CounterResponse.java +++ b/api/src/org/apache/cloudstack/api/response/CounterResponse.java @@ -22,7 +22,6 @@ import org.apache.cloudstack.api.Entity; import com.cloud.network.as.Counter; import com.cloud.serializer.Param; -import com.cloud.utils.IdentityProxy; import com.google.gson.annotations.SerializedName; import org.apache.cloudstack.api.BaseResponse; @@ -31,7 +30,7 @@ import org.apache.cloudstack.api.BaseResponse; public class CounterResponse extends BaseResponse { @SerializedName("id") @Param(description = "the id of the Counter") - private final IdentityProxy id = new IdentityProxy("counter"); + private String id; @SerializedName(value = ApiConstants.NAME) @Param(description = "Name of the counter.") @@ -47,10 +46,10 @@ public class CounterResponse extends BaseResponse { @SerializedName(ApiConstants.ZONE_ID) @Param(description = "zone id of counter") - private final IdentityProxy zoneId = new IdentityProxy("data_center"); + private String zoneId; - public void setId(Long id) { - this.id.setValue(id); + public void setId(String id) { + this.id = id; } public void setName(String name) { diff --git a/core/src/com/cloud/storage/DiskOfferingVO.java b/core/src/com/cloud/storage/DiskOfferingVO.java index 10ce0a1d92a..a52671225da 100755 --- a/core/src/com/cloud/storage/DiskOfferingVO.java +++ b/core/src/com/cloud/storage/DiskOfferingVO.java @@ -42,12 +42,12 @@ import com.cloud.utils.db.GenericDao; @Table(name="disk_offering") @Inheritance(strategy=InheritanceType.JOINED) @DiscriminatorColumn(name="type", discriminatorType=DiscriminatorType.STRING, length=32) -public class DiskOfferingVO implements DiskOffering, Identity { +public class DiskOfferingVO implements DiskOffering { public enum Type { Disk, Service }; - + @Id @GeneratedValue(strategy=GenerationType.IDENTITY) @Column(name="id") @@ -58,7 +58,7 @@ public class DiskOfferingVO implements DiskOffering, Identity { @Column(name="unique_name") private String uniqueName; - + @Column(name="name") private String name = null; @@ -70,39 +70,39 @@ public class DiskOfferingVO implements DiskOffering, Identity { @Column(name="tags", length=4096) String tags; - + @Column(name="type") Type type; - + @Column(name=GenericDao.REMOVED) @Temporal(TemporalType.TIMESTAMP) private Date removed; @Column(name=GenericDao.CREATED_COLUMN) private Date created; - + @Column(name="recreatable") private boolean recreatable; - + @Column(name="use_local_storage") private boolean useLocalStorage; - + @Column(name="system_use") private boolean systemUse; - + @Column(name="customized") private boolean customized; @Column(name="uuid") private String uuid; - + @Column(name="sort_key") int sortKey; public DiskOfferingVO() { this.uuid = UUID.randomUUID().toString(); } - + public DiskOfferingVO(Long domainId, String name, String displayText, long diskSize, String tags, boolean isCustomized) { this.domainId = domainId; this.name = name; @@ -115,7 +115,7 @@ public class DiskOfferingVO implements DiskOffering, Identity { this.customized = isCustomized; this.uuid = UUID.randomUUID().toString(); } - + public DiskOfferingVO(String name, String displayText, boolean mirrored, String tags, boolean recreatable, boolean useLocalStorage, boolean systemUse, boolean customized) { this.domainId = null; this.type = Type.Service; @@ -147,7 +147,7 @@ public class DiskOfferingVO implements DiskOffering, Identity { public long getId() { return id; } - + @Override public boolean isCustomized() { return customized; @@ -161,25 +161,25 @@ public class DiskOfferingVO implements DiskOffering, Identity { public String getUniqueName() { return uniqueName; } - + @Override public boolean getUseLocalStorage() { return useLocalStorage; } - + @Override public Long getDomainId() { return domainId; } - + public Type getType() { return type; } - + public boolean isRecreatable() { return recreatable; } - + public void setDomainId(Long domainId) { this.domainId = domainId; } @@ -188,17 +188,17 @@ public class DiskOfferingVO implements DiskOffering, Identity { public String getName() { return name; } - + public void setName(String name) { this.name = name; } - + @Override public boolean getSystemUse() { return systemUse; } - + public void setSystemUse(boolean systemUse) { this.systemUse = systemUse; } @@ -215,7 +215,7 @@ public class DiskOfferingVO implements DiskOffering, Identity { public long getDiskSize(){ return diskSize; } - + @Override public void setDiskSize(long diskSize) { this.diskSize = diskSize; @@ -224,21 +224,21 @@ public class DiskOfferingVO implements DiskOffering, Identity { public Date getRemoved() { return removed; } - + @Override public Date getCreated() { return created; } - + protected void setTags(String tags) { this.tags = tags; } - + @Override public String getTags() { return tags; } - + public void setUniqueName(String name) { this.uniqueName = name; } @@ -250,7 +250,7 @@ public class DiskOfferingVO implements DiskOffering, Identity { if (tags == null || tags.isEmpty()) { return new String[0]; } - + return tags.split(","); } @@ -259,30 +259,30 @@ public class DiskOfferingVO implements DiskOffering, Identity { if (this.tags == null) { return false; } - + for (String tag : tags) { if (!this.tags.matches(tag)) { return false; } } - + return true; } - + @Transient public void setTagsArray(List newTags) { if (newTags.isEmpty()) { setTags(null); return; } - + StringBuilder buf = new StringBuilder(); for (String tag : newTags) { buf.append(tag).append(","); } - + buf.delete(buf.length() - 1, buf.length()); - + setTags(buf.toString()); } @@ -293,12 +293,12 @@ public class DiskOfferingVO implements DiskOffering, Identity { public void setRemoved(Date removed) { this.removed = removed; } - + @Override public String getUuid() { return this.uuid; } - + public void setUuid(String uuid) { this.uuid = uuid; } @@ -306,7 +306,7 @@ public class DiskOfferingVO implements DiskOffering, Identity { public void setSortKey(int key) { sortKey = key; } - + public int getSortKey() { return sortKey; } diff --git a/server/src/com/cloud/api/ApiResponseHelper.java b/server/src/com/cloud/api/ApiResponseHelper.java index f9b908c388d..e911e56ea8d 100755 --- a/server/src/com/cloud/api/ApiResponseHelper.java +++ b/server/src/com/cloud/api/ApiResponseHelper.java @@ -3282,7 +3282,7 @@ public class ApiResponseHelper implements ResponseGenerator { @Override public CounterResponse createCounterResponse(Counter counter) { CounterResponse response = new CounterResponse(); - response.setId(counter.getId()); + response.setId(counter.getUuid()); response.setSource(counter.getSource().toString()); response.setName(counter.getName()); response.setValue(counter.getValue()); @@ -3293,7 +3293,7 @@ public class ApiResponseHelper implements ResponseGenerator { @Override public ConditionResponse createConditionResponse(Condition condition) { ConditionResponse response = new ConditionResponse(); - response.setId(condition.getId()); + response.setId(condition.getUuid()); List counterResponseList = new ArrayList(); counterResponseList.add(createCounterResponse(ApiDBUtils.getCounter(condition.getCounterid()))); response.setCounterResponse(counterResponseList); @@ -3307,14 +3307,32 @@ public class ApiResponseHelper implements ResponseGenerator { @Override public AutoScaleVmProfileResponse createAutoScaleVmProfileResponse(AutoScaleVmProfile profile) { AutoScaleVmProfileResponse response = new AutoScaleVmProfileResponse(); - response.setId(profile.getId()); - response.setZoneId(profile.getZoneId()); - response.setServiceOfferingId(profile.getServiceOfferingId()); - response.setTemplateId(profile.getTemplateId()); + response.setId(profile.getUuid()); + if (profile.getZoneId() != null) { + DataCenterVO zone = ApiDBUtils.findZoneById(profile.getZoneId()); + if (zone != null) { + response.setZoneId(zone.getUuid()); + } + } + if (profile.getServiceOfferingId() != null) { + ServiceOffering so = ApiDBUtils.findServiceOfferingById(profile.getServiceOfferingId()); + if (so != null) { + response.setServiceOfferingId(so.getUuid()); + } + } + if (profile.getTemplateId() != null) { + VMTemplateVO template = ApiDBUtils.findTemplateById(profile.getTemplateId()); + if (template != null) { + response.setTemplateId(template.getUuid()); + } + } response.setOtherDeployParams(profile.getOtherDeployParams()); response.setCounterParams(profile.getCounterParams()); response.setDestroyVmGraceperiod(profile.getDestroyVmGraceperiod()); - response.setAutoscaleUserId(profile.getAutoScaleUserId()); + User user = ApiDBUtils.findUserById(profile.getAutoScaleUserId()); + if (user != null) { + response.setAutoscaleUserId(user.getUuid()); + } response.setObjectName("autoscalevmprofile"); // Populates the account information in the response @@ -3346,13 +3364,19 @@ public class ApiResponseHelper implements ResponseGenerator { @Override public AutoScaleVmGroupResponse createAutoScaleVmGroupResponse(AutoScaleVmGroup vmGroup) { AutoScaleVmGroupResponse response = new AutoScaleVmGroupResponse(); - response.setId(vmGroup.getId()); + response.setId(vmGroup.getUuid()); response.setMinMembers(vmGroup.getMinMembers()); response.setMaxMembers(vmGroup.getMaxMembers()); response.setState(vmGroup.getState()); response.setInterval(vmGroup.getInterval()); - response.setProfileId(vmGroup.getProfileId()); - response.setLoadBalancerId(vmGroup.getProfileId()); + AutoScaleVmProfileVO profile = ApiDBUtils.findAutoScaleVmProfileById(vmGroup.getProfileId()); + if (profile != null) { + response.setProfileId(profile.getUuid()); + } + FirewallRuleVO fw = ApiDBUtils.findFirewallRuleById(vmGroup.getProfileId()); + if (fw != null) { + response.setLoadBalancerId(fw.getUuid()); + } List scaleUpPoliciesResponse = new ArrayList(); List scaleDownPoliciesResponse = new ArrayList(); diff --git a/server/src/com/cloud/migration/ServiceOffering21VO.java b/server/src/com/cloud/migration/ServiceOffering21VO.java index adfac1aad61..fdec30e3b8a 100644 --- a/server/src/com/cloud/migration/ServiceOffering21VO.java +++ b/server/src/com/cloud/migration/ServiceOffering21VO.java @@ -32,25 +32,25 @@ import com.cloud.offering.ServiceOffering; public class ServiceOffering21VO extends DiskOffering21VO implements ServiceOffering { @Column(name="cpu") private int cpu; - + @Column(name="speed") private int speed; - + @Column(name="ram_size") private int ramSize; - + @Column(name="nw_rate") private Integer rateMbps; - + @Column(name="mc_rate") private Integer multicastRateMbps; - + @Column(name="ha_enabled") private boolean offerHA; - + @Column(name="host_tag") - private String hostTag; - + private String hostTag; + protected ServiceOffering21VO() { super(); } @@ -64,19 +64,19 @@ public class ServiceOffering21VO extends DiskOffering21VO implements ServiceOffe this.multicastRateMbps = multicastRateMbps; this.offerHA = offerHA; } - + public ServiceOffering21VO(String name, int cpu, int ramSize, int speed, Integer rateMbps, Integer multicastRateMbps, boolean offerHA, String displayText, boolean useLocalStorage, boolean recreatable, String tags, String hostTag) { this(name, cpu, ramSize, speed, rateMbps, multicastRateMbps, offerHA, displayText, useLocalStorage, recreatable, tags); this.hostTag = hostTag; } - + @Override public boolean getOfferHA() { return offerHA; } - @Override + @Override public boolean getLimitCpuUse() { return false; } @@ -84,7 +84,7 @@ public class ServiceOffering21VO extends DiskOffering21VO implements ServiceOffe public void setOfferHA(boolean offerHA) { this.offerHA = offerHA; } - + @Override @Transient public String[] getTagsArray() { @@ -92,15 +92,15 @@ public class ServiceOffering21VO extends DiskOffering21VO implements ServiceOffe if (tags == null || tags.length() == 0) { return new String[0]; } - + return tags.split(","); } - + @Override public int getCpu() { return cpu; } - + public void setCpu(int cpu) { this.cpu = cpu; } @@ -112,17 +112,17 @@ public class ServiceOffering21VO extends DiskOffering21VO implements ServiceOffe public void setRamSize(int ramSize) { this.ramSize = ramSize; } - + @Override public int getSpeed() { return speed; } - + @Override public int getRamSize() { return ramSize; } - + public void setRateMbps(Integer rateMbps) { this.rateMbps = rateMbps; } @@ -135,7 +135,7 @@ public class ServiceOffering21VO extends DiskOffering21VO implements ServiceOffe public void setMulticastRateMbps(Integer multicastRateMbps) { this.multicastRateMbps = multicastRateMbps; } - + @Override public Integer getMulticastRateMbps() { return multicastRateMbps; @@ -147,8 +147,8 @@ public class ServiceOffering21VO extends DiskOffering21VO implements ServiceOffe public void setHostTag(String hostTag) { this.hostTag = hostTag; - } - + } + public String getHostTag() { return hostTag; } @@ -156,10 +156,18 @@ public class ServiceOffering21VO extends DiskOffering21VO implements ServiceOffe @Override public boolean getDefaultUse() { return false; - } - + } + @Override public String getSystemVmType() { return null; - } + } + + @Override + public String getUuid() { + // TODO Auto-generated method stub + return null; + } + + } diff --git a/server/src/com/cloud/network/as/AutoScaleVmProfileVO.java b/server/src/com/cloud/network/as/AutoScaleVmProfileVO.java index d0a6f8e3145..22e87789486 100644 --- a/server/src/com/cloud/network/as/AutoScaleVmProfileVO.java +++ b/server/src/com/cloud/network/as/AutoScaleVmProfileVO.java @@ -41,7 +41,7 @@ import com.cloud.utils.net.NetUtils; @Entity @Table(name = "autoscale_vmprofiles") @Inheritance(strategy = InheritanceType.JOINED) -public class AutoScaleVmProfileVO implements AutoScaleVmProfile, Identity { +public class AutoScaleVmProfileVO implements AutoScaleVmProfile{ @Id @GeneratedValue(strategy = GenerationType.IDENTITY) From 16be94e9d7f5dde5b9353d85bdd9a8114546abe2 Mon Sep 17 00:00:00 2001 From: Min Chen Date: Tue, 18 Dec 2012 12:02:08 -0800 Subject: [PATCH 133/421] Remove IdentityProxy from OfferingResponse, FirewallResponse, FirewallRuleResponse, HypervisorCapabilitiesResponse, IPAddressResponse. Signed-off-by: Min Chen --- .../hypervisor/HypervisorCapabilities.java | 2 + api/src/com/cloud/network/IpAddress.java | 2 + api/src/com/cloud/network/Network.java | 2 + api/src/com/cloud/network/NetworkProfile.java | 8 ++ .../com/cloud/network/rules/FirewallRule.java | 6 ++ .../user/firewall/CreateFirewallRuleCmd.java | 7 ++ .../firewall/CreatePortForwardingRuleCmd.java | 7 ++ .../user/nat/CreateIpForwardingRuleCmd.java | 7 ++ .../user/network/CreateNetworkACLCmd.java | 7 ++ .../api/response/DiskOfferingResponse.java | 21 ++--- .../api/response/FirewallResponse.java | 7 +- .../api/response/FirewallRuleResponse.java | 31 +++---- .../HypervisorCapabilitiesResponse.java | 17 ++-- .../api/response/IPAddressResponse.java | 57 ++++++------ .../api/response/ServiceOfferingResponse.java | 21 ++--- server/src/com/cloud/api/ApiDBUtils.java | 8 ++ .../src/com/cloud/api/ApiResponseHelper.java | 91 +++++++++++++------ server/src/com/cloud/network/IPAddressVO.java | 74 +++++++-------- server/src/com/cloud/network/NetworkVO.java | 34 +++---- .../src/com/cloud/network/addr/PublicIp.java | 44 +++++---- .../cloud/network/rules/FirewallRuleVO.java | 78 ++++++++-------- .../network/rules/StaticNatRuleImpl.java | 26 ++++-- 22 files changed, 324 insertions(+), 233 deletions(-) diff --git a/api/src/com/cloud/hypervisor/HypervisorCapabilities.java b/api/src/com/cloud/hypervisor/HypervisorCapabilities.java index f91da354c96..e2fbc077a7a 100644 --- a/api/src/com/cloud/hypervisor/HypervisorCapabilities.java +++ b/api/src/com/cloud/hypervisor/HypervisorCapabilities.java @@ -28,6 +28,8 @@ public interface HypervisorCapabilities { */ long getId(); + String getUuid(); + /** * @return type of hypervisor */ diff --git a/api/src/com/cloud/network/IpAddress.java b/api/src/com/cloud/network/IpAddress.java index 9a72d108a63..bb9a7d58877 100644 --- a/api/src/com/cloud/network/IpAddress.java +++ b/api/src/com/cloud/network/IpAddress.java @@ -72,6 +72,8 @@ public interface IpAddress extends ControlledEntity { */ long getId(); + String getUuid(); + void setState(IpAddress.State state); Long getAllocatedToAccountId(); diff --git a/api/src/com/cloud/network/Network.java b/api/src/com/cloud/network/Network.java index 1a083a93057..2a0c930905f 100644 --- a/api/src/com/cloud/network/Network.java +++ b/api/src/com/cloud/network/Network.java @@ -255,6 +255,8 @@ public interface Network extends ControlledEntity { */ long getId(); + String getUuid(); + String getName(); Mode getMode(); diff --git a/api/src/com/cloud/network/NetworkProfile.java b/api/src/com/cloud/network/NetworkProfile.java index cd25d9f677e..b2707cf5617 100644 --- a/api/src/com/cloud/network/NetworkProfile.java +++ b/api/src/com/cloud/network/NetworkProfile.java @@ -24,6 +24,7 @@ import com.cloud.network.Networks.TrafficType; public class NetworkProfile implements Network { private long id; + private String uuid; private long dataCenterId; private long ownerId; private long domainId; @@ -51,6 +52,7 @@ public class NetworkProfile implements Network { public NetworkProfile(Network network) { this.id = network.getId(); + this.uuid = network.getUuid(); this.broadcastUri = network.getBroadcastUri(); this.dataCenterId = network.getDataCenterId(); this.ownerId = network.getAccountId(); @@ -105,6 +107,12 @@ public class NetworkProfile implements Network { return id; } + + @Override + public String getUuid() { + return uuid; + } + @Override public long getDataCenterId() { return dataCenterId; diff --git a/api/src/com/cloud/network/rules/FirewallRule.java b/api/src/com/cloud/network/rules/FirewallRule.java index 148b4827147..6a967f8cba1 100644 --- a/api/src/com/cloud/network/rules/FirewallRule.java +++ b/api/src/com/cloud/network/rules/FirewallRule.java @@ -52,6 +52,12 @@ public interface FirewallRule extends ControlledEntity { */ long getId(); + /** + * + * @return uuid + */ + String getUuid(); + /** * @return external id. */ diff --git a/api/src/org/apache/cloudstack/api/command/user/firewall/CreateFirewallRuleCmd.java b/api/src/org/apache/cloudstack/api/command/user/firewall/CreateFirewallRuleCmd.java index 89fd14c3f16..7455caec201 100644 --- a/api/src/org/apache/cloudstack/api/command/user/firewall/CreateFirewallRuleCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/firewall/CreateFirewallRuleCmd.java @@ -153,6 +153,13 @@ public class CreateFirewallRuleCmd extends BaseAsyncCreateCmd implements Firewal return null; } + + @Override + public String getUuid() { + // TODO Auto-generated method stub + return null; + } + @Override public Long getSourceIpAddressId() { return ipAddressId; diff --git a/api/src/org/apache/cloudstack/api/command/user/firewall/CreatePortForwardingRuleCmd.java b/api/src/org/apache/cloudstack/api/command/user/firewall/CreatePortForwardingRuleCmd.java index 4389e8e6b68..ca9fbd8552b 100644 --- a/api/src/org/apache/cloudstack/api/command/user/firewall/CreatePortForwardingRuleCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/firewall/CreatePortForwardingRuleCmd.java @@ -208,6 +208,13 @@ public class CreatePortForwardingRuleCmd extends BaseAsyncCreateCmd implements P return null; } + + @Override + public String getUuid() { + // TODO Auto-generated method stub + return null; + } + @Override public Long getSourceIpAddressId() { return ipAddressId; diff --git a/api/src/org/apache/cloudstack/api/command/user/nat/CreateIpForwardingRuleCmd.java b/api/src/org/apache/cloudstack/api/command/user/nat/CreateIpForwardingRuleCmd.java index da435ec12d7..4a962fb1838 100644 --- a/api/src/org/apache/cloudstack/api/command/user/nat/CreateIpForwardingRuleCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/nat/CreateIpForwardingRuleCmd.java @@ -255,6 +255,13 @@ public class CreateIpForwardingRuleCmd extends BaseAsyncCreateCmd implements Sta return null; } + + @Override + public String getUuid() { + // TODO Auto-generated method stub + return null; + } + @Override public String getSyncObjType() { return BaseAsyncCmd.networkSyncObject; diff --git a/api/src/org/apache/cloudstack/api/command/user/network/CreateNetworkACLCmd.java b/api/src/org/apache/cloudstack/api/command/user/network/CreateNetworkACLCmd.java index 04406278f84..7cf508643a4 100644 --- a/api/src/org/apache/cloudstack/api/command/user/network/CreateNetworkACLCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/network/CreateNetworkACLCmd.java @@ -184,6 +184,13 @@ public class CreateNetworkACLCmd extends BaseAsyncCreateCmd implements FirewallR return null; } + + @Override + public String getUuid() { + // TODO Auto-generated method stub + return null; + } + @Override public Long getSourceIpAddressId() { return null; diff --git a/api/src/org/apache/cloudstack/api/response/DiskOfferingResponse.java b/api/src/org/apache/cloudstack/api/response/DiskOfferingResponse.java index 96aef99926b..fad0a850ae5 100644 --- a/api/src/org/apache/cloudstack/api/response/DiskOfferingResponse.java +++ b/api/src/org/apache/cloudstack/api/response/DiskOfferingResponse.java @@ -19,17 +19,16 @@ package org.apache.cloudstack.api.response; import java.util.Date; import org.apache.cloudstack.api.ApiConstants; -import com.cloud.utils.IdentityProxy; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; import org.apache.cloudstack.api.BaseResponse; public class DiskOfferingResponse extends BaseResponse { @SerializedName(ApiConstants.ID) @Param(description="unique ID of the disk offering") - private IdentityProxy id = new IdentityProxy("disk_offering"); + private String id; @SerializedName(ApiConstants.DOMAIN_ID) @Param(description="the domain ID this disk offering belongs to. Ignore this information as it is not currently applicable.") - private IdentityProxy domainId = new IdentityProxy("domain"); + private String domainId; @SerializedName(ApiConstants.DOMAIN) @Param(description="the domain name this disk offering belongs to. Ignore this information as it is not currently applicable.") private String domain; @@ -55,20 +54,20 @@ public class DiskOfferingResponse extends BaseResponse { @SerializedName("storagetype") @Param(description="the storage type for this disk offering") private String storageType; - 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 Long getDomainId() { - return domainId.getValue(); + public String getDomainId() { + return domainId; } - public void setDomainId(Long domainId) { - this.domainId.setValue(domainId); + public void setDomainId(String domainId) { + this.domainId = domainId; } public String getDomain() { diff --git a/api/src/org/apache/cloudstack/api/response/FirewallResponse.java b/api/src/org/apache/cloudstack/api/response/FirewallResponse.java index eb5ba89f566..27992569e78 100644 --- a/api/src/org/apache/cloudstack/api/response/FirewallResponse.java +++ b/api/src/org/apache/cloudstack/api/response/FirewallResponse.java @@ -20,14 +20,13 @@ import java.util.List; import org.apache.cloudstack.api.ApiConstants; import com.cloud.serializer.Param; -import com.cloud.utils.IdentityProxy; import com.google.gson.annotations.SerializedName; import org.apache.cloudstack.api.BaseResponse; @SuppressWarnings("unused") public class FirewallResponse extends BaseResponse { @SerializedName(ApiConstants.ID) @Param(description="the ID of the firewall rule") - private IdentityProxy id = new IdentityProxy("firewall_rules"); + private String id; @SerializedName(ApiConstants.PROTOCOL) @Param(description="the protocol of the firewall rule") private String protocol; @@ -59,8 +58,8 @@ public class FirewallResponse extends BaseResponse { @SerializedName(ApiConstants.TAGS) @Param(description="the list of resource tags associated with the rule", responseObject = ResourceTagResponse.class) private List tags; - public void setId(Long id) { - this.id.setValue(id); + public void setId(String id) { + this.id = id; } public void setProtocol(String protocol) { diff --git a/api/src/org/apache/cloudstack/api/response/FirewallRuleResponse.java b/api/src/org/apache/cloudstack/api/response/FirewallRuleResponse.java index 718fb966f8e..040878abe8f 100644 --- a/api/src/org/apache/cloudstack/api/response/FirewallRuleResponse.java +++ b/api/src/org/apache/cloudstack/api/response/FirewallRuleResponse.java @@ -20,14 +20,13 @@ import java.util.List; import org.apache.cloudstack.api.ApiConstants; import com.cloud.serializer.Param; -import com.cloud.utils.IdentityProxy; import com.google.gson.annotations.SerializedName; import org.apache.cloudstack.api.BaseResponse; @SuppressWarnings("unused") public class FirewallRuleResponse extends BaseResponse { @SerializedName(ApiConstants.ID) @Param(description="the ID of the port forwarding rule") - private IdentityProxy id = new IdentityProxy("firewall_rules"); + private String id; @SerializedName(ApiConstants.PRIVATE_START_PORT) @Param(description = "the starting port of port forwarding rule's private port range") private String privateStartPort; @@ -45,7 +44,7 @@ public class FirewallRuleResponse extends BaseResponse { private String publicEndPort; @SerializedName(ApiConstants.VIRTUAL_MACHINE_ID) @Param(description="the VM ID for the port forwarding rule") - private IdentityProxy virtualMachineId = new IdentityProxy("vm_instance"); + private String virtualMachineId; @SerializedName("virtualmachinename") @Param(description="the VM name for the port forwarding rule") private String virtualMachineName; @@ -54,7 +53,7 @@ public class FirewallRuleResponse extends BaseResponse { private String virtualMachineDisplayName; @SerializedName(ApiConstants.IP_ADDRESS_ID) @Param(description="the public ip address id for the port forwarding rule") - private IdentityProxy publicIpAddressId = new IdentityProxy("user_ip_address"); + private String publicIpAddressId; @SerializedName(ApiConstants.IP_ADDRESS) @Param(description="the public ip address for the port forwarding rule") private String publicIpAddress; @@ -68,12 +67,12 @@ public class FirewallRuleResponse extends BaseResponse { @SerializedName(ApiConstants.TAGS) @Param(description="the list of resource tags associated with the rule", responseObject = ResourceTagResponse.class) private List tags; - 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 String getPrivateStartPort() { @@ -116,12 +115,12 @@ public class FirewallRuleResponse extends BaseResponse { this.publicEndPort = publicPort; } - public Long getVirtualMachineId() { - return virtualMachineId.getValue(); + public String getVirtualMachineId() { + return virtualMachineId; } - public void setVirtualMachineId(Long virtualMachineId) { - this.virtualMachineId.setValue(virtualMachineId); + public void setVirtualMachineId(String virtualMachineId) { + this.virtualMachineId = virtualMachineId; } public String getVirtualMachineName() { @@ -156,12 +155,12 @@ public class FirewallRuleResponse extends BaseResponse { this.state = state; } - public Long getPublicIpAddressId() { - return publicIpAddressId.getValue(); + public String getPublicIpAddressId() { + return publicIpAddressId; } - public void setPublicIpAddressId(Long publicIpAddressId) { - this.publicIpAddressId.setValue(publicIpAddressId); + public void setPublicIpAddressId(String publicIpAddressId) { + this.publicIpAddressId = publicIpAddressId; } public String getCidrList() { diff --git a/api/src/org/apache/cloudstack/api/response/HypervisorCapabilitiesResponse.java b/api/src/org/apache/cloudstack/api/response/HypervisorCapabilitiesResponse.java index a4abb93fe9e..6e908732844 100644 --- a/api/src/org/apache/cloudstack/api/response/HypervisorCapabilitiesResponse.java +++ b/api/src/org/apache/cloudstack/api/response/HypervisorCapabilitiesResponse.java @@ -17,7 +17,6 @@ package org.apache.cloudstack.api.response; import org.apache.cloudstack.api.ApiConstants; -import com.cloud.utils.IdentityProxy; import com.cloud.hypervisor.Hypervisor.HypervisorType; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; @@ -25,7 +24,7 @@ import org.apache.cloudstack.api.BaseResponse; public class HypervisorCapabilitiesResponse extends BaseResponse { @SerializedName(ApiConstants.ID) @Param(description="the ID of the hypervisor capabilities row") - private IdentityProxy id = new IdentityProxy("hypervisor_capabilities"); + private String id; @SerializedName(ApiConstants.HYPERVISOR_VERSION) @Param(description="the hypervisor version") private String hypervisorVersion; @@ -39,17 +38,13 @@ public class HypervisorCapabilitiesResponse extends BaseResponse { @SerializedName(ApiConstants.SECURITY_GROUP_EANBLED) @Param(description="true if security group is supported") private boolean isSecurityGroupEnabled; - @Override - public Long getObjectId() { - return getId(); + + public String getId() { + return id; } - public Long getId() { - return id.getValue(); - } - - public void setId(Long id) { - this.id.setValue(id); + public void setId(String id) { + this.id = id; } diff --git a/api/src/org/apache/cloudstack/api/response/IPAddressResponse.java b/api/src/org/apache/cloudstack/api/response/IPAddressResponse.java index 44dcc694301..d614e34db1a 100644 --- a/api/src/org/apache/cloudstack/api/response/IPAddressResponse.java +++ b/api/src/org/apache/cloudstack/api/response/IPAddressResponse.java @@ -21,14 +21,13 @@ import java.util.List; import org.apache.cloudstack.api.ApiConstants; import com.cloud.serializer.Param; -import com.cloud.utils.IdentityProxy; import com.google.gson.annotations.SerializedName; import org.apache.cloudstack.api.BaseResponse; @SuppressWarnings("unused") public class IPAddressResponse extends BaseResponse implements ControlledEntityResponse { @SerializedName(ApiConstants.ID) @Param(description="public IP address id") - private IdentityProxy id = new IdentityProxy("user_ip_address"); + private String id; @SerializedName(ApiConstants.IP_ADDRESS) @Param(description="public IP address") private String ipAddress; @@ -37,7 +36,7 @@ public class IPAddressResponse extends BaseResponse implements ControlledEntityR private Date allocated; @SerializedName(ApiConstants.ZONE_ID) @Param(description="the ID of the zone the public IP address belongs to") - private IdentityProxy zoneId = new IdentityProxy("data_center"); + private String zoneId; @SerializedName(ApiConstants.ZONE_NAME) @Param(description="the name of the zone the public IP address belongs to") private String zoneName; @@ -65,7 +64,7 @@ public class IPAddressResponse extends BaseResponse implements ControlledEntityR @SerializedName(ApiConstants.VLAN_ID) @Param(description="the ID of the VLAN associated with the IP address." + " This parameter is visible to ROOT admins only") - private IdentityProxy vlanId = new IdentityProxy("vlan"); + private String vlanId; @SerializedName("vlanname") @Param(description="the VLAN associated with the IP address") private String vlanName; @@ -77,7 +76,7 @@ public class IPAddressResponse extends BaseResponse implements ControlledEntityR private Boolean isSystem; @SerializedName(ApiConstants.VIRTUAL_MACHINE_ID) @Param(description="virutal machine id the ip address is assigned to (not null only for static nat Ip)") - private IdentityProxy virtualMachineId = new IdentityProxy("vm_instance"); + private String virtualMachineId; @SerializedName("virtualmachinename") @Param(description="virutal machine name the ip address is assigned to (not null only for static nat Ip)") private String virtualMachineName; @@ -86,25 +85,25 @@ public class IPAddressResponse extends BaseResponse implements ControlledEntityR private String virtualMachineDisplayName; @SerializedName(ApiConstants.ASSOCIATED_NETWORK_ID) @Param(description="the ID of the Network associated with the IP address") - private IdentityProxy associatedNetworkId = new IdentityProxy("networks"); + private String associatedNetworkId; @SerializedName(ApiConstants.ASSOCIATED_NETWORK_NAME) @Param(description="the name of the Network associated with the IP address") private String associatedNetworkName; @SerializedName(ApiConstants.NETWORK_ID) @Param(description="the ID of the Network where ip belongs to") - private IdentityProxy networkId = new IdentityProxy("networks"); + private String networkId; @SerializedName(ApiConstants.STATE) @Param(description="State of the ip address. Can be: Allocatin, Allocated and Releasing") private String state; @SerializedName(ApiConstants.PHYSICAL_NETWORK_ID) @Param(description="the physical network this belongs to") - private IdentityProxy physicalNetworkId = new IdentityProxy("physical_network"); + private String physicalNetworkId; @SerializedName(ApiConstants.PURPOSE) @Param(description="purpose of the IP address. In Acton this value is not null for Ips with isSystem=true, and can have either StaticNat or LB value") private String purpose; @SerializedName(ApiConstants.VPC_ID) @Param(description="VPC the ip belongs to") - private IdentityProxy vpcId = new IdentityProxy("vpc"); + private String vpcId; @SerializedName(ApiConstants.TAGS) @Param(description="the list of resource tags associated with ip address", responseObject = ResourceTagResponse.class) private List tags; @@ -122,8 +121,8 @@ public class IPAddressResponse extends BaseResponse implements ControlledEntityR this.allocated = allocated; } - public void setZoneId(Long zoneId) { - this.zoneId.setValue(zoneId); + public void setZoneId(String zoneId) { + this.zoneId = zoneId; } public void setZoneName(String zoneName) { @@ -153,8 +152,8 @@ public class IPAddressResponse extends BaseResponse implements ControlledEntityR this.forVirtualNetwork = forVirtualNetwork; } - public void setVlanId(Long vlanId) { - this.vlanId.setValue(vlanId); + public void setVlanId(String vlanId) { + this.vlanId = vlanId; } public void setVlanName(String vlanName) { @@ -165,16 +164,16 @@ public class IPAddressResponse extends BaseResponse implements ControlledEntityR this.staticNat = staticNat; } - public void setAssociatedNetworkId(Long networkId) { - this.associatedNetworkId.setValue(networkId); + public void setAssociatedNetworkId(String networkId) { + this.associatedNetworkId = networkId; } - public void setNetworkId(Long networkId) { - this.networkId.setValue(networkId); + public void setNetworkId(String networkId) { + this.networkId = networkId; } - public void setVirtualMachineId(Long virtualMachineId) { - this.virtualMachineId.setValue(virtualMachineId); + public void setVirtualMachineId(String virtualMachineId) { + this.virtualMachineId = virtualMachineId; } public void setVirtualMachineName(String virtualMachineName) { @@ -185,22 +184,18 @@ public class IPAddressResponse extends BaseResponse implements ControlledEntityR this.virtualMachineDisplayName = virtualMachineDisplayName; } - 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 setState(String state) { this.state = state; } - @Override - public Long getObjectId() { - return getId(); - } @Override public void setProjectId(String projectId) { @@ -212,8 +207,8 @@ public class IPAddressResponse extends BaseResponse implements ControlledEntityR this.projectName = projectName; } - public void setPhysicalNetworkId(long physicalNetworkId) { - this.physicalNetworkId.setValue(physicalNetworkId); + public void setPhysicalNetworkId(String physicalNetworkId) { + this.physicalNetworkId = physicalNetworkId; } public void setIsSystem(Boolean isSystem) { @@ -224,8 +219,8 @@ public class IPAddressResponse extends BaseResponse implements ControlledEntityR this.purpose = purpose; } - public void setVpcId(Long vpcId) { - this.vpcId.setValue(vpcId); + public void setVpcId(String vpcId) { + this.vpcId = vpcId; } public void setTags(List tags) { diff --git a/api/src/org/apache/cloudstack/api/response/ServiceOfferingResponse.java b/api/src/org/apache/cloudstack/api/response/ServiceOfferingResponse.java index 788d8e8df2d..32cd9961c46 100644 --- a/api/src/org/apache/cloudstack/api/response/ServiceOfferingResponse.java +++ b/api/src/org/apache/cloudstack/api/response/ServiceOfferingResponse.java @@ -19,14 +19,13 @@ package org.apache.cloudstack.api.response; import java.util.Date; import org.apache.cloudstack.api.ApiConstants; -import com.cloud.utils.IdentityProxy; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; import org.apache.cloudstack.api.BaseResponse; public class ServiceOfferingResponse extends BaseResponse { @SerializedName("id") @Param(description="the id of the service offering") - private IdentityProxy id = new IdentityProxy("disk_offering"); + private String id; @SerializedName("name") @Param(description="the name of the service offering") private String name; @@ -59,7 +58,7 @@ public class ServiceOfferingResponse extends BaseResponse { private String tags; @SerializedName("domainid") @Param(description="the domain id of the service offering") - private IdentityProxy domainId = new IdentityProxy("domain"); + private String domainId; @SerializedName(ApiConstants.DOMAIN) @Param(description="Domain name for the offering") private String domain; @@ -80,12 +79,12 @@ public class ServiceOfferingResponse extends BaseResponse { private Integer networkRate; - 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 String getName() { @@ -195,12 +194,12 @@ public class ServiceOfferingResponse extends BaseResponse { this.tags = tags; } - public Long getDomainId() { - return domainId.getValue(); + public String getDomainId() { + return domainId; } - public void setDomainId(Long domainId) { - this.domainId.setValue(domainId); + public void setDomainId(String domainId) { + this.domainId = domainId; } public String getDomain() { diff --git a/server/src/com/cloud/api/ApiDBUtils.java b/server/src/com/cloud/api/ApiDBUtils.java index 7c5f4b5e311..f2b60ff7c6b 100755 --- a/server/src/com/cloud/api/ApiDBUtils.java +++ b/server/src/com/cloud/api/ApiDBUtils.java @@ -137,6 +137,7 @@ import com.cloud.network.security.dao.SecurityGroupDao; import com.cloud.network.vpc.StaticRouteVO; import com.cloud.network.vpc.VpcGatewayVO; import com.cloud.network.vpc.VpcManager; +import com.cloud.network.vpc.VpcVO; import com.cloud.network.vpc.dao.StaticRouteDao; import com.cloud.network.vpc.dao.VpcGatewayDao; import com.cloud.offering.NetworkOffering; @@ -218,6 +219,7 @@ import com.cloud.vm.dao.DomainRouterDao; import com.cloud.vm.dao.UserVmDao; import com.cloud.vm.dao.UserVmDetailsDao; import com.cloud.vm.dao.VMInstanceDao; +import com.cloud.network.vpc.dao.VpcDao; public class ApiDBUtils { private static ManagementServer _ms; @@ -302,6 +304,7 @@ public class ApiDBUtils { private static FirewallRulesDao _firewallRuleDao; private static StaticRouteDao _staticRouteDao; private static VpcGatewayDao _vpcGatewayDao; + private static VpcDao _vpcDao; static { _ms = (ManagementServer) ComponentLocator.getComponent(ManagementServer.Name); @@ -385,6 +388,7 @@ public class ApiDBUtils { _vpcGatewayDao = locator.getDao(VpcGatewayDao.class); _asVmProfileDao = locator.getDao(AutoScaleVmProfileDao.class); _asVmGroupDao = locator.getDao(AutoScaleVmGroupDao.class); + _vpcDao = locator.getDao(VpcDao.class); // Note: stats collector should already have been initialized by this time, otherwise a null instance is returned _statsCollector = StatsCollector.getInstance(); @@ -1020,6 +1024,10 @@ public class ApiDBUtils { public static GuestOSCategoryVO findGuestOsCategoryById(long catId){ return _guestOSCategoryDao.findById(catId); } + + public static VpcVO findVpcById(long vpcId){ + return _vpcDao.findById(vpcId); + } /////////////////////////////////////////////////////////////////////// // Newly Added Utility Methods for List API refactoring // /////////////////////////////////////////////////////////////////////// diff --git a/server/src/com/cloud/api/ApiResponseHelper.java b/server/src/com/cloud/api/ApiResponseHelper.java index e911e56ea8d..4b1b3ea2814 100755 --- a/server/src/com/cloud/api/ApiResponseHelper.java +++ b/server/src/com/cloud/api/ApiResponseHelper.java @@ -156,6 +156,7 @@ import com.cloud.network.Network.Capability; import com.cloud.network.Network.Provider; import com.cloud.network.Network.Service; import com.cloud.network.NetworkProfile; +import com.cloud.network.NetworkVO; import com.cloud.network.Networks.TrafficType; import com.cloud.network.PhysicalNetwork; import com.cloud.network.PhysicalNetworkServiceProvider; @@ -196,6 +197,7 @@ import com.cloud.network.vpc.StaticRouteVO; import com.cloud.network.vpc.Vpc; import com.cloud.network.vpc.VpcGatewayVO; import com.cloud.network.vpc.VpcOffering; +import com.cloud.network.vpc.VpcVO; import com.cloud.offering.DiskOffering; import com.cloud.offering.NetworkOffering; import com.cloud.offering.ServiceOffering; @@ -451,14 +453,17 @@ public class ApiResponseHelper implements ResponseGenerator { @Override public DiskOfferingResponse createDiskOfferingResponse(DiskOffering offering) { DiskOfferingResponse diskOfferingResponse = new DiskOfferingResponse(); - diskOfferingResponse.setId(offering.getId()); + diskOfferingResponse.setId(offering.getUuid()); diskOfferingResponse.setName(offering.getName()); diskOfferingResponse.setDisplayText(offering.getDisplayText()); diskOfferingResponse.setCreated(offering.getCreated()); diskOfferingResponse.setDiskSize(offering.getDiskSize() / (1024 * 1024 * 1024)); if (offering.getDomainId() != null) { - diskOfferingResponse.setDomain(ApiDBUtils.findDomainById(offering.getDomainId()).getName()); - diskOfferingResponse.setDomainId(offering.getDomainId()); + Domain domain = ApiDBUtils.findDomainById(offering.getDomainId()); + if (domain != null) { + diskOfferingResponse.setDomain(domain.getName()); + diskOfferingResponse.setDomainId(domain.getUuid()); + } } diskOfferingResponse.setTags(offering.getTags()); diskOfferingResponse.setCustomized(offering.isCustomized()); @@ -507,7 +512,7 @@ public class ApiResponseHelper implements ResponseGenerator { @Override public ServiceOfferingResponse createServiceOfferingResponse(ServiceOffering offering) { ServiceOfferingResponse offeringResponse = new ServiceOfferingResponse(); - offeringResponse.setId(offering.getId()); + offeringResponse.setId(offering.getUuid()); offeringResponse.setName(offering.getName()); offeringResponse.setIsSystemOffering(offering.getSystemUse()); offeringResponse.setDefaultUse(offering.getDefaultUse()); @@ -522,8 +527,11 @@ public class ApiResponseHelper implements ResponseGenerator { offeringResponse.setLimitCpuUse(offering.getLimitCpuUse()); offeringResponse.setTags(offering.getTags()); if (offering.getDomainId() != null) { - offeringResponse.setDomain(ApiDBUtils.findDomainById(offering.getDomainId()).getName()); - offeringResponse.setDomainId(offering.getDomainId()); + Domain domain = ApiDBUtils.findDomainById(offering.getDomainId()); + if (domain != null) { + offeringResponse.setDomain(domain.getName()); + offeringResponse.setDomainId(domain.getUuid()); + } } offeringResponse.setNetworkRate(offering.getRateMbps()); offeringResponse.setHostTag(offering.getHostTag()); @@ -788,13 +796,16 @@ public class ApiResponseHelper implements ResponseGenerator { long zoneId = ipAddr.getDataCenterId(); IPAddressResponse ipResponse = new IPAddressResponse(); - ipResponse.setId(ipAddr.getId()); + ipResponse.setId(ipAddr.getUuid()); ipResponse.setIpAddress(ipAddr.getAddress().toString()); if (ipAddr.getAllocatedTime() != null) { ipResponse.setAllocated(ipAddr.getAllocatedTime()); } - ipResponse.setZoneId(zoneId); - ipResponse.setZoneName(ApiDBUtils.findZoneById(ipAddr.getDataCenterId()).getName()); + DataCenterVO zone = ApiDBUtils.findZoneById(ipAddr.getDataCenterId()); + if (zone != null) { + ipResponse.setZoneId(zone.getUuid()); + ipResponse.setZoneName(zone.getName()); + } ipResponse.setSourceNat(ipAddr.isSourceNat()); ipResponse.setIsSystem(ipAddr.getSystem()); @@ -808,24 +819,34 @@ public class ApiResponseHelper implements ResponseGenerator { if (ipAddr.getAssociatedWithVmId() != null) { UserVm vm = ApiDBUtils.findUserVmById(ipAddr.getAssociatedWithVmId()); - ipResponse.setVirtualMachineId(vm.getId()); - ipResponse.setVirtualMachineName(vm.getHostName()); - if (vm.getDisplayName() != null) { - ipResponse.setVirtualMachineDisplayName(vm.getDisplayName()); - } else { - ipResponse.setVirtualMachineDisplayName(vm.getHostName()); + if (vm != null) { + ipResponse.setVirtualMachineId(vm.getUuid()); + ipResponse.setVirtualMachineName(vm.getHostName()); + if (vm.getDisplayName() != null) { + ipResponse.setVirtualMachineDisplayName(vm.getDisplayName()); + } else { + ipResponse.setVirtualMachineDisplayName(vm.getHostName()); + } } } if (ipAddr.getAssociatedWithNetworkId() != null) { Network ntwk = ApiDBUtils.findNetworkById(ipAddr.getAssociatedWithNetworkId()); - ipResponse.setAssociatedNetworkId(ipAddr.getAssociatedWithNetworkId()); - ipResponse.setAssociatedNetworkName(ntwk.getName()); + if (ntwk != null) { + ipResponse.setAssociatedNetworkId(ntwk.getUuid()); + ipResponse.setAssociatedNetworkName(ntwk.getName()); + } } - ipResponse.setVpcId(ipAddr.getVpcId()); + if (ipAddr.getVpcId() != null) { + VpcVO vpc = ApiDBUtils.findVpcById(ipAddr.getVpcId()); + if (vpc != null) { + ipResponse.setVpcId(vpc.getUuid()); + } + } - // Network id the ip is associated with (if associated networkId is null, try to get this information from vlan) + // Network id the ip is associated with (if associated networkId is + // null, try to get this information from vlan) Long vlanNetworkId = ApiDBUtils.getVlanNetworkId(ipAddr.getVlanId()); // Network id the ip belongs to @@ -836,15 +857,29 @@ public class ApiResponseHelper implements ResponseGenerator { networkId = ApiDBUtils.getPublicNetworkIdByZone(zoneId); } - ipResponse.setNetworkId(networkId); + if (networkId != null) { + NetworkVO nw = ApiDBUtils.findNetworkById(networkId); + if (nw != null) { + ipResponse.setNetworkId(nw.getUuid()); + } + } ipResponse.setState(ipAddr.getState().toString()); - ipResponse.setPhysicalNetworkId(ipAddr.getPhysicalNetworkId()); + + if (ipAddr.getPhysicalNetworkId() != null) { + PhysicalNetworkVO pnw = ApiDBUtils.findPhysicalNetworkById(ipAddr.getPhysicalNetworkId()); + if (pnw != null) { + ipResponse.setPhysicalNetworkId(pnw.getUuid()); + } + } // show this info to admin only Account account = UserContext.current().getCaller(); if (account.getType() == Account.ACCOUNT_TYPE_ADMIN) { - ipResponse.setVlanId(ipAddr.getVlanId()); - ipResponse.setVlanName(ApiDBUtils.findVlanById(ipAddr.getVlanId()).getVlanTag()); + VlanVO vl = ApiDBUtils.findVlanById(ipAddr.getVlanId()); + if (vl != null) { + ipResponse.setVlanId(vl.getUuid()); + ipResponse.setVlanName(vl.getVlanTag()); + } } if (ipAddr.getSystem()) { @@ -1297,7 +1332,7 @@ public class ApiResponseHelper implements ResponseGenerator { @Override public FirewallRuleResponse createPortForwardingRuleResponse(PortForwardingRule fwRule) { FirewallRuleResponse response = new FirewallRuleResponse(); - response.setId(fwRule.getId()); + response.setId(fwRule.getUuid()); response.setPrivateStartPort(Integer.toString(fwRule.getDestinationPortStart())); response.setPrivateEndPort(Integer.toString(fwRule.getDestinationPortEnd())); response.setProtocol(fwRule.getProtocol()); @@ -1307,13 +1342,13 @@ public class ApiResponseHelper implements ResponseGenerator { response.setCidrList(StringUtils.join(cidrs, ",")); IpAddress ip = ApiDBUtils.findIpAddressById(fwRule.getSourceIpAddressId()); - response.setPublicIpAddressId(ip.getId()); + response.setPublicIpAddressId(ip.getUuid()); response.setPublicIpAddress(ip.getAddress().addr()); if (ip != null && fwRule.getDestinationIpAddress() != null) { UserVm vm = ApiDBUtils.findUserVmById(fwRule.getVirtualMachineId()); if (vm != null) { - response.setVirtualMachineId(vm.getId()); + response.setVirtualMachineId(vm.getUuid()); response.setVirtualMachineName(vm.getHostName()); if (vm.getDisplayName() != null) { @@ -2758,7 +2793,7 @@ public class ApiResponseHelper implements ResponseGenerator { public FirewallResponse createFirewallResponse(FirewallRule fwRule) { FirewallResponse response = new FirewallResponse(); - response.setId(fwRule.getId()); + response.setId(fwRule.getUuid()); response.setProtocol(fwRule.getProtocol()); if (fwRule.getSourcePortStart() != null) { response.setStartPort(Integer.toString(fwRule.getSourcePortStart())); @@ -2844,7 +2879,7 @@ public class ApiResponseHelper implements ResponseGenerator { @Override public HypervisorCapabilitiesResponse createHypervisorCapabilitiesResponse(HypervisorCapabilities hpvCapabilities) { HypervisorCapabilitiesResponse hpvCapabilitiesResponse = new HypervisorCapabilitiesResponse(); - hpvCapabilitiesResponse.setId(hpvCapabilities.getId()); + hpvCapabilitiesResponse.setId(hpvCapabilities.getUuid()); hpvCapabilitiesResponse.setHypervisor(hpvCapabilities.getHypervisorType()); hpvCapabilitiesResponse.setHypervisorVersion(hpvCapabilities.getHypervisorVersion()); hpvCapabilitiesResponse.setIsSecurityGroupEnabled(hpvCapabilities.isSecurityGroupEnabled()); diff --git a/server/src/com/cloud/network/IPAddressVO.java b/server/src/com/cloud/network/IPAddressVO.java index f9c20fb2088..82c38ba6d86 100644 --- a/server/src/com/cloud/network/IPAddressVO.java +++ b/server/src/com/cloud/network/IPAddressVO.java @@ -5,7 +5,7 @@ // 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, @@ -40,12 +40,12 @@ import com.cloud.utils.net.Ip; */ @Entity @Table(name=("user_ip_address")) -public class IPAddressVO implements IpAddress, Identity { +public class IPAddressVO implements IpAddress { @Id @GeneratedValue(strategy=GenerationType.IDENTITY) @Column(name="id") long id; - + @Column(name="account_id") private Long allocatedToAccountId = null; @@ -59,59 +59,59 @@ public class IPAddressVO implements IpAddress, Identity { @Column(name="data_center_id", updatable=false) private long dataCenterId; - + @Column(name="source_nat") private boolean sourceNat; @Column(name="allocated") @Temporal(value=TemporalType.TIMESTAMP) private Date allocatedTime; - + @Column(name="vlan_db_id") private long vlanId; @Column(name="one_to_one_nat") private boolean oneToOneNat; - + @Column(name="vm_id") private Long associatedWithVmId; - + @Column(name="state") private State state; - + @Column(name="mac_address") private long macAddress; - + @Column(name="source_network_id") private Long sourceNetworkId; - + @Column(name="network_id") private Long associatedWithNetworkId; - + @Column(name="uuid") private String uuid; - + @Column(name="physical_network_id") private Long physicalNetworkId; - + @Column(name="is_system") private boolean system; - + @Column(name="account_id") @Transient private Long accountId = null; - + @Transient @Column(name="domain_id") private Long domainId = null; - + @Column(name="vpc_id") private Long vpcId; protected IPAddressVO() { this.uuid = UUID.randomUUID().toString(); } - + @Override public boolean readyToUse() { return state == State.Allocated; @@ -129,36 +129,36 @@ public class IPAddressVO implements IpAddress, Identity { this.macAddress = macAddress; this.uuid = UUID.randomUUID().toString(); } - + public long getMacAddress() { return macAddress; } - + @Override public long getDataCenterId() { - return dataCenterId; + return dataCenterId; } @Override public Ip getAddress() { return address; } - + @Override public Long getAllocatedToAccountId() { return allocatedToAccountId; } - + @Override public Long getAllocatedInDomainId() { return allocatedInDomainId; } - + @Override public Long getAssociatedWithNetworkId() { return associatedWithNetworkId; } - + public void setAssociatedWithNetworkId(Long networkId) { this.associatedWithNetworkId = networkId; } @@ -171,7 +171,7 @@ public class IPAddressVO implements IpAddress, Identity { public void setAssociatedWithVmId(Long associatedWithVmId) { this.associatedWithVmId = associatedWithVmId; } - + @Override public Date getAllocatedTime() { return allocatedTime; @@ -188,7 +188,7 @@ public class IPAddressVO implements IpAddress, Identity { public void setSourceNat(boolean sourceNat) { this.sourceNat = sourceNat; } - + @Override public boolean isSourceNat() { return sourceNat; @@ -197,12 +197,12 @@ public class IPAddressVO implements IpAddress, Identity { public void setAllocatedTime(Date allocated) { this.allocatedTime = allocated; } - + @Override public long getVlanId() { return this.vlanId; } - + public void setVlanId(long vlanDbId) { this.vlanId = vlanDbId; } @@ -215,31 +215,31 @@ public class IPAddressVO implements IpAddress, Identity { public void setOneToOneNat(boolean oneToOneNat) { this.oneToOneNat = oneToOneNat; } - + @Override public long getDomainId() { return allocatedInDomainId == null ? -1 : allocatedInDomainId; } - + @Override public long getAccountId() { return allocatedToAccountId == null ? -1 : allocatedToAccountId; } - + @Override public State getState() { return state; } - + public void setState(State state) { this.state = state; } - + @Override public String toString() { return new StringBuilder("Ip[").append(address).append("-").append(dataCenterId).append("]").toString(); } - + @Override public long getId() { return id; @@ -252,12 +252,12 @@ public class IPAddressVO implements IpAddress, Identity { public void setSourceNetworkId(Long sourceNetworkId) { this.sourceNetworkId = sourceNetworkId; } - + @Override public String getUuid() { return this.uuid; } - + public void setUuid(String uuid) { this.uuid = uuid; } @@ -269,7 +269,7 @@ public class IPAddressVO implements IpAddress, Identity { public void setPhysicalNetworkId(Long physicalNetworkId) { this.physicalNetworkId = physicalNetworkId; } - + @Override public boolean getSystem() { return system; diff --git a/server/src/com/cloud/network/NetworkVO.java b/server/src/com/cloud/network/NetworkVO.java index 8118e40ec16..22b4d9bc065 100644 --- a/server/src/com/cloud/network/NetworkVO.java +++ b/server/src/com/cloud/network/NetworkVO.java @@ -5,7 +5,7 @@ // 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, @@ -44,7 +44,7 @@ import com.cloud.utils.net.NetUtils; */ @Entity @Table(name="networks") -public class NetworkVO implements Network, Identity { +public class NetworkVO implements Network { @Id @TableGenerator(name="networks_sq", table="sequence", pkColumnName="name", valueColumnName="value", pkColumnValue="networks_seq", allocationSize=1) @Column(name="id") @@ -79,13 +79,13 @@ public class NetworkVO implements Network, Identity { @Column(name="network_offering_id") long networkOfferingId; - + @Column(name="vpc_id") Long vpcId; @Column(name="physical_network_id") Long physicalNetworkId; - + @Column(name="data_center_id") long dataCenterId; @@ -132,24 +132,24 @@ public class NetworkVO implements Network, Identity { @Column(name="reservation_id") String reservationId; - + @Column(name="uuid") String uuid; - + @Column(name="guest_type") @Enumerated(value=EnumType.STRING) Network.GuestType guestType; - + @Column(name="acl_type") @Enumerated(value=EnumType.STRING) ControlledEntity.ACLType aclType; @Column(name="restart_required") boolean restartRequired = false; - + @Column(name="specify_ip_ranges") boolean specifyIpRanges = false; - + public NetworkVO() { this.uuid = UUID.randomUUID().toString(); } @@ -181,8 +181,8 @@ public class NetworkVO implements Network, Identity { this.uuid = UUID.randomUUID().toString(); } - public NetworkVO(long id, Network that, long offeringId, String guruName, long domainId, long accountId, - long related, String name, String displayText, String networkDomain, GuestType guestType, long dcId, + public NetworkVO(long id, Network that, long offeringId, String guruName, long domainId, long accountId, + long related, String name, String displayText, String networkDomain, GuestType guestType, long dcId, Long physicalNetworkId, ACLType aclType, boolean specifyIpRanges, Long vpcId) { this(id, that.getTrafficType(), that.getMode(), that.getBroadcastDomainType(), offeringId, domainId, accountId, related, name, displayText, networkDomain, guestType, dcId, physicalNetworkId, aclType, specifyIpRanges, vpcId); @@ -215,8 +215,8 @@ public class NetworkVO implements Network, Identity { * @param vpcId TODO * @param dataCenterId */ - public NetworkVO(long id, TrafficType trafficType, Mode mode, BroadcastDomainType broadcastDomainType, - long networkOfferingId, long domainId, long accountId, long related, String name, String displayText, + public NetworkVO(long id, TrafficType trafficType, Mode mode, BroadcastDomainType broadcastDomainType, + long networkOfferingId, long domainId, long accountId, long related, String name, String displayText, String networkDomain, GuestType guestType, long dcId, Long physicalNetworkId, ACLType aclType, boolean specifyIpRanges, Long vpcId) { this(trafficType, mode, broadcastDomainType, networkOfferingId, State.Allocated, dcId, physicalNetworkId); this.domainId = domainId; @@ -368,7 +368,7 @@ public class NetworkVO implements Network, Identity { public Long getPhysicalNetworkId() { return physicalNetworkId; } - + @Override public void setPhysicalNetworkId(Long physicalNetworkId) { this.physicalNetworkId = physicalNetworkId; @@ -428,7 +428,7 @@ public class NetworkVO implements Network, Identity { public void setCreated(Date created) { this.created = created; } - + @Override public Network.GuestType getGuestType() { return guestType; @@ -465,7 +465,7 @@ public class NetworkVO implements Network, Identity { public String getUuid() { return this.uuid; } - + public void setUuid(String uuid) { this.uuid = uuid; } @@ -482,7 +482,7 @@ public class NetworkVO implements Network, Identity { public boolean isRestartRequired() { return restartRequired; } - + @Override public boolean getSpecifyIpRanges() { return specifyIpRanges; diff --git a/server/src/com/cloud/network/addr/PublicIp.java b/server/src/com/cloud/network/addr/PublicIp.java index e1f77be6ca7..8ad716fd631 100644 --- a/server/src/com/cloud/network/addr/PublicIp.java +++ b/server/src/com/cloud/network/addr/PublicIp.java @@ -5,7 +5,7 @@ // 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, @@ -36,52 +36,52 @@ public class PublicIp implements PublicIpAddress { _vlan = vlan; this.macAddress = NetUtils.long2Mac(macAddress); } - + @Override public Ip getAddress() { return _addr.getAddress(); } - + @Override public String getNetmask() { return _vlan.getVlanNetmask(); } - + @Override public String getGateway() { return _vlan.getVlanGateway(); } - + @Override public String getVlanTag() { return _vlan.getVlanTag(); } - + @Override public long getDataCenterId() { return _addr.getDataCenterId(); } - + @Override public boolean readyToUse() { return _addr.getAllocatedTime() != null && _addr.getState() == State.Allocated; } - + @Override public boolean isSourceNat() { return _addr.isSourceNat(); } - + @Override public boolean isOneToOneNat() { return _addr.isOneToOneNat(); } - + @Override public Long getAssociatedWithVmId() { return _addr.getAssociatedWithVmId(); } - + @Override public Date getAllocatedTime() { return _addr.getAllocatedTime(); @@ -106,25 +106,25 @@ public class PublicIp implements PublicIpAddress { public State getState() { return _addr.getState(); } - + public IPAddressVO ip() { return _addr; } - + public VlanVO vlan() { return _vlan; } - + @Override public String getMacAddress() { return macAddress; } - + @Override public Long getAssociatedWithNetworkId() { return _addr.getAssociatedWithNetworkId(); } - + @Override public Long getNetworkId() { return _vlan.getNetworkId(); @@ -149,12 +149,18 @@ public class PublicIp implements PublicIpAddress { public VlanType getVlanType() { return _vlan.getVlanType(); } - + @Override public long getId() { return _addr.getId(); } - + + + @Override + public String getUuid() { + return _addr.getUuid(); + } + @Override public String toString() { return _addr.getAddress().toString(); @@ -179,7 +185,7 @@ public class PublicIp implements PublicIpAddress { public Long getAllocatedInDomainId() { return _addr.getAllocatedInDomainId(); } - + @Override public boolean getSystem() { return _addr.getSystem(); diff --git a/server/src/com/cloud/network/rules/FirewallRuleVO.java b/server/src/com/cloud/network/rules/FirewallRuleVO.java index 464ff426d69..d9f558abe0f 100644 --- a/server/src/com/cloud/network/rules/FirewallRuleVO.java +++ b/server/src/com/cloud/network/rules/FirewallRuleVO.java @@ -5,7 +5,7 @@ // 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, @@ -44,69 +44,69 @@ import com.cloud.utils.net.NetUtils; @Table(name="firewall_rules") @Inheritance(strategy=InheritanceType.JOINED) @DiscriminatorColumn(name="purpose", discriminatorType=DiscriminatorType.STRING, length=32) -public class FirewallRuleVO implements Identity, FirewallRule { +public class FirewallRuleVO implements FirewallRule { protected final FirewallRulesCidrsDaoImpl _firewallRulesCidrsDao = ComponentLocator.inject(FirewallRulesCidrsDaoImpl.class); - + @Id @GeneratedValue(strategy=GenerationType.IDENTITY) @Column(name="id") long id; - + @GeneratedValue(strategy=GenerationType.AUTO) @Column(name=GenericDao.XID_COLUMN) String xId; @Column(name="domain_id", updatable=false) long domainId; - + @Column(name="account_id", updatable=false) long accountId; - + @Column(name="ip_address_id", updatable=false) Long sourceIpAddressId; - + @Column(name="start_port", updatable=false) Integer sourcePortStart; @Column(name="end_port", updatable=false) Integer sourcePortEnd; - + @Column(name="protocol", updatable=false) String protocol = NetUtils.TCP_PROTO; - + @Enumerated(value=EnumType.STRING) @Column(name="purpose") Purpose purpose; - + @Enumerated(value=EnumType.STRING) @Column(name="state") State state; - + @Column(name=GenericDao.CREATED_COLUMN) Date created; - + @Column(name="network_id") long networkId; - + @Column(name="icmp_code") Integer icmpCode; - + @Column(name="icmp_type") Integer icmpType; - + @Column(name="related") Long related; - + @Column(name="type") @Enumerated(value=EnumType.STRING) FirewallRuleType type; - + @Column(name="traffic_type") @Enumerated(value=EnumType.STRING) TrafficType trafficType; - - + + // This is a delayed load value. If the value is null, // then this field has not been loaded yet. // Call firewallrules dao to load it. @@ -124,7 +124,7 @@ public class FirewallRuleVO implements Identity, FirewallRule { public List getSourceCidrList() { if (sourceCidrs == null && (purpose == Purpose.Firewall || purpose == Purpose.NetworkACL)) { return _firewallRulesCidrsDao.getSourceCidrs(id); - } + } return sourceCidrs; } @@ -167,7 +167,7 @@ public class FirewallRuleVO implements Identity, FirewallRule { public String getProtocol() { return protocol; } - + public void setState(State state) { this.state = state; } @@ -176,17 +176,17 @@ public class FirewallRuleVO implements Identity, FirewallRule { public Purpose getPurpose() { return purpose; } - + @Override public State getState() { return state; } - + @Override public long getNetworkId() { return networkId; } - + @Override public FirewallRuleType getType() { return type; @@ -194,12 +194,12 @@ public class FirewallRuleVO implements Identity, FirewallRule { public Date getCreated() { return created; } - + protected FirewallRuleVO() { this.uuid = UUID.randomUUID().toString(); } - - public FirewallRuleVO(String xId, Long ipAddressId, Integer portStart, Integer portEnd, String protocol, + + public FirewallRuleVO(String xId, Long ipAddressId, Integer portStart, Integer portEnd, String protocol, long networkId, long accountId, long domainId, Purpose purpose, List sourceCidrs, Integer icmpCode, Integer icmpType, Long related, TrafficType trafficType) { this.xId = xId; @@ -208,11 +208,11 @@ public class FirewallRuleVO implements Identity, FirewallRule { } this.accountId = accountId; this.domainId = domainId; - + if (ipAddressId == null) { assert (purpose == Purpose.NetworkACL) : "ipAddressId can be null for " + Purpose.NetworkACL + " only"; } - + this.sourceIpAddressId = ipAddressId; this.sourcePortStart = portStart; this.sourcePortEnd = portEnd; @@ -223,28 +223,28 @@ public class FirewallRuleVO implements Identity, FirewallRule { this.icmpCode = icmpCode; this.icmpType = icmpType; this.sourceCidrs = sourceCidrs; - + if (related != null) { assert (purpose == Purpose.Firewall) : "related field can be set for rule of purpose " + Purpose.Firewall + " only"; } - + this.related = related; this.uuid = UUID.randomUUID().toString(); this.type = FirewallRuleType.User; this.trafficType = trafficType; } - - - public FirewallRuleVO(String xId, long ipAddressId, int port, String protocol, long networkId, long accountId, + + + public FirewallRuleVO(String xId, long ipAddressId, int port, String protocol, long networkId, long accountId, long domainId, Purpose purpose, List sourceCidrs, Integer icmpCode, Integer icmpType, Long related) { this(xId, ipAddressId, port, port, protocol, networkId, accountId, domainId, purpose, sourceCidrs, icmpCode, icmpType, related, null); } - + @Override public String toString() { return new StringBuilder("Rule[").append(id).append("-").append(purpose).append("-").append(state).append("]").toString(); } - + @Override public Integer getIcmpCode() { return icmpCode; @@ -259,16 +259,16 @@ public class FirewallRuleVO implements Identity, FirewallRule { public Long getRelated() { return related; } - + @Override public String getUuid() { return this.uuid; } - + public void setUuid(String uuid) { this.uuid = uuid; } - + public void setType(FirewallRuleType type) { this.type = type; } diff --git a/server/src/com/cloud/network/rules/StaticNatRuleImpl.java b/server/src/com/cloud/network/rules/StaticNatRuleImpl.java index 4ae7ab2adab..d2632582505 100644 --- a/server/src/com/cloud/network/rules/StaticNatRuleImpl.java +++ b/server/src/com/cloud/network/rules/StaticNatRuleImpl.java @@ -5,7 +5,7 @@ // 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, @@ -22,6 +22,7 @@ import java.util.List; public class StaticNatRuleImpl implements StaticNatRule{ long id; String xid; + String uuid; String protocol; int portStart; int portEnd; @@ -32,9 +33,10 @@ public class StaticNatRuleImpl implements StaticNatRule{ long sourceIpAddressId; String destIpAddress; - public StaticNatRuleImpl(FirewallRuleVO rule, String dstIp) { + public StaticNatRuleImpl(FirewallRuleVO rule, String dstIp) { this.id = rule.getId(); this.xid = rule.getXid(); + this.uuid = rule.getUuid(); this.protocol = rule.getProtocol(); this.portStart = rule.getSourcePortStart(); this.portEnd = rule.getSourcePortEnd(); @@ -55,7 +57,7 @@ public class StaticNatRuleImpl implements StaticNatRule{ public Integer getSourcePortEnd() { return portEnd; } - + @Override public Purpose getPurpose() { return Purpose.StaticNat; @@ -65,17 +67,17 @@ public class StaticNatRuleImpl implements StaticNatRule{ public State getState() { return state; } - + @Override public long getAccountId() { return accountId; } - + @Override public long getDomainId() { return domainId; } - + @Override public long getNetworkId() { return networkId; @@ -105,12 +107,18 @@ public class StaticNatRuleImpl implements StaticNatRule{ public String getXid() { return xid; } - + + + @Override + public String getUuid() { + return uuid; + } + @Override public Integer getIcmpCode() { return null; } - + @Override public Integer getIcmpType() { return null; @@ -130,7 +138,7 @@ public class StaticNatRuleImpl implements StaticNatRule{ public FirewallRuleType getType() { return FirewallRuleType.User; } - + @Override public TrafficType getTrafficType() { return null; From e940562dcac9dcfa07342a4d6cdc6cf4260fd8b1 Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Tue, 18 Dec 2012 13:38:27 -0800 Subject: [PATCH 134/421] api: Annotate domain apis Signed-off-by: Rohit Yadav --- .../cloudstack/api/command/admin/domain/CreateDomainCmd.java | 3 ++- .../cloudstack/api/command/admin/domain/DeleteDomainCmd.java | 5 +++-- .../api/command/admin/domain/ListDomainChildrenCmd.java | 4 ++-- .../cloudstack/api/command/admin/domain/ListDomainsCmd.java | 3 ++- .../cloudstack/api/command/admin/domain/UpdateDomainCmd.java | 4 ++-- 5 files changed, 11 insertions(+), 8 deletions(-) diff --git a/api/src/org/apache/cloudstack/api/command/admin/domain/CreateDomainCmd.java b/api/src/org/apache/cloudstack/api/command/admin/domain/CreateDomainCmd.java index e789c175c76..000858b645a 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/domain/CreateDomainCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/domain/CreateDomainCmd.java @@ -43,7 +43,8 @@ public class CreateDomainCmd extends BaseCmd { private String domainName; @IdentityMapper(entityTableName="domain") - @Parameter(name=ApiConstants.PARENT_DOMAIN_ID, type=CommandType.LONG, description="assigns new domain a parent domain by domain ID of the parent. If no parent domain is specied, the ROOT domain is assumed.") + @Parameter(name=ApiConstants.PARENT_DOMAIN_ID, type=CommandType.UUID, entityType=DomainResponse.class, + description="assigns new domain a parent domain by domain ID of the parent. If no parent domain is specied, the ROOT domain is assumed.") private Long parentDomainId; @Parameter(name=ApiConstants.NETWORK_DOMAIN, type=CommandType.STRING, description="Network domain for networks in the domain") diff --git a/api/src/org/apache/cloudstack/api/command/admin/domain/DeleteDomainCmd.java b/api/src/org/apache/cloudstack/api/command/admin/domain/DeleteDomainCmd.java index b18cb7420a8..3e262e4aaa2 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/domain/DeleteDomainCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/domain/DeleteDomainCmd.java @@ -16,6 +16,7 @@ // under the License. package org.apache.cloudstack.api.command.admin.domain; +import org.apache.cloudstack.api.response.DomainResponse; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; @@ -40,8 +41,8 @@ public class DeleteDomainCmd extends BaseAsyncCmd { //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - @IdentityMapper(entityTableName="domain") - @Parameter(name=ApiConstants.ID, type=CommandType.LONG, required=true, description="ID of domain to delete") + @Parameter(name=ApiConstants.ID, type=CommandType.UUID, entityType=DomainResponse.class, + required=true, description="ID of domain to delete") private Long id; @Parameter(name=ApiConstants.CLEANUP, type=CommandType.BOOLEAN, description="true if all domain resources (child domains, accounts) have to be cleaned up, false otherwise") diff --git a/api/src/org/apache/cloudstack/api/command/admin/domain/ListDomainChildrenCmd.java b/api/src/org/apache/cloudstack/api/command/admin/domain/ListDomainChildrenCmd.java index d653ccd9b69..bc09b22e297 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/domain/ListDomainChildrenCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/domain/ListDomainChildrenCmd.java @@ -41,8 +41,8 @@ public class ListDomainChildrenCmd extends BaseListCmd { //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - @IdentityMapper(entityTableName="domain") - @Parameter(name=ApiConstants.ID, type=CommandType.LONG, description="list children domain by parent domain ID.") + @Parameter(name=ApiConstants.ID, type=CommandType.UUID, entityType=DomainResponse.class, + description="list children domain by parent domain ID.") private Long id; @Parameter(name=ApiConstants.NAME, type=CommandType.STRING, description="list children domains by name") diff --git a/api/src/org/apache/cloudstack/api/command/admin/domain/ListDomainsCmd.java b/api/src/org/apache/cloudstack/api/command/admin/domain/ListDomainsCmd.java index 45bd236571d..3db292f390e 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/domain/ListDomainsCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/domain/ListDomainsCmd.java @@ -42,7 +42,8 @@ public class ListDomainsCmd extends BaseListCmd { ///////////////////////////////////////////////////// @IdentityMapper(entityTableName="domain") - @Parameter(name=ApiConstants.ID, type=CommandType.LONG, description="List domain by domain ID.") + @Parameter(name=ApiConstants.ID, type=CommandType.UUID, entityType=DomainResponse.class, + description="List domain by domain ID.") private Long id; @Parameter(name=ApiConstants.LEVEL, type=CommandType.INTEGER, description="List domains by domain level.") diff --git a/api/src/org/apache/cloudstack/api/command/admin/domain/UpdateDomainCmd.java b/api/src/org/apache/cloudstack/api/command/admin/domain/UpdateDomainCmd.java index 78535d89876..b3cb0656a34 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/domain/UpdateDomainCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/domain/UpdateDomainCmd.java @@ -38,8 +38,8 @@ public class UpdateDomainCmd extends BaseCmd { //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - @IdentityMapper(entityTableName="domain") - @Parameter(name=ApiConstants.ID, type=CommandType.LONG, required=true, description="ID of domain to update") + @Parameter(name=ApiConstants.ID, type=CommandType.UUID, entityType=DomainResponse.class, + required=true, description="ID of domain to update") private Long id; @Parameter(name=ApiConstants.NAME, type=CommandType.STRING, description="updates domain with this name") From 6116f3a4334f6e886fa7d52df488dc52bd468715 Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Tue, 18 Dec 2012 13:49:23 -0800 Subject: [PATCH 135/421] api: Annotate account apis remove IdentityMapper Signed-off-by: Rohit Yadav --- .../api/command/admin/account/CreateAccountCmd.java | 6 +++--- .../api/command/admin/account/DeleteAccountCmd.java | 8 ++------ .../api/command/admin/account/DisableAccountCmd.java | 9 ++++----- .../api/command/admin/account/EnableAccountCmd.java | 9 ++++----- .../api/command/admin/account/LockAccountCmd.java | 5 ++--- .../api/command/admin/account/UpdateAccountCmd.java | 9 ++++----- .../api/command/admin/domain/CreateDomainCmd.java | 2 -- .../api/command/admin/domain/DeleteDomainCmd.java | 1 - .../api/command/admin/domain/ListDomainChildrenCmd.java | 1 - .../api/command/admin/domain/ListDomainsCmd.java | 2 -- .../api/command/admin/domain/UpdateDomainCmd.java | 1 - 11 files changed, 19 insertions(+), 34 deletions(-) diff --git a/api/src/org/apache/cloudstack/api/command/admin/account/CreateAccountCmd.java b/api/src/org/apache/cloudstack/api/command/admin/account/CreateAccountCmd.java index fc38ca7ad3d..27292ac2a0e 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/account/CreateAccountCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/account/CreateAccountCmd.java @@ -23,7 +23,6 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; @@ -50,8 +49,8 @@ public class CreateAccountCmd extends BaseCmd { @Parameter(name=ApiConstants.ACCOUNT_TYPE, type=CommandType.SHORT, required=true, description="Type of the account. Specify 0 for user, 1 for root admin, and 2 for domain admin") private Short accountType; - //@IdentityMapper(entityTableName="domain") - @Parameter(name=ApiConstants.DOMAIN_ID, type=CommandType.LONG, description="Creates the user under the specified domain.", entityType=DomainResponse.class) + @Parameter(name=ApiConstants.DOMAIN_ID, type=CommandType.UUID, entityType=DomainResponse.class, + description="Creates the user under the specified domain.") private Long domainId; @Parameter(name=ApiConstants.EMAIL, type=CommandType.STRING, required=true, description="email") @@ -77,6 +76,7 @@ public class CreateAccountCmd extends BaseCmd { @Parameter(name = ApiConstants.ACCOUNT_DETAILS, type = CommandType.MAP, description = "details for account used to store specific parameters") private Map details; + ///////////////////////////////////////////////////// /////////////////// Accessors /////////////////////// ///////////////////////////////////////////////////// diff --git a/api/src/org/apache/cloudstack/api/command/admin/account/DeleteAccountCmd.java b/api/src/org/apache/cloudstack/api/command/admin/account/DeleteAccountCmd.java index c25137bc488..d1f39bb2044 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/account/DeleteAccountCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/account/DeleteAccountCmd.java @@ -21,7 +21,6 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; @@ -42,12 +41,10 @@ public class DeleteAccountCmd extends BaseAsyncCmd { //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - - @IdentityMapper(entityTableName="account") - @Parameter(name=ApiConstants.ID, type=CommandType.LONG, required=true, description="Account id", entityType=AccountResponse.class) + @Parameter(name=ApiConstants.ID, type=CommandType.UUID, entityType=AccountResponse.class, + required=true, description="Account id") private Long id; - ///////////////////////////////////////////////////// /////////////////// Accessors /////////////////////// ///////////////////////////////////////////////////// @@ -56,7 +53,6 @@ public class DeleteAccountCmd extends BaseAsyncCmd { return id; } - ///////////////////////////////////////////////////// /////////////// API Implementation/////////////////// ///////////////////////////////////////////////////// diff --git a/api/src/org/apache/cloudstack/api/command/admin/account/DisableAccountCmd.java b/api/src/org/apache/cloudstack/api/command/admin/account/DisableAccountCmd.java index 906386e198a..9e266b4d203 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/account/DisableAccountCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/account/DisableAccountCmd.java @@ -21,7 +21,6 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; @@ -43,15 +42,15 @@ public class DisableAccountCmd extends BaseAsyncCmd { ///////////////////////////////////////////////////// //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - //@IdentityMapper(entityTableName="account") - @Parameter(name=ApiConstants.ID, type=CommandType.LONG, description="Account id", entityType=AccountResponse.class) + @Parameter(name=ApiConstants.ID, type=CommandType.UUID, entityType=AccountResponse.class, + description="Account id") private Long id; @Parameter(name=ApiConstants.ACCOUNT, type=CommandType.STRING, description="Disables specified account.") private String accountName; - //@IdentityMapper(entityTableName="domain") - @Parameter(name=ApiConstants.DOMAIN_ID, type=CommandType.LONG, description="Disables specified account in this domain.", entityType=DomainResponse.class) + @Parameter(name=ApiConstants.DOMAIN_ID, type=CommandType.UUID, entityType=DomainResponse.class, + description="Disables specified account in this domain.") private Long domainId; @Parameter(name=ApiConstants.LOCK, type=CommandType.BOOLEAN, required=true, description="If true, only lock the account; else disable the account") diff --git a/api/src/org/apache/cloudstack/api/command/admin/account/EnableAccountCmd.java b/api/src/org/apache/cloudstack/api/command/admin/account/EnableAccountCmd.java index 3cf636007e2..35476a314b7 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/account/EnableAccountCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/account/EnableAccountCmd.java @@ -20,7 +20,6 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; @@ -37,15 +36,15 @@ public class EnableAccountCmd extends BaseCmd { ///////////////////////////////////////////////////// //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - //@IdentityMapper(entityTableName="account") - @Parameter(name=ApiConstants.ID, type=CommandType.LONG, description="Account id", entityType=AccountResponse.class) + @Parameter(name=ApiConstants.ID, type=CommandType.UUID, entityType=AccountResponse.class, + description="Account id") private Long id; @Parameter(name=ApiConstants.ACCOUNT, type=CommandType.STRING, description="Enables specified account.") private String accountName; - //@IdentityMapper(entityTableName="domain") - @Parameter(name=ApiConstants.DOMAIN_ID, type=CommandType.LONG, description="Enables specified account in this domain.", entityType=DomainResponse.class) + @Parameter(name=ApiConstants.DOMAIN_ID, type=CommandType.UUID, entityType=DomainResponse.class, + description="Enables specified account in this domain.") private Long domainId; ///////////////////////////////////////////////////// diff --git a/api/src/org/apache/cloudstack/api/command/admin/account/LockAccountCmd.java b/api/src/org/apache/cloudstack/api/command/admin/account/LockAccountCmd.java index f50e692f0ea..c5e7871ace8 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/account/LockAccountCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/account/LockAccountCmd.java @@ -20,7 +20,6 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.response.AccountResponse; @@ -41,8 +40,8 @@ public class LockAccountCmd extends BaseCmd { @Parameter(name=ApiConstants.ACCOUNT, type=CommandType.STRING, required=true, description="Locks the specified account.") private String accountName; - //@IdentityMapper(entityTableName="domain") - @Parameter(name=ApiConstants.DOMAIN_ID, type=CommandType.LONG, required=true, description="Locks the specified account on this domain.", entityType=DomainResponse.class) + @Parameter(name=ApiConstants.DOMAIN_ID, type=CommandType.UUID, entityType=DomainResponse.class, + required=true, description="Locks the specified account on this domain.") private Long domainId; ///////////////////////////////////////////////////// diff --git a/api/src/org/apache/cloudstack/api/command/admin/account/UpdateAccountCmd.java b/api/src/org/apache/cloudstack/api/command/admin/account/UpdateAccountCmd.java index b3267107b33..e9bf76d37ba 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/account/UpdateAccountCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/account/UpdateAccountCmd.java @@ -23,7 +23,6 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; @@ -41,15 +40,15 @@ public class UpdateAccountCmd extends BaseCmd{ //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - //@IdentityMapper(entityTableName="account") - @Parameter(name=ApiConstants.ID, type=CommandType.LONG, description="Account id", entityType=AccountResponse.class) + @Parameter(name=ApiConstants.ID, type=CommandType.UUID, entityType=AccountResponse.class, + description="Account id") private Long id; @Parameter(name=ApiConstants.ACCOUNT, type=CommandType.STRING, description="the current account name") private String accountName; - //@IdentityMapper(entityTableName="domain") - @Parameter(name=ApiConstants.DOMAIN_ID, type=CommandType.LONG, description="the ID of the domain where the account exists", entityType=DomainResponse.class) + @Parameter(name=ApiConstants.DOMAIN_ID, type=CommandType.UUID, entityType=DomainResponse.class, + description="the ID of the domain where the account exists") private Long domainId; @Parameter(name=ApiConstants.NEW_NAME, type=CommandType.STRING, required=true, description="new name for the account") diff --git a/api/src/org/apache/cloudstack/api/command/admin/domain/CreateDomainCmd.java b/api/src/org/apache/cloudstack/api/command/admin/domain/CreateDomainCmd.java index 000858b645a..269df5804da 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/domain/CreateDomainCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/domain/CreateDomainCmd.java @@ -20,7 +20,6 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; @@ -42,7 +41,6 @@ public class CreateDomainCmd extends BaseCmd { @Parameter(name=ApiConstants.NAME, type=CommandType.STRING, required=true, description="creates domain with this name") private String domainName; - @IdentityMapper(entityTableName="domain") @Parameter(name=ApiConstants.PARENT_DOMAIN_ID, type=CommandType.UUID, entityType=DomainResponse.class, description="assigns new domain a parent domain by domain ID of the parent. If no parent domain is specied, the ROOT domain is assumed.") private Long parentDomainId; diff --git a/api/src/org/apache/cloudstack/api/command/admin/domain/DeleteDomainCmd.java b/api/src/org/apache/cloudstack/api/command/admin/domain/DeleteDomainCmd.java index 3e262e4aaa2..dc5ae7a5192 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/domain/DeleteDomainCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/domain/DeleteDomainCmd.java @@ -22,7 +22,6 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; diff --git a/api/src/org/apache/cloudstack/api/command/admin/domain/ListDomainChildrenCmd.java b/api/src/org/apache/cloudstack/api/command/admin/domain/ListDomainChildrenCmd.java index bc09b22e297..166a09f831d 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/domain/ListDomainChildrenCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/domain/ListDomainChildrenCmd.java @@ -23,7 +23,6 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseListCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.response.DomainResponse; diff --git a/api/src/org/apache/cloudstack/api/command/admin/domain/ListDomainsCmd.java b/api/src/org/apache/cloudstack/api/command/admin/domain/ListDomainsCmd.java index 3db292f390e..0d4c57dcf52 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/domain/ListDomainsCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/domain/ListDomainsCmd.java @@ -23,7 +23,6 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseListCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.response.DomainResponse; @@ -41,7 +40,6 @@ public class ListDomainsCmd extends BaseListCmd { //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - @IdentityMapper(entityTableName="domain") @Parameter(name=ApiConstants.ID, type=CommandType.UUID, entityType=DomainResponse.class, description="List domain by domain ID.") private Long id; diff --git a/api/src/org/apache/cloudstack/api/command/admin/domain/UpdateDomainCmd.java b/api/src/org/apache/cloudstack/api/command/admin/domain/UpdateDomainCmd.java index b3cb0656a34..fa15f477973 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/domain/UpdateDomainCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/domain/UpdateDomainCmd.java @@ -20,7 +20,6 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; From fb9db2b1b19cf72ead11592bfc43f148a9f2477f Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Tue, 18 Dec 2012 13:59:11 -0800 Subject: [PATCH 136/421] api: Annotate autoscale and cluster apis Signed-off-by: Rohit Yadav --- .../command/admin/autoscale/DeleteCounterCmd.java | 5 ++--- .../api/command/admin/cluster/AddClusterCmd.java | 9 ++++----- .../command/admin/cluster/DeleteClusterCmd.java | 8 ++------ .../api/command/admin/cluster/ListClustersCmd.java | 14 +++++++------- .../command/admin/cluster/UpdateClusterCmd.java | 5 ++--- 5 files changed, 17 insertions(+), 24 deletions(-) diff --git a/api/src/org/apache/cloudstack/api/command/admin/autoscale/DeleteCounterCmd.java b/api/src/org/apache/cloudstack/api/command/admin/autoscale/DeleteCounterCmd.java index 0476278f7d0..0cde5cd0fea 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/autoscale/DeleteCounterCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/autoscale/DeleteCounterCmd.java @@ -22,7 +22,6 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; @@ -42,8 +41,8 @@ public class DeleteCounterCmd extends BaseAsyncCmd { // ////////////// API parameters ///////////////////// // /////////////////////////////////////////////////// - @IdentityMapper(entityTableName = "counter") - @Parameter(name = ApiConstants.ID, type = CommandType.LONG, required = true, description = "the ID of the counter", entityType=CounterResponse.class) + @Parameter(name=ApiConstants.ID, type=CommandType.UUID, entityType=CounterResponse.class, + required=true, description="the ID of the counter") private Long id; // /////////////////////////////////////////////////// diff --git a/api/src/org/apache/cloudstack/api/command/admin/cluster/AddClusterCmd.java b/api/src/org/apache/cloudstack/api/command/admin/cluster/AddClusterCmd.java index 0728d665d4d..77846ee3295 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/cluster/AddClusterCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/cluster/AddClusterCmd.java @@ -24,7 +24,6 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; @@ -51,8 +50,8 @@ public class AddClusterCmd extends BaseCmd { @Parameter(name=ApiConstants.PASSWORD, type=CommandType.STRING, required=false, description="the password for the host") private String password; - //@IdentityMapper(entityTableName="host_pod_ref") - @Parameter(name=ApiConstants.POD_ID, type=CommandType.LONG, required=true, description="the Pod ID for the host", entityType=PodResponse.class) + @Parameter(name=ApiConstants.POD_ID, type=CommandType.UUID, entityType=PodResponse.class, + required=true, description="the Pod ID for the host") private Long podId; @Parameter(name=ApiConstants.URL, type=CommandType.STRING, required=false, description="the URL") @@ -61,8 +60,8 @@ public class AddClusterCmd extends BaseCmd { @Parameter(name=ApiConstants.USERNAME, type=CommandType.STRING, required=false, description="the username for the cluster") private String username; - //@IdentityMapper(entityTableName="data_center") - @Parameter(name=ApiConstants.ZONE_ID, type=CommandType.LONG, required=true, description="the Zone ID for the cluster", entityType=ZoneResponse.class) + @Parameter(name=ApiConstants.ZONE_ID, type=CommandType.UUID, entityType=ZoneResponse.class, + required=true, description="the Zone ID for the cluster") private Long zoneId; @Parameter(name=ApiConstants.HYPERVISOR, type=CommandType.STRING, required=true, description="hypervisor type of the cluster: XenServer,KVM,VMware,Hyperv,BareMetal,Simulator") diff --git a/api/src/org/apache/cloudstack/api/command/admin/cluster/DeleteClusterCmd.java b/api/src/org/apache/cloudstack/api/command/admin/cluster/DeleteClusterCmd.java index 1b4136064bd..23a80faecd3 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/cluster/DeleteClusterCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/cluster/DeleteClusterCmd.java @@ -20,7 +20,6 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; @@ -28,7 +27,6 @@ import org.apache.cloudstack.api.response.ClusterResponse; import org.apache.cloudstack.api.response.SuccessResponse; import com.cloud.user.Account; - @Implementation(description="Deletes a cluster.", responseObject=SuccessResponse.class) public class DeleteClusterCmd extends BaseCmd { public static final Logger s_logger = Logger.getLogger(DeleteClusterCmd.class.getName()); @@ -39,11 +37,10 @@ public class DeleteClusterCmd extends BaseCmd { //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - //@IdentityMapper(entityTableName="cluster") - @Parameter(name=ApiConstants.ID, type=CommandType.LONG, required=true, description="the cluster ID", entityType=ClusterResponse.class) + @Parameter(name=ApiConstants.ID, type=CommandType.UUID, entityType=ClusterResponse.class, + required=true, description="the cluster ID") private Long id; - ///////////////////////////////////////////////////// /////////////////// Accessors /////////////////////// ///////////////////////////////////////////////////// @@ -52,7 +49,6 @@ public class DeleteClusterCmd extends BaseCmd { return id; } - ///////////////////////////////////////////////////// /////////////// API Implementation/////////////////// ///////////////////////////////////////////////////// diff --git a/api/src/org/apache/cloudstack/api/command/admin/cluster/ListClustersCmd.java b/api/src/org/apache/cloudstack/api/command/admin/cluster/ListClustersCmd.java index 1a3934e0ec7..4ff55acfcd6 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/cluster/ListClustersCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/cluster/ListClustersCmd.java @@ -20,11 +20,11 @@ import java.util.ArrayList; import java.util.List; import org.apache.cloudstack.api.command.user.offering.ListServiceOfferingsCmd; +import org.apache.cloudstack.api.response.PodResponse; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseListCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.response.ClusterResponse; @@ -44,19 +44,19 @@ public class ListClustersCmd extends BaseListCmd { //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - @IdentityMapper(entityTableName="cluster") - @Parameter(name=ApiConstants.ID, type=CommandType.LONG, description="lists clusters by the cluster ID") + @Parameter(name=ApiConstants.ID, type=CommandType.UUID, entityType=ClusterResponse.class, + description="lists clusters by the cluster ID") private Long id; @Parameter(name=ApiConstants.NAME, type=CommandType.STRING, description="lists clusters by the cluster name") private String clusterName; - @IdentityMapper(entityTableName="host_pod_ref") - @Parameter(name=ApiConstants.POD_ID, type=CommandType.LONG, description="lists clusters by Pod ID") + @Parameter(name=ApiConstants.POD_ID, type=CommandType.UUID, entityType=PodResponse.class, + description="lists clusters by Pod ID") private Long podId; - //@IdentityMapper(entityTableName="data_center") - @Parameter(name=ApiConstants.ZONE_ID, type=CommandType.LONG, description="lists clusters by Zone ID", entityType=ZoneResponse.class) + @Parameter(name=ApiConstants.ZONE_ID, type=CommandType.UUID, entityType=ZoneResponse.class, + description="lists clusters by Zone ID") private Long zoneId; @Parameter(name=ApiConstants.HYPERVISOR, type=CommandType.STRING, description="lists clusters by hypervisor type") diff --git a/api/src/org/apache/cloudstack/api/command/admin/cluster/UpdateClusterCmd.java b/api/src/org/apache/cloudstack/api/command/admin/cluster/UpdateClusterCmd.java index 1c9898031d0..fe1800abaa0 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/cluster/UpdateClusterCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/cluster/UpdateClusterCmd.java @@ -20,7 +20,6 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; @@ -35,8 +34,8 @@ public class UpdateClusterCmd extends BaseCmd { private static final String s_name = "updateclusterresponse"; - //@IdentityMapper(entityTableName="cluster") - @Parameter(name=ApiConstants.ID, type=CommandType.LONG, required=true, description="the ID of the Cluster", entityType=ClusterResponse.class) + @Parameter(name=ApiConstants.ID, type=CommandType.UUID, entityType=ClusterResponse.class, + required=true, description="the ID of the Cluster") private Long id; @Parameter(name=ApiConstants.CLUSTER_NAME, type=CommandType.STRING, description="the cluster name") From 855ba0439f05258e6c19e49a6a7852403d277e4d Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Tue, 18 Dec 2012 14:04:00 -0800 Subject: [PATCH 137/421] api: Annotate cfg and hypervisorcapabilities apis Signed-off-by: Rohit Yadav --- .../admin/config/ListHypervisorCapabilitiesCmd.java | 6 ++---- .../admin/config/UpdateHypervisorCapabilitiesCmd.java | 8 ++------ .../api/response/HypervisorCapabilitiesResponse.java | 3 +++ 3 files changed, 7 insertions(+), 10 deletions(-) diff --git a/api/src/org/apache/cloudstack/api/command/admin/config/ListHypervisorCapabilitiesCmd.java b/api/src/org/apache/cloudstack/api/command/admin/config/ListHypervisorCapabilitiesCmd.java index 924e4d4cecd..9d8e59f080a 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/config/ListHypervisorCapabilitiesCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/config/ListHypervisorCapabilitiesCmd.java @@ -23,7 +23,6 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseListCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.response.HypervisorCapabilitiesResponse; @@ -42,14 +41,13 @@ public class ListHypervisorCapabilitiesCmd extends BaseListCmd { //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - @IdentityMapper(entityTableName="hypervisor_capabilities") - @Parameter(name=ApiConstants.ID, type=CommandType.LONG, description="ID of the hypervisor capability") + @Parameter(name=ApiConstants.ID, type=CommandType.UUID, entityType=HypervisorCapabilitiesResponse.class, + description="ID of the hypervisor capability") private Long id; @Parameter(name=ApiConstants.HYPERVISOR, type=CommandType.STRING, description="the hypervisor for which to restrict the search") private String hypervisor; - ///////////////////////////////////////////////////// /////////////////// Accessors /////////////////////// ///////////////////////////////////////////////////// diff --git a/api/src/org/apache/cloudstack/api/command/admin/config/UpdateHypervisorCapabilitiesCmd.java b/api/src/org/apache/cloudstack/api/command/admin/config/UpdateHypervisorCapabilitiesCmd.java index 9f4e11088be..4fc9a8373cc 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/config/UpdateHypervisorCapabilitiesCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/config/UpdateHypervisorCapabilitiesCmd.java @@ -20,7 +20,6 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; @@ -29,7 +28,6 @@ import org.apache.cloudstack.api.response.ServiceOfferingResponse; import com.cloud.hypervisor.HypervisorCapabilities; import com.cloud.user.Account; - @Implementation(description="Updates a hypervisor capabilities.", responseObject=ServiceOfferingResponse.class, since="3.0.0") public class UpdateHypervisorCapabilitiesCmd extends BaseCmd { public static final Logger s_logger = Logger.getLogger(UpdateHypervisorCapabilitiesCmd.class.getName()); @@ -39,8 +37,8 @@ public class UpdateHypervisorCapabilitiesCmd extends BaseCmd { //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - @IdentityMapper(entityTableName="hypervisor_capabilities") - @Parameter(name=ApiConstants.ID, type=CommandType.LONG, description="ID of the hypervisor capability") + @Parameter(name=ApiConstants.ID, type=CommandType.UUID, entityType=HypervisorCapabilitiesResponse.class, + description="ID of the hypervisor capability") private Long id; @Parameter(name=ApiConstants.SECURITY_GROUP_EANBLED, type=CommandType.BOOLEAN, description="set true to enable security group for this hypervisor.") @@ -65,8 +63,6 @@ public class UpdateHypervisorCapabilitiesCmd extends BaseCmd { return maxGuestsLimit; } - - ///////////////////////////////////////////////////// /////////////// API Implementation/////////////////// ///////////////////////////////////////////////////// diff --git a/api/src/org/apache/cloudstack/api/response/HypervisorCapabilitiesResponse.java b/api/src/org/apache/cloudstack/api/response/HypervisorCapabilitiesResponse.java index 6e908732844..c7d31560e4a 100644 --- a/api/src/org/apache/cloudstack/api/response/HypervisorCapabilitiesResponse.java +++ b/api/src/org/apache/cloudstack/api/response/HypervisorCapabilitiesResponse.java @@ -16,12 +16,15 @@ // under the License. package org.apache.cloudstack.api.response; +import com.cloud.hypervisor.HypervisorCapabilities; import org.apache.cloudstack.api.ApiConstants; import com.cloud.hypervisor.Hypervisor.HypervisorType; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; import org.apache.cloudstack.api.BaseResponse; +import org.apache.cloudstack.api.Entity; +@Entity(value=HypervisorCapabilities.class) public class HypervisorCapabilitiesResponse extends BaseResponse { @SerializedName(ApiConstants.ID) @Param(description="the ID of the hypervisor capabilities row") private String id; From 9624a59d8e4d29caf6185f78cf2d5c0d917d387a Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Tue, 18 Dec 2012 14:32:30 -0800 Subject: [PATCH 138/421] api: Annotate host apis Signed-off-by: Rohit Yadav --- .../api/command/admin/host/AddHostCmd.java | 16 ++++++------ .../admin/host/AddSecondaryStorageCmd.java | 6 ++--- .../admin/host/CancelMaintenanceCmd.java | 7 ++---- .../api/command/admin/host/DeleteHostCmd.java | 6 ++--- .../api/command/admin/host/ListHostsCmd.java | 25 +++++++++++-------- .../admin/host/PrepareForMaintenanceCmd.java | 5 ++-- .../command/admin/host/ReconnectHostCmd.java | 5 ++-- .../api/command/admin/host/UpdateHostCmd.java | 10 ++++---- .../admin/host/UpdateHostPasswordCmd.java | 13 +++++----- .../api/response/GuestOSCategoryResponse.java | 4 ++- .../api/response/GuestOSResponse.java | 1 - .../cloudstack/api/response/HostResponse.java | 2 ++ 12 files changed, 51 insertions(+), 49 deletions(-) diff --git a/api/src/org/apache/cloudstack/api/command/admin/host/AddHostCmd.java b/api/src/org/apache/cloudstack/api/command/admin/host/AddHostCmd.java index 9b06bdd5656..76832e00f27 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/host/AddHostCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/host/AddHostCmd.java @@ -23,12 +23,14 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; +import org.apache.cloudstack.api.response.ClusterResponse; import org.apache.cloudstack.api.response.HostResponse; import org.apache.cloudstack.api.response.ListResponse; +import org.apache.cloudstack.api.response.PodResponse; +import org.apache.cloudstack.api.response.ZoneResponse; import com.cloud.exception.DiscoveryException; import com.cloud.host.Host; import com.cloud.user.Account; @@ -43,8 +45,8 @@ public class AddHostCmd extends BaseCmd { //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - @IdentityMapper(entityTableName="cluster") - @Parameter(name=ApiConstants.CLUSTER_ID, type=CommandType.LONG, description="the cluster ID for the host") + @Parameter(name=ApiConstants.CLUSTER_ID, type=CommandType.UUID, entityType=ClusterResponse.class, + description="the cluster ID for the host") private Long clusterId; @Parameter(name=ApiConstants.CLUSTER_NAME, type=CommandType.STRING, description="the cluster name for the host") @@ -53,8 +55,8 @@ public class AddHostCmd extends BaseCmd { @Parameter(name=ApiConstants.PASSWORD, type=CommandType.STRING, required=true, description="the password for the host") private String password; - @IdentityMapper(entityTableName="host_pod_ref") - @Parameter(name=ApiConstants.POD_ID, required=true, type=CommandType.LONG, description="the Pod ID for the host") + @Parameter(name=ApiConstants.POD_ID, type=CommandType.UUID, entityType=PodResponse.class, + required=true, description="the Pod ID for the host") private Long podId; @Parameter(name=ApiConstants.URL, type=CommandType.STRING, required=true, description="the host URL") @@ -63,8 +65,8 @@ public class AddHostCmd extends BaseCmd { @Parameter(name=ApiConstants.USERNAME, type=CommandType.STRING, required=true, description="the username for the host") private String username; - @IdentityMapper(entityTableName="data_center") - @Parameter(name=ApiConstants.ZONE_ID, type=CommandType.LONG, required=true, description="the Zone ID for the host") + @Parameter(name=ApiConstants.ZONE_ID, type=CommandType.UUID, entityType=ZoneResponse.class, + required=true, description="the Zone ID for the host") private Long zoneId; @Parameter(name=ApiConstants.HYPERVISOR, type=CommandType.STRING, required=true, description="hypervisor type of the host") diff --git a/api/src/org/apache/cloudstack/api/command/admin/host/AddSecondaryStorageCmd.java b/api/src/org/apache/cloudstack/api/command/admin/host/AddSecondaryStorageCmd.java index 39162e965bf..01ca3920bb6 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/host/AddSecondaryStorageCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/host/AddSecondaryStorageCmd.java @@ -22,11 +22,11 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; import org.apache.cloudstack.api.response.HostResponse; +import org.apache.cloudstack.api.response.ZoneResponse; import com.cloud.exception.DiscoveryException; import com.cloud.host.Host; import com.cloud.user.Account; @@ -43,8 +43,8 @@ public class AddSecondaryStorageCmd extends BaseCmd { @Parameter(name=ApiConstants.URL, type=CommandType.STRING, required=true, description="the URL for the secondary storage") private String url; - @IdentityMapper(entityTableName="data_center") - @Parameter(name=ApiConstants.ZONE_ID, type=CommandType.LONG, description="the Zone ID for the secondary storage") + @Parameter(name=ApiConstants.ZONE_ID, type=CommandType.UUID, entityType=ZoneResponse.class, + description="the Zone ID for the secondary storage") private Long zoneId; ///////////////////////////////////////////////////// diff --git a/api/src/org/apache/cloudstack/api/command/admin/host/CancelMaintenanceCmd.java b/api/src/org/apache/cloudstack/api/command/admin/host/CancelMaintenanceCmd.java index 354e9a9d234..35b7789f2da 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/host/CancelMaintenanceCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/host/CancelMaintenanceCmd.java @@ -21,7 +21,6 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; @@ -42,11 +41,10 @@ public class CancelMaintenanceCmd extends BaseAsyncCmd { //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - @IdentityMapper(entityTableName="host") - @Parameter(name=ApiConstants.ID, type=CommandType.LONG, required=true, description="the host ID") + @Parameter(name=ApiConstants.ID, type=CommandType.UUID, entityType=HostResponse.class, + required=true, description="the host ID") private Long id; - ///////////////////////////////////////////////////// /////////////////// Accessors /////////////////////// ///////////////////////////////////////////////////// @@ -55,7 +53,6 @@ public class CancelMaintenanceCmd extends BaseAsyncCmd { return id; } - ///////////////////////////////////////////////////// /////////////// API Implementation/////////////////// ///////////////////////////////////////////////////// diff --git a/api/src/org/apache/cloudstack/api/command/admin/host/DeleteHostCmd.java b/api/src/org/apache/cloudstack/api/command/admin/host/DeleteHostCmd.java index 168dcb8e2c4..c11bbcf4aa8 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/host/DeleteHostCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/host/DeleteHostCmd.java @@ -16,11 +16,11 @@ // under the License. package org.apache.cloudstack.api.command.admin.host; +import org.apache.cloudstack.api.response.HostResponse; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; @@ -37,8 +37,8 @@ public class DeleteHostCmd extends BaseCmd { // ////////////// API parameters ///////////////////// // /////////////////////////////////////////////////// - @IdentityMapper(entityTableName="host") - @Parameter(name = ApiConstants.ID, type = CommandType.LONG, required = true, description = "the host ID") + @Parameter(name = ApiConstants.ID, type = CommandType.UUID, entityType = HostResponse.class, + required = true, description = "the host ID") private Long id; @Parameter(name = ApiConstants.FORCED, type = CommandType.BOOLEAN, description = "Force delete the host. All HA enabled vms running on the host will be put to HA; HA disabled ones will be stopped") diff --git a/api/src/org/apache/cloudstack/api/command/admin/host/ListHostsCmd.java b/api/src/org/apache/cloudstack/api/command/admin/host/ListHostsCmd.java index 7c33c52713c..32395e7be48 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/host/ListHostsCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/host/ListHostsCmd.java @@ -25,11 +25,14 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.ApiConstants.HostDetails; import org.apache.cloudstack.api.BaseListCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.response.ClusterResponse; import org.apache.cloudstack.api.response.HostResponse; import org.apache.cloudstack.api.response.ListResponse; +import org.apache.cloudstack.api.response.PodResponse; +import org.apache.cloudstack.api.response.UserVmResponse; +import org.apache.cloudstack.api.response.ZoneResponse; import com.cloud.async.AsyncJob; import com.cloud.exception.InvalidParameterValueException; import com.cloud.host.Host; @@ -45,19 +48,19 @@ public class ListHostsCmd extends BaseListCmd { //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - @IdentityMapper(entityTableName="cluster") - @Parameter(name=ApiConstants.CLUSTER_ID, type=CommandType.LONG, description="lists hosts existing in particular cluster") + @Parameter(name=ApiConstants.CLUSTER_ID, type=CommandType.UUID, entityType = ClusterResponse.class, + description="lists hosts existing in particular cluster") private Long clusterId; - @IdentityMapper(entityTableName="host") - @Parameter(name=ApiConstants.ID, type=CommandType.LONG, description="the id of the host") + @Parameter(name=ApiConstants.ID, type=CommandType.UUID, entityType = HostResponse.class, + description="the id of the host") private Long id; @Parameter(name=ApiConstants.NAME, type=CommandType.STRING, description="the name of the host") private String hostName; - @IdentityMapper(entityTableName="host_pod_ref") - @Parameter(name=ApiConstants.POD_ID, type=CommandType.LONG, description="the Pod ID for the host") + @Parameter(name=ApiConstants.POD_ID, type=CommandType.UUID, entityType = PodResponse.class, + description="the Pod ID for the host") private Long podId; @Parameter(name=ApiConstants.STATE, type=CommandType.STRING, description="the state of the host") @@ -66,12 +69,12 @@ public class ListHostsCmd extends BaseListCmd { @Parameter(name=ApiConstants.TYPE, type=CommandType.STRING, description="the host type") private String type; - @IdentityMapper(entityTableName="data_center") - @Parameter(name=ApiConstants.ZONE_ID, type=CommandType.LONG, description="the Zone ID for the host") + @Parameter(name=ApiConstants.ZONE_ID, type=CommandType.UUID, entityType = ZoneResponse.class, + description="the Zone ID for the host") private Long zoneId; - @IdentityMapper(entityTableName="vm_instance") - @Parameter(name=ApiConstants.VIRTUAL_MACHINE_ID, type=CommandType.LONG, required=false, description="lists hosts in the same cluster as this VM and flag hosts with enough CPU/RAm to host this VM") + @Parameter(name=ApiConstants.VIRTUAL_MACHINE_ID, type=CommandType.UUID, entityType = UserVmResponse.class, + required=false, description="lists hosts in the same cluster as this VM and flag hosts with enough CPU/RAm to host this VM") private Long virtualMachineId; @Parameter(name=ApiConstants.RESOURCE_STATE, type=CommandType.STRING, description="list hosts by resource state. Resource state represents current state determined by admin of host, valule can be one of [Enabled, Disabled, Unmanaged, PrepareForMaintenance, ErrorInMaintenance, Maintenance, Error]") diff --git a/api/src/org/apache/cloudstack/api/command/admin/host/PrepareForMaintenanceCmd.java b/api/src/org/apache/cloudstack/api/command/admin/host/PrepareForMaintenanceCmd.java index cb728270f91..6eacba5cd13 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/host/PrepareForMaintenanceCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/host/PrepareForMaintenanceCmd.java @@ -21,7 +21,6 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; @@ -42,8 +41,8 @@ public class PrepareForMaintenanceCmd extends BaseAsyncCmd { //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - @IdentityMapper(entityTableName="host") - @Parameter(name=ApiConstants.ID, type=CommandType.LONG, required=true, description="the host ID") + @Parameter(name=ApiConstants.ID, type=CommandType.UUID, entityType = HostResponse.class, + required=true, description="the host ID") private Long id; ///////////////////////////////////////////////////// diff --git a/api/src/org/apache/cloudstack/api/command/admin/host/ReconnectHostCmd.java b/api/src/org/apache/cloudstack/api/command/admin/host/ReconnectHostCmd.java index b1a95883284..1cabc205f0f 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/host/ReconnectHostCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/host/ReconnectHostCmd.java @@ -21,7 +21,6 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; @@ -42,8 +41,8 @@ public class ReconnectHostCmd extends BaseAsyncCmd { //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - @IdentityMapper(entityTableName="host") - @Parameter(name=ApiConstants.ID, type=CommandType.LONG, required=true, description="the host ID") + @Parameter(name=ApiConstants.ID, type=CommandType.UUID, entityType = HostResponse.class, + required=true, description="the host ID") private Long id; ///////////////////////////////////////////////////// diff --git a/api/src/org/apache/cloudstack/api/command/admin/host/UpdateHostCmd.java b/api/src/org/apache/cloudstack/api/command/admin/host/UpdateHostCmd.java index 5e0f125066f..9de6107a682 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/host/UpdateHostCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/host/UpdateHostCmd.java @@ -22,10 +22,10 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; +import org.apache.cloudstack.api.response.GuestOSCategoryResponse; import org.apache.cloudstack.api.response.HostResponse; import com.cloud.host.Host; import com.cloud.user.Account; @@ -39,12 +39,12 @@ public class UpdateHostCmd extends BaseCmd { //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - @IdentityMapper(entityTableName="host") - @Parameter(name=ApiConstants.ID, type=CommandType.LONG, required=true, description="the ID of the host to update") + @Parameter(name=ApiConstants.ID, type=CommandType.UUID, entityType = HostResponse.class, + required=true, description="the ID of the host to update") private Long id; - @IdentityMapper(entityTableName="guest_os_category") - @Parameter(name=ApiConstants.OS_CATEGORY_ID, type=CommandType.LONG, description="the id of Os category to update the host with") + @Parameter(name=ApiConstants.OS_CATEGORY_ID, type=CommandType.UUID, entityType = GuestOSCategoryResponse.class, + description="the id of Os category to update the host with") private Long osCategoryId; @Parameter(name=ApiConstants.ALLOCATION_STATE, type=CommandType.STRING, description="Change resource state of host, valid values are [Enable, Disable]. Operation may failed if host in states not allowing Enable/Disable") diff --git a/api/src/org/apache/cloudstack/api/command/admin/host/UpdateHostPasswordCmd.java b/api/src/org/apache/cloudstack/api/command/admin/host/UpdateHostPasswordCmd.java index c3059236d81..e0f2f5d0104 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/host/UpdateHostPasswordCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/host/UpdateHostPasswordCmd.java @@ -18,12 +18,12 @@ package org.apache.cloudstack.api.command.admin.host; import org.apache.log4j.Logger; - import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.response.ClusterResponse; +import org.apache.cloudstack.api.response.HostResponse; import org.apache.cloudstack.api.response.SuccessResponse; import com.cloud.user.Account; @@ -37,13 +37,12 @@ public class UpdateHostPasswordCmd extends BaseCmd { // ////////////// API parameters ///////////////////// // /////////////////////////////////////////////////// - // TO DO - this is of no use currently. Probably need to remove it. - @IdentityMapper(entityTableName="host") - @Parameter(name=ApiConstants.HOST_ID, type=CommandType.LONG, description="the host ID") + @Parameter(name=ApiConstants.HOST_ID, type=CommandType.UUID, entityType=HostResponse.class, + description="the host ID") private Long hostId; - @IdentityMapper(entityTableName="cluster") - @Parameter(name=ApiConstants.CLUSTER_ID, type=CommandType.LONG, description="the cluster ID") + @Parameter(name=ApiConstants.CLUSTER_ID, type=CommandType.UUID, entityType=ClusterResponse.class, + description="the cluster ID") private Long clusterId; @Parameter(name=ApiConstants.USERNAME, type=CommandType.STRING, required=true, description="the username for the host/cluster") diff --git a/api/src/org/apache/cloudstack/api/response/GuestOSCategoryResponse.java b/api/src/org/apache/cloudstack/api/response/GuestOSCategoryResponse.java index 62537d90533..f7f0b8dd67e 100644 --- a/api/src/org/apache/cloudstack/api/response/GuestOSCategoryResponse.java +++ b/api/src/org/apache/cloudstack/api/response/GuestOSCategoryResponse.java @@ -16,12 +16,14 @@ // under the License. package org.apache.cloudstack.api.response; +import com.cloud.storage.GuestOsCategory; import org.apache.cloudstack.api.ApiConstants; -import com.cloud.utils.IdentityProxy; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; import org.apache.cloudstack.api.BaseResponse; +import org.apache.cloudstack.api.Entity; +@Entity(value=GuestOsCategory.class) public class GuestOSCategoryResponse extends BaseResponse { @SerializedName(ApiConstants.ID) @Param(description="the ID of the OS category") private String id; diff --git a/api/src/org/apache/cloudstack/api/response/GuestOSResponse.java b/api/src/org/apache/cloudstack/api/response/GuestOSResponse.java index 469c3100941..a4f592e019e 100644 --- a/api/src/org/apache/cloudstack/api/response/GuestOSResponse.java +++ b/api/src/org/apache/cloudstack/api/response/GuestOSResponse.java @@ -17,7 +17,6 @@ package org.apache.cloudstack.api.response; import org.apache.cloudstack.api.ApiConstants; -import com.cloud.utils.IdentityProxy; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; import org.apache.cloudstack.api.BaseResponse; diff --git a/api/src/org/apache/cloudstack/api/response/HostResponse.java b/api/src/org/apache/cloudstack/api/response/HostResponse.java index 6b74b4803aa..e4aae571058 100644 --- a/api/src/org/apache/cloudstack/api/response/HostResponse.java +++ b/api/src/org/apache/cloudstack/api/response/HostResponse.java @@ -26,7 +26,9 @@ import com.cloud.hypervisor.Hypervisor.HypervisorType; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; import org.apache.cloudstack.api.BaseResponse; +import org.apache.cloudstack.api.Entity; +@Entity(value=Host.class) public class HostResponse extends BaseResponse { @SerializedName(ApiConstants.ID) @Param(description="the ID of the host") private String id; From 275208e1755de191f31769d65cf9fbea9722d246 Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Tue, 18 Dec 2012 14:47:27 -0800 Subject: [PATCH 139/421] api: Annotate phy network apis Signed-off-by: Rohit Yadav --- .../admin/network/AddNetworkServiceProviderCmd.java | 10 +++++----- .../admin/network/CreateNetworkOfferingCmd.java | 6 +++--- .../admin/network/CreatePhysicalNetworkCmd.java | 11 ++++++----- .../admin/network/CreateStorageNetworkIpRangeCmd.java | 6 +++--- .../cloudstack/api/response/DiskOfferingResponse.java | 3 +++ .../api/response/PhysicalNetworkResponse.java | 3 +++ 6 files changed, 23 insertions(+), 16 deletions(-) diff --git a/api/src/org/apache/cloudstack/api/command/admin/network/AddNetworkServiceProviderCmd.java b/api/src/org/apache/cloudstack/api/command/admin/network/AddNetworkServiceProviderCmd.java index 6146a93020e..d73be640bdf 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/network/AddNetworkServiceProviderCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/network/AddNetworkServiceProviderCmd.java @@ -23,10 +23,10 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseAsyncCreateCmd; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; +import org.apache.cloudstack.api.response.PhysicalNetworkResponse; import org.apache.cloudstack.api.response.ProviderResponse; import com.cloud.async.AsyncJob; import com.cloud.event.EventTypes; @@ -45,12 +45,12 @@ public class AddNetworkServiceProviderCmd extends BaseAsyncCreateCmd { //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - @IdentityMapper(entityTableName="physical_network") - @Parameter(name=ApiConstants.PHYSICAL_NETWORK_ID, type=CommandType.LONG, required=true, description="the Physical Network ID to add the provider to") + @Parameter(name=ApiConstants.PHYSICAL_NETWORK_ID, type=CommandType.UUID, entityType=PhysicalNetworkResponse.class, + required=true, description="the Physical Network ID to add the provider to") private Long physicalNetworkId; - @IdentityMapper(entityTableName="physical_network") - @Parameter(name=ApiConstants.DEST_PHYSICAL_NETWORK_ID, type=CommandType.LONG, description="the destination Physical Network ID to bridge to") + @Parameter(name=ApiConstants.DEST_PHYSICAL_NETWORK_ID, type=CommandType.UUID, entityType=PhysicalNetworkResponse.class, + description="the destination Physical Network ID to bridge to") private Long destinationPhysicalNetworkId; @Parameter(name=ApiConstants.NAME, type=CommandType.STRING, required=true, description="the name for the physical network service provider") diff --git a/api/src/org/apache/cloudstack/api/command/admin/network/CreateNetworkOfferingCmd.java b/api/src/org/apache/cloudstack/api/command/admin/network/CreateNetworkOfferingCmd.java index 0c1a2bdfbb6..867d40280d3 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/network/CreateNetworkOfferingCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/network/CreateNetworkOfferingCmd.java @@ -23,11 +23,11 @@ import java.util.Iterator; import java.util.List; import java.util.Map; +import org.apache.cloudstack.api.response.DiskOfferingResponse; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; @@ -72,8 +72,8 @@ public class CreateNetworkOfferingCmd extends BaseCmd { @Parameter(name=ApiConstants.CONSERVE_MODE, type=CommandType.BOOLEAN, description="true if the network offering is IP conserve mode enabled") private Boolean conserveMode; - @IdentityMapper(entityTableName="disk_offering") - @Parameter(name=ApiConstants.SERVICE_OFFERING_ID, type=CommandType.LONG, description="the service offering ID used by virtual router provider") + @Parameter(name=ApiConstants.SERVICE_OFFERING_ID, type=CommandType.UUID, entityType=DiskOfferingResponse.class, + description="the service offering ID used by virtual router provider") private Long serviceOfferingId; @Parameter(name=ApiConstants.GUEST_IP_TYPE, type=CommandType.STRING, required=true, description="guest type of the network offering: Shared or Isolated") diff --git a/api/src/org/apache/cloudstack/api/command/admin/network/CreatePhysicalNetworkCmd.java b/api/src/org/apache/cloudstack/api/command/admin/network/CreatePhysicalNetworkCmd.java index fc9a1662a98..92e01e4fbf7 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/network/CreatePhysicalNetworkCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/network/CreatePhysicalNetworkCmd.java @@ -23,11 +23,12 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseAsyncCreateCmd; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; import org.apache.cloudstack.api.response.PhysicalNetworkResponse; +import org.apache.cloudstack.api.response.DomainResponse; +import org.apache.cloudstack.api.response.ZoneResponse; import com.cloud.async.AsyncJob; import com.cloud.event.EventTypes; import com.cloud.exception.ResourceAllocationException; @@ -45,8 +46,8 @@ public class CreatePhysicalNetworkCmd extends BaseAsyncCreateCmd { //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - @IdentityMapper(entityTableName="data_center") - @Parameter(name=ApiConstants.ZONE_ID, type=CommandType.LONG, required=true, description="the Zone ID for the physical network") + @Parameter(name=ApiConstants.ZONE_ID, type=CommandType.UUID, entityType= ZoneResponse.class, + required=true, description="the Zone ID for the physical network") private Long zoneId; @Parameter(name=ApiConstants.VLAN, type=CommandType.STRING, description="the VLAN for the physical network") @@ -55,8 +56,8 @@ public class CreatePhysicalNetworkCmd extends BaseAsyncCreateCmd { @Parameter(name=ApiConstants.NETWORK_SPEED, type=CommandType.STRING, description="the speed for the physical network[1G/10G]") private String speed; - @IdentityMapper(entityTableName="domain") - @Parameter(name=ApiConstants.DOMAIN_ID, type=CommandType.LONG, description="domain ID of the account owning a physical network") + @Parameter(name=ApiConstants.DOMAIN_ID, type=CommandType.UUID, entityType=DomainResponse.class, + description="domain ID of the account owning a physical network") private Long domainId; @Parameter(name=ApiConstants.BROADCAST_DOMAIN_RANGE, type=CommandType.STRING, description="the broadcast domain range for the physical network[Pod or Zone]. In Acton release it can be Zone only in Advance zone, and Pod in Basic") diff --git a/api/src/org/apache/cloudstack/api/command/admin/network/CreateStorageNetworkIpRangeCmd.java b/api/src/org/apache/cloudstack/api/command/admin/network/CreateStorageNetworkIpRangeCmd.java index dda92af8ba0..dd34e80d4d2 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/network/CreateStorageNetworkIpRangeCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/network/CreateStorageNetworkIpRangeCmd.java @@ -21,10 +21,10 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; +import org.apache.cloudstack.api.response.PodResponse; import org.apache.cloudstack.api.response.StorageNetworkIpRangeResponse; import com.cloud.dc.StorageNetworkIpRange; import com.cloud.event.EventTypes; @@ -43,8 +43,8 @@ public class CreateStorageNetworkIpRangeCmd extends BaseAsyncCmd { ///////////////////////////////////////////////////// //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - @IdentityMapper(entityTableName="host_pod_ref") - @Parameter(name=ApiConstants.POD_ID, type=CommandType.LONG, required=true, description="UUID of pod where the ip range belongs to") + @Parameter(name=ApiConstants.POD_ID, type=CommandType.UUID, entityType=PodResponse.class, + required=true, description="UUID of pod where the ip range belongs to") private Long podId; @Parameter(name=ApiConstants.START_IP, type=CommandType.STRING, required=true, description="the beginning IP address") diff --git a/api/src/org/apache/cloudstack/api/response/DiskOfferingResponse.java b/api/src/org/apache/cloudstack/api/response/DiskOfferingResponse.java index fad0a850ae5..d155984fbef 100644 --- a/api/src/org/apache/cloudstack/api/response/DiskOfferingResponse.java +++ b/api/src/org/apache/cloudstack/api/response/DiskOfferingResponse.java @@ -18,11 +18,14 @@ package org.apache.cloudstack.api.response; import java.util.Date; +import com.cloud.offering.DiskOffering; import org.apache.cloudstack.api.ApiConstants; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; import org.apache.cloudstack.api.BaseResponse; +import org.apache.cloudstack.api.Entity; +@Entity(value=DiskOffering.class) public class DiskOfferingResponse extends BaseResponse { @SerializedName(ApiConstants.ID) @Param(description="unique ID of the disk offering") private String id; diff --git a/api/src/org/apache/cloudstack/api/response/PhysicalNetworkResponse.java b/api/src/org/apache/cloudstack/api/response/PhysicalNetworkResponse.java index 3cb479b4610..e14c0612cba 100644 --- a/api/src/org/apache/cloudstack/api/response/PhysicalNetworkResponse.java +++ b/api/src/org/apache/cloudstack/api/response/PhysicalNetworkResponse.java @@ -18,12 +18,15 @@ package org.apache.cloudstack.api.response; import java.util.List; +import com.cloud.network.PhysicalNetwork; import org.apache.cloudstack.api.ApiConstants; import com.cloud.utils.IdentityProxy; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; import org.apache.cloudstack.api.BaseResponse; +import org.apache.cloudstack.api.Entity; +@Entity(value=PhysicalNetwork.class) @SuppressWarnings("unused") public class PhysicalNetworkResponse extends BaseResponse { From a6ce3b5450d5b308ea088427739a46831c59406d Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Tue, 18 Dec 2012 14:56:27 -0800 Subject: [PATCH 140/421] api: Annotate Network device,offering,service apis Signed-off-by: Rohit Yadav --- .../api/command/admin/network/DeleteNetworkDeviceCmd.java | 7 +++---- .../command/admin/network/DeleteNetworkOfferingCmd.java | 7 +++---- .../admin/network/DeleteNetworkServiceProviderCmd.java | 8 +++----- .../cloudstack/api/response/NetworkOfferingResponse.java | 3 +++ .../cloudstack/api/response/PhysicalNetworkResponse.java | 3 ++- 5 files changed, 14 insertions(+), 14 deletions(-) diff --git a/api/src/org/apache/cloudstack/api/command/admin/network/DeleteNetworkDeviceCmd.java b/api/src/org/apache/cloudstack/api/command/admin/network/DeleteNetworkDeviceCmd.java index 0a83118f1d1..a88e6de220d 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/network/DeleteNetworkDeviceCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/network/DeleteNetworkDeviceCmd.java @@ -20,11 +20,11 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; import org.apache.cloudstack.network.ExternalNetworkDeviceManager; +import org.apache.cloudstack.api.response.HostResponse; import org.apache.cloudstack.api.response.SuccessResponse; import com.cloud.exception.ConcurrentOperationException; import com.cloud.exception.InsufficientCapacityException; @@ -44,11 +44,10 @@ public class DeleteNetworkDeviceCmd extends BaseCmd { //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - @IdentityMapper(entityTableName="host") - @Parameter(name = ApiConstants.ID, type = CommandType.LONG, required=true, description = "Id of network device to delete") + @Parameter(name = ApiConstants.ID, type = CommandType.UUID, entityType = HostResponse.class, + required=true, description = "Id of network device to delete") private Long id; - public Long getId() { return id; } diff --git a/api/src/org/apache/cloudstack/api/command/admin/network/DeleteNetworkOfferingCmd.java b/api/src/org/apache/cloudstack/api/command/admin/network/DeleteNetworkOfferingCmd.java index 8914e016a41..9c9702eab3d 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/network/DeleteNetworkOfferingCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/network/DeleteNetworkOfferingCmd.java @@ -20,10 +20,10 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; +import org.apache.cloudstack.api.response.NetworkOfferingResponse; import org.apache.cloudstack.api.response.SuccessResponse; import com.cloud.user.Account; @@ -36,11 +36,10 @@ public class DeleteNetworkOfferingCmd extends BaseCmd{ //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - @IdentityMapper(entityTableName="network_offerings") - @Parameter(name=ApiConstants.ID, type=CommandType.LONG, required=true, description="the ID of the network offering") + @Parameter(name=ApiConstants.ID, type=CommandType.UUID, entityType = NetworkOfferingResponse.class, + required=true, description="the ID of the network offering") private Long id; - ///////////////////////////////////////////////////// /////////////////// Accessors /////////////////////// ///////////////////////////////////////////////////// diff --git a/api/src/org/apache/cloudstack/api/command/admin/network/DeleteNetworkServiceProviderCmd.java b/api/src/org/apache/cloudstack/api/command/admin/network/DeleteNetworkServiceProviderCmd.java index c44e21f5c6e..fcf27637aa2 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/network/DeleteNetworkServiceProviderCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/network/DeleteNetworkServiceProviderCmd.java @@ -21,10 +21,10 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; +import org.apache.cloudstack.api.response.PhysicalNetworkResponse; import org.apache.cloudstack.api.response.SuccessResponse; import com.cloud.async.AsyncJob; import com.cloud.event.EventTypes; @@ -42,11 +42,10 @@ public class DeleteNetworkServiceProviderCmd extends BaseAsyncCmd { //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - @IdentityMapper(entityTableName="physical_network_service_providers") - @Parameter(name=ApiConstants.ID, type=CommandType.LONG, required=true, description="the ID of the network service provider") + @Parameter(name=ApiConstants.ID, type=CommandType.UUID, entityType=PhysicalNetworkResponse.class, + required=true, description="the ID of the network service provider") private Long id; - ///////////////////////////////////////////////////// /////////////////// Accessors /////////////////////// ///////////////////////////////////////////////////// @@ -55,7 +54,6 @@ public class DeleteNetworkServiceProviderCmd extends BaseAsyncCmd { return id; } - ///////////////////////////////////////////////////// /////////////// API Implementation/////////////////// ///////////////////////////////////////////////////// diff --git a/api/src/org/apache/cloudstack/api/response/NetworkOfferingResponse.java b/api/src/org/apache/cloudstack/api/response/NetworkOfferingResponse.java index 8fe94a78702..5c071d0150f 100644 --- a/api/src/org/apache/cloudstack/api/response/NetworkOfferingResponse.java +++ b/api/src/org/apache/cloudstack/api/response/NetworkOfferingResponse.java @@ -19,12 +19,15 @@ package org.apache.cloudstack.api.response; import java.util.Date; import java.util.List; +import com.cloud.offering.NetworkOffering; import org.apache.cloudstack.api.ApiConstants; import com.cloud.utils.IdentityProxy; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; import org.apache.cloudstack.api.BaseResponse; +import org.apache.cloudstack.api.Entity; +@Entity(value=NetworkOffering.class) @SuppressWarnings("unused") public class NetworkOfferingResponse extends BaseResponse { @SerializedName("id") @Param(description="the id of the network offering") diff --git a/api/src/org/apache/cloudstack/api/response/PhysicalNetworkResponse.java b/api/src/org/apache/cloudstack/api/response/PhysicalNetworkResponse.java index e14c0612cba..7f6b572f452 100644 --- a/api/src/org/apache/cloudstack/api/response/PhysicalNetworkResponse.java +++ b/api/src/org/apache/cloudstack/api/response/PhysicalNetworkResponse.java @@ -19,6 +19,7 @@ package org.apache.cloudstack.api.response; import java.util.List; import com.cloud.network.PhysicalNetwork; +import com.cloud.network.PhysicalNetworkServiceProvider; import org.apache.cloudstack.api.ApiConstants; import com.cloud.utils.IdentityProxy; import com.cloud.serializer.Param; @@ -26,7 +27,7 @@ import com.google.gson.annotations.SerializedName; import org.apache.cloudstack.api.BaseResponse; import org.apache.cloudstack.api.Entity; -@Entity(value=PhysicalNetwork.class) +@Entity(value={PhysicalNetwork.class, PhysicalNetworkServiceProvider.class}) @SuppressWarnings("unused") public class PhysicalNetworkResponse extends BaseResponse { From 97d9fd01bd54669640f0dbf74909326a2e6c873b Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Tue, 18 Dec 2012 15:16:58 -0800 Subject: [PATCH 141/421] api: Annotate network related api cmd and response classes Signed-off-by: Rohit Yadav --- .../network/DeleteNetworkServiceProviderCmd.java | 4 ++-- .../admin/network/DeletePhysicalNetworkCmd.java | 8 +++----- .../network/DeleteStorageNetworkIpRangeCmd.java | 6 +++--- .../network/ListNetworkServiceProvidersCmd.java | 7 +++---- .../admin/network/ListPhysicalNetworksCmd.java | 10 +++++----- .../network/ListStorageNetworkIpRangeCmd.java | 15 ++++++++------- .../admin/network/UpdateNetworkOfferingCmd.java | 5 ++--- .../network/UpdateNetworkServiceProviderCmd.java | 5 ++--- .../admin/network/UpdatePhysicalNetworkCmd.java | 5 ++--- .../network/UpdateStorageNetworkIpRangeCmd.java | 5 ++--- .../api/response/PhysicalNetworkResponse.java | 2 +- .../cloudstack/api/response/ProviderResponse.java | 3 +++ .../response/StorageNetworkIpRangeResponse.java | 3 +++ 13 files changed, 39 insertions(+), 39 deletions(-) diff --git a/api/src/org/apache/cloudstack/api/command/admin/network/DeleteNetworkServiceProviderCmd.java b/api/src/org/apache/cloudstack/api/command/admin/network/DeleteNetworkServiceProviderCmd.java index fcf27637aa2..688b0abee71 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/network/DeleteNetworkServiceProviderCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/network/DeleteNetworkServiceProviderCmd.java @@ -24,7 +24,7 @@ import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; -import org.apache.cloudstack.api.response.PhysicalNetworkResponse; +import org.apache.cloudstack.api.response.ProviderResponse; import org.apache.cloudstack.api.response.SuccessResponse; import com.cloud.async.AsyncJob; import com.cloud.event.EventTypes; @@ -42,7 +42,7 @@ public class DeleteNetworkServiceProviderCmd extends BaseAsyncCmd { //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - @Parameter(name=ApiConstants.ID, type=CommandType.UUID, entityType=PhysicalNetworkResponse.class, + @Parameter(name=ApiConstants.ID, type=CommandType.UUID, entityType=ProviderResponse.class, required=true, description="the ID of the network service provider") private Long id; diff --git a/api/src/org/apache/cloudstack/api/command/admin/network/DeletePhysicalNetworkCmd.java b/api/src/org/apache/cloudstack/api/command/admin/network/DeletePhysicalNetworkCmd.java index 8f2be210acf..264ebe4653f 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/network/DeletePhysicalNetworkCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/network/DeletePhysicalNetworkCmd.java @@ -21,10 +21,10 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; +import org.apache.cloudstack.api.response.PhysicalNetworkResponse; import org.apache.cloudstack.api.response.SuccessResponse; import com.cloud.async.AsyncJob; import com.cloud.event.EventTypes; @@ -40,11 +40,10 @@ public class DeletePhysicalNetworkCmd extends BaseAsyncCmd { ///////////////////////////////////////////////////// //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - @IdentityMapper(entityTableName="physical_network") - @Parameter(name=ApiConstants.ID, type=CommandType.LONG, required=true, description="the ID of the Physical network") + @Parameter(name=ApiConstants.ID, type=CommandType.UUID, entityType=PhysicalNetworkResponse.class, + required=true, description="the ID of the Physical network") private Long id; - ///////////////////////////////////////////////////// /////////////////// Accessors /////////////////////// ///////////////////////////////////////////////////// @@ -53,7 +52,6 @@ public class DeletePhysicalNetworkCmd extends BaseAsyncCmd { return id; } - ///////////////////////////////////////////////////// /////////////// API Implementation/////////////////// ///////////////////////////////////////////////////// diff --git a/api/src/org/apache/cloudstack/api/command/admin/network/DeleteStorageNetworkIpRangeCmd.java b/api/src/org/apache/cloudstack/api/command/admin/network/DeleteStorageNetworkIpRangeCmd.java index def8dacdcde..9d3209d4d16 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/network/DeleteStorageNetworkIpRangeCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/network/DeleteStorageNetworkIpRangeCmd.java @@ -21,10 +21,10 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; +import org.apache.cloudstack.api.response.StorageNetworkIpRangeResponse; import org.apache.cloudstack.api.response.SuccessResponse; import com.cloud.event.EventTypes; import com.cloud.exception.ConcurrentOperationException; @@ -43,8 +43,8 @@ public class DeleteStorageNetworkIpRangeCmd extends BaseAsyncCmd { //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - @IdentityMapper(entityTableName="dc_storage_network_ip_range") - @Parameter(name=ApiConstants.ID, type=CommandType.LONG, required=true, description="the uuid of the storage network ip range") + @Parameter(name=ApiConstants.ID, type=CommandType.UUID, entityType=StorageNetworkIpRangeResponse.class, + required=true, description="the uuid of the storage network ip range") private Long id; ///////////////////////////////////////////////////// diff --git a/api/src/org/apache/cloudstack/api/command/admin/network/ListNetworkServiceProvidersCmd.java b/api/src/org/apache/cloudstack/api/command/admin/network/ListNetworkServiceProvidersCmd.java index c4713784593..21bec8fef18 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/network/ListNetworkServiceProvidersCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/network/ListNetworkServiceProvidersCmd.java @@ -23,16 +23,15 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseListCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.response.ListResponse; +import org.apache.cloudstack.api.response.PhysicalNetworkResponse; import org.apache.cloudstack.api.response.ProviderResponse; import com.cloud.network.PhysicalNetworkServiceProvider; import com.cloud.user.Account; import com.cloud.utils.Pair; - @Implementation(description="Lists network serviceproviders for a given physical network.", responseObject=ProviderResponse.class, since="3.0.0") public class ListNetworkServiceProvidersCmd extends BaseListCmd { public static final Logger s_logger = Logger.getLogger(ListNetworkServiceProvidersCmd.class.getName()); @@ -42,8 +41,8 @@ public class ListNetworkServiceProvidersCmd extends BaseListCmd { //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - @IdentityMapper(entityTableName="physical_network") - @Parameter(name=ApiConstants.PHYSICAL_NETWORK_ID, type=CommandType.LONG, description="the Physical Network ID") + @Parameter(name=ApiConstants.PHYSICAL_NETWORK_ID, type=CommandType.UUID, entityType=PhysicalNetworkResponse.class, + description="the Physical Network ID") private Long physicalNetworkId; @Parameter(name=ApiConstants.NAME, type=CommandType.STRING, description="list providers by name") diff --git a/api/src/org/apache/cloudstack/api/command/admin/network/ListPhysicalNetworksCmd.java b/api/src/org/apache/cloudstack/api/command/admin/network/ListPhysicalNetworksCmd.java index 099adf80ebc..2b2de2da76f 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/network/ListPhysicalNetworksCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/network/ListPhysicalNetworksCmd.java @@ -19,12 +19,12 @@ package org.apache.cloudstack.api.command.admin.network; import java.util.ArrayList; import java.util.List; +import org.apache.cloudstack.api.response.ZoneResponse; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.BaseListCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; @@ -44,12 +44,12 @@ public class ListPhysicalNetworksCmd extends BaseListCmd { //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - @IdentityMapper(entityTableName="physical_network") - @Parameter(name=ApiConstants.ID, type=CommandType.LONG, description="list physical network by id") + @Parameter(name=ApiConstants.ID, type=CommandType.UUID, entityType=PhysicalNetworkResponse.class, + description="list physical network by id") private Long id; - @IdentityMapper(entityTableName="data_center") - @Parameter(name=ApiConstants.ZONE_ID, type=CommandType.LONG, description="the Zone ID for the physical network") + @Parameter(name=ApiConstants.ZONE_ID, type=CommandType.UUID, entityType=ZoneResponse.class, + description="the Zone ID for the physical network") private Long zoneId; @Parameter(name=ApiConstants.NAME, type=CommandType.STRING, description="search by name") diff --git a/api/src/org/apache/cloudstack/api/command/admin/network/ListStorageNetworkIpRangeCmd.java b/api/src/org/apache/cloudstack/api/command/admin/network/ListStorageNetworkIpRangeCmd.java index 96c9737682a..319bf6a370c 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/network/ListStorageNetworkIpRangeCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/network/ListStorageNetworkIpRangeCmd.java @@ -24,10 +24,11 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.BaseListCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; +import org.apache.cloudstack.api.response.PodResponse; +import org.apache.cloudstack.api.response.ZoneResponse; import org.apache.cloudstack.api.response.ListResponse; import org.apache.cloudstack.api.response.StorageNetworkIpRangeResponse; import com.cloud.dc.StorageNetworkIpRange; @@ -47,16 +48,16 @@ public class ListStorageNetworkIpRangeCmd extends BaseListCmd { //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - @IdentityMapper(entityTableName="dc_storage_network_ip_range") - @Parameter(name=ApiConstants.ID, type=CommandType.LONG, description="optional parameter. Storaget network IP range uuid, if specicied, using it to search the range.") + @Parameter(name=ApiConstants.ID, type=CommandType.UUID, entityType=StorageNetworkIpRangeResponse.class, + description="optional parameter. Storaget network IP range uuid, if specicied, using it to search the range.") private Long rangeId; - @IdentityMapper(entityTableName="host_pod_ref") - @Parameter(name=ApiConstants.POD_ID, type=CommandType.LONG, description="optional parameter. Pod uuid, if specicied and range uuid is absent, using it to search the range.") + @Parameter(name=ApiConstants.POD_ID, type=CommandType.UUID, entityType=PodResponse.class, + description="optional parameter. Pod uuid, if specicied and range uuid is absent, using it to search the range.") private Long podId; - @IdentityMapper(entityTableName="data_center") - @Parameter(name=ApiConstants.ZONE_ID, type=CommandType.LONG, description="optional parameter. Zone uuid, if specicied and both pod uuid and range uuid are absent, using it to search the range.") + @Parameter(name=ApiConstants.ZONE_ID, type=CommandType.UUID, entityType=ZoneResponse.class, + description="optional parameter. Zone uuid, if specicied and both pod uuid and range uuid are absent, using it to search the range.") private Long zoneId; ///////////////////////////////////////////////////// diff --git a/api/src/org/apache/cloudstack/api/command/admin/network/UpdateNetworkOfferingCmd.java b/api/src/org/apache/cloudstack/api/command/admin/network/UpdateNetworkOfferingCmd.java index adf52b32bc0..7c3c0c48a2e 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/network/UpdateNetworkOfferingCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/network/UpdateNetworkOfferingCmd.java @@ -20,7 +20,6 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; @@ -37,8 +36,8 @@ public class UpdateNetworkOfferingCmd extends BaseCmd { //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - @IdentityMapper(entityTableName="network_offerings") - @Parameter(name=ApiConstants.ID, type=CommandType.LONG, description="the id of the network offering") + @Parameter(name=ApiConstants.ID, type=CommandType.UUID, entityType=NetworkOfferingResponse.class, + description="the id of the network offering") private Long id; @Parameter(name=ApiConstants.NAME, type=CommandType.STRING, description="the name of the network offering") diff --git a/api/src/org/apache/cloudstack/api/command/admin/network/UpdateNetworkServiceProviderCmd.java b/api/src/org/apache/cloudstack/api/command/admin/network/UpdateNetworkServiceProviderCmd.java index 6b642410e11..7b8298e3c62 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/network/UpdateNetworkServiceProviderCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/network/UpdateNetworkServiceProviderCmd.java @@ -23,7 +23,6 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; @@ -45,8 +44,8 @@ public class UpdateNetworkServiceProviderCmd extends BaseAsyncCmd { @Parameter(name=ApiConstants.STATE, type=CommandType.STRING, description="Enabled/Disabled/Shutdown the physical network service provider") private String state; - @IdentityMapper(entityTableName="physical_network_service_providers") - @Parameter(name=ApiConstants.ID, type=CommandType.LONG, required=true, description="network service provider id") + @Parameter(name=ApiConstants.ID, type=CommandType.UUID, entityType=ProviderResponse.class, + required=true, description="network service provider id") private Long id; @Parameter(name=ApiConstants.SERVICE_LIST, type=CommandType.LIST, collectionType = CommandType.STRING, description="the list of services to be enabled for this physical network service provider") diff --git a/api/src/org/apache/cloudstack/api/command/admin/network/UpdatePhysicalNetworkCmd.java b/api/src/org/apache/cloudstack/api/command/admin/network/UpdatePhysicalNetworkCmd.java index fc43d5133c2..d6830dfbfe7 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/network/UpdatePhysicalNetworkCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/network/UpdatePhysicalNetworkCmd.java @@ -22,7 +22,6 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseAsyncCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.response.PhysicalNetworkResponse; @@ -40,8 +39,8 @@ public class UpdatePhysicalNetworkCmd extends BaseAsyncCmd { ///////////////////////////////////////////////////// //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - @IdentityMapper(entityTableName="physical_network") - @Parameter(name=ApiConstants.ID, type=CommandType.LONG, required=true, description="physical network id") + @Parameter(name=ApiConstants.ID, type=CommandType.UUID, entityType=PhysicalNetworkResponse.class, + required=true, description="physical network id") private Long id; @Parameter(name=ApiConstants.NETWORK_SPEED, type=CommandType.STRING, description="the speed for the physical network[1G/10G]") diff --git a/api/src/org/apache/cloudstack/api/command/admin/network/UpdateStorageNetworkIpRangeCmd.java b/api/src/org/apache/cloudstack/api/command/admin/network/UpdateStorageNetworkIpRangeCmd.java index 094a908bdf2..64bb9775e29 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/network/UpdateStorageNetworkIpRangeCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/network/UpdateStorageNetworkIpRangeCmd.java @@ -21,7 +21,6 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; @@ -42,8 +41,8 @@ public class UpdateStorageNetworkIpRangeCmd extends BaseAsyncCmd { ///////////////////////////////////////////////////// //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - @IdentityMapper(entityTableName="dc_storage_network_ip_range") - @Parameter(name=ApiConstants.ID, type=CommandType.LONG, required=true, description="UUID of storage network ip range") + @Parameter(name=ApiConstants.ID, type=CommandType.UUID, entityType=StorageNetworkIpRangeResponse.class, + required=true, description="UUID of storage network ip range") private Long id; @Parameter(name=ApiConstants.START_IP, type=CommandType.STRING, description="the beginning IP address") diff --git a/api/src/org/apache/cloudstack/api/response/PhysicalNetworkResponse.java b/api/src/org/apache/cloudstack/api/response/PhysicalNetworkResponse.java index 7f6b572f452..36302aef491 100644 --- a/api/src/org/apache/cloudstack/api/response/PhysicalNetworkResponse.java +++ b/api/src/org/apache/cloudstack/api/response/PhysicalNetworkResponse.java @@ -27,7 +27,7 @@ import com.google.gson.annotations.SerializedName; import org.apache.cloudstack.api.BaseResponse; import org.apache.cloudstack.api.Entity; -@Entity(value={PhysicalNetwork.class, PhysicalNetworkServiceProvider.class}) +@Entity(value=PhysicalNetwork.class) @SuppressWarnings("unused") public class PhysicalNetworkResponse extends BaseResponse { diff --git a/api/src/org/apache/cloudstack/api/response/ProviderResponse.java b/api/src/org/apache/cloudstack/api/response/ProviderResponse.java index 4ff34f7c6b9..52cb0ac91bf 100644 --- a/api/src/org/apache/cloudstack/api/response/ProviderResponse.java +++ b/api/src/org/apache/cloudstack/api/response/ProviderResponse.java @@ -18,12 +18,15 @@ package org.apache.cloudstack.api.response; import java.util.List; +import com.cloud.network.PhysicalNetworkServiceProvider; import org.apache.cloudstack.api.ApiConstants; import com.cloud.utils.IdentityProxy; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; import org.apache.cloudstack.api.BaseResponse; +import org.apache.cloudstack.api.Entity; +@Entity(value=PhysicalNetworkServiceProvider.class) @SuppressWarnings("unused") public class ProviderResponse extends BaseResponse { diff --git a/api/src/org/apache/cloudstack/api/response/StorageNetworkIpRangeResponse.java b/api/src/org/apache/cloudstack/api/response/StorageNetworkIpRangeResponse.java index beb2fbd8ae3..ec814fc1aa0 100644 --- a/api/src/org/apache/cloudstack/api/response/StorageNetworkIpRangeResponse.java +++ b/api/src/org/apache/cloudstack/api/response/StorageNetworkIpRangeResponse.java @@ -16,11 +16,14 @@ // under the License. package org.apache.cloudstack.api.response; +import com.cloud.dc.StorageNetworkIpRange; import org.apache.cloudstack.api.ApiConstants; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; import org.apache.cloudstack.api.BaseResponse; +import org.apache.cloudstack.api.Entity; +@Entity(value=StorageNetworkIpRange.class) public class StorageNetworkIpRangeResponse extends BaseResponse { @SerializedName(ApiConstants.ID) @Param(description="the uuid of storage network IP range.") private String uuid; From 4b75132aa241db84af60f815c177f27a7cdd17ae Mon Sep 17 00:00:00 2001 From: Min Chen Date: Tue, 18 Dec 2012 16:33:12 -0800 Subject: [PATCH 142/421] Remove IdentityProxy from Response classes. Signed-off-by: Min Chen --- .../ListRecurringSnapshotScheduleCmd.java | 8 +- api/src/com/cloud/dc/Pod.java | 2 + .../network/Site2SiteCustomerGateway.java | 1 + .../cloud/network/Site2SiteVpnConnection.java | 1 + .../cloud/network/Site2SiteVpnGateway.java | 1 + .../com/cloud/network/vpc/StaticRoute.java | 2 + .../cloud/network/vpc/StaticRouteProfile.java | 8 + .../com/cloud/offering/NetworkOffering.java | 2 + api/src/com/cloud/storage/Swift.java | 2 + api/src/com/cloud/storage/Volume.java | 2 + .../storage/snapshot/SnapshotPolicy.java | 2 + .../storage/snapshot/SnapshotSchedule.java | 2 + .../template/VirtualMachineTemplate.java | 2 + .../cloudstack/api/ResponseGenerator.java | 5 + .../response/IpForwardingRuleResponse.java | 21 +- .../api/response/IsoVmResponse.java | 31 +- .../response/LBStickinessPolicyResponse.java | 11 +- .../api/response/LBStickinessResponse.java | 19 +- .../api/response/LoadBalancerResponse.java | 19 +- .../api/response/NetworkACLResponse.java | 7 +- .../api/response/NetworkDeviceResponse.java | 11 +- .../api/response/NetworkOfferingResponse.java | 14 +- .../api/response/NetworkResponse.java | 37 +- .../api/response/PhysicalNetworkResponse.java | 13 +- .../cloudstack/api/response/PodResponse.java | 22 +- .../api/response/PrivateGatewayResponse.java | 25 +- .../api/response/ProviderResponse.java | 21 +- .../api/response/RemoteAccessVpnResponse.java | 7 +- .../Site2SiteCustomerGatewayResponse.java | 7 +- .../Site2SiteVpnConnectionResponse.java | 19 +- .../response/Site2SiteVpnGatewayResponse.java | 13 +- .../api/response/SnapshotPolicyResponse.java | 21 +- .../api/response/SnapshotResponse.java | 23 +- .../response/SnapshotScheduleResponse.java | 31 +- .../api/response/StaticRouteResponse.java | 19 +- .../api/response/StoragePoolResponse.java | 47 ++- .../api/response/SwiftResponse.java | 11 +- .../response/SystemVmInstanceResponse.java | 26 +- .../api/response/SystemVmResponse.java | 53 ++- .../response/TemplatePermissionsResponse.java | 13 +- .../api/response/TemplateResponse.java | 48 ++- .../com/cloud/storage/SnapshotPolicyVO.java | 28 +- .../com/cloud/storage/SnapshotScheduleVO.java | 28 +- core/src/com/cloud/storage/SwiftVO.java | 16 +- core/src/com/cloud/storage/VMTemplateVO.java | 34 +- .../storage/snapshot/SnapshotSchedule.java | 14 +- server/src/com/cloud/api/ApiDBUtils.java | 9 + .../src/com/cloud/api/ApiResponseHelper.java | 353 ++++++++++++------ server/src/com/cloud/dc/HostPodVO.java | 32 +- .../ExternalFirewallDeviceManagerImpl.java | 70 ++-- ...ExternalLoadBalancerDeviceManagerImpl.java | 4 +- .../ExternalNetworkDeviceManagerImpl.java | 26 +- .../com/cloud/network/vpc/StaticRouteVO.java | 24 +- .../cloud/offerings/NetworkOfferingVO.java | 10 +- .../response/ExternalFirewallResponse.java | 85 +++-- .../ExternalLoadBalancerResponse.java | 61 ++- 56 files changed, 772 insertions(+), 651 deletions(-) diff --git a/api/src/com/cloud/api/commands/ListRecurringSnapshotScheduleCmd.java b/api/src/com/cloud/api/commands/ListRecurringSnapshotScheduleCmd.java index 065383fff93..7fb6e0675f0 100644 --- a/api/src/com/cloud/api/commands/ListRecurringSnapshotScheduleCmd.java +++ b/api/src/com/cloud/api/commands/ListRecurringSnapshotScheduleCmd.java @@ -68,13 +68,7 @@ public class ListRecurringSnapshotScheduleCmd extends BaseListCmd { ListResponse response = new ListResponse(); List snapshotScheduleResponses = new ArrayList(); for (SnapshotSchedule snapshotSchedule : snapshotSchedules) { - SnapshotScheduleResponse snapSchedResponse = new SnapshotScheduleResponse(); - snapSchedResponse.setId(snapshotSchedule.getId()); - snapSchedResponse.setVolumeId(snapshotSchedule.getVolumeId()); - snapSchedResponse.setSnapshotPolicyId(snapshotSchedule.getPolicyId()); - snapSchedResponse.setScheduled(snapshotSchedule.getScheduledTimestamp()); - - snapSchedResponse.setObjectName("snapshot"); + SnapshotScheduleResponse snapSchedResponse = _responseGenerator.createSnapshotScheduleResponse(snapshotSchedule); snapshotScheduleResponses.add(snapSchedResponse); } diff --git a/api/src/com/cloud/dc/Pod.java b/api/src/com/cloud/dc/Pod.java index d0a2ce913af..cce493d5ef7 100644 --- a/api/src/com/cloud/dc/Pod.java +++ b/api/src/com/cloud/dc/Pod.java @@ -28,6 +28,8 @@ public interface Pod extends Grouping { */ long getId(); + String getUuid(); + String getCidrAddress(); int getCidrSize(); diff --git a/api/src/com/cloud/network/Site2SiteCustomerGateway.java b/api/src/com/cloud/network/Site2SiteCustomerGateway.java index e53d099a51f..35ddb3b6a3d 100644 --- a/api/src/com/cloud/network/Site2SiteCustomerGateway.java +++ b/api/src/com/cloud/network/Site2SiteCustomerGateway.java @@ -22,6 +22,7 @@ import com.cloud.acl.ControlledEntity; public interface Site2SiteCustomerGateway extends ControlledEntity { public long getId(); + public String getUuid(); public String getGatewayIp(); public String getGuestCidrList(); public String getIpsecPsk(); diff --git a/api/src/com/cloud/network/Site2SiteVpnConnection.java b/api/src/com/cloud/network/Site2SiteVpnConnection.java index 0986c9dc4e4..e6d722d4ca5 100644 --- a/api/src/com/cloud/network/Site2SiteVpnConnection.java +++ b/api/src/com/cloud/network/Site2SiteVpnConnection.java @@ -28,6 +28,7 @@ public interface Site2SiteVpnConnection extends ControlledEntity { Error, } public long getId(); + public String getUuid(); public long getVpnGatewayId(); public long getCustomerGatewayId(); public State getState(); diff --git a/api/src/com/cloud/network/Site2SiteVpnGateway.java b/api/src/com/cloud/network/Site2SiteVpnGateway.java index ad79b27a3c6..465ca533783 100644 --- a/api/src/com/cloud/network/Site2SiteVpnGateway.java +++ b/api/src/com/cloud/network/Site2SiteVpnGateway.java @@ -22,6 +22,7 @@ import com.cloud.acl.ControlledEntity; public interface Site2SiteVpnGateway extends ControlledEntity { public long getId(); + public String getUuid(); public long getAddrId(); public long getVpcId(); public Date getRemoved(); diff --git a/api/src/com/cloud/network/vpc/StaticRoute.java b/api/src/com/cloud/network/vpc/StaticRoute.java index 9a900b2b285..41ab4fb5950 100644 --- a/api/src/com/cloud/network/vpc/StaticRoute.java +++ b/api/src/com/cloud/network/vpc/StaticRoute.java @@ -51,5 +51,7 @@ public interface StaticRoute extends ControlledEntity{ */ long getId(); + String getUuid(); + } diff --git a/api/src/com/cloud/network/vpc/StaticRouteProfile.java b/api/src/com/cloud/network/vpc/StaticRouteProfile.java index 0771aff5f7f..f7cd17c485f 100644 --- a/api/src/com/cloud/network/vpc/StaticRouteProfile.java +++ b/api/src/com/cloud/network/vpc/StaticRouteProfile.java @@ -18,6 +18,7 @@ package com.cloud.network.vpc; public class StaticRouteProfile implements StaticRoute{ private long id; + private String uuid; private String targetCidr; private long accountId; private long domainId; @@ -32,6 +33,7 @@ public class StaticRouteProfile implements StaticRoute{ public StaticRouteProfile(StaticRoute staticRoute, VpcGateway gateway) { this.id = staticRoute.getId(); + this.uuid = staticRoute.getUuid(); this.targetCidr = staticRoute.getCidr(); this.accountId = staticRoute.getAccountId(); this.domainId = staticRoute.getDomainId(); @@ -79,6 +81,12 @@ public class StaticRouteProfile implements StaticRoute{ return id; } + + @Override + public String getUuid() { + return uuid; + } + public String getVlanTag() { return vlanTag; } diff --git a/api/src/com/cloud/offering/NetworkOffering.java b/api/src/com/cloud/offering/NetworkOffering.java index ef9bead8f07..153e6c07053 100644 --- a/api/src/com/cloud/offering/NetworkOffering.java +++ b/api/src/com/cloud/offering/NetworkOffering.java @@ -53,6 +53,8 @@ public interface NetworkOffering { long getId(); + String getUuid(); + /** * @return name for the network offering. */ diff --git a/api/src/com/cloud/storage/Swift.java b/api/src/com/cloud/storage/Swift.java index 54a670cefe1..5af1999e311 100644 --- a/api/src/com/cloud/storage/Swift.java +++ b/api/src/com/cloud/storage/Swift.java @@ -21,6 +21,8 @@ import com.cloud.agent.api.to.SwiftTO; public interface Swift { public long getId(); + public String getUuid(); + public String getUrl(); public String getAccount(); diff --git a/api/src/com/cloud/storage/Volume.java b/api/src/com/cloud/storage/Volume.java index d24c4fd49d0..1a92bd10c6f 100755 --- a/api/src/com/cloud/storage/Volume.java +++ b/api/src/com/cloud/storage/Volume.java @@ -95,6 +95,8 @@ public interface Volume extends ControlledEntity, BasedOn, StateObject stickinessPolicies; - public void setlbRuleId(Long lbRuleId) { - this.lbRuleId.setValue(lbRuleId); + public void setlbRuleId(String lbRuleId) { + this.lbRuleId = lbRuleId; } public void setRules(List policies) { @@ -97,12 +96,12 @@ public class LBStickinessResponse extends BaseResponse { this.accountName = accountName; } - public void setDomainId(Long domainId) { - this.domainId.setValue(domainId); + public void setDomainId(String domainId) { + this.domainId = domainId; } - public void setZoneId(Long zoneId) { - this.zoneId.setValue(zoneId); + public void setZoneId(String zoneId) { + this.zoneId = zoneId; } public String getDomainName() { diff --git a/api/src/org/apache/cloudstack/api/response/LoadBalancerResponse.java b/api/src/org/apache/cloudstack/api/response/LoadBalancerResponse.java index c1549b06a33..bd5efdba1e4 100644 --- a/api/src/org/apache/cloudstack/api/response/LoadBalancerResponse.java +++ b/api/src/org/apache/cloudstack/api/response/LoadBalancerResponse.java @@ -20,7 +20,6 @@ import java.util.List; import org.apache.cloudstack.api.ApiConstants; import com.cloud.serializer.Param; -import com.cloud.utils.IdentityProxy; import com.google.gson.annotations.SerializedName; import org.apache.cloudstack.api.BaseResponse; @@ -28,7 +27,7 @@ import org.apache.cloudstack.api.BaseResponse; public class LoadBalancerResponse extends BaseResponse implements ControlledEntityResponse { @SerializedName(ApiConstants.ID) @Param(description = "the load balancer rule ID") - private IdentityProxy id = new IdentityProxy("firewall_rules"); + private String id; @SerializedName(ApiConstants.NAME) @Param(description = "the name of the load balancer") @@ -40,7 +39,7 @@ public class LoadBalancerResponse extends BaseResponse implements ControlledEnti @SerializedName(ApiConstants.PUBLIC_IP_ID) @Param(description = "the public ip address id") - private IdentityProxy publicIpId = new IdentityProxy("user_ip_address"); + private String publicIpId; @SerializedName(ApiConstants.PUBLIC_IP) @Param(description = "the public ip address") @@ -85,13 +84,13 @@ public class LoadBalancerResponse extends BaseResponse implements ControlledEnti @SerializedName(ApiConstants.ZONE_ID) @Param(description = "the id of the zone the rule belongs to") - private IdentityProxy zoneId = new IdentityProxy("data_center"); + private String zoneId; @SerializedName(ApiConstants.TAGS) @Param(description="the list of resource tags associated with load balancer", responseObject = ResourceTagResponse.class) private List tags; - public void setId(Long id) { - this.id.setValue(id); + public void setId(String id) { + this.id = id; } public void setName(String name) { @@ -139,12 +138,12 @@ public class LoadBalancerResponse extends BaseResponse implements ControlledEnti this.state = state; } - public void setPublicIpId(Long publicIpId) { - this.publicIpId.setValue(publicIpId); + public void setPublicIpId(String publicIpId) { + this.publicIpId = publicIpId; } - public void setZoneId(Long zoneId) { - this.zoneId.setValue(zoneId); + public void setZoneId(String zoneId) { + this.zoneId = zoneId; } @Override diff --git a/api/src/org/apache/cloudstack/api/response/NetworkACLResponse.java b/api/src/org/apache/cloudstack/api/response/NetworkACLResponse.java index 1b670218814..e16a1a5a434 100644 --- a/api/src/org/apache/cloudstack/api/response/NetworkACLResponse.java +++ b/api/src/org/apache/cloudstack/api/response/NetworkACLResponse.java @@ -20,14 +20,13 @@ import java.util.List; import org.apache.cloudstack.api.ApiConstants; import com.cloud.serializer.Param; -import com.cloud.utils.IdentityProxy; import com.google.gson.annotations.SerializedName; import org.apache.cloudstack.api.BaseResponse; @SuppressWarnings("unused") public class NetworkACLResponse extends BaseResponse { @SerializedName(ApiConstants.ID) @Param(description="the ID of the ACL") - private IdentityProxy id = new IdentityProxy("firewall_rules"); + private String id; @SerializedName(ApiConstants.PROTOCOL) @Param(description="the protocol of the ACL") private String protocol; @@ -57,8 +56,8 @@ public class NetworkACLResponse extends BaseResponse { responseObject = ResourceTagResponse.class) private List tags; - public void setId(Long id) { - this.id.setValue(id); + public void setId(String id) { + this.id = id; } public void setProtocol(String protocol) { diff --git a/api/src/org/apache/cloudstack/api/response/NetworkDeviceResponse.java b/api/src/org/apache/cloudstack/api/response/NetworkDeviceResponse.java index 30900e382e6..dc67b53e1ed 100644 --- a/api/src/org/apache/cloudstack/api/response/NetworkDeviceResponse.java +++ b/api/src/org/apache/cloudstack/api/response/NetworkDeviceResponse.java @@ -17,7 +17,6 @@ package org.apache.cloudstack.api.response; import org.apache.cloudstack.api.ApiConstants; -import com.cloud.utils.IdentityProxy; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; import org.apache.cloudstack.api.BaseResponse; @@ -25,13 +24,13 @@ import org.apache.cloudstack.api.BaseResponse; public class NetworkDeviceResponse extends BaseResponse { @SerializedName(ApiConstants.ID) @Param(description = "the ID of the network device") - private IdentityProxy id = new IdentityProxy("host"); + private String id; - 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; } } diff --git a/api/src/org/apache/cloudstack/api/response/NetworkOfferingResponse.java b/api/src/org/apache/cloudstack/api/response/NetworkOfferingResponse.java index 5c071d0150f..5988a2fc0a4 100644 --- a/api/src/org/apache/cloudstack/api/response/NetworkOfferingResponse.java +++ b/api/src/org/apache/cloudstack/api/response/NetworkOfferingResponse.java @@ -21,7 +21,6 @@ import java.util.List; import com.cloud.offering.NetworkOffering; import org.apache.cloudstack.api.ApiConstants; -import com.cloud.utils.IdentityProxy; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; import org.apache.cloudstack.api.BaseResponse; @@ -31,7 +30,7 @@ import org.apache.cloudstack.api.Entity; @SuppressWarnings("unused") public class NetworkOfferingResponse extends BaseResponse { @SerializedName("id") @Param(description="the id of the network offering") - private final IdentityProxy id = new IdentityProxy("network_offerings"); + private String id; @SerializedName(ApiConstants.NAME) @Param(description="the name of the network offering") private String name; @@ -73,7 +72,7 @@ public class NetworkOfferingResponse extends BaseResponse { private String guestIpType; @SerializedName(ApiConstants.SERVICE_OFFERING_ID) @Param(description="the ID of the service offering used by virtual router provider") - private IdentityProxy serviceOfferingId = new IdentityProxy("disk_offering"); + private String serviceOfferingId; @SerializedName(ApiConstants.SERVICE) @Param(description="the list of supported services", responseObject = ServiceResponse.class) private List services; @@ -82,8 +81,8 @@ public class NetworkOfferingResponse extends BaseResponse { private Boolean forVpc; - public void setId(Long id) { - this.id.setValue(id); + public void setId(String id) { + this.id = id; } public void setName(String name) { @@ -138,11 +137,8 @@ public class NetworkOfferingResponse extends BaseResponse { this.guestIpType = type; } - public void setServiceOfferingId(Long serviceOfferingId) { - this.serviceOfferingId.setValue(serviceOfferingId); - } - public void setServiceOfferingId(IdentityProxy serviceOfferingId) { + public void setServiceOfferingId(String serviceOfferingId) { this.serviceOfferingId = serviceOfferingId; } diff --git a/api/src/org/apache/cloudstack/api/response/NetworkResponse.java b/api/src/org/apache/cloudstack/api/response/NetworkResponse.java index 03fa586076c..fe71371e81d 100644 --- a/api/src/org/apache/cloudstack/api/response/NetworkResponse.java +++ b/api/src/org/apache/cloudstack/api/response/NetworkResponse.java @@ -22,7 +22,6 @@ import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseResponse; import org.apache.cloudstack.api.Entity; import com.cloud.projects.ProjectAccount; -import com.cloud.utils.IdentityProxy; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; @@ -31,7 +30,7 @@ import com.google.gson.annotations.SerializedName; public class NetworkResponse extends BaseResponse implements ControlledEntityResponse{ @SerializedName(ApiConstants.ID) @Param(description="the id of the network") - private IdentityProxy id = new IdentityProxy("networks"); + private String id; @SerializedName(ApiConstants.NAME) @Param(description="the name of the network") private String name; @@ -55,13 +54,13 @@ public class NetworkResponse extends BaseResponse implements ControlledEntityRes private String cidr; @SerializedName(ApiConstants.ZONE_ID) @Param(description="zone id of the network") - private IdentityProxy zoneId = new IdentityProxy("data_center"); + private String zoneId; @SerializedName(ApiConstants.ZONE_NAME) @Param(description="the name of the zone the network belongs to") private String zoneName; @SerializedName("networkofferingid") @Param(description="network offering id the network is created from") - private IdentityProxy networkOfferingId = new IdentityProxy("network_offerings"); + private String networkOfferingId; @SerializedName("networkofferingname") @Param(description="name of the network offering the network is created from") private String networkOfferingName; @@ -79,7 +78,7 @@ public class NetworkResponse extends BaseResponse implements ControlledEntityRes private String state; @SerializedName("related") @Param(description="related to what other network configuration") - private IdentityProxy related = new IdentityProxy("networks"); + private String related; @SerializedName("broadcasturi") @Param(description="broadcast uri of the network. This parameter is visible to ROOT admins only") private String broadcastUri; @@ -127,7 +126,7 @@ public class NetworkResponse extends BaseResponse implements ControlledEntityRes private String networkDomain; @SerializedName(ApiConstants.PHYSICAL_NETWORK_ID) @Param(description="the physical network id") - private IdentityProxy physicalNetworkId = new IdentityProxy("physical_network"); + private String physicalNetworkId; @SerializedName(ApiConstants.RESTART_REQUIRED) @Param(description="true network requires restart") private Boolean restartRequired; @@ -136,7 +135,7 @@ public class NetworkResponse extends BaseResponse implements ControlledEntityRes private Boolean specifyIpRanges; @SerializedName(ApiConstants.VPC_ID) @Param(description="VPC the network belongs to") - private IdentityProxy vpcId = new IdentityProxy("vpc"); + private String vpcId; @SerializedName(ApiConstants.CAN_USE_FOR_DEPLOY) @Param(description="list networks available for vm deployment") private Boolean canUseForDeploy; @@ -144,8 +143,8 @@ public class NetworkResponse extends BaseResponse implements ControlledEntityRes @SerializedName(ApiConstants.TAGS) @Param(description="the list of resource tags associated with network", responseObject = ResourceTagResponse.class) private List tags; - public void setId(Long id) { - this.id.setValue(id); + public void setId(String id) { + this.id = id; } public void setName(String name) { @@ -168,20 +167,20 @@ public class NetworkResponse extends BaseResponse implements ControlledEntityRes this.netmask = netmask; } - public void setZoneId(Long zoneId) { - this.zoneId.setValue(zoneId); + public void setZoneId(String zoneId) { + this.zoneId = zoneId; } - public void setNetworkOfferingId(Long networkOfferingId) { - this.networkOfferingId.setValue(networkOfferingId); + public void setNetworkOfferingId(String networkOfferingId) { + this.networkOfferingId = networkOfferingId; } public void setState(String state) { this.state = state; } - public void setRelated(Long related) { - this.related.setValue(related); + public void setRelated(String related) { + this.related = related; } public void setBroadcastUri(String broadcastUri) { @@ -259,8 +258,8 @@ public class NetworkResponse extends BaseResponse implements ControlledEntityRes this.projectName = projectName; } - public void setPhysicalNetworkId(Long physicalNetworkId) { - this.physicalNetworkId.setValue(physicalNetworkId); + public void setPhysicalNetworkId(String physicalNetworkId) { + this.physicalNetworkId = physicalNetworkId; } public void setAclType(String aclType) { @@ -287,8 +286,8 @@ public class NetworkResponse extends BaseResponse implements ControlledEntityRes this.specifyIpRanges = specifyIpRanges; } - public void setVpcId(Long vpcId) { - this.vpcId.setValue(vpcId); + public void setVpcId(String vpcId) { + this.vpcId = vpcId; } public void setCanUseForDeploy(Boolean canUseForDeploy) { diff --git a/api/src/org/apache/cloudstack/api/response/PhysicalNetworkResponse.java b/api/src/org/apache/cloudstack/api/response/PhysicalNetworkResponse.java index 36302aef491..4f7f832c60d 100644 --- a/api/src/org/apache/cloudstack/api/response/PhysicalNetworkResponse.java +++ b/api/src/org/apache/cloudstack/api/response/PhysicalNetworkResponse.java @@ -21,7 +21,6 @@ import java.util.List; import com.cloud.network.PhysicalNetwork; import com.cloud.network.PhysicalNetworkServiceProvider; import org.apache.cloudstack.api.ApiConstants; -import com.cloud.utils.IdentityProxy; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; import org.apache.cloudstack.api.BaseResponse; @@ -41,7 +40,7 @@ public class PhysicalNetworkResponse extends BaseResponse { private String broadcastDomainRange; @SerializedName(ApiConstants.ZONE_ID) @Param(description="zone id of the physical network") - private IdentityProxy zoneId = new IdentityProxy("data_center"); + private String zoneId; @SerializedName(ApiConstants.STATE) @Param(description="state of the physical network") private String state; @@ -50,7 +49,7 @@ public class PhysicalNetworkResponse extends BaseResponse { private String vlan; @SerializedName(ApiConstants.DOMAIN_ID) @Param(description="the domain id of the physical network owner") - private IdentityProxy domainId = new IdentityProxy("domain"); + private String domainId; @SerializedName(ApiConstants.TAGS) @Param(description="comma separated tag") private String tags; @@ -65,8 +64,8 @@ public class PhysicalNetworkResponse extends BaseResponse { this.id = uuid; } - public void setZoneId(Long zoneId) { - this.zoneId.setValue(zoneId); + public void setZoneId(String zoneId) { + this.zoneId = zoneId; } public void setState(String state) { @@ -74,8 +73,8 @@ public class PhysicalNetworkResponse extends BaseResponse { } - public void setDomainId(Long domainId) { - this.domainId.setValue(domainId); + public void setDomainId(String domainId) { + this.domainId = domainId; } public void setVlan(String vlan) { diff --git a/api/src/org/apache/cloudstack/api/response/PodResponse.java b/api/src/org/apache/cloudstack/api/response/PodResponse.java index 3e3cd4da26c..33184df86d0 100644 --- a/api/src/org/apache/cloudstack/api/response/PodResponse.java +++ b/api/src/org/apache/cloudstack/api/response/PodResponse.java @@ -21,8 +21,6 @@ import java.util.List; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.Entity; -import com.cloud.utils.IdentityProxy; -import com.cloud.dc.DataCenter; import com.cloud.dc.Pod; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; @@ -31,13 +29,13 @@ import org.apache.cloudstack.api.BaseResponse; @Entity(value = Pod.class) public class PodResponse extends BaseResponse { @SerializedName("id") @Param(description="the ID of the Pod") - private IdentityProxy id = new IdentityProxy("host_pod_ref"); + private String id; @SerializedName("name") @Param(description="the name of the Pod") private String name; @SerializedName("zoneid") @Param(description="the Zone ID of the Pod") - private IdentityProxy zoneId = new IdentityProxy("data_center"); + private String zoneId; @SerializedName(ApiConstants.ZONE_NAME) @Param(description="the Zone name of the Pod") private String zoneName; @@ -60,12 +58,12 @@ public class PodResponse extends BaseResponse { @SerializedName("capacity") @Param(description="the capacity of the Pod", responseObject = CapacityResponse.class) private List capacitites; - 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 String getName() { @@ -76,12 +74,12 @@ public class PodResponse extends BaseResponse { this.name = name; } - public Long getZoneId() { - return zoneId.getValue(); + public String getZoneId() { + return zoneId; } - public void setZoneId(Long zoneId) { - this.zoneId.setValue(zoneId); + public void setZoneId(String zoneId) { + this.zoneId = zoneId; } public String getZoneName() { diff --git a/api/src/org/apache/cloudstack/api/response/PrivateGatewayResponse.java b/api/src/org/apache/cloudstack/api/response/PrivateGatewayResponse.java index 931a6de15dc..fb5c9890f9f 100644 --- a/api/src/org/apache/cloudstack/api/response/PrivateGatewayResponse.java +++ b/api/src/org/apache/cloudstack/api/response/PrivateGatewayResponse.java @@ -17,7 +17,6 @@ package org.apache.cloudstack.api.response; import org.apache.cloudstack.api.ApiConstants; import com.cloud.serializer.Param; -import com.cloud.utils.IdentityProxy; import com.google.gson.annotations.SerializedName; import org.apache.cloudstack.api.BaseResponse; @@ -25,7 +24,7 @@ import org.apache.cloudstack.api.BaseResponse; public class PrivateGatewayResponse extends BaseResponse implements ControlledEntityResponse{ @SerializedName(ApiConstants.ID) @Param(description="the id of the private gateway") - private IdentityProxy id = new IdentityProxy("vpc_gateways"); + private String id; @SerializedName(ApiConstants.GATEWAY) @Param(description="the gateway") private String gateway; @@ -37,7 +36,7 @@ public class PrivateGatewayResponse extends BaseResponse implements ControlledEn private String address; @SerializedName(ApiConstants.ZONE_ID) @Param(description="zone id of the private gateway") - private IdentityProxy zoneId = new IdentityProxy("data_center"); + private String zoneId; @SerializedName(ApiConstants.ZONE_NAME) @Param(description="the name of the zone the private gateway belongs to") private String zoneName; @@ -46,10 +45,10 @@ public class PrivateGatewayResponse extends BaseResponse implements ControlledEn private String vlan; @SerializedName(ApiConstants.VPC_ID) @Param(description="VPC the private gateaway belongs to") - private IdentityProxy vpcId = new IdentityProxy("vpc"); + private String vpcId; @SerializedName(ApiConstants.PHYSICAL_NETWORK_ID) @Param(description="the physical network id") - private IdentityProxy physicalNetworkId = new IdentityProxy("physical_network"); + private String physicalNetworkId; @SerializedName(ApiConstants.ACCOUNT) @Param(description = "the account associated with the private gateway") @@ -73,8 +72,8 @@ public class PrivateGatewayResponse extends BaseResponse implements ControlledEn private String state; - public void setId(Long id) { - this.id.setValue(id); + public void setId(String id) { + this.id = id; } public void setGateway(String gateway) { @@ -85,8 +84,8 @@ public class PrivateGatewayResponse extends BaseResponse implements ControlledEn this.netmask = netmask; } - public void setZoneId(Long zoneId) { - this.zoneId.setValue(zoneId); + public void setZoneId(String zoneId) { + this.zoneId = zoneId; } public void setVlan(String vlan) { @@ -97,16 +96,16 @@ public class PrivateGatewayResponse extends BaseResponse implements ControlledEn this.zoneName = zoneName; } - public void setVpcId(Long vpcId) { - this.vpcId.setValue(vpcId); + public void setVpcId(String vpcId) { + this.vpcId = vpcId; } public void setAddress(String address) { this.address = address; } - public void setPhysicalNetworkId(Long physicalNetworkId) { - this.physicalNetworkId.setValue(physicalNetworkId); + public void setPhysicalNetworkId(String physicalNetworkId) { + this.physicalNetworkId = physicalNetworkId; } @Override diff --git a/api/src/org/apache/cloudstack/api/response/ProviderResponse.java b/api/src/org/apache/cloudstack/api/response/ProviderResponse.java index 52cb0ac91bf..d564dad08f9 100644 --- a/api/src/org/apache/cloudstack/api/response/ProviderResponse.java +++ b/api/src/org/apache/cloudstack/api/response/ProviderResponse.java @@ -20,7 +20,6 @@ import java.util.List; import com.cloud.network.PhysicalNetworkServiceProvider; import org.apache.cloudstack.api.ApiConstants; -import com.cloud.utils.IdentityProxy; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; import org.apache.cloudstack.api.BaseResponse; @@ -34,10 +33,10 @@ public class ProviderResponse extends BaseResponse { private String name; @SerializedName(ApiConstants.PHYSICAL_NETWORK_ID) @Param(description="the physical network this belongs to") - private IdentityProxy physicalNetworkId = new IdentityProxy("physical_network"); + private String physicalNetworkId; @SerializedName(ApiConstants.DEST_PHYSICAL_NETWORK_ID) @Param(description="the destination physical network") - private IdentityProxy destinationPhysicalNetworkId = new IdentityProxy("physical_network"); + private String destinationPhysicalNetworkId; @SerializedName(ApiConstants.STATE) @Param(description="state of the network provider") private String state; @@ -59,20 +58,20 @@ public class ProviderResponse extends BaseResponse { return name; } - public void setPhysicalNetworkId(long physicalNetworkId) { - this.physicalNetworkId.setValue(physicalNetworkId); + public void setPhysicalNetworkId(String physicalNetworkId) { + this.physicalNetworkId = physicalNetworkId; } - public long getphysicalNetworkId() { - return physicalNetworkId.getValue(); + public String getphysicalNetworkId() { + return physicalNetworkId; } - public void setDestinationPhysicalNetworkId(long destPhysicalNetworkId) { - this.destinationPhysicalNetworkId.setValue(destPhysicalNetworkId); + public void setDestinationPhysicalNetworkId(String destPhysicalNetworkId) { + this.destinationPhysicalNetworkId = destPhysicalNetworkId; } - public long getDestinationPhysicalNetworkId() { - return destinationPhysicalNetworkId.getValue(); + public String getDestinationPhysicalNetworkId() { + return destinationPhysicalNetworkId; } public void setState(String state) { diff --git a/api/src/org/apache/cloudstack/api/response/RemoteAccessVpnResponse.java b/api/src/org/apache/cloudstack/api/response/RemoteAccessVpnResponse.java index 732e2d1da6d..c8caa43ffcd 100644 --- a/api/src/org/apache/cloudstack/api/response/RemoteAccessVpnResponse.java +++ b/api/src/org/apache/cloudstack/api/response/RemoteAccessVpnResponse.java @@ -17,7 +17,6 @@ package org.apache.cloudstack.api.response; import org.apache.cloudstack.api.ApiConstants; -import com.cloud.utils.IdentityProxy; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; import org.apache.cloudstack.api.BaseResponse; @@ -26,7 +25,7 @@ import org.apache.cloudstack.api.BaseResponse; public class RemoteAccessVpnResponse extends BaseResponse implements ControlledEntityResponse{ @SerializedName(ApiConstants.PUBLIC_IP_ID) @Param(description="the public ip address of the vpn server") - private IdentityProxy publicIpId = new IdentityProxy("user_ip_address"); + private String publicIpId; @SerializedName(ApiConstants.PUBLIC_IP) @Param(description="the public ip address of the vpn server") private String publicIp; @@ -84,8 +83,8 @@ public class RemoteAccessVpnResponse extends BaseResponse implements ControlledE this.state = state; } - public void setPublicIpId(Long publicIpId) { - this.publicIpId.setValue(publicIpId); + public void setPublicIpId(String publicIpId) { + this.publicIpId = publicIpId; } @Override diff --git a/api/src/org/apache/cloudstack/api/response/Site2SiteCustomerGatewayResponse.java b/api/src/org/apache/cloudstack/api/response/Site2SiteCustomerGatewayResponse.java index 10c468da480..bd211413f89 100644 --- a/api/src/org/apache/cloudstack/api/response/Site2SiteCustomerGatewayResponse.java +++ b/api/src/org/apache/cloudstack/api/response/Site2SiteCustomerGatewayResponse.java @@ -19,7 +19,6 @@ package org.apache.cloudstack.api.response; import java.util.Date; import org.apache.cloudstack.api.ApiConstants; -import com.cloud.utils.IdentityProxy; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; import org.apache.cloudstack.api.BaseResponse; @@ -27,7 +26,7 @@ import org.apache.cloudstack.api.BaseResponse; @SuppressWarnings("unused") public class Site2SiteCustomerGatewayResponse extends BaseResponse implements ControlledEntityResponse { @SerializedName(ApiConstants.ID) @Param(description="the vpn gateway ID") - private IdentityProxy id = new IdentityProxy("s2s_customer_gateway"); + private String id; @SerializedName(ApiConstants.NAME) @Param(description="name of the customer gateway") private String name; @@ -77,8 +76,8 @@ public class Site2SiteCustomerGatewayResponse extends BaseResponse implements Co @SerializedName(ApiConstants.REMOVED) @Param(description="the date and time the host was removed") private Date removed; - public void setId(Long id) { - this.id.setValue(id); + public void setId(String id) { + this.id = id; } public void setName(String name) { diff --git a/api/src/org/apache/cloudstack/api/response/Site2SiteVpnConnectionResponse.java b/api/src/org/apache/cloudstack/api/response/Site2SiteVpnConnectionResponse.java index 4248acd5cc4..093f57c2415 100644 --- a/api/src/org/apache/cloudstack/api/response/Site2SiteVpnConnectionResponse.java +++ b/api/src/org/apache/cloudstack/api/response/Site2SiteVpnConnectionResponse.java @@ -19,7 +19,6 @@ package org.apache.cloudstack.api.response; import java.util.Date; import org.apache.cloudstack.api.ApiConstants; -import com.cloud.utils.IdentityProxy; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; import org.apache.cloudstack.api.BaseResponse; @@ -27,16 +26,16 @@ import org.apache.cloudstack.api.BaseResponse; @SuppressWarnings("unused") public class Site2SiteVpnConnectionResponse extends BaseResponse implements ControlledEntityResponse { @SerializedName(ApiConstants.ID) @Param(description="the vpn gateway ID") - private IdentityProxy id = new IdentityProxy("s2s_vpn_connection"); + private String id; @SerializedName(ApiConstants.S2S_VPN_GATEWAY_ID) @Param(description="the vpn gateway ID") - private IdentityProxy vpnGatewayId= new IdentityProxy("s2s_vpn_gateway"); + private String vpnGatewayId; @SerializedName(ApiConstants.PUBLIC_IP) @Param(description="the public IP address") //from VpnGateway private String ip; @SerializedName(ApiConstants.S2S_CUSTOMER_GATEWAY_ID) @Param(description="the customer gateway ID") - private IdentityProxy customerGatewayId = new IdentityProxy("s2s_customer_gateway"); + private String customerGatewayId; @SerializedName(ApiConstants.GATEWAY) @Param(description="public ip address id of the customer gateway") //from CustomerGateway private String gatewayIp; @@ -86,20 +85,20 @@ public class Site2SiteVpnConnectionResponse extends BaseResponse implements Cont @SerializedName(ApiConstants.REMOVED) @Param(description="the date and time the host was removed") private Date removed; - public void setId(Long id) { - this.id.setValue(id); + public void setId(String id) { + this.id = id; } - public void setVpnGatewayId(Long vpnGatewayId) { - this.vpnGatewayId.setValue(vpnGatewayId); + public void setVpnGatewayId(String vpnGatewayId) { + this.vpnGatewayId = vpnGatewayId; } public void setIp(String ip) { this.ip = ip; } - public void setCustomerGatewayId(Long customerGatewayId) { - this.customerGatewayId.setValue(customerGatewayId); + public void setCustomerGatewayId(String customerGatewayId) { + this.customerGatewayId = customerGatewayId; } public void setGatewayIp(String gatewayIp) { diff --git a/api/src/org/apache/cloudstack/api/response/Site2SiteVpnGatewayResponse.java b/api/src/org/apache/cloudstack/api/response/Site2SiteVpnGatewayResponse.java index c193eaf2633..9265527da8a 100644 --- a/api/src/org/apache/cloudstack/api/response/Site2SiteVpnGatewayResponse.java +++ b/api/src/org/apache/cloudstack/api/response/Site2SiteVpnGatewayResponse.java @@ -19,7 +19,6 @@ package org.apache.cloudstack.api.response; import java.util.Date; import org.apache.cloudstack.api.ApiConstants; -import com.cloud.utils.IdentityProxy; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; import org.apache.cloudstack.api.BaseResponse; @@ -27,13 +26,13 @@ import org.apache.cloudstack.api.BaseResponse; @SuppressWarnings("unused") public class Site2SiteVpnGatewayResponse extends BaseResponse implements ControlledEntityResponse { @SerializedName(ApiConstants.ID) @Param(description="the vpn gateway ID") - private IdentityProxy id = new IdentityProxy("s2s_vpn_gateway"); + private String id; @SerializedName(ApiConstants.PUBLIC_IP) @Param(description="the public IP address") private String ip; @SerializedName(ApiConstants.VPC_ID) @Param(description="the vpc id of this gateway") - private IdentityProxy vpcId = new IdentityProxy("vpc"); + private String vpcId; @SerializedName(ApiConstants.ACCOUNT) @Param(description="the owner") private String accountName; @@ -53,16 +52,16 @@ public class Site2SiteVpnGatewayResponse extends BaseResponse implements Control @SerializedName(ApiConstants.REMOVED) @Param(description="the date and time the host was removed") private Date removed; - public void setId(Long id) { - this.id.setValue(id); + public void setId(String id) { + this.id = id; } public void setIp(String ip) { this.ip = ip; } - public void setVpcId(Long vpcId) { - this.vpcId.setValue(vpcId); + public void setVpcId(String vpcId) { + this.vpcId = vpcId; } public void setRemoved(Date removed) { diff --git a/api/src/org/apache/cloudstack/api/response/SnapshotPolicyResponse.java b/api/src/org/apache/cloudstack/api/response/SnapshotPolicyResponse.java index 01eed3c33e8..79d4effad12 100644 --- a/api/src/org/apache/cloudstack/api/response/SnapshotPolicyResponse.java +++ b/api/src/org/apache/cloudstack/api/response/SnapshotPolicyResponse.java @@ -16,17 +16,16 @@ // under the License. package org.apache.cloudstack.api.response; -import com.cloud.utils.IdentityProxy; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; import org.apache.cloudstack.api.BaseResponse; public class SnapshotPolicyResponse extends BaseResponse { @SerializedName("id") @Param(description="the ID of the snapshot policy") - private IdentityProxy id = new IdentityProxy("snapshot_policy"); + private String id; @SerializedName("volumeid") @Param(description="the ID of the disk volume") - private IdentityProxy volumeId = new IdentityProxy("volumes"); + private String volumeId; @SerializedName("schedule") @Param(description="time the snapshot is scheduled to be taken.") private String schedule; @@ -40,20 +39,20 @@ public class SnapshotPolicyResponse extends BaseResponse { @SerializedName("timezone") @Param(description="the time zone of the snapshot policy") private String timezone; - 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 Long getVolumeId() { - return volumeId.getValue(); + public String getVolumeId() { + return volumeId; } - public void setVolumeId(Long volumeId) { - this.volumeId.setValue(volumeId); + public void setVolumeId(String volumeId) { + this.volumeId = volumeId; } public String getSchedule() { diff --git a/api/src/org/apache/cloudstack/api/response/SnapshotResponse.java b/api/src/org/apache/cloudstack/api/response/SnapshotResponse.java index fff421c15d5..28d768d51a2 100644 --- a/api/src/org/apache/cloudstack/api/response/SnapshotResponse.java +++ b/api/src/org/apache/cloudstack/api/response/SnapshotResponse.java @@ -22,7 +22,6 @@ import java.util.List; import org.apache.cloudstack.api.ApiConstants; import com.cloud.serializer.Param; import com.cloud.storage.Snapshot; -import com.cloud.utils.IdentityProxy; import com.google.gson.annotations.SerializedName; import org.apache.cloudstack.api.BaseResponse; @@ -30,7 +29,7 @@ import org.apache.cloudstack.api.BaseResponse; public class SnapshotResponse extends BaseResponse implements ControlledEntityResponse { @SerializedName(ApiConstants.ID) @Param(description = "ID of the snapshot") - private IdentityProxy id = new IdentityProxy("snapshots"); + private String id; @SerializedName(ApiConstants.ACCOUNT) @Param(description = "the account associated with the snapshot") @@ -56,7 +55,7 @@ public class SnapshotResponse extends BaseResponse implements ControlledEntityRe @SerializedName(ApiConstants.VOLUME_ID) @Param(description = "ID of the disk volume") - private IdentityProxy volumeId = new IdentityProxy("volumes"); + private String volumeId; @SerializedName(ApiConstants.VOLUME_NAME) @Param(description = "name of the disk volume") @@ -85,17 +84,13 @@ public class SnapshotResponse extends BaseResponse implements ControlledEntityRe @SerializedName(ApiConstants.TAGS) @Param(description="the list of resource tags associated with snapshot", responseObject = ResourceTagResponse.class) private List tags; - @Override - public Long getObjectId() { - return getId(); + + private String getId() { + return id; } - private Long getId() { - return id.getValue(); - } - - public void setId(Long id) { - this.id.setValue(id); + public void setId(String id) { + this.id = id; } public String getAccountName() { @@ -123,8 +118,8 @@ public class SnapshotResponse extends BaseResponse implements ControlledEntityRe this.snapshotType = snapshotType; } - public void setVolumeId(Long volumeId) { - this.volumeId.setValue(volumeId); + public void setVolumeId(String volumeId) { + this.volumeId = volumeId; } public void setVolumeName(String volumeName) { diff --git a/api/src/org/apache/cloudstack/api/response/SnapshotScheduleResponse.java b/api/src/org/apache/cloudstack/api/response/SnapshotScheduleResponse.java index 3d8de3e38be..19bb189467b 100644 --- a/api/src/org/apache/cloudstack/api/response/SnapshotScheduleResponse.java +++ b/api/src/org/apache/cloudstack/api/response/SnapshotScheduleResponse.java @@ -18,46 +18,45 @@ package org.apache.cloudstack.api.response; import java.util.Date; -import com.cloud.utils.IdentityProxy; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; import org.apache.cloudstack.api.BaseResponse; public class SnapshotScheduleResponse extends BaseResponse { @SerializedName("id") @Param(description="the ID of the snapshot schedule") - private IdentityProxy id = new IdentityProxy("snapshot_schedule"); + private String id; @SerializedName("volumeid") @Param(description="the volume ID the snapshot schedule applied for") - private IdentityProxy volumeId = new IdentityProxy("volumes"); + private String volumeId; @SerializedName("snapshotpolicyid") @Param(description="the snapshot policy ID used by the snapshot schedule") - private IdentityProxy snapshotPolicyId = new IdentityProxy("snapshot_policy"); + private String snapshotPolicyId; @SerializedName("scheduled") @Param(description="time the snapshot is scheduled to be taken") private Date scheduled; - 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 Long getVolumeId() { - return volumeId.getValue(); + public String getVolumeId() { + return volumeId; } - public void setVolumeId(Long volumeId) { - this.volumeId.setValue(volumeId); + public void setVolumeId(String volumeId) { + this.volumeId = volumeId; } - public Long getSnapshotPolicyId() { - return snapshotPolicyId.getValue(); + public String getSnapshotPolicyId() { + return snapshotPolicyId; } - public void setSnapshotPolicyId(Long snapshotPolicyId) { - this.snapshotPolicyId.setValue(snapshotPolicyId); + public void setSnapshotPolicyId(String snapshotPolicyId) { + this.snapshotPolicyId = snapshotPolicyId; } public Date getScheduled() { diff --git a/api/src/org/apache/cloudstack/api/response/StaticRouteResponse.java b/api/src/org/apache/cloudstack/api/response/StaticRouteResponse.java index 5cf4adfcef5..e7de3209734 100644 --- a/api/src/org/apache/cloudstack/api/response/StaticRouteResponse.java +++ b/api/src/org/apache/cloudstack/api/response/StaticRouteResponse.java @@ -20,23 +20,22 @@ import java.util.List; import org.apache.cloudstack.api.ApiConstants; import com.cloud.serializer.Param; -import com.cloud.utils.IdentityProxy; import com.google.gson.annotations.SerializedName; import org.apache.cloudstack.api.BaseResponse; @SuppressWarnings("unused") public class StaticRouteResponse extends BaseResponse implements ControlledEntityResponse{ @SerializedName(ApiConstants.ID) @Param(description="the ID of static route") - private IdentityProxy id = new IdentityProxy("static_routes"); + private String id; @SerializedName(ApiConstants.STATE) @Param(description="the state of the static route") private String state; @SerializedName(ApiConstants.VPC_ID) @Param(description="VPC the static route belongs to") - private IdentityProxy vpcId = new IdentityProxy("vpc"); + private String vpcId; @SerializedName(ApiConstants.GATEWAY_ID) @Param(description="VPC gateway the route is created for") - private IdentityProxy gatewayId = new IdentityProxy("vpc_gateways"); + private String gatewayId; @SerializedName(ApiConstants.CIDR) @Param(description="static route CIDR") private String cidr; @@ -63,20 +62,20 @@ public class StaticRouteResponse extends BaseResponse implements ControlledEntit responseObject = ResourceTagResponse.class) private List tags; - public void setId(Long id) { - this.id.setValue(id); + public void setId(String id) { + this.id = id; } public void setState(String state) { this.state = state; } - public void setVpcId(Long vpcId) { - this.vpcId.setValue(vpcId); + public void setVpcId(String vpcId) { + this.vpcId = vpcId; } - public void setGatewayId(Long gatewayId) { - this.gatewayId.setValue(gatewayId); + public void setGatewayId(String gatewayId) { + this.gatewayId = gatewayId; } public void setCidr(String cidr) { diff --git a/api/src/org/apache/cloudstack/api/response/StoragePoolResponse.java b/api/src/org/apache/cloudstack/api/response/StoragePoolResponse.java index 64174ebc2bc..0c05236ca09 100644 --- a/api/src/org/apache/cloudstack/api/response/StoragePoolResponse.java +++ b/api/src/org/apache/cloudstack/api/response/StoragePoolResponse.java @@ -19,7 +19,6 @@ package org.apache.cloudstack.api.response; import java.util.Date; import org.apache.cloudstack.api.ApiConstants; -import com.cloud.utils.IdentityProxy; import com.cloud.serializer.Param; import com.cloud.storage.StoragePoolStatus; import com.google.gson.annotations.SerializedName; @@ -27,16 +26,16 @@ import org.apache.cloudstack.api.BaseResponse; public class StoragePoolResponse extends BaseResponse { @SerializedName("id") @Param(description="the ID of the storage pool") - private IdentityProxy id = new IdentityProxy("storage_pool"); + private String id; @SerializedName("zoneid") @Param(description="the Zone ID of the storage pool") - private IdentityProxy zoneId = new IdentityProxy("data_center"); + private String zoneId; @SerializedName(ApiConstants.ZONE_NAME) @Param(description="the Zone name of the storage pool") private String zoneName; @SerializedName("podid") @Param(description="the Pod ID of the storage pool") - private IdentityProxy podId = new IdentityProxy("host_pod_ref"); + private String podId; @SerializedName("podname") @Param(description="the Pod name of the storage pool") private String podName; @@ -57,7 +56,7 @@ public class StoragePoolResponse extends BaseResponse { private String type; @SerializedName("clusterid") @Param(description="the ID of the cluster for the storage pool") - private IdentityProxy clusterId = new IdentityProxy("cluster"); + private String clusterId; @SerializedName("clustername") @Param(description="the name of the cluster for the storage pool") private String clusterName; @@ -77,25 +76,21 @@ public class StoragePoolResponse extends BaseResponse { @SerializedName(ApiConstants.STATE) @Param(description="the state of the storage pool") private StoragePoolStatus state; - @Override - public Long getObjectId() { - return getId(); + + public String getId() { + return id; } - public Long getId() { - return id.getValue(); + public void setId(String id) { + this.id = id; } - public void setId(Long id) { - this.id.setValue(id); + public String getZoneId() { + return zoneId; } - public Long getZoneId() { - return zoneId.getValue(); - } - - public void setZoneId(Long zoneId) { - this.zoneId.setValue(zoneId); + public void setZoneId(String zoneId) { + this.zoneId = zoneId; } public String getZoneName() { @@ -106,12 +101,12 @@ public class StoragePoolResponse extends BaseResponse { this.zoneName = zoneName; } - public Long getPodId() { - return podId.getValue(); + public String getPodId() { + return podId; } - public void setPodId(Long podId) { - this.podId.setValue(podId); + public void setPodId(String podId) { + this.podId = podId; } public String getPodName() { @@ -162,12 +157,12 @@ public class StoragePoolResponse extends BaseResponse { this.type = type; } - public Long getClusterId() { - return clusterId.getValue(); + public String getClusterId() { + return clusterId; } - public void setClusterId(Long clusterId) { - this.clusterId.setValue(clusterId); + public void setClusterId(String clusterId) { + this.clusterId = clusterId; } public String getClusterName() { diff --git a/api/src/org/apache/cloudstack/api/response/SwiftResponse.java b/api/src/org/apache/cloudstack/api/response/SwiftResponse.java index f3c219facb0..83fceb348f7 100644 --- a/api/src/org/apache/cloudstack/api/response/SwiftResponse.java +++ b/api/src/org/apache/cloudstack/api/response/SwiftResponse.java @@ -19,7 +19,6 @@ package org.apache.cloudstack.api.response; import java.util.Date; import org.apache.cloudstack.api.ApiConstants; -import com.cloud.utils.IdentityProxy; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; import org.apache.cloudstack.api.BaseResponse; @@ -27,7 +26,7 @@ import org.apache.cloudstack.api.BaseResponse; public class SwiftResponse extends BaseResponse { @SerializedName(ApiConstants.ID) @Param(description = "the ID of swift") - private IdentityProxy id = new IdentityProxy("swift"); + private String id; @SerializedName(ApiConstants.URL) @Param(description = "url for swift") @@ -46,13 +45,9 @@ public class SwiftResponse extends BaseResponse { private String username; - @Override - public Long getObjectId() { - return id.getValue(); - } - public void setId(Long id) { - this.id.setValue(id); + public void setId(String id) { + this.id = id; } public String getUrl() { diff --git a/api/src/org/apache/cloudstack/api/response/SystemVmInstanceResponse.java b/api/src/org/apache/cloudstack/api/response/SystemVmInstanceResponse.java index 5ede9f361e8..48df8549ab3 100644 --- a/api/src/org/apache/cloudstack/api/response/SystemVmInstanceResponse.java +++ b/api/src/org/apache/cloudstack/api/response/SystemVmInstanceResponse.java @@ -16,7 +16,6 @@ // under the License. package org.apache.cloudstack.api.response; -import com.cloud.utils.IdentityProxy; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; import org.apache.cloudstack.api.BaseResponse; @@ -26,7 +25,7 @@ import org.apache.cloudstack.api.BaseResponse; */ public class SystemVmInstanceResponse extends BaseResponse { @SerializedName("id") @Param(description="the ID of the system VM") - private IdentityProxy id = new IdentityProxy("vm_instance"); + private String id; @SerializedName("systemvmtype") @Param(description="the system VM type") private String systemVmType; @@ -35,7 +34,7 @@ public class SystemVmInstanceResponse extends BaseResponse { private String name; @SerializedName("hostid") @Param(description="the host ID for the system VM") - private IdentityProxy hostId = new IdentityProxy("host"); + private String hostId; @SerializedName("state") @Param(description="the state of the system VM") private String state; @@ -44,16 +43,13 @@ public class SystemVmInstanceResponse extends BaseResponse { private String role; - public Long getObjectId() { - return getId(); + + public String getId() { + return id; } - public Long getId() { - return id.getValue(); - } - - public void setId(Long id) { - this.id.setValue(id); + public void setId(String id) { + this.id = id; } public String getSystemVmType() { @@ -72,12 +68,12 @@ public class SystemVmInstanceResponse extends BaseResponse { this.name = name; } - public Long getHostId() { - return hostId.getValue(); + public String getHostId() { + return hostId; } - public void setHostId(Long hostId) { - this.hostId.setValue(hostId); + public void setHostId(String hostId) { + this.hostId = hostId; } public String getState() { diff --git a/api/src/org/apache/cloudstack/api/response/SystemVmResponse.java b/api/src/org/apache/cloudstack/api/response/SystemVmResponse.java index cc1f5ae2e25..1fa9eb46382 100644 --- a/api/src/org/apache/cloudstack/api/response/SystemVmResponse.java +++ b/api/src/org/apache/cloudstack/api/response/SystemVmResponse.java @@ -19,26 +19,25 @@ package org.apache.cloudstack.api.response; import java.util.Date; import org.apache.cloudstack.api.ApiConstants; -import com.cloud.utils.IdentityProxy; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; import org.apache.cloudstack.api.BaseResponse; public class SystemVmResponse extends BaseResponse { @SerializedName("id") @Param(description="the ID of the system VM") - private IdentityProxy id = new IdentityProxy("vm_instance"); + private String id; @SerializedName("systemvmtype") @Param(description="the system VM type") private String systemVmType; @SerializedName("jobid") @Param(description="the job ID associated with the system VM. This is only displayed if the router listed is part of a currently running asynchronous job.") - private IdentityProxy jobId = new IdentityProxy("async_job"); + private String jobId; @SerializedName("jobstatus") @Param(description="the job status associated with the system VM. This is only displayed if the router listed is part of a currently running asynchronous job.") private Integer jobStatus; @SerializedName("zoneid") @Param(description="the Zone ID for the system VM") - private IdentityProxy zoneId = new IdentityProxy("data_center"); + private String zoneId; @SerializedName(ApiConstants.ZONE_NAME) @Param(description="the Zone name for the system VM") private String zoneName; @@ -59,10 +58,10 @@ public class SystemVmResponse extends BaseResponse { private String name; @SerializedName("podid") @Param(description="the Pod ID for the system VM") - private IdentityProxy podId = new IdentityProxy("host_pod_ref"); + private String podId; @SerializedName("hostid") @Param(description="the host ID for the system VM") - private IdentityProxy hostId = new IdentityProxy("host"); + private String hostId; @SerializedName("hostname") @Param(description="the hostname for the system VM") private String hostName; @@ -95,7 +94,7 @@ public class SystemVmResponse extends BaseResponse { private String publicNetmask; @SerializedName("templateid") @Param(description="the template ID for the system VM") - private IdentityProxy templateId = new IdentityProxy("vm_template"); + private String templateId; @SerializedName("created") @Param(description="the date and time the system VM was created") private Date created; @@ -116,12 +115,12 @@ public class SystemVmResponse extends BaseResponse { this.objectId = objectId; } - 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 String getSystemVmType() { @@ -132,12 +131,12 @@ public class SystemVmResponse extends BaseResponse { this.systemVmType = systemVmType; } - public Long getZoneId() { - return zoneId.getValue(); + public String getZoneId() { + return zoneId; } - public void setZoneId(Long zoneId) { - this.zoneId.setValue(zoneId); + public void setZoneId(String zoneId) { + this.zoneId = zoneId; } public String getZoneName() { @@ -188,20 +187,20 @@ public class SystemVmResponse extends BaseResponse { this.name = name; } - public Long getPodId() { - return podId.getValue(); + public String getPodId() { + return podId; } - public void setPodId(Long podId) { - this.podId.setValue(podId); + public void setPodId(String podId) { + this.podId = podId; } - public Long getHostId() { - return hostId.getValue(); + public String getHostId() { + return hostId; } - public void setHostId(Long hostId) { - this.hostId.setValue(hostId); + public void setHostId(String hostId) { + this.hostId = hostId; } public String getHostName() { @@ -260,12 +259,12 @@ public class SystemVmResponse extends BaseResponse { this.publicNetmask = publicNetmask; } - public Long getTemplateId() { - return templateId.getValue(); + public String getTemplateId() { + return templateId; } - public void setTemplateId(Long templateId) { - this.templateId.setValue(templateId); + public void setTemplateId(String templateId) { + this.templateId = templateId; } public Date getCreated() { diff --git a/api/src/org/apache/cloudstack/api/response/TemplatePermissionsResponse.java b/api/src/org/apache/cloudstack/api/response/TemplatePermissionsResponse.java index 59e82d39ca1..3291c34ca71 100644 --- a/api/src/org/apache/cloudstack/api/response/TemplatePermissionsResponse.java +++ b/api/src/org/apache/cloudstack/api/response/TemplatePermissionsResponse.java @@ -19,7 +19,6 @@ package org.apache.cloudstack.api.response; import java.util.List; import org.apache.cloudstack.api.ApiConstants; -import com.cloud.utils.IdentityProxy; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; import org.apache.cloudstack.api.BaseResponse; @@ -27,13 +26,13 @@ import org.apache.cloudstack.api.BaseResponse; @SuppressWarnings("unused") public class TemplatePermissionsResponse extends BaseResponse { @SerializedName(ApiConstants.ID) @Param(description="the template ID") - private IdentityProxy id = new IdentityProxy("vm_template"); + private String id; @SerializedName(ApiConstants.IS_PUBLIC) @Param(description="true if this template is a public template, false otherwise") private Boolean publicTemplate; @SerializedName(ApiConstants.DOMAIN_ID) @Param(description="the ID of the domain to which the template belongs") - private IdentityProxy domainId = new IdentityProxy("domain"); + private String domainId; @SerializedName(ApiConstants.ACCOUNT) @Param(description="the list of accounts the template is available for") private List accountNames; @@ -42,16 +41,16 @@ public class TemplatePermissionsResponse extends BaseResponse { private List projectIds; - public void setId(Long id) { - this.id.setValue(id); + public void setId(String id) { + this.id = id; } public void setPublicTemplate(Boolean publicTemplate) { this.publicTemplate = publicTemplate; } - public void setDomainId(Long domainId) { - this.domainId.setValue(domainId); + public void setDomainId(String domainId) { + this.domainId = domainId; } public void setAccountNames(List accountNames) { diff --git a/api/src/org/apache/cloudstack/api/response/TemplateResponse.java b/api/src/org/apache/cloudstack/api/response/TemplateResponse.java index 0683b437ac6..785b647a9e4 100644 --- a/api/src/org/apache/cloudstack/api/response/TemplateResponse.java +++ b/api/src/org/apache/cloudstack/api/response/TemplateResponse.java @@ -23,14 +23,13 @@ import java.util.Map; import org.apache.cloudstack.api.ApiConstants; import com.cloud.serializer.Param; import com.cloud.storage.Storage.ImageFormat; -import com.cloud.utils.IdentityProxy; import com.google.gson.annotations.SerializedName; import org.apache.cloudstack.api.BaseResponse; @SuppressWarnings("unused") public class TemplateResponse extends BaseResponse implements ControlledEntityResponse { @SerializedName(ApiConstants.ID) @Param(description="the template ID") - private IdentityProxy id = new IdentityProxy("vm_template"); + private String id; @SerializedName(ApiConstants.NAME) @Param(description="the template name") private String name; @@ -68,19 +67,19 @@ public class TemplateResponse extends BaseResponse implements ControlledEntityRe private boolean crossZones; @SerializedName(ApiConstants.OS_TYPE_ID) @Param(description="the ID of the OS type for this template.") - private IdentityProxy osTypeId = new IdentityProxy("guest_os"); + private String osTypeId; @SerializedName("ostypename") @Param(description="the name of the OS type for this template.") private String osTypeName; @SerializedName(ApiConstants.ACCOUNT_ID) @Param(description="the account id to which the template belongs") - private IdentityProxy accountId = new IdentityProxy("account"); + private String accountId; @SerializedName(ApiConstants.ACCOUNT) @Param(description="the account name to which the template belongs") private String account; @SerializedName(ApiConstants.ZONE_ID) @Param(description="the ID of the zone for this template") - private IdentityProxy zoneId = new IdentityProxy("data_center"); + private String zoneId; @SerializedName(ApiConstants.ZONE_NAME) @Param(description="the name of the zone for this template") private String zoneName; @@ -110,10 +109,10 @@ public class TemplateResponse extends BaseResponse implements ControlledEntityRe private String checksum; @SerializedName("sourcetemplateid") @Param(description="the template ID of the parent template if present") - private IdentityProxy sourcetemplateId = new IdentityProxy("vm_template"); + private String sourcetemplateId; @SerializedName(ApiConstants.HOST_ID) @Param(description="the ID of the secondary storage host for the template") - private IdentityProxy hostId = new IdentityProxy("host"); + private String hostId; @SerializedName("hostname") @Param(description="the name of the secondary storage host for the template") private String hostName; @@ -134,41 +133,38 @@ public class TemplateResponse extends BaseResponse implements ControlledEntityRe private List tags; - @Override - public Long getObjectId() { - return getId(); + + + public String getId() { + return id; } - public Long getId() { - return id.getValue(); - } - - 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 setAccountId(Long accountId) { - this.accountId.setValue(accountId); + public void setAccountId(String accountId) { + this.accountId = accountId; } public void setAccountName(String account) { this.account = account; } - public void setOsTypeId(Long osTypeId) { - this.osTypeId.setValue(osTypeId); + public void setOsTypeId(String osTypeId) { + this.osTypeId = osTypeId; } public void setOsTypeName(String osTypeName) { this.osTypeName = osTypeName; } - public void setId(long id) { - this.id.setValue(id); + public void setId(String id) { + this.id = id; } public void setName(String name) { @@ -249,12 +245,12 @@ public class TemplateResponse extends BaseResponse implements ControlledEntityRe this.checksum = checksum; } - public void setSourceTemplateId(Long sourcetemplateId) { - this.sourcetemplateId.setValue(sourcetemplateId); + public void setSourceTemplateId(String sourcetemplateId) { + this.sourcetemplateId = sourcetemplateId; } - public void setHostId(Long hostId) { - this.hostId.setValue(hostId); + public void setHostId(String hostId) { + this.hostId = hostId; } public void setHostName(String hostName) { diff --git a/core/src/com/cloud/storage/SnapshotPolicyVO.java b/core/src/com/cloud/storage/SnapshotPolicyVO.java index 5ba2c64edc4..e5b0cb5770a 100644 --- a/core/src/com/cloud/storage/SnapshotPolicyVO.java +++ b/core/src/com/cloud/storage/SnapshotPolicyVO.java @@ -31,13 +31,13 @@ import com.cloud.utils.DateUtil.IntervalType; @Entity @Table(name="snapshot_policy") -public class SnapshotPolicyVO implements SnapshotPolicy, Identity { - +public class SnapshotPolicyVO implements SnapshotPolicy{ + @Id @GeneratedValue(strategy=GenerationType.IDENTITY) @Column(name="id") long id; - + @Column(name="volume_id") long volumeId; @@ -46,20 +46,20 @@ public class SnapshotPolicyVO implements SnapshotPolicy, Identity { @Column(name="timezone") String timezone; - + @Column(name="interval") private short interval; - + @Column(name="max_snaps") private int maxSnaps; - + @Column(name="active") boolean active = false; @Column(name="uuid") String uuid; - - public SnapshotPolicyVO() { + + public SnapshotPolicyVO() { this.uuid = UUID.randomUUID().toString(); } @@ -76,7 +76,7 @@ public class SnapshotPolicyVO implements SnapshotPolicy, Identity { public long getId() { return id; } - + public long getVolumeId() { return volumeId; } @@ -88,7 +88,7 @@ public class SnapshotPolicyVO implements SnapshotPolicy, Identity { public String getSchedule() { return schedule; } - + public void setInterval(short interval) { this.interval = interval; } @@ -96,11 +96,11 @@ public class SnapshotPolicyVO implements SnapshotPolicy, Identity { public void setTimezone(String timezone) { this.timezone = timezone; } - + public String getTimezone() { return timezone; } - + public short getInterval() { return interval; } @@ -120,12 +120,12 @@ public class SnapshotPolicyVO implements SnapshotPolicy, Identity { public void setActive(boolean active) { this.active = active; } - + @Override public String getUuid() { return this.uuid; } - + public void setUuid(String uuid) { this.uuid = uuid; } diff --git a/core/src/com/cloud/storage/SnapshotScheduleVO.java b/core/src/com/cloud/storage/SnapshotScheduleVO.java index 1ec3217917a..4b89c6f6e68 100644 --- a/core/src/com/cloud/storage/SnapshotScheduleVO.java +++ b/core/src/com/cloud/storage/SnapshotScheduleVO.java @@ -33,13 +33,13 @@ import com.cloud.storage.snapshot.SnapshotSchedule; @Entity @Table(name="snapshot_schedule") -public class SnapshotScheduleVO implements SnapshotSchedule, Identity { +public class SnapshotScheduleVO implements SnapshotSchedule { @Id @GeneratedValue(strategy=GenerationType.IDENTITY) @Column(name="id") long id; - + // DB constraint: For a given volume and policyId, there will only be one entry in this table. @Column(name="volume_id") long volumeId; @@ -50,16 +50,16 @@ public class SnapshotScheduleVO implements SnapshotSchedule, Identity { @Column(name="scheduled_timestamp") @Temporal(value=TemporalType.TIMESTAMP) Date scheduledTimestamp; - + @Column(name="async_job_id") Long asyncJobId; - + @Column(name="snapshot_id") Long snapshotId; @Column(name="uuid") String uuid = UUID.randomUUID().toString(); - + public SnapshotScheduleVO() { } public SnapshotScheduleVO(long volumeId, long policyId, Date scheduledTimestamp) { @@ -69,15 +69,15 @@ public class SnapshotScheduleVO implements SnapshotSchedule, Identity { this.snapshotId = null; this.asyncJobId = null; } - + public long getId() { return id; } - + public Long getVolumeId() { return volumeId; } - + public Long getPolicyId() { return policyId; } @@ -92,7 +92,7 @@ public class SnapshotScheduleVO implements SnapshotSchedule, Identity { public Date getScheduledTimestamp() { return scheduledTimestamp; } - + public void setScheduledTimestamp(Date scheduledTimestamp) { this.scheduledTimestamp = scheduledTimestamp; } @@ -100,24 +100,24 @@ public class SnapshotScheduleVO implements SnapshotSchedule, Identity { public Long getAsyncJobId() { return asyncJobId; } - + public void setAsyncJobId(Long asyncJobId) { this.asyncJobId = asyncJobId; } - + public Long getSnapshotId() { return snapshotId; } - + public void setSnapshotId(Long snapshotId) { this.snapshotId = snapshotId; } - + @Override public String getUuid() { return this.uuid; } - + public void setUuid(String uuid) { this.uuid = uuid; } diff --git a/core/src/com/cloud/storage/SwiftVO.java b/core/src/com/cloud/storage/SwiftVO.java index 6389002e596..239bd75ead3 100644 --- a/core/src/com/cloud/storage/SwiftVO.java +++ b/core/src/com/cloud/storage/SwiftVO.java @@ -32,19 +32,19 @@ import com.cloud.utils.db.GenericDao; @Entity @Table(name="swift") -public class SwiftVO implements Swift, Identity { - +public class SwiftVO implements Swift { + @Id @GeneratedValue(strategy=GenerationType.IDENTITY) @Column(name="id") private long id; - + @Column(name="url") String url; @Column(name="account") String account; - + @Column(name="username") String userName; @@ -53,10 +53,10 @@ public class SwiftVO implements Swift, Identity { @Column(name="uuid") String uuid = UUID.randomUUID().toString(); - + @Column(name = GenericDao.CREATED_COLUMN) private Date created; - + public SwiftVO() { } public SwiftVO(String url, String account, String userName, String key) { @@ -95,12 +95,12 @@ public class SwiftVO implements Swift, Identity { public SwiftTO toSwiftTO() { return new SwiftTO(getId(), getUrl(), getAccount(), getUserName(), getKey()); } - + @Override public String getUuid() { return this.uuid; } - + public void setUuid(String uuid) { this.uuid = uuid; } diff --git a/core/src/com/cloud/storage/VMTemplateVO.java b/core/src/com/cloud/storage/VMTemplateVO.java index 8ad768dd1fd..fdfd5a1abe4 100755 --- a/core/src/com/cloud/storage/VMTemplateVO.java +++ b/core/src/com/cloud/storage/VMTemplateVO.java @@ -40,7 +40,7 @@ import com.cloud.utils.db.GenericDao; @Entity @Table(name="vm_template") -public class VMTemplateVO implements VirtualMachineTemplate, Identity { +public class VMTemplateVO implements VirtualMachineTemplate { @Id @TableGenerator(name="vm_template_sq", table="sequence", pkColumnName="name", valueColumnName="value", pkColumnValue="vm_template_seq", allocationSize=1) @Column(name="id", nullable = false) @@ -85,7 +85,7 @@ public class VMTemplateVO implements VirtualMachineTemplate, Identity { private long accountId; @Column(name="checksum") - private String checksum; + private String checksum; @Column(name="display_text", length=4096) private String displayText; @@ -117,16 +117,16 @@ public class VMTemplateVO implements VirtualMachineTemplate, Identity { @Column(name="template_tag") private String templateTag; - + @Column(name="uuid") private String uuid; - + @Column(name="sort_key") private int sortKey; - + @Column(name="enable_sshkey") private boolean enableSshKey; - + @Transient Map details; @@ -156,7 +156,7 @@ public class VMTemplateVO implements VirtualMachineTemplate, Identity { this.templateTag = templateTag; this.uuid = UUID.randomUUID().toString(); this.enableSshKey = sshKeyEnabled; - } + } public VMTemplateVO(Long id, String uniqueName, String name, ImageFormat format, boolean isPublic, boolean featured, TemplateType type, String url, Date created, boolean requiresHvm, int bits, long accountId, String cksum, String displayText, boolean enablePassword, long guestOSId, boolean bootable, HypervisorType hyperType) { this.id = id; @@ -391,30 +391,30 @@ public class VMTemplateVO implements VirtualMachineTemplate, Identity { @Override public String getTemplateTag() { return templateTag; - } + } public void setTemplateTag(String templateTag) { this.templateTag = templateTag; - } + } @Override public long getDomainId() { return -1; } - + @Override public String getUuid() { return this.uuid; } - + public void setUuid(String uuid) { this.uuid = uuid; } - + public Map getDetails() { return this.details; } - + public void setDetails(Map details) { this.details = details; } @@ -429,7 +429,7 @@ public class VMTemplateVO implements VirtualMachineTemplate, Identity { } VMTemplateVO other = (VMTemplateVO)that; - return ((this.getUniqueName().equals(other.getUniqueName()))); + return ((this.getUniqueName().equals(other.getUniqueName()))); } @Override @@ -450,11 +450,11 @@ public class VMTemplateVO implements VirtualMachineTemplate, Identity { public void setRemoved(Date removed) { this.removed = removed; } - + public void setSortKey(int key) { sortKey = key; } - + public int getSortKey() { return sortKey; } @@ -463,7 +463,7 @@ public class VMTemplateVO implements VirtualMachineTemplate, Identity { public boolean getEnableSshKey() { return enableSshKey; } - + public void setEnableSshKey(boolean enable) { enableSshKey = enable; } diff --git a/core/src/com/cloud/storage/snapshot/SnapshotSchedule.java b/core/src/com/cloud/storage/snapshot/SnapshotSchedule.java index f5f810a9be1..55a24841068 100644 --- a/core/src/com/cloud/storage/snapshot/SnapshotSchedule.java +++ b/core/src/com/cloud/storage/snapshot/SnapshotSchedule.java @@ -20,9 +20,11 @@ import java.util.Date; public interface SnapshotSchedule { long getId(); - + + String getUuid(); + Long getVolumeId(); - + Long getPolicyId(); void setPolicyId(long policyId); @@ -31,14 +33,14 @@ public interface SnapshotSchedule { * @return the scheduledTimestamp */ Date getScheduledTimestamp(); - + void setScheduledTimestamp(Date scheduledTimestamp); Long getAsyncJobId(); - + void setAsyncJobId(Long asyncJobId); - + Long getSnapshotId(); - + void setSnapshotId(Long snapshotId); } diff --git a/server/src/com/cloud/api/ApiDBUtils.java b/server/src/com/cloud/api/ApiDBUtils.java index f2b60ff7c6b..8deec55845e 100755 --- a/server/src/com/cloud/api/ApiDBUtils.java +++ b/server/src/com/cloud/api/ApiDBUtils.java @@ -177,6 +177,7 @@ import com.cloud.storage.dao.DiskOfferingDao; import com.cloud.storage.dao.GuestOSCategoryDao; import com.cloud.storage.dao.GuestOSDao; import com.cloud.storage.dao.SnapshotDao; +import com.cloud.storage.dao.SnapshotPolicyDao; import com.cloud.storage.dao.StoragePoolDao; import com.cloud.storage.dao.UploadDao; import com.cloud.storage.dao.VMTemplateDao; @@ -185,6 +186,7 @@ import com.cloud.storage.dao.VMTemplateHostDao; import com.cloud.storage.dao.VMTemplateSwiftDao; import com.cloud.storage.dao.VolumeDao; import com.cloud.storage.dao.VolumeHostDao; +import com.cloud.storage.snapshot.SnapshotPolicy; import com.cloud.user.Account; import com.cloud.user.AccountDetailsDao; import com.cloud.user.AccountVO; @@ -305,6 +307,7 @@ public class ApiDBUtils { private static StaticRouteDao _staticRouteDao; private static VpcGatewayDao _vpcGatewayDao; private static VpcDao _vpcDao; + private static SnapshotPolicyDao _snapshotPolicyDao; static { _ms = (ManagementServer) ComponentLocator.getComponent(ManagementServer.Name); @@ -389,6 +392,7 @@ public class ApiDBUtils { _asVmProfileDao = locator.getDao(AutoScaleVmProfileDao.class); _asVmGroupDao = locator.getDao(AutoScaleVmGroupDao.class); _vpcDao = locator.getDao(VpcDao.class); + _snapshotPolicyDao = locator.getDao(SnapshotPolicyDao.class); // Note: stats collector should already have been initialized by this time, otherwise a null instance is returned _statsCollector = StatsCollector.getInstance(); @@ -1028,6 +1032,11 @@ public class ApiDBUtils { public static VpcVO findVpcById(long vpcId){ return _vpcDao.findById(vpcId); } + + public static SnapshotPolicy findSnapshotPolicyById(long policyId){ + return _snapshotPolicyDao.findById(policyId); + } + /////////////////////////////////////////////////////////////////////// // Newly Added Utility Methods for List API refactoring // /////////////////////////////////////////////////////////////////////// diff --git a/server/src/com/cloud/api/ApiResponseHelper.java b/server/src/com/cloud/api/ApiResponseHelper.java index 4b1b3ea2814..27fb6470d3b 100755 --- a/server/src/com/cloud/api/ApiResponseHelper.java +++ b/server/src/com/cloud/api/ApiResponseHelper.java @@ -107,6 +107,7 @@ import org.apache.cloudstack.api.response.Site2SiteVpnConnectionResponse; import org.apache.cloudstack.api.response.Site2SiteVpnGatewayResponse; import org.apache.cloudstack.api.response.SnapshotPolicyResponse; import org.apache.cloudstack.api.response.SnapshotResponse; +import org.apache.cloudstack.api.response.SnapshotScheduleResponse; import org.apache.cloudstack.api.response.StaticRouteResponse; import org.apache.cloudstack.api.response.StorageNetworkIpRangeResponse; import org.apache.cloudstack.api.response.StoragePoolResponse; @@ -125,6 +126,8 @@ import org.apache.cloudstack.api.response.VpcOfferingResponse; import org.apache.cloudstack.api.response.VpcResponse; import org.apache.cloudstack.api.response.VpnUsersResponse; import org.apache.cloudstack.api.response.ZoneResponse; +import org.bouncycastle.util.IPAddress; + import com.cloud.async.AsyncJob; import com.cloud.capacity.Capacity; import com.cloud.capacity.CapacityVO; @@ -228,6 +231,7 @@ import com.cloud.storage.VMTemplateVO; import com.cloud.storage.Volume; import com.cloud.storage.VolumeVO; import com.cloud.storage.snapshot.SnapshotPolicy; +import com.cloud.storage.snapshot.SnapshotSchedule; import com.cloud.template.VirtualMachineTemplate; import com.cloud.test.PodZoneConfig; import com.cloud.user.Account; @@ -281,7 +285,7 @@ public class ApiResponseHelper implements ResponseGenerator { } accountResponse.setState(account.getState().toString()); accountResponse.setNetworkDomain(account.getNetworkDomain()); - DataCenterVO dc = ApiDBUtils.findZoneById(account.getDefaultZoneId()); + DataCenter dc = ApiDBUtils.findZoneById(account.getDefaultZoneId()); if (dc != null) { accountResponse.setDefaultZone(dc.getUuid()); } @@ -555,15 +559,15 @@ public class ApiResponseHelper implements ResponseGenerator { @Override public SnapshotResponse createSnapshotResponse(Snapshot snapshot) { SnapshotResponse snapshotResponse = new SnapshotResponse(); - snapshotResponse.setId(snapshot.getId()); + snapshotResponse.setId(snapshot.getUuid()); populateOwner(snapshotResponse, snapshot); VolumeVO volume = findVolumeById(snapshot.getVolumeId()); String snapshotTypeStr = snapshot.getType().name(); snapshotResponse.setSnapshotType(snapshotTypeStr); - snapshotResponse.setVolumeId(snapshot.getVolumeId()); if (volume != null) { + snapshotResponse.setVolumeId(volume.getUuid()); snapshotResponse.setVolumeName(volume.getName()); snapshotResponse.setVolumeType(volume.getVolumeType().name()); } @@ -588,8 +592,11 @@ public class ApiResponseHelper implements ResponseGenerator { @Override public SnapshotPolicyResponse createSnapshotPolicyResponse(SnapshotPolicy policy) { SnapshotPolicyResponse policyResponse = new SnapshotPolicyResponse(); - policyResponse.setId(policy.getId()); - policyResponse.setVolumeId(policy.getVolumeId()); + policyResponse.setId(policy.getUuid()); + Volume vol = ApiDBUtils.findVolumeById(policy.getVolumeId()); + if (vol != null) { + policyResponse.setVolumeId(vol.getUuid()); + } policyResponse.setSchedule(policy.getSchedule()); policyResponse.setIntervalType(policy.getInterval()); policyResponse.setMaxSnaps(policy.getMaxSnaps()); @@ -617,7 +624,7 @@ public class ApiResponseHelper implements ResponseGenerator { } } hostResponse.setCpuNumber(host.getCpus()); - DataCenterVO zone = ApiDBUtils.findZoneById(host.getDataCenterId()); + DataCenter zone = ApiDBUtils.findZoneById(host.getDataCenterId()); if (zone != null) { hostResponse.setZoneId(zone.getUuid()); } @@ -741,7 +748,7 @@ public class ApiResponseHelper implements ResponseGenerator { @Override public SwiftResponse createSwiftResponse(Swift swift) { SwiftResponse swiftResponse = new SwiftResponse(); - swiftResponse.setId(swift.getId()); + swiftResponse.setId(swift.getUuid()); swiftResponse.setUrl(swift.getUrl()); swiftResponse.setAccount(swift.getAccount()); swiftResponse.setUsername(swift.getUserName()); @@ -801,7 +808,7 @@ public class ApiResponseHelper implements ResponseGenerator { if (ipAddr.getAllocatedTime() != null) { ipResponse.setAllocated(ipAddr.getAllocatedTime()); } - DataCenterVO zone = ApiDBUtils.findZoneById(ipAddr.getDataCenterId()); + DataCenter zone = ApiDBUtils.findZoneById(ipAddr.getDataCenterId()); if (zone != null) { ipResponse.setZoneId(zone.getUuid()); ipResponse.setZoneName(zone.getName()); @@ -839,7 +846,7 @@ public class ApiResponseHelper implements ResponseGenerator { } if (ipAddr.getVpcId() != null) { - VpcVO vpc = ApiDBUtils.findVpcById(ipAddr.getVpcId()); + Vpc vpc = ApiDBUtils.findVpcById(ipAddr.getVpcId()); if (vpc != null) { ipResponse.setVpcId(vpc.getUuid()); } @@ -906,14 +913,14 @@ public class ApiResponseHelper implements ResponseGenerator { @Override public LoadBalancerResponse createLoadBalancerResponse(LoadBalancer loadBalancer) { LoadBalancerResponse lbResponse = new LoadBalancerResponse(); - lbResponse.setId(loadBalancer.getId()); + lbResponse.setId(loadBalancer.getUuid()); lbResponse.setName(loadBalancer.getName()); lbResponse.setDescription(loadBalancer.getDescription()); List cidrs = ApiDBUtils.findFirewallSourceCidrs(loadBalancer.getId()); lbResponse.setCidrList(StringUtils.join(cidrs, ",")); IPAddressVO publicIp = ApiDBUtils.findIpAddressById(loadBalancer.getSourceIpAddressId()); - lbResponse.setPublicIpId(publicIp.getId()); + lbResponse.setPublicIpId(publicIp.getUuid()); lbResponse.setPublicIp(publicIp.getAddress().addr()); lbResponse.setPublicPort(Integer.toString(loadBalancer.getSourcePortStart())); lbResponse.setPrivatePort(Integer.toString(loadBalancer.getDefaultPortStart())); @@ -925,7 +932,10 @@ public class ApiResponseHelper implements ResponseGenerator { } lbResponse.setState(stateToSet); populateOwner(lbResponse, loadBalancer); - lbResponse.setZoneId(publicIp.getDataCenterId()); + DataCenter zone = ApiDBUtils.findZoneById(publicIp.getDataCenterId()); + if (zone != null) { + lbResponse.setZoneId(zone.getUuid()); + } //set tag information List tags = ApiDBUtils.listByResourceTypeAndId(TaggedResourceType.UserVm, loadBalancer.getId()); @@ -950,10 +960,13 @@ public class ApiResponseHelper implements ResponseGenerator { } PodResponse podResponse = new PodResponse(); - podResponse.setId(pod.getId()); + podResponse.setId(pod.getUuid()); podResponse.setName(pod.getName()); - podResponse.setZoneId(pod.getDataCenterId()); - podResponse.setZoneName(PodZoneConfig.getZoneName(pod.getDataCenterId())); + DataCenter zone = ApiDBUtils.findZoneById(pod.getDataCenterId()); + if (zone != null) { + podResponse.setZoneId(zone.getUuid()); + podResponse.setZoneName(zone.getName()); + } podResponse.setNetmask(NetUtils.getCidrNetmask(pod.getCidrSize())); podResponse.setStartIp(ipRange[0]); podResponse.setEndIp(((ipRange.length > 1) && (ipRange[1] != null)) ? ipRange[1] : ""); @@ -1233,20 +1246,23 @@ public class ApiResponseHelper implements ResponseGenerator { @Override public StoragePoolResponse createStoragePoolResponse(StoragePool pool) { StoragePoolResponse poolResponse = new StoragePoolResponse(); - poolResponse.setId(pool.getId()); + poolResponse.setId(pool.getUuid()); poolResponse.setName(pool.getName()); poolResponse.setState(pool.getStatus()); poolResponse.setPath(pool.getPath()); poolResponse.setIpAddress(pool.getHostAddress()); - poolResponse.setZoneId(pool.getDataCenterId()); - poolResponse.setZoneName(ApiDBUtils.findZoneById(pool.getDataCenterId()).getName()); + DataCenter zone = ApiDBUtils.findZoneById(pool.getDataCenterId()); + if ( zone != null ){ + poolResponse.setZoneId(zone.getUuid()); + poolResponse.setZoneName(zone.getName()); + } if (pool.getPoolType() != null) { poolResponse.setType(pool.getPoolType().toString()); } if (pool.getPodId() != null) { - poolResponse.setPodId(pool.getPodId()); HostPodVO pod = ApiDBUtils.findPodById(pool.getPodId()); if (pod != null) { + poolResponse.setPodId(pod.getUuid()); poolResponse.setPodName(pod.getName()); } } @@ -1266,7 +1282,7 @@ public class ApiResponseHelper implements ResponseGenerator { if (pool.getClusterId() != null) { ClusterVO cluster = ApiDBUtils.findClusterById(pool.getClusterId()); - poolResponse.setClusterId(cluster.getId()); + poolResponse.setClusterId(cluster.getUuid()); poolResponse.setClusterName(cluster.getName()); } poolResponse.setTags(ApiDBUtils.getStoragePoolTags(pool.getId())); @@ -1284,7 +1300,7 @@ public class ApiResponseHelper implements ResponseGenerator { clusterResponse.setPodId(pod.getUuid()); clusterResponse.setPodName(pod.getName()); } - DataCenterVO dc = ApiDBUtils.findZoneById(cluster.getDataCenterId()); + DataCenter dc = ApiDBUtils.findZoneById(cluster.getDataCenterId()); if (dc != null) { clusterResponse.setZoneId(dc.getUuid()); clusterResponse.setZoneName(dc.getName()); @@ -1381,7 +1397,7 @@ public class ApiResponseHelper implements ResponseGenerator { @Override public IpForwardingRuleResponse createIpForwardingRuleResponse(StaticNatRule fwRule) { IpForwardingRuleResponse response = new IpForwardingRuleResponse(); - response.setId(fwRule.getId()); + response.setId(fwRule.getUuid()); response.setProtocol(fwRule.getProtocol()); IpAddress ip = ApiDBUtils.findIpAddressById(fwRule.getSourceIpAddressId()); @@ -1391,7 +1407,7 @@ public class ApiResponseHelper implements ResponseGenerator { if (ip != null && fwRule.getDestIpAddress() != null) { UserVm vm = ApiDBUtils.findUserVmById(ip.getAssociatedWithVmId()); if (vm != null) {// vm might be destroyed - response.setVirtualMachineId(vm.getId()); + response.setVirtualMachineId(vm.getUuid()); response.setVirtualMachineName(vm.getHostName()); if (vm.getDisplayName() != null) { response.setVirtualMachineDisplayName(vm.getDisplayName()); @@ -1443,19 +1459,29 @@ public class ApiResponseHelper implements ResponseGenerator { SystemVmResponse vmResponse = new SystemVmResponse(); if (vm.getType() == Type.SecondaryStorageVm || vm.getType() == Type.ConsoleProxy) { // SystemVm vm = (SystemVm) systemVM; - vmResponse.setId(vm.getId()); + vmResponse.setId(vm.getUuid()); vmResponse.setObjectId(vm.getId()); vmResponse.setSystemVmType(vm.getType().toString().toLowerCase()); - vmResponse.setZoneId(vm.getDataCenterIdToDeployIn()); vmResponse.setName(vm.getHostName()); - vmResponse.setPodId(vm.getPodIdToDeployIn()); - vmResponse.setTemplateId(vm.getTemplateId()); + if ( vm.getPodIdToDeployIn() != null ){ + HostPodVO pod = ApiDBUtils.findPodById(vm.getPodIdToDeployIn()); + if ( pod != null ){ + vmResponse.setPodId(pod.getUuid()); + } + } + VMTemplateVO template = ApiDBUtils.findTemplateById(vm.getTemplateId()); + if (template != null){ + vmResponse.setTemplateId(template.getUuid()); + } vmResponse.setCreated(vm.getCreated()); if (vm.getHostId() != null) { - vmResponse.setHostId(vm.getHostId()); - vmResponse.setHostName(ApiDBUtils.findHostById(vm.getHostId()).getName()); + Host host = ApiDBUtils.findHostById(vm.getHostId()); + if (host != null) { + vmResponse.setHostId(host.getUuid()); + vmResponse.setHostName(host.getName()); + } } if (vm.getState() != null) { @@ -1473,6 +1499,7 @@ public class ApiResponseHelper implements ResponseGenerator { DataCenter zone = ApiDBUtils.findZoneById(vm.getDataCenterIdToDeployIn()); if (zone != null) { + vmResponse.setZoneId(zone.getUuid()); vmResponse.setZoneName(zone.getName()); vmResponse.setDns1(zone.getDns1()); vmResponse.setDns2(zone.getDns2()); @@ -1550,8 +1577,11 @@ public class ApiResponseHelper implements ResponseGenerator { @Override public RemoteAccessVpnResponse createRemoteAccessVpnResponse(RemoteAccessVpn vpn) { RemoteAccessVpnResponse vpnResponse = new RemoteAccessVpnResponse(); - vpnResponse.setPublicIpId(vpn.getServerAddressId()); - vpnResponse.setPublicIp(ApiDBUtils.findIpAddressById(vpn.getServerAddressId()).getAddress().addr()); + IpAddress ip = ApiDBUtils.findIpAddressById(vpn.getServerAddressId()); + if (ip != null) { + vpnResponse.setPublicIpId(ip.getUuid()); + vpnResponse.setPublicIp(ip.getAddress().addr()); + } vpnResponse.setIpRange(vpn.getIpRange()); vpnResponse.setPresharedKey(vpn.getIpsecPresharedKey()); @@ -1566,14 +1596,17 @@ public class ApiResponseHelper implements ResponseGenerator { @Override public TemplateResponse createIsoResponse(VirtualMachineTemplate result) { TemplateResponse response = new TemplateResponse(); - response.setId(result.getId()); + response.setId(result.getUuid()); response.setName(result.getName()); response.setDisplayText(result.getDisplayText()); response.setPublic(result.isPublicTemplate()); response.setCreated(result.getCreated()); response.setFormat(result.getFormat()); - response.setOsTypeId(result.getGuestOSId()); - response.setOsTypeName(ApiDBUtils.findGuestOSById(result.getGuestOSId()).getDisplayName()); + GuestOS os = ApiDBUtils.findGuestOSById(result.getGuestOSId()); + if (os != null) { + response.setOsTypeId(os.getUuid()); + response.setOsTypeName(os.getDisplayName()); + } response.setDetails(result.getDetails()); Account caller = UserContext.current().getCaller(); @@ -1635,7 +1668,7 @@ public class ApiResponseHelper implements ResponseGenerator { } TemplateResponse templateResponse = new TemplateResponse(); - templateResponse.setId(template.getId()); + templateResponse.setId(template.getUuid()); templateResponse.setName(template.getName()); templateResponse.setDisplayText(template.getDisplayText()); templateResponse.setPublic(template.isPublicTemplate()); @@ -1656,10 +1689,10 @@ public class ApiResponseHelper implements ResponseGenerator { GuestOS os = ApiDBUtils.findGuestOSById(template.getGuestOSId()); if (os != null) { - templateResponse.setOsTypeId(os.getId()); + templateResponse.setOsTypeId(os.getUuid()); templateResponse.setOsTypeName(os.getDisplayName()); } else { - templateResponse.setOsTypeId(-1L); + templateResponse.setOsTypeId("-1"); templateResponse.setOsTypeName(""); } @@ -1685,7 +1718,12 @@ public class ApiResponseHelper implements ResponseGenerator { } templateResponse.setChecksum(template.getChecksum()); - templateResponse.setSourceTemplateId(template.getSourceTemplateId()); + if (template.getSourceTemplateId() != null) { + VirtualMachineTemplate tmpl = ApiDBUtils.findTemplateById(template.getSourceTemplateId()); + if (tmpl != null) { + templateResponse.setSourceTemplateId(tmpl.getUuid()); + } + } templateResponse.setChecksum(template.getChecksum()); @@ -1711,7 +1749,7 @@ public class ApiResponseHelper implements ResponseGenerator { } TemplateResponse templateResponse = new TemplateResponse(); - templateResponse.setId(template.getId()); + templateResponse.setId(template.getUuid()); templateResponse.setName(template.getName()); templateResponse.setDisplayText(template.getDisplayText()); templateResponse.setPublic(template.isPublicTemplate()); @@ -1732,10 +1770,10 @@ public class ApiResponseHelper implements ResponseGenerator { GuestOS os = ApiDBUtils.findGuestOSById(template.getGuestOSId()); if (os != null) { - templateResponse.setOsTypeId(os.getId()); + templateResponse.setOsTypeId(os.getUuid()); templateResponse.setOsTypeName(os.getDisplayName()); } else { - templateResponse.setOsTypeId(-1L); + templateResponse.setOsTypeId("-1"); templateResponse.setOsTypeName(""); } @@ -1743,11 +1781,13 @@ public class ApiResponseHelper implements ResponseGenerator { populateAccount(templateResponse, account.getId()); populateDomain(templateResponse, account.getDomainId()); - DataCenterVO datacenter = ApiDBUtils.findZoneById(zoneId); + DataCenter datacenter = ApiDBUtils.findZoneById(zoneId); - // Add the zone ID - templateResponse.setZoneId(zoneId); - templateResponse.setZoneName(datacenter.getName()); + if (datacenter != null) { + // Add the zone ID + templateResponse.setZoneId(datacenter.getUuid()); + templateResponse.setZoneName(datacenter.getName()); + } boolean isAdmin = false; Account caller = UserContext.current().getCaller(); @@ -1783,7 +1823,12 @@ public class ApiResponseHelper implements ResponseGenerator { } templateResponse.setChecksum(template.getChecksum()); - templateResponse.setSourceTemplateId(template.getSourceTemplateId()); + if (template.getSourceTemplateId() != null) { + VirtualMachineTemplate tmpl = ApiDBUtils.findTemplateById(template.getSourceTemplateId()); + if (tmpl != null) { + templateResponse.setSourceTemplateId(tmpl.getUuid()); + } + } templateResponse.setChecksum(template.getChecksum()); @@ -1815,7 +1860,7 @@ public class ApiResponseHelper implements ResponseGenerator { VirtualMachineTemplate iso = findTemplateById(isoId); if (iso.getTemplateType() == TemplateType.PERHOST) { TemplateResponse isoResponse = new TemplateResponse(); - isoResponse.setId(iso.getId()); + isoResponse.setId(iso.getUuid()); isoResponse.setName(iso.getName()); isoResponse.setDisplayText(iso.getDisplayText()); isoResponse.setPublic(iso.isPublicTemplate()); @@ -1873,7 +1918,7 @@ public class ApiResponseHelper implements ResponseGenerator { return isoResponses; } TemplateResponse isoResponse = new TemplateResponse(); - isoResponse.setId(iso.getId()); + isoResponse.setId(iso.getUuid()); isoResponse.setName(iso.getName()); isoResponse.setDisplayText(iso.getDisplayText()); isoResponse.setPublic(iso.isPublicTemplate()); @@ -1890,10 +1935,10 @@ public class ApiResponseHelper implements ResponseGenerator { // TODO: implement GuestOS os = ApiDBUtils.findGuestOSById(iso.getGuestOSId()); if (os != null) { - isoResponse.setOsTypeId(os.getId()); + isoResponse.setOsTypeId(os.getUuid()); isoResponse.setOsTypeName(os.getDisplayName()); } else { - isoResponse.setOsTypeId(-1L); + isoResponse.setOsTypeId("-1"); isoResponse.setOsTypeName(""); } Account account = ApiDBUtils.findAccountByIdIncludingRemoved(iso.getAccountId()); @@ -1927,7 +1972,7 @@ public class ApiResponseHelper implements ResponseGenerator { return isoResponses; } TemplateResponse isoResponse = new TemplateResponse(); - isoResponse.setId(iso.getId()); + isoResponse.setId(iso.getUuid()); isoResponse.setName(iso.getName()); isoResponse.setDisplayText(iso.getDisplayText()); isoResponse.setPublic(iso.isPublicTemplate()); @@ -1944,10 +1989,10 @@ public class ApiResponseHelper implements ResponseGenerator { // TODO: implement GuestOS os = ApiDBUtils.findGuestOSById(iso.getGuestOSId()); if (os != null) { - isoResponse.setOsTypeId(os.getId()); + isoResponse.setOsTypeId(os.getUuid()); isoResponse.setOsTypeName(os.getDisplayName()); } else { - isoResponse.setOsTypeId(-1L); + isoResponse.setOsTypeId("-1"); isoResponse.setOsTypeName(""); } @@ -1961,9 +2006,11 @@ public class ApiResponseHelper implements ResponseGenerator { isAdmin = true; } // Add the zone ID - DataCenterVO datacenter = ApiDBUtils.findZoneById(zoneId); - isoResponse.setZoneId(zoneId); - isoResponse.setZoneName(datacenter.getName()); + DataCenter datacenter = ApiDBUtils.findZoneById(zoneId); + if (datacenter != null) { + isoResponse.setZoneId(datacenter.getUuid()); + isoResponse.setZoneName(datacenter.getName()); + } // If the user is an admin, add the template download status if (isAdmin || caller.getId() == iso.getAccountId()) { @@ -2399,7 +2446,7 @@ public class ApiResponseHelper implements ResponseGenerator { } } } - DataCenterVO zone = ApiDBUtils.findZoneById(summedCapacity.getDataCenterId()); + DataCenter zone = ApiDBUtils.findZoneById(summedCapacity.getDataCenterId()); if (zone != null) { capacityResponse.setZoneId(zone.getUuid()); capacityResponse.setZoneName(zone.getName()); @@ -2432,10 +2479,13 @@ public class ApiResponseHelper implements ResponseGenerator { } TemplatePermissionsResponse response = new TemplatePermissionsResponse(); - response.setId(template.getId()); + response.setId(template.getUuid()); response.setPublicTemplate(template.isPublicTemplate()); if (isAdmin && (templateOwnerDomain != null)) { - response.setDomainId(templateOwnerDomain); + Domain domain = ApiDBUtils.findDomainById(templateOwnerDomain); + if (domain != null) { + response.setDomainId(domain.getUuid()); + } } // Set accounts @@ -2541,7 +2591,7 @@ public class ApiResponseHelper implements ResponseGenerator { @Override public NetworkOfferingResponse createNetworkOfferingResponse(NetworkOffering offering) { NetworkOfferingResponse response = new NetworkOfferingResponse(); - response.setId(offering.getId()); + response.setId(offering.getUuid()); response.setName(offering.getName()); response.setDisplayText(offering.getDisplayText()); response.setTags(offering.getTags()); @@ -2552,11 +2602,18 @@ public class ApiResponseHelper implements ResponseGenerator { response.setSpecifyIpRanges(offering.getSpecifyIpRanges()); response.setAvailability(offering.getAvailability().toString()); response.setNetworkRate(ApiDBUtils.getNetworkRate(offering.getId())); + Long so = null; if (offering.getServiceOfferingId() != null) { - response.setServiceOfferingId(offering.getServiceOfferingId()); + so = offering.getServiceOfferingId(); } else { - response.setServiceOfferingId(ApiDBUtils.findDefaultRouterServiceOffering()); + so = ApiDBUtils.findDefaultRouterServiceOffering(); } + if (so != null) { + ServiceOffering soffering = ApiDBUtils.findServiceOfferingById(so); + if (soffering != null) + response.setServiceOfferingId(soffering.getUuid()); + } + if (offering.getGuestType() != null) { response.setGuestIpType(offering.getGuestType().toString()); } @@ -2634,7 +2691,7 @@ public class ApiResponseHelper implements ResponseGenerator { // need to get network profile in order to retrieve dns information from there NetworkProfile profile = ApiDBUtils.getNetworkProfile(network.getId()); NetworkResponse response = new NetworkResponse(); - response.setId(network.getId()); + response.setId(network.getUuid()); response.setName(network.getName()); response.setDisplaytext(network.getDisplayText()); if (network.getBroadcastDomainType() != null) { @@ -2671,14 +2728,19 @@ public class ApiResponseHelper implements ResponseGenerator { } DataCenter zone = ApiDBUtils.findZoneById(network.getDataCenterId()); - response.setZoneId(network.getDataCenterId()); - response.setZoneName(zone.getName()); - response.setPhysicalNetworkId(network.getPhysicalNetworkId()); + if (zone != null) { + response.setZoneId(zone.getUuid()); + response.setZoneName(zone.getName()); + } + if (network.getPhysicalNetworkId() != null) { + PhysicalNetworkVO pnet = ApiDBUtils.findPhysicalNetworkById(network.getPhysicalNetworkId()); + response.setPhysicalNetworkId(pnet.getUuid()); + } // populate network offering information NetworkOffering networkOffering = ApiDBUtils.findNetworkOfferingById(network.getNetworkOfferingId()); if (networkOffering != null) { - response.setNetworkOfferingId(networkOffering.getId()); + response.setNetworkOfferingId(networkOffering.getUuid()); response.setNetworkOfferingName(networkOffering.getName()); response.setNetworkOfferingDisplayText(networkOffering.getDisplayText()); response.setIsSystem(networkOffering.isSystemOnly()); @@ -2690,7 +2752,10 @@ public class ApiResponseHelper implements ResponseGenerator { } response.setState(network.getState().toString()); response.setRestartRequired(network.isRestartRequired()); - response.setRelated(network.getRelated()); + NetworkVO nw = ApiDBUtils.findNetworkById(network.getRelated()); + if (nw != null) { + response.setRelated(nw.getUuid()); + } response.setNetworkDomain(network.getNetworkDomain()); response.setDns1(profile.getDns1()); @@ -2752,7 +2817,12 @@ public class ApiResponseHelper implements ResponseGenerator { } response.setSpecifyIpRanges(network.getSpecifyIpRanges()); - response.setVpcId(network.getVpcId()); + if (network.getVpcId() != null) { + Vpc vpc = ApiDBUtils.findVpcById(network.getVpcId()); + if (vpc != null) { + response.setVpcId(vpc.getUuid()); + } + } response.setCanUseForDeploy(ApiDBUtils.canUseForDeploy(network)); //set tag information @@ -2837,7 +2907,7 @@ public class ApiResponseHelper implements ResponseGenerator { public NetworkACLResponse createNetworkACLResponse(FirewallRule networkACL) { NetworkACLResponse response = new NetworkACLResponse(); - response.setId(networkACL.getId()); + response.setId(networkACL.getUuid()); response.setProtocol(networkACL.getProtocol()); if (networkACL.getSourcePortStart() != null) { response.setStartPort(Integer.toString(networkACL.getSourcePortStart())); @@ -2959,11 +3029,14 @@ public class ApiResponseHelper implements ResponseGenerator { @Override public SystemVmInstanceResponse createSystemVmInstanceResponse(VirtualMachine vm) { SystemVmInstanceResponse vmResponse = new SystemVmInstanceResponse(); - vmResponse.setId(vm.getId()); + vmResponse.setId(vm.getUuid()); vmResponse.setSystemVmType(vm.getType().toString().toLowerCase()); vmResponse.setName(vm.getHostName()); if (vm.getHostId() != null) { - vmResponse.setHostId(vm.getHostId()); + Host host = ApiDBUtils.findHostById(vm.getHostId()); + if (host != null) { + vmResponse.setHostId(host.getUuid()); + } } if (vm.getState() != null) { vmResponse.setState(vm.getState().toString()); @@ -2982,10 +3055,18 @@ public class ApiResponseHelper implements ResponseGenerator { public PhysicalNetworkResponse createPhysicalNetworkResponse(PhysicalNetwork result) { PhysicalNetworkResponse response = new PhysicalNetworkResponse(); - response.setZoneId(result.getDataCenterId()); + DataCenter zone = ApiDBUtils.findZoneById(result.getDataCenterId()); + if (zone != null) { + response.setZoneId(zone.getUuid()); + } response.setNetworkSpeed(result.getSpeed()); response.setVlan(result.getVnet()); - response.setDomainId(result.getDomainId()); + if (result.getDomainId() != null) { + Domain domain = ApiDBUtils.findDomainById(result.getDomainId()); + if (domain != null) { + response.setDomainId(domain.getUuid()); + } + } response.setId(result.getUuid()); if (result.getBroadcastDomainRange() != null) { response.setBroadcastDomainRange(result.getBroadcastDomainRange().toString()); @@ -3057,8 +3138,14 @@ public class ApiResponseHelper implements ResponseGenerator { ProviderResponse response = new ProviderResponse(); response.setId(result.getUuid()); response.setName(result.getProviderName()); - response.setPhysicalNetworkId(result.getPhysicalNetworkId()); - response.setDestinationPhysicalNetworkId(result.getDestinationPhysicalNetworkId()); + PhysicalNetwork pnw = ApiDBUtils.findPhysicalNetworkById(result.getPhysicalNetworkId()); + if (pnw != null) { + response.setPhysicalNetworkId(pnw.getUuid()); + } + PhysicalNetwork dnw = ApiDBUtils.findPhysicalNetworkById(result.getDestinationPhysicalNetworkId()); + if (dnw != null) { + response.setDestinationPhysicalNetworkId(dnw.getUuid()); + } response.setState(result.getState().toString()); // set enabled services @@ -3102,13 +3189,15 @@ public class ApiResponseHelper implements ResponseGenerator { StickinessPolicy stickinessPolicy, LoadBalancer lb) { LBStickinessResponse spResponse = new LBStickinessResponse(); - spResponse.setlbRuleId(lb.getId()); + spResponse.setlbRuleId(lb.getUuid()); Account accountTemp = ApiDBUtils.findAccountById(lb.getAccountId()); if (accountTemp != null) { spResponse.setAccountName(accountTemp.getAccountName()); - spResponse.setDomainId(accountTemp.getDomainId()); - spResponse.setDomainName(ApiDBUtils.findDomainById( - accountTemp.getDomainId()).getName()); + Domain domain = ApiDBUtils.findDomainById(accountTemp.getDomainId()); + if (domain != null) { + spResponse.setDomainId(domain.getUuid()); + spResponse.setDomainName(domain.getName()); + } } List responses = new ArrayList(); @@ -3129,13 +3218,15 @@ public class ApiResponseHelper implements ResponseGenerator { if (lb == null) return spResponse; - spResponse.setlbRuleId(lb.getId()); + spResponse.setlbRuleId(lb.getUuid()); Account account = ApiDBUtils.findAccountById(lb.getAccountId()); if (account != null) { spResponse.setAccountName(account.getAccountName()); - spResponse.setDomainId(account.getDomainId()); - spResponse.setDomainName(ApiDBUtils.findDomainById( - account.getDomainId()).getName()); + Domain domain = ApiDBUtils.findDomainById(account.getDomainId()); + if (domain != null) { + spResponse.setDomainId(domain.getUuid()); + spResponse.setDomainName(domain.getName()); + } } List responses = new ArrayList(); @@ -3293,16 +3384,25 @@ public class ApiResponseHelper implements ResponseGenerator { @Override public PrivateGatewayResponse createPrivateGatewayResponse(PrivateGateway result) { PrivateGatewayResponse response = new PrivateGatewayResponse(); - response.setId(result.getId()); + response.setId(result.getUuid()); response.setVlan(result.getVlanTag()); response.setGateway(result.getGateway()); response.setNetmask(result.getNetmask()); - response.setVpcId(result.getVpcId()); - response.setZoneId(result.getZoneId()); + if (result.getVpcId() != null) { + Vpc vpc = ApiDBUtils.findVpcById(result.getVpcId()); + response.setVpcId(vpc.getUuid()); + } + DataCenter zone = ApiDBUtils.findZoneById(result.getZoneId()); - response.setZoneName(zone.getName()); + if (zone != null) { + response.setZoneId(zone.getUuid()); + response.setZoneName(zone.getName()); + } response.setAddress(result.getIp4Address()); - response.setPhysicalNetworkId(result.getPhysicalNetworkId()); + PhysicalNetwork pnet = ApiDBUtils.findPhysicalNetworkById(result.getPhysicalNetworkId()); + if (pnet != null) { + response.setPhysicalNetworkId(pnet.getUuid()); + } populateAccount(response, result.getAccountId()); populateDomain(response, result.getDomainId()); @@ -3344,7 +3444,7 @@ public class ApiResponseHelper implements ResponseGenerator { AutoScaleVmProfileResponse response = new AutoScaleVmProfileResponse(); response.setId(profile.getUuid()); if (profile.getZoneId() != null) { - DataCenterVO zone = ApiDBUtils.findZoneById(profile.getZoneId()); + DataCenter zone = ApiDBUtils.findZoneById(profile.getZoneId()); if (zone != null) { response.setZoneId(zone.getUuid()); } @@ -3437,8 +3537,13 @@ public class ApiResponseHelper implements ResponseGenerator { @Override public StaticRouteResponse createStaticRouteResponse(StaticRoute result) { StaticRouteResponse response = new StaticRouteResponse(); - response.setId(result.getId()); - response.setVpcId(result.getVpcId()); + response.setId(result.getUuid()); + if (result.getVpcId() != null) { + Vpc vpc = ApiDBUtils.findVpcById(result.getVpcId()); + if (vpc != null) { + response.setVpcId(vpc.getUuid()); + } + } response.setCidr(result.getCidr()); StaticRoute.State state = result.getState(); @@ -3466,9 +3571,12 @@ public class ApiResponseHelper implements ResponseGenerator { @Override public Site2SiteVpnGatewayResponse createSite2SiteVpnGatewayResponse(Site2SiteVpnGateway result) { Site2SiteVpnGatewayResponse response = new Site2SiteVpnGatewayResponse(); - response.setId(result.getId()); + response.setId(result.getUuid()); response.setIp(ApiDBUtils.findIpAddressById(result.getAddrId()).getAddress().toString()); - response.setVpcId(result.getVpcId()); + Vpc vpc = ApiDBUtils.findVpcById(result.getVpcId()); + if (vpc != null) { + response.setVpcId(result.getUuid()); + } response.setRemoved(result.getRemoved()); response.setObjectName("vpngateway"); @@ -3480,7 +3588,7 @@ public class ApiResponseHelper implements ResponseGenerator { @Override public Site2SiteCustomerGatewayResponse createSite2SiteCustomerGatewayResponse(Site2SiteCustomerGateway result) { Site2SiteCustomerGatewayResponse response = new Site2SiteCustomerGatewayResponse(); - response.setId(result.getId()); + response.setId(result.getUuid()); response.setName(result.getName()); response.setGatewayIp(result.getGatewayIp()); response.setGuestCidrList(result.getGuestCidrList()); @@ -3503,30 +3611,33 @@ public class ApiResponseHelper implements ResponseGenerator { @Override public Site2SiteVpnConnectionResponse createSite2SiteVpnConnectionResponse(Site2SiteVpnConnection result) { Site2SiteVpnConnectionResponse response = new Site2SiteVpnConnectionResponse(); - response.setId(result.getId()); + response.setId(result.getUuid()); - response.setVpnGatewayId(result.getVpnGatewayId()); Long vpnGatewayId = result.getVpnGatewayId(); if(vpnGatewayId != null) { - Site2SiteVpnGatewayVO vpnGateway = ApiDBUtils.findVpnGatewayById(vpnGatewayId); - - long ipId = vpnGateway.getAddrId(); - IPAddressVO ipObj = ApiDBUtils.findIpAddressById(ipId); - response.setIp(ipObj.getAddress().addr()); + Site2SiteVpnGateway vpnGateway = ApiDBUtils.findVpnGatewayById(vpnGatewayId); + if (vpnGateway != null) { + response.setVpnGatewayId(vpnGateway.getUuid()); + long ipId = vpnGateway.getAddrId(); + IPAddressVO ipObj = ApiDBUtils.findIpAddressById(ipId); + response.setIp(ipObj.getAddress().addr()); + } } - response.setCustomerGatewayId(result.getCustomerGatewayId()); Long customerGatewayId = result.getCustomerGatewayId(); if(customerGatewayId != null) { - Site2SiteCustomerGatewayVO customerGateway = ApiDBUtils.findCustomerGatewayById(customerGatewayId); - response.setGatewayIp(customerGateway.getGatewayIp()); - response.setGuestCidrList(customerGateway.getGuestCidrList()); - response.setIpsecPsk(customerGateway.getIpsecPsk()); - response.setIkePolicy(customerGateway.getIkePolicy()); - response.setEspPolicy(customerGateway.getEspPolicy()); + Site2SiteCustomerGateway customerGateway = ApiDBUtils.findCustomerGatewayById(customerGatewayId); + if (customerGateway != null) { + response.setCustomerGatewayId(customerGateway.getUuid()); + response.setGatewayIp(customerGateway.getGatewayIp()); + response.setGuestCidrList(customerGateway.getGuestCidrList()); + response.setIpsecPsk(customerGateway.getIpsecPsk()); + response.setIkePolicy(customerGateway.getIkePolicy()); + response.setEspPolicy(customerGateway.getEspPolicy()); response.setIkeLifetime(customerGateway.getIkeLifetime()); response.setEspLifetime(customerGateway.getEspLifetime()); response.setDpd(customerGateway.getDpd()); + } } populateAccount(response, result.getAccountId()); @@ -3556,4 +3667,28 @@ public class ApiResponseHelper implements ResponseGenerator { } + + @Override + public SnapshotScheduleResponse createSnapshotScheduleResponse(SnapshotSchedule snapshotSchedule) { + SnapshotScheduleResponse response = new SnapshotScheduleResponse(); + response.setId(snapshotSchedule.getUuid()); + if (snapshotSchedule.getVolumeId() != null) { + Volume vol = ApiDBUtils.findVolumeById(snapshotSchedule.getVolumeId()); + if (vol != null) { + response.setVolumeId(vol.getUuid()); + } + } + if (snapshotSchedule.getPolicyId() != null) { + SnapshotPolicy policy = ApiDBUtils.findSnapshotPolicyById(snapshotSchedule.getPolicyId()); + if (policy != null) { + response.setSnapshotPolicyId(policy.getUuid()); + } + } + response.setScheduled(snapshotSchedule.getScheduledTimestamp()); + + response.setObjectName("snapshot"); + return response; + } + + } diff --git a/server/src/com/cloud/dc/HostPodVO.java b/server/src/com/cloud/dc/HostPodVO.java index 731b6b58f81..b9f3712aa92 100644 --- a/server/src/com/cloud/dc/HostPodVO.java +++ b/server/src/com/cloud/dc/HostPodVO.java @@ -35,7 +35,7 @@ import com.cloud.utils.db.GenericDao; @Entity @Table(name = "host_pod_ref") -public class HostPodVO implements Pod, Identity { +public class HostPodVO implements Pod { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) long id; @@ -45,7 +45,7 @@ public class HostPodVO implements Pod, Identity { @Column(name = "data_center_id") private long dataCenterId; - + @Column(name = "gateway") private String gateway; @@ -57,14 +57,14 @@ public class HostPodVO implements Pod, Identity { @Column(name = "description") private String description; - + @Column(name="allocation_state") @Enumerated(value=EnumType.STRING) AllocationState allocationState; @Column(name = "external_dhcp") private Boolean externalDhcp; - + @Column(name=GenericDao.REMOVED_COLUMN) private Date removed; @@ -128,12 +128,12 @@ public class HostPodVO implements Pod, Identity { public void setCidrSize(int cidrSize) { this.cidrSize = cidrSize; } - + @Override public String getGateway() { return gateway; } - + public void setGateway(String gateway) { this.gateway = gateway; } @@ -145,33 +145,33 @@ public class HostPodVO implements Pod, Identity { public void setDescription(String description) { this.description = description; } - + public AllocationState getAllocationState() { return allocationState; } - + public void setAllocationState(AllocationState allocationState) { this.allocationState = allocationState; } - + // Use for comparisons only. public HostPodVO(Long id) { this.id = id; } - + @Override public int hashCode() { return NumbersUtil.hash(id); } - + public boolean getExternalDhcp() { return externalDhcp; } - + public void setExternalDhcp(boolean use) { externalDhcp = use; } - + @Override public boolean equals(Object obj) { if (obj instanceof HostPodVO) { @@ -180,16 +180,16 @@ public class HostPodVO implements Pod, Identity { return false; } } - + public Date getRemoved() { return removed; } - + @Override public String getUuid() { return this.uuid; } - + public void setUuid(String uuid) { this.uuid = uuid; } diff --git a/server/src/com/cloud/network/ExternalFirewallDeviceManagerImpl.java b/server/src/com/cloud/network/ExternalFirewallDeviceManagerImpl.java index 292255b78f8..553dc503c6e 100644 --- a/server/src/com/cloud/network/ExternalFirewallDeviceManagerImpl.java +++ b/server/src/com/cloud/network/ExternalFirewallDeviceManagerImpl.java @@ -5,7 +5,7 @@ // 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, @@ -162,10 +162,10 @@ public abstract class ExternalFirewallDeviceManagerImpl extends AdapterBase impl PhysicalNetworkServiceProviderVO ntwkSvcProvider = _physicalNetworkServiceProviderDao.findByServiceProvider(pNetwork.getId(), ntwkDevice.getNetworkServiceProvder()); if (ntwkSvcProvider == null ) { - throw new CloudRuntimeException("Network Service Provider: " + ntwkDevice.getNetworkServiceProvder() + + throw new CloudRuntimeException("Network Service Provider: " + ntwkDevice.getNetworkServiceProvder() + " is not enabled in the physical network: " + physicalNetworkId + "to add this device" ); } else if (ntwkSvcProvider.getState() == PhysicalNetworkServiceProvider.State.Shutdown) { - throw new CloudRuntimeException("Network Service Provider: " + ntwkSvcProvider.getProviderName() + + throw new CloudRuntimeException("Network Service Provider: " + ntwkSvcProvider.getProviderName() + " is not added or in shutdown state in the physical network: " + physicalNetworkId + "to add this device" ); } @@ -210,7 +210,7 @@ public abstract class ExternalFirewallDeviceManagerImpl extends AdapterBase impl capacity = _defaultFwCapacity; } - ExternalFirewallDeviceVO fwDevice = new ExternalFirewallDeviceVO(externalFirewall.getId(), pNetwork.getId(), ntwkSvcProvider.getProviderName(), + ExternalFirewallDeviceVO fwDevice = new ExternalFirewallDeviceVO(externalFirewall.getId(), pNetwork.getId(), ntwkSvcProvider.getProviderName(), deviceName, capacity, dedicatedUse); _externalFirewallDeviceDao.persist(fwDevice); @@ -261,7 +261,7 @@ public abstract class ExternalFirewallDeviceManagerImpl extends AdapterBase impl PhysicalNetworkServiceProviderVO ntwkSvcProvider = _physicalNetworkServiceProviderDao.findByServiceProvider(pNetwork.getId(), fwNetworkDevice.getNetworkServiceProvder()); if (ntwkSvcProvider == null) { - return null; + return null; } List fwDevices = _externalFirewallDeviceDao.listByPhysicalNetworkAndProvider(physicalNetworkId, ntwkSvcProvider.getProviderName()); @@ -270,7 +270,7 @@ public abstract class ExternalFirewallDeviceManagerImpl extends AdapterBase impl } return firewallHosts; } - + public ExternalFirewallDeviceVO getExternalFirewallForNetwork(Network network) { NetworkExternalFirewallVO fwDeviceForNetwork = _networkExternalFirewallDao.findByNetworkId(network.getId()); if (fwDeviceForNetwork != null) { @@ -292,7 +292,7 @@ public abstract class ExternalFirewallDeviceManagerImpl extends AdapterBase impl long physicalNetworkId = network.getPhysicalNetworkId(); List fwDevices = _externalFirewallDeviceDao.listByPhysicalNetwork(physicalNetworkId); - // loop through the firewall device in the physical network and pick the first-fit + // loop through the firewall device in the physical network and pick the first-fit for (ExternalFirewallDeviceVO fwDevice: fwDevices) { // max number of guest networks that can be mapped to this device long fullCapacity = fwDevice.getCapacity(); @@ -301,7 +301,7 @@ public abstract class ExternalFirewallDeviceManagerImpl extends AdapterBase impl } // get the list of guest networks that are mapped to this load balancer - List mappedNetworks = _networkExternalFirewallDao.listByFirewallDeviceId(fwDevice.getId()); + List mappedNetworks = _networkExternalFirewallDao.listByFirewallDeviceId(fwDevice.getId()); long usedCapacity = (mappedNetworks == null) ? 0 : mappedNetworks.size(); if ((fullCapacity - usedCapacity) > 0) { @@ -319,7 +319,7 @@ public abstract class ExternalFirewallDeviceManagerImpl extends AdapterBase impl public ExternalFirewallResponse createExternalFirewallResponse(Host externalFirewall) { Map fwDetails = _hostDetailDao.findDetails(externalFirewall.getId()); ExternalFirewallResponse response = new ExternalFirewallResponse(); - response.setId(externalFirewall.getId()); + response.setId(externalFirewall.getUuid()); response.setIpAddress(externalFirewall.getPrivateIpAddress()); response.setUsername(fwDetails.get("username")); response.setPublicInterface(fwDetails.get("publicInterface")); @@ -348,7 +348,7 @@ public abstract class ExternalFirewallDeviceManagerImpl extends AdapterBase impl try { if (deviceMapLock.lock(120)) { try { - ExternalFirewallDeviceVO device = findSuitableFirewallForNetwork(network); + ExternalFirewallDeviceVO device = findSuitableFirewallForNetwork(network); long externalFirewallId = device.getId(); NetworkExternalFirewallVO networkFW = new NetworkExternalFirewallVO(network.getId(), externalFirewallId); @@ -373,18 +373,18 @@ public abstract class ExternalFirewallDeviceManagerImpl extends AdapterBase impl } Account account = _accountDao.findByIdIncludingRemoved(network.getAccountId()); - - NetworkOffering offering = _networkOfferingDao.findById(network.getNetworkOfferingId()); + + NetworkOffering offering = _networkOfferingDao.findById(network.getNetworkOfferingId()); boolean sharedSourceNat = offering.getSharedSourceNat(); - + IPAddressVO sourceNatIp = null; if (!sharedSourceNat) { - // Get the source NAT IP address for this account - List sourceNatIps = _networkMgr.listPublicIpsAssignedToAccount(network.getAccountId(), + // Get the source NAT IP address for this account + List sourceNatIps = _networkMgr.listPublicIpsAssignedToAccount(network.getAccountId(), zoneId, true); if (sourceNatIps.size() != 1) { - String errorMsg = "External firewall was unable to find the source NAT IP address for account " + String errorMsg = "External firewall was unable to find the source NAT IP address for account " + account.getAccountName(); s_logger.error(errorMsg); return true; @@ -431,18 +431,18 @@ public abstract class ExternalFirewallDeviceManagerImpl extends AdapterBase impl // Insert a new NIC for this guest network to reserve the gateway address savePlaceholderNic(network, network.getGateway()); } - + // Delete any mappings used for inline external load balancers in this network List nicsInNetwork = _nicDao.listByNetworkId(network.getId()); for (NicVO nic : nicsInNetwork) { InlineLoadBalancerNicMapVO mapping = _inlineLoadBalancerNicMapDao.findByNicId(nic.getId()); - + if (mapping != null) { _nicDao.expunge(mapping.getNicId()); _inlineLoadBalancerNicMapDao.expunge(mapping.getId()); } } - + String action = add ? "implemented" : "shut down"; s_logger.debug("External firewall has " + action + " the guest network for account " + account.getAccountName() + "(id = " + account.getAccountId() + ") with VLAN tag " + guestVlanTag); @@ -527,26 +527,26 @@ public abstract class ExternalFirewallDeviceManagerImpl extends AdapterBase impl if (externalFirewall == null) { return false; } - + // Create/delete VPN IpAddress ip = _networkMgr.getIp(vpn.getServerAddressId()); - + // Mask the IP range with the network's VLAN tag String[] ipRange = vpn.getIpRange().split("-"); DataCenterVO zone = _dcDao.findById(network.getDataCenterId()); int vlanTag = Integer.parseInt(network.getBroadcastUri().getHost()); int offset = getVlanOffset(network.getPhysicalNetworkId(), vlanTag); int cidrSize = getGloballyConfiguredCidrSize(); - + for (int i = 0; i < 2; i++) { ipRange[i] = NetUtils.long2Ip((NetUtils.ip2Long(ipRange[i]) & 0xff000000) | (offset << (32 - cidrSize))); } - + String maskedIpRange = ipRange[0] + "-" + ipRange[1]; - + RemoteAccessVpnCfgCommand createVpnCmd = new RemoteAccessVpnCfgCommand(create, ip.getAddress().addr(), vpn.getLocalIp(), maskedIpRange, vpn.getIpsecPresharedKey()); createVpnCmd.setAccessDetail(NetworkElementCommand.ACCOUNT_ID, String.valueOf(network.getAccountId())); - createVpnCmd.setAccessDetail(NetworkElementCommand.GUEST_NETWORK_CIDR, network.getCidr()); + createVpnCmd.setAccessDetail(NetworkElementCommand.GUEST_NETWORK_CIDR, network.getCidr()); Answer answer = _agentMgr.easySend(externalFirewall.getId(), createVpnCmd); if (answer == null || !answer.getResult()) { String details = (answer != null) ? answer.getDetails() : "details unavailable"; @@ -554,12 +554,12 @@ public abstract class ExternalFirewallDeviceManagerImpl extends AdapterBase impl s_logger.error(msg); throw new ResourceUnavailableException(msg, DataCenter.class, zone.getId()); } - + // Add/delete users List vpnUsers = _vpnUsersDao.listByAccount(vpn.getAccountId()); return manageRemoteAccessVpnUsers(network, vpn, vpnUsers); - } - + } + public boolean manageRemoteAccessVpnUsers(Network network, RemoteAccessVpn vpn, List vpnUsers) throws ResourceUnavailableException { ExternalFirewallDeviceVO fwDeviceVO = getExternalFirewallForNetwork(network); HostVO externalFirewall = _hostDao.findById(fwDeviceVO.getHostId()); @@ -567,7 +567,7 @@ public abstract class ExternalFirewallDeviceManagerImpl extends AdapterBase impl if (externalFirewall == null) { return false; } - + List addUsers = new ArrayList(); List removeUsers = new ArrayList(); for (VpnUser user : vpnUsers) { @@ -578,11 +578,11 @@ public abstract class ExternalFirewallDeviceManagerImpl extends AdapterBase impl removeUsers.add(user); } } - + VpnUsersCfgCommand addUsersCmd = new VpnUsersCfgCommand(addUsers, removeUsers); addUsersCmd.setAccessDetail(NetworkElementCommand.ACCOUNT_ID, String.valueOf(network.getAccountId())); - addUsersCmd.setAccessDetail(NetworkElementCommand.GUEST_NETWORK_CIDR, network.getCidr()); - + addUsersCmd.setAccessDetail(NetworkElementCommand.GUEST_NETWORK_CIDR, network.getCidr()); + Answer answer = _agentMgr.easySend(externalFirewall.getId(), addUsersCmd); if (answer == null || !answer.getResult()) { String details = (answer != null) ? answer.getDetails() : "details unavailable"; @@ -591,7 +591,7 @@ public abstract class ExternalFirewallDeviceManagerImpl extends AdapterBase impl s_logger.error(msg); throw new ResourceUnavailableException(msg, DataCenter.class, zone.getId()); } - + return true; } @@ -608,7 +608,7 @@ public abstract class ExternalFirewallDeviceManagerImpl extends AdapterBase impl int lowestVlanTag = Integer.valueOf(vlanRange[0]); return vlanTag - lowestVlanTag; } - + private NicVO savePlaceholderNic(Network network, String ipAddress) { NicVO nic = new NicVO(null, null, network.getId(), null); nic.setIp4Address(ipAddress); @@ -616,7 +616,7 @@ public abstract class ExternalFirewallDeviceManagerImpl extends AdapterBase impl nic.setState(State.Reserved); return _nicDao.persist(nic); } - + public int getGloballyConfiguredCidrSize() { try { String globalVlanBits = _configDao.getValue(Config.GuestVlanBits.key()); diff --git a/server/src/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java b/server/src/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java index dc4e42ab9bc..42cd694613f 100644 --- a/server/src/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java +++ b/server/src/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java @@ -5,7 +5,7 @@ // 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, @@ -339,7 +339,7 @@ public abstract class ExternalLoadBalancerDeviceManagerImpl extends AdapterBase public ExternalLoadBalancerResponse createExternalLoadBalancerResponse(Host externalLoadBalancer) { Map lbDetails = _hostDetailDao.findDetails(externalLoadBalancer.getId()); ExternalLoadBalancerResponse response = new ExternalLoadBalancerResponse(); - response.setId(externalLoadBalancer.getId()); + response.setId(externalLoadBalancer.getUuid()); response.setIpAddress(externalLoadBalancer.getPrivateIpAddress()); response.setUsername(lbDetails.get("username")); response.setPublicInterface(lbDetails.get("publicInterface")); diff --git a/server/src/com/cloud/network/ExternalNetworkDeviceManagerImpl.java b/server/src/com/cloud/network/ExternalNetworkDeviceManagerImpl.java index 39f2cc8dbe2..38fc6f51031 100755 --- a/server/src/com/cloud/network/ExternalNetworkDeviceManagerImpl.java +++ b/server/src/com/cloud/network/ExternalNetworkDeviceManagerImpl.java @@ -103,17 +103,17 @@ public class ExternalNetworkDeviceManagerImpl implements ExternalNetworkDeviceMa ScheduledExecutorService _executor; int _externalNetworkStatsInterval; - private final static IdentityService _identityService = (IdentityService)ComponentLocator.getLocator(ManagementServer.Name).getManager(IdentityService.class); - + private final static IdentityService _identityService = (IdentityService)ComponentLocator.getLocator(ManagementServer.Name).getManager(IdentityService.class); + private static final org.apache.log4j.Logger s_logger = Logger.getLogger(ExternalNetworkDeviceManagerImpl.class); protected String _name; - + @Override public boolean configure(String name, Map params) throws ConfigurationException { _name = name; return true; } - + @Override public boolean start() { return true; @@ -128,14 +128,14 @@ public class ExternalNetworkDeviceManagerImpl implements ExternalNetworkDeviceMa public String getName() { return _name; } - + @Override public Host addNetworkDevice(AddNetworkDeviceCmd cmd) { Map paramList = cmd.getParamList(); if (paramList == null) { throw new CloudRuntimeException("Parameter list is null"); } - + Collection paramsCollection = paramList.values(); HashMap params = (HashMap) (paramsCollection.toArray())[0]; if (cmd.getDeviceType().equalsIgnoreCase(NetworkDevice.ExternalDhcp.getName())) { @@ -201,8 +201,8 @@ public class ExternalNetworkDeviceManagerImpl implements ExternalNetworkDeviceMa } else { throw new CloudRuntimeException("Unsupported network device type:" + host.getType()); } - - response.setId(device.getId()); + + response.setId(device.getUuid()); return response; } @@ -219,18 +219,18 @@ public class ExternalNetworkDeviceManagerImpl implements ExternalNetworkDeviceMa // List devs = _hostDao.listBy(type, zoneId); // res.addAll(devs); // } - + // return res; return null; } - + @Override public List listNetworkDevice(ListNetworkDeviceCmd cmd) { Map paramList = cmd.getParamList(); if (paramList == null) { throw new CloudRuntimeException("Parameter list is null"); } - + List res; Collection paramsCollection = paramList.values(); HashMap params = (HashMap) (paramsCollection.toArray())[0]; @@ -245,7 +245,7 @@ public class ExternalNetworkDeviceManagerImpl implements ExternalNetworkDeviceMa } else if (cmd.getDeviceType() == null){ Long zoneId = Long.parseLong((String) params.get(ApiConstants.ZONE_ID)); Long podId = Long.parseLong((String)params.get(ApiConstants.POD_ID)); - Long physicalNetworkId = (params.get(ApiConstants.PHYSICAL_NETWORK_ID)==null)?Long.parseLong((String)params.get(ApiConstants.PHYSICAL_NETWORK_ID)):null; + Long physicalNetworkId = (params.get(ApiConstants.PHYSICAL_NETWORK_ID)==null)?Long.parseLong((String)params.get(ApiConstants.PHYSICAL_NETWORK_ID)):null; List res1 = listNetworkDevice(zoneId, physicalNetworkId, podId, Host.Type.PxeServer); List res2 = listNetworkDevice(zoneId, physicalNetworkId, podId, Host.Type.ExternalDhcp); List res3 = listNetworkDevice(zoneId, physicalNetworkId, podId, Host.Type.ExternalLoadBalancer); @@ -259,7 +259,7 @@ public class ExternalNetworkDeviceManagerImpl implements ExternalNetworkDeviceMa } else { throw new CloudRuntimeException("Unknown network device type:" + cmd.getDeviceType()); } - + return res; } diff --git a/server/src/com/cloud/network/vpc/StaticRouteVO.java b/server/src/com/cloud/network/vpc/StaticRouteVO.java index 099fb479d6a..41c3570f78b 100644 --- a/server/src/com/cloud/network/vpc/StaticRouteVO.java +++ b/server/src/com/cloud/network/vpc/StaticRouteVO.java @@ -34,41 +34,41 @@ import com.cloud.utils.db.GenericDao; @Entity @Table(name="static_routes") -public class StaticRouteVO implements Identity, StaticRoute{ +public class StaticRouteVO implements StaticRoute{ @Id @GeneratedValue(strategy=GenerationType.IDENTITY) @Column(name="id") long id; - + @Column(name="uuid") String uuid; - + @Column(name="vpc_gateway_id", updatable=false) long vpcGatewayId; - + @Column(name="cidr") private String cidr; - + @Enumerated(value=EnumType.STRING) @Column(name="state") State state; - + @Column(name="vpc_id") private Long vpcId; - + @Column(name = "account_id") long accountId; @Column(name = "domain_id") long domainId; - + @Column(name=GenericDao.CREATED_COLUMN) Date created; - + protected StaticRouteVO(){ this.uuid = UUID.randomUUID().toString(); } - + /** * @param vpcGatewayId * @param cidr @@ -86,7 +86,7 @@ public class StaticRouteVO implements Identity, StaticRoute{ this.domainId = domainId; this.uuid = UUID.randomUUID().toString(); } - + @Override public long getVpcGatewayId() { return vpcGatewayId; @@ -130,7 +130,7 @@ public class StaticRouteVO implements Identity, StaticRoute{ public void setState(State state) { this.state = state; } - + @Override public String toString() { StringBuilder buf = new StringBuilder("StaticRoute["); diff --git a/server/src/com/cloud/offerings/NetworkOfferingVO.java b/server/src/com/cloud/offerings/NetworkOfferingVO.java index f73c372d2ad..6cb1d2aebc8 100755 --- a/server/src/com/cloud/offerings/NetworkOfferingVO.java +++ b/server/src/com/cloud/offerings/NetworkOfferingVO.java @@ -5,7 +5,7 @@ // 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, @@ -36,7 +36,7 @@ import com.cloud.utils.db.GenericDao; @Entity @Table(name = "network_offerings") -public class NetworkOfferingVO implements NetworkOffering, Identity { +public class NetworkOfferingVO implements NetworkOffering { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @@ -301,7 +301,7 @@ public class NetworkOfferingVO implements NetworkOffering, Identity { /** * Network Offering for all system vms. - * + * * @param name * @param trafficType * @param specifyIpRanges @@ -311,9 +311,9 @@ public class NetworkOfferingVO implements NetworkOffering, Identity { this(name, "System Offering for " + name, trafficType, true, false, 0, 0, true, Availability.Required, null, null, true, specifyIpRanges); this.state = State.Enabled; } - + public NetworkOfferingVO(String name, Network.GuestType guestType) { - this(name, "System Offering for " + name, TrafficType.Guest, true, true, 0, 0, true, Availability.Optional, + this(name, "System Offering for " + name, TrafficType.Guest, true, true, 0, 0, true, Availability.Optional, null, Network.GuestType.Isolated, true, false); this.state = State.Enabled; } diff --git a/server/src/com/cloud/server/api/response/ExternalFirewallResponse.java b/server/src/com/cloud/server/api/response/ExternalFirewallResponse.java index a5913cf5e47..c6c7c4b7172 100644 --- a/server/src/com/cloud/server/api/response/ExternalFirewallResponse.java +++ b/server/src/com/cloud/server/api/response/ExternalFirewallResponse.java @@ -17,7 +17,6 @@ package com.cloud.server.api.response; import org.apache.cloudstack.api.ApiConstants; -import com.cloud.utils.IdentityProxy; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; import org.apache.cloudstack.api.response.NetworkDeviceResponse; @@ -25,122 +24,122 @@ import org.apache.cloudstack.api.response.NetworkDeviceResponse; public class ExternalFirewallResponse extends NetworkDeviceResponse { @SerializedName(ApiConstants.ID) @Param(description="the ID of the external firewall") - private IdentityProxy id = new IdentityProxy("host"); - + private String id; + @SerializedName(ApiConstants.ZONE_ID) @Param(description="the zone ID of the external firewall") - private IdentityProxy zoneId = new IdentityProxy("data_center"); - + private String zoneId; + @SerializedName(ApiConstants.IP_ADDRESS) @Param(description="the management IP address of the external firewall") private String ipAddress; - + @SerializedName(ApiConstants.USERNAME) @Param(description="the username that's used to log in to the external firewall") private String username; - + @SerializedName(ApiConstants.PUBLIC_INTERFACE) @Param(description="the public interface of the external firewall") private String publicInterface; - + @SerializedName(ApiConstants.USAGE_INTERFACE) @Param(description="the usage interface of the external firewall") private String usageInterface; - + @SerializedName(ApiConstants.PRIVATE_INTERFACE) @Param(description="the private interface of the external firewall") private String privateInterface; - + @SerializedName(ApiConstants.PUBLIC_ZONE) @Param(description="the public security zone of the external firewall") private String publicZone; - + @SerializedName(ApiConstants.PRIVATE_ZONE) @Param(description="the private security zone of the external firewall") private String privateZone; - + @SerializedName(ApiConstants.NUM_RETRIES) @Param(description="the number of times to retry requests to the external firewall") private String numRetries; - + @SerializedName(ApiConstants.TIMEOUT) @Param(description="the timeout (in seconds) for requests to the external firewall") private String timeout; - - 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 Long getZoneId() { - return zoneId.getValue(); + + public String getZoneId() { + return zoneId; } - - public void setZoneId(Long zoneId) { - this.zoneId.setValue(zoneId); + + public void setZoneId(String zoneId) { + this.zoneId = zoneId; } - + public String getIpAddress() { return ipAddress; } - + public void setIpAddress(String ipAddress) { this.ipAddress = ipAddress; } - + public String getUsername() { return username; } - + public void setUsername(String username) { this.username = username; } - + public String getPublicInterface() { return publicInterface; } - + public void setPublicInterface(String publicInterface) { this.publicInterface = publicInterface; } - + public String getUsageInterface() { return usageInterface; } - + public void setUsageInterface(String usageInterface) { this.usageInterface = usageInterface; } - + public String getPrivateInterface() { return privateInterface; } - + public void setPrivateInterface(String privateInterface) { this.privateInterface = privateInterface; } - + public String getPublicZone() { return publicZone; } - + public void setPublicZone(String publicZone) { this.publicZone = publicZone; } - + public String getPrivateZone() { return privateZone; } - + public void setPrivateZone(String privateZone) { this.privateZone = privateZone; } - + public String getNumRetries() { return numRetries; } - + public void setNumRetries(String numRetries) { this.numRetries = numRetries; } - + public String getTimeout() { return timeout; } - + public void setTimeout(String timeout) { this.timeout = timeout; } diff --git a/server/src/com/cloud/server/api/response/ExternalLoadBalancerResponse.java b/server/src/com/cloud/server/api/response/ExternalLoadBalancerResponse.java index c5dfa5a6949..ccda410eeb8 100644 --- a/server/src/com/cloud/server/api/response/ExternalLoadBalancerResponse.java +++ b/server/src/com/cloud/server/api/response/ExternalLoadBalancerResponse.java @@ -17,7 +17,6 @@ package com.cloud.server.api.response; import org.apache.cloudstack.api.ApiConstants; -import com.cloud.utils.IdentityProxy; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; import org.apache.cloudstack.api.response.NetworkDeviceResponse; @@ -25,78 +24,78 @@ import org.apache.cloudstack.api.response.NetworkDeviceResponse; public class ExternalLoadBalancerResponse extends NetworkDeviceResponse { @SerializedName(ApiConstants.ID) @Param(description="the ID of the external load balancer") - private IdentityProxy id = new IdentityProxy("host"); - + private String id; + @SerializedName(ApiConstants.ZONE_ID) @Param(description="the zone ID of the external load balancer") - private IdentityProxy zoneId = new IdentityProxy("data_center"); - + private String zoneId; + @SerializedName(ApiConstants.IP_ADDRESS) @Param(description="the management IP address of the external load balancer") private String ipAddress; - + @SerializedName(ApiConstants.USERNAME) @Param(description="the username that's used to log in to the external load balancer") private String username; - + @SerializedName(ApiConstants.PUBLIC_INTERFACE) @Param(description="the public interface of the external load balancer") private String publicInterface; - + @SerializedName(ApiConstants.PRIVATE_INTERFACE) @Param(description="the private interface of the external load balancer") private String privateInterface; - + @SerializedName(ApiConstants.NUM_RETRIES) @Param(description="the number of times to retry requests to the external load balancer") private String numRetries; - - 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 Long getZoneId() { - return zoneId.getValue(); + + public String getZoneId() { + return zoneId; } - - public void setZoneId(Long zoneId) { - this.zoneId.setValue(zoneId); + + public void setZoneId(String zoneId) { + this.zoneId = zoneId; } - + public String getIpAddress() { return ipAddress; } - + public void setIpAddress(String ipAddress) { this.ipAddress = ipAddress; } - + public String getUsername() { return username; } - + public void setUsername(String username) { this.username = username; } - + public String getPublicInterface() { return publicInterface; } - + public void setPublicInterface(String publicInterface) { this.publicInterface = publicInterface; } - + public String getPrivateInterface() { return privateInterface; } - + public void setPrivateInterface(String privateInterface) { this.privateInterface = privateInterface; } - + public String getNumRetries() { return numRetries; } - + public void setNumRetries(String numRetries) { this.numRetries = numRetries; } From ba5fba939c1af0f936ac752da280fc040b5bdd09 Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Tue, 18 Dec 2012 16:22:37 -0800 Subject: [PATCH 143/421] api: Fix method name findByXId to findByUuid - findByXId is read as find using some external Id (used by external network devices for ex.) - what we really need is findByUuid that finds a unique VO using a uuid string Signed-off-by: Rohit Yadav --- utils/src/com/cloud/utils/db/GenericDao.java | 4 ++-- utils/src/com/cloud/utils/db/GenericDaoBase.java | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/utils/src/com/cloud/utils/db/GenericDao.java b/utils/src/com/cloud/utils/db/GenericDao.java index 082748a532a..2fae1afe43d 100755 --- a/utils/src/com/cloud/utils/db/GenericDao.java +++ b/utils/src/com/cloud/utils/db/GenericDao.java @@ -55,8 +55,8 @@ public interface GenericDao { T findById(ID id, boolean fresh); - // Finds a VO object using uuid - T findByXId(ID uuid); + // Finds one unique VO using uuid + T findByUuid(ID uuid); /** * @return VO object ready to be used for update. It won't have any fields filled in. diff --git a/utils/src/com/cloud/utils/db/GenericDaoBase.java b/utils/src/com/cloud/utils/db/GenericDaoBase.java index 6bc49bf963e..92e9e1c4405 100755 --- a/utils/src/com/cloud/utils/db/GenericDaoBase.java +++ b/utils/src/com/cloud/utils/db/GenericDaoBase.java @@ -915,7 +915,7 @@ public abstract class GenericDaoBase implements Gene @Override @DB(txn=false) @SuppressWarnings("unchecked") - public T findByXId(final ID uuid) { + public T findByUuid(final ID uuid) { SearchCriteria sc = createSearchCriteria(); sc.addAnd("uuid", SearchCriteria.Op.EQ, uuid); return findOneBy(sc); From 22ee4200c32912b06027618be1793a2c336cc0f6 Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Tue, 18 Dec 2012 16:25:25 -0800 Subject: [PATCH 144/421] api: Fix findByXId to findByUuid in EntityManager and ApiDispatcher Signed-off-by: Rohit Yadav --- api/src/com/cloud/dao/EntityManager.java | 9 +++++++++ server/src/com/cloud/api/ApiDispatcher.java | 4 ++-- server/src/com/cloud/dao/EntityManagerImpl.java | 10 ++++++++-- 3 files changed, 19 insertions(+), 4 deletions(-) diff --git a/api/src/com/cloud/dao/EntityManager.java b/api/src/com/cloud/dao/EntityManager.java index 4ddfcec685f..4e4b9c293b5 100644 --- a/api/src/com/cloud/dao/EntityManager.java +++ b/api/src/com/cloud/dao/EntityManager.java @@ -38,6 +38,15 @@ public interface EntityManager { */ public T findById(Class entityType, K id); + /** + * Finds a unique entity by uuid string + * @param entity class + * @param entityType type of entity you're looking for. + * @param uuid the unique id + * @return T if found, null if not. + */ + public T findByUuid(Class entityType, String uuid); + /** * Finds an entity by external id which is always String * @param entity class diff --git a/server/src/com/cloud/api/ApiDispatcher.java b/server/src/com/cloud/api/ApiDispatcher.java index e75a15cccff..32f81075eb9 100755 --- a/server/src/com/cloud/api/ApiDispatcher.java +++ b/server/src/com/cloud/api/ApiDispatcher.java @@ -626,8 +626,8 @@ public class ApiDispatcher { // Go through each entity which is an interface to a VO class and get a VO object // Try to getId() for the object using reflection, break on first non-null value for (Class entity: entities) { - // findByXId returns a VO object using uuid, use reflect to get the Id - Object objVO = s_instance._entityMgr.findByXId(entity, paramObj.toString()); + // findByUuid returns one VO object using uuid, use reflect to get the Id + Object objVO = s_instance._entityMgr.findByUuid(entity, paramObj.toString()); if (objVO == null) { continue; } diff --git a/server/src/com/cloud/dao/EntityManagerImpl.java b/server/src/com/cloud/dao/EntityManagerImpl.java index 4d7f7fb2dd7..2eee445f933 100644 --- a/server/src/com/cloud/dao/EntityManagerImpl.java +++ b/server/src/com/cloud/dao/EntityManagerImpl.java @@ -45,9 +45,15 @@ public class EntityManagerImpl implements EntityManager, Manager { } @Override - public T findByXId(Class entityType, String xid) { + public T findByUuid(Class entityType, String uuid) { + // Finds and returns a unique VO using uuid, null if entity not found in db GenericDao dao = (GenericDao)GenericDaoBase.getDao(entityType); - return dao.findByXId(xid); + return dao.findByUuid(uuid); + } + + @Override + public T findByXId(Class entityType, String xid) { + return null; } @Override From 434258080f2dad95bbdbdd67f9517af2eac1cf85 Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Tue, 18 Dec 2012 17:15:00 -0800 Subject: [PATCH 145/421] api: Fix NullPointerException in ApiResponseHelper for DomainResponse Signed-off-by: Rohit Yadav --- server/src/com/cloud/api/ApiResponseHelper.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/server/src/com/cloud/api/ApiResponseHelper.java b/server/src/com/cloud/api/ApiResponseHelper.java index 27fb6470d3b..8fa8bad13d3 100755 --- a/server/src/com/cloud/api/ApiResponseHelper.java +++ b/server/src/com/cloud/api/ApiResponseHelper.java @@ -440,7 +440,10 @@ public class ApiResponseHelper implements ResponseGenerator { domainResponse.setId(domain.getUuid()); domainResponse.setLevel(domain.getLevel()); domainResponse.setNetworkDomain(domain.getNetworkDomain()); - domainResponse.setParentDomainId(ApiDBUtils.findDomainById(domain.getParent()).getUuid()); + Domain parentDomain = ApiDBUtils.findDomainById(domain.getParent()); + if (parentDomain != null) { + domainResponse.setParentDomainId(parentDomain.getUuid()); + } StringBuilder domainPath = new StringBuilder("ROOT"); (domainPath.append(domain.getPath())).deleteCharAt(domainPath.length() - 1); domainResponse.setPath(domainPath.toString()); From a9df2cb0f53d5d6b8d5837dac220a264d1023d1d Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Tue, 18 Dec 2012 17:41:01 -0800 Subject: [PATCH 146/421] api: Fix NullPointerException for listProjects in ProjectJoinDaoImpl Signed-off-by: Rohit Yadav --- server/src/com/cloud/api/query/dao/ProjectJoinDaoImpl.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/server/src/com/cloud/api/query/dao/ProjectJoinDaoImpl.java b/server/src/com/cloud/api/query/dao/ProjectJoinDaoImpl.java index a2aaa215b2b..3663e0734ac 100644 --- a/server/src/com/cloud/api/query/dao/ProjectJoinDaoImpl.java +++ b/server/src/com/cloud/api/query/dao/ProjectJoinDaoImpl.java @@ -59,8 +59,9 @@ public class ProjectJoinDaoImpl extends GenericDaoBase impl response.setId(proj.getUuid()); response.setName(proj.getName()); response.setDisplaytext(proj.getDisplayText()); - response.setState(proj.getState().toString()); - + if (proj.getState() != null) { + response.setState(proj.getState().toString()); + } response.setDomainId(proj.getDomainUuid()); response.setDomain(proj.getDomainName()); From 32ca9e2aa4e2265a483911ef91208d0be84f3269 Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Tue, 18 Dec 2012 17:42:11 -0800 Subject: [PATCH 147/421] api: Annotate ListRoutersCmd, fix @Entity for Network,User,VPC Response Signed-off-by: Rohit Yadav --- .../command/admin/router/ListRoutersCmd.java | 33 ++++++++++--------- .../api/response/NetworkResponse.java | 3 +- .../api/response/UserVmResponse.java | 4 ++- .../cloudstack/api/response/VpcResponse.java | 3 ++ 4 files changed, 26 insertions(+), 17 deletions(-) diff --git a/api/src/org/apache/cloudstack/api/command/admin/router/ListRoutersCmd.java b/api/src/org/apache/cloudstack/api/command/admin/router/ListRoutersCmd.java index 1995384593d..334c85cfce0 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/router/ListRoutersCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/router/ListRoutersCmd.java @@ -20,13 +20,16 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; 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.response.DomainRouterResponse; +import org.apache.cloudstack.api.response.HostResponse; import org.apache.cloudstack.api.response.ListResponse; +import org.apache.cloudstack.api.response.PodResponse; +import org.apache.cloudstack.api.response.NetworkResponse; +import org.apache.cloudstack.api.response.UserVmResponse; +import org.apache.cloudstack.api.response.VpcResponse; +import org.apache.cloudstack.api.response.ZoneResponse; import com.cloud.async.AsyncJob; @@ -40,34 +43,34 @@ public class ListRoutersCmd extends BaseListProjectAndAccountResourcesCmd { //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - @IdentityMapper(entityTableName="host") - @Parameter(name=ApiConstants.HOST_ID, type=CommandType.LONG, description="the host ID of the router") + @Parameter(name=ApiConstants.HOST_ID, type=CommandType.UUID, entityType=HostResponse.class, + description="the host ID of the router") private Long hostId; - @IdentityMapper(entityTableName="vm_instance") - @Parameter(name=ApiConstants.ID, type=CommandType.LONG, description="the ID of the disk router") + @Parameter(name=ApiConstants.ID, type=CommandType.UUID, entityType=UserVmResponse.class, + description="the ID of the disk router") private Long id; @Parameter(name=ApiConstants.NAME, type=CommandType.STRING, description="the name of the router") private String routerName; - @IdentityMapper(entityTableName="host_pod_ref") - @Parameter(name=ApiConstants.POD_ID, type=CommandType.LONG, description="the Pod ID of the router") + @Parameter(name=ApiConstants.POD_ID, type=CommandType.UUID, entityType=PodResponse.class, + description="the Pod ID of the router") private Long podId; @Parameter(name=ApiConstants.STATE, type=CommandType.STRING, description="the state of the router") private String state; - @IdentityMapper(entityTableName="data_center") - @Parameter(name=ApiConstants.ZONE_ID, type=CommandType.LONG, description="the Zone ID of the router") + @Parameter(name=ApiConstants.ZONE_ID, type=CommandType.UUID, entityType=ZoneResponse.class, + description="the Zone ID of the router") private Long zoneId; - @IdentityMapper(entityTableName="networks") - @Parameter(name=ApiConstants.NETWORK_ID, type=CommandType.LONG, description="list by network id") + @Parameter(name=ApiConstants.NETWORK_ID, type=CommandType.UUID, entityType=NetworkResponse.class, + description="list by network id") private Long networkId; - @IdentityMapper(entityTableName="vpc") - @Parameter(name=ApiConstants.VPC_ID, type=CommandType.LONG, description="List networks by VPC") + @Parameter(name=ApiConstants.VPC_ID, type=CommandType.UUID, entityType=VpcResponse.class, + description="List networks by VPC") private Long vpcId; @Parameter(name=ApiConstants.FOR_VPC, type=CommandType.BOOLEAN, description="if true is passed for this parameter, list only VPC routers") diff --git a/api/src/org/apache/cloudstack/api/response/NetworkResponse.java b/api/src/org/apache/cloudstack/api/response/NetworkResponse.java index fe71371e81d..f5110c73ff6 100644 --- a/api/src/org/apache/cloudstack/api/response/NetworkResponse.java +++ b/api/src/org/apache/cloudstack/api/response/NetworkResponse.java @@ -18,6 +18,7 @@ package org.apache.cloudstack.api.response; import java.util.List; +import com.cloud.network.Network; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseResponse; import org.apache.cloudstack.api.Entity; @@ -26,7 +27,7 @@ import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; @SuppressWarnings("unused") -@Entity(value = ProjectAccount.class) +@Entity(value = {Network.class, ProjectAccount.class}) public class NetworkResponse extends BaseResponse implements ControlledEntityResponse{ @SerializedName(ApiConstants.ID) @Param(description="the id of the network") diff --git a/api/src/org/apache/cloudstack/api/response/UserVmResponse.java b/api/src/org/apache/cloudstack/api/response/UserVmResponse.java index bea841f5e09..767ee0f4a7e 100644 --- a/api/src/org/apache/cloudstack/api/response/UserVmResponse.java +++ b/api/src/org/apache/cloudstack/api/response/UserVmResponse.java @@ -20,6 +20,8 @@ import java.util.Date; import java.util.HashSet; import java.util.Set; +import com.cloud.network.router.VirtualRouter; +import com.cloud.uservm.UserVm; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseResponse; import org.apache.cloudstack.api.Entity; @@ -28,7 +30,7 @@ import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; @SuppressWarnings("unused") -@Entity(value = VirtualMachine.class) +@Entity(value={VirtualMachine.class, UserVm.class, VirtualRouter.class}) public class UserVmResponse extends BaseResponse implements ControlledEntityResponse { @SerializedName(ApiConstants.ID) @Param(description="the ID of the virtual machine") private String id; diff --git a/api/src/org/apache/cloudstack/api/response/VpcResponse.java b/api/src/org/apache/cloudstack/api/response/VpcResponse.java index d23337f34c6..d0666f4c6cd 100644 --- a/api/src/org/apache/cloudstack/api/response/VpcResponse.java +++ b/api/src/org/apache/cloudstack/api/response/VpcResponse.java @@ -19,12 +19,15 @@ package org.apache.cloudstack.api.response; import java.util.Date; import java.util.List; +import com.cloud.network.vpc.Vpc; import org.apache.cloudstack.api.ApiConstants; import com.cloud.serializer.Param; import com.cloud.utils.IdentityProxy; import com.google.gson.annotations.SerializedName; import org.apache.cloudstack.api.BaseResponse; +import org.apache.cloudstack.api.Entity; +@Entity(value=Vpc.class) @SuppressWarnings("unused") public class VpcResponse extends BaseResponse implements ControlledEntityResponse{ @SerializedName("id") @Param(description="the id of the VPC") From 3e292869eb34d804e27358e4ba596adf589d2a67 Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Tue, 18 Dec 2012 18:07:37 -0800 Subject: [PATCH 148/421] api: Annotate project API cmd and response Signed-off-by: Rohit Yadav --- .../api/command/user/project/ActivateProjectCmd.java | 4 ++-- .../api/command/user/project/CreateProjectCmd.java | 6 +++--- .../api/command/user/project/DeleteProjectCmd.java | 5 +++-- .../user/project/DeleteProjectInvitationCmd.java | 6 +++--- .../user/project/ListProjectInvitationsCmd.java | 10 +++++----- .../api/command/user/project/ListProjectsCmd.java | 5 ++--- .../api/command/user/project/SuspendProjectCmd.java | 5 ++--- .../api/command/user/project/UpdateProjectCmd.java | 5 ++--- .../user/project/UpdateProjectInvitationCmd.java | 6 +++--- .../api/response/ProjectInvitationResponse.java | 4 +++- 10 files changed, 28 insertions(+), 28 deletions(-) diff --git a/api/src/org/apache/cloudstack/api/command/user/project/ActivateProjectCmd.java b/api/src/org/apache/cloudstack/api/command/user/project/ActivateProjectCmd.java index 40535d84d30..8821be9a18d 100644 --- a/api/src/org/apache/cloudstack/api/command/user/project/ActivateProjectCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/project/ActivateProjectCmd.java @@ -41,8 +41,8 @@ public class ActivateProjectCmd extends BaseAsyncCmd { //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - @IdentityMapper(entityTableName="projects") - @Parameter(name=ApiConstants.ID, type=CommandType.LONG, required=true, description="id of the project to be modified") + @Parameter(name=ApiConstants.ID, type=CommandType.UUID, entityType=ProjectResponse.class, + required=true, description="id of the project to be modified") private Long id; ///////////////////////////////////////////////////// diff --git a/api/src/org/apache/cloudstack/api/command/user/project/CreateProjectCmd.java b/api/src/org/apache/cloudstack/api/command/user/project/CreateProjectCmd.java index c979158d916..8a20fe65af9 100644 --- a/api/src/org/apache/cloudstack/api/command/user/project/CreateProjectCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/project/CreateProjectCmd.java @@ -21,10 +21,10 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseAsyncCreateCmd; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; +import org.apache.cloudstack.api.response.DomainResponse; import org.apache.cloudstack.api.response.ProjectResponse; import com.cloud.event.EventTypes; import com.cloud.exception.InvalidParameterValueException; @@ -46,8 +46,8 @@ public class CreateProjectCmd extends BaseAsyncCreateCmd { @Parameter(name = ApiConstants.ACCOUNT, type = CommandType.STRING, description = "account who will be Admin for the project") private String accountName; - @IdentityMapper(entityTableName = "domain") - @Parameter(name = ApiConstants.DOMAIN_ID, type = CommandType.LONG, description = "domain ID of the account owning a project") + @Parameter(name = ApiConstants.DOMAIN_ID, type = CommandType.UUID, entityType = DomainResponse.class, + description = "domain ID of the account owning a project") private Long domainId; @Parameter(name = ApiConstants.NAME, type = CommandType.STRING, required = true, description = "name of the project") diff --git a/api/src/org/apache/cloudstack/api/command/user/project/DeleteProjectCmd.java b/api/src/org/apache/cloudstack/api/command/user/project/DeleteProjectCmd.java index 0c489fbfdc7..8555f1310da 100644 --- a/api/src/org/apache/cloudstack/api/command/user/project/DeleteProjectCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/project/DeleteProjectCmd.java @@ -16,6 +16,7 @@ // under the License. package org.apache.cloudstack.api.command.user.project; +import org.apache.cloudstack.api.response.ProjectResponse; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; @@ -41,8 +42,8 @@ public class DeleteProjectCmd extends BaseAsyncCmd { //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - @IdentityMapper(entityTableName="projects") - @Parameter(name=ApiConstants.ID, type=CommandType.LONG, required=true, description="id of the project to be deleted") + @Parameter(name=ApiConstants.ID, type=CommandType.UUID, entityType=ProjectResponse.class, + required=true, description="id of the project to be deleted") private Long id; ///////////////////////////////////////////////////// diff --git a/api/src/org/apache/cloudstack/api/command/user/project/DeleteProjectInvitationCmd.java b/api/src/org/apache/cloudstack/api/command/user/project/DeleteProjectInvitationCmd.java index 0efe491587d..f493cd95f50 100644 --- a/api/src/org/apache/cloudstack/api/command/user/project/DeleteProjectInvitationCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/project/DeleteProjectInvitationCmd.java @@ -16,12 +16,12 @@ // under the License. package org.apache.cloudstack.api.command.user.project; +import org.apache.cloudstack.api.response.ProjectInvitationResponse; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; @@ -38,8 +38,8 @@ public class DeleteProjectInvitationCmd extends BaseAsyncCmd { // /////////////////////////////////////////////////// // ////////////// API parameters ///////////////////// // /////////////////////////////////////////////////// - @IdentityMapper(entityTableName = "project_invitations") - @Parameter(name = ApiConstants.ID, required = true, type = CommandType.LONG, description = "id of the invitation") + @Parameter(name = ApiConstants.ID, type=CommandType.UUID, entityType=ProjectInvitationResponse.class, + required = true, description = "id of the invitation") private Long id; // /////////////////////////////////////////////////// diff --git a/api/src/org/apache/cloudstack/api/command/user/project/ListProjectInvitationsCmd.java b/api/src/org/apache/cloudstack/api/command/user/project/ListProjectInvitationsCmd.java index b315ab06047..1d92bea2e9d 100644 --- a/api/src/org/apache/cloudstack/api/command/user/project/ListProjectInvitationsCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/project/ListProjectInvitationsCmd.java @@ -16,11 +16,11 @@ // under the License. package org.apache.cloudstack.api.command.user.project; +import org.apache.cloudstack.api.response.ProjectResponse; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseListAccountResourcesCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.response.ListResponse; @@ -34,8 +34,8 @@ public class ListProjectInvitationsCmd extends BaseListAccountResourcesCmd { // /////////////////////////////////////////////////// // ////////////// API parameters ///////////////////// // /////////////////////////////////////////////////// - @IdentityMapper(entityTableName = "projects") - @Parameter(name = ApiConstants.PROJECT_ID, type = CommandType.LONG, description = "list by project id") + @Parameter(name = ApiConstants.PROJECT_ID, type = CommandType.UUID, entityType = ProjectResponse.class, + description = "list by project id") private Long projectId; @Parameter(name = ApiConstants.ACTIVE_ONLY, type = CommandType.BOOLEAN, description = "if true, list only active invitations - having Pending state and ones that are not timed out yet") @@ -44,8 +44,8 @@ public class ListProjectInvitationsCmd extends BaseListAccountResourcesCmd { @Parameter(name = ApiConstants.STATE, type = CommandType.STRING, description = "list invitations by state") private String state; - @IdentityMapper(entityTableName = "project_invitations") - @Parameter(name = ApiConstants.ID, type = CommandType.LONG, description = "list invitations by id") + @Parameter(name = ApiConstants.ID, type = CommandType.UUID, entityType=ProjectInvitationResponse.class, + description = "list invitations by id") private Long id; // /////////////////////////////////////////////////// diff --git a/api/src/org/apache/cloudstack/api/command/user/project/ListProjectsCmd.java b/api/src/org/apache/cloudstack/api/command/user/project/ListProjectsCmd.java index 285844f56d3..276fe728510 100644 --- a/api/src/org/apache/cloudstack/api/command/user/project/ListProjectsCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/project/ListProjectsCmd.java @@ -25,7 +25,6 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseListAccountResourcesCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.response.ListResponse; @@ -42,8 +41,8 @@ public class ListProjectsCmd extends BaseListAccountResourcesCmd { //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - @IdentityMapper(entityTableName="projects") - @Parameter(name=ApiConstants.ID, type=CommandType.LONG, description="list projects by project ID") + @Parameter(name=ApiConstants.ID, type=CommandType.UUID, entityType=ProjectResponse.class, + description="list projects by project ID") private Long id; @Parameter(name=ApiConstants.NAME, type=CommandType.STRING, description="list projects by name") diff --git a/api/src/org/apache/cloudstack/api/command/user/project/SuspendProjectCmd.java b/api/src/org/apache/cloudstack/api/command/user/project/SuspendProjectCmd.java index 4de4f04fac7..d4a1390ff9a 100644 --- a/api/src/org/apache/cloudstack/api/command/user/project/SuspendProjectCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/project/SuspendProjectCmd.java @@ -21,7 +21,6 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; @@ -43,8 +42,8 @@ public class SuspendProjectCmd extends BaseAsyncCmd { //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - @IdentityMapper(entityTableName="projects") - @Parameter(name=ApiConstants.ID, type=CommandType.LONG, required=true, description="id of the project to be suspended") + @Parameter(name=ApiConstants.ID, type=CommandType.UUID, entityType=ProjectResponse.class, + required=true, description="id of the project to be suspended") private Long id; ///////////////////////////////////////////////////// diff --git a/api/src/org/apache/cloudstack/api/command/user/project/UpdateProjectCmd.java b/api/src/org/apache/cloudstack/api/command/user/project/UpdateProjectCmd.java index 8b3e6365457..c85b9a9bb00 100644 --- a/api/src/org/apache/cloudstack/api/command/user/project/UpdateProjectCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/project/UpdateProjectCmd.java @@ -21,7 +21,6 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; @@ -42,8 +41,8 @@ public class UpdateProjectCmd extends BaseAsyncCmd { //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - @IdentityMapper(entityTableName="projects") - @Parameter(name=ApiConstants.ID, type=CommandType.LONG, required=true, description="id of the project to be modified") + @Parameter(name=ApiConstants.ID, type=CommandType.UUID, entityType=ProjectResponse.class, + required=true, description="id of the project to be modified") private Long id; @Parameter(name=ApiConstants.ACCOUNT, type=CommandType.STRING, description="new Admin account for the project") diff --git a/api/src/org/apache/cloudstack/api/command/user/project/UpdateProjectInvitationCmd.java b/api/src/org/apache/cloudstack/api/command/user/project/UpdateProjectInvitationCmd.java index 279e4a27d61..7baab710be6 100644 --- a/api/src/org/apache/cloudstack/api/command/user/project/UpdateProjectInvitationCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/project/UpdateProjectInvitationCmd.java @@ -16,12 +16,12 @@ // under the License. package org.apache.cloudstack.api.command.user.project; +import org.apache.cloudstack.api.response.ProjectResponse; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; @@ -38,8 +38,8 @@ public class UpdateProjectInvitationCmd extends BaseAsyncCmd { // /////////////////////////////////////////////////// // ////////////// API parameters ///////////////////// // /////////////////////////////////////////////////// - @IdentityMapper(entityTableName = "projects") - @Parameter(name = ApiConstants.PROJECT_ID, required = true, type = CommandType.LONG, description = "id of the project to join") + @Parameter(name = ApiConstants.PROJECT_ID, type = CommandType.UUID, entityType = ProjectResponse.class, + required = true, description = "id of the project to join") private Long projectId; @Parameter(name = ApiConstants.ACCOUNT, type = CommandType.STRING, description = "account that is joining the project") diff --git a/api/src/org/apache/cloudstack/api/response/ProjectInvitationResponse.java b/api/src/org/apache/cloudstack/api/response/ProjectInvitationResponse.java index 1c616d1e866..9d91c070d72 100644 --- a/api/src/org/apache/cloudstack/api/response/ProjectInvitationResponse.java +++ b/api/src/org/apache/cloudstack/api/response/ProjectInvitationResponse.java @@ -16,12 +16,14 @@ // under the License. package org.apache.cloudstack.api.response; +import com.cloud.projects.ProjectInvitation; import org.apache.cloudstack.api.ApiConstants; -import com.cloud.utils.IdentityProxy; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; import org.apache.cloudstack.api.BaseResponse; +import org.apache.cloudstack.api.Entity; +@Entity(value=ProjectInvitation.class) @SuppressWarnings("unused") public class ProjectInvitationResponse extends BaseResponse implements ControlledViewEntityResponse{ @SerializedName(ApiConstants.ID) @Param(description="the id of the invitation") From 7b6132e8e2e6f3fc375e39bbcb76154b1bd547f9 Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Tue, 18 Dec 2012 18:16:18 -0800 Subject: [PATCH 149/421] api: Skip empty uuid processing in ApiDispatcher for received params Signed-off-by: Rohit Yadav --- server/src/com/cloud/api/ApiDispatcher.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/server/src/com/cloud/api/ApiDispatcher.java b/server/src/com/cloud/api/ApiDispatcher.java index 32f81075eb9..3dfcbce7662 100755 --- a/server/src/com/cloud/api/ApiDispatcher.java +++ b/server/src/com/cloud/api/ApiDispatcher.java @@ -619,6 +619,8 @@ public class ApiDispatcher { field.set(cmdObj, listParam); break; case UUID: + if (paramObj.toString().isEmpty()) + break; // There may be multiple entities defined on the @Entity of a Response.class // UUID CommandType would expect only one entityType, so use the first entityType Class[] entities = annotation.entityType()[0].getAnnotation(Entity.class).value(); From fc56e29a3ec22035c744e276538e8a20e5923996 Mon Sep 17 00:00:00 2001 From: Min Chen Date: Tue, 18 Dec 2012 22:26:38 -0800 Subject: [PATCH 150/421] Guard null pointer exceptions. --- .../src/com/cloud/api/ApiResponseHelper.java | 262 ++++++++++++------ 1 file changed, 178 insertions(+), 84 deletions(-) diff --git a/server/src/com/cloud/api/ApiResponseHelper.java b/server/src/com/cloud/api/ApiResponseHelper.java index 8fa8bad13d3..4d69b42988a 100755 --- a/server/src/com/cloud/api/ApiResponseHelper.java +++ b/server/src/com/cloud/api/ApiResponseHelper.java @@ -151,6 +151,7 @@ import com.cloud.event.Event; import com.cloud.host.Host; import com.cloud.host.HostStats; import com.cloud.host.HostVO; +import com.cloud.hypervisor.Hypervisor.HypervisorType; import com.cloud.hypervisor.HypervisorCapabilities; import com.cloud.network.IPAddressVO; import com.cloud.network.IpAddress; @@ -283,7 +284,9 @@ public class ApiResponseHelper implements ResponseGenerator { accountResponse.setDomainId(domain.getUuid()); accountResponse.setDomainName(domain.getName()); } - accountResponse.setState(account.getState().toString()); + if (account.getState() != null) { + accountResponse.setState(account.getState().toString()); + } accountResponse.setNetworkDomain(account.getNetworkDomain()); DataCenter dc = ApiDBUtils.findZoneById(account.getDefaultZoneId()); if (dc != null) { @@ -440,16 +443,17 @@ public class ApiResponseHelper implements ResponseGenerator { domainResponse.setId(domain.getUuid()); domainResponse.setLevel(domain.getLevel()); domainResponse.setNetworkDomain(domain.getNetworkDomain()); - Domain parentDomain = ApiDBUtils.findDomainById(domain.getParent()); - if (parentDomain != null) { - domainResponse.setParentDomainId(parentDomain.getUuid()); + if (domain.getParent() != null) { + Domain parentDomain = ApiDBUtils.findDomainById(domain.getParent()); + if (parentDomain != null) { + domainResponse.setParentDomainId(parentDomain.getUuid()); + domainResponse.setParentDomainName(parentDomain.getName()); + } } StringBuilder domainPath = new StringBuilder("ROOT"); (domainPath.append(domain.getPath())).deleteCharAt(domainPath.length() - 1); domainResponse.setPath(domainPath.toString()); - if (domain.getParent() != null) { - domainResponse.setParentDomainName(ApiDBUtils.findDomainById(domain.getParent()).getName()); - } + if (domain.getChildCount() > 0) { domainResponse.setHasChild(true); } @@ -489,7 +493,9 @@ public class ApiResponseHelper implements ResponseGenerator { populateAccount(resourceLimitResponse, limit.getOwnerId()); populateDomain(resourceLimitResponse, accountTemp.getDomainId()); } - resourceLimitResponse.setResourceType(Integer.valueOf(limit.getType().getOrdinal()).toString()); + if (limit.getType() != null) { + resourceLimitResponse.setResourceType(Integer.valueOf(limit.getType().getOrdinal()).toString()); + } resourceLimitResponse.setMax(limit.getMax()); resourceLimitResponse.setObjectName("resourcelimit"); @@ -510,7 +516,9 @@ public class ApiResponseHelper implements ResponseGenerator { populateDomain(resourceCountResponse, resourceCount.getOwnerId()); } - resourceCountResponse.setResourceType(Integer.valueOf(resourceCount.getType().getOrdinal()).toString()); + if (resourceCount.getType() != null) { + resourceCountResponse.setResourceType(Integer.valueOf(resourceCount.getType().getOrdinal()).toString()); + } resourceCountResponse.setResourceCount(resourceCount.getCount()); resourceCountResponse.setObjectName("resourcecount"); return resourceCountResponse; @@ -666,7 +674,9 @@ public class ApiResponseHelper implements ResponseGenerator { if (cluster != null) { hostResponse.setClusterName(cluster.getName()); - hostResponse.setClusterType(cluster.getClusterType().toString()); + if (cluster.getClusterType() != null) { + hostResponse.setClusterType(cluster.getClusterType().toString()); + } } } @@ -742,7 +752,9 @@ public class ApiResponseHelper implements ResponseGenerator { } } - hostResponse.setResourceState(host.getResourceState().toString()); + if (host.getResourceState() != null) { + hostResponse.setResourceState(host.getResourceState().toString()); + } hostResponse.setObjectName("host"); return hostResponse; @@ -807,7 +819,9 @@ public class ApiResponseHelper implements ResponseGenerator { IPAddressResponse ipResponse = new IPAddressResponse(); ipResponse.setId(ipAddr.getUuid()); - ipResponse.setIpAddress(ipAddr.getAddress().toString()); + if (ipAddr.getAddress() != null) { + ipResponse.setIpAddress(ipAddr.getAddress().toString()); + } if (ipAddr.getAllocatedTime() != null) { ipResponse.setAllocated(ipAddr.getAllocatedTime()); } @@ -873,7 +887,9 @@ public class ApiResponseHelper implements ResponseGenerator { ipResponse.setNetworkId(nw.getUuid()); } } - ipResponse.setState(ipAddr.getState().toString()); + if (ipAddr.getState() != null) { + ipResponse.setState(ipAddr.getState().toString()); + } if (ipAddr.getPhysicalNetworkId() != null) { PhysicalNetworkVO pnw = ApiDBUtils.findPhysicalNetworkById(ipAddr.getPhysicalNetworkId()); @@ -929,11 +945,13 @@ public class ApiResponseHelper implements ResponseGenerator { lbResponse.setPrivatePort(Integer.toString(loadBalancer.getDefaultPortStart())); lbResponse.setAlgorithm(loadBalancer.getAlgorithm()); FirewallRule.State state = loadBalancer.getState(); - String stateToSet = state.toString(); - if (state.equals(FirewallRule.State.Revoke)) { - stateToSet = "Deleting"; + if (state != null) { + String stateToSet = state.toString(); + if (state.equals(FirewallRule.State.Revoke)) { + stateToSet = "Deleting"; + } + lbResponse.setState(stateToSet); } - lbResponse.setState(stateToSet); populateOwner(lbResponse, loadBalancer); DataCenter zone = ApiDBUtils.findZoneById(publicIp.getDataCenterId()); if (zone != null) { @@ -974,7 +992,9 @@ public class ApiResponseHelper implements ResponseGenerator { podResponse.setStartIp(ipRange[0]); podResponse.setEndIp(((ipRange.length > 1) && (ipRange[1] != null)) ? ipRange[1] : ""); podResponse.setGateway(pod.getGateway()); - podResponse.setAllocationState(pod.getAllocationState().toString()); + if (pod.getAllocationState() != null) { + podResponse.setAllocationState(pod.getAllocationState().toString()); + } if (showCapacities != null && showCapacities) { List capacities = ApiDBUtils.getCapacityByClusterPodZone(null, pod.getId(), null); Set capacityResponses = new HashSet(); @@ -1072,8 +1092,12 @@ public class ApiResponseHelper implements ResponseGenerator { zoneResponse.setDomainName(domain.getName()); } - zoneResponse.setType(dataCenter.getNetworkType().toString()); - zoneResponse.setAllocationState(dataCenter.getAllocationState().toString()); + if (dataCenter.getNetworkType() != null) { + zoneResponse.setType(dataCenter.getNetworkType().toString()); + } + if (dataCenter.getAllocationState() != null) { + zoneResponse.setAllocationState(dataCenter.getAllocationState().toString()); + } zoneResponse.setZoneToken(dataCenter.getZoneToken()); zoneResponse.setDhcpProvider(dataCenter.getDhcpProvider()); zoneResponse.setObjectName("zone"); @@ -1118,36 +1142,43 @@ public class ApiResponseHelper implements ResponseGenerator { volResponse.setZoneId(volume.getDataCenterId()); volResponse.setZoneName(ApiDBUtils.findZoneById(volume.getDataCenterId()).getName()); - volResponse.setVolumeType(volume.getVolumeType().toString()); + if (volume.getVolumeType() != null) { + volResponse.setVolumeType(volume.getVolumeType().toString()); + } volResponse.setDeviceId(volume.getDeviceId()); - Long instanceId = volume.getInstanceId(); - if (instanceId != null && volume.getState() != Volume.State.Destroy) { - VMInstanceVO vm = ApiDBUtils.findVMInstanceById(instanceId); - if (vm != null) { - volResponse.setVirtualMachineId(vm.getId()); - volResponse.setVirtualMachineName(vm.getHostName()); - UserVm userVm = ApiDBUtils.findUserVmById(vm.getId()); - if (userVm != null) { - if (userVm.getDisplayName() != null) { - volResponse.setVirtualMachineDisplayName(userVm.getDisplayName()); - } else { - volResponse.setVirtualMachineDisplayName(userVm.getHostName()); - } - volResponse.setVirtualMachineState(vm.getState().toString()); + Long instanceId = volume.getInstanceId(); + if (instanceId != null && volume.getState() != Volume.State.Destroy) { + VMInstanceVO vm = ApiDBUtils.findVMInstanceById(instanceId); + if (vm != null) { + volResponse.setVirtualMachineId(vm.getId()); + volResponse.setVirtualMachineName(vm.getHostName()); + if (vm.getState() != null) { + volResponse.setVirtualMachineState(vm.getState().toString()); + } + + UserVm userVm = ApiDBUtils.findUserVmById(vm.getId()); + if (userVm != null) { + if (userVm.getDisplayName() != null) { + volResponse.setVirtualMachineDisplayName(userVm.getDisplayName()); } else { - s_logger.error("User Vm with Id: " + instanceId + " does not exist for volume " + volume.getId()); + volResponse.setVirtualMachineDisplayName(userVm.getHostName()); } } else { - s_logger.error("Vm with Id: " + instanceId + " does not exist for volume " + volume.getId()); + s_logger.error("User Vm with Id: " + instanceId + " does not exist for volume " + volume.getId()); } + } else { + s_logger.error("Vm with Id: " + instanceId + " does not exist for volume " + volume.getId()); } + } // Show the virtual size of the volume volResponse.setSize(volume.getSize()); volResponse.setCreated(volume.getCreated()); - volResponse.setState(volume.getState().toString()); + if (volume.getState() != null) { + volResponse.setState(volume.getState().toString()); + } if(volume.getState() == Volume.State.UploadOp){ com.cloud.storage.VolumeHostVO volumeHostRef = ApiDBUtils.findVolumeHostRef(volume.getId(), volume.getDataCenterId()); volResponse.setSize(volumeHostRef.getSize()); @@ -1210,7 +1241,10 @@ public class ApiResponseHelper implements ResponseGenerator { // return hypervisor for ROOT and Resource domain only Account caller = UserContext.current().getCaller(); if ((caller.getType() == Account.ACCOUNT_TYPE_ADMIN || caller.getType() == Account.ACCOUNT_TYPE_RESOURCE_DOMAIN_ADMIN) && volume.getState() != Volume.State.UploadOp) { - volResponse.setHypervisor(ApiDBUtils.getVolumeHyperType(volume.getId()).toString()); + HypervisorType ht = ApiDBUtils.getVolumeHyperType(volume.getId()); + if (ht != null) { + volResponse.setHypervisor(ht.toString()); + } } volResponse.setAttached(volume.getAttached()); @@ -1308,10 +1342,18 @@ public class ApiResponseHelper implements ResponseGenerator { clusterResponse.setZoneId(dc.getUuid()); clusterResponse.setZoneName(dc.getName()); } - clusterResponse.setHypervisorType(cluster.getHypervisorType().toString()); - clusterResponse.setClusterType(cluster.getClusterType().toString()); - clusterResponse.setAllocationState(cluster.getAllocationState().toString()); - clusterResponse.setManagedState(cluster.getManagedState().toString()); + if (cluster.getHypervisorType() != null) { + clusterResponse.setHypervisorType(cluster.getHypervisorType().toString()); + } + if (cluster.getClusterType() != null) { + clusterResponse.setClusterType(cluster.getClusterType().toString()); + } + if (cluster.getAllocationState() != null) { + clusterResponse.setAllocationState(cluster.getAllocationState().toString()); + } + if (cluster.getManagedState() != null) { + clusterResponse.setManagedState(cluster.getManagedState().toString()); + } if (showCapacities != null && showCapacities) { @@ -1378,9 +1420,12 @@ public class ApiResponseHelper implements ResponseGenerator { } } FirewallRule.State state = fwRule.getState(); - String stateToSet = state.toString(); - if (state.equals(FirewallRule.State.Revoke)) { - stateToSet = "Deleting"; + if (state != null) { + String stateToSet = state.toString(); + if (state.equals(FirewallRule.State.Revoke)) { + stateToSet = "Deleting"; + } + response.setState(stateToSet); } //set tag information @@ -1391,8 +1436,6 @@ public class ApiResponseHelper implements ResponseGenerator { tagResponses.add(tagResponse); } response.setTags(tagResponses); - - response.setState(stateToSet); response.setObjectName("portforwardingrule"); return response; } @@ -1420,15 +1463,17 @@ public class ApiResponseHelper implements ResponseGenerator { } } FirewallRule.State state = fwRule.getState(); - String stateToSet = state.toString(); - if (state.equals(FirewallRule.State.Revoke)) { - stateToSet = "Deleting"; + if (state != null) { + String stateToSet = state.toString(); + if (state.equals(FirewallRule.State.Revoke)) { + stateToSet = "Deleting"; + } + response.setState(stateToSet); } response.setStartPort(fwRule.getSourcePortStart()); response.setEndPort(fwRule.getSourcePortEnd()); response.setProtocol(fwRule.getProtocol()); - response.setState(stateToSet); response.setObjectName("ipforwardingrule"); return response; } @@ -1464,7 +1509,9 @@ public class ApiResponseHelper implements ResponseGenerator { // SystemVm vm = (SystemVm) systemVM; vmResponse.setId(vm.getUuid()); vmResponse.setObjectId(vm.getId()); - vmResponse.setSystemVmType(vm.getType().toString().toLowerCase()); + if (vm.getType() != null) { + vmResponse.setSystemVmType(vm.getType().toString().toLowerCase()); + } vmResponse.setName(vm.getHostName()); if ( vm.getPodIdToDeployIn() != null ){ @@ -1590,7 +1637,9 @@ public class ApiResponseHelper implements ResponseGenerator { populateOwner(vpnResponse, vpn); - vpnResponse.setState(vpn.getState().toString()); + if (vpn.getState() != null) { + vpnResponse.setState(vpn.getState().toString()); + } vpnResponse.setObjectName("remoteaccessvpn"); return vpnResponse; @@ -1616,7 +1665,13 @@ public class ApiResponseHelper implements ResponseGenerator { if (result.getFormat() == ImageFormat.ISO) { // Templates are always bootable response.setBootable(result.isBootable()); } else { - response.setHypervisor(result.getHypervisorType().toString());// hypervisors are associated with templates + if (result.getHypervisorType() != null) { + response.setHypervisor(result.getHypervisorType().toString());// hypervisors + // are + // associated + // with + // templates + } } // add account ID and name @@ -1688,7 +1743,9 @@ public class ApiResponseHelper implements ResponseGenerator { templateResponse.setTemplateType(template.getTemplateType().toString()); } - templateResponse.setHypervisor(template.getHypervisorType().toString()); + if (template.getHypervisorType() != null) { + templateResponse.setHypervisor(template.getHypervisorType().toString()); + } GuestOS os = ApiDBUtils.findGuestOSById(template.getGuestOSId()); if (os != null) { @@ -1768,7 +1825,9 @@ public class ApiResponseHelper implements ResponseGenerator { templateResponse.setTemplateType(template.getTemplateType().toString()); } - templateResponse.setHypervisor(template.getHypervisorType().toString()); + if (template.getHypervisorType() != null) { + templateResponse.setHypervisor(template.getHypervisorType().toString()); + } templateResponse.setDetails(template.getDetails()); GuestOS os = ApiDBUtils.findGuestOSById(template.getGuestOSId()); @@ -2080,7 +2139,9 @@ public class ApiResponseHelper implements ResponseGenerator { } response.setMode(mode); response.setUploadId(uploadId); - response.setState(uploadInfo.getUploadState().toString()); + if (uploadInfo.getUploadState() != null) { + response.setState(uploadInfo.getUploadState().toString()); + } response.setAccountId(accountId); response.setUrl(uploadInfo.getUploadUrl()); return response; @@ -2110,7 +2171,9 @@ public class ApiResponseHelper implements ResponseGenerator { jobResponse.setJobProcStatus(job.getProcessStatus()); if (job.getInstanceType() != null && job.getInstanceId() != null) { - jobResponse.setJobInstanceType(job.getInstanceType().toString()); + if (job.getInstanceType() != null) { + jobResponse.setJobInstanceType(job.getInstanceType().toString()); + } String jobInstanceId = null; if (job.getInstanceType() == AsyncJob.Type.Volume) { VolumeVO volume = ApiDBUtils.findVolumeById(job.getInstanceId()); @@ -2430,7 +2493,6 @@ public class ApiResponseHelper implements ResponseGenerator { capacityResponse.setCapacityType(summedCapacity.getCapacityType()); capacityResponse.setCapacityUsed(summedCapacity.getUsedCapacity()); if (summedCapacity.getPodId() != null) { - capacityResponse.setPodId(ApiDBUtils.findPodById(summedCapacity.getPodId()).getUuid()); HostPodVO pod = ApiDBUtils.findPodById(summedCapacity.getPodId()); if (pod != null) { capacityResponse.setPodId(pod.getUuid()); @@ -2598,12 +2660,16 @@ public class ApiResponseHelper implements ResponseGenerator { response.setName(offering.getName()); response.setDisplayText(offering.getDisplayText()); response.setTags(offering.getTags()); - response.setTrafficType(offering.getTrafficType().toString()); + if (offering.getTrafficType() != null) { + response.setTrafficType(offering.getTrafficType().toString()); + } response.setIsDefault(offering.isDefault()); response.setSpecifyVlan(offering.getSpecifyVlan()); response.setConserveMode(offering.isConserveMode()); response.setSpecifyIpRanges(offering.getSpecifyIpRanges()); - response.setAvailability(offering.getAvailability().toString()); + if (offering.getAvailability() != null) { + response.setAvailability(offering.getAvailability().toString()); + } response.setNetworkRate(ApiDBUtils.getNetworkRate(offering.getId())); Long so = null; if (offering.getServiceOfferingId() != null) { @@ -2747,13 +2813,17 @@ public class ApiResponseHelper implements ResponseGenerator { response.setNetworkOfferingName(networkOffering.getName()); response.setNetworkOfferingDisplayText(networkOffering.getDisplayText()); response.setIsSystem(networkOffering.isSystemOnly()); - response.setNetworkOfferingAvailability(networkOffering.getAvailability().toString()); + if (networkOffering.getAvailability() != null) { + response.setNetworkOfferingAvailability(networkOffering.getAvailability().toString()); + } } if (network.getAclType() != null) { response.setAclType(network.getAclType().toString()); } - response.setState(network.getState().toString()); + if (network.getState() != null) { + response.setState(network.getState().toString()); + } response.setRestartRequired(network.isRestartRequired()); NetworkVO nw = ApiDBUtils.findNetworkById(network.getRelated()); if (nw != null) { @@ -2884,9 +2954,12 @@ public class ApiResponseHelper implements ResponseGenerator { response.setPublicIpAddress(ip.getAddress().addr()); FirewallRule.State state = fwRule.getState(); - String stateToSet = state.toString(); - if (state.equals(FirewallRule.State.Revoke)) { - stateToSet = "Deleting"; + if (state != null) { + String stateToSet = state.toString(); + if (state.equals(FirewallRule.State.Revoke)) { + stateToSet = "Deleting"; + } + response.setState(stateToSet); } response.setIcmpCode(fwRule.getIcmpCode()); @@ -2901,7 +2974,6 @@ public class ApiResponseHelper implements ResponseGenerator { } response.setTags(tagResponses); - response.setState(stateToSet); response.setObjectName("firewallrule"); return response; } @@ -2923,18 +2995,23 @@ public class ApiResponseHelper implements ResponseGenerator { List cidrs = ApiDBUtils.findFirewallSourceCidrs(networkACL.getId()); response.setCidrList(StringUtils.join(cidrs, ",")); - response.setTrafficType(networkACL.getTrafficType().toString()); + if (networkACL.getTrafficType() != null) { + response.setTrafficType(networkACL.getTrafficType().toString()); + } FirewallRule.State state = networkACL.getState(); - String stateToSet = state.toString(); - if (state.equals(FirewallRule.State.Revoke)) { - stateToSet = "Deleting"; + if (state != null) { + String stateToSet = state.toString(); + if (state.equals(FirewallRule.State.Revoke)) { + stateToSet = "Deleting"; + } + response.setState(stateToSet); } response.setIcmpCode(networkACL.getIcmpCode()); response.setIcmpType(networkACL.getIcmpType()); - response.setState(stateToSet); + //set tag information List tags = ApiDBUtils.listByResourceTypeAndId(TaggedResourceType.NetworkACL, networkACL.getId()); @@ -3033,7 +3110,9 @@ public class ApiResponseHelper implements ResponseGenerator { public SystemVmInstanceResponse createSystemVmInstanceResponse(VirtualMachine vm) { SystemVmInstanceResponse vmResponse = new SystemVmInstanceResponse(); vmResponse.setId(vm.getUuid()); - vmResponse.setSystemVmType(vm.getType().toString().toLowerCase()); + if (vm.getType() != null) { + vmResponse.setSystemVmType(vm.getType().toString().toLowerCase()); + } vmResponse.setName(vm.getHostName()); if (vm.getHostId() != null) { Host host = ApiDBUtils.findHostById(vm.getHostId()); @@ -3149,7 +3228,9 @@ public class ApiResponseHelper implements ResponseGenerator { if (dnw != null) { response.setDestinationPhysicalNetworkId(dnw.getUuid()); } - response.setState(result.getState().toString()); + if (result.getState() != null) { + response.setState(result.getState().toString()); + } // set enabled services List services = new ArrayList(); @@ -3167,7 +3248,9 @@ public class ApiResponseHelper implements ResponseGenerator { TrafficTypeResponse response = new TrafficTypeResponse(); response.setId(result.getUuid()); response.setPhysicalNetworkId(result.getPhysicalNetworkId()); - response.setTrafficType(result.getTrafficType().toString()); + if (result.getTrafficType() != null) { + response.setTrafficType(result.getTrafficType().toString()); + } response.setXenLabel(result.getXenNetworkLabel()); response.setKvmLabel(result.getKvmNetworkLabel()); response.setVmwareLabel(result.getVmwareNetworkLabel()); @@ -3409,7 +3492,9 @@ public class ApiResponseHelper implements ResponseGenerator { populateAccount(response, result.getAccountId()); populateDomain(response, result.getDomainId()); - response.setState(result.getState().toString()); + if (result.getState() != null) { + response.setState(result.getState().toString()); + } response.setObjectName("privategateway"); @@ -3421,7 +3506,9 @@ public class ApiResponseHelper implements ResponseGenerator { public CounterResponse createCounterResponse(Counter counter) { CounterResponse response = new CounterResponse(); response.setId(counter.getUuid()); - response.setSource(counter.getSource().toString()); + if (counter.getSource() != null) { + response.setSource(counter.getSource().toString()); + } response.setName(counter.getName()); response.setValue(counter.getValue()); response.setObjectName("counter"); @@ -3435,7 +3522,9 @@ public class ApiResponseHelper implements ResponseGenerator { List counterResponseList = new ArrayList(); counterResponseList.add(createCounterResponse(ApiDBUtils.getCounter(condition.getCounterid()))); response.setCounterResponse(counterResponseList); - response.setRelationalOperator(condition.getRelationalOperator().toString()); + if (condition.getRelationalOperator() != null) { + response.setRelationalOperator(condition.getRelationalOperator().toString()); + } response.setThreshold(condition.getThreshold()); response.setObjectName("condition"); populateOwner(response, condition); @@ -3550,11 +3639,13 @@ public class ApiResponseHelper implements ResponseGenerator { response.setCidr(result.getCidr()); StaticRoute.State state = result.getState(); - String stateToSet = state.toString(); - if (state.equals(FirewallRule.State.Revoke)) { - stateToSet = "Deleting"; + if (state != null) { + String stateToSet = state.toString(); + if (state.equals(FirewallRule.State.Revoke)) { + stateToSet = "Deleting"; + } + response.setState(stateToSet); } - response.setState(stateToSet); populateAccount(response, result.getAccountId()); populateDomain(response, result.getDomainId()); @@ -3575,7 +3666,10 @@ public class ApiResponseHelper implements ResponseGenerator { public Site2SiteVpnGatewayResponse createSite2SiteVpnGatewayResponse(Site2SiteVpnGateway result) { Site2SiteVpnGatewayResponse response = new Site2SiteVpnGatewayResponse(); response.setId(result.getUuid()); - response.setIp(ApiDBUtils.findIpAddressById(result.getAddrId()).getAddress().toString()); + IpAddress ip = ApiDBUtils.findIpAddressById(result.getAddrId()); + if (ip != null && ip.getAddress() != null) { + response.setIp(ip.getAddress().toString()); + } Vpc vpc = ApiDBUtils.findVpcById(result.getVpcId()); if (vpc != null) { response.setVpcId(result.getUuid()); From 1d729578d41b7435b68313c23dac2efc382d070f Mon Sep 17 00:00:00 2001 From: Min Chen Date: Tue, 18 Dec 2012 23:16:38 -0800 Subject: [PATCH 151/421] Remove IdentityProxy from Response classes. Signed-off-by: Min Chen --- api/src/com/cloud/dc/Vlan.java | 2 + .../cloud/network/VirtualRouterProvider.java | 2 + api/src/com/cloud/network/VpnUser.java | 2 + .../api/command/user/user/AddVpnUserCmd.java | 2 +- .../command/user/volume/CreateVolumeCmd.java | 14 ++- .../api/response/TrafficTypeResponse.java | 11 +-- .../api/response/UpgradeVmResponse.java | 57 ++++++----- .../VirtualRouterProviderResponse.java | 13 ++- .../api/response/VlanIpRangeResponse.java | 35 ++++--- .../api/response/VolumeResponse.java | 46 ++++----- .../api/response/VpcOfferingResponse.java | 7 +- .../cloudstack/api/response/VpcResponse.java | 19 ++-- .../api/response/VpnUsersResponse.java | 7 +- .../apache/cloudstack/query/QueryService.java | 3 + core/src/com/cloud/network/VpnUserVO.java | 2 +- server/src/com/cloud/api/ApiDBUtils.java | 7 ++ .../src/com/cloud/api/ApiResponseHelper.java | 98 ++++++++++++------- .../com/cloud/api/query/QueryManagerImpl.java | 8 ++ server/src/com/cloud/dc/VlanVO.java | 54 +++++----- 19 files changed, 222 insertions(+), 167 deletions(-) diff --git a/api/src/com/cloud/dc/Vlan.java b/api/src/com/cloud/dc/Vlan.java index 1e1fce15fc4..d4cfb4ef442 100644 --- a/api/src/com/cloud/dc/Vlan.java +++ b/api/src/com/cloud/dc/Vlan.java @@ -26,6 +26,8 @@ public interface Vlan { public long getId(); + public String getUuid(); + public String getVlanTag(); public String getVlanGateway(); diff --git a/api/src/com/cloud/network/VirtualRouterProvider.java b/api/src/com/cloud/network/VirtualRouterProvider.java index f0837d650cf..9992e3ce172 100644 --- a/api/src/com/cloud/network/VirtualRouterProvider.java +++ b/api/src/com/cloud/network/VirtualRouterProvider.java @@ -27,6 +27,8 @@ public interface VirtualRouterProvider { public long getId(); + public String getUuid(); + public boolean isEnabled(); public long getNspId(); diff --git a/api/src/com/cloud/network/VpnUser.java b/api/src/com/cloud/network/VpnUser.java index 07a3ee3343e..28e4872dcbc 100644 --- a/api/src/com/cloud/network/VpnUser.java +++ b/api/src/com/cloud/network/VpnUser.java @@ -27,6 +27,8 @@ public interface VpnUser extends ControlledEntity { long getId(); + String getUuid(); + String getUsername(); String getPassword(); diff --git a/api/src/org/apache/cloudstack/api/command/user/user/AddVpnUserCmd.java b/api/src/org/apache/cloudstack/api/command/user/user/AddVpnUserCmd.java index d62b992c9b0..d8292f226cd 100644 --- a/api/src/org/apache/cloudstack/api/command/user/user/AddVpnUserCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/user/AddVpnUserCmd.java @@ -126,7 +126,7 @@ public class AddVpnUserCmd extends BaseAsyncCreateCmd { } VpnUsersResponse vpnResponse = new VpnUsersResponse(); - vpnResponse.setId(vpnUser.getId()); + vpnResponse.setId(vpnUser.getUuid()); vpnResponse.setUserName(vpnUser.getUsername()); vpnResponse.setAccountName(account.getAccountName()); diff --git a/api/src/org/apache/cloudstack/api/command/user/volume/CreateVolumeCmd.java b/api/src/org/apache/cloudstack/api/command/user/volume/CreateVolumeCmd.java index 6d235deee82..ca886396656 100644 --- a/api/src/org/apache/cloudstack/api/command/user/volume/CreateVolumeCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/volume/CreateVolumeCmd.java @@ -29,6 +29,7 @@ import org.apache.cloudstack.api.response.VolumeResponse; import com.cloud.async.AsyncJob; import com.cloud.event.EventTypes; import com.cloud.exception.ResourceAllocationException; +import com.cloud.storage.Snapshot; import com.cloud.storage.Volume; import com.cloud.user.UserContext; @@ -165,7 +166,18 @@ public class CreateVolumeCmd extends BaseAsyncCreateCmd { if (volume != null) { VolumeResponse response = _responseGenerator.createVolumeResponse(volume); //FIXME - have to be moved to ApiResponseHelper - response.setSnapshotId(getSnapshotId()); // if the volume was created from a snapshot, snapshotId will be set so we pass it back in the response + if (getSnapshotId() != null) { + Snapshot snap = _queryService.findSnapshotById(getSnapshotId()); + if (snap != null) { + response.setSnapshotId(snap.getUuid()); // if the volume was + // created from a + // snapshot, + // snapshotId will + // be set so we pass + // it back in the + // response + } + } response.setResponseName(getCommandName()); this.setResponseObject(response); } else { diff --git a/api/src/org/apache/cloudstack/api/response/TrafficTypeResponse.java b/api/src/org/apache/cloudstack/api/response/TrafficTypeResponse.java index d32e5802f57..b2f6e946b35 100644 --- a/api/src/org/apache/cloudstack/api/response/TrafficTypeResponse.java +++ b/api/src/org/apache/cloudstack/api/response/TrafficTypeResponse.java @@ -17,7 +17,6 @@ package org.apache.cloudstack.api.response; import org.apache.cloudstack.api.ApiConstants; -import com.cloud.utils.IdentityProxy; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; import org.apache.cloudstack.api.BaseResponse; @@ -31,7 +30,7 @@ public class TrafficTypeResponse extends BaseResponse { private String trafficType; @SerializedName(ApiConstants.PHYSICAL_NETWORK_ID) @Param(description="the physical network this belongs to") - private IdentityProxy physicalNetworkId = new IdentityProxy("physical_network"); + private String physicalNetworkId; @SerializedName(ApiConstants.XEN_NETWORK_LABEL) @Param(description="The network name label of the physical device dedicated to this traffic on a XenServer host") private String xenNetworkLabel; @@ -42,12 +41,12 @@ public class TrafficTypeResponse extends BaseResponse { @SerializedName(ApiConstants.VMWARE_NETWORK_LABEL) @Param(description="The network name label of the physical device dedicated to this traffic on a VMware host") private String vmwareNetworkLabel; - public void setPhysicalNetworkId(long physicalNetworkId) { - this.physicalNetworkId.setValue(physicalNetworkId); + public void setPhysicalNetworkId(String physicalNetworkId) { + this.physicalNetworkId = physicalNetworkId; } - public long getphysicalNetworkId() { - return physicalNetworkId.getValue(); + public String getphysicalNetworkId() { + return physicalNetworkId; } public void setId(String uuid) { diff --git a/api/src/org/apache/cloudstack/api/response/UpgradeVmResponse.java b/api/src/org/apache/cloudstack/api/response/UpgradeVmResponse.java index 0bc22dc7c3f..767f783da44 100644 --- a/api/src/org/apache/cloudstack/api/response/UpgradeVmResponse.java +++ b/api/src/org/apache/cloudstack/api/response/UpgradeVmResponse.java @@ -19,14 +19,13 @@ package org.apache.cloudstack.api.response; import java.util.Date; import org.apache.cloudstack.api.ApiConstants; -import com.cloud.utils.IdentityProxy; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; import org.apache.cloudstack.api.BaseResponse; public class UpgradeVmResponse extends BaseResponse { @SerializedName("id") - private IdentityProxy id = new IdentityProxy("vm_instance"); + private String id; public String getName() { return name; @@ -68,12 +67,12 @@ public class UpgradeVmResponse extends BaseResponse { this.account = account; } - public Long getDomainId() { - return domainId.getValue(); + public String getDomainId() { + return domainId; } - public void setDomainId(Long domainId) { - this.domainId.setValue(domainId); + public void setDomainId(String domainId) { + this.domainId = domainId; } public String getDomain() { @@ -92,12 +91,12 @@ public class UpgradeVmResponse extends BaseResponse { this.haEnable = haEnable; } - public Long getZoneId() { - return zoneId.getValue(); + public String getZoneId() { + return zoneId; } - public void setZoneId(Long zoneId) { - this.zoneId.setValue(zoneId); + public void setZoneId(String zoneId) { + this.zoneId = zoneId; } public String getDisplayName() { @@ -116,12 +115,12 @@ public class UpgradeVmResponse extends BaseResponse { this.zoneName = zoneName; } - public Long getHostId() { - return hostId.getValue(); + public String getHostId() { + return hostId; } - public void setHostId(Long hostId) { - this.hostId.setValue(hostId); + public void setHostId(String hostId) { + this.hostId = hostId; } public String getHostName() { @@ -132,12 +131,12 @@ public class UpgradeVmResponse extends BaseResponse { this.hostName = hostName; } - public Long getTemplateId() { - return templateId.getValue(); + public String getTemplateId() { + return templateId; } - public void setTemplateId(Long templateId) { - this.templateId.setValue(templateId); + public void setTemplateId(String templateId) { + this.templateId = templateId; } public String getTemplateName() { @@ -164,12 +163,12 @@ public class UpgradeVmResponse extends BaseResponse { this.passwordEnabled = passwordEnabled; } - public Long getServiceOfferingId() { - return serviceOfferingId.getValue(); + public String getServiceOfferingId() { + return serviceOfferingId; } - public void setServiceOfferingId(Long serviceOfferingId) { - this.serviceOfferingId.setValue(serviceOfferingId); + public void setServiceOfferingId(String serviceOfferingId) { + this.serviceOfferingId = serviceOfferingId; } public String getServiceOfferingName() { @@ -220,8 +219,8 @@ public class UpgradeVmResponse extends BaseResponse { this.networkKbsWrite = networkKbsWrite; } - public Long isId() { - return id.getValue(); + public String isId() { + return id; } @SerializedName("name") @Param(description="the ID of the virtual machine") @@ -240,7 +239,7 @@ public class UpgradeVmResponse extends BaseResponse { private String account; @SerializedName("domainid") @Param(description="the ID of the domain in which the virtual machine exists") - private IdentityProxy domainId = new IdentityProxy("domain"); + private String domainId; @SerializedName("domain") @Param(description="the name of the domain in which the virtual machine exists") private String domain; @@ -249,7 +248,7 @@ public class UpgradeVmResponse extends BaseResponse { private boolean haEnable; @SerializedName("zoneid") @Param(description="the ID of the availablility zone for the virtual machine") - private IdentityProxy zoneId = new IdentityProxy("data_center"); + private String zoneId; @SerializedName("displayname") @Param(description="user generated name. The name of the virtual machine is returned if no displayname exists.") private String displayName; @@ -258,13 +257,13 @@ public class UpgradeVmResponse extends BaseResponse { private String zoneName; @SerializedName("hostid") @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("templateid") @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; @@ -276,7 +275,7 @@ public class UpgradeVmResponse extends BaseResponse { private boolean passwordEnabled; @SerializedName("serviceofferingid") @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; diff --git a/api/src/org/apache/cloudstack/api/response/VirtualRouterProviderResponse.java b/api/src/org/apache/cloudstack/api/response/VirtualRouterProviderResponse.java index f4d798828fd..b5a3847e26e 100644 --- a/api/src/org/apache/cloudstack/api/response/VirtualRouterProviderResponse.java +++ b/api/src/org/apache/cloudstack/api/response/VirtualRouterProviderResponse.java @@ -17,17 +17,16 @@ package org.apache.cloudstack.api.response; import org.apache.cloudstack.api.ApiConstants; -import com.cloud.utils.IdentityProxy; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; import org.apache.cloudstack.api.BaseResponse; public class VirtualRouterProviderResponse extends BaseResponse implements ControlledEntityResponse { @SerializedName(ApiConstants.ID) @Param(description="the id of the router") - private IdentityProxy id = new IdentityProxy("virtual_router_providers"); + private String id; @SerializedName(ApiConstants.NSP_ID) @Param(description="the physical network service provider id of the provider") - private IdentityProxy nspId = new IdentityProxy("physical_network_service_providers"); + private String nspId; @SerializedName(ApiConstants.ENABLED) @Param(description="Enabled/Disabled the service provider") private Boolean enabled; @@ -52,8 +51,8 @@ public class VirtualRouterProviderResponse extends BaseResponse implements Contr this.accountName = accountName; } - public void setId(Long id) { - this.id.setValue(id); + public void setId(String id) { + this.id = id; } @Override @@ -76,8 +75,8 @@ public class VirtualRouterProviderResponse extends BaseResponse implements Contr this.projectName = projectName; } - public void setNspId(Long nspId) { - this.nspId.setValue(nspId); + public void setNspId(String nspId) { + this.nspId = nspId; } public void setEnabled(Boolean enabled) { diff --git a/api/src/org/apache/cloudstack/api/response/VlanIpRangeResponse.java b/api/src/org/apache/cloudstack/api/response/VlanIpRangeResponse.java index aef0dcc9b32..5a3a236b16c 100644 --- a/api/src/org/apache/cloudstack/api/response/VlanIpRangeResponse.java +++ b/api/src/org/apache/cloudstack/api/response/VlanIpRangeResponse.java @@ -17,7 +17,6 @@ package org.apache.cloudstack.api.response; import org.apache.cloudstack.api.ApiConstants; -import com.cloud.utils.IdentityProxy; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; import org.apache.cloudstack.api.BaseResponse; @@ -25,13 +24,13 @@ import org.apache.cloudstack.api.BaseResponse; @SuppressWarnings("unused") public class VlanIpRangeResponse extends BaseResponse implements ControlledEntityResponse{ @SerializedName(ApiConstants.ID) @Param(description="the ID of the VLAN IP range") - private IdentityProxy id = new IdentityProxy("vlan"); + private String id; @SerializedName("forvirtualnetwork") @Param(description="the virtual network for the VLAN IP range") private Boolean forVirtualNetwork; @SerializedName(ApiConstants.ZONE_ID) @Param(description="the Zone ID of the VLAN IP range") - private IdentityProxy zoneId = new IdentityProxy("data_center"); + private String zoneId; @SerializedName(ApiConstants.VLAN) @Param(description="the ID or VID of the VLAN.") private String vlan; @@ -46,7 +45,7 @@ public class VlanIpRangeResponse extends BaseResponse implements ControlledEntit private String domainName; @SerializedName(ApiConstants.POD_ID) @Param(description="the Pod ID for the VLAN IP range") - private IdentityProxy podId = new IdentityProxy("host_pod_ref"); + private String podId; @SerializedName("podname") @Param(description="the Pod name for the VLAN IP range") private String podName; @@ -67,7 +66,7 @@ public class VlanIpRangeResponse extends BaseResponse implements ControlledEntit private String endIp; @SerializedName(ApiConstants.NETWORK_ID) @Param(description="the network id of vlan range") - private IdentityProxy networkId = new IdentityProxy("networks"); + private String networkId; @SerializedName(ApiConstants.PROJECT_ID) @Param(description="the project id of the vlan range") private String projectId; @@ -76,18 +75,18 @@ public class VlanIpRangeResponse extends BaseResponse implements ControlledEntit private String projectName; @SerializedName(ApiConstants.PHYSICAL_NETWORK_ID) @Param(description="the physical network this belongs to") - private IdentityProxy physicalNetworkId = new IdentityProxy("physical_network"); + private String physicalNetworkId; - public void setId(Long id) { - this.id.setValue(id); + public void setId(String id) { + this.id = id; } public void setForVirtualNetwork(Boolean forVirtualNetwork) { this.forVirtualNetwork = forVirtualNetwork; } - public void setZoneId(Long zoneId) { - this.zoneId.setValue(zoneId); + public void setZoneId(String zoneId) { + this.zoneId = zoneId; } public void setVlan(String vlan) { @@ -106,8 +105,8 @@ public class VlanIpRangeResponse extends BaseResponse implements ControlledEntit this.domainName = domainName; } - public void setPodId(Long podId) { - this.podId.setValue(podId); + public void setPodId(String podId) { + this.podId = podId; } public void setPodName(String podName) { @@ -134,8 +133,8 @@ public class VlanIpRangeResponse extends BaseResponse implements ControlledEntit this.endIp = endIp; } - public void setNetworkId(Long networkId) { - this.networkId.setValue(networkId); + public void setNetworkId(String networkId) { + this.networkId = networkId; } @Override @@ -148,11 +147,11 @@ public class VlanIpRangeResponse extends BaseResponse implements ControlledEntit this.projectName = projectName; } - public void setPhysicalNetworkId(long physicalNetworkId) { - this.physicalNetworkId.setValue(physicalNetworkId); + public void setPhysicalNetworkId(String physicalNetworkId) { + this.physicalNetworkId = physicalNetworkId; } - public long getphysicalNetworkId() { - return physicalNetworkId.getValue(); + public String getphysicalNetworkId() { + return physicalNetworkId; } } diff --git a/api/src/org/apache/cloudstack/api/response/VolumeResponse.java b/api/src/org/apache/cloudstack/api/response/VolumeResponse.java index c1adc02c0da..730314a6a3c 100644 --- a/api/src/org/apache/cloudstack/api/response/VolumeResponse.java +++ b/api/src/org/apache/cloudstack/api/response/VolumeResponse.java @@ -21,7 +21,6 @@ import java.util.List; import org.apache.cloudstack.api.ApiConstants; import com.cloud.serializer.Param; -import com.cloud.utils.IdentityProxy; import com.google.gson.annotations.SerializedName; import org.apache.cloudstack.api.BaseResponse; @@ -29,7 +28,7 @@ import org.apache.cloudstack.api.BaseResponse; public class VolumeResponse extends BaseResponse implements ControlledEntityResponse{ @SerializedName(ApiConstants.ID) @Param(description = "ID of the disk volume") - private IdentityProxy id = new IdentityProxy("volumes"); + private String id; @SerializedName(ApiConstants.NAME) @Param(description = "name of the disk volume") @@ -37,7 +36,7 @@ public class VolumeResponse extends BaseResponse implements ControlledEntityResp @SerializedName(ApiConstants.ZONE_ID) @Param(description = "ID of the availability zone") - private IdentityProxy zoneId = new IdentityProxy("data_center"); + private String zoneId; @SerializedName(ApiConstants.ZONE_NAME) @Param(description = "name of the availability zone") @@ -53,7 +52,7 @@ public class VolumeResponse extends BaseResponse implements ControlledEntityResp @SerializedName(ApiConstants.VIRTUAL_MACHINE_ID) @Param(description = "id of the virtual machine") - private IdentityProxy virtualMachineId = new IdentityProxy("vm_instance"); + private String virtualMachineId; @SerializedName("vmname") @Param(description = "name of the virtual machine") @@ -107,7 +106,7 @@ public class VolumeResponse extends BaseResponse implements ControlledEntityResp @SerializedName(ApiConstants.DISK_OFFERING_ID) @Param(description = "ID of the disk offering") - private IdentityProxy diskOfferingId = new IdentityProxy("disk_offering"); + private String diskOfferingId; @SerializedName("diskofferingname") @Param(description = "name of the disk offering") @@ -123,7 +122,7 @@ public class VolumeResponse extends BaseResponse implements ControlledEntityResp @SerializedName(ApiConstants.SNAPSHOT_ID) @Param(description = "ID of the snapshot from which this volume was created") - private IdentityProxy snapshotId = new IdentityProxy("snapshots"); + private String snapshotId; @SerializedName("attached") @Param(description = "the date the volume was attached to a VM instance") @@ -135,7 +134,7 @@ public class VolumeResponse extends BaseResponse implements ControlledEntityResp @SerializedName(ApiConstants.SERVICE_OFFERING_ID) @Param(description = "ID of the service offering for root disk") - private IdentityProxy serviceOfferingId = new IdentityProxy("disk_offering"); + private String serviceOfferingId; @SerializedName("serviceofferingname") @Param(description = "name of the service offering for root disk") @@ -156,10 +155,7 @@ public class VolumeResponse extends BaseResponse implements ControlledEntityResp @SerializedName(ApiConstants.TAGS) @Param(description="the list of resource tags associated with volume", responseObject = ResourceTagResponse.class) private List tags; - @Override - public Long getObjectId() { - return getId(); - } + public Boolean getDestroyed() { return destroyed; @@ -169,20 +165,20 @@ public class VolumeResponse extends BaseResponse implements ControlledEntityResp this.destroyed = destroyed; } - 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 setName(String name) { this.name = name; } - public void setZoneId(Long zoneId) { - this.zoneId.setValue(zoneId); + public void setZoneId(String zoneId) { + this.zoneId = zoneId; } public void setZoneName(String zoneName) { @@ -197,8 +193,8 @@ public class VolumeResponse extends BaseResponse implements ControlledEntityResp this.deviceId = deviceId; } - public void setVirtualMachineId(Long virtualMachineId) { - this.virtualMachineId.setValue(virtualMachineId); + public void setVirtualMachineId(String virtualMachineId) { + this.virtualMachineId = virtualMachineId; } public void setVirtualMachineName(String virtualMachineName) { @@ -242,8 +238,8 @@ public class VolumeResponse extends BaseResponse implements ControlledEntityResp this.hypervisor = hypervisor; } - public void setDiskOfferingId(Long diskOfferingId) { - this.diskOfferingId.setValue(diskOfferingId); + public void setDiskOfferingId(String diskOfferingId) { + this.diskOfferingId = diskOfferingId; } public void setDiskOfferingName(String diskOfferingName) { @@ -258,16 +254,16 @@ public class VolumeResponse extends BaseResponse implements ControlledEntityResp this.storagePoolName = storagePoolName; } - public void setSnapshotId(Long snapshotId) { - this.snapshotId.setValue(snapshotId); + public void setSnapshotId(String snapshotId) { + this.snapshotId = snapshotId; } public void setAttached(Date attached) { this.attached = attached; } - public void setServiceOfferingId(Long serviceOfferingId) { - this.serviceOfferingId.setValue(serviceOfferingId); + public void setServiceOfferingId(String serviceOfferingId) { + this.serviceOfferingId = serviceOfferingId; } public void setServiceOfferingName(String serviceOfferingName) { diff --git a/api/src/org/apache/cloudstack/api/response/VpcOfferingResponse.java b/api/src/org/apache/cloudstack/api/response/VpcOfferingResponse.java index f8c13511ae3..9ea47f9bd3c 100644 --- a/api/src/org/apache/cloudstack/api/response/VpcOfferingResponse.java +++ b/api/src/org/apache/cloudstack/api/response/VpcOfferingResponse.java @@ -21,14 +21,13 @@ import java.util.List; import org.apache.cloudstack.api.ApiConstants; import com.cloud.serializer.Param; -import com.cloud.utils.IdentityProxy; import com.google.gson.annotations.SerializedName; import org.apache.cloudstack.api.BaseResponse; @SuppressWarnings("unused") public class VpcOfferingResponse extends BaseResponse { @SerializedName("id") @Param(description="the id of the vpc offering") - private final IdentityProxy id = new IdentityProxy("vpc_offerings"); + private String id; @SerializedName(ApiConstants.NAME) @Param(description="the name of the vpc offering") private String name; @@ -49,8 +48,8 @@ public class VpcOfferingResponse extends BaseResponse { private List services; - public void setId(Long id) { - this.id.setValue(id); + public void setId(String id) { + this.id = id; } public void setName(String name) { diff --git a/api/src/org/apache/cloudstack/api/response/VpcResponse.java b/api/src/org/apache/cloudstack/api/response/VpcResponse.java index d0666f4c6cd..7b9665118de 100644 --- a/api/src/org/apache/cloudstack/api/response/VpcResponse.java +++ b/api/src/org/apache/cloudstack/api/response/VpcResponse.java @@ -22,7 +22,6 @@ import java.util.List; import com.cloud.network.vpc.Vpc; import org.apache.cloudstack.api.ApiConstants; import com.cloud.serializer.Param; -import com.cloud.utils.IdentityProxy; import com.google.gson.annotations.SerializedName; import org.apache.cloudstack.api.BaseResponse; import org.apache.cloudstack.api.Entity; @@ -31,7 +30,7 @@ import org.apache.cloudstack.api.Entity; @SuppressWarnings("unused") public class VpcResponse extends BaseResponse implements ControlledEntityResponse{ @SerializedName("id") @Param(description="the id of the VPC") - private final IdentityProxy id = new IdentityProxy("vpc"); + private String id; @SerializedName(ApiConstants.NAME) @Param(description="the name of the VPC") private String name; @@ -43,7 +42,7 @@ public class VpcResponse extends BaseResponse implements ControlledEntityRespons private String state; @SerializedName(ApiConstants.ZONE_ID) @Param(description="zone id of the vpc") - private IdentityProxy zoneId = new IdentityProxy("data_center"); + private String zoneId; @SerializedName(ApiConstants.ZONE_NAME) @Param(description="the name of the zone the VPC belongs to") private String zoneName; @@ -55,7 +54,7 @@ public class VpcResponse extends BaseResponse implements ControlledEntityRespons private String cidr; @SerializedName(ApiConstants.VPC_OFF_ID) @Param(description="vpc offering id the VPC is created from") - private IdentityProxy vpcOfferingId = new IdentityProxy("vpc_offerings"); + private String vpcOfferingId; @SerializedName(ApiConstants.CREATED) @Param(description="the date this VPC was created") private Date created; @@ -87,8 +86,8 @@ public class VpcResponse extends BaseResponse implements ControlledEntityRespons @SerializedName(ApiConstants.TAGS) @Param(description="the list of resource tags associated with the project", responseObject = ResourceTagResponse.class) private List tags; - public void setId(Long id) { - this.id.setValue(id); + public void setId(String id) { + this.id = id; } public void setName(String name) { @@ -136,16 +135,16 @@ public class VpcResponse extends BaseResponse implements ControlledEntityRespons this.domain = domainName; } - public void setZoneId(Long zoneId) { - this.zoneId.setValue(zoneId); + public void setZoneId(String zoneId) { + this.zoneId = zoneId; } public void setCidr(String cidr) { this.cidr = cidr; } - public void setVpcOfferingId(Long vpcOfferingId) { - this.vpcOfferingId.setValue(vpcOfferingId); + public void setVpcOfferingId(String vpcOfferingId) { + this.vpcOfferingId = vpcOfferingId; } public List getNetworks() { diff --git a/api/src/org/apache/cloudstack/api/response/VpnUsersResponse.java b/api/src/org/apache/cloudstack/api/response/VpnUsersResponse.java index 18b33a1e737..98fee886447 100644 --- a/api/src/org/apache/cloudstack/api/response/VpnUsersResponse.java +++ b/api/src/org/apache/cloudstack/api/response/VpnUsersResponse.java @@ -18,7 +18,6 @@ package org.apache.cloudstack.api.response; import com.cloud.network.VpnUser; import org.apache.cloudstack.api.ApiConstants; -import com.cloud.utils.IdentityProxy; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; import org.apache.cloudstack.api.BaseResponse; @@ -28,7 +27,7 @@ import org.apache.cloudstack.api.Entity; @SuppressWarnings("unused") public class VpnUsersResponse extends BaseResponse implements ControlledEntityResponse{ @SerializedName(ApiConstants.ID) @Param(description="the vpn userID") - private IdentityProxy id = new IdentityProxy("vpn_users"); + private String id; @SerializedName(ApiConstants.USERNAME) @Param(description="the username of the vpn user") private String userName; @@ -49,8 +48,8 @@ public class VpnUsersResponse extends BaseResponse implements ControlledEntityRe private String projectName; - public void setId(Long id) { - this.id.setValue(id); + public void setId(String id) { + this.id = id; } public void setUserName(String name) { diff --git a/api/src/org/apache/cloudstack/query/QueryService.java b/api/src/org/apache/cloudstack/query/QueryService.java index f3d346f6253..1bc04f313c4 100644 --- a/api/src/org/apache/cloudstack/query/QueryService.java +++ b/api/src/org/apache/cloudstack/query/QueryService.java @@ -40,6 +40,7 @@ import org.apache.cloudstack.api.response.UserVmResponse; import com.cloud.exception.PermissionDeniedException; +import com.cloud.storage.Snapshot; /** * Service used for list api query. @@ -68,4 +69,6 @@ public interface QueryService { public ListResponse listProjectAccounts(ListProjectAccountsCmd cmd); + public Snapshot findSnapshotById(long snapshotId); + } diff --git a/core/src/com/cloud/network/VpnUserVO.java b/core/src/com/cloud/network/VpnUserVO.java index 02c53683394..54e0d89894d 100644 --- a/core/src/com/cloud/network/VpnUserVO.java +++ b/core/src/com/cloud/network/VpnUserVO.java @@ -32,7 +32,7 @@ import com.cloud.utils.db.Encrypt; @Entity @Table(name=("vpn_users")) -public class VpnUserVO implements VpnUser, Identity { +public class VpnUserVO implements VpnUser { @Id @GeneratedValue(strategy=GenerationType.IDENTITY) @Column(name="id") diff --git a/server/src/com/cloud/api/ApiDBUtils.java b/server/src/com/cloud/api/ApiDBUtils.java index 8deec55845e..960ee5454be 100755 --- a/server/src/com/cloud/api/ApiDBUtils.java +++ b/server/src/com/cloud/api/ApiDBUtils.java @@ -137,9 +137,11 @@ import com.cloud.network.security.dao.SecurityGroupDao; import com.cloud.network.vpc.StaticRouteVO; import com.cloud.network.vpc.VpcGatewayVO; import com.cloud.network.vpc.VpcManager; +import com.cloud.network.vpc.VpcOffering; import com.cloud.network.vpc.VpcVO; import com.cloud.network.vpc.dao.StaticRouteDao; import com.cloud.network.vpc.dao.VpcGatewayDao; +import com.cloud.network.vpc.dao.VpcOfferingDao; import com.cloud.offering.NetworkOffering; import com.cloud.offering.ServiceOffering; import com.cloud.offerings.NetworkOfferingVO; @@ -307,6 +309,7 @@ public class ApiDBUtils { private static StaticRouteDao _staticRouteDao; private static VpcGatewayDao _vpcGatewayDao; private static VpcDao _vpcDao; + private static VpcOfferingDao _vpcOfferingDao; private static SnapshotPolicyDao _snapshotPolicyDao; static { @@ -392,6 +395,7 @@ public class ApiDBUtils { _asVmProfileDao = locator.getDao(AutoScaleVmProfileDao.class); _asVmGroupDao = locator.getDao(AutoScaleVmGroupDao.class); _vpcDao = locator.getDao(VpcDao.class); + _vpcOfferingDao = locator.getDao(VpcOfferingDao.class); _snapshotPolicyDao = locator.getDao(SnapshotPolicyDao.class); // Note: stats collector should already have been initialized by this time, otherwise a null instance is returned @@ -1037,6 +1041,9 @@ public class ApiDBUtils { return _snapshotPolicyDao.findById(policyId); } + public static VpcOffering findVpcOfferingById(long offeringId){ + return _vpcOfferingDao.findById(offeringId); + } /////////////////////////////////////////////////////////////////////// // Newly Added Utility Methods for List API refactoring // /////////////////////////////////////////////////////////////////////// diff --git a/server/src/com/cloud/api/ApiResponseHelper.java b/server/src/com/cloud/api/ApiResponseHelper.java index 4d69b42988a..44d36930efa 100755 --- a/server/src/com/cloud/api/ApiResponseHelper.java +++ b/server/src/com/cloud/api/ApiResponseHelper.java @@ -776,15 +776,20 @@ public class ApiResponseHelper implements ResponseGenerator { Long podId = ApiDBUtils.getPodIdForVlan(vlan.getId()); VlanIpRangeResponse vlanResponse = new VlanIpRangeResponse(); - vlanResponse.setId(vlan.getId()); - vlanResponse.setForVirtualNetwork(vlan.getVlanType().equals(VlanType.VirtualNetwork)); + vlanResponse.setId(vlan.getUuid()); + if (vlan.getVlanType() != null) { + vlanResponse.setForVirtualNetwork(vlan.getVlanType().equals(VlanType.VirtualNetwork)); + } vlanResponse.setVlan(vlan.getVlanTag()); - vlanResponse.setZoneId(vlan.getDataCenterId()); + DataCenter zone = ApiDBUtils.findZoneById(vlan.getDataCenterId()); + if (zone != null) { + vlanResponse.setZoneId(zone.getUuid()); + } if (podId != null) { HostPodVO pod = ApiDBUtils.findPodById(podId); - vlanResponse.setPodId(podId); if (pod != null) { + vlanResponse.setPodId(pod.getUuid()); vlanResponse.setPodName(pod.getName()); } } @@ -798,15 +803,24 @@ public class ApiResponseHelper implements ResponseGenerator { vlanResponse.setStartIp(range[0]); vlanResponse.setEndIp(range[1]); - vlanResponse.setNetworkId(vlan.getNetworkId()); + if (vlan.getNetworkId() != null) { + Network nw = ApiDBUtils.findNetworkById(vlan.getNetworkId()); + if (nw != null) { + vlanResponse.setNetworkId(nw.getUuid()); + } + } Account owner = ApiDBUtils.getVlanAccount(vlan.getId()); if (owner != null) { populateAccount(vlanResponse, owner.getId()); populateDomain(vlanResponse, owner.getDomainId()); } - vlanResponse.setPhysicalNetworkId(vlan.getPhysicalNetworkId()); - + if (vlan.getPhysicalNetworkId() != null) { + PhysicalNetwork pnw = ApiDBUtils.findPhysicalNetworkById(vlan.getPhysicalNetworkId()); + if (pnw != null) { + vlanResponse.setPhysicalNetworkId(pnw.getUuid()); + } + } vlanResponse.setObjectName("vlan"); return vlanResponse; } @@ -1131,7 +1145,7 @@ public class ApiResponseHelper implements ResponseGenerator { @Override public VolumeResponse createVolumeResponse(Volume volume) { VolumeResponse volResponse = new VolumeResponse(); - volResponse.setId(volume.getId()); + volResponse.setId(volume.getUuid()); if (volume.getName() != null) { volResponse.setName(volume.getName()); @@ -1139,8 +1153,11 @@ public class ApiResponseHelper implements ResponseGenerator { volResponse.setName(""); } - volResponse.setZoneId(volume.getDataCenterId()); - volResponse.setZoneName(ApiDBUtils.findZoneById(volume.getDataCenterId()).getName()); + DataCenter zone = ApiDBUtils.findZoneById(volume.getDataCenterId()); + if (zone != null) { + volResponse.setZoneId(zone.getUuid()); + volResponse.setZoneName(zone.getName()); + } if (volume.getVolumeType() != null) { volResponse.setVolumeType(volume.getVolumeType().toString()); @@ -1151,7 +1168,7 @@ public class ApiResponseHelper implements ResponseGenerator { if (instanceId != null && volume.getState() != Volume.State.Destroy) { VMInstanceVO vm = ApiDBUtils.findVMInstanceById(instanceId); if (vm != null) { - volResponse.setVirtualMachineId(vm.getId()); + volResponse.setVirtualMachineId(vm.getUuid()); volResponse.setVirtualMachineName(vm.getHostName()); if (vm.getState() != null) { volResponse.setVirtualMachineState(vm.getState().toString()); @@ -1214,22 +1231,24 @@ public class ApiResponseHelper implements ResponseGenerator { populateOwner(volResponse, volume); - if (volume.getVolumeType().equals(Volume.Type.ROOT)) { - volResponse.setServiceOfferingId(volume.getDiskOfferingId()); - } else { - volResponse.setDiskOfferingId(volume.getDiskOfferingId()); - } - DiskOfferingVO diskOffering = ApiDBUtils.findDiskOfferingById(volume.getDiskOfferingId()); - if (volume.getVolumeType().equals(Volume.Type.ROOT)) { - volResponse.setServiceOfferingName(diskOffering.getName()); - volResponse.setServiceOfferingDisplayText(diskOffering.getDisplayText()); - } else { - volResponse.setDiskOfferingName(diskOffering.getName()); - volResponse.setDiskOfferingDisplayText(diskOffering.getDisplayText()); - } - volResponse.setStorageType(diskOffering.getUseLocalStorage() ? ServiceOffering.StorageType.local.toString() : ServiceOffering.StorageType.shared.toString()); + if (diskOffering != null) { + if (volume.getVolumeType().equals(Volume.Type.ROOT)) { + volResponse.setServiceOfferingId(diskOffering.getUuid()); + } else { + volResponse.setDiskOfferingId(diskOffering.getUuid()); + } + if (volume.getVolumeType().equals(Volume.Type.ROOT)) { + volResponse.setServiceOfferingName(diskOffering.getName()); + volResponse.setServiceOfferingDisplayText(diskOffering.getDisplayText()); + } else { + volResponse.setDiskOfferingName(diskOffering.getName()); + volResponse.setDiskOfferingDisplayText(diskOffering.getDisplayText()); + } + volResponse.setStorageType(diskOffering.getUseLocalStorage() ? ServiceOffering.StorageType.local.toString() + : ServiceOffering.StorageType.shared.toString()); + } Long poolId = volume.getPoolId(); String poolName = (poolId == null) ? "none" : ApiDBUtils.findStoragePoolById(poolId).getName(); volResponse.setStoragePoolName(poolName); @@ -1615,7 +1634,7 @@ public class ApiResponseHelper implements ResponseGenerator { @Override public VpnUsersResponse createVpnUserResponse(VpnUser vpnUser) { VpnUsersResponse vpnResponse = new VpnUsersResponse(); - vpnResponse.setId(vpnUser.getId()); + vpnResponse.setId(vpnUser.getUuid()); vpnResponse.setUserName(vpnUser.getUsername()); populateOwner(vpnResponse, vpnUser); @@ -3247,7 +3266,10 @@ public class ApiResponseHelper implements ResponseGenerator { public TrafficTypeResponse createTrafficTypeResponse(PhysicalNetworkTrafficType result) { TrafficTypeResponse response = new TrafficTypeResponse(); response.setId(result.getUuid()); - response.setPhysicalNetworkId(result.getPhysicalNetworkId()); + PhysicalNetwork pnet = ApiDBUtils.findPhysicalNetworkById(result.getPhysicalNetworkId()); + if (pnet != null) { + response.setPhysicalNetworkId(pnet.getUuid()); + } if (result.getTrafficType() != null) { response.setTrafficType(result.getTrafficType().toString()); } @@ -3262,8 +3284,11 @@ public class ApiResponseHelper implements ResponseGenerator { @Override public VirtualRouterProviderResponse createVirtualRouterProviderResponse(VirtualRouterProvider result) { VirtualRouterProviderResponse response = new VirtualRouterProviderResponse(); - response.setId(result.getId()); - response.setNspId(result.getNspId()); + response.setId(result.getUuid()); + PhysicalNetworkServiceProvider nsp = ApiDBUtils.findPhysicalNetworkServiceProviderById(result.getNspId()); + if (nsp != null) { + response.setNspId(nsp.getUuid()); + } response.setEnabled(result.isEnabled()); response.setObjectName("virtualrouterelement"); @@ -3373,7 +3398,7 @@ public class ApiResponseHelper implements ResponseGenerator { @Override public VpcOfferingResponse createVpcOfferingResponse(VpcOffering offering) { VpcOfferingResponse response = new VpcOfferingResponse(); - response.setId(offering.getId()); + response.setId(offering.getUuid()); response.setName(offering.getName()); response.setDisplayText(offering.getDisplayText()); response.setIsDefault(offering.isDefault()); @@ -3409,11 +3434,14 @@ public class ApiResponseHelper implements ResponseGenerator { @Override public VpcResponse createVpcResponse(Vpc vpc) { VpcResponse response = new VpcResponse(); - response.setId(vpc.getId()); + response.setId(vpc.getUuid()); response.setName(vpc.getName()); response.setDisplayText(vpc.getDisplayText()); response.setState(vpc.getState().name()); - response.setVpcOfferingId(vpc.getVpcOfferingId()); + VpcOffering voff = ApiDBUtils.findVpcOfferingById(vpc.getVpcOfferingId()); + if (voff != null) { + response.setVpcOfferingId(voff.getUuid()); + } response.setCidr(vpc.getCidr()); response.setRestartRequired(vpc.isRestartRequired()); response.setNetworkDomain(vpc.getNetworkDomain()); @@ -3448,8 +3476,10 @@ public class ApiResponseHelper implements ResponseGenerator { } DataCenter zone = ApiDBUtils.findZoneById(vpc.getZoneId()); - response.setZoneId(vpc.getZoneId()); - response.setZoneName(zone.getName()); + if (zone != null) { + response.setZoneId(zone.getUuid()); + response.setZoneName(zone.getName()); + } response.setNetworks(networkResponses); response.setServices(serviceResponses); diff --git a/server/src/com/cloud/api/query/QueryManagerImpl.java b/server/src/com/cloud/api/query/QueryManagerImpl.java index 78687b18d16..4cad6c3b66e 100644 --- a/server/src/com/cloud/api/query/QueryManagerImpl.java +++ b/server/src/com/cloud/api/query/QueryManagerImpl.java @@ -51,6 +51,7 @@ import org.apache.cloudstack.api.response.UserVmResponse; import org.apache.cloudstack.query.QueryService; import org.apache.log4j.Logger; +import com.cloud.api.ApiDBUtils; import com.cloud.api.ApiResponseHelper; import com.cloud.api.query.dao.DomainRouterJoinDao; import com.cloud.api.query.dao.InstanceGroupJoinDao; @@ -87,6 +88,7 @@ import com.cloud.projects.ProjectService; import com.cloud.projects.dao.ProjectAccountDao; import com.cloud.projects.dao.ProjectDao; import com.cloud.server.Criteria; +import com.cloud.storage.Snapshot; import com.cloud.user.Account; import com.cloud.user.AccountManager; import com.cloud.user.AccountManagerImpl; @@ -1306,4 +1308,10 @@ public class QueryManagerImpl implements QueryService, Manager { return _projectAccountJoinDao.searchAndCount(sc, searchFilter); } + @Override + public Snapshot findSnapshotById(long snapshotId) { + return ApiDBUtils.findSnapshotById(snapshotId); + } + + } diff --git a/server/src/com/cloud/dc/VlanVO.java b/server/src/com/cloud/dc/VlanVO.java index f6eb750a25f..83e8fe63977 100644 --- a/server/src/com/cloud/dc/VlanVO.java +++ b/server/src/com/cloud/dc/VlanVO.java @@ -31,41 +31,41 @@ import org.apache.cloudstack.api.Identity; @Entity @Table(name="vlan") -public class VlanVO implements Vlan, Identity { - +public class VlanVO implements Vlan { + @Id @GeneratedValue(strategy=GenerationType.IDENTITY) - @Column(name="id") + @Column(name="id") Long id; - - @Column(name="vlan_id") + + @Column(name="vlan_id") String vlanTag; - - @Column(name="vlan_gateway") + + @Column(name="vlan_gateway") String vlanGateway; - - @Column(name="vlan_netmask") + + @Column(name="vlan_netmask") String vlanNetmask; - - @Column(name="data_center_id") + + @Column(name="data_center_id") long dataCenterId; - - @Column(name="description") + + @Column(name="description") String ipRange; - + @Column(name="network_id") Long networkId; - + @Column(name="physical_network_id") Long physicalNetworkId; - + @Column(name="vlan_type") - @Enumerated(EnumType.STRING) + @Enumerated(EnumType.STRING) VlanType vlanType; @Column(name="uuid") String uuid; - + public VlanVO(VlanType vlanType, String vlanTag, String vlanGateway, String vlanNetmask, long dataCenterId, String ipRange, Long networkId, Long physicalNetworkId) { this.vlanType = vlanType; this.vlanTag = vlanTag; @@ -77,16 +77,16 @@ public class VlanVO implements Vlan, Identity { this.uuid = UUID.randomUUID().toString(); this.physicalNetworkId = physicalNetworkId; } - + public VlanVO() { this.uuid = UUID.randomUUID().toString(); } - + @Override public long getId() { return id; } - + @Override public String getVlanTag() { return vlanTag; @@ -96,12 +96,12 @@ public class VlanVO implements Vlan, Identity { public String getVlanGateway() { return vlanGateway; } - + @Override public String getVlanNetmask() { return vlanNetmask; } - + @Override public long getDataCenterId() { return dataCenterId; @@ -125,12 +125,12 @@ public class VlanVO implements Vlan, Identity { public void setNetworkId(Long networkId) { this.networkId = networkId; } - + @Override public String getUuid() { return this.uuid; } - + public void setUuid(String uuid) { this.uuid = uuid; } @@ -142,7 +142,7 @@ public class VlanVO implements Vlan, Identity { public void setPhysicalNetworkId(Long physicalNetworkId) { this.physicalNetworkId = physicalNetworkId; } - + transient String toString; @Override public String toString() { @@ -152,5 +152,5 @@ public class VlanVO implements Vlan, Identity { } return toString; } - + } From e397f23f6b5d6ba34ad42eca95ae9d9ee43ac6a8 Mon Sep 17 00:00:00 2001 From: Min Chen Date: Wed, 19 Dec 2012 11:23:09 -0800 Subject: [PATCH 152/421] Revert "Guard null pointer exceptions." This reverts commit fc56e29a3ec22035c744e276538e8a20e5923996. Conflicts: server/src/com/cloud/api/ApiResponseHelper.java Signed-off-by: Min Chen --- .../src/com/cloud/api/ApiResponseHelper.java | 235 ++++++------------ 1 file changed, 71 insertions(+), 164 deletions(-) diff --git a/server/src/com/cloud/api/ApiResponseHelper.java b/server/src/com/cloud/api/ApiResponseHelper.java index 44d36930efa..c602577ac9b 100755 --- a/server/src/com/cloud/api/ApiResponseHelper.java +++ b/server/src/com/cloud/api/ApiResponseHelper.java @@ -151,7 +151,6 @@ import com.cloud.event.Event; import com.cloud.host.Host; import com.cloud.host.HostStats; import com.cloud.host.HostVO; -import com.cloud.hypervisor.Hypervisor.HypervisorType; import com.cloud.hypervisor.HypervisorCapabilities; import com.cloud.network.IPAddressVO; import com.cloud.network.IpAddress; @@ -284,9 +283,7 @@ public class ApiResponseHelper implements ResponseGenerator { accountResponse.setDomainId(domain.getUuid()); accountResponse.setDomainName(domain.getName()); } - if (account.getState() != null) { - accountResponse.setState(account.getState().toString()); - } + accountResponse.setState(account.getState().toString()); accountResponse.setNetworkDomain(account.getNetworkDomain()); DataCenter dc = ApiDBUtils.findZoneById(account.getDefaultZoneId()); if (dc != null) { @@ -443,17 +440,16 @@ public class ApiResponseHelper implements ResponseGenerator { domainResponse.setId(domain.getUuid()); domainResponse.setLevel(domain.getLevel()); domainResponse.setNetworkDomain(domain.getNetworkDomain()); - if (domain.getParent() != null) { - Domain parentDomain = ApiDBUtils.findDomainById(domain.getParent()); - if (parentDomain != null) { - domainResponse.setParentDomainId(parentDomain.getUuid()); - domainResponse.setParentDomainName(parentDomain.getName()); - } + Domain parentDomain = ApiDBUtils.findDomainById(domain.getParent()); + if (parentDomain != null) { + domainResponse.setParentDomainId(parentDomain.getUuid()); } StringBuilder domainPath = new StringBuilder("ROOT"); (domainPath.append(domain.getPath())).deleteCharAt(domainPath.length() - 1); domainResponse.setPath(domainPath.toString()); - + if (domain.getParent() != null) { + domainResponse.setParentDomainName(ApiDBUtils.findDomainById(domain.getParent()).getName()); + } if (domain.getChildCount() > 0) { domainResponse.setHasChild(true); } @@ -493,9 +489,7 @@ public class ApiResponseHelper implements ResponseGenerator { populateAccount(resourceLimitResponse, limit.getOwnerId()); populateDomain(resourceLimitResponse, accountTemp.getDomainId()); } - if (limit.getType() != null) { - resourceLimitResponse.setResourceType(Integer.valueOf(limit.getType().getOrdinal()).toString()); - } + resourceLimitResponse.setResourceType(Integer.valueOf(limit.getType().getOrdinal()).toString()); resourceLimitResponse.setMax(limit.getMax()); resourceLimitResponse.setObjectName("resourcelimit"); @@ -516,9 +510,7 @@ public class ApiResponseHelper implements ResponseGenerator { populateDomain(resourceCountResponse, resourceCount.getOwnerId()); } - if (resourceCount.getType() != null) { - resourceCountResponse.setResourceType(Integer.valueOf(resourceCount.getType().getOrdinal()).toString()); - } + resourceCountResponse.setResourceType(Integer.valueOf(resourceCount.getType().getOrdinal()).toString()); resourceCountResponse.setResourceCount(resourceCount.getCount()); resourceCountResponse.setObjectName("resourcecount"); return resourceCountResponse; @@ -674,9 +666,7 @@ public class ApiResponseHelper implements ResponseGenerator { if (cluster != null) { hostResponse.setClusterName(cluster.getName()); - if (cluster.getClusterType() != null) { - hostResponse.setClusterType(cluster.getClusterType().toString()); - } + hostResponse.setClusterType(cluster.getClusterType().toString()); } } @@ -752,9 +742,7 @@ public class ApiResponseHelper implements ResponseGenerator { } } - if (host.getResourceState() != null) { - hostResponse.setResourceState(host.getResourceState().toString()); - } + hostResponse.setResourceState(host.getResourceState().toString()); hostResponse.setObjectName("host"); return hostResponse; @@ -833,9 +821,7 @@ public class ApiResponseHelper implements ResponseGenerator { IPAddressResponse ipResponse = new IPAddressResponse(); ipResponse.setId(ipAddr.getUuid()); - if (ipAddr.getAddress() != null) { - ipResponse.setIpAddress(ipAddr.getAddress().toString()); - } + ipResponse.setIpAddress(ipAddr.getAddress().toString()); if (ipAddr.getAllocatedTime() != null) { ipResponse.setAllocated(ipAddr.getAllocatedTime()); } @@ -901,9 +887,7 @@ public class ApiResponseHelper implements ResponseGenerator { ipResponse.setNetworkId(nw.getUuid()); } } - if (ipAddr.getState() != null) { - ipResponse.setState(ipAddr.getState().toString()); - } + ipResponse.setState(ipAddr.getState().toString()); if (ipAddr.getPhysicalNetworkId() != null) { PhysicalNetworkVO pnw = ApiDBUtils.findPhysicalNetworkById(ipAddr.getPhysicalNetworkId()); @@ -959,13 +943,11 @@ public class ApiResponseHelper implements ResponseGenerator { lbResponse.setPrivatePort(Integer.toString(loadBalancer.getDefaultPortStart())); lbResponse.setAlgorithm(loadBalancer.getAlgorithm()); FirewallRule.State state = loadBalancer.getState(); - if (state != null) { - String stateToSet = state.toString(); - if (state.equals(FirewallRule.State.Revoke)) { - stateToSet = "Deleting"; - } - lbResponse.setState(stateToSet); + String stateToSet = state.toString(); + if (state.equals(FirewallRule.State.Revoke)) { + stateToSet = "Deleting"; } + lbResponse.setState(stateToSet); populateOwner(lbResponse, loadBalancer); DataCenter zone = ApiDBUtils.findZoneById(publicIp.getDataCenterId()); if (zone != null) { @@ -1006,9 +988,7 @@ public class ApiResponseHelper implements ResponseGenerator { podResponse.setStartIp(ipRange[0]); podResponse.setEndIp(((ipRange.length > 1) && (ipRange[1] != null)) ? ipRange[1] : ""); podResponse.setGateway(pod.getGateway()); - if (pod.getAllocationState() != null) { - podResponse.setAllocationState(pod.getAllocationState().toString()); - } + podResponse.setAllocationState(pod.getAllocationState().toString()); if (showCapacities != null && showCapacities) { List capacities = ApiDBUtils.getCapacityByClusterPodZone(null, pod.getId(), null); Set capacityResponses = new HashSet(); @@ -1106,12 +1086,8 @@ public class ApiResponseHelper implements ResponseGenerator { zoneResponse.setDomainName(domain.getName()); } - if (dataCenter.getNetworkType() != null) { - zoneResponse.setType(dataCenter.getNetworkType().toString()); - } - if (dataCenter.getAllocationState() != null) { - zoneResponse.setAllocationState(dataCenter.getAllocationState().toString()); - } + zoneResponse.setType(dataCenter.getNetworkType().toString()); + zoneResponse.setAllocationState(dataCenter.getAllocationState().toString()); zoneResponse.setZoneToken(dataCenter.getZoneToken()); zoneResponse.setDhcpProvider(dataCenter.getDhcpProvider()); zoneResponse.setObjectName("zone"); @@ -1159,9 +1135,7 @@ public class ApiResponseHelper implements ResponseGenerator { volResponse.setZoneName(zone.getName()); } - if (volume.getVolumeType() != null) { - volResponse.setVolumeType(volume.getVolumeType().toString()); - } + volResponse.setVolumeType(volume.getVolumeType().toString()); volResponse.setDeviceId(volume.getDeviceId()); Long instanceId = volume.getInstanceId(); @@ -1170,22 +1144,17 @@ public class ApiResponseHelper implements ResponseGenerator { if (vm != null) { volResponse.setVirtualMachineId(vm.getUuid()); volResponse.setVirtualMachineName(vm.getHostName()); - if (vm.getState() != null) { - volResponse.setVirtualMachineState(vm.getState().toString()); - } - + volResponse.setVirtualMachineState(vm.getState().toString()); UserVm userVm = ApiDBUtils.findUserVmById(vm.getId()); if (userVm != null) { if (userVm.getDisplayName() != null) { volResponse.setVirtualMachineDisplayName(userVm.getDisplayName()); - } else { - volResponse.setVirtualMachineDisplayName(userVm.getHostName()); } } else { - s_logger.error("User Vm with Id: " + instanceId + " does not exist for volume " + volume.getId()); + s_logger.error("User Vm with Id: " + instanceId + " does not exist for volume " + volume.getId()); } } else { - s_logger.error("Vm with Id: " + instanceId + " does not exist for volume " + volume.getId()); + s_logger.error("Vm with Id: " + instanceId + " does not exist for volume " + volume.getId()); } } @@ -1193,9 +1162,7 @@ public class ApiResponseHelper implements ResponseGenerator { volResponse.setSize(volume.getSize()); volResponse.setCreated(volume.getCreated()); - if (volume.getState() != null) { - volResponse.setState(volume.getState().toString()); - } + volResponse.setState(volume.getState().toString()); if(volume.getState() == Volume.State.UploadOp){ com.cloud.storage.VolumeHostVO volumeHostRef = ApiDBUtils.findVolumeHostRef(volume.getId(), volume.getDataCenterId()); volResponse.setSize(volumeHostRef.getSize()); @@ -1260,10 +1227,7 @@ public class ApiResponseHelper implements ResponseGenerator { // return hypervisor for ROOT and Resource domain only Account caller = UserContext.current().getCaller(); if ((caller.getType() == Account.ACCOUNT_TYPE_ADMIN || caller.getType() == Account.ACCOUNT_TYPE_RESOURCE_DOMAIN_ADMIN) && volume.getState() != Volume.State.UploadOp) { - HypervisorType ht = ApiDBUtils.getVolumeHyperType(volume.getId()); - if (ht != null) { - volResponse.setHypervisor(ht.toString()); - } + volResponse.setHypervisor(ApiDBUtils.getVolumeHyperType(volume.getId()).toString()); } volResponse.setAttached(volume.getAttached()); @@ -1361,18 +1325,10 @@ public class ApiResponseHelper implements ResponseGenerator { clusterResponse.setZoneId(dc.getUuid()); clusterResponse.setZoneName(dc.getName()); } - if (cluster.getHypervisorType() != null) { - clusterResponse.setHypervisorType(cluster.getHypervisorType().toString()); - } - if (cluster.getClusterType() != null) { - clusterResponse.setClusterType(cluster.getClusterType().toString()); - } - if (cluster.getAllocationState() != null) { - clusterResponse.setAllocationState(cluster.getAllocationState().toString()); - } - if (cluster.getManagedState() != null) { - clusterResponse.setManagedState(cluster.getManagedState().toString()); - } + clusterResponse.setHypervisorType(cluster.getHypervisorType().toString()); + clusterResponse.setClusterType(cluster.getClusterType().toString()); + clusterResponse.setAllocationState(cluster.getAllocationState().toString()); + clusterResponse.setManagedState(cluster.getManagedState().toString()); if (showCapacities != null && showCapacities) { @@ -1439,12 +1395,9 @@ public class ApiResponseHelper implements ResponseGenerator { } } FirewallRule.State state = fwRule.getState(); - if (state != null) { - String stateToSet = state.toString(); - if (state.equals(FirewallRule.State.Revoke)) { - stateToSet = "Deleting"; - } - response.setState(stateToSet); + String stateToSet = state.toString(); + if (state.equals(FirewallRule.State.Revoke)) { + stateToSet = "Deleting"; } //set tag information @@ -1455,6 +1408,8 @@ public class ApiResponseHelper implements ResponseGenerator { tagResponses.add(tagResponse); } response.setTags(tagResponses); + + response.setState(stateToSet); response.setObjectName("portforwardingrule"); return response; } @@ -1482,17 +1437,15 @@ public class ApiResponseHelper implements ResponseGenerator { } } FirewallRule.State state = fwRule.getState(); - if (state != null) { - String stateToSet = state.toString(); - if (state.equals(FirewallRule.State.Revoke)) { - stateToSet = "Deleting"; - } - response.setState(stateToSet); + String stateToSet = state.toString(); + if (state.equals(FirewallRule.State.Revoke)) { + stateToSet = "Deleting"; } response.setStartPort(fwRule.getSourcePortStart()); response.setEndPort(fwRule.getSourcePortEnd()); response.setProtocol(fwRule.getProtocol()); + response.setState(stateToSet); response.setObjectName("ipforwardingrule"); return response; } @@ -1528,9 +1481,7 @@ public class ApiResponseHelper implements ResponseGenerator { // SystemVm vm = (SystemVm) systemVM; vmResponse.setId(vm.getUuid()); vmResponse.setObjectId(vm.getId()); - if (vm.getType() != null) { - vmResponse.setSystemVmType(vm.getType().toString().toLowerCase()); - } + vmResponse.setSystemVmType(vm.getType().toString().toLowerCase()); vmResponse.setName(vm.getHostName()); if ( vm.getPodIdToDeployIn() != null ){ @@ -1656,9 +1607,7 @@ public class ApiResponseHelper implements ResponseGenerator { populateOwner(vpnResponse, vpn); - if (vpn.getState() != null) { - vpnResponse.setState(vpn.getState().toString()); - } + vpnResponse.setState(vpn.getState().toString()); vpnResponse.setObjectName("remoteaccessvpn"); return vpnResponse; @@ -1684,13 +1633,7 @@ public class ApiResponseHelper implements ResponseGenerator { if (result.getFormat() == ImageFormat.ISO) { // Templates are always bootable response.setBootable(result.isBootable()); } else { - if (result.getHypervisorType() != null) { - response.setHypervisor(result.getHypervisorType().toString());// hypervisors - // are - // associated - // with - // templates - } + response.setHypervisor(result.getHypervisorType().toString());// hypervisors are associated with templates } // add account ID and name @@ -1762,9 +1705,7 @@ public class ApiResponseHelper implements ResponseGenerator { templateResponse.setTemplateType(template.getTemplateType().toString()); } - if (template.getHypervisorType() != null) { - templateResponse.setHypervisor(template.getHypervisorType().toString()); - } + templateResponse.setHypervisor(template.getHypervisorType().toString()); GuestOS os = ApiDBUtils.findGuestOSById(template.getGuestOSId()); if (os != null) { @@ -1844,9 +1785,7 @@ public class ApiResponseHelper implements ResponseGenerator { templateResponse.setTemplateType(template.getTemplateType().toString()); } - if (template.getHypervisorType() != null) { - templateResponse.setHypervisor(template.getHypervisorType().toString()); - } + templateResponse.setHypervisor(template.getHypervisorType().toString()); templateResponse.setDetails(template.getDetails()); GuestOS os = ApiDBUtils.findGuestOSById(template.getGuestOSId()); @@ -2158,9 +2097,7 @@ public class ApiResponseHelper implements ResponseGenerator { } response.setMode(mode); response.setUploadId(uploadId); - if (uploadInfo.getUploadState() != null) { - response.setState(uploadInfo.getUploadState().toString()); - } + response.setState(uploadInfo.getUploadState().toString()); response.setAccountId(accountId); response.setUrl(uploadInfo.getUploadUrl()); return response; @@ -2190,9 +2127,7 @@ public class ApiResponseHelper implements ResponseGenerator { jobResponse.setJobProcStatus(job.getProcessStatus()); if (job.getInstanceType() != null && job.getInstanceId() != null) { - if (job.getInstanceType() != null) { - jobResponse.setJobInstanceType(job.getInstanceType().toString()); - } + jobResponse.setJobInstanceType(job.getInstanceType().toString()); String jobInstanceId = null; if (job.getInstanceType() == AsyncJob.Type.Volume) { VolumeVO volume = ApiDBUtils.findVolumeById(job.getInstanceId()); @@ -2512,6 +2447,7 @@ public class ApiResponseHelper implements ResponseGenerator { capacityResponse.setCapacityType(summedCapacity.getCapacityType()); capacityResponse.setCapacityUsed(summedCapacity.getUsedCapacity()); if (summedCapacity.getPodId() != null) { + capacityResponse.setPodId(ApiDBUtils.findPodById(summedCapacity.getPodId()).getUuid()); HostPodVO pod = ApiDBUtils.findPodById(summedCapacity.getPodId()); if (pod != null) { capacityResponse.setPodId(pod.getUuid()); @@ -2679,16 +2615,12 @@ public class ApiResponseHelper implements ResponseGenerator { response.setName(offering.getName()); response.setDisplayText(offering.getDisplayText()); response.setTags(offering.getTags()); - if (offering.getTrafficType() != null) { - response.setTrafficType(offering.getTrafficType().toString()); - } + response.setTrafficType(offering.getTrafficType().toString()); response.setIsDefault(offering.isDefault()); response.setSpecifyVlan(offering.getSpecifyVlan()); response.setConserveMode(offering.isConserveMode()); response.setSpecifyIpRanges(offering.getSpecifyIpRanges()); - if (offering.getAvailability() != null) { - response.setAvailability(offering.getAvailability().toString()); - } + response.setAvailability(offering.getAvailability().toString()); response.setNetworkRate(ApiDBUtils.getNetworkRate(offering.getId())); Long so = null; if (offering.getServiceOfferingId() != null) { @@ -2832,17 +2764,13 @@ public class ApiResponseHelper implements ResponseGenerator { response.setNetworkOfferingName(networkOffering.getName()); response.setNetworkOfferingDisplayText(networkOffering.getDisplayText()); response.setIsSystem(networkOffering.isSystemOnly()); - if (networkOffering.getAvailability() != null) { - response.setNetworkOfferingAvailability(networkOffering.getAvailability().toString()); - } + response.setNetworkOfferingAvailability(networkOffering.getAvailability().toString()); } if (network.getAclType() != null) { response.setAclType(network.getAclType().toString()); } - if (network.getState() != null) { - response.setState(network.getState().toString()); - } + response.setState(network.getState().toString()); response.setRestartRequired(network.isRestartRequired()); NetworkVO nw = ApiDBUtils.findNetworkById(network.getRelated()); if (nw != null) { @@ -2973,12 +2901,9 @@ public class ApiResponseHelper implements ResponseGenerator { response.setPublicIpAddress(ip.getAddress().addr()); FirewallRule.State state = fwRule.getState(); - if (state != null) { - String stateToSet = state.toString(); - if (state.equals(FirewallRule.State.Revoke)) { - stateToSet = "Deleting"; - } - response.setState(stateToSet); + String stateToSet = state.toString(); + if (state.equals(FirewallRule.State.Revoke)) { + stateToSet = "Deleting"; } response.setIcmpCode(fwRule.getIcmpCode()); @@ -2993,6 +2918,7 @@ public class ApiResponseHelper implements ResponseGenerator { } response.setTags(tagResponses); + response.setState(stateToSet); response.setObjectName("firewallrule"); return response; } @@ -3014,23 +2940,18 @@ public class ApiResponseHelper implements ResponseGenerator { List cidrs = ApiDBUtils.findFirewallSourceCidrs(networkACL.getId()); response.setCidrList(StringUtils.join(cidrs, ",")); - if (networkACL.getTrafficType() != null) { - response.setTrafficType(networkACL.getTrafficType().toString()); - } + response.setTrafficType(networkACL.getTrafficType().toString()); FirewallRule.State state = networkACL.getState(); - if (state != null) { - String stateToSet = state.toString(); - if (state.equals(FirewallRule.State.Revoke)) { - stateToSet = "Deleting"; - } - response.setState(stateToSet); + String stateToSet = state.toString(); + if (state.equals(FirewallRule.State.Revoke)) { + stateToSet = "Deleting"; } response.setIcmpCode(networkACL.getIcmpCode()); response.setIcmpType(networkACL.getIcmpType()); - + response.setState(stateToSet); //set tag information List tags = ApiDBUtils.listByResourceTypeAndId(TaggedResourceType.NetworkACL, networkACL.getId()); @@ -3129,9 +3050,7 @@ public class ApiResponseHelper implements ResponseGenerator { public SystemVmInstanceResponse createSystemVmInstanceResponse(VirtualMachine vm) { SystemVmInstanceResponse vmResponse = new SystemVmInstanceResponse(); vmResponse.setId(vm.getUuid()); - if (vm.getType() != null) { - vmResponse.setSystemVmType(vm.getType().toString().toLowerCase()); - } + vmResponse.setSystemVmType(vm.getType().toString().toLowerCase()); vmResponse.setName(vm.getHostName()); if (vm.getHostId() != null) { Host host = ApiDBUtils.findHostById(vm.getHostId()); @@ -3247,9 +3166,7 @@ public class ApiResponseHelper implements ResponseGenerator { if (dnw != null) { response.setDestinationPhysicalNetworkId(dnw.getUuid()); } - if (result.getState() != null) { - response.setState(result.getState().toString()); - } + response.setState(result.getState().toString()); // set enabled services List services = new ArrayList(); @@ -3273,6 +3190,7 @@ public class ApiResponseHelper implements ResponseGenerator { if (result.getTrafficType() != null) { response.setTrafficType(result.getTrafficType().toString()); } + response.setXenLabel(result.getXenNetworkLabel()); response.setKvmLabel(result.getKvmNetworkLabel()); response.setVmwareLabel(result.getVmwareNetworkLabel()); @@ -3522,9 +3440,7 @@ public class ApiResponseHelper implements ResponseGenerator { populateAccount(response, result.getAccountId()); populateDomain(response, result.getDomainId()); - if (result.getState() != null) { - response.setState(result.getState().toString()); - } + response.setState(result.getState().toString()); response.setObjectName("privategateway"); @@ -3536,9 +3452,7 @@ public class ApiResponseHelper implements ResponseGenerator { public CounterResponse createCounterResponse(Counter counter) { CounterResponse response = new CounterResponse(); response.setId(counter.getUuid()); - if (counter.getSource() != null) { - response.setSource(counter.getSource().toString()); - } + response.setSource(counter.getSource().toString()); response.setName(counter.getName()); response.setValue(counter.getValue()); response.setObjectName("counter"); @@ -3552,9 +3466,7 @@ public class ApiResponseHelper implements ResponseGenerator { List counterResponseList = new ArrayList(); counterResponseList.add(createCounterResponse(ApiDBUtils.getCounter(condition.getCounterid()))); response.setCounterResponse(counterResponseList); - if (condition.getRelationalOperator() != null) { - response.setRelationalOperator(condition.getRelationalOperator().toString()); - } + response.setRelationalOperator(condition.getRelationalOperator().toString()); response.setThreshold(condition.getThreshold()); response.setObjectName("condition"); populateOwner(response, condition); @@ -3669,13 +3581,11 @@ public class ApiResponseHelper implements ResponseGenerator { response.setCidr(result.getCidr()); StaticRoute.State state = result.getState(); - if (state != null) { - String stateToSet = state.toString(); - if (state.equals(FirewallRule.State.Revoke)) { - stateToSet = "Deleting"; - } - response.setState(stateToSet); + String stateToSet = state.toString(); + if (state.equals(FirewallRule.State.Revoke)) { + stateToSet = "Deleting"; } + response.setState(stateToSet); populateAccount(response, result.getAccountId()); populateDomain(response, result.getDomainId()); @@ -3696,10 +3606,7 @@ public class ApiResponseHelper implements ResponseGenerator { public Site2SiteVpnGatewayResponse createSite2SiteVpnGatewayResponse(Site2SiteVpnGateway result) { Site2SiteVpnGatewayResponse response = new Site2SiteVpnGatewayResponse(); response.setId(result.getUuid()); - IpAddress ip = ApiDBUtils.findIpAddressById(result.getAddrId()); - if (ip != null && ip.getAddress() != null) { - response.setIp(ip.getAddress().toString()); - } + response.setIp(ApiDBUtils.findIpAddressById(result.getAddrId()).getAddress().toString()); Vpc vpc = ApiDBUtils.findVpcById(result.getVpcId()); if (vpc != null) { response.setVpcId(result.getUuid()); From c4b600a8d181eb3e4d58db1822015753af9d0e53 Mon Sep 17 00:00:00 2001 From: Fang Wang Date: Wed, 19 Dec 2012 11:57:13 -0800 Subject: [PATCH 153/421] api: Fix Validator annotation interface Signed-off-by: Rohit Yadav --- api/src/org/apache/cloudstack/api/Validator.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/api/src/org/apache/cloudstack/api/Validator.java b/api/src/org/apache/cloudstack/api/Validator.java index ca2c241699f..541e01f8e97 100644 --- a/api/src/org/apache/cloudstack/api/Validator.java +++ b/api/src/org/apache/cloudstack/api/Validator.java @@ -25,6 +25,6 @@ import java.lang.annotation.Target; @Retention(RetentionPolicy.RUNTIME) @Target({ FIELD }) public @interface Validator { - String DBEntityValidator(); - String RangeValidator(); + Class[] validators() default Object.class; + String description() default ""; } From 98b022a4300dc81ad28033d2b7110a10b2df1e15 Mon Sep 17 00:00:00 2001 From: Min Chen Date: Wed, 19 Dec 2012 13:09:02 -0800 Subject: [PATCH 154/421] Remove IdentityProxy from plugin response classes. Signed-off-by: Min Chen --- .../api/response/CiscoNexusVSMResponse.java | 41 ++++++------ .../cloud/network/CiscoNexusVSMDevice.java | 36 +++++----- .../cloud/network/CiscoNexusVSMDeviceVO.java | 10 +-- .../network/element/CiscoNexusVSMElement.java | 52 +++++++------- .../api/response/F5LoadBalancerResponse.java | 21 +++--- .../F5ExternalLoadBalancerElement.java | 11 ++- .../api/response/SrxFirewallResponse.java | 21 +++--- .../JuniperSRXExternalFirewallElement.java | 11 ++- .../NetscalerLoadBalancerResponse.java | 23 +++---- .../network/element/NetscalerElement.java | 16 +++-- .../api/response/NiciraNvpDeviceResponse.java | 37 +++++----- .../network/element/NiciraNvpElement.java | 67 ++++++++++--------- .../api/commands/GetUsageRecordsCmd.java | 26 +++++-- .../cloud/baremetal/DhcpServerResponse.java | 15 ++--- .../baremetal/ExternalDhcpManagerImpl.java | 40 +++++------ .../cloud/baremetal/PxeServerManagerImpl.java | 12 ++-- .../cloud/baremetal/PxeServerResponse.java | 15 ++--- .../ExternalNetworkDeviceManagerImpl.java | 16 ++++- .../network/NetworkUsageManagerImpl.java | 14 ++-- .../response/BaremetalTemplateResponse.java | 15 ++--- .../response/NwDevicePxeServerResponse.java | 35 +++++----- .../api/response/TrafficMonitorResponse.java | 49 +++++++------- .../api/response/UsageRecordResponse.java | 25 ++++--- 23 files changed, 322 insertions(+), 286 deletions(-) diff --git a/plugins/hypervisors/vmware/src/com/cloud/api/response/CiscoNexusVSMResponse.java b/plugins/hypervisors/vmware/src/com/cloud/api/response/CiscoNexusVSMResponse.java index 95f645461fa..79985daea85 100644 --- a/plugins/hypervisors/vmware/src/com/cloud/api/response/CiscoNexusVSMResponse.java +++ b/plugins/hypervisors/vmware/src/com/cloud/api/response/CiscoNexusVSMResponse.java @@ -17,7 +17,6 @@ package com.cloud.api.response; import org.apache.cloudstack.api.ApiConstants; -import com.cloud.utils.IdentityProxy; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; import org.apache.cloudstack.api.BaseResponse; @@ -25,17 +24,17 @@ import org.apache.cloudstack.api.BaseResponse; public class CiscoNexusVSMResponse extends BaseResponse { @SerializedName(ApiConstants.EXTERNAL_SWITCH_MGMT_DEVICE_ID) @Param(description="device id of the Cisco N1KV VSM device") - private IdentityProxy id = new IdentityProxy("virtual_supervisor_module"); - + private String id; + @SerializedName(ApiConstants.EXTERNAL_SWITCH_MGMT_DEVICE_NAME) @Param(description="device name") private String deviceName; - + @SerializedName(ApiConstants.IP_ADDRESS) @Param(description="the management IP address of the external Cisco Nexus 1000v Virtual Supervisor Module") private String vsmmgmtIpAddress; - + @SerializedName(ApiConstants.EXTERNAL_SWITCH_MGMT_DEVICE_STATE) @Param(description="device state") private String deviceState; - + @SerializedName(ApiConstants.VSM_MGMT_VLAN_ID) @Param(description="management vlan id of the VSM") private String vsmmgmtvlanid; @@ -47,22 +46,22 @@ public class CiscoNexusVSMResponse extends BaseResponse { @SerializedName(ApiConstants.VSM_STORAGE_VLAN_ID) @Param(description="storage vlan id of the VSM") private int vsmstoragevlanid; - + @SerializedName(ApiConstants.VSM_DOMAIN_ID) @Param(description="The VSM is a switch supervisor. This is the VSM's switch domain id") private String vsmdomainid; - + @SerializedName(ApiConstants.VSM_CONFIG_MODE) @Param(description="The mode of the VSM (standalone/HA)") private String vsmconfigmode; - + @SerializedName(ApiConstants.VSM_CONFIG_STATE) @Param(description="The Config State (Primary/Standby) of the VSM") private String vsmconfigstate; - + @SerializedName(ApiConstants.VSM_DEVICE_STATE) @Param(description="The Device State (Enabled/Disabled) of the VSM") private String vsmdevicestate; // Setter methods. - public void setId(long vsmDeviceId) { - this.id.setValue(vsmDeviceId); + public void setId(String vsmDeviceId) { + this.id = vsmDeviceId; } public void setDeviceName(String deviceName) { @@ -72,39 +71,39 @@ public class CiscoNexusVSMResponse extends BaseResponse { public void setMgmtIpAddress(String ipAddress) { this.vsmmgmtIpAddress = ipAddress; } - + public void setDeviceState(String deviceState) { this.deviceState = deviceState; } - + public void setVSMMgmtVlanId(String vlanId) { this.vsmmgmtvlanid = vlanId; } - + public void setVSMCtrlVlanId(int vlanId) { this.vsmctrlvlanid = vlanId; } - + public void setVSMPktVlanId(int vlanId) { this.vsmpktvlanid = vlanId; } - + public void setVSMStorageVlanId(int vlanId) { this.vsmstoragevlanid = vlanId; } - + public void setVSMDomainId(String domId) { this.vsmdomainid = domId; } - + public void setVSMConfigMode(String configMode) { this.vsmconfigmode = configMode; } - + public void setVSMConfigState(String configState) { this.vsmconfigstate = configState; } - + public void setVSMDeviceState(String devState) { this.vsmdevicestate = devState; } diff --git a/plugins/hypervisors/vmware/src/com/cloud/network/CiscoNexusVSMDevice.java b/plugins/hypervisors/vmware/src/com/cloud/network/CiscoNexusVSMDevice.java index c58a6a77a77..8fc68d167e5 100644 --- a/plugins/hypervisors/vmware/src/com/cloud/network/CiscoNexusVSMDevice.java +++ b/plugins/hypervisors/vmware/src/com/cloud/network/CiscoNexusVSMDevice.java @@ -17,22 +17,22 @@ package com.cloud.network; public interface CiscoNexusVSMDevice { - + // This tells us whether the VSM is currently enabled or disabled. We may // need this if we would like to carry out any sort of maintenance on the // VSM or CS. public enum VSMDeviceState { Enabled, Disabled - } - + } + // This tells us whether the VSM is currently configured with a standby (HA) // or does not have any standby (Standalone). public enum VSMConfigMode { Standalone, HA } - + // This tells us whether the VSM is currently a primary or a standby VSM. public enum VSMConfigState { Primary, @@ -40,33 +40,35 @@ public interface CiscoNexusVSMDevice { } long getId(); - + + String getUuid(); + public String getvsmName(); - + public long getHostId(); - + public String getUserName(); - + public String getPassword(); public String getipaddr(); - + public int getManagementVlan(); - + public int getControlVlan(); - + public int getPacketVlan(); public int getStorageVlan(); - + public long getvsmDomainId(); - + public VSMConfigMode getvsmConfigMode(); - + public VSMConfigState getvsmConfigState(); - + public VSMDeviceState getvsmDeviceState(); - + public String getUuid(); - + } diff --git a/plugins/hypervisors/vmware/src/com/cloud/network/CiscoNexusVSMDeviceVO.java b/plugins/hypervisors/vmware/src/com/cloud/network/CiscoNexusVSMDeviceVO.java index 81dc277f1bf..48a388980f8 100644 --- a/plugins/hypervisors/vmware/src/com/cloud/network/CiscoNexusVSMDeviceVO.java +++ b/plugins/hypervisors/vmware/src/com/cloud/network/CiscoNexusVSMDeviceVO.java @@ -37,7 +37,7 @@ import com.cloud.utils.db.Encrypt; @Entity @Table(name="virtual_supervisor_module") -public class CiscoNexusVSMDeviceVO implements CiscoNexusVSMDevice, Identity{ +public class CiscoNexusVSMDeviceVO implements CiscoNexusVSMDevice{ // We need to know what properties a VSM has. Put them here. @@ -133,7 +133,7 @@ public class CiscoNexusVSMDeviceVO implements CiscoNexusVSMDevice, Identity{ @Override public int getPacketVlan() { return packetVlan; - } + } @Override public int getStorageVlan() { @@ -197,7 +197,7 @@ public class CiscoNexusVSMDeviceVO implements CiscoNexusVSMDevice, Identity{ public void setPacketVlan(int vlan) { this.packetVlan = vlan; - } + } public void setStorageVlan(int vlan) { this.storageVlan = vlan; @@ -222,7 +222,7 @@ public class CiscoNexusVSMDeviceVO implements CiscoNexusVSMDevice, Identity{ // Constructors. - public CiscoNexusVSMDeviceVO(String vsmIpAddr, String username, String password) { + public CiscoNexusVSMDeviceVO(String vsmIpAddr, String username, String password) { // Set all the VSM's properties here. this.uuid = UUID.randomUUID().toString(); this.setMgmtIpAddr(vsmIpAddr); @@ -234,5 +234,5 @@ public class CiscoNexusVSMDeviceVO implements CiscoNexusVSMDevice, Identity{ public CiscoNexusVSMDeviceVO() { this.uuid = UUID.randomUUID().toString(); - } + } } diff --git a/plugins/hypervisors/vmware/src/com/cloud/network/element/CiscoNexusVSMElement.java b/plugins/hypervisors/vmware/src/com/cloud/network/element/CiscoNexusVSMElement.java index 78c704451fc..b9567dc8475 100644 --- a/plugins/hypervisors/vmware/src/com/cloud/network/element/CiscoNexusVSMElement.java +++ b/plugins/hypervisors/vmware/src/com/cloud/network/element/CiscoNexusVSMElement.java @@ -64,18 +64,18 @@ public class CiscoNexusVSMElement extends CiscoNexusVSMDeviceManagerImpl impleme private static final Logger s_logger = Logger.getLogger(CiscoNexusVSMElement.class); @Inject - CiscoNexusVSMDeviceDao _vsmDao; + CiscoNexusVSMDeviceDao _vsmDao; @Override public Map> getCapabilities() { return null; } - + @Override public Provider getProvider() { return null; } - + @Override public boolean implement(Network network, NetworkOffering offering, DeployDestination dest, ReservationContext context) @@ -83,7 +83,7 @@ public class CiscoNexusVSMElement extends CiscoNexusVSMDeviceManagerImpl impleme InsufficientCapacityException { return true; } - + @Override public boolean prepare(Network network, NicProfile nic, VirtualMachineProfile vm, @@ -92,7 +92,7 @@ public class CiscoNexusVSMElement extends CiscoNexusVSMDeviceManagerImpl impleme InsufficientCapacityException { return true; } - + @Override public boolean release(Network network, NicProfile nic, VirtualMachineProfile vm, @@ -100,7 +100,7 @@ public class CiscoNexusVSMElement extends CiscoNexusVSMDeviceManagerImpl impleme ResourceUnavailableException { return true; } - + @Override public boolean shutdown(Network network, ReservationContext context, boolean cleanup) throws ConcurrentOperationException, @@ -113,7 +113,7 @@ public class CiscoNexusVSMElement extends CiscoNexusVSMDeviceManagerImpl impleme throws ConcurrentOperationException, ResourceUnavailableException { return true; } - + @Override public boolean isReady(PhysicalNetworkServiceProvider provider) { return true; @@ -125,19 +125,19 @@ public class CiscoNexusVSMElement extends CiscoNexusVSMDeviceManagerImpl impleme ResourceUnavailableException { return true; } - + @Override public boolean canEnableIndividualServices() { return true; } - + @Override public boolean verifyServicesCombination(Set services) { return true; } @Override - @ActionEvent(eventType = EventTypes.EVENT_EXTERNAL_SWITCH_MGMT_DEVICE_DELETE, eventDescription = "deleting VSM", async = true) + @ActionEvent(eventType = EventTypes.EVENT_EXTERNAL_SWITCH_MGMT_DEVICE_DELETE, eventDescription = "deleting VSM", async = true) public boolean deleteCiscoNexusVSM(DeleteCiscoNexusVSMCmd cmd) { boolean result; try { @@ -148,16 +148,16 @@ public class CiscoNexusVSMElement extends CiscoNexusVSMDeviceManagerImpl impleme throw new CloudRuntimeException("Failed to delete specified VSM"); } return result; - } + } @Override - @ActionEvent(eventType = EventTypes.EVENT_EXTERNAL_SWITCH_MGMT_DEVICE_ENABLE, eventDescription = "deleting VSM", async = true) + @ActionEvent(eventType = EventTypes.EVENT_EXTERNAL_SWITCH_MGMT_DEVICE_ENABLE, eventDescription = "deleting VSM", async = true) public CiscoNexusVSMDeviceVO enableCiscoNexusVSM(EnableCiscoNexusVSMCmd cmd) { CiscoNexusVSMDeviceVO result; result = enableCiscoNexusVSM(cmd.getCiscoNexusVSMDeviceId()); return result; } - + @Override @ActionEvent(eventType = EventTypes.EVENT_EXTERNAL_SWITCH_MGMT_DEVICE_DISABLE, eventDescription = "deleting VSM", async = true) public CiscoNexusVSMDeviceVO disableCiscoNexusVSM(DisableCiscoNexusVSMCmd cmd) { @@ -165,16 +165,16 @@ public class CiscoNexusVSMElement extends CiscoNexusVSMDeviceManagerImpl impleme result = disableCiscoNexusVSM(cmd.getCiscoNexusVSMDeviceId()); return result; } - + @Override public List getCiscoNexusVSMs(ListCiscoNexusVSMsCmd cmd) { // If clusterId is defined, then it takes precedence, and we will return - // the VSM associated with this cluster. + // the VSM associated with this cluster. Long clusterId = cmd.getClusterId(); Long zoneId = cmd.getZoneId(); List result = new ArrayList(); - if (clusterId != null && clusterId.longValue() != 0) { + if (clusterId != null && clusterId.longValue() != 0) { // Find the VSM associated with this clusterId and return a list. CiscoNexusVSMDeviceVO vsm = getCiscoVSMbyClusId(cmd.getClusterId()); if (vsm == null) { @@ -183,13 +183,13 @@ public class CiscoNexusVSMElement extends CiscoNexusVSMDeviceManagerImpl impleme // Else, add it to a list and return the list. result.add(vsm); return result; - } + } // Else if there is only a zoneId defined, get a list of all vmware clusters // in the zone, and then for each cluster, pull the VSM and prepare a list. if (zoneId != null && zoneId.longValue() != 0) { - ManagementService ref = cmd.getMgmtServiceRef(); + ManagementService ref = cmd.getMgmtServiceRef(); List clusterList = ref.searchForClusters(zoneId, cmd.getStartIndex(), cmd.getPageSizeVal(), "VMware"); - + if (clusterList.size() == 0) { throw new CloudRuntimeException("No VMWare clusters found in the specified zone!"); } @@ -201,27 +201,27 @@ public class CiscoNexusVSMElement extends CiscoNexusVSMDeviceManagerImpl impleme } return result; } - + // If neither is defined, we will simply return the entire list of VSMs // configured in the management server. // TODO: Is this a safe thing to do? Only ROOT admin can invoke this call. - result = _vsmDao.listAllVSMs(); + result = _vsmDao.listAllVSMs(); return result; } - + @Override public CiscoNexusVSMResponse createCiscoNexusVSMResponse(CiscoNexusVSMDevice vsmDeviceVO) { CiscoNexusVSMResponse response = new CiscoNexusVSMResponse(); - response.setId(vsmDeviceVO.getId()); + response.setId(vsmDeviceVO.getUuid()); response.setMgmtIpAddress(vsmDeviceVO.getipaddr()); return response; } - + public CiscoNexusVSMResponse createCiscoNexusVSMDetailedResponse(CiscoNexusVSMDevice vsmDeviceVO) { CiscoNexusVSMResponse response = new CiscoNexusVSMResponse(); - response.setId(vsmDeviceVO.getId()); + response.setId(vsmDeviceVO.getUuid()); response.setDeviceName(vsmDeviceVO.getvsmName()); - response.setDeviceState(vsmDeviceVO.getvsmDeviceState().toString()); + response.setDeviceState(vsmDeviceVO.getvsmDeviceState().toString()); response.setMgmtIpAddress(vsmDeviceVO.getipaddr()); // The following values can be null, so check for that. if(vsmDeviceVO.getvsmConfigMode() != null) diff --git a/plugins/network-elements/f5/src/com/cloud/api/response/F5LoadBalancerResponse.java b/plugins/network-elements/f5/src/com/cloud/api/response/F5LoadBalancerResponse.java index 07be630e783..a6d540fd67d 100644 --- a/plugins/network-elements/f5/src/com/cloud/api/response/F5LoadBalancerResponse.java +++ b/plugins/network-elements/f5/src/com/cloud/api/response/F5LoadBalancerResponse.java @@ -17,24 +17,23 @@ 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; import org.apache.cloudstack.api.BaseResponse; public class F5LoadBalancerResponse extends BaseResponse { @SerializedName(ApiConstants.LOAD_BALANCER_DEVICE_ID) @Param(description="device id of the F5 load balancer") - private IdentityProxy id = new IdentityProxy("external_load_balancer_devices"); + private String id; @SerializedName(ApiConstants.PHYSICAL_NETWORK_ID) @Param(description="the physical network to which this F5 device belongs to") - private IdentityProxy physicalNetworkId = new IdentityProxy("physical_network"); + private String physicalNetworkId; @SerializedName(ApiConstants.PROVIDER) @Param(description="name of the provider") private String providerName; - + @SerializedName(ApiConstants.LOAD_BALANCER_DEVICE_NAME) @Param(description="device name") - private String deviceName; - + private String deviceName; + @SerializedName(ApiConstants.LOAD_BALANCER_DEVICE_STATE) @Param(description="device state") private String deviceState; @@ -49,19 +48,19 @@ public class F5LoadBalancerResponse extends BaseResponse { @SerializedName(ApiConstants.PUBLIC_INTERFACE) @Param(description="the public interface of the load balancer") private String publicInterface; - + @SerializedName(ApiConstants.PRIVATE_INTERFACE) @Param(description="the private interface of the load balancer") private String privateInterface; @SerializedName(ApiConstants.IP_ADDRESS) @Param(description="the management IP address of the external load balancer") private String ipAddress; - public void setId(long lbDeviceId) { - this.id.setValue(lbDeviceId); + public void setId(String lbDeviceId) { + this.id = lbDeviceId; } - public void setPhysicalNetworkId(long physicalNetworkId) { - this.physicalNetworkId.setValue(physicalNetworkId); + public void setPhysicalNetworkId(String physicalNetworkId) { + this.physicalNetworkId = physicalNetworkId; } public void setProvider(String provider) { diff --git a/plugins/network-elements/f5/src/com/cloud/network/element/F5ExternalLoadBalancerElement.java b/plugins/network-elements/f5/src/com/cloud/network/element/F5ExternalLoadBalancerElement.java index 5710e606508..dfa2c9890d6 100644 --- a/plugins/network-elements/f5/src/com/cloud/network/element/F5ExternalLoadBalancerElement.java +++ b/plugins/network-elements/f5/src/com/cloud/network/element/F5ExternalLoadBalancerElement.java @@ -11,7 +11,7 @@ // 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 +// KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. package com.cloud.network.element; @@ -26,6 +26,7 @@ import javax.ejb.Local; import org.apache.log4j.Logger; +import com.cloud.api.ApiDBUtils; import com.cloud.api.commands.AddExternalLoadBalancerCmd; import com.cloud.api.commands.AddF5LoadBalancerCmd; import com.cloud.api.commands.ConfigureF5LoadBalancerCmd; @@ -64,6 +65,7 @@ import com.cloud.network.NetworkExternalLoadBalancerVO; import com.cloud.network.NetworkManager; import com.cloud.network.NetworkVO; import com.cloud.network.Networks.TrafficType; +import com.cloud.network.PhysicalNetwork; import com.cloud.network.PhysicalNetworkServiceProvider; import com.cloud.network.PhysicalNetworkVO; import com.cloud.network.PublicIpAddress; @@ -436,9 +438,12 @@ public class F5ExternalLoadBalancerElement extends ExternalLoadBalancerDeviceMan Host lbHost = _hostDao.findById(lbDeviceVO.getHostId()); Map lbDetails = _detailsDao.findDetails(lbDeviceVO.getHostId()); - response.setId(lbDeviceVO.getId()); + response.setId(lbDeviceVO.getUuid()); response.setIpAddress(lbHost.getPrivateIpAddress()); - response.setPhysicalNetworkId(lbDeviceVO.getPhysicalNetworkId()); + PhysicalNetwork pnw = ApiDBUtils.findPhysicalNetworkById(lbDeviceVO.getPhysicalNetworkId()); + if (pnw != null) { + response.setPhysicalNetworkId(pnw.getUuid()); + } response.setPublicInterface(lbDetails.get("publicInterface")); response.setPrivateInterface(lbDetails.get("privateInterface")); response.setDeviceName(lbDeviceVO.getDeviceName()); diff --git a/plugins/network-elements/juniper-srx/src/com/cloud/api/response/SrxFirewallResponse.java b/plugins/network-elements/juniper-srx/src/com/cloud/api/response/SrxFirewallResponse.java index 8ad8597cff5..8ac488f0da0 100644 --- a/plugins/network-elements/juniper-srx/src/com/cloud/api/response/SrxFirewallResponse.java +++ b/plugins/network-elements/juniper-srx/src/com/cloud/api/response/SrxFirewallResponse.java @@ -17,7 +17,6 @@ package com.cloud.api.response; import org.apache.cloudstack.api.ApiConstants; -import com.cloud.utils.IdentityProxy; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; import org.apache.cloudstack.api.BaseResponse; @@ -26,17 +25,17 @@ import org.apache.cloudstack.api.BaseResponse; public class SrxFirewallResponse extends BaseResponse { @SerializedName(ApiConstants.FIREWALL_DEVICE_ID) @Param(description="device id of the SRX firewall") - private IdentityProxy id = new IdentityProxy("external_firewall_devices"); + private String id; @SerializedName(ApiConstants.PHYSICAL_NETWORK_ID) @Param(description="the physical network to which this SRX firewall belongs to") - private IdentityProxy physicalNetworkId = new IdentityProxy("physical_network"); + private String physicalNetworkId; @SerializedName(ApiConstants.PROVIDER) @Param(description="name of the provider") private String providerName; - + @SerializedName(ApiConstants.FIREWALL_DEVICE_NAME) @Param(description="device name") - private String deviceName; - + private String deviceName; + @SerializedName(ApiConstants.FIREWALL_DEVICE_STATE) @Param(description="device state") private String deviceState; @@ -44,7 +43,7 @@ public class SrxFirewallResponse extends BaseResponse { private Long deviceCapacity; @SerializedName(ApiConstants.ZONE_ID) @Param(description="the zone ID of the external firewall") - private IdentityProxy zoneId = new IdentityProxy("data_center"); + private String zoneId; @SerializedName(ApiConstants.IP_ADDRESS) @Param(description="the management IP address of the external firewall") private String ipAddress; @@ -73,12 +72,12 @@ public class SrxFirewallResponse extends BaseResponse { @SerializedName(ApiConstants.TIMEOUT) @Param(description="the timeout (in seconds) for requests to the external firewall") private String timeout; - public void setId(long lbDeviceId) { - this.id.setValue(lbDeviceId); + public void setId(String lbDeviceId) { + this.id = lbDeviceId; } - public void setPhysicalNetworkId(long physicalNetworkId) { - this.physicalNetworkId.setValue(physicalNetworkId); + public void setPhysicalNetworkId(String physicalNetworkId) { + this.physicalNetworkId = physicalNetworkId; } public void setProvider(String provider) { diff --git a/plugins/network-elements/juniper-srx/src/com/cloud/network/element/JuniperSRXExternalFirewallElement.java b/plugins/network-elements/juniper-srx/src/com/cloud/network/element/JuniperSRXExternalFirewallElement.java index d3353af449d..d9f6ce559bd 100644 --- a/plugins/network-elements/juniper-srx/src/com/cloud/network/element/JuniperSRXExternalFirewallElement.java +++ b/plugins/network-elements/juniper-srx/src/com/cloud/network/element/JuniperSRXExternalFirewallElement.java @@ -11,7 +11,7 @@ // 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 +// KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. package com.cloud.network.element; @@ -26,6 +26,7 @@ import javax.ejb.Local; import org.apache.log4j.Logger; +import com.cloud.api.ApiDBUtils; import com.cloud.api.commands.AddExternalFirewallCmd; import com.cloud.api.commands.AddSrxFirewallCmd; import com.cloud.api.commands.ConfigureSrxFirewallCmd; @@ -63,6 +64,7 @@ import com.cloud.network.Network.Service; import com.cloud.network.NetworkExternalFirewallVO; import com.cloud.network.NetworkManager; import com.cloud.network.NetworkVO; +import com.cloud.network.PhysicalNetwork; import com.cloud.network.PhysicalNetworkServiceProvider; import com.cloud.network.PhysicalNetworkVO; import com.cloud.network.PublicIpAddress; @@ -508,8 +510,11 @@ public class JuniperSRXExternalFirewallElement extends ExternalFirewallDeviceMan Map fwDetails = _hostDetailDao.findDetails(fwDeviceVO.getHostId()); Host fwHost = _hostDao.findById(fwDeviceVO.getHostId()); - response.setId(fwDeviceVO.getId()); - response.setPhysicalNetworkId(fwDeviceVO.getPhysicalNetworkId()); + response.setId(fwDeviceVO.getUuid()); + PhysicalNetwork pnw = ApiDBUtils.findPhysicalNetworkById(fwDeviceVO.getPhysicalNetworkId()); + if (pnw != null) { + response.setPhysicalNetworkId(pnw.getUuid()); + } response.setDeviceName(fwDeviceVO.getDeviceName()); if (fwDeviceVO.getCapacity() == 0) { long defaultFwCapacity = NumbersUtil.parseLong(_configDao.getValue(Config.DefaultExternalFirewallCapacity.key()), 50); diff --git a/plugins/network-elements/netscaler/src/com/cloud/api/response/NetscalerLoadBalancerResponse.java b/plugins/network-elements/netscaler/src/com/cloud/api/response/NetscalerLoadBalancerResponse.java index 290018c3c28..2983da26811 100644 --- a/plugins/network-elements/netscaler/src/com/cloud/api/response/NetscalerLoadBalancerResponse.java +++ b/plugins/network-elements/netscaler/src/com/cloud/api/response/NetscalerLoadBalancerResponse.java @@ -19,7 +19,6 @@ package com.cloud.api.response; import java.util.List; import org.apache.cloudstack.api.ApiConstants; -import com.cloud.utils.IdentityProxy; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; import org.apache.cloudstack.api.BaseResponse; @@ -28,17 +27,17 @@ import org.apache.cloudstack.api.BaseResponse; public class NetscalerLoadBalancerResponse extends BaseResponse { @SerializedName(ApiConstants.LOAD_BALANCER_DEVICE_ID) @Param(description="device id of the netscaler load balancer") - private IdentityProxy id = new IdentityProxy("external_load_balancer_devices"); + private String id; @SerializedName(ApiConstants.PHYSICAL_NETWORK_ID) @Param(description="the physical network to which this netscaler device belongs to") - private IdentityProxy physicalNetworkId = new IdentityProxy("physical_network"); + private String physicalNetworkId; @SerializedName(ApiConstants.PROVIDER) @Param(description="name of the provider") private String providerName; - + @SerializedName(ApiConstants.LOAD_BALANCER_DEVICE_NAME) @Param(description="device name") - private String deviceName; - + private String deviceName; + @SerializedName(ApiConstants.LOAD_BALANCER_DEVICE_STATE) @Param(description="device state") private String deviceState; @@ -53,7 +52,7 @@ public class NetscalerLoadBalancerResponse extends BaseResponse { @SerializedName(ApiConstants.PUBLIC_INTERFACE) @Param(description="the public interface of the load balancer") private String publicInterface; - + @SerializedName(ApiConstants.PRIVATE_INTERFACE) @Param(description="the private interface of the load balancer") private String privateInterface; @@ -64,13 +63,13 @@ public class NetscalerLoadBalancerResponse extends BaseResponse { " This parameter represents the list of pod's, for which there exists a policy based route on datacenter L3 router to " + "route pod's subnet IP to a NetScaler device.") private List podIds; - - public void setId(long lbDeviceId) { - this.id.setValue(lbDeviceId); + + public void setId(String lbDeviceId) { + this.id = lbDeviceId; } - public void setPhysicalNetworkId(long physicalNetworkId) { - this.physicalNetworkId.setValue(physicalNetworkId); + public void setPhysicalNetworkId(String physicalNetworkId) { + this.physicalNetworkId = physicalNetworkId; } public void setProvider(String provider) { diff --git a/plugins/network-elements/netscaler/src/com/cloud/network/element/NetscalerElement.java b/plugins/network-elements/netscaler/src/com/cloud/network/element/NetscalerElement.java index 3725a246f95..4da097e3963 100644 --- a/plugins/network-elements/netscaler/src/com/cloud/network/element/NetscalerElement.java +++ b/plugins/network-elements/netscaler/src/com/cloud/network/element/NetscalerElement.java @@ -11,7 +11,7 @@ // 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 +// KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. package com.cloud.network.element; @@ -36,6 +36,8 @@ import com.cloud.agent.api.routing.SetStaticNatRulesCommand; import com.cloud.agent.api.to.LoadBalancerTO; import com.cloud.agent.api.to.StaticNatRuleTO; import org.apache.cloudstack.api.ApiConstants; + +import com.cloud.api.ApiDBUtils; import com.cloud.api.commands.AddNetscalerLoadBalancerCmd; import com.cloud.api.commands.ConfigureNetscalerLoadBalancerCmd; import com.cloud.api.commands.DeleteNetscalerLoadBalancerCmd; @@ -76,6 +78,7 @@ import com.cloud.network.NetworkExternalLoadBalancerVO; import com.cloud.network.NetworkManager; import com.cloud.network.NetworkVO; import com.cloud.network.Networks.TrafficType; +import com.cloud.network.PhysicalNetwork; import com.cloud.network.PhysicalNetworkServiceProvider; import com.cloud.network.PhysicalNetworkVO; import com.cloud.network.PublicIpAddress; @@ -539,9 +542,12 @@ StaticNatServiceProvider { Host lbHost = _hostDao.findById(lbDeviceVO.getHostId()); Map lbDetails = _detailsDao.findDetails(lbDeviceVO.getHostId()); - response.setId(lbDeviceVO.getId()); + response.setId(lbDeviceVO.getUuid()); response.setIpAddress(lbHost.getPrivateIpAddress()); - response.setPhysicalNetworkId(lbDeviceVO.getPhysicalNetworkId()); + PhysicalNetwork pnw = ApiDBUtils.findPhysicalNetworkById(lbDeviceVO.getPhysicalNetworkId()); + if (pnw != null) { + response.setPhysicalNetworkId(pnw.getUuid()); + } response.setPublicInterface(lbDetails.get("publicInterface")); response.setPrivateInterface(lbDetails.get("privateInterface")); response.setDeviceName(lbDeviceVO.getDeviceName()); @@ -619,13 +625,13 @@ StaticNatServiceProvider { // NetScaler can only act as Lb and Static Nat service provider if (services != null && !services.isEmpty() && !netscalerServices.containsAll(services)) { - s_logger.warn("NetScaler network element can only support LB and Static NAT services and service combination " + s_logger.warn("NetScaler network element can only support LB and Static NAT services and service combination " + services + " is not supported."); String servicesList = ""; for (Service service : services) { servicesList += service.getName() + " "; } - s_logger.warn("NetScaler network element can only support LB and Static NAT services and service combination " + s_logger.warn("NetScaler network element can only support LB and Static NAT services and service combination " + servicesList + " is not supported."); s_logger.warn("NetScaler network element can only support LB and Static NAT services and service combination " + services + " is not supported."); diff --git a/plugins/network-elements/nicira-nvp/src/com/cloud/api/response/NiciraNvpDeviceResponse.java b/plugins/network-elements/nicira-nvp/src/com/cloud/api/response/NiciraNvpDeviceResponse.java index 74f852b9f28..612d15b7bbe 100644 --- a/plugins/network-elements/nicira-nvp/src/com/cloud/api/response/NiciraNvpDeviceResponse.java +++ b/plugins/network-elements/nicira-nvp/src/com/cloud/api/response/NiciraNvpDeviceResponse.java @@ -18,38 +18,37 @@ package com.cloud.api.response; import org.apache.cloudstack.api.ApiConstants; import com.cloud.serializer.Param; -import com.cloud.utils.IdentityProxy; import com.google.gson.annotations.SerializedName; import org.apache.cloudstack.api.BaseResponse; public class NiciraNvpDeviceResponse extends BaseResponse { @SerializedName(ApiConstants.NICIRA_NVP_DEVICE_ID) @Param(description="device id of the Nicire Nvp") - private IdentityProxy id = new IdentityProxy("external_nicira_nvp_devices"); - + private String id; + @SerializedName(ApiConstants.PHYSICAL_NETWORK_ID) @Param(description="the physical network to which this Nirica Nvp belongs to") - private IdentityProxy physicalNetworkId = new IdentityProxy("physical_network"); - + private String physicalNetworkId; + @SerializedName(ApiConstants.PROVIDER) @Param(description="name of the provider") private String providerName; - + @SerializedName(ApiConstants.NICIRA_NVP_DEVICE_NAME) @Param(description="device name") private String deviceName; - + @SerializedName(ApiConstants.HOST_NAME) @Param(description="the controller Ip address") private String hostName; - + @SerializedName(ApiConstants.NICIRA_NVP_TRANSPORT_ZONE_UUID) @Param(description="the transport zone Uuid") private String transportZoneUuid; - + @SerializedName(ApiConstants.NICIRA_NVP_GATEWAYSERVICE_UUID) @Param(description="this L3 gateway service Uuid") private String l3GatewayServiceUuid; - - public void setId(long nvpDeviceId) { - this.id.setValue(nvpDeviceId); + + public void setId(String nvpDeviceId) { + this.id = nvpDeviceId; } - public void setPhysicalNetworkId(long physicalNetworkId) { - this.physicalNetworkId.setValue(physicalNetworkId); + public void setPhysicalNetworkId(String physicalNetworkId) { + this.physicalNetworkId = physicalNetworkId; } public void setProviderName(String providerName) { @@ -60,13 +59,7 @@ public class NiciraNvpDeviceResponse extends BaseResponse { this.deviceName = deviceName; } - public void setId(IdentityProxy id) { - this.id = id; - } - public void setPhysicalNetworkId(IdentityProxy physicalNetworkId) { - this.physicalNetworkId = physicalNetworkId; - } public void setHostName(String hostName) { this.hostName = hostName; @@ -78,6 +71,6 @@ public class NiciraNvpDeviceResponse extends BaseResponse { public void setL3GatewayServiceUuid(String l3GatewayServiceUuid) { this.l3GatewayServiceUuid = l3GatewayServiceUuid; - } - + } + } diff --git a/plugins/network-elements/nicira-nvp/src/com/cloud/network/element/NiciraNvpElement.java b/plugins/network-elements/nicira-nvp/src/com/cloud/network/element/NiciraNvpElement.java index d38abcc6897..dc47a7399a2 100644 --- a/plugins/network-elements/nicira-nvp/src/com/cloud/network/element/NiciraNvpElement.java +++ b/plugins/network-elements/nicira-nvp/src/com/cloud/network/element/NiciraNvpElement.java @@ -51,6 +51,7 @@ import com.cloud.agent.api.StartupNiciraNvpCommand; import com.cloud.agent.api.UpdateLogicalSwitchPortCommand; import com.cloud.agent.api.to.PortForwardingRuleTO; import com.cloud.agent.api.to.StaticNatRuleTO; +import com.cloud.api.ApiDBUtils; import com.cloud.api.commands.AddNiciraNvpDeviceCmd; import com.cloud.api.commands.DeleteNiciraNvpDeviceCmd; import com.cloud.api.commands.ListNiciraNvpDeviceNetworksCmd; @@ -82,6 +83,7 @@ import com.cloud.network.NetworkManager; import com.cloud.network.NiciraNvpDeviceVO; import com.cloud.network.NiciraNvpNicMappingVO; import com.cloud.network.NiciraNvpRouterMappingVO; +import com.cloud.network.PhysicalNetwork; import com.cloud.network.PhysicalNetworkServiceProvider; import com.cloud.network.PhysicalNetworkVO; import com.cloud.network.PublicIpAddress; @@ -275,9 +277,9 @@ public class NiciraNvpElement extends AdapterBase implements + network.getDisplayText()); return false; } - + // Store the uuid so we can easily find it during cleanup - NiciraNvpRouterMappingVO routermapping = + NiciraNvpRouterMappingVO routermapping = new NiciraNvpRouterMappingVO(answer.getLogicalRouterUuid(), network.getId()); _niciraNvpRouterMappingDao.persist(routermapping); } @@ -455,14 +457,14 @@ public class NiciraNvpElement extends AdapterBase implements } DeleteLogicalRouterCommand cmd = new DeleteLogicalRouterCommand(routermapping.getLogicalRouterUuid()); - DeleteLogicalRouterAnswer answer = + DeleteLogicalRouterAnswer answer = (DeleteLogicalRouterAnswer) _agentMgr.easySend(niciraNvpHost.getId(), cmd); if (answer.getResult() == false) { s_logger.error("Failed to delete LogicalRouter for network " + network.getDisplayText()); return false; } - + _niciraNvpRouterMappingDao.remove(routermapping.getId()); } @@ -520,7 +522,7 @@ public class NiciraNvpElement extends AdapterBase implements // L3 Support : Generic? capabilities.put(Service.Gateway, null); - + // L3 Support : SourceNat Map sourceNatCapabilities = new HashMap(); sourceNatCapabilities.put(Capability.SupportedSourceNatTypes, @@ -530,10 +532,10 @@ public class NiciraNvpElement extends AdapterBase implements // L3 Support : Port Forwarding capabilities.put(Service.PortForwarding, null); - + // L3 support : StaticNat capabilities.put(Service.StaticNat, null); - + return capabilities; } @@ -591,8 +593,8 @@ public class NiciraNvpElement extends AdapterBase implements params.put("adminpass", cmd.getPassword()); params.put("transportzoneuuid", cmd.getTransportzoneUuid()); // FIXME What to do with multiple isolation types - params.put("transportzoneisotype", - physicalNetwork.getIsolationMethods().get(0).toLowerCase()); + params.put("transportzoneisotype", + physicalNetwork.getIsolationMethods().get(0).toLowerCase()); if (cmd.getL3GatewayServiceUuid() != null) { params.put("l3gatewayserviceuuid", cmd.getL3GatewayServiceUuid()); } @@ -636,11 +638,14 @@ public class NiciraNvpElement extends AdapterBase implements NiciraNvpDeviceVO niciraNvpDeviceVO) { HostVO niciraNvpHost = _hostDao.findById(niciraNvpDeviceVO.getHostId()); _hostDao.loadDetails(niciraNvpHost); - + NiciraNvpDeviceResponse response = new NiciraNvpDeviceResponse(); response.setDeviceName(niciraNvpDeviceVO.getDeviceName()); - response.setPhysicalNetworkId(niciraNvpDeviceVO.getPhysicalNetworkId()); - response.setId(niciraNvpDeviceVO.getId()); + PhysicalNetwork pnw = ApiDBUtils.findPhysicalNetworkById(niciraNvpDeviceVO.getPhysicalNetworkId()); + if (pnw != null) { + response.setPhysicalNetworkId(pnw.getUuid()); + } + response.setId(niciraNvpDeviceVO.getUuid()); response.setProviderName(niciraNvpDeviceVO.getProviderName()); response.setHostName(niciraNvpHost.getDetail("ip")); response.setTransportZoneUuid(niciraNvpHost.getDetail("transportzoneuuid")); @@ -800,7 +805,7 @@ public class NiciraNvpElement extends AdapterBase implements /** * From interface IpDeployer - * + * * @param network * @param ipAddress * @param services @@ -824,7 +829,7 @@ public class NiciraNvpElement extends AdapterBase implements NiciraNvpDeviceVO niciraNvpDevice = devices.get(0); HostVO niciraNvpHost = _hostDao.findById(niciraNvpDevice.getHostId()); _hostDao.loadDetails(niciraNvpHost); - + NiciraNvpRouterMappingVO routermapping = _niciraNvpRouterMappingDao .findByNetworkId(network.getId()); if (routermapping == null) { @@ -832,12 +837,12 @@ public class NiciraNvpElement extends AdapterBase implements + network.getDisplayText()); return false; } - + List cidrs = new ArrayList(); for (PublicIpAddress ip : ipAddress) { cidrs.add(ip.getAddress().addr() + "/" + NetUtils.getCidrSize(ip.getNetmask())); } - ConfigurePublicIpsOnLogicalRouterCommand cmd = new ConfigurePublicIpsOnLogicalRouterCommand(routermapping.getLogicalRouterUuid(), + ConfigurePublicIpsOnLogicalRouterCommand cmd = new ConfigurePublicIpsOnLogicalRouterCommand(routermapping.getLogicalRouterUuid(), niciraNvpHost.getDetail("l3gatewayserviceuuid"), cidrs); ConfigurePublicIpsOnLogicalRouterAnswer answer = (ConfigurePublicIpsOnLogicalRouterAnswer) _agentMgr.easySend(niciraNvpHost.getId(), cmd); return answer.getResult(); @@ -845,7 +850,7 @@ public class NiciraNvpElement extends AdapterBase implements else { s_logger.debug("No need to provision ip addresses as we are not providing L3 services."); } - + return true; } @@ -869,7 +874,7 @@ public class NiciraNvpElement extends AdapterBase implements } NiciraNvpDeviceVO niciraNvpDevice = devices.get(0); HostVO niciraNvpHost = _hostDao.findById(niciraNvpDevice.getHostId()); - + NiciraNvpRouterMappingVO routermapping = _niciraNvpRouterMappingDao .findByNetworkId(network.getId()); if (routermapping == null) { @@ -878,23 +883,23 @@ public class NiciraNvpElement extends AdapterBase implements return false; } - List staticNatRules = new ArrayList(); + List staticNatRules = new ArrayList(); for (StaticNat rule : rules) { IpAddress sourceIp = _networkManager.getIp(rule.getSourceIpAddressId()); // Force the nat rule into the StaticNatRuleTO, no use making a new TO object // we only need the source and destination ip. Unfortunately no mention if a rule // is new. - StaticNatRuleTO ruleTO = new StaticNatRuleTO(1, - sourceIp.getAddress().addr(), 0, 65535, + StaticNatRuleTO ruleTO = new StaticNatRuleTO(1, + sourceIp.getAddress().addr(), 0, 65535, rule.getDestIpAddress(), 0, 65535, "any", rule.isForRevoke(), false); staticNatRules.add(ruleTO); } - - ConfigureStaticNatRulesOnLogicalRouterCommand cmd = + + ConfigureStaticNatRulesOnLogicalRouterCommand cmd = new ConfigureStaticNatRulesOnLogicalRouterCommand(routermapping.getLogicalRouterUuid(), staticNatRules); ConfigureStaticNatRulesOnLogicalRouterAnswer answer = (ConfigureStaticNatRulesOnLogicalRouterAnswer) _agentMgr.easySend(niciraNvpHost.getId(), cmd); - + return answer.getResult(); } @@ -907,7 +912,7 @@ public class NiciraNvpElement extends AdapterBase implements if (!canHandle(network, Service.PortForwarding)) { return false; } - + List devices = _niciraNvpDao .listByPhysicalNetwork(network.getPhysicalNetworkId()); if (devices.isEmpty()) { @@ -917,7 +922,7 @@ public class NiciraNvpElement extends AdapterBase implements } NiciraNvpDeviceVO niciraNvpDevice = devices.get(0); HostVO niciraNvpHost = _hostDao.findById(niciraNvpDevice.getHostId()); - + NiciraNvpRouterMappingVO routermapping = _niciraNvpRouterMappingDao .findByNetworkId(network.getId()); if (routermapping == null) { @@ -925,19 +930,19 @@ public class NiciraNvpElement extends AdapterBase implements + network.getDisplayText()); return false; } - - List portForwardingRules = new ArrayList(); + + List portForwardingRules = new ArrayList(); for (PortForwardingRule rule : rules) { IpAddress sourceIp = _networkManager.getIp(rule.getSourceIpAddressId()); Vlan vlan = _vlanDao.findById(sourceIp.getVlanId()); PortForwardingRuleTO ruleTO = new PortForwardingRuleTO((PortForwardingRule) rule, vlan.getVlanTag(), sourceIp.getAddress().addr()); portForwardingRules.add(ruleTO); } - - ConfigurePortForwardingRulesOnLogicalRouterCommand cmd = + + ConfigurePortForwardingRulesOnLogicalRouterCommand cmd = new ConfigurePortForwardingRulesOnLogicalRouterCommand(routermapping.getLogicalRouterUuid(), portForwardingRules); ConfigurePortForwardingRulesOnLogicalRouterAnswer answer = (ConfigurePortForwardingRulesOnLogicalRouterAnswer) _agentMgr.easySend(niciraNvpHost.getId(), cmd); - + return answer.getResult(); } diff --git a/server/src/com/cloud/api/commands/GetUsageRecordsCmd.java b/server/src/com/cloud/api/commands/GetUsageRecordsCmd.java index 6d67e05043c..77fdd56eb0c 100644 --- a/server/src/com/cloud/api/commands/GetUsageRecordsCmd.java +++ b/server/src/com/cloud/api/commands/GetUsageRecordsCmd.java @@ -27,6 +27,7 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import com.cloud.api.ApiDBUtils; +import com.cloud.dc.DataCenter; import com.cloud.domain.Domain; import org.apache.cloudstack.api.BaseListCmd; @@ -37,11 +38,13 @@ import org.apache.cloudstack.api.response.ListResponse; import com.cloud.projects.Project; import com.cloud.server.ManagementServerExt; import com.cloud.server.api.response.UsageRecordResponse; +import com.cloud.storage.VMTemplateVO; import com.cloud.usage.UsageTypes; import com.cloud.usage.UsageVO; import com.cloud.user.Account; import com.cloud.uuididentity.dao.IdentityDao; import com.cloud.uuididentity.dao.IdentityDaoImpl; +import com.cloud.vm.VMInstanceVO; @Implementation(description="Lists usage records for accounts", responseObject=UsageRecordResponse.class) public class GetUsageRecordsCmd extends BaseListCmd { @@ -235,7 +238,7 @@ public class GetUsageRecordsCmd extends BaseListCmd { usageRecResponse.setProjectId(project.getUuid()); usageRecResponse.setProjectName(project.getName()); } else { - usageRecResponse.setAccountId(account.getId()); + usageRecResponse.setAccountId(account.getUuid()); usageRecResponse.setAccountName(account.getAccountName()); } @@ -244,13 +247,28 @@ public class GetUsageRecordsCmd extends BaseListCmd { usageRecResponse.setDomainId(domain.getUuid()); } - usageRecResponse.setZoneId(usageRecord.getZoneId()); + if (usageRecord.getZoneId() != null) { + DataCenter zone = ApiDBUtils.findZoneById(usageRecord.getZoneId()); + if (zone != null) { + usageRecResponse.setZoneId(zone.getUuid()); + } + } usageRecResponse.setDescription(usageRecord.getDescription()); usageRecResponse.setUsage(usageRecord.getUsageDisplay()); usageRecResponse.setUsageType(usageRecord.getUsageType()); - usageRecResponse.setVirtualMachineId(usageRecord.getVmInstanceId()); + if (usageRecord.getVmInstanceId() != null) { + VMInstanceVO vm = ApiDBUtils.findVMInstanceById(usageRecord.getVmInstanceId()); + if (vm != null) { + usageRecResponse.setVirtualMachineId(vm.getUuid()); + } + } usageRecResponse.setVmName(usageRecord.getVmName()); - usageRecResponse.setTemplateId(usageRecord.getTemplateId()); + if (usageRecord.getTemplateId() != null) { + VMTemplateVO template = ApiDBUtils.findTemplateById(usageRecord.getTemplateId()); + if (template != null) { + usageRecResponse.setTemplateId(template.getUuid()); + } + } if(usageRecord.getUsageType() == UsageTypes.RUNNING_VM || usageRecord.getUsageType() == UsageTypes.ALLOCATED_VM){ //Service Offering Id diff --git a/server/src/com/cloud/baremetal/DhcpServerResponse.java b/server/src/com/cloud/baremetal/DhcpServerResponse.java index 69b507190bf..db46ccd1a1d 100644 --- a/server/src/com/cloud/baremetal/DhcpServerResponse.java +++ b/server/src/com/cloud/baremetal/DhcpServerResponse.java @@ -17,20 +17,19 @@ package com.cloud.baremetal; import org.apache.cloudstack.api.ApiConstants; -import com.cloud.utils.IdentityProxy; import org.apache.cloudstack.api.BaseResponse; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; public class DhcpServerResponse extends BaseResponse { @SerializedName(ApiConstants.ID) @Param(description="the ID of the Dhcp server") - private IdentityProxy id = new IdentityProxy("host"); - - public Long getId() { - return id.getValue(); + private String id; + + public String getId() { + return id; } - - public void setId(Long id) { - this.id.setValue(id); + + public void setId(String id) { + this.id = id; } } diff --git a/server/src/com/cloud/baremetal/ExternalDhcpManagerImpl.java b/server/src/com/cloud/baremetal/ExternalDhcpManagerImpl.java index 0da4029784e..c1f0fff6d3c 100755 --- a/server/src/com/cloud/baremetal/ExternalDhcpManagerImpl.java +++ b/server/src/com/cloud/baremetal/ExternalDhcpManagerImpl.java @@ -71,7 +71,7 @@ public class ExternalDhcpManagerImpl implements ExternalDhcpManager, ResourceSta @Inject UserVmDao _userVmDao; @Inject ResourceManager _resourceMgr; @Inject NicDao _nicDao; - + @Override public boolean configure(String name, Map params) throws ConfigurationException { _resourceMgr.registerResourceStateAdapter(this.getClass().getSimpleName(), this); @@ -97,26 +97,26 @@ public class ExternalDhcpManagerImpl implements ExternalDhcpManager, ResourceSta protected String getDhcpServerGuid(String zoneId, String name, String ip) { return zoneId + "-" + name + "-" + ip; } - - + + @Override @DB - public Host addDhcpServer(Long zoneId, Long podId, String type, String url, String username, String password) { + public Host addDhcpServer(Long zoneId, Long podId, String type, String url, String username, String password) { DataCenterVO zone = _dcDao.findById(zoneId); if (zone == null) { throw new InvalidParameterValueException("Could not find zone with ID: " + zoneId); - } - + } + HostPodVO pod = _podDao.findById(podId); if (pod == null) { throw new InvalidParameterValueException("Could not find pod with ID: " + podId); - } - + } + List dhcps = _resourceMgr.listAllUpAndEnabledHosts(Host.Type.ExternalDhcp, null, podId, zoneId); if (dhcps.size() != 0) { throw new InvalidParameterValueException("Already had a DHCP server in Pod: " + podId + " zone: " + zoneId); } - - + + String ipAddress = url; String guid = getDhcpServerGuid(Long.toString(zoneId) + "-" + Long.toString(podId), "ExternalDhcp", ipAddress); Map params = new HashMap(); @@ -134,7 +134,7 @@ public class ExternalDhcpManagerImpl implements ExternalDhcpManager, ResourceSta dns = zone.getDns2(); } params.put("dns", dns); - + ServerResource resource = null; try { if (type.equalsIgnoreCase(DhcpServerType.Dnsmasq.getName())) { @@ -150,12 +150,12 @@ public class ExternalDhcpManagerImpl implements ExternalDhcpManager, ResourceSta s_logger.debug(e); throw new CloudRuntimeException(e.getMessage()); } - + Host dhcpServer = _resourceMgr.addHost(zoneId, resource, Host.Type.ExternalDhcp, params); if (dhcpServer == null) { throw new CloudRuntimeException("Cannot add external Dhcp server as a host"); } - + Transaction txn = Transaction.currentTxn(); txn.start(); pod.setExternalDhcp(true); @@ -163,11 +163,11 @@ public class ExternalDhcpManagerImpl implements ExternalDhcpManager, ResourceSta txn.commit(); return dhcpServer; } - + @Override public DhcpServerResponse getApiResponse(Host dhcpServer) { DhcpServerResponse response = new DhcpServerResponse(); - response.setId(dhcpServer.getId()); + response.setId(dhcpServer.getUuid()); return response; } @@ -178,7 +178,7 @@ public class ExternalDhcpManagerImpl implements ExternalDhcpManager, ResourceSta s_logger.debug("VM " + vmId + " is not baremetal machine, skip preparing baremetal DHCP entry"); return; } - + List servers = _resourceMgr.listAllUpAndEnabledHosts(Host.Type.PxeServer, null, vm.getPodIdToDeployIn(), vm.getDataCenterIdToDeployIn()); if (servers.size() != 1) { throw new CloudRuntimeException("Wrong number of PXE server found in zone " + vm.getDataCenterIdToDeployIn() @@ -188,7 +188,7 @@ public class ExternalDhcpManagerImpl implements ExternalDhcpManager, ResourceSta cmd.setNextServer(pxeServer.getPrivateIpAddress()); s_logger.debug("Set next-server to " + pxeServer.getPrivateIpAddress() + " for VM " + vm.getId()); } - + @Override public boolean addVirtualMachineIntoNetwork(Network network, NicProfile nic, VirtualMachineProfile profile, DeployDestination dest, ReservationContext context) throws ResourceUnavailableException { @@ -198,11 +198,11 @@ public class ExternalDhcpManagerImpl implements ExternalDhcpManager, ResourceSta if (hosts.size() == 0) { throw new CloudRuntimeException("No external Dhcp found in zone " + zoneId + " pod " + podId); } - + if (hosts.size() > 1) { throw new CloudRuntimeException("Something wrong, more than 1 external Dhcp found in zone " + zoneId + " pod " + podId); } - + HostVO h = hosts.get(0); String dns = nic.getDns1(); if (dns == null) { @@ -240,7 +240,7 @@ public class ExternalDhcpManagerImpl implements ExternalDhcpManager, ResourceSta if (!(startup[0] instanceof StartupExternalDhcpCommand)) { return null; } - + host.setType(Host.Type.ExternalDhcp); return host; } diff --git a/server/src/com/cloud/baremetal/PxeServerManagerImpl.java b/server/src/com/cloud/baremetal/PxeServerManagerImpl.java index efbccfa2092..0db8cc9289c 100755 --- a/server/src/com/cloud/baremetal/PxeServerManagerImpl.java +++ b/server/src/com/cloud/baremetal/PxeServerManagerImpl.java @@ -57,7 +57,7 @@ public class PxeServerManagerImpl implements PxeServerManager, ResourceStateAdap @Inject ResourceManager _resourceMgr; @Inject(adapter=PxeServerService.class) protected Adapters _services; - + @Override public boolean configure(String name, Map params) throws ConfigurationException { _name = name; @@ -89,8 +89,8 @@ public class PxeServerManagerImpl implements PxeServerManager, ResourceStateAdap } return _service; } - - + + @Override public Host addPxeServer(PxeServerProfile profile) { return getServiceByType(profile.getType()).addPxeServer(profile); @@ -99,7 +99,7 @@ public class PxeServerManagerImpl implements PxeServerManager, ResourceStateAdap @Override public PxeServerResponse getApiResponse(Host pxeServer) { PxeServerResponse response = new PxeServerResponse(); - response.setId(pxeServer.getId()); + response.setId(pxeServer.getUuid()); return response; } @@ -112,7 +112,7 @@ public class PxeServerManagerImpl implements PxeServerManager, ResourceStateAdap public boolean prepareCreateTemplate(PxeServerType type, Long pxeServerId, UserVm vm, String templateUrl) { return getServiceByType(type.getName()).prepareCreateTemplate(pxeServerId, vm, templateUrl); } - + @Override public PxeServerType getPxeServerType(HostVO host) { if (host.getResource().equalsIgnoreCase(PingPxeServerResource.class.getName())) { @@ -134,7 +134,7 @@ public class PxeServerManagerImpl implements PxeServerManager, ResourceStateAdap if (!(startup[0] instanceof StartupPxeServerCommand)) { return null; } - + host.setType(Host.Type.PxeServer); return host; } diff --git a/server/src/com/cloud/baremetal/PxeServerResponse.java b/server/src/com/cloud/baremetal/PxeServerResponse.java index aa050960273..32fcc7fb5b9 100644 --- a/server/src/com/cloud/baremetal/PxeServerResponse.java +++ b/server/src/com/cloud/baremetal/PxeServerResponse.java @@ -17,20 +17,19 @@ package com.cloud.baremetal; import org.apache.cloudstack.api.ApiConstants; -import com.cloud.utils.IdentityProxy; import org.apache.cloudstack.api.BaseResponse; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; public class PxeServerResponse extends BaseResponse { @SerializedName(ApiConstants.ID) @Param(description="the ID of the PXE server") - private IdentityProxy id = new IdentityProxy("host"); - - public Long getId() { - return id.getValue(); + private String id; + + public String getId() { + return id; } - - public void setId(Long id) { - this.id.setValue(id); + + public void setId(String id) { + this.id = id; } } diff --git a/server/src/com/cloud/network/ExternalNetworkDeviceManagerImpl.java b/server/src/com/cloud/network/ExternalNetworkDeviceManagerImpl.java index 38fc6f51031..078b9e5d147 100755 --- a/server/src/com/cloud/network/ExternalNetworkDeviceManagerImpl.java +++ b/server/src/com/cloud/network/ExternalNetworkDeviceManagerImpl.java @@ -32,6 +32,8 @@ import org.apache.cloudstack.network.ExternalNetworkDeviceManager; import org.apache.log4j.Logger; import com.cloud.agent.AgentManager; +import com.cloud.api.ApiDBUtils; + import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.IdentityService; import org.apache.cloudstack.api.command.admin.network.DeleteNetworkDeviceCmd; @@ -40,6 +42,8 @@ import com.cloud.baremetal.PxeServerManager; import com.cloud.baremetal.PxeServerProfile; import com.cloud.baremetal.PxeServerManager.PxeServerType; import com.cloud.configuration.dao.ConfigurationDao; +import com.cloud.dc.DataCenter; +import com.cloud.dc.Pod; import com.cloud.dc.dao.DataCenterDao; import com.cloud.dc.dao.VlanDao; import com.cloud.host.Host; @@ -187,8 +191,16 @@ public class ExternalNetworkDeviceManagerImpl implements ExternalNetworkDeviceMa String pxeType = host.getDetail("type"); if (pxeType.equalsIgnoreCase(PxeServerType.PING.getName())) { PxePingResponse r = new PxePingResponse(); - r.setZoneId(host.getDataCenterId()); - r.setPodId(host.getPodId()); + DataCenter zone = ApiDBUtils.findZoneById(host.getDataCenterId()); + if (zone != null) { + r.setZoneId(zone.getUuid()); + } + if (host.getPodId() != null) { + Pod pod = ApiDBUtils.findPodById(host.getPodId()); + if (pod != null) { + r.setPodId(pod.getUuid()); + } + } r.setUrl(host.getPrivateIpAddress()); r.setType(pxeType); r.setStorageServerIp(host.getDetail("storageServer")); diff --git a/server/src/com/cloud/network/NetworkUsageManagerImpl.java b/server/src/com/cloud/network/NetworkUsageManagerImpl.java index 13e5e241855..3207c6f0e37 100755 --- a/server/src/com/cloud/network/NetworkUsageManagerImpl.java +++ b/server/src/com/cloud/network/NetworkUsageManagerImpl.java @@ -202,7 +202,7 @@ public class NetworkUsageManagerImpl implements NetworkUsageManager, ResourceSta public TrafficMonitorResponse getApiResponse(Host trafficMonitor) { Map tmDetails = _detailsDao.findDetails(trafficMonitor.getId()); TrafficMonitorResponse response = new TrafficMonitorResponse(); - response.setId(trafficMonitor.getId()); + response.setId(trafficMonitor.getUuid()); response.setIpAddress(trafficMonitor.getPrivateIpAddress()); response.setNumRetries(tmDetails.get("numRetries")); response.setTimeout(tmDetails.get("timeout")); @@ -220,7 +220,7 @@ public class NetworkUsageManagerImpl implements NetworkUsageManager, ResourceSta networkJoin.and("guestType", networkJoin.entity().getGuestType(), Op.EQ); AllocatedIpSearch.join("network", networkJoin, AllocatedIpSearch.entity().getSourceNetworkId(), networkJoin.entity().getId(), JoinBuilder.JoinType.INNER); AllocatedIpSearch.done(); - + _networkStatsInterval = NumbersUtil.parseInt(_configDao.getValue(Config.DirectNetworkStatsInterval.key()), 86400); _agentMgr.registerForHostEvents(new DirectNetworkStatsListener( _networkStatsInterval), true, false, false); _resourceMgr.registerResourceStateAdapter(this.getClass().getSimpleName(), this); @@ -316,8 +316,8 @@ public class NetworkUsageManagerImpl implements NetworkUsageManager, ResourceSta // This coule be made configurable rightNow.add(Calendar.HOUR_OF_DAY, -2); - Date now = rightNow.getTime(); - + Date now = rightNow.getTime(); + if(lastCollection.after(now)){ s_logger.debug("Current time is less than 2 hours after last collection time : " + lastCollection.toString() + ". Skipping direct network usage collection"); return false; @@ -369,7 +369,7 @@ public class NetworkUsageManagerImpl implements NetworkUsageManager, ResourceSta } List collectedStats = new ArrayList(); - + //Get usage for Ips which were assigned for the entire duration if(fullDurationIpUsage.size() > 0){ DirectNetworkUsageCommand cmd = new DirectNetworkUsageCommand(IpList, lastCollection, now); @@ -509,7 +509,7 @@ public class NetworkUsageManagerImpl implements NetworkUsageManager, ResourceSta protected DirectNetworkStatsListener() { } - + } @@ -525,7 +525,7 @@ public class NetworkUsageManagerImpl implements NetworkUsageManager, ResourceSta if (!(startup[0] instanceof StartupTrafficMonitorCommand)) { return null; } - + host.setType(Host.Type.TrafficMonitor); return host; } diff --git a/server/src/com/cloud/server/api/response/BaremetalTemplateResponse.java b/server/src/com/cloud/server/api/response/BaremetalTemplateResponse.java index 9718717c052..355f3646a65 100644 --- a/server/src/com/cloud/server/api/response/BaremetalTemplateResponse.java +++ b/server/src/com/cloud/server/api/response/BaremetalTemplateResponse.java @@ -16,20 +16,19 @@ // under the License. package com.cloud.server.api.response; -import com.cloud.utils.IdentityProxy; import org.apache.cloudstack.api.BaseResponse; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; public class BaremetalTemplateResponse extends BaseResponse { @SerializedName("id") @Param(description="the template ID") - private IdentityProxy id = new IdentityProxy("vm_template"); - - public Long getId() { - return id.getValue(); + private String id; + + public String getId() { + return id; } - - public void setId(Long id) { - this.id.setValue(id); + + public void setId(String id) { + this.id = id; } } diff --git a/server/src/com/cloud/server/api/response/NwDevicePxeServerResponse.java b/server/src/com/cloud/server/api/response/NwDevicePxeServerResponse.java index a59e6c2eddf..72063c39b7f 100644 --- a/server/src/com/cloud/server/api/response/NwDevicePxeServerResponse.java +++ b/server/src/com/cloud/server/api/response/NwDevicePxeServerResponse.java @@ -17,7 +17,6 @@ package com.cloud.server.api.response; import org.apache.cloudstack.api.ApiConstants; -import com.cloud.utils.IdentityProxy; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; import org.apache.cloudstack.api.response.NetworkDeviceResponse; @@ -25,38 +24,38 @@ import org.apache.cloudstack.api.response.NetworkDeviceResponse; public class NwDevicePxeServerResponse extends NetworkDeviceResponse { @SerializedName(ApiConstants.ZONE_ID) @Param(description="Zone where to add PXE server") - private IdentityProxy zoneId = new IdentityProxy("data_center"); - + private String zoneId; + @SerializedName(ApiConstants.POD_ID) @Param(description="Pod where to add PXE server") - private IdentityProxy podId = new IdentityProxy("host_pod_ref"); - + private String podId; + @SerializedName(ApiConstants.URL) @Param(description="Ip of PXE server") private String url; - + @SerializedName(ApiConstants.TYPE) @Param(description="Type of add PXE server") private String type; - - public void setZoneId(Long zoneId) { - this.zoneId.setValue(zoneId); + + public void setZoneId(String zoneId) { + this.zoneId = zoneId; } - public Long getZoneId() { - return zoneId.getValue(); + public String getZoneId() { + return zoneId; } - - public void setPodId(Long podId) { - this.podId.setValue(podId); + + public void setPodId(String podId) { + this.podId = podId; } - public Long getPodId() { - return podId.getValue(); + public String getPodId() { + return podId; } - + public void setUrl(String url) { this.url = url; } public String getUrl() { return url; } - + public void setType(String type) { this.type = type; } diff --git a/server/src/com/cloud/server/api/response/TrafficMonitorResponse.java b/server/src/com/cloud/server/api/response/TrafficMonitorResponse.java index a01e658656c..95ab4453a26 100644 --- a/server/src/com/cloud/server/api/response/TrafficMonitorResponse.java +++ b/server/src/com/cloud/server/api/response/TrafficMonitorResponse.java @@ -17,7 +17,6 @@ package com.cloud.server.api.response; import org.apache.cloudstack.api.ApiConstants; -import com.cloud.utils.IdentityProxy; import org.apache.cloudstack.api.BaseResponse; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; @@ -25,56 +24,56 @@ import com.google.gson.annotations.SerializedName; public class TrafficMonitorResponse extends BaseResponse { @SerializedName(ApiConstants.ID) @Param(description="the ID of the external firewall") - private IdentityProxy id = new IdentityProxy("host"); - + private String id; + @SerializedName(ApiConstants.ZONE_ID) @Param(description="the zone ID of the external firewall") - private IdentityProxy zoneId = new IdentityProxy("data_center"); - + private String zoneId; + @SerializedName(ApiConstants.IP_ADDRESS) @Param(description="the management IP address of the external firewall") private String ipAddress; - + @SerializedName(ApiConstants.NUM_RETRIES) @Param(description="the number of times to retry requests to the external firewall") private String numRetries; - + @SerializedName(ApiConstants.TIMEOUT) @Param(description="the timeout (in seconds) for requests to the external firewall") private String timeout; - - 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 Long getZoneId() { - return zoneId.getValue(); + + public String getZoneId() { + return zoneId; } - - public void setZoneId(Long zoneId) { - this.zoneId.setValue(zoneId); + + public void setZoneId(String zoneId) { + this.zoneId = zoneId; } - + public String getIpAddress() { return ipAddress; } - + public void setIpAddress(String ipAddress) { this.ipAddress = ipAddress; } - + public String getNumRetries() { return numRetries; } - + public void setNumRetries(String numRetries) { this.numRetries = numRetries; } - + public String getTimeout() { return timeout; } - + public void setTimeout(String timeout) { this.timeout = timeout; } diff --git a/server/src/com/cloud/server/api/response/UsageRecordResponse.java b/server/src/com/cloud/server/api/response/UsageRecordResponse.java index bcfce2de19b..29c81a79dc6 100644 --- a/server/src/com/cloud/server/api/response/UsageRecordResponse.java +++ b/server/src/com/cloud/server/api/response/UsageRecordResponse.java @@ -17,7 +17,6 @@ package com.cloud.server.api.response; import org.apache.cloudstack.api.ApiConstants; -import com.cloud.utils.IdentityProxy; import org.apache.cloudstack.api.BaseResponse; import org.apache.cloudstack.api.response.ControlledEntityResponse; import com.cloud.serializer.Param; @@ -29,7 +28,7 @@ public class UsageRecordResponse extends BaseResponse implements ControlledEntit private String accountName; @SerializedName(ApiConstants.ACCOUNT_ID) @Param(description="the user account Id") - private IdentityProxy accountId = new IdentityProxy("account"); + private String accountId; @SerializedName(ApiConstants.PROJECT_ID) @Param(description="the project id of the resource") private String projectId; @@ -44,7 +43,7 @@ public class UsageRecordResponse extends BaseResponse implements ControlledEntit private String domainName; @SerializedName(ApiConstants.ZONE_ID) @Param(description="the zone ID") - private IdentityProxy zoneId = new IdentityProxy("data_center"); + private String zoneId; @SerializedName(ApiConstants.DESCRIPTION) @Param(description="description of the usage record") private String description; @@ -59,7 +58,7 @@ public class UsageRecordResponse extends BaseResponse implements ControlledEntit private String rawUsage; @SerializedName(ApiConstants.VIRTUAL_MACHINE_ID) @Param(description="virtual machine ID") - private IdentityProxy virtualMachineId = new IdentityProxy("vm_instance"); + private String virtualMachineId; @SerializedName(ApiConstants.NAME) @Param(description="virtual machine name") private String vmName; @@ -68,7 +67,7 @@ public class UsageRecordResponse extends BaseResponse implements ControlledEntit private String offeringId; @SerializedName(ApiConstants.TEMPLATE_ID) @Param(description="template ID") - private IdentityProxy templateId = new IdentityProxy("vm_template"); + private String templateId; @SerializedName("usageid") @Param(description="id of the resource") private String usageId; @@ -102,8 +101,8 @@ public class UsageRecordResponse extends BaseResponse implements ControlledEntit this.accountName = accountName; } - public void setAccountId(Long accountId) { - this.accountId.setValue(accountId); + public void setAccountId(String accountId) { + this.accountId = accountId; } @Override @@ -111,8 +110,8 @@ public class UsageRecordResponse extends BaseResponse implements ControlledEntit this.domainId = domainId; } - public void setZoneId(Long zoneId) { - this.zoneId.setValue(zoneId); + public void setZoneId(String zoneId) { + this.zoneId = zoneId; } public void setDescription(String description) { @@ -131,8 +130,8 @@ public class UsageRecordResponse extends BaseResponse implements ControlledEntit this.rawUsage = rawUsage; } - public void setVirtualMachineId(Long virtualMachineId) { - this.virtualMachineId.setValue(virtualMachineId); + public void setVirtualMachineId(String virtualMachineId) { + this.virtualMachineId = virtualMachineId; } public void setVmName(String vmName) { @@ -143,8 +142,8 @@ public class UsageRecordResponse extends BaseResponse implements ControlledEntit this.offeringId = offeringId; } - public void setTemplateId(Long templateId) { - this.templateId.setValue(templateId); + public void setTemplateId(String templateId) { + this.templateId = templateId; } public void setUsageId(String usageId) { From eb2a7deddd29bad9ab1cb63aff319f25cbcaeac5 Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Wed, 19 Dec 2012 15:19:46 -0800 Subject: [PATCH 155/421] api: Annotate start,stop router cmds Signed-off-by: Rohit Yadav --- .../cloudstack/api/command/admin/router/StartRouterCmd.java | 6 ++---- .../cloudstack/api/command/admin/router/StopRouterCmd.java | 5 ++--- .../cloudstack/api/response/DomainRouterResponse.java | 3 +++ 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/api/src/org/apache/cloudstack/api/command/admin/router/StartRouterCmd.java b/api/src/org/apache/cloudstack/api/command/admin/router/StartRouterCmd.java index 37ee33141da..3d323c9d0b0 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/router/StartRouterCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/router/StartRouterCmd.java @@ -21,7 +21,6 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; @@ -35,7 +34,6 @@ import com.cloud.network.router.VirtualRouter; import com.cloud.user.Account; import com.cloud.user.UserContext; - @Implementation(responseObject=DomainRouterResponse.class, description="Starts a router.") public class StartRouterCmd extends BaseAsyncCmd { public static final Logger s_logger = Logger.getLogger(StartRouterCmd.class.getName()); @@ -46,8 +44,8 @@ public class StartRouterCmd extends BaseAsyncCmd { //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - @IdentityMapper(entityTableName="vm_instance") - @Parameter(name=ApiConstants.ID, type=CommandType.LONG, required=true, description="the ID of the router") + @Parameter(name=ApiConstants.ID, type=CommandType.UUID, entityType=DomainRouterResponse.class, + required=true, description="the ID of the router") private Long id; ///////////////////////////////////////////////////// diff --git a/api/src/org/apache/cloudstack/api/command/admin/router/StopRouterCmd.java b/api/src/org/apache/cloudstack/api/command/admin/router/StopRouterCmd.java index 823453a302c..fe282f74c0b 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/router/StopRouterCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/router/StopRouterCmd.java @@ -21,7 +21,6 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; @@ -43,8 +42,8 @@ public class StopRouterCmd extends BaseAsyncCmd { // ////////////// API parameters ///////////////////// // /////////////////////////////////////////////////// - @IdentityMapper(entityTableName="vm_instance") - @Parameter(name = ApiConstants.ID, type = CommandType.LONG, required = true, description = "the ID of the router") + @Parameter(name = ApiConstants.ID, type = CommandType.UUID, entityType = DomainRouterResponse.class, + required = true, description = "the ID of the router") private Long id; @Parameter(name = ApiConstants.FORCED, type = CommandType.BOOLEAN, required = false, description = "Force stop the VM. The caller knows the VM is stopped.") diff --git a/api/src/org/apache/cloudstack/api/response/DomainRouterResponse.java b/api/src/org/apache/cloudstack/api/response/DomainRouterResponse.java index b899a1d1257..7db014e109a 100644 --- a/api/src/org/apache/cloudstack/api/response/DomainRouterResponse.java +++ b/api/src/org/apache/cloudstack/api/response/DomainRouterResponse.java @@ -21,12 +21,15 @@ import java.util.HashSet; import java.util.Set; +import com.cloud.vm.VirtualMachine; import org.apache.cloudstack.api.ApiConstants; import com.cloud.serializer.Param; import com.cloud.vm.VirtualMachine.State; import com.google.gson.annotations.SerializedName; import org.apache.cloudstack.api.BaseResponse; +import org.apache.cloudstack.api.Entity; +@Entity(value=VirtualMachine.class) @SuppressWarnings("unused") public class DomainRouterResponse extends BaseResponse implements ControlledViewEntityResponse{ @SerializedName(ApiConstants.ID) @Param(description="the id of the router") From a88ce6bb7f495dddeb954d1fc7826176646b3590 Mon Sep 17 00:00:00 2001 From: Min Chen Date: Wed, 19 Dec 2012 23:49:44 -0800 Subject: [PATCH 156/421] Remove IdentityProxy from CloudException and ExceptionResponse. --- .../com/cloud/exception/CloudException.java | 17 +- .../command/admin/cluster/AddClusterCmd.java | 5 +- .../api/response/ExceptionResponse.java | 9 +- .../manager/ClusteredAgentManagerImpl.java | 125 ++-- server/src/com/cloud/api/ApiDispatcher.java | 86 ++- server/src/com/cloud/api/ApiServer.java | 25 +- .../com/cloud/network/NetworkManagerImpl.java | 582 +++++++++--------- .../network/as/AutoScaleManagerImpl.java | 5 +- .../exception/RuntimeCloudException.java | 32 +- 9 files changed, 435 insertions(+), 451 deletions(-) diff --git a/api/src/com/cloud/exception/CloudException.java b/api/src/com/cloud/exception/CloudException.java index 8cfae21e8d1..fd839565253 100644 --- a/api/src/com/cloud/exception/CloudException.java +++ b/api/src/com/cloud/exception/CloudException.java @@ -30,7 +30,7 @@ import com.cloud.utils.AnnotationHelper; public class CloudException extends Exception { // This holds a list of uuids and their names. Add uuid:fieldname pairs - protected ArrayList idList = new ArrayList(); + protected ArrayList idList = new ArrayList(); protected Integer csErrorCode; @@ -44,26 +44,19 @@ public class CloudException extends Exception { setCSErrorCode(CSExceptionErrorCode.getCSErrCode(this.getClass().getName())); } - public void addProxyObject(Object voObj, Long id, String idFieldName) { - // Get the VO object's table name. - String tablename = AnnotationHelper.getTableName(voObj); - if (tablename != null) { - addProxyObject(tablename, id, idFieldName); - } - return; - } + public CloudException() { super(); setCSErrorCode(CSExceptionErrorCode.getCSErrCode(this.getClass().getName())); } - public void addProxyObject(String tableName, Long id, String idFieldName) { - idList.add(new IdentityProxy(tableName, id, idFieldName)); + public void addProxyObject(String uuid) { + idList.add(uuid); return; } - public ArrayList getIdProxyList() { + public ArrayList getIdProxyList() { return idList; } diff --git a/api/src/org/apache/cloudstack/api/command/admin/cluster/AddClusterCmd.java b/api/src/org/apache/cloudstack/api/command/admin/cluster/AddClusterCmd.java index 77846ee3295..d9564de3775 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/cluster/AddClusterCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/cluster/AddClusterCmd.java @@ -36,7 +36,6 @@ import com.cloud.exception.DiscoveryException; import com.cloud.exception.ResourceInUseException; import com.cloud.org.Cluster; import com.cloud.user.Account; -import com.cloud.utils.IdentityProxy; @Implementation(description="Adds a new cluster", responseObject=ClusterResponse.class) public class AddClusterCmd extends BaseCmd { @@ -173,8 +172,8 @@ public class AddClusterCmd extends BaseCmd { } catch (ResourceInUseException ex) { s_logger.warn("Exception: ", ex); ServerApiException e = new ServerApiException(BaseCmd.INTERNAL_ERROR, ex.getMessage()); - for (IdentityProxy proxyObj : ex.getIdProxyList()) { - e.addProxyObject(proxyObj.getTableName(), proxyObj.getValue(), proxyObj.getidFieldName()); + for (String proxyObj : ex.getIdProxyList()) { + e.addProxyObject(proxyObj); } throw e; } diff --git a/api/src/org/apache/cloudstack/api/response/ExceptionResponse.java b/api/src/org/apache/cloudstack/api/response/ExceptionResponse.java index a4050a24af4..5f8e642140a 100644 --- a/api/src/org/apache/cloudstack/api/response/ExceptionResponse.java +++ b/api/src/org/apache/cloudstack/api/response/ExceptionResponse.java @@ -19,14 +19,13 @@ package org.apache.cloudstack.api.response; import java.util.ArrayList; import com.cloud.serializer.Param; -import com.cloud.utils.IdentityProxy; import com.google.gson.annotations.SerializedName; import org.apache.cloudstack.api.BaseResponse; public class ExceptionResponse extends BaseResponse { @SerializedName("uuidList") @Param(description="List of uuids associated with this error") - private ArrayList idList = new ArrayList(); + private ArrayList idList; @SerializedName("errorcode") @Param(description="numeric code associated with this error") private Integer errorCode; @@ -53,12 +52,12 @@ public class ExceptionResponse extends BaseResponse { this.errorText = errorText; } - public void addProxyObject(String tableName, Long id, String idFieldName) { - idList.add(new IdentityProxy(tableName, id, idFieldName)); + public void addProxyObject(String id) { + idList.add(id); return; } - public ArrayList getIdProxyList() { + public ArrayList getIdProxyList() { return idList; } diff --git a/server/src/com/cloud/agent/manager/ClusteredAgentManagerImpl.java b/server/src/com/cloud/agent/manager/ClusteredAgentManagerImpl.java index 1b6dc44a1a3..ca0bf5cb60d 100755 --- a/server/src/com/cloud/agent/manager/ClusteredAgentManagerImpl.java +++ b/server/src/com/cloud/agent/manager/ClusteredAgentManagerImpl.java @@ -53,6 +53,7 @@ import com.cloud.agent.api.TransferAgentCommand; import com.cloud.agent.transport.Request; import com.cloud.agent.transport.Request.Version; import com.cloud.agent.transport.Response; +import com.cloud.api.ApiDBUtils; import com.cloud.cluster.ClusterManager; import com.cloud.cluster.ClusterManagerListener; import com.cloud.cluster.ClusteredAgentRebalanceService; @@ -92,13 +93,13 @@ import com.cloud.utils.nio.Task; public class ClusteredAgentManagerImpl extends AgentManagerImpl implements ClusterManagerListener, ClusteredAgentRebalanceService { final static Logger s_logger = Logger.getLogger(ClusteredAgentManagerImpl.class); private static final ScheduledExecutorService s_transferExecutor = Executors.newScheduledThreadPool(1, new NamedThreadFactory("Cluster-AgentTransferExecutor")); - private final long rebalanceTimeOut = 300000; // 5 mins - after this time remove the agent from the transfer list + private final long rebalanceTimeOut = 300000; // 5 mins - after this time remove the agent from the transfer list public final static long STARTUP_DELAY = 5000; public final static long SCAN_INTERVAL = 90000; // 90 seconds, it takes 60 sec for xenserver to fail login public final static int ACQUIRE_GLOBAL_LOCK_TIMEOUT_FOR_COOPERATION = 5; // 5 seconds public long _loadSize = 100; - protected Set _agentToTransferIds = new HashSet(); + protected Set _agentToTransferIds = new HashSet(); @Inject protected ClusterManager _clusterMgr = null; @@ -111,10 +112,10 @@ public class ClusteredAgentManagerImpl extends AgentManagerImpl implements Clust protected ManagementServerHostDao _mshostDao; @Inject protected HostTransferMapDao _hostTransferDao; - + @Inject(adapter = AgentLoadBalancerPlanner.class) protected Adapters _lbPlanners; - + @Inject protected AgentManager _agentMgr; @@ -127,7 +128,7 @@ public class ClusteredAgentManagerImpl extends AgentManagerImpl implements Clust _peers = new HashMap(7); _sslEngines = new HashMap(7); _nodeId = _clusterMgr.getManagementNodeId(); - + s_logger.info("Configuring ClusterAgentManagerImpl. management server node id(msid): " + _nodeId); ConfigurationDao configDao = ComponentLocator.getCurrentLocator().getDao(ConfigurationDao.class); @@ -138,7 +139,7 @@ public class ClusteredAgentManagerImpl extends AgentManagerImpl implements Clust ClusteredAgentAttache.initialize(this); _clusterMgr.registerListener(this); - + return super.configure(name, xmlParams); } @@ -172,7 +173,7 @@ public class ClusteredAgentManagerImpl extends AgentManagerImpl implements Clust List hosts = _hostDao.findAndUpdateDirectAgentToLoad(cutSeconds, _loadSize, _nodeId); List appliances = _hostDao.findAndUpdateApplianceToLoad(cutSeconds, _nodeId); hosts.addAll(appliances); - + if (hosts != null && hosts.size() > 0) { s_logger.debug("Found " + hosts.size() + " unmanaged direct hosts, processing connect for them..."); for (HostVO host : hosts) { @@ -273,12 +274,12 @@ public class ClusteredAgentManagerImpl extends AgentManagerImpl implements Clust protected boolean handleDisconnectWithoutInvestigation(AgentAttache attache, Status.Event event, boolean transitState) { return handleDisconnect(attache, event, false, true); } - + @Override protected boolean handleDisconnectWithInvestigation(AgentAttache attache, Status.Event event) { return handleDisconnect(attache, event, true, true); } - + protected boolean handleDisconnect(AgentAttache agent, Status.Event event, boolean investigate, boolean broadcast) { boolean res; if (!investigate) { @@ -316,7 +317,7 @@ public class ClusteredAgentManagerImpl extends AgentManagerImpl implements Clust } } } - + //don't process disconnect if the disconnect came for the host via delayed cluster notification, //but the host has already reconnected to the current management server if (!attache.forForward()) { @@ -324,7 +325,7 @@ public class ClusteredAgentManagerImpl extends AgentManagerImpl implements Clust + hostId +" as the host is directly connected to the current management server " + _nodeId); return true; } - + return super.handleDisconnectWithoutInvestigation(attache, Event.AgentDisconnected, false); } @@ -346,7 +347,7 @@ public class ClusteredAgentManagerImpl extends AgentManagerImpl implements Clust s_logger.debug("cannot propagate agent reconnect because agent is not available", e); return false; } - + return super.reconnect(hostId); } @@ -408,7 +409,7 @@ public class ClusteredAgentManagerImpl extends AgentManagerImpl implements Clust public String findPeer(long hostId) { return _clusterMgr.getPeerName(hostId); } - + public SSLEngine getSSLEngine(String peerName) { return _sslEngines.get(peerName); } @@ -516,7 +517,7 @@ public class ClusteredAgentManagerImpl extends AgentManagerImpl implements Clust } if (agent == null) { AgentUnavailableException ex = new AgentUnavailableException("Host with specified id is not in the right state: " + host.getStatus(), hostId); - ex.addProxyObject(host, hostId, "hostId"); + ex.addProxyObject(ApiDBUtils.findHostById(hostId).getUuid()); throw ex; } @@ -535,11 +536,11 @@ public class ClusteredAgentManagerImpl extends AgentManagerImpl implements Clust } } _timer.cancel(); - + //cancel all transfer tasks s_transferExecutor.shutdownNow(); cleanupTransferMap(_nodeId); - + return super.stop(); } @@ -705,7 +706,7 @@ public class ClusteredAgentManagerImpl extends AgentManagerImpl implements Clust } return result; } - + @Override public void scheduleRebalanceAgents() { _timer.schedule(new AgentLoadBalancerTask(), 30000); @@ -743,7 +744,7 @@ public class ClusteredAgentManagerImpl extends AgentManagerImpl implements Clust } } } - + public void startRebalanceAgents() { s_logger.debug("Management server " + _nodeId + " is asking other peers to rebalance their agents"); List allMS = _mshostDao.listBy(ManagementServerHost.State.Up); @@ -762,7 +763,7 @@ public class ClusteredAgentManagerImpl extends AgentManagerImpl implements Clust } return; } - + if (avLoad == 0L) { if (s_logger.isDebugEnabled()) { s_logger.debug("As calculated average load is less than 1, rounding it to 1"); @@ -772,7 +773,7 @@ public class ClusteredAgentManagerImpl extends AgentManagerImpl implements Clust for (ManagementServerHostVO node : allMS) { if (node.getMsid() != _nodeId) { - + List hostsToRebalance = new ArrayList(); for (AgentLoadBalancerPlanner lbPlanner : _lbPlanners) { hostsToRebalance = lbPlanner.getHostsToRebalance(node.getMsid(), avLoad); @@ -783,20 +784,20 @@ public class ClusteredAgentManagerImpl extends AgentManagerImpl implements Clust } } - + if (hostsToRebalance != null && !hostsToRebalance.isEmpty()) { s_logger.debug("Found " + hostsToRebalance.size() + " hosts to rebalance from management server " + node.getMsid()); for (HostVO host : hostsToRebalance) { long hostId = host.getId(); s_logger.debug("Asking management server " + node.getMsid() + " to give away host id=" + hostId); boolean result = true; - + if (_hostTransferDao.findById(hostId) != null) { s_logger.warn("Somebody else is already rebalancing host id: " + hostId); continue; } - HostTransferMapVO transfer = null; + HostTransferMapVO transfer = null; try { transfer = _hostTransferDao.startAgentTransfering(hostId, node.getMsid(), _nodeId); Answer[] answer = sendRebalanceCommand(node.getMsid(), hostId, node.getMsid(), _nodeId, Event.RequestAgentRebalance); @@ -862,7 +863,7 @@ public class ClusteredAgentManagerImpl extends AgentManagerImpl implements Clust for (Iterator iterator = _agentToTransferIds.iterator(); iterator.hasNext();) { Long hostId = iterator.next(); AgentAttache attache = findAttache(hostId); - + // if the thread: // 1) timed out waiting for the host to reconnect // 2) recipient management server is not active any more @@ -878,22 +879,22 @@ public class ClusteredAgentManagerImpl extends AgentManagerImpl implements Clust _hostTransferDao.completeAgentTransfer(hostId); continue; } - + if (transferMap.getInitialOwner() != _nodeId || attache == null || attache.forForward()) { s_logger.debug("Management server " + _nodeId + " doesn't own host id=" + hostId + " any more, skipping rebalance for the host"); iterator.remove(); _hostTransferDao.completeAgentTransfer(hostId); continue; } - + ManagementServerHostVO ms = _mshostDao.findByMsid(transferMap.getFutureOwner()); if (ms != null && ms.getState() != ManagementServerHost.State.Up) { s_logger.debug("Can't transfer host " + hostId + " as it's future owner is not in UP state: " + ms + ", skipping rebalance for the host"); iterator.remove(); _hostTransferDao.completeAgentTransfer(hostId); continue; - } - + } + if (attache.getQueueSize() == 0 && attache.getNonRecurringListenersSize() == 0) { iterator.remove(); try { @@ -902,9 +903,9 @@ public class ClusteredAgentManagerImpl extends AgentManagerImpl implements Clust s_logger.warn("Failed to submit rebalance task for host id=" + hostId + "; postponing the execution"); continue; } - + } else { - s_logger.debug("Agent " + hostId + " can't be transfered yet as its request queue size is " + attache.getQueueSize() + " and listener queue size is " + attache.getNonRecurringListenersSize()); + s_logger.debug("Agent " + hostId + " can't be transfered yet as its request queue size is " + attache.getQueueSize() + " and listener queue size is " + attache.getNonRecurringListenersSize()); } } } else { @@ -920,16 +921,16 @@ public class ClusteredAgentManagerImpl extends AgentManagerImpl implements Clust } }; } - - + + private boolean setToWaitForRebalance(final long hostId, long currentOwnerId, long futureOwnerId) { s_logger.debug("Adding agent " + hostId + " to the list of agents to transfer"); synchronized (_agentToTransferIds) { return _agentToTransferIds.add(hostId); } } - - + + protected boolean rebalanceHost(final long hostId, long currentOwnerId, long futureOwnerId) throws AgentUnavailableException{ boolean result = true; @@ -949,7 +950,7 @@ public class ClusteredAgentManagerImpl extends AgentManagerImpl implements Clust s_logger.warn("Host " + hostId + " failed to connect to the management server " + futureOwnerId + " as a part of rebalance process", ex); result = false; } - + if (result) { s_logger.debug("Successfully transfered host id=" + hostId + " to management server " + futureOwnerId); finishRebalance(hostId, futureOwnerId, Event.RebalanceCompleted); @@ -957,7 +958,7 @@ public class ClusteredAgentManagerImpl extends AgentManagerImpl implements Clust s_logger.warn("Failed to transfer host id=" + hostId + " to management server " + futureOwnerId); finishRebalance(hostId, futureOwnerId, Event.RebalanceFailed); } - + } else if (futureOwnerId == _nodeId) { HostVO host = _hostDao.findById(hostId); try { @@ -976,15 +977,15 @@ public class ClusteredAgentManagerImpl extends AgentManagerImpl implements Clust } result = loadDirectlyConnectedHost(host, true); } else { - s_logger.warn("Failed to disconnect " + host.getId() + "(" + host.getName() + + s_logger.warn("Failed to disconnect " + host.getId() + "(" + host.getName() + " as a part of rebalance process without notification"); } - + } catch (Exception ex) { s_logger.warn("Failed to load directly connected host " + host.getId() + "(" + host.getName() + ") to the management server " + _nodeId + " as a part of rebalance process due to:", ex); result = false; } - + if (result) { s_logger.debug("Successfully loaded directly connected host " + host.getId() + "(" + host.getName() + ") to the management server " + _nodeId + " as a part of rebalance process"); } else { @@ -994,7 +995,7 @@ public class ClusteredAgentManagerImpl extends AgentManagerImpl implements Clust return result; } - + protected void finishRebalance(final long hostId, long futureOwnerId, Event event){ @@ -1002,21 +1003,21 @@ public class ClusteredAgentManagerImpl extends AgentManagerImpl implements Clust if (s_logger.isDebugEnabled()) { s_logger.debug("Finishing rebalancing for the agent " + hostId + " with event " + event); } - + AgentAttache attache = findAttache(hostId); if (attache == null || !(attache instanceof ClusteredAgentAttache)) { s_logger.debug("Unable to find forward attache for the host id=" + hostId + ", assuming that the agent disconnected already"); _hostTransferDao.completeAgentTransfer(hostId); return; - } - + } + ClusteredAgentAttache forwardAttache = (ClusteredAgentAttache)attache; - + if (success) { //1) Set transfer mode to false - so the agent can start processing requests normally forwardAttache.setTransferMode(false); - + //2) Get all transfer requests and route them to peer Request requestToTransfer = forwardAttache.getRequestToTransfer(); while (requestToTransfer != null) { @@ -1025,20 +1026,20 @@ public class ClusteredAgentManagerImpl extends AgentManagerImpl implements Clust if (!routeResult) { logD(requestToTransfer.getBytes(), "Failed to route request to peer"); } - + requestToTransfer = forwardAttache.getRequestToTransfer(); } - + s_logger.debug("Management server " + _nodeId + " completed agent " + hostId + " rebalance to " + futureOwnerId); - + } else { failRebalance(hostId); } - + s_logger.debug("Management server " + _nodeId + " completed agent " + hostId + " rebalance"); _hostTransferDao.completeAgentTransfer(hostId); } - + protected void failRebalance(final long hostId){ try { s_logger.debug("Management server " + _nodeId + " failed to rebalance agent " + hostId); @@ -1048,15 +1049,15 @@ public class ClusteredAgentManagerImpl extends AgentManagerImpl implements Clust s_logger.warn("Failed to reconnect host id=" + hostId + " as a part of failed rebalance task cleanup"); } } - + protected boolean startRebalance(final long hostId) { HostVO host = _hostDao.findById(hostId); - + if (host == null || host.getRemoved() != null) { s_logger.warn("Unable to find host record, fail start rebalancing process"); return false; - } - + } + synchronized (_agents) { ClusteredDirectAgentAttache attache = (ClusteredDirectAgentAttache)_agents.get(hostId); if (attache != null && attache.getQueueSize() == 0 && attache.getNonRecurringListenersSize() == 0) { @@ -1081,27 +1082,27 @@ public class ClusteredAgentManagerImpl extends AgentManagerImpl implements Clust _hostTransferDao.startAgentTransfer(hostId); return true; } - + protected void cleanupTransferMap(long msId) { List hostsJoingingCluster = _hostTransferDao.listHostsJoiningCluster(msId); - + for (HostTransferMapVO hostJoingingCluster : hostsJoingingCluster) { _hostTransferDao.remove(hostJoingingCluster.getId()); } - + List hostsLeavingCluster = _hostTransferDao.listHostsLeavingCluster(msId); for (HostTransferMapVO hostLeavingCluster : hostsLeavingCluster) { _hostTransferDao.remove(hostLeavingCluster.getId()); } } - - + + protected class RebalanceTask implements Runnable { Long hostId = null; Long currentOwnerId = null; Long futureOwnerId = null; - - + + public RebalanceTask(long hostId, long currentOwnerId, long futureOwnerId) { this.hostId = hostId; this.currentOwnerId = currentOwnerId; @@ -1122,5 +1123,5 @@ public class ClusteredAgentManagerImpl extends AgentManagerImpl implements Clust } } } - + } diff --git a/server/src/com/cloud/api/ApiDispatcher.java b/server/src/com/cloud/api/ApiDispatcher.java index 3dfcbce7662..99ba05da833 100755 --- a/server/src/com/cloud/api/ApiDispatcher.java +++ b/server/src/com/cloud/api/ApiDispatcher.java @@ -111,7 +111,7 @@ public class ApiDispatcher { setupParameters(cmd, params, entitiesToAccess); doAccessChecks(cmd, entitiesToAccess); - + try { UserContext ctx = UserContext.current(); ctx.setAccountId(cmd.getEntityOwnerId()); @@ -158,18 +158,18 @@ public class ApiDispatcher { List callerRoles = determineRole(caller); List ownerRoles = determineRole(owner); - + //check permission to call this command for the caller //this needs checking of static roles of the caller checkACLOnCommand(cmd); - + //check that caller can access the owner account. _accountMgr.checkAccess(caller, null, true, owner); - + checkACLOnEntities(caller, entitiesToAccess); } - - + + private void checkACLOnCommand(BaseAsyncCreateCmd cmd) { // TODO Auto-generated method stub //need to write an commandACLChecker adapter framework to check ACL on commands - default one will use the static roles by referring to commands.properties. @@ -180,7 +180,7 @@ public class ApiDispatcher { // TODO Auto-generated method stub List effectiveRoles = new ArrayList(); return effectiveRoles; - + } private void checkACLOnEntities(Account caller, List entitiesToAccess){ @@ -203,7 +203,7 @@ public class ApiDispatcher { for(ControlledEntity entity : entitiesToAccess) s_instance._accountMgr.checkAccess(caller, null, true, entity); } - + try { UserContext ctx = UserContext.current(); ctx.setAccountId(cmd.getEntityOwnerId()); @@ -221,9 +221,9 @@ public class ApiDispatcher { } else { queueSizeLimit = 1L; } - + if (queueSizeLimit != null) { - _asyncMgr.syncAsyncJobExecution(asyncCmd.getJob(), asyncCmd.getSyncObjType(), + _asyncMgr.syncAsyncJobExecution(asyncCmd.getJob(), asyncCmd.getSyncObjType(), asyncCmd.getSyncObjId().longValue(), queueSizeLimit); } else { s_logger.trace("The queue size is unlimited, skipping the synchronizing"); @@ -241,13 +241,12 @@ public class ApiDispatcher { InvalidParameterValueException ref = (InvalidParameterValueException) t; ServerApiException ex = new ServerApiException(BaseCmd.PARAM_ERROR, t.getMessage()); // copy over the IdentityProxy information as well and throw the serverapiexception. - ArrayList idList = ref.getIdProxyList(); + ArrayList idList = ref.getIdProxyList(); if (idList != null) { // Iterate through entire arraylist and copy over each proxy id. for (int i = 0 ; i < idList.size(); i++) { - IdentityProxy id = idList.get(i); - ex.addProxyObject(id.getTableName(), id.getValue(), id.getidFieldName()); - s_logger.info(t.getMessage() + " db_id: " + id.getValue()); + ex.addProxyObject(idList.get(i)); + s_logger.info(t.getMessage() + " uuid: " + idList.get(i)); } } else { s_logger.info(t.getMessage()); @@ -255,19 +254,18 @@ public class ApiDispatcher { // Also copy over the cserror code. ex.setCSErrorCode(ref.getCSErrorCode()); throw ex; - } else if(t instanceof IllegalArgumentException) { + } else if(t instanceof IllegalArgumentException) { throw new ServerApiException(BaseCmd.PARAM_ERROR, t.getMessage()); - } else if (t instanceof PermissionDeniedException) { + } else if (t instanceof PermissionDeniedException) { PermissionDeniedException ref = (PermissionDeniedException)t; ServerApiException ex = new ServerApiException(BaseCmd.ACCOUNT_ERROR, t.getMessage()); // copy over the IdentityProxy information as well and throw the serverapiexception. - ArrayList idList = ref.getIdProxyList(); + ArrayList idList = ref.getIdProxyList(); if (idList != null) { // Iterate through entire arraylist and copy over each proxy id. for (int i = 0 ; i < idList.size(); i++) { - IdentityProxy id = idList.get(i); - ex.addProxyObject(id.getTableName(), id.getValue(), id.getidFieldName()); - s_logger.info("PermissionDenied: " + t.getMessage() + "db_id: " + id.getValue()); + ex.addProxyObject(idList.get(i)); + s_logger.info("PermissionDenied: " + t.getMessage() + "uuid: " + idList.get(i)); } } else { s_logger.info("PermissionDenied: " + t.getMessage()); @@ -275,17 +273,16 @@ public class ApiDispatcher { // Also copy over the cserror code. ex.setCSErrorCode(ref.getCSErrorCode()); throw ex; - } else if (t instanceof AccountLimitException) { + } else if (t instanceof AccountLimitException) { AccountLimitException ref = (AccountLimitException)t; ServerApiException ex = new ServerApiException(BaseCmd.ACCOUNT_RESOURCE_LIMIT_ERROR, t.getMessage()); // copy over the IdentityProxy information as well and throw the serverapiexception. - ArrayList idList = ref.getIdProxyList(); + ArrayList idList = ref.getIdProxyList(); if (idList != null) { // Iterate through entire arraylist and copy over each proxy id. for (int i = 0 ; i < idList.size(); i++) { - IdentityProxy id = idList.get(i); - ex.addProxyObject(id.getTableName(), id.getValue(), id.getidFieldName()); - s_logger.info(t.getMessage() + "db_id: " + id.getValue()); + ex.addProxyObject(idList.get(i)); + s_logger.info(t.getMessage() + "uuid: " + idList.get(i)); } } else { s_logger.info(t.getMessage()); @@ -293,17 +290,16 @@ public class ApiDispatcher { // Also copy over the cserror code. ex.setCSErrorCode(ref.getCSErrorCode()); throw ex; - } else if (t instanceof InsufficientCapacityException) { + } else if (t instanceof InsufficientCapacityException) { InsufficientCapacityException ref = (InsufficientCapacityException)t; ServerApiException ex = new ServerApiException(BaseCmd.INSUFFICIENT_CAPACITY_ERROR, t.getMessage()); // copy over the IdentityProxy information as well and throw the serverapiexception. - ArrayList idList = ref.getIdProxyList(); + ArrayList idList = ref.getIdProxyList(); if (idList != null) { // Iterate through entire arraylist and copy over each proxy id. for (int i = 0 ; i < idList.size(); i++) { - IdentityProxy id = idList.get(i); - ex.addProxyObject(id.getTableName(), id.getValue(), id.getidFieldName()); - s_logger.info(t.getMessage() + "db_id: " + id.getValue()); + ex.addProxyObject(idList.get(i)); + s_logger.info(t.getMessage() + "uuid: " + idList.get(i)); } } else { s_logger.info(t.getMessage()); @@ -315,13 +311,13 @@ public class ApiDispatcher { ResourceAllocationException ref = (ResourceAllocationException)t; ServerApiException ex = new ServerApiException(BaseCmd.RESOURCE_ALLOCATION_ERROR, t.getMessage()); // copy over the IdentityProxy information as well and throw the serverapiexception. - ArrayList idList = ref.getIdProxyList(); + ArrayList idList = ref.getIdProxyList(); if (idList != null) { // Iterate through entire arraylist and copy over each proxy id. for (int i = 0 ; i < idList.size(); i++) { - IdentityProxy id = idList.get(i); - ex.addProxyObject(id.getTableName(), id.getValue(), id.getidFieldName()); - s_logger.warn("Exception: " + t.getMessage() + "db_id: " + id.getValue()); + String id = idList.get(i); + ex.addProxyObject(id); + s_logger.warn("Exception: " + t.getMessage() + "uuid: " + id); } } else { s_logger.warn("Exception: ", t); @@ -333,13 +329,13 @@ public class ApiDispatcher { ResourceUnavailableException ref = (ResourceUnavailableException)t; ServerApiException ex = new ServerApiException(BaseCmd.RESOURCE_UNAVAILABLE_ERROR, t.getMessage()); // copy over the IdentityProxy information as well and throw the serverapiexception. - ArrayList idList = ref.getIdProxyList(); + ArrayList idList = ref.getIdProxyList(); if (idList != null) { // Iterate through entire arraylist and copy over each proxy id. for (int i = 0 ; i < idList.size(); i++) { - IdentityProxy id = idList.get(i); - ex.addProxyObject(id.getTableName(), id.getValue(), id.getidFieldName()); - s_logger.warn("Exception: " + t.getMessage() + "db_id: " + id.getValue()); + String id = idList.get(i); + ex.addProxyObject(id); + s_logger.warn("Exception: " + t.getMessage() + "uuid: " + id); } } else { s_logger.warn("Exception: ", t); @@ -347,7 +343,7 @@ public class ApiDispatcher { // Also copy over the cserror code. ex.setCSErrorCode(ref.getCSErrorCode()); throw ex; - } else if (t instanceof AsyncCommandQueued) { + } else if (t instanceof AsyncCommandQueued) { throw (AsyncCommandQueued) t; } else if (t instanceof ServerApiException) { s_logger.warn(t.getClass() + " : " + ((ServerApiException) t).getDescription()); @@ -359,7 +355,7 @@ public class ApiDispatcher { ex = new ServerApiException(BaseCmd.INTERNAL_ERROR, t.getMessage()); } else { ex = new ServerApiException(BaseCmd.INTERNAL_ERROR, BaseCmd.USER_ERROR_MESSAGE); - } + } ex.setCSErrorCode(CSExceptionErrorCode.getCSErrCode(ex.getClass().getName())); throw ex; } @@ -378,7 +374,7 @@ public class ApiDispatcher { } if ((unpackedParams.get(ApiConstants.PAGE) == null) && (pageSize != null && pageSize != BaseListCmd.PAGESIZE_UNLIMITED)) { - ServerApiException ex = new ServerApiException(BaseCmd.PARAM_ERROR, "\"page\" parameter is required when \"pagesize\" is specified"); + ServerApiException ex = new ServerApiException(BaseCmd.PARAM_ERROR, "\"page\" parameter is required when \"pagesize\" is specified"); ex.setCSErrorCode(CSExceptionErrorCode.getCSErrCode(ex.getClass().getName())); throw ex; } else if (pageSize == null && (unpackedParams.get(ApiConstants.PAGE) != null)) { @@ -524,9 +520,9 @@ public class ApiDispatcher { } } - + } - + } catch (IllegalArgumentException e) { s_logger.error("Error initializing command " + cmd.getCommandName() + ", field " + field.getName() + " is not accessible."); throw new CloudRuntimeException("Internal error initializing parameters for command " + cmd.getCommandName() + " [field " + field.getName() + " is not accessible]"); @@ -534,9 +530,9 @@ public class ApiDispatcher { s_logger.error("Error initializing command " + cmd.getCommandName() + ", field " + field.getName() + " is not accessible."); throw new CloudRuntimeException("Internal error initializing parameters for command " + cmd.getCommandName() + " [field " + field.getName() + " is not accessible]"); } - + } - + //check access on the entities. } diff --git a/server/src/com/cloud/api/ApiServer.java b/server/src/com/cloud/api/ApiServer.java index b440f17b9cc..e685aef4b3e 100755 --- a/server/src/com/cloud/api/ApiServer.java +++ b/server/src/com/cloud/api/ApiServer.java @@ -336,12 +336,11 @@ public class ApiServer implements HttpRequestHandler { InvalidParameterValueException ref = (InvalidParameterValueException)ex; ServerApiException e = new ServerApiException(BaseCmd.PARAM_ERROR, ex.getMessage()); // copy over the IdentityProxy information as well and throw the serverapiexception. - ArrayList idList = ref.getIdProxyList(); + ArrayList idList = ref.getIdProxyList(); if (idList != null) { // Iterate through entire arraylist and copy over each proxy id. for (int i = 0 ; i < idList.size(); i++) { - IdentityProxy obj = idList.get(i); - e.addProxyObject(obj.getTableName(), obj.getValue(), obj.getidFieldName()); + e.addProxyObject(idList.get(i)); } } // Also copy over the cserror code and the function/layer in which it was thrown. @@ -351,12 +350,11 @@ public class ApiServer implements HttpRequestHandler { PermissionDeniedException ref = (PermissionDeniedException)ex; ServerApiException e = new ServerApiException(BaseCmd.ACCOUNT_ERROR, ex.getMessage()); // copy over the IdentityProxy information as well and throw the serverapiexception. - ArrayList idList = ref.getIdProxyList(); + ArrayList idList = ref.getIdProxyList(); if (idList != null) { // Iterate through entire arraylist and copy over each proxy id. for (int i = 0 ; i < idList.size(); i++) { - IdentityProxy obj = idList.get(i); - e.addProxyObject(obj.getTableName(), obj.getValue(), obj.getidFieldName()); + e.addProxyObject(idList.get(i)); } } e.setCSErrorCode(ref.getCSErrorCode()); @@ -963,33 +961,30 @@ public class ApiServer implements HttpRequestHandler { // Cast the exception appropriately and retrieve the IdentityProxy if (ex instanceof ServerApiException) { ServerApiException ref = (ServerApiException) ex; - ArrayList idList = ref.getIdProxyList(); + ArrayList idList = ref.getIdProxyList(); if (idList != null) { for (int i=0; i < idList.size(); i++) { - IdentityProxy id = idList.get(i); - apiResponse.addProxyObject(id.getTableName(), id.getValue(), id.getidFieldName()); + apiResponse.addProxyObject(idList.get(i)); } } // Also copy over the cserror code and the function/layer in which it was thrown. apiResponse.setCSErrorCode(ref.getCSErrorCode()); } else if (ex instanceof PermissionDeniedException) { PermissionDeniedException ref = (PermissionDeniedException) ex; - ArrayList idList = ref.getIdProxyList(); + ArrayList idList = ref.getIdProxyList(); if (idList != null) { for (int i=0; i < idList.size(); i++) { - IdentityProxy id = idList.get(i); - apiResponse.addProxyObject(id.getTableName(), id.getValue(), id.getidFieldName()); + apiResponse.addProxyObject(idList.get(i)); } } // Also copy over the cserror code and the function/layer in which it was thrown. apiResponse.setCSErrorCode(ref.getCSErrorCode()); } else if (ex instanceof InvalidParameterValueException) { InvalidParameterValueException ref = (InvalidParameterValueException) ex; - ArrayList idList = ref.getIdProxyList(); + ArrayList idList = ref.getIdProxyList(); if (idList != null) { for (int i=0; i < idList.size(); i++) { - IdentityProxy id = idList.get(i); - apiResponse.addProxyObject(id.getTableName(), id.getValue(), id.getidFieldName()); + apiResponse.addProxyObject(idList.get(i)); } } // Also copy over the cserror code and the function/layer in which it was thrown. diff --git a/server/src/com/cloud/network/NetworkManagerImpl.java b/server/src/com/cloud/network/NetworkManagerImpl.java index 651f33b3948..347cb2ffcc5 100755 --- a/server/src/com/cloud/network/NetworkManagerImpl.java +++ b/server/src/com/cloud/network/NetworkManagerImpl.java @@ -5,7 +5,7 @@ // 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, @@ -59,6 +59,8 @@ import com.cloud.agent.api.StartupCommand; import com.cloud.agent.api.StartupRoutingCommand; import com.cloud.agent.api.to.NicTO; import com.cloud.alert.AlertManager; +import com.cloud.api.ApiDBUtils; + import org.apache.cloudstack.api.command.user.network.ListNetworksCmd; import com.cloud.configuration.Config; import com.cloud.configuration.ConfigurationManager; @@ -377,7 +379,7 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag } @DB - public PublicIp fetchNewPublicIp(long dcId, Long podId, Long vlanDbId, Account owner, VlanType vlanUse, + public PublicIp fetchNewPublicIp(long dcId, Long podId, Long vlanDbId, Account owner, VlanType vlanUse, Long guestNetworkId, boolean sourceNat, boolean assign, String requestedIp, boolean isSystem, Long vpcId) throws InsufficientAddressCapacityException { StringBuilder errorMessage = new StringBuilder("Unable to get ip adress in "); @@ -423,13 +425,13 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag InsufficientAddressCapacityException ex = new InsufficientAddressCapacityException ("Insufficient address capacity", Pod.class, podId); // for now, we hardcode the table names, but we should ideally do a lookup for the tablename from the VO object. - ex.addProxyObject("Pod", podId, "podId"); + ex.addProxyObject(ApiDBUtils.findPodById(podId).getUuid()); throw ex; } s_logger.warn(errorMessage.toString()); InsufficientAddressCapacityException ex = new InsufficientAddressCapacityException ("Insufficient address capacity", DataCenter.class, dcId); - ex.addProxyObject("data_center", dcId, "dcId"); + ex.addProxyObject(ApiDBUtils.findZoneById(dcId).getUuid()); throw ex; } @@ -487,9 +489,9 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag VlanVO vlan = _vlanDao.findById(addr.getVlanId()); String guestType = vlan.getVlanType().toString(); - - UsageEventVO usageEvent = new UsageEventVO(EventTypes.EVENT_NET_IP_ASSIGN, owner.getId(), - addr.getDataCenterId(), addr.getId(), addr.getAddress().toString(), addr.isSourceNat(), guestType, + + UsageEventVO usageEvent = new UsageEventVO(EventTypes.EVENT_NET_IP_ASSIGN, owner.getId(), + addr.getDataCenterId(), addr.getId(), addr.getAddress().toString(), addr.isSourceNat(), guestType, addr.getSystem()); _usageEventDao.persist(usageEvent); // don't increment resource count for direct ip addresses @@ -501,9 +503,9 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag txn.commit(); } - + @Override - public PublicIp assignSourceNatIpAddressToGuestNetwork(Account owner, Network guestNetwork) + public PublicIp assignSourceNatIpAddressToGuestNetwork(Account owner, Network guestNetwork) throws InsufficientAddressCapacityException, ConcurrentOperationException { assert (guestNetwork.getTrafficType() != null) : "You're asking for a source nat but your network " + "can't participate in source nat. What do you have to say for yourself?"; @@ -513,28 +515,28 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag PublicIp ipToReturn = null; if (sourceNatIp != null) { - ipToReturn = new PublicIp(sourceNatIp, _vlanDao.findById(sourceNatIp.getVlanId()), + ipToReturn = new PublicIp(sourceNatIp, _vlanDao.findById(sourceNatIp.getVlanId()), NetUtils.createSequenceBasedMacAddress(sourceNatIp.getMacAddress())); } else { ipToReturn = assignDedicateIpAddress(owner, guestNetwork.getId(), null, dcId, true); } - + return ipToReturn; } - + @Override public PublicIp assignVpnGatewayIpAddress(long dcId, Account owner, long vpcId) throws InsufficientAddressCapacityException, ConcurrentOperationException { return assignDedicateIpAddress(owner, null, vpcId, dcId, false); } - + @DB @Override - public PublicIp assignDedicateIpAddress(Account owner, Long guestNtwkId, Long vpcId, long dcId, boolean isSourceNat) + public PublicIp assignDedicateIpAddress(Account owner, Long guestNtwkId, Long vpcId, long dcId, boolean isSourceNat) throws ConcurrentOperationException, InsufficientAddressCapacityException { long ownerId = owner.getId(); - + // Check that the maximum number of public IPs for the given accountId will not be exceeded try { _resourceLimitMgr.checkResourceLimit(owner, ResourceType.public_ip); @@ -558,7 +560,7 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag if (s_logger.isDebugEnabled()) { s_logger.debug("lock account " + ownerId + " is acquired"); } - + // If account has Account specific ip ranges, try to allocate ip from there Long vlanId = null; List maps = _accountVlanMapDao.listAccountVlanMapsByAccount(ownerId); @@ -567,7 +569,7 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag } - ip = fetchNewPublicIp(dcId, null, vlanId, owner, VlanType.VirtualNetwork, guestNtwkId, + ip = fetchNewPublicIp(dcId, null, vlanId, owner, VlanType.VirtualNetwork, guestNtwkId, isSourceNat, false, null, false, vpcId); IPAddressVO publicIp = ip.ip(); @@ -593,7 +595,7 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag /** * Returns the target account for an api command - * + * * @param accountName * - non-null if the account name was passed in in the command * @param domainId @@ -637,7 +639,7 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag List publicIps = new ArrayList(); if (userIps != null && !userIps.isEmpty()) { for (IPAddressVO userIp : userIps) { - PublicIp publicIp = new PublicIp(userIp, _vlanDao.findById(userIp.getVlanId()), + PublicIp publicIp = new PublicIp(userIp, _vlanDao.findById(userIp.getVlanId()), NetUtils.createSequenceBasedMacAddress(userIp.getMacAddress())); publicIps.add(publicIp); } @@ -654,7 +656,7 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag // system if (cleanupIpResources(addr.getId(), Account.ACCOUNT_ID_SYSTEM, _accountMgr.getSystemAccount())) { s_logger.debug("Unassiging ip address " + addr); - _ipAddressDao.unassignIpAddress(addr.getId()); + _ipAddressDao.unassignIpAddress(addr.getId()); } else { success = false; s_logger.warn("Failed to release resources for ip address id=" + addr.getId()); @@ -737,7 +739,7 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag if (purposes == null || purposes.isEmpty()) { // since no active rules are there check if any rules are applied on the public IP but are in // revoking state - + purposes = getPublicIpPurposeInRules(ip, true, includingFirewall); if (ip.isOneToOneNat()) { if (purposes == null) { @@ -851,11 +853,11 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag if (services == null || services.isEmpty()) { return true; } - + if (networkId == null) { networkId = publicIp.getAssociatedWithNetworkId(); } - + // We only support one provider for one service now Map> serviceToProviders = getServiceProvidersMap(networkId); Set oldProviders = serviceToProviders.get(services.toArray()[0]); @@ -924,7 +926,7 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag return providerToIpList; } - protected boolean applyIpAssociations(Network network, boolean rulesRevoked, boolean continueOnError, + protected boolean applyIpAssociations(Network network, boolean rulesRevoked, boolean continueOnError, List publicIps) throws ResourceUnavailableException { boolean success = true; @@ -1004,7 +1006,7 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag return _networksDao.listByZoneAndGuestType(owner.getId(), zoneId, Network.GuestType.Isolated, false); } - + @Override public List getIsolatedNetworksWithSourceNATOwnedByAccountInZone(long zoneId, Account owner) { @@ -1014,23 +1016,23 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag @Override @ActionEvent(eventType = EventTypes.EVENT_NET_IP_ASSIGN, eventDescription = "allocating Ip", create = true) - public IpAddress allocateIP(Account ipOwner, boolean isSystem, long zoneId) + public IpAddress allocateIP(Account ipOwner, boolean isSystem, long zoneId) throws ResourceAllocationException, InsufficientAddressCapacityException, ConcurrentOperationException { Account caller = UserContext.current().getCaller(); long callerUserId = UserContext.current().getCallerUserId(); // check permissions _accountMgr.checkAccess(caller, null, false, ipOwner); - + DataCenter zone = _configMgr.getZone(zoneId); - + return allocateIp(ipOwner, isSystem, caller, callerUserId, zone); } @DB - public IpAddress allocateIp(Account ipOwner, boolean isSystem, Account caller, long callerUserId, DataCenter zone) + public IpAddress allocateIp(Account ipOwner, boolean isSystem, Account caller, long callerUserId, DataCenter zone) throws ConcurrentOperationException, ResourceAllocationException, InsufficientAddressCapacityException { - + VlanType vlanType = VlanType.VirtualNetwork; boolean assign = false; @@ -1066,14 +1068,14 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag txn.start(); - ip = fetchNewPublicIp(zone.getId(), null, null, ipOwner, vlanType, null, + ip = fetchNewPublicIp(zone.getId(), null, null, ipOwner, vlanType, null, false, assign, null, isSystem, null); if (ip == null) { InsufficientAddressCapacityException ex = new InsufficientAddressCapacityException ("Unable to find available public IP addresses", DataCenter.class, zone.getId()); - ex.addProxyObject("data_center", zone.getId(), "zoneId"); + ex.addProxyObject(ApiDBUtils.findZoneById(zone.getId()).getUuid()); throw ex; } UserContext.current().setEventDetails("Ip Id: " + ip.getId()); @@ -1094,7 +1096,7 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag return ip; } - + protected IPAddressVO getExistingSourceNatInNetwork(long ownerId, Long networkId) { List addrs = listPublicIpsAssignedToGuestNtwk(ownerId, networkId, true); @@ -1113,15 +1115,15 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag assert (sourceNatIp != null) : "How do we get a bunch of ip addresses but none of them are source nat? " + "account=" + ownerId + "; networkId=" + networkId; - } - + } + return sourceNatIp; } @DB @Override - public IPAddressVO associateIPToGuestNetwork(long ipId, long networkId, boolean releaseOnFailure) - throws ResourceAllocationException, ResourceUnavailableException, + public IPAddressVO associateIPToGuestNetwork(long ipId, long networkId, boolean releaseOnFailure) + throws ResourceAllocationException, ResourceUnavailableException, InsufficientAddressCapacityException, ConcurrentOperationException { Account caller = UserContext.current().getCaller(); Account owner = null; @@ -1134,12 +1136,12 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag s_logger.debug("Unable to find ip address by id: " + ipId); return null; } - + if (ipToAssoc.getAssociatedWithNetworkId() != null) { s_logger.debug("IP " + ipToAssoc + " is already assocaited with network id" + networkId); return ipToAssoc; } - + Network network = _networksDao.findById(networkId); if (network != null) { _accountMgr.checkAccess(owner, AccessType.UseNetwork, false, network); @@ -1147,12 +1149,12 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag s_logger.debug("Unable to find ip address by id: " + ipId); return null; } - + DataCenter zone = _configMgr.getZone(network.getDataCenterId()); // allow associating IP addresses to guest network only if (network.getTrafficType() != TrafficType.Guest) { - throw new InvalidParameterValueException("Ip address can be associated to the network with trafficType " + + throw new InvalidParameterValueException("Ip address can be associated to the network with trafficType " + TrafficType.Guest); } @@ -1161,16 +1163,16 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag if (zone.getNetworkType() != NetworkType.Basic && network.getAccountId() != owner.getId()) { throw new InvalidParameterValueException("The owner of the network is not the same as owner of the IP"); } - + // In Advance zone only allow to do IP assoc for Isolated networks with source nat service enabled - if (zone.getNetworkType() == NetworkType.Advanced && - !(network.getGuestType() == GuestType.Isolated && areServicesSupportedInNetwork(network.getId(), + if (zone.getNetworkType() == NetworkType.Advanced && + !(network.getGuestType() == GuestType.Isolated && areServicesSupportedInNetwork(network.getId(), Service.SourceNat))) { - throw new InvalidParameterValueException("In zone of type " + NetworkType.Advanced + + throw new InvalidParameterValueException("In zone of type " + NetworkType.Advanced + " ip address can be associated only to the network of guest type " + GuestType.Isolated + " with the " + Service.SourceNat.getName() + " enabled"); } - + NetworkOffering offering = _networkOfferingDao.findById(network.getNetworkOfferingId()); boolean sharedSourceNat = offering.getSharedSourceNat(); boolean isSourceNat = false; @@ -1181,15 +1183,15 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag } } } - + s_logger.debug("Associating ip " + ipToAssoc + " to network " + network); - + IPAddressVO ip = _ipAddressDao.findById(ipId); //update ip address with networkId ip.setAssociatedWithNetworkId(networkId); ip.setSourceNat(isSourceNat); _ipAddressDao.update(ipId, ip); - + boolean success = false; try { success = applyIpAssociations(network, false); @@ -1217,7 +1219,7 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag } } } - + @Override @DB @@ -1317,7 +1319,7 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag sgProviders.add(Provider.SecurityGroupProvider); defaultSharedSGEnabledNetworkOfferingProviders.put(Service.SecurityGroup, sgProviders); - Map> defaultIsolatedSourceNatEnabledNetworkOfferingProviders = + Map> defaultIsolatedSourceNatEnabledNetworkOfferingProviders = new HashMap>(); defaultProviders.clear(); defaultProviders.add(Network.Provider.VirtualRouter); @@ -1331,9 +1333,9 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag defaultIsolatedSourceNatEnabledNetworkOfferingProviders.put(Service.StaticNat, defaultProviders); defaultIsolatedSourceNatEnabledNetworkOfferingProviders.put(Service.PortForwarding, defaultProviders); defaultIsolatedSourceNatEnabledNetworkOfferingProviders.put(Service.Vpn, defaultProviders); - - - Map> defaultVPCOffProviders = + + + Map> defaultVPCOffProviders = new HashMap>(); defaultProviders.clear(); defaultProviders.add(Network.Provider.VirtualRouter); @@ -1389,7 +1391,7 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag offering.setState(NetworkOffering.State.Enabled); _networkOfferingDao.update(offering.getId(), offering); } - + if (_networkOfferingDao.findByUniqueName(NetworkOffering.DefaultIsolatedNetworkOfferingForVpcNetworks) == null) { offering = _configMgr.createNetworkOffering(NetworkOffering.DefaultIsolatedNetworkOfferingForVpcNetworks, "Offering for Isolated VPC networks with Source Nat service enabled", TrafficType.Guest, @@ -1398,7 +1400,7 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag offering.setState(NetworkOffering.State.Enabled); _networkOfferingDao.update(offering.getId(), offering); } - + if (_networkOfferingDao.findByUniqueName(NetworkOffering.DefaultIsolatedNetworkOfferingForVpcNetworksNoLB) == null) { //remove LB service defaultVPCOffProviders.remove(Service.Lb); @@ -1411,14 +1413,14 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag } if (_networkOfferingDao.findByUniqueName(NetworkOffering.DefaultIsolatedNetworkOffering) == null) { - offering = _configMgr.createNetworkOffering(NetworkOffering.DefaultIsolatedNetworkOffering, + offering = _configMgr.createNetworkOffering(NetworkOffering.DefaultIsolatedNetworkOffering, "Offering for Isolated networks with no Source Nat service", TrafficType.Guest, null, true, Availability.Optional, null, defaultIsolatedNetworkOfferingProviders, true, Network.GuestType.Isolated, false, null, true, null, true); offering.setState(NetworkOffering.State.Enabled); _networkOfferingDao.update(offering.getId(), offering); } - + Map> netscalerServiceProviders = new HashMap>(); Set vrProvider = new HashSet(); vrProvider.add(Provider.VirtualRouter); @@ -1432,7 +1434,7 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag netscalerServiceProviders.put(Service.SecurityGroup, sgProvider); netscalerServiceProviders.put(Service.StaticNat, nsProvider); netscalerServiceProviders.put(Service.Lb, nsProvider); - + Map> serviceCapabilityMap = new HashMap>(); Map elb = new HashMap(); elb.put(Capability.ElasticLb, "true"); @@ -1440,7 +1442,7 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag eip.put(Capability.ElasticIp, "true"); serviceCapabilityMap.put(Service.Lb, elb); serviceCapabilityMap.put(Service.StaticNat, eip); - + if (_networkOfferingDao.findByUniqueName(NetworkOffering.DefaultSharedEIPandELBNetworkOffering) == null) { offering = _configMgr.createNetworkOffering(NetworkOffering.DefaultSharedEIPandELBNetworkOffering, "Offering for Shared networks with Elastic IP and Elastic LB capabilities", TrafficType.Guest, null, true, Availability.Optional, null, netscalerServiceProviders, true, Network.GuestType.Shared, false, null, true, serviceCapabilityMap, true); @@ -1559,7 +1561,7 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag public List listPublicIpsAssignedToGuestNtwk(long accountId, long associatedNetworkId, Boolean sourceNat) { SearchCriteria sc = IpAddressSearch.create(); sc.setParameters("accountId", accountId); - sc.setParameters("associatedWithNetworkId", associatedNetworkId); + sc.setParameters("associatedWithNetworkId", associatedNetworkId); if (sourceNat != null) { sc.addAnd("sourceNat", SearchCriteria.Op.EQ, sourceNat); @@ -1568,7 +1570,7 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag return _ipAddressDao.search(sc, null); } - + @Override public List listPublicIpsAssignedToAccount(long accountId, long dcId, Boolean sourceNat) { SearchCriteria sc = IpAddressSearch.create(); @@ -1585,7 +1587,7 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag @Override - public List setupNetwork(Account owner, NetworkOfferingVO offering, DeploymentPlan plan, String name, + public List setupNetwork(Account owner, NetworkOfferingVO offering, DeploymentPlan plan, String name, String displayText, boolean isDefault) throws ConcurrentOperationException { return setupNetwork(owner, offering, null, plan, name, displayText, false, null, null, null, null); @@ -1593,10 +1595,10 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag @Override @DB - public List setupNetwork(Account owner, NetworkOfferingVO offering, Network predefined, DeploymentPlan + public List setupNetwork(Account owner, NetworkOfferingVO offering, Network predefined, DeploymentPlan plan, String name, String displayText, boolean errorIfAlreadySetup, Long domainId, ACLType aclType, Boolean subdomainAccess, Long vpcId) throws ConcurrentOperationException { - + Account locked = _accountDao.acquireInLockTable(owner.getId()); if (locked == null) { throw new ConcurrentOperationException("Unable to acquire lock on " + owner); @@ -1604,7 +1606,7 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag try { if (predefined == null - || (offering.getTrafficType() != TrafficType.Guest && predefined.getCidr() == null && predefined.getBroadcastUri() == null && + || (offering.getTrafficType() != TrafficType.Guest && predefined.getCidr() == null && predefined.getBroadcastUri() == null && !(predefined.getBroadcastDomainType() == BroadcastDomainType.Vlan || predefined.getBroadcastDomainType() == BroadcastDomainType.Lswitch))) { List configs = _networksDao.listBy(owner.getId(), offering.getId(), plan.getDataCenterId()); if (configs.size() > 0) { @@ -1615,7 +1617,7 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag if (errorIfAlreadySetup) { InvalidParameterValueException ex = new InvalidParameterValueException("Found existing network configuration (with specified id) for offering (with specified id)"); ex.addProxyObject(offering, offering.getId(), "offeringId"); - ex.addProxyObject(configs.get(0), configs.get(0).getId(), "networkConfigId"); + ex.addProxyObject(configs.get(0), configs.get(0).getId(), "networkConfigId"); throw ex; } else { return configs; @@ -1632,7 +1634,7 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag if (errorIfAlreadySetup) { InvalidParameterValueException ex = new InvalidParameterValueException("Found existing network configuration (with specified id) for offering (with specified id)"); ex.addProxyObject(offering, offering.getId(), "offeringId"); - ex.addProxyObject(configs.get(0), configs.get(0).getId(), "networkConfigId"); + ex.addProxyObject(configs.get(0), configs.get(0).getId(), "networkConfigId"); throw ex; } else { return configs; @@ -1668,9 +1670,9 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag txn.start(); NetworkVO vo = new NetworkVO(id, network, offering.getId(), guru.getName(), owner.getDomainId(), owner.getId(), - related, name, displayText, predefined.getNetworkDomain(), offering.getGuestType(), + related, name, displayText, predefined.getNetworkDomain(), offering.getGuestType(), plan.getDataCenterId(), plan.getPhysicalNetworkId(), aclType, offering.getSpecifyIpRanges(), vpcId); - networks.add(_networksDao.persist(vo, vo.getGuestType() == Network.GuestType.Isolated, + networks.add(_networksDao.persist(vo, vo.getGuestType() == Network.GuestType.Isolated, finalizeServicesAndProvidersForNetwork(offering, plan.getPhysicalNetworkId()))); if (domainId != null && aclType == ACLType.Domain) { @@ -1709,7 +1711,7 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag @Override @DB - public void allocate(VirtualMachineProfile vm, List> networks) + public void allocate(VirtualMachineProfile vm, List> networks) throws InsufficientCapacityException, ConcurrentOperationException { Transaction txn = Transaction.currentTxn(); txn.start(); @@ -1725,26 +1727,26 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag for (Pair network : networks) { NetworkVO config = network.first(); NicProfile requested = network.second(); - + Boolean isDefaultNic = false; if (vm != null && (requested != null && requested.isDefaultNic())) { isDefaultNic = true; } - + while (deviceIds[deviceId] && deviceId < deviceIds.length) { deviceId++; } - - Pair vmNicPair = allocateNic(requested, config, isDefaultNic, + + Pair vmNicPair = allocateNic(requested, config, isDefaultNic, deviceId, vm); - + NicProfile vmNic = vmNicPair.first(); if (vmNic == null) { continue; } - + deviceId = vmNicPair.second(); - + int devId = vmNic.getDeviceId(); if (devId > deviceIds.length) { throw new IllegalArgumentException("Device id for nic is too large: " + vmNic); @@ -1754,18 +1756,18 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag } deviceIds[devId] = true; - + if (vmNic.isDefaultNic()) { if (defaultNic != null) { - throw new IllegalArgumentException("You cannot specify two nics as default nics: nic 1 = " + + throw new IllegalArgumentException("You cannot specify two nics as default nics: nic 1 = " + defaultNic + "; nic 2 = " + vmNic); } defaultNic = vmNic; } - + nics.add(vmNic); vm.addNic(vmNic); - + } if (nics.size() != networks.size()) { @@ -1779,14 +1781,14 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag txn.commit(); } - - + + @DB @Override - public Pair allocateNic(NicProfile requested, Network network, Boolean isDefaultNic, + public Pair allocateNic(NicProfile requested, Network network, Boolean isDefaultNic, int deviceId, VirtualMachineProfile vm) throws InsufficientVirtualNetworkCapcityException, InsufficientAddressCapacityException, ConcurrentOperationException{ - + NetworkVO ntwkVO = _networksDao.findById(network.getId()); s_logger.debug("Allocating nic for vm " + vm.getVirtualMachine() + " in network " + network + " with requested profile " + requested); NetworkGuru guru = _networkGurus.get(ntwkVO.getGuruName()); @@ -1814,14 +1816,14 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag deviceId = applyProfileToNic(vo, profile, deviceId); vo = _nicDao.persist(vo); - + Integer networkRate = getNetworkRate(network.getId(), vm.getId()); - NicProfile vmNic = new NicProfile(vo, network, vo.getBroadcastUri(), vo.getIsolationUri(), networkRate, + NicProfile vmNic = new NicProfile(vo, network, vo.getBroadcastUri(), vo.getIsolationUri(), networkRate, isSecurityGroupSupportedInNetwork(network), getNetworkTag(vm.getHypervisorType(), network)); - + return new Pair(vmNic, Integer.valueOf(deviceId)); - } + } protected Integer applyProfileToNic(NicVO vo, NicProfile profile, Integer deviceId) { if (profile.getDeviceId() != null) { @@ -1907,7 +1909,7 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag Integer networkRate = getNetworkRate(config.getId(), null); to.setNetworkRateMbps(networkRate); - + to.setUuid(config.getUuid()); return to; @@ -1925,10 +1927,10 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag if (network == null) { // see NetworkVO.java ConcurrentOperationException ex = new ConcurrentOperationException("Unable to acquire network configuration"); - ex.addProxyObject("networks", networkId, "networkId"); + ex.addProxyObject(ApiDBUtils.findNetworkById(networkId).getUuid()); throw ex; } - + if (s_logger.isDebugEnabled()) { s_logger.debug("Lock is acquired for network id " + networkId + " as a part of network implement"); } @@ -1977,7 +1979,7 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag shutdownNetwork(networkId, context, false); } - + _networksDao.releaseFromLockTable(networkId); if (s_logger.isDebugEnabled()) { s_logger.debug("Lock is released for network id " + networkId + " as a part of network implement"); @@ -1985,7 +1987,7 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag } } - private void implementNetworkElementsAndResources(DeployDestination dest, ReservationContext context, + private void implementNetworkElementsAndResources(DeployDestination dest, ReservationContext context, NetworkVO network, NetworkOfferingVO offering) throws ConcurrentOperationException, InsufficientAddressCapacityException, ResourceUnavailableException, InsufficientCapacityException { // If this is a 1) guest virtual network 2) network has sourceNat service 3) network offering does not support a @@ -1994,10 +1996,10 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag boolean sharedSourceNat = offering.getSharedSourceNat(); - if (network.getGuestType() == Network.GuestType.Isolated - && areServicesSupportedInNetwork(network.getId(), Service.SourceNat) + if (network.getGuestType() == Network.GuestType.Isolated + && areServicesSupportedInNetwork(network.getId(), Service.SourceNat) && !sharedSourceNat) { - + List ips = null; if (network.getVpcId() != null) { ips = _ipAddressDao.listByAssociatedVpc(network.getVpcId(), true); @@ -2024,7 +2026,7 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag // because the serializer would look up the NetworkVO class's table and retrieve the // network id instead of the physical network id. // So just throw this exception as is. We may need to TBD by changing the serializer. - throw new CloudRuntimeException("Service provider " + element.getProvider().getName() + + throw new CloudRuntimeException("Service provider " + element.getProvider().getName() + " either doesn't exist or is not enabled in physical network id: " + network.getPhysicalNetworkId()); } if (s_logger.isDebugEnabled()) { @@ -2033,7 +2035,7 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag if (!element.implement(network, offering, dest, context)) { CloudRuntimeException ex = new CloudRuntimeException("Failed to implement provider " + element.getProvider().getName() + " for network with specified id"); ex.addProxyObject(network, network.getId(), "networkId"); - throw ex; + throw ex; } } } @@ -2044,12 +2046,12 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag s_logger.warn("Failed to re-program the network as a part of network " + network + " implement"); // see DataCenterVO.java ResourceUnavailableException ex = new ResourceUnavailableException("Unable to apply network rules as a part of network " + network + " implement", DataCenter.class, network.getDataCenterId()); - ex.addProxyObject("data_center", network.getDataCenterId(), "dataCenterId"); + ex.addProxyObject(ApiDBUtils.findZoneById(network.getDataCenterId()).getUuid()); throw ex; } } - protected void prepareElement(NetworkElement element, NetworkVO network, + protected void prepareElement(NetworkElement element, NetworkVO network, NicProfile profile, VirtualMachineProfile vmProfile, DeployDestination dest, ReservationContext context) throws InsufficientCapacityException, ConcurrentOperationException, ResourceUnavailableException { @@ -2084,7 +2086,7 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag if (nic.getVmType() == VirtualMachine.Type.User || (nic.getVmType() == VirtualMachine.Type.DomainRouter && getNetwork(networkId).getTrafficType() == TrafficType.Guest)) { _networksDao.setCheckForGc(networkId); } - + txn.commit(); } @@ -2109,7 +2111,7 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag for (NicVO nic : nics) { Pair implemented = implementNetwork(nic.getNetworkId(), dest, context); - + NetworkVO network = implemented.second(); NicProfile profile = prepareNic(vmProfile, dest, context, nic.getId(), network); vmProfile.addNic(profile); @@ -2117,15 +2119,15 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag } @Override - public NicProfile prepareNic(VirtualMachineProfile vmProfile, DeployDestination + public NicProfile prepareNic(VirtualMachineProfile vmProfile, DeployDestination dest, ReservationContext context, long nicId, NetworkVO network) - throws InsufficientVirtualNetworkCapcityException, InsufficientAddressCapacityException, + throws InsufficientVirtualNetworkCapcityException, InsufficientAddressCapacityException, ConcurrentOperationException, InsufficientCapacityException, ResourceUnavailableException { - + Integer networkRate = getNetworkRate(network.getId(), vmProfile.getId()); NetworkGuru guru = _networkGurus.get(network.getGuruName()); NicVO nic = _nicDao.findById(nicId); - + NicProfile profile = null; if (nic.getReservationStrategy() == Nic.ReservationStrategy.Start) { nic.setState(Nic.State.Reserving); @@ -2138,7 +2140,7 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag URI isolationUri = nic.getIsolationUri(); - profile = new NicProfile(nic, network, broadcastUri, isolationUri, + profile = new NicProfile(nic, network, broadcastUri, isolationUri, networkRate, isSecurityGroupSupportedInNetwork(network), getNetworkTag(vmProfile.getHypervisorType(), network)); guru.reserve(profile, network, vmProfile, dest, context); @@ -2159,7 +2161,7 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag updateNic(nic, network.getId(), 1); } else { - profile = new NicProfile(nic, network, nic.getBroadcastUri(), nic.getIsolationUri(), + profile = new NicProfile(nic, network, nic.getBroadcastUri(), nic.getIsolationUri(), networkRate, isSecurityGroupSupportedInNetwork(network), getNetworkTag(vmProfile.getHypervisorType(), network)); guru.updateNicProfile(profile, network); nic.setState(Nic.State.Reserved); @@ -2186,7 +2188,7 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag Integer networkRate = getNetworkRate(network.getId(), vm.getId()); NetworkGuru guru = _networkGurus.get(network.getGuruName()); - NicProfile profile = new NicProfile(nic, network, nic.getBroadcastUri(), nic.getIsolationUri(), networkRate, + NicProfile profile = new NicProfile(nic, network, nic.getBroadcastUri(), nic.getIsolationUri(), networkRate, isSecurityGroupSupportedInNetwork(network), getNetworkTag(vm.getHypervisorType(), network)); guru.updateNicProfile(profile, network); vm.addNic(profile); @@ -2206,27 +2208,27 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag @Override @DB - public void releaseNic(VirtualMachineProfile vmProfile, Nic nic) + public void releaseNic(VirtualMachineProfile vmProfile, Nic nic) throws ConcurrentOperationException, ResourceUnavailableException { NicVO nicVO = _nicDao.findById(nic.getId()); releaseNic(vmProfile, nicVO); } @DB - protected void releaseNic(VirtualMachineProfile vmProfile, NicVO nicVO) + protected void releaseNic(VirtualMachineProfile vmProfile, NicVO nicVO) throws ConcurrentOperationException, ResourceUnavailableException { //lock the nic Transaction txn = Transaction.currentTxn(); txn.start(); - + NicVO nic = _nicDao.lockRow(nicVO.getId(), true); if (nic == null) { throw new ConcurrentOperationException("Unable to acquire lock on nic " + nic); } - + Nic.State originalState = nic.getState(); NetworkVO network = _networksDao.findById(nicVO.getNetworkId()); - + if (originalState == Nic.State.Reserved || originalState == Nic.State.Reserving) { if (nic.getReservationStrategy() == Nic.ReservationStrategy.Start) { NetworkGuru guru = _networkGurus.get(network.getGuruName()); @@ -2245,17 +2247,17 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag } //commit the transaction before proceeding releasing nic profile on the network elements txn.commit(); - + // Perform release on network elements for (NetworkElement element : _networkElements) { if (s_logger.isDebugEnabled()) { s_logger.debug("Asking " + element.getName() + " to release " + nic); } - //NOTE: Context appear to never be used in release method + //NOTE: Context appear to never be used in release method //implementations. Consider removing it from interface Element element.release(network, profile, vmProfile, null); } - + } else { nic.setState(Nic.State.Allocated); updateNic(nic, network.getId(), -1); @@ -2280,7 +2282,7 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag Integer networkRate = getNetworkRate(network.getId(), vm.getId()); NetworkGuru guru = _networkGurus.get(network.getGuruName()); - NicProfile profile = new NicProfile(nic, network, nic.getBroadcastUri(), nic.getIsolationUri(), + NicProfile profile = new NicProfile(nic, network, nic.getBroadcastUri(), nic.getIsolationUri(), networkRate, isSecurityGroupSupportedInNetwork(network), getNetworkTag(vm.getHypervisorType(), network)); guru.updateNicProfile(profile, network); profiles.add(profile); @@ -2288,7 +2290,7 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag } return profiles; } - + @Override public NicProfile getNicProfile(VirtualMachine vm, long networkId, String broadcastUri) { NicVO nic = null; @@ -2299,12 +2301,12 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag } NetworkVO network = _networksDao.findById(networkId); Integer networkRate = getNetworkRate(network.getId(), vm.getId()); - + NetworkGuru guru = _networkGurus.get(network.getGuruName()); - NicProfile profile = new NicProfile(nic, network, nic.getBroadcastUri(), nic.getIsolationUri(), + NicProfile profile = new NicProfile(nic, network, nic.getBroadcastUri(), nic.getIsolationUri(), networkRate, isSecurityGroupSupportedInNetwork(network), getNetworkTag(vm.getHypervisorType(), network)); - guru.updateNicProfile(profile, network); - + guru.updateNicProfile(profile, network); + return profile; } @@ -2341,7 +2343,7 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag } // Check for account wide pool. It will have an entry for account_vlan_map. - if (_accountVlanMapDao.findAccountVlanMap(ipVO.getAllocatedToAccountId(), ipVO.getVlanId()) != null) { + if (_accountVlanMapDao.findAccountVlanMap(ipVO.getAllocatedToAccountId(), ipVO.getVlanId()) != null) { //see IPaddressVO.java InvalidParameterValueException ex = new InvalidParameterValueException("Sepcified IP address uuid belongs to" + " Account wide IP pool and cannot be disassociated"); @@ -2395,7 +2397,7 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag public String getNextAvailableMacAddressInNetwork(long networkId) throws InsufficientAddressCapacityException { String mac = _networksDao.getNextAvailableMacAddress(networkId); if (mac == null) { - throw new InsufficientAddressCapacityException("Unable to create another mac address", Network.class, networkId); + throw new InsufficientAddressCapacityException("Unable to create another mac address", Network.class, networkId); } return mac; } @@ -2443,7 +2445,7 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag removeNic(vm, nic); } } - + @Override public void removeNic(VirtualMachineProfile vm, Nic nic) { removeNic(vm, _nicDao.findById(nic.getId())); @@ -2496,7 +2498,7 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag if (ntwkOff == null || ntwkOff.isSystemOnly()) { InvalidParameterValueException ex = new InvalidParameterValueException("Unable to find network offering by specified id"); if (ntwkOff != null) { - ex.addProxyObject(ntwkOff, networkOfferingId, "networkOfferingId"); + ex.addProxyObject(ntwkOff, networkOfferingId, "networkOfferingId"); // Get the VO object's table name. String tablename = AnnotationHelper.getTableName(ntwkOff); if (tablename != null) { @@ -2526,12 +2528,12 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag if (zone == null) { throw new InvalidParameterValueException("Specified zone id was not found"); } - + if (Grouping.AllocationState.Disabled == zone.getAllocationState() && !_accountMgr.isRootAdmin(caller.getType())) { // See DataCenterVO.java PermissionDeniedException ex = new PermissionDeniedException("Cannot perform this operation since specified Zone is currently disabled"); ex.addProxyObject(zone, zoneId, "zoneId"); - throw ex; + throw ex; } // Only domain and account ACL types are supported in Acton. @@ -2551,7 +2553,7 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag } } else if (ntwkOff.getGuestType() == GuestType.Shared) { if (!(aclType == ACLType.Domain || aclType == ACLType.Account)) { - throw new InvalidParameterValueException("AclType should be " + ACLType.Domain + " or " + + throw new InvalidParameterValueException("AclType should be " + ACLType.Domain + " or " + ACLType.Account + " for network of type " + Network.GuestType.Shared); } } @@ -2587,7 +2589,7 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag } DomainVO domain = _domainDao.findById(domainId); - if (domain == null) { + if (domain == null) { throw new InvalidParameterValueException("Unable to find domain by specified id"); } _accountMgr.checkAccess(caller, domain); @@ -2671,7 +2673,7 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag // 2) GuestType is Isolated, but SourceNat service is disabled boolean createVlan = (startIP != null && endIP != null && zone.getNetworkType() == NetworkType.Advanced && ((ntwkOff.getGuestType() == Network.GuestType.Shared) - || (ntwkOff.getGuestType() == GuestType.Isolated && + || (ntwkOff.getGuestType() == GuestType.Isolated && !areServicesSupportedByNetworkOffering(ntwkOff.getId(), Service.SourceNat)))); // Can add vlan range only to the network which allows it @@ -2684,7 +2686,7 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag } else { s_logger.info("\nCould not retrieve table name (annotation) from " + tablename + " VO proxy object\n"); } - throw ex; + throw ex; } Transaction txn = Transaction.currentTxn(); @@ -2711,15 +2713,15 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag if (!_configMgr.isOfferingForVpc(ntwkOff)){ throw new InvalidParameterValueException("Network offering can't be used for VPC networks"); } - network = _vpcMgr.createVpcGuestNetwork(networkOfferingId, name, displayText, gateway, cidr, vlanId, + network = _vpcMgr.createVpcGuestNetwork(networkOfferingId, name, displayText, gateway, cidr, vlanId, networkDomain, owner, sharedDomainId, pNtwk, zoneId, aclType, subdomainAccess, vpcId, caller); } else { if (_configMgr.isOfferingForVpc(ntwkOff)){ throw new InvalidParameterValueException("Network offering can be used for VPC networks only"); } - network = createGuestNetwork(networkOfferingId, name, displayText, gateway, cidr, vlanId, + network = createGuestNetwork(networkOfferingId, name, displayText, gateway, cidr, vlanId, networkDomain, owner, sharedDomainId, pNtwk, zoneId, aclType, subdomainAccess, vpcId); - } + } if (caller.getType() == Account.ACCOUNT_TYPE_ADMIN && createVlan) { // Create vlan ip range @@ -2734,9 +2736,9 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag @Override @DB - public Network createGuestNetwork(long networkOfferingId, String name, String displayText, String gateway, + public Network createGuestNetwork(long networkOfferingId, String name, String displayText, String gateway, String cidr, String vlanId, String networkDomain, Account owner, Long domainId, - PhysicalNetwork pNtwk, long zoneId, ACLType aclType, Boolean subdomainAccess, Long vpcId) + PhysicalNetwork pNtwk, long zoneId, ACLType aclType, Boolean subdomainAccess, Long vpcId) throws ConcurrentOperationException, InsufficientCapacityException, ResourceAllocationException { NetworkOfferingVO ntwkOff = _networkOfferingDao.findById(networkOfferingId); @@ -2776,7 +2778,7 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag if (aclType == null || aclType != ACLType.Domain) { throw new InvalidParameterValueException("Only AclType=Domain can be specified for network creation in Basic zone"); } - + // Only one guest network is supported in Basic zone List guestNetworks = _networksDao.listByZoneAndTrafficType(zone.getId(), TrafficType.Guest); if (!guestNetworks.isEmpty()) { @@ -2785,7 +2787,7 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag } // if zone is basic, only Shared network offerings w/o source nat service are allowed - if (!(ntwkOff.getGuestType() == GuestType.Shared && + if (!(ntwkOff.getGuestType() == GuestType.Shared && !areServicesSupportedByNetworkOffering(ntwkOff.getId(), Service.SourceNat))) { throw new InvalidParameterValueException("For zone of type " + NetworkType.Basic + " only offerings of " + "guestType " + GuestType.Shared + " with disabled " + Service.SourceNat.getName() @@ -2816,14 +2818,14 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag if (zone.isSecurityGroupEnabled()) { // Only Account specific Isolated network with sourceNat service disabled are allowed in security group // enabled zone - boolean allowCreation = (ntwkOff.getGuestType() == GuestType.Isolated + boolean allowCreation = (ntwkOff.getGuestType() == GuestType.Isolated && !areServicesSupportedByNetworkOffering(ntwkOff.getId(), Service.SourceNat)); if (!allowCreation) { throw new InvalidParameterValueException("Only Account specific Isolated network with sourceNat " + "service disabled are allowed in security group enabled zone"); } } - + //don't allow eip/elb networks in Advance zone if (ntwkOff.getElasticIp() || ntwkOff.getElasticLb()) { throw new InvalidParameterValueException("Elastic IP and Elastic LB services are supported in zone of type " + NetworkType.Basic); @@ -2855,7 +2857,7 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag } } } - + // If networkDomain is not specified, take it from the global configuration if (areServicesSupportedByNetworkOffering(networkOfferingId, Service.Dns)) { Map dnsCapabilities = getNetworkOfferingServiceCapabilities @@ -2897,7 +2899,7 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag // limitation, remove after we introduce support for multiple ip ranges // with different Cidrs for the same Shared network boolean cidrRequired = zone.getNetworkType() == NetworkType.Advanced && ntwkOff.getTrafficType() == TrafficType.Guest - && (ntwkOff.getGuestType() == GuestType.Shared || (ntwkOff.getGuestType() == GuestType.Isolated + && (ntwkOff.getGuestType() == GuestType.Shared || (ntwkOff.getGuestType() == GuestType.Isolated && !areServicesSupportedByNetworkOffering(ntwkOff.getId(), Service.SourceNat))); if (cidr == null && cidrRequired) { throw new InvalidParameterValueException("StartIp/endIp/gateway/netmask are required when create network of" + @@ -2949,7 +2951,7 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag if (networks == null || networks.isEmpty()) { throw new CloudRuntimeException("Fail to create a network"); } else { - if (networks.size() > 0 && networks.get(0).getGuestType() == Network.GuestType.Isolated && + if (networks.size() > 0 && networks.get(0).getGuestType() == Network.GuestType.Isolated && networks.get(0).getTrafficType() == TrafficType.Guest) { Network defaultGuestNetwork = networks.get(0); for (Network nw : networks) { @@ -2963,7 +2965,7 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag network = networks.get(0); } } - + if (updateResourceCount) { _resourceLimitMgr.incrementResourceCount(owner.getId(), ResourceType.network); } @@ -3045,13 +3047,13 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag } else { permittedAccounts.clear(); Project project = _projectMgr.getProject(projectId); - if (project == null) { + if (project == null) { throw new InvalidParameterValueException("Unable to find project by specified id"); } if (!_projectMgr.canAccessProjectAccount(caller, project.getProjectAccountId())) { // getProject() returns type ProjectVO. InvalidParameterValueException ex = new InvalidParameterValueException("Account " + caller + " cannot access specified project id"); - ex.addProxyObject(project, projectId, "projectId"); + ex.addProxyObject(project, projectId, "projectId"); throw ex; } permittedAccounts.add(project.getProjectAccountId()); @@ -3063,15 +3065,15 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag path = _domainDao.findById(domainId).getPath(); } else { path = _domainDao.findById(caller.getDomainId()).getPath(); - } - + } + if (listAll && domainId == null) { isRecursive = true; } Filter searchFilter = new Filter(NetworkVO.class, "id", false, cmd.getStartIndex(), cmd.getPageSizeVal()); SearchBuilder sb = _networksDao.createSearchBuilder(); - + if (forVpc != null) { if (forVpc) { sb.and("vpc", sb.entity().getVpcId(), Op.NNULL); @@ -3115,8 +3117,8 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag SearchBuilder accountSearch = _accountDao.createSearchBuilder(); accountSearch.and("typeNEQ", accountSearch.entity().getType(), SearchCriteria.Op.NEQ); accountSearch.and("typeEQ", accountSearch.entity().getType(), SearchCriteria.Op.EQ); - - + + sb.join("accountSearch", accountSearch, sb.entity().getAccountId(), accountSearch.entity().getId(), JoinBuilder.JoinType.INNER); List networksToReturn = new ArrayList(); @@ -3125,7 +3127,7 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag if (!permittedAccounts.isEmpty()) { //get account level networks networksToReturn.addAll(listAccountSpecificNetworks( - buildNetworkSearchCriteria(sb, keyword, id, isSystem, zoneId, guestIpType, trafficType, + buildNetworkSearchCriteria(sb, keyword, id, isSystem, zoneId, guestIpType, trafficType, physicalNetworkId, aclType, skipProjectNetworks, restartRequired, specifyIpRanges, vpcId, tags), searchFilter, permittedAccounts)); //get domain level networks @@ -3139,12 +3141,12 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag } else { //add account specific networks networksToReturn.addAll(listAccountSpecificNetworksByDomainPath( - buildNetworkSearchCriteria(sb, keyword, id, isSystem, zoneId, guestIpType, trafficType, + buildNetworkSearchCriteria(sb, keyword, id, isSystem, zoneId, guestIpType, trafficType, physicalNetworkId, aclType, skipProjectNetworks, restartRequired, specifyIpRanges, vpcId, tags), searchFilter, path, isRecursive)); //add domain specific networks of domain + parent domains networksToReturn.addAll(listDomainSpecificNetworksByDomainPath( - buildNetworkSearchCriteria(sb, keyword, id, isSystem, zoneId, guestIpType, trafficType, + buildNetworkSearchCriteria(sb, keyword, id, isSystem, zoneId, guestIpType, trafficType, physicalNetworkId, aclType, skipProjectNetworks, restartRequired, specifyIpRanges, vpcId, tags), searchFilter, path, isRecursive)); //add networks of subdomains @@ -3184,7 +3186,7 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag networksToReturn=supportedNetworks; } - + if (canUseForDeploy != null) { List networksForDeploy = new ArrayList(); for (NetworkVO network : networksToReturn) { @@ -3192,10 +3194,10 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag networksForDeploy.add(network); } } - + networksToReturn=networksForDeploy; } - + return networksToReturn; } @@ -3210,11 +3212,11 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag } else { hasFreeIps = (getAvailableIps(network, null)).size() > 0; } - + return hasFreeIps; } - private SearchCriteria buildNetworkSearchCriteria(SearchBuilder sb, String keyword, Long id, + private SearchCriteria buildNetworkSearchCriteria(SearchBuilder sb, String keyword, Long id, Boolean isSystem, Long zoneId, String guestIpType, String trafficType, Long physicalNetworkId, String aclType, boolean skipProjectNetworks, Boolean restartRequired, Boolean specifyIpRanges, Long vpcId, Map tags) { @@ -3267,11 +3269,11 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag if (specifyIpRanges != null) { sc.addAnd("specifyIpRanges", SearchCriteria.Op.EQ, specifyIpRanges); } - + if (vpcId != null) { sc.addAnd("vpcId", SearchCriteria.Op.EQ, vpcId); } - + if (tags != null && !tags.isEmpty()) { int count = 0; sc.setJoinParameters("tagSearch", "resourceType", TaggedResourceType.Network.toString()); @@ -3354,7 +3356,7 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag } List networkIds = new ArrayList(); - + List maps = _networkDomainDao.listDomainNetworkMapByDomain(allowedDomains.toArray()); for (NetworkDomainVO map : maps) { @@ -3383,16 +3385,16 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag NetworkVO network = _networksDao.findById(networkId); if (network == null) { // see NetworkVO.java - + InvalidParameterValueException ex = new InvalidParameterValueException("unable to find network with specified id"); - ex.addProxyObject(network, networkId, "networkId"); + ex.addProxyObject(network, networkId, "networkId"); throw ex; } // don't allow to delete system network if (isNetworkSystem(network)) { InvalidParameterValueException ex = new InvalidParameterValueException("Network with specified id is system and can't be removed"); - ex.addProxyObject(network, network.getId(), "networkId"); + ex.addProxyObject(network, network.getId(), "networkId"); throw ex; } @@ -3411,7 +3413,7 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag @DB public boolean shutdownNetwork(long networkId, ReservationContext context, boolean cleanupElements) { boolean result = false; - + NetworkVO network = _networksDao.lockRow(networkId, true); if (network == null) { s_logger.debug("Unable to find network with id: " + networkId); @@ -3529,11 +3531,11 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag return false; } } - + //In Basic zone, make sure that there are no non-removed console proxies and SSVMs using the network DataCenter zone = _configMgr.getZone(network.getDataCenterId()); if (zone.getNetworkType() == NetworkType.Basic) { - List systemVms = _vmDao.listNonRemovedVmsByTypeAndNetwork(network.getId(), + List systemVms = _vmDao.listNonRemovedVmsByTypeAndNetwork(network.getId(), Type.ConsoleProxy, Type.SecondaryStorageVm); if (systemVms != null && !systemVms.isEmpty()) { s_logger.warn("Can't delete the network, not all consoleProxy/secondaryStorage vms are expunged"); @@ -3608,7 +3610,7 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag network.setState(Network.State.Destroy); _networksDao.update(network.getId(), network); _networksDao.remove(network.getId()); - + NetworkOffering ntwkOff = _configMgr.getNetworkOffering(network.getNetworkOfferingId()); boolean updateResourceCount = resourceCountNeedsUpdate(ntwkOff, network.getAclType()); if (updateResourceCount) { @@ -3627,7 +3629,7 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag } protected boolean deleteVlansInNetwork(long networkId, long userId, Account callerAccount) { - + //cleanup Public vlans List publicVlans = _vlanDao.listVlansByNetworkId(networkId); boolean result = true; @@ -3636,8 +3638,8 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag s_logger.warn("Failed to delete vlan " + vlan.getId() + ");"); result = false; } - } - + } + //cleanup private vlans int privateIpAllocCount = _privateIpDao.countAllocatedByNetworkId(networkId); if (privateIpAllocCount > 0) { @@ -3828,7 +3830,7 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag // Check if network exists NetworkVO network = _networksDao.findById(networkId); - if (network == null) { + if (network == null) { InvalidParameterValueException ex = new InvalidParameterValueException("Network with specified id doesn't exist"); ex.addProxyObject("networks", networkId, "networkId"); throw ex; @@ -3838,9 +3840,9 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag if (!(network.getState() == Network.State.Implemented || network.getState() == Network.State.Setup)) { throw new InvalidParameterValueException("Network is not in the right state to be restarted. Correct states are: " + Network.State.Implemented + ", " + Network.State.Setup); } - + if (network.getBroadcastDomainType() == BroadcastDomainType.Lswitch ) { - /** + /** * Unable to restart these networks now. * TODO Restarting a SDN based network requires updating the nics and the configuration * in the controller. This requires a non-trivial rewrite of the restart procedure. @@ -3868,7 +3870,7 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag NetworkVO network = _networksDao.findById(networkId); if (network == null) { InvalidParameterValueException ex = new InvalidParameterValueException("Network with specified id doesn't exist"); - ex.addProxyObject(network, networkId, "networkId"); + ex.addProxyObject(network, networkId, "networkId"); throw ex; } @@ -3978,13 +3980,13 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag } } } - + //apply network ACLs if (!_networkACLMgr.applyNetworkACLs(networkId, caller)) { s_logger.warn("Failed to reapply network ACLs as a part of of network id=" + networkId + " restart"); success = false; } - + return success; } @@ -4047,7 +4049,7 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag public Map getNetworkOfferingServiceCapabilities(NetworkOffering offering, Service service) { if (!areServicesSupportedByNetworkOffering(offering.getId(), service)) { - // TBD: We should be sending networkOfferingId and not the offering object itself. + // TBD: We should be sending networkOfferingId and not the offering object itself. throw new UnsupportedServiceException("Service " + service.getName() + " is not supported by the network offering " + offering); } @@ -4099,7 +4101,7 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag List networks = _networksDao.listBy(Account.ACCOUNT_ID_SYSTEM, networkOfferingId, zoneId); if (networks == null || networks.isEmpty()) { - // TBD: send uuid instead of zoneId. Hardcode tablename in call to addProxyObject(). + // TBD: send uuid instead of zoneId. Hardcode tablename in call to addProxyObject(). throw new InvalidParameterValueException("Unable to find network with traffic type " + trafficType + " in zone " + zoneId); } return networks.get(0); @@ -4184,7 +4186,7 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag ResourceUnavailableException, ResourceAllocationException { Account owner = _accountMgr.getActiveAccountById(accountId); boolean createNetwork = false; - + if (guestNetwork != null && guestNetwork.getTrafficType() != TrafficType.Guest) { throw new InvalidParameterValueException("Network " + guestNetwork + " is not of a type " + TrafficType.Guest); } @@ -4208,22 +4210,22 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag if (createNetwork) { List requiredOfferings = _networkOfferingDao.listByAvailability(Availability.Required, false); if (requiredOfferings.size() < 1) { - throw new CloudRuntimeException("Unable to find network offering with availability=" + + throw new CloudRuntimeException("Unable to find network offering with availability=" + Availability.Required + " to automatically create the network as part of createVlanIpRange"); } if (requiredOfferings.get(0).getState() == NetworkOffering.State.Enabled) { - + long physicalNetworkId = findPhysicalNetworkId(zoneId, requiredOfferings.get(0).getTags(), requiredOfferings.get(0).getTrafficType()); // Validate physical network PhysicalNetwork physicalNetwork = _physicalNetworkDao.findById(physicalNetworkId); if (physicalNetwork == null) { throw new InvalidParameterValueException("Unable to find physical network with id: "+physicalNetworkId + " and tag: " +requiredOfferings.get(0).getTags()); } - - s_logger.debug("Creating network for account " + owner + " from the network offering id=" + + + s_logger.debug("Creating network for account " + owner + " from the network offering id=" + requiredOfferings.get(0).getId() + " as a part of createVlanIpRange process"); guestNetwork = createGuestNetwork(requiredOfferings.get(0).getId(), owner.getAccountName() + "-network" - , owner.getAccountName() + "-network", null, null, null, null, owner, null, physicalNetwork, + , owner.getAccountName() + "-network", null, null, null, null, owner, null, physicalNetwork, zoneId, ACLType.Account, null, null); if (guestNetwork == null) { @@ -4232,8 +4234,8 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag "service enabled as a part of createVlanIpRange, for the account " + accountId + "in zone " + zoneId); } } else { - throw new CloudRuntimeException("Required network offering id=" + requiredOfferings.get(0).getId() - + " is not in " + NetworkOffering.State.Enabled); + throw new CloudRuntimeException("Required network offering id=" + requiredOfferings.get(0).getId() + + " is not in " + NetworkOffering.State.Enabled); } } @@ -4336,7 +4338,7 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag s_logger.debug("Network " + network + " doesn't support service " + Service.UserData.getName()); return null; } - + return (UserDataServiceProvider)getElementImplementingProvider(passwordProvider); } @@ -4484,7 +4486,7 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag } return networks; } - + @DB @Override public IPAddressVO markIpAsUnavailable(long addrId) { @@ -4512,7 +4514,7 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag String guestType = vlan.getVlanType().toString(); UsageEventVO usageEvent = new UsageEventVO(EventTypes.EVENT_NET_IP_RELEASE, - ip.getAllocatedToAccountId(), ip.getDataCenterId(), addrId, ip.getAddress().addr(), + ip.getAllocatedToAccountId(), ip.getDataCenterId(), addrId, ip.getAddress().addr(), ip.isSourceNat(), guestType, ip.getSystem()); _usageEventDao.persist(usageEvent); } @@ -4568,15 +4570,15 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag } private boolean checkForNonStoppedVmInNetwork(long networkId) { - List vms = _userVmDao.listByNetworkIdAndStates(networkId, VirtualMachine.State.Starting, + List vms = _userVmDao.listByNetworkIdAndStates(networkId, VirtualMachine.State.Starting, VirtualMachine.State.Running, VirtualMachine.State.Migrating, VirtualMachine.State.Stopping); return vms.isEmpty(); } - + @Override @DB @ActionEvent(eventType = EventTypes.EVENT_NETWORK_UPDATE, eventDescription = "updating network", async = true) - public Network updateGuestNetwork(long networkId, String name, String displayText, Account callerAccount, + public Network updateGuestNetwork(long networkId, String name, String displayText, Account callerAccount, User callerUser, String domainSuffix, Long networkOfferingId, Boolean changeCidr) { boolean restartNetwork = false; @@ -4604,7 +4606,7 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag if (network.getTrafficType() != Networks.TrafficType.Guest) { throw new InvalidParameterValueException("Can't allow networks which traffic type is not " + TrafficType.Guest); } - + _accountMgr.checkAccess(callerAccount, null, true, network); if (name != null) { @@ -4628,18 +4630,18 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag NetworkOfferingVO networkOffering = _networkOfferingDao.findById(networkOfferingId); if (networkOffering == null || networkOffering.isSystemOnly()) { InvalidParameterValueException ex = new InvalidParameterValueException("Unable to find network offering with specified id"); - ex.addProxyObject(networkOffering, networkOfferingId, "networkOfferingId"); + ex.addProxyObject(networkOffering, networkOfferingId, "networkOfferingId"); throw ex; } - + // network offering should be in Enabled state if (networkOffering.getState() != NetworkOffering.State.Enabled) { InvalidParameterValueException ex = new InvalidParameterValueException("Network offering with specified id is not in " + NetworkOffering.State.Enabled + " state, can't upgrade to it"); - ex.addProxyObject(networkOffering, networkOfferingId, "networkOfferingId"); + ex.addProxyObject(networkOffering, networkOfferingId, "networkOfferingId"); throw ex; } - - + + //can't update from vpc to non-vpc network offering boolean forVpcNew = _configMgr.isOfferingForVpc(networkOffering); boolean vorVpcOriginal = _configMgr.isOfferingForVpc(_configMgr.getNetworkOffering(oldNetworkOfferingId)); @@ -4656,7 +4658,7 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag if (changeCidr) { if (!checkForNonStoppedVmInNetwork(network.getId())) { InvalidParameterValueException ex = new InvalidParameterValueException("All user vm of network of specified id should be stopped before changing CIDR!"); - ex.addProxyObject(network, networkId, "networkId"); + ex.addProxyObject(network, networkId, "networkId"); throw ex; } } @@ -4711,7 +4713,7 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag if (!shutdownNetworkElementsAndResources(context, true, network)) { s_logger.warn("Failed to shutdown the network elements and resources as a part of network restart: " + network); CloudRuntimeException ex = new CloudRuntimeException("Failed to shutdown the network elements and resources as a part of update to network of specified id"); - ex.addProxyObject(network, networkId, "networkId"); + ex.addProxyObject(network, networkId, "networkId"); throw ex; } } else { @@ -4721,13 +4723,13 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag if (!shutdownNetwork(network.getId(), context, true)) { s_logger.warn("Failed to shutdown the network as a part of update to network with specified id"); CloudRuntimeException ex = new CloudRuntimeException("Failed to shutdown the network as a part of update of specified network id"); - ex.addProxyObject(network, networkId, "networkId"); + ex.addProxyObject(network, networkId, "networkId"); throw ex; } } } else { CloudRuntimeException ex = new CloudRuntimeException("Failed to shutdown the network elements and resources as a part of update to network with specified id; network is in wrong state: " + network.getState()); - ex.addProxyObject(network, networkId, "networkId"); + ex.addProxyObject(network, networkId, "networkId"); throw ex; } } @@ -4738,7 +4740,7 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag boolean validStateToImplement = (networkState == Network.State.Implemented || networkState == Network.State.Setup || networkState == Network.State.Allocated); if (restartNetwork && !validStateToImplement) { CloudRuntimeException ex = new CloudRuntimeException("Failed to implement the network elements and resources as a part of update to network with specified id; network is in wrong state: " + networkState); - ex.addProxyObject(network, networkId, "networkId"); + ex.addProxyObject(network, networkId, "networkId"); throw ex; } @@ -4788,7 +4790,7 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag } catch (Exception ex) { s_logger.warn("Failed to implement network " + network + " elements and resources as a part of network update due to ", ex); CloudRuntimeException e = new CloudRuntimeException("Failed to implement network (with specified id) elements and resources as a part of network update"); - e.addProxyObject(network, networkId, "networkId"); + e.addProxyObject(network, networkId, "networkId"); throw e; } } @@ -4867,8 +4869,8 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag String[] cidr = network.getCidr().split("/"); List ips = _nicDao.listIpAddressInNetwork(network.getId()); Set allPossibleIps = NetUtils.getAllIpsFromCidr(cidr[0], Integer.parseInt(cidr[1])); - Set usedIps = new TreeSet(); - + Set usedIps = new TreeSet(); + for (String ip : ips) { if (requestedIp != null && requestedIp.equals(ip)) { s_logger.warn("Requested ip address " + requestedIp + " is already in use in network" + network); @@ -4882,7 +4884,7 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag } return allPossibleIps; } - + private String getZoneNetworkDomain(long zoneId) { return _dcDao.findById(zoneId).getDomain(); @@ -5004,7 +5006,7 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag } } } - + // if all the rules configured on public IP are revoked then, dis-associate IP with network service provider applyIpAssociations(network, true, continueOnError, publicIps); @@ -5181,7 +5183,7 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag @Override @DB @ActionEvent(eventType = EventTypes.EVENT_PHYSICAL_NETWORK_CREATE, eventDescription = "Creating Physical Network", create = true) - public PhysicalNetwork createPhysicalNetwork(Long zoneId, String vnetRange, String networkSpeed, List + public PhysicalNetwork createPhysicalNetwork(Long zoneId, String vnetRange, String networkSpeed, List isolationMethods, String broadcastDomainRangeStr, Long domainId, List tags, String name) { // Check if zone exists @@ -5235,7 +5237,7 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag } catch (NumberFormatException e) { throw new InvalidParameterValueException("Please specify valid integers for the vlan range."); } - + //check for vnet conflicts with other physical network(s) in the zone checkGuestVnetsConflicts(zoneId, vnetStart, vnetEnd, null); @@ -5290,7 +5292,7 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag // add security group provider to the physical network addDefaultSecurityGroupProviderToPhysicalNetwork(pNetwork.getId()); - + // add VPCVirtualRouter as the defualt network service provider addDefaultVpcVirtualRouterToPhysicalNetwork(pNetwork.getId()); @@ -5332,7 +5334,7 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag PhysicalNetworkVO network = _physicalNetworkDao.findById(id); if (network == null) { InvalidParameterValueException ex = new InvalidParameterValueException("Physical Network with specified id doesn't exist in the system"); - ex.addProxyObject(network, id, "physicalNetworkId"); + ex.addProxyObject(network, id, "physicalNetworkId"); throw ex; } @@ -5340,7 +5342,7 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag DataCenter zone = _dcDao.findById(network.getDataCenterId()); if (zone == null) { InvalidParameterValueException ex = new InvalidParameterValueException("Zone with id=" + network.getDataCenterId() + " doesn't exist in the system"); - ex.addProxyObject(zone, network.getDataCenterId(), "dataCenterId"); + ex.addProxyObject(zone, network.getDataCenterId(), "dataCenterId"); throw ex; } if (newVnetRangeString != null) { @@ -5386,14 +5388,14 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag String[] newVnetRange = newVnetRangeString.split("-"); int maxVnet = 4096; // for GRE phynets allow up to 32bits - // TODO: Not happy about this test. + // TODO: Not happy about this test. // What about guru-like objects for physical networs? s_logger.debug("ISOLATION METHODS:" + network.getIsolationMethods()); // Java does not have unsigned types... - if (network.getIsolationMethods().contains("GRE")) { + if (network.getIsolationMethods().contains("GRE")) { maxVnet = (int)(Math.pow(2, 32)-1); } - String rangeMessage = " between 0 and " + maxVnet; + String rangeMessage = " between 0 and " + maxVnet; if (newVnetRange.length < 2) { throw new InvalidParameterValueException("Please provide valid vnet range" + rangeMessage); } @@ -5416,7 +5418,7 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag if (newStartVnet > newEndVnet) { throw new InvalidParameterValueException("Vnet range has to be" + rangeMessage + " and start range should be lesser than or equal to stop range"); } - + //check if new vnet conflicts with vnet ranges of other physical networks checkGuestVnetsConflicts(network.getDataCenterId(), newStartVnet, newEndVnet, network.getId()); @@ -5478,7 +5480,7 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag || (newEndVnet <= endVnet && newEndVnet >= startVnet)) { throw new InvalidParameterValueException("Vnet range for physical network conflicts with another " + "physical network's vnet in the zone"); - } + } } } @@ -5495,7 +5497,7 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag PhysicalNetworkVO pNetwork = _physicalNetworkDao.findById(physicalNetworkId); if (pNetwork == null) { InvalidParameterValueException ex = new InvalidParameterValueException("Physical Network with specified id doesn't exist in the system"); - ex.addProxyObject(pNetwork, physicalNetworkId, "physicalNetworkId"); + ex.addProxyObject(pNetwork, physicalNetworkId, "physicalNetworkId"); throw ex; } @@ -5522,7 +5524,7 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag // delete service providers List providers = _pNSPDao.listBy(physicalNetworkId); - + for(PhysicalNetworkServiceProviderVO provider : providers){ try { deleteNetworkServiceProvider(provider.getId()); @@ -5539,7 +5541,7 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag _pNTrafficTypeDao.deleteTrafficTypes(physicalNetworkId); boolean success = _physicalNetworkDao.remove(physicalNetworkId); - + txn.commit(); return success; @@ -5691,7 +5693,7 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag PhysicalNetworkVO destNetwork = _physicalNetworkDao.findById(destinationPhysicalNetworkId); if (destNetwork == null) { InvalidParameterValueException ex = new InvalidParameterValueException("Destination Physical Network with specified id doesn't exist in the system"); - ex.addProxyObject(destNetwork, destinationPhysicalNetworkId, "destinationPhysicalNetworkId"); + ex.addProxyObject(destNetwork, destinationPhysicalNetworkId, "destinationPhysicalNetworkId"); throw ex; } } @@ -5933,7 +5935,7 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag } else { pNtwks = _physicalNetworkDao.listByZone(zoneId); } - + if (pNtwks.isEmpty()) { throw new InvalidParameterValueException("Unable to find physical network in zone id=" + zoneId); } @@ -6020,7 +6022,7 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag // shouldn't even come here as network is being cleaned up after all network elements are shutdown s_logger.warn("Failed to cleanup Firewall rules as a part of network id=" + networkId + " cleanup due to resourceUnavailable ", ex); } - + //revoke all network ACLs for network try { if (_networkACLMgr.revokeAllNetworkACLsForNetwork(networkId, callerUserId, caller)) { @@ -6162,7 +6164,7 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag s_logger.warn("Failed to cleanup firewall rules as a part of shutdownNetworkRules due to ", ex); success = false; } - + //revoke all Network ACLs for the network w/o applying them in the DB List networkACLs = _firewallDao.listByNetworkAndPurpose(networkId, Purpose.NetworkACL); if (s_logger.isDebugEnabled()) { @@ -6184,7 +6186,7 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag s_logger.warn("Failed to cleanup network ACLs as a part of shutdownNetworkRules due to ", ex); success = false; } - + //release all static nats for the network if (!_rulesMgr.applyStaticNatForNetwork(networkId, false, caller, true)) { s_logger.warn("Failed to disable static nats as part of shutdownNetworkRules for network id " + networkId); @@ -6416,7 +6418,7 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag return networkList.get(0); } - + @Override public String getDefaultManagementTrafficLabel(long zoneId, HypervisorType hypervisorType){ try{ @@ -6425,7 +6427,7 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag if(mgmtTraffic != null){ String label = null; switch(hypervisorType){ - case XenServer : label = mgmtTraffic.getXenNetworkLabel(); + case XenServer : label = mgmtTraffic.getXenNetworkLabel(); break; case KVM : label = mgmtTraffic.getKvmNetworkLabel(); break; @@ -6441,7 +6443,7 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag } return null; } - + @Override public String getDefaultStorageTrafficLabel(long zoneId, HypervisorType hypervisorType){ try{ @@ -6450,7 +6452,7 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag if(storageTraffic != null){ String label = null; switch(hypervisorType){ - case XenServer : label = storageTraffic.getXenNetworkLabel(); + case XenServer : label = storageTraffic.getXenNetworkLabel(); break; case KVM : label = storageTraffic.getKvmNetworkLabel(); break; @@ -6652,7 +6654,7 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag TrafficType effectiveTrafficType = network.getTrafficType(); if(hType == HypervisorType.VMware && effectiveTrafficType == TrafficType.Control) effectiveTrafficType = TrafficType.Management; - + if (effectiveTrafficType == TrafficType.Control) { return null; } @@ -6682,7 +6684,7 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag // have to remove this sanity check as VMware control network is management network // we need to retrieve traffic label information through physical network -/* +/* if (network.getTrafficType() == TrafficType.Control) { return null; } @@ -6735,10 +6737,10 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag return nsp; } - + protected PhysicalNetworkServiceProvider addDefaultVpcVirtualRouterToPhysicalNetwork(long physicalNetworkId) { - PhysicalNetworkServiceProvider nsp = addProviderToPhysicalNetwork(physicalNetworkId, + PhysicalNetworkServiceProvider nsp = addProviderToPhysicalNetwork(physicalNetworkId, Network.Provider.VPCVirtualRouter.getName(), null, null); // add instance of the provider VpcVirtualRouterElement element = (VpcVirtualRouterElement) getElementImplementingProvider(Network.Provider.VPCVirtualRouter.getName()); @@ -6752,7 +6754,7 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag protected PhysicalNetworkServiceProvider addDefaultSecurityGroupProviderToPhysicalNetwork(long physicalNetworkId) { - PhysicalNetworkServiceProvider nsp = addProviderToPhysicalNetwork(physicalNetworkId, + PhysicalNetworkServiceProvider nsp = addProviderToPhysicalNetwork(physicalNetworkId, Network.Provider.SecurityGroupProvider.getName(), null, null); return nsp; @@ -6869,17 +6871,17 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag if (enabledServices != null && !enabledServices.isEmpty()) { if (!element.canEnableIndividualServices()) { - Set requiredServices = new HashSet(); + Set requiredServices = new HashSet(); requiredServices.addAll(element.getCapabilities().keySet()); - + if (requiredServices.contains(Network.Service.Gateway)) { requiredServices.remove(Network.Service.Gateway); } - + if (requiredServices.contains(Network.Service.Firewall)) { requiredServices.remove(Network.Service.Firewall); } - + if (enabledServices.contains(Network.Service.Firewall)) { enabledServices.remove(Network.Service.Firewall); } @@ -6956,7 +6958,7 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag if (networkId == null) { networkId = userIp.getAssociatedWithNetworkId(); } - + NetworkVO network = _networksDao.findById(networkId); NetworkOfferingVO offering = _networkOfferingDao.findById(network.getNetworkOfferingId()); if (offering.getGuestType() != GuestType.Isolated) { @@ -7027,7 +7029,7 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag } } - public IpAddress assignSystemIp(long networkId, Account owner, boolean forElasticLb, boolean forElasticIp) + public IpAddress assignSystemIp(long networkId, Account owner, boolean forElasticLb, boolean forElasticIp) throws InsufficientAddressCapacityException { Network guestNetwork = getNetwork(networkId); NetworkOffering off = _configMgr.getNetworkOffering(guestNetwork.getNetworkOfferingId()); @@ -7160,7 +7162,7 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag } } catch (Exception ex) { if (s_logger.isDebugEnabled()) { - s_logger.debug("Failed to retrive the default label for management traffic:" + "zone: " + dcId + + s_logger.debug("Failed to retrive the default label for management traffic:" + "zone: " + dcId + " hypervisor: " + hypervisorType + " due to:" + ex.getMessage()); } } @@ -7182,17 +7184,17 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag return networkList.get(0); } - + @Override public List listNetworksByVpc(long vpcId) { return _networksDao.listByVpc(vpcId); } - + @Override public String getDefaultNetworkDomain() { return _networkDomain; } - + @Override public List getNtwkOffDistinctProviders(long ntkwOffId) { List providerNames = _ntwkOfferingSrvcDao.getDistinctProviders(ntkwOffId); @@ -7211,7 +7213,7 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag } return false; } - + @Override @ActionEvent(eventType = EventTypes.EVENT_NET_IP_ASSIGN, eventDescription = "associating Ip", async = true) public IpAddress associateIPToNetwork(long ipId, long networkId) throws InsufficientAddressCapacityException, @@ -7227,20 +7229,20 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag " to VPC.Specify vpcId to associate ip address to VPC"); } return associateIPToGuestNetwork(ipId, networkId, true); - + } - + @Override @DB - public Network createPrivateNetwork(String networkName, String displayText, long physicalNetworkId, - String vlan, String startIp, String endIp, String gateway, String netmask, long networkOwnerId, Long vpcId) + public Network createPrivateNetwork(String networkName, String displayText, long physicalNetworkId, + String vlan, String startIp, String endIp, String gateway, String netmask, long networkOwnerId, Long vpcId) throws ResourceAllocationException, ConcurrentOperationException, InsufficientCapacityException { - + Account owner = _accountMgr.getAccount(networkOwnerId); - + // Get system network offeirng NetworkOfferingVO ntwkOff = _systemNetworks.get(NetworkOffering.SystemPrivateGatewayNetworkOffering); - + // Validate physical network PhysicalNetwork pNtwk = _physicalNetworkDao.findById(physicalNetworkId); if (pNtwk == null) { @@ -7249,7 +7251,7 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag ex.addProxyObject("physical_network", physicalNetworkId, "physicalNetworkId"); throw ex; } - + // VALIDATE IP INFO // if end ip is not specified, default it to startIp if (!NetUtils.isValidIp(startIp)) { @@ -7270,64 +7272,64 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag } cidr = NetUtils.ipAndNetMaskToCidr(gateway, netmask); - - + + Transaction txn = Transaction.currentTxn(); txn.start(); - + //lock datacenter as we need to get mac address seq from there DataCenterVO dc = _dcDao.lockRow(pNtwk.getDataCenterId(), true); - + //check if we need to create guest network Network privateNetwork = _networksDao.getPrivateNetwork(BroadcastDomainType.Vlan.toUri(vlan).toString(), cidr, networkOwnerId, pNtwk.getDataCenterId()); if (privateNetwork == null) { //create Guest network - privateNetwork = createGuestNetwork(ntwkOff.getId(), networkName, displayText, gateway, cidr, vlan, + privateNetwork = createGuestNetwork(ntwkOff.getId(), networkName, displayText, gateway, cidr, vlan, null, owner, null, pNtwk, pNtwk.getDataCenterId(), ACLType.Account, null, null); s_logger.debug("Created private network " + privateNetwork); } else { s_logger.debug("Private network already exists: " + privateNetwork); } - + //add entry to private_ip_address table PrivateIpVO privateIp = _privateIpDao.findByIpAndSourceNetworkId(privateNetwork.getId(), startIp); if (privateIp != null) { throw new InvalidParameterValueException("Private ip address " + startIp + " already used for private gateway" + " in zone " + _configMgr.getZone(pNtwk.getDataCenterId()).getName()); } - + Long mac = dc.getMacAddress(); Long nextMac = mac + 1; dc.setMacAddress(nextMac); privateIp = new PrivateIpVO(startIp, privateNetwork.getId(), nextMac, vpcId); _privateIpDao.persist(privateIp); - + _dcDao.update(dc.getId(), dc); - + txn.commit(); s_logger.debug("Private network " + privateNetwork + " is created"); return privateNetwork; } - + @Override public boolean setupDns(Network network, Provider provider) { boolean dnsProvided = isProviderSupportServiceInNetwork(network.getId(), Service.Dns, provider ); - boolean dhcpProvided =isProviderSupportServiceInNetwork(network.getId(), Service.Dhcp, + boolean dhcpProvided =isProviderSupportServiceInNetwork(network.getId(), Service.Dhcp, provider); - + boolean setupDns = dnsProvided || dhcpProvided; return setupDns; } - + @Override public List getPhysicalNtwksSupportingTrafficType(long zoneId, TrafficType trafficType) { - + List pNtwks = _physicalNetworkDao.listByZone(zoneId); - + Iterator it = pNtwks.iterator(); while (it.hasNext()) { PhysicalNetwork pNtwk = it.next(); @@ -7337,7 +7339,7 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag } return pNtwks; } - + @Override public boolean isPrivateGateway(Nic guestNic) { Network network = getNetwork(guestNic.getNetworkId()); @@ -7346,41 +7348,41 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag } return true; } - + @Override public NicProfile createNicForVm(Network network, NicProfile requested, ReservationContext context, VirtualMachineProfileImpl vmProfile, boolean prepare) - throws InsufficientVirtualNetworkCapcityException, InsufficientAddressCapacityException, + throws InsufficientVirtualNetworkCapcityException, InsufficientAddressCapacityException, ConcurrentOperationException, InsufficientCapacityException, ResourceUnavailableException { - + VirtualMachine vm = vmProfile.getVirtualMachine(); NetworkVO networkVO = _networksDao.findById(network.getId()); DataCenter dc = _configMgr.getZone(network.getDataCenterId()); - Host host = _hostDao.findById(vm.getHostId()); + Host host = _hostDao.findById(vm.getHostId()); DeployDestination dest = new DeployDestination(dc, null, null, host); - + NicProfile nic = getNicProfileForVm(network, requested, vm); - + //1) allocate nic (if needed) if (nic == null) { int deviceId = _nicDao.countNics(vm.getId()); - - nic = allocateNic(requested, network, false, + + nic = allocateNic(requested, network, false, deviceId, vmProfile).first(); - + if (nic == null) { throw new CloudRuntimeException("Failed to allocate nic for vm " + vm + " in network " + network); } - - s_logger.debug("Nic is allocated successfully for vm " + vm + " in network " + network); + + s_logger.debug("Nic is allocated successfully for vm " + vm + " in network " + network); } - + //2) prepare nic if (prepare) { nic = prepareNic(vmProfile, dest, context, nic.getId(), networkVO); s_logger.debug("Nic is prepared successfully for vm " + vm + " in network " + network); } - + return nic; } @@ -7403,7 +7405,7 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag } return nic; } - + @Override public int getNetworkLockTimeout() { diff --git a/server/src/com/cloud/network/as/AutoScaleManagerImpl.java b/server/src/com/cloud/network/as/AutoScaleManagerImpl.java index 57509ffea12..d52657ae816 100644 --- a/server/src/com/cloud/network/as/AutoScaleManagerImpl.java +++ b/server/src/com/cloud/network/as/AutoScaleManagerImpl.java @@ -77,7 +77,6 @@ import com.cloud.user.User; import com.cloud.user.UserContext; import com.cloud.user.dao.AccountDao; import com.cloud.user.dao.UserDao; -import com.cloud.utils.IdentityProxy; import com.cloud.utils.Pair; import com.cloud.utils.Ternary; import com.cloud.utils.component.Inject; @@ -562,8 +561,8 @@ public class AutoScaleManagerImpl implements AutoScaleManager, AutoScaleSe Account caller = UserContext.current().getCaller(); Account owner = _accountDao.findActiveAccount(accountName, domainId); if (owner == null) { - List idList = new ArrayList(); - idList.add(new IdentityProxy("domain", domainId, "domainId")); + List idList = new ArrayList(); + idList.add(ApiDBUtils.findDomainById(domainId).getUuid()); throw new InvalidParameterValueException("Unable to find account " + accountName + " in domain with specifed domainId"); } _accountMgr.checkAccess(caller, null, false, owner); diff --git a/utils/src/com/cloud/utils/exception/RuntimeCloudException.java b/utils/src/com/cloud/utils/exception/RuntimeCloudException.java index f2e9845de8c..233469678df 100644 --- a/utils/src/com/cloud/utils/exception/RuntimeCloudException.java +++ b/utils/src/com/cloud/utils/exception/RuntimeCloudException.java @@ -23,53 +23,53 @@ import java.util.ArrayList; /** * by the API response serializer. Any exceptions that are thrown by * class, which extends Exception instead of RuntimeException like this - * class does. + * class does. */ public class RuntimeCloudException extends RuntimeException { - + // This holds a list of uuids and their names. Add uuid:fieldname pairs - protected ArrayList idList = new ArrayList(); - + protected ArrayList idList = new ArrayList(); + protected int csErrorCode; - - public void addProxyObject(String tableName, Long id, String idFieldName) { - idList.add(new IdentityProxy(tableName, id, idFieldName)); + + public void addProxyObject(String uuid) { + idList.add(uuid); return; } - + public RuntimeCloudException(String message) { super(message); setCSErrorCode(CSExceptionErrorCode.getCSErrCode(this.getClass().getName())); } - + public RuntimeCloudException(String message, Throwable cause) { super(message, cause); setCSErrorCode(CSExceptionErrorCode.getCSErrCode(this.getClass().getName())); } - + public void addProxyObject(Object voObj, Long id, String idFieldName) { // Get the VO object's table name. String tablename = AnnotationHelper.getTableName(voObj); if (tablename != null) { - addProxyObject(tablename, id, idFieldName); + addProxyObject(tablename, id, idFieldName); } return; } - + public RuntimeCloudException() { super(); setCSErrorCode(CSExceptionErrorCode.getCSErrCode(this.getClass().getName())); } - - public ArrayList getIdProxyList() { + + public ArrayList getIdProxyList() { return idList; } - + public void setCSErrorCode(int cserrcode) { this.csErrorCode = cserrcode; } - + public int getCSErrorCode() { return this.csErrorCode; } From d9718e82f28c2f0fb4cf2bb344b38c92db2e6baf Mon Sep 17 00:00:00 2001 From: Fang Wang Date: Thu, 20 Dec 2012 01:36:10 -0800 Subject: [PATCH 157/421] api: Annotate some systemvm commands Signed-off-by: Rohit Yadav --- .../command/admin/systemvm/DestroySystemVmCmd.java | 5 ++--- .../command/admin/systemvm/MigrateSystemVMCmd.java | 11 ++++++----- .../api/command/admin/systemvm/RebootSystemVmCmd.java | 5 ++--- .../api/command/admin/systemvm/StartSystemVMCmd.java | 4 ++-- .../api/command/admin/systemvm/StopSystemVmCmd.java | 5 ++--- .../command/admin/systemvm/UpgradeSystemVMCmd.java | 11 ++++++----- .../cloudstack/api/response/StoragePoolResponse.java | 3 +++ 7 files changed, 23 insertions(+), 21 deletions(-) diff --git a/api/src/org/apache/cloudstack/api/command/admin/systemvm/DestroySystemVmCmd.java b/api/src/org/apache/cloudstack/api/command/admin/systemvm/DestroySystemVmCmd.java index 816cbe418d0..f2462155c9c 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/systemvm/DestroySystemVmCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/systemvm/DestroySystemVmCmd.java @@ -21,7 +21,6 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; @@ -38,8 +37,8 @@ public class DestroySystemVmCmd extends BaseAsyncCmd { private static final String s_name = "destroysystemvmresponse"; - @IdentityMapper(entityTableName="vm_instance") - @Parameter(name=ApiConstants.ID, type=CommandType.LONG, required=true, description="The ID of the system virtual machine") + @Parameter(name=ApiConstants.ID, type=CommandType.UUID, entityType=SystemVmResponse.class, + required=true, description="The ID of the system virtual machine") private Long id; public Long getId() { diff --git a/api/src/org/apache/cloudstack/api/command/admin/systemvm/MigrateSystemVMCmd.java b/api/src/org/apache/cloudstack/api/command/admin/systemvm/MigrateSystemVMCmd.java index 1d20496a376..0406c773a44 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/systemvm/MigrateSystemVMCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/systemvm/MigrateSystemVMCmd.java @@ -21,10 +21,11 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; +import org.apache.cloudstack.api.response.HostResponse; +import org.apache.cloudstack.api.response.SystemVmResponse; import org.apache.cloudstack.api.response.SystemVmInstanceResponse; import com.cloud.event.EventTypes; import com.cloud.exception.ConcurrentOperationException; @@ -47,12 +48,12 @@ public class MigrateSystemVMCmd extends BaseAsyncCmd { //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - @IdentityMapper(entityTableName="host") - @Parameter(name=ApiConstants.HOST_ID, type=CommandType.LONG, required=true, description="destination Host ID to migrate VM to") + @Parameter(name=ApiConstants.HOST_ID, type=CommandType.UUID, entityType=HostResponse.class, + required=true, description="destination Host ID to migrate VM to") private Long hostId; - @IdentityMapper(entityTableName="vm_instance") - @Parameter(name=ApiConstants.VIRTUAL_MACHINE_ID, type=CommandType.LONG, required=true, description="the ID of the virtual machine") + @Parameter(name=ApiConstants.VIRTUAL_MACHINE_ID, type=CommandType.UUID, entityType=SystemVmResponse.class, + required=true, description="the ID of the virtual machine") private Long virtualMachineId; diff --git a/api/src/org/apache/cloudstack/api/command/admin/systemvm/RebootSystemVmCmd.java b/api/src/org/apache/cloudstack/api/command/admin/systemvm/RebootSystemVmCmd.java index 97015985fd2..edfca8244ca 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/systemvm/RebootSystemVmCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/systemvm/RebootSystemVmCmd.java @@ -21,7 +21,6 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; @@ -42,8 +41,8 @@ public class RebootSystemVmCmd extends BaseAsyncCmd { //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - @IdentityMapper(entityTableName="vm_instance") - @Parameter(name=ApiConstants.ID, type=CommandType.LONG, required=true, description="The ID of the system virtual machine") + @Parameter(name=ApiConstants.ID, type=CommandType.UUID, entityType=SystemVmResponse.class, + required=true, description="The ID of the system virtual machine") private Long id; ///////////////////////////////////////////////////// diff --git a/api/src/org/apache/cloudstack/api/command/admin/systemvm/StartSystemVMCmd.java b/api/src/org/apache/cloudstack/api/command/admin/systemvm/StartSystemVMCmd.java index 9414c641981..fccd4a77847 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/systemvm/StartSystemVMCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/systemvm/StartSystemVMCmd.java @@ -42,8 +42,8 @@ public class StartSystemVMCmd extends BaseAsyncCmd { //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - @IdentityMapper(entityTableName="vm_instance") - @Parameter(name=ApiConstants.ID, type=CommandType.LONG, required=true, description="The ID of the system virtual machine") + @Parameter(name=ApiConstants.ID, type=CommandType.UUID, entityType=SystemVmResponse.class, + required=true, description="The ID of the system virtual machine") private Long id; ///////////////////////////////////////////////////// diff --git a/api/src/org/apache/cloudstack/api/command/admin/systemvm/StopSystemVmCmd.java b/api/src/org/apache/cloudstack/api/command/admin/systemvm/StopSystemVmCmd.java index 654ba4fc256..60e25430258 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/systemvm/StopSystemVmCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/systemvm/StopSystemVmCmd.java @@ -21,7 +21,6 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; @@ -44,8 +43,8 @@ public class StopSystemVmCmd extends BaseAsyncCmd { //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - @IdentityMapper(entityTableName="vm_instance") - @Parameter(name=ApiConstants.ID, type=CommandType.LONG, required=true, description="The ID of the system virtual machine") + @Parameter(name=ApiConstants.ID, type=CommandType.UUID, entityType=SystemVmResponse.class, + required=true, description="The ID of the system virtual machine") private Long id; @Parameter(name=ApiConstants.FORCED, type=CommandType.BOOLEAN, required=false, description="Force stop the VM. The caller knows the VM is stopped.") diff --git a/api/src/org/apache/cloudstack/api/command/admin/systemvm/UpgradeSystemVMCmd.java b/api/src/org/apache/cloudstack/api/command/admin/systemvm/UpgradeSystemVMCmd.java index 3383c562a3e..d530c1476c9 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/systemvm/UpgradeSystemVMCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/systemvm/UpgradeSystemVMCmd.java @@ -16,7 +16,9 @@ // under the License. package org.apache.cloudstack.api.command.admin.systemvm; +import com.cloud.offering.DiskOffering; import org.apache.cloudstack.api.command.user.vm.UpgradeVMCmd; +import org.apache.cloudstack.api.response.DiskOfferingResponse; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; @@ -43,13 +45,12 @@ public class UpgradeSystemVMCmd extends BaseCmd { //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - @IdentityMapper(entityTableName="vm_instance") - @Parameter(name=ApiConstants.ID, type=CommandType.LONG, required=true, description="The ID of the system vm") + @Parameter(name=ApiConstants.ID, type=CommandType.UUID, entityType=SystemVmResponse.class, + required=true, description="The ID of the system vm") private Long id; - @IdentityMapper(entityTableName="disk_offering") - @Parameter(name=ApiConstants.SERVICE_OFFERING_ID, type=CommandType.LONG, required=true, - description="the service offering ID to apply to the system vm") + @Parameter(name=ApiConstants.SERVICE_OFFERING_ID, type=CommandType.UUID, entityType=DiskOfferingResponse.class, + required=true, description="the service offering ID to apply to the system vm") private Long serviceOfferingId; ///////////////////////////////////////////////////// diff --git a/api/src/org/apache/cloudstack/api/response/StoragePoolResponse.java b/api/src/org/apache/cloudstack/api/response/StoragePoolResponse.java index 0c05236ca09..12676687873 100644 --- a/api/src/org/apache/cloudstack/api/response/StoragePoolResponse.java +++ b/api/src/org/apache/cloudstack/api/response/StoragePoolResponse.java @@ -18,12 +18,15 @@ package org.apache.cloudstack.api.response; import java.util.Date; +import com.cloud.storage.StoragePool; import org.apache.cloudstack.api.ApiConstants; import com.cloud.serializer.Param; import com.cloud.storage.StoragePoolStatus; import com.google.gson.annotations.SerializedName; import org.apache.cloudstack.api.BaseResponse; +import org.apache.cloudstack.api.Entity; +@Entity(value=StoragePool.class) public class StoragePoolResponse extends BaseResponse { @SerializedName("id") @Param(description="the ID of the storage pool") private String id; From 5548d08fb6eec93f11e616abc862ef52746d55b7 Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Thu, 20 Dec 2012 01:36:53 -0800 Subject: [PATCH 158/421] api: Annotate missing systemvm api, annotate SystemVmResponse Signed-off-by: Rohit Yadav --- .../admin/systemvm/ListSystemVMsCmd.java | 25 +++++++++++-------- .../api/response/SystemVmResponse.java | 3 +++ 2 files changed, 17 insertions(+), 11 deletions(-) diff --git a/api/src/org/apache/cloudstack/api/command/admin/systemvm/ListSystemVMsCmd.java b/api/src/org/apache/cloudstack/api/command/admin/systemvm/ListSystemVMsCmd.java index 279e1a4697c..f81ee062dd1 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/systemvm/ListSystemVMsCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/systemvm/ListSystemVMsCmd.java @@ -23,11 +23,14 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseListCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.response.HostResponse; import org.apache.cloudstack.api.response.ListResponse; +import org.apache.cloudstack.api.response.PodResponse; +import org.apache.cloudstack.api.response.StoragePoolResponse; import org.apache.cloudstack.api.response.SystemVmResponse; +import org.apache.cloudstack.api.response.ZoneResponse; import com.cloud.async.AsyncJob; import com.cloud.utils.Pair; import com.cloud.vm.VirtualMachine; @@ -42,19 +45,19 @@ public class ListSystemVMsCmd extends BaseListCmd { //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - @IdentityMapper(entityTableName="host") - @Parameter(name=ApiConstants.HOST_ID, type=CommandType.LONG, description="the host ID of the system VM") + @Parameter(name=ApiConstants.HOST_ID, type=CommandType.UUID, entityType=HostResponse.class, + description="the host ID of the system VM") private Long hostId; - @IdentityMapper(entityTableName="vm_instance") - @Parameter(name=ApiConstants.ID, type=CommandType.LONG, description="the ID of the system VM") + @Parameter(name=ApiConstants.ID, type=CommandType.UUID, entityType=SystemVmResponse.class, + description="the ID of the system VM") private Long id; @Parameter(name=ApiConstants.NAME, type=CommandType.STRING, description="the name of the system VM") private String systemVmName; - @IdentityMapper(entityTableName="host_pod_ref") - @Parameter(name=ApiConstants.POD_ID, type=CommandType.LONG, description="the Pod ID of the system VM") + @Parameter(name=ApiConstants.POD_ID, type=CommandType.UUID, entityType=PodResponse.class, + description="the Pod ID of the system VM") private Long podId; @Parameter(name=ApiConstants.STATE, type=CommandType.STRING, description="the state of the system VM") @@ -63,12 +66,12 @@ public class ListSystemVMsCmd extends BaseListCmd { @Parameter(name=ApiConstants.SYSTEM_VM_TYPE, type=CommandType.STRING, description="the system VM type. Possible types are \"consoleproxy\" and \"secondarystoragevm\".") private String systemVmType; - @IdentityMapper(entityTableName="data_center") - @Parameter(name=ApiConstants.ZONE_ID, type=CommandType.LONG, description="the Zone ID of the system VM") + @Parameter(name=ApiConstants.ZONE_ID, type=CommandType.UUID, entityType=ZoneResponse.class, + description="the Zone ID of the system VM") private Long zoneId; - @IdentityMapper(entityTableName="storage_pool") - @Parameter(name=ApiConstants.STORAGE_ID, type=CommandType.LONG, description="the storage ID where vm's volumes belong to", since="3.0.1") + @Parameter(name=ApiConstants.STORAGE_ID, type=CommandType.UUID, entityType=StoragePoolResponse.class, + description="the storage ID where vm's volumes belong to", since="3.0.1") private Long storageId; ///////////////////////////////////////////////////// diff --git a/api/src/org/apache/cloudstack/api/response/SystemVmResponse.java b/api/src/org/apache/cloudstack/api/response/SystemVmResponse.java index 1fa9eb46382..6a8e79d92cd 100644 --- a/api/src/org/apache/cloudstack/api/response/SystemVmResponse.java +++ b/api/src/org/apache/cloudstack/api/response/SystemVmResponse.java @@ -18,11 +18,14 @@ package org.apache.cloudstack.api.response; import java.util.Date; +import com.cloud.vm.VirtualMachine; import org.apache.cloudstack.api.ApiConstants; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; import org.apache.cloudstack.api.BaseResponse; +import org.apache.cloudstack.api.Entity; +@Entity(value=VirtualMachine.class) public class SystemVmResponse extends BaseResponse { @SerializedName("id") @Param(description="the ID of the system VM") private String id; From b14b39a69fa295d1d20484170b95b97fe310af28 Mon Sep 17 00:00:00 2001 From: Min Chen Date: Thu, 20 Dec 2012 16:52:52 -0800 Subject: [PATCH 159/421] Remove IdentityProxy from BaseResponse, ExtractResponse. Now IdentityProxy is only referenced in CreateCmdResponse, which involves some async job logic change. Since it is not impacting list performance, will leave it there for now. Signed-off-by: Min Chen --- api/src/com/cloud/storage/Upload.java | 2 + .../apache/cloudstack/api/BaseAsyncCmd.java | 3 +- .../cloudstack/api/BaseAsyncCreateCmd.java | 5 +- .../org/apache/cloudstack/api/BaseCmd.java | 5 +- .../apache/cloudstack/api/BaseResponse.java | 19 +-- .../apache/cloudstack/api/ResponseObject.java | 24 +--- .../command/user/volume/CreateVolumeCmd.java | 2 +- .../command/user/volume/ExtractVolumeCmd.java | 16 ++- .../api/response/AccountResponse.java | 6 + .../api/response/AutoScalePolicyResponse.java | 6 + .../response/AutoScaleVmGroupResponse.java | 7 + .../response/AutoScaleVmProfileResponse.java | 7 + .../api/response/ConditionResponse.java | 6 + .../api/response/CounterResponse.java | 6 + .../api/response/DomainRouterResponse.java | 6 +- .../api/response/ExtractResponse.java | 54 ++++--- .../api/response/FirewallRuleResponse.java | 6 + .../cloudstack/api/response/HostResponse.java | 5 + .../api/response/IPAddressResponse.java | 5 + .../api/response/IsoVmResponse.java | 5 + .../cloudstack/api/response/NicResponse.java | 4 - .../api/response/PhysicalNetworkResponse.java | 7 + .../api/response/PrivateGatewayResponse.java | 5 + .../api/response/SecurityGroupResponse.java | 6 +- .../api/response/SnapshotResponse.java | 5 + .../api/response/StaticRouteResponse.java | 6 + .../api/response/StoragePoolResponse.java | 6 + .../api/response/SystemVmResponse.java | 12 +- .../api/response/TemplateResponse.java | 5 + .../api/response/TrafficTypeResponse.java | 6 + .../cloudstack/api/response/UserResponse.java | 6 + .../api/response/UserVmResponse.java | 4 +- .../api/response/VolumeResponse.java | 5 + .../apache/cloudstack/query/QueryService.java | 2 +- core/src/com/cloud/storage/UploadVO.java | 44 +++--- server/src/com/cloud/api/ApiDBUtils.java | 129 +++++++++++++++++ .../src/com/cloud/api/ApiResponseHelper.java | 133 ++---------------- server/src/com/cloud/api/ApiServer.java | 27 ++-- .../com/cloud/api/query/QueryManagerImpl.java | 6 +- .../cloud/server/ManagementServerImpl.java | 6 +- .../cloud/storage/upload/UploadListener.java | 118 +++++++++------- setup/db/create-schema.sql | 1 + 42 files changed, 443 insertions(+), 295 deletions(-) diff --git a/api/src/com/cloud/storage/Upload.java b/api/src/com/cloud/storage/Upload.java index d73a9d8604c..d67c15f946e 100755 --- a/api/src/com/cloud/storage/Upload.java +++ b/api/src/com/cloud/storage/Upload.java @@ -36,6 +36,8 @@ public interface Upload { long getId(); + String getUuid(); + Date getCreated(); Date getLastUpdated(); diff --git a/api/src/org/apache/cloudstack/api/BaseAsyncCmd.java b/api/src/org/apache/cloudstack/api/BaseAsyncCmd.java index 2bc8a6e8002..fd67ed89675 100644 --- a/api/src/org/apache/cloudstack/api/BaseAsyncCmd.java +++ b/api/src/org/apache/cloudstack/api/BaseAsyncCmd.java @@ -57,7 +57,8 @@ public abstract class BaseAsyncCmd extends BaseCmd { public ResponseObject getResponse(long jobId) { AsyncJobResponse response = new AsyncJobResponse(); - response.setJobId(jobId); + AsyncJob job = _entityMgr.findById(AsyncJob.class, jobId); + response.setJobId(job.getUuid()); response.setResponseName(getCommandName()); return response; } diff --git a/api/src/org/apache/cloudstack/api/BaseAsyncCreateCmd.java b/api/src/org/apache/cloudstack/api/BaseAsyncCreateCmd.java index 63cab8be63b..ad9f4c6b31f 100644 --- a/api/src/org/apache/cloudstack/api/BaseAsyncCreateCmd.java +++ b/api/src/org/apache/cloudstack/api/BaseAsyncCreateCmd.java @@ -17,6 +17,8 @@ package org.apache.cloudstack.api; import org.apache.cloudstack.api.response.CreateCmdResponse; + +import com.cloud.async.AsyncJob; import com.cloud.exception.ResourceAllocationException; public abstract class BaseAsyncCreateCmd extends BaseAsyncCmd { @@ -37,7 +39,8 @@ public abstract class BaseAsyncCreateCmd extends BaseAsyncCmd { public String getResponse(long jobId, long objectId, String objectEntityTable) { CreateCmdResponse response = new CreateCmdResponse(); - response.setJobId(jobId); + AsyncJob job = _entityMgr.findById(AsyncJob.class, jobId); + response.setJobId(job.getUuid()); response.setId(objectId); response.setIdEntityTable(objectEntityTable); response.setResponseName(getCommandName()); diff --git a/api/src/org/apache/cloudstack/api/BaseCmd.java b/api/src/org/apache/cloudstack/api/BaseCmd.java index d89f5ea1b3c..d964e70b84f 100644 --- a/api/src/org/apache/cloudstack/api/BaseCmd.java +++ b/api/src/org/apache/cloudstack/api/BaseCmd.java @@ -512,8 +512,9 @@ public abstract class BaseCmd { throw new PermissionDeniedException("Can't add resources to the account id=" + account.getId() + " in state=" + account.getState() + " as it's no longer active"); } } else { - List idList = new ArrayList(); - idList.add(new IdentityProxy("domain", domainId, "domainId")); + // idList is not used anywhere, so removed it now + //List idList = new ArrayList(); + //idList.add(new IdentityProxy("domain", domainId, "domainId")); throw new InvalidParameterValueException("Unable to find account by name " + accountName + " in domain with specified id"); } } diff --git a/api/src/org/apache/cloudstack/api/BaseResponse.java b/api/src/org/apache/cloudstack/api/BaseResponse.java index 06171d9d944..a3fe6b0ee01 100644 --- a/api/src/org/apache/cloudstack/api/BaseResponse.java +++ b/api/src/org/apache/cloudstack/api/BaseResponse.java @@ -46,18 +46,12 @@ 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(){ + public String getObjectId() { return null; } // For use by list commands with pending async jobs - //TODO: To be replaced by jobUuid after all response refactoring - protected IdentityProxy jobId = new IdentityProxy("async_job"); + protected String jobId; @SerializedName(ApiConstants.JOB_ID) @Param(description="the UUID of the latest async job acting on this object") protected String jobUuid; @@ -65,13 +59,12 @@ public abstract class BaseResponse implements ResponseObject { @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(); + public String getJobId() { + return jobId; } - public void setJobId(Long jobId) { - this.jobId.setValue(jobId); + public void setJobId(String jobId) { + this.jobId = jobId; } public String getJobUuid() { diff --git a/api/src/org/apache/cloudstack/api/ResponseObject.java b/api/src/org/apache/cloudstack/api/ResponseObject.java index fd327fab09a..c8bd45727c9 100644 --- a/api/src/org/apache/cloudstack/api/ResponseObject.java +++ b/api/src/org/apache/cloudstack/api/ResponseObject.java @@ -45,40 +45,24 @@ public interface ResponseObject { void setObjectName(String name); /** - * Returns the object Id + * Returns the object UUid */ - Long getObjectId(); - - /** - * Returns the object uuid. To replace getObjectId() later. - */ - String getObjectUuid(); + String getObjectId(); /** * Returns the job id * * @return */ - Long getJobId(); + String getJobId(); - /** - * Return the async job uuid. To replace getJobId() later. - * @return - */ - String getJobUuid(); /** * Sets the job id * * @param jobId */ - void setJobId(Long jobId); - - /** - * Set the job uuid. To replace setJobId() later. - * @param jobUuid job uuid - */ - void setJobUuid(String jobUuid); + void setJobId(String jobId); /** * Returns the job status diff --git a/api/src/org/apache/cloudstack/api/command/user/volume/CreateVolumeCmd.java b/api/src/org/apache/cloudstack/api/command/user/volume/CreateVolumeCmd.java index ca886396656..a82c36343c1 100644 --- a/api/src/org/apache/cloudstack/api/command/user/volume/CreateVolumeCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/volume/CreateVolumeCmd.java @@ -167,7 +167,7 @@ public class CreateVolumeCmd extends BaseAsyncCreateCmd { VolumeResponse response = _responseGenerator.createVolumeResponse(volume); //FIXME - have to be moved to ApiResponseHelper if (getSnapshotId() != null) { - Snapshot snap = _queryService.findSnapshotById(getSnapshotId()); + Snapshot snap = _entityMgr.findById(Snapshot.class, getSnapshotId()); if (snap != null) { response.setSnapshotId(snap.getUuid()); // if the volume was // created from a diff --git a/api/src/org/apache/cloudstack/api/command/user/volume/ExtractVolumeCmd.java b/api/src/org/apache/cloudstack/api/command/user/volume/ExtractVolumeCmd.java index 787e096f26a..39dcfe66e0d 100644 --- a/api/src/org/apache/cloudstack/api/command/user/volume/ExtractVolumeCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/volume/ExtractVolumeCmd.java @@ -133,15 +133,17 @@ public class ExtractVolumeCmd extends BaseAsyncCmd { ExtractResponse response = new ExtractResponse(); response.setResponseName(getCommandName()); response.setObjectName("volume"); - response.setIdentityTableName("volumes"); - response.setId(id); - response.setName(_entityMgr.findById(Volume.class, id).getName()); - response.setZoneId(zoneId); - response.setZoneName(_entityMgr.findById(DataCenter.class, zoneId).getName()); + Volume vol = _entityMgr.findById(Volume.class, id); + response.setId(vol.getUuid()); + response.setName(vol.getName()); + DataCenter zone = _entityMgr.findById(DataCenter.class, id); + response.setZoneId(zone.getUuid()); + response.setZoneName(zone.getName()); response.setMode(mode); - response.setUploadId(uploadId); + response.setUploadId(uploadInfo.getUuid()); response.setState(uploadInfo.getUploadState().toString()); - response.setAccountId(getEntityOwnerId()); + Account account = _entityMgr.findById(Account.class, getEntityOwnerId()); + response.setAccountId(account.getUuid()); response.setUrl(uploadInfo.getUploadUrl()); this.setResponseObject(response); } else { diff --git a/api/src/org/apache/cloudstack/api/response/AccountResponse.java b/api/src/org/apache/cloudstack/api/response/AccountResponse.java index dcb9142f2e8..2f186fb4032 100644 --- a/api/src/org/apache/cloudstack/api/response/AccountResponse.java +++ b/api/src/org/apache/cloudstack/api/response/AccountResponse.java @@ -149,6 +149,12 @@ public class AccountResponse extends BaseResponse { @SerializedName(ApiConstants.ACCOUNT_DETAILS) @Param(description="details for the account") private Map details; + + @Override + public String getObjectId() { + return this.id; + } + public void setId(String id) { this.id = id; } diff --git a/api/src/org/apache/cloudstack/api/response/AutoScalePolicyResponse.java b/api/src/org/apache/cloudstack/api/response/AutoScalePolicyResponse.java index b1331394f58..3be8a425f0d 100644 --- a/api/src/org/apache/cloudstack/api/response/AutoScalePolicyResponse.java +++ b/api/src/org/apache/cloudstack/api/response/AutoScalePolicyResponse.java @@ -60,6 +60,12 @@ public class AutoScalePolicyResponse extends BaseResponse implements ControlledE @SerializedName(ApiConstants.DOMAIN) @Param(description="the domain name of the autoscale policy") private String domainName; + + @Override + public String getObjectId() { + return this.id; + } + public void setId(String id) { this.id = id; } diff --git a/api/src/org/apache/cloudstack/api/response/AutoScaleVmGroupResponse.java b/api/src/org/apache/cloudstack/api/response/AutoScaleVmGroupResponse.java index a4f3da6899c..125aa9bf9e1 100644 --- a/api/src/org/apache/cloudstack/api/response/AutoScaleVmGroupResponse.java +++ b/api/src/org/apache/cloudstack/api/response/AutoScaleVmGroupResponse.java @@ -81,6 +81,13 @@ public class AutoScaleVmGroupResponse extends BaseResponse implements Controlled } + + @Override + public String getObjectId() { + return this.id; + } + + public void setId(String id) { this.id = id; } diff --git a/api/src/org/apache/cloudstack/api/response/AutoScaleVmProfileResponse.java b/api/src/org/apache/cloudstack/api/response/AutoScaleVmProfileResponse.java index 0041be91d66..f5ed4b1bdba 100644 --- a/api/src/org/apache/cloudstack/api/response/AutoScaleVmProfileResponse.java +++ b/api/src/org/apache/cloudstack/api/response/AutoScaleVmProfileResponse.java @@ -92,6 +92,13 @@ public class AutoScaleVmProfileResponse extends BaseResponse implements Controll } + + @Override + public String getObjectId() { + return this.id; + } + + public void setId(String id) { this.id = id; } diff --git a/api/src/org/apache/cloudstack/api/response/ConditionResponse.java b/api/src/org/apache/cloudstack/api/response/ConditionResponse.java index c90e78a3534..168ba5c90c8 100644 --- a/api/src/org/apache/cloudstack/api/response/ConditionResponse.java +++ b/api/src/org/apache/cloudstack/api/response/ConditionResponse.java @@ -70,10 +70,16 @@ public class ConditionResponse extends BaseResponse implements ControlledEntityR // ///////////////// Setters /////////////////////// // /////////////////////////////////////////////////// + public void setId(String id) { this.id = id; } + @Override + public String getObjectId() { + return this.id; + } + public void setThreshold(long threshold) { this.threshold = threshold; } diff --git a/api/src/org/apache/cloudstack/api/response/CounterResponse.java b/api/src/org/apache/cloudstack/api/response/CounterResponse.java index 1d13d68fdf6..6afc0dea40c 100644 --- a/api/src/org/apache/cloudstack/api/response/CounterResponse.java +++ b/api/src/org/apache/cloudstack/api/response/CounterResponse.java @@ -48,6 +48,12 @@ public class CounterResponse extends BaseResponse { @Param(description = "zone id of counter") private String zoneId; + + @Override + public String getObjectId() { + return this.id; + } + public void setId(String id) { this.id = id; } diff --git a/api/src/org/apache/cloudstack/api/response/DomainRouterResponse.java b/api/src/org/apache/cloudstack/api/response/DomainRouterResponse.java index 7db014e109a..bd44f2614f2 100644 --- a/api/src/org/apache/cloudstack/api/response/DomainRouterResponse.java +++ b/api/src/org/apache/cloudstack/api/response/DomainRouterResponse.java @@ -154,11 +154,15 @@ public class DomainRouterResponse extends BaseResponse implements ControlledView nics = new HashSet(); } + + @Override - public String getObjectUuid() { + public String getObjectId() { return this.getId(); } + + public String getId() { return id; } diff --git a/api/src/org/apache/cloudstack/api/response/ExtractResponse.java b/api/src/org/apache/cloudstack/api/response/ExtractResponse.java index ac5cc3d3e79..5d415e94349 100644 --- a/api/src/org/apache/cloudstack/api/response/ExtractResponse.java +++ b/api/src/org/apache/cloudstack/api/response/ExtractResponse.java @@ -19,20 +19,19 @@ package org.apache.cloudstack.api.response; import java.util.Date; import org.apache.cloudstack.api.ApiConstants; -import com.cloud.utils.IdentityProxy; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; import org.apache.cloudstack.api.BaseResponse; public class ExtractResponse extends BaseResponse { @SerializedName(ApiConstants.ID) @Param(description="the id of extracted object") - private IdentityProxy id = new IdentityProxy("vm_template"); + private String id; @SerializedName(ApiConstants.NAME) @Param(description="the name of the extracted object") private String name; @SerializedName("extractId") @Param(description="the upload id of extracted object") - private IdentityProxy uploadId = new IdentityProxy("async_job"); + private String uploadId; @SerializedName("uploadpercentage") @Param(description="the percentage of the entity uploaded to the specified location") private Integer uploadPercent; @@ -41,7 +40,7 @@ public class ExtractResponse extends BaseResponse { private String status; @SerializedName("accountid") @Param(description="the account id to which the extracted object belongs") - private IdentityProxy accountId = new IdentityProxy("account"); + private String accountId; @SerializedName("resultstring") @Param(includeInApiDoc=false) private String resultString; @@ -59,7 +58,7 @@ public class ExtractResponse extends BaseResponse { private String storage; @SerializedName(ApiConstants.ZONE_ID) @Param(description="zone ID the object was extracted from") - private IdentityProxy zoneId = new IdentityProxy("data_center"); + private String zoneId; @SerializedName(ApiConstants.ZONE_NAME) @Param(description="zone name the object was extracted from") private String zoneName; @@ -73,26 +72,23 @@ public class ExtractResponse extends BaseResponse { public ExtractResponse(){ } - public ExtractResponse(Long typeId, String typeName, long accountId, - String state, Long uploadId) { - this.id.setValue(typeId); + public ExtractResponse(String typeId, String typeName, String accountId, + String state, String uploadId) { + this.id = typeId; this.name = typeName; - this.accountId.setValue(accountId); + this.accountId = accountId; this.state = state; - this.uploadId.setValue(uploadId); + this.uploadId = uploadId; } - 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 setIdentityTableName(String tableName) { - this.id.setTableName(tableName); - } public String getName() { return name; @@ -102,12 +98,12 @@ public class ExtractResponse extends BaseResponse { this.name = name; } - public Long getUploadId() { - return uploadId.getValue(); + public String getUploadId() { + return uploadId; } - public void setUploadId(Long uploadId) { - this.uploadId.setValue(uploadId); + public void setUploadId(String uploadId) { + this.uploadId = uploadId; } public Integer getUploadPercent() { @@ -126,12 +122,12 @@ public class ExtractResponse extends BaseResponse { this.status = status; } - public Long getAccountId() { - return accountId.getValue(); + public String getAccountId() { + return accountId; } - public void setAccountId(long accountId) { - this.accountId.setValue(accountId); + public void setAccountId(String accountId) { + this.accountId = accountId; } public String getResultString() { @@ -174,12 +170,12 @@ public class ExtractResponse extends BaseResponse { this.storage = storage; } - public Long getZoneId() { - return zoneId.getValue(); + public String getZoneId() { + return zoneId; } - public void setZoneId(Long zoneId) { - this.zoneId.setValue(zoneId); + public void setZoneId(String zoneId) { + this.zoneId = zoneId; } public String getZoneName() { diff --git a/api/src/org/apache/cloudstack/api/response/FirewallRuleResponse.java b/api/src/org/apache/cloudstack/api/response/FirewallRuleResponse.java index 040878abe8f..4dae4c5b857 100644 --- a/api/src/org/apache/cloudstack/api/response/FirewallRuleResponse.java +++ b/api/src/org/apache/cloudstack/api/response/FirewallRuleResponse.java @@ -67,6 +67,12 @@ public class FirewallRuleResponse extends BaseResponse { @SerializedName(ApiConstants.TAGS) @Param(description="the list of resource tags associated with the rule", responseObject = ResourceTagResponse.class) private List tags; + + @Override + public String getObjectId() { + return this.getId(); + } + public String getId() { return id; } diff --git a/api/src/org/apache/cloudstack/api/response/HostResponse.java b/api/src/org/apache/cloudstack/api/response/HostResponse.java index e4aae571058..39309caef6c 100644 --- a/api/src/org/apache/cloudstack/api/response/HostResponse.java +++ b/api/src/org/apache/cloudstack/api/response/HostResponse.java @@ -160,6 +160,11 @@ public class HostResponse extends BaseResponse { private Boolean haHost; + @Override + public String getObjectId() { + return this.getId(); + } + public String getId() { return id; } diff --git a/api/src/org/apache/cloudstack/api/response/IPAddressResponse.java b/api/src/org/apache/cloudstack/api/response/IPAddressResponse.java index d614e34db1a..18d32068e6b 100644 --- a/api/src/org/apache/cloudstack/api/response/IPAddressResponse.java +++ b/api/src/org/apache/cloudstack/api/response/IPAddressResponse.java @@ -117,6 +117,11 @@ public class IPAddressResponse extends BaseResponse implements ControlledEntityR this.ipAddress = ipAddress; } + @Override + public String getObjectId() { + return this.getId(); + } + public void setAllocated(Date allocated) { this.allocated = allocated; } diff --git a/api/src/org/apache/cloudstack/api/response/IsoVmResponse.java b/api/src/org/apache/cloudstack/api/response/IsoVmResponse.java index ddb1c3f30dc..a667e50c5f9 100644 --- a/api/src/org/apache/cloudstack/api/response/IsoVmResponse.java +++ b/api/src/org/apache/cloudstack/api/response/IsoVmResponse.java @@ -55,6 +55,11 @@ public class IsoVmResponse extends BaseResponse { private String virtualMachineState; + @Override + public String getObjectId() { + return this.getId(); + } + public String getOsTypeId() { return osTypeId; } diff --git a/api/src/org/apache/cloudstack/api/response/NicResponse.java b/api/src/org/apache/cloudstack/api/response/NicResponse.java index 1ac00846190..a6ca5b8232d 100644 --- a/api/src/org/apache/cloudstack/api/response/NicResponse.java +++ b/api/src/org/apache/cloudstack/api/response/NicResponse.java @@ -68,10 +68,6 @@ public class NicResponse extends BaseResponse { this.id = id; } - @Override - public String getObjectUuid() { - return this.getId(); - } public void setNetworkid(String networkid) { this.networkId = networkid; diff --git a/api/src/org/apache/cloudstack/api/response/PhysicalNetworkResponse.java b/api/src/org/apache/cloudstack/api/response/PhysicalNetworkResponse.java index 4f7f832c60d..0f1e166ef4b 100644 --- a/api/src/org/apache/cloudstack/api/response/PhysicalNetworkResponse.java +++ b/api/src/org/apache/cloudstack/api/response/PhysicalNetworkResponse.java @@ -60,6 +60,13 @@ public class PhysicalNetworkResponse extends BaseResponse { @SerializedName(ApiConstants.NETWORK_SPEED) @Param(description="the speed of the physical network") private String networkSpeed; + + @Override + public String getObjectId() { + return this.id; + + } + public void setId(String uuid) { this.id = uuid; } diff --git a/api/src/org/apache/cloudstack/api/response/PrivateGatewayResponse.java b/api/src/org/apache/cloudstack/api/response/PrivateGatewayResponse.java index fb5c9890f9f..143a61aa618 100644 --- a/api/src/org/apache/cloudstack/api/response/PrivateGatewayResponse.java +++ b/api/src/org/apache/cloudstack/api/response/PrivateGatewayResponse.java @@ -72,6 +72,11 @@ public class PrivateGatewayResponse extends BaseResponse implements ControlledEn private String state; + @Override + public String getObjectId() { + return this.id; + } + public void setId(String id) { this.id = id; } diff --git a/api/src/org/apache/cloudstack/api/response/SecurityGroupResponse.java b/api/src/org/apache/cloudstack/api/response/SecurityGroupResponse.java index 6900ca519bf..049709e4e20 100644 --- a/api/src/org/apache/cloudstack/api/response/SecurityGroupResponse.java +++ b/api/src/org/apache/cloudstack/api/response/SecurityGroupResponse.java @@ -69,11 +69,15 @@ public class SecurityGroupResponse extends BaseResponse implements ControlledVie this.tags = new HashSet(); } + + @Override - public String getObjectUuid() { + public String getObjectId() { return this.getId(); } + + public String getId() { return id; } diff --git a/api/src/org/apache/cloudstack/api/response/SnapshotResponse.java b/api/src/org/apache/cloudstack/api/response/SnapshotResponse.java index 28d768d51a2..1c06b0a95bf 100644 --- a/api/src/org/apache/cloudstack/api/response/SnapshotResponse.java +++ b/api/src/org/apache/cloudstack/api/response/SnapshotResponse.java @@ -85,6 +85,11 @@ public class SnapshotResponse extends BaseResponse implements ControlledEntityRe private List tags; + @Override + public String getObjectId() { + return this.getId(); + } + private String getId() { return id; } diff --git a/api/src/org/apache/cloudstack/api/response/StaticRouteResponse.java b/api/src/org/apache/cloudstack/api/response/StaticRouteResponse.java index e7de3209734..54831fe4a49 100644 --- a/api/src/org/apache/cloudstack/api/response/StaticRouteResponse.java +++ b/api/src/org/apache/cloudstack/api/response/StaticRouteResponse.java @@ -62,6 +62,12 @@ public class StaticRouteResponse extends BaseResponse implements ControlledEntit responseObject = ResourceTagResponse.class) private List tags; + + @Override + public String getObjectId() { + return this.id; + } + public void setId(String id) { this.id = id; } diff --git a/api/src/org/apache/cloudstack/api/response/StoragePoolResponse.java b/api/src/org/apache/cloudstack/api/response/StoragePoolResponse.java index 12676687873..707c852d262 100644 --- a/api/src/org/apache/cloudstack/api/response/StoragePoolResponse.java +++ b/api/src/org/apache/cloudstack/api/response/StoragePoolResponse.java @@ -80,6 +80,12 @@ public class StoragePoolResponse extends BaseResponse { private StoragePoolStatus state; + + @Override + public String getObjectId() { + return this.getId(); + } + public String getId() { return id; } diff --git a/api/src/org/apache/cloudstack/api/response/SystemVmResponse.java b/api/src/org/apache/cloudstack/api/response/SystemVmResponse.java index 6a8e79d92cd..806cada0877 100644 --- a/api/src/org/apache/cloudstack/api/response/SystemVmResponse.java +++ b/api/src/org/apache/cloudstack/api/response/SystemVmResponse.java @@ -108,15 +108,15 @@ public class SystemVmResponse extends BaseResponse { @SerializedName("activeviewersessions") @Param(description="the number of active console sessions for the console proxy system vm") private Integer activeViewerSessions; - private Long objectId; + // private Long objectId; - public Long getObjectId() { - return objectId; + + + @Override + public String getObjectId() { + return this.getId(); } - public void setObjectId(Long objectId) { - this.objectId = objectId; - } public String getId() { return id; diff --git a/api/src/org/apache/cloudstack/api/response/TemplateResponse.java b/api/src/org/apache/cloudstack/api/response/TemplateResponse.java index 785b647a9e4..d9daf3ac27d 100644 --- a/api/src/org/apache/cloudstack/api/response/TemplateResponse.java +++ b/api/src/org/apache/cloudstack/api/response/TemplateResponse.java @@ -135,6 +135,11 @@ public class TemplateResponse extends BaseResponse implements ControlledEntityRe + @Override + public String getObjectId() { + return this.getId(); + } + public String getId() { return id; } diff --git a/api/src/org/apache/cloudstack/api/response/TrafficTypeResponse.java b/api/src/org/apache/cloudstack/api/response/TrafficTypeResponse.java index b2f6e946b35..6f88d9c025c 100644 --- a/api/src/org/apache/cloudstack/api/response/TrafficTypeResponse.java +++ b/api/src/org/apache/cloudstack/api/response/TrafficTypeResponse.java @@ -41,6 +41,12 @@ public class TrafficTypeResponse extends BaseResponse { @SerializedName(ApiConstants.VMWARE_NETWORK_LABEL) @Param(description="The network name label of the physical device dedicated to this traffic on a VMware host") private String vmwareNetworkLabel; + + @Override + public String getObjectId() { + return this.id; + } + public void setPhysicalNetworkId(String physicalNetworkId) { this.physicalNetworkId = physicalNetworkId; } diff --git a/api/src/org/apache/cloudstack/api/response/UserResponse.java b/api/src/org/apache/cloudstack/api/response/UserResponse.java index 8c070fd5eb8..6f1badf92a2 100644 --- a/api/src/org/apache/cloudstack/api/response/UserResponse.java +++ b/api/src/org/apache/cloudstack/api/response/UserResponse.java @@ -72,6 +72,12 @@ public class UserResponse extends BaseResponse { @SerializedName("accountid") @Param(description="the account ID of the user") private String accountId; + + @Override + public String getObjectId() { + return this.getId(); + } + public String getId() { return id; } diff --git a/api/src/org/apache/cloudstack/api/response/UserVmResponse.java b/api/src/org/apache/cloudstack/api/response/UserVmResponse.java index 767ee0f4a7e..d90362b29d7 100644 --- a/api/src/org/apache/cloudstack/api/response/UserVmResponse.java +++ b/api/src/org/apache/cloudstack/api/response/UserVmResponse.java @@ -185,8 +185,10 @@ public class UserVmResponse extends BaseResponse implements ControlledEntityResp return this.id; } + + @Override - public String getObjectUuid() { + public String getObjectId() { return this.getId(); } diff --git a/api/src/org/apache/cloudstack/api/response/VolumeResponse.java b/api/src/org/apache/cloudstack/api/response/VolumeResponse.java index 730314a6a3c..1c6f4f3db96 100644 --- a/api/src/org/apache/cloudstack/api/response/VolumeResponse.java +++ b/api/src/org/apache/cloudstack/api/response/VolumeResponse.java @@ -157,6 +157,11 @@ public class VolumeResponse extends BaseResponse implements ControlledEntityResp + @Override + public String getObjectId() { + return this.getId(); + } + public Boolean getDestroyed() { return destroyed; } diff --git a/api/src/org/apache/cloudstack/query/QueryService.java b/api/src/org/apache/cloudstack/query/QueryService.java index 1bc04f313c4..da526e0539f 100644 --- a/api/src/org/apache/cloudstack/query/QueryService.java +++ b/api/src/org/apache/cloudstack/query/QueryService.java @@ -39,6 +39,7 @@ import org.apache.cloudstack.api.response.UserResponse; import org.apache.cloudstack.api.response.UserVmResponse; +import com.cloud.async.AsyncJob; import com.cloud.exception.PermissionDeniedException; import com.cloud.storage.Snapshot; @@ -69,6 +70,5 @@ public interface QueryService { public ListResponse listProjectAccounts(ListProjectAccountsCmd cmd); - public Snapshot findSnapshotById(long snapshotId); } diff --git a/core/src/com/cloud/storage/UploadVO.java b/core/src/com/cloud/storage/UploadVO.java index b39553e8638..95f66e71b06 100755 --- a/core/src/com/cloud/storage/UploadVO.java +++ b/core/src/com/cloud/storage/UploadVO.java @@ -38,47 +38,50 @@ public class UploadVO implements Upload { @Id @GeneratedValue(strategy=GenerationType.IDENTITY) long id; - + + @Column(name="uuid") + private String uuid; + @Column(name="host_id") private long hostId; - + @Column(name="type_id") private long typeId; - + @Column(name=GenericDaoBase.CREATED_COLUMN) private Date created = null; - + @Column(name="last_updated") @Temporal(value=TemporalType.TIMESTAMP) - private Date lastUpdated = null; - + private Date lastUpdated = null; + @Column (name="upload_pct") - private int uploadPercent; - + private int uploadPercent; + @Column (name="type") @Enumerated(EnumType.STRING) private Type type; - + @Column (name="mode") @Enumerated(EnumType.STRING) private Mode mode = Mode.FTP_UPLOAD; - + @Column (name="upload_state") @Enumerated(EnumType.STRING) private Status uploadState; - + @Column (name="error_str") private String errorString; @Column (name="job_id") private String jobId; - + @Column (name="url") private String uploadUrl; @Column (name="install_path") private String installPath; - + @Override public long getHostId() { return hostId; @@ -93,7 +96,12 @@ public class UploadVO implements Upload { return id; } - @Override + + public String getUuid() { + return uuid; + } + + @Override public Date getCreated() { return created; } @@ -102,7 +110,7 @@ public class UploadVO implements Upload { public Date getLastUpdated() { return lastUpdated; } - + public void setLastUpdated(Date date) { lastUpdated = date; } @@ -125,7 +133,7 @@ public class UploadVO implements Upload { this.type = type; this.uploadUrl = uploadUrl; } - + public UploadVO(long hostId, long typeId, Date lastUpdated, Status uploadState, int uploadPercent, Type type, Mode mode) { @@ -139,7 +147,7 @@ public class UploadVO implements Upload { this.mode = mode; } - protected UploadVO() { + protected UploadVO() { } public UploadVO(Long uploadId) { @@ -219,7 +227,7 @@ public class UploadVO implements Upload { return mode; } - public void setMode(Mode mode) { + public void setMode(Mode mode) { this.mode = mode; } diff --git a/server/src/com/cloud/api/ApiDBUtils.java b/server/src/com/cloud/api/ApiDBUtils.java index 960ee5454be..2aaee2e2fc5 100755 --- a/server/src/com/cloud/api/ApiDBUtils.java +++ b/server/src/com/cloud/api/ApiDBUtils.java @@ -52,8 +52,10 @@ import com.cloud.api.query.vo.ResourceTagJoinVO; import com.cloud.api.query.vo.SecurityGroupJoinVO; import com.cloud.api.query.vo.UserAccountJoinVO; import com.cloud.api.query.vo.UserVmJoinVO; +import com.cloud.async.AsyncJob; import com.cloud.async.AsyncJobManager; import com.cloud.async.AsyncJobVO; +import com.cloud.async.dao.AsyncJobDao; import com.cloud.capacity.CapacityVO; import com.cloud.capacity.dao.CapacityDao; import com.cloud.capacity.dao.CapacityDaoImpl.SummedCapacity; @@ -95,6 +97,7 @@ import com.cloud.network.NetworkManager; import com.cloud.network.NetworkProfile; import com.cloud.network.NetworkRuleConfigVO; import com.cloud.network.NetworkVO; +import com.cloud.network.PhysicalNetworkServiceProvider; import com.cloud.network.PhysicalNetworkVO; import com.cloud.network.Site2SiteVpnGatewayVO; import com.cloud.network.Site2SiteCustomerGatewayVO; @@ -311,6 +314,7 @@ public class ApiDBUtils { private static VpcDao _vpcDao; private static VpcOfferingDao _vpcOfferingDao; private static SnapshotPolicyDao _snapshotPolicyDao; + private static AsyncJobDao _asyncJobDao; static { _ms = (ManagementServer) ComponentLocator.getComponent(ManagementServer.Name); @@ -397,6 +401,7 @@ public class ApiDBUtils { _vpcDao = locator.getDao(VpcDao.class); _vpcOfferingDao = locator.getDao(VpcOfferingDao.class); _snapshotPolicyDao = locator.getDao(SnapshotPolicyDao.class); + _asyncJobDao = locator.getDao(AsyncJobDao.class); // Note: stats collector should already have been initialized by this time, otherwise a null instance is returned _statsCollector = StatsCollector.getInstance(); @@ -1044,6 +1049,130 @@ public class ApiDBUtils { public static VpcOffering findVpcOfferingById(long offeringId){ return _vpcOfferingDao.findById(offeringId); } + + + public static AsyncJob findAsyncJobById(long jobId){ + return _asyncJobDao.findById(jobId); + } + + public static String findJobInstanceUuid(AsyncJob job){ + if ( job == null ) + return null; + String jobInstanceId = null; + if (job.getInstanceType() == AsyncJob.Type.Volume) { + VolumeVO volume = ApiDBUtils.findVolumeById(job.getInstanceId()); + if (volume != null) { + jobInstanceId = volume.getUuid(); + } + } else if (job.getInstanceType() == AsyncJob.Type.Template || job.getInstanceType() == AsyncJob.Type.Iso) { + VMTemplateVO template = ApiDBUtils.findTemplateById(job.getInstanceId()); + if (template != null) { + jobInstanceId = template.getUuid(); + } + } else if (job.getInstanceType() == AsyncJob.Type.VirtualMachine || job.getInstanceType() == AsyncJob.Type.ConsoleProxy + || job.getInstanceType() == AsyncJob.Type.SystemVm || job.getInstanceType() == AsyncJob.Type.DomainRouter) { + VMInstanceVO vm = ApiDBUtils.findVMInstanceById(job.getInstanceId()); + if (vm != null) { + jobInstanceId = vm.getUuid(); + } + } else if (job.getInstanceType() == AsyncJob.Type.Snapshot) { + Snapshot snapshot = ApiDBUtils.findSnapshotById(job.getInstanceId()); + if (snapshot != null) { + jobInstanceId = snapshot.getUuid(); + } + } else if (job.getInstanceType() == AsyncJob.Type.Host) { + Host host = ApiDBUtils.findHostById(job.getInstanceId()); + if (host != null) { + jobInstanceId = host.getUuid(); + } + } else if (job.getInstanceType() == AsyncJob.Type.StoragePool) { + StoragePoolVO spool = ApiDBUtils.findStoragePoolById(job.getInstanceId()); + if (spool != null) { + jobInstanceId = spool.getUuid(); + } + } else if (job.getInstanceType() == AsyncJob.Type.IpAddress) { + IPAddressVO ip = ApiDBUtils.findIpAddressById(job.getInstanceId()); + if (ip != null) { + jobInstanceId = ip.getUuid(); + } + } else if (job.getInstanceType() == AsyncJob.Type.SecurityGroup) { + SecurityGroup sg = ApiDBUtils.findSecurityGroupById(job.getInstanceId()); + if (sg != null) { + jobInstanceId = sg.getUuid(); + } + } else if (job.getInstanceType() == AsyncJob.Type.PhysicalNetwork) { + PhysicalNetworkVO pnet = ApiDBUtils.findPhysicalNetworkById(job.getInstanceId()); + if (pnet != null) { + jobInstanceId = pnet.getUuid(); + } + } else if (job.getInstanceType() == AsyncJob.Type.TrafficType) { + PhysicalNetworkTrafficTypeVO trafficType = ApiDBUtils.findPhysicalNetworkTrafficTypeById(job.getInstanceId()); + if (trafficType != null) { + jobInstanceId = trafficType.getUuid(); + } + } else if (job.getInstanceType() == AsyncJob.Type.PhysicalNetworkServiceProvider) { + PhysicalNetworkServiceProvider sp = ApiDBUtils.findPhysicalNetworkServiceProviderById(job.getInstanceId()); + if (sp != null) { + jobInstanceId = sp.getUuid(); + } + } else if (job.getInstanceType() == AsyncJob.Type.FirewallRule) { + FirewallRuleVO fw = ApiDBUtils.findFirewallRuleById(job.getInstanceId()); + if (fw != null) { + jobInstanceId = fw.getUuid(); + } + } else if (job.getInstanceType() == AsyncJob.Type.Account) { + Account acct = ApiDBUtils.findAccountById(job.getInstanceId()); + if (acct != null) { + jobInstanceId = acct.getUuid(); + } + } else if (job.getInstanceType() == AsyncJob.Type.User) { + User usr = ApiDBUtils.findUserById(job.getInstanceId()); + if (usr != null) { + jobInstanceId = usr.getUuid(); + } + } else if (job.getInstanceType() == AsyncJob.Type.StaticRoute) { + StaticRouteVO route = ApiDBUtils.findStaticRouteById(job.getInstanceId()); + if (route != null) { + jobInstanceId = route.getUuid(); + } + } else if (job.getInstanceType() == AsyncJob.Type.PrivateGateway) { + VpcGatewayVO gateway = ApiDBUtils.findVpcGatewayById(job.getInstanceId()); + if (gateway != null) { + jobInstanceId = gateway.getUuid(); + } + } else if (job.getInstanceType() == AsyncJob.Type.Counter) { + CounterVO counter = ApiDBUtils.getCounter(job.getInstanceId()); + if (counter != null) { + jobInstanceId = counter.getUuid(); + } + } else if (job.getInstanceType() == AsyncJob.Type.Condition) { + ConditionVO condition = ApiDBUtils.findConditionById(job.getInstanceId()); + if (condition != null) { + jobInstanceId = condition.getUuid(); + } + } else if (job.getInstanceType() == AsyncJob.Type.AutoScalePolicy) { + AutoScalePolicyVO policy = ApiDBUtils.findAutoScalePolicyById(job.getInstanceId()); + if (policy != null) { + jobInstanceId = policy.getUuid(); + } + } else if (job.getInstanceType() == AsyncJob.Type.AutoScaleVmProfile) { + AutoScaleVmProfileVO profile = ApiDBUtils.findAutoScaleVmProfileById(job.getInstanceId()); + if (profile != null) { + jobInstanceId = profile.getUuid(); + } + } else if (job.getInstanceType() == AsyncJob.Type.AutoScaleVmGroup) { + AutoScaleVmGroupVO group = ApiDBUtils.findAutoScaleVmGroupById(job.getInstanceId()); + if (group != null) { + jobInstanceId = group.getUuid(); + } + } else if (job.getInstanceType() != AsyncJob.Type.None) { + // TODO : when we hit here, we need to add instanceType -> UUID + // entity table mapping + assert (false); + } + return jobInstanceId; + } + /////////////////////////////////////////////////////////////////////// // Newly Added Utility Methods for List API refactoring // /////////////////////////////////////////////////////////////////////// diff --git a/server/src/com/cloud/api/ApiResponseHelper.java b/server/src/com/cloud/api/ApiResponseHelper.java index c602577ac9b..5640ab7f22d 100755 --- a/server/src/com/cloud/api/ApiResponseHelper.java +++ b/server/src/com/cloud/api/ApiResponseHelper.java @@ -1480,7 +1480,7 @@ public class ApiResponseHelper implements ResponseGenerator { if (vm.getType() == Type.SecondaryStorageVm || vm.getType() == Type.ConsoleProxy) { // SystemVm vm = (SystemVm) systemVM; vmResponse.setId(vm.getUuid()); - vmResponse.setObjectId(vm.getId()); + //vmResponse.setObjectId(vm.getId()); vmResponse.setSystemVmType(vm.getType().toString().toLowerCase()); vmResponse.setName(vm.getHostName()); @@ -2089,16 +2089,19 @@ public class ApiResponseHelper implements ResponseGenerator { UploadVO uploadInfo = ApiDBUtils.findUploadById(uploadId); ExtractResponse response = new ExtractResponse(); response.setObjectName("template"); - response.setId(id); - response.setName(ApiDBUtils.findTemplateById(id).getName()); + VMTemplateVO template = ApiDBUtils.findTemplateById(id); + response.setId(template.getUuid()); + response.setName(template.getName()); if (zoneId != null) { - response.setZoneId(zoneId); - response.setZoneName(ApiDBUtils.findZoneById(zoneId).getName()); + DataCenter zone = ApiDBUtils.findZoneById(zoneId); + response.setZoneId(zone.getUuid()); + response.setZoneName(zone.getName()); } response.setMode(mode); - response.setUploadId(uploadId); + response.setUploadId(uploadInfo.getUuid()); response.setState(uploadInfo.getUploadState().toString()); - response.setAccountId(accountId); + Account account = ApiDBUtils.findAccountById(accountId); + response.setAccountId(account.getUuid()); response.setUrl(uploadInfo.getUploadUrl()); return response; @@ -2122,124 +2125,14 @@ public class ApiResponseHelper implements ResponseGenerator { } jobResponse.setCmd(job.getCmd()); jobResponse.setCreated(job.getCreated()); - jobResponse.setJobId(job.getId()); + jobResponse.setJobId(job.getUuid()); jobResponse.setJobStatus(job.getStatus()); jobResponse.setJobProcStatus(job.getProcessStatus()); if (job.getInstanceType() != null && job.getInstanceId() != null) { jobResponse.setJobInstanceType(job.getInstanceType().toString()); - String jobInstanceId = null; - if (job.getInstanceType() == AsyncJob.Type.Volume) { - VolumeVO volume = ApiDBUtils.findVolumeById(job.getInstanceId()); - if (volume != null) { - jobInstanceId = volume.getUuid(); - } - } else if (job.getInstanceType() == AsyncJob.Type.Template || job.getInstanceType() == AsyncJob.Type.Iso) { - VMTemplateVO template = ApiDBUtils.findTemplateById(job.getInstanceId()); - if (template != null) { - jobInstanceId = template.getUuid(); - } - } else if (job.getInstanceType() == AsyncJob.Type.VirtualMachine || job.getInstanceType() == AsyncJob.Type.ConsoleProxy - || job.getInstanceType() == AsyncJob.Type.SystemVm || job.getInstanceType() == AsyncJob.Type.DomainRouter) { - VMInstanceVO vm = ApiDBUtils.findVMInstanceById(job.getInstanceId()); - if (vm != null) { - jobInstanceId = vm.getUuid(); - } - } else if (job.getInstanceType() == AsyncJob.Type.Snapshot) { - Snapshot snapshot = ApiDBUtils.findSnapshotById(job.getInstanceId()); - if (snapshot != null) { - jobInstanceId = snapshot.getUuid(); - } - } else if (job.getInstanceType() == AsyncJob.Type.Host) { - Host host = ApiDBUtils.findHostById(job.getInstanceId()); - if (host != null) { - jobInstanceId = host.getUuid(); - } - } else if (job.getInstanceType() == AsyncJob.Type.StoragePool) { - StoragePoolVO spool = ApiDBUtils.findStoragePoolById(job.getInstanceId()); - if (spool != null) { - jobInstanceId = spool.getUuid(); - } - } else if (job.getInstanceType() == AsyncJob.Type.IpAddress) { - IPAddressVO ip = ApiDBUtils.findIpAddressById(job.getInstanceId()); - if (ip != null) { - jobInstanceId = ip.getUuid(); - } - } else if (job.getInstanceType() == AsyncJob.Type.SecurityGroup) { - SecurityGroup sg = ApiDBUtils.findSecurityGroupById(job.getInstanceId()); - if (sg != null) { - jobInstanceId = sg.getUuid(); - } - } else if (job.getInstanceType() == AsyncJob.Type.PhysicalNetwork) { - PhysicalNetworkVO pnet = ApiDBUtils.findPhysicalNetworkById(job.getInstanceId()); - if (pnet != null) { - jobInstanceId = pnet.getUuid(); - } - } else if (job.getInstanceType() == AsyncJob.Type.TrafficType) { - PhysicalNetworkTrafficTypeVO trafficType = ApiDBUtils.findPhysicalNetworkTrafficTypeById(job.getInstanceId()); - if (trafficType != null) { - jobInstanceId = trafficType.getUuid(); - } - } else if (job.getInstanceType() == AsyncJob.Type.PhysicalNetworkServiceProvider) { - PhysicalNetworkServiceProvider sp = ApiDBUtils.findPhysicalNetworkServiceProviderById(job.getInstanceId()); - if (sp != null) { - jobInstanceId = sp.getUuid(); - } - } else if (job.getInstanceType() == AsyncJob.Type.FirewallRule) { - FirewallRuleVO fw = ApiDBUtils.findFirewallRuleById(job.getInstanceId()); - if (fw != null) { - jobInstanceId = fw.getUuid(); - } - } else if (job.getInstanceType() == AsyncJob.Type.Account) { - Account acct = ApiDBUtils.findAccountById(job.getInstanceId()); - if (acct != null) { - jobInstanceId = acct.getUuid(); - } - } else if (job.getInstanceType() == AsyncJob.Type.User) { - User usr = ApiDBUtils.findUserById(job.getInstanceId()); - if (usr != null) { - jobInstanceId = usr.getUuid(); - } - } else if (job.getInstanceType() == AsyncJob.Type.StaticRoute) { - StaticRouteVO route = ApiDBUtils.findStaticRouteById(job.getInstanceId()); - if (route != null) { - jobInstanceId = route.getUuid(); - } - } else if (job.getInstanceType() == AsyncJob.Type.PrivateGateway) { - VpcGatewayVO gateway = ApiDBUtils.findVpcGatewayById(job.getInstanceId()); - if (gateway != null) { - jobInstanceId = gateway.getUuid(); - } - } else if (job.getInstanceType() == AsyncJob.Type.Counter) { - CounterVO counter = ApiDBUtils.getCounter(job.getInstanceId()); - if (counter != null) { - jobInstanceId = counter.getUuid(); - } - } else if (job.getInstanceType() == AsyncJob.Type.Condition) { - ConditionVO condition = ApiDBUtils.findConditionById(job.getInstanceId()); - if (condition != null) { - jobInstanceId = condition.getUuid(); - } - } else if (job.getInstanceType() == AsyncJob.Type.AutoScalePolicy) { - AutoScalePolicyVO policy = ApiDBUtils.findAutoScalePolicyById(job.getInstanceId()); - if (policy != null) { - jobInstanceId = policy.getUuid(); - } - } else if (job.getInstanceType() == AsyncJob.Type.AutoScaleVmProfile) { - AutoScaleVmProfileVO profile = ApiDBUtils.findAutoScaleVmProfileById(job.getInstanceId()); - if (profile != null) { - jobInstanceId = profile.getUuid(); - } - } else if (job.getInstanceType() == AsyncJob.Type.AutoScaleVmGroup) { - AutoScaleVmGroupVO group = ApiDBUtils.findAutoScaleVmGroupById(job.getInstanceId()); - if (group != null) { - jobInstanceId = group.getUuid(); - } - } else if (job.getInstanceType() != AsyncJob.Type.None) { - // TODO : when we hit here, we need to add instanceType -> UUID - // entity table mapping - assert (false); - } + String jobInstanceId = ApiDBUtils.findJobInstanceUuid(job); + if (jobInstanceId != null) { jobResponse.setJobInstanceId(jobInstanceId); } diff --git a/server/src/com/cloud/api/ApiServer.java b/server/src/com/cloud/api/ApiServer.java index e685aef4b3e..651de7ff67f 100755 --- a/server/src/com/cloud/api/ApiServer.java +++ b/server/src/com/cloud/api/ApiServer.java @@ -51,6 +51,7 @@ import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import org.apache.cloudstack.api.*; +import org.apache.cloudstack.api.command.user.account.ListProjectAccountsCmd; import org.apache.cloudstack.api.command.user.event.ListEventsCmd; import org.apache.cloudstack.api.command.user.vm.ListVMsCmd; import org.apache.cloudstack.api.command.user.vmgroup.ListVMGroupsCmd; @@ -85,6 +86,8 @@ import org.apache.http.protocol.ResponseServer; import org.apache.log4j.Logger; import org.apache.cloudstack.api.command.admin.router.ListRoutersCmd; +import org.apache.cloudstack.api.command.user.project.ListProjectInvitationsCmd; +import org.apache.cloudstack.api.command.user.project.ListProjectsCmd; import org.apache.cloudstack.api.command.user.securitygroup.ListSecurityGroupsCmd; import org.apache.cloudstack.api.command.user.tag.ListTagsCmd; import com.cloud.acl.ControlledEntity; @@ -454,7 +457,10 @@ public class ApiServer implements HttpRequestHandler { && !(cmdObj instanceof ListSecurityGroupsCmd) && !(cmdObj instanceof ListTagsCmd) && !(cmdObj instanceof ListEventsCmd) - && !(cmdObj instanceof ListVMGroupsCmd)) { + && !(cmdObj instanceof ListVMGroupsCmd) + && !(cmdObj instanceof ListProjectsCmd) + && !(cmdObj instanceof ListProjectAccountsCmd) + && !(cmdObj instanceof ListProjectInvitationsCmd)) { buildAsyncListResponse((BaseListCmd) cmdObj, caller); } @@ -479,17 +485,22 @@ public class ApiServer implements HttpRequestHandler { return; } - // Using maps might possibly be more efficient if the set is large enough but for now, we'll just do a - // comparison of two lists. Either way, there shouldn't be too many async jobs active for the account. + Map objectJobMap = new HashMap(); for (AsyncJob job : jobs) { if (job.getInstanceId() == null) { continue; } - for (ResponseObject response : responses) { - if (response.getObjectId() != null && job.getInstanceId().longValue() == response.getObjectId().longValue()) { - response.setJobId(job.getId()); - response.setJobStatus(job.getStatus()); - } + String instanceUuid = ApiDBUtils.findJobInstanceUuid(job); + if (instanceUuid != null) { + objectJobMap.put(instanceUuid, job); + } + } + + for (ResponseObject response : responses) { + if (response.getObjectId() != null && objectJobMap.containsKey(response.getObjectId())) { + AsyncJob job = objectJobMap.get(response.getObjectId()); + response.setJobId(job.getUuid()); + response.setJobStatus(job.getStatus()); } } } diff --git a/server/src/com/cloud/api/query/QueryManagerImpl.java b/server/src/com/cloud/api/query/QueryManagerImpl.java index 4cad6c3b66e..b9ed92a3069 100644 --- a/server/src/com/cloud/api/query/QueryManagerImpl.java +++ b/server/src/com/cloud/api/query/QueryManagerImpl.java @@ -71,6 +71,7 @@ import com.cloud.api.query.vo.ResourceTagJoinVO; import com.cloud.api.query.vo.SecurityGroupJoinVO; import com.cloud.api.query.vo.UserAccountJoinVO; import com.cloud.api.query.vo.UserVmJoinVO; +import com.cloud.async.AsyncJob; import com.cloud.domain.Domain; import com.cloud.domain.DomainVO; import com.cloud.domain.dao.DomainDao; @@ -1308,10 +1309,5 @@ public class QueryManagerImpl implements QueryService, Manager { return _projectAccountJoinDao.searchAndCount(sc, searchFilter); } - @Override - public Snapshot findSnapshotById(long snapshotId) { - return ApiDBUtils.findSnapshotById(snapshotId); - } - } diff --git a/server/src/com/cloud/server/ManagementServerImpl.java b/server/src/com/cloud/server/ManagementServerImpl.java index ddf91dc3500..8c73bad98a6 100755 --- a/server/src/com/cloud/server/ManagementServerImpl.java +++ b/server/src/com/cloud/server/ManagementServerImpl.java @@ -2891,8 +2891,10 @@ public class ManagementServerImpl implements ManagementServer { uploadJob = _uploadDao.createForUpdate(uploadJob.getId()); // Update the async Job - ExtractResponse resultObj = new ExtractResponse(volumeId, volume.getName(), accountId, UploadVO.Status.COPY_IN_PROGRESS.toString(), - uploadJob.getId()); + + ExtractResponse resultObj = new ExtractResponse(ApiDBUtils.findVolumeById(volumeId).getUuid(), + volume.getName(), ApiDBUtils.findAccountById(accountId).getUuid(), UploadVO.Status.COPY_IN_PROGRESS.toString(), + uploadJob.getUuid()); resultObj.setResponseName(cmd.getCommandName()); AsyncJobExecutor asyncExecutor = BaseAsyncJobExecutor.getCurrentExecutor(); if (asyncExecutor != null) { diff --git a/server/src/com/cloud/storage/upload/UploadListener.java b/server/src/com/cloud/storage/upload/UploadListener.java index 4303e437bb6..ee13cf9b0d8 100755 --- a/server/src/com/cloud/storage/upload/UploadListener.java +++ b/server/src/com/cloud/storage/upload/UploadListener.java @@ -42,6 +42,8 @@ import com.cloud.agent.api.storage.UploadProgressCommand; import com.cloud.agent.api.storage.UploadProgressCommand.RequestType; import org.apache.cloudstack.api.command.user.template.ExtractTemplateCmd; import org.apache.cloudstack.api.response.ExtractResponse; + +import com.cloud.api.ApiDBUtils; import com.cloud.async.AsyncJobManager; import com.cloud.async.AsyncJobResult; import com.cloud.exception.AgentUnavailableException; @@ -55,12 +57,12 @@ import com.cloud.storage.upload.UploadState.UploadEvent; import com.cloud.utils.exception.CloudRuntimeException; public class UploadListener implements Listener { - + private static final class StatusTask extends TimerTask { private final UploadListener ul; private final RequestType reqType; - + public StatusTask( UploadListener ul, RequestType req) { this.reqType = req; this.ul = ul; @@ -72,10 +74,10 @@ public class UploadListener implements Listener { } } - + private static final class TimeoutTask extends TimerTask { private final UploadListener ul; - + public TimeoutTask( UploadListener ul) { this.ul = ul; } @@ -89,13 +91,13 @@ public class UploadListener implements Listener { public static final Logger s_logger = Logger.getLogger(UploadListener.class.getName()); public static final int SMALL_DELAY = 100; public static final long STATUS_POLL_INTERVAL = 10000L; - + public static final String UPLOADED=Status.UPLOADED.toString(); public static final String NOT_UPLOADED=Status.NOT_UPLOADED.toString(); public static final String UPLOAD_ERROR=Status.UPLOAD_ERROR.toString(); public static final String UPLOAD_IN_PROGRESS=Status.UPLOAD_IN_PROGRESS.toString(); public static final String UPLOAD_ABANDONED=Status.ABANDONED.toString(); - public static final Map responseNameMap; + public static final Map responseNameMap; static{ MaptempMap = new HashMap(); tempMap.put(Type.ISO.toString(), ExtractIsoCmd.getStaticName()); @@ -106,16 +108,16 @@ public class UploadListener implements Listener { } - private HostVO sserver; - + private HostVO sserver; + private boolean uploadActive = true; - + private UploadDao uploadDao; - + private final UploadMonitorImpl uploadMonitor; - + private UploadState currState; - + private UploadCommand cmd; private Timer timer; @@ -131,7 +133,7 @@ public class UploadListener implements Listener { private long eventId; private AsyncJobManager asyncMgr; private ExtractResponse resultObj; - + public AsyncJobManager getAsyncMgr() { return asyncMgr; } @@ -157,12 +159,12 @@ public class UploadListener implements Listener { } private final Map stateMap = new HashMap(); - private Long uploadId; - + private Long uploadId; + public UploadListener(HostVO host, Timer _timer, UploadDao uploadDao, UploadVO uploadObj, UploadMonitorImpl uploadMonitor, UploadCommand cmd, Long accountId, String typeName, Type type, long eventId, long asyncJobId, AsyncJobManager asyncMgr) { - this.sserver = host; + this.sserver = host; this.uploadDao = uploadDao; this.uploadMonitor = uploadMonitor; this.cmd = cmd; @@ -178,15 +180,23 @@ public class UploadListener implements Listener { this.eventId = eventId; this.asyncJobId = asyncJobId; this.asyncMgr = asyncMgr; - this.resultObj = new ExtractResponse(uploadObj.getTypeId(), typeName, accountId, Status.NOT_UPLOADED.toString(), uploadId); + String extractId = null; + if ( type == Type.VOLUME ){ + extractId = ApiDBUtils.findVolumeById(uploadObj.getTypeId()).getUuid(); + } + else{ + extractId = ApiDBUtils.findTemplateById(uploadObj.getTypeId()).getUuid(); + } + this.resultObj = new ExtractResponse(extractId, typeName, ApiDBUtils.findAccountById(accountId).getUuid(), Status.NOT_UPLOADED.toString(), + ApiDBUtils.findUploadById(uploadId).getUuid()); resultObj.setResponseName(responseNameMap.get(type.toString())); updateDatabase(Status.NOT_UPLOADED, cmd.getUrl(),""); } - + public UploadListener(UploadMonitorImpl monitor) { uploadMonitor = monitor; - } - + } + public void checkProgress() { transition(UploadEvent.TIMEOUT_CHECK, null); } @@ -204,15 +214,15 @@ public class UploadListener implements Listener { public void setCommand(UploadCommand _cmd) { this.cmd = _cmd; } - + public void setJobId(String _jobId) { this.jobId = _jobId; } - + public String getJobId() { return jobId; } - + @Override public boolean processAnswers(long agentId, long seq, Answer[] answers) { boolean processed = false; @@ -230,7 +240,7 @@ public class UploadListener implements Listener { } return processed; } - + @Override public boolean processCommands(long agentId, long seq, Command[] commands) { @@ -238,13 +248,13 @@ public class UploadListener implements Listener { } @Override - public void processConnect(HostVO agent, StartupCommand cmd, boolean forRebalance) { + public void processConnect(HostVO agent, StartupCommand cmd, boolean forRebalance) { if (!(cmd instanceof StartupStorageCommand)) { return; } - + long agentId = agent.getId(); - + StartupStorageCommand storage = (StartupStorageCommand)cmd; if (storage.getResourceType() == Storage.StorageResourceType.STORAGE_HOST || storage.getResourceType() == Storage.StorageResourceType.SECONDARY_STORAGE ) @@ -258,35 +268,35 @@ public class UploadListener implements Listener { AgentControlCommand cmd) { return null; } - + public void setUploadInactive(Status reason) { uploadActive=false; uploadMonitor.handleUploadEvent(sserver, accountId, typeName, type, uploadId, reason, eventId); } - + public void logUploadStart() { //uploadMonitor.logEvent(accountId, event, "Storage server " + sserver.getName() + " started upload of " +type.toString() + " " + typeName, EventVO.LEVEL_INFO, eventId); } - + public void cancelTimeoutTask() { if (timeoutTask != null) timeoutTask.cancel(); } - + public void cancelStatusTask() { if (statusTask != null) statusTask.cancel(); } @Override - public boolean processDisconnect(long agentId, com.cloud.host.Status state) { + public boolean processDisconnect(long agentId, com.cloud.host.Status state) { setDisconnected(); return true; } @Override - public boolean processTimeout(long agentId, long seq) { + public boolean processTimeout(long agentId, long seq) { return true; } - + private void initStateMachine() { stateMap.put(Status.NOT_UPLOADED.toString(), new NotUploadedState(this)); stateMap.put(Status.UPLOADED.toString(), new UploadCompleteState(this)); @@ -294,7 +304,7 @@ public class UploadListener implements Listener { stateMap.put(Status.UPLOAD_IN_PROGRESS.toString(), new UploadInProgressState(this)); stateMap.put(Status.ABANDONED.toString(), new UploadAbandonedState(this)); } - + private UploadState getState(String stateName) { return stateMap.get(stateName); } @@ -316,15 +326,15 @@ public class UploadListener implements Listener { throw new CloudRuntimeException("Unhandled event transition: currState="+prevName+", evt="+event); } } - + public Date getLastUpdated() { return lastUpdated; } - + public void setLastUpdated() { lastUpdated = new Date(); } - + public void log(String message, Level level) { s_logger.log(level, message + ", " + type.toString() + " = " + typeName + " at host " + sserver.getName()); } @@ -332,7 +342,7 @@ public class UploadListener implements Listener { public void setDisconnected() { transition(UploadEvent.DISCONNECT, null); } - + public void scheduleStatusCheck(com.cloud.agent.api.storage.UploadProgressCommand.RequestType getStatus) { if (statusTask != null) statusTask.cancel(); @@ -349,27 +359,27 @@ public class UploadListener implements Listener { log("Scheduling timeout at " + delay + " ms", Level.DEBUG); } } - + public void updateDatabase(Status state, String uploadErrorString) { resultObj.setResultString(uploadErrorString); resultObj.setState(state.toString()); asyncMgr.updateAsyncJobAttachment(asyncJobId, type.toString(), 1L); asyncMgr.updateAsyncJobStatus(asyncJobId, AsyncJobResult.STATUS_IN_PROGRESS, resultObj); - + UploadVO vo = uploadDao.createForUpdate(); vo.setUploadState(state); vo.setLastUpdated(new Date()); vo.setErrorString(uploadErrorString); uploadDao.update(getUploadId(), vo); } - + public void updateDatabase(Status state, String uploadUrl,String uploadErrorString) { resultObj.setResultString(uploadErrorString); resultObj.setState(state.toString()); asyncMgr.updateAsyncJobAttachment(asyncJobId, type.toString(), 1L); asyncMgr.updateAsyncJobStatus(asyncJobId, AsyncJobResult.STATUS_IN_PROGRESS, resultObj); - - + + UploadVO vo = uploadDao.createForUpdate(); vo.setUploadState(state); vo.setLastUpdated(new Date()); @@ -377,23 +387,23 @@ public class UploadListener implements Listener { vo.setJobId(null); vo.setUploadPercent(0); vo.setErrorString(uploadErrorString); - + uploadDao.update(getUploadId(), vo); } - + private Long getUploadId() { return uploadId; } - public synchronized void updateDatabase(UploadAnswer answer) { - + public synchronized void updateDatabase(UploadAnswer answer) { + if(answer.getErrorString().startsWith("553")){ answer.setErrorString(answer.getErrorString().concat("Please check if the file name already exists.")); } resultObj.setResultString(answer.getErrorString()); resultObj.setState(answer.getUploadStatus().toString()); resultObj.setUploadPercent(answer.getUploadPct()); - + if (answer.getUploadStatus() == Status.UPLOAD_IN_PROGRESS){ asyncMgr.updateAsyncJobAttachment(asyncJobId, type.toString(), 1L); asyncMgr.updateAsyncJobStatus(asyncJobId, AsyncJobResult.STATUS_IN_PROGRESS, resultObj); @@ -409,7 +419,7 @@ public class UploadListener implements Listener { updateBuilder.setLastUpdated(new Date()); updateBuilder.setErrorString(answer.getErrorString()); updateBuilder.setJobId(answer.getJobId()); - + uploadDao.update(getUploadId(), updateBuilder); } @@ -425,9 +435,9 @@ public class UploadListener implements Listener { setDisconnected(); } } - + } - + private UploadCommand getCommand() { return cmd; } @@ -435,7 +445,7 @@ public class UploadListener implements Listener { public void logDisconnect() { s_logger.warn("Unable to monitor upload progress of " + typeName + " at host " + sserver.getName()); } - + public void scheduleImmediateStatusCheck(RequestType request) { if (statusTask != null) statusTask.cancel(); statusTask = new StatusTask(this, request); @@ -443,6 +453,6 @@ public class UploadListener implements Listener { } public void setCurrState(Status uploadState) { - this.currState = getState(currState.toString()); + this.currState = getState(currState.toString()); } } diff --git a/setup/db/create-schema.sql b/setup/db/create-schema.sql index 9891371bbb2..c01a5cdccac 100755 --- a/setup/db/create-schema.sql +++ b/setup/db/create-schema.sql @@ -2511,6 +2511,7 @@ INSERT INTO `cloud`.`counter` (id, source, name, value,created) VALUES (100,'net SET foreign_key_checks = 1; +ALTER TABLE upload ADD uuid VARCHAR(40); --- DB views for list api --- DROP VIEW IF EXISTS `cloud`.`user_vm_view`; From e4dbc2033fa6071039df65f414e004611b361108 Mon Sep 17 00:00:00 2001 From: Min Chen Date: Thu, 20 Dec 2012 18:18:06 -0800 Subject: [PATCH 160/421] Add upgrade script from 4.0 to 4.1. Signed-off-by: Min Chen --- .../com/cloud/upgrade/dao/Upgrade40to41.java | 12 +- setup/db/db/schema-40to41.sql | 541 ++++++++++++++++++ 2 files changed, 551 insertions(+), 2 deletions(-) create mode 100755 setup/db/db/schema-40to41.sql diff --git a/server/src/com/cloud/upgrade/dao/Upgrade40to41.java b/server/src/com/cloud/upgrade/dao/Upgrade40to41.java index 5067f39d011..a3fb2ea1091 100644 --- a/server/src/com/cloud/upgrade/dao/Upgrade40to41.java +++ b/server/src/com/cloud/upgrade/dao/Upgrade40to41.java @@ -20,6 +20,9 @@ package com.cloud.upgrade.dao; import java.io.File; import java.sql.Connection; +import com.cloud.utils.exception.CloudRuntimeException; +import com.cloud.utils.script.Script; + /** * @author htrippaers * @@ -27,7 +30,7 @@ import java.sql.Connection; public class Upgrade40to41 extends Upgrade30xBase implements DbUpgrade { /** - * + * */ public Upgrade40to41() { // TODO Auto-generated constructor stub @@ -62,7 +65,12 @@ public class Upgrade40to41 extends Upgrade30xBase implements DbUpgrade { */ @Override public File[] getPrepareScripts() { - return new File[0]; + String script = Script.findScript("", "db/schema-40to41.sql"); + if (script == null) { + throw new CloudRuntimeException("Unable to find db/schema-40to41.sql"); + } + + return new File[] { new File(script) }; } /* (non-Javadoc) diff --git a/setup/db/db/schema-40to41.sql b/setup/db/db/schema-40to41.sql new file mode 100755 index 00000000000..d94aed87302 --- /dev/null +++ b/setup/db/db/schema-40to41.sql @@ -0,0 +1,541 @@ +-- 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. + +-- Schema upgrade from 4.0 to 4.1; + +ALTER TABLE upload ADD uuid VARCHAR(40); + +-- populate uuid column with db id if uuid is null +UPDATE `cloud`.`account` set uuid=id WHERE uuid is NULL; +UPDATE `cloud`.`alert` set uuid=id WHERE uuid is NULL; +UPDATE `cloud`.`async_job` set uuid=id WHERE uuid is NULL; +UPDATE `cloud`.`cluster` set uuid=id WHERE uuid is NULL; +UPDATE `cloud`.`data_center` set uuid=id WHERE uuid is NULL; +UPDATE `cloud`.`disk_offering` set uuid=id WHERE uuid is NULL; +UPDATE `cloud`.`domain` set uuid=id WHERE uuid is NULL; +UPDATE `cloud`.`event` set uuid=id WHERE uuid is NULL; +UPDATE `cloud`.`external_firewall_devices` set uuid=id WHERE uuid is NULL; +UPDATE `cloud`.`external_load_balancer_devices` set uuid=id WHERE uuid is NULL; +UPDATE `cloud`.`external_nicira_nvp_devices` set uuid=id WHERE uuid is NULL; +UPDATE `cloud`.`firewall_rules` set uuid=id WHERE uuid is NULL; +UPDATE `cloud`.`guest_os` set uuid=id WHERE uuid is NULL; +UPDATE `cloud`.`guest_os_category` set uuid=id WHERE uuid is NULL; +UPDATE `cloud`.`host` set uuid=id WHERE uuid is NULL; +UPDATE `cloud`.`host_pod_ref` set uuid=id WHERE uuid is NULL; +UPDATE `cloud`.`hypervisor_capabilities` set uuid=id WHERE uuid is NULL; +UPDATE `cloud`.`instance_group` set uuid=id WHERE uuid is NULL; +UPDATE `cloud`.`load_balancer_stickiness_policies` set uuid=id WHERE uuid is NULL; +UPDATE `cloud`.`network_external_firewall_device_map` set uuid=id WHERE uuid is NULL; +UPDATE `cloud`.`network_external_lb_device_map` set uuid=id WHERE uuid is NULL; +UPDATE `cloud`.`network_offerings` set uuid=id WHERE uuid is NULL; +UPDATE `cloud`.`networks` set uuid=id WHERE uuid is NULL; +UPDATE `cloud`.`nics` set uuid=id WHERE uuid is NULL; +UPDATE `cloud`.`physical_network` set uuid=id WHERE uuid is NULL; +UPDATE `cloud`.`physical_network_service_providers` set uuid=id WHERE uuid is NULL; +UPDATE `cloud`.`physical_network_traffic_types` set uuid=id WHERE uuid is NULL; +UPDATE `cloud`.`port_profile` set uuid=id WHERE uuid is NULL; +UPDATE `cloud`.`project_invitations` set uuid=id WHERE uuid is NULL; +UPDATE `cloud`.`projects` set uuid=id WHERE uuid is NULL; +UPDATE `cloud`.`resource_tags` set uuid=id WHERE uuid is NULL; +UPDATE `cloud`.`s2s_customer_gateway` set uuid=id WHERE uuid is NULL; +UPDATE `cloud`.`s2s_vpn_connection` set uuid=id WHERE uuid is NULL; +UPDATE `cloud`.`s2s_vpn_gateway` set uuid=id WHERE uuid is NULL; +UPDATE `cloud`.`security_group` set uuid=id WHERE uuid is NULL; +UPDATE `cloud`.`security_group_rule` set uuid=id WHERE uuid is NULL; +UPDATE `cloud`.`snapshot_schedule` set uuid=id WHERE uuid is NULL; +UPDATE `cloud`.`snapshots` set uuid=id WHERE uuid is NULL; +UPDATE `cloud`.`static_routes` set uuid=id WHERE uuid is NULL; +UPDATE `cloud`.`storage_pool` set uuid=id WHERE uuid is NULL; +UPDATE `cloud`.`swift` set uuid=id WHERE uuid is NULL; +UPDATE `cloud`.`upload` set uuid=id WHERE uuid is NULL; +UPDATE `cloud`.`user` set uuid=id WHERE uuid is NULL; +UPDATE `cloud`.`user_ip_address` set uuid=id WHERE uuid is NULL; +UPDATE `cloud`.`user_vm_temp` set uuid=id WHERE uuid is NULL; +UPDATE `cloud`.`virtual_router_providers` set uuid=id WHERE uuid is NULL; +UPDATE `cloud`.`virtual_supervisor_module` set uuid=id WHERE uuid is NULL; +UPDATE `cloud`.`vlan` set uuid=id WHERE uuid is NULL; +UPDATE `cloud`.`vm_instance` set uuid=id WHERE uuid is NULL; +UPDATE `cloud`.`vm_template` set uuid=id WHERE uuid is NULL; +UPDATE `cloud`.`vpc` set uuid=id WHERE uuid is NULL; +UPDATE `cloud`.`vpc_gateways` set uuid=id WHERE uuid is NULL; +UPDATE `cloud`.`vpc_offerings` set uuid=id WHERE uuid is NULL; +UPDATE `cloud`.`vpn_users` set uuid=id WHERE uuid is NULL; +UPDATE `cloud`.`volumes` set uuid=id WHERE uuid is NULL; +UPDATE `cloud`.`autoscale_vmgroups` set uuid=id WHERE uuid is NULL; +UPDATE `cloud`.`autoscale_vmprofiles` set uuid=id WHERE uuid is NULL; +UPDATE `cloud`.`autoscale_policies` set uuid=id WHERE uuid is NULL; +UPDATE `cloud`.`counter` set uuid=id WHERE uuid is NULL; +UPDATE `cloud`.`conditions` set uuid=id WHERE uuid is NULL; + + +--- 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; + +DROP VIEW IF EXISTS `cloud`.`security_group_view`; +CREATE VIEW security_group_view AS +select +security_group.id id, +security_group.name name, +security_group.description description, +security_group.uuid uuid, +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, +security_group_rule.id rule_id, +security_group_rule.uuid rule_uuid, +security_group_rule.type rule_type, +security_group_rule.start_port rule_start_port, +security_group_rule.end_port rule_end_port, +security_group_rule.protocol rule_protocol, +security_group_rule.allowed_network_id rule_allowed_network_id, +security_group_rule.allowed_ip_cidr rule_allowed_ip_cidr, +security_group_rule.create_status rule_create_status, +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 security_group +left join security_group_rule on security_group.id = security_group_rule.security_group_id +inner join account on security_group.account_id=account.id +inner join domain on security_group.domain_id=domain.id +left join projects on projects.project_account_id = security_group.account_id +left join resource_tags on resource_tags.resource_id = security_group.id and resource_tags.resource_type = "SecurityGroup" +left join async_job on async_job.instance_id = security_group.id and async_job.instance_type = "SecurityGroup" and async_job.job_status = 0; + +DROP VIEW IF EXISTS `cloud`.`resource_tag_view`; +CREATE VIEW resource_tag_view AS +select +resource_tags.id, +resource_tags.uuid, +resource_tags.key, +resource_tags.value, +resource_tags.resource_id, +resource_tags.resource_uuid, +resource_tags.resource_type, +resource_tags.customer, +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 +from resource_tags +inner join account on resource_tags.account_id=account.id +inner join domain on resource_tags.domain_id=domain.id +left join projects on projects.project_account_id = resource_tags.account_id; + + +DROP VIEW IF EXISTS `cloud`.`event_view`; +CREATE VIEW event_view AS +select +event.id, +event.uuid, +event.type, +event.state, +event.description, +event.created, +event.level, +event.parameters, +event.start_id, +eve.uuid start_uuid, +event.user_id, +user.username user_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 +from event +inner join account on event.account_id=account.id +inner join domain on event.domain_id=domain.id +inner join user on event.user_id = user.id +left join projects on projects.project_account_id = event.account_id +left join event eve on event.start_id = eve.id; + +DROP VIEW IF EXISTS `cloud`.`instance_group_view`; +CREATE VIEW instance_group_view AS +select +instance_group.id, +instance_group.uuid, +instance_group.name, +instance_group.removed, +instance_group.created, +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 +from instance_group +inner join account on instance_group.account_id=account.id +inner join domain on account.domain_id=domain.id +left join projects on projects.project_account_id = instance_group.account_id; + +DROP VIEW IF EXISTS `cloud`.`user_view`; +CREATE VIEW user_view AS +select +user.id, +user.uuid, +user.username, +user.password, +user.firstname, +user.lastname, +user.email, +user.state, +user.api_key, +user.secret_key, +user.created, +user.removed, +user.timezone, +user.registration_token, +user.is_registered, +user.incorrect_login_attempts, +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 +from user +inner join account on user.account_id = account.id +inner join domain on account.domain_id=domain.id; + +DROP VIEW IF EXISTS `cloud`.`project_view`; +CREATE VIEW project_view AS +select +projects.id, +projects.uuid, +projects.name, +projects.display_text, +projects.state, +projects.removed, +projects.created, +account.account_name owner, +pacct.account_id, +domain.id domain_id, +domain.uuid domain_uuid, +domain.name domain_name, +domain.path domain_path, +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 +from projects +inner join domain on projects.domain_id=domain.id +inner join project_account on projects.id = project_account.project_id and project_account.account_role = "Admin" +inner join account on account.id = project_account.account_id +left join resource_tags on resource_tags.resource_id = projects.id and resource_tags.resource_type = "Project" +left join project_account pacct on projects.id = pacct.project_id; + +DROP VIEW IF EXISTS `cloud`.`project_account_view`; +CREATE VIEW project_account_view AS +select +project_account.id, +account.id account_id, +account.uuid account_uuid, +account.account_name, +account.type account_type, +project_account.account_role, +projects.id project_id, +projects.uuid project_uuid, +projects.name project_name, +domain.id domain_id, +domain.uuid domain_uuid, +domain.name domain_name, +domain.path domain_path +from project_account +inner join account on project_account.account_id = account.id +inner join domain on account.domain_id=domain.id +inner join projects on projects.id = project_account.project_id; + +DROP VIEW IF EXISTS `cloud`.`project_invitation_view`; +CREATE VIEW project_invitation_view AS +select +project_invitations.id, +project_invitations.uuid, +project_invitations.email, +project_invitations.created, +project_invitations.state, +projects.id project_id, +projects.uuid project_uuid, +projects.name project_name, +account.id account_id, +account.uuid account_uuid, +account.account_name, +account.type account_type, +domain.id domain_id, +domain.uuid domain_uuid, +domain.name domain_name, +domain.path domain_path +from project_invitations +left join account on project_invitations.account_id = account.id +left join domain on project_invitations.domain_id=domain.id +left join projects on projects.id = project_invitations.project_id; + From 290dc79366701852fd64127429f6954fea609f7a Mon Sep 17 00:00:00 2001 From: Min Chen Date: Thu, 20 Dec 2012 22:33:43 -0800 Subject: [PATCH 161/421] Populate uuid for uploadVO in create case. --- core/src/com/cloud/storage/UploadVO.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/core/src/com/cloud/storage/UploadVO.java b/core/src/com/cloud/storage/UploadVO.java index 95f66e71b06..65555178890 100755 --- a/core/src/com/cloud/storage/UploadVO.java +++ b/core/src/com/cloud/storage/UploadVO.java @@ -17,6 +17,7 @@ package com.cloud.storage; import java.util.Date; +import java.util.UUID; import javax.persistence.Column; import javax.persistence.Entity; @@ -119,6 +120,7 @@ public class UploadVO implements Upload { super(); this.hostId = hostId; this.typeId = templateId; + this.uuid = UUID.randomUUID().toString(); } public UploadVO(long hostId, long typeId, Date lastUpdated, @@ -132,6 +134,7 @@ public class UploadVO implements Upload { this.mode = mode; this.type = type; this.uploadUrl = uploadUrl; + this.uuid = UUID.randomUUID().toString(); } public UploadVO(long hostId, long typeId, Date lastUpdated, @@ -145,6 +148,8 @@ public class UploadVO implements Upload { this.uploadPercent = uploadPercent; this.type = type; this.mode = mode; + this.uuid = UUID.randomUUID().toString(); + } protected UploadVO() { From 6fbdf7665445f12a46672ba76e47bbecdd84f8df Mon Sep 17 00:00:00 2001 From: Prasanna Santhanam Date: Thu, 20 Dec 2012 15:41:40 -0800 Subject: [PATCH 162/421] api: Annotate RemoteAccessVpn,ListZone commands Signed-off-by: Prasanna Santhanam Signed-off-by: Rohit Yadav --- .../command/user/vpn/CreateRemoteAccessVpnCmd.java | 11 ++++++----- .../command/user/vpn/DeleteRemoteAccessVpnCmd.java | 10 +++++----- .../command/user/vpn/ListRemoteAccessVpnsCmd.java | 7 +++---- .../api/command/user/zone/ListZonesByCmd.java | 14 ++++++++------ .../cloudstack/api/response/IPAddressResponse.java | 3 +++ .../api/response/RemoteAccessVpnResponse.java | 3 +++ 6 files changed, 28 insertions(+), 20 deletions(-) diff --git a/api/src/org/apache/cloudstack/api/command/user/vpn/CreateRemoteAccessVpnCmd.java b/api/src/org/apache/cloudstack/api/command/user/vpn/CreateRemoteAccessVpnCmd.java index 4d9e685467a..9b307e2c7ab 100644 --- a/api/src/org/apache/cloudstack/api/command/user/vpn/CreateRemoteAccessVpnCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vpn/CreateRemoteAccessVpnCmd.java @@ -16,13 +16,14 @@ // under the License. package org.apache.cloudstack.api.command.user.vpn; +import org.apache.cloudstack.api.response.DomainResponse; +import org.apache.cloudstack.api.response.IPAddressResponse; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseAsyncCreateCmd; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; @@ -43,8 +44,8 @@ public class CreateRemoteAccessVpnCmd extends BaseAsyncCreateCmd { ///////////////////////////////////////////////////// //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - @IdentityMapper(entityTableName="user_ip_address") - @Parameter(name=ApiConstants.PUBLIC_IP_ID, type=CommandType.LONG, required=true, description="public ip address id of the vpn server") + @Parameter(name=ApiConstants.PUBLIC_IP_ID, type=CommandType.UUID, entityType=IPAddressResponse.class, + required=true, description="public ip address id of the vpn server") private Long publicIpId; @Parameter(name="iprange", type=CommandType.STRING, required=false, description="the range of ip addresses to allocate to vpn clients. The first ip in the range will be taken by the vpn server") @@ -55,8 +56,8 @@ public class CreateRemoteAccessVpnCmd extends BaseAsyncCreateCmd { private String accountName; @Deprecated - @IdentityMapper(entityTableName="domain") - @Parameter(name=ApiConstants.DOMAIN_ID, type=CommandType.LONG, description="an optional domainId for the VPN. If the account parameter is used, domainId must also be used.") + @Parameter(name=ApiConstants.DOMAIN_ID, type=CommandType.UUID, entityType=DomainResponse.class, + description="an optional domainId for the VPN. If the account parameter is used, domainId must also be used.") private Long domainId; @Parameter(name = ApiConstants.OPEN_FIREWALL, type = CommandType.BOOLEAN, description = "if true, firewall rule for source/end pubic port is automatically created; if false - firewall rule has to be created explicitely. Has value true by default") diff --git a/api/src/org/apache/cloudstack/api/command/user/vpn/DeleteRemoteAccessVpnCmd.java b/api/src/org/apache/cloudstack/api/command/user/vpn/DeleteRemoteAccessVpnCmd.java index 38a050a94f2..c9a57f31d9b 100644 --- a/api/src/org/apache/cloudstack/api/command/user/vpn/DeleteRemoteAccessVpnCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vpn/DeleteRemoteAccessVpnCmd.java @@ -16,11 +16,12 @@ // under the License. package org.apache.cloudstack.api.command.user.vpn; +import org.apache.cloudstack.api.response.AccountResponse; +import org.apache.cloudstack.api.response.IPAddressResponse; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseAsyncCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.response.SuccessResponse; @@ -39,13 +40,12 @@ public class DeleteRemoteAccessVpnCmd extends BaseAsyncCmd { ///////////////////////////////////////////////////// //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - @IdentityMapper(entityTableName="user_ip_address") - @Parameter(name=ApiConstants.PUBLIC_IP_ID, type=CommandType.LONG, required=true, description="public ip address id of the vpn server") + @Parameter(name=ApiConstants.PUBLIC_IP_ID, type=CommandType.UUID, entityType=IPAddressResponse.class, + required=true, description="public ip address id of the vpn server") private Long publicIpId; // unexposed parameter needed for events logging - @IdentityMapper(entityTableName="account") - @Parameter(name=ApiConstants.ACCOUNT_ID, type=CommandType.LONG, expose=false) + @Parameter(name=ApiConstants.ACCOUNT_ID, type=CommandType.UUID, entityType=AccountResponse.class, expose=false) private Long ownerId; ///////////////////////////////////////////////////// /////////////////// Accessors /////////////////////// diff --git a/api/src/org/apache/cloudstack/api/command/user/vpn/ListRemoteAccessVpnsCmd.java b/api/src/org/apache/cloudstack/api/command/user/vpn/ListRemoteAccessVpnsCmd.java index 210b864e240..5c6a5208ef2 100644 --- a/api/src/org/apache/cloudstack/api/command/user/vpn/ListRemoteAccessVpnsCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vpn/ListRemoteAccessVpnsCmd.java @@ -19,11 +19,11 @@ package org.apache.cloudstack.api.command.user.vpn; import java.util.ArrayList; import java.util.List; +import org.apache.cloudstack.api.response.IPAddressResponse; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; 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.response.ListResponse; @@ -40,9 +40,8 @@ public class ListRemoteAccessVpnsCmd extends BaseListProjectAndAccountResourcesC ///////////////////////////////////////////////////// //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - - @IdentityMapper(entityTableName="user_ip_address") - @Parameter(name=ApiConstants.PUBLIC_IP_ID, type=CommandType.LONG, required=true, description="public ip address id of the vpn server") + @Parameter(name=ApiConstants.PUBLIC_IP_ID, type=CommandType.UUID, entityType=IPAddressResponse.class, + required=true, description="public ip address id of the vpn server") private Long publicIpId; ///////////////////////////////////////////////////// diff --git a/api/src/org/apache/cloudstack/api/command/user/zone/ListZonesByCmd.java b/api/src/org/apache/cloudstack/api/command/user/zone/ListZonesByCmd.java index 7bb6549514d..dbe775fdad6 100644 --- a/api/src/org/apache/cloudstack/api/command/user/zone/ListZonesByCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/zone/ListZonesByCmd.java @@ -19,11 +19,11 @@ package org.apache.cloudstack.api.command.user.zone; import java.util.ArrayList; import java.util.List; +import org.apache.cloudstack.api.response.DomainResponse; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseListCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.response.ListResponse; @@ -39,15 +39,17 @@ public class ListZonesByCmd extends BaseListCmd { ///////////////////////////////////////////////////// //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - @IdentityMapper(entityTableName="data_center") - @Parameter(name=ApiConstants.ID, type=CommandType.LONG, description="the ID of the zone") + @Parameter(name=ApiConstants.ID, type=CommandType.UUID, entityType=ZoneResponse.class, + description= "the ID of the zone") private Long id; - @Parameter(name=ApiConstants.AVAILABLE, type=CommandType.BOOLEAN, description="true if you want to retrieve all available Zones. False if you only want to return the Zones from which you have at least one VM. Default is false.") + @Parameter(name=ApiConstants.AVAILABLE, type=CommandType.BOOLEAN, + description="true if you want to retrieve all available Zones. False if you only want to return the Zones" + + " from which you have at least one VM. Default is false.") private Boolean available; - @IdentityMapper(entityTableName="domain") - @Parameter(name=ApiConstants.DOMAIN_ID, type=CommandType.LONG, description="the ID of the domain associated with the zone") + @Parameter(name=ApiConstants.DOMAIN_ID, type=CommandType.UUID, entityType=DomainResponse.class, + description="the ID of the domain associated with the zone") private Long domainId; @Parameter(name=ApiConstants.SHOW_CAPACITIES, type=CommandType.BOOLEAN, description="flag to display the capacity of the zones") diff --git a/api/src/org/apache/cloudstack/api/response/IPAddressResponse.java b/api/src/org/apache/cloudstack/api/response/IPAddressResponse.java index 18d32068e6b..ea87b361a3e 100644 --- a/api/src/org/apache/cloudstack/api/response/IPAddressResponse.java +++ b/api/src/org/apache/cloudstack/api/response/IPAddressResponse.java @@ -19,11 +19,14 @@ package org.apache.cloudstack.api.response; import java.util.Date; import java.util.List; +import com.cloud.network.IpAddress; import org.apache.cloudstack.api.ApiConstants; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; import org.apache.cloudstack.api.BaseResponse; +import org.apache.cloudstack.api.Entity; +@Entity(value=IpAddress.class) @SuppressWarnings("unused") public class IPAddressResponse extends BaseResponse implements ControlledEntityResponse { @SerializedName(ApiConstants.ID) @Param(description="public IP address id") diff --git a/api/src/org/apache/cloudstack/api/response/RemoteAccessVpnResponse.java b/api/src/org/apache/cloudstack/api/response/RemoteAccessVpnResponse.java index c8caa43ffcd..ca28f00bdfb 100644 --- a/api/src/org/apache/cloudstack/api/response/RemoteAccessVpnResponse.java +++ b/api/src/org/apache/cloudstack/api/response/RemoteAccessVpnResponse.java @@ -16,11 +16,14 @@ // under the License. package org.apache.cloudstack.api.response; +import com.cloud.network.RemoteAccessVpn; import org.apache.cloudstack.api.ApiConstants; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; import org.apache.cloudstack.api.BaseResponse; +import org.apache.cloudstack.api.Entity; +@Entity(value=RemoteAccessVpn.class) @SuppressWarnings("unused") public class RemoteAccessVpnResponse extends BaseResponse implements ControlledEntityResponse{ From c7e1cb651f20574bbd06cb191e3962d10f2171be Mon Sep 17 00:00:00 2001 From: Prasanna Santhanam Date: Thu, 20 Dec 2012 16:53:07 -0800 Subject: [PATCH 163/421] api: Annotate the Site2Site vpn commands Signed-off-by: Prasanna Santhanam Signed-off-by: Rohit Yadav --- .../command/user/vpn/CreateVpnConnectionCmd.java | 11 ++++++----- .../user/vpn/CreateVpnCustomerGatewayCmd.java | 8 ++++---- .../api/command/user/vpn/CreateVpnGatewayCmd.java | 6 +++--- .../command/user/vpn/DeleteVpnConnectionCmd.java | 5 +++-- .../user/vpn/DeleteVpnCustomerGatewayCmd.java | 6 +++--- .../api/command/user/vpn/DeleteVpnGatewayCmd.java | 6 +++--- .../api/command/user/vpn/ListVpnConnectionsCmd.java | 10 +++++----- .../user/vpn/ListVpnCustomerGatewaysCmd.java | 5 ++--- .../api/command/user/vpn/ListVpnGatewaysCmd.java | 9 ++++----- .../api/command/user/vpn/ResetVpnConnectionCmd.java | 13 +++++++------ .../user/vpn/UpdateVpnCustomerGatewayCmd.java | 12 ++++++------ .../response/Site2SiteCustomerGatewayResponse.java | 3 +++ .../response/Site2SiteVpnConnectionResponse.java | 3 +++ .../api/response/Site2SiteVpnGatewayResponse.java | 3 +++ 14 files changed, 55 insertions(+), 45 deletions(-) diff --git a/api/src/org/apache/cloudstack/api/command/user/vpn/CreateVpnConnectionCmd.java b/api/src/org/apache/cloudstack/api/command/user/vpn/CreateVpnConnectionCmd.java index 99567bf09b5..af0e3900de7 100644 --- a/api/src/org/apache/cloudstack/api/command/user/vpn/CreateVpnConnectionCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vpn/CreateVpnConnectionCmd.java @@ -16,13 +16,14 @@ // under the License. package org.apache.cloudstack.api.command.user.vpn; +import org.apache.cloudstack.api.response.Site2SiteCustomerGatewayResponse; +import org.apache.cloudstack.api.response.Site2SiteVpnGatewayResponse; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseAsyncCreateCmd; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; @@ -43,12 +44,12 @@ public class CreateVpnConnectionCmd extends BaseAsyncCreateCmd { ///////////////////////////////////////////////////// //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - @IdentityMapper(entityTableName="s2s_vpn_gateway") - @Parameter(name=ApiConstants.S2S_VPN_GATEWAY_ID, type=CommandType.LONG, required=true, description="id of the vpn gateway") + @Parameter(name=ApiConstants.S2S_VPN_GATEWAY_ID, type=CommandType.UUID, entityType=Site2SiteVpnGatewayResponse.class, + required=true, description="id of the vpn gateway") private Long vpnGatewayId; - @IdentityMapper(entityTableName="s2s_customer_gateway") - @Parameter(name=ApiConstants.S2S_CUSTOMER_GATEWAY_ID, type=CommandType.LONG, required=true, description="id of the customer gateway") + @Parameter(name=ApiConstants.S2S_CUSTOMER_GATEWAY_ID, type=CommandType.UUID, entityType=Site2SiteCustomerGatewayResponse.class, + required=true, description="id of the customer gateway") private Long customerGatewayId; ///////////////////////////////////////////////////// diff --git a/api/src/org/apache/cloudstack/api/command/user/vpn/CreateVpnCustomerGatewayCmd.java b/api/src/org/apache/cloudstack/api/command/user/vpn/CreateVpnCustomerGatewayCmd.java index af335402e0e..2259ff15834 100644 --- a/api/src/org/apache/cloudstack/api/command/user/vpn/CreateVpnCustomerGatewayCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vpn/CreateVpnCustomerGatewayCmd.java @@ -16,12 +16,12 @@ // under the License. package org.apache.cloudstack.api.command.user.vpn; +import org.apache.cloudstack.api.response.DomainResponse; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; @@ -69,9 +69,9 @@ public class CreateVpnCustomerGatewayCmd extends BaseAsyncCmd { @Parameter(name=ApiConstants.ACCOUNT, type=CommandType.STRING, description="the account associated with the gateway. Must be used with the domainId parameter.") private String accountName; - @IdentityMapper(entityTableName="domain") - @Parameter(name=ApiConstants.DOMAIN_ID, type=CommandType.LONG, description="the domain ID associated with the gateway. " + - "If used with the account parameter returns the gateway associated with the account for the specified domain.") + @Parameter(name=ApiConstants.DOMAIN_ID, type=CommandType.UUID, entityType=DomainResponse.class, + description="the domain ID associated with the gateway. If used with the account parameter returns the " + + "gateway associated with the account for the specified domain.") private Long domainId; ///////////////////////////////////////////////////// diff --git a/api/src/org/apache/cloudstack/api/command/user/vpn/CreateVpnGatewayCmd.java b/api/src/org/apache/cloudstack/api/command/user/vpn/CreateVpnGatewayCmd.java index 22c77511801..ec81594642a 100644 --- a/api/src/org/apache/cloudstack/api/command/user/vpn/CreateVpnGatewayCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vpn/CreateVpnGatewayCmd.java @@ -16,12 +16,12 @@ // under the License. package org.apache.cloudstack.api.command.user.vpn; +import org.apache.cloudstack.api.response.VpcResponse; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; @@ -39,8 +39,8 @@ public class CreateVpnGatewayCmd extends BaseAsyncCmd { ///////////////////////////////////////////////////// //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - @IdentityMapper(entityTableName="vpc") - @Parameter(name=ApiConstants.VPC_ID, type=CommandType.LONG, required=true, description="public ip address id of the vpn gateway") + @Parameter(name=ApiConstants.VPC_ID, type=CommandType.UUID, entityType=VpcResponse.class, + required=true, description="public ip address id of the vpn gateway") private Long vpcId; ///////////////////////////////////////////////////// diff --git a/api/src/org/apache/cloudstack/api/command/user/vpn/DeleteVpnConnectionCmd.java b/api/src/org/apache/cloudstack/api/command/user/vpn/DeleteVpnConnectionCmd.java index 98c0c55ec8a..9303f540421 100644 --- a/api/src/org/apache/cloudstack/api/command/user/vpn/DeleteVpnConnectionCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vpn/DeleteVpnConnectionCmd.java @@ -16,6 +16,7 @@ // under the License. package org.apache.cloudstack.api.command.user.vpn; +import org.apache.cloudstack.api.response.Site2SiteVpnConnectionResponse; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; @@ -40,8 +41,8 @@ public class DeleteVpnConnectionCmd extends BaseAsyncCmd { ///////////////////////////////////////////////////// //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - @IdentityMapper(entityTableName="s2s_vpn_connection") - @Parameter(name=ApiConstants.ID, type=CommandType.LONG, required=true, description="id of vpn connection") + @Parameter(name=ApiConstants.ID, type=CommandType.UUID, entityType=Site2SiteVpnConnectionResponse.class, + required=true, description="id of vpn connection") private Long id; ///////////////////////////////////////////////////// diff --git a/api/src/org/apache/cloudstack/api/command/user/vpn/DeleteVpnCustomerGatewayCmd.java b/api/src/org/apache/cloudstack/api/command/user/vpn/DeleteVpnCustomerGatewayCmd.java index f6c25bf2b0c..efb59bfe461 100644 --- a/api/src/org/apache/cloudstack/api/command/user/vpn/DeleteVpnCustomerGatewayCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vpn/DeleteVpnCustomerGatewayCmd.java @@ -16,12 +16,12 @@ // under the License. package org.apache.cloudstack.api.command.user.vpn; +import org.apache.cloudstack.api.response.Site2SiteCustomerGatewayResponse; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; @@ -39,8 +39,8 @@ public class DeleteVpnCustomerGatewayCmd extends BaseAsyncCmd { ///////////////////////////////////////////////////// //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - @IdentityMapper(entityTableName="s2s_customer_gateway") - @Parameter(name=ApiConstants.ID, type=CommandType.LONG, required=true, description="id of customer gateway") + @Parameter(name=ApiConstants.ID, type=CommandType.UUID, entityType=Site2SiteCustomerGatewayResponse.class, + required=true, description="id of customer gateway") private Long id; ///////////////////////////////////////////////////// diff --git a/api/src/org/apache/cloudstack/api/command/user/vpn/DeleteVpnGatewayCmd.java b/api/src/org/apache/cloudstack/api/command/user/vpn/DeleteVpnGatewayCmd.java index fcc3c9b8783..29ef56c93a6 100644 --- a/api/src/org/apache/cloudstack/api/command/user/vpn/DeleteVpnGatewayCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vpn/DeleteVpnGatewayCmd.java @@ -16,12 +16,12 @@ // under the License. package org.apache.cloudstack.api.command.user.vpn; +import org.apache.cloudstack.api.response.Site2SiteVpnGatewayResponse; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; @@ -39,8 +39,8 @@ public class DeleteVpnGatewayCmd extends BaseAsyncCmd { ///////////////////////////////////////////////////// //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - @IdentityMapper(entityTableName="s2s_vpn_gateway") - @Parameter(name=ApiConstants.ID, type=CommandType.LONG, required=true, description="id of customer gateway") + @Parameter(name=ApiConstants.ID, type=CommandType.UUID, entityType=Site2SiteVpnGatewayResponse.class, + required=true, description="id of customer gateway") private Long id; ///////////////////////////////////////////////////// diff --git a/api/src/org/apache/cloudstack/api/command/user/vpn/ListVpnConnectionsCmd.java b/api/src/org/apache/cloudstack/api/command/user/vpn/ListVpnConnectionsCmd.java index 36bc89c6d75..68154df4dcd 100644 --- a/api/src/org/apache/cloudstack/api/command/user/vpn/ListVpnConnectionsCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vpn/ListVpnConnectionsCmd.java @@ -19,6 +19,7 @@ package org.apache.cloudstack.api.command.user.vpn; import java.util.ArrayList; import java.util.List; +import org.apache.cloudstack.api.response.VpcResponse; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; @@ -40,13 +41,12 @@ public class ListVpnConnectionsCmd extends BaseListProjectAndAccountResourcesCmd ///////////////////////////////////////////////////// //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - - @IdentityMapper(entityTableName="s2s_vpn_connection") - @Parameter(name=ApiConstants.ID, type=CommandType.LONG, description="id of the vpn connection") + @Parameter(name=ApiConstants.ID, type=CommandType.UUID, entityType=Site2SiteVpnConnectionResponse.class, + description="id of the vpn connection") private Long id; - @IdentityMapper(entityTableName="vpc") - @Parameter(name=ApiConstants.VPC_ID, type=CommandType.LONG, description="id of vpc") + @Parameter(name=ApiConstants.VPC_ID, type=CommandType.UUID, entityType=VpcResponse.class, + description="id of vpc") private Long vpcId; ///////////////////////////////////////////////////// diff --git a/api/src/org/apache/cloudstack/api/command/user/vpn/ListVpnCustomerGatewaysCmd.java b/api/src/org/apache/cloudstack/api/command/user/vpn/ListVpnCustomerGatewaysCmd.java index b1836e99d7b..c279a77009c 100644 --- a/api/src/org/apache/cloudstack/api/command/user/vpn/ListVpnCustomerGatewaysCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vpn/ListVpnCustomerGatewaysCmd.java @@ -23,7 +23,6 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; 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.response.ListResponse; @@ -41,8 +40,8 @@ public class ListVpnCustomerGatewaysCmd extends BaseListProjectAndAccountResourc //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - @IdentityMapper(entityTableName="s2s_customer_gateway") - @Parameter(name=ApiConstants.ID, type=CommandType.LONG, description="id of the customer gateway") + @Parameter(name=ApiConstants.ID, type=CommandType.UUID, entityType=Site2SiteCustomerGatewayResponse.class, + description="id of the customer gateway") private Long id; ///////////////////////////////////////////////////// diff --git a/api/src/org/apache/cloudstack/api/command/user/vpn/ListVpnGatewaysCmd.java b/api/src/org/apache/cloudstack/api/command/user/vpn/ListVpnGatewaysCmd.java index 239d5033745..2c7a83e7242 100644 --- a/api/src/org/apache/cloudstack/api/command/user/vpn/ListVpnGatewaysCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vpn/ListVpnGatewaysCmd.java @@ -19,11 +19,11 @@ package org.apache.cloudstack.api.command.user.vpn; import java.util.ArrayList; import java.util.List; +import org.apache.cloudstack.api.response.VpcResponse; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; 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.response.ListResponse; @@ -41,12 +41,11 @@ public class ListVpnGatewaysCmd extends BaseListProjectAndAccountResourcesCmd { //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - @IdentityMapper(entityTableName="s2s_vpn_gateway") - @Parameter(name=ApiConstants.ID, type=CommandType.LONG, description="id of the vpn gateway") + @Parameter(name=ApiConstants.ID, type=CommandType.UUID, entityType=Site2SiteVpnGatewayResponse.class, + description="id of the vpn gateway") private Long id; - @IdentityMapper(entityTableName="vpc") - @Parameter(name=ApiConstants.VPC_ID, type=CommandType.LONG, description="id of vpc") + @Parameter(name=ApiConstants.VPC_ID, type=CommandType.UUID, entityType=VpcResponse.class, description="id of vpc") private Long vpcId; ///////////////////////////////////////////////////// diff --git a/api/src/org/apache/cloudstack/api/command/user/vpn/ResetVpnConnectionCmd.java b/api/src/org/apache/cloudstack/api/command/user/vpn/ResetVpnConnectionCmd.java index 6d6f240efc0..770e8aae7d3 100644 --- a/api/src/org/apache/cloudstack/api/command/user/vpn/ResetVpnConnectionCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vpn/ResetVpnConnectionCmd.java @@ -16,12 +16,12 @@ // under the License. package org.apache.cloudstack.api.command.user.vpn; +import org.apache.cloudstack.api.response.DomainResponse; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; @@ -41,15 +41,16 @@ public class ResetVpnConnectionCmd extends BaseAsyncCmd { ///////////////////////////////////////////////////// //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - @IdentityMapper(entityTableName="s2s_vpn_connection") - @Parameter(name=ApiConstants.ID, type=CommandType.LONG, required=true, description="id of vpn connection") + @Parameter(name=ApiConstants.ID, type=CommandType.UUID, entityType=Site2SiteVpnConnectionResponse.class, + required=true, description="id of vpn connection") private Long id; - @Parameter(name=ApiConstants.ACCOUNT, type=CommandType.STRING, description="an optional account for connection. Must be used with domainId.") + @Parameter(name=ApiConstants.ACCOUNT, type=CommandType.STRING, description="an optional account for connection. " + + "Must be used with domainId.") private String accountName; - @IdentityMapper(entityTableName="domain") - @Parameter(name=ApiConstants.DOMAIN_ID, type=CommandType.LONG, description="an optional domainId for connection. If the account parameter is used, domainId must also be used.") + @Parameter(name=ApiConstants.DOMAIN_ID, type=CommandType.UUID, entityType=DomainResponse.class, + description="an optional domainId for connection. If the account parameter is used, domainId must also be used.") private Long domainId; ///////////////////////////////////////////////////// diff --git a/api/src/org/apache/cloudstack/api/command/user/vpn/UpdateVpnCustomerGatewayCmd.java b/api/src/org/apache/cloudstack/api/command/user/vpn/UpdateVpnCustomerGatewayCmd.java index 7520c6dc2a8..9a0ba4e032b 100644 --- a/api/src/org/apache/cloudstack/api/command/user/vpn/UpdateVpnCustomerGatewayCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vpn/UpdateVpnCustomerGatewayCmd.java @@ -16,12 +16,12 @@ // under the License. package org.apache.cloudstack.api.command.user.vpn; +import org.apache.cloudstack.api.response.DomainResponse; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; @@ -39,8 +39,8 @@ public class UpdateVpnCustomerGatewayCmd extends BaseAsyncCmd { ///////////////////////////////////////////////////// //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - @IdentityMapper(entityTableName="s2s_customer_gateway") - @Parameter(name=ApiConstants.ID, type=CommandType.LONG, required=true, description="id of customer gateway") + @Parameter(name=ApiConstants.ID, type=CommandType.UUID, entityType=Site2SiteCustomerGatewayResponse.class, + required=true, description="id of customer gateway") private Long id; @Parameter(name=ApiConstants.NAME, type=CommandType.STRING, required=false, description="name of this customer gateway") @@ -73,9 +73,9 @@ public class UpdateVpnCustomerGatewayCmd extends BaseAsyncCmd { @Parameter(name=ApiConstants.ACCOUNT, type=CommandType.STRING, description="the account associated with the gateway. Must be used with the domainId parameter.") private String accountName; - @IdentityMapper(entityTableName="domain") - @Parameter(name=ApiConstants.DOMAIN_ID, type=CommandType.LONG, description="the domain ID associated with the gateway. " + - "If used with the account parameter returns the gateway associated with the account for the specified domain.") + @Parameter(name=ApiConstants.DOMAIN_ID, type=CommandType.UUID, entityType=DomainResponse.class, + description="the domain ID associated with the gateway. If used with the account parameter returns the " + + "gateway associated with the account for the specified domain.") private Long domainId; ///////////////////////////////////////////////////// diff --git a/api/src/org/apache/cloudstack/api/response/Site2SiteCustomerGatewayResponse.java b/api/src/org/apache/cloudstack/api/response/Site2SiteCustomerGatewayResponse.java index bd211413f89..5f42fa2a87b 100644 --- a/api/src/org/apache/cloudstack/api/response/Site2SiteCustomerGatewayResponse.java +++ b/api/src/org/apache/cloudstack/api/response/Site2SiteCustomerGatewayResponse.java @@ -18,11 +18,14 @@ package org.apache.cloudstack.api.response; import java.util.Date; +import com.cloud.network.Site2SiteCustomerGateway; import org.apache.cloudstack.api.ApiConstants; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; import org.apache.cloudstack.api.BaseResponse; +import org.apache.cloudstack.api.Entity; +@Entity(value=Site2SiteCustomerGateway.class) @SuppressWarnings("unused") public class Site2SiteCustomerGatewayResponse extends BaseResponse implements ControlledEntityResponse { @SerializedName(ApiConstants.ID) @Param(description="the vpn gateway ID") diff --git a/api/src/org/apache/cloudstack/api/response/Site2SiteVpnConnectionResponse.java b/api/src/org/apache/cloudstack/api/response/Site2SiteVpnConnectionResponse.java index 093f57c2415..da4adc39375 100644 --- a/api/src/org/apache/cloudstack/api/response/Site2SiteVpnConnectionResponse.java +++ b/api/src/org/apache/cloudstack/api/response/Site2SiteVpnConnectionResponse.java @@ -18,11 +18,14 @@ package org.apache.cloudstack.api.response; import java.util.Date; +import com.cloud.network.Site2SiteVpnConnection; import org.apache.cloudstack.api.ApiConstants; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; import org.apache.cloudstack.api.BaseResponse; +import org.apache.cloudstack.api.Entity; +@Entity(value=Site2SiteVpnConnection.class) @SuppressWarnings("unused") public class Site2SiteVpnConnectionResponse extends BaseResponse implements ControlledEntityResponse { @SerializedName(ApiConstants.ID) @Param(description="the vpn gateway ID") diff --git a/api/src/org/apache/cloudstack/api/response/Site2SiteVpnGatewayResponse.java b/api/src/org/apache/cloudstack/api/response/Site2SiteVpnGatewayResponse.java index 9265527da8a..03c9a0d26d4 100644 --- a/api/src/org/apache/cloudstack/api/response/Site2SiteVpnGatewayResponse.java +++ b/api/src/org/apache/cloudstack/api/response/Site2SiteVpnGatewayResponse.java @@ -18,11 +18,14 @@ package org.apache.cloudstack.api.response; import java.util.Date; +import com.cloud.network.Site2SiteVpnGateway; import org.apache.cloudstack.api.ApiConstants; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; import org.apache.cloudstack.api.BaseResponse; +import org.apache.cloudstack.api.Entity; +@Entity(value=Site2SiteVpnGateway.class) @SuppressWarnings("unused") public class Site2SiteVpnGatewayResponse extends BaseResponse implements ControlledEntityResponse { @SerializedName(ApiConstants.ID) @Param(description="the vpn gateway ID") From 6a032e0295809105adedfadcc5c322e6c03730c4 Mon Sep 17 00:00:00 2001 From: Prasanna Santhanam Date: Fri, 21 Dec 2012 14:25:01 -0800 Subject: [PATCH 164/421] api: annotate the vpc related Cmds Signed-off-by: Prasanna Santhanam --- .../user/vpc/CreateStaticRouteCmd.java | 7 +++-- .../api/command/user/vpc/CreateVPCCmd.java | 24 +++++++++-------- .../user/vpc/ListPrivateGatewaysCmd.java | 10 +++---- .../command/user/vpc/ListStaticRoutesCmd.java | 15 ++++++----- .../command/user/vpc/ListVPCOfferingsCmd.java | 5 ++-- .../api/command/user/vpc/ListVPCsCmd.java | 26 ++++++++++--------- .../api/command/user/vpc/RestartVPCCmd.java | 5 ++-- .../api/command/user/vpc/UpdateVPCCmd.java | 5 ++-- .../api/response/StaticRouteResponse.java | 3 +++ .../api/response/VpcOfferingResponse.java | 3 +++ 10 files changed, 55 insertions(+), 48 deletions(-) diff --git a/api/src/org/apache/cloudstack/api/command/user/vpc/CreateStaticRouteCmd.java b/api/src/org/apache/cloudstack/api/command/user/vpc/CreateStaticRouteCmd.java index a1d2c5de6e9..9b674d98589 100644 --- a/api/src/org/apache/cloudstack/api/command/user/vpc/CreateStaticRouteCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vpc/CreateStaticRouteCmd.java @@ -16,12 +16,12 @@ // under the License. package org.apache.cloudstack.api.command.user.vpc; +import org.apache.cloudstack.api.response.PrivateGatewayResponse; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseAsyncCreateCmd; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; @@ -41,9 +41,8 @@ public class CreateStaticRouteCmd extends BaseAsyncCreateCmd{ private static final String s_name = "createstaticrouteresponse"; public static final Logger s_logger = Logger.getLogger(CreateStaticRouteCmd.class.getName()); - @IdentityMapper(entityTableName="vpc_gateways") - @Parameter(name=ApiConstants.GATEWAY_ID, type=CommandType.LONG, required=true, - description="the gateway id we are creating static route for") + @Parameter(name=ApiConstants.GATEWAY_ID, type=CommandType.UUID, entityType=PrivateGatewayResponse.class, + required=true, description="the gateway id we are creating static route for") private Long gatewayId; @Parameter(name = ApiConstants.CIDR, required = true, type = CommandType.STRING, description = "static route cidr") diff --git a/api/src/org/apache/cloudstack/api/command/user/vpc/CreateVPCCmd.java b/api/src/org/apache/cloudstack/api/command/user/vpc/CreateVPCCmd.java index 111f9fac24f..b5ad04eb256 100644 --- a/api/src/org/apache/cloudstack/api/command/user/vpc/CreateVPCCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vpc/CreateVPCCmd.java @@ -16,16 +16,19 @@ // under the License. package org.apache.cloudstack.api.command.user.vpc; +import org.apache.cloudstack.api.response.VpcResponse; +import org.apache.cloudstack.api.response.DomainResponse; +import org.apache.cloudstack.api.response.ProjectResponse; +import org.apache.cloudstack.api.response.ZoneResponse; +import org.apache.cloudstack.api.response.VpcOfferingResponse; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseAsyncCreateCmd; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; -import org.apache.cloudstack.api.response.VpcResponse; import com.cloud.event.EventTypes; import com.cloud.exception.ConcurrentOperationException; import com.cloud.exception.InsufficientCapacityException; @@ -47,17 +50,17 @@ public class CreateVPCCmd extends BaseAsyncCreateCmd{ "Must be used with the domainId parameter.") private String accountName; - @IdentityMapper(entityTableName="domain") - @Parameter(name=ApiConstants.DOMAIN_ID, type=CommandType.LONG, description="the domain ID associated with the VPC. " + + @Parameter(name=ApiConstants.DOMAIN_ID, type=CommandType.UUID, entityType=DomainResponse.class, + description="the domain ID associated with the VPC. " + "If used with the account parameter returns the VPC associated with the account for the specified domain.") private Long domainId; - @IdentityMapper(entityTableName="projects") - @Parameter(name=ApiConstants.PROJECT_ID, type=CommandType.LONG, description="create VPC for the project") + @Parameter(name=ApiConstants.PROJECT_ID, type=CommandType.UUID, entityType=ProjectResponse.class, + description="create VPC for the project") private Long projectId; - @IdentityMapper(entityTableName="data_center") - @Parameter(name=ApiConstants.ZONE_ID, type=CommandType.LONG, required=true, description="the ID of the availability zone") + @Parameter(name=ApiConstants.ZONE_ID, type=CommandType.UUID, entityType=ZoneResponse.class, + required=true, description="the ID of the availability zone") private Long zoneId; @Parameter(name=ApiConstants.NAME, type=CommandType.STRING, required=true, description="the name of the VPC") @@ -71,9 +74,8 @@ public class CreateVPCCmd extends BaseAsyncCreateCmd{ "guest networks' cidrs should be within this CIDR") private String cidr; - - @IdentityMapper(entityTableName="vpc_offerings") - @Parameter(name=ApiConstants.VPC_OFF_ID, type=CommandType.LONG, required=true, description="the ID of the VPC offering") + @Parameter(name=ApiConstants.VPC_OFF_ID, type=CommandType.UUID, entityType=VpcOfferingResponse.class, + required=true, description="the ID of the VPC offering") private Long vpcOffering; @Parameter(name=ApiConstants.NETWORK_DOMAIN, type=CommandType.STRING, diff --git a/api/src/org/apache/cloudstack/api/command/user/vpc/ListPrivateGatewaysCmd.java b/api/src/org/apache/cloudstack/api/command/user/vpc/ListPrivateGatewaysCmd.java index 3cde18c3c1f..12062c831e4 100644 --- a/api/src/org/apache/cloudstack/api/command/user/vpc/ListPrivateGatewaysCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vpc/ListPrivateGatewaysCmd.java @@ -19,11 +19,11 @@ package org.apache.cloudstack.api.command.user.vpc; import java.util.ArrayList; import java.util.List; +import org.apache.cloudstack.api.response.VpcResponse; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; 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.response.ListResponse; @@ -40,8 +40,8 @@ public class ListPrivateGatewaysCmd extends BaseListProjectAndAccountResourcesCm ///////////////////////////////////////////////////// //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - @IdentityMapper(entityTableName="vpc_gateways") - @Parameter(name=ApiConstants.ID, type=CommandType.LONG, description="list private gateway by id") + @Parameter(name=ApiConstants.ID, type=CommandType.UUID, entityType=PrivateGatewayResponse.class, + description="list private gateway by id") private Long id; @Parameter(name=ApiConstants.IP_ADDRESS, type=CommandType.STRING, description="list gateways by ip address") @@ -50,8 +50,8 @@ public class ListPrivateGatewaysCmd extends BaseListProjectAndAccountResourcesCm @Parameter(name=ApiConstants.VLAN, type=CommandType.STRING, description="list gateways by vlan") private String vlan; - @IdentityMapper(entityTableName="vpc") - @Parameter(name=ApiConstants.VPC_ID, type=CommandType.LONG, description="list gateways by vpc") + @Parameter(name=ApiConstants.VPC_ID, type=CommandType.UUID, entityType=VpcResponse.class, + description="list gateways by vpc") private Long vpcId; @Parameter(name=ApiConstants.STATE, type=CommandType.STRING, description="list gateways by state") diff --git a/api/src/org/apache/cloudstack/api/command/user/vpc/ListStaticRoutesCmd.java b/api/src/org/apache/cloudstack/api/command/user/vpc/ListStaticRoutesCmd.java index 173db0cb02e..9efcc6d8e83 100644 --- a/api/src/org/apache/cloudstack/api/command/user/vpc/ListStaticRoutesCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vpc/ListStaticRoutesCmd.java @@ -20,13 +20,14 @@ import java.util.ArrayList; import java.util.List; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseListTaggedResourcesCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.response.ListResponse; +import org.apache.cloudstack.api.response.PrivateGatewayResponse; import org.apache.cloudstack.api.response.StaticRouteResponse; import com.cloud.network.vpc.StaticRoute; import com.cloud.utils.Pair; +import org.apache.cloudstack.api.response.VpcResponse; @Implementation(description="Lists all static routes", responseObject=StaticRouteResponse.class) public class ListStaticRoutesCmd extends BaseListTaggedResourcesCmd { @@ -35,16 +36,16 @@ public class ListStaticRoutesCmd extends BaseListTaggedResourcesCmd { ///////////////////////////////////////////////////// //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - @IdentityMapper(entityTableName="static_routes") - @Parameter(name=ApiConstants.ID, type=CommandType.LONG, description="list static route by id") + @Parameter(name=ApiConstants.ID, type=CommandType.UUID, entityType=StaticRouteResponse.class, + description="list static route by id") private Long id; - @IdentityMapper(entityTableName="vpc") - @Parameter(name=ApiConstants.VPC_ID, type=CommandType.LONG, description="list static routes by vpc id") + @Parameter(name=ApiConstants.VPC_ID, type=CommandType.UUID, entityType=VpcResponse.class, + description="list static routes by vpc id") private Long vpcId; - @IdentityMapper(entityTableName="vpc_gateways") - @Parameter(name=ApiConstants.GATEWAY_ID, type=CommandType.LONG, description="list static routes by gateway id") + @Parameter(name=ApiConstants.GATEWAY_ID, type=CommandType.UUID, entityType=PrivateGatewayResponse.class, + description="list static routes by gateway id") private Long gatewayId; public Long getId() { diff --git a/api/src/org/apache/cloudstack/api/command/user/vpc/ListVPCOfferingsCmd.java b/api/src/org/apache/cloudstack/api/command/user/vpc/ListVPCOfferingsCmd.java index 04b2d9a4c41..d10eac787de 100644 --- a/api/src/org/apache/cloudstack/api/command/user/vpc/ListVPCOfferingsCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vpc/ListVPCOfferingsCmd.java @@ -23,7 +23,6 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseListCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.response.ListResponse; @@ -38,8 +37,8 @@ public class ListVPCOfferingsCmd extends BaseListCmd{ ///////////////////////////////////////////////////// //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - @IdentityMapper(entityTableName="vpc_offerings") - @Parameter(name=ApiConstants.ID, type=CommandType.LONG, description="list VPC offerings by id") + @Parameter(name=ApiConstants.ID, type=CommandType.UUID, entityType=VpcOfferingResponse.class, + description="list VPC offerings by id") private Long id; @Parameter(name=ApiConstants.NAME, type=CommandType.STRING, description="list VPC offerings by name") diff --git a/api/src/org/apache/cloudstack/api/command/user/vpc/ListVPCsCmd.java b/api/src/org/apache/cloudstack/api/command/user/vpc/ListVPCsCmd.java index 9a244c349d5..e9a7e290422 100644 --- a/api/src/org/apache/cloudstack/api/command/user/vpc/ListVPCsCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vpc/ListVPCsCmd.java @@ -19,15 +19,17 @@ package org.apache.cloudstack.api.command.user.vpc; import java.util.ArrayList; import java.util.List; +import org.apache.cloudstack.api.response.VpcResponse; +import org.apache.cloudstack.api.response.ZoneResponse; +import org.apache.cloudstack.api.response.VpcOfferingResponse; +import org.apache.cloudstack.api.response.DomainResponse; +import org.apache.cloudstack.api.response.ListResponse; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseListTaggedResourcesCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; -import org.apache.cloudstack.api.response.ListResponse; -import org.apache.cloudstack.api.response.VpcResponse; import com.cloud.network.vpc.Vpc; @@ -38,13 +40,13 @@ public class ListVPCsCmd extends BaseListTaggedResourcesCmd{ ///////////////////////////////////////////////////// //////////////// API parameters ///////////////////// - ///////////////////////////////////////////////////// - @IdentityMapper(entityTableName="vpc") - @Parameter(name=ApiConstants.ID, type=CommandType.LONG, description="list VPC by id") + //////////////////////////////////////////////////// + @Parameter(name=ApiConstants.ID, type=CommandType.UUID, entityType=VpcResponse.class, + description="list VPC by id") private Long id; - @IdentityMapper(entityTableName="data_center") - @Parameter(name=ApiConstants.ZONE_ID, type=CommandType.LONG, description="list by zone") + @Parameter(name=ApiConstants.ZONE_ID, type=CommandType.UUID, entityType=ZoneResponse.class, + description="list by zone") private Long zoneId; @Parameter(name=ApiConstants.NAME, type=CommandType.STRING, description="list by name of the VPC") @@ -58,16 +60,16 @@ public class ListVPCsCmd extends BaseListTaggedResourcesCmd{ "guest networks' cidrs should be within this CIDR") private String cidr; - @IdentityMapper(entityTableName="vpc_offerings") - @Parameter(name=ApiConstants.VPC_OFF_ID, type=CommandType.LONG, description="list by ID of the VPC offering") + @Parameter(name=ApiConstants.VPC_OFF_ID, type=CommandType.UUID, entityType=VpcOfferingResponse.class + , description="list by ID of the VPC offering") private Long VpcOffId; @Parameter(name=ApiConstants.ACCOUNT, type=CommandType.STRING, description="list by account associated with the VPC. " + "Must be used with the domainId parameter.") private String accountName; - @IdentityMapper(entityTableName="domain") - @Parameter(name=ApiConstants.DOMAIN_ID, type=CommandType.LONG, description="list by domain ID associated with the VPC. " + + @Parameter(name=ApiConstants.DOMAIN_ID, type=CommandType.UUID, entityType=DomainResponse.class, + description="list by domain ID associated with the VPC. " + "If used with the account parameter returns the VPC associated with the account for the specified domain.") private Long domainId; diff --git a/api/src/org/apache/cloudstack/api/command/user/vpc/RestartVPCCmd.java b/api/src/org/apache/cloudstack/api/command/user/vpc/RestartVPCCmd.java index e954474ab29..47065b4d239 100644 --- a/api/src/org/apache/cloudstack/api/command/user/vpc/RestartVPCCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vpc/RestartVPCCmd.java @@ -21,7 +21,6 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; @@ -43,8 +42,8 @@ public class RestartVPCCmd extends BaseAsyncCmd{ //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - @IdentityMapper(entityTableName="vpc") - @Parameter(name=ApiConstants.ID, type=CommandType.LONG, description="the id of the VPC") + @Parameter(name=ApiConstants.ID, type=CommandType.UUID, entityType=VpcResponse.class, + description="the id of the VPC") private Long id; diff --git a/api/src/org/apache/cloudstack/api/command/user/vpc/UpdateVPCCmd.java b/api/src/org/apache/cloudstack/api/command/user/vpc/UpdateVPCCmd.java index a0c16e15a0a..3299035bd15 100644 --- a/api/src/org/apache/cloudstack/api/command/user/vpc/UpdateVPCCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vpc/UpdateVPCCmd.java @@ -21,7 +21,6 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; @@ -39,8 +38,8 @@ public class UpdateVPCCmd extends BaseAsyncCmd{ //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - @IdentityMapper(entityTableName="vpc") - @Parameter(name=ApiConstants.ID, type=CommandType.LONG, description="the id of the VPC") + @Parameter(name=ApiConstants.ID, type=CommandType.UUID, entityType=VpcResponse.class, + description="the id of the VPC") private Long id; @Parameter(name=ApiConstants.NAME, type=CommandType.STRING, description="the name of the VPC") diff --git a/api/src/org/apache/cloudstack/api/response/StaticRouteResponse.java b/api/src/org/apache/cloudstack/api/response/StaticRouteResponse.java index 54831fe4a49..bfd2bb16a55 100644 --- a/api/src/org/apache/cloudstack/api/response/StaticRouteResponse.java +++ b/api/src/org/apache/cloudstack/api/response/StaticRouteResponse.java @@ -18,11 +18,14 @@ package org.apache.cloudstack.api.response; import java.util.List; +import com.cloud.network.vpc.StaticRoute; import org.apache.cloudstack.api.ApiConstants; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; import org.apache.cloudstack.api.BaseResponse; +import org.apache.cloudstack.api.Entity; +@Entity(value=StaticRoute.class) @SuppressWarnings("unused") public class StaticRouteResponse extends BaseResponse implements ControlledEntityResponse{ @SerializedName(ApiConstants.ID) @Param(description="the ID of static route") diff --git a/api/src/org/apache/cloudstack/api/response/VpcOfferingResponse.java b/api/src/org/apache/cloudstack/api/response/VpcOfferingResponse.java index 9ea47f9bd3c..8395612a8de 100644 --- a/api/src/org/apache/cloudstack/api/response/VpcOfferingResponse.java +++ b/api/src/org/apache/cloudstack/api/response/VpcOfferingResponse.java @@ -19,11 +19,14 @@ package org.apache.cloudstack.api.response; import java.util.Date; import java.util.List; +import com.cloud.network.vpc.VpcOffering; import org.apache.cloudstack.api.ApiConstants; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; import org.apache.cloudstack.api.BaseResponse; +import org.apache.cloudstack.api.Entity; +@Entity(value=VpcOffering.class) @SuppressWarnings("unused") public class VpcOfferingResponse extends BaseResponse { @SerializedName("id") @Param(description="the id of the vpc offering") From 03b47cb5010f0244b861cf0f9b6c9f12ce4dced3 Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Fri, 21 Dec 2012 14:39:04 -0800 Subject: [PATCH 165/421] api: Temp. fix to be backward compatible to old way of id passing For some apis, the param=-1 is used to evaluate conditionals. Allow -1 to be passed for now. This is a APITODO/FIXME to fix stuff in service layer and then only get rid of it. Signed-off-by: Rohit Yadav --- server/src/com/cloud/api/ApiDispatcher.java | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/server/src/com/cloud/api/ApiDispatcher.java b/server/src/com/cloud/api/ApiDispatcher.java index 99ba05da833..839073edad7 100755 --- a/server/src/com/cloud/api/ApiDispatcher.java +++ b/server/src/com/cloud/api/ApiDispatcher.java @@ -617,6 +617,12 @@ public class ApiDispatcher { case UUID: if (paramObj.toString().isEmpty()) break; + if (paramObj.toString().equals("-1")) { + // FIXME: This is to handle a lot of hardcoded special cases where -1 is sent + // APITODO: Find and get rid of all hardcoded params in API Cmds and service layer + field.set(cmdObj, -1L); + break; + } // There may be multiple entities defined on the @Entity of a Response.class // UUID CommandType would expect only one entityType, so use the first entityType Class[] entities = annotation.entityType()[0].getAnnotation(Entity.class).value(); From 3ae5986b87852c094f2412b22345bc4d10cb3ade Mon Sep 17 00:00:00 2001 From: Kishan Kavala Date: Fri, 21 Dec 2012 15:27:00 +0530 Subject: [PATCH 166/421] Update DB version during DB deploy 1. Modified create-schema.sql to add version as 4.1.0 instead of 4.0.0 2. Removed schema-40to41.sql amd moved the content to schema-40to410.sql 3. Added to schema-40to410.sql Upgrade40to41.java Conflicts: server/src/com/cloud/upgrade/dao/Upgrade40to41.java setup/db/create-schema.sql setup/db/db/schema-40to41.sql setup/db/db/schema-40to410.sql Signed-off-by: Min Chen --- .../com/cloud/upgrade/dao/Upgrade40to41.java | 6 +-- setup/db/create-schema.sql | 8 +-- .../{schema-40to41.sql => schema-40to410.sql} | 50 +++++++++++++++++-- 3 files changed, 55 insertions(+), 9 deletions(-) rename setup/db/db/{schema-40to41.sql => schema-40to410.sql} (86%) mode change 100755 => 100644 diff --git a/server/src/com/cloud/upgrade/dao/Upgrade40to41.java b/server/src/com/cloud/upgrade/dao/Upgrade40to41.java index a3fb2ea1091..3ba0ed8a737 100644 --- a/server/src/com/cloud/upgrade/dao/Upgrade40to41.java +++ b/server/src/com/cloud/upgrade/dao/Upgrade40to41.java @@ -27,7 +27,7 @@ import com.cloud.utils.script.Script; * @author htrippaers * */ -public class Upgrade40to41 extends Upgrade30xBase implements DbUpgrade { +public class Upgrade40to41 implements DbUpgrade { /** * @@ -65,9 +65,9 @@ public class Upgrade40to41 extends Upgrade30xBase implements DbUpgrade { */ @Override public File[] getPrepareScripts() { - String script = Script.findScript("", "db/schema-40to41.sql"); + String script = Script.findScript("", "db/schema-40to410.sql"); if (script == null) { - throw new CloudRuntimeException("Unable to find db/schema-40to41.sql"); + throw new CloudRuntimeException("Unable to find db/schema-40to410.sql"); } return new File[] { new File(script) }; diff --git a/setup/db/create-schema.sql b/setup/db/create-schema.sql index c01a5cdccac..365ff968740 100755 --- a/setup/db/create-schema.sql +++ b/setup/db/create-schema.sql @@ -164,7 +164,8 @@ CREATE TABLE `cloud`.`version` ( INDEX `i_version__version`(`version`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; -INSERT INTO `version` (`version`, `updated`, `step`) VALUES('@VERSION@', now(), 'Complete'); + +INSERT INTO `version` (`version`, `updated`, `step`) VALUES('4.1.0', now(), 'Complete'); CREATE TABLE `cloud`.`op_it_work` ( `id` char(40) COMMENT 'reservation id', @@ -1115,6 +1116,7 @@ CREATE TABLE `cloud`.`upload` ( `id` bigint unsigned NOT NULL auto_increment, `host_id` bigint unsigned NOT NULL, `type_id` bigint unsigned NOT NULL, + `uuid` varchar(40), `type` varchar(255), `mode` varchar(255), `created` DATETIME NOT NULL, @@ -1337,7 +1339,7 @@ CREATE TABLE `cloud`.`async_job` ( `session_key` varchar(64) COMMENT 'all async-job manage to apply session based security enforcement', `instance_type` varchar(64) COMMENT 'instance_type and instance_id work together to allow attaching an instance object to a job', `instance_id` bigint unsigned, - `job_cmd` varchar(64) NOT NULL COMMENT 'command name', + `job_cmd` varchar(255) NOT NULL COMMENT 'command name', `job_cmd_originator` varchar(64) COMMENT 'command originator', `job_cmd_info` text COMMENT 'command parameter info', `job_cmd_ver` int(1) COMMENT 'command version', @@ -2511,7 +2513,7 @@ INSERT INTO `cloud`.`counter` (id, source, name, value,created) VALUES (100,'net SET foreign_key_checks = 1; -ALTER TABLE upload ADD uuid VARCHAR(40); + --- DB views for list api --- DROP VIEW IF EXISTS `cloud`.`user_vm_view`; diff --git a/setup/db/db/schema-40to41.sql b/setup/db/db/schema-40to410.sql old mode 100755 new mode 100644 similarity index 86% rename from setup/db/db/schema-40to41.sql rename to setup/db/db/schema-40to410.sql index d94aed87302..2ebea02dade --- a/setup/db/db/schema-40to41.sql +++ b/setup/db/db/schema-40to410.sql @@ -5,9 +5,9 @@ -- 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 @@ -15,9 +15,53 @@ -- specific language governing permissions and limitations -- under the License. --- Schema upgrade from 4.0 to 4.1; +--; +-- Schema upgrade from 4.0.0 to 4.1.0; +--; + +CREATE TABLE `cloud`.`s3` ( + `id` bigint unsigned NOT NULL AUTO_INCREMENT COMMENT 'id', + `uuid` varchar(40), + `access_key` varchar(20) NOT NULL COMMENT ' The S3 access key', + `secret_key` varchar(40) NOT NULL COMMENT ' The S3 secret key', + `end_point` varchar(1024) COMMENT ' The S3 host', + `bucket` varchar(63) NOT NULL COMMENT ' The S3 host', + `https` tinyint unsigned DEFAULT NULL COMMENT ' Flag indicating whether or not to connect over HTTPS', + `connection_timeout` integer COMMENT ' The amount of time to wait (in milliseconds) when initially establishing a connection before giving up and timing out.', + `max_error_retry` integer COMMENT ' The maximum number of retry attempts for failed retryable requests (ex: 5xx error responses from services).', + `socket_timeout` integer COMMENT ' The amount of time to wait (in milliseconds) for data to be transfered over an established, open connection before the connection times out and is closed.', + `created` datetime COMMENT 'date the s3 first signed on', + PRIMARY KEY (`id`), + CONSTRAINT `uc_s3__uuid` UNIQUE (`uuid`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + +CREATE TABLE `cloud`.`template_s3_ref` ( + `id` bigint unsigned NOT NULL AUTO_INCREMENT COMMENT 'id', + `s3_id` bigint unsigned NOT NULL COMMENT ' Associated S3 instance id', + `template_id` bigint unsigned NOT NULL COMMENT ' Associated template id', + `created` DATETIME NOT NULL COMMENT ' The creation timestamp', + `size` bigint unsigned COMMENT ' The size of the object', + `physical_size` bigint unsigned DEFAULT 0 COMMENT ' The physical size of the object', + PRIMARY KEY (`id`), + CONSTRAINT `uc_template_s3_ref__template_id` UNIQUE (`template_id`), + CONSTRAINT `fk_template_s3_ref__s3_id` FOREIGN KEY `fk_template_s3_ref__s3_id` (`s3_id`) REFERENCES `s3` (`id`) ON DELETE CASCADE, + CONSTRAINT `fk_template_s3_ref__template_id` FOREIGN KEY `fk_template_s3_ref__template_id` (`template_id`) REFERENCES `vm_template` (`id`), + INDEX `i_template_s3_ref__swift_id`(`s3_id`), + INDEX `i_template_s3_ref__template_id`(`template_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + +INSERT IGNORE INTO `cloud`.`configuration` VALUES ('Advanced', 'DEFAULT', 'management-server', 's3.enable', 'false', 'enable s3'); + +ALTER TABLE `cloud`.`snapshots` ADD COLUMN `s3_id` bigint unsigned COMMENT 'S3 to which this snapshot will be stored'; + +ALTER TABLE `cloud`.`snapshots` ADD CONSTRAINT `fk_snapshots__s3_id` FOREIGN KEY `fk_snapshots__s3_id` (`s3_id`) REFERENCES `s3` (`id`); + +ALTER TABLE `cloud`.`network_offerings` ADD COLUMN `eip_associate_public_ip` int(1) unsigned NOT NULL DEFAULT 0 COMMENT 'true if public IP is associated with user VM creation by default when EIP service is enabled.' AFTER `elastic_ip_service`; + +INSERT IGNORE INTO `cloud`.`configuration` VALUES ('Network','DEFAULT','NetworkManager','network.dhcp.nondefaultnetwork.setgateway.guestos','Windows','The guest OS\'s name start with this fields would result in DHCP server response gateway information even when the network it\'s on is not default network. Names are separated by comma.'); ALTER TABLE upload ADD uuid VARCHAR(40); +ALTER TABLE async_job modify job_cmd VARCHAR(255); -- populate uuid column with db id if uuid is null UPDATE `cloud`.`account` set uuid=id WHERE uuid is NULL; From 71522b88dc6a8ef401e4ce05638db6b0a25974ee Mon Sep 17 00:00:00 2001 From: Prasanna Santhanam Date: Fri, 21 Dec 2012 15:59:13 -0800 Subject: [PATCH 167/421] api: annotating the volume related cmds Signed-off-by: Prasanna Santhanam --- .../command/user/volume/AttachVolumeCmd.java | 10 ++++---- .../command/user/volume/CreateVolumeCmd.java | 24 +++++++++---------- .../command/user/volume/DeleteVolumeCmd.java | 6 ++--- .../command/user/volume/DetachVolumeCmd.java | 10 ++++---- .../command/user/volume/ExtractVolumeCmd.java | 11 +++++---- .../command/user/volume/ListVolumesCmd.java | 24 +++++++++---------- .../command/user/volume/MigrateVolumeCmd.java | 10 ++++---- .../api/response/SnapshotResponse.java | 2 ++ .../api/response/VolumeResponse.java | 3 +++ 9 files changed, 52 insertions(+), 48 deletions(-) diff --git a/api/src/org/apache/cloudstack/api/command/user/volume/AttachVolumeCmd.java b/api/src/org/apache/cloudstack/api/command/user/volume/AttachVolumeCmd.java index 20a76286b9e..09a252585c0 100644 --- a/api/src/org/apache/cloudstack/api/command/user/volume/AttachVolumeCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/volume/AttachVolumeCmd.java @@ -16,12 +16,12 @@ // under the License. package org.apache.cloudstack.api.command.user.volume; +import org.apache.cloudstack.api.response.UserVmResponse; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; @@ -54,12 +54,12 @@ public class AttachVolumeCmd extends BaseAsyncCmd { "* 9 - /dev/xvdj") private Long deviceId; - @IdentityMapper(entityTableName="volumes") - @Parameter(name=ApiConstants.ID, type=CommandType.LONG, required=true, description="the ID of the disk volume") + @Parameter(name=ApiConstants.ID, type=CommandType.UUID, entityType=VolumeResponse.class, + required=true, description="the ID of the disk volume") private Long id; - @IdentityMapper(entityTableName="vm_instance") - @Parameter(name=ApiConstants.VIRTUAL_MACHINE_ID, type=CommandType.LONG, required=true, description=" the ID of the virtual machine") + @Parameter(name=ApiConstants.VIRTUAL_MACHINE_ID, type=CommandType.UUID, entityType=UserVmResponse.class, + required=true, description=" the ID of the virtual machine") private Long virtualMachineId; diff --git a/api/src/org/apache/cloudstack/api/command/user/volume/CreateVolumeCmd.java b/api/src/org/apache/cloudstack/api/command/user/volume/CreateVolumeCmd.java index a82c36343c1..0df4a13707a 100644 --- a/api/src/org/apache/cloudstack/api/command/user/volume/CreateVolumeCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/volume/CreateVolumeCmd.java @@ -16,16 +16,15 @@ // under the License. package org.apache.cloudstack.api.command.user.volume; +import org.apache.cloudstack.api.response.*; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseAsyncCreateCmd; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; -import org.apache.cloudstack.api.response.VolumeResponse; import com.cloud.async.AsyncJob; import com.cloud.event.EventTypes; import com.cloud.exception.ResourceAllocationException; @@ -45,16 +44,17 @@ public class CreateVolumeCmd extends BaseAsyncCreateCmd { @Parameter(name=ApiConstants.ACCOUNT, type=CommandType.STRING, description="the account associated with the disk volume. Must be used with the domainId parameter.") private String accountName; - @IdentityMapper(entityTableName="projects") - @Parameter(name=ApiConstants.PROJECT_ID, type=CommandType.LONG, description="the project associated with the volume. Mutually exclusive with account parameter") + @Parameter(name=ApiConstants.PROJECT_ID, type=CommandType.UUID, entityType=ProjectResponse.class, + description="the project associated with the volume. Mutually exclusive with account parameter") private Long projectId; - @IdentityMapper(entityTableName="domain") - @Parameter(name=ApiConstants.DOMAIN_ID, type=CommandType.LONG, description="the domain ID associated with the disk offering. If used with the account parameter returns the disk volume associated with the account for the specified domain.") + @Parameter(name=ApiConstants.DOMAIN_ID, type=CommandType.UUID, entityType=DomainResponse.class, + description="the domain ID associated with the disk offering. If used with the account parameter" + + " returns the disk volume associated with the account for the specified domain.") private Long domainId; - @IdentityMapper(entityTableName="disk_offering") - @Parameter(name=ApiConstants.DISK_OFFERING_ID,required = false, type=CommandType.LONG, description="the ID of the disk offering. Either diskOfferingId or snapshotId must be passed in.") + @Parameter(name=ApiConstants.DISK_OFFERING_ID,required = false, type=CommandType.UUID, entityType=DiskOfferingResponse.class, + description="the ID of the disk offering. Either diskOfferingId or snapshotId must be passed in.") private Long diskOfferingId; @Parameter(name=ApiConstants.NAME, type=CommandType.STRING, required=true, description="the name of the disk volume") @@ -63,12 +63,12 @@ public class CreateVolumeCmd extends BaseAsyncCreateCmd { @Parameter(name=ApiConstants.SIZE, type=CommandType.LONG, description="Arbitrary volume size") private Long size; - @IdentityMapper(entityTableName="snapshots") - @Parameter(name=ApiConstants.SNAPSHOT_ID, type=CommandType.LONG, description="the snapshot ID for the disk volume. Either diskOfferingId or snapshotId must be passed in.") + @Parameter(name=ApiConstants.SNAPSHOT_ID, type=CommandType.UUID, entityType=SnapshotResponse.class, + description="the snapshot ID for the disk volume. Either diskOfferingId or snapshotId must be passed in.") private Long snapshotId; - @IdentityMapper(entityTableName="data_center") - @Parameter(name=ApiConstants.ZONE_ID, type=CommandType.LONG, description="the ID of the availability zone") + @Parameter(name=ApiConstants.ZONE_ID, type=CommandType.UUID, entityType=ZoneResponse.class, + description="the ID of the availability zone") private Long zoneId; diff --git a/api/src/org/apache/cloudstack/api/command/user/volume/DeleteVolumeCmd.java b/api/src/org/apache/cloudstack/api/command/user/volume/DeleteVolumeCmd.java index 4d6b6065d03..a03be710135 100644 --- a/api/src/org/apache/cloudstack/api/command/user/volume/DeleteVolumeCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/volume/DeleteVolumeCmd.java @@ -16,11 +16,11 @@ // under the License. package org.apache.cloudstack.api.command.user.volume; +import org.apache.cloudstack.api.response.VolumeResponse; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; @@ -39,8 +39,8 @@ public class DeleteVolumeCmd extends BaseCmd { //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - @IdentityMapper(entityTableName="volumes") - @Parameter(name=ApiConstants.ID, type=CommandType.LONG, required=true, description="The ID of the disk volume") + @Parameter(name=ApiConstants.ID, type=CommandType.UUID, entityType=VolumeResponse.class, + required=true, description="The ID of the disk volume") private Long id; diff --git a/api/src/org/apache/cloudstack/api/command/user/volume/DetachVolumeCmd.java b/api/src/org/apache/cloudstack/api/command/user/volume/DetachVolumeCmd.java index d4df4453bc7..4c85e0ad4b8 100644 --- a/api/src/org/apache/cloudstack/api/command/user/volume/DetachVolumeCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/volume/DetachVolumeCmd.java @@ -16,12 +16,12 @@ // under the License. package org.apache.cloudstack.api.command.user.volume; +import org.apache.cloudstack.api.response.UserVmResponse; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; @@ -42,15 +42,15 @@ public class DetachVolumeCmd extends BaseAsyncCmd { //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - @IdentityMapper(entityTableName="volumes") - @Parameter(name=ApiConstants.ID, type=CommandType.LONG, description="the ID of the disk volume") + @Parameter(name=ApiConstants.ID, type=CommandType.UUID, entityType=VolumeResponse.class, + description="the ID of the disk volume") private Long id; @Parameter(name=ApiConstants.DEVICE_ID, type=CommandType.LONG, description="the device ID on the virtual machine where volume is detached from") private Long deviceId; - @IdentityMapper(entityTableName="vm_instance") - @Parameter(name=ApiConstants.VIRTUAL_MACHINE_ID, type=CommandType.LONG, description="the ID of the virtual machine where the volume is detached from") + @Parameter(name=ApiConstants.VIRTUAL_MACHINE_ID, type=CommandType.UUID, entityType=UserVmResponse.class, + description="the ID of the virtual machine where the volume is detached from") private Long virtualMachineId; ///////////////////////////////////////////////////// diff --git a/api/src/org/apache/cloudstack/api/command/user/volume/ExtractVolumeCmd.java b/api/src/org/apache/cloudstack/api/command/user/volume/ExtractVolumeCmd.java index 39dcfe66e0d..a2683736407 100644 --- a/api/src/org/apache/cloudstack/api/command/user/volume/ExtractVolumeCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/volume/ExtractVolumeCmd.java @@ -18,12 +18,13 @@ package org.apache.cloudstack.api.command.user.volume; import java.net.URISyntaxException; +import org.apache.cloudstack.api.response.VolumeResponse; +import org.apache.cloudstack.api.response.ZoneResponse; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; @@ -46,16 +47,16 @@ public class ExtractVolumeCmd extends BaseAsyncCmd { //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - @IdentityMapper(entityTableName="volumes") - @Parameter(name=ApiConstants.ID, type=CommandType.LONG, required=true, description="the ID of the volume") + @Parameter(name=ApiConstants.ID, type=CommandType.UUID, entityType=VolumeResponse.class, + required=true, description="the ID of the volume") private Long id; @Parameter(name=ApiConstants.URL, type=CommandType.STRING, required=false, description="the url to which the volume would be extracted") private String url; - @IdentityMapper(entityTableName="data_center") - @Parameter(name=ApiConstants.ZONE_ID, type=CommandType.LONG, required=true, description="the ID of the zone where the volume is located") + @Parameter(name=ApiConstants.ZONE_ID, type=CommandType.UUID, entityType=ZoneResponse.class, + required=true, description="the ID of the zone where the volume is located") private Long zoneId; @Parameter(name=ApiConstants.MODE, type=CommandType.STRING, required=true, description="the mode of extraction - HTTP_DOWNLOAD or FTP_UPLOAD") diff --git a/api/src/org/apache/cloudstack/api/command/user/volume/ListVolumesCmd.java b/api/src/org/apache/cloudstack/api/command/user/volume/ListVolumesCmd.java index 14d664e243e..c47e73ddd15 100644 --- a/api/src/org/apache/cloudstack/api/command/user/volume/ListVolumesCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/volume/ListVolumesCmd.java @@ -19,15 +19,13 @@ package org.apache.cloudstack.api.command.user.volume; import java.util.ArrayList; import java.util.List; +import org.apache.cloudstack.api.response.*; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseListTaggedResourcesCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; -import org.apache.cloudstack.api.response.ListResponse; -import org.apache.cloudstack.api.response.VolumeResponse; import com.cloud.async.AsyncJob; import com.cloud.storage.Volume; import com.cloud.utils.Pair; @@ -43,30 +41,30 @@ public class ListVolumesCmd extends BaseListTaggedResourcesCmd { //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - @IdentityMapper(entityTableName="host") - @Parameter(name=ApiConstants.HOST_ID, type=CommandType.LONG, description="list volumes on specified host") + @Parameter(name=ApiConstants.HOST_ID, type=CommandType.UUID, entityType=HostResponse.class, + description="list volumes on specified host") private Long hostId; - @IdentityMapper(entityTableName="volumes") - @Parameter(name=ApiConstants.ID, type=CommandType.LONG, description="the ID of the disk volume") + @Parameter(name=ApiConstants.ID, type=CommandType.UUID, entityType=VolumeResponse.class, + description="the ID of the disk volume") private Long id; @Parameter(name=ApiConstants.NAME, type=CommandType.STRING, description="the name of the disk volume") private String volumeName; - @IdentityMapper(entityTableName="host_pod_ref") - @Parameter(name=ApiConstants.POD_ID, type=CommandType.LONG, description="the pod id the disk volume belongs to") + @Parameter(name=ApiConstants.POD_ID, type=CommandType.UUID, entityType=PodResponse.class, + description="the pod id the disk volume belongs to") private Long podId; @Parameter(name=ApiConstants.TYPE, type=CommandType.STRING, description="the type of disk volume") private String type; - @IdentityMapper(entityTableName="vm_instance") - @Parameter(name=ApiConstants.VIRTUAL_MACHINE_ID, type=CommandType.LONG, description="the ID of the virtual machine") + @Parameter(name=ApiConstants.VIRTUAL_MACHINE_ID, type=CommandType.UUID, entityType=UserVmResponse.class, + description="the ID of the virtual machine") private Long virtualMachineId; - @IdentityMapper(entityTableName="data_center") - @Parameter(name=ApiConstants.ZONE_ID, type=CommandType.LONG, description="the ID of the availability zone") + @Parameter(name=ApiConstants.ZONE_ID, type=CommandType.UUID, entityType=ZoneResponse.class, + description="the ID of the availability zone") private Long zoneId; ///////////////////////////////////////////////////// diff --git a/api/src/org/apache/cloudstack/api/command/user/volume/MigrateVolumeCmd.java b/api/src/org/apache/cloudstack/api/command/user/volume/MigrateVolumeCmd.java index a1e8f35800c..d15379b750e 100644 --- a/api/src/org/apache/cloudstack/api/command/user/volume/MigrateVolumeCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/volume/MigrateVolumeCmd.java @@ -19,10 +19,10 @@ package org.apache.cloudstack.api.command.user.volume; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; +import org.apache.cloudstack.api.response.StoragePoolResponse; import org.apache.cloudstack.api.response.VolumeResponse; import com.cloud.event.EventTypes; import com.cloud.exception.ConcurrentOperationException; @@ -38,12 +38,12 @@ public class MigrateVolumeCmd extends BaseAsyncCmd { //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - @IdentityMapper(entityTableName="volumes") - @Parameter(name=ApiConstants.VOLUME_ID, type=CommandType.LONG, required=true, description="the ID of the volume") + @Parameter(name=ApiConstants.VOLUME_ID, type=CommandType.UUID, entityType=VolumeResponse.class, + required=true, description="the ID of the volume") private Long volumeId; - @IdentityMapper(entityTableName="storage_pool") - @Parameter(name=ApiConstants.STORAGE_ID, type=CommandType.LONG, required=true, description="destination storage pool ID to migrate the volume to") + @Parameter(name=ApiConstants.STORAGE_ID, type=CommandType.UUID, entityType=StoragePoolResponse.class, + required=true, description="destination storage pool ID to migrate the volume to") private Long storageId; ///////////////////////////////////////////////////// diff --git a/api/src/org/apache/cloudstack/api/response/SnapshotResponse.java b/api/src/org/apache/cloudstack/api/response/SnapshotResponse.java index 1c06b0a95bf..8f5dc20570b 100644 --- a/api/src/org/apache/cloudstack/api/response/SnapshotResponse.java +++ b/api/src/org/apache/cloudstack/api/response/SnapshotResponse.java @@ -24,7 +24,9 @@ import com.cloud.serializer.Param; import com.cloud.storage.Snapshot; import com.google.gson.annotations.SerializedName; import org.apache.cloudstack.api.BaseResponse; +import org.apache.cloudstack.api.Entity; +@Entity(value=Snapshot.class) @SuppressWarnings("unused") public class SnapshotResponse extends BaseResponse implements ControlledEntityResponse { @SerializedName(ApiConstants.ID) diff --git a/api/src/org/apache/cloudstack/api/response/VolumeResponse.java b/api/src/org/apache/cloudstack/api/response/VolumeResponse.java index 1c6f4f3db96..1b1ff146983 100644 --- a/api/src/org/apache/cloudstack/api/response/VolumeResponse.java +++ b/api/src/org/apache/cloudstack/api/response/VolumeResponse.java @@ -19,11 +19,14 @@ package org.apache.cloudstack.api.response; import java.util.Date; import java.util.List; +import com.cloud.storage.Volume; import org.apache.cloudstack.api.ApiConstants; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; import org.apache.cloudstack.api.BaseResponse; +import org.apache.cloudstack.api.Entity; +@Entity(value=Volume.class) @SuppressWarnings("unused") public class VolumeResponse extends BaseResponse implements ControlledEntityResponse{ @SerializedName(ApiConstants.ID) From f548099d08b7e0645d36193257c61b609e39b32d Mon Sep 17 00:00:00 2001 From: Prasanna Santhanam Date: Fri, 21 Dec 2012 16:12:10 -0800 Subject: [PATCH 168/421] api: annotate instance group Cmds Signed-off-by: Prasanna Santhanam --- .../api/command/user/vmgroup/CreateVMGroupCmd.java | 11 ++++++----- .../api/command/user/vmgroup/DeleteVMGroupCmd.java | 4 ++-- .../api/command/user/vmgroup/ListVMGroupsCmd.java | 5 ++--- .../api/command/user/vmgroup/UpdateVMGroupCmd.java | 4 ++-- .../api/response/ProjectAccountResponse.java | 3 +++ 5 files changed, 15 insertions(+), 12 deletions(-) diff --git a/api/src/org/apache/cloudstack/api/command/user/vmgroup/CreateVMGroupCmd.java b/api/src/org/apache/cloudstack/api/command/user/vmgroup/CreateVMGroupCmd.java index ad2d5ee4f31..bcc2644b125 100644 --- a/api/src/org/apache/cloudstack/api/command/user/vmgroup/CreateVMGroupCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vmgroup/CreateVMGroupCmd.java @@ -43,15 +43,16 @@ public class CreateVMGroupCmd extends BaseCmd { @Parameter(name = ApiConstants.NAME, type = CommandType.STRING, required = true, description = "the name of the instance group") private String groupName; - @Parameter(name = ApiConstants.ACCOUNT, type = CommandType.STRING, description = "the account of the instance group. The account parameter must be used with the domainId parameter.") + @Parameter(name = ApiConstants.ACCOUNT, type = CommandType.STRING, + description = "the account of the instance group. The account parameter must be used with the domainId parameter.") private String accountName; - //@IdentityMapper(entityTableName = "domain") - @Parameter(name = ApiConstants.DOMAIN_ID, type = CommandType.LONG, description = "the domain ID of account owning the instance group", entityType=DomainResponse.class) + @Parameter(name = ApiConstants.DOMAIN_ID, type=CommandType.UUID, entityType=DomainResponse.class, + description = "the domain ID of account owning the instance group") private Long domainId; - //@IdentityMapper(entityTableName = "projects") - @Parameter(name = ApiConstants.PROJECT_ID, type = CommandType.LONG, description = "The project of the instance group", entityType=ProjectAccountResponse.class) + @Parameter(name = ApiConstants.PROJECT_ID, type=CommandType.UUID, entityType=ProjectAccountResponse.class, + description = "The project of the instance group") private Long projectId; // /////////////////////////////////////////////////// diff --git a/api/src/org/apache/cloudstack/api/command/user/vmgroup/DeleteVMGroupCmd.java b/api/src/org/apache/cloudstack/api/command/user/vmgroup/DeleteVMGroupCmd.java index d81d5c413c0..5983b689315 100644 --- a/api/src/org/apache/cloudstack/api/command/user/vmgroup/DeleteVMGroupCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vmgroup/DeleteVMGroupCmd.java @@ -38,8 +38,8 @@ public class DeleteVMGroupCmd extends BaseCmd{ //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - //@IdentityMapper(entityTableName="instance_group") - @Parameter(name=ApiConstants.ID, type=CommandType.LONG, required=true, description="the ID of the instance group", entityType=InstanceGroupResponse.class) + @Parameter(name=ApiConstants.ID, type=CommandType.UUID, entityType=InstanceGroupResponse.class, + required=true, description="the ID of the instance group") private Long id; ///////////////////////////////////////////////////// diff --git a/api/src/org/apache/cloudstack/api/command/user/vmgroup/ListVMGroupsCmd.java b/api/src/org/apache/cloudstack/api/command/user/vmgroup/ListVMGroupsCmd.java index 1aa51f8170f..a8906edd68d 100644 --- a/api/src/org/apache/cloudstack/api/command/user/vmgroup/ListVMGroupsCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vmgroup/ListVMGroupsCmd.java @@ -20,7 +20,6 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; 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.response.InstanceGroupResponse; @@ -36,8 +35,8 @@ public class ListVMGroupsCmd extends BaseListProjectAndAccountResourcesCmd { //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - @IdentityMapper(entityTableName="instance_group") - @Parameter(name=ApiConstants.ID, type=CommandType.LONG, description="list instance groups by ID", entityType=InstanceGroupResponse.class) + @Parameter(name=ApiConstants.ID, type=CommandType.UUID, entityType=InstanceGroupResponse.class, + description="list instance groups by ID") private Long id; @Parameter(name=ApiConstants.NAME, type=CommandType.STRING, description="list instance groups by name") diff --git a/api/src/org/apache/cloudstack/api/command/user/vmgroup/UpdateVMGroupCmd.java b/api/src/org/apache/cloudstack/api/command/user/vmgroup/UpdateVMGroupCmd.java index 5762db9fcff..3adf1f78341 100644 --- a/api/src/org/apache/cloudstack/api/command/user/vmgroup/UpdateVMGroupCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vmgroup/UpdateVMGroupCmd.java @@ -37,8 +37,8 @@ public class UpdateVMGroupCmd extends BaseCmd{ //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - //@IdentityMapper(entityTableName="instance_group") - @Parameter(name=ApiConstants.ID, type=CommandType.LONG, required=true, description="Instance group ID", entityType=InstanceGroupResponse.class) + @Parameter(name=ApiConstants.ID, type=CommandType.UUID, entityType=InstanceGroupResponse.class, + required=true, description="Instance group ID") private Long id; @Parameter(name=ApiConstants.NAME, type=CommandType.STRING, description="new instance group name") diff --git a/api/src/org/apache/cloudstack/api/response/ProjectAccountResponse.java b/api/src/org/apache/cloudstack/api/response/ProjectAccountResponse.java index fadf423b4f7..da16291f43c 100644 --- a/api/src/org/apache/cloudstack/api/response/ProjectAccountResponse.java +++ b/api/src/org/apache/cloudstack/api/response/ProjectAccountResponse.java @@ -18,12 +18,15 @@ package org.apache.cloudstack.api.response; import java.util.List; +import com.cloud.projects.ProjectAccount; import org.apache.cloudstack.api.ApiConstants; import com.cloud.utils.IdentityProxy; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; import org.apache.cloudstack.api.BaseResponse; +import org.apache.cloudstack.api.Entity; +@Entity(value=ProjectAccount.class) @SuppressWarnings("unused") public class ProjectAccountResponse extends BaseResponse implements ControlledViewEntityResponse { @SerializedName(ApiConstants.PROJECT_ID) From 08892c51a36072ea7f2dc8fbbdcee4191594b5ee Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Fri, 21 Dec 2012 17:04:17 -0800 Subject: [PATCH 169/421] api: Fix jobid and entitytype for BaseResponse and QueryAsyncJob* - Fix jobid serialization issue that broke the UI - Fix AsyncJob Result and Response - Get rid of getUuid(), setUuid(), just use getId, setId for uuid... - All uuids from over the wire are UUIDs Signed-off-by: Rohit Yadav --- api/src/org/apache/cloudstack/api/BaseResponse.java | 13 +------------ .../command/user/job/QueryAsyncJobResultCmd.java | 5 ++--- .../cloudstack/api/response/AsyncJobResponse.java | 2 ++ .../com/cloud/api/query/dao/UserVmJoinDaoImpl.java | 2 +- 4 files changed, 6 insertions(+), 16 deletions(-) diff --git a/api/src/org/apache/cloudstack/api/BaseResponse.java b/api/src/org/apache/cloudstack/api/BaseResponse.java index a3fe6b0ee01..28ca6b8c2de 100644 --- a/api/src/org/apache/cloudstack/api/BaseResponse.java +++ b/api/src/org/apache/cloudstack/api/BaseResponse.java @@ -50,11 +50,8 @@ public abstract class BaseResponse implements ResponseObject { return null; } - // For use by list commands with pending async jobs - protected String jobId; - @SerializedName(ApiConstants.JOB_ID) @Param(description="the UUID of the latest async job acting on this object") - protected String jobUuid; + protected String jobId; @SerializedName(ApiConstants.JOB_STATUS) @Param(description="the current status of the latest async job acting on this object") private Integer jobStatus; @@ -67,14 +64,6 @@ public abstract class BaseResponse implements ResponseObject { this.jobId = jobId; } - public String getJobUuid() { - return jobUuid; - } - - public void setJobUuid(String jobUuid) { - this.jobUuid = jobUuid; - } - public Integer getJobStatus() { return jobStatus; } diff --git a/api/src/org/apache/cloudstack/api/command/user/job/QueryAsyncJobResultCmd.java b/api/src/org/apache/cloudstack/api/command/user/job/QueryAsyncJobResultCmd.java index 74a8a177ca4..2e2e6678444 100644 --- a/api/src/org/apache/cloudstack/api/command/user/job/QueryAsyncJobResultCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/job/QueryAsyncJobResultCmd.java @@ -20,7 +20,6 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.response.AsyncJobResponse; @@ -36,8 +35,8 @@ public class QueryAsyncJobResultCmd extends BaseCmd { //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - @IdentityMapper(entityTableName="async_job") - @Parameter(name=ApiConstants.JOB_ID, type=CommandType.LONG, required=true, description="the ID of the asychronous job") + @Parameter(name=ApiConstants.JOB_ID, type=CommandType.UUID, entityType=AsyncJobResponse.class, + required=true, description="the ID of the asychronous job") private Long id; ///////////////////////////////////////////////////// diff --git a/api/src/org/apache/cloudstack/api/response/AsyncJobResponse.java b/api/src/org/apache/cloudstack/api/response/AsyncJobResponse.java index 42912be744a..355942fb3dd 100644 --- a/api/src/org/apache/cloudstack/api/response/AsyncJobResponse.java +++ b/api/src/org/apache/cloudstack/api/response/AsyncJobResponse.java @@ -20,11 +20,13 @@ import java.util.Date; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseResponse; +import org.apache.cloudstack.api.Entity; import org.apache.cloudstack.api.ResponseObject; import com.cloud.async.AsyncJob; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; +@Entity(value=AsyncJob.class) @SuppressWarnings("unused") public class AsyncJobResponse extends BaseResponse { diff --git a/server/src/com/cloud/api/query/dao/UserVmJoinDaoImpl.java b/server/src/com/cloud/api/query/dao/UserVmJoinDaoImpl.java index e8317a850e1..c134284f728 100644 --- a/server/src/com/cloud/api/query/dao/UserVmJoinDaoImpl.java +++ b/server/src/com/cloud/api/query/dao/UserVmJoinDaoImpl.java @@ -124,7 +124,7 @@ public class UserVmJoinDaoImpl extends GenericDaoBase implem } } userVmResponse.setPassword(userVm.getPassword()); - userVmResponse.setJobUuid(userVm.getJobUuid()); + userVmResponse.setJobId(userVm.getJobUuid()); userVmResponse.setJobStatus(userVm.getJobStatus()); //userVmResponse.setForVirtualNetwork(userVm.getForVirtualNetwork()); From 3209a3a858fbd5d7c30ee4cfb5394a4a3c8606ab Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Fri, 21 Dec 2012 17:06:22 -0800 Subject: [PATCH 170/421] api: Annotate pod,zone admin apis Signed-off-by: Rohit Yadav --- .../api/command/admin/pod/CreatePodCmd.java | 5 ++--- .../api/command/admin/pod/DeletePodCmd.java | 7 ++----- .../api/command/admin/pod/ListPodsByCmd.java | 9 ++++----- .../api/command/admin/pod/UpdatePodCmd.java | 6 ++---- .../api/command/admin/zone/CreateZoneCmd.java | 4 ++-- .../api/command/admin/zone/DeleteZoneCmd.java | 4 ++-- .../admin/zone/MarkDefaultZoneForAccountCmd.java | 12 ++++++------ .../api/command/admin/zone/UpdateZoneCmd.java | 4 ++-- 8 files changed, 22 insertions(+), 29 deletions(-) diff --git a/api/src/org/apache/cloudstack/api/command/admin/pod/CreatePodCmd.java b/api/src/org/apache/cloudstack/api/command/admin/pod/CreatePodCmd.java index f3f1c18f22b..aba5be1ab84 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/pod/CreatePodCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/pod/CreatePodCmd.java @@ -20,7 +20,6 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; @@ -42,8 +41,8 @@ public class CreatePodCmd extends BaseCmd { @Parameter(name=ApiConstants.NAME, type=CommandType.STRING, required=true, description="the name of the Pod") private String podName; - //@IdentityMapper(entityTableName="data_center") - @Parameter(name=ApiConstants.ZONE_ID, type=CommandType.LONG, required=true, description="the Zone ID in which the Pod will be created ", entityType=ZoneResponse.class) + @Parameter(name=ApiConstants.ZONE_ID, type=CommandType.UUID, entityType=ZoneResponse.class, + required=true, description="the Zone ID in which the Pod will be created") private Long zoneId; @Parameter(name=ApiConstants.START_IP, type=CommandType.STRING, required=true, description="the starting IP address for the Pod") diff --git a/api/src/org/apache/cloudstack/api/command/admin/pod/DeletePodCmd.java b/api/src/org/apache/cloudstack/api/command/admin/pod/DeletePodCmd.java index e2e3fa8838e..a64762fac5b 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/pod/DeletePodCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/pod/DeletePodCmd.java @@ -20,13 +20,11 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; import org.apache.cloudstack.api.response.PodResponse; import org.apache.cloudstack.api.response.SuccessResponse; -import org.apache.cloudstack.api.response.ZoneResponse; import com.cloud.user.Account; @@ -40,11 +38,10 @@ public class DeletePodCmd extends BaseCmd { //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - //@IdentityMapper(entityTableName="host_pod_ref") - @Parameter(name=ApiConstants.ID, type=CommandType.LONG, required=true, description="the ID of the Pod", entityType=PodResponse.class) + @Parameter(name=ApiConstants.ID, type=CommandType.UUID, entityType=PodResponse.class, + required=true, description="the ID of the Pod") private Long id; - ///////////////////////////////////////////////////// /////////////////// Accessors /////////////////////// ///////////////////////////////////////////////////// diff --git a/api/src/org/apache/cloudstack/api/command/admin/pod/ListPodsByCmd.java b/api/src/org/apache/cloudstack/api/command/admin/pod/ListPodsByCmd.java index 713fbb0819e..87b84155db5 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/pod/ListPodsByCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/pod/ListPodsByCmd.java @@ -23,7 +23,6 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseListCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.response.ListResponse; @@ -43,15 +42,15 @@ public class ListPodsByCmd extends BaseListCmd { //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - //@IdentityMapper(entityTableName="host_pod_ref") - @Parameter(name=ApiConstants.ID, type=CommandType.LONG, description="list Pods by ID", entityType=PodResponse.class) + @Parameter(name=ApiConstants.ID, type=CommandType.UUID, entityType=PodResponse.class, + description="list Pods by ID") private Long id; @Parameter(name=ApiConstants.NAME, type=CommandType.STRING, description="list Pods by name") private String podName; - //@IdentityMapper(entityTableName="data_center") - @Parameter(name=ApiConstants.ZONE_ID, type=CommandType.LONG, description="list Pods by Zone ID", entityType=ZoneResponse.class) + @Parameter(name=ApiConstants.ZONE_ID, type=CommandType.UUID, entityType=ZoneResponse.class, + description="list Pods by Zone ID") private Long zoneId; @Parameter(name=ApiConstants.ALLOCATION_STATE, type=CommandType.STRING, description="list pods by allocation state") diff --git a/api/src/org/apache/cloudstack/api/command/admin/pod/UpdatePodCmd.java b/api/src/org/apache/cloudstack/api/command/admin/pod/UpdatePodCmd.java index 08f1086c716..6b564cdb830 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/pod/UpdatePodCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/pod/UpdatePodCmd.java @@ -20,12 +20,10 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; import org.apache.cloudstack.api.response.PodResponse; -import org.apache.cloudstack.api.response.ZoneResponse; import com.cloud.dc.Pod; import com.cloud.user.Account; @@ -40,8 +38,8 @@ public class UpdatePodCmd extends BaseCmd { //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - //@IdentityMapper(entityTableName="host_pod_ref") - @Parameter(name=ApiConstants.ID, type=CommandType.LONG, required=true, description="the ID of the Pod", entityType=PodResponse.class) + @Parameter(name=ApiConstants.ID, type=CommandType.UUID, entityType=PodResponse.class, + required=true, description="the ID of the Pod") private Long id; @Parameter(name=ApiConstants.NAME, type=CommandType.STRING, description="the name of the Pod") diff --git a/api/src/org/apache/cloudstack/api/command/admin/zone/CreateZoneCmd.java b/api/src/org/apache/cloudstack/api/command/admin/zone/CreateZoneCmd.java index c3d8ef9d1b4..58a486bcfcb 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/zone/CreateZoneCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/zone/CreateZoneCmd.java @@ -61,8 +61,8 @@ public class CreateZoneCmd extends BaseCmd { @Parameter(name=ApiConstants.DOMAIN, type=CommandType.STRING, description="Network domain name for the networks in the zone") private String domain; - //@IdentityMapper(entityTableName="domain") - @Parameter(name=ApiConstants.DOMAIN_ID, type=CommandType.LONG, description="the ID of the containing domain, null for public zones", entityType=DomainResponse.class) + @Parameter(name=ApiConstants.DOMAIN_ID, type=CommandType.UUID, entityType=DomainResponse.class, + description="the ID of the containing domain, null for public zones") private Long domainId; @Parameter(name=ApiConstants.NETWORK_TYPE, type=CommandType.STRING, required=true, description="network type of the zone, can be Basic or Advanced") diff --git a/api/src/org/apache/cloudstack/api/command/admin/zone/DeleteZoneCmd.java b/api/src/org/apache/cloudstack/api/command/admin/zone/DeleteZoneCmd.java index fb64a263e7e..7c7f19f808c 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/zone/DeleteZoneCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/zone/DeleteZoneCmd.java @@ -38,8 +38,8 @@ public class DeleteZoneCmd extends BaseCmd { //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - //@IdentityMapper(entityTableName="data_center") - @Parameter(name=ApiConstants.ID, type=CommandType.LONG, required=true, description="the ID of the Zone", entityType=ZoneResponse.class) + @Parameter(name=ApiConstants.ID, type=CommandType.UUID, entityType=ZoneResponse.class, + required=true, description="the ID of the Zone") private Long id; diff --git a/api/src/org/apache/cloudstack/api/command/admin/zone/MarkDefaultZoneForAccountCmd.java b/api/src/org/apache/cloudstack/api/command/admin/zone/MarkDefaultZoneForAccountCmd.java index c488d135501..e7a4fb3c250 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/zone/MarkDefaultZoneForAccountCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/zone/MarkDefaultZoneForAccountCmd.java @@ -43,16 +43,16 @@ public class MarkDefaultZoneForAccountCmd extends BaseAsyncCmd { ////////////////API parameters ////////////////////// ///////////////////////////////////////////////////// - //@IdentityMapper(entityTableName="account") - @Parameter(name=ApiConstants.ACCOUNT, type=CommandType.STRING, required=true, description="Name of the account that is to be marked.", entityType=AccountResponse.class) + @Parameter(name=ApiConstants.ACCOUNT, type=CommandType.STRING, entityType=AccountResponse.class, + required=true, description="Name of the account that is to be marked.") private String accountName; - //@IdentityMapper(entityTableName="domain") - @Parameter(name=ApiConstants.DOMAIN_ID, type=CommandType.LONG, required=true, description="Marks the account that belongs to the specified domain.", entityType=DomainResponse.class) + @Parameter(name=ApiConstants.DOMAIN_ID, type=CommandType.UUID, entityType=DomainResponse.class, + required=true, description="Marks the account that belongs to the specified domain.") private Long domainId; - //@IdentityMapper(entityTableName="data_center") - @Parameter(name=ApiConstants.ZONE_ID, type=CommandType.LONG, required=true, description="The Zone ID with which the account is to be marked.", entityType=ZoneResponse.class) + @Parameter(name=ApiConstants.ZONE_ID, type=CommandType.UUID, entityType=ZoneResponse.class, + required=true, description="The Zone ID with which the account is to be marked.") private Long defaultZoneId; ///////////////////////////////////////////////////// diff --git a/api/src/org/apache/cloudstack/api/command/admin/zone/UpdateZoneCmd.java b/api/src/org/apache/cloudstack/api/command/admin/zone/UpdateZoneCmd.java index 20fff448485..bf74af31275 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/zone/UpdateZoneCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/zone/UpdateZoneCmd.java @@ -50,8 +50,8 @@ public class UpdateZoneCmd extends BaseCmd { @Parameter(name=ApiConstants.GUEST_CIDR_ADDRESS, type=CommandType.STRING, description="the guest CIDR address for the Zone") private String guestCidrAddress; - //@IdentityMapper(entityTableName="data_center") - @Parameter(name=ApiConstants.ID, type=CommandType.LONG, required=true, description="the ID of the Zone", entityType=ZoneResponse.class) + @Parameter(name=ApiConstants.ID, type=CommandType.UUID, entityType=ZoneResponse.class, + required=true, description="the ID of the Zone") private Long id; @Parameter(name=ApiConstants.INTERNAL_DNS1, type=CommandType.STRING, description="the first internal DNS for the Zone") From 024f0d95dd4526f210d0dfff64f789107cdb4c49 Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Fri, 21 Dec 2012 19:03:49 -0800 Subject: [PATCH 171/421] api: Use Identity interface instead of java reflect to getId - Add new interface method to getId - Fix method definition in AsyncJob - Get rid of mechanism to getId using reflect, use Identity interface Signed-off-by: Rohit Yadav --- api/src/com/cloud/async/AsyncJob.java | 2 +- api/src/org/apache/cloudstack/api/Identity.java | 1 + core/src/com/cloud/async/AsyncJobVO.java | 2 +- server/src/com/cloud/api/ApiDispatcher.java | 16 ++-------------- 4 files changed, 5 insertions(+), 16 deletions(-) diff --git a/api/src/com/cloud/async/AsyncJob.java b/api/src/com/cloud/async/AsyncJob.java index 50ca9062942..bea3e13d296 100644 --- a/api/src/com/cloud/async/AsyncJob.java +++ b/api/src/com/cloud/async/AsyncJob.java @@ -50,7 +50,7 @@ public interface AsyncJob extends Identity { AutoScaleVmGroup } - Long getId(); + long getId(); long getUserId(); diff --git a/api/src/org/apache/cloudstack/api/Identity.java b/api/src/org/apache/cloudstack/api/Identity.java index 22d23b70017..31367290944 100644 --- a/api/src/org/apache/cloudstack/api/Identity.java +++ b/api/src/org/apache/cloudstack/api/Identity.java @@ -18,4 +18,5 @@ package org.apache.cloudstack.api; public interface Identity { String getUuid(); + long getId(); } diff --git a/core/src/com/cloud/async/AsyncJobVO.java b/core/src/com/cloud/async/AsyncJobVO.java index 742631367a3..769d9a9107a 100644 --- a/core/src/com/cloud/async/AsyncJobVO.java +++ b/core/src/com/cloud/async/AsyncJobVO.java @@ -145,7 +145,7 @@ public class AsyncJobVO implements AsyncJob { @Override - public Long getId() { + public long getId() { return id; } diff --git a/server/src/com/cloud/api/ApiDispatcher.java b/server/src/com/cloud/api/ApiDispatcher.java index 839073edad7..54a498b5012 100755 --- a/server/src/com/cloud/api/ApiDispatcher.java +++ b/server/src/com/cloud/api/ApiDispatcher.java @@ -17,8 +17,6 @@ package com.cloud.api; import java.lang.reflect.Field; -import java.lang.reflect.InvocationTargetException; -import java.lang.reflect.Method; import java.text.DateFormat; import java.text.ParseException; import java.util.ArrayList; @@ -48,7 +46,6 @@ import com.cloud.exception.InvalidParameterValueException; import com.cloud.exception.PermissionDeniedException; import com.cloud.exception.ResourceAllocationException; import com.cloud.exception.ResourceUnavailableException; -import com.cloud.utils.IdentityProxy; import com.cloud.network.dao.NetworkDao; import com.cloud.server.ManagementServer; import com.cloud.storage.dao.VMTemplateDao; @@ -635,21 +632,12 @@ public class ApiDispatcher { if (objVO == null) { continue; } - Method method = null; - try { - method = objVO.getClass().getMethod("getId", null); - } catch (NoSuchMethodException e) { - continue; - } catch (SecurityException e) { - continue; - } // Invoke the getId method, get the internal long ID // If that fails hide exceptions as the uuid may not exist try { - id = (Long) method.invoke(objVO); - } catch (InvocationTargetException e) { + id = (Long) ((Identity)objVO).getId(); } catch (IllegalArgumentException e) { - } catch (IllegalAccessException e) { + } catch (NullPointerException e) { } // Return on first non-null Id for the uuid entity if (id != null) From a15da04937911e6779740d7f2317af87d57c9418 Mon Sep 17 00:00:00 2001 From: Prasanna Santhanam Date: Fri, 21 Dec 2012 19:26:29 -0800 Subject: [PATCH 172/421] api: virtual machine Cmd annotations Signed-off-by: Prasanna Santhanam --- .../api/command/user/vm/DeployVMCmd.java | 57 +++++++++++-------- .../api/command/user/vm/DestroyVMCmd.java | 4 +- .../api/command/user/vm/GetVMPasswordCmd.java | 5 +- .../api/command/user/vm/ListVMsCmd.java | 51 +++++++++-------- .../api/command/user/vm/RebootVMCmd.java | 5 +- .../command/user/vm/ResetVMPasswordCmd.java | 9 ++- .../api/command/user/vm/RestoreVMCmd.java | 6 +- .../api/command/user/vm/StartVMCmd.java | 9 ++- .../api/command/user/vm/StopVMCmd.java | 5 +- .../api/command/user/vm/UpdateVMCmd.java | 9 ++- .../api/command/user/vm/UpgradeVMCmd.java | 13 ++--- .../api/response/ProjectResponse.java | 2 +- 12 files changed, 88 insertions(+), 87 deletions(-) diff --git a/api/src/org/apache/cloudstack/api/command/user/vm/DeployVMCmd.java b/api/src/org/apache/cloudstack/api/command/user/vm/DeployVMCmd.java index d13e4438855..1454a2d5c0f 100644 --- a/api/src/org/apache/cloudstack/api/command/user/vm/DeployVMCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vm/DeployVMCmd.java @@ -38,7 +38,7 @@ import org.apache.cloudstack.api.response.DiskOfferingResponse; import org.apache.cloudstack.api.response.DomainResponse; import org.apache.cloudstack.api.response.HostResponse; import org.apache.cloudstack.api.response.NetworkResponse; -import org.apache.cloudstack.api.response.ProjectAccountResponse; +import org.apache.cloudstack.api.response.ProjectResponse; import org.apache.cloudstack.api.response.SecurityGroupResponse; import org.apache.cloudstack.api.response.ServiceOfferingResponse; import org.apache.cloudstack.api.response.TemplateResponse; @@ -56,7 +56,6 @@ import com.cloud.exception.ResourceUnavailableException; import com.cloud.hypervisor.Hypervisor.HypervisorType; import com.cloud.network.IpAddress; import com.cloud.network.Network; -import com.cloud.network.security.SecurityGroup; import com.cloud.offering.DiskOffering; import com.cloud.offering.ServiceOffering; import com.cloud.template.VirtualMachineTemplate; @@ -75,18 +74,18 @@ public class DeployVMCmd extends BaseAsyncCreateCmd { //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - //@IdentityMapper(entityTableName="data_center") - @Parameter(name=ApiConstants.ZONE_ID, type=CommandType.LONG, required=true, description="availability zone for the virtual machine", entityType=ZoneResponse.class) + @Parameter(name=ApiConstants.ZONE_ID, type=CommandType.UUID, entityType=ZoneResponse.class, + required=true, description="availability zone for the virtual machine") private Long zoneId; @ACL - //@IdentityMapper(entityTableName="disk_offering") - @Parameter(name=ApiConstants.SERVICE_OFFERING_ID, type=CommandType.LONG, required=true, description="the ID of the service offering for the virtual machine", entityType=ServiceOfferingResponse.class) + @Parameter(name=ApiConstants.SERVICE_OFFERING_ID, type=CommandType.UUID, entityType=ServiceOfferingResponse.class, + required=true, description="the ID of the service offering for the virtual machine") private Long serviceOfferingId; @ACL - //@IdentityMapper(entityTableName="vm_template") - @Parameter(name=ApiConstants.TEMPLATE_ID, type=CommandType.LONG, required=true, description="the ID of the template for the virtual machine", entityType=TemplateResponse.class) + @Parameter(name=ApiConstants.TEMPLATE_ID, type=CommandType.UUID, entityType=TemplateResponse.class, + required=true, description="the ID of the template for the virtual machine") private Long templateId; @Parameter(name=ApiConstants.NAME, type=CommandType.STRING, description="host name for the virtual machine") @@ -99,20 +98,24 @@ public class DeployVMCmd extends BaseAsyncCreateCmd { @Parameter(name=ApiConstants.ACCOUNT, type=CommandType.STRING, description="an optional account for the virtual machine. Must be used with domainId.") private String accountName; - //@IdentityMapper(entityTableName="domain") - @Parameter(name=ApiConstants.DOMAIN_ID, type=CommandType.LONG, description="an optional domainId for the virtual machine. If the account parameter is used, domainId must also be used.", entityType=DomainResponse.class) + @Parameter(name=ApiConstants.DOMAIN_ID, type=CommandType.UUID, entityType=DomainResponse.class, + description="an optional domainId for the virtual machine. If the account parameter is used, domainId must also be used.") private Long domainId; //Network information @ACL - //@IdentityMapper(entityTableName="networks") - @Parameter(name=ApiConstants.NETWORK_IDS, type=CommandType.LIST, collectionType=CommandType.LONG, description="list of network ids used by virtual machine. Can't be specified with ipToNetworkList parameter", entityType=NetworkResponse.class) + @Parameter(name=ApiConstants.NETWORK_IDS, type=CommandType.LIST, collectionType=CommandType.UUID, entityType=NetworkResponse.class, + description="list of network ids used by virtual machine. Can't be specified with ipToNetworkList parameter") private List networkIds; //DataDisk information @ACL - //@IdentityMapper(entityTableName="disk_offering") - @Parameter(name=ApiConstants.DISK_OFFERING_ID, type=CommandType.LONG, description="the ID of the disk offering for the virtual machine. If the template is of ISO format, the diskOfferingId is for the root disk volume. Otherwise this parameter is used to indicate the offering for the data disk volume. If the templateId parameter passed is from a Template object, the diskOfferingId refers to a DATA Disk Volume created. If the templateId parameter passed is from an ISO object, the diskOfferingId refers to a ROOT Disk Volume created.", entityType=DiskOfferingResponse.class) + @Parameter(name=ApiConstants.DISK_OFFERING_ID, type=CommandType.UUID, entityType=DiskOfferingResponse.class, + description="the ID of the disk offering for the virtual machine. If the template is of ISO format," + + " the diskOfferingId is for the root disk volume. Otherwise this parameter is used to indicate the " + + "offering for the data disk volume. If the templateId parameter passed is from a Template object," + + " the diskOfferingId refers to a DATA Disk Volume created. If the templateId parameter passed is " + + "from an ISO object, the diskOfferingId refers to a ROOT Disk Volume created.") private Long diskOfferingId; @Parameter(name=ApiConstants.SIZE, type=CommandType.LONG, description="the arbitrary size for the DATADISK volume. Mutually exclusive with diskOfferingId") @@ -130,22 +133,29 @@ public class DeployVMCmd extends BaseAsyncCreateCmd { @Parameter(name=ApiConstants.SSH_KEYPAIR, type=CommandType.STRING, description="name of the ssh key pair used to login to the virtual machine") private String sshKeyPairName; - - //@IdentityMapper(entityTableName="host") - @Parameter(name=ApiConstants.HOST_ID, type=CommandType.LONG, description="destination Host ID to deploy the VM to - parameter available for root admin only", entityType=HostResponse.class) + @Parameter(name=ApiConstants.HOST_ID, type=CommandType.UUID, entityType=HostResponse.class, + description="destination Host ID to deploy the VM to - parameter available for root admin only") private Long hostId; @ACL - //@IdentityMapper(entityTableName="security_group") - @Parameter(name=ApiConstants.SECURITY_GROUP_IDS, type=CommandType.LIST, collectionType=CommandType.LONG, description="comma separated list of security groups id that going to be applied to the virtual machine. Should be passed only when vm is created from a zone with Basic Network support. Mutually exclusive with securitygroupnames parameter", entityType=SecurityGroupResponse.class) + @Parameter(name=ApiConstants.SECURITY_GROUP_IDS, type=CommandType.LIST, collectionType=CommandType.UUID, entityType=SecurityGroupResponse.class, + description="comma separated list of security groups id that going to be applied to the virtual machine. " + + "Should be passed only when vm is created from a zone with Basic Network support." + + " Mutually exclusive with securitygroupnames parameter") private List securityGroupIdList; @ACL - @Parameter(name=ApiConstants.SECURITY_GROUP_NAMES, type=CommandType.LIST, collectionType=CommandType.STRING, description="comma separated list of security groups names that going to be applied to the virtual machine. Should be passed only when vm is created from a zone with Basic Network support. Mutually exclusive with securitygroupids parameter", entityType=SecurityGroupResponse.class) + @Parameter(name=ApiConstants.SECURITY_GROUP_NAMES, type=CommandType.LIST, collectionType=CommandType.STRING, entityType=SecurityGroupResponse.class, + description="comma separated list of security groups names that going to be applied to the virtual machine." + + " Should be passed only when vm is created from a zone with Basic Network support. " + + "Mutually exclusive with securitygroupids parameter") private List securityGroupNameList; @ACL(checkKeyAccess=true) - @Parameter(name = ApiConstants.IP_NETWORK_LIST, type = CommandType.MAP, description = "ip to network mapping. Can't be specified with networkIds parameter. Example: iptonetworklist[0].ip=10.10.10.11&iptonetworklist[0].networkid=204 - requests to use ip 10.10.10.11 in network id=204",entityType={Network.class,IpAddress.class}) + @Parameter(name = ApiConstants.IP_NETWORK_LIST, type = CommandType.MAP,entityType={Network.class,IpAddress.class}, + description = "ip to network mapping. Can't be specified with networkIds parameter." + + " Example: iptonetworklist[0].ip=10.10.10.11&iptonetworklist[0].networkid=204 - requests to" + + " use ip 10.10.10.11 in network id=204") private Map ipToNetworkList; @Parameter(name=ApiConstants.IP_ADDRESS, type=CommandType.STRING, description="the ip address for default vm's network") @@ -154,8 +164,8 @@ public class DeployVMCmd extends BaseAsyncCreateCmd { @Parameter(name=ApiConstants.KEYBOARD, type=CommandType.STRING, description="an optional keyboard device type for the virtual machine. valid value can be one of de,de-ch,es,fi,fr,fr-be,fr-ch,is,it,jp,nl-be,no,pt,uk,us") private String keyboard; - //@IdentityMapper(entityTableName="projects") - @Parameter(name=ApiConstants.PROJECT_ID, type=CommandType.LONG, description="Deploy vm for the project", entityType=ProjectAccountResponse.class) + @Parameter(name=ApiConstants.PROJECT_ID, type=CommandType.UUID, entityType=ProjectResponse.class, + description="Deploy vm for the project") private Long projectId; @Parameter(name=ApiConstants.START_VM, type=CommandType.BOOLEAN, description="true if network offering supports specifying ip ranges; defaulted to true if not specified") @@ -456,5 +466,4 @@ public class DeployVMCmd extends BaseAsyncCreateCmd { throw new ServerApiException(BaseCmd.INTERNAL_ERROR, ex.getMessage()); } } - } diff --git a/api/src/org/apache/cloudstack/api/command/user/vm/DestroyVMCmd.java b/api/src/org/apache/cloudstack/api/command/user/vm/DestroyVMCmd.java index 48777c6bc5a..5738ede0bf1 100644 --- a/api/src/org/apache/cloudstack/api/command/user/vm/DestroyVMCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vm/DestroyVMCmd.java @@ -44,8 +44,8 @@ public class DestroyVMCmd extends BaseAsyncCmd { //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - //@IdentityMapper(entityTableName="vm_instance") - @Parameter(name=ApiConstants.ID, type=CommandType.LONG, required=true, description="The ID of the virtual machine", entityType=UserVmResponse.class) + @Parameter(name=ApiConstants.ID, type=CommandType.UUID, entityType=UserVmResponse.class, + required=true, description="The ID of the virtual machine") private Long id; ///////////////////////////////////////////////////// diff --git a/api/src/org/apache/cloudstack/api/command/user/vm/GetVMPasswordCmd.java b/api/src/org/apache/cloudstack/api/command/user/vm/GetVMPasswordCmd.java index b9ebbda40cb..6d747fa6501 100644 --- a/api/src/org/apache/cloudstack/api/command/user/vm/GetVMPasswordCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vm/GetVMPasswordCmd.java @@ -39,8 +39,8 @@ public class GetVMPasswordCmd extends BaseCmd { //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - //@IdentityMapper(entityTableName="vm_instance") - @Parameter(name=ApiConstants.ID, type=CommandType.LONG, required=true, description="The ID of the virtual machine", entityType=UserVmResponse.class) + @Parameter(name=ApiConstants.ID, type=CommandType.UUID, entityType=UserVmResponse.class + , required=true, description="The ID of the virtual machine") private Long id; @@ -80,5 +80,4 @@ public class GetVMPasswordCmd extends BaseCmd { public String getCommandName() { return s_name; } - } diff --git a/api/src/org/apache/cloudstack/api/command/user/vm/ListVMsCmd.java b/api/src/org/apache/cloudstack/api/command/user/vm/ListVMsCmd.java index bdf75991f18..84a0d914140 100644 --- a/api/src/org/apache/cloudstack/api/command/user/vm/ListVMsCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vm/ListVMsCmd.java @@ -42,7 +42,6 @@ import org.apache.cloudstack.api.response.ZoneResponse; import com.cloud.async.AsyncJob; import com.cloud.exception.InvalidParameterValueException; -import com.cloud.utils.Pair; @Implementation(description="List the virtual machines owned by the account.", responseObject=UserVmResponse.class) @@ -55,60 +54,63 @@ public class ListVMsCmd extends BaseListTaggedResourcesCmd { //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - //@IdentityMapper(entityTableName="instance_group") - @Parameter(name=ApiConstants.GROUP_ID, type=CommandType.LONG, description="the group ID", entityType=InstanceGroupResponse.class) + @Parameter(name=ApiConstants.GROUP_ID, type=CommandType.UUID, entityType=InstanceGroupResponse.class, + description="the group ID") private Long groupId; - //@IdentityMapper(entityTableName="host") - @Parameter(name=ApiConstants.HOST_ID, type=CommandType.LONG, description="the host ID", entityType=HostResponse.class) + @Parameter(name=ApiConstants.HOST_ID, type=CommandType.UUID, entityType=HostResponse.class, + description="the host ID") private Long hostId; - //@IdentityMapper(entityTableName="vm_instance") - @Parameter(name=ApiConstants.ID, type=CommandType.LONG, description="the ID of the virtual machine", entityType=UserVmResponse.class) + @Parameter(name=ApiConstants.ID, type=CommandType.UUID, entityType=UserVmResponse.class, + description="the ID of the virtual machine") private Long id; @Parameter(name=ApiConstants.NAME, type=CommandType.STRING, description="name of the virtual machine") private String instanceName; - //@IdentityMapper(entityTableName="host_pod_ref") - @Parameter(name=ApiConstants.POD_ID, type=CommandType.LONG, description="the pod ID", entityType=PodResponse.class) + @Parameter(name=ApiConstants.POD_ID, type=CommandType.UUID, entityType=PodResponse.class, + description="the pod ID") private Long podId; @Parameter(name=ApiConstants.STATE, type=CommandType.STRING, description="state of the virtual machine") private String state; - //@IdentityMapper(entityTableName="data_center") - @Parameter(name=ApiConstants.ZONE_ID, type=CommandType.LONG, description="the availability zone ID", entityType=ZoneResponse.class) + @Parameter(name=ApiConstants.ZONE_ID, type=CommandType.UUID, entityType=ZoneResponse.class, + description="the availability zone ID") private Long zoneId; - @Parameter(name=ApiConstants.FOR_VIRTUAL_NETWORK, type=CommandType.BOOLEAN, description="list by network type; true if need to list vms using Virtual Network, false otherwise") + @Parameter(name=ApiConstants.FOR_VIRTUAL_NETWORK, type=CommandType.BOOLEAN, + description="list by network type; true if need to list vms using Virtual Network, false otherwise") private Boolean forVirtualNetwork; - //@IdentityMapper(entityTableName="networks") - @Parameter(name=ApiConstants.NETWORK_ID, type=CommandType.LONG, description="list by network id", entityType=NetworkResponse.class) + @Parameter(name=ApiConstants.NETWORK_ID, type=CommandType.UUID, entityType=NetworkResponse.class, + description="list by network id") private Long networkId; @Parameter(name=ApiConstants.HYPERVISOR, type=CommandType.STRING, description="the target hypervisor for the template") private String hypervisor; - //@IdentityMapper(entityTableName="storage_pool") - @Parameter(name=ApiConstants.STORAGE_ID, type=CommandType.LONG, description="the storage ID where vm's volumes belong to", entityType=StoragePoolResponse.class) + @Parameter(name=ApiConstants.STORAGE_ID, type=CommandType.UUID, entityType=StoragePoolResponse.class, + description="the storage ID where vm's volumes belong to") private Long storageId; - @Parameter(name=ApiConstants.DETAILS, type=CommandType.LIST, collectionType=CommandType.STRING, description="comma separated list of host details requested, " + - "value can be a list of [all, group, nics, stats, secgrp, tmpl, servoff, iso, volume, min]. If no parameter is passed in, the details will be defaulted to all" ) + @Parameter(name=ApiConstants.DETAILS, type=CommandType.LIST, collectionType=CommandType.STRING, + description="comma separated list of host details requested, " + + "value can be a list of [all, group, nics, stats, secgrp, tmpl, servoff, iso, volume, min]." + + " If no parameter is passed in, the details will be defaulted to all" ) private List viewDetails; - //@IdentityMapper(entityTableName="vm_template") - @Parameter(name=ApiConstants.TEMPLATE_ID, type=CommandType.LONG, description="list vms by template", entityType=TemplateResponse.class) + @Parameter(name=ApiConstants.TEMPLATE_ID, type=CommandType.UUID, entityType=TemplateResponse.class, + description="list vms by template") private Long templateId; - //@IdentityMapper(entityTableName="vm_template") - @Parameter(name=ApiConstants.ISO_ID, type=CommandType.LONG, description="list vms by iso", entityType=IsoVmResponse.class) + @Parameter(name=ApiConstants.ISO_ID, type=CommandType.UUID, entityType=IsoVmResponse.class, + description="list vms by iso") private Long isoId; - //@IdentityMapper(entityTableName="vpc") - @Parameter(name=ApiConstants.VPC_ID, type=CommandType.LONG, description="list vms by vpc", entityType=VpcResponse.class) + @Parameter(name=ApiConstants.VPC_ID, type=CommandType.UUID, entityType=VpcResponse.class, + description="list vms by vpc") private Long vpcId; ///////////////////////////////////////////////////// /////////////////// Accessors /////////////////////// @@ -213,5 +215,4 @@ public class ListVMsCmd extends BaseListTaggedResourcesCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); } - } diff --git a/api/src/org/apache/cloudstack/api/command/user/vm/RebootVMCmd.java b/api/src/org/apache/cloudstack/api/command/user/vm/RebootVMCmd.java index 6477d5d23f0..f272eb12848 100644 --- a/api/src/org/apache/cloudstack/api/command/user/vm/RebootVMCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vm/RebootVMCmd.java @@ -21,7 +21,6 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; @@ -44,8 +43,8 @@ public class RebootVMCmd extends BaseAsyncCmd { //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - @IdentityMapper(entityTableName="vm_instance") - @Parameter(name=ApiConstants.ID, type=CommandType.LONG, required=true, description="The ID of the virtual machine", entityType=UserVmResponse.class) + @Parameter(name=ApiConstants.ID, type=CommandType.UUID, entityType=UserVmResponse.class, + required=true, description="The ID of the virtual machine") private Long id; ///////////////////////////////////////////////////// diff --git a/api/src/org/apache/cloudstack/api/command/user/vm/ResetVMPasswordCmd.java b/api/src/org/apache/cloudstack/api/command/user/vm/ResetVMPasswordCmd.java index c724245c820..034b10d7008 100644 --- a/api/src/org/apache/cloudstack/api/command/user/vm/ResetVMPasswordCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vm/ResetVMPasswordCmd.java @@ -21,7 +21,6 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; @@ -35,8 +34,8 @@ import com.cloud.user.UserContext; import com.cloud.uservm.UserVm; @Implementation(responseObject=UserVmResponse.class, description="Resets the password for virtual machine. " + - "The virtual machine must be in a \"Stopped\" state and the template must already " + - "support this feature for this command to take effect. [async]") + "The virtual machine must be in a \"Stopped\" state and the template must already " + + "support this feature for this command to take effect. [async]") public class ResetVMPasswordCmd extends BaseAsyncCmd { public static final Logger s_logger = Logger.getLogger(ResetVMPasswordCmd.class.getName()); @@ -46,8 +45,8 @@ public class ResetVMPasswordCmd extends BaseAsyncCmd { //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - @IdentityMapper(entityTableName="vm_instance") - @Parameter(name=ApiConstants.ID, type=CommandType.LONG, required=true, description="The ID of the virtual machine", entityType=UserVmResponse.class) + @Parameter(name=ApiConstants.ID, type=CommandType.UUID, entityType=UserVmResponse.class, + required=true, description="The ID of the virtual machine") private Long id; // unexposed parameter needed for serializing/deserializing the command diff --git a/api/src/org/apache/cloudstack/api/command/user/vm/RestoreVMCmd.java b/api/src/org/apache/cloudstack/api/command/user/vm/RestoreVMCmd.java index 3a94a11b5d0..c6f4ab38584 100644 --- a/api/src/org/apache/cloudstack/api/command/user/vm/RestoreVMCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vm/RestoreVMCmd.java @@ -21,7 +21,6 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; @@ -40,8 +39,8 @@ public class RestoreVMCmd extends BaseAsyncCmd { public static final Logger s_logger = Logger.getLogger(RestoreVMCmd.class); private static final String s_name = "restorevmresponse"; - @IdentityMapper(entityTableName="vm_instance") - @Parameter(name=ApiConstants.VIRTUAL_MACHINE_ID, type=CommandType.LONG, required=true, description="Virtual Machine ID", entityType=UserVmResponse.class) + @Parameter(name=ApiConstants.VIRTUAL_MACHINE_ID, type=CommandType.UUID, entityType=UserVmResponse.class, + required=true, description="Virtual Machine ID") private Long vmId; @Override @@ -86,5 +85,4 @@ public class RestoreVMCmd extends BaseAsyncCmd { public long getVmId() { return vmId; } - } diff --git a/api/src/org/apache/cloudstack/api/command/user/vm/StartVMCmd.java b/api/src/org/apache/cloudstack/api/command/user/vm/StartVMCmd.java index 8e5877dec09..a8887a520e5 100644 --- a/api/src/org/apache/cloudstack/api/command/user/vm/StartVMCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vm/StartVMCmd.java @@ -21,7 +21,6 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; @@ -51,12 +50,12 @@ public class StartVMCmd extends BaseAsyncCmd { // ////////////// API parameters ///////////////////// // /////////////////////////////////////////////////// - @IdentityMapper(entityTableName = "vm_instance") - @Parameter(name = ApiConstants.ID, type = CommandType.LONG, required = true, description = "The ID of the virtual machine", entityType=UserVmResponse.class) + @Parameter(name = ApiConstants.ID, type = CommandType.UUID, entityType=UserVmResponse.class, + required = true, description = "The ID of the virtual machine") private Long id; - @IdentityMapper(entityTableName="host") - @Parameter(name=ApiConstants.HOST_ID, type=CommandType.LONG, description="destination Host ID to deploy the VM to - parameter available for root admin only", entityType=HostResponse.class, since="3.0.1") + @Parameter(name=ApiConstants.HOST_ID, type=CommandType.UUID, entityType=HostResponse.class, + description="destination Host ID to deploy the VM to - parameter available for root admin only", since="3.0.1") private Long hostId; // /////////////////////////////////////////////////// diff --git a/api/src/org/apache/cloudstack/api/command/user/vm/StopVMCmd.java b/api/src/org/apache/cloudstack/api/command/user/vm/StopVMCmd.java index 9262327ed45..643ae03406d 100644 --- a/api/src/org/apache/cloudstack/api/command/user/vm/StopVMCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vm/StopVMCmd.java @@ -21,7 +21,6 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; @@ -44,8 +43,8 @@ public class StopVMCmd extends BaseAsyncCmd { // ////////////// API parameters ///////////////////// // /////////////////////////////////////////////////// - @IdentityMapper(entityTableName = "vm_instance") - @Parameter(name = ApiConstants.ID, type = CommandType.LONG, required = true, description = "The ID of the virtual machine", entityType=UserVmResponse.class) + @Parameter(name = ApiConstants.ID, type = CommandType.UUID, entityType=UserVmResponse.class, + required = true, description = "The ID of the virtual machine") private Long id; @Parameter(name = ApiConstants.FORCED, type = CommandType.BOOLEAN, required = false, description = "Force stop the VM " + diff --git a/api/src/org/apache/cloudstack/api/command/user/vm/UpdateVMCmd.java b/api/src/org/apache/cloudstack/api/command/user/vm/UpdateVMCmd.java index a17366dec7d..09cabd4470b 100644 --- a/api/src/org/apache/cloudstack/api/command/user/vm/UpdateVMCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vm/UpdateVMCmd.java @@ -20,7 +20,6 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; @@ -54,12 +53,12 @@ public class UpdateVMCmd extends BaseCmd{ @Parameter(name=ApiConstants.HA_ENABLE, type=CommandType.BOOLEAN, description="true if high-availability is enabled for the virtual machine, false otherwise") private Boolean haEnable; - @IdentityMapper(entityTableName="vm_instance") - @Parameter(name=ApiConstants.ID, type=CommandType.LONG, required=true, description="The ID of the virtual machine", entityType=UserVmResponse.class) + @Parameter(name=ApiConstants.ID, type=CommandType.UUID, entityType=UserVmResponse.class, + required=true, description="The ID of the virtual machine") private Long id; - @IdentityMapper(entityTableName="guest_os") - @Parameter(name=ApiConstants.OS_TYPE_ID, type=CommandType.LONG, description="the ID of the OS type that best represents this VM.", entityType=GuestOSResponse.class) + @Parameter(name=ApiConstants.OS_TYPE_ID, type=CommandType.UUID, entityType=GuestOSResponse.class, + description="the ID of the OS type that best represents this VM.") private Long osTypeId; @Parameter(name=ApiConstants.USER_DATA, type=CommandType.STRING, description="an optional binary data that can be sent to the virtual machine upon a successful deployment. This binary data must be base64 encoded before adding it to the request. Currently only HTTP GET is supported. Using HTTP GET (via querystring), you can send up to 2KB of data after base64 encoding.", length=2048) diff --git a/api/src/org/apache/cloudstack/api/command/user/vm/UpgradeVMCmd.java b/api/src/org/apache/cloudstack/api/command/user/vm/UpgradeVMCmd.java index c9390e91060..6a840ce9c3b 100644 --- a/api/src/org/apache/cloudstack/api/command/user/vm/UpgradeVMCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vm/UpgradeVMCmd.java @@ -20,7 +20,6 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; @@ -34,8 +33,8 @@ import com.cloud.user.UserContext; import com.cloud.uservm.UserVm; @Implementation(responseObject=UserVmResponse.class, description="Changes the service offering for a virtual machine. " + - "The virtual machine must be in a \"Stopped\" state for " + - "this command to take effect.") + "The virtual machine must be in a \"Stopped\" state for " + + "this command to take effect.") public class UpgradeVMCmd extends BaseCmd { public static final Logger s_logger = Logger.getLogger(UpgradeVMCmd.class.getName()); private static final String s_name = "changeserviceforvirtualmachineresponse"; @@ -44,12 +43,12 @@ public class UpgradeVMCmd extends BaseCmd { //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - @IdentityMapper(entityTableName="vm_instance") - @Parameter(name=ApiConstants.ID, type=CommandType.LONG, required=true, description="The ID of the virtual machine", entityType=UserVmResponse.class) + @Parameter(name=ApiConstants.ID, type=CommandType.UUID, entityType=UserVmResponse.class, + required=true, description="The ID of the virtual machine") private Long id; - @IdentityMapper(entityTableName="disk_offering") - @Parameter(name=ApiConstants.SERVICE_OFFERING_ID, type=CommandType.LONG, required=true, description="the service offering ID to apply to the virtual machine", entityType=DiskOfferingResponse.class) + @Parameter(name=ApiConstants.SERVICE_OFFERING_ID, type=CommandType.UUID, entityType=DiskOfferingResponse.class, + required=true, description="the service offering ID to apply to the virtual machine") private Long serviceOfferingId; ///////////////////////////////////////////////////// diff --git a/api/src/org/apache/cloudstack/api/response/ProjectResponse.java b/api/src/org/apache/cloudstack/api/response/ProjectResponse.java index e7d4dd31cee..937c8248ee3 100644 --- a/api/src/org/apache/cloudstack/api/response/ProjectResponse.java +++ b/api/src/org/apache/cloudstack/api/response/ProjectResponse.java @@ -27,7 +27,7 @@ import com.google.gson.annotations.SerializedName; import org.apache.cloudstack.api.BaseResponse; import org.apache.cloudstack.api.Entity; -@Entity(value = Project.class) +@Entity(value=Project.class) @SuppressWarnings("unused") public class ProjectResponse extends BaseResponse { From 2140ff55ea986c8c0f2c7e2f2afcb5a5d55f2fed Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Fri, 21 Dec 2012 19:43:25 -0800 Subject: [PATCH 173/421] api: Refactor and move VPN related api cmd classes to command.user.vpn Signed-off-by: Rohit Yadav --- api/src/com/cloud/network/vpn/RemoteAccessVpnService.java | 2 +- .../api/command/user/{user => vpn}/AddVpnUserCmd.java | 2 +- .../api/command/user/{user => vpn}/ListVpnUsersCmd.java | 2 +- .../api/command/user/{user => vpn}/RemoveVpnUserCmd.java | 2 +- .../src/com/cloud/api/commands/test/AddVpnUserCmdTest.java | 2 +- client/tomcatconf/commands.properties.in | 6 +++--- .../com/cloud/network/vpn/RemoteAccessVpnManagerImpl.java | 2 +- 7 files changed, 9 insertions(+), 9 deletions(-) rename api/src/org/apache/cloudstack/api/command/user/{user => vpn}/AddVpnUserCmd.java (99%) rename api/src/org/apache/cloudstack/api/command/user/{user => vpn}/ListVpnUsersCmd.java (98%) rename api/src/org/apache/cloudstack/api/command/user/{user => vpn}/RemoveVpnUserCmd.java (98%) diff --git a/api/src/com/cloud/network/vpn/RemoteAccessVpnService.java b/api/src/com/cloud/network/vpn/RemoteAccessVpnService.java index b5828acbc7e..81599a0c3c9 100644 --- a/api/src/com/cloud/network/vpn/RemoteAccessVpnService.java +++ b/api/src/com/cloud/network/vpn/RemoteAccessVpnService.java @@ -18,7 +18,7 @@ package com.cloud.network.vpn; import java.util.List; -import org.apache.cloudstack.api.command.user.user.ListVpnUsersCmd; +import org.apache.cloudstack.api.command.user.vpn.ListVpnUsersCmd; import org.apache.cloudstack.api.command.user.vpn.ListRemoteAccessVpnsCmd; import com.cloud.exception.NetworkRuleConflictException; import com.cloud.exception.ResourceUnavailableException; diff --git a/api/src/org/apache/cloudstack/api/command/user/user/AddVpnUserCmd.java b/api/src/org/apache/cloudstack/api/command/user/vpn/AddVpnUserCmd.java similarity index 99% rename from api/src/org/apache/cloudstack/api/command/user/user/AddVpnUserCmd.java rename to api/src/org/apache/cloudstack/api/command/user/vpn/AddVpnUserCmd.java index d8292f226cd..ee20521a328 100644 --- a/api/src/org/apache/cloudstack/api/command/user/user/AddVpnUserCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vpn/AddVpnUserCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.command.user.user; +package org.apache.cloudstack.api.command.user.vpn; import org.apache.log4j.Logger; diff --git a/api/src/org/apache/cloudstack/api/command/user/user/ListVpnUsersCmd.java b/api/src/org/apache/cloudstack/api/command/user/vpn/ListVpnUsersCmd.java similarity index 98% rename from api/src/org/apache/cloudstack/api/command/user/user/ListVpnUsersCmd.java rename to api/src/org/apache/cloudstack/api/command/user/vpn/ListVpnUsersCmd.java index f98d3c8ec7b..6ac950e407a 100644 --- a/api/src/org/apache/cloudstack/api/command/user/user/ListVpnUsersCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vpn/ListVpnUsersCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.command.user.user; +package org.apache.cloudstack.api.command.user.vpn; import java.util.ArrayList; import java.util.List; diff --git a/api/src/org/apache/cloudstack/api/command/user/user/RemoveVpnUserCmd.java b/api/src/org/apache/cloudstack/api/command/user/vpn/RemoveVpnUserCmd.java similarity index 98% rename from api/src/org/apache/cloudstack/api/command/user/user/RemoveVpnUserCmd.java rename to api/src/org/apache/cloudstack/api/command/user/vpn/RemoveVpnUserCmd.java index eee343ce760..2dbb0ade3e3 100644 --- a/api/src/org/apache/cloudstack/api/command/user/user/RemoveVpnUserCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vpn/RemoveVpnUserCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.command.user.user; +package org.apache.cloudstack.api.command.user.vpn; import org.apache.log4j.Logger; diff --git a/api/test/src/com/cloud/api/commands/test/AddVpnUserCmdTest.java b/api/test/src/com/cloud/api/commands/test/AddVpnUserCmdTest.java index f5dd1cec684..11ef43e9256 100644 --- a/api/test/src/com/cloud/api/commands/test/AddVpnUserCmdTest.java +++ b/api/test/src/com/cloud/api/commands/test/AddVpnUserCmdTest.java @@ -19,7 +19,7 @@ package src.com.cloud.api.commands.test; import junit.framework.Assert; import junit.framework.TestCase; -import org.apache.cloudstack.api.command.user.user.AddVpnUserCmd; +import org.apache.cloudstack.api.command.user.vpn.AddVpnUserCmd; import org.junit.Before; import org.junit.Rule; import org.junit.Test; diff --git a/client/tomcatconf/commands.properties.in b/client/tomcatconf/commands.properties.in index ccb98bf5ef8..df7768720f1 100755 --- a/client/tomcatconf/commands.properties.in +++ b/client/tomcatconf/commands.properties.in @@ -298,9 +298,9 @@ createRemoteAccessVpn=org.apache.cloudstack.api.command.user.vpn.CreateRemoteAcc deleteRemoteAccessVpn=org.apache.cloudstack.api.command.user.vpn.DeleteRemoteAccessVpnCmd;15 listRemoteAccessVpns=org.apache.cloudstack.api.command.user.vpn.ListRemoteAccessVpnsCmd;15 -addVpnUser=org.apache.cloudstack.api.command.user.user.AddVpnUserCmd;15 -removeVpnUser=org.apache.cloudstack.api.command.user.user.RemoveVpnUserCmd;15 -listVpnUsers=org.apache.cloudstack.api.command.user.user.ListVpnUsersCmd;15 +addVpnUser=org.apache.cloudstack.api.command.user.vpn.AddVpnUserCmd;15 +removeVpnUser=org.apache.cloudstack.api.command.user.vpn.RemoveVpnUserCmd;15 +listVpnUsers=org.apache.cloudstack.api.command.user.vpn.ListVpnUsersCmd;15 #### network offering commands createNetworkOffering=org.apache.cloudstack.api.command.admin.network.CreateNetworkOfferingCmd;1 diff --git a/server/src/com/cloud/network/vpn/RemoteAccessVpnManagerImpl.java b/server/src/com/cloud/network/vpn/RemoteAccessVpnManagerImpl.java index 46b5af95eb8..67d6b8ccbf3 100755 --- a/server/src/com/cloud/network/vpn/RemoteAccessVpnManagerImpl.java +++ b/server/src/com/cloud/network/vpn/RemoteAccessVpnManagerImpl.java @@ -23,7 +23,7 @@ import java.util.Map; import javax.ejb.Local; import javax.naming.ConfigurationException; -import org.apache.cloudstack.api.command.user.user.ListVpnUsersCmd; +import org.apache.cloudstack.api.command.user.vpn.ListVpnUsersCmd; import org.apache.log4j.Logger; import org.apache.cloudstack.api.command.user.vpn.ListRemoteAccessVpnsCmd; From 97514a0693324d37e03d5193a01e77dae90ef2d0 Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Sat, 22 Dec 2012 16:12:00 -0800 Subject: [PATCH 174/421] api: Annotate offering Signed-off-by: Rohit Yadav --- .../api/command/admin/offering/CreateDiskOfferingCmd.java | 6 +++--- .../command/admin/offering/CreateServiceOfferingCmd.java | 6 +++--- .../api/command/admin/offering/DeleteDiskOfferingCmd.java | 6 +++--- .../command/admin/offering/DeleteServiceOfferingCmd.java | 6 +++--- .../api/command/admin/offering/UpdateDiskOfferingCmd.java | 5 ++--- .../command/admin/offering/UpdateServiceOfferingCmd.java | 6 +++--- 6 files changed, 17 insertions(+), 18 deletions(-) diff --git a/api/src/org/apache/cloudstack/api/command/admin/offering/CreateDiskOfferingCmd.java b/api/src/org/apache/cloudstack/api/command/admin/offering/CreateDiskOfferingCmd.java index e8496288aee..a2967bdf6e5 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/offering/CreateDiskOfferingCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/offering/CreateDiskOfferingCmd.java @@ -16,11 +16,11 @@ // under the License. package org.apache.cloudstack.api.command.admin.offering; +import org.apache.cloudstack.api.response.DomainResponse; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; @@ -54,8 +54,8 @@ public class CreateDiskOfferingCmd extends BaseCmd { @Parameter(name=ApiConstants.CUSTOMIZED, type=CommandType.BOOLEAN, description="whether disk offering is custom or not") private Boolean customized; - @IdentityMapper(entityTableName="domain") - @Parameter(name=ApiConstants.DOMAIN_ID, type=CommandType.LONG, description="the ID of the containing domain, null for public offerings") + @Parameter(name=ApiConstants.DOMAIN_ID, type=CommandType.UUID, entityType=DomainResponse.class, + description="the ID of the containing domain, null for public offerings") private Long domainId; @Parameter(name=ApiConstants.STORAGE_TYPE, type=CommandType.STRING, description="the storage type of the disk offering. Values are local and shared.") diff --git a/api/src/org/apache/cloudstack/api/command/admin/offering/CreateServiceOfferingCmd.java b/api/src/org/apache/cloudstack/api/command/admin/offering/CreateServiceOfferingCmd.java index 020eee4f713..dc3f619c095 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/offering/CreateServiceOfferingCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/offering/CreateServiceOfferingCmd.java @@ -16,11 +16,11 @@ // under the License. package org.apache.cloudstack.api.command.admin.offering; +import org.apache.cloudstack.api.response.DomainResponse; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; @@ -64,8 +64,8 @@ public class CreateServiceOfferingCmd extends BaseCmd { @Parameter(name=ApiConstants.TAGS, type=CommandType.STRING, description="the tags for this service offering.") private String tags; - @IdentityMapper(entityTableName="domain") - @Parameter(name=ApiConstants.DOMAIN_ID, type=CommandType.LONG, description="the ID of the containing domain, null for public offerings") + @Parameter(name=ApiConstants.DOMAIN_ID, type=CommandType.UUID, entityType=DomainResponse.class, + description="the ID of the containing domain, null for public offerings") private Long domainId; @Parameter(name=ApiConstants.HOST_TAGS, type=CommandType.STRING, description="the host tag for this service offering.") diff --git a/api/src/org/apache/cloudstack/api/command/admin/offering/DeleteDiskOfferingCmd.java b/api/src/org/apache/cloudstack/api/command/admin/offering/DeleteDiskOfferingCmd.java index 7640928aa2d..848d58a9acf 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/offering/DeleteDiskOfferingCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/offering/DeleteDiskOfferingCmd.java @@ -16,11 +16,11 @@ // under the License. package org.apache.cloudstack.api.command.admin.offering; +import com.cloud.offering.DiskOffering; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; @@ -36,8 +36,8 @@ public class DeleteDiskOfferingCmd extends BaseCmd { //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - @IdentityMapper(entityTableName="disk_offering") - @Parameter(name=ApiConstants.ID, type=CommandType.LONG, required=true, description="ID of the disk offering") + @Parameter(name=ApiConstants.ID, type=CommandType.UUID, entityType=DiskOffering.class, + required=true, description="ID of the disk offering") private Long id; diff --git a/api/src/org/apache/cloudstack/api/command/admin/offering/DeleteServiceOfferingCmd.java b/api/src/org/apache/cloudstack/api/command/admin/offering/DeleteServiceOfferingCmd.java index e58e6316173..b96ab6053b4 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/offering/DeleteServiceOfferingCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/offering/DeleteServiceOfferingCmd.java @@ -16,11 +16,11 @@ // under the License. package org.apache.cloudstack.api.command.admin.offering; +import org.apache.cloudstack.api.response.DomainResponse; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; @@ -36,8 +36,8 @@ public class DeleteServiceOfferingCmd extends BaseCmd{ //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - @IdentityMapper(entityTableName="disk_offering") - @Parameter(name=ApiConstants.ID, type=CommandType.LONG, required=true, description="the ID of the service offering") + @Parameter(name=ApiConstants.ID, type=CommandType.UUID, entityType= DomainResponse.class, + required=true, description="the ID of the service offering") private Long id; diff --git a/api/src/org/apache/cloudstack/api/command/admin/offering/UpdateDiskOfferingCmd.java b/api/src/org/apache/cloudstack/api/command/admin/offering/UpdateDiskOfferingCmd.java index fbcda617e11..d565091a009 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/offering/UpdateDiskOfferingCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/offering/UpdateDiskOfferingCmd.java @@ -19,7 +19,6 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; @@ -39,8 +38,8 @@ public class UpdateDiskOfferingCmd extends BaseCmd{ @Parameter(name=ApiConstants.DISPLAY_TEXT, type=CommandType.STRING, description="updates alternate display text of the disk offering with this value", length=4096) private String displayText; - @IdentityMapper(entityTableName="disk_offering") - @Parameter(name=ApiConstants.ID, type=CommandType.LONG, required=true, description="ID of the disk offering") + @Parameter(name=ApiConstants.ID, type=CommandType.UUID, entityType=DiskOffering.class, + required=true, description="ID of the disk offering") private Long id; @Parameter(name=ApiConstants.NAME, type=CommandType.STRING, description="updates name of the disk offering with this value") diff --git a/api/src/org/apache/cloudstack/api/command/admin/offering/UpdateServiceOfferingCmd.java b/api/src/org/apache/cloudstack/api/command/admin/offering/UpdateServiceOfferingCmd.java index fb5d47e7600..3cea4232c43 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/offering/UpdateServiceOfferingCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/offering/UpdateServiceOfferingCmd.java @@ -16,11 +16,11 @@ // under the License. package org.apache.cloudstack.api.command.admin.offering; +import com.cloud.offering.DiskOffering; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; @@ -36,8 +36,8 @@ public class UpdateServiceOfferingCmd extends BaseCmd { ///////////////////////////////////////////////////// //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - @IdentityMapper(entityTableName="disk_offering") - @Parameter(name=ApiConstants.ID, type=CommandType.LONG, required=true, description="the ID of the service offering to be updated") + @Parameter(name=ApiConstants.ID, type=CommandType.UUID, entityType= DiskOffering.class, + required=true, description="the ID of the service offering to be updated") private Long id; @Parameter(name=ApiConstants.DISPLAY_TEXT, type=CommandType.STRING, description="the display text of the service offering to be updated") From 7e3c0ec0028c42110197785d9bf2df6ba88b5dc1 Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Sat, 22 Dec 2012 16:18:50 -0800 Subject: [PATCH 175/421] api: Annotate resource apis Signed-off-by: Rohit Yadav --- .../command/admin/resource/ListAlertsCmd.java | 4 ++-- .../command/admin/resource/ListCapacityCmd.java | 16 +++++++++------- .../cloudstack/api/response/AlertResponse.java | 3 +++ 3 files changed, 14 insertions(+), 9 deletions(-) diff --git a/api/src/org/apache/cloudstack/api/command/admin/resource/ListAlertsCmd.java b/api/src/org/apache/cloudstack/api/command/admin/resource/ListAlertsCmd.java index 32dc3d96799..5dbb1649cb6 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/resource/ListAlertsCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/resource/ListAlertsCmd.java @@ -42,8 +42,8 @@ public class ListAlertsCmd extends BaseListCmd { // ////////////// API parameters ///////////////////// // /////////////////////////////////////////////////// - @IdentityMapper(entityTableName="alert") - @Parameter(name = ApiConstants.ID, type = CommandType.LONG, description = "the ID of the alert") + @Parameter(name = ApiConstants.ID, type = CommandType.UUID, entityType = AlertResponse.class, + description = "the ID of the alert") private Long id; @Parameter(name = ApiConstants.TYPE, type = CommandType.STRING, description = "list by alert type") diff --git a/api/src/org/apache/cloudstack/api/command/admin/resource/ListCapacityCmd.java b/api/src/org/apache/cloudstack/api/command/admin/resource/ListCapacityCmd.java index bd3634a8a9b..e6e4c7a5b9a 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/resource/ListCapacityCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/resource/ListCapacityCmd.java @@ -23,11 +23,13 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseListCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.response.CapacityResponse; import org.apache.cloudstack.api.response.ListResponse; +import org.apache.cloudstack.api.response.PodResponse; +import org.apache.cloudstack.api.response.ClusterResponse; +import org.apache.cloudstack.api.response.ZoneResponse; import com.cloud.capacity.Capacity; import com.cloud.exception.InvalidParameterValueException; @@ -43,16 +45,16 @@ public class ListCapacityCmd extends BaseListCmd { //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - @IdentityMapper(entityTableName="data_center") - @Parameter(name=ApiConstants.ZONE_ID, type=CommandType.LONG, description="lists capacity by the Zone ID") + @Parameter(name=ApiConstants.ZONE_ID, type=CommandType.UUID, entityType = ZoneResponse.class, + description="lists capacity by the Zone ID") private Long zoneId; - @IdentityMapper(entityTableName="host_pod_ref") - @Parameter(name=ApiConstants.POD_ID, type=CommandType.LONG, description="lists capacity by the Pod ID") + @Parameter(name=ApiConstants.POD_ID, type=CommandType.UUID, entityType = PodResponse.class, + description="lists capacity by the Pod ID") private Long podId; - @IdentityMapper(entityTableName="cluster") - @Parameter(name=ApiConstants.CLUSTER_ID, type=CommandType.LONG, since="3.0.0", description="lists capacity by the Cluster ID") + @Parameter(name=ApiConstants.CLUSTER_ID, type=CommandType.UUID, entityType = ClusterResponse.class, + since="3.0.0", description="lists capacity by the Cluster ID") private Long clusterId; @Parameter(name=ApiConstants.FETCH_LATEST, type=CommandType.BOOLEAN, since="3.0.0", description="recalculate capacities and fetch the latest") diff --git a/api/src/org/apache/cloudstack/api/response/AlertResponse.java b/api/src/org/apache/cloudstack/api/response/AlertResponse.java index fdadd974de3..f81f07e7863 100644 --- a/api/src/org/apache/cloudstack/api/response/AlertResponse.java +++ b/api/src/org/apache/cloudstack/api/response/AlertResponse.java @@ -18,11 +18,14 @@ package org.apache.cloudstack.api.response; import java.util.Date; +import com.cloud.alert.Alert; import org.apache.cloudstack.api.ApiConstants; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; import org.apache.cloudstack.api.BaseResponse; +import org.apache.cloudstack.api.Entity; +@Entity(value=Alert.class) @SuppressWarnings("unused") public class AlertResponse extends BaseResponse { @SerializedName(ApiConstants.ID) @Param(description="the id of the alert") From a7e6172d8c5d97588c272de21f4ff43e4f8c2d60 Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Sat, 22 Dec 2012 16:49:59 -0800 Subject: [PATCH 176/421] api: Annotate admin.router apis Signed-off-by: Rohit Yadav --- .../admin/router/ConfigureVirtualRouterElementCmd.java | 6 ++---- .../admin/router/CreateVirtualRouterElementCmd.java | 5 ++--- .../api/command/admin/router/DestroyRouterCmd.java | 5 ++--- .../admin/router/ListVirtualRouterElementsCmd.java | 10 +++++----- .../api/command/admin/router/RebootRouterCmd.java | 5 ++--- .../api/command/admin/router/UpgradeRouterCmd.java | 10 +++++----- .../api/response/VirtualRouterProviderResponse.java | 3 +++ 7 files changed, 21 insertions(+), 23 deletions(-) diff --git a/api/src/org/apache/cloudstack/api/command/admin/router/ConfigureVirtualRouterElementCmd.java b/api/src/org/apache/cloudstack/api/command/admin/router/ConfigureVirtualRouterElementCmd.java index ca6108c0085..4a9926d250e 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/router/ConfigureVirtualRouterElementCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/router/ConfigureVirtualRouterElementCmd.java @@ -21,7 +21,6 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.PlugService; @@ -49,11 +48,10 @@ public class ConfigureVirtualRouterElementCmd extends BaseAsyncCmd { //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - @IdentityMapper(entityTableName = "virtual_router_providers") - @Parameter(name=ApiConstants.ID, type=CommandType.LONG, required=true, description="the ID of the virtual router provider") + @Parameter(name=ApiConstants.ID, type=CommandType.UUID, entityType = VirtualRouterProviderResponse.class, + required=true, description="the ID of the virtual router provider") private Long id; - @IdentityMapper(entityTableName = "physical_network_service_providers") @Parameter(name=ApiConstants.ENABLED, type=CommandType.BOOLEAN, required=true, description="Enabled/Disabled the service provider") private Boolean enabled; diff --git a/api/src/org/apache/cloudstack/api/command/admin/router/CreateVirtualRouterElementCmd.java b/api/src/org/apache/cloudstack/api/command/admin/router/CreateVirtualRouterElementCmd.java index 41990250a15..834bd93d1eb 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/router/CreateVirtualRouterElementCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/router/CreateVirtualRouterElementCmd.java @@ -16,12 +16,12 @@ // under the License. package org.apache.cloudstack.api.command.admin.router; +import org.apache.cloudstack.api.response.ProviderResponse; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseAsyncCreateCmd; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.PlugService; @@ -47,8 +47,7 @@ public class CreateVirtualRouterElementCmd extends BaseAsyncCreateCmd { //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - @Parameter(name=ApiConstants.NETWORK_SERVICE_PROVIDER_ID, type=CommandType.LONG, required=true, description="the network service provider ID of the virtual router element") - @IdentityMapper(entityTableName="physical_network_service_providers") + @Parameter(name=ApiConstants.NETWORK_SERVICE_PROVIDER_ID, type=CommandType.UUID, entityType = ProviderResponse.class, required=true, description="the network service provider ID of the virtual router element") private Long nspId; ///////////////////////////////////////////////////// diff --git a/api/src/org/apache/cloudstack/api/command/admin/router/DestroyRouterCmd.java b/api/src/org/apache/cloudstack/api/command/admin/router/DestroyRouterCmd.java index f9a19e1f79a..fbea225992b 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/router/DestroyRouterCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/router/DestroyRouterCmd.java @@ -21,7 +21,6 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; @@ -43,8 +42,8 @@ public class DestroyRouterCmd extends BaseAsyncCmd { // ////////////// API parameters ///////////////////// // /////////////////////////////////////////////////// - @IdentityMapper(entityTableName="vm_instance") - @Parameter(name = ApiConstants.ID, type = CommandType.LONG, required = true, description = "the ID of the router") + @Parameter(name = ApiConstants.ID, type = CommandType.UUID, entityType = DomainRouterResponse.class, + required = true, description = "the ID of the router") private Long id; // /////////////////////////////////////////////////// diff --git a/api/src/org/apache/cloudstack/api/command/admin/router/ListVirtualRouterElementsCmd.java b/api/src/org/apache/cloudstack/api/command/admin/router/ListVirtualRouterElementsCmd.java index 6528733a98f..427467871c3 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/router/ListVirtualRouterElementsCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/router/ListVirtualRouterElementsCmd.java @@ -20,11 +20,11 @@ import java.util.ArrayList; import java.util.List; import org.apache.cloudstack.api.command.user.network.ListNetworkOfferingsCmd; +import org.apache.cloudstack.api.response.ProviderResponse; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseListCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.PlugService; @@ -49,12 +49,12 @@ public class ListVirtualRouterElementsCmd extends BaseListCmd { ///////////////////////////////////////////////////// //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - @IdentityMapper(entityTableName = "virtual_router_providers") - @Parameter(name=ApiConstants.ID, type=CommandType.LONG, description="list virtual router elements by id") + @Parameter(name=ApiConstants.ID, type=CommandType.UUID, entityType = VirtualRouterProviderResponse.class, + description="list virtual router elements by id") private Long id; - @IdentityMapper(entityTableName = "physical_network_service_providers") - @Parameter(name=ApiConstants.NSP_ID, type=CommandType.LONG, description="list virtual router elements by network service provider id") + @Parameter(name=ApiConstants.NSP_ID, type=CommandType.UUID, entityType = ProviderResponse.class, + description="list virtual router elements by network service provider id") private Long nspId; @Parameter(name=ApiConstants.ENABLED, type=CommandType.BOOLEAN, description="list network offerings by enabled state") diff --git a/api/src/org/apache/cloudstack/api/command/admin/router/RebootRouterCmd.java b/api/src/org/apache/cloudstack/api/command/admin/router/RebootRouterCmd.java index d3474e54e73..af043766dd7 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/router/RebootRouterCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/router/RebootRouterCmd.java @@ -21,7 +21,6 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; @@ -44,8 +43,8 @@ public class RebootRouterCmd extends BaseAsyncCmd { //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - @IdentityMapper(entityTableName="vm_instance") - @Parameter(name=ApiConstants.ID, type=CommandType.LONG, required=true, description="the ID of the router") + @Parameter(name=ApiConstants.ID, type=CommandType.UUID, entityType = DomainRouterResponse.class, + required=true, description="the ID of the router") private Long id; ///////////////////////////////////////////////////// diff --git a/api/src/org/apache/cloudstack/api/command/admin/router/UpgradeRouterCmd.java b/api/src/org/apache/cloudstack/api/command/admin/router/UpgradeRouterCmd.java index f5b5fcef4b9..d76ab986ca8 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/router/UpgradeRouterCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/router/UpgradeRouterCmd.java @@ -16,11 +16,11 @@ // under the License. package org.apache.cloudstack.api.command.admin.router; +import org.apache.cloudstack.api.response.DiskOfferingResponse; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; @@ -37,12 +37,12 @@ public class UpgradeRouterCmd extends BaseCmd { //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - @IdentityMapper(entityTableName="vm_instance") - @Parameter(name=ApiConstants.ID, type=CommandType.LONG, required=true, description="The ID of the router") + @Parameter(name=ApiConstants.ID, type=CommandType.UUID, entityType = DomainRouterResponse.class, + required=true, description="The ID of the router") private Long id; - @IdentityMapper(entityTableName="disk_offering") - @Parameter(name=ApiConstants.SERVICE_OFFERING_ID, type=CommandType.LONG, required=true, description="the service offering ID to apply to the domain router") + @Parameter(name=ApiConstants.SERVICE_OFFERING_ID, type=CommandType.UUID, entityType = DiskOfferingResponse.class, + required=true, description="the service offering ID to apply to the domain router") private Long serviceOfferingId; ///////////////////////////////////////////////////// diff --git a/api/src/org/apache/cloudstack/api/response/VirtualRouterProviderResponse.java b/api/src/org/apache/cloudstack/api/response/VirtualRouterProviderResponse.java index b5a3847e26e..0e4c9f67bab 100644 --- a/api/src/org/apache/cloudstack/api/response/VirtualRouterProviderResponse.java +++ b/api/src/org/apache/cloudstack/api/response/VirtualRouterProviderResponse.java @@ -16,11 +16,14 @@ // under the License. package org.apache.cloudstack.api.response; +import com.cloud.network.VirtualRouterProvider; import org.apache.cloudstack.api.ApiConstants; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; import org.apache.cloudstack.api.BaseResponse; +import org.apache.cloudstack.api.Entity; +@Entity(value=VirtualRouterProvider.class) public class VirtualRouterProviderResponse extends BaseResponse implements ControlledEntityResponse { @SerializedName(ApiConstants.ID) @Param(description="the id of the router") private String id; From 93532ea28c8773f8e1039427096b2bf93cbdc8cf Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Sat, 22 Dec 2012 16:58:12 -0800 Subject: [PATCH 177/421] api: Annotate storage pool related apis Signed-off-by: Rohit Yadav --- .../CancelPrimaryStorageMaintenanceCmd.java | 5 ++--- .../storagepool/CreateStoragePoolCmd.java | 16 ++++++++------- .../admin/storagepool/DeletePoolCmd.java | 4 +++- .../storagepool/ListStoragePoolsCmd.java | 20 ++++++++++--------- ...reparePrimaryStorageForMaintenanceCmd.java | 5 ++--- .../storagepool/UpdateStoragePoolCmd.java | 5 ++--- 6 files changed, 29 insertions(+), 26 deletions(-) diff --git a/api/src/org/apache/cloudstack/api/command/admin/storagepool/CancelPrimaryStorageMaintenanceCmd.java b/api/src/org/apache/cloudstack/api/command/admin/storagepool/CancelPrimaryStorageMaintenanceCmd.java index 66fe965f0e9..c47691d14b5 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/storagepool/CancelPrimaryStorageMaintenanceCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/storagepool/CancelPrimaryStorageMaintenanceCmd.java @@ -21,7 +21,6 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; @@ -43,8 +42,8 @@ public class CancelPrimaryStorageMaintenanceCmd extends BaseAsyncCmd { //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - @IdentityMapper(entityTableName="storage_pool") - @Parameter(name=ApiConstants.ID, type=CommandType.LONG, required=true, description="the primary storage ID") + @Parameter(name=ApiConstants.ID, type=CommandType.UUID, entityType = StoragePoolResponse.class, + required=true, description="the primary storage ID") private Long id; diff --git a/api/src/org/apache/cloudstack/api/command/admin/storagepool/CreateStoragePoolCmd.java b/api/src/org/apache/cloudstack/api/command/admin/storagepool/CreateStoragePoolCmd.java index 506f766840a..d9f1d24f9c1 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/storagepool/CreateStoragePoolCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/storagepool/CreateStoragePoolCmd.java @@ -19,11 +19,13 @@ package org.apache.cloudstack.api.command.admin.storagepool; import java.net.UnknownHostException; import java.util.Map; +import org.apache.cloudstack.api.response.ClusterResponse; +import org.apache.cloudstack.api.response.PodResponse; +import org.apache.cloudstack.api.response.ZoneResponse; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; @@ -44,8 +46,8 @@ public class CreateStoragePoolCmd extends BaseCmd { //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - @IdentityMapper(entityTableName="cluster") - @Parameter(name=ApiConstants.CLUSTER_ID, type=CommandType.LONG, required=true, description="the cluster ID for the storage pool") + @Parameter(name=ApiConstants.CLUSTER_ID, type=CommandType.UUID, entityType = ClusterResponse.class, + required=true, description="the cluster ID for the storage pool") private Long clusterId; @Parameter(name=ApiConstants.DETAILS, type=CommandType.MAP, description="the details for the storage pool") @@ -54,8 +56,8 @@ public class CreateStoragePoolCmd extends BaseCmd { @Parameter(name=ApiConstants.NAME, type=CommandType.STRING, required=true, description="the name for the storage pool") private String storagePoolName; - @IdentityMapper(entityTableName="host_pod_ref") - @Parameter(name=ApiConstants.POD_ID, type=CommandType.LONG, required=true, description="the Pod ID for the storage pool") + @Parameter(name=ApiConstants.POD_ID, type=CommandType.UUID, entityType = PodResponse.class, + required=true, description="the Pod ID for the storage pool") private Long podId; @Parameter(name=ApiConstants.TAGS, type=CommandType.STRING, description="the tags for the storage pool") @@ -64,8 +66,8 @@ public class CreateStoragePoolCmd extends BaseCmd { @Parameter(name=ApiConstants.URL, type=CommandType.STRING, required=true, description="the URL of the storage pool") private String url; - @IdentityMapper(entityTableName="data_center") - @Parameter(name=ApiConstants.ZONE_ID, type=CommandType.LONG, required=true, description="the Zone ID for the storage pool") + @Parameter(name=ApiConstants.ZONE_ID, type=CommandType.UUID, entityType = ZoneResponse.class, + required=true, description="the Zone ID for the storage pool") private Long zoneId; ///////////////////////////////////////////////////// diff --git a/api/src/org/apache/cloudstack/api/command/admin/storagepool/DeletePoolCmd.java b/api/src/org/apache/cloudstack/api/command/admin/storagepool/DeletePoolCmd.java index f2ab4d2f66c..bc14ca30fdd 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/storagepool/DeletePoolCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/storagepool/DeletePoolCmd.java @@ -16,6 +16,7 @@ // under the License. package org.apache.cloudstack.api.command.admin.storagepool; +import org.apache.cloudstack.api.response.StoragePoolResponse; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; @@ -39,7 +40,8 @@ public class DeletePoolCmd extends BaseCmd { // /////////////////////////////////////////////////// @IdentityMapper(entityTableName="storage_pool") - @Parameter(name = ApiConstants.ID, type = CommandType.LONG, required = true, description = "Storage pool id") + @Parameter(name = ApiConstants.ID, type = CommandType.UUID, entityType = StoragePoolResponse.class, + required = true, description = "Storage pool id") private Long id; @Parameter(name = ApiConstants.FORCED, type = CommandType.BOOLEAN, required = false, description = "Force destroy storage pool " + diff --git a/api/src/org/apache/cloudstack/api/command/admin/storagepool/ListStoragePoolsCmd.java b/api/src/org/apache/cloudstack/api/command/admin/storagepool/ListStoragePoolsCmd.java index 74ea191795b..12a2dc31c44 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/storagepool/ListStoragePoolsCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/storagepool/ListStoragePoolsCmd.java @@ -23,11 +23,13 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseListCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.response.ClusterResponse; import org.apache.cloudstack.api.response.ListResponse; +import org.apache.cloudstack.api.response.PodResponse; import org.apache.cloudstack.api.response.StoragePoolResponse; +import org.apache.cloudstack.api.response.ZoneResponse; import com.cloud.async.AsyncJob; import com.cloud.storage.StoragePool; import com.cloud.utils.Pair; @@ -42,8 +44,8 @@ public class ListStoragePoolsCmd extends BaseListCmd { //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - @IdentityMapper(entityTableName="cluster") - @Parameter(name=ApiConstants.CLUSTER_ID, type=CommandType.LONG, description="list storage pools belongig to the specific cluster") + @Parameter(name=ApiConstants.CLUSTER_ID, type=CommandType.UUID, entityType = ClusterResponse.class, + description="list storage pools belongig to the specific cluster") private Long clusterId; @Parameter(name=ApiConstants.IP_ADDRESS, type=CommandType.STRING, description="the IP address for the storage pool") @@ -55,16 +57,16 @@ public class ListStoragePoolsCmd extends BaseListCmd { @Parameter(name=ApiConstants.PATH, type=CommandType.STRING, description="the storage pool path") private String path; - @IdentityMapper(entityTableName="host_pod_ref") - @Parameter(name=ApiConstants.POD_ID, type=CommandType.LONG, description="the Pod ID for the storage pool") + @Parameter(name=ApiConstants.POD_ID, type=CommandType.UUID, entityType = PodResponse.class, + description="the Pod ID for the storage pool") private Long podId; - @IdentityMapper(entityTableName="data_center") - @Parameter(name=ApiConstants.ZONE_ID, type=CommandType.LONG, description="the Zone ID for the storage pool") + @Parameter(name=ApiConstants.ZONE_ID, type=CommandType.UUID, entityType = ZoneResponse.class, + description="the Zone ID for the storage pool") private Long zoneId; - @IdentityMapper(entityTableName="storage_pool") - @Parameter(name=ApiConstants.ID, type=CommandType.LONG, description="the ID of the storage pool") + @Parameter(name=ApiConstants.ID, type=CommandType.UUID, entityType = StoragePoolResponse.class, + description="the ID of the storage pool") private Long id; ///////////////////////////////////////////////////// diff --git a/api/src/org/apache/cloudstack/api/command/admin/storagepool/PreparePrimaryStorageForMaintenanceCmd.java b/api/src/org/apache/cloudstack/api/command/admin/storagepool/PreparePrimaryStorageForMaintenanceCmd.java index 2b269346b0d..e5114873f51 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/storagepool/PreparePrimaryStorageForMaintenanceCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/storagepool/PreparePrimaryStorageForMaintenanceCmd.java @@ -21,7 +21,6 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; @@ -43,8 +42,8 @@ public class PreparePrimaryStorageForMaintenanceCmd extends BaseAsyncCmd { //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - @IdentityMapper(entityTableName="storage_pool") - @Parameter(name=ApiConstants.ID, type=CommandType.LONG, required=true, description="Primary storage ID") + @Parameter(name=ApiConstants.ID, type=CommandType.UUID, entityType = StoragePoolResponse.class, + required=true, description="Primary storage ID") private Long id; ///////////////////////////////////////////////////// diff --git a/api/src/org/apache/cloudstack/api/command/admin/storagepool/UpdateStoragePoolCmd.java b/api/src/org/apache/cloudstack/api/command/admin/storagepool/UpdateStoragePoolCmd.java index 62aa5da5d5a..bfaff43c8f1 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/storagepool/UpdateStoragePoolCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/storagepool/UpdateStoragePoolCmd.java @@ -22,7 +22,6 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; @@ -40,8 +39,8 @@ public class UpdateStoragePoolCmd extends BaseCmd { //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - @IdentityMapper(entityTableName="storage_pool") - @Parameter(name=ApiConstants.ID, type=CommandType.LONG, required=true, description="the Id of the storage pool") + @Parameter(name=ApiConstants.ID, type=CommandType.UUID, entityType = StoragePoolResponse.class, + required=true, description="the Id of the storage pool") private Long id; @Parameter(name=ApiConstants.TAGS, type=CommandType.LIST, collectionType=CommandType.STRING, description="comma-separated list of tags for the storage pool") From 9a3deaf8077ebbe8668c526edc287be1b3c8f5a8 Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Sat, 22 Dec 2012 17:11:32 -0800 Subject: [PATCH 178/421] api: Annotate template admin api Signed-off-by: Rohit Yadav --- .../api/command/admin/template/PrepareTemplateCmd.java | 10 +++++----- .../cloudstack/api/response/TemplateResponse.java | 3 +++ 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/api/src/org/apache/cloudstack/api/command/admin/template/PrepareTemplateCmd.java b/api/src/org/apache/cloudstack/api/command/admin/template/PrepareTemplateCmd.java index cc543c86f7d..579c4b0bb3e 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/template/PrepareTemplateCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/template/PrepareTemplateCmd.java @@ -18,11 +18,11 @@ package org.apache.cloudstack.api.command.admin.template; import java.util.List; +import org.apache.cloudstack.api.response.ZoneResponse; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.response.ListResponse; @@ -40,12 +40,12 @@ public class PrepareTemplateCmd extends BaseCmd { //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - @IdentityMapper(entityTableName="data_center") - @Parameter(name=ApiConstants.ZONE_ID, required=true, type=CommandType.LONG, description="zone ID of the template to be prepared in primary storage(s).") + @Parameter(name=ApiConstants.ZONE_ID, type=CommandType.UUID, entityType = ZoneResponse.class, + required=true, description="zone ID of the template to be prepared in primary storage(s).") private Long zoneId; - @IdentityMapper(entityTableName="vm_template") - @Parameter(name=ApiConstants.TEMPLATE_ID, required=true, type=CommandType.LONG, description="template ID of the template to be prepared in primary storage(s).") + @Parameter(name=ApiConstants.TEMPLATE_ID, type=CommandType.UUID, entityType = TemplateResponse.class, + required=true, description="template ID of the template to be prepared in primary storage(s).") private Long templateId; diff --git a/api/src/org/apache/cloudstack/api/response/TemplateResponse.java b/api/src/org/apache/cloudstack/api/response/TemplateResponse.java index d9daf3ac27d..17ddcad8ae3 100644 --- a/api/src/org/apache/cloudstack/api/response/TemplateResponse.java +++ b/api/src/org/apache/cloudstack/api/response/TemplateResponse.java @@ -20,12 +20,15 @@ import java.util.Date; import java.util.List; import java.util.Map; +import com.cloud.template.VirtualMachineTemplate; import org.apache.cloudstack.api.ApiConstants; import com.cloud.serializer.Param; import com.cloud.storage.Storage.ImageFormat; import com.google.gson.annotations.SerializedName; import org.apache.cloudstack.api.BaseResponse; +import org.apache.cloudstack.api.Entity; +@Entity(value=VirtualMachineTemplate.class) @SuppressWarnings("unused") public class TemplateResponse extends BaseResponse implements ControlledEntityResponse { @SerializedName(ApiConstants.ID) @Param(description="the template ID") From f3f0962df20b58b25fc253df5017ad2dea41a62d Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Sat, 22 Dec 2012 17:19:56 -0800 Subject: [PATCH 179/421] api: Annotate admin apis related to traffic type for usage Signed-off-by: Rohit Yadav --- .../api/command/admin/usage/AddTrafficTypeCmd.java | 6 +++--- .../api/command/admin/usage/DeleteTrafficTypeCmd.java | 6 +++--- .../api/command/admin/usage/ListTrafficTypesCmd.java | 7 +++---- .../api/command/admin/usage/UpdateTrafficTypeCmd.java | 5 ++--- .../cloudstack/api/response/TrafficTypeResponse.java | 3 +++ 5 files changed, 14 insertions(+), 13 deletions(-) diff --git a/api/src/org/apache/cloudstack/api/command/admin/usage/AddTrafficTypeCmd.java b/api/src/org/apache/cloudstack/api/command/admin/usage/AddTrafficTypeCmd.java index 25786e08d80..1cd62f57acb 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/usage/AddTrafficTypeCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/usage/AddTrafficTypeCmd.java @@ -16,12 +16,12 @@ // under the License. package org.apache.cloudstack.api.command.admin.usage; +import org.apache.cloudstack.api.response.PhysicalNetworkResponse; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseAsyncCreateCmd; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; @@ -43,8 +43,8 @@ public class AddTrafficTypeCmd extends BaseAsyncCreateCmd { //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - @IdentityMapper(entityTableName="physical_network") - @Parameter(name=ApiConstants.PHYSICAL_NETWORK_ID, type=CommandType.LONG, required=true, description="the Physical Network ID") + @Parameter(name=ApiConstants.PHYSICAL_NETWORK_ID, type=CommandType.UUID, entityType = PhysicalNetworkResponse.class, + required=true, description="the Physical Network ID") private Long physicalNetworkId; @Parameter(name=ApiConstants.TRAFFIC_TYPE, type=CommandType.STRING, required=true, description="the trafficType to be added to the physical network") diff --git a/api/src/org/apache/cloudstack/api/command/admin/usage/DeleteTrafficTypeCmd.java b/api/src/org/apache/cloudstack/api/command/admin/usage/DeleteTrafficTypeCmd.java index 0f994298a8b..3c0018523b7 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/usage/DeleteTrafficTypeCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/usage/DeleteTrafficTypeCmd.java @@ -16,12 +16,12 @@ // under the License. package org.apache.cloudstack.api.command.admin.usage; +import org.apache.cloudstack.api.response.TrafficTypeResponse; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; @@ -39,8 +39,8 @@ public class DeleteTrafficTypeCmd extends BaseAsyncCmd { ///////////////////////////////////////////////////// //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - @IdentityMapper(entityTableName="physical_network_traffic_types") - @Parameter(name=ApiConstants.ID, type=CommandType.LONG, required=true, description="traffic type id") + @Parameter(name=ApiConstants.ID, type=CommandType.UUID, entityType = TrafficTypeResponse.class, + required=true, description="traffic type id") private Long id; diff --git a/api/src/org/apache/cloudstack/api/command/admin/usage/ListTrafficTypesCmd.java b/api/src/org/apache/cloudstack/api/command/admin/usage/ListTrafficTypesCmd.java index e97d1e1527e..f82829e6be9 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/usage/ListTrafficTypesCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/usage/ListTrafficTypesCmd.java @@ -19,11 +19,11 @@ package org.apache.cloudstack.api.command.admin.usage; import java.util.ArrayList; import java.util.List; +import org.apache.cloudstack.api.response.PhysicalNetworkResponse; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseListCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.response.ListResponse; @@ -33,7 +33,6 @@ import com.cloud.network.PhysicalNetworkTrafficType; import com.cloud.user.Account; import com.cloud.utils.Pair; - @Implementation(description="Lists traffic types of a given physical network.", responseObject=ProviderResponse.class, since="3.0.0") public class ListTrafficTypesCmd extends BaseListCmd { public static final Logger s_logger = Logger.getLogger(ListTrafficTypesCmd.class.getName()); @@ -42,8 +41,8 @@ public class ListTrafficTypesCmd extends BaseListCmd { ///////////////////////////////////////////////////// //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - @IdentityMapper(entityTableName="physical_network") - @Parameter(name=ApiConstants.PHYSICAL_NETWORK_ID, type=CommandType.LONG, required=true, description="the Physical Network ID") + @Parameter(name=ApiConstants.PHYSICAL_NETWORK_ID, type=CommandType.UUID, entityType = PhysicalNetworkResponse.class, + required=true, description="the Physical Network ID") private Long physicalNetworkId; ///////////////////////////////////////////////////// diff --git a/api/src/org/apache/cloudstack/api/command/admin/usage/UpdateTrafficTypeCmd.java b/api/src/org/apache/cloudstack/api/command/admin/usage/UpdateTrafficTypeCmd.java index 389ed09f977..8f8d333b8cf 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/usage/UpdateTrafficTypeCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/usage/UpdateTrafficTypeCmd.java @@ -21,7 +21,6 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; @@ -41,8 +40,8 @@ public class UpdateTrafficTypeCmd extends BaseAsyncCmd { //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - @IdentityMapper(entityTableName="physical_network_traffic_types") - @Parameter(name=ApiConstants.ID, type=CommandType.LONG, required=true, description="traffic type id") + @Parameter(name=ApiConstants.ID, type=CommandType.UUID, entityType = TrafficTypeResponse.class, + required=true, description="traffic type id") private Long id; @Parameter(name=ApiConstants.XEN_NETWORK_LABEL, type=CommandType.STRING, description="The network name label of the physical device dedicated to this traffic on a XenServer host") diff --git a/api/src/org/apache/cloudstack/api/response/TrafficTypeResponse.java b/api/src/org/apache/cloudstack/api/response/TrafficTypeResponse.java index 6f88d9c025c..846bcf67836 100644 --- a/api/src/org/apache/cloudstack/api/response/TrafficTypeResponse.java +++ b/api/src/org/apache/cloudstack/api/response/TrafficTypeResponse.java @@ -16,11 +16,14 @@ // under the License. package org.apache.cloudstack.api.response; +import com.cloud.network.PhysicalNetworkTrafficType; import org.apache.cloudstack.api.ApiConstants; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; import org.apache.cloudstack.api.BaseResponse; +import org.apache.cloudstack.api.Entity; +@Entity(value=PhysicalNetworkTrafficType.class) public class TrafficTypeResponse extends BaseResponse { @SerializedName(ApiConstants.ID) @Param(description="id of the network provider") From e9457cb40712d2bb4d015c3d1daa3973ca17aac8 Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Sat, 22 Dec 2012 17:31:16 -0800 Subject: [PATCH 180/421] api: Annotate Vlan admin apis, fix resource, storagepool, systemvm apis Signed-off-by: Rohit Yadav --- .../command/admin/resource/ListAlertsCmd.java | 1 - .../admin/storagepool/DeletePoolCmd.java | 2 -- .../admin/systemvm/StartSystemVMCmd.java | 1 - .../admin/systemvm/UpgradeSystemVMCmd.java | 2 -- .../admin/vlan/CreateVlanIpRangeCmd.java | 31 +++++++++------- .../admin/vlan/DeleteVlanIpRangeCmd.java | 6 ++-- .../admin/vlan/ListVlanIpRangesCmd.java | 35 +++++++++++-------- .../api/response/VlanIpRangeResponse.java | 3 ++ 8 files changed, 44 insertions(+), 37 deletions(-) diff --git a/api/src/org/apache/cloudstack/api/command/admin/resource/ListAlertsCmd.java b/api/src/org/apache/cloudstack/api/command/admin/resource/ListAlertsCmd.java index 5dbb1649cb6..cbccc2f383b 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/resource/ListAlertsCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/resource/ListAlertsCmd.java @@ -24,7 +24,6 @@ import org.apache.log4j.Logger; import com.cloud.alert.Alert; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseListCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.response.AlertResponse; diff --git a/api/src/org/apache/cloudstack/api/command/admin/storagepool/DeletePoolCmd.java b/api/src/org/apache/cloudstack/api/command/admin/storagepool/DeletePoolCmd.java index bc14ca30fdd..84cfdd56a50 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/storagepool/DeletePoolCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/storagepool/DeletePoolCmd.java @@ -21,7 +21,6 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; @@ -39,7 +38,6 @@ public class DeletePoolCmd extends BaseCmd { // ////////////// API parameters ///////////////////// // /////////////////////////////////////////////////// - @IdentityMapper(entityTableName="storage_pool") @Parameter(name = ApiConstants.ID, type = CommandType.UUID, entityType = StoragePoolResponse.class, required = true, description = "Storage pool id") private Long id; diff --git a/api/src/org/apache/cloudstack/api/command/admin/systemvm/StartSystemVMCmd.java b/api/src/org/apache/cloudstack/api/command/admin/systemvm/StartSystemVMCmd.java index fccd4a77847..94bd5dccf3d 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/systemvm/StartSystemVMCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/systemvm/StartSystemVMCmd.java @@ -21,7 +21,6 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; diff --git a/api/src/org/apache/cloudstack/api/command/admin/systemvm/UpgradeSystemVMCmd.java b/api/src/org/apache/cloudstack/api/command/admin/systemvm/UpgradeSystemVMCmd.java index d530c1476c9..77d812afc99 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/systemvm/UpgradeSystemVMCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/systemvm/UpgradeSystemVMCmd.java @@ -16,14 +16,12 @@ // under the License. package org.apache.cloudstack.api.command.admin.systemvm; -import com.cloud.offering.DiskOffering; import org.apache.cloudstack.api.command.user.vm.UpgradeVMCmd; import org.apache.cloudstack.api.response.DiskOfferingResponse; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; diff --git a/api/src/org/apache/cloudstack/api/command/admin/vlan/CreateVlanIpRangeCmd.java b/api/src/org/apache/cloudstack/api/command/admin/vlan/CreateVlanIpRangeCmd.java index 2ae907b42ed..d9b955701f5 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/vlan/CreateVlanIpRangeCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/vlan/CreateVlanIpRangeCmd.java @@ -20,11 +20,16 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; +import org.apache.cloudstack.api.response.DomainResponse; +import org.apache.cloudstack.api.response.PodResponse; +import org.apache.cloudstack.api.response.PhysicalNetworkResponse; +import org.apache.cloudstack.api.response.ProjectResponse; +import org.apache.cloudstack.api.response.NetworkResponse; import org.apache.cloudstack.api.response.VlanIpRangeResponse; +import org.apache.cloudstack.api.response.ZoneResponse; import com.cloud.dc.Vlan; import com.cloud.exception.ConcurrentOperationException; import com.cloud.exception.InsufficientCapacityException; @@ -45,12 +50,12 @@ public class CreateVlanIpRangeCmd extends BaseCmd { @Parameter(name=ApiConstants.ACCOUNT, type=CommandType.STRING, description="account who will own the VLAN. If VLAN is Zone wide, this parameter should be ommited") private String accountName; - @IdentityMapper(entityTableName="projects") - @Parameter(name=ApiConstants.PROJECT_ID, type=CommandType.LONG, description="project who will own the VLAN. If VLAN is Zone wide, this parameter should be ommited") + @Parameter(name=ApiConstants.PROJECT_ID, type=CommandType.UUID, entityType = ProjectResponse.class, + description="project who will own the VLAN. If VLAN is Zone wide, this parameter should be ommited") private Long projectId; - @IdentityMapper(entityTableName="domain") - @Parameter(name=ApiConstants.DOMAIN_ID, type=CommandType.LONG, description="domain ID of the account owning a VLAN") + @Parameter(name=ApiConstants.DOMAIN_ID, type=CommandType.UUID, entityType = DomainResponse.class, + description="domain ID of the account owning a VLAN") private Long domainId; @Parameter(name=ApiConstants.END_IP, type=CommandType.STRING, description="the ending IP address in the VLAN IP range") @@ -65,8 +70,8 @@ public class CreateVlanIpRangeCmd extends BaseCmd { @Parameter(name=ApiConstants.NETMASK, type=CommandType.STRING, description="the netmask of the VLAN IP range") private String netmask; - @IdentityMapper(entityTableName="host_pod_ref") - @Parameter(name=ApiConstants.POD_ID, type=CommandType.LONG, description="optional parameter. Have to be specified for Direct Untagged vlan only.") + @Parameter(name=ApiConstants.POD_ID, type=CommandType.UUID, entityType = PodResponse.class, + description="optional parameter. Have to be specified for Direct Untagged vlan only.") private Long podId; @Parameter(name=ApiConstants.START_IP, type=CommandType.STRING, required=true, description="the beginning IP address in the VLAN IP range") @@ -76,16 +81,16 @@ public class CreateVlanIpRangeCmd extends BaseCmd { " will be defaulted to the vlan of the network or if vlan of the network is null - to Untagged") private String vlan; - @IdentityMapper(entityTableName="data_center") - @Parameter(name=ApiConstants.ZONE_ID, type=CommandType.LONG, description="the Zone ID of the VLAN IP range") + @Parameter(name=ApiConstants.ZONE_ID, type=CommandType.UUID, entityType = ZoneResponse.class, + description="the Zone ID of the VLAN IP range") private Long zoneId; - @IdentityMapper(entityTableName="networks") - @Parameter(name=ApiConstants.NETWORK_ID, type=CommandType.LONG, description="the network id") + @Parameter(name=ApiConstants.NETWORK_ID, type=CommandType.UUID, entityType = NetworkResponse.class, + description="the network id") private Long networkID; - @IdentityMapper(entityTableName="physical_network") - @Parameter(name=ApiConstants.PHYSICAL_NETWORK_ID, type=CommandType.LONG, description="the physical network id") + @Parameter(name=ApiConstants.PHYSICAL_NETWORK_ID, type=CommandType.UUID, entityType = PhysicalNetworkResponse.class, + description="the physical network id") private Long physicalNetworkId; ///////////////////////////////////////////////////// diff --git a/api/src/org/apache/cloudstack/api/command/admin/vlan/DeleteVlanIpRangeCmd.java b/api/src/org/apache/cloudstack/api/command/admin/vlan/DeleteVlanIpRangeCmd.java index 5286152f9cb..3700dbd58eb 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/vlan/DeleteVlanIpRangeCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/vlan/DeleteVlanIpRangeCmd.java @@ -16,11 +16,11 @@ // under the License. package org.apache.cloudstack.api.command.admin.vlan; +import org.apache.cloudstack.api.response.VlanIpRangeResponse; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; @@ -37,8 +37,8 @@ public class DeleteVlanIpRangeCmd extends BaseCmd { //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - @IdentityMapper(entityTableName="vlan") - @Parameter(name=ApiConstants.ID, type=CommandType.LONG, required=true, description="the id of the VLAN IP range") + @Parameter(name=ApiConstants.ID, type=CommandType.UUID, entityType = VlanIpRangeResponse.class, + required=true, description="the id of the VLAN IP range") private Long id; ///////////////////////////////////////////////////// diff --git a/api/src/org/apache/cloudstack/api/command/admin/vlan/ListVlanIpRangesCmd.java b/api/src/org/apache/cloudstack/api/command/admin/vlan/ListVlanIpRangesCmd.java index 6f7186a9187..1cb3ea22674 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/vlan/ListVlanIpRangesCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/vlan/ListVlanIpRangesCmd.java @@ -23,10 +23,15 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseListCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.response.DomainResponse; import org.apache.cloudstack.api.response.ListResponse; +import org.apache.cloudstack.api.response.PodResponse; +import org.apache.cloudstack.api.response.ProjectResponse; +import org.apache.cloudstack.api.response.NetworkResponse; +import org.apache.cloudstack.api.response.PhysicalNetworkResponse; +import org.apache.cloudstack.api.response.ZoneResponse; import org.apache.cloudstack.api.response.VlanIpRangeResponse; import com.cloud.dc.Vlan; import com.cloud.utils.Pair; @@ -44,38 +49,38 @@ public class ListVlanIpRangesCmd extends BaseListCmd { @Parameter(name=ApiConstants.ACCOUNT, type=CommandType.STRING, description="the account with which the VLAN IP range is associated. Must be used with the domainId parameter.") private String accountName; - @IdentityMapper(entityTableName="projects") - @Parameter(name=ApiConstants.PROJECT_ID, type=CommandType.LONG, description="project who will own the VLAN") + @Parameter(name=ApiConstants.PROJECT_ID, type=CommandType.UUID, entityType = ProjectResponse.class, + description="project who will own the VLAN") private Long projectId; - @IdentityMapper(entityTableName="domain") - @Parameter(name=ApiConstants.DOMAIN_ID, type=CommandType.LONG, description="the domain ID with which the VLAN IP range is associated. If used with the account parameter, returns all VLAN IP ranges for that account in the specified domain.") + @Parameter(name=ApiConstants.DOMAIN_ID, type=CommandType.UUID, entityType = DomainResponse.class, + description="the domain ID with which the VLAN IP range is associated. If used with the account parameter, returns all VLAN IP ranges for that account in the specified domain.") private Long domainId; - @IdentityMapper(entityTableName="vlan") - @Parameter(name=ApiConstants.ID, type=CommandType.LONG, required=false, description="the ID of the VLAN IP range") + @Parameter(name=ApiConstants.ID, type=CommandType.UUID, entityType = VlanIpRangeResponse.class, + required=false, description="the ID of the VLAN IP range") private Long id; - @IdentityMapper(entityTableName="host_pod_ref") - @Parameter(name=ApiConstants.POD_ID, type=CommandType.LONG, description="the Pod ID of the VLAN IP range") + @Parameter(name=ApiConstants.POD_ID, type=CommandType.UUID, entityType = PodResponse.class, + description="the Pod ID of the VLAN IP range") private Long podId; @Parameter(name=ApiConstants.VLAN, type=CommandType.STRING, description="the ID or VID of the VLAN. Default is an \"untagged\" VLAN.") private String vlan; - @IdentityMapper(entityTableName="data_center") - @Parameter(name=ApiConstants.ZONE_ID, type=CommandType.LONG, description="the Zone ID of the VLAN IP range") + @Parameter(name=ApiConstants.ZONE_ID, type=CommandType.UUID, entityType = ZoneResponse.class, + description="the Zone ID of the VLAN IP range") private Long zoneId; - @IdentityMapper(entityTableName="networks") - @Parameter(name=ApiConstants.NETWORK_ID, type=CommandType.LONG, description="network id of the VLAN IP range") + @Parameter(name=ApiConstants.NETWORK_ID, type=CommandType.UUID, entityType = NetworkResponse.class, + description="network id of the VLAN IP range") private Long networkId; @Parameter(name=ApiConstants.FOR_VIRTUAL_NETWORK, type=CommandType.BOOLEAN, description="true if VLAN is of Virtual type, false if Direct") private Boolean forVirtualNetwork; - @IdentityMapper(entityTableName="physical_network") - @Parameter(name=ApiConstants.PHYSICAL_NETWORK_ID, type=CommandType.LONG, description="physical network id of the VLAN IP range") + @Parameter(name=ApiConstants.PHYSICAL_NETWORK_ID, type=CommandType.UUID, entityType = PhysicalNetworkResponse.class, + description="physical network id of the VLAN IP range") private Long physicalNetworkId; ///////////////////////////////////////////////////// diff --git a/api/src/org/apache/cloudstack/api/response/VlanIpRangeResponse.java b/api/src/org/apache/cloudstack/api/response/VlanIpRangeResponse.java index 5a3a236b16c..1e8fcf4376b 100644 --- a/api/src/org/apache/cloudstack/api/response/VlanIpRangeResponse.java +++ b/api/src/org/apache/cloudstack/api/response/VlanIpRangeResponse.java @@ -16,11 +16,14 @@ // under the License. package org.apache.cloudstack.api.response; +import com.cloud.dc.Vlan; import org.apache.cloudstack.api.ApiConstants; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; import org.apache.cloudstack.api.BaseResponse; +import org.apache.cloudstack.api.Entity; +@Entity(value=Vlan.class) @SuppressWarnings("unused") public class VlanIpRangeResponse extends BaseResponse implements ControlledEntityResponse{ @SerializedName(ApiConstants.ID) @Param(description="the ID of the VLAN IP range") From 5d8e1066027b2df20680aa0c361830d85d1611fb Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Sat, 22 Dec 2012 18:57:26 -0800 Subject: [PATCH 181/421] api: Add method in ApiDispatcher to be reused for both UUID and List Signed-off-by: Rohit Yadav --- server/src/com/cloud/api/ApiDispatcher.java | 77 ++++++++++++--------- 1 file changed, 45 insertions(+), 32 deletions(-) diff --git a/server/src/com/cloud/api/ApiDispatcher.java b/server/src/com/cloud/api/ApiDispatcher.java index 54a498b5012..6fcfb79d808 100755 --- a/server/src/com/cloud/api/ApiDispatcher.java +++ b/server/src/com/cloud/api/ApiDispatcher.java @@ -533,6 +533,39 @@ public class ApiDispatcher { //check access on the entities. } + private static Long translateUuidToInternalId(String uuid, Parameter annotation) + { + if (uuid.equals("-1")) { + // FIXME: This is to handle a lot of hardcoded special cases where -1 is sent + // APITODO: Find and get rid of all hardcoded params in API Cmds and service layer + return -1L; + } + // There may be multiple entities defined on the @Entity of a Response.class + // UUID CommandType would expect only one entityType, so use the first entityType + Class[] entities = annotation.entityType()[0].getAnnotation(Entity.class).value(); + Long internalId = null; + // Go through each entity which is an interface to a VO class and get a VO object + // Try to getId() for the object using reflection, break on first non-null value + for (Class entity: entities) { + // findByUuid returns one VO object using uuid, use reflect to get the Id + Object objVO = s_instance._entityMgr.findByUuid(entity, uuid); + if (objVO == null) { + continue; + } + // Invoke the getId method, get the internal long ID + // If that fails hide exceptions as the uuid may not exist + try { + internalId = (Long) ((Identity)objVO).getId(); + } catch (IllegalArgumentException e) { + } catch (NullPointerException e) { + } + // Return on first non-null Id for the uuid entity + if (internalId != null) + break; + } + return internalId; + } + @SuppressWarnings({ "unchecked", "rawtypes" }) private static void setFieldValue(Field field, BaseCmd cmdObj, Object paramObj, Parameter annotation, IdentityMapper identityMapper) throws IllegalArgumentException, ParseException { try { @@ -590,7 +623,15 @@ public class ApiDispatcher { listParam.add(Integer.valueOf(token)); break; case UUID: - //APITODO: FIXME if there is any APICmd that has List + if (token.isEmpty()) + break; + Long internalId = translateUuidToInternalId(token, annotation); + // If id is null, entity with the uuid was not found, throw exception + if (internalId == null) { + throw new InvalidParameterValueException("No entity with " + field.getName() + "(uuid)=" + + paramObj.toString() + " was found in the database."); + } + listParam.add(internalId); break; case LONG: { Long val = null; @@ -614,41 +655,13 @@ public class ApiDispatcher { case UUID: if (paramObj.toString().isEmpty()) break; - if (paramObj.toString().equals("-1")) { - // FIXME: This is to handle a lot of hardcoded special cases where -1 is sent - // APITODO: Find and get rid of all hardcoded params in API Cmds and service layer - field.set(cmdObj, -1L); - break; - } - // There may be multiple entities defined on the @Entity of a Response.class - // UUID CommandType would expect only one entityType, so use the first entityType - Class[] entities = annotation.entityType()[0].getAnnotation(Entity.class).value(); - Long id = null; - // Go through each entity which is an interface to a VO class and get a VO object - // Try to getId() for the object using reflection, break on first non-null value - for (Class entity: entities) { - // findByUuid returns one VO object using uuid, use reflect to get the Id - Object objVO = s_instance._entityMgr.findByUuid(entity, paramObj.toString()); - if (objVO == null) { - continue; - } - // Invoke the getId method, get the internal long ID - // If that fails hide exceptions as the uuid may not exist - try { - id = (Long) ((Identity)objVO).getId(); - } catch (IllegalArgumentException e) { - } catch (NullPointerException e) { - } - // Return on first non-null Id for the uuid entity - if (id != null) - break; - } + Long internalId = translateUuidToInternalId(paramObj.toString(), annotation); // If id is null, entity with the uuid was not found, throw exception - if (id == null) { + if (internalId == null) { throw new InvalidParameterValueException("No entity with " + field.getName() + "(uuid)=" + paramObj.toString() + " was found in the database."); } - field.set(cmdObj, id); + field.set(cmdObj, internalId); break; case LONG: // APITODO: Remove identityMapper, simply convert the over the wire param to Long From 6f3c7bf4c71b595354d783cae10945f13dcc2aef Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Sat, 22 Dec 2012 18:58:01 -0800 Subject: [PATCH 182/421] api: Annotate vm related apis in admin pkg Signed-off-by: Rohit Yadav --- .../api/command/admin/vm/AssignVMCmd.java | 16 ++++++++-------- .../api/command/admin/vm/MigrateVMCmd.java | 13 ++++++------- .../api/command/admin/vm/RecoverVMCmd.java | 4 ++-- 3 files changed, 16 insertions(+), 17 deletions(-) diff --git a/api/src/org/apache/cloudstack/api/command/admin/vm/AssignVMCmd.java b/api/src/org/apache/cloudstack/api/command/admin/vm/AssignVMCmd.java index 73d9c9dc7c0..18ac324caac 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/vm/AssignVMCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/vm/AssignVMCmd.java @@ -45,24 +45,24 @@ public class AssignVMCmd extends BaseCmd { //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - //@IdentityMapper(entityTableName="vm_instance") - @Parameter(name=ApiConstants.VIRTUAL_MACHINE_ID, type=CommandType.LONG, required=true, description="the vm ID of the user VM to be moved", entityType=UserVmResponse.class) + @Parameter(name=ApiConstants.VIRTUAL_MACHINE_ID, type=CommandType.UUID, entityType=UserVmResponse.class, + required=true, description="the vm ID of the user VM to be moved") private Long virtualMachineId; @Parameter(name=ApiConstants.ACCOUNT, type=CommandType.STRING, required=true, description="account name of the new VM owner.") private String accountName; - //@IdentityMapper(entityTableName="domain") - @Parameter(name=ApiConstants.DOMAIN_ID, type=CommandType.LONG, required=true, description="domain id of the new VM owner.", entityType=DomainResponse.class) + @Parameter(name=ApiConstants.DOMAIN_ID, type=CommandType.UUID, entityType=DomainResponse.class, + required=true, description="domain id of the new VM owner.") private Long domainId; //Network information - //@IdentityMapper(entityTableName="networks") - @Parameter(name=ApiConstants.NETWORK_IDS, type=CommandType.LIST, collectionType=CommandType.LONG, description="list of network ids that will be part of VM network after move in advanced network setting.", entityType=NetworkResponse.class) + @Parameter(name=ApiConstants.NETWORK_IDS, type=CommandType.LIST, collectionType=CommandType.UUID, entityType=NetworkResponse.class, + description="list of network ids that will be part of VM network after move in advanced network setting.") private List networkIds; - //@IdentityMapper(entityTableName="security_group") - @Parameter(name=ApiConstants.SECURITY_GROUP_IDS, type=CommandType.LIST, collectionType=CommandType.LONG, description="comma separated list of security groups id that going to be applied to the virtual machine. Should be passed only when vm is moved in a zone with Basic Network support.", entityType=SecurityGroupResponse.class) + @Parameter(name=ApiConstants.SECURITY_GROUP_IDS, type=CommandType.LIST, collectionType=CommandType.UUID, entityType=SecurityGroupResponse.class, + description="comma separated list of security groups id that going to be applied to the virtual machine. Should be passed only when vm is moved in a zone with Basic Network support.") private List securityGroupIdList; ///////////////////////////////////////////////////// diff --git a/api/src/org/apache/cloudstack/api/command/admin/vm/MigrateVMCmd.java b/api/src/org/apache/cloudstack/api/command/admin/vm/MigrateVMCmd.java index 1d2f87ff5a1..19fee5bb5ef 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/vm/MigrateVMCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/vm/MigrateVMCmd.java @@ -21,7 +21,6 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; @@ -52,16 +51,16 @@ public class MigrateVMCmd extends BaseAsyncCmd { //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - //@IdentityMapper(entityTableName="host") - @Parameter(name=ApiConstants.HOST_ID, type=CommandType.LONG, required=false, description="Destination Host ID to migrate VM to. Required for live migrating a VM from host to host", entityType=HostResponse.class) + @Parameter(name=ApiConstants.HOST_ID, type=CommandType.UUID, entityType=HostResponse.class, + required=false, description="Destination Host ID to migrate VM to. Required for live migrating a VM from host to host") private Long hostId; - @IdentityMapper(entityTableName="vm_instance") - @Parameter(name=ApiConstants.VIRTUAL_MACHINE_ID, type=CommandType.LONG, required=true, description="the ID of the virtual machine", entityType=UserVmResponse.class) + @Parameter(name=ApiConstants.VIRTUAL_MACHINE_ID, type=CommandType.UUID, entityType=UserVmResponse.class, + required=true, description="the ID of the virtual machine") private Long virtualMachineId; - @IdentityMapper(entityTableName="storage_pool") - @Parameter(name=ApiConstants.STORAGE_ID, type=CommandType.LONG, required=false, description="Destination storage pool ID to migrate VM volumes to. Required for migrating the root disk volume", entityType=StoragePoolResponse.class) + @Parameter(name=ApiConstants.STORAGE_ID, type=CommandType.LONG, entityType=StoragePoolResponse.class, + required=false, description="Destination storage pool ID to migrate VM volumes to. Required for migrating the root disk volume") private Long storageId; ///////////////////////////////////////////////////// diff --git a/api/src/org/apache/cloudstack/api/command/admin/vm/RecoverVMCmd.java b/api/src/org/apache/cloudstack/api/command/admin/vm/RecoverVMCmd.java index 9e32768c459..5033b3e0c34 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/vm/RecoverVMCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/vm/RecoverVMCmd.java @@ -38,8 +38,8 @@ public class RecoverVMCmd extends BaseCmd { //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - //@IdentityMapper(entityTableName="vm_instance") - @Parameter(name=ApiConstants.ID, type=CommandType.LONG, required=true, description="The ID of the virtual machine", entityType=UserVmResponse.class) + @Parameter(name=ApiConstants.ID, type=CommandType.UUID, entityType=UserVmResponse.class, + required=true, description="The ID of the virtual machine") private Long id; ///////////////////////////////////////////////////// From 4e2b30d31dc944800ec37db6113b5b9b98d38941 Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Sat, 22 Dec 2012 19:09:18 -0800 Subject: [PATCH 183/421] api: Annotate vpc admin apis Signed-off-by: Rohit Yadav --- .../command/admin/vpc/CreatePrivateGatewayCmd.java | 11 ++++++----- .../command/admin/vpc/DeletePrivateGatewayCmd.java | 6 +++--- .../api/command/admin/vpc/DeleteVPCOfferingCmd.java | 8 +++----- .../api/command/admin/vpc/UpdateVPCOfferingCmd.java | 5 ++--- .../api/response/PrivateGatewayResponse.java | 3 +++ 5 files changed, 17 insertions(+), 16 deletions(-) diff --git a/api/src/org/apache/cloudstack/api/command/admin/vpc/CreatePrivateGatewayCmd.java b/api/src/org/apache/cloudstack/api/command/admin/vpc/CreatePrivateGatewayCmd.java index 800a54c0d35..3126e6de105 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/vpc/CreatePrivateGatewayCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/vpc/CreatePrivateGatewayCmd.java @@ -16,13 +16,14 @@ // under the License. package org.apache.cloudstack.api.command.admin.vpc; +import org.apache.cloudstack.api.response.PhysicalNetworkResponse; +import org.apache.cloudstack.api.response.VpcResponse; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseAsyncCreateCmd; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; @@ -48,8 +49,8 @@ public class CreatePrivateGatewayCmd extends BaseAsyncCreateCmd { //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - @IdentityMapper(entityTableName="physical_network") - @Parameter(name=ApiConstants.PHYSICAL_NETWORK_ID, type=CommandType.LONG, description="the Physical Network ID the network belongs to") + @Parameter(name=ApiConstants.PHYSICAL_NETWORK_ID, type=CommandType.UUID, entityType = PhysicalNetworkResponse.class, + description="the Physical Network ID the network belongs to") private Long physicalNetworkId; @Parameter(name=ApiConstants.GATEWAY, type=CommandType.STRING, required=true, description="the gateway of the Private gateway") @@ -64,8 +65,8 @@ public class CreatePrivateGatewayCmd extends BaseAsyncCreateCmd { @Parameter(name=ApiConstants.VLAN, type=CommandType.STRING, required=true, description="the Vlan for the private gateway") private String vlan; - @IdentityMapper(entityTableName="vpc") - @Parameter(name=ApiConstants.VPC_ID, type=CommandType.LONG, required=true, description="the VPC network belongs to") + @Parameter(name=ApiConstants.VPC_ID, type=CommandType.UUID, entityType = VpcResponse.class, + required=true, description="the VPC network belongs to") private Long vpcId; ///////////////////////////////////////////////////// diff --git a/api/src/org/apache/cloudstack/api/command/admin/vpc/DeletePrivateGatewayCmd.java b/api/src/org/apache/cloudstack/api/command/admin/vpc/DeletePrivateGatewayCmd.java index 01576e85ce4..53b6ba1572d 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/vpc/DeletePrivateGatewayCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/vpc/DeletePrivateGatewayCmd.java @@ -16,12 +16,12 @@ // under the License. package org.apache.cloudstack.api.command.admin.vpc; +import org.apache.cloudstack.api.response.PrivateGatewayResponse; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; @@ -44,8 +44,8 @@ public class DeletePrivateGatewayCmd extends BaseAsyncCmd { //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - @IdentityMapper(entityTableName="vpc_gateways") - @Parameter(name=ApiConstants.ID, type=CommandType.LONG, required=true, description="the ID of the private gateway") + @Parameter(name=ApiConstants.ID, type=CommandType.UUID, entityType = PrivateGatewayResponse.class, + required=true, description="the ID of the private gateway") private Long id; ///////////////////////////////////////////////////// diff --git a/api/src/org/apache/cloudstack/api/command/admin/vpc/DeleteVPCOfferingCmd.java b/api/src/org/apache/cloudstack/api/command/admin/vpc/DeleteVPCOfferingCmd.java index 6d81f2e80ae..71f4148f6d8 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/vpc/DeleteVPCOfferingCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/vpc/DeleteVPCOfferingCmd.java @@ -16,12 +16,12 @@ // under the License. package org.apache.cloudstack.api.command.admin.vpc; +import org.apache.cloudstack.api.response.VpcOfferingResponse; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; @@ -38,11 +38,10 @@ public class DeleteVPCOfferingCmd extends BaseAsyncCmd{ //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - @IdentityMapper(entityTableName="vpc_offerings") - @Parameter(name=ApiConstants.ID, type=CommandType.LONG, required=true, description="the ID of the VPC offering") + @Parameter(name=ApiConstants.ID, type=CommandType.UUID, entityType = VpcOfferingResponse.class, + required=true, description="the ID of the VPC offering") private Long id; - ///////////////////////////////////////////////////// /////////////////// Accessors /////////////////////// ///////////////////////////////////////////////////// @@ -51,7 +50,6 @@ public class DeleteVPCOfferingCmd extends BaseAsyncCmd{ return id; } - ///////////////////////////////////////////////////// /////////////// API Implementation/////////////////// ///////////////////////////////////////////////////// diff --git a/api/src/org/apache/cloudstack/api/command/admin/vpc/UpdateVPCOfferingCmd.java b/api/src/org/apache/cloudstack/api/command/admin/vpc/UpdateVPCOfferingCmd.java index 0fa03cab189..c2fcbc81d06 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/vpc/UpdateVPCOfferingCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/vpc/UpdateVPCOfferingCmd.java @@ -21,7 +21,6 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; @@ -39,8 +38,8 @@ public class UpdateVPCOfferingCmd extends BaseAsyncCmd{ //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - @IdentityMapper(entityTableName="vpc_offerings") - @Parameter(name=ApiConstants.ID, type=CommandType.LONG, description="the id of the VPC offering") + @Parameter(name=ApiConstants.ID, type=CommandType.UUID, entityType = VpcOfferingResponse.class, + description="the id of the VPC offering") private Long id; @Parameter(name=ApiConstants.NAME, type=CommandType.STRING, description="the name of the VPC offering") diff --git a/api/src/org/apache/cloudstack/api/response/PrivateGatewayResponse.java b/api/src/org/apache/cloudstack/api/response/PrivateGatewayResponse.java index 143a61aa618..0bbc66a24d2 100644 --- a/api/src/org/apache/cloudstack/api/response/PrivateGatewayResponse.java +++ b/api/src/org/apache/cloudstack/api/response/PrivateGatewayResponse.java @@ -15,11 +15,14 @@ // specific language governing permissions and limitations // under the License. package org.apache.cloudstack.api.response; +import com.cloud.network.vpc.VpcGateway; import org.apache.cloudstack.api.ApiConstants; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; import org.apache.cloudstack.api.BaseResponse; +import org.apache.cloudstack.api.Entity; +@Entity(value=VpcGateway.class) @SuppressWarnings("unused") public class PrivateGatewayResponse extends BaseResponse implements ControlledEntityResponse{ From 575fab971103367c8c5c6935ce5c7d49e03e6aba Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Sat, 22 Dec 2012 19:52:41 -0800 Subject: [PATCH 184/421] api: Annotate account and address apis Signed-off-by: Rohit Yadav --- .../user/account/AddAccountToProjectCmd.java | 6 ++-- .../account/DeleteAccountFromProjectCmd.java | 6 ++-- .../command/user/account/ListAccountsCmd.java | 5 ++- .../user/account/ListProjectAccountsCmd.java | 5 ++- .../user/address/AssociateIPAddrCmd.java | 22 ++++++------- .../user/address/DisassociateIPAddrCmd.java | 11 ++++--- .../address/ListPublicIpAddressesCmd.java | 31 ++++++++++--------- 7 files changed, 44 insertions(+), 42 deletions(-) diff --git a/api/src/org/apache/cloudstack/api/command/user/account/AddAccountToProjectCmd.java b/api/src/org/apache/cloudstack/api/command/user/account/AddAccountToProjectCmd.java index d0103215a8b..74f91436de2 100644 --- a/api/src/org/apache/cloudstack/api/command/user/account/AddAccountToProjectCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/account/AddAccountToProjectCmd.java @@ -16,12 +16,12 @@ // under the License. package org.apache.cloudstack.api.command.user.account; +import org.apache.cloudstack.api.response.ProjectResponse; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; @@ -42,8 +42,8 @@ public class AddAccountToProjectCmd extends BaseAsyncCmd { //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - @IdentityMapper(entityTableName="projects") - @Parameter(name=ApiConstants.PROJECT_ID, type=CommandType.LONG, required=true, description="id of the project to add the account to") + @Parameter(name=ApiConstants.PROJECT_ID, type=CommandType.UUID, entityType = ProjectResponse.class, + required=true, description="id of the project to add the account to") private Long projectId; @Parameter(name=ApiConstants.ACCOUNT, type=CommandType.STRING, description="name of the account to be added to the project") diff --git a/api/src/org/apache/cloudstack/api/command/user/account/DeleteAccountFromProjectCmd.java b/api/src/org/apache/cloudstack/api/command/user/account/DeleteAccountFromProjectCmd.java index 74e43857c03..61bd59c30dc 100644 --- a/api/src/org/apache/cloudstack/api/command/user/account/DeleteAccountFromProjectCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/account/DeleteAccountFromProjectCmd.java @@ -17,12 +17,12 @@ package org.apache.cloudstack.api.command.user.account; import org.apache.cloudstack.api.command.user.project.DeleteProjectCmd; +import org.apache.cloudstack.api.response.ProjectResponse; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; @@ -41,8 +41,8 @@ public class DeleteAccountFromProjectCmd extends BaseAsyncCmd { ///////////////////////////////////////////////////// //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - @IdentityMapper(entityTableName="projects") - @Parameter(name=ApiConstants.PROJECT_ID, type=CommandType.LONG, required=true, description="id of the project to remove the account from") + @Parameter(name=ApiConstants.PROJECT_ID, type=CommandType.UUID, entityType = ProjectResponse.class, + required=true, description="id of the project to remove the account from") private Long projectId; @Parameter(name=ApiConstants.ACCOUNT, type=CommandType.STRING, required=true, description="name of the account to be removed from the project") diff --git a/api/src/org/apache/cloudstack/api/command/user/account/ListAccountsCmd.java b/api/src/org/apache/cloudstack/api/command/user/account/ListAccountsCmd.java index d4c08f7b5f2..6155bcd6466 100644 --- a/api/src/org/apache/cloudstack/api/command/user/account/ListAccountsCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/account/ListAccountsCmd.java @@ -23,7 +23,6 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseListDomainResourcesCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.response.AccountResponse; @@ -43,8 +42,8 @@ public class ListAccountsCmd extends BaseListDomainResourcesCmd { @Parameter(name=ApiConstants.ACCOUNT_TYPE, type=CommandType.LONG, description="list accounts by account type. Valid account types are 1 (admin), 2 (domain-admin), and 0 (user).") private Long accountType; - @IdentityMapper(entityTableName="account") - @Parameter(name=ApiConstants.ID, type=CommandType.LONG, description="list account by account ID") + @Parameter(name=ApiConstants.ID, type=CommandType.UUID, entityType = AccountResponse.class, + description="list account by account ID") private Long id; @Parameter(name=ApiConstants.IS_CLEANUP_REQUIRED, type=CommandType.BOOLEAN, description="list accounts by cleanuprequred attribute (values are true or false)") diff --git a/api/src/org/apache/cloudstack/api/command/user/account/ListProjectAccountsCmd.java b/api/src/org/apache/cloudstack/api/command/user/account/ListProjectAccountsCmd.java index 1d56a60d175..f24ccf3c3a4 100644 --- a/api/src/org/apache/cloudstack/api/command/user/account/ListProjectAccountsCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/account/ListProjectAccountsCmd.java @@ -20,7 +20,6 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseListCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.response.ListResponse; @@ -39,8 +38,8 @@ public class ListProjectAccountsCmd extends BaseListCmd { //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - @IdentityMapper(entityTableName="projects") - @Parameter(name=ApiConstants.PROJECT_ID, type=CommandType.LONG, required=true, description="id of the project") + @Parameter(name=ApiConstants.PROJECT_ID, type=CommandType.UUID, entityType = ProjectResponse.class, + required=true, description="id of the project") private Long projectId; @Parameter(name=ApiConstants.ACCOUNT, type=CommandType.STRING, description="list accounts of the project by account name") diff --git a/api/src/org/apache/cloudstack/api/command/user/address/AssociateIPAddrCmd.java b/api/src/org/apache/cloudstack/api/command/user/address/AssociateIPAddrCmd.java index 594dff56da1..f4d48531849 100644 --- a/api/src/org/apache/cloudstack/api/command/user/address/AssociateIPAddrCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/address/AssociateIPAddrCmd.java @@ -24,11 +24,15 @@ import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseAsyncCreateCmd; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; +import org.apache.cloudstack.api.response.DomainResponse; import org.apache.cloudstack.api.response.IPAddressResponse; +import org.apache.cloudstack.api.response.ProjectResponse; +import org.apache.cloudstack.api.response.NetworkResponse; +import org.apache.cloudstack.api.response.VpcResponse; +import org.apache.cloudstack.api.response.ZoneResponse; import com.cloud.async.AsyncJob; import com.cloud.dc.DataCenter; import com.cloud.dc.DataCenter.NetworkType; @@ -58,28 +62,24 @@ public class AssociateIPAddrCmd extends BaseAsyncCreateCmd { description="the account to associate with this IP address") private String accountName; - @IdentityMapper(entityTableName="domain") - @Parameter(name=ApiConstants.DOMAIN_ID, type=CommandType.LONG, + @Parameter(name=ApiConstants.DOMAIN_ID, type=CommandType.UUID, entityType = DomainResponse.class, description="the ID of the domain to associate with this IP address") private Long domainId; - @IdentityMapper(entityTableName="data_center") - @Parameter(name=ApiConstants.ZONE_ID, type=CommandType.LONG, + @Parameter(name=ApiConstants.ZONE_ID, type=CommandType.UUID, entityType = ZoneResponse.class, description="the ID of the availability zone you want to acquire an public IP address from") private Long zoneId; - @IdentityMapper(entityTableName="networks") - @Parameter(name=ApiConstants.NETWORK_ID, type=CommandType.LONG, + @Parameter(name=ApiConstants.NETWORK_ID, type=CommandType.UUID, entityType = NetworkResponse.class, description="The network this ip address should be associated to.") private Long networkId; - @IdentityMapper(entityTableName="projects") - @Parameter(name=ApiConstants.PROJECT_ID, type=CommandType.LONG, + @Parameter(name=ApiConstants.PROJECT_ID, type=CommandType.UUID, entityType = ProjectResponse.class, description="Deploy vm for the project") private Long projectId; - @IdentityMapper(entityTableName="vpc") - @Parameter(name=ApiConstants.VPC_ID, type=CommandType.LONG, description="the VPC you want the ip address to " + + @Parameter(name=ApiConstants.VPC_ID, type=CommandType.UUID, entityType = VpcResponse.class, + description="the VPC you want the ip address to " + "be associated with") private Long vpcId; diff --git a/api/src/org/apache/cloudstack/api/command/user/address/DisassociateIPAddrCmd.java b/api/src/org/apache/cloudstack/api/command/user/address/DisassociateIPAddrCmd.java index bcdf09d7fd7..c3d9d39df1b 100644 --- a/api/src/org/apache/cloudstack/api/command/user/address/DisassociateIPAddrCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/address/DisassociateIPAddrCmd.java @@ -16,12 +16,13 @@ // under the License. package org.apache.cloudstack.api.command.user.address; +import org.apache.cloudstack.api.response.AccountResponse; +import org.apache.cloudstack.api.response.IPAddressResponse; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; @@ -44,14 +45,14 @@ public class DisassociateIPAddrCmd extends BaseAsyncCmd { //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - @IdentityMapper(entityTableName="user_ip_address") - @Parameter(name=ApiConstants.ID, type=CommandType.LONG, required=true, description="the id of the public ip address" + + @Parameter(name=ApiConstants.ID, type=CommandType.UUID,entityType = IPAddressResponse.class, + required=true, description="the id of the public ip address" + " to disassociate") private Long id; // unexposed parameter needed for events logging - @IdentityMapper(entityTableName="account") - @Parameter(name=ApiConstants.ACCOUNT_ID, type=CommandType.LONG, expose=false) + @Parameter(name=ApiConstants.ACCOUNT_ID, type=CommandType.UUID, entityType = AccountResponse.class, + expose=false) private Long ownerId; ///////////////////////////////////////////////////// /////////////////// Accessors /////////////////////// diff --git a/api/src/org/apache/cloudstack/api/command/user/address/ListPublicIpAddressesCmd.java b/api/src/org/apache/cloudstack/api/command/user/address/ListPublicIpAddressesCmd.java index fdd19efc738..5951b5f6c38 100644 --- a/api/src/org/apache/cloudstack/api/command/user/address/ListPublicIpAddressesCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/address/ListPublicIpAddressesCmd.java @@ -23,16 +23,19 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseListTaggedResourcesCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.response.IPAddressResponse; import org.apache.cloudstack.api.response.ListResponse; +import org.apache.cloudstack.api.response.PhysicalNetworkResponse; +import org.apache.cloudstack.api.response.NetworkResponse; +import org.apache.cloudstack.api.response.VlanIpRangeResponse; +import org.apache.cloudstack.api.response.VpcResponse; +import org.apache.cloudstack.api.response.ZoneResponse; import com.cloud.async.AsyncJob; import com.cloud.network.IpAddress; import com.cloud.utils.Pair; - @Implementation(description="Lists all public ip addresses", responseObject=IPAddressResponse.class) public class ListPublicIpAddressesCmd extends BaseListTaggedResourcesCmd { public static final Logger s_logger = Logger.getLogger(ListPublicIpAddressesCmd.class.getName()); @@ -49,30 +52,30 @@ public class ListPublicIpAddressesCmd extends BaseListTaggedResourcesCmd { @Parameter(name=ApiConstants.FOR_VIRTUAL_NETWORK, type=CommandType.BOOLEAN, description="the virtual network for the IP address") private Boolean forVirtualNetwork; - @IdentityMapper(entityTableName="user_ip_address") - @Parameter(name=ApiConstants.ID, type=CommandType.LONG, description="lists ip address by id") + @Parameter(name=ApiConstants.ID, type=CommandType.UUID, entityType = IPAddressResponse.class, + description="lists ip address by id") private Long id; @Parameter(name=ApiConstants.IP_ADDRESS, type=CommandType.STRING, description="lists the specified IP address") private String ipAddress; - @IdentityMapper(entityTableName="vlan") - @Parameter(name=ApiConstants.VLAN_ID, type=CommandType.LONG, description="lists all public IP addresses by VLAN ID") + @Parameter(name=ApiConstants.VLAN_ID, type=CommandType.UUID, entityType = VlanIpRangeResponse.class, + description="lists all public IP addresses by VLAN ID") private Long vlanId; - @IdentityMapper(entityTableName="data_center") - @Parameter(name=ApiConstants.ZONE_ID, type=CommandType.LONG, description="lists all public IP addresses by Zone ID") + @Parameter(name=ApiConstants.ZONE_ID, type=CommandType.UUID, entityType = ZoneResponse.class, + description="lists all public IP addresses by Zone ID") private Long zoneId; @Parameter(name=ApiConstants.FOR_LOAD_BALANCING, type=CommandType.BOOLEAN, description="list only ips used for load balancing") private Boolean forLoadBalancing; - @IdentityMapper(entityTableName="physical_network") - @Parameter(name=ApiConstants.PHYSICAL_NETWORK_ID, type=CommandType.LONG, description="lists all public IP addresses by physical network id") + @Parameter(name=ApiConstants.PHYSICAL_NETWORK_ID, type=CommandType.UUID, entityType = PhysicalNetworkResponse.class, + description="lists all public IP addresses by physical network id") private Long physicalNetworkId; - @IdentityMapper(entityTableName="networks") - @Parameter(name=ApiConstants.ASSOCIATED_NETWORK_ID, type=CommandType.LONG, description="lists all public IP addresses associated to the network specified") + @Parameter(name=ApiConstants.ASSOCIATED_NETWORK_ID, type=CommandType.UUID, entityType = NetworkResponse.class, + description="lists all public IP addresses associated to the network specified") private Long associatedNetworkId; @Parameter(name=ApiConstants.IS_SOURCE_NAT, type=CommandType.BOOLEAN, description="list only source nat ip addresses") @@ -81,8 +84,8 @@ public class ListPublicIpAddressesCmd extends BaseListTaggedResourcesCmd { @Parameter(name=ApiConstants.IS_STATIC_NAT, type=CommandType.BOOLEAN, description="list only static nat ip addresses") private Boolean isStaticNat; - @IdentityMapper(entityTableName="vpc") - @Parameter(name=ApiConstants.VPC_ID, type=CommandType.LONG, description="List ips belonging to the VPC") + @Parameter(name=ApiConstants.VPC_ID, type=CommandType.UUID, entityType = VpcResponse.class, + description="List ips belonging to the VPC") private Long vpcId; ///////////////////////////////////////////////////// From af5eacfc014621cb78ddea022589b4d9bc2bf0ee Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Sat, 22 Dec 2012 20:28:19 -0800 Subject: [PATCH 185/421] api: Annotate autoscale apis Signed-off-by: Rohit Yadav --- .../autoscale/CreateAutoScalePolicyCmd.java | 6 ++--- .../autoscale/CreateAutoScaleVmGroupCmd.java | 20 ++++++++------- .../CreateAutoScaleVmProfileCmd.java | 21 +++++++++------- .../user/autoscale/CreateConditionCmd.java | 11 ++++---- .../autoscale/DeleteAutoScalePolicyCmd.java | 6 ++--- .../autoscale/DeleteAutoScaleVmGroupCmd.java | 6 ++--- .../DeleteAutoScaleVmProfileCmd.java | 6 ++--- .../user/autoscale/DeleteConditionCmd.java | 6 ++--- .../autoscale/DisableAutoScaleVmGroupCmd.java | 5 ++-- .../autoscale/EnableAutoScaleVmGroupCmd.java | 5 ++-- .../autoscale/ListAutoScalePoliciesCmd.java | 15 +++++------ .../autoscale/ListAutoScaleVmGroupsCmd.java | 25 +++++++++++-------- .../autoscale/ListAutoScaleVmProfilesCmd.java | 10 ++++---- .../user/autoscale/ListConditionsCmd.java | 14 +++++------ .../user/autoscale/ListCountersCmd.java | 5 ++-- .../autoscale/UpdateAutoScalePolicyCmd.java | 10 ++++---- .../autoscale/UpdateAutoScaleVmGroupCmd.java | 14 +++++------ .../UpdateAutoScaleVmProfileCmd.java | 15 +++++------ .../api/response/AutoScalePolicyResponse.java | 3 +++ .../response/AutoScaleVmGroupResponse.java | 3 +++ .../response/AutoScaleVmProfileResponse.java | 3 +++ .../api/response/ConditionResponse.java | 3 +++ .../api/response/FirewallRuleResponse.java | 3 +++ 23 files changed, 119 insertions(+), 96 deletions(-) diff --git a/api/src/org/apache/cloudstack/api/command/user/autoscale/CreateAutoScalePolicyCmd.java b/api/src/org/apache/cloudstack/api/command/user/autoscale/CreateAutoScalePolicyCmd.java index 47549aba6d7..48e06b9c275 100644 --- a/api/src/org/apache/cloudstack/api/command/user/autoscale/CreateAutoScalePolicyCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/autoscale/CreateAutoScalePolicyCmd.java @@ -18,12 +18,12 @@ package org.apache.cloudstack.api.command.user.autoscale; import java.util.List; +import org.apache.cloudstack.api.response.ConditionResponse; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseAsyncCreateCmd; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; @@ -55,8 +55,8 @@ public class CreateAutoScalePolicyCmd extends BaseAsyncCreateCmd { @Parameter(name = ApiConstants.QUIETTIME, type = CommandType.INTEGER, description = "the cool down period for which the policy should not be evaluated after the action has been taken") private Integer quietTime; - @IdentityMapper(entityTableName = "conditions") - @Parameter(name = ApiConstants.CONDITION_IDS, type = CommandType.LIST, collectionType = CommandType.LONG, required = true, description = "the list of IDs of the conditions that are being evaluated on every interval") + @Parameter(name = ApiConstants.CONDITION_IDS, type = CommandType.LIST, collectionType = CommandType.UUID, entityType = ConditionResponse.class, + required = true, description = "the list of IDs of the conditions that are being evaluated on every interval") private List conditionIds; // /////////////////////////////////////////////////// diff --git a/api/src/org/apache/cloudstack/api/command/user/autoscale/CreateAutoScaleVmGroupCmd.java b/api/src/org/apache/cloudstack/api/command/user/autoscale/CreateAutoScaleVmGroupCmd.java index 70ec7d57928..dadc9658e07 100644 --- a/api/src/org/apache/cloudstack/api/command/user/autoscale/CreateAutoScaleVmGroupCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/autoscale/CreateAutoScaleVmGroupCmd.java @@ -23,11 +23,13 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseAsyncCreateCmd; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; import org.apache.cloudstack.api.response.AutoScaleVmGroupResponse; +import org.apache.cloudstack.api.response.AutoScalePolicyResponse; +import org.apache.cloudstack.api.response.AutoScaleVmProfileResponse; +import org.apache.cloudstack.api.response.FirewallRuleResponse; import com.cloud.async.AsyncJob; import com.cloud.event.EventTypes; import com.cloud.exception.InvalidParameterValueException; @@ -45,8 +47,8 @@ public class CreateAutoScaleVmGroupCmd extends BaseAsyncCreateCmd { // ////////////// API parameters ///////////////////// // /////////////////////////////////////////////////// - @IdentityMapper(entityTableName = "firewall_rules") - @Parameter(name = ApiConstants.LBID, type = CommandType.LONG, required = true, description = "the ID of the load balancer rule") + @Parameter(name = ApiConstants.LBID, type = CommandType.UUID, entityType = FirewallRuleResponse.class, + required = true, description = "the ID of the load balancer rule") private long lbRuleId; @Parameter(name = ApiConstants.MIN_MEMBERS, type = CommandType.INTEGER, required = true, description = "the minimum number of members in the vmgroup, the number of instances in the vm group will be equal to or more than this number.") @@ -58,16 +60,16 @@ public class CreateAutoScaleVmGroupCmd extends BaseAsyncCreateCmd { @Parameter(name = ApiConstants.INTERVAL, type = CommandType.INTEGER, description = "the frequency at which the conditions have to be evaluated") private Integer interval; - @IdentityMapper(entityTableName = "autoscale_policies") - @Parameter(name = ApiConstants.SCALEUP_POLICY_IDS, type = CommandType.LIST, collectionType = CommandType.LONG, required = true, description = "list of scaleup autoscale policies") + @Parameter(name = ApiConstants.SCALEUP_POLICY_IDS, type = CommandType.LIST, collectionType = CommandType.UUID, entityType = AutoScalePolicyResponse.class, + required = true, description = "list of scaleup autoscale policies") private List scaleUpPolicyIds; - @IdentityMapper(entityTableName = "autoscale_policies") - @Parameter(name = ApiConstants.SCALEDOWN_POLICY_IDS, type = CommandType.LIST, collectionType = CommandType.LONG, required = true, description = "list of scaledown autoscale policies") + @Parameter(name = ApiConstants.SCALEDOWN_POLICY_IDS, type = CommandType.LIST, collectionType = CommandType.UUID, entityType = AutoScalePolicyResponse.class, + required = true, description = "list of scaledown autoscale policies") private List scaleDownPolicyIds; - @IdentityMapper(entityTableName = "autoscale_vmprofiles") - @Parameter(name = ApiConstants.VMPROFILE_ID, type = CommandType.LONG, required = true, description = "the autoscale profile that contains information about the vms in the vm group.") + @Parameter(name = ApiConstants.VMPROFILE_ID, type = CommandType.UUID, entityType = AutoScaleVmProfileResponse.class, + required = true, description = "the autoscale profile that contains information about the vms in the vm group.") private long profileId; // /////////////////////////////////////////////////// diff --git a/api/src/org/apache/cloudstack/api/command/user/autoscale/CreateAutoScaleVmProfileCmd.java b/api/src/org/apache/cloudstack/api/command/user/autoscale/CreateAutoScaleVmProfileCmd.java index 6ad4c61a0aa..05ddaa6d4d0 100644 --- a/api/src/org/apache/cloudstack/api/command/user/autoscale/CreateAutoScaleVmProfileCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/autoscale/CreateAutoScaleVmProfileCmd.java @@ -24,11 +24,14 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseAsyncCreateCmd; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; import org.apache.cloudstack.api.response.AutoScaleVmProfileResponse; +import org.apache.cloudstack.api.response.DiskOfferingResponse; +import org.apache.cloudstack.api.response.TemplateResponse; +import org.apache.cloudstack.api.response.UserResponse; +import org.apache.cloudstack.api.response.ZoneResponse; import com.cloud.async.AsyncJob; import com.cloud.event.EventTypes; import com.cloud.exception.InvalidParameterValueException; @@ -49,16 +52,16 @@ public class CreateAutoScaleVmProfileCmd extends BaseAsyncCreateCmd { // ////////////// API parameters ///////////////////// // /////////////////////////////////////////////////// - @IdentityMapper(entityTableName = "data_center") - @Parameter(name = ApiConstants.ZONE_ID, type = CommandType.LONG, required = true, description = "availability zone for the auto deployed virtual machine") + @Parameter(name = ApiConstants.ZONE_ID, type = CommandType.UUID, entityType = ZoneResponse.class, + required = true, description = "availability zone for the auto deployed virtual machine") private Long zoneId; - @IdentityMapper(entityTableName = "disk_offering") - @Parameter(name = ApiConstants.SERVICE_OFFERING_ID, type = CommandType.LONG, required = true, description = "the service offering of the auto deployed virtual machine") + @Parameter(name = ApiConstants.SERVICE_OFFERING_ID, type = CommandType.UUID, entityType = DiskOfferingResponse.class, + required = true, description = "the service offering of the auto deployed virtual machine") private Long serviceOfferingId; - @IdentityMapper(entityTableName = "vm_template") - @Parameter(name = ApiConstants.TEMPLATE_ID, type = CommandType.LONG, required = true, description = "the template of the auto deployed virtual machine") + @Parameter(name = ApiConstants.TEMPLATE_ID, type = CommandType.UUID, entityType = TemplateResponse.class, + required = true, description = "the template of the auto deployed virtual machine") private Long templateId; @Parameter(name = ApiConstants.OTHER_DEPLOY_PARAMS, type = CommandType.STRING, description = "parameters other than zoneId/serviceOfferringId/templateId of the auto deployed virtual machine") @@ -70,8 +73,8 @@ public class CreateAutoScaleVmProfileCmd extends BaseAsyncCreateCmd { @Parameter(name = ApiConstants.COUNTERPARAM_LIST, type = CommandType.MAP, description = "counterparam list. Example: counterparam[0].name=snmpcommunity&counterparam[0].value=public&counterparam[1].name=snmpport&counterparam[1].value=161") private Map counterParamList; - @IdentityMapper(entityTableName = "user") - @Parameter(name = ApiConstants.AUTOSCALE_USER_ID, type = CommandType.LONG, description = "the ID of the user used to launch and destroy the VMs") + @Parameter(name = ApiConstants.AUTOSCALE_USER_ID, type = CommandType.UUID, entityType = UserResponse.class, + description = "the ID of the user used to launch and destroy the VMs") private Long autoscaleUserId; private Map otherDeployParamMap; diff --git a/api/src/org/apache/cloudstack/api/command/user/autoscale/CreateConditionCmd.java b/api/src/org/apache/cloudstack/api/command/user/autoscale/CreateConditionCmd.java index fbc610abd59..a9dcd2f6f2a 100644 --- a/api/src/org/apache/cloudstack/api/command/user/autoscale/CreateConditionCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/autoscale/CreateConditionCmd.java @@ -17,12 +17,13 @@ package org.apache.cloudstack.api.command.user.autoscale; +import org.apache.cloudstack.api.response.CounterResponse; +import org.apache.cloudstack.api.response.DomainResponse; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseAsyncCreateCmd; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; @@ -42,8 +43,8 @@ public class CreateConditionCmd extends BaseAsyncCreateCmd { // ////////////// API parameters ///////////////////// // /////////////////////////////////////////////////// - @IdentityMapper(entityTableName = "counter") - @Parameter(name = ApiConstants.COUNTER_ID, type = CommandType.LONG, required = true, description = "ID of the Counter.") + @Parameter(name = ApiConstants.COUNTER_ID, type = CommandType.UUID, entityType = CounterResponse.class, + required = true, description = "ID of the Counter.") private long counterId; @Parameter(name = ApiConstants.RELATIONAL_OPERATOR, type = CommandType.STRING, required = true, description = "Relational Operator to be used with threshold.") @@ -56,8 +57,8 @@ public class CreateConditionCmd extends BaseAsyncCreateCmd { "Must be used with the domainId parameter.") private String accountName; - @IdentityMapper(entityTableName = "domain") - @Parameter(name = ApiConstants.DOMAIN_ID, type = CommandType.LONG, description = "the domain ID of the account.") + @Parameter(name = ApiConstants.DOMAIN_ID, type = CommandType.UUID, entityType = DomainResponse.class, + description = "the domain ID of the account.") private Long domainId; // /////////////////////////////////////////////////// diff --git a/api/src/org/apache/cloudstack/api/command/user/autoscale/DeleteAutoScalePolicyCmd.java b/api/src/org/apache/cloudstack/api/command/user/autoscale/DeleteAutoScalePolicyCmd.java index 33c758cf6fd..ceb5f6aa889 100644 --- a/api/src/org/apache/cloudstack/api/command/user/autoscale/DeleteAutoScalePolicyCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/autoscale/DeleteAutoScalePolicyCmd.java @@ -16,12 +16,12 @@ // under the License. package org.apache.cloudstack.api.command.user.autoscale; +import org.apache.cloudstack.api.response.AutoScalePolicyResponse; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; @@ -40,8 +40,8 @@ public class DeleteAutoScalePolicyCmd extends BaseAsyncCmd { // ////////////// API parameters ///////////////////// // /////////////////////////////////////////////////// - @IdentityMapper(entityTableName = "autoscale_policies") - @Parameter(name = ApiConstants.ID, type = CommandType.LONG, required = true, description = "the ID of the autoscale policy") + @Parameter(name = ApiConstants.ID, type = CommandType.UUID, entityType = AutoScalePolicyResponse.class, + required = true, description = "the ID of the autoscale policy") private Long id; // /////////////////////////////////////////////////// diff --git a/api/src/org/apache/cloudstack/api/command/user/autoscale/DeleteAutoScaleVmGroupCmd.java b/api/src/org/apache/cloudstack/api/command/user/autoscale/DeleteAutoScaleVmGroupCmd.java index e78cced0172..9628e8476c7 100644 --- a/api/src/org/apache/cloudstack/api/command/user/autoscale/DeleteAutoScaleVmGroupCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/autoscale/DeleteAutoScaleVmGroupCmd.java @@ -16,12 +16,12 @@ // under the License. package org.apache.cloudstack.api.command.user.autoscale; +import org.apache.cloudstack.api.response.AutoScaleVmGroupResponse; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; @@ -40,8 +40,8 @@ public class DeleteAutoScaleVmGroupCmd extends BaseAsyncCmd { // ////////////// API parameters ///////////////////// // /////////////////////////////////////////////////// - @IdentityMapper(entityTableName = "autoscale_vmgroups") - @Parameter(name = ApiConstants.ID, type = CommandType.LONG, required = true, description = "the ID of the autoscale group") + @Parameter(name = ApiConstants.ID, type = CommandType.UUID, entityType = AutoScaleVmGroupResponse.class, + required = true, description = "the ID of the autoscale group") private Long id; // /////////////////////////////////////////////////// diff --git a/api/src/org/apache/cloudstack/api/command/user/autoscale/DeleteAutoScaleVmProfileCmd.java b/api/src/org/apache/cloudstack/api/command/user/autoscale/DeleteAutoScaleVmProfileCmd.java index a1ae31bb187..5605f0279d2 100644 --- a/api/src/org/apache/cloudstack/api/command/user/autoscale/DeleteAutoScaleVmProfileCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/autoscale/DeleteAutoScaleVmProfileCmd.java @@ -16,12 +16,12 @@ // under the License. package org.apache.cloudstack.api.command.user.autoscale; +import org.apache.cloudstack.api.response.AutoScaleVmProfileResponse; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; @@ -40,8 +40,8 @@ public class DeleteAutoScaleVmProfileCmd extends BaseAsyncCmd { // ////////////// API parameters ///////////////////// // /////////////////////////////////////////////////// - @IdentityMapper(entityTableName = "autoscale_vmprofiles") - @Parameter(name = ApiConstants.ID, type = CommandType.LONG, required = true, description = "the ID of the autoscale profile") + @Parameter(name = ApiConstants.ID, type = CommandType.UUID, entityType = AutoScaleVmProfileResponse.class, + required = true, description = "the ID of the autoscale profile") private Long id; // /////////////////////////////////////////////////// diff --git a/api/src/org/apache/cloudstack/api/command/user/autoscale/DeleteConditionCmd.java b/api/src/org/apache/cloudstack/api/command/user/autoscale/DeleteConditionCmd.java index a300ee553a2..94b366313b8 100644 --- a/api/src/org/apache/cloudstack/api/command/user/autoscale/DeleteConditionCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/autoscale/DeleteConditionCmd.java @@ -17,12 +17,12 @@ package org.apache.cloudstack.api.command.user.autoscale; +import org.apache.cloudstack.api.response.ConditionResponse; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; @@ -42,8 +42,8 @@ public class DeleteConditionCmd extends BaseAsyncCmd { // ////////////// API parameters ///////////////////// // /////////////////////////////////////////////////// - @IdentityMapper(entityTableName = "conditions") - @Parameter(name = ApiConstants.ID, type = CommandType.LONG, required = true, description = "the ID of the condition.") + @Parameter(name = ApiConstants.ID, type = CommandType.UUID, entityType = ConditionResponse.class, + required= true, description = "the ID of the condition.") private Long id; // /////////////////////////////////////////////////// diff --git a/api/src/org/apache/cloudstack/api/command/user/autoscale/DisableAutoScaleVmGroupCmd.java b/api/src/org/apache/cloudstack/api/command/user/autoscale/DisableAutoScaleVmGroupCmd.java index fdf5fb45696..c02c4ed5869 100644 --- a/api/src/org/apache/cloudstack/api/command/user/autoscale/DisableAutoScaleVmGroupCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/autoscale/DisableAutoScaleVmGroupCmd.java @@ -22,7 +22,6 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; @@ -41,8 +40,8 @@ public class DisableAutoScaleVmGroupCmd extends BaseAsyncCmd { // ////////////// API parameters ///////////////////// // /////////////////////////////////////////////////// - @IdentityMapper(entityTableName="autoscale_vmgroups") - @Parameter(name=ApiConstants.ID, type=CommandType.LONG, required=true, description="the ID of the autoscale group") + @Parameter(name=ApiConstants.ID, type=CommandType.UUID, entityType = AutoScaleVmGroupResponse.class, + required=true, description="the ID of the autoscale group") private Long id; // /////////////////////////////////////////////////// diff --git a/api/src/org/apache/cloudstack/api/command/user/autoscale/EnableAutoScaleVmGroupCmd.java b/api/src/org/apache/cloudstack/api/command/user/autoscale/EnableAutoScaleVmGroupCmd.java index cc76e6c3bef..1c3c852208a 100644 --- a/api/src/org/apache/cloudstack/api/command/user/autoscale/EnableAutoScaleVmGroupCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/autoscale/EnableAutoScaleVmGroupCmd.java @@ -22,7 +22,6 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; @@ -41,8 +40,8 @@ public class EnableAutoScaleVmGroupCmd extends BaseAsyncCmd { // ////////////// API parameters ///////////////////// // /////////////////////////////////////////////////// - @IdentityMapper(entityTableName="autoscale_vmgroups") - @Parameter(name=ApiConstants.ID, type=CommandType.LONG, required=true, description="the ID of the autoscale group") + @Parameter(name=ApiConstants.ID, type=CommandType.UUID, entityType = AutoScaleVmGroupResponse.class, + required=true, description="the ID of the autoscale group") private Long id; // /////////////////////////////////////////////////// diff --git a/api/src/org/apache/cloudstack/api/command/user/autoscale/ListAutoScalePoliciesCmd.java b/api/src/org/apache/cloudstack/api/command/user/autoscale/ListAutoScalePoliciesCmd.java index b7df018df91..60e6c39fe55 100644 --- a/api/src/org/apache/cloudstack/api/command/user/autoscale/ListAutoScalePoliciesCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/autoscale/ListAutoScalePoliciesCmd.java @@ -19,11 +19,12 @@ package org.apache.cloudstack.api.command.user.autoscale; import java.util.ArrayList; import java.util.List; +import org.apache.cloudstack.api.response.AutoScaleVmGroupResponse; +import org.apache.cloudstack.api.response.ConditionResponse; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseListAccountResourcesCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.response.AutoScalePolicyResponse; @@ -40,19 +41,19 @@ public class ListAutoScalePoliciesCmd extends BaseListAccountResourcesCmd { // ////////////// API parameters ///////////////////// // /////////////////////////////////////////////////// - @IdentityMapper(entityTableName = "autoscale_policies") - @Parameter(name = ApiConstants.ID, type = CommandType.LONG, description = "the ID of the autoscale policy") + @Parameter(name = ApiConstants.ID, type = CommandType.UUID, entityType = AutoScalePolicyResponse.class, + description = "the ID of the autoscale policy") private Long id; - @IdentityMapper(entityTableName = "conditions") - @Parameter(name = ApiConstants.CONDITION_ID, type = CommandType.LONG, description = "the ID of the condition of the policy") + @Parameter(name = ApiConstants.CONDITION_ID, type = CommandType.UUID, entityType = ConditionResponse.class, + description = "the ID of the condition of the policy") private Long conditionId; @Parameter(name = ApiConstants.ACTION, type = CommandType.STRING, description = "the action to be executed if all the conditions evaluate to true for the specified duration.") private String action; - @IdentityMapper(entityTableName="autoscale_vmgroups") - @Parameter(name = ApiConstants.VMGROUP_ID, type = CommandType.LONG, description = "the ID of the autoscale vm group") + @Parameter(name = ApiConstants.VMGROUP_ID, type = CommandType.UUID, entityType = AutoScaleVmGroupResponse.class, + description = "the ID of the autoscale vm group") private Long vmGroupId; // /////////////////////////////////////////////////// diff --git a/api/src/org/apache/cloudstack/api/command/user/autoscale/ListAutoScaleVmGroupsCmd.java b/api/src/org/apache/cloudstack/api/command/user/autoscale/ListAutoScaleVmGroupsCmd.java index 63719ac2de8..7024cfc989a 100644 --- a/api/src/org/apache/cloudstack/api/command/user/autoscale/ListAutoScaleVmGroupsCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/autoscale/ListAutoScaleVmGroupsCmd.java @@ -23,11 +23,14 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; 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.response.AutoScalePolicyResponse; import org.apache.cloudstack.api.response.AutoScaleVmGroupResponse; +import org.apache.cloudstack.api.response.AutoScaleVmProfileResponse; +import org.apache.cloudstack.api.response.FirewallRuleResponse; import org.apache.cloudstack.api.response.ListResponse; +import org.apache.cloudstack.api.response.ZoneResponse; import com.cloud.exception.InvalidParameterValueException; import com.cloud.network.as.AutoScaleVmGroup; @@ -41,24 +44,24 @@ public class ListAutoScaleVmGroupsCmd extends BaseListProjectAndAccountResources // ////////////// API parameters ///////////////////// // /////////////////////////////////////////////////// - @IdentityMapper(entityTableName="autoscale_vmgroups") - @Parameter(name = ApiConstants.ID, type = CommandType.LONG, description = "the ID of the autoscale vm group") + @Parameter(name = ApiConstants.ID, type = CommandType.UUID, entityType = AutoScaleVmGroupResponse.class, + description = "the ID of the autoscale vm group") private Long id; - @IdentityMapper(entityTableName="firewall_rules") - @Parameter(name = ApiConstants.LBID, type = CommandType.LONG, description = "the ID of the loadbalancer") + @Parameter(name = ApiConstants.LBID, type = CommandType.UUID, entityType = FirewallRuleResponse.class, + description = "the ID of the loadbalancer") private Long loadBalancerId; - @IdentityMapper(entityTableName="autoscale_vmprofiles") - @Parameter(name = ApiConstants.VMPROFILE_ID, type = CommandType.LONG, description = "the ID of the profile") + @Parameter(name = ApiConstants.VMPROFILE_ID, type = CommandType.UUID, entityType = AutoScaleVmProfileResponse.class, + description = "the ID of the profile") private Long profileId; - @IdentityMapper(entityTableName="autoscale_policies") - @Parameter(name = ApiConstants.POLICY_ID, type = CommandType.LONG, description = "the ID of the policy") + @Parameter(name = ApiConstants.POLICY_ID, type = CommandType.UUID, entityType = AutoScalePolicyResponse.class, + description = "the ID of the policy") private Long policyId; - @IdentityMapper(entityTableName="data_center") - @Parameter(name = ApiConstants.ZONE_ID, type = CommandType.LONG, description = "the availability zone ID") + @Parameter(name = ApiConstants.ZONE_ID, type = CommandType.UUID, entityType = ZoneResponse.class, + description = "the availability zone ID") private Long zoneId; // /////////////////////////////////////////////////// // ///////////////// Accessors /////////////////////// diff --git a/api/src/org/apache/cloudstack/api/command/user/autoscale/ListAutoScaleVmProfilesCmd.java b/api/src/org/apache/cloudstack/api/command/user/autoscale/ListAutoScaleVmProfilesCmd.java index 71459849c84..908c299dbac 100644 --- a/api/src/org/apache/cloudstack/api/command/user/autoscale/ListAutoScaleVmProfilesCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/autoscale/ListAutoScaleVmProfilesCmd.java @@ -19,11 +19,11 @@ package org.apache.cloudstack.api.command.user.autoscale; import java.util.ArrayList; import java.util.List; +import org.apache.cloudstack.api.response.TemplateResponse; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; 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.response.AutoScaleVmProfileResponse; @@ -40,12 +40,12 @@ public class ListAutoScaleVmProfilesCmd extends BaseListProjectAndAccountResourc // ////////////// API parameters ///////////////////// // /////////////////////////////////////////////////// - @IdentityMapper(entityTableName="autoscale_vmprofiles") - @Parameter(name = ApiConstants.ID, type = CommandType.LONG, description = "the ID of the autoscale vm profile") + @Parameter(name = ApiConstants.ID, type = CommandType.UUID, entityType = AutoScaleVmProfileResponse.class, + description = "the ID of the autoscale vm profile") private Long id; - @IdentityMapper(entityTableName="vm_template") - @Parameter(name=ApiConstants.TEMPLATE_ID, type=CommandType.LONG, description="the templateid of the autoscale vm profile") + @Parameter(name=ApiConstants.TEMPLATE_ID, type=CommandType.UUID, entityType = TemplateResponse.class, + description="the templateid of the autoscale vm profile") private Long templateId; @Parameter(name=ApiConstants.OTHER_DEPLOY_PARAMS, type=CommandType.STRING, description="the otherdeployparameters of the autoscale vm profile") diff --git a/api/src/org/apache/cloudstack/api/command/user/autoscale/ListConditionsCmd.java b/api/src/org/apache/cloudstack/api/command/user/autoscale/ListConditionsCmd.java index 7686910cb44..c66f7cff7a5 100644 --- a/api/src/org/apache/cloudstack/api/command/user/autoscale/ListConditionsCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/autoscale/ListConditionsCmd.java @@ -20,11 +20,11 @@ package org.apache.cloudstack.api.command.user.autoscale; import java.util.ArrayList; import java.util.List; +import org.apache.cloudstack.api.response.AutoScalePolicyResponse; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseListAccountResourcesCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.response.ConditionResponse; @@ -41,16 +41,16 @@ public class ListConditionsCmd extends BaseListAccountResourcesCmd { // ////////////// API parameters ///////////////////// // /////////////////////////////////////////////////// - @IdentityMapper(entityTableName = "conditions") - @Parameter(name = ApiConstants.ID, type = CommandType.LONG, required = false, description = "ID of the Condition.") + @Parameter(name = ApiConstants.ID, type = CommandType.UUID, entityType = ConditionResponse.class, + required = false, description = "ID of the Condition.") private Long id; - @IdentityMapper(entityTableName = "counter") - @Parameter(name = ApiConstants.COUNTER_ID, type = CommandType.LONG, required = false, description = "Counter-id of the condition.") + @Parameter(name = ApiConstants.COUNTER_ID, type = CommandType.UUID, entityType = CounterResponse.class, + required = false, description = "Counter-id of the condition.") private Long counterId; - @IdentityMapper(entityTableName="autoscale_policies") - @Parameter(name = ApiConstants.POLICY_ID, type = CommandType.LONG, description = "the ID of the policy") + @Parameter(name = ApiConstants.POLICY_ID, type = CommandType.UUID, entityType = AutoScalePolicyResponse.class, + description = "the ID of the policy") private Long policyId; // /////////////////////////////////////////////////// // ///////////// API Implementation/////////////////// diff --git a/api/src/org/apache/cloudstack/api/command/user/autoscale/ListCountersCmd.java b/api/src/org/apache/cloudstack/api/command/user/autoscale/ListCountersCmd.java index 47803c54541..04e6006a0cc 100644 --- a/api/src/org/apache/cloudstack/api/command/user/autoscale/ListCountersCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/autoscale/ListCountersCmd.java @@ -24,7 +24,6 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseListCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.response.CounterResponse; @@ -41,8 +40,8 @@ public class ListCountersCmd extends BaseListCmd { // ////////////// API parameters ///////////////////// // /////////////////////////////////////////////////// - @IdentityMapper(entityTableName = "counter") - @Parameter(name = ApiConstants.ID, type = CommandType.LONG, description = "ID of the Counter.") + @Parameter(name = ApiConstants.ID, type = CommandType.UUID, entityType = CounterResponse.class, + description = "ID of the Counter.") private Long id; @Parameter(name = ApiConstants.NAME, type = CommandType.STRING, description = "Name of the counter.") diff --git a/api/src/org/apache/cloudstack/api/command/user/autoscale/UpdateAutoScalePolicyCmd.java b/api/src/org/apache/cloudstack/api/command/user/autoscale/UpdateAutoScalePolicyCmd.java index 918aa8e7c7e..a949888a612 100644 --- a/api/src/org/apache/cloudstack/api/command/user/autoscale/UpdateAutoScalePolicyCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/autoscale/UpdateAutoScalePolicyCmd.java @@ -19,12 +19,12 @@ package org.apache.cloudstack.api.command.user.autoscale; import java.util.List; +import org.apache.cloudstack.api.response.ConditionResponse; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; @@ -51,12 +51,12 @@ public class UpdateAutoScalePolicyCmd extends BaseAsyncCmd { @Parameter(name = ApiConstants.QUIETTIME, type = CommandType.INTEGER, description = "the cool down period for which the policy should not be evaluated after the action has been taken") private Integer quietTime; - @IdentityMapper(entityTableName = "conditions") - @Parameter(name = ApiConstants.CONDITION_IDS, type = CommandType.LIST, collectionType = CommandType.LONG, description = "the list of IDs of the conditions that are being evaluated on every interval") + @Parameter(name = ApiConstants.CONDITION_IDS, type = CommandType.LIST, collectionType = CommandType.UUID, entityType = ConditionResponse.class, + description = "the list of IDs of the conditions that are being evaluated on every interval") private List conditionIds; - @IdentityMapper(entityTableName = "autoscale_policies") - @Parameter(name = ApiConstants.ID, type = CommandType.LONG, required = true, description = "the ID of the autoscale policy") + @Parameter(name = ApiConstants.ID, type = CommandType.UUID, entityType = AutoScalePolicyResponse.class, + required = true, description = "the ID of the autoscale policy") private Long id; @Override diff --git a/api/src/org/apache/cloudstack/api/command/user/autoscale/UpdateAutoScaleVmGroupCmd.java b/api/src/org/apache/cloudstack/api/command/user/autoscale/UpdateAutoScaleVmGroupCmd.java index ecc86ab4554..2ca95159c8c 100644 --- a/api/src/org/apache/cloudstack/api/command/user/autoscale/UpdateAutoScaleVmGroupCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/autoscale/UpdateAutoScaleVmGroupCmd.java @@ -19,12 +19,12 @@ package org.apache.cloudstack.api.command.user.autoscale; import java.util.List; +import org.apache.cloudstack.api.response.AutoScalePolicyResponse; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; @@ -54,16 +54,16 @@ public class UpdateAutoScaleVmGroupCmd extends BaseAsyncCmd { @Parameter(name=ApiConstants.INTERVAL, type=CommandType.INTEGER, description="the frequency at which the conditions have to be evaluated") private Integer interval; - @IdentityMapper(entityTableName = "autoscale_policies") - @Parameter(name = ApiConstants.SCALEUP_POLICY_IDS, type = CommandType.LIST, collectionType = CommandType.LONG, description = "list of scaleup autoscale policies") + @Parameter(name = ApiConstants.SCALEUP_POLICY_IDS, type = CommandType.LIST, collectionType = CommandType.UUID, entityType = AutoScalePolicyResponse.class, + description = "list of scaleup autoscale policies") private List scaleUpPolicyIds; - @IdentityMapper(entityTableName = "autoscale_policies") - @Parameter(name = ApiConstants.SCALEDOWN_POLICY_IDS, type = CommandType.LIST, collectionType = CommandType.LONG, description = "list of scaledown autoscale policies") + @Parameter(name = ApiConstants.SCALEDOWN_POLICY_IDS, type = CommandType.LIST, collectionType = CommandType.UUID, entityType = AutoScalePolicyResponse.class, + description = "list of scaledown autoscale policies") private List scaleDownPolicyIds; - @IdentityMapper(entityTableName = "autoscale_vmgroups") - @Parameter(name = ApiConstants.ID, type = CommandType.LONG, required = true, description = "the ID of the autoscale group") + @Parameter(name = ApiConstants.ID, type = CommandType.UUID, entityType = AutoScaleVmGroupResponse.class, + required = true, description = "the ID of the autoscale group") private Long id; // /////////////////////////////////////////////////// diff --git a/api/src/org/apache/cloudstack/api/command/user/autoscale/UpdateAutoScaleVmProfileCmd.java b/api/src/org/apache/cloudstack/api/command/user/autoscale/UpdateAutoScaleVmProfileCmd.java index 45911c1bb64..d616eb94bdf 100644 --- a/api/src/org/apache/cloudstack/api/command/user/autoscale/UpdateAutoScaleVmProfileCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/autoscale/UpdateAutoScaleVmProfileCmd.java @@ -19,12 +19,13 @@ package org.apache.cloudstack.api.command.user.autoscale; import java.util.Map; +import org.apache.cloudstack.api.response.TemplateResponse; +import org.apache.cloudstack.api.response.UserResponse; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; @@ -45,12 +46,12 @@ public class UpdateAutoScaleVmProfileCmd extends BaseAsyncCmd { // ////////////// API parameters ///////////////////// // /////////////////////////////////////////////////// - @IdentityMapper(entityTableName = "autoscale_vmprofiles") - @Parameter(name = ApiConstants.ID, type = CommandType.LONG, required = true, description = "the ID of the autoscale vm profile") + @Parameter(name = ApiConstants.ID, type = CommandType.UUID, entityType = AutoScaleVmProfileResponse.class, + required = true, description = "the ID of the autoscale vm profile") private Long id; - @IdentityMapper(entityTableName = "vm_template") - @Parameter(name = ApiConstants.TEMPLATE_ID, type = CommandType.LONG, description = "the template of the auto deployed virtual machine") + @Parameter(name = ApiConstants.TEMPLATE_ID, type = CommandType.UUID, entityType = TemplateResponse.class, + description = "the template of the auto deployed virtual machine") private Long templateId; @Parameter(name = ApiConstants.AUTOSCALE_VM_DESTROY_TIME, type = CommandType.INTEGER, description = "the time allowed for existing connections to get closed before a vm is destroyed") @@ -59,8 +60,8 @@ public class UpdateAutoScaleVmProfileCmd extends BaseAsyncCmd { @Parameter(name = ApiConstants.COUNTERPARAM_LIST, type = CommandType.MAP, description = "counterparam list. Example: counterparam[0].name=snmpcommunity&counterparam[0].value=public&counterparam[1].name=snmpport&counterparam[1].value=161") private Map counterParamList; - @IdentityMapper(entityTableName = "user") - @Parameter(name = ApiConstants.AUTOSCALE_USER_ID, type = CommandType.LONG, description = "the ID of the user used to launch and destroy the VMs") + @Parameter(name = ApiConstants.AUTOSCALE_USER_ID, type = CommandType.UUID, entityType = UserResponse.class, + description = "the ID of the user used to launch and destroy the VMs") private Long autoscaleUserId; // /////////////////////////////////////////////////// diff --git a/api/src/org/apache/cloudstack/api/response/AutoScalePolicyResponse.java b/api/src/org/apache/cloudstack/api/response/AutoScalePolicyResponse.java index 3be8a425f0d..27b50bead73 100644 --- a/api/src/org/apache/cloudstack/api/response/AutoScalePolicyResponse.java +++ b/api/src/org/apache/cloudstack/api/response/AutoScalePolicyResponse.java @@ -16,13 +16,16 @@ // under the License. package org.apache.cloudstack.api.response; +import com.cloud.network.as.AutoScalePolicy; import org.apache.cloudstack.api.ApiConstants; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; import org.apache.cloudstack.api.BaseResponse; +import org.apache.cloudstack.api.Entity; import java.util.List; +@Entity(value=AutoScalePolicy.class) public class AutoScalePolicyResponse extends BaseResponse implements ControlledEntityResponse { @SerializedName(ApiConstants.ID) diff --git a/api/src/org/apache/cloudstack/api/response/AutoScaleVmGroupResponse.java b/api/src/org/apache/cloudstack/api/response/AutoScaleVmGroupResponse.java index 125aa9bf9e1..d7938994541 100644 --- a/api/src/org/apache/cloudstack/api/response/AutoScaleVmGroupResponse.java +++ b/api/src/org/apache/cloudstack/api/response/AutoScaleVmGroupResponse.java @@ -16,14 +16,17 @@ // under the License. package org.apache.cloudstack.api.response; +import com.cloud.network.as.AutoScaleVmGroup; import org.apache.cloudstack.api.ApiConstants; import com.cloud.utils.IdentityProxy; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; import org.apache.cloudstack.api.BaseResponse; +import org.apache.cloudstack.api.Entity; import java.util.List; +@Entity(value=AutoScaleVmGroup.class) public class AutoScaleVmGroupResponse extends BaseResponse implements ControlledEntityResponse { @SerializedName(ApiConstants.ID) diff --git a/api/src/org/apache/cloudstack/api/response/AutoScaleVmProfileResponse.java b/api/src/org/apache/cloudstack/api/response/AutoScaleVmProfileResponse.java index f5ed4b1bdba..356460b0948 100644 --- a/api/src/org/apache/cloudstack/api/response/AutoScaleVmProfileResponse.java +++ b/api/src/org/apache/cloudstack/api/response/AutoScaleVmProfileResponse.java @@ -20,14 +20,17 @@ import java.util.HashMap; import java.util.List; import java.util.Map; +import com.cloud.network.as.AutoScaleVmProfile; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseCmd.CommandType; import org.apache.cloudstack.api.BaseResponse; +import org.apache.cloudstack.api.Entity; import org.apache.cloudstack.api.Parameter; import com.cloud.serializer.Param; import com.cloud.utils.Pair; import com.google.gson.annotations.SerializedName; +@Entity(value=AutoScaleVmProfile.class) public class AutoScaleVmProfileResponse extends BaseResponse implements ControlledEntityResponse { @SerializedName(ApiConstants.ID) diff --git a/api/src/org/apache/cloudstack/api/response/ConditionResponse.java b/api/src/org/apache/cloudstack/api/response/ConditionResponse.java index 168ba5c90c8..f2665c7bcc9 100644 --- a/api/src/org/apache/cloudstack/api/response/ConditionResponse.java +++ b/api/src/org/apache/cloudstack/api/response/ConditionResponse.java @@ -19,11 +19,14 @@ package org.apache.cloudstack.api.response; import java.util.List; +import com.cloud.network.as.Condition; import org.apache.cloudstack.api.ApiConstants; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; import org.apache.cloudstack.api.BaseResponse; +import org.apache.cloudstack.api.Entity; +@Entity(value=Condition.class) @SuppressWarnings("unused") public class ConditionResponse extends BaseResponse implements ControlledEntityResponse { @SerializedName("id") diff --git a/api/src/org/apache/cloudstack/api/response/FirewallRuleResponse.java b/api/src/org/apache/cloudstack/api/response/FirewallRuleResponse.java index 4dae4c5b857..8f7be39d6a7 100644 --- a/api/src/org/apache/cloudstack/api/response/FirewallRuleResponse.java +++ b/api/src/org/apache/cloudstack/api/response/FirewallRuleResponse.java @@ -18,11 +18,14 @@ package org.apache.cloudstack.api.response; import java.util.List; +import com.cloud.network.rules.FirewallRule; import org.apache.cloudstack.api.ApiConstants; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; import org.apache.cloudstack.api.BaseResponse; +import org.apache.cloudstack.api.Entity; +@Entity(value=FirewallRule.class) @SuppressWarnings("unused") public class FirewallRuleResponse extends BaseResponse { @SerializedName(ApiConstants.ID) @Param(description="the ID of the port forwarding rule") From ced1aabf82ef8226beef73c685a42f5d0fdbed73 Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Sat, 22 Dec 2012 20:42:05 -0800 Subject: [PATCH 186/421] api: Annotate firewall related apis Signed-off-by: Rohit Yadav --- .../api/command/user/event/ListEventsCmd.java | 5 ++--- .../user/firewall/CreateFirewallRuleCmd.java | 6 +++--- .../firewall/CreatePortForwardingRuleCmd.java | 17 +++++++++-------- .../user/firewall/DeleteFirewallRuleCmd.java | 11 ++++++----- .../firewall/DeletePortForwardingRuleCmd.java | 11 ++++++----- .../user/firewall/ListFirewallRulesCmd.java | 11 ++++++----- .../firewall/ListPortForwardingRulesCmd.java | 10 +++++----- .../firewall/UpdatePortForwardingRuleCmd.java | 11 ++++++----- .../cloudstack/api/response/EventResponse.java | 2 ++ 9 files changed, 45 insertions(+), 39 deletions(-) diff --git a/api/src/org/apache/cloudstack/api/command/user/event/ListEventsCmd.java b/api/src/org/apache/cloudstack/api/command/user/event/ListEventsCmd.java index f44ccf19fc5..e74f40adda9 100644 --- a/api/src/org/apache/cloudstack/api/command/user/event/ListEventsCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/event/ListEventsCmd.java @@ -21,7 +21,6 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; 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.response.EventResponse; @@ -37,8 +36,8 @@ public class ListEventsCmd extends BaseListProjectAndAccountResourcesCmd { //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - @IdentityMapper(entityTableName="event") - @Parameter(name=ApiConstants.ID, type=CommandType.LONG, description="the ID of the event") + @Parameter(name=ApiConstants.ID, type=CommandType.UUID, entityType = EventResponse.class, + description="the ID of the event") private Long id; @Parameter(name=ApiConstants.DURATION, type=CommandType.INTEGER, description="the duration of the event") diff --git a/api/src/org/apache/cloudstack/api/command/user/firewall/CreateFirewallRuleCmd.java b/api/src/org/apache/cloudstack/api/command/user/firewall/CreateFirewallRuleCmd.java index 7455caec201..f9b1b33c84c 100644 --- a/api/src/org/apache/cloudstack/api/command/user/firewall/CreateFirewallRuleCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/firewall/CreateFirewallRuleCmd.java @@ -19,13 +19,13 @@ package org.apache.cloudstack.api.command.user.firewall; import java.util.ArrayList; import java.util.List; +import org.apache.cloudstack.api.response.IPAddressResponse; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseAsyncCreateCmd; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; @@ -51,8 +51,8 @@ public class CreateFirewallRuleCmd extends BaseAsyncCreateCmd implements Firewal // ////////////// API parameters ///////////////////// // /////////////////////////////////////////////////// - @IdentityMapper(entityTableName="user_ip_address") - @Parameter(name = ApiConstants.IP_ADDRESS_ID, type = CommandType.LONG, required=true, description = "the IP address id of the port forwarding rule") + @Parameter(name = ApiConstants.IP_ADDRESS_ID, type = CommandType.UUID, entityType = IPAddressResponse.class, + required=true, description = "the IP address id of the port forwarding rule") private Long ipAddressId; @Parameter(name = ApiConstants.PROTOCOL, type = CommandType.STRING, required = true, description = "the protocol for the firewall rule. Valid values are TCP/UDP/ICMP.") diff --git a/api/src/org/apache/cloudstack/api/command/user/firewall/CreatePortForwardingRuleCmd.java b/api/src/org/apache/cloudstack/api/command/user/firewall/CreatePortForwardingRuleCmd.java index ca9fbd8552b..631c27f5dd7 100644 --- a/api/src/org/apache/cloudstack/api/command/user/firewall/CreatePortForwardingRuleCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/firewall/CreatePortForwardingRuleCmd.java @@ -18,13 +18,15 @@ package org.apache.cloudstack.api.command.user.firewall; import java.util.List; +import org.apache.cloudstack.api.response.IPAddressResponse; +import org.apache.cloudstack.api.response.NetworkResponse; +import org.apache.cloudstack.api.response.UserVmResponse; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseAsyncCreateCmd; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; @@ -50,8 +52,8 @@ public class CreatePortForwardingRuleCmd extends BaseAsyncCreateCmd implements P // ////////////// API parameters ///////////////////// // /////////////////////////////////////////////////// - @IdentityMapper(entityTableName = "user_ip_address") - @Parameter(name = ApiConstants.IP_ADDRESS_ID, type = CommandType.LONG, required = true, + @Parameter(name = ApiConstants.IP_ADDRESS_ID, type = CommandType.UUID, entityType = IPAddressResponse.class, + required = true, description = "the IP address id of the port forwarding rule") private Long ipAddressId; @@ -73,8 +75,8 @@ public class CreatePortForwardingRuleCmd extends BaseAsyncCreateCmd implements P @Parameter(name = ApiConstants.PUBLIC_END_PORT, type = CommandType.INTEGER, required = false, description = "the ending port of port forwarding rule's private port range") private Integer publicEndPort; - @IdentityMapper(entityTableName = "vm_instance") - @Parameter(name = ApiConstants.VIRTUAL_MACHINE_ID, type = CommandType.LONG, required = true, + @Parameter(name = ApiConstants.VIRTUAL_MACHINE_ID, type = CommandType.UUID, entityType = UserVmResponse.class, + required = true, description = "the ID of the virtual machine for the port forwarding rule") private Long virtualMachineId; @@ -88,9 +90,8 @@ public class CreatePortForwardingRuleCmd extends BaseAsyncCreateCmd implements P " rule is being created for VPC guest network 2) in all other cases defaulted to true") private Boolean openFirewall; - @IdentityMapper(entityTableName="networks") - @Parameter(name=ApiConstants.NETWORK_ID, type=CommandType.LONG, - description="The network of the vm the Port Forwarding rule will be created for. " + + @Parameter(name=ApiConstants.NETWORK_ID, type=CommandType.UUID, entityType = NetworkResponse.class, + description="The network of the vm the Port Forwarding rule will be created for. " + "Required when public Ip address is not associated with any Guest network yet (VPC case)") private Long networkId; diff --git a/api/src/org/apache/cloudstack/api/command/user/firewall/DeleteFirewallRuleCmd.java b/api/src/org/apache/cloudstack/api/command/user/firewall/DeleteFirewallRuleCmd.java index e23f8384a24..baec4fe86c1 100644 --- a/api/src/org/apache/cloudstack/api/command/user/firewall/DeleteFirewallRuleCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/firewall/DeleteFirewallRuleCmd.java @@ -16,12 +16,13 @@ // under the License. package org.apache.cloudstack.api.command.user.firewall; +import org.apache.cloudstack.api.response.AccountResponse; +import org.apache.cloudstack.api.response.FirewallRuleResponse; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; @@ -42,13 +43,13 @@ public class DeleteFirewallRuleCmd extends BaseAsyncCmd { //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - @IdentityMapper(entityTableName="firewall_rules") - @Parameter(name=ApiConstants.ID, type=CommandType.LONG, required=true, description="the ID of the firewall rule") + @Parameter(name=ApiConstants.ID, type=CommandType.UUID, entityType = FirewallRuleResponse.class, + required=true, description="the ID of the firewall rule") private Long id; // unexposed parameter needed for events logging - @IdentityMapper(entityTableName="account") - @Parameter(name=ApiConstants.ACCOUNT_ID, type=CommandType.LONG, expose=false) + @Parameter(name=ApiConstants.ACCOUNT_ID, type=CommandType.UUID, entityType = AccountResponse.class, + expose=false) private Long ownerId; ///////////////////////////////////////////////////// /////////////////// Accessors /////////////////////// diff --git a/api/src/org/apache/cloudstack/api/command/user/firewall/DeletePortForwardingRuleCmd.java b/api/src/org/apache/cloudstack/api/command/user/firewall/DeletePortForwardingRuleCmd.java index e993c55804c..a7500b97ef5 100644 --- a/api/src/org/apache/cloudstack/api/command/user/firewall/DeletePortForwardingRuleCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/firewall/DeletePortForwardingRuleCmd.java @@ -16,12 +16,13 @@ // under the License. package org.apache.cloudstack.api.command.user.firewall; +import org.apache.cloudstack.api.response.AccountResponse; +import org.apache.cloudstack.api.response.FirewallRuleResponse; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; @@ -41,13 +42,13 @@ public class DeletePortForwardingRuleCmd extends BaseAsyncCmd { //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - @IdentityMapper(entityTableName="firewall_rules") - @Parameter(name=ApiConstants.ID, type=CommandType.LONG, required=true, description="the ID of the port forwarding rule") + @Parameter(name=ApiConstants.ID, type=CommandType.UUID, entityType = FirewallRuleResponse.class, + required=true, description="the ID of the port forwarding rule") private Long id; // unexposed parameter needed for events logging - @IdentityMapper(entityTableName="account") - @Parameter(name=ApiConstants.ACCOUNT_ID, type=CommandType.LONG, expose=false) + @Parameter(name=ApiConstants.ACCOUNT_ID, type=CommandType.UUID, entityType = AccountResponse.class, + expose=false) private Long ownerId; ///////////////////////////////////////////////////// /////////////////// Accessors /////////////////////// diff --git a/api/src/org/apache/cloudstack/api/command/user/firewall/ListFirewallRulesCmd.java b/api/src/org/apache/cloudstack/api/command/user/firewall/ListFirewallRulesCmd.java index cf9a3ed95b6..ad9610e2275 100644 --- a/api/src/org/apache/cloudstack/api/command/user/firewall/ListFirewallRulesCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/firewall/ListFirewallRulesCmd.java @@ -19,11 +19,12 @@ package org.apache.cloudstack.api.command.user.firewall; import java.util.ArrayList; import java.util.List; +import org.apache.cloudstack.api.response.FirewallRuleResponse; +import org.apache.cloudstack.api.response.IPAddressResponse; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseListTaggedResourcesCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.response.FirewallResponse; @@ -39,12 +40,12 @@ public class ListFirewallRulesCmd extends BaseListTaggedResourcesCmd { ///////////////////////////////////////////////////// //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - @IdentityMapper(entityTableName="firewall_rules") - @Parameter(name=ApiConstants.ID, type=CommandType.LONG, description="Lists rule with the specified ID.") + @Parameter(name=ApiConstants.ID, type=CommandType.UUID, entityType = FirewallRuleResponse.class, + description="Lists rule with the specified ID.") private Long id; - @IdentityMapper(entityTableName="user_ip_address") - @Parameter(name=ApiConstants.IP_ADDRESS_ID, type=CommandType.LONG, description="the id of IP address of the firwall services") + @Parameter(name=ApiConstants.IP_ADDRESS_ID, type=CommandType.UUID, entityType = IPAddressResponse.class, + description="the id of IP address of the firwall services") private Long ipAddressId; ///////////////////////////////////////////////////// diff --git a/api/src/org/apache/cloudstack/api/command/user/firewall/ListPortForwardingRulesCmd.java b/api/src/org/apache/cloudstack/api/command/user/firewall/ListPortForwardingRulesCmd.java index b752b305c12..7de6e3f0b32 100644 --- a/api/src/org/apache/cloudstack/api/command/user/firewall/ListPortForwardingRulesCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/firewall/ListPortForwardingRulesCmd.java @@ -19,11 +19,11 @@ package org.apache.cloudstack.api.command.user.firewall; import java.util.ArrayList; import java.util.List; +import org.apache.cloudstack.api.response.IPAddressResponse; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseListTaggedResourcesCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.response.FirewallRuleResponse; @@ -41,12 +41,12 @@ public class ListPortForwardingRulesCmd extends BaseListTaggedResourcesCmd { //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - @IdentityMapper(entityTableName="firewall_rules") - @Parameter(name=ApiConstants.ID, type=CommandType.LONG, description="Lists rule with the specified ID.") + @Parameter(name=ApiConstants.ID, type=CommandType.UUID, entityType = FirewallRuleResponse.class, + description="Lists rule with the specified ID.") private Long id; - @IdentityMapper(entityTableName="user_ip_address") - @Parameter(name=ApiConstants.IP_ADDRESS_ID, type=CommandType.LONG, description="the id of IP address of the port forwarding services") + @Parameter(name=ApiConstants.IP_ADDRESS_ID, type=CommandType.UUID, entityType = IPAddressResponse.class, + description="the id of IP address of the port forwarding services") private Long ipAddressId; ///////////////////////////////////////////////////// diff --git a/api/src/org/apache/cloudstack/api/command/user/firewall/UpdatePortForwardingRuleCmd.java b/api/src/org/apache/cloudstack/api/command/user/firewall/UpdatePortForwardingRuleCmd.java index 135455219ad..deafd476f06 100644 --- a/api/src/org/apache/cloudstack/api/command/user/firewall/UpdatePortForwardingRuleCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/firewall/UpdatePortForwardingRuleCmd.java @@ -16,11 +16,12 @@ // under the License. package org.apache.cloudstack.api.command.user.firewall; +import org.apache.cloudstack.api.response.IPAddressResponse; +import org.apache.cloudstack.api.response.UserVmResponse; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseAsyncCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.response.FirewallRuleResponse; @@ -46,15 +47,15 @@ public class UpdatePortForwardingRuleCmd extends BaseAsyncCmd { @Parameter(name=ApiConstants.PROTOCOL, type=CommandType.STRING, required=true, description="the protocol for the port fowarding rule. Valid values are TCP or UDP.") private String protocol; - @IdentityMapper(entityTableName="user_ip_address") - @Parameter(name=ApiConstants.IP_ADDRESS_ID, type=CommandType.LONG, required=true, description="the IP address id of the port forwarding rule") + @Parameter(name=ApiConstants.IP_ADDRESS_ID, type=CommandType.UUID, entityType = IPAddressResponse.class, + required=true, description="the IP address id of the port forwarding rule") private Long publicIpId; @Parameter(name=ApiConstants.PUBLIC_PORT, type=CommandType.STRING, required=true, description="the public port of the port forwarding rule") private String publicPort; - @IdentityMapper(entityTableName="vm_instance") - @Parameter(name=ApiConstants.VIRTUAL_MACHINE_ID, type=CommandType.LONG, description="the ID of the virtual machine for the port forwarding rule") + @Parameter(name=ApiConstants.VIRTUAL_MACHINE_ID, type=CommandType.UUID, entityType = UserVmResponse.class, + description="the ID of the virtual machine for the port forwarding rule") private Long virtualMachineId; ///////////////////////////////////////////////////// diff --git a/api/src/org/apache/cloudstack/api/response/EventResponse.java b/api/src/org/apache/cloudstack/api/response/EventResponse.java index 641b586853f..26dfdf15574 100644 --- a/api/src/org/apache/cloudstack/api/response/EventResponse.java +++ b/api/src/org/apache/cloudstack/api/response/EventResponse.java @@ -23,7 +23,9 @@ import com.cloud.event.Event; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; import org.apache.cloudstack.api.BaseResponse; +import org.apache.cloudstack.api.Entity; +@Entity(value=Event.class) @SuppressWarnings("unused") public class EventResponse extends BaseResponse implements ControlledViewEntityResponse{ @SerializedName(ApiConstants.ID) @Param(description="the ID of the event") From e5fc513257587ab1d5b98567eb18980826981b6e Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Sat, 22 Dec 2012 20:44:02 -0800 Subject: [PATCH 187/421] api: Annotate guest related apis Signed-off-by: Rohit Yadav --- .../command/user/guest/ListGuestOsCategoriesCmd.java | 5 ++--- .../api/command/user/guest/ListGuestOsCmd.java | 10 +++++----- 2 files changed, 7 insertions(+), 8 deletions(-) diff --git a/api/src/org/apache/cloudstack/api/command/user/guest/ListGuestOsCategoriesCmd.java b/api/src/org/apache/cloudstack/api/command/user/guest/ListGuestOsCategoriesCmd.java index a98bd8681b0..5209777f498 100644 --- a/api/src/org/apache/cloudstack/api/command/user/guest/ListGuestOsCategoriesCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/guest/ListGuestOsCategoriesCmd.java @@ -24,7 +24,6 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseListCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.response.GuestOSCategoryResponse; @@ -42,8 +41,8 @@ public class ListGuestOsCategoriesCmd extends BaseListCmd { //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - @IdentityMapper(entityTableName="guest_os_category") - @Parameter(name=ApiConstants.ID, type=CommandType.LONG, description="list Os category by id") + @Parameter(name=ApiConstants.ID, type=CommandType.UUID, entityType = GuestOSCategoryResponse.class, + description="list Os category by id") private Long id; @Parameter(name=ApiConstants.NAME, type=CommandType.STRING, description="list os category by name", since="3.0.1") diff --git a/api/src/org/apache/cloudstack/api/command/user/guest/ListGuestOsCmd.java b/api/src/org/apache/cloudstack/api/command/user/guest/ListGuestOsCmd.java index c47c0b4a0bd..93d2d46a99c 100644 --- a/api/src/org/apache/cloudstack/api/command/user/guest/ListGuestOsCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/guest/ListGuestOsCmd.java @@ -20,11 +20,11 @@ import java.util.ArrayList; import java.util.List; import org.apache.cloudstack.api.command.user.iso.ListIsosCmd; +import org.apache.cloudstack.api.response.GuestOSCategoryResponse; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseListCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.response.GuestOSResponse; @@ -42,12 +42,12 @@ public class ListGuestOsCmd extends BaseListCmd { //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - @IdentityMapper(entityTableName="guest_os") - @Parameter(name=ApiConstants.ID, type=CommandType.LONG, description="list by Os type Id") + @Parameter(name=ApiConstants.ID, type=CommandType.UUID, entityType = GuestOSResponse.class, + description="list by Os type Id") private Long id; - @IdentityMapper(entityTableName="guest_os_category") - @Parameter(name=ApiConstants.OS_CATEGORY_ID, type=CommandType.LONG, description="list by Os Category id") + @Parameter(name=ApiConstants.OS_CATEGORY_ID, type=CommandType.UUID, entityType = GuestOSCategoryResponse.class, + description="list by Os Category id") private Long osCategoryId; @Parameter(name=ApiConstants.DESCRIPTION, type=CommandType.STRING, description="list os by description", since="3.0.1") From e7fa1a86fbdf39a43528921a0ea7530d3a5f1e57 Mon Sep 17 00:00:00 2001 From: Min Chen Date: Sat, 22 Dec 2012 21:47:05 -0800 Subject: [PATCH 188/421] Create DB views to improve ListHostsCmd performance. Signed-off-by: Min Chen --- .../com/cloud/server/ManagementService.java | 8 - .../api/command/admin/host/ListHostsCmd.java | 42 +- .../cloudstack/api/response/HostResponse.java | 5 + .../apache/cloudstack/query/QueryService.java | 4 +- client/cloudstack-ui.launch | 18 - client/tomcatconf/log4j-cloud.xml.in | 4 + server/src/com/cloud/api/ApiDBUtils.java | 20 +- .../src/com/cloud/api/ApiResponseHelper.java | 135 +---- server/src/com/cloud/api/ApiServer.java | 4 +- .../com/cloud/api/query/QueryManagerImpl.java | 129 +++++ .../cloud/api/query/ViewResponseHelper.java | 21 + .../com/cloud/api/query/dao/HostJoinDao.java | 38 ++ .../cloud/api/query/dao/HostJoinDaoImpl.java | 222 ++++++++ .../com/cloud/api/query/vo/HostJoinVO.java | 503 ++++++++++++++++++ .../api/response/ApiResponseSerializer.java | 39 +- .../DefaultComponentLibrary.java | 2 + .../cloud/resource/ResourceManagerImpl.java | 46 +- .../cloud/server/ManagementServerImpl.java | 17 - .../src/com/cloud/storage/StorageManager.java | 36 +- .../com/cloud/storage/StorageManagerImpl.java | 128 ++--- server/test/com/cloud/api/APITest.java | 189 +++++++ server/test/com/cloud/api/ListPerfTest.java | 109 ++++ server/test/com/cloud/api/LoginResponse.java | 142 +++++ 23 files changed, 1541 insertions(+), 320 deletions(-) create mode 100644 server/src/com/cloud/api/query/dao/HostJoinDao.java create mode 100644 server/src/com/cloud/api/query/dao/HostJoinDaoImpl.java create mode 100644 server/src/com/cloud/api/query/vo/HostJoinVO.java create mode 100644 server/test/com/cloud/api/APITest.java create mode 100644 server/test/com/cloud/api/ListPerfTest.java create mode 100644 server/test/com/cloud/api/LoginResponse.java diff --git a/api/src/com/cloud/server/ManagementService.java b/api/src/com/cloud/server/ManagementService.java index 70ef79973ac..ccccb90e92a 100755 --- a/api/src/com/cloud/server/ManagementService.java +++ b/api/src/com/cloud/server/ManagementService.java @@ -146,14 +146,6 @@ public interface ManagementService { */ Pair, Integer> searchForPods(ListPodsByCmd cmd); - /** - * Searches for servers by the specified search criteria Can search by: "name", "type", "state", "dataCenterId", - * "podId" - * - * @param cmd - * @return List of Hosts - */ - List searchForServers(ListHostsCmd cmd); /** * Creates a new template diff --git a/api/src/org/apache/cloudstack/api/command/admin/host/ListHostsCmd.java b/api/src/org/apache/cloudstack/api/command/admin/host/ListHostsCmd.java index 32395e7be48..881b1f2c300 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/host/ListHostsCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/host/ListHostsCmd.java @@ -28,6 +28,7 @@ import org.apache.cloudstack.api.BaseListCmd; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.response.ClusterResponse; +import org.apache.cloudstack.api.response.DomainRouterResponse; import org.apache.cloudstack.api.response.HostResponse; import org.apache.cloudstack.api.response.ListResponse; import org.apache.cloudstack.api.response.PodResponse; @@ -164,32 +165,35 @@ public class ListHostsCmd extends BaseListCmd { @Override public void execute(){ - List result = new ArrayList(); - List hostsWithCapacity = new ArrayList(); + ListResponse response = null; + if (getVirtualMachineId() == null) { + response = _queryService.searchForServers(this); + } else { + List result = new ArrayList(); + List hostsWithCapacity = new ArrayList(); - if(getVirtualMachineId() != null){ - Pair, List> hostsForMigration = _mgr.listHostsForMigrationOfVM(getVirtualMachineId(), this.getStartIndex(), this.getPageSizeVal()); + Pair, List> hostsForMigration = _mgr.listHostsForMigrationOfVM(getVirtualMachineId(), + this.getStartIndex(), this.getPageSizeVal()); result = hostsForMigration.first(); hostsWithCapacity = hostsForMigration.second(); - }else{ - result = _mgr.searchForServers(this); - } - ListResponse response = new ListResponse(); - List hostResponses = new ArrayList(); - for (Host host : result) { - HostResponse hostResponse = _responseGenerator.createHostResponse(host, getDetails()); - Boolean suitableForMigration = false; - if(hostsWithCapacity.contains(host)){ - suitableForMigration = true; + response = new ListResponse(); + List hostResponses = new ArrayList(); + for (Host host : result) { + HostResponse hostResponse = _responseGenerator.createHostResponse(host, getDetails()); + Boolean suitableForMigration = false; + if (hostsWithCapacity.contains(host)) { + suitableForMigration = true; + } + hostResponse.setSuitableForMigration(suitableForMigration); + hostResponse.setObjectName("host"); + hostResponses.add(hostResponse); } - hostResponse.setSuitableForMigration(suitableForMigration); - hostResponse.setObjectName("host"); - hostResponses.add(hostResponse); - } - response.setResponses(hostResponses); + response.setResponses(hostResponses); + } response.setResponseName(getCommandName()); this.setResponseObject(response); + } } diff --git a/api/src/org/apache/cloudstack/api/response/HostResponse.java b/api/src/org/apache/cloudstack/api/response/HostResponse.java index 39309caef6c..348d48a48a9 100644 --- a/api/src/org/apache/cloudstack/api/response/HostResponse.java +++ b/api/src/org/apache/cloudstack/api/response/HostResponse.java @@ -317,6 +317,11 @@ public class HostResponse extends BaseResponse { this.events = events; } + + public String getHostTags() { + return hostTags; + } + public void setHostTags(String hostTags) { this.hostTags = hostTags; } diff --git a/api/src/org/apache/cloudstack/query/QueryService.java b/api/src/org/apache/cloudstack/query/QueryService.java index da526e0539f..1847edef4eb 100644 --- a/api/src/org/apache/cloudstack/query/QueryService.java +++ b/api/src/org/apache/cloudstack/query/QueryService.java @@ -16,6 +16,7 @@ // under the License. package org.apache.cloudstack.query; +import org.apache.cloudstack.api.command.admin.host.ListHostsCmd; import org.apache.cloudstack.api.command.admin.router.ListRoutersCmd; import org.apache.cloudstack.api.command.admin.user.ListUsersCmd; import org.apache.cloudstack.api.command.user.account.ListProjectAccountsCmd; @@ -28,6 +29,7 @@ import org.apache.cloudstack.api.command.user.vm.ListVMsCmd; import org.apache.cloudstack.api.command.user.vmgroup.ListVMGroupsCmd; import org.apache.cloudstack.api.response.DomainRouterResponse; import org.apache.cloudstack.api.response.EventResponse; +import org.apache.cloudstack.api.response.HostResponse; import org.apache.cloudstack.api.response.InstanceGroupResponse; import org.apache.cloudstack.api.response.ListResponse; import org.apache.cloudstack.api.response.ProjectAccountResponse; @@ -70,5 +72,5 @@ public interface QueryService { public ListResponse listProjectAccounts(ListProjectAccountsCmd cmd); - + public ListResponse searchForServers(ListHostsCmd cmd); } diff --git a/client/cloudstack-ui.launch b/client/cloudstack-ui.launch index 1943d17aebd..b47097c33cf 100644 --- a/client/cloudstack-ui.launch +++ b/client/cloudstack-ui.launch @@ -1,22 +1,4 @@ - diff --git a/client/tomcatconf/log4j-cloud.xml.in b/client/tomcatconf/log4j-cloud.xml.in index 6c7f29d0162..02f70998d53 100755 --- a/client/tomcatconf/log4j-cloud.xml.in +++ b/client/tomcatconf/log4j-cloud.xml.in @@ -104,6 +104,10 @@ under the License. + + + + diff --git a/server/src/com/cloud/api/ApiDBUtils.java b/server/src/com/cloud/api/ApiDBUtils.java index 2aaee2e2fc5..ac7aeb62bb7 100755 --- a/server/src/com/cloud/api/ApiDBUtils.java +++ b/server/src/com/cloud/api/ApiDBUtils.java @@ -22,9 +22,11 @@ import java.util.List; import java.util.Map; import java.util.Set; +import org.apache.cloudstack.api.ApiConstants.HostDetails; import org.apache.cloudstack.api.ApiConstants.VMDetails; import org.apache.cloudstack.api.response.DomainRouterResponse; import org.apache.cloudstack.api.response.EventResponse; +import org.apache.cloudstack.api.response.HostResponse; import org.apache.cloudstack.api.response.InstanceGroupResponse; import org.apache.cloudstack.api.response.ProjectAccountResponse; import org.apache.cloudstack.api.response.ProjectInvitationResponse; @@ -35,6 +37,7 @@ import org.apache.cloudstack.api.response.UserResponse; import org.apache.cloudstack.api.response.UserVmResponse; import com.cloud.api.query.dao.DomainRouterJoinDao; +import com.cloud.api.query.dao.HostJoinDao; import com.cloud.api.query.dao.InstanceGroupJoinDao; import com.cloud.api.query.dao.ProjectAccountJoinDao; import com.cloud.api.query.dao.ProjectInvitationJoinDao; @@ -44,6 +47,7 @@ import com.cloud.api.query.dao.SecurityGroupJoinDao; import com.cloud.api.query.dao.UserVmJoinDao; import com.cloud.api.query.vo.DomainRouterJoinVO; import com.cloud.api.query.vo.EventJoinVO; +import com.cloud.api.query.vo.HostJoinVO; import com.cloud.api.query.vo.InstanceGroupJoinVO; import com.cloud.api.query.vo.ProjectAccountJoinVO; import com.cloud.api.query.vo.ProjectInvitationJoinVO; @@ -305,6 +309,7 @@ public class ApiDBUtils { private static ProjectJoinDao _projectJoinDao; private static ProjectAccountJoinDao _projectAccountJoinDao; private static ProjectInvitationJoinDao _projectInvitationJoinDao; + private static HostJoinDao _hostJoinDao; private static PhysicalNetworkTrafficTypeDao _physicalNetworkTrafficTypeDao; private static PhysicalNetworkServiceProviderDao _physicalNetworkServiceProviderDao; @@ -390,6 +395,7 @@ public class ApiDBUtils { _projectJoinDao = locator.getDao(ProjectJoinDao.class); _projectAccountJoinDao = locator.getDao(ProjectAccountJoinDao.class); _projectInvitationJoinDao = locator.getDao(ProjectInvitationJoinDao.class); + _hostJoinDao = locator.getDao(HostJoinDao.class); _physicalNetworkTrafficTypeDao = locator.getDao(PhysicalNetworkTrafficTypeDao.class); _physicalNetworkServiceProviderDao = locator.getDao(PhysicalNetworkServiceProviderDao.class); @@ -506,8 +512,8 @@ public class ApiDBUtils { return _storageMgr.getStoragePoolTags(poolId); } - public static boolean isLocalStorageActiveOnHost(Host host) { - return _storageMgr.isLocalStorageActiveOnHost(host); + public static boolean isLocalStorageActiveOnHost(Long hostId) { + return _storageMgr.isLocalStorageActiveOnHost(hostId); } public static InstanceGroupVO findInstanceGroupForVM(long vmId) { @@ -1295,5 +1301,15 @@ public class ApiDBUtils { return _projectInvitationJoinDao.newProjectInvitationView(proj); } + public static HostResponse newHostResponse(HostJoinVO vr, EnumSet details) { + return _hostJoinDao.newHostResponse(vr, details); + } + public static HostResponse fillHostDetails(HostResponse vrData, HostJoinVO vr){ + return _hostJoinDao.setHostResponse(vrData, vr); + } + + public static List newHostView(Host vr){ + return _hostJoinDao.newHostView(vr); + } } diff --git a/server/src/com/cloud/api/ApiResponseHelper.java b/server/src/com/cloud/api/ApiResponseHelper.java index 5640ab7f22d..5cb0f4890a8 100755 --- a/server/src/com/cloud/api/ApiResponseHelper.java +++ b/server/src/com/cloud/api/ApiResponseHelper.java @@ -45,6 +45,7 @@ import com.cloud.api.query.ViewResponseHelper; import com.cloud.api.query.vo.ControlledViewEntity; import com.cloud.api.query.vo.DomainRouterJoinVO; import com.cloud.api.query.vo.EventJoinVO; +import com.cloud.api.query.vo.HostJoinVO; import com.cloud.api.query.vo.InstanceGroupJoinVO; import com.cloud.api.query.vo.ProjectAccountJoinVO; import com.cloud.api.query.vo.ProjectInvitationJoinVO; @@ -616,136 +617,10 @@ public class ApiResponseHelper implements ResponseGenerator { @Override public HostResponse createHostResponse(Host host, EnumSet details) { - HostResponse hostResponse = new HostResponse(); - hostResponse.setId(host.getUuid()); - hostResponse.setCapabilities(host.getCapabilities()); - ClusterVO cluster = null; - if (host.getClusterId() != null) { - cluster = ApiDBUtils.findClusterById(host.getClusterId()); - if (cluster != null) { - hostResponse.setClusterId(cluster.getUuid()); - } - } - hostResponse.setCpuNumber(host.getCpus()); - DataCenter zone = ApiDBUtils.findZoneById(host.getDataCenterId()); - if (zone != null) { - hostResponse.setZoneId(zone.getUuid()); - } - hostResponse.setDisconnectedOn(host.getDisconnectedOn()); - hostResponse.setHypervisor(host.getHypervisorType()); - hostResponse.setHostType(host.getType()); - hostResponse.setLastPinged(new Date(host.getLastPinged())); - hostResponse.setManagementServerId(host.getManagementServerId()); - hostResponse.setName(host.getName()); - HostPodVO pod = ApiDBUtils.findPodById(host.getPodId()); - if (pod != null) { - hostResponse.setPodId(pod.getUuid()); - } - hostResponse.setRemoved(host.getRemoved()); - hostResponse.setCpuSpeed(host.getSpeed()); - hostResponse.setState(host.getStatus()); - hostResponse.setIpAddress(host.getPrivateIpAddress()); - hostResponse.setVersion(host.getVersion()); - hostResponse.setCreated(host.getCreated()); - - if (details.contains(HostDetails.all) || details.contains(HostDetails.capacity) - || details.contains(HostDetails.stats) || details.contains(HostDetails.events)) { - - GuestOSCategoryVO guestOSCategory = ApiDBUtils.getHostGuestOSCategory(host.getId()); - if (guestOSCategory != null) { - hostResponse.setOsCategoryId(guestOSCategory.getUuid()); - hostResponse.setOsCategoryName(guestOSCategory.getName()); - } - if (zone != null) { - hostResponse.setZoneName(zone.getName()); - } - - if (pod != null) { - hostResponse.setPodName(pod.getName()); - } - - if (cluster != null) { - hostResponse.setClusterName(cluster.getName()); - hostResponse.setClusterType(cluster.getClusterType().toString()); - } - } - - DecimalFormat decimalFormat = new DecimalFormat("#.##"); - if (host.getType() == Host.Type.Routing) { - if (details.contains(HostDetails.all) || details.contains(HostDetails.capacity)) { - // set allocated capacities - Long mem = ApiDBUtils.getMemoryOrCpuCapacitybyHost(host.getId(), Capacity.CAPACITY_TYPE_MEMORY); - Long cpu = ApiDBUtils.getMemoryOrCpuCapacitybyHost(host.getId(), Capacity.CAPACITY_TYPE_CPU); - - hostResponse.setMemoryAllocated(mem); - hostResponse.setMemoryTotal(host.getTotalMemory()); - String hostTags = ApiDBUtils.getHostTags(host.getId()); - hostResponse.setHostTags(hostTags); - - String haTag = ApiDBUtils.getHaTag(); - if (haTag != null && !haTag.isEmpty() && hostTags != null && !hostTags.isEmpty()) { - if (haTag.equalsIgnoreCase(hostTags)) { - hostResponse.setHaHost(true); - } else { - hostResponse.setHaHost(false); - } - } else { - hostResponse.setHaHost(false); - } - - hostResponse.setHypervisorVersion(host.getHypervisorVersion()); - - String cpuAlloc = decimalFormat.format(((float) cpu / (float) (host.getCpus() * host.getSpeed())) * 100f) + "%"; - hostResponse.setCpuAllocated(cpuAlloc); - String cpuWithOverprovisioning = new Float(host.getCpus() * host.getSpeed() * ApiDBUtils.getCpuOverprovisioningFactor()).toString(); - hostResponse.setCpuWithOverprovisioning(cpuWithOverprovisioning); - } - - if (details.contains(HostDetails.all) || details.contains(HostDetails.stats)) { - // set CPU/RAM/Network stats - String cpuUsed = null; - HostStats hostStats = ApiDBUtils.getHostStatistics(host.getId()); - if (hostStats != null) { - float cpuUtil = (float) hostStats.getCpuUtilization(); - cpuUsed = decimalFormat.format(cpuUtil) + "%"; - hostResponse.setCpuUsed(cpuUsed); - hostResponse.setMemoryUsed((new Double(hostStats.getUsedMemory())).longValue()); - hostResponse.setNetworkKbsRead((new Double(hostStats.getNetworkReadKBs())).longValue()); - hostResponse.setNetworkKbsWrite((new Double(hostStats.getNetworkWriteKBs())).longValue()); - - } - } - - } else if (host.getType() == Host.Type.SecondaryStorage) { - StorageStats secStorageStats = ApiDBUtils.getSecondaryStorageStatistics(host.getId()); - if (secStorageStats != null) { - hostResponse.setDiskSizeTotal(secStorageStats.getCapacityBytes()); - hostResponse.setDiskSizeAllocated(secStorageStats.getByteUsed()); - } - } - - hostResponse.setLocalStorageActive(ApiDBUtils.isLocalStorageActiveOnHost(host)); - - if (details.contains(HostDetails.all) || details.contains(HostDetails.events)) { - Set possibleEvents = host.getStatus().getPossibleEvents(); - if ((possibleEvents != null) && !possibleEvents.isEmpty()) { - String events = ""; - Iterator iter = possibleEvents.iterator(); - while (iter.hasNext()) { - com.cloud.host.Status.Event event = iter.next(); - events += event.toString(); - if (iter.hasNext()) { - events += "; "; - } - } - hostResponse.setEvents(events); - } - } - - hostResponse.setResourceState(host.getResourceState().toString()); - hostResponse.setObjectName("host"); - - return hostResponse; + List viewHosts = ApiDBUtils.newHostView(host); + List listHosts = ViewResponseHelper.createHostResponse(details, viewHosts.toArray(new HostJoinVO[viewHosts.size()])); + assert listHosts != null && listHosts.size() == 1 : "There should be one host returned"; + return listHosts.get(0); } @Override diff --git a/server/src/com/cloud/api/ApiServer.java b/server/src/com/cloud/api/ApiServer.java index 651de7ff67f..9e549efc73e 100755 --- a/server/src/com/cloud/api/ApiServer.java +++ b/server/src/com/cloud/api/ApiServer.java @@ -85,6 +85,7 @@ import org.apache.http.protocol.ResponseDate; import org.apache.http.protocol.ResponseServer; import org.apache.log4j.Logger; +import org.apache.cloudstack.api.command.admin.host.ListHostsCmd; import org.apache.cloudstack.api.command.admin.router.ListRoutersCmd; import org.apache.cloudstack.api.command.user.project.ListProjectInvitationsCmd; import org.apache.cloudstack.api.command.user.project.ListProjectsCmd; @@ -460,7 +461,8 @@ public class ApiServer implements HttpRequestHandler { && !(cmdObj instanceof ListVMGroupsCmd) && !(cmdObj instanceof ListProjectsCmd) && !(cmdObj instanceof ListProjectAccountsCmd) - && !(cmdObj instanceof ListProjectInvitationsCmd)) { + && !(cmdObj instanceof ListProjectInvitationsCmd) + && !(cmdObj instanceof ListHostsCmd)) { buildAsyncListResponse((BaseListCmd) cmdObj, caller); } diff --git a/server/src/com/cloud/api/query/QueryManagerImpl.java b/server/src/com/cloud/api/query/QueryManagerImpl.java index b9ed92a3069..61af1616e49 100644 --- a/server/src/com/cloud/api/query/QueryManagerImpl.java +++ b/server/src/com/cloud/api/query/QueryManagerImpl.java @@ -26,7 +26,9 @@ import javax.ejb.Local; import javax.naming.ConfigurationException; import org.apache.cloudstack.api.ResponseGenerator; +import org.apache.cloudstack.api.ApiConstants.HostDetails; import org.apache.cloudstack.api.ApiConstants.VMDetails; +import org.apache.cloudstack.api.command.admin.host.ListHostsCmd; import org.apache.cloudstack.api.command.admin.router.ListRoutersCmd; import org.apache.cloudstack.api.command.admin.user.ListUsersCmd; import org.apache.cloudstack.api.command.user.account.ListProjectAccountsCmd; @@ -39,6 +41,7 @@ import org.apache.cloudstack.api.command.user.vm.ListVMsCmd; import org.apache.cloudstack.api.command.user.vmgroup.ListVMGroupsCmd; import org.apache.cloudstack.api.response.DomainRouterResponse; import org.apache.cloudstack.api.response.EventResponse; +import org.apache.cloudstack.api.response.HostResponse; import org.apache.cloudstack.api.response.InstanceGroupResponse; import org.apache.cloudstack.api.response.ListResponse; import org.apache.cloudstack.api.response.ProjectAccountResponse; @@ -54,6 +57,7 @@ import org.apache.log4j.Logger; import com.cloud.api.ApiDBUtils; import com.cloud.api.ApiResponseHelper; import com.cloud.api.query.dao.DomainRouterJoinDao; +import com.cloud.api.query.dao.HostJoinDao; import com.cloud.api.query.dao.InstanceGroupJoinDao; import com.cloud.api.query.dao.ProjectAccountJoinDao; import com.cloud.api.query.dao.ProjectInvitationJoinDao; @@ -63,6 +67,7 @@ import com.cloud.api.query.dao.SecurityGroupJoinDao; import com.cloud.api.query.dao.UserVmJoinDao; import com.cloud.api.query.vo.DomainRouterJoinVO; import com.cloud.api.query.vo.EventJoinVO; +import com.cloud.api.query.vo.HostJoinVO; import com.cloud.api.query.vo.InstanceGroupJoinVO; import com.cloud.api.query.vo.ProjectAccountJoinVO; import com.cloud.api.query.vo.ProjectInvitationJoinVO; @@ -78,6 +83,10 @@ import com.cloud.domain.dao.DomainDao; import com.cloud.event.dao.EventJoinDao; import com.cloud.exception.InvalidParameterValueException; import com.cloud.exception.PermissionDeniedException; +import com.cloud.ha.HighAvailabilityManager; +import com.cloud.host.Host; +import com.cloud.host.HostTagVO; +import com.cloud.host.HostVO; import com.cloud.hypervisor.Hypervisor.HypervisorType; import com.cloud.network.security.SecurityGroupVMMapVO; import com.cloud.network.security.dao.SecurityGroupVMMapDao; @@ -104,6 +113,7 @@ import com.cloud.utils.Ternary; import com.cloud.utils.component.Inject; import com.cloud.utils.component.Manager; import com.cloud.utils.db.Filter; +import com.cloud.utils.db.JoinBuilder; import com.cloud.utils.db.SearchBuilder; import com.cloud.utils.db.SearchCriteria; import com.cloud.utils.db.SearchCriteria.Func; @@ -175,6 +185,12 @@ public class QueryManagerImpl implements QueryService, Manager { @Inject private ProjectAccountJoinDao _projectAccountJoinDao; + @Inject + private HostJoinDao _hostJoinDao; + + @Inject + private HighAvailabilityManager _haMgr; + @Override public boolean configure(String name, Map params) throws ConfigurationException { _name = name; @@ -1309,5 +1325,118 @@ public class QueryManagerImpl implements QueryService, Manager { return _projectAccountJoinDao.searchAndCount(sc, searchFilter); } + @Override + public ListResponse searchForServers(ListHostsCmd cmd) { + //FIXME: do we need to support list hosts with VmId, maybe we should create another command just for this + // Right now it is handled separately outside this QueryService + s_logger.debug(">>>Searching for hosts>>>"); + Pair, Integer> hosts = searchForServersInternal(cmd); + ListResponse response = new ListResponse(); + s_logger.debug(">>>Generating Response>>>"); + List hostResponses = ViewResponseHelper.createHostResponse(cmd.getDetails(), hosts.first().toArray(new HostJoinVO[hosts.first().size()])); + response.setResponses(hostResponses, hosts.second()); + return response; + } + + public Pair, Integer> searchForServersInternal(ListHostsCmd cmd) { + + Long zoneId = _accountMgr.checkAccessAndSpecifyAuthority(UserContext.current().getCaller(), cmd.getZoneId()); + Object name = cmd.getHostName(); + Object type = cmd.getType(); + Object state = cmd.getState(); + Object pod = cmd.getPodId(); + Object cluster = cmd.getClusterId(); + Object id = cmd.getId(); + Object keyword = cmd.getKeyword(); + Object resourceState = cmd.getResourceState(); + Object haHosts = cmd.getHaHost(); + Long startIndex = cmd.getStartIndex(); + Long pageSize = cmd.getPageSizeVal(); + + Filter searchFilter = new Filter(HostJoinVO.class, "id", Boolean.TRUE, startIndex, pageSize); + + SearchBuilder sb = _hostJoinDao.createSearchBuilder(); + sb.select(null, Func.DISTINCT, sb.entity().getId()); // select distinct ids + sb.and("id", sb.entity().getId(), SearchCriteria.Op.EQ); + sb.and("name", sb.entity().getName(), SearchCriteria.Op.LIKE); + sb.and("type", sb.entity().getType(), SearchCriteria.Op.LIKE); + sb.and("status", sb.entity().getStatus(), SearchCriteria.Op.EQ); + sb.and("dataCenterId", sb.entity().getZoneId(), SearchCriteria.Op.EQ); + sb.and("podId", sb.entity().getPodId(), SearchCriteria.Op.EQ); + sb.and("clusterId", sb.entity().getClusterId(), SearchCriteria.Op.EQ); + sb.and("resourceState", sb.entity().getResourceState(), SearchCriteria.Op.EQ); + + String haTag = _haMgr.getHaTag(); + if (haHosts != null && haTag != null && !haTag.isEmpty()) { + if ((Boolean) haHosts) { + sb.and("tag", sb.entity().getTag(), SearchCriteria.Op.EQ); + } else { + sb.and("tag", sb.entity().getTag(), SearchCriteria.Op.NEQ); + //FIXME: should we have another condition say tag = null? + //hostTagSearch.or("tagNull", hostTagSearch.entity().getTag(), SearchCriteria.Op.NULL); + } + + } + + + SearchCriteria sc = sb.create(); + + if (keyword != null) { + SearchCriteria ssc = _hostJoinDao.createSearchCriteria(); + ssc.addOr("name", SearchCriteria.Op.LIKE, "%" + keyword + "%"); + ssc.addOr("status", SearchCriteria.Op.LIKE, "%" + keyword + "%"); + ssc.addOr("type", SearchCriteria.Op.LIKE, "%" + keyword + "%"); + + sc.addAnd("name", SearchCriteria.Op.SC, ssc); + } + + if (id != null) { + sc.setParameters("id", id); + } + + if (name != null) { + sc.setParameters("name", "%" + name + "%"); + } + if (type != null) { + sc.setParameters("type", "%" + type); + } + if (state != null) { + sc.setParameters("status", state); + } + if (zoneId != null) { + sc.setParameters("dataCenterId", zoneId); + } + if (pod != null) { + sc.setParameters("podId", pod); + } + if (cluster != null) { + sc.setParameters("clusterId", cluster); + } + + if (resourceState != null) { + sc.setParameters("resourceState", resourceState); + } + + if (haHosts != null && haTag != null && !haTag.isEmpty()) { + sc.setJoinParameters("hostTagSearch", "tag", haTag); + } + + // search host details by ids + Pair, Integer> uniqueHostPair = _hostJoinDao.searchAndCount(sc, searchFilter); + Integer count = uniqueHostPair.second(); + if ( count.intValue() == 0 ){ + // handle empty result cases + return uniqueHostPair; + } + List uniqueHosts = uniqueHostPair.first(); + Long[] hostIds = new Long[uniqueHosts.size()]; + int i = 0; + for (HostJoinVO v : uniqueHosts ){ + hostIds[i++] = v.getId(); + } + List hosts = _hostJoinDao.searchByIds(hostIds); + return new Pair, Integer>(hosts, count); + + } } diff --git a/server/src/com/cloud/api/query/ViewResponseHelper.java b/server/src/com/cloud/api/query/ViewResponseHelper.java index d2072753a15..bb6c66bebb4 100644 --- a/server/src/com/cloud/api/query/ViewResponseHelper.java +++ b/server/src/com/cloud/api/query/ViewResponseHelper.java @@ -21,9 +21,11 @@ import java.util.EnumSet; import java.util.Hashtable; import java.util.List; +import org.apache.cloudstack.api.ApiConstants.HostDetails; import org.apache.cloudstack.api.ApiConstants.VMDetails; import org.apache.cloudstack.api.response.DomainRouterResponse; import org.apache.cloudstack.api.response.EventResponse; +import org.apache.cloudstack.api.response.HostResponse; import org.apache.cloudstack.api.response.InstanceGroupResponse; import org.apache.cloudstack.api.response.ProjectAccountResponse; import org.apache.cloudstack.api.response.ProjectInvitationResponse; @@ -37,6 +39,7 @@ import org.apache.log4j.Logger; import com.cloud.api.ApiDBUtils; import com.cloud.api.query.vo.DomainRouterJoinVO; import com.cloud.api.query.vo.EventJoinVO; +import com.cloud.api.query.vo.HostJoinVO; import com.cloud.api.query.vo.InstanceGroupJoinVO; import com.cloud.api.query.vo.ProjectAccountJoinVO; import com.cloud.api.query.vo.ProjectInvitationJoinVO; @@ -193,4 +196,22 @@ public class ViewResponseHelper { } return respList; } + + public static List createHostResponse(EnumSet details, HostJoinVO... hosts) { + Hashtable vrDataList = new Hashtable(); + // Initialise the vrdatalist with the input data + for (HostJoinVO vr : hosts) { + HostResponse vrData = vrDataList.get(vr.getId()); + if ( vrData == null ){ + // first time encountering this vm + vrData = ApiDBUtils.newHostResponse(vr, details); + } + else{ + // update tags + vrData = ApiDBUtils.fillHostDetails(vrData, vr); + } + vrDataList.put(vr.getId(), vrData); + } + return new ArrayList(vrDataList.values()); + } } diff --git a/server/src/com/cloud/api/query/dao/HostJoinDao.java b/server/src/com/cloud/api/query/dao/HostJoinDao.java new file mode 100644 index 00000000000..1a2129998ed --- /dev/null +++ b/server/src/com/cloud/api/query/dao/HostJoinDao.java @@ -0,0 +1,38 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. +package com.cloud.api.query.dao; + +import java.util.EnumSet; +import java.util.List; + +import org.apache.cloudstack.api.ApiConstants.HostDetails; +import org.apache.cloudstack.api.response.HostResponse; +import com.cloud.api.query.vo.HostJoinVO; +import com.cloud.host.Host; +import com.cloud.utils.db.GenericDao; + +public interface HostJoinDao extends GenericDao { + + HostResponse newHostResponse(HostJoinVO host, EnumSet details); + + HostResponse setHostResponse(HostResponse response, HostJoinVO host); + + List newHostView(Host group); + + List searchByIds(Long... ids); + +} diff --git a/server/src/com/cloud/api/query/dao/HostJoinDaoImpl.java b/server/src/com/cloud/api/query/dao/HostJoinDaoImpl.java new file mode 100644 index 00000000000..aa09d0933a5 --- /dev/null +++ b/server/src/com/cloud/api/query/dao/HostJoinDaoImpl.java @@ -0,0 +1,222 @@ +// 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.query.dao; + +import java.text.DecimalFormat; +import java.util.Date; +import java.util.EnumSet; +import java.util.Iterator; +import java.util.List; +import java.util.Set; + +import javax.ejb.Local; + +import org.apache.log4j.Logger; + +import com.cloud.api.ApiDBUtils; +import com.cloud.api.query.vo.HostJoinVO; +import com.cloud.host.Host; +import com.cloud.host.HostStats; + +import org.apache.cloudstack.api.ApiConstants.HostDetails; +import org.apache.cloudstack.api.response.HostResponse; +import com.cloud.storage.StorageStats; +import com.cloud.utils.db.GenericDaoBase; +import com.cloud.utils.db.SearchBuilder; +import com.cloud.utils.db.SearchCriteria; + + +@Local(value={HostJoinDao.class}) +public class HostJoinDaoImpl extends GenericDaoBase implements HostJoinDao { + public static final Logger s_logger = Logger.getLogger(HostJoinDaoImpl.class); + + private SearchBuilder vrSearch; + + private SearchBuilder vrIdSearch; + + + protected HostJoinDaoImpl() { + + 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 host_view WHERE "; + } + + + + @Override + public HostResponse newHostResponse(HostJoinVO host, EnumSet details) { + HostResponse hostResponse = new HostResponse(); + hostResponse.setId(host.getUuid()); + hostResponse.setCapabilities(host.getCapabilities()); + hostResponse.setClusterId(host.getClusterUuid()); + hostResponse.setCpuNumber(host.getCpus()); + hostResponse.setZoneId(host.getUuid()); + hostResponse.setDisconnectedOn(host.getDisconnectedOn()); + hostResponse.setHypervisor(host.getHypervisorType()); + hostResponse.setHostType(host.getType()); + hostResponse.setLastPinged(new Date(host.getLastPinged())); + hostResponse.setManagementServerId(host.getManagementServerId()); + hostResponse.setName(host.getName()); + hostResponse.setPodId(host.getPodUuid()); + hostResponse.setRemoved(host.getRemoved()); + hostResponse.setCpuSpeed(host.getSpeed()); + hostResponse.setState(host.getStatus()); + hostResponse.setIpAddress(host.getPrivateIpAddress()); + hostResponse.setVersion(host.getVersion()); + hostResponse.setCreated(host.getCreated()); + + if (details.contains(HostDetails.all) || details.contains(HostDetails.capacity) + || details.contains(HostDetails.stats) || details.contains(HostDetails.events)) { + + hostResponse.setOsCategoryId(host.getOsCategoryUuid()); + hostResponse.setOsCategoryName(host.getOsCategoryName()); + hostResponse.setZoneName(host.getZoneName()); + hostResponse.setPodName(host.getPodName()); + if ( host.getClusterId() > 0) { + hostResponse.setClusterName(host.getClusterName()); + hostResponse.setClusterType(host.getClusterType().toString()); + } + } + + DecimalFormat decimalFormat = new DecimalFormat("#.##"); + if (host.getType() == Host.Type.Routing) { + if (details.contains(HostDetails.all) || details.contains(HostDetails.capacity)) { + // set allocated capacities + Long mem = host.getMemReservedCapacity() + host.getMemUsedCapacity(); + Long cpu = host.getCpuReservedCapacity() + host.getCpuReservedCapacity(); + + hostResponse.setMemoryAllocated(mem); + hostResponse.setMemoryTotal(host.getTotalMemory()); + + String hostTags = host.getTag(); + hostResponse.setHostTags(host.getTag()); + + String haTag = ApiDBUtils.getHaTag(); + if (haTag != null && !haTag.isEmpty() && hostTags != null && !hostTags.isEmpty()) { + if (haTag.equalsIgnoreCase(hostTags)) { + hostResponse.setHaHost(true); + } else { + hostResponse.setHaHost(false); + } + } else { + hostResponse.setHaHost(false); + } + + hostResponse.setHypervisorVersion(host.getHypervisorVersion()); + + String cpuAlloc = decimalFormat.format(((float) cpu / (float) (host.getCpus() * host.getSpeed())) * 100f) + "%"; + hostResponse.setCpuAllocated(cpuAlloc); + String cpuWithOverprovisioning = new Float(host.getCpus() * host.getSpeed() * ApiDBUtils.getCpuOverprovisioningFactor()).toString(); + hostResponse.setCpuWithOverprovisioning(cpuWithOverprovisioning); + } + + if (details.contains(HostDetails.all) || details.contains(HostDetails.stats)) { + // set CPU/RAM/Network stats + String cpuUsed = null; + HostStats hostStats = ApiDBUtils.getHostStatistics(host.getId()); + if (hostStats != null) { + float cpuUtil = (float) hostStats.getCpuUtilization(); + cpuUsed = decimalFormat.format(cpuUtil) + "%"; + hostResponse.setCpuUsed(cpuUsed); + hostResponse.setMemoryUsed((new Double(hostStats.getUsedMemory())).longValue()); + hostResponse.setNetworkKbsRead((new Double(hostStats.getNetworkReadKBs())).longValue()); + hostResponse.setNetworkKbsWrite((new Double(hostStats.getNetworkWriteKBs())).longValue()); + + } + } + + } else if (host.getType() == Host.Type.SecondaryStorage) { + StorageStats secStorageStats = ApiDBUtils.getSecondaryStorageStatistics(host.getId()); + if (secStorageStats != null) { + hostResponse.setDiskSizeTotal(secStorageStats.getCapacityBytes()); + hostResponse.setDiskSizeAllocated(secStorageStats.getByteUsed()); + } + } + + hostResponse.setLocalStorageActive(ApiDBUtils.isLocalStorageActiveOnHost(host.getId())); + + if (details.contains(HostDetails.all) || details.contains(HostDetails.events)) { + Set possibleEvents = host.getStatus().getPossibleEvents(); + if ((possibleEvents != null) && !possibleEvents.isEmpty()) { + String events = ""; + Iterator iter = possibleEvents.iterator(); + while (iter.hasNext()) { + com.cloud.host.Status.Event event = iter.next(); + events += event.toString(); + if (iter.hasNext()) { + events += "; "; + } + } + hostResponse.setEvents(events); + } + } + + hostResponse.setResourceState(host.getResourceState().toString()); + hostResponse.setObjectName("host"); + + return hostResponse; + } + + + + + + + @Override + public HostResponse setHostResponse(HostResponse response, HostJoinVO host) { + String tag = host.getTag(); + if (tag != null) { + if ( response.getHostTags() != null && response.getHostTags().length() > 0){ + response.setHostTags(response.getHostTags() + "," + tag); + } + else{ + response.setHostTags(tag); + } + } + return response; + } + + + + @Override + public List newHostView(Host host) { + SearchCriteria sc = vrIdSearch.create(); + sc.setParameters("id", host.getId()); + return searchIncludingRemoved(sc, null, null, false); + + } + + + + @Override + public List searchByIds(Long... ids) { + SearchCriteria sc = vrSearch.create(); + sc.setParameters("idIN", ids); + return searchIncludingRemoved(sc, null, null, false); + } + + + + +} diff --git a/server/src/com/cloud/api/query/vo/HostJoinVO.java b/server/src/com/cloud/api/query/vo/HostJoinVO.java new file mode 100644 index 00000000000..83de5f6a0db --- /dev/null +++ b/server/src/com/cloud/api/query/vo/HostJoinVO.java @@ -0,0 +1,503 @@ +// 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.query.vo; + +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 javax.persistence.Temporal; +import javax.persistence.TemporalType; + +import com.cloud.host.Status; +import com.cloud.host.Host.Type; +import com.cloud.hypervisor.Hypervisor.HypervisorType; +import com.cloud.org.Cluster; +import com.cloud.resource.ResourceState; +import com.cloud.utils.db.GenericDao; + +/** + * Host DB view. + * @author minc + * + */ +@Entity +@Table(name="host_view") +public class HostJoinVO extends BaseViewVO { + + @Column(name="id") + private long id; + + @Column(name="uuid") + private String uuid; + + @Column(name="name") + private String name; + + + @Column(name="status") + private Status status = null; + + @Column(name="type") + @Enumerated(value=EnumType.STRING) + private Type type; + + @Column(name="private_ip_address") + private String privateIpAddress; + + @Column(name="disconnected") + @Temporal(value=TemporalType.TIMESTAMP) + private Date disconnectedOn; + + @Column(name="version") + private String version; + + @Column(name="hypervisor_type") + @Enumerated(value=EnumType.STRING) + private HypervisorType hypervisorType; + + @Column(name="hypervisor_version") + private String hypervisorVersion; + + @Column(name="capabilities") + private String caps; + + @Column(name="last_ping") + private long lastPinged; + + @Column(name=GenericDao.CREATED_COLUMN) + private Date created; + + @Column(name=GenericDao.REMOVED_COLUMN) + private Date removed; + + @Column(name="resource_state") + @Enumerated(value=EnumType.STRING) + private ResourceState resourceState; + + @Column(name="mgmt_server_id") + private Long managementServerId; + + @Column(name="cpus") + private Integer cpus; + + @Column(name="speed") + private Long speed; + + @Column(name="ram") + private long totalMemory; + + @Column(name="cluster_id") + private long clusterId; + + @Column(name="cluster_uuid") + private String clusterUuid; + + @Column(name="cluster_name") + private String clusterName; + + @Column(name="cluster_type") + @Enumerated(value=EnumType.STRING) + Cluster.ClusterType clusterType; + + @Column(name="data_center_id") + private long zoneId; + + @Column(name="data_center_uuid") + private String zoneUuid; + + @Column(name="data_center_name") + private String zoneName; + + @Column(name="pod_id") + private long podId; + + @Column(name="pod_uuid") + private String podUuid; + + @Column(name="pod_name") + private String podName; + + + @Column(name="guest_os_category_id") + private long osCategoryId; + + @Column(name="guest_os_category_uuid") + private String osCategoryUuid; + + @Column(name="guest_os_category_name") + private String osCategoryName; + + @Column(name="tag") + private String tag; + + @Column(name="memory_used_capacity") + private long memUsedCapacity; + + @Column(name="memory_reserved_capacity") + private long memReservedCapacity; + + @Column(name="cpu_used_capacity") + private long cpuUsedCapacity; + + @Column(name="cpu_reserved_capacity") + private long cpuReservedCapacity; + + @Column(name="job_id") + private long jobId; + + @Column(name="job_uuid") + private String jobUuid; + + @Column(name="job_status") + private int jobStatus; + + + /* (non-Javadoc) + * @see com.cloud.api.query.vo.BaseViewVO#getId() + */ + @Override + public long getId() { + return this.id; + } + + /* (non-Javadoc) + * @see com.cloud.api.query.vo.BaseViewVO#setId(long) + */ + @Override + public void setId(long id) { + this.id = id; + } + + + public String getUuid() { + return uuid; + } + + public void setUuid(String uuid) { + this.uuid = uuid; + } + + public String getVersion() { + return version; + } + + public void setVersion(String version) { + this.version = version; + } + + public long getZoneId() { + return zoneId; + } + + public void setZoneId(long zoneId) { + this.zoneId = zoneId; + } + + public String getZoneUuid() { + return zoneUuid; + } + + public void setZoneUuid(String zoneUuid) { + this.zoneUuid = zoneUuid; + } + + public String getZoneName() { + return zoneName; + } + + public void setZoneName(String zoneName) { + this.zoneName = zoneName; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public Status getStatus() { + return status; + } + + public void setStatus(Status status) { + this.status = status; + } + + public Type getType() { + return type; + } + + public void setType(Type type) { + this.type = type; + } + + public String getPrivateIpAddress() { + return privateIpAddress; + } + + public void setPrivateIpAddress(String privateIpAddress) { + this.privateIpAddress = privateIpAddress; + } + + public Date getDisconnectedOn() { + return disconnectedOn; + } + + public void setDisconnectedOn(Date disconnectedOn) { + this.disconnectedOn = disconnectedOn; + } + + public HypervisorType getHypervisorType() { + return hypervisorType; + } + + public void setHypervisorType(HypervisorType hypervisorType) { + this.hypervisorType = hypervisorType; + } + + public String getHypervisorVersion() { + return hypervisorVersion; + } + + public void setHypervisorVersion(String hypervisorVersion) { + this.hypervisorVersion = hypervisorVersion; + } + + public String getCapabilities() { + return caps; + } + + public void setCapabilities(String caps) { + this.caps = caps; + } + + public long getLastPinged() { + return lastPinged; + } + + public void setLastPinged(long lastPinged) { + this.lastPinged = lastPinged; + } + + 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 ResourceState getResourceState() { + return resourceState; + } + + public void setResourceState(ResourceState resourceState) { + this.resourceState = resourceState; + } + + public Long getManagementServerId() { + return managementServerId; + } + + public void setManagementServerId(Long managementServerId) { + this.managementServerId = managementServerId; + } + + public Integer getCpus() { + return cpus; + } + + public void setCpus(Integer cpus) { + this.cpus = cpus; + } + + public Long getSpeed() { + return speed; + } + + public void setSpeed(Long speed) { + this.speed = speed; + } + + public long getTotalMemory() { + return totalMemory; + } + + public void setTotalMemory(long totalMemory) { + this.totalMemory = totalMemory; + } + + public long getClusterId() { + return clusterId; + } + + public void setClusterId(long clusterId) { + this.clusterId = clusterId; + } + + public String getClusterUuid() { + return clusterUuid; + } + + public void setClusterUuid(String clusterUuid) { + this.clusterUuid = clusterUuid; + } + + public String getClusterName() { + return clusterName; + } + + public void setClusterName(String clusterName) { + this.clusterName = clusterName; + } + + public Cluster.ClusterType getClusterType() { + return clusterType; + } + + public void setClusterType(Cluster.ClusterType clusterType) { + this.clusterType = clusterType; + } + + public long getOsCategoryId() { + return osCategoryId; + } + + public void setOsCategoryId(long osCategoryId) { + this.osCategoryId = osCategoryId; + } + + public String getOsCategoryUuid() { + return osCategoryUuid; + } + + public void setOsCategoryUuid(String osCategoryUuid) { + this.osCategoryUuid = osCategoryUuid; + } + + public String getOsCategoryName() { + return osCategoryName; + } + + public void setOsCategoryName(String osCategoryName) { + this.osCategoryName = osCategoryName; + } + + 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 String getPodUuid() { + return podUuid; + } + + public void setPodUuid(String podUuid) { + this.podUuid = podUuid; + } + + public String getPodName() { + return podName; + } + + public void setPodName(String podName) { + this.podName = podName; + } + + public long getMemUsedCapacity() { + return memUsedCapacity; + } + + public void setMemUsedCapacity(long memUsedCapacity) { + this.memUsedCapacity = memUsedCapacity; + } + + public long getMemReservedCapacity() { + return memReservedCapacity; + } + + public void setMemReservedCapacity(long memReservedCapacity) { + this.memReservedCapacity = memReservedCapacity; + } + + public long getCpuUsedCapacity() { + return cpuUsedCapacity; + } + + public void setCpuUsedCapacity(long cpuUsedCapacity) { + this.cpuUsedCapacity = cpuUsedCapacity; + } + + public long getCpuReservedCapacity() { + return cpuReservedCapacity; + } + + public void setCpuReservedCapacity(long cpuReservedCapacity) { + this.cpuReservedCapacity = cpuReservedCapacity; + } + + public String getTag() { + return tag; + } + + public void setTag(String tag) { + this.tag = tag; + } + + +} diff --git a/server/src/com/cloud/api/response/ApiResponseSerializer.java b/server/src/com/cloud/api/response/ApiResponseSerializer.java index af37aa2807e..470cc5f9587 100644 --- a/server/src/com/cloud/api/response/ApiResponseSerializer.java +++ b/server/src/com/cloud/api/response/ApiResponseSerializer.java @@ -49,6 +49,7 @@ public class ApiResponseSerializer { private static final Logger s_logger = Logger.getLogger(ApiResponseSerializer.class.getName()); public static String toSerializedString(ResponseObject result, String responseType) { + s_logger.trace("===Serializing Response==="); if (BaseCmd.RESPONSE_TYPE_JSON.equalsIgnoreCase(responseType)) { return toJSONSerializedString(result); } else { @@ -70,7 +71,7 @@ public class ApiResponseSerializer { public static String toJSONSerializedString(ResponseObject result) { if (result != null) { Gson gson = ApiResponseGsonHelper.getBuilder().excludeFieldsWithModifiers(Modifier.TRANSIENT).create(); - + StringBuilder sb = new StringBuilder(); sb.append("{ \"").append(result.getResponseName()).append("\" : "); @@ -81,15 +82,15 @@ public class ApiResponseSerializer { if (nonZeroCount) { sb.append("{ \"").append(ApiConstants.COUNT).append("\":").append(count); } - + if ((responses != null) && !responses.isEmpty()) { - String jsonStr = gson.toJson(responses.get(0)); + String jsonStr = gson.toJson(responses.get(0)); jsonStr = unescape(jsonStr); if (nonZeroCount) { sb.append(" ,\"").append(responses.get(0).getObjectName()).append("\" : [ ").append(jsonStr); } - + for (int i = 1; i < ((ListResponse) result).getResponses().size(); i++) { jsonStr = gson.toJson(responses.get(i)); jsonStr = unescape(jsonStr); @@ -97,10 +98,10 @@ public class ApiResponseSerializer { } sb.append(" ] }"); } else { - if (!nonZeroCount){ + if (!nonZeroCount){ sb.append("{"); } - + sb.append(" }"); } } else if (result instanceof SuccessResponse) { @@ -108,7 +109,7 @@ public class ApiResponseSerializer { } else if (result instanceof ExceptionResponse) { String jsonErrorText = gson.toJson((ExceptionResponse) result); jsonErrorText = unescape(jsonErrorText); - sb.append(jsonErrorText); + sb.append(jsonErrorText); } else { String jsonStr = gson.toJson(result); if ((jsonStr != null) && !"".equals(jsonStr)) { @@ -178,7 +179,7 @@ public class ApiResponseSerializer { } return fields.toArray(new Field[] {}); } - + private static void serializeResponseObjFieldsXML(StringBuilder sb, ResponseObject obj) { boolean isAsync = false; if (obj instanceof AsyncJobResponse) @@ -227,26 +228,26 @@ public class ApiResponseSerializer { serializeResponseObjXML(sb, subObj); } else if (value instanceof IdentityProxy) { // Only exception reponses carry a list of IdentityProxy objects. - IdentityProxy idProxy = (IdentityProxy)value; + IdentityProxy idProxy = (IdentityProxy)value; String id = (idProxy.getValue() != null ? String.valueOf(idProxy.getValue()) : ""); if(!id.isEmpty()) { IdentityDao identityDao = new IdentityDaoImpl(); id = identityDao.getIdentityUuid(idProxy.getTableName(), id); - } + } if(id != null && !id.isEmpty()) { // If this is the first IdentityProxy field encountered, put in a uuidList tag. if (!usedUuidList) { sb.append("<").append(serializedName.value()).append(">"); usedUuidList = true; } - sb.append("").append(id).append(""); + sb.append("").append(id).append(""); } // Append the new idFieldName property also. String idFieldName = idProxy.getidFieldName(); if (idFieldName != null) { - sb.append("").append(idFieldName).append(""); + sb.append("").append(idFieldName).append(""); } - } + } } if (usedUuidList) { // close the uuidList. @@ -254,8 +255,8 @@ public class ApiResponseSerializer { } } else if (fieldValue instanceof Date) { sb.append("<").append(serializedName.value()).append(">").append(BaseCmd.getDateString((Date) fieldValue)). - append(""); - } else if (fieldValue instanceof IdentityProxy) { + append(""); + } else if (fieldValue instanceof IdentityProxy) { IdentityProxy idProxy = (IdentityProxy)fieldValue; String id = (idProxy.getValue() != null ? String.valueOf(idProxy.getValue()) : ""); if(!id.isEmpty()) { @@ -273,7 +274,7 @@ public class ApiResponseSerializer { if (!(obj instanceof ExceptionResponse)) { resultString = encodeParam(resultString); } - + sb.append("<").append(serializedName.value()).append(">").append(resultString).append(""); } } @@ -340,10 +341,10 @@ public class ApiResponseSerializer { resultString.append(singleChar); } } - + return resultString.toString(); } - + private static String encodeParam(String value) { if (!ApiServer.encodeApiResponse) { return value; @@ -355,5 +356,5 @@ public class ApiResponseSerializer { } return value; } - + } diff --git a/server/src/com/cloud/configuration/DefaultComponentLibrary.java b/server/src/com/cloud/configuration/DefaultComponentLibrary.java index d41bda67324..e1616c000b4 100755 --- a/server/src/com/cloud/configuration/DefaultComponentLibrary.java +++ b/server/src/com/cloud/configuration/DefaultComponentLibrary.java @@ -33,6 +33,7 @@ import com.cloud.api.query.dao.ProjectJoinDaoImpl; import com.cloud.api.query.dao.ResourceTagJoinDaoImpl; import com.cloud.api.query.dao.SecurityGroupJoinDaoImpl; import com.cloud.api.query.dao.UserVmJoinDaoImpl; +import com.cloud.api.query.dao.HostJoinDaoImpl; import com.cloud.async.AsyncJobExecutorContextImpl; import com.cloud.async.AsyncJobManagerImpl; import com.cloud.async.SyncQueueManagerImpl; @@ -236,6 +237,7 @@ public class DefaultComponentLibrary extends ComponentLibraryBase implements Com addDao("ProjectJoinDao", ProjectJoinDaoImpl.class); addDao("ProjectAccountJoinDao", ProjectAccountJoinDaoImpl.class); addDao("ProjectInvitationJoinDao", ProjectInvitationJoinDaoImpl.class); + addDao("HostJoinDao", HostJoinDaoImpl.class); ComponentInfo> info = addDao("ServiceOfferingDao", ServiceOfferingDaoImpl.class); info.addParameter("cache.size", "50"); info.addParameter("cache.time.to.live", "600"); diff --git a/server/src/com/cloud/resource/ResourceManagerImpl.java b/server/src/com/cloud/resource/ResourceManagerImpl.java index 59873479eb1..cfdb8becdcd 100755 --- a/server/src/com/cloud/resource/ResourceManagerImpl.java +++ b/server/src/com/cloud/resource/ResourceManagerImpl.java @@ -181,22 +181,22 @@ public class ResourceManagerImpl implements ResourceManager, ResourceService, Ma @Inject protected ConfigurationDao _configDao; @Inject - protected HostTagsDao _hostTagsDao; + protected HostTagsDao _hostTagsDao; @Inject protected GuestOSCategoryDao _guestOSCategoryDao; - @Inject + @Inject protected StoragePoolDao _storagePoolDao; @Inject protected DataCenterIpAddressDao _privateIPAddressDao; @Inject protected IPAddressDao _publicIPAddressDao; @Inject - protected VirtualMachineManager _vmMgr; + protected VirtualMachineManager _vmMgr; @Inject - protected VMInstanceDao _vmDao; + protected VMInstanceDao _vmDao; @Inject protected HighAvailabilityManager _haMgr; - @Inject + @Inject protected StorageService _storageSvr; @Inject(adapter = Discoverer.class) protected Adapters _discoverers; @@ -581,7 +581,7 @@ public class ResourceManagerImpl implements ResourceManager, ResourceService, Ma if (pod == null) { throw new InvalidParameterValueException("Can't find pod by id " + podId); } - // check if pod belongs to the zone + // check if pod belongs to the zone if (!Long.valueOf(pod.getDataCenterId()).equals(dcId)) { InvalidParameterValueException ex = new InvalidParameterValueException("Pod with specified podId" + podId + " doesn't belong to the zone with specified zoneId" + dcId); ex.addProxyObject(pod, podId, "podId"); @@ -643,7 +643,7 @@ public class ResourceManagerImpl implements ResourceManager, ResourceService, Ma CloudRuntimeException ex = new CloudRuntimeException("Unable to create cluster " + clusterName + " in pod with specified podId and data center with specified dcID", e); ex.addProxyObject(pod, podId, "podId"); ex.addProxyObject(zone, dcId, "dcId"); - throw ex; + throw ex; } } clusterId = cluster.getId(); @@ -744,7 +744,7 @@ public class ResourceManagerImpl implements ResourceManager, ResourceService, Ma // Verify that host exists HostVO host = _hostDao.findById(hostId); if (host == null) { - throw new InvalidParameterValueException("Host with id " + hostId + " doesn't exist"); + throw new InvalidParameterValueException("Host with id " + hostId + " doesn't exist"); } _accountMgr.checkAccessAndSpecifyAuthority(UserContext.current().getCaller(), host.getDataCenterId()); @@ -752,7 +752,7 @@ public class ResourceManagerImpl implements ResourceManager, ResourceService, Ma * TODO: check current agent status and updateAgentStatus to removed. If it was already removed, that means * someone is deleting host concurrently, return. And consider the situation of CloudStack shutdown during delete. * A global lock? - * + * */ AgentAttache attache = _agentMgr.findAttache(hostId); // Get storage pool host mappings here because they can be removed as a part of handleDisconnect later @@ -847,7 +847,7 @@ public class ResourceManagerImpl implements ResourceManager, ResourceService, Ma @DB public boolean deleteCluster(DeleteClusterCmd cmd) { Transaction txn = Transaction.currentTxn(); - try { + try { txn.start(); ClusterVO cluster = _clusterDao.lockRow(cmd.getId(), true); if (cluster == null) { @@ -973,7 +973,7 @@ public class ResourceManagerImpl implements ResourceManager, ResourceService, Ma try { txn.start(); _clusterDao.update(cluster.getId(), cluster); - txn.commit(); + txn.commit(); } catch (Exception e) { s_logger.error("Unable to update cluster due to " + e.getMessage(), e); throw new CloudRuntimeException("Failed to update cluster. Please contact Cloud Support."); @@ -989,12 +989,12 @@ public class ResourceManagerImpl implements ResourceManager, ResourceService, Ma cluster.setManagedState(Managed.ManagedState.PrepareUnmanaged); _clusterDao.update(cluster.getId(), cluster); txn.commit(); - List hosts = listAllUpAndEnabledHosts(Host.Type.Routing, cluster.getId(), cluster.getPodId(), cluster.getDataCenterId()); + List hosts = listAllUpAndEnabledHosts(Host.Type.Routing, cluster.getId(), cluster.getPodId(), cluster.getDataCenterId()); for( HostVO host : hosts ) { - if(host.getType().equals(Host.Type.Routing) && !host.getStatus().equals(Status.Down) && !host.getStatus().equals(Status.Disconnected) + if(host.getType().equals(Host.Type.Routing) && !host.getStatus().equals(Status.Down) && !host.getStatus().equals(Status.Disconnected) && !host.getStatus().equals(Status.Up) && !host.getStatus().equals(Status.Alert) ) { String msg = "host " + host.getPrivateIpAddress() + " should not be in " + host.getStatus().toString() + " status"; - throw new CloudRuntimeException("PrepareUnmanaged Failed due to " + msg); + throw new CloudRuntimeException("PrepareUnmanaged Failed due to " + msg); } } @@ -1011,9 +1011,9 @@ public class ResourceManagerImpl implements ResourceManager, ResourceService, Ma Thread.sleep(5 * 1000); } catch (Exception e) { } - hosts = listAllUpAndEnabledHosts(Host.Type.Routing, cluster.getId(), cluster.getPodId(), cluster.getDataCenterId()); + hosts = listAllUpAndEnabledHosts(Host.Type.Routing, cluster.getId(), cluster.getPodId(), cluster.getDataCenterId()); for( HostVO host : hosts ) { - if ( !host.getStatus().equals(Status.Down) && !host.getStatus().equals(Status.Disconnected) + if ( !host.getStatus().equals(Status.Down) && !host.getStatus().equals(Status.Disconnected) && !host.getStatus().equals(Status.Alert)) { lsuccess = false; break; @@ -1025,7 +1025,7 @@ public class ResourceManagerImpl implements ResourceManager, ResourceService, Ma } } if ( success == false ) { - throw new CloudRuntimeException("PrepareUnmanaged Failed due to some hosts are still in UP status after 5 Minutes, please try later "); + throw new CloudRuntimeException("PrepareUnmanaged Failed due to some hosts are still in UP status after 5 Minutes, please try later "); } } finally { txn.start(); @@ -1033,7 +1033,7 @@ public class ResourceManagerImpl implements ResourceManager, ResourceService, Ma _clusterDao.update(cluster.getId(), cluster); txn.commit(); } - } else if( newManagedState.equals(Managed.ManagedState.Managed)) { + } else if( newManagedState.equals(Managed.ManagedState.Managed)) { txn.start(); cluster.setManagedState(Managed.ManagedState.Managed); _clusterDao.update(cluster.getId(), cluster); @@ -1159,7 +1159,7 @@ public class ResourceManagerImpl implements ResourceManager, ResourceService, Ma throw new InvalidParameterValueException("There are other servers in PrepareForMaintenance OR ErrorInMaintenance STATUS in cluster " + host.getClusterId()); } - if (_storageMgr.isLocalStorageActiveOnHost(host)) { + if (_storageMgr.isLocalStorageActiveOnHost(host.getId())) { throw new InvalidParameterValueException("There are active VMs using the host's local storage pool. Please stop all VMs on this host that use local storage."); } @@ -1353,7 +1353,7 @@ public class ResourceManagerImpl implements ResourceManager, ResourceService, Ma public void unregisterResourceStateAdapter(String name) { synchronized (_resourceStateAdapters) { _resourceStateAdapters.remove(name); - } + } } private Object dispatchToStateAdapters(ResourceStateAdapter.Event event, boolean singleTaker, Object... args) { @@ -1605,7 +1605,7 @@ public class ResourceManagerImpl implements ResourceManager, ResourceService, Ma } } } - + if (s_logger.isDebugEnabled()) { new Request(-1l, -1l, cmds, true, false).logD("Startup request from directly connected host: ", true); } @@ -1646,7 +1646,7 @@ public class ResourceManagerImpl implements ResourceManager, ResourceService, Ma } } } - + if (tempHost != null) { /* Change agent status to Alert */ _agentMgr.agentStatusTransitTo(tempHost, Status.Event.AgentDisconnected, _nodeId); @@ -1754,7 +1754,7 @@ public class ResourceManagerImpl implements ResourceManager, ResourceService, Ma host.setCpus(ssCmd.getCpus()); host.setTotalMemory(ssCmd.getMemory()); host.setSpeed(ssCmd.getSpeed()); - host.setHypervisorType(hyType); + host.setHypervisorType(hyType); return host; } diff --git a/server/src/com/cloud/server/ManagementServerImpl.java b/server/src/com/cloud/server/ManagementServerImpl.java index 8c73bad98a6..79a325c8957 100755 --- a/server/src/com/cloud/server/ManagementServerImpl.java +++ b/server/src/com/cloud/server/ManagementServerImpl.java @@ -924,23 +924,6 @@ public class ManagementServerImpl implements ManagementServer { return new Pair, Integer>(result.first(), result.second()); } - @Override - public List searchForServers(ListHostsCmd cmd) { - - Long zoneId = _accountMgr.checkAccessAndSpecifyAuthority(UserContext.current().getCaller(), cmd.getZoneId()); - Object name = cmd.getHostName(); - Object type = cmd.getType(); - Object state = cmd.getState(); - Object pod = cmd.getPodId(); - Object cluster = cmd.getClusterId(); - Object id = cmd.getId(); - Object keyword = cmd.getKeyword(); - Object resourceState = cmd.getResourceState(); - Object haHosts = cmd.getHaHost(); - - return searchForServers(cmd.getStartIndex(), cmd.getPageSizeVal(), name, type, state, zoneId, pod, cluster, id, keyword, resourceState, - haHosts); - } @Override public Pair, List> listHostsForMigrationOfVM(Long vmId, Long startIndex, Long pageSize) { diff --git a/server/src/com/cloud/storage/StorageManager.java b/server/src/com/cloud/storage/StorageManager.java index ce00cbf4e81..97853ac76de 100755 --- a/server/src/com/cloud/storage/StorageManager.java +++ b/server/src/com/cloud/storage/StorageManager.java @@ -53,28 +53,28 @@ public interface StorageManager extends StorageService, Manager { * @return absolute ISO path */ public Pair getAbsoluteIsoPath(long templateId, long dataCenterId); - + /** * Returns the URL of the secondary storage host * @param zoneId * @return URL */ public String getSecondaryStorageURL(long zoneId); - + /** * Returns a comma separated list of tags for the specified storage pool * @param poolId * @return comma separated list of tags */ public String getStoragePoolTags(long poolId); - + /** * Returns the secondary storage host * @param zoneId * @return secondary storage host */ public HostVO getSecondaryStorageHost(long zoneId); - + /** * Returns the secondary storage host * @param zoneId @@ -89,7 +89,7 @@ public interface StorageManager extends StorageService, Manager { * @param destPoolPodId * @param destPoolClusterId * @return VolumeVO - * @throws ConcurrentOperationException + * @throws ConcurrentOperationException */ VolumeVO moveVolume(VolumeVO volume, long destPoolDcId, Long destPoolPodId, Long destPoolClusterId, HypervisorType dataDiskHyperType) throws ConcurrentOperationException; @@ -114,10 +114,10 @@ public interface StorageManager extends StorageService, Manager { /** * Marks the specified volume as destroyed in the management server database. The expunge thread will delete the volume from its storage pool. * @param volume - * @return + * @return */ boolean destroyVolume(VolumeVO volume) throws ConcurrentOperationException; - + /** Create capacity entries in the op capacity table * @param storagePool */ @@ -136,7 +136,7 @@ public interface StorageManager extends StorageService, Manager { Answer[] sendToPool(StoragePool pool, Commands cmds) throws StorageUnavailableException; Pair sendToPool(StoragePool pool, long[] hostIdsToTryFirst, List hostIdsToAvoid, Commands cmds) throws StorageUnavailableException; Pair sendToPool(StoragePool pool, long[] hostIdsToTryFirst, List hostIdsToAvoid, Command cmd) throws StorageUnavailableException; - + /** * Checks that one of the following is true: * 1. The volume is not attached to any VM @@ -145,21 +145,21 @@ public interface StorageManager extends StorageService, Manager { * @return true if one of the above conditions is true */ boolean volumeInactive(VolumeVO volume); - + String getVmNameOnVolume(VolumeVO volume); - + /** * Checks if a host has running VMs that are using its local storage pool. * @return true if local storage is active on the host */ - boolean isLocalStorageActiveOnHost(Host host); - + boolean isLocalStorageActiveOnHost(Long hostId); + /** * Cleans up storage pools by removing unused templates. * @param recurring - true if this cleanup is part of a recurring garbage collection thread */ void cleanupStorage(boolean recurring); - + String getPrimaryStorageNameLabel(VolumeVO volume); /** @@ -176,16 +176,16 @@ public interface StorageManager extends StorageService, Manager { */ DiskProfile allocateRawVolume(Type type, String name, DiskOfferingVO offering, Long size, T vm, Account owner); DiskProfile allocateTemplatedVolume(Type type, String name, DiskOfferingVO offering, VMTemplateVO template, T vm, Account owner); - + void createCapacityEntry(StoragePoolVO storagePool, short capacityType, long allocated); - + void prepare(VirtualMachineProfile vm, DeployDestination dest) throws StorageUnavailableException, InsufficientStorageCapacityException, ConcurrentOperationException; void release(VirtualMachineProfile profile); void cleanupVolumes(long vmId) throws ConcurrentOperationException; - + void prepareForMigration(VirtualMachineProfile vm, DeployDestination dest); Answer sendToPool(StoragePool pool, long[] hostIdsToTryFirst, Command cmd) throws StorageUnavailableException; @@ -217,7 +217,7 @@ public interface StorageManager extends StorageService, Manager { boolean stateTransitTo(Volume vol, Event event) throws NoTransitionException; - + VolumeVO allocateDuplicateVolume(VolumeVO oldVol, Long templateId); Host updateSecondaryStorage(long secStorageId, String newUrl); @@ -237,6 +237,6 @@ public interface StorageManager extends StorageService, Manager { HypervisorType getHypervisorTypeFromFormat(ImageFormat format); boolean storagePoolHasEnoughSpace(List volume, StoragePool pool); - + boolean deleteVolume(long volumeId, Account caller) throws ConcurrentOperationException; } diff --git a/server/src/com/cloud/storage/StorageManagerImpl.java b/server/src/com/cloud/storage/StorageManagerImpl.java index 1f625d3f69b..824af6a744c 100755 --- a/server/src/com/cloud/storage/StorageManagerImpl.java +++ b/server/src/com/cloud/storage/StorageManagerImpl.java @@ -431,8 +431,8 @@ public class StorageManagerImpl implements StorageManager, Manager, ClusterManag } @Override - public boolean isLocalStorageActiveOnHost(Host host) { - List storagePoolHostRefs = _storagePoolHostDao.listByHostId(host.getId()); + public boolean isLocalStorageActiveOnHost(Long hostId) { + List storagePoolHostRefs = _storagePoolHostDao.listByHostId(hostId); for (StoragePoolHostVO storagePoolHostRef : storagePoolHostRefs) { StoragePoolVO storagePool = _storagePoolDao.findById(storagePoolHostRef.getPoolId()); if (storagePool.getPoolType() == StoragePoolType.LVM || storagePool.getPoolType() == StoragePoolType.EXT) { @@ -652,7 +652,7 @@ public class StorageManagerImpl implements StorageManager, Manager, ClusterManag Pair volumeDetails = createVolumeFromSnapshot(volume, snapshot); if (volumeDetails != null) { createdVolume = volumeDetails.first(); - UsageEventVO usageEvent = new UsageEventVO(EventTypes.EVENT_VOLUME_CREATE, createdVolume.getAccountId(), createdVolume.getDataCenterId(), createdVolume.getId(), createdVolume.getName(), + UsageEventVO usageEvent = new UsageEventVO(EventTypes.EVENT_VOLUME_CREATE, createdVolume.getAccountId(), createdVolume.getDataCenterId(), createdVolume.getId(), createdVolume.getName(), createdVolume.getDiskOfferingId(), null, createdVolume.getSize()); _usageEventDao.persist(usageEvent); } @@ -737,21 +737,21 @@ public class StorageManagerImpl implements StorageManager, Manager, ClusterManag @DB public VolumeVO copyVolumeFromSecToPrimary(VolumeVO volume, VMInstanceVO vm, VMTemplateVO template, DataCenterVO dc, HostPodVO pod, Long clusterId, ServiceOfferingVO offering, DiskOfferingVO diskOffering, List avoids, long size, HypervisorType hyperType) throws NoTransitionException { - + final HashSet avoidPools = new HashSet(avoids); DiskProfile dskCh = createDiskCharacteristics(volume, template, dc, diskOffering); dskCh.setHyperType(vm.getHypervisorType()); - // Find a suitable storage to create volume on + // Find a suitable storage to create volume on StoragePoolVO destPool = findStoragePool(dskCh, dc, pod, clusterId, null, vm, avoidPools); - - // Copy the volume from secondary storage to the destination storage pool + + // Copy the volume from secondary storage to the destination storage pool stateTransitTo(volume, Event.CopyRequested); VolumeHostVO volumeHostVO = _volumeHostDao.findByVolumeId(volume.getId()); HostVO secStorage = _hostDao.findById(volumeHostVO.getHostId()); String secondaryStorageURL = secStorage.getStorageUrl(); String[] volumePath = volumeHostVO.getInstallPath().split("/"); String volumeUUID = volumePath[volumePath.length - 1].split("\\.")[0]; - + CopyVolumeCommand cvCmd = new CopyVolumeCommand(volume.getId(), volumeUUID, destPool, secondaryStorageURL, false, _copyvolumewait); CopyVolumeAnswer cvAnswer; try { @@ -764,23 +764,23 @@ public class StorageManagerImpl implements StorageManager, Manager, ClusterManag if (cvAnswer == null || !cvAnswer.getResult()) { stateTransitTo(volume, Event.CopyFailed); throw new CloudRuntimeException("Failed to copy the volume from secondary storage to the destination primary storage pool."); - } + } Transaction txn = Transaction.currentTxn(); - txn.start(); + txn.start(); volume.setPath(cvAnswer.getVolumePath()); volume.setFolder(destPool.getPath()); volume.setPodId(destPool.getPodId()); - volume.setPoolId(destPool.getId()); + volume.setPoolId(destPool.getId()); volume.setPodId(destPool.getPodId()); - stateTransitTo(volume, Event.CopySucceeded); + stateTransitTo(volume, Event.CopySucceeded); UsageEventVO usageEvent = new UsageEventVO(EventTypes.EVENT_VOLUME_CREATE, volume.getAccountId(), volume.getDataCenterId(), volume.getId(), volume.getName(), volume.getDiskOfferingId(), null, volume.getSize()); _usageEventDao.persist(usageEvent); _volumeHostDao.remove(volumeHostVO.getId()); txn.commit(); return volume; - + } - + @Override @DB public VolumeVO createVolume(VolumeVO volume, VMInstanceVO vm, VMTemplateVO template, DataCenterVO dc, HostPodVO pod, Long clusterId, ServiceOfferingVO offering, DiskOfferingVO diskOffering, @@ -975,7 +975,7 @@ public class StorageManagerImpl implements StorageManager, Manager, ClusterManag value = configDao.getValue(Config.RecreateSystemVmEnabled.key()); _recreateSystemVmEnabled = Boolean.parseBoolean(value); - + value = configDao.getValue(Config.StorageTemplateCleanupEnabled.key()); _templateCleanupEnabled = (value == null ? true : Boolean.parseBoolean(value)); @@ -1517,7 +1517,7 @@ public class StorageManagerImpl implements StorageManager, Manager, ClusterManag } if(sPool.getStatus() != StoragePoolStatus.Maintenance){ s_logger.warn("Unable to delete storage id: " + id +" due to it is not in Maintenance state"); - throw new InvalidParameterValueException("Unable to delete storage due to it is not in Maintenance state, id: " + id); + throw new InvalidParameterValueException("Unable to delete storage due to it is not in Maintenance state, id: " + id); } if (sPool.getPoolType().equals(StoragePoolType.LVM) || sPool.getPoolType().equals(StoragePoolType.EXT)) { s_logger.warn("Unable to delete local storage id:" + id); @@ -1546,7 +1546,7 @@ public class StorageManagerImpl implements StorageManager, Manager, ClusterManag " for this pool"); } } - + // First get the host_id from storage_pool_host_ref for given pool id StoragePoolVO lock = _storagePoolDao.acquireInLockTable(sPool.getId()); @@ -1740,10 +1740,10 @@ public class StorageManagerImpl implements StorageManager, Manager, ClusterManag return _volsDao.findById(volume.getId()); } - + /* * Upload the volume to secondary storage. - * + * */ @Override @DB @@ -1755,13 +1755,13 @@ public class StorageManagerImpl implements StorageManager, Manager, ClusterManag String volumeName = cmd.getVolumeName(); String url = cmd.getUrl(); String format = cmd.getFormat(); - + validateVolume(caller, ownerId, zoneId, volumeName, url, format); VolumeVO volume = persistVolume(caller, ownerId, zoneId, volumeName, url, cmd.getFormat()); _downloadMonitor.downloadVolumeToStorage(volume, zoneId, url, cmd.getChecksum(), ImageFormat.valueOf(format.toUpperCase())); - return volume; + return volume; } - + private boolean validateVolume(Account caller, long ownerId, Long zoneId, String volumeName, String url, String format) throws ResourceAllocationException{ // permission check @@ -1769,7 +1769,7 @@ public class StorageManagerImpl implements StorageManager, Manager, ClusterManag // Check that the resource limit for volumes won't be exceeded _resourceLimitMgr.checkResourceLimit(_accountMgr.getAccount(ownerId), ResourceType.volume); - + // Verify that zone exists DataCenterVO zone = _dcDao.findById(zoneId); @@ -1781,22 +1781,22 @@ public class StorageManagerImpl implements StorageManager, Manager, ClusterManag if (Grouping.AllocationState.Disabled == zone.getAllocationState() && !_accountMgr.isRootAdmin(caller.getType())) { throw new PermissionDeniedException("Cannot perform this operation, Zone is currently disabled: " + zoneId); } - + if (url.toLowerCase().contains("file://")) { throw new InvalidParameterValueException("File:// type urls are currently unsupported"); } - + ImageFormat imgfmt = ImageFormat.valueOf(format.toUpperCase()); if (imgfmt == null) { throw new IllegalArgumentException("Image format is incorrect " + format + ". Supported formats are " + EnumUtils.listValues(ImageFormat.values())); } - + String userSpecifiedName = volumeName; if (userSpecifiedName == null) { userSpecifiedName = getRandomVolumeName(); } if((!url.toLowerCase().endsWith("vhd"))&&(!url.toLowerCase().endsWith("vhd.zip")) - &&(!url.toLowerCase().endsWith("vhd.bz2"))&&(!url.toLowerCase().endsWith("vhd.gz")) + &&(!url.toLowerCase().endsWith("vhd.bz2"))&&(!url.toLowerCase().endsWith("vhd.gz")) &&(!url.toLowerCase().endsWith("qcow2"))&&(!url.toLowerCase().endsWith("qcow2.zip")) &&(!url.toLowerCase().endsWith("qcow2.bz2"))&&(!url.toLowerCase().endsWith("qcow2.gz")) &&(!url.toLowerCase().endsWith("ova"))&&(!url.toLowerCase().endsWith("ova.zip")) @@ -1804,7 +1804,7 @@ public class StorageManagerImpl implements StorageManager, Manager, ClusterManag &&(!url.toLowerCase().endsWith("img"))&&(!url.toLowerCase().endsWith("raw"))){ throw new InvalidParameterValueException("Please specify a valid " + format.toLowerCase()); } - + if ((format.equalsIgnoreCase("vhd") && (!url.toLowerCase().endsWith(".vhd") && !url.toLowerCase().endsWith("vhd.zip") && !url.toLowerCase().endsWith("vhd.bz2") && !url.toLowerCase().endsWith("vhd.gz") )) || (format.equalsIgnoreCase("qcow2") && (!url.toLowerCase().endsWith(".qcow2") && !url.toLowerCase().endsWith("qcow2.zip") && !url.toLowerCase().endsWith("qcow2.bz2") && !url.toLowerCase().endsWith("qcow2.gz") )) || (format.equalsIgnoreCase("ova") && (!url.toLowerCase().endsWith(".ova") && !url.toLowerCase().endsWith("ova.zip") && !url.toLowerCase().endsWith("ova.bz2") && !url.toLowerCase().endsWith("ova.gz"))) @@ -1812,14 +1812,14 @@ public class StorageManagerImpl implements StorageManager, Manager, ClusterManag throw new InvalidParameterValueException("Please specify a valid URL. URL:" + url + " is an invalid for the format " + format.toLowerCase()); } validateUrl(url); - + return false; } - + private String validateUrl(String url){ try { URI uri = new URI(url); - if ((uri.getScheme() == null) || (!uri.getScheme().equalsIgnoreCase("http") + if ((uri.getScheme() == null) || (!uri.getScheme().equalsIgnoreCase("http") && !uri.getScheme().equalsIgnoreCase("https") && !uri.getScheme().equalsIgnoreCase("file"))) { throw new IllegalArgumentException("Unsupported scheme for url: " + url); } @@ -1840,16 +1840,16 @@ public class StorageManagerImpl implements StorageManager, Manager, ClusterManag } catch (UnknownHostException uhe) { throw new IllegalArgumentException("Unable to resolve " + host); } - + return uri.toString(); } catch (URISyntaxException e) { throw new IllegalArgumentException("Invalid URL " + url); } - + } - + private VolumeVO persistVolume(Account caller, long ownerId, Long zoneId, String volumeName, String url, String format) { - + Transaction txn = Transaction.currentTxn(); txn.start(); @@ -1860,7 +1860,7 @@ public class StorageManagerImpl implements StorageManager, Manager, ClusterManag volume.setAccountId(ownerId); volume.setDomainId(((caller == null) ? Domain.ROOT_DOMAIN : caller.getDomainId())); long diskOfferingId = _diskOfferingDao.findByUniqueName("Cloud.com-Custom").getId(); - volume.setDiskOfferingId(diskOfferingId); + volume.setDiskOfferingId(diskOfferingId); //volume.setSize(size); volume.setInstanceId(null); volume.setUpdated(new Date()); @@ -1881,8 +1881,8 @@ public class StorageManagerImpl implements StorageManager, Manager, ClusterManag txn.commit(); return volume; } - - + + /* * Just allocate a volume in the database, don't send the createvolume cmd to hypervisor. The volume will be finally * created @@ -1984,7 +1984,7 @@ public class StorageManagerImpl implements StorageManager, Manager, ClusterManag * throw new UnsupportedServiceException("operation not supported, snapshot with id " + snapshotId + * " is created from ROOT volume"); * } - * + * */ } @@ -2189,7 +2189,7 @@ public class StorageManagerImpl implements StorageManager, Manager, ClusterManag s_logger.debug("Successfully set Capacity - " + totalOverProvCapacity + " for capacity type - " + capacityType + " , DataCenterId - " + storagePool.getDataCenterId() + ", HostOrPoolId - " + storagePool.getId() + ", PodId " + storagePool.getPodId()); } - + @Override public List getUpHostsInPool(long poolId) { SearchCriteria sc = UpHostsInPoolSearch.create(); @@ -2290,7 +2290,7 @@ public class StorageManagerImpl implements StorageManager, Manager, ClusterManag s_logger.warn("Unable to destroy " + vol.getId(), e); } } - + // remove snapshots in Error state List snapshots = _snapshotDao.listAllByStatus(Snapshot.Status.Error); for (SnapshotVO snapshotVO : snapshots) { @@ -2300,7 +2300,7 @@ public class StorageManagerImpl implements StorageManager, Manager, ClusterManag s_logger.warn("Unable to destroy " + snapshotVO.getId(), e); } } - + } finally { scanLock.unlock(); } @@ -2439,7 +2439,7 @@ public class StorageManagerImpl implements StorageManager, Manager, ClusterManag s_logger.warn("problem cleaning up snapshots in secondary storage " + secondaryStorageHost, e2); } } - + //CleanUp volumes on Secondary Storage. for (HostVO secondaryStorageHost : secondaryStorageHosts) { try { @@ -2467,7 +2467,7 @@ public class StorageManagerImpl implements StorageManager, Manager, ClusterManag _volumeHostDao.remove(destroyedVolumeHostVO.getId()); } } - + }catch (Exception e2) { s_logger.warn("problem cleaning up volumes in secondary storage " + secondaryStorageHost, e2); } @@ -2899,14 +2899,14 @@ public class StorageManagerImpl implements StorageManager, Manager, ClusterManag throw new InvalidParameterValueException("Please specify a volume that is not attached to any VM."); } - // Check that volume is completely Uploaded + // Check that volume is completely Uploaded if (volume.getState() == Volume.State.UploadOp){ VolumeHostVO volumeHost = _volumeHostDao.findByVolumeId(volume.getId()); if (volumeHost.getDownloadState() == VMTemplateStorageResourceAssoc.Status.DOWNLOAD_IN_PROGRESS){ throw new InvalidParameterValueException("Please specify a volume that is not uploading"); - } + } } - + // Check that the volume is not already destroyed if (volume.getState() != Volume.State.Destroy) { if (!destroyVolume(volume)) { @@ -3258,7 +3258,7 @@ public class StorageManagerImpl implements StorageManager, Manager, ClusterManag if (s_logger.isDebugEnabled()) { s_logger.debug("Checking if we need to prepare " + vols.size() + " volumes for " + vm); } - + boolean recreate = _recreateSystemVmEnabled; List recreateVols = new ArrayList(vols.size()); @@ -3270,7 +3270,7 @@ public class StorageManagerImpl implements StorageManager, Manager, ClusterManag } if (assignedPool == null && recreate) { assignedPool = _storagePoolDao.findById(vol.getPoolId()); - + } if (assignedPool != null || recreate) { Volume.State state = vol.getState(); @@ -3311,7 +3311,7 @@ public class StorageManagerImpl implements StorageManager, Manager, ClusterManag StoragePoolVO pool = _storagePoolDao.findById(vol.getPoolId()); vm.addDisk(new VolumeTO(vol, pool)); } - + } } } else { @@ -3333,7 +3333,7 @@ public class StorageManagerImpl implements StorageManager, Manager, ClusterManag existingPool = _storagePoolDao.findById(vol.getPoolId()); s_logger.debug("existing pool: " + existingPool.getId()); } - + if (vol.getState() == Volume.State.Allocated || vol.getState() == Volume.State.Creating) { newVol = vol; } else { @@ -3422,7 +3422,7 @@ public class StorageManagerImpl implements StorageManager, Manager, ClusterManag if (toBeCreated.getTemplateId() != null) { template = _templateDao.findById(toBeCreated.getTemplateId()); } - + StoragePool pool = null; if (sPool != null) { pool = sPool; @@ -3506,27 +3506,27 @@ public class StorageManagerImpl implements StorageManager, Manager, ClusterManag if (s_logger.isDebugEnabled()) { s_logger.debug("Expunging " + vol); } - + //Find out if the volume is present on secondary storage VolumeHostVO volumeHost = _volumeHostDao.findByVolumeId(vol.getId()); if(volumeHost != null){ if (volumeHost.getDownloadState() == VMTemplateStorageResourceAssoc.Status.DOWNLOADED){ HostVO ssHost = _hostDao.findById(volumeHost.getHostId()); - DeleteVolumeCommand dtCommand = new DeleteVolumeCommand(ssHost.getStorageUrl(), volumeHost.getInstallPath()); + DeleteVolumeCommand dtCommand = new DeleteVolumeCommand(ssHost.getStorageUrl(), volumeHost.getInstallPath()); Answer answer = _agentMgr.sendToSecStorage(ssHost, dtCommand); if (answer == null || !answer.getResult()) { s_logger.debug("Failed to delete " + volumeHost + " due to " + ((answer == null) ? "answer is null" : answer.getDetails())); return; } - }else if(volumeHost.getDownloadState() == VMTemplateStorageResourceAssoc.Status.DOWNLOAD_IN_PROGRESS){ + }else if(volumeHost.getDownloadState() == VMTemplateStorageResourceAssoc.Status.DOWNLOAD_IN_PROGRESS){ s_logger.debug("Volume: " + vol.getName() + " is currently being uploaded; cant' delete it."); throw new CloudRuntimeException("Please specify a volume that is not currently being uploaded."); } _volumeHostDao.remove(volumeHost.getId()); _volumeDao.remove(vol.getId()); - return; + return; } - + String vmName = null; if (vol.getVolumeType() == Type.ROOT && vol.getInstanceId() != null) { VirtualMachine vm = _vmInstanceDao.findByIdIncludingRemoved(vol.getInstanceId()); @@ -3894,7 +3894,7 @@ public class StorageManagerImpl implements StorageManager, Manager, ClusterManag vmSearch.and("type", vmSearch.entity().getType(), SearchCriteria.Op.NIN); vmSearch.or("nulltype", vmSearch.entity().getType(), SearchCriteria.Op.NULL); sb.join("vmSearch", vmSearch, sb.entity().getInstanceId(), vmSearch.entity().getId(), JoinBuilder.JoinType.LEFTOUTER); - + if (tags != null && !tags.isEmpty()) { SearchBuilder tagSearch = _resourceTagDao.createSearchBuilder(); for (int count=0; count < tags.size(); count++) { @@ -3924,7 +3924,7 @@ public class StorageManagerImpl implements StorageManager, Manager, ClusterManag } sc.setJoinParameters("diskOfferingSearch", "systemUse", 1); - + if (tags != null && !tags.isEmpty()) { int count = 0; sc.setJoinParameters("tagSearch", "resourceType", TaggedResourceType.Volume.toString()); @@ -3957,7 +3957,7 @@ public class StorageManagerImpl implements StorageManager, Manager, ClusterManag // Only return volumes that are not destroyed sc.setParameters("state", Volume.State.Destroy); - + Pair, Integer> volumes = _volumeDao.searchAndCount(sc, searchFilter); return new Pair, Integer>(volumes.first(), volumes.second()); @@ -3979,14 +3979,14 @@ public class StorageManagerImpl implements StorageManager, Manager, ClusterManag return null; } } - + @Override public HypervisorType getHypervisorTypeFromFormat(ImageFormat format) { - + if(format == null) { return HypervisorType.None; } - + if (format == ImageFormat.VHD) { return HypervisorType.XenServer; } else if (format == ImageFormat.OVA) { @@ -4075,5 +4075,5 @@ public class StorageManagerImpl implements StorageManager, Manager, ClusterManag } return true; } - + } diff --git a/server/test/com/cloud/api/APITest.java b/server/test/com/cloud/api/APITest.java new file mode 100644 index 00000000000..69c488f5a10 --- /dev/null +++ b/server/test/com/cloud/api/APITest.java @@ -0,0 +1,189 @@ +// 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 +// 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; + +import java.io.BufferedReader; +import java.io.EOFException; +import java.io.InputStreamReader; +import java.io.OutputStreamWriter; +import java.math.BigInteger; +import java.net.HttpURLConnection; +import java.net.URL; +import java.net.URLConnection; +import java.net.URLEncoder; +import java.security.MessageDigest; +import java.security.NoSuchAlgorithmException; +import java.util.HashMap; +import java.util.Iterator; + +import com.cloud.utils.exception.CloudRuntimeException; +import com.google.gson.Gson; + +/** + * Base class for API Test + * + * @author Min Chen + * + */ +public abstract class APITest { + + protected String rootUrl = "http://localhost:8080/client/api"; + protected String sessionKey = null; + protected String cookieToSent = null; + + + /** + * Sending an api request through Http GET + * @param command command name + * @param params command query parameters in a HashMap + * @return http request response string + */ + protected String sendRequest(String command, HashMap params){ + try { + // Construct query string + StringBuilder sBuilder = new StringBuilder(); + sBuilder.append("command="); + sBuilder.append(command); + if ( params != null && params.size() > 0){ + Iterator keys = params.keySet().iterator(); + while (keys.hasNext()){ + String key = keys.next(); + sBuilder.append("&"); + sBuilder.append(key); + sBuilder.append("="); + sBuilder.append(URLEncoder.encode(params.get(key), "UTF-8")); + } + } + + // Construct request url + String reqUrl = rootUrl + "?" + sBuilder.toString(); + + // Send Http GET request + URL url = new URL(reqUrl); + HttpURLConnection conn = (HttpURLConnection) url.openConnection(); + conn.setRequestMethod("GET"); + + if ( !command.equals("login") && cookieToSent != null){ + // add the cookie to a request + conn.setRequestProperty("Cookie", cookieToSent); + } + conn.connect(); + + + if ( command.equals("login")){ + // if it is login call, store cookie + String headerName=null; + for (int i=1; (headerName = conn.getHeaderFieldKey(i))!=null; i++) { + if (headerName.equals("Set-Cookie")) { + String cookie = conn.getHeaderField(i); + cookie = cookie.substring(0, cookie.indexOf(";")); + String cookieName = cookie.substring(0, cookie.indexOf("=")); + String cookieValue = cookie.substring(cookie.indexOf("=") + 1, cookie.length()); + cookieToSent = cookieName + "=" + cookieValue; + } + } + } + + // Get the response + StringBuilder response = new StringBuilder(); + BufferedReader rd = new BufferedReader(new InputStreamReader(conn.getInputStream())); + String line; + try { + while ((line = rd.readLine()) != null) { + response.append(line); + } + } catch (EOFException ex) { + // ignore this exception + System.out.println("EOF exception due to java bug"); + } + rd.close(); + + + + return response.toString(); + + } catch (Exception e) { + throw new CloudRuntimeException("Problem with sending api request", e); + } + } + + protected String createMD5String(String password) { + MessageDigest md5; + try { + md5 = MessageDigest.getInstance("MD5"); + } catch (NoSuchAlgorithmException e) { + throw new CloudRuntimeException("Error", e); + } + + md5.reset(); + BigInteger pwInt = new BigInteger(1, md5.digest(password.getBytes())); + + // make sure our MD5 hash value is 32 digits long... + StringBuffer sb = new StringBuffer(); + String pwStr = pwInt.toString(16); + int padding = 32 - pwStr.length(); + for (int i = 0; i < padding; i++) { + sb.append('0'); + } + sb.append(pwStr); + return sb.toString(); + } + + + protected Object fromSerializedString(String result, Class repCls) { + try { + if (result != null && !result.isEmpty()) { + + // get real content + int start = result.indexOf('{', result.indexOf('{') + 1); // find the second { + if ( start < 0 ){ + throw new CloudRuntimeException("Response format is wrong: " + result); + } + int end = result.lastIndexOf('}', result.lastIndexOf('}')-1); // find the second } backwards + if ( end < 0 ){ + throw new CloudRuntimeException("Response format is wrong: " + result); + } + String content = result.substring(start, end+1); + Gson gson = ApiGsonHelper.getBuilder().create(); + return gson.fromJson(content, repCls); + } + return null; + } catch (RuntimeException e) { + throw new CloudRuntimeException("Caught runtime exception when doing GSON deserialization on: " + result, e); + } + } + + /** + * Login call + * @param username user name + * @param password password (plain password, we will do MD5 hash here for you) + * @return login response string + */ + protected void login(String username, String password) + { + //String md5Psw = createMD5String(password); + // send login request + HashMap params = new HashMap(); + params.put("response", "json"); + params.put("username", username); + params.put("password", password); + String result = this.sendRequest("login", params); + LoginResponse loginResp = (LoginResponse)fromSerializedString(result, LoginResponse.class); + sessionKey = loginResp.getSessionkey(); + + } +} diff --git a/server/test/com/cloud/api/ListPerfTest.java b/server/test/com/cloud/api/ListPerfTest.java new file mode 100644 index 00000000000..47abcaedc12 --- /dev/null +++ b/server/test/com/cloud/api/ListPerfTest.java @@ -0,0 +1,109 @@ +// 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 +// 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; + +import java.util.HashMap; + +import org.junit.Before; +import org.junit.Test; + + +/** + * Test fixture to do performance test for list command + * Currently we commented out this test suite since it requires a real MS and Db running. + * + * @author Min Chen + * + */ +public class ListPerfTest extends APITest { + + + + @Before + public void setup(){ + // always login for each testcase + login("admin", "password"); + } + + @Test + public void testListVM(){ + // issue list VM calls + HashMap params = new HashMap(); + params.put("response", "json"); + params.put("listAll", "true"); + params.put("sessionkey", sessionKey); + long before = System.currentTimeMillis(); + String result = this.sendRequest("listVirtualMachines", params); + long after = System.currentTimeMillis(); + System.out.println("Time taken to list VM: " + (after - before) + " ms"); + + } + + @Test + public void testListVMXML(){ + // issue list VM calls + HashMap params = new HashMap(); + params.put("listAll", "true"); + params.put("sessionkey", sessionKey); + long before = System.currentTimeMillis(); + String result = this.sendRequest("listVirtualMachines", params); + long after = System.currentTimeMillis(); + System.out.println("Time taken to list VM: " + (after - before) + " ms"); + + } + + @Test + public void testListRouter(){ + // issue list VM calls + HashMap params = new HashMap(); + params.put("response", "json"); + params.put("listAll", "true"); + params.put("sessionkey", sessionKey); + long before = System.currentTimeMillis(); + String result = this.sendRequest("listRouters", params); + long after = System.currentTimeMillis(); + System.out.println("Time taken to list Routers: " + (after - before) + " ms"); + + } + + @Test + public void testListRouterXML(){ + // issue list VM calls + HashMap params = new HashMap(); + params.put("listAll", "true"); + params.put("sessionkey", sessionKey); + long before = System.currentTimeMillis(); + String result = this.sendRequest("listRouters", params); + long after = System.currentTimeMillis(); + System.out.println("Time taken to list Routers: " + (after - before) + " ms"); + + } + + @Test + public void testListHosts(){ + // issue list Hosts calls + HashMap params = new HashMap(); + params.put("response", "json"); + params.put("listAll", "true"); + params.put("sessionkey", sessionKey); + long before = System.currentTimeMillis(); + String result = this.sendRequest("listHosts", params); + long after = System.currentTimeMillis(); + System.out.println("Time taken to list Hosts: " + (after - before) + " ms"); + + } +} diff --git a/server/test/com/cloud/api/LoginResponse.java b/server/test/com/cloud/api/LoginResponse.java new file mode 100644 index 00000000000..097ae42c999 --- /dev/null +++ b/server/test/com/cloud/api/LoginResponse.java @@ -0,0 +1,142 @@ +// 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 +// 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; + +import org.apache.cloudstack.api.BaseResponse; + +import com.cloud.serializer.Param; +import com.google.gson.annotations.SerializedName; + +/** + * Login Response object + * + * @author Min Chen + * + */ +public class LoginResponse extends BaseResponse { + + @SerializedName("timeout") + @Param(description = "session timeout period") + private String timeout; + + @SerializedName("sessionkey") + @Param(description = "login session key") + private String sessionkey; + + @SerializedName("username") + @Param(description = "login username") + private String username; + + @SerializedName("userid") + @Param(description = "login user internal uuid") + private String userid; + + @SerializedName("firstname") + @Param(description = "login user firstname") + private String firstname; + + @SerializedName("lastname") + @Param(description = "login user lastname") + private String lastname; + + @SerializedName("account") + @Param(description = "login user account type") + private String account; + + @SerializedName("domainid") + @Param(description = "login user domain id") + private String domainid; + + @SerializedName("type") + @Param(description = "login user type") + private int type; + + public String getTimeout() { + return timeout; + } + + public void setTimeout(String timeout) { + this.timeout = timeout; + } + + public String getSessionkey() { + return sessionkey; + } + + public void setSessionkey(String sessionkey) { + this.sessionkey = sessionkey; + } + + public String getUsername() { + return username; + } + + public void setUsername(String username) { + this.username = username; + } + + public String getUserid() { + return userid; + } + + public void setUserid(String userid) { + this.userid = userid; + } + + public String getFirstname() { + return firstname; + } + + public void setFirstname(String firstname) { + this.firstname = firstname; + } + + public String getLastname() { + return lastname; + } + + public void setLastname(String lastname) { + this.lastname = lastname; + } + + public String getAccount() { + return account; + } + + public void setAccount(String account) { + this.account = account; + } + + public String getDomainid() { + return domainid; + } + + public void setDomainid(String domainid) { + this.domainid = domainid; + } + + public int getType() { + return type; + } + + public void setType(int type) { + this.type = type; + } + + + +} From 3aad2ba972eea3ef9f03bc88e311e44dae1ebf20 Mon Sep 17 00:00:00 2001 From: Min Chen Date: Sat, 22 Dec 2012 21:49:51 -0800 Subject: [PATCH 189/421] Add DB host view into fresh install schema and upgrade schema. --- setup/db/create-schema.sql | 57 ++++++++++++++++++++++++++++++++++ setup/db/db/schema-40to410.sql | 55 ++++++++++++++++++++++++++++++++ 2 files changed, 112 insertions(+) diff --git a/setup/db/create-schema.sql b/setup/db/create-schema.sql index 365ff968740..c9c75af7f41 100755 --- a/setup/db/create-schema.sql +++ b/setup/db/create-schema.sql @@ -2971,3 +2971,60 @@ from project_invitations left join account on project_invitations.account_id = account.id left join domain on project_invitations.domain_id=domain.id left join projects on projects.id = project_invitations.project_id; + +DROP VIEW IF EXISTS `cloud`.`host_view`; +CREATE VIEW host_view AS +select +host.id, +host.uuid, +host.name, +host.status, +host.disconnected, +host.type, +host.private_ip_address, +host.version, +host.hypervisor_type, +host.hypervisor_version, +host.capabilities, +host.last_ping, +host.created, +host.removed, +host.resource_state, +host.mgmt_server_id, +host.cpus, +host.speed, +host.ram, +cluster.id cluster_id, +cluster.uuid cluster_uuid, +cluster.name cluster_name, +cluster.cluster_type, +data_center.id data_center_id, +data_center.uuid data_center_uuid, +data_center.name data_center_name, +host_pod_ref.id pod_id, +host_pod_ref.uuid pod_uuid, +host_pod_ref.name pod_name, +host_tags.tag, +guest_os_category.id guest_os_category_id, +guest_os_category.uuid guest_os_category_uuid, +guest_os_category.name guest_os_category_name, +mem_caps.used_capacity memory_used_capacity, +mem_caps.reserved_capacity memory_reserved_capacity, +cpu_caps.used_capacity cpu_used_capacity, +cpu_caps.reserved_capacity cpu_reserved_capacity, +async_job.id job_id, +async_job.uuid job_uuid, +async_job.job_status job_status, +async_job.account_id job_account_id +from host +left join cluster on host.cluster_id = cluster.id +left join data_center on host.data_center_id = data_center.id +left join host_pod_ref on host.pod_id = host_pod_ref.id +left join host_details on host.id = host_details.id and host_details.name = "guest.os.category.id" +left join guest_os_category on guest_os_category.id = CONVERT( host_details.value, UNSIGNED ) +left join host_tags on host_tags.host_id = host.id +left join op_host_capacity mem_caps on host.id = mem_caps.host_id and mem_caps.capacity_type = 0 +left join op_host_capacity cpu_caps on host.id = cpu_caps.host_id and cpu_caps.capacity_type = 1 +left join async_job on async_job.instance_id = host.id and async_job.instance_type = "Host" and async_job.job_status = 0; + + diff --git a/setup/db/db/schema-40to410.sql b/setup/db/db/schema-40to410.sql index 2ebea02dade..487f1c1c768 100644 --- a/setup/db/db/schema-40to410.sql +++ b/setup/db/db/schema-40to410.sql @@ -583,3 +583,58 @@ left join account on project_invitations.account_id = account.id left join domain on project_invitations.domain_id=domain.id left join projects on projects.id = project_invitations.project_id; +DROP VIEW IF EXISTS `cloud`.`host_view`; +CREATE VIEW host_view AS +select +host.id, +host.uuid, +host.name, +host.status, +host.disconnected, +host.type, +host.private_ip_address, +host.version, +host.hypervisor_type, +host.hypervisor_version, +host.capabilities, +host.last_ping, +host.created, +host.removed, +host.resource_state, +host.mgmt_server_id, +host.cpus, +host.speed, +host.ram, +cluster.id cluster_id, +cluster.uuid cluster_uuid, +cluster.name cluster_name, +cluster.cluster_type, +data_center.id data_center_id, +data_center.uuid data_center_uuid, +data_center.name data_center_name, +host_pod_ref.id pod_id, +host_pod_ref.uuid pod_uuid, +host_pod_ref.name pod_name, +host_tags.tag, +guest_os_category.id guest_os_category_id, +guest_os_category.uuid guest_os_category_uuid, +guest_os_category.name guest_os_category_name, +mem_caps.used_capacity memory_used_capacity, +mem_caps.reserved_capacity memory_reserved_capacity, +cpu_caps.used_capacity cpu_used_capacity, +cpu_caps.reserved_capacity cpu_reserved_capacity, +async_job.id job_id, +async_job.uuid job_uuid, +async_job.job_status job_status, +async_job.account_id job_account_id +from host +left join cluster on host.cluster_id = cluster.id +left join data_center on host.data_center_id = data_center.id +left join host_pod_ref on host.pod_id = host_pod_ref.id +left join host_details on host.id = host_details.id and host_details.name = "guest.os.category.id" +left join guest_os_category on guest_os_category.id = CONVERT( host_details.value, UNSIGNED ) +left join host_tags on host_tags.host_id = host.id +left join op_host_capacity mem_caps on host.id = mem_caps.host_id and mem_caps.capacity_type = 0 +left join op_host_capacity cpu_caps on host.id = cpu_caps.host_id and cpu_caps.capacity_type = 1 +left join async_job on async_job.instance_id = host.id and async_job.instance_type = "Host" and async_job.job_status = 0; + From 503db14127807ef69933f5dcf6a3cef91cb5ca45 Mon Sep 17 00:00:00 2001 From: Min Chen Date: Sat, 22 Dec 2012 22:35:09 -0800 Subject: [PATCH 190/421] Add back Identity interface to most VO class to avoid cast error in ApiDispatcher.setupParameter call. --- api/src/com/cloud/storage/Snapshot.java | 2 +- core/src/com/cloud/host/HostVO.java | 2 +- core/src/com/cloud/network/VpnUserVO.java | 2 +- core/src/com/cloud/storage/DiskOfferingVO.java | 2 +- core/src/com/cloud/storage/GuestOSCategoryVO.java | 2 +- core/src/com/cloud/storage/GuestOSVO.java | 2 +- core/src/com/cloud/storage/SnapshotVO.java | 4 ++-- core/src/com/cloud/user/AccountVO.java | 2 +- .../vmware/src/com/cloud/network/CiscoNexusVSMDeviceVO.java | 2 +- server/src/com/cloud/dc/ClusterVO.java | 2 +- server/src/com/cloud/dc/DataCenterVO.java | 2 +- server/src/com/cloud/dc/VlanVO.java | 2 +- server/src/com/cloud/domain/DomainVO.java | 2 +- server/src/com/cloud/network/IPAddressVO.java | 2 +- server/src/com/cloud/network/NetworkVO.java | 2 +- server/src/com/cloud/network/as/AutoScaleVmProfileVO.java | 2 +- server/src/com/cloud/network/rules/FirewallRuleVO.java | 2 +- 17 files changed, 18 insertions(+), 18 deletions(-) diff --git a/api/src/com/cloud/storage/Snapshot.java b/api/src/com/cloud/storage/Snapshot.java index c60b19aec49..a81234aba6b 100644 --- a/api/src/com/cloud/storage/Snapshot.java +++ b/api/src/com/cloud/storage/Snapshot.java @@ -67,7 +67,7 @@ public interface Snapshot extends ControlledEntity { public static final long MANUAL_POLICY_ID = 0L; - Long getId(); + long getId(); String getUuid(); diff --git a/core/src/com/cloud/host/HostVO.java b/core/src/com/cloud/host/HostVO.java index 850211e3e60..069b26345c6 100755 --- a/core/src/com/cloud/host/HostVO.java +++ b/core/src/com/cloud/host/HostVO.java @@ -48,7 +48,7 @@ import com.cloud.utils.db.GenericDao; @Table(name="host") @Inheritance(strategy=InheritanceType.TABLE_PER_CLASS) @DiscriminatorColumn(name="type", discriminatorType=DiscriminatorType.STRING, length=32) -public class HostVO implements Host { +public class HostVO implements Host, Identity { @Id @GeneratedValue(strategy=GenerationType.IDENTITY) @Column(name="id") diff --git a/core/src/com/cloud/network/VpnUserVO.java b/core/src/com/cloud/network/VpnUserVO.java index 54e0d89894d..02c53683394 100644 --- a/core/src/com/cloud/network/VpnUserVO.java +++ b/core/src/com/cloud/network/VpnUserVO.java @@ -32,7 +32,7 @@ import com.cloud.utils.db.Encrypt; @Entity @Table(name=("vpn_users")) -public class VpnUserVO implements VpnUser { +public class VpnUserVO implements VpnUser, Identity { @Id @GeneratedValue(strategy=GenerationType.IDENTITY) @Column(name="id") diff --git a/core/src/com/cloud/storage/DiskOfferingVO.java b/core/src/com/cloud/storage/DiskOfferingVO.java index a52671225da..8b3a2de2ec2 100755 --- a/core/src/com/cloud/storage/DiskOfferingVO.java +++ b/core/src/com/cloud/storage/DiskOfferingVO.java @@ -42,7 +42,7 @@ import com.cloud.utils.db.GenericDao; @Table(name="disk_offering") @Inheritance(strategy=InheritanceType.JOINED) @DiscriminatorColumn(name="type", discriminatorType=DiscriminatorType.STRING, length=32) -public class DiskOfferingVO implements DiskOffering { +public class DiskOfferingVO implements DiskOffering, Identity { public enum Type { Disk, Service diff --git a/core/src/com/cloud/storage/GuestOSCategoryVO.java b/core/src/com/cloud/storage/GuestOSCategoryVO.java index dfe7028dbe3..b67fb873f49 100644 --- a/core/src/com/cloud/storage/GuestOSCategoryVO.java +++ b/core/src/com/cloud/storage/GuestOSCategoryVO.java @@ -29,7 +29,7 @@ import org.apache.cloudstack.api.Identity; @Entity @Table(name="guest_os_category") -public class GuestOSCategoryVO implements GuestOsCategory { +public class GuestOSCategoryVO implements GuestOsCategory, Identity { @Id @GeneratedValue(strategy=GenerationType.IDENTITY) @Column(name="id") diff --git a/core/src/com/cloud/storage/GuestOSVO.java b/core/src/com/cloud/storage/GuestOSVO.java index 7fe7f6da234..4281917298d 100644 --- a/core/src/com/cloud/storage/GuestOSVO.java +++ b/core/src/com/cloud/storage/GuestOSVO.java @@ -29,7 +29,7 @@ import org.apache.cloudstack.api.Identity; @Entity @Table(name="guest_os") -public class GuestOSVO implements GuestOS { +public class GuestOSVO implements GuestOS, Identity { @Id @GeneratedValue(strategy=GenerationType.IDENTITY) @Column(name="id") diff --git a/core/src/com/cloud/storage/SnapshotVO.java b/core/src/com/cloud/storage/SnapshotVO.java index 05692252588..928cd2d786f 100644 --- a/core/src/com/cloud/storage/SnapshotVO.java +++ b/core/src/com/cloud/storage/SnapshotVO.java @@ -35,7 +35,7 @@ import com.google.gson.annotations.Expose; @Entity @Table(name="snapshots") -public class SnapshotVO implements Snapshot { +public class SnapshotVO implements Snapshot, Identity { @Id @GeneratedValue(strategy=GenerationType.IDENTITY) @@ -131,7 +131,7 @@ public class SnapshotVO implements Snapshot { } @Override - public Long getId() { + public long getId() { return id; } diff --git a/core/src/com/cloud/user/AccountVO.java b/core/src/com/cloud/user/AccountVO.java index f5d98844c6f..5958d492a0a 100644 --- a/core/src/com/cloud/user/AccountVO.java +++ b/core/src/com/cloud/user/AccountVO.java @@ -33,7 +33,7 @@ import com.cloud.utils.db.GenericDao; @Entity @Table(name="account") -public class AccountVO implements Account { +public class AccountVO implements Account, Identity { @Id @GeneratedValue(strategy=GenerationType.IDENTITY) @Column(name="id") diff --git a/plugins/hypervisors/vmware/src/com/cloud/network/CiscoNexusVSMDeviceVO.java b/plugins/hypervisors/vmware/src/com/cloud/network/CiscoNexusVSMDeviceVO.java index 48a388980f8..4f6c0800c86 100644 --- a/plugins/hypervisors/vmware/src/com/cloud/network/CiscoNexusVSMDeviceVO.java +++ b/plugins/hypervisors/vmware/src/com/cloud/network/CiscoNexusVSMDeviceVO.java @@ -37,7 +37,7 @@ import com.cloud.utils.db.Encrypt; @Entity @Table(name="virtual_supervisor_module") -public class CiscoNexusVSMDeviceVO implements CiscoNexusVSMDevice{ +public class CiscoNexusVSMDeviceVO implements CiscoNexusVSMDevice, Identity{ // We need to know what properties a VSM has. Put them here. diff --git a/server/src/com/cloud/dc/ClusterVO.java b/server/src/com/cloud/dc/ClusterVO.java index 28e489313e5..dbed37b93e6 100644 --- a/server/src/com/cloud/dc/ClusterVO.java +++ b/server/src/com/cloud/dc/ClusterVO.java @@ -38,7 +38,7 @@ import com.cloud.utils.db.GenericDao; @Entity @Table(name="cluster") -public class ClusterVO implements Cluster { +public class ClusterVO implements Cluster, Identity { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) diff --git a/server/src/com/cloud/dc/DataCenterVO.java b/server/src/com/cloud/dc/DataCenterVO.java index d156927b840..d9b660f3c3f 100644 --- a/server/src/com/cloud/dc/DataCenterVO.java +++ b/server/src/com/cloud/dc/DataCenterVO.java @@ -39,7 +39,7 @@ import com.cloud.utils.db.GenericDao; @Entity @Table(name="data_center") -public class DataCenterVO implements DataCenter { +public class DataCenterVO implements DataCenter, Identity { @Id @GeneratedValue(strategy=GenerationType.IDENTITY) diff --git a/server/src/com/cloud/dc/VlanVO.java b/server/src/com/cloud/dc/VlanVO.java index 83e8fe63977..b322949859a 100644 --- a/server/src/com/cloud/dc/VlanVO.java +++ b/server/src/com/cloud/dc/VlanVO.java @@ -31,7 +31,7 @@ import org.apache.cloudstack.api.Identity; @Entity @Table(name="vlan") -public class VlanVO implements Vlan { +public class VlanVO implements Vlan, Identity { @Id @GeneratedValue(strategy=GenerationType.IDENTITY) diff --git a/server/src/com/cloud/domain/DomainVO.java b/server/src/com/cloud/domain/DomainVO.java index 1c9d3e034eb..e6e745e9d7f 100644 --- a/server/src/com/cloud/domain/DomainVO.java +++ b/server/src/com/cloud/domain/DomainVO.java @@ -33,7 +33,7 @@ import com.cloud.utils.db.GenericDao; @Entity @Table(name="domain") -public class DomainVO implements Domain { +public class DomainVO implements Domain, Identity { public static final Logger s_logger = Logger.getLogger(DomainVO.class.getName()); @Id diff --git a/server/src/com/cloud/network/IPAddressVO.java b/server/src/com/cloud/network/IPAddressVO.java index 82c38ba6d86..4adab35e51a 100644 --- a/server/src/com/cloud/network/IPAddressVO.java +++ b/server/src/com/cloud/network/IPAddressVO.java @@ -40,7 +40,7 @@ import com.cloud.utils.net.Ip; */ @Entity @Table(name=("user_ip_address")) -public class IPAddressVO implements IpAddress { +public class IPAddressVO implements IpAddress, Identity { @Id @GeneratedValue(strategy=GenerationType.IDENTITY) @Column(name="id") diff --git a/server/src/com/cloud/network/NetworkVO.java b/server/src/com/cloud/network/NetworkVO.java index 22b4d9bc065..5fcaa989326 100644 --- a/server/src/com/cloud/network/NetworkVO.java +++ b/server/src/com/cloud/network/NetworkVO.java @@ -44,7 +44,7 @@ import com.cloud.utils.net.NetUtils; */ @Entity @Table(name="networks") -public class NetworkVO implements Network { +public class NetworkVO implements Network, Identity { @Id @TableGenerator(name="networks_sq", table="sequence", pkColumnName="name", valueColumnName="value", pkColumnValue="networks_seq", allocationSize=1) @Column(name="id") diff --git a/server/src/com/cloud/network/as/AutoScaleVmProfileVO.java b/server/src/com/cloud/network/as/AutoScaleVmProfileVO.java index 22e87789486..453ceddcac8 100644 --- a/server/src/com/cloud/network/as/AutoScaleVmProfileVO.java +++ b/server/src/com/cloud/network/as/AutoScaleVmProfileVO.java @@ -41,7 +41,7 @@ import com.cloud.utils.net.NetUtils; @Entity @Table(name = "autoscale_vmprofiles") @Inheritance(strategy = InheritanceType.JOINED) -public class AutoScaleVmProfileVO implements AutoScaleVmProfile{ +public class AutoScaleVmProfileVO implements AutoScaleVmProfile, Identity{ @Id @GeneratedValue(strategy = GenerationType.IDENTITY) diff --git a/server/src/com/cloud/network/rules/FirewallRuleVO.java b/server/src/com/cloud/network/rules/FirewallRuleVO.java index d9f558abe0f..4ea48b12d9d 100644 --- a/server/src/com/cloud/network/rules/FirewallRuleVO.java +++ b/server/src/com/cloud/network/rules/FirewallRuleVO.java @@ -44,7 +44,7 @@ import com.cloud.utils.net.NetUtils; @Table(name="firewall_rules") @Inheritance(strategy=InheritanceType.JOINED) @DiscriminatorColumn(name="purpose", discriminatorType=DiscriminatorType.STRING, length=32) -public class FirewallRuleVO implements FirewallRule { +public class FirewallRuleVO implements FirewallRule, Identity { protected final FirewallRulesCidrsDaoImpl _firewallRulesCidrsDao = ComponentLocator.inject(FirewallRulesCidrsDaoImpl.class); @Id From 0e1083ad83d6e8b2fc6de69744449255e9cd450b Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Sun, 23 Dec 2012 02:40:14 -0800 Subject: [PATCH 191/421] api: Annotate iso related cmd and response classes Signed-off-by: Rohit Yadav --- .../ListTemplateOrIsoPermissionsCmd.java | 3 ++- .../api/commands/UpdateTemplateOrIsoCmd.java | 11 +++++----- .../UpdateTemplateOrIsoPermissionsCmd.java | 11 +++++----- .../api/command/user/iso/AttachIsoCmd.java | 10 ++++----- .../api/command/user/iso/DeleteIsoCmd.java | 11 +++++----- .../api/command/user/iso/DetachIsoCmd.java | 6 +++--- .../api/command/user/iso/ExtractIsoCmd.java | 11 +++++----- .../api/command/user/iso/ListIsosCmd.java | 10 ++++----- .../api/command/user/iso/RegisterIsoCmd.java | 21 +++++++++++-------- .../api/response/GuestOSResponse.java | 3 +++ .../response/TemplatePermissionsResponse.java | 3 +++ 11 files changed, 57 insertions(+), 43 deletions(-) diff --git a/api/src/com/cloud/api/commands/ListTemplateOrIsoPermissionsCmd.java b/api/src/com/cloud/api/commands/ListTemplateOrIsoPermissionsCmd.java index 031f2437bc2..c616cced71e 100644 --- a/api/src/com/cloud/api/commands/ListTemplateOrIsoPermissionsCmd.java +++ b/api/src/com/cloud/api/commands/ListTemplateOrIsoPermissionsCmd.java @@ -40,7 +40,8 @@ public class ListTemplateOrIsoPermissionsCmd extends BaseCmd { ///////////////////////////////////////////////////// @IdentityMapper(entityTableName="vm_template") - @Parameter(name=ApiConstants.ID, type=CommandType.LONG, required=true, description="the template ID") + @Parameter(name=ApiConstants.ID, type=CommandType.UUID, entityType = TemplatePermissionsResponse.class, + required=true, description="the template ID") private Long id; ///////////////////////////////////////////////////// diff --git a/api/src/com/cloud/api/commands/UpdateTemplateOrIsoCmd.java b/api/src/com/cloud/api/commands/UpdateTemplateOrIsoCmd.java index 407b4c90058..57e8e551fbb 100755 --- a/api/src/com/cloud/api/commands/UpdateTemplateOrIsoCmd.java +++ b/api/src/com/cloud/api/commands/UpdateTemplateOrIsoCmd.java @@ -17,11 +17,12 @@ package com.cloud.api.commands; import org.apache.cloudstack.api.command.user.iso.UpdateIsoCmd; +import org.apache.cloudstack.api.response.GuestOSResponse; +import org.apache.cloudstack.api.response.TemplateResponse; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Parameter; public abstract class UpdateTemplateOrIsoCmd extends BaseCmd { @@ -37,15 +38,15 @@ public abstract class UpdateTemplateOrIsoCmd extends BaseCmd { @Parameter(name=ApiConstants.DISPLAY_TEXT, type=CommandType.STRING, description="the display text of the image", length=4096) private String displayText; - @IdentityMapper(entityTableName="vm_template") - @Parameter(name=ApiConstants.ID, type=CommandType.LONG, required=true, description="the ID of the image file") + @Parameter(name=ApiConstants.ID, type=CommandType.UUID, entityType = TemplateResponse.class, + required=true, description="the ID of the image file") private Long id; @Parameter(name=ApiConstants.NAME, type=CommandType.STRING, description="the name of the image file") private String templateName; - @IdentityMapper(entityTableName="guest_os") - @Parameter(name=ApiConstants.OS_TYPE_ID, type=CommandType.LONG, description="the ID of the OS type that best represents the OS of this image.") + @Parameter(name=ApiConstants.OS_TYPE_ID, type=CommandType.UUID, entityType = GuestOSResponse.class, + description="the ID of the OS type that best represents the OS of this image.") private Long osTypeId; @Parameter(name=ApiConstants.FORMAT, type=CommandType.STRING, description="the format for the image") diff --git a/api/src/com/cloud/api/commands/UpdateTemplateOrIsoPermissionsCmd.java b/api/src/com/cloud/api/commands/UpdateTemplateOrIsoPermissionsCmd.java index f9123006b97..5208e1d2f7e 100755 --- a/api/src/com/cloud/api/commands/UpdateTemplateOrIsoPermissionsCmd.java +++ b/api/src/com/cloud/api/commands/UpdateTemplateOrIsoPermissionsCmd.java @@ -18,11 +18,12 @@ package com.cloud.api.commands; import java.util.List; +import org.apache.cloudstack.api.response.ProjectResponse; +import org.apache.cloudstack.api.response.TemplateResponse; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; import org.apache.cloudstack.api.response.SuccessResponse; @@ -39,8 +40,8 @@ public abstract class UpdateTemplateOrIsoPermissionsCmd extends BaseCmd { @Parameter(name = ApiConstants.ACCOUNTS, type = CommandType.LIST, collectionType = CommandType.STRING, description = "a comma delimited list of accounts. If specified, \"op\" parameter has to be passed in.") private List accountNames; - @IdentityMapper(entityTableName="vm_template") - @Parameter(name = ApiConstants.ID, type = CommandType.LONG, required = true, description = "the template ID") + @Parameter(name = ApiConstants.ID, type = CommandType.UUID, entityType = TemplateResponse.class, + required = true, description = "the template ID") private Long id; @Parameter(name = ApiConstants.IS_FEATURED, type = CommandType.BOOLEAN, description = "true for featured template/iso, false otherwise") @@ -55,8 +56,8 @@ public abstract class UpdateTemplateOrIsoPermissionsCmd extends BaseCmd { @Parameter(name = ApiConstants.OP, type = CommandType.STRING, description = "permission operator (add, remove, reset)") private String operation; - @IdentityMapper(entityTableName="projects") - @Parameter(name = ApiConstants.PROJECT_IDS, type = CommandType.LIST, collectionType = CommandType.LONG, description = "a comma delimited list of projects. If specified, \"op\" parameter has to be passed in.") + @Parameter(name = ApiConstants.PROJECT_IDS, type = CommandType.LIST, collectionType = CommandType.UUID, entityType = ProjectResponse.class, + description = "a comma delimited list of projects. If specified, \"op\" parameter has to be passed in.") private List projectIds; // /////////////////////////////////////////////////// diff --git a/api/src/org/apache/cloudstack/api/command/user/iso/AttachIsoCmd.java b/api/src/org/apache/cloudstack/api/command/user/iso/AttachIsoCmd.java index d2026ea49db..755dbb6d246 100644 --- a/api/src/org/apache/cloudstack/api/command/user/iso/AttachIsoCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/iso/AttachIsoCmd.java @@ -17,12 +17,12 @@ package org.apache.cloudstack.api.command.user.iso; import org.apache.cloudstack.api.command.user.vm.DeployVMCmd; +import org.apache.cloudstack.api.response.TemplateResponse; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; @@ -42,12 +42,12 @@ public class AttachIsoCmd extends BaseAsyncCmd { //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - @IdentityMapper(entityTableName="vm_template") - @Parameter(name=ApiConstants.ID, type=CommandType.LONG, required=true, description="the ID of the ISO file") + @Parameter(name=ApiConstants.ID, type=CommandType.UUID, entityType = TemplateResponse.class, + required=true, description="the ID of the ISO file") private Long id; - @IdentityMapper(entityTableName="vm_instance") - @Parameter(name=ApiConstants.VIRTUAL_MACHINE_ID, type=CommandType.LONG, required=true, description="the ID of the virtual machine") + @Parameter(name=ApiConstants.VIRTUAL_MACHINE_ID, type=CommandType.UUID, entityType = TemplateResponse.class, + required=true, description="the ID of the virtual machine") private Long virtualMachineId; diff --git a/api/src/org/apache/cloudstack/api/command/user/iso/DeleteIsoCmd.java b/api/src/org/apache/cloudstack/api/command/user/iso/DeleteIsoCmd.java index 3d6122e6c27..2f5a7675af4 100644 --- a/api/src/org/apache/cloudstack/api/command/user/iso/DeleteIsoCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/iso/DeleteIsoCmd.java @@ -21,11 +21,12 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; import org.apache.cloudstack.api.response.SuccessResponse; +import org.apache.cloudstack.api.response.TemplateResponse; +import org.apache.cloudstack.api.response.ZoneResponse; import com.cloud.async.AsyncJob; import com.cloud.event.EventTypes; import com.cloud.template.VirtualMachineTemplate; @@ -41,12 +42,12 @@ public class DeleteIsoCmd extends BaseAsyncCmd { //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - @IdentityMapper(entityTableName="vm_template") - @Parameter(name=ApiConstants.ID, type=CommandType.LONG, required=true, description="the ID of the ISO file") + @Parameter(name=ApiConstants.ID, type=CommandType.UUID, entityType = TemplateResponse.class, + required=true, description="the ID of the ISO file") private Long id; - @IdentityMapper(entityTableName="data_center") - @Parameter(name=ApiConstants.ZONE_ID, type=CommandType.LONG, description="the ID of the zone of the ISO file. If not specified, the ISO will be deleted from all the zones") + @Parameter(name=ApiConstants.ZONE_ID, type=CommandType.UUID, entityType = ZoneResponse.class, + description="the ID of the zone of the ISO file. If not specified, the ISO will be deleted from all the zones") private Long zoneId; diff --git a/api/src/org/apache/cloudstack/api/command/user/iso/DetachIsoCmd.java b/api/src/org/apache/cloudstack/api/command/user/iso/DetachIsoCmd.java index 36555f290c8..a79c7009153 100644 --- a/api/src/org/apache/cloudstack/api/command/user/iso/DetachIsoCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/iso/DetachIsoCmd.java @@ -17,12 +17,12 @@ package org.apache.cloudstack.api.command.user.iso; import org.apache.cloudstack.api.command.user.vm.DeployVMCmd; +import org.apache.cloudstack.api.response.TemplateResponse; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; @@ -41,8 +41,8 @@ public class DetachIsoCmd extends BaseAsyncCmd { //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - @IdentityMapper(entityTableName="vm_instance") - @Parameter(name=ApiConstants.VIRTUAL_MACHINE_ID, type=CommandType.LONG, required=true, description="The ID of the virtual machine") + @Parameter(name=ApiConstants.VIRTUAL_MACHINE_ID, type=CommandType.UUID, entityType = TemplateResponse.class, + required=true, description="The ID of the virtual machine") private Long virtualMachineId; ///////////////////////////////////////////////////// diff --git a/api/src/org/apache/cloudstack/api/command/user/iso/ExtractIsoCmd.java b/api/src/org/apache/cloudstack/api/command/user/iso/ExtractIsoCmd.java index 1fbb7e83710..d2d6859bf7d 100644 --- a/api/src/org/apache/cloudstack/api/command/user/iso/ExtractIsoCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/iso/ExtractIsoCmd.java @@ -16,12 +16,13 @@ // under the License. package org.apache.cloudstack.api.command.user.iso; +import org.apache.cloudstack.api.response.TemplateResponse; +import org.apache.cloudstack.api.response.ZoneResponse; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; @@ -43,15 +44,15 @@ public class ExtractIsoCmd extends BaseAsyncCmd { //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - @IdentityMapper(entityTableName="vm_template") - @Parameter(name=ApiConstants.ID, type=CommandType.LONG, required=true, description="the ID of the ISO file") + @Parameter(name=ApiConstants.ID, type=CommandType.UUID, entityType = TemplateResponse.class, + required=true, description="the ID of the ISO file") private Long id; @Parameter(name=ApiConstants.URL, type=CommandType.STRING, required=false, description="the url to which the ISO would be extracted") private String url; - @IdentityMapper(entityTableName="data_center") - @Parameter(name=ApiConstants.ZONE_ID, type=CommandType.LONG, required=false, description="the ID of the zone where the ISO is originally located") + @Parameter(name=ApiConstants.ZONE_ID, type=CommandType.UUID, entityType = ZoneResponse.class, + required=false, description="the ID of the zone where the ISO is originally located") private Long zoneId; @Parameter(name=ApiConstants.MODE, type=CommandType.STRING, required=true, description="the mode of extraction - HTTP_DOWNLOAD or FTP_UPLOAD") diff --git a/api/src/org/apache/cloudstack/api/command/user/iso/ListIsosCmd.java b/api/src/org/apache/cloudstack/api/command/user/iso/ListIsosCmd.java index 8b641f2e4da..7b5feaee6bb 100644 --- a/api/src/org/apache/cloudstack/api/command/user/iso/ListIsosCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/iso/ListIsosCmd.java @@ -20,11 +20,11 @@ import java.util.ArrayList; import java.util.List; import java.util.Set; +import org.apache.cloudstack.api.response.ZoneResponse; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseListTaggedResourcesCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.response.ListResponse; @@ -51,8 +51,8 @@ public class ListIsosCmd extends BaseListTaggedResourcesCmd { @Parameter(name=ApiConstants.HYPERVISOR, type=CommandType.STRING, description="the hypervisor for which to restrict the search") private String hypervisor; - @IdentityMapper(entityTableName="vm_template") - @Parameter(name=ApiConstants.ID, type=CommandType.LONG, description="list all isos by id") + @Parameter(name=ApiConstants.ID, type=CommandType.UUID, entityType = TemplateResponse.class, + description="list all isos by id") private Long id; @Parameter(name=ApiConstants.IS_PUBLIC, type=CommandType.BOOLEAN, description="true if the ISO is publicly available to all users, false otherwise.") @@ -71,8 +71,8 @@ public class ListIsosCmd extends BaseListTaggedResourcesCmd { @Parameter(name=ApiConstants.NAME, type=CommandType.STRING, description="list all isos by name") private String isoName; - @IdentityMapper(entityTableName="data_center") - @Parameter(name=ApiConstants.ZONE_ID, type=CommandType.LONG, description="the ID of the zone") + @Parameter(name=ApiConstants.ZONE_ID, type=CommandType.UUID, entityType = ZoneResponse.class, + description="the ID of the zone") private Long zoneId; ///////////////////////////////////////////////////// diff --git a/api/src/org/apache/cloudstack/api/command/user/iso/RegisterIsoCmd.java b/api/src/org/apache/cloudstack/api/command/user/iso/RegisterIsoCmd.java index 0961800e892..a380b1374a8 100644 --- a/api/src/org/apache/cloudstack/api/command/user/iso/RegisterIsoCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/iso/RegisterIsoCmd.java @@ -22,12 +22,15 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; +import org.apache.cloudstack.api.response.DomainResponse; +import org.apache.cloudstack.api.response.GuestOSResponse; import org.apache.cloudstack.api.response.ListResponse; +import org.apache.cloudstack.api.response.ProjectResponse; import org.apache.cloudstack.api.response.TemplateResponse; +import org.apache.cloudstack.api.response.ZoneResponse; import com.cloud.exception.ResourceAllocationException; import com.cloud.template.VirtualMachineTemplate; import com.cloud.user.UserContext; @@ -60,19 +63,19 @@ public class RegisterIsoCmd extends BaseCmd { @Parameter(name=ApiConstants.NAME, type=CommandType.STRING, required=true, description="the name of the ISO") private String isoName; - @IdentityMapper(entityTableName="guest_os") - @Parameter(name=ApiConstants.OS_TYPE_ID, type=CommandType.LONG, description="the ID of the OS Type that best represents the OS of this ISO. If the iso is bootable this parameter needs to be passed") + @Parameter(name=ApiConstants.OS_TYPE_ID, type=CommandType.UUID, entityType = GuestOSResponse.class, + description="the ID of the OS Type that best represents the OS of this ISO. If the iso is bootable this parameter needs to be passed") private Long osTypeId; @Parameter(name=ApiConstants.URL, type=CommandType.STRING, required=true, description="the URL to where the ISO is currently being hosted") private String url; - @IdentityMapper(entityTableName="data_center") - @Parameter(name=ApiConstants.ZONE_ID, type=CommandType.LONG, required=true, description="the ID of the zone you wish to register the ISO to.") + @Parameter(name=ApiConstants.ZONE_ID, type=CommandType.UUID, entityType = ZoneResponse.class, + required=true, description="the ID of the zone you wish to register the ISO to.") private Long zoneId; - @IdentityMapper(entityTableName="domain") - @Parameter(name=ApiConstants.DOMAIN_ID, type=CommandType.LONG, description="an optional domainId. If the account parameter is used, domainId must also be used.") + @Parameter(name=ApiConstants.DOMAIN_ID, type=CommandType.UUID, entityType = DomainResponse.class, + description="an optional domainId. If the account parameter is used, domainId must also be used.") private Long domainId; @Parameter(name=ApiConstants.ACCOUNT, type=CommandType.STRING, description="an optional account name. Must be used with domainId.") @@ -81,8 +84,8 @@ public class RegisterIsoCmd extends BaseCmd { @Parameter(name=ApiConstants.CHECKSUM, type=CommandType.STRING, description="the MD5 checksum value of this ISO") private String checksum; - @IdentityMapper(entityTableName="projects") - @Parameter(name=ApiConstants.PROJECT_ID, type=CommandType.LONG, description="Register iso for the project") + @Parameter(name=ApiConstants.PROJECT_ID, type=CommandType.UUID, entityType = ProjectResponse.class, + description="Register iso for the project") private Long projectId; ///////////////////////////////////////////////////// diff --git a/api/src/org/apache/cloudstack/api/response/GuestOSResponse.java b/api/src/org/apache/cloudstack/api/response/GuestOSResponse.java index a4f592e019e..c7efa4fe831 100644 --- a/api/src/org/apache/cloudstack/api/response/GuestOSResponse.java +++ b/api/src/org/apache/cloudstack/api/response/GuestOSResponse.java @@ -16,11 +16,14 @@ // under the License. package org.apache.cloudstack.api.response; +import com.cloud.storage.GuestOS; import org.apache.cloudstack.api.ApiConstants; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; import org.apache.cloudstack.api.BaseResponse; +import org.apache.cloudstack.api.Entity; +@Entity(value=GuestOS.class) public class GuestOSResponse extends BaseResponse { @SerializedName(ApiConstants.ID) @Param(description="the ID of the OS type") private String id; diff --git a/api/src/org/apache/cloudstack/api/response/TemplatePermissionsResponse.java b/api/src/org/apache/cloudstack/api/response/TemplatePermissionsResponse.java index 3291c34ca71..3774347b1eb 100644 --- a/api/src/org/apache/cloudstack/api/response/TemplatePermissionsResponse.java +++ b/api/src/org/apache/cloudstack/api/response/TemplatePermissionsResponse.java @@ -18,11 +18,14 @@ package org.apache.cloudstack.api.response; import java.util.List; +import com.cloud.template.VirtualMachineTemplate; import org.apache.cloudstack.api.ApiConstants; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; import org.apache.cloudstack.api.BaseResponse; +import org.apache.cloudstack.api.Entity; +@Entity(value=VirtualMachineTemplate.class) @SuppressWarnings("unused") public class TemplatePermissionsResponse extends BaseResponse { @SerializedName(ApiConstants.ID) @Param(description="the template ID") From 94e7add7aa626f886cb9469f9c4d6d1220185e2b Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Sun, 23 Dec 2012 02:45:41 -0800 Subject: [PATCH 192/421] client: Re-add missing license header in client/cloudstack-ui.launch Partially reverts Min's change; e7fa1a86fb Signed-off-by: Rohit Yadav --- client/cloudstack-ui.launch | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/client/cloudstack-ui.launch b/client/cloudstack-ui.launch index b47097c33cf..1943d17aebd 100644 --- a/client/cloudstack-ui.launch +++ b/client/cloudstack-ui.launch @@ -1,4 +1,22 @@ + From 8559b4eab8962ac4dff9417b9fc3bdfebaf52b4b Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Sun, 23 Dec 2012 03:01:26 -0800 Subject: [PATCH 193/421] api: Annotate loadbalancer related cmd and response classes Signed-off-by: Rohit Yadav --- .../AssignToLoadBalancerRuleCmd.java | 11 +++++----- .../CreateLBStickinessPolicyCmd.java | 6 +++--- .../CreateLoadBalancerRuleCmd.java | 21 +++++++++++-------- .../DeleteLBStickinessPolicyCmd.java | 6 +++--- .../DeleteLoadBalancerRuleCmd.java | 6 +++--- .../ListLBStickinessPoliciesCmd.java | 10 +++------ .../ListLoadBalancerRuleInstancesCmd.java | 6 +++--- .../ListLoadBalancerRulesCmd.java | 21 +++++++++++-------- .../RemoveFromLoadBalancerRuleCmd.java | 11 +++++----- .../UpdateLoadBalancerRuleCmd.java | 6 +++--- .../api/response/LBStickinessResponse.java | 3 +++ 11 files changed, 57 insertions(+), 50 deletions(-) diff --git a/api/src/org/apache/cloudstack/api/command/user/loadbalancer/AssignToLoadBalancerRuleCmd.java b/api/src/org/apache/cloudstack/api/command/user/loadbalancer/AssignToLoadBalancerRuleCmd.java index 82ff8ebaea9..575ea4ff42d 100644 --- a/api/src/org/apache/cloudstack/api/command/user/loadbalancer/AssignToLoadBalancerRuleCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/loadbalancer/AssignToLoadBalancerRuleCmd.java @@ -18,12 +18,13 @@ package org.apache.cloudstack.api.command.user.loadbalancer; import java.util.List; +import org.apache.cloudstack.api.response.FirewallRuleResponse; +import org.apache.cloudstack.api.response.UserVmResponse; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; @@ -45,12 +46,12 @@ public class AssignToLoadBalancerRuleCmd extends BaseAsyncCmd { //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - @IdentityMapper(entityTableName="firewall_rules") - @Parameter(name=ApiConstants.ID, type=CommandType.LONG, required=true, description="the ID of the load balancer rule") + @Parameter(name=ApiConstants.ID, type=CommandType.UUID, entityType = FirewallRuleResponse.class, + required=true, description="the ID of the load balancer rule") private Long id; - @IdentityMapper(entityTableName="vm_instance") - @Parameter(name=ApiConstants.VIRTUAL_MACHINE_IDS, type=CommandType.LIST, collectionType=CommandType.LONG, required=true, description="the list of IDs of the virtual machine that are being assigned to the load balancer rule(i.e. virtualMachineIds=1,2,3)") + @Parameter(name=ApiConstants.VIRTUAL_MACHINE_IDS, type=CommandType.LIST, collectionType=CommandType.UUID, entityType = UserVmResponse.class, + required=true, description="the list of IDs of the virtual machine that are being assigned to the load balancer rule(i.e. virtualMachineIds=1,2,3)") private List virtualMachineIds; ///////////////////////////////////////////////////// diff --git a/api/src/org/apache/cloudstack/api/command/user/loadbalancer/CreateLBStickinessPolicyCmd.java b/api/src/org/apache/cloudstack/api/command/user/loadbalancer/CreateLBStickinessPolicyCmd.java index 3583bfabeec..004340faec3 100644 --- a/api/src/org/apache/cloudstack/api/command/user/loadbalancer/CreateLBStickinessPolicyCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/loadbalancer/CreateLBStickinessPolicyCmd.java @@ -19,12 +19,12 @@ package org.apache.cloudstack.api.command.user.loadbalancer; import java.util.Map; +import org.apache.cloudstack.api.response.FirewallRuleResponse; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseAsyncCreateCmd; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; @@ -51,8 +51,8 @@ public class CreateLBStickinessPolicyCmd extends BaseAsyncCreateCmd { // ////////////// API parameters ///////////////////// // /////////////////////////////////////////////////// - @IdentityMapper(entityTableName="firewall_rules") - @Parameter(name = ApiConstants.LBID, type = CommandType.LONG, required = true, description = "the ID of the load balancer rule") + @Parameter(name = ApiConstants.LBID, type = CommandType.UUID, entityType = FirewallRuleResponse.class, + required = true, description = "the ID of the load balancer rule") private Long lbRuleId; @Parameter(name = ApiConstants.DESCRIPTION, type = CommandType.STRING, description = "the description of the LB Stickiness policy") diff --git a/api/src/org/apache/cloudstack/api/command/user/loadbalancer/CreateLoadBalancerRuleCmd.java b/api/src/org/apache/cloudstack/api/command/user/loadbalancer/CreateLoadBalancerRuleCmd.java index 669fd01c04a..6782723cd08 100644 --- a/api/src/org/apache/cloudstack/api/command/user/loadbalancer/CreateLoadBalancerRuleCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/loadbalancer/CreateLoadBalancerRuleCmd.java @@ -23,11 +23,14 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseAsyncCreateCmd; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; +import org.apache.cloudstack.api.response.DomainResponse; +import org.apache.cloudstack.api.response.IPAddressResponse; import org.apache.cloudstack.api.response.LoadBalancerResponse; +import org.apache.cloudstack.api.response.NetworkResponse; +import org.apache.cloudstack.api.response.ZoneResponse; import com.cloud.async.AsyncJob; import com.cloud.dc.DataCenter; import com.cloud.dc.DataCenter.NetworkType; @@ -66,12 +69,12 @@ public class CreateLoadBalancerRuleCmd extends BaseAsyncCreateCmd /*implements @Parameter(name=ApiConstants.PRIVATE_PORT, type=CommandType.INTEGER, required=true, description="the private port of the private ip address/virtual machine where the network traffic will be load balanced to") private Integer privatePort; - @IdentityMapper(entityTableName="user_ip_address") - @Parameter(name=ApiConstants.PUBLIC_IP_ID, type=CommandType.LONG, description="public ip address id from where the network traffic will be load balanced from") + @Parameter(name=ApiConstants.PUBLIC_IP_ID, type=CommandType.UUID, entityType = IPAddressResponse.class, + description="public ip address id from where the network traffic will be load balanced from") private Long publicIpId; - @IdentityMapper(entityTableName="data_center") - @Parameter(name=ApiConstants.ZONE_ID, type=CommandType.LONG, required=false, description="zone where the load balancer is going to be created. This parameter is required when LB service provider is ElasticLoadBalancerVm") + @Parameter(name=ApiConstants.ZONE_ID, type=CommandType.UUID, entityType = ZoneResponse.class, + required=false, description="zone where the load balancer is going to be created. This parameter is required when LB service provider is ElasticLoadBalancerVm") private Long zoneId; @Parameter(name=ApiConstants.PUBLIC_PORT, type=CommandType.INTEGER, required=true, description="the public port from where the network traffic will be load balanced from") @@ -85,15 +88,15 @@ public class CreateLoadBalancerRuleCmd extends BaseAsyncCreateCmd /*implements @Parameter(name=ApiConstants.ACCOUNT, type=CommandType.STRING, description="the account associated with the load balancer. Must be used with the domainId parameter.") private String accountName; - @IdentityMapper(entityTableName="domain") - @Parameter(name=ApiConstants.DOMAIN_ID, type=CommandType.LONG, description="the domain ID associated with the load balancer") + @Parameter(name=ApiConstants.DOMAIN_ID, type=CommandType.UUID, entityType = DomainResponse.class, + description="the domain ID associated with the load balancer") private Long domainId; @Parameter(name = ApiConstants.CIDR_LIST, type = CommandType.LIST, collectionType = CommandType.STRING, description = "the cidr list to forward traffic from") private List cidrlist; - @IdentityMapper(entityTableName="networks") - @Parameter(name=ApiConstants.NETWORK_ID, type=CommandType.LONG, description="The guest network this " + + @Parameter(name=ApiConstants.NETWORK_ID, type=CommandType.UUID, entityType = NetworkResponse.class, + description="The guest network this " + "rule will be created for. Required when public Ip address is not associated with any Guest network yet (VPC case)") private Long networkId; diff --git a/api/src/org/apache/cloudstack/api/command/user/loadbalancer/DeleteLBStickinessPolicyCmd.java b/api/src/org/apache/cloudstack/api/command/user/loadbalancer/DeleteLBStickinessPolicyCmd.java index 99abf2e2ffa..0dfd934ca30 100644 --- a/api/src/org/apache/cloudstack/api/command/user/loadbalancer/DeleteLBStickinessPolicyCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/loadbalancer/DeleteLBStickinessPolicyCmd.java @@ -16,12 +16,12 @@ // under the License. package org.apache.cloudstack.api.command.user.loadbalancer; +import org.apache.cloudstack.api.response.LBStickinessResponse; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; @@ -41,8 +41,8 @@ public class DeleteLBStickinessPolicyCmd extends BaseAsyncCmd { // ////////////// API parameters ///////////////////// // /////////////////////////////////////////////////// - @IdentityMapper(entityTableName="load_balancer_stickiness_policies") - @Parameter(name = ApiConstants.ID, type = CommandType.LONG, required = true, description = "the ID of the LB stickiness policy") + @Parameter(name = ApiConstants.ID, type = CommandType.UUID, entityType = LBStickinessResponse.class, + required = true, description = "the ID of the LB stickiness policy") private Long id; // /////////////////////////////////////////////////// diff --git a/api/src/org/apache/cloudstack/api/command/user/loadbalancer/DeleteLoadBalancerRuleCmd.java b/api/src/org/apache/cloudstack/api/command/user/loadbalancer/DeleteLoadBalancerRuleCmd.java index c8e6479f77b..9dd3dc5449a 100644 --- a/api/src/org/apache/cloudstack/api/command/user/loadbalancer/DeleteLoadBalancerRuleCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/loadbalancer/DeleteLoadBalancerRuleCmd.java @@ -16,12 +16,12 @@ // under the License. package org.apache.cloudstack.api.command.user.loadbalancer; +import org.apache.cloudstack.api.response.FirewallRuleResponse; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; @@ -41,8 +41,8 @@ public class DeleteLoadBalancerRuleCmd extends BaseAsyncCmd { //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - @IdentityMapper(entityTableName="firewall_rules") - @Parameter(name=ApiConstants.ID, type=CommandType.LONG, required=true, description="the ID of the load balancer rule") + @Parameter(name=ApiConstants.ID, type=CommandType.UUID, entityType = FirewallRuleResponse.class, + required=true, description="the ID of the load balancer rule") private Long id; diff --git a/api/src/org/apache/cloudstack/api/command/user/loadbalancer/ListLBStickinessPoliciesCmd.java b/api/src/org/apache/cloudstack/api/command/user/loadbalancer/ListLBStickinessPoliciesCmd.java index 683b12aa11d..b563468efce 100644 --- a/api/src/org/apache/cloudstack/api/command/user/loadbalancer/ListLBStickinessPoliciesCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/loadbalancer/ListLBStickinessPoliciesCmd.java @@ -19,11 +19,11 @@ package org.apache.cloudstack.api.command.user.loadbalancer; import java.util.ArrayList; import java.util.List; +import org.apache.cloudstack.api.response.FirewallRuleResponse; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseListCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.response.LBStickinessResponse; @@ -43,12 +43,10 @@ public class ListLBStickinessPoliciesCmd extends BaseListCmd { // /////////////////////////////////////////////////// // ////////////// API parameters ///////////////////// // /////////////////////////////////////////////////// - @IdentityMapper(entityTableName="firewall_rules") - @Parameter(name = ApiConstants.LBID, type = CommandType.LONG, required = true, description = "the ID of the load balancer rule") + @Parameter(name = ApiConstants.LBID, type = CommandType.UUID, entityType = FirewallRuleResponse.class, + required = true, description = "the ID of the load balancer rule") private Long lbRuleId; - - // /////////////////////////////////////////////////// // ///////////////// Accessors /////////////////////// // /////////////////////////////////////////////////// @@ -56,8 +54,6 @@ public class ListLBStickinessPoliciesCmd extends BaseListCmd { return lbRuleId; } - - // /////////////////////////////////////////////////// // ///////////// API Implementation/////////////////// // /////////////////////////////////////////////////// diff --git a/api/src/org/apache/cloudstack/api/command/user/loadbalancer/ListLoadBalancerRuleInstancesCmd.java b/api/src/org/apache/cloudstack/api/command/user/loadbalancer/ListLoadBalancerRuleInstancesCmd.java index 1fc082672d0..f8a977bf36e 100644 --- a/api/src/org/apache/cloudstack/api/command/user/loadbalancer/ListLoadBalancerRuleInstancesCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/loadbalancer/ListLoadBalancerRuleInstancesCmd.java @@ -19,11 +19,11 @@ package org.apache.cloudstack.api.command.user.loadbalancer; import java.util.ArrayList; import java.util.List; +import org.apache.cloudstack.api.response.FirewallRuleResponse; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseListCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.response.ListResponse; @@ -43,8 +43,8 @@ public class ListLoadBalancerRuleInstancesCmd extends BaseListCmd { @Parameter(name=ApiConstants.APPLIED, type=CommandType.BOOLEAN, description="true if listing all virtual machines currently applied to the load balancer rule; default is true") private Boolean applied; - @IdentityMapper(entityTableName="firewall_rules") - @Parameter(name=ApiConstants.ID, type=CommandType.LONG, required=true, description="the ID of the load balancer rule") + @Parameter(name=ApiConstants.ID, type=CommandType.UUID, entityType = FirewallRuleResponse.class, + required=true, description="the ID of the load balancer rule") private Long id; ///////////////////////////////////////////////////// diff --git a/api/src/org/apache/cloudstack/api/command/user/loadbalancer/ListLoadBalancerRulesCmd.java b/api/src/org/apache/cloudstack/api/command/user/loadbalancer/ListLoadBalancerRulesCmd.java index a0d0f9d8a97..a4dc7658122 100644 --- a/api/src/org/apache/cloudstack/api/command/user/loadbalancer/ListLoadBalancerRulesCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/loadbalancer/ListLoadBalancerRulesCmd.java @@ -23,11 +23,14 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseListTaggedResourcesCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.response.FirewallRuleResponse; +import org.apache.cloudstack.api.response.IPAddressResponse; import org.apache.cloudstack.api.response.ListResponse; import org.apache.cloudstack.api.response.LoadBalancerResponse; +import org.apache.cloudstack.api.response.UserVmResponse; +import org.apache.cloudstack.api.response.ZoneResponse; import com.cloud.network.rules.LoadBalancer; import com.cloud.utils.Pair; @@ -41,23 +44,23 @@ public class ListLoadBalancerRulesCmd extends BaseListTaggedResourcesCmd { // ////////////// API parameters ///////////////////// // /////////////////////////////////////////////////// - @IdentityMapper(entityTableName="firewall_rules") - @Parameter(name = ApiConstants.ID, type = CommandType.LONG, description = "the ID of the load balancer rule") + @Parameter(name = ApiConstants.ID, type = CommandType.UUID, entityType = FirewallRuleResponse.class, + description = "the ID of the load balancer rule") private Long id; @Parameter(name = ApiConstants.NAME, type = CommandType.STRING, description = "the name of the load balancer rule") private String loadBalancerRuleName; - @IdentityMapper(entityTableName="user_ip_address") - @Parameter(name = ApiConstants.PUBLIC_IP_ID, type = CommandType.LONG, description = "the public IP address id of the load balancer rule ") + @Parameter(name = ApiConstants.PUBLIC_IP_ID, type = CommandType.UUID, entityType = IPAddressResponse.class, + description = "the public IP address id of the load balancer rule ") private Long publicIpId; - @IdentityMapper(entityTableName="vm_instance") - @Parameter(name = ApiConstants.VIRTUAL_MACHINE_ID, type = CommandType.LONG, description = "the ID of the virtual machine of the load balancer rule") + @Parameter(name = ApiConstants.VIRTUAL_MACHINE_ID, type = CommandType.UUID, entityType = UserVmResponse.class, + description = "the ID of the virtual machine of the load balancer rule") private Long virtualMachineId; - @IdentityMapper(entityTableName="data_center") - @Parameter(name = ApiConstants.ZONE_ID, type = CommandType.LONG, description = "the availability zone ID") + @Parameter(name = ApiConstants.ZONE_ID, type = CommandType.UUID, entityType = ZoneResponse.class, + description = "the availability zone ID") private Long zoneId; // /////////////////////////////////////////////////// diff --git a/api/src/org/apache/cloudstack/api/command/user/loadbalancer/RemoveFromLoadBalancerRuleCmd.java b/api/src/org/apache/cloudstack/api/command/user/loadbalancer/RemoveFromLoadBalancerRuleCmd.java index e20aae94723..775c3ca235f 100644 --- a/api/src/org/apache/cloudstack/api/command/user/loadbalancer/RemoveFromLoadBalancerRuleCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/loadbalancer/RemoveFromLoadBalancerRuleCmd.java @@ -23,10 +23,11 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; +import org.apache.cloudstack.api.response.FirewallRuleResponse; +import org.apache.cloudstack.api.response.UserVmResponse; import org.apache.cloudstack.api.response.SuccessResponse; import com.cloud.event.EventTypes; import com.cloud.exception.InvalidParameterValueException; @@ -45,12 +46,12 @@ public class RemoveFromLoadBalancerRuleCmd extends BaseAsyncCmd { //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - @IdentityMapper(entityTableName="firewall_rules") - @Parameter(name=ApiConstants.ID, type=CommandType.LONG, required=true, description="The ID of the load balancer rule") + @Parameter(name=ApiConstants.ID, type=CommandType.UUID, entityType = FirewallRuleResponse.class, + required=true, description="The ID of the load balancer rule") private Long id; - @IdentityMapper(entityTableName="vm_instance") - @Parameter(name=ApiConstants.VIRTUAL_MACHINE_IDS, type=CommandType.LIST, required = true, collectionType=CommandType.LONG, description="the list of IDs of the virtual machines that are being removed from the load balancer rule (i.e. virtualMachineIds=1,2,3)") + @Parameter(name=ApiConstants.VIRTUAL_MACHINE_IDS, type=CommandType.LIST, required = true, collectionType=CommandType.UUID, entityType = UserVmResponse.class, + description="the list of IDs of the virtual machines that are being removed from the load balancer rule (i.e. virtualMachineIds=1,2,3)") private List virtualMachineIds; ///////////////////////////////////////////////////// diff --git a/api/src/org/apache/cloudstack/api/command/user/loadbalancer/UpdateLoadBalancerRuleCmd.java b/api/src/org/apache/cloudstack/api/command/user/loadbalancer/UpdateLoadBalancerRuleCmd.java index 34f78be83b2..edcbc0bd925 100644 --- a/api/src/org/apache/cloudstack/api/command/user/loadbalancer/UpdateLoadBalancerRuleCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/loadbalancer/UpdateLoadBalancerRuleCmd.java @@ -16,12 +16,12 @@ // under the License. package org.apache.cloudstack.api.command.user.loadbalancer; +import org.apache.cloudstack.api.response.FirewallRuleResponse; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; @@ -46,8 +46,8 @@ public class UpdateLoadBalancerRuleCmd extends BaseAsyncCmd { @Parameter(name=ApiConstants.DESCRIPTION, type=CommandType.STRING, description="the description of the load balancer rule", length=4096) private String description; - @IdentityMapper(entityTableName="firewall_rules") - @Parameter(name=ApiConstants.ID, type=CommandType.LONG, required=true, description="the id of the load balancer rule to update") + @Parameter(name=ApiConstants.ID, type=CommandType.UUID, entityType = FirewallRuleResponse.class, + required=true, description="the id of the load balancer rule to update") private Long id; @Parameter(name=ApiConstants.NAME, type=CommandType.STRING, description="the name of the load balancer rule") diff --git a/api/src/org/apache/cloudstack/api/response/LBStickinessResponse.java b/api/src/org/apache/cloudstack/api/response/LBStickinessResponse.java index 7ac9543931c..6d70ba15a65 100644 --- a/api/src/org/apache/cloudstack/api/response/LBStickinessResponse.java +++ b/api/src/org/apache/cloudstack/api/response/LBStickinessResponse.java @@ -16,13 +16,16 @@ // under the License. package org.apache.cloudstack.api.response; +import com.cloud.network.rules.StickinessPolicy; import org.apache.cloudstack.api.ApiConstants; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; import org.apache.cloudstack.api.BaseResponse; +import org.apache.cloudstack.api.Entity; import java.util.List; +@Entity(value=StickinessPolicy.class) public class LBStickinessResponse extends BaseResponse { @SerializedName("lbruleid") @Param(description = "the LB rule ID") From 06246ae27cbef314eec638248cc9d317f5ff80e0 Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Sun, 23 Dec 2012 03:08:09 -0800 Subject: [PATCH 194/421] api: Annotate nat apis Signed-off-by: Rohit Yadav --- .../user/nat/CreateIpForwardingRuleCmd.java | 6 +++--- .../user/nat/DeleteIpForwardingRuleCmd.java | 12 ++++++------ .../api/command/user/nat/DisableStaticNatCmd.java | 6 +++--- .../api/command/user/nat/EnableStaticNatCmd.java | 15 ++++++++------- .../user/nat/ListIpForwardingRulesCmd.java | 15 ++++++++------- 5 files changed, 28 insertions(+), 26 deletions(-) diff --git a/api/src/org/apache/cloudstack/api/command/user/nat/CreateIpForwardingRuleCmd.java b/api/src/org/apache/cloudstack/api/command/user/nat/CreateIpForwardingRuleCmd.java index 4a962fb1838..e05695352ee 100644 --- a/api/src/org/apache/cloudstack/api/command/user/nat/CreateIpForwardingRuleCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/nat/CreateIpForwardingRuleCmd.java @@ -18,13 +18,13 @@ package org.apache.cloudstack.api.command.user.nat; import java.util.List; +import org.apache.cloudstack.api.response.IPAddressResponse; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseAsyncCreateCmd; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; @@ -51,8 +51,8 @@ public class CreateIpForwardingRuleCmd extends BaseAsyncCreateCmd implements Sta //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - @IdentityMapper(entityTableName="user_ip_address") - @Parameter(name=ApiConstants.IP_ADDRESS_ID, type=CommandType.LONG, required=true, description="the public IP address id of the forwarding rule, already associated via associateIp") + @Parameter(name=ApiConstants.IP_ADDRESS_ID, type=CommandType.UUID, entityType = IPAddressResponse.class, + required=true, description="the public IP address id of the forwarding rule, already associated via associateIp") private Long ipAddressId; @Parameter(name=ApiConstants.START_PORT, type=CommandType.INTEGER, required=true, description="the start port for the rule") diff --git a/api/src/org/apache/cloudstack/api/command/user/nat/DeleteIpForwardingRuleCmd.java b/api/src/org/apache/cloudstack/api/command/user/nat/DeleteIpForwardingRuleCmd.java index d8fa878600d..aa3fca2ba25 100644 --- a/api/src/org/apache/cloudstack/api/command/user/nat/DeleteIpForwardingRuleCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/nat/DeleteIpForwardingRuleCmd.java @@ -16,12 +16,13 @@ // under the License. package org.apache.cloudstack.api.command.user.nat; +import org.apache.cloudstack.api.response.AccountResponse; +import org.apache.cloudstack.api.response.FirewallRuleResponse; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; @@ -42,14 +43,13 @@ public class DeleteIpForwardingRuleCmd extends BaseAsyncCmd { //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - @IdentityMapper(entityTableName="firewall_rules") - @Parameter(name=ApiConstants.ID, type=CommandType.LONG, required=true, description="the id of the forwarding rule") + @Parameter(name=ApiConstants.ID, type=CommandType.UUID, entityType = FirewallRuleResponse.class, + required=true, description="the id of the forwarding rule") private Long id; - // unexposed parameter needed for events logging - @IdentityMapper(entityTableName="account") - @Parameter(name=ApiConstants.ACCOUNT_ID, type=CommandType.LONG, expose=false) + @Parameter(name=ApiConstants.ACCOUNT_ID, type=CommandType.UUID, entityType = AccountResponse.class, + expose=false) private Long ownerId; ///////////////////////////////////////////////////// /////////////////// Accessors /////////////////////// diff --git a/api/src/org/apache/cloudstack/api/command/user/nat/DisableStaticNatCmd.java b/api/src/org/apache/cloudstack/api/command/user/nat/DisableStaticNatCmd.java index e3c2ede55a9..3b5dd02fec4 100644 --- a/api/src/org/apache/cloudstack/api/command/user/nat/DisableStaticNatCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/nat/DisableStaticNatCmd.java @@ -17,12 +17,12 @@ package org.apache.cloudstack.api.command.user.nat; import org.apache.cloudstack.api.command.user.firewall.DeletePortForwardingRuleCmd; +import org.apache.cloudstack.api.response.IPAddressResponse; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; @@ -43,8 +43,8 @@ public class DisableStaticNatCmd extends BaseAsyncCmd { //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - @IdentityMapper(entityTableName="user_ip_address") - @Parameter(name=ApiConstants.IP_ADDRESS_ID, type=CommandType.LONG, required=true, description="the public IP address id for which static nat feature is being disableed") + @Parameter(name=ApiConstants.IP_ADDRESS_ID, type=CommandType.UUID, entityType = IPAddressResponse.class, + required=true, description="the public IP address id for which static nat feature is being disableed") private Long ipAddressId; ///////////////////////////////////////////////////// diff --git a/api/src/org/apache/cloudstack/api/command/user/nat/EnableStaticNatCmd.java b/api/src/org/apache/cloudstack/api/command/user/nat/EnableStaticNatCmd.java index 5a77a0a395f..9e6e967d238 100644 --- a/api/src/org/apache/cloudstack/api/command/user/nat/EnableStaticNatCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/nat/EnableStaticNatCmd.java @@ -20,11 +20,13 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; import org.apache.cloudstack.api.response.SuccessResponse; +import org.apache.cloudstack.api.response.IPAddressResponse; +import org.apache.cloudstack.api.response.NetworkResponse; +import org.apache.cloudstack.api.response.UserVmResponse; import com.cloud.exception.InvalidParameterValueException; import com.cloud.exception.NetworkRuleConflictException; import com.cloud.exception.ResourceUnavailableException; @@ -42,18 +44,17 @@ public class EnableStaticNatCmd extends BaseCmd{ //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - @IdentityMapper(entityTableName="user_ip_address") - @Parameter(name=ApiConstants.IP_ADDRESS_ID, type=CommandType.LONG, required=true, description="the public IP " + + @Parameter(name=ApiConstants.IP_ADDRESS_ID, type=CommandType.UUID, entityType = IPAddressResponse.class, + required=true, description="the public IP " + "address id for which static nat feature is being enabled") private Long ipAddressId; - @IdentityMapper(entityTableName="vm_instance") - @Parameter(name=ApiConstants.VIRTUAL_MACHINE_ID, type=CommandType.LONG, required=true, description="the ID of " + + @Parameter(name=ApiConstants.VIRTUAL_MACHINE_ID, type=CommandType.UUID, entityType = UserVmResponse.class, + required=true, description="the ID of " + "the virtual machine for enabling static nat feature") private Long virtualMachineId; - @IdentityMapper(entityTableName="networks") - @Parameter(name=ApiConstants.NETWORK_ID, type=CommandType.LONG, + @Parameter(name=ApiConstants.NETWORK_ID, type=CommandType.UUID, entityType = NetworkResponse.class, description="The network of the vm the static nat will be enabled for." + " Required when public Ip address is not associated with any Guest network yet (VPC case)") private Long networkId; diff --git a/api/src/org/apache/cloudstack/api/command/user/nat/ListIpForwardingRulesCmd.java b/api/src/org/apache/cloudstack/api/command/user/nat/ListIpForwardingRulesCmd.java index 1560111e64f..255032da47b 100644 --- a/api/src/org/apache/cloudstack/api/command/user/nat/ListIpForwardingRulesCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/nat/ListIpForwardingRulesCmd.java @@ -23,12 +23,13 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; 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.response.FirewallRuleResponse; +import org.apache.cloudstack.api.response.IPAddressResponse; import org.apache.cloudstack.api.response.IpForwardingRuleResponse; import org.apache.cloudstack.api.response.ListResponse; +import org.apache.cloudstack.api.response.UserVmResponse; import com.cloud.network.rules.FirewallRule; import com.cloud.network.rules.StaticNatRule; import com.cloud.utils.Pair; @@ -43,16 +44,16 @@ public class ListIpForwardingRulesCmd extends BaseListProjectAndAccountResources //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - @IdentityMapper(entityTableName="user_ip_address") - @Parameter(name=ApiConstants.IP_ADDRESS_ID, type=CommandType.LONG, description="list the rule belonging to this public ip address") + @Parameter(name=ApiConstants.IP_ADDRESS_ID, type=CommandType.UUID, entityType = IPAddressResponse.class, + description="list the rule belonging to this public ip address") private Long publicIpAddressId; - @IdentityMapper(entityTableName="firewall_rules") - @Parameter(name=ApiConstants.ID, type=CommandType.LONG, description="Lists rule with the specified ID.") + @Parameter(name=ApiConstants.ID, type=CommandType.UUID, entityType = FirewallRuleResponse.class, + description="Lists rule with the specified ID.") private Long id; - @IdentityMapper(entityTableName="vm_instance") - @Parameter(name=ApiConstants.VIRTUAL_MACHINE_ID, type=CommandType.LONG, description="Lists all rules applied to the specified Vm.") + @Parameter(name=ApiConstants.VIRTUAL_MACHINE_ID, type=CommandType.UUID, entityType = UserVmResponse.class, + description="Lists all rules applied to the specified Vm.") private Long vmId; ///////////////////////////////////////////////////// From b37aca47b9bc52d57c3d1022104794da59704e90 Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Sun, 23 Dec 2012 03:22:57 -0800 Subject: [PATCH 195/421] api: Annotate network apis Signed-off-by: Rohit Yadav --- .../user/network/CreateNetworkACLCmd.java | 6 ++-- .../user/network/CreateNetworkCmd.java | 31 +++++++++++-------- .../user/network/DeleteNetworkACLCmd.java | 11 ++++--- .../user/network/DeleteNetworkCmd.java | 6 ++-- .../user/network/ListNetworkACLsCmd.java | 12 +++---- .../user/network/ListNetworkOfferingsCmd.java | 16 +++++----- .../command/user/network/ListNetworksCmd.java | 21 +++++++------ .../user/network/RestartNetworkCmd.java | 7 ++--- .../user/network/UpdateNetworkCmd.java | 10 +++--- 9 files changed, 63 insertions(+), 57 deletions(-) diff --git a/api/src/org/apache/cloudstack/api/command/user/network/CreateNetworkACLCmd.java b/api/src/org/apache/cloudstack/api/command/user/network/CreateNetworkACLCmd.java index 7cf508643a4..9512b8b4f84 100644 --- a/api/src/org/apache/cloudstack/api/command/user/network/CreateNetworkACLCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/network/CreateNetworkACLCmd.java @@ -19,13 +19,13 @@ package org.apache.cloudstack.api.command.user.network; import java.util.ArrayList; import java.util.List; +import org.apache.cloudstack.api.response.NetworkResponse; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseAsyncCreateCmd; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; @@ -73,8 +73,8 @@ public class CreateNetworkACLCmd extends BaseAsyncCreateCmd implements FirewallR @Parameter(name = ApiConstants.ICMP_CODE, type = CommandType.INTEGER, description = "error code for this icmp message") private Integer icmpCode; - @IdentityMapper(entityTableName="networks") - @Parameter(name=ApiConstants.NETWORK_ID, type=CommandType.LONG, required=true, + @Parameter(name=ApiConstants.NETWORK_ID, type=CommandType.UUID, entityType = NetworkResponse.class, + required=true, description="The network of the vm the ACL will be created for") private Long networkId; diff --git a/api/src/org/apache/cloudstack/api/command/user/network/CreateNetworkCmd.java b/api/src/org/apache/cloudstack/api/command/user/network/CreateNetworkCmd.java index 2a10447a18e..a9e8c20957d 100644 --- a/api/src/org/apache/cloudstack/api/command/user/network/CreateNetworkCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/network/CreateNetworkCmd.java @@ -20,11 +20,16 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; +import org.apache.cloudstack.api.response.DomainResponse; import org.apache.cloudstack.api.response.NetworkResponse; +import org.apache.cloudstack.api.response.NetworkOfferingResponse; +import org.apache.cloudstack.api.response.PhysicalNetworkResponse; +import org.apache.cloudstack.api.response.ProjectResponse; +import org.apache.cloudstack.api.response.VpcResponse; +import org.apache.cloudstack.api.response.ZoneResponse; import com.cloud.exception.ConcurrentOperationException; import com.cloud.exception.InsufficientCapacityException; import com.cloud.exception.InvalidParameterValueException; @@ -50,16 +55,16 @@ public class CreateNetworkCmd extends BaseCmd { @Parameter(name=ApiConstants.DISPLAY_TEXT, type=CommandType.STRING, required=true, description="the display text of the network") private String displayText; - @IdentityMapper(entityTableName="network_offerings") - @Parameter(name=ApiConstants.NETWORK_OFFERING_ID, type=CommandType.LONG, required=true, description="the network offering id") + @Parameter(name=ApiConstants.NETWORK_OFFERING_ID, type=CommandType.UUID, entityType = NetworkOfferingResponse.class, + required=true, description="the network offering id") private Long networkOfferingId; - @IdentityMapper(entityTableName="data_center") - @Parameter(name=ApiConstants.ZONE_ID, type=CommandType.LONG, required=true, description="the Zone ID for the network") + @Parameter(name=ApiConstants.ZONE_ID, type=CommandType.UUID, entityType = ZoneResponse.class, + required=true, description="the Zone ID for the network") private Long zoneId; - @IdentityMapper(entityTableName="physical_network") - @Parameter(name=ApiConstants.PHYSICAL_NETWORK_ID, type=CommandType.LONG, description="the Physical Network ID the network belongs to") + @Parameter(name=ApiConstants.PHYSICAL_NETWORK_ID, type=CommandType.UUID, entityType = PhysicalNetworkResponse.class, + description="the Physical Network ID the network belongs to") private Long physicalNetworkId; @Parameter(name=ApiConstants.GATEWAY, type=CommandType.STRING, description="the gateway of the network. Required " + @@ -91,20 +96,20 @@ public class CreateNetworkCmd extends BaseCmd { @Parameter(name=ApiConstants.ACCOUNT, type=CommandType.STRING, description="account who will own the network") private String accountName; - @IdentityMapper(entityTableName="projects") - @Parameter(name=ApiConstants.PROJECT_ID, type=CommandType.LONG, description="an optional project for the ssh key") + @Parameter(name=ApiConstants.PROJECT_ID, type=CommandType.UUID, entityType = ProjectResponse.class, + description="an optional project for the ssh key") private Long projectId; - @IdentityMapper(entityTableName="domain") - @Parameter(name=ApiConstants.DOMAIN_ID, type=CommandType.LONG, description="domain ID of the account owning a network") + @Parameter(name=ApiConstants.DOMAIN_ID, type=CommandType.UUID, entityType = DomainResponse.class, + description="domain ID of the account owning a network") private Long domainId; @Parameter(name=ApiConstants.SUBDOMAIN_ACCESS, type=CommandType.BOOLEAN, description="Defines whether to allow" + " subdomains to use networks dedicated to their parent domain(s). Should be used with aclType=Domain, defaulted to allow.subdomain.network.access global config if not specified") private Boolean subdomainAccess; - @IdentityMapper(entityTableName="vpc") - @Parameter(name=ApiConstants.VPC_ID, type=CommandType.LONG, description="the VPC network belongs to") + @Parameter(name=ApiConstants.VPC_ID, type=CommandType.UUID, entityType = VpcResponse.class, + description="the VPC network belongs to") private Long vpcId; diff --git a/api/src/org/apache/cloudstack/api/command/user/network/DeleteNetworkACLCmd.java b/api/src/org/apache/cloudstack/api/command/user/network/DeleteNetworkACLCmd.java index 2cd9dc89035..fe1a2c12732 100644 --- a/api/src/org/apache/cloudstack/api/command/user/network/DeleteNetworkACLCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/network/DeleteNetworkACLCmd.java @@ -21,11 +21,12 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; import org.apache.cloudstack.api.response.SuccessResponse; +import org.apache.cloudstack.api.response.AccountResponse; +import org.apache.cloudstack.api.response.FirewallRuleResponse; import com.cloud.async.AsyncJob; import com.cloud.event.EventTypes; import com.cloud.exception.InvalidParameterValueException; @@ -42,13 +43,13 @@ public class DeleteNetworkACLCmd extends BaseAsyncCmd { //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - @IdentityMapper(entityTableName="firewall_rules") - @Parameter(name=ApiConstants.ID, type=CommandType.LONG, required=true, description="the ID of the network ACL") + @Parameter(name=ApiConstants.ID, type=CommandType.UUID, entityType = FirewallRuleResponse.class, + required=true, description="the ID of the network ACL") private Long id; // unexposed parameter needed for events logging - @IdentityMapper(entityTableName="account") - @Parameter(name=ApiConstants.ACCOUNT_ID, type=CommandType.LONG, expose=false) + @Parameter(name=ApiConstants.ACCOUNT_ID, type=CommandType.UUID, entityType = AccountResponse.class, + expose=false) private Long ownerId; ///////////////////////////////////////////////////// /////////////////// Accessors /////////////////////// diff --git a/api/src/org/apache/cloudstack/api/command/user/network/DeleteNetworkCmd.java b/api/src/org/apache/cloudstack/api/command/user/network/DeleteNetworkCmd.java index b5912503991..5be67fafcce 100644 --- a/api/src/org/apache/cloudstack/api/command/user/network/DeleteNetworkCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/network/DeleteNetworkCmd.java @@ -17,12 +17,12 @@ package org.apache.cloudstack.api.command.user.network; import org.apache.cloudstack.api.command.admin.network.DeleteNetworkOfferingCmd; +import org.apache.cloudstack.api.response.NetworkResponse; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; @@ -41,8 +41,8 @@ public class DeleteNetworkCmd extends BaseAsyncCmd{ //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - @IdentityMapper(entityTableName="networks") - @Parameter(name=ApiConstants.ID, type=CommandType.LONG, required=true, description="the ID of the network") + @Parameter(name=ApiConstants.ID, type=CommandType.UUID, entityType = NetworkResponse.class, + required=true, description="the ID of the network") private Long id; diff --git a/api/src/org/apache/cloudstack/api/command/user/network/ListNetworkACLsCmd.java b/api/src/org/apache/cloudstack/api/command/user/network/ListNetworkACLsCmd.java index 47329f4338a..43c4945a2bd 100644 --- a/api/src/org/apache/cloudstack/api/command/user/network/ListNetworkACLsCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/network/ListNetworkACLsCmd.java @@ -16,7 +16,6 @@ // under the License. package org.apache.cloudstack.api.command.user.network; - import java.util.ArrayList; import java.util.List; @@ -24,11 +23,12 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseListTaggedResourcesCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.response.ListResponse; import org.apache.cloudstack.api.response.NetworkACLResponse; +import org.apache.cloudstack.api.response.FirewallRuleResponse; +import org.apache.cloudstack.api.response.NetworkResponse; import com.cloud.network.rules.FirewallRule; import com.cloud.utils.Pair; @@ -41,12 +41,12 @@ public class ListNetworkACLsCmd extends BaseListTaggedResourcesCmd { ///////////////////////////////////////////////////// //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - @IdentityMapper(entityTableName="firewall_rules") - @Parameter(name=ApiConstants.ID, type=CommandType.LONG, description="Lists network ACL with the specified ID.") + @Parameter(name=ApiConstants.ID, type=CommandType.UUID, entityType = FirewallRuleResponse.class, + description="Lists network ACL with the specified ID.") private Long id; - @IdentityMapper(entityTableName="networks") - @Parameter(name=ApiConstants.NETWORK_ID, type=CommandType.LONG, description="list network ACLs by network Id") + @Parameter(name=ApiConstants.NETWORK_ID, type=CommandType.UUID, entityType = NetworkResponse.class, + description="list network ACLs by network Id") private Long networkId; @Parameter(name=ApiConstants.TRAFFIC_TYPE, type=CommandType.STRING, description="list network ACLs by traffic type - Ingress or Egress") diff --git a/api/src/org/apache/cloudstack/api/command/user/network/ListNetworkOfferingsCmd.java b/api/src/org/apache/cloudstack/api/command/user/network/ListNetworkOfferingsCmd.java index 63b9d002872..a3d299ab3d6 100644 --- a/api/src/org/apache/cloudstack/api/command/user/network/ListNetworkOfferingsCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/network/ListNetworkOfferingsCmd.java @@ -23,14 +23,14 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseListCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.response.ListResponse; import org.apache.cloudstack.api.response.NetworkOfferingResponse; +import org.apache.cloudstack.api.response.NetworkResponse; +import org.apache.cloudstack.api.response.ZoneResponse; import com.cloud.offering.NetworkOffering; - @Implementation(description="Lists all available network offerings.", responseObject=NetworkOfferingResponse.class) public class ListNetworkOfferingsCmd extends BaseListCmd { public static final Logger s_logger = Logger.getLogger(ListNetworkOfferingsCmd.class.getName()); @@ -39,8 +39,8 @@ public class ListNetworkOfferingsCmd extends BaseListCmd { ///////////////////////////////////////////////////// //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - @IdentityMapper(entityTableName="network_offerings") - @Parameter(name=ApiConstants.ID, type=CommandType.LONG, description="list network offerings by id") + @Parameter(name=ApiConstants.ID, type=CommandType.UUID, entityType = NetworkOfferingResponse.class, + description="list network offerings by id") private Long id; @Parameter(name=ApiConstants.NAME, type=CommandType.STRING, description="list network offerings by name") @@ -61,15 +61,15 @@ public class ListNetworkOfferingsCmd extends BaseListCmd { @Parameter(name=ApiConstants.AVAILABILITY, type=CommandType.STRING, description="the availability of network offering. Default value is Required") private String availability; - @IdentityMapper(entityTableName="data_center") - @Parameter(name=ApiConstants.ZONE_ID, type=CommandType.LONG, description="list netowrk offerings available for network creation in specific zone") + @Parameter(name=ApiConstants.ZONE_ID, type=CommandType.UUID, entityType = ZoneResponse.class, + description="list netowrk offerings available for network creation in specific zone") private Long zoneId; @Parameter(name=ApiConstants.STATE, type=CommandType.STRING, description="list network offerings by state") private String state; - @IdentityMapper(entityTableName="networks") - @Parameter(name=ApiConstants.NETWORK_ID, type=CommandType.LONG, description="the ID of the network. Pass this in if you want to see the available network offering that a network can be changed to.") + @Parameter(name=ApiConstants.NETWORK_ID, type=CommandType.UUID, entityType = NetworkResponse.class, + description="the ID of the network. Pass this in if you want to see the available network offering that a network can be changed to.") private Long networkId; @Parameter(name=ApiConstants.GUEST_IP_TYPE, type=CommandType.STRING, description="list network offerings by guest type: Shared or Isolated") diff --git a/api/src/org/apache/cloudstack/api/command/user/network/ListNetworksCmd.java b/api/src/org/apache/cloudstack/api/command/user/network/ListNetworksCmd.java index d1688c00fce..0986631d014 100644 --- a/api/src/org/apache/cloudstack/api/command/user/network/ListNetworksCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/network/ListNetworksCmd.java @@ -23,14 +23,15 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseListTaggedResourcesCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.response.ListResponse; import org.apache.cloudstack.api.response.NetworkResponse; +import org.apache.cloudstack.api.response.PhysicalNetworkResponse; +import org.apache.cloudstack.api.response.VpcResponse; +import org.apache.cloudstack.api.response.ZoneResponse; import com.cloud.network.Network; - @Implementation(description="Lists all available networks.", responseObject=NetworkResponse.class) public class ListNetworksCmd extends BaseListTaggedResourcesCmd { public static final Logger s_logger = Logger.getLogger(ListNetworksCmd.class.getName()); @@ -39,12 +40,12 @@ public class ListNetworksCmd extends BaseListTaggedResourcesCmd { ///////////////////////////////////////////////////// //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - @IdentityMapper(entityTableName="networks") - @Parameter(name=ApiConstants.ID, type=CommandType.LONG, description="list networks by id") + @Parameter(name=ApiConstants.ID, type=CommandType.UUID, entityType = NetworkResponse.class, + description="list networks by id") private Long id; - @IdentityMapper(entityTableName="data_center") - @Parameter(name=ApiConstants.ZONE_ID, type=CommandType.LONG, description="the Zone ID of the network") + @Parameter(name=ApiConstants.ZONE_ID, type=CommandType.UUID, entityType = ZoneResponse.class, + description="the Zone ID of the network") private Long zoneId; @Parameter(name=ApiConstants.TYPE, type=CommandType.STRING, description="the type of the network. Supported values are: Isolated and Shared") @@ -59,8 +60,8 @@ public class ListNetworksCmd extends BaseListTaggedResourcesCmd { @Parameter(name=ApiConstants.TRAFFIC_TYPE, type=CommandType.STRING, description="type of the traffic") private String trafficType; - @IdentityMapper(entityTableName="physical_network") - @Parameter(name=ApiConstants.PHYSICAL_NETWORK_ID, type=CommandType.LONG, description="list networks by physical network id") + @Parameter(name=ApiConstants.PHYSICAL_NETWORK_ID, type=CommandType.UUID, entityType = PhysicalNetworkResponse.class, + description="list networks by physical network id") private Long physicalNetworkId; @Parameter(name=ApiConstants.SUPPORTED_SERVICES, type=CommandType.LIST, collectionType=CommandType.STRING, description="list networks supporting certain services") @@ -73,8 +74,8 @@ public class ListNetworksCmd extends BaseListTaggedResourcesCmd { @Parameter(name=ApiConstants.SPECIFY_IP_RANGES, type=CommandType.BOOLEAN, description="true if need to list only networks which support specifying ip ranges") private Boolean specifyIpRanges; - @IdentityMapper(entityTableName="vpc") - @Parameter(name=ApiConstants.VPC_ID, type=CommandType.LONG, description="List networks by VPC") + @Parameter(name=ApiConstants.VPC_ID, type=CommandType.UUID, entityType = VpcResponse.class, + description="List networks by VPC") private Long vpcId; @Parameter(name=ApiConstants.CAN_USE_FOR_DEPLOY, type=CommandType.BOOLEAN, description="list networks available for vm deployment") diff --git a/api/src/org/apache/cloudstack/api/command/user/network/RestartNetworkCmd.java b/api/src/org/apache/cloudstack/api/command/user/network/RestartNetworkCmd.java index 2f3466439dd..c200b6a20b5 100644 --- a/api/src/org/apache/cloudstack/api/command/user/network/RestartNetworkCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/network/RestartNetworkCmd.java @@ -21,12 +21,12 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; import org.apache.cloudstack.api.response.IPAddressResponse; import org.apache.cloudstack.api.response.SuccessResponse; +import org.apache.cloudstack.api.response.NetworkResponse; import com.cloud.event.EventTypes; import com.cloud.exception.ConcurrentOperationException; import com.cloud.exception.InsufficientCapacityException; @@ -44,9 +44,8 @@ public class RestartNetworkCmd extends BaseAsyncCmd { //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - - @IdentityMapper(entityTableName="networks") - @Parameter(name=ApiConstants.ID, type=CommandType.LONG, required=true, description="The id of the network to restart.") + @Parameter(name=ApiConstants.ID, type=CommandType.UUID, entityType = NetworkResponse.class, + required=true, description="The id of the network to restart.") private Long id; @Parameter(name=ApiConstants.CLEANUP, type=CommandType.BOOLEAN, required=false, description="If cleanup old network elements") diff --git a/api/src/org/apache/cloudstack/api/command/user/network/UpdateNetworkCmd.java b/api/src/org/apache/cloudstack/api/command/user/network/UpdateNetworkCmd.java index 56142a9726e..24d00fbf115 100644 --- a/api/src/org/apache/cloudstack/api/command/user/network/UpdateNetworkCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/network/UpdateNetworkCmd.java @@ -21,11 +21,11 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; import org.apache.cloudstack.api.response.NetworkResponse; +import org.apache.cloudstack.api.response.NetworkOfferingResponse; import com.cloud.event.EventTypes; import com.cloud.exception.ConcurrentOperationException; import com.cloud.exception.InsufficientCapacityException; @@ -44,8 +44,8 @@ public class UpdateNetworkCmd extends BaseAsyncCmd { ///////////////////////////////////////////////////// //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - @IdentityMapper(entityTableName="networks") - @Parameter(name=ApiConstants.ID, type=CommandType.LONG, required=true, description="the ID of the network") + @Parameter(name=ApiConstants.ID, type=CommandType.UUID, entityType = NetworkResponse.class, + required=true, description="the ID of the network") private Long id; @Parameter(name=ApiConstants.NAME, type=CommandType.STRING, description="the new name for the network") @@ -60,8 +60,8 @@ public class UpdateNetworkCmd extends BaseAsyncCmd { @Parameter(name=ApiConstants.CHANGE_CIDR, type=CommandType.BOOLEAN, description="Force update even if cidr type is different") private Boolean changeCidr; - @IdentityMapper(entityTableName="network_offerings") - @Parameter(name=ApiConstants.NETWORK_OFFERING_ID, type=CommandType.LONG, description="network offering ID") + @Parameter(name=ApiConstants.NETWORK_OFFERING_ID, type=CommandType.UUID, entityType = NetworkOfferingResponse.class, + description="network offering ID") private Long networkOfferingId; ///////////////////////////////////////////////////// From 07f5e1ac2df0664d320dcd4bdd84d29d539c8616 Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Sun, 23 Dec 2012 03:26:06 -0800 Subject: [PATCH 196/421] api: Annotate offering apis Signed-off-by: Rohit Yadav --- .../user/offering/ListDiskOfferingsCmd.java | 10 +++++----- .../user/offering/ListServiceOfferingsCmd.java | 16 +++++++++------- 2 files changed, 14 insertions(+), 12 deletions(-) diff --git a/api/src/org/apache/cloudstack/api/command/user/offering/ListDiskOfferingsCmd.java b/api/src/org/apache/cloudstack/api/command/user/offering/ListDiskOfferingsCmd.java index 31b03e80485..f08df7a8837 100644 --- a/api/src/org/apache/cloudstack/api/command/user/offering/ListDiskOfferingsCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/offering/ListDiskOfferingsCmd.java @@ -23,10 +23,10 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseListCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.response.DiskOfferingResponse; +import org.apache.cloudstack.api.response.DomainResponse; import org.apache.cloudstack.api.response.ListResponse; import com.cloud.offering.DiskOffering; @@ -40,12 +40,12 @@ public class ListDiskOfferingsCmd extends BaseListCmd { //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - @IdentityMapper(entityTableName="domain") - @Parameter(name=ApiConstants.DOMAIN_ID, type=CommandType.LONG, description="the ID of the domain of the disk offering.") + @Parameter(name=ApiConstants.DOMAIN_ID, type=CommandType.UUID, entityType = DomainResponse.class, + description="the ID of the domain of the disk offering.") private Long domainId; - @IdentityMapper(entityTableName="disk_offering") - @Parameter(name=ApiConstants.ID, type=CommandType.LONG, description="ID of the disk offering") + @Parameter(name=ApiConstants.ID, type=CommandType.UUID, entityType = DiskOfferingResponse.class, + description="ID of the disk offering") private Long id; @Parameter(name=ApiConstants.NAME, type=CommandType.STRING, description="name of the disk offering") diff --git a/api/src/org/apache/cloudstack/api/command/user/offering/ListServiceOfferingsCmd.java b/api/src/org/apache/cloudstack/api/command/user/offering/ListServiceOfferingsCmd.java index 9dfa82da78a..6077723ab98 100644 --- a/api/src/org/apache/cloudstack/api/command/user/offering/ListServiceOfferingsCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/offering/ListServiceOfferingsCmd.java @@ -23,11 +23,13 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseListCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.response.DomainResponse; +import org.apache.cloudstack.api.response.DiskOfferingResponse; import org.apache.cloudstack.api.response.ListResponse; import org.apache.cloudstack.api.response.ServiceOfferingResponse; +import org.apache.cloudstack.api.response.UserVmResponse; import com.cloud.offering.ServiceOffering; @Implementation(description="Lists all available service offerings.", responseObject=ServiceOfferingResponse.class) @@ -40,19 +42,19 @@ public class ListServiceOfferingsCmd extends BaseListCmd { //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - @IdentityMapper(entityTableName="disk_offering") - @Parameter(name=ApiConstants.ID, type=CommandType.LONG, description="ID of the service offering") + @Parameter(name=ApiConstants.ID, type=CommandType.UUID, entityType = DiskOfferingResponse.class, + description="ID of the service offering") private Long id; @Parameter(name=ApiConstants.NAME, type=CommandType.STRING, description="name of the service offering") private String serviceOfferingName; - @IdentityMapper(entityTableName="vm_instance") - @Parameter(name=ApiConstants.VIRTUAL_MACHINE_ID, type=CommandType.LONG, description="the ID of the virtual machine. Pass this in if you want to see the available service offering that a virtual machine can be changed to.") + @Parameter(name=ApiConstants.VIRTUAL_MACHINE_ID, type=CommandType.UUID, entityType = UserVmResponse.class, + description="the ID of the virtual machine. Pass this in if you want to see the available service offering that a virtual machine can be changed to.") private Long virtualMachineId; - @IdentityMapper(entityTableName="domain") - @Parameter(name=ApiConstants.DOMAIN_ID, type=CommandType.LONG, description="the ID of the domain associated with the service offering") + @Parameter(name=ApiConstants.DOMAIN_ID, type=CommandType.UUID, entityType = DomainResponse.class, + description="the ID of the domain associated with the service offering") private Long domainId; @Parameter(name=ApiConstants.IS_SYSTEM_OFFERING, type=CommandType.BOOLEAN, description="is this a system vm offering") From 4d79909828ab733bb95f2b317f0d6004606b84bd Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Sun, 23 Dec 2012 03:29:18 -0800 Subject: [PATCH 197/421] api: Remove unused, redundant imports in project Signed-off-by: Rohit Yadav --- .../cloudstack/api/command/user/project/ActivateProjectCmd.java | 1 - .../cloudstack/api/command/user/project/DeleteProjectCmd.java | 1 - 2 files changed, 2 deletions(-) diff --git a/api/src/org/apache/cloudstack/api/command/user/project/ActivateProjectCmd.java b/api/src/org/apache/cloudstack/api/command/user/project/ActivateProjectCmd.java index 8821be9a18d..fe319514fb0 100644 --- a/api/src/org/apache/cloudstack/api/command/user/project/ActivateProjectCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/project/ActivateProjectCmd.java @@ -21,7 +21,6 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; diff --git a/api/src/org/apache/cloudstack/api/command/user/project/DeleteProjectCmd.java b/api/src/org/apache/cloudstack/api/command/user/project/DeleteProjectCmd.java index 8555f1310da..000cb42b747 100644 --- a/api/src/org/apache/cloudstack/api/command/user/project/DeleteProjectCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/project/DeleteProjectCmd.java @@ -22,7 +22,6 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; From a0a8a0bb5d34fdd27084f4599df10fe4519d63dd Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Sun, 23 Dec 2012 03:33:37 -0800 Subject: [PATCH 198/421] api: Annotate resource apis Signed-off-by: Rohit Yadav --- .../command/user/resource/GetCloudIdentifierCmd.java | 8 +++----- .../command/user/resource/ListHypervisorsCmd.java | 6 +++--- .../user/resource/UpdateResourceCountCmd.java | 12 ++++++------ .../user/resource/UpdateResourceLimitCmd.java | 12 ++++++------ 4 files changed, 18 insertions(+), 20 deletions(-) diff --git a/api/src/org/apache/cloudstack/api/command/user/resource/GetCloudIdentifierCmd.java b/api/src/org/apache/cloudstack/api/command/user/resource/GetCloudIdentifierCmd.java index feec81fa1c8..398cae5ee9a 100644 --- a/api/src/org/apache/cloudstack/api/command/user/resource/GetCloudIdentifierCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/resource/GetCloudIdentifierCmd.java @@ -22,11 +22,11 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; import org.apache.cloudstack.api.response.CloudIdentifierResponse; +import org.apache.cloudstack.api.response.UserResponse; import com.cloud.user.Account; @Implementation(description="Retrieves a cloud identifier.", responseObject=CloudIdentifierResponse.class) @@ -38,11 +38,10 @@ public class GetCloudIdentifierCmd extends BaseCmd { //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - @IdentityMapper(entityTableName="user") - @Parameter(name=ApiConstants.USER_ID, type=CommandType.LONG, required=true, description="the user ID for the cloud identifier") + @Parameter(name=ApiConstants.USER_ID, type=CommandType.UUID, entityType = UserResponse.class, + required=true, description="the user ID for the cloud identifier") private Long userid; - ///////////////////////////////////////////////////// /////////////////// Accessors /////////////////////// ///////////////////////////////////////////////////// @@ -51,7 +50,6 @@ public class GetCloudIdentifierCmd extends BaseCmd { return userid; } - ///////////////////////////////////////////////////// /////////////// API Implementation/////////////////// ///////////////////////////////////////////////////// diff --git a/api/src/org/apache/cloudstack/api/command/user/resource/ListHypervisorsCmd.java b/api/src/org/apache/cloudstack/api/command/user/resource/ListHypervisorsCmd.java index 4ee11113d45..ece0c9fe2c4 100644 --- a/api/src/org/apache/cloudstack/api/command/user/resource/ListHypervisorsCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/resource/ListHypervisorsCmd.java @@ -24,11 +24,11 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.response.HypervisorResponse; import org.apache.cloudstack.api.response.ListResponse; +import org.apache.cloudstack.api.response.ZoneResponse; import com.cloud.user.Account; @Implementation(description = "List hypervisors", responseObject = HypervisorResponse.class) @@ -45,8 +45,8 @@ public class ListHypervisorsCmd extends BaseCmd { // ////////////// API parameters ///////////////////// // /////////////////////////////////////////////////// - @IdentityMapper(entityTableName="data_center") - @Parameter(name = ApiConstants.ZONE_ID, type = CommandType.LONG, description = "the zone id for listing hypervisors.") + @Parameter(name = ApiConstants.ZONE_ID, type = CommandType.UUID, entityType = ZoneResponse.class, + description = "the zone id for listing hypervisors.") private Long zoneId; // /////////////////////////////////////////////////// diff --git a/api/src/org/apache/cloudstack/api/command/user/resource/UpdateResourceCountCmd.java b/api/src/org/apache/cloudstack/api/command/user/resource/UpdateResourceCountCmd.java index 3db1b987fd6..8af243f1c48 100644 --- a/api/src/org/apache/cloudstack/api/command/user/resource/UpdateResourceCountCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/resource/UpdateResourceCountCmd.java @@ -23,17 +23,17 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; +import org.apache.cloudstack.api.response.DomainResponse; +import org.apache.cloudstack.api.response.ProjectResponse; import org.apache.cloudstack.api.response.ListResponse; import org.apache.cloudstack.api.response.ResourceCountResponse; import com.cloud.configuration.ResourceCount; import com.cloud.user.Account; import com.cloud.user.UserContext; - @Implementation(description="Recalculate and update resource count for an account or domain.", responseObject=ResourceCountResponse.class) public class UpdateResourceCountCmd extends BaseCmd { public static final Logger s_logger = Logger.getLogger(UpdateResourceCountCmd.class.getName()); @@ -48,8 +48,8 @@ public class UpdateResourceCountCmd extends BaseCmd { @Parameter(name=ApiConstants.ACCOUNT, type=CommandType.STRING, description="Update resource count for a specified account. Must be used with the domainId parameter.") private String accountName; - @IdentityMapper(entityTableName="domain") - @Parameter(name=ApiConstants.DOMAIN_ID, type=CommandType.LONG, required=true, description="If account parameter specified then updates resource counts for a specified account in this domain else update resource counts for all accounts & child domains in specified domain.") + @Parameter(name=ApiConstants.DOMAIN_ID, type=CommandType.UUID, entityType = DomainResponse.class, + required=true, description="If account parameter specified then updates resource counts for a specified account in this domain else update resource counts for all accounts & child domains in specified domain.") private Long domainId; @Parameter(name=ApiConstants.RESOURCE_TYPE, type=CommandType.INTEGER, description= "Type of resource to update. If specifies valid values are 0, 1, 2, 3, and 4. If not specified will update all resource counts" + @@ -60,8 +60,8 @@ public class UpdateResourceCountCmd extends BaseCmd { "4 - Template. Number of templates that a user can register/create.") private Integer resourceType; - @IdentityMapper(entityTableName="projects") - @Parameter(name=ApiConstants.PROJECT_ID, type=CommandType.LONG, description="Update resource limits for project") + @Parameter(name=ApiConstants.PROJECT_ID, type=CommandType.UUID, entityType = ProjectResponse.class, + description="Update resource limits for project") private Long projectId; ///////////////////////////////////////////////////// diff --git a/api/src/org/apache/cloudstack/api/command/user/resource/UpdateResourceLimitCmd.java b/api/src/org/apache/cloudstack/api/command/user/resource/UpdateResourceLimitCmd.java index 0e74d50a4bb..bdb65cc6f97 100644 --- a/api/src/org/apache/cloudstack/api/command/user/resource/UpdateResourceLimitCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/resource/UpdateResourceLimitCmd.java @@ -20,10 +20,11 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; +import org.apache.cloudstack.api.response.DomainResponse; +import org.apache.cloudstack.api.response.ProjectResponse; import org.apache.cloudstack.api.response.ResourceLimitResponse; import com.cloud.configuration.ResourceLimit; import com.cloud.user.UserContext; @@ -34,7 +35,6 @@ public class UpdateResourceLimitCmd extends BaseCmd { private static final String s_name = "updateresourcelimitresponse"; - ///////////////////////////////////////////////////// //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// @@ -42,12 +42,12 @@ public class UpdateResourceLimitCmd extends BaseCmd { @Parameter(name=ApiConstants.ACCOUNT, type=CommandType.STRING, description="Update resource for a specified account. Must be used with the domainId parameter.") private String accountName; - @IdentityMapper(entityTableName="domain") - @Parameter(name=ApiConstants.DOMAIN_ID, type=CommandType.LONG, description="Update resource limits for all accounts in specified domain. If used with the account parameter, updates resource limits for a specified account in specified domain.") + @Parameter(name=ApiConstants.DOMAIN_ID, type=CommandType.UUID, entityType = DomainResponse.class, + description="Update resource limits for all accounts in specified domain. If used with the account parameter, updates resource limits for a specified account in specified domain.") private Long domainId; - @IdentityMapper(entityTableName="projects") - @Parameter(name=ApiConstants.PROJECT_ID, type=CommandType.LONG, description="Update resource limits for project") + @Parameter(name=ApiConstants.PROJECT_ID, type=CommandType.UUID, entityType = ProjectResponse.class, + description="Update resource limits for project") private Long projectId; @Parameter(name=ApiConstants.MAX, type=CommandType.LONG, description=" Maximum resource limit.") From 66c2c0cbb79ad075f6ab80d1812c21c3c4b4b2bd Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Sun, 23 Dec 2012 03:44:45 -0800 Subject: [PATCH 199/421] api: Annotate snapshot related apis Signed-off-by: Rohit Yadav --- .../command/user/snapshot/CreateSnapshotCmd.java | 16 +++++++++------- .../user/snapshot/CreateSnapshotPolicyCmd.java | 6 +++--- .../command/user/snapshot/DeleteSnapshotCmd.java | 7 +++---- .../user/snapshot/DeleteSnapshotPoliciesCmd.java | 12 +++++------- .../user/snapshot/ListSnapshotPoliciesCmd.java | 6 +++--- .../command/user/snapshot/ListSnapshotsCmd.java | 11 +++++------ .../api/response/SnapshotPolicyResponse.java | 3 +++ 7 files changed, 31 insertions(+), 30 deletions(-) diff --git a/api/src/org/apache/cloudstack/api/command/user/snapshot/CreateSnapshotCmd.java b/api/src/org/apache/cloudstack/api/command/user/snapshot/CreateSnapshotCmd.java index 9d9c7475e07..13175c712aa 100644 --- a/api/src/org/apache/cloudstack/api/command/user/snapshot/CreateSnapshotCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/snapshot/CreateSnapshotCmd.java @@ -22,11 +22,13 @@ import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseAsyncCreateCmd; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; import org.apache.cloudstack.api.response.SnapshotResponse; +import org.apache.cloudstack.api.response.DomainResponse; +import org.apache.cloudstack.api.response.SnapshotPolicyResponse; +import org.apache.cloudstack.api.response.VolumeResponse; import com.cloud.async.AsyncJob; import com.cloud.event.EventTypes; import com.cloud.exception.InvalidParameterValueException; @@ -50,16 +52,16 @@ public class CreateSnapshotCmd extends BaseAsyncCreateCmd { @Parameter(name = ApiConstants.ACCOUNT, type = CommandType.STRING, description = "The account of the snapshot. The account parameter must be used with the domainId parameter.") private String accountName; - @IdentityMapper(entityTableName="domain") - @Parameter(name = ApiConstants.DOMAIN_ID, type = CommandType.LONG, description = "The domain ID of the snapshot. If used with the account parameter, specifies a domain for the account associated with the disk volume.") + @Parameter(name = ApiConstants.DOMAIN_ID, type = CommandType.UUID, entityType = DomainResponse.class, + description = "The domain ID of the snapshot. If used with the account parameter, specifies a domain for the account associated with the disk volume.") private Long domainId; - @IdentityMapper(entityTableName="volumes") - @Parameter(name = ApiConstants.VOLUME_ID, type = CommandType.LONG, required = true, description = "The ID of the disk volume") + @Parameter(name = ApiConstants.VOLUME_ID, type = CommandType.UUID, entityType = VolumeResponse.class, + required = true, description = "The ID of the disk volume") private Long volumeId; - @IdentityMapper(entityTableName="snapshot_policy") - @Parameter(name = ApiConstants.POLICY_ID, type = CommandType.LONG, description = "policy id of the snapshot, if this is null, then use MANUAL_POLICY.") + @Parameter(name = ApiConstants.POLICY_ID, type = CommandType.UUID, entityType = SnapshotPolicyResponse.class, + description = "policy id of the snapshot, if this is null, then use MANUAL_POLICY.") private Long policyId; private String syncObjectType = BaseAsyncCmd.snapshotHostSyncObject; diff --git a/api/src/org/apache/cloudstack/api/command/user/snapshot/CreateSnapshotPolicyCmd.java b/api/src/org/apache/cloudstack/api/command/user/snapshot/CreateSnapshotPolicyCmd.java index 53a84d32010..ceb5ec1f186 100644 --- a/api/src/org/apache/cloudstack/api/command/user/snapshot/CreateSnapshotPolicyCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/snapshot/CreateSnapshotPolicyCmd.java @@ -20,11 +20,11 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; import org.apache.cloudstack.api.response.SnapshotPolicyResponse; +import org.apache.cloudstack.api.response.VolumeResponse; import com.cloud.exception.InvalidParameterValueException; import com.cloud.exception.PermissionDeniedException; import com.cloud.projects.Project; @@ -59,8 +59,8 @@ public class CreateSnapshotPolicyCmd extends BaseCmd { @Parameter(name=ApiConstants.TIMEZONE, type=CommandType.STRING, required=true, description="Specifies a timezone for this command. For more information on the timezone parameter, see Time Zone Format.") private String timezone; - @IdentityMapper(entityTableName="volumes") - @Parameter(name=ApiConstants.VOLUME_ID, type=CommandType.LONG, required=true, description="the ID of the disk volume") + @Parameter(name=ApiConstants.VOLUME_ID, type=CommandType.UUID, entityType = VolumeResponse.class, + required=true, description="the ID of the disk volume") private Long volumeId; diff --git a/api/src/org/apache/cloudstack/api/command/user/snapshot/DeleteSnapshotCmd.java b/api/src/org/apache/cloudstack/api/command/user/snapshot/DeleteSnapshotCmd.java index 92e8d38be35..0ef553b28cc 100644 --- a/api/src/org/apache/cloudstack/api/command/user/snapshot/DeleteSnapshotCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/snapshot/DeleteSnapshotCmd.java @@ -21,10 +21,10 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; +import org.apache.cloudstack.api.response.SnapshotResponse; import org.apache.cloudstack.api.response.SuccessResponse; import com.cloud.async.AsyncJob; import com.cloud.event.EventTypes; @@ -41,11 +41,10 @@ public class DeleteSnapshotCmd extends BaseAsyncCmd { //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - @IdentityMapper(entityTableName="snapshots") - @Parameter(name=ApiConstants.ID, type=CommandType.LONG, required=true, description="The ID of the snapshot") + @Parameter(name=ApiConstants.ID, type=CommandType.UUID, entityType = SnapshotResponse.class, + required=true, description="The ID of the snapshot") private Long id; - ///////////////////////////////////////////////////// /////////////////// Accessors /////////////////////// ///////////////////////////////////////////////////// diff --git a/api/src/org/apache/cloudstack/api/command/user/snapshot/DeleteSnapshotPoliciesCmd.java b/api/src/org/apache/cloudstack/api/command/user/snapshot/DeleteSnapshotPoliciesCmd.java index f3a3baa4de5..dd682edc9c8 100644 --- a/api/src/org/apache/cloudstack/api/command/user/snapshot/DeleteSnapshotPoliciesCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/snapshot/DeleteSnapshotPoliciesCmd.java @@ -22,10 +22,10 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; +import org.apache.cloudstack.api.response.SnapshotPolicyResponse; import org.apache.cloudstack.api.response.SuccessResponse; import com.cloud.user.Account; @@ -39,15 +39,14 @@ public class DeleteSnapshotPoliciesCmd extends BaseCmd { //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - @IdentityMapper(entityTableName="snapshot_policy") - @Parameter(name=ApiConstants.ID, type=CommandType.LONG, description="the Id of the snapshot policy") + @Parameter(name=ApiConstants.ID, type=CommandType.UUID, entityType = SnapshotPolicyResponse.class, + description="the Id of the snapshot policy") private Long id; - @IdentityMapper(entityTableName="snapshot_policy") - @Parameter(name=ApiConstants.IDS, type=CommandType.LIST, collectionType=CommandType.LONG, description="list of snapshots policy IDs separated by comma") + @Parameter(name=ApiConstants.IDS, type=CommandType.LIST, collectionType=CommandType.UUID, entityType = SnapshotPolicyResponse.class, + description="list of snapshots policy IDs separated by comma") private List ids; - ///////////////////////////////////////////////////// /////////////////// Accessors /////////////////////// ///////////////////////////////////////////////////// @@ -60,7 +59,6 @@ public class DeleteSnapshotPoliciesCmd extends BaseCmd { return ids; } - ///////////////////////////////////////////////////// /////////////// API Implementation/////////////////// ///////////////////////////////////////////////////// diff --git a/api/src/org/apache/cloudstack/api/command/user/snapshot/ListSnapshotPoliciesCmd.java b/api/src/org/apache/cloudstack/api/command/user/snapshot/ListSnapshotPoliciesCmd.java index e1a6fd692d3..f3cea498c1c 100644 --- a/api/src/org/apache/cloudstack/api/command/user/snapshot/ListSnapshotPoliciesCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/snapshot/ListSnapshotPoliciesCmd.java @@ -23,11 +23,11 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseListCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.response.ListResponse; import org.apache.cloudstack.api.response.SnapshotPolicyResponse; +import org.apache.cloudstack.api.response.VolumeResponse; import com.cloud.storage.snapshot.SnapshotPolicy; @Implementation(description="Lists snapshot policies.", responseObject=SnapshotPolicyResponse.class) @@ -40,8 +40,8 @@ public class ListSnapshotPoliciesCmd extends BaseListCmd { //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - @IdentityMapper(entityTableName="volumes") - @Parameter(name=ApiConstants.VOLUME_ID, type=CommandType.LONG, required=true, description="the ID of the disk volume") + @Parameter(name=ApiConstants.VOLUME_ID, type=CommandType.UUID, entityType = VolumeResponse.class, + required=true, description="the ID of the disk volume") private Long volumeId; ///////////////////////////////////////////////////// diff --git a/api/src/org/apache/cloudstack/api/command/user/snapshot/ListSnapshotsCmd.java b/api/src/org/apache/cloudstack/api/command/user/snapshot/ListSnapshotsCmd.java index ae152b39f75..10da8c5dcc0 100644 --- a/api/src/org/apache/cloudstack/api/command/user/snapshot/ListSnapshotsCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/snapshot/ListSnapshotsCmd.java @@ -23,16 +23,15 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseListTaggedResourcesCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.response.ListResponse; import org.apache.cloudstack.api.response.SnapshotResponse; +import org.apache.cloudstack.api.response.VolumeResponse; import com.cloud.async.AsyncJob; import com.cloud.storage.Snapshot; import com.cloud.utils.Pair; - @Implementation(description="Lists all available snapshots for the account.", responseObject=SnapshotResponse.class) public class ListSnapshotsCmd extends BaseListTaggedResourcesCmd { public static final Logger s_logger = Logger.getLogger(ListSnapshotsCmd.class.getName()); @@ -43,8 +42,8 @@ public class ListSnapshotsCmd extends BaseListTaggedResourcesCmd { //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - @IdentityMapper(entityTableName="snapshots") - @Parameter(name=ApiConstants.ID, type=CommandType.LONG, description="lists snapshot by snapshot ID") + @Parameter(name=ApiConstants.ID, type=CommandType.UUID, entityType = SnapshotResponse.class, + description="lists snapshot by snapshot ID") private Long id; @Parameter(name=ApiConstants.INTERVAL_TYPE, type=CommandType.STRING, description="valid values are HOURLY, DAILY, WEEKLY, and MONTHLY.") @@ -56,8 +55,8 @@ public class ListSnapshotsCmd extends BaseListTaggedResourcesCmd { @Parameter(name=ApiConstants.SNAPSHOT_TYPE, type=CommandType.STRING, description="valid values are MANUAL or RECURRING.") private String snapshotType; - @IdentityMapper(entityTableName="volumes") - @Parameter(name=ApiConstants.VOLUME_ID, type=CommandType.LONG, description="the ID of the disk volume") + @Parameter(name=ApiConstants.VOLUME_ID, type=CommandType.UUID, entityType = VolumeResponse.class, + description="the ID of the disk volume") private Long volumeId; ///////////////////////////////////////////////////// diff --git a/api/src/org/apache/cloudstack/api/response/SnapshotPolicyResponse.java b/api/src/org/apache/cloudstack/api/response/SnapshotPolicyResponse.java index 79d4effad12..de1a31730d1 100644 --- a/api/src/org/apache/cloudstack/api/response/SnapshotPolicyResponse.java +++ b/api/src/org/apache/cloudstack/api/response/SnapshotPolicyResponse.java @@ -17,9 +17,12 @@ package org.apache.cloudstack.api.response; import com.cloud.serializer.Param; +import com.cloud.storage.snapshot.SnapshotPolicy; import com.google.gson.annotations.SerializedName; import org.apache.cloudstack.api.BaseResponse; +import org.apache.cloudstack.api.Entity; +@Entity(value=SnapshotPolicy.class) public class SnapshotPolicyResponse extends BaseResponse { @SerializedName("id") @Param(description="the ID of the snapshot policy") private String id; From 0719f21320715e2c08af563cac8799070d79623e Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Sun, 23 Dec 2012 03:49:38 -0800 Subject: [PATCH 200/421] api: Annotate ssh apis Signed-off-by: Rohit Yadav --- .../api/command/user/ssh/CreateSSHKeyPairCmd.java | 11 ++++++----- .../api/command/user/ssh/DeleteSSHKeyPairCmd.java | 12 ++++++------ .../api/command/user/ssh/RegisterSSHKeyPairCmd.java | 12 ++++++------ 3 files changed, 18 insertions(+), 17 deletions(-) diff --git a/api/src/org/apache/cloudstack/api/command/user/ssh/CreateSSHKeyPairCmd.java b/api/src/org/apache/cloudstack/api/command/user/ssh/CreateSSHKeyPairCmd.java index b296acd4512..a858cc9a9e8 100644 --- a/api/src/org/apache/cloudstack/api/command/user/ssh/CreateSSHKeyPairCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/ssh/CreateSSHKeyPairCmd.java @@ -20,9 +20,10 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.response.DomainResponse; +import org.apache.cloudstack.api.response.ProjectResponse; import org.apache.cloudstack.api.response.SSHKeyPairResponse; import com.cloud.user.SSHKeyPair; import com.cloud.user.UserContext; @@ -44,12 +45,12 @@ public class CreateSSHKeyPairCmd extends BaseCmd { @Parameter(name=ApiConstants.ACCOUNT, type=CommandType.STRING, description="an optional account for the ssh key. Must be used with domainId.") private String accountName; - @IdentityMapper(entityTableName="domain") - @Parameter(name=ApiConstants.DOMAIN_ID, type=CommandType.LONG, description="an optional domainId for the ssh key. If the account parameter is used, domainId must also be used.") + @Parameter(name=ApiConstants.DOMAIN_ID, type=CommandType.UUID, entityType = DomainResponse.class, + description="an optional domainId for the ssh key. If the account parameter is used, domainId must also be used.") private Long domainId; - @IdentityMapper(entityTableName="projects") - @Parameter(name=ApiConstants.PROJECT_ID, type=CommandType.LONG, description="an optional project for the ssh key") + @Parameter(name=ApiConstants.PROJECT_ID, type=CommandType.UUID, entityType = ProjectResponse.class, + description="an optional project for the ssh key") private Long projectId; diff --git a/api/src/org/apache/cloudstack/api/command/user/ssh/DeleteSSHKeyPairCmd.java b/api/src/org/apache/cloudstack/api/command/user/ssh/DeleteSSHKeyPairCmd.java index f8d2946a5c9..2ee32078aca 100644 --- a/api/src/org/apache/cloudstack/api/command/user/ssh/DeleteSSHKeyPairCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/ssh/DeleteSSHKeyPairCmd.java @@ -20,9 +20,10 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.response.DomainResponse; +import org.apache.cloudstack.api.response.ProjectResponse; import org.apache.cloudstack.api.response.SuccessResponse; import com.cloud.user.Account; import com.cloud.user.UserContext; @@ -32,7 +33,6 @@ public class DeleteSSHKeyPairCmd extends BaseCmd { public static final Logger s_logger = Logger.getLogger(CreateSSHKeyPairCmd.class.getName()); private static final String s_name = "deletesshkeypairresponse"; - ///////////////////////////////////////////////////// //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// @@ -43,12 +43,12 @@ public class DeleteSSHKeyPairCmd extends BaseCmd { @Parameter(name=ApiConstants.ACCOUNT, type=CommandType.STRING, description="the account associated with the keypair. Must be used with the domainId parameter.") private String accountName; - @IdentityMapper(entityTableName="domain") - @Parameter(name=ApiConstants.DOMAIN_ID, type=CommandType.LONG, description="the domain ID associated with the keypair") + @Parameter(name=ApiConstants.DOMAIN_ID, type=CommandType.UUID, entityType = DomainResponse.class, + description="the domain ID associated with the keypair") private Long domainId; - @IdentityMapper(entityTableName="projects") - @Parameter(name=ApiConstants.PROJECT_ID, type=CommandType.LONG, description="the project associated with keypair") + @Parameter(name=ApiConstants.PROJECT_ID, type=CommandType.UUID, entityType = ProjectResponse.class, + description="the project associated with keypair") private Long projectId; ///////////////////////////////////////////////////// diff --git a/api/src/org/apache/cloudstack/api/command/user/ssh/RegisterSSHKeyPairCmd.java b/api/src/org/apache/cloudstack/api/command/user/ssh/RegisterSSHKeyPairCmd.java index f31d2d892fa..1d051ceed85 100644 --- a/api/src/org/apache/cloudstack/api/command/user/ssh/RegisterSSHKeyPairCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/ssh/RegisterSSHKeyPairCmd.java @@ -20,9 +20,10 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.response.DomainResponse; +import org.apache.cloudstack.api.response.ProjectResponse; import org.apache.cloudstack.api.response.SSHKeyPairResponse; import com.cloud.user.SSHKeyPair; import com.cloud.user.UserContext; @@ -32,7 +33,6 @@ public class RegisterSSHKeyPairCmd extends BaseCmd { public static final Logger s_logger = Logger.getLogger(RegisterSSHKeyPairCmd.class.getName()); private static final String s_name = "registersshkeypairresponse"; - ///////////////////////////////////////////////////// //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// @@ -47,12 +47,12 @@ public class RegisterSSHKeyPairCmd extends BaseCmd { @Parameter(name=ApiConstants.ACCOUNT, type=CommandType.STRING, description="an optional account for the ssh key. Must be used with domainId.") private String accountName; - @IdentityMapper(entityTableName="domain") - @Parameter(name=ApiConstants.DOMAIN_ID, type=CommandType.LONG, description="an optional domainId for the ssh key. If the account parameter is used, domainId must also be used.") + @Parameter(name=ApiConstants.DOMAIN_ID, type=CommandType.UUID, entityType = DomainResponse.class, + description="an optional domainId for the ssh key. If the account parameter is used, domainId must also be used.") private Long domainId; - @IdentityMapper(entityTableName="projects") - @Parameter(name=ApiConstants.PROJECT_ID, type=CommandType.LONG, description="an optional project for the ssh key") + @Parameter(name=ApiConstants.PROJECT_ID, type=CommandType.UUID, entityType = ProjectResponse.class, + description="an optional project for the ssh key") private Long projectId; ///////////////////////////////////////////////////// From 38225a17f6d2ed4c72c3d43e096ed5e35602867c Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Sun, 23 Dec 2012 03:56:07 -0800 Subject: [PATCH 201/421] api: Annotate template related api Signed-off-by: Rohit Yadav --- .../command/user/template/CopyTemplateCmd.java | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/api/src/org/apache/cloudstack/api/command/user/template/CopyTemplateCmd.java b/api/src/org/apache/cloudstack/api/command/user/template/CopyTemplateCmd.java index 31003be9794..9aa3d167644 100644 --- a/api/src/org/apache/cloudstack/api/command/user/template/CopyTemplateCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/template/CopyTemplateCmd.java @@ -23,11 +23,12 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; import org.apache.cloudstack.api.response.TemplateResponse; +import org.apache.cloudstack.api.response.UserVmResponse; +import org.apache.cloudstack.api.response.ZoneResponse; import com.cloud.async.AsyncJob; import com.cloud.event.EventTypes; import com.cloud.exception.ResourceAllocationException; @@ -45,16 +46,16 @@ public class CopyTemplateCmd extends BaseAsyncCmd { //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - @IdentityMapper(entityTableName="data_center") - @Parameter(name=ApiConstants.DESTINATION_ZONE_ID, type=CommandType.LONG, required=true, description="ID of the zone the template is being copied to.") + @Parameter(name=ApiConstants.DESTINATION_ZONE_ID, type=CommandType.UUID, entityType = ZoneResponse.class, + required=true, description="ID of the zone the template is being copied to.") private Long destZoneId; - @IdentityMapper(entityTableName="vm_template") - @Parameter(name=ApiConstants.ID, type=CommandType.LONG, required=true, description="Template ID.") + @Parameter(name=ApiConstants.ID, type=CommandType.UUID, entityType = UserVmResponse.class, + required=true, description="Template ID.") private Long id; - @IdentityMapper(entityTableName="data_center") - @Parameter(name=ApiConstants.SOURCE_ZONE_ID, type=CommandType.LONG, required=true, description="ID of the zone the template is currently hosted on.") + @Parameter(name=ApiConstants.SOURCE_ZONE_ID, type=CommandType.UUID, entityType = ZoneResponse.class, + required=true, description="ID of the zone the template is currently hosted on.") private Long sourceZoneId; From a157a4c1eb67f11ab1fac837792c94179fa8bc39 Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Sun, 23 Dec 2012 16:51:11 -0800 Subject: [PATCH 202/421] api: InternalIdentity interface that provides contract to have getId Adds new interface that would maintain contract that extending Interface or implementing class will have the getId() method to get Internal Id Signed-off-by: Rohit Yadav --- .../cloudstack/api/InternalIdentity.java | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 api/src/org/apache/cloudstack/api/InternalIdentity.java diff --git a/api/src/org/apache/cloudstack/api/InternalIdentity.java b/api/src/org/apache/cloudstack/api/InternalIdentity.java new file mode 100644 index 00000000000..1dfeb8c9091 --- /dev/null +++ b/api/src/org/apache/cloudstack/api/InternalIdentity.java @@ -0,0 +1,26 @@ +// 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 org.apache.cloudstack.api; + +// This interface is a contract that getId() will give the internal +// ID of an entity which extends this interface +// Any class having an internal ID in db table/schema should extend this +// For example, all ControlledEntity, OwnedBy would have an internal ID + +public interface InternalIdentity { + long getId(); +} From a5dddb4a838784c44a58b10c5874d6ca304e543d Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Sun, 23 Dec 2012 16:52:35 -0800 Subject: [PATCH 203/421] api: Extend or Implement InternalIdentity's getId method on a lot of VOs and Interfaces Signed-off-by: Rohit Yadav --- api/src/com/cloud/domain/Domain.java | 3 ++- api/src/com/cloud/event/Event.java | 3 ++- api/src/com/cloud/network/IpAddress.java | 3 ++- api/src/com/cloud/network/Network.java | 3 ++- api/src/com/cloud/network/PhysicalNetwork.java | 4 +++- api/src/com/cloud/network/PublicIpAddress.java | 3 ++- .../com/cloud/network/Site2SiteCustomerGateway.java | 3 ++- api/src/com/cloud/network/Site2SiteVpnConnection.java | 3 ++- api/src/com/cloud/network/Site2SiteVpnGateway.java | 3 ++- api/src/com/cloud/network/VpnUser.java | 3 ++- api/src/com/cloud/network/as/AutoScalePolicy.java | 3 ++- api/src/com/cloud/network/as/AutoScaleVmGroup.java | 3 ++- api/src/com/cloud/network/as/AutoScaleVmProfile.java | 3 ++- api/src/com/cloud/network/as/Condition.java | 3 ++- api/src/com/cloud/network/rules/FirewallRule.java | 7 ++++--- api/src/com/cloud/network/rules/StaticNatRule.java | 3 ++- api/src/com/cloud/network/security/SecurityGroup.java | 3 ++- api/src/com/cloud/network/vpc/StaticRoute.java | 3 ++- api/src/com/cloud/network/vpc/Vpc.java | 3 ++- api/src/com/cloud/network/vpc/VpcGateway.java | 3 ++- api/src/com/cloud/projects/ProjectInvitation.java | 3 ++- api/src/com/cloud/server/ResourceTag.java | 3 ++- api/src/com/cloud/storage/Snapshot.java | 3 ++- api/src/com/cloud/storage/Volume.java | 3 ++- api/src/com/cloud/template/VirtualMachineTemplate.java | 3 ++- api/src/com/cloud/user/Account.java | 3 ++- api/src/com/cloud/user/SSHKeyPair.java | 3 ++- api/src/com/cloud/user/User.java | 4 +++- api/src/com/cloud/vm/InstanceGroup.java | 3 ++- api/src/com/cloud/vm/VirtualMachine.java | 3 ++- api/src/org/apache/cloudstack/api/Identity.java | 1 - server/src/com/cloud/api/ApiDispatcher.java | 2 +- .../com/cloud/api/query/vo/ControlledViewEntity.java | 3 ++- .../cloud/api/response/SecurityGroupResultObject.java | 5 +++-- server/src/com/cloud/dc/AccountVlanMapVO.java | 7 ++++--- server/src/com/cloud/network/NetworkAccountVO.java | 10 ++++++++-- server/src/com/cloud/network/NetworkDomainVO.java | 10 ++++++++-- 37 files changed, 90 insertions(+), 44 deletions(-) diff --git a/api/src/com/cloud/domain/Domain.java b/api/src/com/cloud/domain/Domain.java index 94117d13f24..844974d1d1e 100644 --- a/api/src/com/cloud/domain/Domain.java +++ b/api/src/com/cloud/domain/Domain.java @@ -19,12 +19,13 @@ package com.cloud.domain; import java.util.Date; import com.cloud.user.OwnedBy; +import org.apache.cloudstack.api.InternalIdentity; /** * Domain defines the Domain object. */ -public interface Domain extends OwnedBy { +public interface Domain extends OwnedBy, InternalIdentity { public static final long ROOT_DOMAIN = 1L; enum State { diff --git a/api/src/com/cloud/event/Event.java b/api/src/com/cloud/event/Event.java index 30115be51bc..95c8b7f59eb 100644 --- a/api/src/com/cloud/event/Event.java +++ b/api/src/com/cloud/event/Event.java @@ -19,8 +19,9 @@ package com.cloud.event; import java.util.Date; import com.cloud.acl.ControlledEntity; +import org.apache.cloudstack.api.InternalIdentity; -public interface Event extends ControlledEntity{ +public interface Event extends ControlledEntity, InternalIdentity { public enum State { Created, Scheduled, diff --git a/api/src/com/cloud/network/IpAddress.java b/api/src/com/cloud/network/IpAddress.java index bb9a7d58877..8433da2be3c 100644 --- a/api/src/com/cloud/network/IpAddress.java +++ b/api/src/com/cloud/network/IpAddress.java @@ -20,6 +20,7 @@ import java.util.Date; import com.cloud.acl.ControlledEntity; import com.cloud.utils.net.Ip; +import org.apache.cloudstack.api.InternalIdentity; /** * @@ -32,7 +33,7 @@ import com.cloud.utils.net.Ip; * - DomainId = domain of the account owner. * - Allocated = time it was allocated. */ -public interface IpAddress extends ControlledEntity { +public interface IpAddress extends ControlledEntity, InternalIdentity { enum State { Allocating, // The IP Address is being propagated to other network elements and is not ready for use yet. Allocated, // The IP address is in used. diff --git a/api/src/com/cloud/network/Network.java b/api/src/com/cloud/network/Network.java index f91dd6615ef..c10ab6a32f8 100644 --- a/api/src/com/cloud/network/Network.java +++ b/api/src/com/cloud/network/Network.java @@ -22,6 +22,7 @@ import com.cloud.network.Networks.Mode; import com.cloud.network.Networks.TrafficType; import com.cloud.utils.fsm.FiniteState; import com.cloud.utils.fsm.StateMachine; +import org.apache.cloudstack.api.InternalIdentity; import java.net.URI; import java.util.ArrayList; @@ -31,7 +32,7 @@ import java.util.Set; /** * owned by an account. */ -public interface Network extends ControlledEntity { +public interface Network extends ControlledEntity, InternalIdentity { public enum GuestType { Shared, diff --git a/api/src/com/cloud/network/PhysicalNetwork.java b/api/src/com/cloud/network/PhysicalNetwork.java index 03345d946ca..48848279e9a 100644 --- a/api/src/com/cloud/network/PhysicalNetwork.java +++ b/api/src/com/cloud/network/PhysicalNetwork.java @@ -16,12 +16,14 @@ // under the License. package com.cloud.network; +import org.apache.cloudstack.api.InternalIdentity; + import java.util.List; /** * */ -public interface PhysicalNetwork { +public interface PhysicalNetwork extends InternalIdentity { public enum State { Disabled, diff --git a/api/src/com/cloud/network/PublicIpAddress.java b/api/src/com/cloud/network/PublicIpAddress.java index d8a10bcbe89..381076662c6 100644 --- a/api/src/com/cloud/network/PublicIpAddress.java +++ b/api/src/com/cloud/network/PublicIpAddress.java @@ -18,10 +18,11 @@ package com.cloud.network; import com.cloud.acl.ControlledEntity; import com.cloud.dc.Vlan; +import org.apache.cloudstack.api.InternalIdentity; /** */ -public interface PublicIpAddress extends ControlledEntity, IpAddress, Vlan { +public interface PublicIpAddress extends ControlledEntity, IpAddress, Vlan, InternalIdentity { String getMacAddress(); diff --git a/api/src/com/cloud/network/Site2SiteCustomerGateway.java b/api/src/com/cloud/network/Site2SiteCustomerGateway.java index 35ddb3b6a3d..2bf4368ee45 100644 --- a/api/src/com/cloud/network/Site2SiteCustomerGateway.java +++ b/api/src/com/cloud/network/Site2SiteCustomerGateway.java @@ -19,8 +19,9 @@ package com.cloud.network; import java.util.Date; import com.cloud.acl.ControlledEntity; +import org.apache.cloudstack.api.InternalIdentity; -public interface Site2SiteCustomerGateway extends ControlledEntity { +public interface Site2SiteCustomerGateway extends ControlledEntity, InternalIdentity { public long getId(); public String getUuid(); public String getGatewayIp(); diff --git a/api/src/com/cloud/network/Site2SiteVpnConnection.java b/api/src/com/cloud/network/Site2SiteVpnConnection.java index e6d722d4ca5..2eb73ff6ab4 100644 --- a/api/src/com/cloud/network/Site2SiteVpnConnection.java +++ b/api/src/com/cloud/network/Site2SiteVpnConnection.java @@ -19,8 +19,9 @@ package com.cloud.network; import java.util.Date; import com.cloud.acl.ControlledEntity; +import org.apache.cloudstack.api.InternalIdentity; -public interface Site2SiteVpnConnection extends ControlledEntity { +public interface Site2SiteVpnConnection extends ControlledEntity, InternalIdentity { enum State { Pending, Connected, diff --git a/api/src/com/cloud/network/Site2SiteVpnGateway.java b/api/src/com/cloud/network/Site2SiteVpnGateway.java index 465ca533783..5a20102dc32 100644 --- a/api/src/com/cloud/network/Site2SiteVpnGateway.java +++ b/api/src/com/cloud/network/Site2SiteVpnGateway.java @@ -19,8 +19,9 @@ package com.cloud.network; import java.util.Date; import com.cloud.acl.ControlledEntity; +import org.apache.cloudstack.api.InternalIdentity; -public interface Site2SiteVpnGateway extends ControlledEntity { +public interface Site2SiteVpnGateway extends ControlledEntity, InternalIdentity { public long getId(); public String getUuid(); public long getAddrId(); diff --git a/api/src/com/cloud/network/VpnUser.java b/api/src/com/cloud/network/VpnUser.java index 28e4872dcbc..d0b65043576 100644 --- a/api/src/com/cloud/network/VpnUser.java +++ b/api/src/com/cloud/network/VpnUser.java @@ -17,8 +17,9 @@ package com.cloud.network; import com.cloud.acl.ControlledEntity; +import org.apache.cloudstack.api.InternalIdentity; -public interface VpnUser extends ControlledEntity { +public interface VpnUser extends ControlledEntity, InternalIdentity { enum State { Add, Revoke, diff --git a/api/src/com/cloud/network/as/AutoScalePolicy.java b/api/src/com/cloud/network/as/AutoScalePolicy.java index 4ba2d158d83..80190361007 100644 --- a/api/src/com/cloud/network/as/AutoScalePolicy.java +++ b/api/src/com/cloud/network/as/AutoScalePolicy.java @@ -18,8 +18,9 @@ package com.cloud.network.as; import com.cloud.acl.ControlledEntity; +import org.apache.cloudstack.api.InternalIdentity; -public interface AutoScalePolicy extends ControlledEntity { +public interface AutoScalePolicy extends ControlledEntity, InternalIdentity { long getId(); diff --git a/api/src/com/cloud/network/as/AutoScaleVmGroup.java b/api/src/com/cloud/network/as/AutoScaleVmGroup.java index 6d41ae3a7e0..7a32ebe5fb4 100644 --- a/api/src/com/cloud/network/as/AutoScaleVmGroup.java +++ b/api/src/com/cloud/network/as/AutoScaleVmGroup.java @@ -18,9 +18,10 @@ package com.cloud.network.as; import com.cloud.acl.ControlledEntity; +import org.apache.cloudstack.api.InternalIdentity; -public interface AutoScaleVmGroup extends ControlledEntity { +public interface AutoScaleVmGroup extends ControlledEntity, InternalIdentity { String State_New = "new"; String State_Revoke = "revoke"; diff --git a/api/src/com/cloud/network/as/AutoScaleVmProfile.java b/api/src/com/cloud/network/as/AutoScaleVmProfile.java index b7002fd0f4a..f7dfb7c6436 100644 --- a/api/src/com/cloud/network/as/AutoScaleVmProfile.java +++ b/api/src/com/cloud/network/as/AutoScaleVmProfile.java @@ -21,11 +21,12 @@ import java.util.List; import com.cloud.acl.ControlledEntity; import com.cloud.utils.Pair; +import org.apache.cloudstack.api.InternalIdentity; /** * AutoScaleVmProfile */ -public interface AutoScaleVmProfile extends ControlledEntity { +public interface AutoScaleVmProfile extends ControlledEntity, InternalIdentity { public long getId(); diff --git a/api/src/com/cloud/network/as/Condition.java b/api/src/com/cloud/network/as/Condition.java index b990731dd23..424299d3802 100644 --- a/api/src/com/cloud/network/as/Condition.java +++ b/api/src/com/cloud/network/as/Condition.java @@ -18,8 +18,9 @@ package com.cloud.network.as; import com.cloud.acl.ControlledEntity; +import org.apache.cloudstack.api.InternalIdentity; -public interface Condition extends ControlledEntity { +public interface Condition extends ControlledEntity, InternalIdentity { static enum Operator { EQ, GT, LT, GE, LE diff --git a/api/src/com/cloud/network/rules/FirewallRule.java b/api/src/com/cloud/network/rules/FirewallRule.java index 6a967f8cba1..7f0c5eb6fe8 100644 --- a/api/src/com/cloud/network/rules/FirewallRule.java +++ b/api/src/com/cloud/network/rules/FirewallRule.java @@ -19,8 +19,9 @@ package com.cloud.network.rules; import java.util.List; import com.cloud.acl.ControlledEntity; +import org.apache.cloudstack.api.InternalIdentity; -public interface FirewallRule extends ControlledEntity { +public interface FirewallRule extends ControlledEntity, InternalIdentity { enum Purpose { Firewall, PortForwarding, @@ -31,8 +32,8 @@ public interface FirewallRule extends ControlledEntity { } enum FirewallRuleType { - System, // The pre-defined rules created by admin, in the system wide - User; // the rules created by user, to a specific ip + System, // The pre-defined rules created by admin, in the system wide + User // the rules created by user, to a specific ip } enum State { diff --git a/api/src/com/cloud/network/rules/StaticNatRule.java b/api/src/com/cloud/network/rules/StaticNatRule.java index 601cd6afb9e..af06ec14c46 100644 --- a/api/src/com/cloud/network/rules/StaticNatRule.java +++ b/api/src/com/cloud/network/rules/StaticNatRule.java @@ -17,8 +17,9 @@ package com.cloud.network.rules; import com.cloud.acl.ControlledEntity; +import org.apache.cloudstack.api.InternalIdentity; -public interface StaticNatRule extends ControlledEntity, FirewallRule { +public interface StaticNatRule extends ControlledEntity, InternalIdentity, FirewallRule { long getId(); diff --git a/api/src/com/cloud/network/security/SecurityGroup.java b/api/src/com/cloud/network/security/SecurityGroup.java index a496aa5e48a..9cf885b2aa8 100644 --- a/api/src/com/cloud/network/security/SecurityGroup.java +++ b/api/src/com/cloud/network/security/SecurityGroup.java @@ -17,9 +17,10 @@ package com.cloud.network.security; import com.cloud.acl.ControlledEntity; +import org.apache.cloudstack.api.InternalIdentity; //FIXME: Annotation @doc("") -public interface SecurityGroup extends ControlledEntity { +public interface SecurityGroup extends ControlledEntity, InternalIdentity { long getId(); String getUuid(); diff --git a/api/src/com/cloud/network/vpc/StaticRoute.java b/api/src/com/cloud/network/vpc/StaticRoute.java index 41ab4fb5950..f06df7d80e9 100644 --- a/api/src/com/cloud/network/vpc/StaticRoute.java +++ b/api/src/com/cloud/network/vpc/StaticRoute.java @@ -17,8 +17,9 @@ package com.cloud.network.vpc; import com.cloud.acl.ControlledEntity; +import org.apache.cloudstack.api.InternalIdentity; -public interface StaticRoute extends ControlledEntity{ +public interface StaticRoute extends ControlledEntity, InternalIdentity { enum State { Staged, // route been created but has never got through network rule conflict detection. Routes in this state can not be sent to VPC virtual router. Add, // Add means the route has been created and has gone through network rule conflict detection. diff --git a/api/src/com/cloud/network/vpc/Vpc.java b/api/src/com/cloud/network/vpc/Vpc.java index b9f3d6c1a49..d3fc594fd9e 100644 --- a/api/src/com/cloud/network/vpc/Vpc.java +++ b/api/src/com/cloud/network/vpc/Vpc.java @@ -18,8 +18,9 @@ package com.cloud.network.vpc; import com.cloud.acl.ControlledEntity; import com.cloud.network.Network; +import org.apache.cloudstack.api.InternalIdentity; -public interface Vpc extends ControlledEntity{ +public interface Vpc extends ControlledEntity, InternalIdentity{ public enum State { Enabled, Inactive diff --git a/api/src/com/cloud/network/vpc/VpcGateway.java b/api/src/com/cloud/network/vpc/VpcGateway.java index 1ba28cc1159..7bed3e71cb2 100644 --- a/api/src/com/cloud/network/vpc/VpcGateway.java +++ b/api/src/com/cloud/network/vpc/VpcGateway.java @@ -18,8 +18,9 @@ package com.cloud.network.vpc; import com.cloud.acl.ControlledEntity; import org.apache.cloudstack.api.Identity; +import org.apache.cloudstack.api.InternalIdentity; -public interface VpcGateway extends Identity, ControlledEntity { +public interface VpcGateway extends Identity, ControlledEntity, InternalIdentity { public enum Type { Private, Public, diff --git a/api/src/com/cloud/projects/ProjectInvitation.java b/api/src/com/cloud/projects/ProjectInvitation.java index 6dca006645b..f4cac2ebea3 100644 --- a/api/src/com/cloud/projects/ProjectInvitation.java +++ b/api/src/com/cloud/projects/ProjectInvitation.java @@ -19,8 +19,9 @@ package com.cloud.projects; import java.util.Date; import com.cloud.acl.ControlledEntity; +import org.apache.cloudstack.api.InternalIdentity; -public interface ProjectInvitation extends ControlledEntity { +public interface ProjectInvitation extends ControlledEntity, InternalIdentity { public enum State { Pending, Completed, Expired, Declined } diff --git a/api/src/com/cloud/server/ResourceTag.java b/api/src/com/cloud/server/ResourceTag.java index 0c160c4ff4e..e693569ade4 100644 --- a/api/src/com/cloud/server/ResourceTag.java +++ b/api/src/com/cloud/server/ResourceTag.java @@ -17,8 +17,9 @@ package com.cloud.server; import com.cloud.acl.ControlledEntity; +import org.apache.cloudstack.api.InternalIdentity; -public interface ResourceTag extends ControlledEntity{ +public interface ResourceTag extends ControlledEntity, InternalIdentity { public enum TaggedResourceType { UserVm, diff --git a/api/src/com/cloud/storage/Snapshot.java b/api/src/com/cloud/storage/Snapshot.java index a81234aba6b..0ca05b7e106 100644 --- a/api/src/com/cloud/storage/Snapshot.java +++ b/api/src/com/cloud/storage/Snapshot.java @@ -20,8 +20,9 @@ import java.util.Date; import com.cloud.acl.ControlledEntity; import com.cloud.hypervisor.Hypervisor.HypervisorType; +import org.apache.cloudstack.api.InternalIdentity; -public interface Snapshot extends ControlledEntity { +public interface Snapshot extends ControlledEntity, InternalIdentity { public enum Type { MANUAL, RECURRING, diff --git a/api/src/com/cloud/storage/Volume.java b/api/src/com/cloud/storage/Volume.java index 1a92bd10c6f..52b7a112804 100755 --- a/api/src/com/cloud/storage/Volume.java +++ b/api/src/com/cloud/storage/Volume.java @@ -22,8 +22,9 @@ import com.cloud.acl.ControlledEntity; import com.cloud.template.BasedOn; import com.cloud.utils.fsm.StateMachine2; import com.cloud.utils.fsm.StateObject; +import org.apache.cloudstack.api.InternalIdentity; -public interface Volume extends ControlledEntity, BasedOn, StateObject { +public interface Volume extends ControlledEntity, InternalIdentity, BasedOn, StateObject { enum Type { UNKNOWN, ROOT, SWAP, DATADISK, ISO }; diff --git a/api/src/com/cloud/template/VirtualMachineTemplate.java b/api/src/com/cloud/template/VirtualMachineTemplate.java index 9caa2904d36..7527e9a1c30 100755 --- a/api/src/com/cloud/template/VirtualMachineTemplate.java +++ b/api/src/com/cloud/template/VirtualMachineTemplate.java @@ -23,8 +23,9 @@ import com.cloud.acl.ControlledEntity; import com.cloud.hypervisor.Hypervisor.HypervisorType; import com.cloud.storage.Storage.ImageFormat; import com.cloud.storage.Storage.TemplateType; +import org.apache.cloudstack.api.InternalIdentity; -public interface VirtualMachineTemplate extends ControlledEntity { +public interface VirtualMachineTemplate extends ControlledEntity, InternalIdentity { public static enum BootloaderType { PyGrub, HVM, External, CD diff --git a/api/src/com/cloud/user/Account.java b/api/src/com/cloud/user/Account.java index f28fbd125d0..2a1a8ea7fe4 100755 --- a/api/src/com/cloud/user/Account.java +++ b/api/src/com/cloud/user/Account.java @@ -19,8 +19,9 @@ package com.cloud.user; import java.util.Date; import com.cloud.acl.ControlledEntity; +import org.apache.cloudstack.api.InternalIdentity; -public interface Account extends ControlledEntity { +public interface Account extends ControlledEntity, InternalIdentity { public enum Type { Normal, Admin, diff --git a/api/src/com/cloud/user/SSHKeyPair.java b/api/src/com/cloud/user/SSHKeyPair.java index 494f74f5a7a..117c4727bfd 100644 --- a/api/src/com/cloud/user/SSHKeyPair.java +++ b/api/src/com/cloud/user/SSHKeyPair.java @@ -17,8 +17,9 @@ package com.cloud.user; import com.cloud.acl.ControlledEntity; +import org.apache.cloudstack.api.InternalIdentity; -public interface SSHKeyPair extends ControlledEntity { +public interface SSHKeyPair extends ControlledEntity, InternalIdentity { /** * @return The id of the key pair. diff --git a/api/src/com/cloud/user/User.java b/api/src/com/cloud/user/User.java index e1b9f732885..36a7c6543b0 100644 --- a/api/src/com/cloud/user/User.java +++ b/api/src/com/cloud/user/User.java @@ -16,9 +16,11 @@ // under the License. package com.cloud.user; +import org.apache.cloudstack.api.InternalIdentity; + import java.util.Date; -public interface User extends OwnedBy { +public interface User extends OwnedBy, InternalIdentity { public static final long UID_SYSTEM = 1; public long getId(); diff --git a/api/src/com/cloud/vm/InstanceGroup.java b/api/src/com/cloud/vm/InstanceGroup.java index 98fac593d9b..283e1e5cb75 100644 --- a/api/src/com/cloud/vm/InstanceGroup.java +++ b/api/src/com/cloud/vm/InstanceGroup.java @@ -19,8 +19,9 @@ package com.cloud.vm; import java.util.Date; import com.cloud.acl.ControlledEntity; +import org.apache.cloudstack.api.InternalIdentity; -public interface InstanceGroup extends ControlledEntity { +public interface InstanceGroup extends ControlledEntity, InternalIdentity { long getId(); String getName(); diff --git a/api/src/com/cloud/vm/VirtualMachine.java b/api/src/com/cloud/vm/VirtualMachine.java index 64ff9cdadc7..87a903d2deb 100755 --- a/api/src/com/cloud/vm/VirtualMachine.java +++ b/api/src/com/cloud/vm/VirtualMachine.java @@ -24,12 +24,13 @@ import org.apache.cloudstack.api.Identity; import com.cloud.hypervisor.Hypervisor.HypervisorType; import com.cloud.utils.fsm.StateMachine2; import com.cloud.utils.fsm.StateObject; +import org.apache.cloudstack.api.InternalIdentity; /** * VirtualMachine describes the properties held by a virtual machine * */ -public interface VirtualMachine extends RunningOn, ControlledEntity, Identity, StateObject { +public interface VirtualMachine extends RunningOn, ControlledEntity, Identity, InternalIdentity, StateObject { public enum State { Starting(true, "VM is being started. At this state, you should find host id filled which means it's being started on that host."), diff --git a/api/src/org/apache/cloudstack/api/Identity.java b/api/src/org/apache/cloudstack/api/Identity.java index 31367290944..22d23b70017 100644 --- a/api/src/org/apache/cloudstack/api/Identity.java +++ b/api/src/org/apache/cloudstack/api/Identity.java @@ -18,5 +18,4 @@ package org.apache.cloudstack.api; public interface Identity { String getUuid(); - long getId(); } diff --git a/server/src/com/cloud/api/ApiDispatcher.java b/server/src/com/cloud/api/ApiDispatcher.java index e9a7571d9cd..01b8363a23a 100755 --- a/server/src/com/cloud/api/ApiDispatcher.java +++ b/server/src/com/cloud/api/ApiDispatcher.java @@ -557,7 +557,7 @@ public class ApiDispatcher { // Invoke the getId method, get the internal long ID // If that fails hide exceptions as the uuid may not exist try { - internalId = (Long) ((Identity)objVO).getId(); + internalId = (Long) ((InternalIdentity)objVO).getId(); } catch (IllegalArgumentException e) { } catch (NullPointerException e) { } diff --git a/server/src/com/cloud/api/query/vo/ControlledViewEntity.java b/server/src/com/cloud/api/query/vo/ControlledViewEntity.java index 8b3687420a0..a21a6f5608a 100644 --- a/server/src/com/cloud/api/query/vo/ControlledViewEntity.java +++ b/server/src/com/cloud/api/query/vo/ControlledViewEntity.java @@ -17,6 +17,7 @@ package com.cloud.api.query.vo; import com.cloud.acl.ControlledEntity; +import org.apache.cloudstack.api.InternalIdentity; /** * This is the interface for all VO classes representing DB views created for previous ControlledEntity. @@ -24,7 +25,7 @@ import com.cloud.acl.ControlledEntity; * @author minc * */ -public interface ControlledViewEntity extends ControlledEntity { +public interface ControlledViewEntity extends ControlledEntity, InternalIdentity { public String getDomainPath(); diff --git a/server/src/com/cloud/api/response/SecurityGroupResultObject.java b/server/src/com/cloud/api/response/SecurityGroupResultObject.java index 5c3b7633c5d..6fa59b89aa8 100644 --- a/server/src/com/cloud/api/response/SecurityGroupResultObject.java +++ b/server/src/com/cloud/api/response/SecurityGroupResultObject.java @@ -27,8 +27,9 @@ import com.cloud.network.security.SecurityGroup; import com.cloud.network.security.SecurityGroupRules; import com.cloud.serializer.Param; import com.cloud.user.Account; +import org.apache.cloudstack.api.InternalIdentity; -public class SecurityGroupResultObject implements ControlledEntity{ +public class SecurityGroupResultObject implements ControlledEntity, InternalIdentity { @Param(name = "id") private Long id; @@ -63,7 +64,7 @@ public class SecurityGroupResultObject implements ControlledEntity{ this.securityGroupRules = ingressRules; } - public Long getId() { + public long getId() { return id; } diff --git a/server/src/com/cloud/dc/AccountVlanMapVO.java b/server/src/com/cloud/dc/AccountVlanMapVO.java index f8cb9000332..b1bf919df09 100644 --- a/server/src/com/cloud/dc/AccountVlanMapVO.java +++ b/server/src/com/cloud/dc/AccountVlanMapVO.java @@ -24,15 +24,16 @@ import javax.persistence.Id; import javax.persistence.Table; import com.cloud.user.OwnedBy; +import org.apache.cloudstack.api.InternalIdentity; @Entity @Table(name="account_vlan_map") -public class AccountVlanMapVO implements OwnedBy { +public class AccountVlanMapVO implements OwnedBy, InternalIdentity { @Id @GeneratedValue(strategy=GenerationType.IDENTITY) @Column(name="id") - private Long id; + private long id; @Column(name="account_id") private long accountId; @@ -49,7 +50,7 @@ public class AccountVlanMapVO implements OwnedBy { } - public Long getId() { + public long getId() { return id; } diff --git a/server/src/com/cloud/network/NetworkAccountVO.java b/server/src/com/cloud/network/NetworkAccountVO.java index b04da8d1c84..b51e78cce4c 100644 --- a/server/src/com/cloud/network/NetworkAccountVO.java +++ b/server/src/com/cloud/network/NetworkAccountVO.java @@ -24,10 +24,11 @@ import javax.persistence.Id; import javax.persistence.Table; import com.cloud.user.OwnedBy; +import org.apache.cloudstack.api.InternalIdentity; @Entity @Table(name="account_network_ref") -public class NetworkAccountVO implements OwnedBy { +public class NetworkAccountVO implements OwnedBy, InternalIdentity { @Id @GeneratedValue(strategy=GenerationType.IDENTITY) long id; @@ -49,7 +50,12 @@ public class NetworkAccountVO implements OwnedBy { this.accountId = accountId; this.owner = owner; } - + + @Override + public long getId() { + return id; + } + @Override public long getAccountId() { return accountId; diff --git a/server/src/com/cloud/network/NetworkDomainVO.java b/server/src/com/cloud/network/NetworkDomainVO.java index bf32d1a8539..9b79887f7a7 100644 --- a/server/src/com/cloud/network/NetworkDomainVO.java +++ b/server/src/com/cloud/network/NetworkDomainVO.java @@ -24,10 +24,11 @@ import javax.persistence.Id; import javax.persistence.Table; import com.cloud.domain.PartOf; +import org.apache.cloudstack.api.InternalIdentity; @Entity @Table(name="domain_network_ref") -public class NetworkDomainVO implements PartOf { +public class NetworkDomainVO implements PartOf, InternalIdentity { @Id @GeneratedValue(strategy=GenerationType.IDENTITY) long id; @@ -49,7 +50,12 @@ public class NetworkDomainVO implements PartOf { this.domainId = domainId; this.subdomainAccess = subdomainAccess; } - + + @Override + public long getId() { + return id; + } + @Override public long getDomainId() { return domainId; From edb42d2cbbe6e34f04820277ef283813ef0a19ee Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Sun, 23 Dec 2012 17:17:59 -0800 Subject: [PATCH 204/421] api: Annotate templates apis Signed-off-by: Rohit Yadav --- .../ListTemplateOrIsoPermissionsCmd.java | 2 -- api/src/com/cloud/projects/Project.java | 3 ++- api/src/com/cloud/storage/GuestOS.java | 4 +++- .../user/template/CreateTemplateCmd.java | 21 +++++++++++-------- .../user/template/DeleteTemplateCmd.java | 11 +++++----- .../user/template/ExtractTemplateCmd.java | 11 +++++----- .../user/template/ListTemplatesCmd.java | 11 +++++----- .../user/template/RegisterTemplateCmd.java | 21 +++++++++++-------- 8 files changed, 47 insertions(+), 37 deletions(-) diff --git a/api/src/com/cloud/api/commands/ListTemplateOrIsoPermissionsCmd.java b/api/src/com/cloud/api/commands/ListTemplateOrIsoPermissionsCmd.java index c616cced71e..10eeea250e2 100644 --- a/api/src/com/cloud/api/commands/ListTemplateOrIsoPermissionsCmd.java +++ b/api/src/com/cloud/api/commands/ListTemplateOrIsoPermissionsCmd.java @@ -22,7 +22,6 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.response.TemplatePermissionsResponse; @@ -39,7 +38,6 @@ public class ListTemplateOrIsoPermissionsCmd extends BaseCmd { //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - @IdentityMapper(entityTableName="vm_template") @Parameter(name=ApiConstants.ID, type=CommandType.UUID, entityType = TemplatePermissionsResponse.class, required=true, description="the template ID") private Long id; diff --git a/api/src/com/cloud/projects/Project.java b/api/src/com/cloud/projects/Project.java index f861a5bd982..78d52574f28 100644 --- a/api/src/com/cloud/projects/Project.java +++ b/api/src/com/cloud/projects/Project.java @@ -20,8 +20,9 @@ import java.util.Date; import org.apache.cloudstack.api.Identity; import com.cloud.domain.PartOf; +import org.apache.cloudstack.api.InternalIdentity; -public interface Project extends PartOf, Identity { +public interface Project extends PartOf, Identity, InternalIdentity { public enum State { Active, Disabled, Suspended } diff --git a/api/src/com/cloud/storage/GuestOS.java b/api/src/com/cloud/storage/GuestOS.java index 828ba27abaf..de04272929c 100644 --- a/api/src/com/cloud/storage/GuestOS.java +++ b/api/src/com/cloud/storage/GuestOS.java @@ -16,7 +16,9 @@ // under the License. package com.cloud.storage; -public interface GuestOS { +import org.apache.cloudstack.api.InternalIdentity; + +public interface GuestOS extends InternalIdentity { long getId(); diff --git a/api/src/org/apache/cloudstack/api/command/user/template/CreateTemplateCmd.java b/api/src/org/apache/cloudstack/api/command/user/template/CreateTemplateCmd.java index 8ce2ad92718..cee33ec9c34 100644 --- a/api/src/org/apache/cloudstack/api/command/user/template/CreateTemplateCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/template/CreateTemplateCmd.java @@ -25,12 +25,15 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseAsyncCreateCmd; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; +import org.apache.cloudstack.api.response.GuestOSResponse; +import org.apache.cloudstack.api.response.SnapshotResponse; import org.apache.cloudstack.api.response.StoragePoolResponse; import org.apache.cloudstack.api.response.TemplateResponse; +import org.apache.cloudstack.api.response.UserVmResponse; +import org.apache.cloudstack.api.response.VolumeResponse; import com.cloud.async.AsyncJob; import com.cloud.event.EventTypes; import com.cloud.exception.InvalidParameterValueException; @@ -68,8 +71,8 @@ import com.cloud.user.UserContext; @Parameter(name = ApiConstants.NAME, type = CommandType.STRING, required = true, description = "the name of the template") private String templateName; - @IdentityMapper(entityTableName="guest_os") - @Parameter(name = ApiConstants.OS_TYPE_ID, type = CommandType.LONG, required = true, description = "the ID of the OS Type that best represents the OS of this template.") + @Parameter(name = ApiConstants.OS_TYPE_ID, type = CommandType.UUID, entityType = GuestOSResponse.class, + required = true, description = "the ID of the OS Type that best represents the OS of this template.") private Long osTypeId; @Parameter(name = ApiConstants.PASSWORD_ENABLED, type = CommandType.BOOLEAN, description = "true if the template supports the password reset feature; default is false") @@ -78,16 +81,16 @@ import com.cloud.user.UserContext; @Parameter(name = ApiConstants.REQUIRES_HVM, type = CommandType.BOOLEAN, description = "true if the template requres HVM, false otherwise") private Boolean requiresHvm; - @IdentityMapper(entityTableName="snapshots") - @Parameter(name = ApiConstants.SNAPSHOT_ID, type = CommandType.LONG, description = "the ID of the snapshot the template is being created from. Either this parameter, or volumeId has to be passed in") + @Parameter(name = ApiConstants.SNAPSHOT_ID, type = CommandType.UUID, entityType = SnapshotResponse.class, + description = "the ID of the snapshot the template is being created from. Either this parameter, or volumeId has to be passed in") private Long snapshotId; - @IdentityMapper(entityTableName="volumes") - @Parameter(name = ApiConstants.VOLUME_ID, type = CommandType.LONG, description = "the ID of the disk volume the template is being created from. Either this parameter, or snapshotId has to be passed in") + @Parameter(name = ApiConstants.VOLUME_ID, type = CommandType.UUID, entityType = VolumeResponse.class, + description = "the ID of the disk volume the template is being created from. Either this parameter, or snapshotId has to be passed in") private Long volumeId; - @IdentityMapper(entityTableName="vm_instance") - @Parameter(name=ApiConstants.VIRTUAL_MACHINE_ID, type=CommandType.LONG, description="Optional, VM ID. If this presents, it is going to create a baremetal template for VM this ID refers to. This is only for VM whose hypervisor type is BareMetal") + @Parameter(name=ApiConstants.VIRTUAL_MACHINE_ID, type=CommandType.UUID, entityType = UserVmResponse.class, + description="Optional, VM ID. If this presents, it is going to create a baremetal template for VM this ID refers to. This is only for VM whose hypervisor type is BareMetal") private Long vmId; @Parameter(name=ApiConstants.URL, type=CommandType.STRING, description="Optional, only for baremetal hypervisor. The directory name where template stored on CIFS server") diff --git a/api/src/org/apache/cloudstack/api/command/user/template/DeleteTemplateCmd.java b/api/src/org/apache/cloudstack/api/command/user/template/DeleteTemplateCmd.java index fc830fa462b..2e5bb9e3103 100644 --- a/api/src/org/apache/cloudstack/api/command/user/template/DeleteTemplateCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/template/DeleteTemplateCmd.java @@ -16,12 +16,13 @@ // under the License. package org.apache.cloudstack.api.command.user.template; +import org.apache.cloudstack.api.response.UserVmResponse; +import org.apache.cloudstack.api.response.ZoneResponse; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; @@ -41,12 +42,12 @@ public class DeleteTemplateCmd extends BaseAsyncCmd { //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - @IdentityMapper(entityTableName="vm_template") - @Parameter(name=ApiConstants.ID, type=CommandType.LONG, required=true, description="the ID of the template") + @Parameter(name=ApiConstants.ID, type=CommandType.UUID, entityType = UserVmResponse.class, + required=true, description="the ID of the template") private Long id; - @IdentityMapper(entityTableName="data_center") - @Parameter(name=ApiConstants.ZONE_ID, type=CommandType.LONG, description="the ID of zone of the template") + @Parameter(name=ApiConstants.ZONE_ID, type=CommandType.UUID, entityType = ZoneResponse.class, + description="the ID of zone of the template") private Long zoneId; diff --git a/api/src/org/apache/cloudstack/api/command/user/template/ExtractTemplateCmd.java b/api/src/org/apache/cloudstack/api/command/user/template/ExtractTemplateCmd.java index 9be1297358e..6a6e9853b81 100644 --- a/api/src/org/apache/cloudstack/api/command/user/template/ExtractTemplateCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/template/ExtractTemplateCmd.java @@ -16,12 +16,13 @@ // under the License. package org.apache.cloudstack.api.command.user.template; +import org.apache.cloudstack.api.response.UserVmResponse; +import org.apache.cloudstack.api.response.ZoneResponse; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; @@ -43,15 +44,15 @@ public class ExtractTemplateCmd extends BaseAsyncCmd { //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - @IdentityMapper(entityTableName="vm_template") - @Parameter(name=ApiConstants.ID, type=CommandType.LONG, required=true, description="the ID of the template") + @Parameter(name=ApiConstants.ID, type=CommandType.UUID, entityType = UserVmResponse.class, + required=true, description="the ID of the template") private Long id; @Parameter(name=ApiConstants.URL, type=CommandType.STRING, required=false, description="the url to which the ISO would be extracted") private String url; - @IdentityMapper(entityTableName="data_center") - @Parameter(name=ApiConstants.ZONE_ID, type=CommandType.LONG, required=false, description="the ID of the zone where the ISO is originally located" ) + @Parameter(name=ApiConstants.ZONE_ID, type=CommandType.UUID, entityType = ZoneResponse.class, + required=false, description="the ID of the zone where the ISO is originally located" ) private Long zoneId; @Parameter(name=ApiConstants.MODE, type=CommandType.STRING, required=true, description="the mode of extraction - HTTP_DOWNLOAD or FTP_UPLOAD") diff --git a/api/src/org/apache/cloudstack/api/command/user/template/ListTemplatesCmd.java b/api/src/org/apache/cloudstack/api/command/user/template/ListTemplatesCmd.java index 52051b291ed..647a0c7e12a 100644 --- a/api/src/org/apache/cloudstack/api/command/user/template/ListTemplatesCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/template/ListTemplatesCmd.java @@ -20,11 +20,12 @@ import java.util.ArrayList; import java.util.List; import java.util.Set; +import org.apache.cloudstack.api.response.UserVmResponse; +import org.apache.cloudstack.api.response.ZoneResponse; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseListTaggedResourcesCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.response.ListResponse; @@ -48,8 +49,8 @@ public class ListTemplatesCmd extends BaseListTaggedResourcesCmd { @Parameter(name=ApiConstants.HYPERVISOR, type=CommandType.STRING, description="the hypervisor for which to restrict the search") private String hypervisor; - @IdentityMapper(entityTableName="vm_template") - @Parameter(name=ApiConstants.ID, type=CommandType.LONG, description="the template ID") + @Parameter(name=ApiConstants.ID, type=CommandType.UUID, entityType = UserVmResponse.class, + description="the template ID") private Long id; @Parameter(name=ApiConstants.NAME, type=CommandType.STRING, description="the template name") @@ -62,8 +63,8 @@ public class ListTemplatesCmd extends BaseListTaggedResourcesCmd { "* executable-all templates that can be used to deploy a new VM* community-templates that are public.") private String templateFilter; - @IdentityMapper(entityTableName="data_center") - @Parameter(name=ApiConstants.ZONE_ID, type=CommandType.LONG, description="list templates by zoneId") + @Parameter(name=ApiConstants.ZONE_ID, type=CommandType.UUID, entityType = ZoneResponse.class, + description="list templates by zoneId") private Long zoneId; ///////////////////////////////////////////////////// /////////////////// Accessors /////////////////////// diff --git a/api/src/org/apache/cloudstack/api/command/user/template/RegisterTemplateCmd.java b/api/src/org/apache/cloudstack/api/command/user/template/RegisterTemplateCmd.java index 802e23327a5..1855cdc31e4 100644 --- a/api/src/org/apache/cloudstack/api/command/user/template/RegisterTemplateCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/template/RegisterTemplateCmd.java @@ -25,12 +25,15 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; +import org.apache.cloudstack.api.response.DomainResponse; import org.apache.cloudstack.api.response.ListResponse; +import org.apache.cloudstack.api.response.GuestOSResponse; +import org.apache.cloudstack.api.response.ProjectResponse; import org.apache.cloudstack.api.response.TemplateResponse; +import org.apache.cloudstack.api.response.ZoneResponse; import com.cloud.async.AsyncJob; import com.cloud.exception.ResourceAllocationException; import com.cloud.template.VirtualMachineTemplate; @@ -67,8 +70,8 @@ public class RegisterTemplateCmd extends BaseCmd { @Parameter(name=ApiConstants.NAME, type=CommandType.STRING, required=true, description="the name of the template") private String templateName; - @Parameter(name=ApiConstants.OS_TYPE_ID, type=CommandType.LONG, required=true, description="the ID of the OS Type that best represents the OS of this template.") - @IdentityMapper(entityTableName="guest_os") + @Parameter(name=ApiConstants.OS_TYPE_ID, type=CommandType.UUID, entityType = GuestOSResponse.class, + required=true, description="the ID of the OS Type that best represents the OS of this template.") private Long osTypeId; @Parameter(name=ApiConstants.PASSWORD_ENABLED, type=CommandType.BOOLEAN, description="true if the template supports the password reset feature; default is false") @@ -86,12 +89,12 @@ public class RegisterTemplateCmd extends BaseCmd { @Parameter(name=ApiConstants.URL, type=CommandType.STRING, required=true, description="the URL of where the template is hosted. Possible URL include http:// and https://") private String url; - @IdentityMapper(entityTableName="data_center") - @Parameter(name=ApiConstants.ZONE_ID, type=CommandType.LONG, required=true, description="the ID of the zone the template is to be hosted on") + @Parameter(name=ApiConstants.ZONE_ID, type=CommandType.UUID, entityType = ZoneResponse.class, + required=true, description="the ID of the zone the template is to be hosted on") private Long zoneId; - @IdentityMapper(entityTableName="domain") - @Parameter(name=ApiConstants.DOMAIN_ID, type=CommandType.LONG, description="an optional domainId. If the account parameter is used, domainId must also be used.") + @Parameter(name=ApiConstants.DOMAIN_ID, type=CommandType.UUID, entityType = DomainResponse.class, + description="an optional domainId. If the account parameter is used, domainId must also be used.") private Long domainId; @Parameter(name=ApiConstants.ACCOUNT, type=CommandType.STRING, description="an optional accountName. Must be used with domainId.") @@ -103,8 +106,8 @@ public class RegisterTemplateCmd extends BaseCmd { @Parameter(name=ApiConstants.TEMPLATE_TAG, type=CommandType.STRING, description="the tag for this template.") private String templateTag; - @IdentityMapper(entityTableName="projects") - @Parameter(name=ApiConstants.PROJECT_ID, type=CommandType.LONG, description="Register template for the project") + @Parameter(name=ApiConstants.PROJECT_ID, type=CommandType.UUID, entityType = ProjectResponse.class, + description="Register template for the project") private Long projectId; @Parameter(name=ApiConstants.DETAILS, type=CommandType.MAP, description="Template details in key/value pairs.") From 1931667243dbb566925e0b8acbbd4f25649f2bcb Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Sun, 23 Dec 2012 17:21:43 -0800 Subject: [PATCH 205/421] api: Annotate volume api Signed-off-by: Rohit Yadav --- .../api/command/user/volume/UploadVolumeCmd.java | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/api/src/org/apache/cloudstack/api/command/user/volume/UploadVolumeCmd.java b/api/src/org/apache/cloudstack/api/command/user/volume/UploadVolumeCmd.java index be150481e0b..ff39cd91802 100644 --- a/api/src/org/apache/cloudstack/api/command/user/volume/UploadVolumeCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/volume/UploadVolumeCmd.java @@ -16,12 +16,13 @@ // under the License. package org.apache.cloudstack.api.command.user.volume; +import org.apache.cloudstack.api.response.DomainResponse; +import org.apache.cloudstack.api.response.ZoneResponse; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; @@ -53,12 +54,12 @@ public class UploadVolumeCmd extends BaseAsyncCmd { @Parameter(name=ApiConstants.URL, type=CommandType.STRING, required=true, description="the URL of where the volume is hosted. Possible URL include http:// and https://") private String url; - @IdentityMapper(entityTableName="data_center") - @Parameter(name=ApiConstants.ZONE_ID, type=CommandType.LONG, required=true, description="the ID of the zone the volume is to be hosted on") + @Parameter(name=ApiConstants.ZONE_ID, type=CommandType.UUID, entityType = ZoneResponse.class, + required=true, description="the ID of the zone the volume is to be hosted on") private Long zoneId; - @IdentityMapper(entityTableName="domain") - @Parameter(name=ApiConstants.DOMAIN_ID, type=CommandType.LONG, description="an optional domainId. If the account parameter is used, domainId must also be used.") + @Parameter(name=ApiConstants.DOMAIN_ID, type=CommandType.UUID, entityType = DomainResponse.class, + description="an optional domainId. If the account parameter is used, domainId must also be used.") private Long domainId; @Parameter(name=ApiConstants.ACCOUNT, type=CommandType.STRING, description="an optional accountName. Must be used with domainId.") From 02efffa93efabc5a639613af144d28a25239130f Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Sun, 23 Dec 2012 17:24:58 -0800 Subject: [PATCH 206/421] api: Annotate VPC apis Signed-off-by: Rohit Yadav --- .../api/command/user/vpc/DeleteStaticRouteCmd.java | 11 ++++++----- .../cloudstack/api/command/user/vpc/DeleteVPCCmd.java | 9 +++------ .../api/command/user/vpc/ListPrivateGatewaysCmd.java | 2 +- 3 files changed, 10 insertions(+), 12 deletions(-) diff --git a/api/src/org/apache/cloudstack/api/command/user/vpc/DeleteStaticRouteCmd.java b/api/src/org/apache/cloudstack/api/command/user/vpc/DeleteStaticRouteCmd.java index f3f48254738..b8c2437bce4 100644 --- a/api/src/org/apache/cloudstack/api/command/user/vpc/DeleteStaticRouteCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vpc/DeleteStaticRouteCmd.java @@ -16,12 +16,13 @@ // under the License. package org.apache.cloudstack.api.command.user.vpc; +import org.apache.cloudstack.api.response.AccountResponse; +import org.apache.cloudstack.api.response.StaticRouteResponse; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; @@ -42,13 +43,13 @@ public class DeleteStaticRouteCmd extends BaseAsyncCmd{ //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - @IdentityMapper(entityTableName="static_routes") - @Parameter(name=ApiConstants.ID, type=CommandType.LONG, required=true, description="the ID of the static route") + @Parameter(name=ApiConstants.ID, type=CommandType.UUID, entityType = StaticRouteResponse.class, + required=true, description="the ID of the static route") private Long id; // unexposed parameter needed for events logging - @IdentityMapper(entityTableName="account") - @Parameter(name=ApiConstants.ACCOUNT_ID, type=CommandType.LONG, expose=false) + @Parameter(name=ApiConstants.ACCOUNT_ID, type=CommandType.UUID, entityType = AccountResponse.class, + expose=false) private Long ownerId; ///////////////////////////////////////////////////// /////////////////// Accessors /////////////////////// diff --git a/api/src/org/apache/cloudstack/api/command/user/vpc/DeleteVPCCmd.java b/api/src/org/apache/cloudstack/api/command/user/vpc/DeleteVPCCmd.java index 7165db7bdc1..4c02903d3cc 100644 --- a/api/src/org/apache/cloudstack/api/command/user/vpc/DeleteVPCCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vpc/DeleteVPCCmd.java @@ -16,12 +16,12 @@ // under the License. package org.apache.cloudstack.api.command.user.vpc; +import org.apache.cloudstack.api.response.VpcResponse; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; @@ -32,7 +32,6 @@ import com.cloud.exception.ResourceUnavailableException; import com.cloud.network.vpc.Vpc; import com.cloud.user.Account; - @Implementation(description="Deletes a VPC", responseObject=SuccessResponse.class) public class DeleteVPCCmd extends BaseAsyncCmd{ public static final Logger s_logger = Logger.getLogger(DeleteVPCCmd.class.getName()); @@ -42,11 +41,10 @@ public class DeleteVPCCmd extends BaseAsyncCmd{ //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - @IdentityMapper(entityTableName="vpc") - @Parameter(name=ApiConstants.ID, type=CommandType.LONG, required=true, description="the ID of the VPC") + @Parameter(name=ApiConstants.ID, type=CommandType.UUID, entityType = VpcResponse.class, + required=true, description="the ID of the VPC") private Long id; - ///////////////////////////////////////////////////// /////////////////// Accessors /////////////////////// ///////////////////////////////////////////////////// @@ -55,7 +53,6 @@ public class DeleteVPCCmd extends BaseAsyncCmd{ return id; } - ///////////////////////////////////////////////////// /////////////// API Implementation/////////////////// ///////////////////////////////////////////////////// diff --git a/api/src/org/apache/cloudstack/api/command/user/vpc/ListPrivateGatewaysCmd.java b/api/src/org/apache/cloudstack/api/command/user/vpc/ListPrivateGatewaysCmd.java index 12062c831e4..b71c06789fb 100644 --- a/api/src/org/apache/cloudstack/api/command/user/vpc/ListPrivateGatewaysCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vpc/ListPrivateGatewaysCmd.java @@ -40,7 +40,7 @@ public class ListPrivateGatewaysCmd extends BaseListProjectAndAccountResourcesCm ///////////////////////////////////////////////////// //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - @Parameter(name=ApiConstants.ID, type=CommandType.UUID, entityType=PrivateGatewayResponse.class, + @Parameter(name=ApiConstants.ID, type=CommandType.UUID, entityType=PrivateGatewayResponse.class, description="list private gateway by id") private Long id; From f4a407e197a7c9c657af84f575596b1503d3b4b8 Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Sun, 23 Dec 2012 17:26:16 -0800 Subject: [PATCH 207/421] api: Remove IdentityMapper imports on vpn Signed-off-by: Rohit Yadav --- .../cloudstack/api/command/user/vpn/DeleteVpnConnectionCmd.java | 1 - .../cloudstack/api/command/user/vpn/ListVpnConnectionsCmd.java | 1 - 2 files changed, 2 deletions(-) diff --git a/api/src/org/apache/cloudstack/api/command/user/vpn/DeleteVpnConnectionCmd.java b/api/src/org/apache/cloudstack/api/command/user/vpn/DeleteVpnConnectionCmd.java index 9303f540421..ac736a6c739 100644 --- a/api/src/org/apache/cloudstack/api/command/user/vpn/DeleteVpnConnectionCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vpn/DeleteVpnConnectionCmd.java @@ -22,7 +22,6 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; diff --git a/api/src/org/apache/cloudstack/api/command/user/vpn/ListVpnConnectionsCmd.java b/api/src/org/apache/cloudstack/api/command/user/vpn/ListVpnConnectionsCmd.java index 68154df4dcd..f671f33aa98 100644 --- a/api/src/org/apache/cloudstack/api/command/user/vpn/ListVpnConnectionsCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vpn/ListVpnConnectionsCmd.java @@ -24,7 +24,6 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; 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.response.ListResponse; From fd784bd2d3c2975e36747d686f4e275793743e27 Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Sun, 23 Dec 2012 17:28:53 -0800 Subject: [PATCH 208/421] api: Annotate CreatePrivateNetworkCmd Signed-off-by: Rohit Yadav --- .../api/commands/CreatePrivateNetworkCmd.java | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/api/src/com/cloud/api/commands/CreatePrivateNetworkCmd.java b/api/src/com/cloud/api/commands/CreatePrivateNetworkCmd.java index 7f97f51f75e..92dc5a6109d 100644 --- a/api/src/com/cloud/api/commands/CreatePrivateNetworkCmd.java +++ b/api/src/com/cloud/api/commands/CreatePrivateNetworkCmd.java @@ -16,12 +16,14 @@ // under the License. package com.cloud.api.commands; +import org.apache.cloudstack.api.response.DomainResponse; +import org.apache.cloudstack.api.response.PhysicalNetworkResponse; +import org.apache.cloudstack.api.response.ProjectResponse; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseAsyncCreateCmd; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; @@ -49,8 +51,8 @@ public class CreatePrivateNetworkCmd extends BaseAsyncCreateCmd { @Parameter(name=ApiConstants.DISPLAY_TEXT, type=CommandType.STRING, required=true, description="the display text of the network") private String displayText; - @IdentityMapper(entityTableName="physical_network") - @Parameter(name=ApiConstants.PHYSICAL_NETWORK_ID, type=CommandType.LONG, required=true, description="the Physical Network ID the network belongs to") + @Parameter(name=ApiConstants.PHYSICAL_NETWORK_ID, type=CommandType.UUID, entityType = PhysicalNetworkResponse.class, + required=true, description="the Physical Network ID the network belongs to") private Long physicalNetworkId; @Parameter(name=ApiConstants.GATEWAY, type=CommandType.STRING, required=true, description="the gateway of the network") @@ -72,12 +74,12 @@ public class CreatePrivateNetworkCmd extends BaseAsyncCreateCmd { @Parameter(name=ApiConstants.ACCOUNT, type=CommandType.STRING, description="account who will own the network") private String accountName; - @IdentityMapper(entityTableName="projects") - @Parameter(name=ApiConstants.PROJECT_ID, type=CommandType.LONG, description="an optional project for the ssh key") + @Parameter(name=ApiConstants.PROJECT_ID, type=CommandType.UUID, entityType = ProjectResponse.class, + description="an optional project for the ssh key") private Long projectId; - @IdentityMapper(entityTableName="domain") - @Parameter(name=ApiConstants.DOMAIN_ID, type=CommandType.LONG, description="domain ID of the account owning a network") + @Parameter(name=ApiConstants.DOMAIN_ID, type=CommandType.UUID, entityType = DomainResponse.class, + description="domain ID of the account owning a network") private Long domainId; From a4fed07a7e6c63d7bf6d526f890274d638977467 Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Sun, 23 Dec 2012 17:33:30 -0800 Subject: [PATCH 209/421] api: Annotate usage related apis Signed-off-by: Rohit Yadav --- .../cloud/api/commands/AddTrafficMonitorCmd.java | 7 +++---- .../api/commands/DeleteTrafficMonitorCmd.java | 6 +++--- .../api/commands/GenerateUsageRecordsCmd.java | 6 +++--- .../cloud/api/commands/GetUsageRecordsCmd.java | 16 +++++++++------- .../api/commands/ListTrafficMonitorsCmd.java | 7 +++---- 5 files changed, 21 insertions(+), 21 deletions(-) diff --git a/server/src/com/cloud/api/commands/AddTrafficMonitorCmd.java b/server/src/com/cloud/api/commands/AddTrafficMonitorCmd.java index 063b28bde4b..1aba3959293 100644 --- a/server/src/com/cloud/api/commands/AddTrafficMonitorCmd.java +++ b/server/src/com/cloud/api/commands/AddTrafficMonitorCmd.java @@ -16,11 +16,11 @@ // under the License. package com.cloud.api.commands; +import org.apache.cloudstack.api.response.ZoneResponse; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; @@ -43,10 +43,9 @@ public class AddTrafficMonitorCmd extends BaseCmd { //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - @IdentityMapper(entityTableName="data_center") - @Parameter(name=ApiConstants.ZONE_ID, type=CommandType.LONG, required = true, description="Zone in which to add the external firewall appliance.") + @Parameter(name=ApiConstants.ZONE_ID, type=CommandType.UUID, entityType = ZoneResponse.class, + required = true, description="Zone in which to add the external firewall appliance.") private Long zoneId; - @Parameter(name=ApiConstants.URL, type=CommandType.STRING, required = true, description="URL of the traffic monitor Host") private String url; diff --git a/server/src/com/cloud/api/commands/DeleteTrafficMonitorCmd.java b/server/src/com/cloud/api/commands/DeleteTrafficMonitorCmd.java index 6e03cca6665..265de338a47 100644 --- a/server/src/com/cloud/api/commands/DeleteTrafficMonitorCmd.java +++ b/server/src/com/cloud/api/commands/DeleteTrafficMonitorCmd.java @@ -16,11 +16,11 @@ // under the License. package com.cloud.api.commands; +import org.apache.cloudstack.api.response.HostResponse; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; @@ -40,8 +40,8 @@ public class DeleteTrafficMonitorCmd extends BaseCmd { //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - @IdentityMapper(entityTableName="host") - @Parameter(name=ApiConstants.ID, type=CommandType.LONG, required = true, description="Id of the Traffic Monitor Host.") + @Parameter(name=ApiConstants.ID, type=CommandType.UUID, entityType = HostResponse.class, + required = true, description="Id of the Traffic Monitor Host.") private Long id; /////////////////////////////////////////////////// diff --git a/server/src/com/cloud/api/commands/GenerateUsageRecordsCmd.java b/server/src/com/cloud/api/commands/GenerateUsageRecordsCmd.java index 15e04303202..5bb276626fe 100644 --- a/server/src/com/cloud/api/commands/GenerateUsageRecordsCmd.java +++ b/server/src/com/cloud/api/commands/GenerateUsageRecordsCmd.java @@ -18,11 +18,11 @@ package com.cloud.api.commands; import java.util.Date; +import org.apache.cloudstack.api.response.DomainResponse; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; @@ -40,8 +40,8 @@ public class GenerateUsageRecordsCmd extends BaseCmd { //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - @IdentityMapper(entityTableName="domain") - @Parameter(name=ApiConstants.DOMAIN_ID, type=CommandType.LONG, description="List events for the specified domain.") + @Parameter(name=ApiConstants.DOMAIN_ID, type=CommandType.UUID, entityType = DomainResponse.class, + description="List events for the specified domain.") private Long domainId; @Parameter(name=ApiConstants.END_DATE, type=CommandType.DATE, required=true, description="End date range for usage record query. Use yyyy-MM-dd as the date format, e.g. startDate=2009-06-03.") diff --git a/server/src/com/cloud/api/commands/GetUsageRecordsCmd.java b/server/src/com/cloud/api/commands/GetUsageRecordsCmd.java index 77fdd56eb0c..86993023b0f 100644 --- a/server/src/com/cloud/api/commands/GetUsageRecordsCmd.java +++ b/server/src/com/cloud/api/commands/GetUsageRecordsCmd.java @@ -23,6 +23,9 @@ import java.util.Date; import java.util.List; import java.util.TimeZone; +import org.apache.cloudstack.api.response.AccountResponse; +import org.apache.cloudstack.api.response.DomainResponse; +import org.apache.cloudstack.api.response.ProjectResponse; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; @@ -31,7 +34,6 @@ import com.cloud.dc.DataCenter; import com.cloud.domain.Domain; import org.apache.cloudstack.api.BaseListCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.response.ListResponse; @@ -59,8 +61,8 @@ public class GetUsageRecordsCmd extends BaseListCmd { @Parameter(name=ApiConstants.ACCOUNT, type=CommandType.STRING, description="List usage records for the specified user.") private String accountName; - @IdentityMapper(entityTableName="domain") - @Parameter(name=ApiConstants.DOMAIN_ID, type=CommandType.LONG, description="List usage records for the specified domain.") + @Parameter(name=ApiConstants.DOMAIN_ID, type=CommandType.UUID, entityType = DomainResponse.class, + description="List usage records for the specified domain.") private Long domainId; @Parameter(name=ApiConstants.END_DATE, type=CommandType.DATE, required=true, description="End date range for usage record query. Use yyyy-MM-dd as the date format, e.g. startDate=2009-06-03.") @@ -69,12 +71,12 @@ public class GetUsageRecordsCmd extends BaseListCmd { @Parameter(name=ApiConstants.START_DATE, type=CommandType.DATE, required=true, description="Start date range for usage record query. Use yyyy-MM-dd as the date format, e.g. startDate=2009-06-01.") private Date startDate; - @IdentityMapper(entityTableName="account") - @Parameter(name=ApiConstants.ACCOUNT_ID, type=CommandType.LONG, description="List usage records for the specified account") + @Parameter(name=ApiConstants.ACCOUNT_ID, type=CommandType.UUID, entityType = AccountResponse.class, + description="List usage records for the specified account") private Long accountId; - @IdentityMapper(entityTableName="projects") - @Parameter(name=ApiConstants.PROJECT_ID, type=CommandType.LONG, description="List usage records for specified project") + @Parameter(name=ApiConstants.PROJECT_ID, type=CommandType.UUID, entityType = ProjectResponse.class, + description="List usage records for specified project") private Long projectId; @Parameter(name=ApiConstants.TYPE, type=CommandType.LONG, description="List usage records for the specified usage type") diff --git a/server/src/com/cloud/api/commands/ListTrafficMonitorsCmd.java b/server/src/com/cloud/api/commands/ListTrafficMonitorsCmd.java index 4db5f9f38ab..07e45fbc6f3 100644 --- a/server/src/com/cloud/api/commands/ListTrafficMonitorsCmd.java +++ b/server/src/com/cloud/api/commands/ListTrafficMonitorsCmd.java @@ -20,11 +20,11 @@ import java.util.ArrayList; import java.util.List; import org.apache.cloudstack.api.command.user.offering.ListServiceOfferingsCmd; +import org.apache.cloudstack.api.response.ZoneResponse; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseListCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.response.ListResponse; @@ -44,11 +44,10 @@ public class ListTrafficMonitorsCmd extends BaseListCmd { //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - @IdentityMapper(entityTableName="data_center") - @Parameter(name=ApiConstants.ZONE_ID, type=CommandType.LONG, required = true, description="zone Id") + @Parameter(name=ApiConstants.ZONE_ID, type=CommandType.UUID, entityType = ZoneResponse.class, + required = true, description="zone Id") private long zoneId; - ///////////////////////////////////////////////////// /////////////////// Accessors /////////////////////// ///////////////////////////////////////////////////// From e849d70af14412ee42892a016bc2ddb5d5af6e9f Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Sun, 23 Dec 2012 17:41:10 -0800 Subject: [PATCH 210/421] api: Annotate some juniper-src apis Signed-off-by: Rohit Yadav --- .../src/com/cloud/api/commands/AddExternalFirewallCmd.java | 6 +++--- .../src/com/cloud/api/commands/AddSrxFirewallCmd.java | 6 +++--- .../src/com/cloud/api/commands/ConfigureSrxFirewallCmd.java | 1 + .../com/cloud/api/commands/DeleteExternalFirewallCmd.java | 6 +++--- .../com/cloud/api/commands/ListExternalFirewallsCmd.java | 6 +++--- .../src/com/cloud/network/ExternalLoadBalancerDeviceVO.java | 3 ++- 6 files changed, 15 insertions(+), 13 deletions(-) diff --git a/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/AddExternalFirewallCmd.java b/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/AddExternalFirewallCmd.java index 99104618527..59ca33a5ec9 100644 --- a/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/AddExternalFirewallCmd.java +++ b/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/AddExternalFirewallCmd.java @@ -16,11 +16,11 @@ // under the License. package com.cloud.api.commands; +import org.apache.cloudstack.api.response.ZoneResponse; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.PlugService; @@ -41,8 +41,8 @@ public class AddExternalFirewallCmd extends BaseCmd { //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - @IdentityMapper(entityTableName="data_center") - @Parameter(name=ApiConstants.ZONE_ID, type=CommandType.LONG, required = true, description="Zone in which to add the external firewall appliance.") + @Parameter(name=ApiConstants.ZONE_ID, type=CommandType.UUID, entityType = ZoneResponse.class, + required = true, description="Zone in which to add the external firewall appliance.") private Long zoneId; @Parameter(name=ApiConstants.URL, type=CommandType.STRING, required = true, description="URL of the external firewall appliance.") diff --git a/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/AddSrxFirewallCmd.java b/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/AddSrxFirewallCmd.java index d0d7d1184f5..f36f66ae837 100644 --- a/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/AddSrxFirewallCmd.java +++ b/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/AddSrxFirewallCmd.java @@ -16,12 +16,12 @@ // under the License. package com.cloud.api.commands; +import org.apache.cloudstack.api.response.PhysicalNetworkResponse; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.PlugService; @@ -48,8 +48,8 @@ public class AddSrxFirewallCmd extends BaseAsyncCmd { //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - @IdentityMapper(entityTableName="physical_network") - @Parameter(name=ApiConstants.PHYSICAL_NETWORK_ID, type=CommandType.LONG, required=true, description="the Physical Network ID") + @Parameter(name=ApiConstants.PHYSICAL_NETWORK_ID, type=CommandType.UUID, entityType = PhysicalNetworkResponse.class, + required=true, description="the Physical Network ID") private Long physicalNetworkId; @Parameter(name=ApiConstants.URL, type=CommandType.STRING, required = true, description="URL of the SRX appliance.") diff --git a/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/ConfigureSrxFirewallCmd.java b/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/ConfigureSrxFirewallCmd.java index da560786c7c..dd77d2bc3b7 100644 --- a/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/ConfigureSrxFirewallCmd.java +++ b/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/ConfigureSrxFirewallCmd.java @@ -16,6 +16,7 @@ // under the License. package com.cloud.api.commands; +import com.cloud.server.api.response.ExternalLoadBalancerResponse; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; diff --git a/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/DeleteExternalFirewallCmd.java b/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/DeleteExternalFirewallCmd.java index 640de7839ce..7887fe0b2d9 100644 --- a/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/DeleteExternalFirewallCmd.java +++ b/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/DeleteExternalFirewallCmd.java @@ -16,11 +16,11 @@ // under the License. package com.cloud.api.commands; +import org.apache.cloudstack.api.response.HostResponse; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.PlugService; @@ -39,8 +39,8 @@ public class DeleteExternalFirewallCmd extends BaseCmd { //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - @IdentityMapper(entityTableName="host") - @Parameter(name=ApiConstants.ID, type=CommandType.LONG, required = true, description="Id of the external firewall appliance.") + @Parameter(name=ApiConstants.ID, type=CommandType.UUID, entityType = HostResponse.class, + required = true, description="Id of the external firewall appliance.") private Long id; /////////////////////////////////////////////////// diff --git a/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/ListExternalFirewallsCmd.java b/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/ListExternalFirewallsCmd.java index c993d8983e4..31e35f65784 100644 --- a/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/ListExternalFirewallsCmd.java +++ b/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/ListExternalFirewallsCmd.java @@ -20,11 +20,11 @@ import java.util.ArrayList; import java.util.List; import org.apache.cloudstack.api.command.user.offering.ListServiceOfferingsCmd; +import org.apache.cloudstack.api.response.ZoneResponse; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseListCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.PlugService; @@ -42,8 +42,8 @@ public class ListExternalFirewallsCmd extends BaseListCmd { //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - @IdentityMapper(entityTableName="data_center") - @Parameter(name=ApiConstants.ZONE_ID, type=CommandType.LONG, required = true, description="zone Id") + @Parameter(name=ApiConstants.ZONE_ID, type=CommandType.UUID, entityType = ZoneResponse.class, + required = true, description="zone Id") private long zoneId; ///////////////////////////////////////////////////// diff --git a/server/src/com/cloud/network/ExternalLoadBalancerDeviceVO.java b/server/src/com/cloud/network/ExternalLoadBalancerDeviceVO.java index 84576320774..c78decb5ffa 100644 --- a/server/src/com/cloud/network/ExternalLoadBalancerDeviceVO.java +++ b/server/src/com/cloud/network/ExternalLoadBalancerDeviceVO.java @@ -16,6 +16,7 @@ // under the License. package com.cloud.network; +import org.apache.cloudstack.api.InternalIdentity; import org.apache.cloudstack.network.ExternalNetworkDeviceManager; import java.util.UUID; @@ -35,7 +36,7 @@ import javax.persistence.Table; @Entity @Table(name="external_load_balancer_devices") -public class ExternalLoadBalancerDeviceVO { +public class ExternalLoadBalancerDeviceVO implements InternalIdentity { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) From 1bd47d48abc8567fb9ebf97d3d10dfd22598241a Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Sun, 23 Dec 2012 17:43:42 -0800 Subject: [PATCH 211/421] api: Annotate some nicira apis Signed-off-by: Rohit Yadav --- .../src/com/cloud/api/commands/AddNiciraNvpDeviceCmd.java | 6 +++--- .../src/com/cloud/api/commands/ListNiciraNvpDevicesCmd.java | 5 +++-- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/plugins/network-elements/nicira-nvp/src/com/cloud/api/commands/AddNiciraNvpDeviceCmd.java b/plugins/network-elements/nicira-nvp/src/com/cloud/api/commands/AddNiciraNvpDeviceCmd.java index 40b1327064d..3425a14ce41 100644 --- a/plugins/network-elements/nicira-nvp/src/com/cloud/api/commands/AddNiciraNvpDeviceCmd.java +++ b/plugins/network-elements/nicira-nvp/src/com/cloud/api/commands/AddNiciraNvpDeviceCmd.java @@ -16,12 +16,12 @@ // under the License. package com.cloud.api.commands; +import org.apache.cloudstack.api.response.PhysicalNetworkResponse; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.PlugService; @@ -48,8 +48,8 @@ public class AddNiciraNvpDeviceCmd extends BaseAsyncCmd { //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - @IdentityMapper(entityTableName="physical_network") - @Parameter(name=ApiConstants.PHYSICAL_NETWORK_ID, type=CommandType.LONG, required=true, description="the Physical Network ID") + @Parameter(name=ApiConstants.PHYSICAL_NETWORK_ID, type=CommandType.UUID, entityType = PhysicalNetworkResponse.class, + required=true, description="the Physical Network ID") private Long physicalNetworkId; @Parameter(name=ApiConstants.HOST_NAME, type=CommandType.STRING, required = true, description="Hostname of ip address of the Nicira NVP Controller.") diff --git a/plugins/network-elements/nicira-nvp/src/com/cloud/api/commands/ListNiciraNvpDevicesCmd.java b/plugins/network-elements/nicira-nvp/src/com/cloud/api/commands/ListNiciraNvpDevicesCmd.java index 56e6be5dcd5..8c2b2c73adf 100644 --- a/plugins/network-elements/nicira-nvp/src/com/cloud/api/commands/ListNiciraNvpDevicesCmd.java +++ b/plugins/network-elements/nicira-nvp/src/com/cloud/api/commands/ListNiciraNvpDevicesCmd.java @@ -19,6 +19,7 @@ package com.cloud.api.commands; import java.util.ArrayList; import java.util.List; +import org.apache.cloudstack.api.response.PhysicalNetworkResponse; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; @@ -50,8 +51,8 @@ public class ListNiciraNvpDevicesCmd extends BaseListCmd { //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - @IdentityMapper(entityTableName="physical_network") - @Parameter(name=ApiConstants.PHYSICAL_NETWORK_ID, type=CommandType.LONG, description="the Physical Network ID") + @Parameter(name=ApiConstants.PHYSICAL_NETWORK_ID, type=CommandType.UUID, entityType = PhysicalNetworkResponse.class, + description="the Physical Network ID") private Long physicalNetworkId; @IdentityMapper(entityTableName="external_nicira_nvp_devices") From 018b5215e01dc8d8ad31dbd9090f57c147f1cfc2 Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Sun, 23 Dec 2012 18:03:23 -0800 Subject: [PATCH 212/421] api: Annotate apis in various plugins Signed-off-by: Rohit Yadav --- .../com/cloud/api/commands/ListCiscoNexusVSMsCmd.java | 11 ++++++----- .../api/commands/AddExternalLoadBalancerCmd.java | 5 +++-- .../com/cloud/api/commands/AddF5LoadBalancerCmd.java | 6 +++--- .../api/commands/DeleteExternalLoadBalancerCmd.java | 5 +++-- .../api/commands/ListExternalLoadBalancersCmd.java | 4 ++-- .../cloud/api/commands/ListF5LoadBalancersCmd.java | 5 +++-- .../com/cloud/api/commands/ListSrxFirewallsCmd.java | 5 +++-- .../api/commands/AddNetscalerLoadBalancerCmd.java | 5 +++-- .../commands/ConfigureNetscalerLoadBalancerCmd.java | 5 +++-- .../api/commands/ListNetscalerLoadBalancersCmd.java | 5 +++-- .../src/com/cloud/network/NiciraNvpDeviceVO.java | 4 +++- 11 files changed, 35 insertions(+), 25 deletions(-) diff --git a/plugins/hypervisors/vmware/src/com/cloud/api/commands/ListCiscoNexusVSMsCmd.java b/plugins/hypervisors/vmware/src/com/cloud/api/commands/ListCiscoNexusVSMsCmd.java index f0ecd55e712..6c8c79b5305 100755 --- a/plugins/hypervisors/vmware/src/com/cloud/api/commands/ListCiscoNexusVSMsCmd.java +++ b/plugins/hypervisors/vmware/src/com/cloud/api/commands/ListCiscoNexusVSMsCmd.java @@ -17,10 +17,11 @@ package com.cloud.api.commands; +import org.apache.cloudstack.api.response.ClusterResponse; +import org.apache.cloudstack.api.response.ZoneResponse; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseListCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.PlugService; @@ -56,12 +57,12 @@ public class ListCiscoNexusVSMsCmd extends BaseListCmd { //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - @IdentityMapper(entityTableName="cluster") - @Parameter(name=ApiConstants.CLUSTER_ID, type=CommandType.LONG, required = false, description="Id of the CloudStack cluster in which the Cisco Nexus 1000v VSM appliance.") + @Parameter(name=ApiConstants.CLUSTER_ID, type=CommandType.UUID, entityType = ClusterResponse.class, + required = false, description="Id of the CloudStack cluster in which the Cisco Nexus 1000v VSM appliance.") private long clusterId; - @IdentityMapper(entityTableName="data_center") - @Parameter(name=ApiConstants.ZONE_ID, type=CommandType.LONG, required = false, description="Id of the CloudStack cluster in which the Cisco Nexus 1000v VSM appliance.") + @Parameter(name=ApiConstants.ZONE_ID, type=CommandType.UUID, entityType = ZoneResponse.class, + required = false, description="Id of the CloudStack cluster in which the Cisco Nexus 1000v VSM appliance.") private long zoneId; ///////////////////////////////////////////////////// diff --git a/plugins/network-elements/f5/src/com/cloud/api/commands/AddExternalLoadBalancerCmd.java b/plugins/network-elements/f5/src/com/cloud/api/commands/AddExternalLoadBalancerCmd.java index 8e404b02fa2..635c5e871bc 100644 --- a/plugins/network-elements/f5/src/com/cloud/api/commands/AddExternalLoadBalancerCmd.java +++ b/plugins/network-elements/f5/src/com/cloud/api/commands/AddExternalLoadBalancerCmd.java @@ -17,6 +17,7 @@ package com.cloud.api.commands; +import org.apache.cloudstack.api.response.ZoneResponse; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; @@ -43,8 +44,8 @@ public class AddExternalLoadBalancerCmd extends BaseCmd { //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - @IdentityMapper(entityTableName="data_center") - @Parameter(name=ApiConstants.ZONE_ID, type=CommandType.LONG, required = true, description="Zone in which to add the external load balancer appliance.") + @Parameter(name=ApiConstants.ZONE_ID, type=CommandType.UUID, entityType = ZoneResponse.class, + required = true, description="Zone in which to add the external load balancer appliance.") private Long zoneId; @Parameter(name=ApiConstants.URL, type=CommandType.STRING, required = true, description="URL of the external load balancer appliance.") diff --git a/plugins/network-elements/f5/src/com/cloud/api/commands/AddF5LoadBalancerCmd.java b/plugins/network-elements/f5/src/com/cloud/api/commands/AddF5LoadBalancerCmd.java index a2f7b6b6285..1069e4e29c5 100644 --- a/plugins/network-elements/f5/src/com/cloud/api/commands/AddF5LoadBalancerCmd.java +++ b/plugins/network-elements/f5/src/com/cloud/api/commands/AddF5LoadBalancerCmd.java @@ -17,12 +17,12 @@ package com.cloud.api.commands; +import org.apache.cloudstack.api.response.PhysicalNetworkResponse; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.PlugService; @@ -50,8 +50,8 @@ public class AddF5LoadBalancerCmd extends BaseAsyncCmd { //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - @IdentityMapper(entityTableName="physical_network") - @Parameter(name=ApiConstants.PHYSICAL_NETWORK_ID, type=CommandType.LONG, required=true, description="the Physical Network ID") + @Parameter(name=ApiConstants.PHYSICAL_NETWORK_ID, type=CommandType.UUID, entityType = PhysicalNetworkResponse.class, + required=true, description="the Physical Network ID") private Long physicalNetworkId; @Parameter(name=ApiConstants.URL, type=CommandType.STRING, required = true, description="URL of the F5 load balancer appliance.") diff --git a/plugins/network-elements/f5/src/com/cloud/api/commands/DeleteExternalLoadBalancerCmd.java b/plugins/network-elements/f5/src/com/cloud/api/commands/DeleteExternalLoadBalancerCmd.java index 1c9c146a982..ccb27db2bf1 100644 --- a/plugins/network-elements/f5/src/com/cloud/api/commands/DeleteExternalLoadBalancerCmd.java +++ b/plugins/network-elements/f5/src/com/cloud/api/commands/DeleteExternalLoadBalancerCmd.java @@ -17,6 +17,7 @@ package com.cloud.api.commands; +import org.apache.cloudstack.api.response.HostResponse; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; @@ -41,8 +42,8 @@ public class DeleteExternalLoadBalancerCmd extends BaseCmd { //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - @IdentityMapper(entityTableName="host") - @Parameter(name=ApiConstants.ID, type=CommandType.LONG, required = true, description="Id of the external loadbalancer appliance.") + @Parameter(name=ApiConstants.ID, type=CommandType.UUID, entityType = HostResponse.class, + required = true, description="Id of the external loadbalancer appliance.") private Long id; /////////////////////////////////////////////////// diff --git a/plugins/network-elements/f5/src/com/cloud/api/commands/ListExternalLoadBalancersCmd.java b/plugins/network-elements/f5/src/com/cloud/api/commands/ListExternalLoadBalancersCmd.java index c6c74ef42f6..da46e9cddbf 100644 --- a/plugins/network-elements/f5/src/com/cloud/api/commands/ListExternalLoadBalancersCmd.java +++ b/plugins/network-elements/f5/src/com/cloud/api/commands/ListExternalLoadBalancersCmd.java @@ -44,8 +44,8 @@ public class ListExternalLoadBalancersCmd extends BaseListCmd { //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - @IdentityMapper(entityTableName="data_center") - @Parameter(name=ApiConstants.ZONE_ID, type=CommandType.LONG, description="zone Id") + @Parameter(name=ApiConstants.ZONE_ID, type=CommandType.UUID, entityType = ZoneRespones.class, + description="zone Id") private long zoneId; ///////////////////////////////////////////////////// diff --git a/plugins/network-elements/f5/src/com/cloud/api/commands/ListF5LoadBalancersCmd.java b/plugins/network-elements/f5/src/com/cloud/api/commands/ListF5LoadBalancersCmd.java index 8df7177ff9b..b9eb3039bb8 100644 --- a/plugins/network-elements/f5/src/com/cloud/api/commands/ListF5LoadBalancersCmd.java +++ b/plugins/network-elements/f5/src/com/cloud/api/commands/ListF5LoadBalancersCmd.java @@ -20,6 +20,7 @@ package com.cloud.api.commands; import java.util.ArrayList; import java.util.List; +import org.apache.cloudstack.api.response.PhysicalNetworkResponse; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; @@ -51,8 +52,8 @@ public class ListF5LoadBalancersCmd extends BaseListCmd { //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - @IdentityMapper(entityTableName="physical_network") - @Parameter(name=ApiConstants.PHYSICAL_NETWORK_ID, type=CommandType.LONG, description="the Physical Network ID") + @Parameter(name=ApiConstants.PHYSICAL_NETWORK_ID, type=CommandType.UUID, entityType = PhysicalNetworkResponse.class, + description="the Physical Network ID") private Long physicalNetworkId; @IdentityMapper(entityTableName="external_load_balancer_devices") diff --git a/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/ListSrxFirewallsCmd.java b/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/ListSrxFirewallsCmd.java index 0ba8a9503ff..fdf117151fe 100644 --- a/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/ListSrxFirewallsCmd.java +++ b/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/ListSrxFirewallsCmd.java @@ -19,6 +19,7 @@ package com.cloud.api.commands; import java.util.ArrayList; import java.util.List; +import org.apache.cloudstack.api.response.PhysicalNetworkResponse; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; @@ -51,8 +52,8 @@ public class ListSrxFirewallsCmd extends BaseListCmd { //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - @IdentityMapper(entityTableName="physical_network") - @Parameter(name=ApiConstants.PHYSICAL_NETWORK_ID, type=CommandType.LONG, description="the Physical Network ID") + @Parameter(name=ApiConstants.PHYSICAL_NETWORK_ID, type=CommandType.UUID, entityType = PhysicalNetworkResponse.class, + description="the Physical Network ID") private Long physicalNetworkId; @IdentityMapper(entityTableName="external_firewall_devices") diff --git a/plugins/network-elements/netscaler/src/com/cloud/api/commands/AddNetscalerLoadBalancerCmd.java b/plugins/network-elements/netscaler/src/com/cloud/api/commands/AddNetscalerLoadBalancerCmd.java index 64214423152..9785ec927be 100644 --- a/plugins/network-elements/netscaler/src/com/cloud/api/commands/AddNetscalerLoadBalancerCmd.java +++ b/plugins/network-elements/netscaler/src/com/cloud/api/commands/AddNetscalerLoadBalancerCmd.java @@ -15,6 +15,7 @@ package com.cloud.api.commands; +import org.apache.cloudstack.api.response.PhysicalNetworkResponse; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseAsyncCmd; @@ -47,8 +48,8 @@ public class AddNetscalerLoadBalancerCmd extends BaseAsyncCmd { //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - @IdentityMapper(entityTableName="physical_network") - @Parameter(name=ApiConstants.PHYSICAL_NETWORK_ID, type=CommandType.LONG, required=true, description="the Physical Network ID") + @Parameter(name=ApiConstants.PHYSICAL_NETWORK_ID, type=CommandType.UUID, entityType = PhysicalNetworkResponse.class, + required=true, description="the Physical Network ID") private Long physicalNetworkId; @Parameter(name=ApiConstants.URL, type=CommandType.STRING, required = true, description="URL of the netscaler load balancer appliance.") diff --git a/plugins/network-elements/netscaler/src/com/cloud/api/commands/ConfigureNetscalerLoadBalancerCmd.java b/plugins/network-elements/netscaler/src/com/cloud/api/commands/ConfigureNetscalerLoadBalancerCmd.java index 28f052484e6..60d3fcef971 100644 --- a/plugins/network-elements/netscaler/src/com/cloud/api/commands/ConfigureNetscalerLoadBalancerCmd.java +++ b/plugins/network-elements/netscaler/src/com/cloud/api/commands/ConfigureNetscalerLoadBalancerCmd.java @@ -16,6 +16,7 @@ package com.cloud.api.commands; import java.util.List; +import org.apache.cloudstack.api.response.PodResponse; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; @@ -62,8 +63,8 @@ public class ConfigureNetscalerLoadBalancerCmd extends BaseAsyncCmd { @Parameter (name=ApiConstants.INLINE, type=CommandType.BOOLEAN, required=false, description="true if netscaler load balancer is intended to be used in in-line with firewall, false if netscaler load balancer will side-by-side with firewall") private Boolean inline; - @IdentityMapper(entityTableName="host_pod_ref") - @Parameter(name=ApiConstants.POD_IDS, type=CommandType.LIST, required=false, description="Used when NetScaler device is provider of EIP service." + + @Parameter(name=ApiConstants.POD_IDS, type=CommandType.LIST, collectionType = CommandType.UUID, entityType = PodResponse.class, + required=false, description="Used when NetScaler device is provider of EIP service." + " This parameter represents the list of pod's, for which there exists a policy based route on datacenter L3 router to " + "route pod's subnet IP to a NetScaler device.") private List podIds; diff --git a/plugins/network-elements/netscaler/src/com/cloud/api/commands/ListNetscalerLoadBalancersCmd.java b/plugins/network-elements/netscaler/src/com/cloud/api/commands/ListNetscalerLoadBalancersCmd.java index fbd49e146c8..d17d8b67650 100644 --- a/plugins/network-elements/netscaler/src/com/cloud/api/commands/ListNetscalerLoadBalancersCmd.java +++ b/plugins/network-elements/netscaler/src/com/cloud/api/commands/ListNetscalerLoadBalancersCmd.java @@ -17,6 +17,7 @@ package com.cloud.api.commands; import java.util.ArrayList; import java.util.List; +import org.apache.cloudstack.api.response.PhysicalNetworkResponse; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; @@ -49,8 +50,8 @@ public class ListNetscalerLoadBalancersCmd extends BaseListCmd { //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - @IdentityMapper(entityTableName="physical_network") - @Parameter(name=ApiConstants.PHYSICAL_NETWORK_ID, type=CommandType.LONG, description="the Physical Network ID") + @Parameter(name=ApiConstants.PHYSICAL_NETWORK_ID, type=CommandType.UUID, entityType = PhysicalNetworkResponse.class, + description="the Physical Network ID") private Long physicalNetworkId; @IdentityMapper(entityTableName="external_load_balancer_devices") diff --git a/plugins/network-elements/nicira-nvp/src/com/cloud/network/NiciraNvpDeviceVO.java b/plugins/network-elements/nicira-nvp/src/com/cloud/network/NiciraNvpDeviceVO.java index af6620c722d..a1097b9ef1f 100644 --- a/plugins/network-elements/nicira-nvp/src/com/cloud/network/NiciraNvpDeviceVO.java +++ b/plugins/network-elements/nicira-nvp/src/com/cloud/network/NiciraNvpDeviceVO.java @@ -16,6 +16,8 @@ // under the License. package com.cloud.network; +import org.apache.cloudstack.api.InternalIdentity; + import java.util.UUID; import javax.persistence.Column; @@ -27,7 +29,7 @@ import javax.persistence.Table; @Entity @Table(name="external_nicira_nvp_devices") -public class NiciraNvpDeviceVO { +public class NiciraNvpDeviceVO implements InternalIdentity { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) From 9d3ab8ded77f7dbba249b6cd6ef0edad7d80cabd Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Sun, 23 Dec 2012 18:04:32 -0800 Subject: [PATCH 213/421] server: Get rid of db helpers that work with IdentityMapper Signed-off-by: Rohit Yadav --- server/src/com/cloud/uuididentity/IdentityServiceImpl.java | 5 ----- server/src/com/cloud/uuididentity/dao/IdentityDao.java | 2 -- server/src/com/cloud/uuididentity/dao/IdentityDaoImpl.java | 7 ------- 3 files changed, 14 deletions(-) diff --git a/server/src/com/cloud/uuididentity/IdentityServiceImpl.java b/server/src/com/cloud/uuididentity/IdentityServiceImpl.java index d2427a146cc..3cd2bc93290 100644 --- a/server/src/com/cloud/uuididentity/IdentityServiceImpl.java +++ b/server/src/com/cloud/uuididentity/IdentityServiceImpl.java @@ -21,7 +21,6 @@ import java.util.Map; import javax.ejb.Local; import javax.naming.ConfigurationException; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.IdentityService; import com.cloud.utils.component.Inject; import com.cloud.utils.component.Manager; @@ -33,10 +32,6 @@ public class IdentityServiceImpl implements Manager, IdentityService { @Inject private IdentityDao _identityDao; - public Long getIdentityId(IdentityMapper mapper, String identityString) { - return _identityDao.getIdentityId(mapper, identityString); - } - public Long getIdentityId(String tableName, String identityString) { return _identityDao.getIdentityId(tableName, identityString); } diff --git a/server/src/com/cloud/uuididentity/dao/IdentityDao.java b/server/src/com/cloud/uuididentity/dao/IdentityDao.java index 9429d1e47d0..e9149a0fe63 100644 --- a/server/src/com/cloud/uuididentity/dao/IdentityDao.java +++ b/server/src/com/cloud/uuididentity/dao/IdentityDao.java @@ -17,13 +17,11 @@ package com.cloud.uuididentity.dao; -import org.apache.cloudstack.api.IdentityMapper; import com.cloud.server.ResourceTag.TaggedResourceType; import com.cloud.utils.Pair; import com.cloud.utils.db.GenericDao; public interface IdentityDao extends GenericDao { - Long getIdentityId(IdentityMapper mapper, String identityString); Long getIdentityId(String tableName, String identityString); String getIdentityUuid(String tableName, String identityString); void initializeDefaultUuid(String tableName); diff --git a/server/src/com/cloud/uuididentity/dao/IdentityDaoImpl.java b/server/src/com/cloud/uuididentity/dao/IdentityDaoImpl.java index b50cc52ddf3..49d2fa77d08 100644 --- a/server/src/com/cloud/uuididentity/dao/IdentityDaoImpl.java +++ b/server/src/com/cloud/uuididentity/dao/IdentityDaoImpl.java @@ -27,7 +27,6 @@ import javax.ejb.Local; import org.apache.log4j.Logger; -import org.apache.cloudstack.api.IdentityMapper; import com.cloud.exception.InvalidParameterValueException; import com.cloud.server.ResourceTag.TaggedResourceType; import com.cloud.utils.Pair; @@ -42,12 +41,6 @@ public class IdentityDaoImpl extends GenericDaoBase implements public IdentityDaoImpl() { } - @DB - public Long getIdentityId(IdentityMapper mapper, String identityString) { - assert(mapper.entityTableName() != null); - return getIdentityId(mapper.entityTableName(), identityString); - } - @DB public Long getIdentityId(String tableName, String identityString) { assert(tableName != null); From 042a8e768103b7e110b21ed17140833d71d86eda Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Sun, 23 Dec 2012 18:05:53 -0800 Subject: [PATCH 214/421] api: Get rid of method definition in interface, that uses IdentityMapper for getting entity Signed-off-by: Rohit Yadav --- api/src/org/apache/cloudstack/api/IdentityService.java | 3 --- 1 file changed, 3 deletions(-) diff --git a/api/src/org/apache/cloudstack/api/IdentityService.java b/api/src/org/apache/cloudstack/api/IdentityService.java index 51608843e9f..a2ccec2dae7 100644 --- a/api/src/org/apache/cloudstack/api/IdentityService.java +++ b/api/src/org/apache/cloudstack/api/IdentityService.java @@ -17,9 +17,6 @@ package org.apache.cloudstack.api; public interface IdentityService { - Long getIdentityId(IdentityMapper mapper, String identityString); - Long getIdentityId(String tableName, String identityString); - String getIdentityUuid(String tableName, String identityString); } From beb2fccf1c8450d062bf1399416b185d9e77fe99 Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Sun, 23 Dec 2012 18:06:36 -0800 Subject: [PATCH 215/421] api: Finally get rid of IdentityMapper annotation processing in ApiDispatcher Signed-off-by: Rohit Yadav --- server/src/com/cloud/api/ApiDispatcher.java | 20 ++++---------------- 1 file changed, 4 insertions(+), 16 deletions(-) diff --git a/server/src/com/cloud/api/ApiDispatcher.java b/server/src/com/cloud/api/ApiDispatcher.java index 01b8363a23a..a9d8af3add6 100755 --- a/server/src/com/cloud/api/ApiDispatcher.java +++ b/server/src/com/cloud/api/ApiDispatcher.java @@ -406,8 +406,6 @@ public class ApiDispatcher { if ((parameterAnnotation == null) || !parameterAnnotation.expose()) { continue; } - // APITODO Will remove this - IdentityMapper identityMapper = field.getAnnotation(IdentityMapper.class); //ACL checkAccess = field.getAnnotation(ACL.class); @@ -423,7 +421,7 @@ public class ApiDispatcher { // marshall the parameter into the correct type and set the field value try { - setFieldValue(field, cmd, paramObj, parameterAnnotation, identityMapper); + setFieldValue(field, cmd, paramObj, parameterAnnotation); } catch (IllegalArgumentException argEx) { if (s_logger.isDebugEnabled()) { s_logger.debug("Unable to execute API command " + cmd.getCommandName() + " due to invalid value " + paramObj + " for parameter " + parameterAnnotation.name()); @@ -569,7 +567,7 @@ public class ApiDispatcher { } @SuppressWarnings({ "unchecked", "rawtypes" }) - private static void setFieldValue(Field field, BaseCmd cmdObj, Object paramObj, Parameter annotation, IdentityMapper identityMapper) throws IllegalArgumentException, ParseException { + private static void setFieldValue(Field field, BaseCmd cmdObj, Object paramObj, Parameter annotation) throws IllegalArgumentException, ParseException { try { field.setAccessible(true); CommandType fieldType = annotation.type(); @@ -646,13 +644,7 @@ public class ApiDispatcher { listParam.add(internalId); break; case LONG: { - Long val = null; - if (identityMapper != null) - val = s_instance._identityDao.getIdentityId(identityMapper, token); - else - val = Long.valueOf(token); - - listParam.add(val); + listParam.add(Long.valueOf(token)); } break; case SHORT: @@ -676,11 +668,7 @@ public class ApiDispatcher { field.set(cmdObj, internalId); break; case LONG: - // APITODO: Remove identityMapper, simply convert the over the wire param to Long - if (identityMapper != null) - field.set(cmdObj, s_instance._identityDao.getIdentityId(identityMapper, paramObj.toString())); - else - field.set(cmdObj, Long.valueOf(paramObj.toString())); + field.set(cmdObj, Long.valueOf(paramObj.toString())); break; case SHORT: field.set(cmdObj, Short.valueOf(paramObj.toString())); From 21c1623a0321adb1082ec4677252cdd14f5f96ac Mon Sep 17 00:00:00 2001 From: Min Chen Date: Tue, 25 Dec 2012 17:08:50 -0800 Subject: [PATCH 216/421] Create DB view for Volume to speed up ListVolumesCmd. Signed-off-by: Min Chen --- api/src/com/cloud/storage/StorageService.java | 1 - .../command/user/volume/ListVolumesCmd.java | 12 +- .../api/response/VolumeResponse.java | 16 +- .../apache/cloudstack/query/QueryService.java | 7 +- server/src/com/cloud/api/ApiDBUtils.java | 20 + .../src/com/cloud/api/ApiResponseHelper.java | 137 +-- server/src/com/cloud/api/ApiServer.java | 4 +- .../com/cloud/api/query/QueryManagerImpl.java | 158 ++- .../cloud/api/query/ViewResponseHelper.java | 19 + .../cloud/api/query/dao/VolumeJoinDao.java | 37 + .../api/query/dao/VolumeJoinDaoImpl.java | 230 ++++ .../com/cloud/api/query/vo/VolumeJoinVO.java | 1032 +++++++++++++++++ .../DefaultComponentLibrary.java | 3 + .../com/cloud/storage/StorageManagerImpl.java | 117 -- server/test/com/cloud/api/ListPerfTest.java | 14 + setup/db/create-schema.sql | 82 ++ setup/db/db/schema-40to410.sql | 85 ++ 17 files changed, 1703 insertions(+), 271 deletions(-) create mode 100644 server/src/com/cloud/api/query/dao/VolumeJoinDao.java create mode 100644 server/src/com/cloud/api/query/dao/VolumeJoinDaoImpl.java create mode 100644 server/src/com/cloud/api/query/vo/VolumeJoinVO.java diff --git a/api/src/com/cloud/storage/StorageService.java b/api/src/com/cloud/storage/StorageService.java index 80f64d875d0..1967cba0325 100644 --- a/api/src/com/cloud/storage/StorageService.java +++ b/api/src/com/cloud/storage/StorageService.java @@ -115,7 +115,6 @@ public interface StorageService{ Volume migrateVolume(Long volumeId, Long storagePoolId) throws ConcurrentOperationException; - Pair, Integer> searchForVolumes(ListVolumesCmd cmd); /** * Uploads the volume to secondary storage diff --git a/api/src/org/apache/cloudstack/api/command/user/volume/ListVolumesCmd.java b/api/src/org/apache/cloudstack/api/command/user/volume/ListVolumesCmd.java index c47e73ddd15..bbee6775764 100644 --- a/api/src/org/apache/cloudstack/api/command/user/volume/ListVolumesCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/volume/ListVolumesCmd.java @@ -116,17 +116,7 @@ public class ListVolumesCmd extends BaseListTaggedResourcesCmd { @Override public void execute(){ - Pair, Integer> volumes = _storageService.searchForVolumes(this); - - ListResponse response = new ListResponse(); - List volResponses = new ArrayList(); - for (Volume volume : volumes.first()) { - VolumeResponse volResponse = _responseGenerator.createVolumeResponse(volume); - volResponse.setObjectName("volume"); - volResponses.add(volResponse); - } - - response.setResponses(volResponses, volumes.second()); + ListResponse response = _queryService.searchForVolumes(this); response.setResponseName(getCommandName()); this.setResponseObject(response); } diff --git a/api/src/org/apache/cloudstack/api/response/VolumeResponse.java b/api/src/org/apache/cloudstack/api/response/VolumeResponse.java index 1b1ff146983..bc217680626 100644 --- a/api/src/org/apache/cloudstack/api/response/VolumeResponse.java +++ b/api/src/org/apache/cloudstack/api/response/VolumeResponse.java @@ -17,7 +17,9 @@ package org.apache.cloudstack.api.response; import java.util.Date; +import java.util.HashSet; import java.util.List; +import java.util.Set; import com.cloud.storage.Volume; import org.apache.cloudstack.api.ApiConstants; @@ -28,7 +30,7 @@ import org.apache.cloudstack.api.Entity; @Entity(value=Volume.class) @SuppressWarnings("unused") -public class VolumeResponse extends BaseResponse implements ControlledEntityResponse{ +public class VolumeResponse extends BaseResponse implements ControlledViewEntityResponse{ @SerializedName(ApiConstants.ID) @Param(description = "ID of the disk volume") private String id; @@ -156,9 +158,11 @@ public class VolumeResponse extends BaseResponse implements ControlledEntityResp private String status; @SerializedName(ApiConstants.TAGS) @Param(description="the list of resource tags associated with volume", responseObject = ResourceTagResponse.class) - private List tags; - + private Set tags; + public VolumeResponse(){ + tags = new HashSet(); + } @Override public String getObjectId() { @@ -304,7 +308,11 @@ public class VolumeResponse extends BaseResponse implements ControlledEntityResp this.projectName = projectName; } - public void setTags(List tags) { + public void setTags(Set tags) { this.tags = tags; } + + public void addTag(ResourceTagResponse tag){ + this.tags.add(tag); + } } diff --git a/api/src/org/apache/cloudstack/query/QueryService.java b/api/src/org/apache/cloudstack/query/QueryService.java index 1847edef4eb..ef3c52f20c9 100644 --- a/api/src/org/apache/cloudstack/query/QueryService.java +++ b/api/src/org/apache/cloudstack/query/QueryService.java @@ -27,6 +27,7 @@ import org.apache.cloudstack.api.command.user.securitygroup.ListSecurityGroupsCm import org.apache.cloudstack.api.command.user.tag.ListTagsCmd; import org.apache.cloudstack.api.command.user.vm.ListVMsCmd; import org.apache.cloudstack.api.command.user.vmgroup.ListVMGroupsCmd; +import org.apache.cloudstack.api.command.user.volume.ListVolumesCmd; import org.apache.cloudstack.api.response.DomainRouterResponse; import org.apache.cloudstack.api.response.EventResponse; import org.apache.cloudstack.api.response.HostResponse; @@ -39,11 +40,11 @@ import org.apache.cloudstack.api.response.ResourceTagResponse; import org.apache.cloudstack.api.response.SecurityGroupResponse; import org.apache.cloudstack.api.response.UserResponse; import org.apache.cloudstack.api.response.UserVmResponse; +import org.apache.cloudstack.api.response.VolumeResponse; + -import com.cloud.async.AsyncJob; import com.cloud.exception.PermissionDeniedException; -import com.cloud.storage.Snapshot; /** * Service used for list api query. @@ -73,4 +74,6 @@ public interface QueryService { public ListResponse listProjectAccounts(ListProjectAccountsCmd cmd); public ListResponse searchForServers(ListHostsCmd cmd); + + public ListResponse searchForVolumes(ListVolumesCmd cmd); } diff --git a/server/src/com/cloud/api/ApiDBUtils.java b/server/src/com/cloud/api/ApiDBUtils.java index 5fa9ef7d031..74658730951 100755 --- a/server/src/com/cloud/api/ApiDBUtils.java +++ b/server/src/com/cloud/api/ApiDBUtils.java @@ -35,6 +35,7 @@ import org.apache.cloudstack.api.response.ResourceTagResponse; import org.apache.cloudstack.api.response.SecurityGroupResponse; import org.apache.cloudstack.api.response.UserResponse; import org.apache.cloudstack.api.response.UserVmResponse; +import org.apache.cloudstack.api.response.VolumeResponse; import com.cloud.api.query.dao.DomainRouterJoinDao; import com.cloud.api.query.dao.HostJoinDao; @@ -45,6 +46,7 @@ import com.cloud.api.query.dao.ProjectJoinDao; import com.cloud.api.query.dao.ResourceTagJoinDao; import com.cloud.api.query.dao.SecurityGroupJoinDao; import com.cloud.api.query.dao.UserVmJoinDao; +import com.cloud.api.query.dao.VolumeJoinDao; import com.cloud.api.query.vo.DomainRouterJoinVO; import com.cloud.api.query.vo.EventJoinVO; import com.cloud.api.query.vo.HostJoinVO; @@ -56,6 +58,7 @@ import com.cloud.api.query.vo.ResourceTagJoinVO; import com.cloud.api.query.vo.SecurityGroupJoinVO; import com.cloud.api.query.vo.UserAccountJoinVO; import com.cloud.api.query.vo.UserVmJoinVO; +import com.cloud.api.query.vo.VolumeJoinVO; import com.cloud.async.AsyncJob; import com.cloud.async.AsyncJobManager; import com.cloud.async.AsyncJobVO; @@ -180,6 +183,7 @@ import com.cloud.storage.VMTemplateHostVO; import com.cloud.storage.VMTemplateS3VO; import com.cloud.storage.VMTemplateSwiftVO; import com.cloud.storage.VMTemplateVO; +import com.cloud.storage.Volume; import com.cloud.storage.Volume.Type; import com.cloud.storage.VolumeHostVO; import com.cloud.storage.VolumeVO; @@ -313,6 +317,7 @@ public class ApiDBUtils { private static ProjectAccountJoinDao _projectAccountJoinDao; private static ProjectInvitationJoinDao _projectInvitationJoinDao; private static HostJoinDao _hostJoinDao; + private static VolumeJoinDao _volJoinDao; private static PhysicalNetworkTrafficTypeDao _physicalNetworkTrafficTypeDao; private static PhysicalNetworkServiceProviderDao _physicalNetworkServiceProviderDao; @@ -400,6 +405,7 @@ public class ApiDBUtils { _projectAccountJoinDao = locator.getDao(ProjectAccountJoinDao.class); _projectInvitationJoinDao = locator.getDao(ProjectInvitationJoinDao.class); _hostJoinDao = locator.getDao(HostJoinDao.class); + _volJoinDao = locator.getDao(VolumeJoinDao.class); _physicalNetworkTrafficTypeDao = locator.getDao(PhysicalNetworkTrafficTypeDao.class); _physicalNetworkServiceProviderDao = locator.getDao(PhysicalNetworkServiceProviderDao.class); @@ -1324,4 +1330,18 @@ public class ApiDBUtils { public static List newHostView(Host vr){ return _hostJoinDao.newHostView(vr); } + + public static VolumeResponse newVolumeResponse(VolumeJoinVO vr) { + return _volJoinDao.newVolumeResponse(vr); + } + + + public static VolumeResponse fillVolumeDetails(VolumeResponse vrData, VolumeJoinVO vr){ + return _volJoinDao.setVolumeResponse(vrData, vr); + } + + public static List newVolumeView(Volume vr){ + return _volJoinDao.newVolumeView(vr); + } + } diff --git a/server/src/com/cloud/api/ApiResponseHelper.java b/server/src/com/cloud/api/ApiResponseHelper.java index b2bfee89098..22e89ddaa02 100755 --- a/server/src/com/cloud/api/ApiResponseHelper.java +++ b/server/src/com/cloud/api/ApiResponseHelper.java @@ -57,6 +57,7 @@ import com.cloud.api.query.vo.ResourceTagJoinVO; import com.cloud.api.query.vo.SecurityGroupJoinVO; import com.cloud.api.query.vo.UserAccountJoinVO; import com.cloud.api.query.vo.UserVmJoinVO; +import com.cloud.api.query.vo.VolumeJoinVO; import com.cloud.api.response.ApiResponseSerializer; import org.apache.cloudstack.api.response.AsyncJobResponse; import org.apache.cloudstack.api.response.AutoScalePolicyResponse; @@ -1019,138 +1020,10 @@ public class ApiResponseHelper implements ResponseGenerator { @Override public VolumeResponse createVolumeResponse(Volume volume) { - VolumeResponse volResponse = new VolumeResponse(); - volResponse.setId(volume.getUuid()); - - if (volume.getName() != null) { - volResponse.setName(volume.getName()); - } else { - volResponse.setName(""); - } - - DataCenter zone = ApiDBUtils.findZoneById(volume.getDataCenterId()); - if (zone != null) { - volResponse.setZoneId(zone.getUuid()); - volResponse.setZoneName(zone.getName()); - } - - volResponse.setVolumeType(volume.getVolumeType().toString()); - volResponse.setDeviceId(volume.getDeviceId()); - - Long instanceId = volume.getInstanceId(); - if (instanceId != null && volume.getState() != Volume.State.Destroy) { - VMInstanceVO vm = ApiDBUtils.findVMInstanceById(instanceId); - if (vm != null) { - volResponse.setVirtualMachineId(vm.getUuid()); - volResponse.setVirtualMachineName(vm.getHostName()); - volResponse.setVirtualMachineState(vm.getState().toString()); - UserVm userVm = ApiDBUtils.findUserVmById(vm.getId()); - if (userVm != null) { - if (userVm.getDisplayName() != null) { - volResponse.setVirtualMachineDisplayName(userVm.getDisplayName()); - } - } else { - s_logger.error("User Vm with Id: " + instanceId + " does not exist for volume " + volume.getId()); - } - } else { - s_logger.error("Vm with Id: " + instanceId + " does not exist for volume " + volume.getId()); - } - } - - // Show the virtual size of the volume - volResponse.setSize(volume.getSize()); - - volResponse.setCreated(volume.getCreated()); - volResponse.setState(volume.getState().toString()); - if(volume.getState() == Volume.State.UploadOp){ - com.cloud.storage.VolumeHostVO volumeHostRef = ApiDBUtils.findVolumeHostRef(volume.getId(), volume.getDataCenterId()); - volResponse.setSize(volumeHostRef.getSize()); - volResponse.setCreated(volumeHostRef.getCreated()); - Account caller = UserContext.current().getCaller(); - if (caller.getType() == Account.ACCOUNT_TYPE_ADMIN || caller.getType() == Account.ACCOUNT_TYPE_RESOURCE_DOMAIN_ADMIN) - volResponse.setHypervisor(ApiDBUtils.getHypervisorTypeFromFormat(volumeHostRef.getFormat()).toString()); - if (volumeHostRef.getDownloadState() != Status.DOWNLOADED) { - String volumeStatus = "Processing"; - if (volumeHostRef.getDownloadState() == VMTemplateHostVO.Status.DOWNLOAD_IN_PROGRESS) { - if (volumeHostRef.getDownloadPercent() == 100) { - volumeStatus = "Checking Volume"; - } else { - volumeStatus = volumeHostRef.getDownloadPercent() + "% Uploaded"; - } - volResponse.setState("Uploading"); - } else { - volumeStatus = volumeHostRef.getErrorString(); - if(volumeHostRef.getDownloadState() == VMTemplateHostVO.Status.NOT_DOWNLOADED){ - volResponse.setState("UploadNotStarted"); - }else { - volResponse.setState("UploadError"); - } - } - volResponse.setStatus(volumeStatus); - } else if (volumeHostRef.getDownloadState() == VMTemplateHostVO.Status.DOWNLOADED) { - volResponse.setStatus("Upload Complete"); - volResponse.setState("Uploaded"); - } else { - volResponse.setStatus("Successfully Installed"); - } - } - - populateOwner(volResponse, volume); - - DiskOfferingVO diskOffering = ApiDBUtils.findDiskOfferingById(volume.getDiskOfferingId()); - if (diskOffering != null) { - if (volume.getVolumeType().equals(Volume.Type.ROOT)) { - volResponse.setServiceOfferingId(diskOffering.getUuid()); - } else { - volResponse.setDiskOfferingId(diskOffering.getUuid()); - } - - if (volume.getVolumeType().equals(Volume.Type.ROOT)) { - volResponse.setServiceOfferingName(diskOffering.getName()); - volResponse.setServiceOfferingDisplayText(diskOffering.getDisplayText()); - } else { - volResponse.setDiskOfferingName(diskOffering.getName()); - volResponse.setDiskOfferingDisplayText(diskOffering.getDisplayText()); - } - volResponse.setStorageType(diskOffering.getUseLocalStorage() ? ServiceOffering.StorageType.local.toString() - : ServiceOffering.StorageType.shared.toString()); - } - Long poolId = volume.getPoolId(); - String poolName = (poolId == null) ? "none" : ApiDBUtils.findStoragePoolById(poolId).getName(); - volResponse.setStoragePoolName(poolName); - // volResponse.setSourceId(volume.getSourceId()); - // if (volume.getSourceType() != null) { - // volResponse.setSourceType(volume.getSourceType().toString()); - // } - - // return hypervisor for ROOT and Resource domain only - Account caller = UserContext.current().getCaller(); - if ((caller.getType() == Account.ACCOUNT_TYPE_ADMIN || caller.getType() == Account.ACCOUNT_TYPE_RESOURCE_DOMAIN_ADMIN) && volume.getState() != Volume.State.UploadOp) { - volResponse.setHypervisor(ApiDBUtils.getVolumeHyperType(volume.getId()).toString()); - } - - volResponse.setAttached(volume.getAttached()); - volResponse.setDestroyed(volume.getState() == Volume.State.Destroy); - boolean isExtractable = true; - if (volume.getVolumeType() != Volume.Type.DATADISK) { // Datadisk dont have any template dependence. - VMTemplateVO template = ApiDBUtils.findTemplateById(volume.getTemplateId()); - if (template != null) { // For ISO based volumes template = null and we allow extraction of all ISO based volumes - isExtractable = template.isExtractable() && template.getTemplateType() != Storage.TemplateType.SYSTEM; - } - } - - //set tag information - List tags = ApiDBUtils.listByResourceTypeAndId(TaggedResourceType.Volume, volume.getId()); - List tagResponses = new ArrayList(); - for (ResourceTag tag : tags) { - ResourceTagResponse tagResponse = createResourceTagResponse(tag, true); - tagResponses.add(tagResponse); - } - volResponse.setTags(tagResponses); - - volResponse.setExtractable(isExtractable); - volResponse.setObjectName("volume"); - return volResponse; + List viewVrs = ApiDBUtils.newVolumeView(volume); + List listVrs = ViewResponseHelper.createVolumeResponse(viewVrs.toArray(new VolumeJoinVO[viewVrs.size()])); + assert listVrs != null && listVrs.size() == 1 : "There should be one volume returned"; + return listVrs.get(0); } @Override diff --git a/server/src/com/cloud/api/ApiServer.java b/server/src/com/cloud/api/ApiServer.java index 1551e44fe25..3f027ed1465 100755 --- a/server/src/com/cloud/api/ApiServer.java +++ b/server/src/com/cloud/api/ApiServer.java @@ -55,6 +55,7 @@ import org.apache.cloudstack.api.command.user.account.ListProjectAccountsCmd; import org.apache.cloudstack.api.command.user.event.ListEventsCmd; import org.apache.cloudstack.api.command.user.vm.ListVMsCmd; import org.apache.cloudstack.api.command.user.vmgroup.ListVMGroupsCmd; +import org.apache.cloudstack.api.command.user.volume.ListVolumesCmd; import org.apache.commons.codec.binary.Base64; import org.apache.http.client.utils.URLEncodedUtils; import org.apache.http.ConnectionClosedException; @@ -464,7 +465,8 @@ public class ApiServer implements HttpRequestHandler { && !(cmdObj instanceof ListProjectsCmd) && !(cmdObj instanceof ListProjectAccountsCmd) && !(cmdObj instanceof ListProjectInvitationsCmd) - && !(cmdObj instanceof ListHostsCmd)) { + && !(cmdObj instanceof ListHostsCmd) + && !(cmdObj instanceof ListVolumesCmd)) { buildAsyncListResponse((BaseListCmd) cmdObj, caller); } diff --git a/server/src/com/cloud/api/query/QueryManagerImpl.java b/server/src/com/cloud/api/query/QueryManagerImpl.java index 61af1616e49..19577d2a11e 100644 --- a/server/src/com/cloud/api/query/QueryManagerImpl.java +++ b/server/src/com/cloud/api/query/QueryManagerImpl.java @@ -39,6 +39,7 @@ import org.apache.cloudstack.api.command.user.securitygroup.ListSecurityGroupsCm import org.apache.cloudstack.api.command.user.tag.ListTagsCmd; import org.apache.cloudstack.api.command.user.vm.ListVMsCmd; import org.apache.cloudstack.api.command.user.vmgroup.ListVMGroupsCmd; +import org.apache.cloudstack.api.command.user.volume.ListVolumesCmd; import org.apache.cloudstack.api.response.DomainRouterResponse; import org.apache.cloudstack.api.response.EventResponse; import org.apache.cloudstack.api.response.HostResponse; @@ -51,6 +52,7 @@ import org.apache.cloudstack.api.response.ResourceTagResponse; import org.apache.cloudstack.api.response.SecurityGroupResponse; import org.apache.cloudstack.api.response.UserResponse; import org.apache.cloudstack.api.response.UserVmResponse; +import org.apache.cloudstack.api.response.VolumeResponse; import org.apache.cloudstack.query.QueryService; import org.apache.log4j.Logger; @@ -65,6 +67,7 @@ import com.cloud.api.query.dao.ProjectJoinDao; import com.cloud.api.query.dao.ResourceTagJoinDao; import com.cloud.api.query.dao.SecurityGroupJoinDao; import com.cloud.api.query.dao.UserVmJoinDao; +import com.cloud.api.query.dao.VolumeJoinDao; import com.cloud.api.query.vo.DomainRouterJoinVO; import com.cloud.api.query.vo.EventJoinVO; import com.cloud.api.query.vo.HostJoinVO; @@ -76,6 +79,7 @@ import com.cloud.api.query.vo.ResourceTagJoinVO; import com.cloud.api.query.vo.SecurityGroupJoinVO; import com.cloud.api.query.vo.UserAccountJoinVO; import com.cloud.api.query.vo.UserVmJoinVO; +import com.cloud.api.query.vo.VolumeJoinVO; import com.cloud.async.AsyncJob; import com.cloud.domain.Domain; import com.cloud.domain.DomainVO; @@ -98,7 +102,12 @@ import com.cloud.projects.ProjectService; import com.cloud.projects.dao.ProjectAccountDao; import com.cloud.projects.dao.ProjectDao; import com.cloud.server.Criteria; +import com.cloud.server.ResourceTag.TaggedResourceType; +import com.cloud.storage.DiskOfferingVO; import com.cloud.storage.Snapshot; +import com.cloud.storage.Volume; +import com.cloud.storage.VolumeVO; +import com.cloud.tags.ResourceTagVO; import com.cloud.user.Account; import com.cloud.user.AccountManager; import com.cloud.user.AccountManagerImpl; @@ -119,6 +128,8 @@ import com.cloud.utils.db.SearchCriteria; import com.cloud.utils.db.SearchCriteria.Func; import com.cloud.utils.db.SearchCriteria.Op; import com.cloud.vm.UserVmVO; +import com.cloud.vm.VMInstanceVO; +import com.cloud.vm.VirtualMachine; import com.cloud.vm.dao.UserVmDao; /** @@ -188,6 +199,9 @@ public class QueryManagerImpl implements QueryService, Manager { @Inject private HostJoinDao _hostJoinDao; + @Inject + private VolumeJoinDao _volumeJoinDao; + @Inject private HighAvailabilityManager _haMgr; @@ -1371,9 +1385,9 @@ public class QueryManagerImpl implements QueryService, Manager { if ((Boolean) haHosts) { sb.and("tag", sb.entity().getTag(), SearchCriteria.Op.EQ); } else { - sb.and("tag", sb.entity().getTag(), SearchCriteria.Op.NEQ); - //FIXME: should we have another condition say tag = null? - //hostTagSearch.or("tagNull", hostTagSearch.entity().getTag(), SearchCriteria.Op.NULL); + sb.and().op("tag", sb.entity().getTag(), SearchCriteria.Op.NEQ); + sb.or("tagNull", sb.entity().getTag(), SearchCriteria.Op.NULL); + sb.cp(); } } @@ -1439,4 +1453,142 @@ public class QueryManagerImpl implements QueryService, Manager { } + @Override + public ListResponse searchForVolumes(ListVolumesCmd cmd) { + Pair, Integer> result = searchForVolumesInternal(cmd); + ListResponse response = new ListResponse(); + + List routerResponses = ViewResponseHelper.createVolumeResponse(result.first().toArray(new VolumeJoinVO[result.first().size()])); + response.setResponses(routerResponses, result.second()); + return response; + } + + + private Pair, Integer> searchForVolumesInternal(ListVolumesCmd cmd) { + + Account caller = UserContext.current().getCaller(); + List permittedAccounts = new ArrayList(); + + Long id = cmd.getId(); + Long vmInstanceId = cmd.getVirtualMachineId(); + String name = cmd.getVolumeName(); + String keyword = cmd.getKeyword(); + String type = cmd.getType(); + Map tags = cmd.getTags(); + + Long zoneId = cmd.getZoneId(); + Long podId = null; + if (_accountMgr.isAdmin(caller.getType())) { + podId = cmd.getPodId(); + } + + Ternary domainIdRecursiveListProject = new Ternary(cmd.getDomainId(), cmd.isRecursive(), null); + _accountMgr.buildACLSearchParameters(caller, id, cmd.getAccountName(), cmd.getProjectId(), permittedAccounts, domainIdRecursiveListProject, cmd.listAll(), false); + Long domainId = domainIdRecursiveListProject.first(); + Boolean isRecursive = domainIdRecursiveListProject.second(); + ListProjectResourcesCriteria listProjectResourcesCriteria = domainIdRecursiveListProject.third(); + Filter searchFilter = new Filter(VolumeJoinVO.class, "created", false, cmd.getStartIndex(), cmd.getPageSizeVal()); + + // hack for now, this should be done better but due to needing a join I opted to + // do this quickly and worry about making it pretty later + SearchBuilder sb = _volumeJoinDao.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().getName(), SearchCriteria.Op.LIKE); + sb.and("id", sb.entity().getId(), SearchCriteria.Op.EQ); + sb.and("volumeType", sb.entity().getVolumeType(), SearchCriteria.Op.LIKE); + sb.and("instanceId", sb.entity().getVmId(), SearchCriteria.Op.EQ); + sb.and("dataCenterId", sb.entity().getDataCenterId(), SearchCriteria.Op.EQ); + sb.and("podId", sb.entity().getPodId(), SearchCriteria.Op.EQ); + // Only return volumes that are not destroyed + sb.and("state", sb.entity().getState(), SearchCriteria.Op.NEQ); + sb.and("systemUse", sb.entity().isSystemUse(), SearchCriteria.Op.NEQ); + // display UserVM volumes only + sb.and().op("type", sb.entity().getVmType(), SearchCriteria.Op.NIN); + sb.or("nulltype", sb.entity().getVmType(), SearchCriteria.Op.NULL); + sb.cp(); + + if (tags != null && !tags.isEmpty()) { + for (int count=0; count < tags.size(); count++) { + 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(); + } + } + + + + // now set the SC criteria... + SearchCriteria sc = sb.create(); + _accountMgr.buildACLViewSearchCriteria(sc, domainId, isRecursive, permittedAccounts, listProjectResourcesCriteria); + + if (keyword != null) { + SearchCriteria ssc = _volumeJoinDao.createSearchCriteria(); + ssc.addOr("name", SearchCriteria.Op.LIKE, "%" + keyword + "%"); + ssc.addOr("volumeType", SearchCriteria.Op.LIKE, "%" + keyword + "%"); + + sc.addAnd("name", SearchCriteria.Op.SC, ssc); + } + + if (name != null) { + sc.setParameters("name", "%" + name + "%"); + } + + sc.setParameters("systemUse", 1); + + if (tags != null && !tags.isEmpty()) { + int count = 0; + for (String key : tags.keySet()) { + sc.setParameters("key" + String.valueOf(count), key); + sc.setParameters("value" + String.valueOf(count), tags.get(key)); + count++; + } + } + + if (id != null) { + sc.setParameters("id", id); + } + + if (type != null) { + sc.setParameters("volumeType", "%" + type + "%"); + } + if (vmInstanceId != null) { + sc.setParameters("instanceId", vmInstanceId); + } + if (zoneId != null) { + sc.setParameters("dataCenterId", zoneId); + } + if (podId != null) { + sc.setParameters("podId", podId); + } + + // Don't return DomR and ConsoleProxy volumes + sc.setParameters("type", VirtualMachine.Type.ConsoleProxy, VirtualMachine.Type.SecondaryStorageVm, VirtualMachine.Type.DomainRouter); + + // Only return volumes that are not destroyed + sc.setParameters("state", Volume.State.Destroy); + + // search Volume details by ids + Pair, Integer> uniqueVolPair = _volumeJoinDao.searchAndCount(sc, searchFilter); + Integer count = uniqueVolPair.second(); + if (count.intValue() == 0) { + // empty result + return uniqueVolPair; + } + List uniqueVols = uniqueVolPair.first(); + Long[] vrIds = new Long[uniqueVols.size()]; + int i = 0; + for (VolumeJoinVO v : uniqueVols) { + vrIds[i++] = v.getId(); + } + List vrs = _volumeJoinDao.searchByIds(vrIds); + return new Pair, Integer>(vrs, count); + } + + } diff --git a/server/src/com/cloud/api/query/ViewResponseHelper.java b/server/src/com/cloud/api/query/ViewResponseHelper.java index bb6c66bebb4..b1a53991e31 100644 --- a/server/src/com/cloud/api/query/ViewResponseHelper.java +++ b/server/src/com/cloud/api/query/ViewResponseHelper.java @@ -34,6 +34,7 @@ import org.apache.cloudstack.api.response.ResourceTagResponse; import org.apache.cloudstack.api.response.SecurityGroupResponse; import org.apache.cloudstack.api.response.UserResponse; import org.apache.cloudstack.api.response.UserVmResponse; +import org.apache.cloudstack.api.response.VolumeResponse; import org.apache.log4j.Logger; import com.cloud.api.ApiDBUtils; @@ -48,6 +49,7 @@ import com.cloud.api.query.vo.ResourceTagJoinVO; import com.cloud.api.query.vo.SecurityGroupJoinVO; import com.cloud.api.query.vo.UserAccountJoinVO; import com.cloud.api.query.vo.UserVmJoinVO; +import com.cloud.api.query.vo.VolumeJoinVO; import com.cloud.user.Account; import com.cloud.user.UserContext; @@ -214,4 +216,21 @@ public class ViewResponseHelper { } return new ArrayList(vrDataList.values()); } + + public static List createVolumeResponse(VolumeJoinVO... volumes) { + Hashtable vrDataList = new Hashtable(); + for (VolumeJoinVO vr : volumes) { + VolumeResponse vrData = vrDataList.get(vr.getId()); + if ( vrData == null ){ + // first time encountering this volume + vrData = ApiDBUtils.newVolumeResponse(vr); + } + else{ + // update tags + vrData = ApiDBUtils.fillVolumeDetails(vrData, vr); + } + vrDataList.put(vr.getId(), vrData); + } + return new ArrayList(vrDataList.values()); + } } diff --git a/server/src/com/cloud/api/query/dao/VolumeJoinDao.java b/server/src/com/cloud/api/query/dao/VolumeJoinDao.java new file mode 100644 index 00000000000..67509cf5b29 --- /dev/null +++ b/server/src/com/cloud/api/query/dao/VolumeJoinDao.java @@ -0,0 +1,37 @@ +// 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.query.dao; + +import java.util.List; + +import org.apache.cloudstack.api.response.VolumeResponse; + + +import com.cloud.api.query.vo.VolumeJoinVO; +import com.cloud.storage.Volume; +import com.cloud.utils.db.GenericDao; + +public interface VolumeJoinDao extends GenericDao { + + VolumeResponse newVolumeResponse(VolumeJoinVO vol); + + VolumeResponse setVolumeResponse(VolumeResponse volData, VolumeJoinVO vol); + + List newVolumeView(Volume vol); + + List searchByIds(Long... ids); +} diff --git a/server/src/com/cloud/api/query/dao/VolumeJoinDaoImpl.java b/server/src/com/cloud/api/query/dao/VolumeJoinDaoImpl.java new file mode 100644 index 00000000000..f4691ce713e --- /dev/null +++ b/server/src/com/cloud/api/query/dao/VolumeJoinDaoImpl.java @@ -0,0 +1,230 @@ +// 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.query.dao; + +import java.util.List; + +import javax.ejb.Local; + +import org.apache.log4j.Logger; + +import com.cloud.api.ApiDBUtils; +import com.cloud.api.ApiResponseHelper; +import com.cloud.api.query.vo.ResourceTagJoinVO; +import com.cloud.api.query.vo.VolumeJoinVO; +import org.apache.cloudstack.api.response.VolumeResponse; + +import com.cloud.offering.ServiceOffering; +import com.cloud.storage.Storage; +import com.cloud.storage.VMTemplateHostVO; +import com.cloud.storage.Volume; +import com.cloud.storage.VMTemplateStorageResourceAssoc.Status; +import com.cloud.user.Account; +import com.cloud.user.UserContext; +import com.cloud.utils.db.GenericDaoBase; +import com.cloud.utils.db.SearchBuilder; +import com.cloud.utils.db.SearchCriteria; + + +@Local(value={VolumeJoinDao.class}) +public class VolumeJoinDaoImpl extends GenericDaoBase implements VolumeJoinDao { + public static final Logger s_logger = Logger.getLogger(VolumeJoinDaoImpl.class); + + private SearchBuilder volSearch; + + private SearchBuilder volIdSearch; + + protected VolumeJoinDaoImpl() { + + volSearch = createSearchBuilder(); + volSearch.and("idIN", volSearch.entity().getId(), SearchCriteria.Op.IN); + volSearch.done(); + + volIdSearch = createSearchBuilder(); + volIdSearch.and("id", volIdSearch.entity().getId(), SearchCriteria.Op.EQ); + volIdSearch.done(); + + this._count = "select count(distinct id) from volume_view WHERE "; + } + + + + + @Override + public VolumeResponse newVolumeResponse(VolumeJoinVO volume) { + Account caller = UserContext.current().getCaller(); + + VolumeResponse volResponse = new VolumeResponse(); + volResponse.setId(volume.getUuid()); + + if (volume.getName() != null) { + volResponse.setName(volume.getName()); + } else { + volResponse.setName(""); + } + + volResponse.setZoneId(volume.getDataCenterUuid()); + volResponse.setZoneName(volume.getDataCenterName()); + + volResponse.setVolumeType(volume.getVolumeType().toString()); + volResponse.setDeviceId(volume.getDeviceId()); + + long instanceId = volume.getVmId(); + if (instanceId > 0 && volume.getState() != Volume.State.Destroy) { + volResponse.setVirtualMachineId(volume.getVmUuid()); + volResponse.setVirtualMachineName(volume.getVmName()); + volResponse.setVirtualMachineState(volume.getVmState().toString()); + volResponse.setVirtualMachineDisplayName(volume.getVmDisplayName()); + } + + // Show the virtual size of the volume + volResponse.setSize(volume.getSize()); + + volResponse.setCreated(volume.getCreated()); + volResponse.setState(volume.getState().toString()); + if (volume.getState() == Volume.State.UploadOp) { + // com.cloud.storage.VolumeHostVO volumeHostRef = + // ApiDBUtils.findVolumeHostRef(volume.getId(), + // volume.getDataCenterId()); + volResponse.setSize(volume.getVolumeHostSize()); + volResponse.setCreated(volume.getVolumeHostCreated()); + + if (caller.getType() == Account.ACCOUNT_TYPE_ADMIN || caller.getType() == Account.ACCOUNT_TYPE_RESOURCE_DOMAIN_ADMIN) + volResponse.setHypervisor(ApiDBUtils.getHypervisorTypeFromFormat(volume.getFormat()).toString()); + if (volume.getDownloadState() != Status.DOWNLOADED) { + String volumeStatus = "Processing"; + if (volume.getDownloadState() == VMTemplateHostVO.Status.DOWNLOAD_IN_PROGRESS) { + if (volume.getDownloadPercent() == 100) { + volumeStatus = "Checking Volume"; + } else { + volumeStatus = volume.getDownloadPercent() + "% Uploaded"; + } + volResponse.setState("Uploading"); + } else { + volumeStatus = volume.getErrorString(); + if (volume.getDownloadState() == VMTemplateHostVO.Status.NOT_DOWNLOADED) { + volResponse.setState("UploadNotStarted"); + } else { + volResponse.setState("UploadError"); + } + } + volResponse.setStatus(volumeStatus); + } else if (volume.getDownloadState() == VMTemplateHostVO.Status.DOWNLOADED) { + volResponse.setStatus("Upload Complete"); + volResponse.setState("Uploaded"); + } else { + volResponse.setStatus("Successfully Installed"); + } + } + + // populate owner. + ApiResponseHelper.populateOwner(volResponse, volume); + + // DiskOfferingVO diskOffering = + // ApiDBUtils.findDiskOfferingById(volume.getDiskOfferingId()); + if (volume.getDiskOfferingId() > 0) { + if (volume.getVolumeType().equals(Volume.Type.ROOT)) { + volResponse.setServiceOfferingId(volume.getDiskOfferingUuid()); + } else { + volResponse.setDiskOfferingId(volume.getDiskOfferingUuid()); + } + + if (volume.getVolumeType().equals(Volume.Type.ROOT)) { + volResponse.setServiceOfferingName(volume.getDiskOfferingName()); + volResponse.setServiceOfferingDisplayText(volume.getDiskOfferingDisplayText()); + } else { + volResponse.setDiskOfferingName(volume.getDiskOfferingName()); + volResponse.setDiskOfferingDisplayText(volume.getDiskOfferingDisplayText()); + } + volResponse.setStorageType(volume.isUseLocalStorage() ? ServiceOffering.StorageType.local.toString() : ServiceOffering.StorageType.shared + .toString()); + } + Long poolId = volume.getPoolId(); + String poolName = (poolId == null) ? "none" : volume.getPoolName(); + volResponse.setStoragePoolName(poolName); + + // return hypervisor for ROOT and Resource domain only + if ((caller.getType() == Account.ACCOUNT_TYPE_ADMIN || caller.getType() == Account.ACCOUNT_TYPE_RESOURCE_DOMAIN_ADMIN) + && volume.getState() != Volume.State.UploadOp && volume.getHypervisorType() != null) { + volResponse.setHypervisor(volume.getHypervisorType().toString()); + } + + volResponse.setAttached(volume.getAttached()); + volResponse.setDestroyed(volume.getState() == Volume.State.Destroy); + boolean isExtractable = true; + if (volume.getVolumeType() != Volume.Type.DATADISK) { // Datadisk dont + // have any + // template + // dependence. + if (volume.getTemplateId() > 0) { // For ISO based volumes template + // = null and we allow extraction + // of all ISO based volumes + isExtractable = volume.isExtractable() && volume.getTemplateType() != Storage.TemplateType.SYSTEM; + } + } + + // update tag information + long tag_id = volume.getTagId(); + if (tag_id > 0) { + ResourceTagJoinVO vtag = ApiDBUtils.findResourceTagViewById(tag_id); + if (vtag != null) { + volResponse.addTag(ApiDBUtils.newResourceTagResponse(vtag, false)); + } + } + + volResponse.setExtractable(isExtractable); + volResponse.setObjectName("volume"); + return volResponse; + } + + + + @Override + public VolumeResponse setVolumeResponse(VolumeResponse volData, VolumeJoinVO vol) { + long tag_id = vol.getTagId(); + if (tag_id > 0) { + ResourceTagJoinVO vtag = ApiDBUtils.findResourceTagViewById(tag_id); + if ( vtag != null ){ + volData.addTag(ApiDBUtils.newResourceTagResponse(vtag, false)); + } + } + return volData; + } + + + + + @Override + public List newVolumeView(Volume vol) { + SearchCriteria sc = volIdSearch.create(); + sc.setParameters("id", vol.getId()); + return searchIncludingRemoved(sc, null, null, false); + } + + + + + @Override + public List searchByIds(Long... ids) { + SearchCriteria sc = volSearch.create(); + sc.setParameters("idIN", ids); + return searchIncludingRemoved(sc, null, null, false); + } + + + +} diff --git a/server/src/com/cloud/api/query/vo/VolumeJoinVO.java b/server/src/com/cloud/api/query/vo/VolumeJoinVO.java new file mode 100644 index 00000000000..96c26157264 --- /dev/null +++ b/server/src/com/cloud/api/query/vo/VolumeJoinVO.java @@ -0,0 +1,1032 @@ +// 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.query.vo; + +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 javax.persistence.Temporal; +import javax.persistence.TemporalType; +import com.cloud.hypervisor.Hypervisor.HypervisorType; +import com.cloud.server.ResourceTag.TaggedResourceType; +import com.cloud.storage.Storage; +import com.cloud.storage.Volume; +import com.cloud.storage.VMTemplateStorageResourceAssoc.Status; +import com.cloud.utils.db.GenericDao; +import com.cloud.vm.VirtualMachine; +import com.cloud.vm.VirtualMachine.Type; + +@Entity +@Table(name="volume_view") +public class VolumeJoinVO extends BaseViewVO implements ControlledViewEntity { + + @Column(name="id") + private long id; + + @Column(name="uuid") + private String uuid; + + + @Column(name="name") + private String name; + + @Column(name = "device_id") + Long deviceId = null; + + @Column(name = "volume_type") + @Enumerated(EnumType.STRING) + Volume.Type volumeType; + + @Column(name = "size") + long size; + + @Column(name = "state") + @Enumerated(value = EnumType.STRING) + private Volume.State state; + + @Column(name=GenericDao.CREATED_COLUMN) + private Date created; + + @Column(name = "attached") + @Temporal(value = TemporalType.TIMESTAMP) + Date attached; + + @Column(name=GenericDao.REMOVED_COLUMN) + private Date removed; + + + @Column(name="account_id") + private long accountId; + + @Column(name="account_uuid") + private String accountUuid; + + @Column(name="account_name") + private String accountName = null; + + @Column(name="account_type") + private short accountType; + + @Column(name="domain_id") + private long domainId; + + @Column(name="domain_uuid") + private String domainUuid; + + @Column(name="domain_name") + private String domainName = null; + + @Column(name="domain_path") + private String domainPath = null; + + @Column(name="project_id") + private long projectId; + + @Column(name="project_uuid") + private String projectUuid; + + @Column(name="project_name") + private String projectName; + + @Column(name="pod_id") + private long podId; + + @Column(name="data_center_id") + private long dataCenterId; + + @Column(name="data_center_uuid") + private String dataCenterUuid; + + @Column(name="data_center_name") + private String dataCenterName; + + @Column(name="vm_id") + private long vmId; + + @Column(name="vm_uuid") + private String vmUuid; + + @Column(name="vm_name") + private String vmName; + + @Column(name="vm_display_name") + private String vmDisplayName; + + @Column(name="vm_state") + @Enumerated(value=EnumType.STRING) + protected VirtualMachine.State vmState = null; + + @Column(name="vm_type") + @Enumerated(value=EnumType.STRING) + protected VirtualMachine.Type vmType; + + @Column (name="volume_host_size") + private long volumeHostSize; + + @Column(name="volume_host_created") + private Date volumeHostCreated; + + @Column(name="format") + private Storage.ImageFormat format; + + @Column (name="download_pct") + private int downloadPercent; + + @Column (name="download_state") + @Enumerated(EnumType.STRING) + private Status downloadState; + + @Column (name="error_str") + private String errorString; + + @Column(name="hypervisor_type") + @Enumerated(value=EnumType.STRING) + private HypervisorType hypervisorType; + + + @Column(name="disk_offering_id") + private long diskOfferingId; + + @Column(name="disk_offering_uuid") + private String diskOfferingUuid; + + @Column(name="disk_offering_name") + private String diskOfferingName; + + @Column(name="disk_offering_display_text") + private String diskOfferingDisplayText; + + @Column(name="system_use") + private boolean systemUse; + + + @Column(name="use_local_storage") + private boolean useLocalStorage; + + @Column(name="pool_id") + private long poolId; + + @Column(name="pool_uuid") + private String poolUuid; + + @Column(name="pool_name") + private String poolName; + + @Column(name="template_id") + private long templateId; + + @Column(name="template_uuid") + private String templateUuid; + + @Column(name="extractable") + private boolean extractable; + + @Column(name="template_type") + private Storage.TemplateType templateType; + + @Column(name="job_id") + private long jobId; + + @Column(name="job_uuid") + private String jobUuid; + + @Column(name="job_status") + private int jobStatus; + + @Column(name="tag_id") + private long tagId; + + @Column(name="tag_uuid") + private String tagUuid; + + @Column(name="tag_key") + private String tagKey; + + @Column(name="tag_value") + private String tagValue; + + @Column(name="tag_domain_id") + private long tagDomainId; + + @Column(name="tag_account_id") + private long tagAccountId; + + @Column(name="tag_resource_id") + private long tagResourceId; + + @Column(name="tag_resource_uuid") + private String tagResourceUuid; + + @Column(name="tag_resource_type") + @Enumerated(value=EnumType.STRING) + private TaggedResourceType tagResourceType; + + @Column(name="tag_customer") + private String tagCustomer; + + + + public VolumeJoinVO() { + } + + + + @Override + public long getId() { + return id; + } + + + + @Override + public void setId(long id) { + this.id = id; + } + + + + public String getUuid() { + return uuid; + } + + + + public void setUuid(String uuid) { + this.uuid = uuid; + } + + + + public String getName() { + return name; + } + + + + public void setName(String name) { + this.name = name; + } + + + + public Long getDeviceId() { + return deviceId; + } + + + + public void setDeviceId(Long deviceId) { + this.deviceId = deviceId; + } + + + + public Volume.Type getVolumeType() { + return volumeType; + } + + + + public void setVolumeType(Volume.Type volumeType) { + this.volumeType = volumeType; + } + + + + public long getSize() { + return size; + } + + + + public void setSize(long size) { + this.size = size; + } + + + + public Volume.State getState() { + return state; + } + + + + public void setState(Volume.State state) { + this.state = state; + } + + + + public Date getCreated() { + return created; + } + + + + public void setCreated(Date created) { + this.created = created; + } + + + + public Date getAttached() { + return attached; + } + + + + public void setAttached(Date attached) { + this.attached = attached; + } + + + + public Date getRemoved() { + return removed; + } + + + + public void setRemoved(Date removed) { + this.removed = removed; + } + + + + @Override + public long getAccountId() { + return accountId; + } + + + + public void setAccountId(long accountId) { + this.accountId = accountId; + } + + + + @Override + public String getAccountUuid() { + return accountUuid; + } + + + + public void setAccountUuid(String accountUuid) { + this.accountUuid = accountUuid; + } + + + + @Override + public String getAccountName() { + return accountName; + } + + + + public void setAccountName(String accountName) { + this.accountName = accountName; + } + + + + @Override + public short getAccountType() { + return accountType; + } + + + + public void setAccountType(short accountType) { + this.accountType = accountType; + } + + + + @Override + 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; + } + + + + @Override + public String getDomainName() { + return domainName; + } + + + + public void setDomainName(String domainName) { + this.domainName = domainName; + } + + + + @Override + public String getDomainPath() { + return domainPath; + } + + + + public void setDomainPath(String domainPath) { + this.domainPath = domainPath; + } + + + + public long getProjectId() { + return projectId; + } + + + + public void setProjectId(long projectId) { + this.projectId = projectId; + } + + + + @Override + public String getProjectUuid() { + return projectUuid; + } + + + + public void setProjectUuid(String projectUuid) { + this.projectUuid = projectUuid; + } + + + + @Override + public String getProjectName() { + return projectName; + } + + + + public void setProjectName(String projectName) { + this.projectName = projectName; + } + + + + public long getVmId() { + return vmId; + } + + + + public void setVmId(long vmId) { + this.vmId = vmId; + } + + + + public String getVmUuid() { + return vmUuid; + } + + + + public void setVmUuid(String vmUuid) { + this.vmUuid = vmUuid; + } + + + + public String getVmName() { + return vmName; + } + + + + public void setVmName(String vmName) { + this.vmName = vmName; + } + + + + public String getVmDisplayName() { + return vmDisplayName; + } + + + + public void setVmDisplayName(String vmDisplayName) { + this.vmDisplayName = vmDisplayName; + } + + + + public VirtualMachine.State getVmState() { + return vmState; + } + + + + public void setVmState(VirtualMachine.State vmState) { + this.vmState = vmState; + } + + + + public VirtualMachine.Type getVmType() { + return vmType; + } + + + + public void setVmType(VirtualMachine.Type vmType) { + this.vmType = vmType; + } + + + + public long getVolumeHostSize() { + return volumeHostSize; + } + + + + public void setVolumeHostSize(long volumeHostSize) { + this.volumeHostSize = volumeHostSize; + } + + + + public Date getVolumeHostCreated() { + return volumeHostCreated; + } + + + + public void setVolumeHostCreated(Date volumeHostCreated) { + this.volumeHostCreated = volumeHostCreated; + } + + + + public Storage.ImageFormat getFormat() { + return format; + } + + + + public void setFormat(Storage.ImageFormat format) { + this.format = format; + } + + + + public int getDownloadPercent() { + return downloadPercent; + } + + + + public void setDownloadPercent(int downloadPercent) { + this.downloadPercent = downloadPercent; + } + + + + public Status getDownloadState() { + return downloadState; + } + + + + public void setDownloadState(Status downloadState) { + this.downloadState = downloadState; + } + + + + public String getErrorString() { + return errorString; + } + + + + public void setErrorString(String errorString) { + this.errorString = errorString; + } + + + + public HypervisorType getHypervisorType() { + return hypervisorType; + } + + + + public void setHypervisorType(HypervisorType hypervisorType) { + this.hypervisorType = hypervisorType; + } + + + + public long getDiskOfferingId() { + return diskOfferingId; + } + + + + public void setDiskOfferingId(long diskOfferingId) { + this.diskOfferingId = diskOfferingId; + } + + + + public String getDiskOfferingUuid() { + return diskOfferingUuid; + } + + + + public void setDiskOfferingUuid(String diskOfferingUuid) { + this.diskOfferingUuid = diskOfferingUuid; + } + + + + public String getDiskOfferingName() { + return diskOfferingName; + } + + + + public void setDiskOfferingName(String diskOfferingName) { + this.diskOfferingName = diskOfferingName; + } + + + + public String getDiskOfferingDisplayText() { + return diskOfferingDisplayText; + } + + + + public void setDiskOfferingDisplayText(String diskOfferingDisplayText) { + this.diskOfferingDisplayText = diskOfferingDisplayText; + } + + + + public boolean isUseLocalStorage() { + return useLocalStorage; + } + + + + public void setUseLocalStorage(boolean useLocalStorage) { + this.useLocalStorage = useLocalStorage; + } + + + + public long getPoolId() { + return poolId; + } + + + + public void setPoolId(long poolId) { + this.poolId = poolId; + } + + + + public String getPoolUuid() { + return poolUuid; + } + + + + public void setPoolUuid(String poolUuid) { + this.poolUuid = poolUuid; + } + + + + public String getPoolName() { + return poolName; + } + + + + public void setPoolName(String poolName) { + this.poolName = poolName; + } + + + + 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 boolean isExtractable() { + return extractable; + } + + + + public void setExtractable(boolean extractable) { + this.extractable = extractable; + } + + + + public Storage.TemplateType getTemplateType() { + return templateType; + } + + + + public void setTemplateType(Storage.TemplateType templateType) { + this.templateType = templateType; + } + + + + 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 getTagId() { + return tagId; + } + + + + public void setTagId(long tagId) { + this.tagId = tagId; + } + + + + public String getTagUuid() { + return tagUuid; + } + + + + public void setTagUuid(String tagUuid) { + this.tagUuid = tagUuid; + } + + + + public String getTagKey() { + return tagKey; + } + + + + public void setTagKey(String tagKey) { + this.tagKey = tagKey; + } + + + + public String getTagValue() { + return tagValue; + } + + + + public void setTagValue(String tagValue) { + this.tagValue = tagValue; + } + + + + public long getTagDomainId() { + return tagDomainId; + } + + + + public void setTagDomainId(long tagDomainId) { + this.tagDomainId = tagDomainId; + } + + + + public long getTagAccountId() { + return tagAccountId; + } + + + + public void setTagAccountId(long tagAccountId) { + this.tagAccountId = tagAccountId; + } + + + + public long getTagResourceId() { + return tagResourceId; + } + + + + public void setTagResourceId(long tagResourceId) { + this.tagResourceId = tagResourceId; + } + + + + public String getTagResourceUuid() { + return tagResourceUuid; + } + + + + public void setTagResourceUuid(String tagResourceUuid) { + this.tagResourceUuid = tagResourceUuid; + } + + + + public TaggedResourceType getTagResourceType() { + return tagResourceType; + } + + + + public void setTagResourceType(TaggedResourceType tagResourceType) { + this.tagResourceType = tagResourceType; + } + + + + public String getTagCustomer() { + return tagCustomer; + } + + + + public void setTagCustomer(String tagCustomer) { + this.tagCustomer = tagCustomer; + } + + + + public long getDataCenterId() { + return dataCenterId; + } + + + + public void setDataCenterId(long dataCenterId) { + this.dataCenterId = dataCenterId; + } + + + + public String getDataCenterUuid() { + return dataCenterUuid; + } + + + + public void setDataCenterUuid(String dataCenterUuid) { + this.dataCenterUuid = dataCenterUuid; + } + + + + public String getDataCenterName() { + return dataCenterName; + } + + + + public void setDataCenterName(String dataCenterName) { + this.dataCenterName = dataCenterName; + } + + + + public long getPodId() { + return podId; + } + + + + public void setPodId(long podId) { + this.podId = podId; + } + + + + public boolean isSystemUse() { + return systemUse; + } + + + + public void setSystemUse(boolean systemUse) { + this.systemUse = systemUse; + } + + + + +} diff --git a/server/src/com/cloud/configuration/DefaultComponentLibrary.java b/server/src/com/cloud/configuration/DefaultComponentLibrary.java index d50ac35f650..1824f496ab0 100755 --- a/server/src/com/cloud/configuration/DefaultComponentLibrary.java +++ b/server/src/com/cloud/configuration/DefaultComponentLibrary.java @@ -34,6 +34,7 @@ import com.cloud.api.query.dao.ResourceTagJoinDaoImpl; import com.cloud.api.query.dao.SecurityGroupJoinDaoImpl; import com.cloud.api.query.dao.UserVmJoinDaoImpl; import com.cloud.api.query.dao.HostJoinDaoImpl; +import com.cloud.api.query.dao.VolumeJoinDaoImpl; import com.cloud.async.AsyncJobExecutorContextImpl; import com.cloud.async.AsyncJobManagerImpl; import com.cloud.async.SyncQueueManagerImpl; @@ -222,6 +223,7 @@ import com.cloud.vm.dao.VMInstanceDaoImpl; import com.cloud.event.dao.EventJoinDaoImpl; + public class DefaultComponentLibrary extends ComponentLibraryBase implements ComponentLibrary { protected void populateDaos() { addDao("StackMaidDao", StackMaidDaoImpl.class); @@ -241,6 +243,7 @@ public class DefaultComponentLibrary extends ComponentLibraryBase implements Com addDao("ProjectAccountJoinDao", ProjectAccountJoinDaoImpl.class); addDao("ProjectInvitationJoinDao", ProjectInvitationJoinDaoImpl.class); addDao("HostJoinDao", HostJoinDaoImpl.class); + addDao("VolumeJoinDao", VolumeJoinDaoImpl.class); ComponentInfo> info = addDao("ServiceOfferingDao", ServiceOfferingDaoImpl.class); info.addParameter("cache.size", "50"); info.addParameter("cache.time.to.live", "600"); diff --git a/server/src/com/cloud/storage/StorageManagerImpl.java b/server/src/com/cloud/storage/StorageManagerImpl.java index 110e9558bb0..21ee9726a59 100755 --- a/server/src/com/cloud/storage/StorageManagerImpl.java +++ b/server/src/com/cloud/storage/StorageManagerImpl.java @@ -3859,124 +3859,7 @@ public class StorageManagerImpl implements StorageManager, Manager, ClusterManag return secHost; } - @Override - public Pair, Integer> searchForVolumes(ListVolumesCmd cmd) { - Account caller = UserContext.current().getCaller(); - List permittedAccounts = new ArrayList(); - Long id = cmd.getId(); - Long vmInstanceId = cmd.getVirtualMachineId(); - String name = cmd.getVolumeName(); - String keyword = cmd.getKeyword(); - String type = cmd.getType(); - Map tags = cmd.getTags(); - - Long zoneId = cmd.getZoneId(); - Long podId = null; - // Object host = null; TODO - if (_accountMgr.isAdmin(caller.getType())) { - podId = cmd.getPodId(); - // host = cmd.getHostId(); TODO - } - - Ternary domainIdRecursiveListProject = new Ternary(cmd.getDomainId(), cmd.isRecursive(), null); - _accountMgr.buildACLSearchParameters(caller, id, cmd.getAccountName(), cmd.getProjectId(), permittedAccounts, domainIdRecursiveListProject, cmd.listAll(), false); - Long domainId = domainIdRecursiveListProject.first(); - Boolean isRecursive = domainIdRecursiveListProject.second(); - ListProjectResourcesCriteria listProjectResourcesCriteria = domainIdRecursiveListProject.third(); - Filter searchFilter = new Filter(VolumeVO.class, "created", false, cmd.getStartIndex(), cmd.getPageSizeVal()); - - // hack for now, this should be done better but due to needing a join I opted to - // do this quickly and worry about making it pretty later - SearchBuilder sb = _volumeDao.createSearchBuilder(); - _accountMgr.buildACLSearchBuilder(sb, domainId, isRecursive, permittedAccounts, listProjectResourcesCriteria); - - sb.and("name", sb.entity().getName(), SearchCriteria.Op.LIKE); - sb.and("id", sb.entity().getId(), SearchCriteria.Op.EQ); - sb.and("volumeType", sb.entity().getVolumeType(), SearchCriteria.Op.LIKE); - sb.and("instanceId", sb.entity().getInstanceId(), SearchCriteria.Op.EQ); - sb.and("dataCenterId", sb.entity().getDataCenterId(), SearchCriteria.Op.EQ); - sb.and("podId", sb.entity().getPodId(), SearchCriteria.Op.EQ); - // Only return volumes that are not destroyed - sb.and("state", sb.entity().getState(), SearchCriteria.Op.NEQ); - - SearchBuilder diskOfferingSearch = _diskOfferingDao.createSearchBuilder(); - diskOfferingSearch.and("systemUse", diskOfferingSearch.entity().getSystemUse(), SearchCriteria.Op.NEQ); - sb.join("diskOfferingSearch", diskOfferingSearch, sb.entity().getDiskOfferingId(), diskOfferingSearch.entity().getId(), JoinBuilder.JoinType.LEFTOUTER); - - // display UserVM volumes only - SearchBuilder vmSearch = _vmInstanceDao.createSearchBuilder(); - vmSearch.and("type", vmSearch.entity().getType(), SearchCriteria.Op.NIN); - vmSearch.or("nulltype", vmSearch.entity().getType(), SearchCriteria.Op.NULL); - sb.join("vmSearch", vmSearch, sb.entity().getInstanceId(), vmSearch.entity().getId(), JoinBuilder.JoinType.LEFTOUTER); - - if (tags != null && !tags.isEmpty()) { - SearchBuilder 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(); - } - 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); - } - - // now set the SC criteria... - SearchCriteria sc = sb.create(); - _accountMgr.buildACLSearchCriteria(sc, domainId, isRecursive, permittedAccounts, listProjectResourcesCriteria); - - if (keyword != null) { - SearchCriteria ssc = _volumeDao.createSearchCriteria(); - ssc.addOr("name", SearchCriteria.Op.LIKE, "%" + keyword + "%"); - ssc.addOr("volumeType", SearchCriteria.Op.LIKE, "%" + keyword + "%"); - - sc.addAnd("name", SearchCriteria.Op.SC, ssc); - } - - if (name != null) { - sc.setParameters("name", "%" + name + "%"); - } - - sc.setJoinParameters("diskOfferingSearch", "systemUse", 1); - - if (tags != null && !tags.isEmpty()) { - int count = 0; - sc.setJoinParameters("tagSearch", "resourceType", TaggedResourceType.Volume.toString()); - for (String key : tags.keySet()) { - sc.setJoinParameters("tagSearch", "key" + String.valueOf(count), key); - sc.setJoinParameters("tagSearch", "value" + String.valueOf(count), tags.get(key)); - count++; - } - } - - if (id != null) { - sc.setParameters("id", id); - } - - if (type != null) { - sc.setParameters("volumeType", "%" + type + "%"); - } - if (vmInstanceId != null) { - sc.setParameters("instanceId", vmInstanceId); - } - if (zoneId != null) { - sc.setParameters("dataCenterId", zoneId); - } - if (podId != null) { - sc.setParameters("podId", podId); - } - - // Don't return DomR and ConsoleProxy volumes - sc.setJoinParameters("vmSearch", "type", VirtualMachine.Type.ConsoleProxy, VirtualMachine.Type.SecondaryStorageVm, VirtualMachine.Type.DomainRouter); - - // Only return volumes that are not destroyed - sc.setParameters("state", Volume.State.Destroy); - - Pair, Integer> volumes = _volumeDao.searchAndCount(sc, searchFilter); - - return new Pair, Integer>(volumes.first(), volumes.second()); - } @Override public String getSupportedImageFormatForCluster(Long clusterId) { diff --git a/server/test/com/cloud/api/ListPerfTest.java b/server/test/com/cloud/api/ListPerfTest.java index 47abcaedc12..9f1b4b554c1 100644 --- a/server/test/com/cloud/api/ListPerfTest.java +++ b/server/test/com/cloud/api/ListPerfTest.java @@ -106,4 +106,18 @@ public class ListPerfTest extends APITest { System.out.println("Time taken to list Hosts: " + (after - before) + " ms"); } + + @Test + public void testListVolumes(){ + // issue list Hosts calls + HashMap params = new HashMap(); + params.put("response", "json"); + params.put("listAll", "true"); + params.put("sessionkey", sessionKey); + long before = System.currentTimeMillis(); + String result = this.sendRequest("listVolumes", params); + long after = System.currentTimeMillis(); + System.out.println("Time taken to list Volumes: " + (after - before) + " ms"); + + } } diff --git a/setup/db/create-schema.sql b/setup/db/create-schema.sql index a95f190a458..4068cc6ecf0 100755 --- a/setup/db/create-schema.sql +++ b/setup/db/create-schema.sql @@ -3062,4 +3062,86 @@ left join op_host_capacity mem_caps on host.id = mem_caps.host_id and mem_caps.c left join op_host_capacity cpu_caps on host.id = cpu_caps.host_id and cpu_caps.capacity_type = 1 left join async_job on async_job.instance_id = host.id and async_job.instance_type = "Host" and async_job.job_status = 0; +DROP VIEW IF EXISTS `cloud`.`volume_view`; +CREATE VIEW volume_view AS +select +volumes.id, +volumes.uuid, +volumes.name, +volumes.device_id, +volumes.volume_type, +volumes.size, +volumes.created, +volumes.state, +volumes.attached, +volumes.removed, +volumes.pod_id, +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, +data_center.id data_center_id, +data_center.uuid data_center_uuid, +data_center.name data_center_name, +vm_instance.id vm_id, +vm_instance.uuid vm_uuid, +vm_instance.name vm_name, +vm_instance.state vm_state, +vm_instance.vm_type, +user_vm.display_name vm_display_name, +volume_host_ref.size volume_host_size, +volume_host_ref.created volume_host_created, +volume_host_ref.format, +volume_host_ref.download_pct, +volume_host_ref.download_state, +volume_host_ref.error_str, +disk_offering.id disk_offering_id, +disk_offering.uuid disk_offering_uuid, +disk_offering.name disk_offering_name, +disk_offering.display_text disk_offering_display_text, +disk_offering.use_local_storage, +disk_offering.system_use, +storage_pool.id pool_id, +storage_pool.uuid pool_uuid, +storage_pool.name pool_name, +cluster.hypervisor_type, +vm_template.id template_id, +vm_template.uuid template_uuid, +vm_template.extractable, +vm_template.type template_type, +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 volumes +inner join account on volumes.account_id=account.id +inner join domain on volumes.domain_id=domain.id +left join projects on projects.project_account_id = account.id +left join data_center on volumes.data_center_id = data_center.id +left join vm_instance on volumes.instance_id = vm_instance.id +left join user_vm on user_vm.id = vm_instance.id +left join volume_host_ref on volumes.id = volume_host_ref.volume_id and volumes.data_center_id = volume_host_ref.zone_id +left join disk_offering on volumes.disk_offering_id = disk_offering.id +left join storage_pool on volumes.pool_id = storage_pool.id +left join cluster on storage_pool.cluster_id = cluster.id +left join vm_template on volumes.template_id = vm_template.id +left join resource_tags on resource_tags.resource_id = volumes.id and resource_tags.resource_type = "Volume" +left join async_job on async_job.instance_id = volumes.id and async_job.instance_type = "Volume" and async_job.job_status = 0; diff --git a/setup/db/db/schema-40to410.sql b/setup/db/db/schema-40to410.sql index 6c58bd91872..04df535ff20 100644 --- a/setup/db/db/schema-40to410.sql +++ b/setup/db/db/schema-40to410.sql @@ -637,3 +637,88 @@ left join host_tags on host_tags.host_id = host.id left join op_host_capacity mem_caps on host.id = mem_caps.host_id and mem_caps.capacity_type = 0 left join op_host_capacity cpu_caps on host.id = cpu_caps.host_id and cpu_caps.capacity_type = 1 left join async_job on async_job.instance_id = host.id and async_job.instance_type = "Host" and async_job.job_status = 0; + +DROP VIEW IF EXISTS `cloud`.`volume_view`; +CREATE VIEW volume_view AS +select +volumes.id, +volumes.uuid, +volumes.name, +volumes.device_id, +volumes.volume_type, +volumes.size, +volumes.created, +volumes.state, +volumes.attached, +volumes.removed, +volumes.pod_id, +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, +data_center.id data_center_id, +data_center.uuid data_center_uuid, +data_center.name data_center_name, +vm_instance.id vm_id, +vm_instance.uuid vm_uuid, +vm_instance.name vm_name, +vm_instance.state vm_state, +vm_instance.vm_type, +user_vm.display_name vm_display_name, +volume_host_ref.size volume_host_size, +volume_host_ref.created volume_host_created, +volume_host_ref.format, +volume_host_ref.download_pct, +volume_host_ref.download_state, +volume_host_ref.error_str, +disk_offering.id disk_offering_id, +disk_offering.uuid disk_offering_uuid, +disk_offering.name disk_offering_name, +disk_offering.display_text disk_offering_display_text, +disk_offering.use_local_storage, +disk_offering.system_use, +storage_pool.id pool_id, +storage_pool.uuid pool_uuid, +storage_pool.name pool_name, +cluster.hypervisor_type, +vm_template.id template_id, +vm_template.uuid template_uuid, +vm_template.extractable, +vm_template.type template_type, +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 volumes +inner join account on volumes.account_id=account.id +inner join domain on volumes.domain_id=domain.id +left join projects on projects.project_account_id = account.id +left join data_center on volumes.data_center_id = data_center.id +left join vm_instance on volumes.instance_id = vm_instance.id +left join user_vm on user_vm.id = vm_instance.id +left join volume_host_ref on volumes.id = volume_host_ref.volume_id and volumes.data_center_id = volume_host_ref.zone_id +left join disk_offering on volumes.disk_offering_id = disk_offering.id +left join storage_pool on volumes.pool_id = storage_pool.id +left join cluster on storage_pool.cluster_id = cluster.id +left join vm_template on volumes.template_id = vm_template.id +left join resource_tags on resource_tags.resource_id = volumes.id and resource_tags.resource_type = "Volume" +left join async_job on async_job.instance_id = volumes.id and async_job.instance_type = "Volume" and async_job.job_status = 0; + + From 7e52f2c48cb42afe959730f2c350e1fb5dd803d6 Mon Sep 17 00:00:00 2001 From: Prasanna Santhanam Date: Wed, 26 Dec 2012 13:36:58 -0800 Subject: [PATCH 217/421] marvin : cloudstack-version is not reqd for json load To build back cloudstack response we don't need to load the 'cloudstack-version' string, only the response --- tools/marvin/marvin/jsonHelper.py | 2 +- tools/marvin/marvin/sandbox/demo/simulator/simulator.cfg | 4 ---- 2 files changed, 1 insertion(+), 5 deletions(-) diff --git a/tools/marvin/marvin/jsonHelper.py b/tools/marvin/marvin/jsonHelper.py index b2e7d2ff7dc..652cce0bf9e 100644 --- a/tools/marvin/marvin/jsonHelper.py +++ b/tools/marvin/marvin/jsonHelper.py @@ -121,7 +121,7 @@ def getResultObj(returnObj, responsecls=None): if len(returnObj) == 0: return None - responseName = returnObj.keys()[0] + responseName = filter(lambda a: a!=u'cloudstack-version', returnObj.keys())[0] response = returnObj[responseName] if len(response) == 0: diff --git a/tools/marvin/marvin/sandbox/demo/simulator/simulator.cfg b/tools/marvin/marvin/sandbox/demo/simulator/simulator.cfg index 219c4dbbff5..7c733ade256 100644 --- a/tools/marvin/marvin/sandbox/demo/simulator/simulator.cfg +++ b/tools/marvin/marvin/sandbox/demo/simulator/simulator.cfg @@ -148,10 +148,6 @@ "name": "workers", "value": "10" }, - { - "name": "use.user.concentrated.pod.allocation", - "value": "false" - }, { "name": "account.cleanup.interval", "value": "600" From b75d92419e0647bc2044abe8b3b86331ca5eaebe Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Wed, 26 Dec 2012 15:06:35 -0800 Subject: [PATCH 218/421] api: Enforce InternalIdentity interface on AsyncJobVO Signed-off-by: Rohit Yadav --- core/src/com/cloud/async/AsyncJobVO.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/core/src/com/cloud/async/AsyncJobVO.java b/core/src/com/cloud/async/AsyncJobVO.java index 769d9a9107a..75b9e2d842d 100644 --- a/core/src/com/cloud/async/AsyncJobVO.java +++ b/core/src/com/cloud/async/AsyncJobVO.java @@ -32,10 +32,11 @@ import javax.persistence.TemporalType; import javax.persistence.Transient; import com.cloud.utils.db.GenericDao; +import org.apache.cloudstack.api.InternalIdentity; @Entity @Table(name="async_job") -public class AsyncJobVO implements AsyncJob { +public class AsyncJobVO implements AsyncJob, InternalIdentity { public static final int CALLBACK_POLLING = 0; public static final int CALLBACK_EMAIL = 1; From 057ac12d236778e986d001c8e102bdc81da88a20 Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Wed, 26 Dec 2012 15:08:38 -0800 Subject: [PATCH 219/421] Enforce InternalIdentity interface on all VO classes that impls long getId() Signed-off-by: Rohit Yadav --- .../agent/api/storage/DownloadCommand.java | 3 +- .../agent/api/storage/UploadCommand.java | 3 +- .../cloud/agent/api/to/FirewallRuleTO.java | 3 +- .../com/cloud/agent/api/to/NetworkACLTO.java | 3 +- .../com/cloud/agent/api/to/TemplateTO.java | 3 +- api/src/com/cloud/agent/api/to/VolumeTO.java | 3 +- api/src/com/cloud/async/AsyncJob.java | 3 +- .../cloud/configuration/ResourceCount.java | 6 ++-- .../cloud/configuration/ResourceLimit.java | 6 ++-- api/src/com/cloud/dc/Pod.java | 3 +- api/src/com/cloud/network/NetworkProfile.java | 3 +- .../PhysicalNetworkServiceProvider.java | 3 +- .../network/PhysicalNetworkTrafficType.java | 3 +- .../cloud/network/VirtualRouterProvider.java | 4 ++- .../cloud/network/lb/LoadBalancingRule.java | 3 +- .../cloud/network/vpc/StaticRouteProfile.java | 4 ++- .../com/cloud/network/vpc/VpcOffering.java | 4 ++- .../com/cloud/offering/NetworkOffering.java | 3 +- api/src/com/cloud/storage/Swift.java | 3 +- api/src/com/cloud/storage/Upload.java | 4 ++- api/src/com/cloud/user/UserAccount.java | 6 ++-- api/src/com/cloud/vm/NicProfile.java | 3 +- core/src/com/cloud/alert/AlertVO.java | 3 +- core/src/com/cloud/async/SyncQueueItemVO.java | 6 ++-- core/src/com/cloud/async/SyncQueueVO.java | 6 ++-- core/src/com/cloud/capacity/CapacityVO.java | 3 +- .../com/cloud/certificate/CertificateVO.java | 6 ++-- .../cloud/configuration/ResourceCountVO.java | 6 ++-- .../cloud/configuration/ResourceLimitVO.java | 6 ++-- core/src/com/cloud/event/EventVO.java | 3 +- core/src/com/cloud/event/UsageEvent.java | 4 ++- core/src/com/cloud/event/UsageEventVO.java | 3 +- core/src/com/cloud/host/DetailVO.java | 4 ++- core/src/com/cloud/host/HostTagVO.java | 4 ++- core/src/com/cloud/host/HostVO.java | 3 +- .../hypervisor/HypervisorCapabilitiesVO.java | 3 +- core/src/com/cloud/network/VpnUserVO.java | 3 +- .../network/security/SecurityGroupRuleVO.java | 3 +- .../security/SecurityGroupRulesVO.java | 3 +- .../security/SecurityGroupVMMapVO.java | 5 +-- .../network/security/SecurityGroupVO.java | 3 +- .../network/security/SecurityGroupWorkVO.java | 5 +-- .../network/security/VmRulesetLogVO.java | 5 +-- .../src/com/cloud/storage/DiskOfferingVO.java | 3 +- .../com/cloud/storage/GuestOSCategoryVO.java | 3 +- core/src/com/cloud/storage/GuestOSVO.java | 3 +- .../com/cloud/storage/LaunchPermissionVO.java | 6 ++-- core/src/com/cloud/storage/S3VO.java | 3 +- .../com/cloud/storage/SnapshotPolicyVO.java | 3 +- .../com/cloud/storage/SnapshotScheduleVO.java | 3 +- core/src/com/cloud/storage/SnapshotVO.java | 3 +- .../cloud/storage/StoragePoolDetailVO.java | 4 ++- .../com/cloud/storage/StoragePoolHostVO.java | 5 +-- core/src/com/cloud/storage/StoragePoolVO.java | 3 +- .../com/cloud/storage/StoragePoolWorkVO.java | 6 ++-- core/src/com/cloud/storage/SwiftVO.java | 3 +- core/src/com/cloud/storage/UploadVO.java | 3 +- .../com/cloud/storage/VMTemplateDetailVO.java | 4 ++- .../com/cloud/storage/VMTemplateHostVO.java | 3 +- .../src/com/cloud/storage/VMTemplateS3VO.java | 3 +- .../storage/VMTemplateStoragePoolVO.java | 3 +- .../com/cloud/storage/VMTemplateSwiftVO.java | 3 +- core/src/com/cloud/storage/VMTemplateVO.java | 3 +- .../com/cloud/storage/VMTemplateZoneVO.java | 5 +-- core/src/com/cloud/storage/VolumeHostVO.java | 3 +- core/src/com/cloud/storage/VolumeVO.java | 3 +- core/src/com/cloud/user/AccountVO.java | 3 +- core/src/com/cloud/user/SSHKeyPairVO.java | 4 ++- core/src/com/cloud/user/UserAccountVO.java | 5 +-- core/src/com/cloud/user/UserStatisticsVO.java | 6 ++-- core/src/com/cloud/user/UserVO.java | 3 +- .../com/cloud/vm/InstanceGroupVMMapVO.java | 6 ++-- core/src/com/cloud/vm/InstanceGroupVO.java | 3 +- core/src/com/cloud/vm/UserVmDetailVO.java | 4 ++- core/src/com/cloud/vm/VMInstanceVO.java | 7 ++-- .../netapp/src/com/cloud/netapp/LunVO.java | 6 ++-- .../src/com/cloud/netapp/NetappVolumeVO.java | 6 ++-- .../netapp/src/com/cloud/netapp/PoolVO.java | 6 ++-- .../cloud/simulator/MockConfigurationVO.java | 4 ++- .../src/com/cloud/simulator/MockHostVO.java | 4 ++- .../com/cloud/simulator/MockSecStorageVO.java | 4 ++- .../cloud/simulator/MockSecurityRulesVO.java | 4 ++- .../cloud/simulator/MockStoragePoolVO.java | 3 +- .../src/com/cloud/simulator/MockVMVO.java | 3 +- .../src/com/cloud/simulator/MockVolumeVO.java | 3 +- .../cloud/network/CiscoNexusVSMDeviceVO.java | 3 +- .../com/cloud/network/ElasticLbVmMapVO.java | 5 +-- .../src/com/cloud/network/NetScalerPodVO.java | 4 ++- .../cloud/network/NiciraNvpNicMappingVO.java | 4 ++- .../network/NiciraNvpRouterMappingVO.java | 4 ++- .../network/ovs/dao/OvsTunnelInterfaceVO.java | 4 ++- .../network/ovs/dao/OvsTunnelNetworkVO.java | 4 ++- .../api/query/vo/DomainRouterJoinVO.java | 3 +- .../com/cloud/api/query/vo/EventJoinVO.java | 3 +- .../com/cloud/api/query/vo/HostJoinVO.java | 3 +- .../api/query/vo/InstanceGroupJoinVO.java | 3 +- .../api/query/vo/ProjectAccountJoinVO.java | 3 +- .../api/query/vo/ProjectInvitationJoinVO.java | 3 +- .../com/cloud/api/query/vo/ProjectJoinVO.java | 3 +- .../cloud/api/query/vo/ResourceTagJoinVO.java | 3 +- .../api/query/vo/SecurityGroupJoinVO.java | 3 +- .../cloud/api/query/vo/UserAccountJoinVO.java | 3 +- .../com/cloud/api/query/vo/UserVmJoinVO.java | 3 +- .../com/cloud/api/query/vo/VolumeJoinVO.java | 3 +- .../src/com/cloud/cluster/CheckPointVO.java | 3 +- .../cluster/ManagementServerHostPeerVO.java | 3 +- .../cloud/cluster/ManagementServerHostVO.java | 3 +- .../cluster/agentlb/HostTransferMapVO.java | 3 +- server/src/com/cloud/dc/ClusterDetailsVO.java | 4 ++- server/src/com/cloud/dc/ClusterVO.java | 3 +- .../com/cloud/dc/DataCenterIpAddressVO.java | 6 ++-- .../dc/DataCenterLinkLocalIpAddressVO.java | 6 ++-- server/src/com/cloud/dc/DataCenterVO.java | 3 +- server/src/com/cloud/dc/DataCenterVnetVO.java | 4 ++- server/src/com/cloud/dc/DcDetailVO.java | 4 ++- server/src/com/cloud/dc/HostPodVO.java | 3 +- server/src/com/cloud/dc/PodVlanMapVO.java | 4 ++- server/src/com/cloud/dc/PodVlanVO.java | 6 ++-- .../cloud/dc/StorageNetworkIpAddressVO.java | 6 ++-- .../com/cloud/dc/StorageNetworkIpRangeVO.java | 4 ++- server/src/com/cloud/dc/VlanVO.java | 3 +- server/src/com/cloud/domain/DomainVO.java | 3 +- server/src/com/cloud/ha/HaWorkVO.java | 5 +-- server/src/com/cloud/keystore/KeystoreVO.java | 6 ++-- .../src/com/cloud/maint/AgentUpgradeVO.java | 4 ++- .../com/cloud/migration/DiskOffering20VO.java | 5 +-- .../com/cloud/migration/DiskOffering21VO.java | 3 +- .../cloud/migration/ServiceOffering20VO.java | 5 +-- .../network/ExternalFirewallDeviceVO.java | 4 ++- .../cloud/network/FirewallRulesCidrsVO.java | 6 ++-- server/src/com/cloud/network/IPAddressVO.java | 3 +- .../network/InlineLoadBalancerNicMapVO.java | 4 ++- .../cloud/network/LBStickinessPolicyVO.java | 3 +- .../cloud/network/LoadBalancerVMMapVO.java | 4 ++- .../network/NetworkExternalFirewallVO.java | 3 +- .../NetworkExternalLoadBalancerVO.java | 3 +- .../cloud/network/NetworkRuleConfigVO.java | 5 +-- .../cloud/network/NetworkServiceMapVO.java | 3 +- server/src/com/cloud/network/NetworkVO.java | 3 +- .../com/cloud/network/PhysicalNetworkVO.java | 3 +- .../src/com/cloud/network/PortProfileVO.java | 3 +- .../com/cloud/network/RouterNetworkVO.java | 3 +- .../network/Site2SiteCustomerGatewayVO.java | 3 +- .../network/Site2SiteVpnConnectionVO.java | 3 +- .../cloud/network/Site2SiteVpnGatewayVO.java | 3 +- .../as/AutoScalePolicyConditionMapVO.java | 36 ++++++++++--------- .../cloud/network/as/AutoScalePolicyVO.java | 35 +++++++++--------- .../as/AutoScaleVmGroupPolicyMapVO.java | 36 ++++++++++--------- .../cloud/network/as/AutoScaleVmGroupVO.java | 35 +++++++++--------- .../network/as/AutoScaleVmProfileVO.java | 3 +- .../src/com/cloud/network/as/ConditionVO.java | 3 +- .../src/com/cloud/network/as/CounterVO.java | 3 +- .../com/cloud/network/dao/NetworkOpVO.java | 4 ++- .../dao/PhysicalNetworkIsolationMethodVO.java | 4 ++- .../dao/PhysicalNetworkServiceProviderVO.java | 3 +- .../network/dao/PhysicalNetworkTagVO.java | 4 ++- .../dao/PhysicalNetworkTrafficTypeVO.java | 3 +- .../element/VirtualRouterProviderVO.java | 3 +- .../cloud/network/rules/FirewallRuleVO.java | 3 +- .../com/cloud/network/vpc/PrivateIpVO.java | 4 ++- .../com/cloud/network/vpc/StaticRouteVO.java | 3 +- .../com/cloud/network/vpc/VpcGatewayVO.java | 3 +- .../network/vpc/VpcOfferingServiceMapVO.java | 3 +- .../com/cloud/network/vpc/VpcOfferingVO.java | 3 +- server/src/com/cloud/network/vpc/VpcVO.java | 3 +- .../NetworkOfferingServiceMapVO.java | 3 +- .../cloud/offerings/NetworkOfferingVO.java | 3 +- .../com/cloud/projects/ProjectAccountVO.java | 3 +- .../cloud/projects/ProjectInvitationVO.java | 3 +- server/src/com/cloud/projects/ProjectVO.java | 3 +- .../cloud/secstorage/CommandExecLogVO.java | 3 +- server/src/com/cloud/tags/ResourceTagVO.java | 3 +- .../src/com/cloud/upgrade/dao/VersionVO.java | 4 ++- .../usage/ExternalPublicIpStatisticsVO.java | 6 ++-- .../src/com/cloud/usage/UsageIPAddressVO.java | 4 ++- server/src/com/cloud/usage/UsageJobVO.java | 6 ++-- .../usage/UsageLoadBalancerPolicyVO.java | 4 ++- .../usage/UsagePortForwardingRuleVO.java | 4 ++- .../src/com/cloud/usage/UsageStorageVO.java | 4 ++- server/src/com/cloud/usage/UsageVO.java | 6 ++-- server/src/com/cloud/usage/UsageVolumeVO.java | 4 ++- .../src/com/cloud/user/AccountDetailVO.java | 3 +- server/src/com/cloud/vm/NicVO.java | 3 +- 183 files changed, 532 insertions(+), 284 deletions(-) diff --git a/api/src/com/cloud/agent/api/storage/DownloadCommand.java b/api/src/com/cloud/agent/api/storage/DownloadCommand.java index 9245411888d..efb5ecb5256 100644 --- a/api/src/com/cloud/agent/api/storage/DownloadCommand.java +++ b/api/src/com/cloud/agent/api/storage/DownloadCommand.java @@ -21,9 +21,10 @@ import java.net.URI; import com.cloud.storage.Volume; import com.cloud.storage.Storage.ImageFormat; import com.cloud.template.VirtualMachineTemplate; +import org.apache.cloudstack.api.InternalIdentity; -public class DownloadCommand extends AbstractDownloadCommand { +public class DownloadCommand extends AbstractDownloadCommand implements InternalIdentity { public static class PasswordAuth { String userName; String password; diff --git a/api/src/com/cloud/agent/api/storage/UploadCommand.java b/api/src/com/cloud/agent/api/storage/UploadCommand.java index 02ca5d8b3a9..2a7c60a51ff 100644 --- a/api/src/com/cloud/agent/api/storage/UploadCommand.java +++ b/api/src/com/cloud/agent/api/storage/UploadCommand.java @@ -20,9 +20,10 @@ import com.cloud.agent.api.storage.DownloadCommand.PasswordAuth; import com.cloud.agent.api.to.TemplateTO; import com.cloud.storage.Upload.Type; import com.cloud.template.VirtualMachineTemplate; +import org.apache.cloudstack.api.InternalIdentity; -public class UploadCommand extends AbstractUploadCommand { +public class UploadCommand extends AbstractUploadCommand implements InternalIdentity { private TemplateTO template; private String url; diff --git a/api/src/com/cloud/agent/api/to/FirewallRuleTO.java b/api/src/com/cloud/agent/api/to/FirewallRuleTO.java index a361a6d9170..1f963ec9f2d 100644 --- a/api/src/com/cloud/agent/api/to/FirewallRuleTO.java +++ b/api/src/com/cloud/agent/api/to/FirewallRuleTO.java @@ -22,6 +22,7 @@ import java.util.List; import com.cloud.network.rules.FirewallRule; import com.cloud.network.rules.FirewallRule.State; import com.cloud.utils.net.NetUtils; +import org.apache.cloudstack.api.InternalIdentity; /** * FirewallRuleTO transfers a port range for an ip to be opened. @@ -37,7 +38,7 @@ import com.cloud.utils.net.NetUtils; * - protocol: protocol to open for. Usually tcp and udp. * */ -public class FirewallRuleTO { +public class FirewallRuleTO implements InternalIdentity { long id; String srcVlanTag; String srcIp; diff --git a/api/src/com/cloud/agent/api/to/NetworkACLTO.java b/api/src/com/cloud/agent/api/to/NetworkACLTO.java index 9930b75d7d9..9b1a6296b08 100644 --- a/api/src/com/cloud/agent/api/to/NetworkACLTO.java +++ b/api/src/com/cloud/agent/api/to/NetworkACLTO.java @@ -23,9 +23,10 @@ import java.util.List; import com.cloud.network.rules.FirewallRule; import com.cloud.network.rules.FirewallRule.TrafficType; import com.cloud.utils.net.NetUtils; +import org.apache.cloudstack.api.InternalIdentity; -public class NetworkACLTO { +public class NetworkACLTO implements InternalIdentity { long id; String vlanTag; String protocol; diff --git a/api/src/com/cloud/agent/api/to/TemplateTO.java b/api/src/com/cloud/agent/api/to/TemplateTO.java index 7598398835f..d77b80551f4 100644 --- a/api/src/com/cloud/agent/api/to/TemplateTO.java +++ b/api/src/com/cloud/agent/api/to/TemplateTO.java @@ -18,8 +18,9 @@ package com.cloud.agent.api.to; import com.cloud.storage.Storage.ImageFormat; import com.cloud.template.VirtualMachineTemplate; +import org.apache.cloudstack.api.InternalIdentity; -public class TemplateTO { +public class TemplateTO implements InternalIdentity { private long id; private String uniqueName; private ImageFormat format; diff --git a/api/src/com/cloud/agent/api/to/VolumeTO.java b/api/src/com/cloud/agent/api/to/VolumeTO.java index ca0acb57876..ff739c58f80 100644 --- a/api/src/com/cloud/agent/api/to/VolumeTO.java +++ b/api/src/com/cloud/agent/api/to/VolumeTO.java @@ -19,8 +19,9 @@ package com.cloud.agent.api.to; import com.cloud.storage.Storage.StoragePoolType; import com.cloud.storage.StoragePool; import com.cloud.storage.Volume; +import org.apache.cloudstack.api.InternalIdentity; -public class VolumeTO { +public class VolumeTO implements InternalIdentity { protected VolumeTO() { } diff --git a/api/src/com/cloud/async/AsyncJob.java b/api/src/com/cloud/async/AsyncJob.java index bea3e13d296..2fc70a60644 100644 --- a/api/src/com/cloud/async/AsyncJob.java +++ b/api/src/com/cloud/async/AsyncJob.java @@ -19,8 +19,9 @@ package com.cloud.async; import java.util.Date; import org.apache.cloudstack.api.Identity; +import org.apache.cloudstack.api.InternalIdentity; -public interface AsyncJob extends Identity { +public interface AsyncJob extends Identity, InternalIdentity { public enum Type { None, VirtualMachine, diff --git a/api/src/com/cloud/configuration/ResourceCount.java b/api/src/com/cloud/configuration/ResourceCount.java index d776a72d2b1..16c0c2eb484 100644 --- a/api/src/com/cloud/configuration/ResourceCount.java +++ b/api/src/com/cloud/configuration/ResourceCount.java @@ -16,9 +16,11 @@ // under the License. package com.cloud.configuration; -public interface ResourceCount extends Resource { +import org.apache.cloudstack.api.InternalIdentity; - public Long getId(); +public interface ResourceCount extends Resource, InternalIdentity { + + public long getId(); public long getCount(); diff --git a/api/src/com/cloud/configuration/ResourceLimit.java b/api/src/com/cloud/configuration/ResourceLimit.java index df47d09b484..d2d029a29bc 100644 --- a/api/src/com/cloud/configuration/ResourceLimit.java +++ b/api/src/com/cloud/configuration/ResourceLimit.java @@ -16,9 +16,11 @@ // under the License. package com.cloud.configuration; -public interface ResourceLimit extends Resource { +import org.apache.cloudstack.api.InternalIdentity; - public Long getId(); +public interface ResourceLimit extends Resource, InternalIdentity { + + public long getId(); public Long getMax(); diff --git a/api/src/com/cloud/dc/Pod.java b/api/src/com/cloud/dc/Pod.java index cce493d5ef7..0356f0f317c 100644 --- a/api/src/com/cloud/dc/Pod.java +++ b/api/src/com/cloud/dc/Pod.java @@ -17,12 +17,13 @@ package com.cloud.dc; import com.cloud.org.Grouping; +import org.apache.cloudstack.api.InternalIdentity; /** * Represents one pod in the cloud stack. * */ -public interface Pod extends Grouping { +public interface Pod extends Grouping, InternalIdentity { /** * @return unique id mapped to the pod. */ diff --git a/api/src/com/cloud/network/NetworkProfile.java b/api/src/com/cloud/network/NetworkProfile.java index b2707cf5617..3872a150dd2 100644 --- a/api/src/com/cloud/network/NetworkProfile.java +++ b/api/src/com/cloud/network/NetworkProfile.java @@ -21,8 +21,9 @@ import java.net.URI; import com.cloud.network.Networks.BroadcastDomainType; import com.cloud.network.Networks.Mode; import com.cloud.network.Networks.TrafficType; +import org.apache.cloudstack.api.InternalIdentity; -public class NetworkProfile implements Network { +public class NetworkProfile implements Network, InternalIdentity { private long id; private String uuid; private long dataCenterId; diff --git a/api/src/com/cloud/network/PhysicalNetworkServiceProvider.java b/api/src/com/cloud/network/PhysicalNetworkServiceProvider.java index 468cb90a82d..0a433dcbc05 100644 --- a/api/src/com/cloud/network/PhysicalNetworkServiceProvider.java +++ b/api/src/com/cloud/network/PhysicalNetworkServiceProvider.java @@ -19,11 +19,12 @@ package com.cloud.network; import java.util.List; import com.cloud.network.Network.Service; +import org.apache.cloudstack.api.InternalIdentity; /** * */ -public interface PhysicalNetworkServiceProvider { +public interface PhysicalNetworkServiceProvider extends InternalIdentity { public enum State { Disabled, diff --git a/api/src/com/cloud/network/PhysicalNetworkTrafficType.java b/api/src/com/cloud/network/PhysicalNetworkTrafficType.java index 44c4fbff05c..393b6a4c1cb 100644 --- a/api/src/com/cloud/network/PhysicalNetworkTrafficType.java +++ b/api/src/com/cloud/network/PhysicalNetworkTrafficType.java @@ -17,11 +17,12 @@ package com.cloud.network; import com.cloud.network.Networks.TrafficType; +import org.apache.cloudstack.api.InternalIdentity; /** * */ -public interface PhysicalNetworkTrafficType { +public interface PhysicalNetworkTrafficType extends InternalIdentity { long getId(); diff --git a/api/src/com/cloud/network/VirtualRouterProvider.java b/api/src/com/cloud/network/VirtualRouterProvider.java index 9992e3ce172..034652d9d24 100644 --- a/api/src/com/cloud/network/VirtualRouterProvider.java +++ b/api/src/com/cloud/network/VirtualRouterProvider.java @@ -16,7 +16,9 @@ // under the License. package com.cloud.network; -public interface VirtualRouterProvider { +import org.apache.cloudstack.api.InternalIdentity; + +public interface VirtualRouterProvider extends InternalIdentity { public enum VirtualRouterProviderType { VirtualRouter, ElasticLoadBalancerVm, diff --git a/api/src/com/cloud/network/lb/LoadBalancingRule.java b/api/src/com/cloud/network/lb/LoadBalancingRule.java index fb1d988a4de..3f37bdb628a 100644 --- a/api/src/com/cloud/network/lb/LoadBalancingRule.java +++ b/api/src/com/cloud/network/lb/LoadBalancingRule.java @@ -26,8 +26,9 @@ import com.cloud.network.as.Counter; import com.cloud.network.rules.FirewallRule; import com.cloud.network.rules.LoadBalancer; import com.cloud.utils.Pair; +import org.apache.cloudstack.api.InternalIdentity; -public class LoadBalancingRule implements FirewallRule, LoadBalancer { +public class LoadBalancingRule implements FirewallRule, LoadBalancer, InternalIdentity { private LoadBalancer lb; private List destinations; private List stickinessPolicies; diff --git a/api/src/com/cloud/network/vpc/StaticRouteProfile.java b/api/src/com/cloud/network/vpc/StaticRouteProfile.java index f7cd17c485f..9ef3c6621da 100644 --- a/api/src/com/cloud/network/vpc/StaticRouteProfile.java +++ b/api/src/com/cloud/network/vpc/StaticRouteProfile.java @@ -16,7 +16,9 @@ // under the License. package com.cloud.network.vpc; -public class StaticRouteProfile implements StaticRoute{ +import org.apache.cloudstack.api.InternalIdentity; + +public class StaticRouteProfile implements StaticRoute, InternalIdentity { private long id; private String uuid; private String targetCidr; diff --git a/api/src/com/cloud/network/vpc/VpcOffering.java b/api/src/com/cloud/network/vpc/VpcOffering.java index 2c2b6f58ab1..721b943479f 100644 --- a/api/src/com/cloud/network/vpc/VpcOffering.java +++ b/api/src/com/cloud/network/vpc/VpcOffering.java @@ -16,7 +16,9 @@ // under the License. package com.cloud.network.vpc; -public interface VpcOffering { +import org.apache.cloudstack.api.InternalIdentity; + +public interface VpcOffering extends InternalIdentity { public enum State { Disabled, Enabled diff --git a/api/src/com/cloud/offering/NetworkOffering.java b/api/src/com/cloud/offering/NetworkOffering.java index 8b4e7e210cd..4b8ffd34ee0 100644 --- a/api/src/com/cloud/offering/NetworkOffering.java +++ b/api/src/com/cloud/offering/NetworkOffering.java @@ -18,12 +18,13 @@ package com.cloud.offering; import com.cloud.network.Network.GuestType; import com.cloud.network.Networks.TrafficType; +import org.apache.cloudstack.api.InternalIdentity; /** * Describes network offering * */ -public interface NetworkOffering { +public interface NetworkOffering extends InternalIdentity { public enum Availability { Required, diff --git a/api/src/com/cloud/storage/Swift.java b/api/src/com/cloud/storage/Swift.java index 5af1999e311..9cd3a34cd59 100644 --- a/api/src/com/cloud/storage/Swift.java +++ b/api/src/com/cloud/storage/Swift.java @@ -17,8 +17,9 @@ package com.cloud.storage; import com.cloud.agent.api.to.SwiftTO; +import org.apache.cloudstack.api.InternalIdentity; -public interface Swift { +public interface Swift extends InternalIdentity { public long getId(); public String getUuid(); diff --git a/api/src/com/cloud/storage/Upload.java b/api/src/com/cloud/storage/Upload.java index d67c15f946e..c1abc4c389c 100755 --- a/api/src/com/cloud/storage/Upload.java +++ b/api/src/com/cloud/storage/Upload.java @@ -16,9 +16,11 @@ // under the License. package com.cloud.storage; +import org.apache.cloudstack.api.InternalIdentity; + import java.util.Date; -public interface Upload { +public interface Upload extends InternalIdentity { public static enum Status { UNKNOWN, ABANDONED, UPLOADED, NOT_UPLOADED, UPLOAD_ERROR, UPLOAD_IN_PROGRESS, NOT_COPIED, COPY_IN_PROGRESS, COPY_ERROR, COPY_COMPLETE, DOWNLOAD_URL_CREATED, DOWNLOAD_URL_NOT_CREATED, ERROR diff --git a/api/src/com/cloud/user/UserAccount.java b/api/src/com/cloud/user/UserAccount.java index 2a6bd4f33e3..c09b5c0fac5 100644 --- a/api/src/com/cloud/user/UserAccount.java +++ b/api/src/com/cloud/user/UserAccount.java @@ -16,10 +16,12 @@ // under the License. package com.cloud.user; +import org.apache.cloudstack.api.InternalIdentity; + import java.util.Date; -public interface UserAccount { - Long getId(); +public interface UserAccount extends InternalIdentity { + long getId(); String getUsername(); diff --git a/api/src/com/cloud/vm/NicProfile.java b/api/src/com/cloud/vm/NicProfile.java index bdd553bc29b..32e3f212e99 100644 --- a/api/src/com/cloud/vm/NicProfile.java +++ b/api/src/com/cloud/vm/NicProfile.java @@ -24,8 +24,9 @@ import com.cloud.network.Networks.BroadcastDomainType; import com.cloud.network.Networks.Mode; import com.cloud.network.Networks.TrafficType; import com.cloud.vm.Nic.ReservationStrategy; +import org.apache.cloudstack.api.InternalIdentity; -public class NicProfile { +public class NicProfile implements InternalIdentity { long id; long networkId; BroadcastDomainType broadcastType; diff --git a/core/src/com/cloud/alert/AlertVO.java b/core/src/com/cloud/alert/AlertVO.java index 7769d2d9e5f..7208b34d465 100755 --- a/core/src/com/cloud/alert/AlertVO.java +++ b/core/src/com/cloud/alert/AlertVO.java @@ -30,10 +30,11 @@ import javax.persistence.TemporalType; import org.apache.cloudstack.api.Identity; import com.cloud.utils.db.GenericDao; +import org.apache.cloudstack.api.InternalIdentity; @Entity @Table(name="alert") -public class AlertVO implements Alert, Identity { +public class AlertVO implements Alert, Identity, InternalIdentity { @Id @GeneratedValue(strategy=GenerationType.IDENTITY) @Column(name="id") diff --git a/core/src/com/cloud/async/SyncQueueItemVO.java b/core/src/com/cloud/async/SyncQueueItemVO.java index c3ef2f66711..b0546a72141 100644 --- a/core/src/com/cloud/async/SyncQueueItemVO.java +++ b/core/src/com/cloud/async/SyncQueueItemVO.java @@ -16,6 +16,8 @@ // under the License. package com.cloud.async; +import org.apache.cloudstack.api.InternalIdentity; + import java.util.Date; import javax.persistence.Column; @@ -29,7 +31,7 @@ import javax.persistence.TemporalType; @Entity @Table(name="sync_queue_item") -public class SyncQueueItemVO implements SyncQueueItem{ +public class SyncQueueItemVO implements SyncQueueItem, InternalIdentity { @Id @GeneratedValue(strategy=GenerationType.IDENTITY) @@ -58,7 +60,7 @@ public class SyncQueueItemVO implements SyncQueueItem{ @Column(name="created") private Date created; - public Long getId() { + public long getId() { return id; } diff --git a/core/src/com/cloud/async/SyncQueueVO.java b/core/src/com/cloud/async/SyncQueueVO.java index f70b320c786..4f2bc4fdf5b 100644 --- a/core/src/com/cloud/async/SyncQueueVO.java +++ b/core/src/com/cloud/async/SyncQueueVO.java @@ -17,6 +17,8 @@ package com.cloud.async; +import org.apache.cloudstack.api.InternalIdentity; + import java.util.Date; import javax.persistence.Column; import javax.persistence.Entity; @@ -29,7 +31,7 @@ import javax.persistence.TemporalType; @Entity @Table(name="sync_queue") -public class SyncQueueVO { +public class SyncQueueVO implements InternalIdentity { @Id @GeneratedValue(strategy=GenerationType.IDENTITY) @@ -60,7 +62,7 @@ public class SyncQueueVO { @Column(name="queue_size_limit") private long queueSizeLimit = 0; - public Long getId() { + public long getId() { return id; } diff --git a/core/src/com/cloud/capacity/CapacityVO.java b/core/src/com/cloud/capacity/CapacityVO.java index 1bf06ce8205..7a61252e9b2 100755 --- a/core/src/com/cloud/capacity/CapacityVO.java +++ b/core/src/com/cloud/capacity/CapacityVO.java @@ -29,10 +29,11 @@ import javax.persistence.Temporal; import javax.persistence.TemporalType; import com.cloud.utils.db.GenericDao; +import org.apache.cloudstack.api.InternalIdentity; @Entity @Table(name="op_host_capacity") -public class CapacityVO implements Capacity { +public class CapacityVO implements Capacity, InternalIdentity { @Id @GeneratedValue(strategy=GenerationType.IDENTITY) @Column(name="id") diff --git a/core/src/com/cloud/certificate/CertificateVO.java b/core/src/com/cloud/certificate/CertificateVO.java index 23c333146e7..4f0476092e4 100644 --- a/core/src/com/cloud/certificate/CertificateVO.java +++ b/core/src/com/cloud/certificate/CertificateVO.java @@ -16,6 +16,8 @@ // under the License. package com.cloud.certificate; +import org.apache.cloudstack.api.InternalIdentity; + import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; @@ -25,7 +27,7 @@ import javax.persistence.Table; @Entity @Table(name="certificate") -public class CertificateVO { +public class CertificateVO implements InternalIdentity { @Id @GeneratedValue(strategy=GenerationType.IDENTITY) @@ -40,7 +42,7 @@ public class CertificateVO { public CertificateVO() {} - public Long getId() { + public long getId() { return id; } diff --git a/core/src/com/cloud/configuration/ResourceCountVO.java b/core/src/com/cloud/configuration/ResourceCountVO.java index 7cf601e272a..88ad1a80e23 100644 --- a/core/src/com/cloud/configuration/ResourceCountVO.java +++ b/core/src/com/cloud/configuration/ResourceCountVO.java @@ -16,6 +16,8 @@ // under the License. package com.cloud.configuration; +import org.apache.cloudstack.api.InternalIdentity; + import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.EnumType; @@ -27,7 +29,7 @@ import javax.persistence.Table; @Entity @Table(name="resource_count") -public class ResourceCountVO implements ResourceCount { +public class ResourceCountVO implements ResourceCount, InternalIdentity { @Id @GeneratedValue(strategy=GenerationType.IDENTITY) @@ -62,7 +64,7 @@ public class ResourceCountVO implements ResourceCount { } @Override - public Long getId() { + public long getId() { return id; } diff --git a/core/src/com/cloud/configuration/ResourceLimitVO.java b/core/src/com/cloud/configuration/ResourceLimitVO.java index ff5397e1950..4aefa4e69ac 100644 --- a/core/src/com/cloud/configuration/ResourceLimitVO.java +++ b/core/src/com/cloud/configuration/ResourceLimitVO.java @@ -16,6 +16,8 @@ // under the License. package com.cloud.configuration; +import org.apache.cloudstack.api.InternalIdentity; + import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.EnumType; @@ -27,7 +29,7 @@ import javax.persistence.Table; @Entity @Table(name = "resource_limit") -public class ResourceLimitVO implements ResourceLimit { +public class ResourceLimitVO implements ResourceLimit, InternalIdentity { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @@ -62,7 +64,7 @@ public class ResourceLimitVO implements ResourceLimit { } @Override - public Long getId() { + public long getId() { return id; } diff --git a/core/src/com/cloud/event/EventVO.java b/core/src/com/cloud/event/EventVO.java index 5867e921eed..d91439bf618 100644 --- a/core/src/com/cloud/event/EventVO.java +++ b/core/src/com/cloud/event/EventVO.java @@ -31,10 +31,11 @@ import javax.persistence.Transient; import org.apache.cloudstack.api.Identity; import com.cloud.utils.db.GenericDao; +import org.apache.cloudstack.api.InternalIdentity; @Entity @Table(name="event") -public class EventVO implements Event, Identity { +public class EventVO implements Event, Identity, InternalIdentity { @Id @GeneratedValue(strategy=GenerationType.IDENTITY) @Column(name="id") diff --git a/core/src/com/cloud/event/UsageEvent.java b/core/src/com/cloud/event/UsageEvent.java index bf56f5e3fa9..0b0505065e5 100644 --- a/core/src/com/cloud/event/UsageEvent.java +++ b/core/src/com/cloud/event/UsageEvent.java @@ -16,9 +16,11 @@ // under the License. package com.cloud.event; +import org.apache.cloudstack.api.InternalIdentity; + import java.util.Date; -public interface UsageEvent { +public interface UsageEvent extends InternalIdentity { long getId(); String getType(); diff --git a/core/src/com/cloud/event/UsageEventVO.java b/core/src/com/cloud/event/UsageEventVO.java index 201892facef..ed34f01cd64 100644 --- a/core/src/com/cloud/event/UsageEventVO.java +++ b/core/src/com/cloud/event/UsageEventVO.java @@ -26,10 +26,11 @@ import javax.persistence.Id; import javax.persistence.Table; import com.cloud.utils.db.GenericDao; +import org.apache.cloudstack.api.InternalIdentity; @Entity @Table(name="usage_event") -public class UsageEventVO implements UsageEvent { +public class UsageEventVO implements UsageEvent, InternalIdentity { @Id @GeneratedValue(strategy=GenerationType.IDENTITY) @Column(name="id") diff --git a/core/src/com/cloud/host/DetailVO.java b/core/src/com/cloud/host/DetailVO.java index d7ee8142c5a..4e624905a47 100644 --- a/core/src/com/cloud/host/DetailVO.java +++ b/core/src/com/cloud/host/DetailVO.java @@ -16,6 +16,8 @@ // under the License. package com.cloud.host; +import org.apache.cloudstack.api.InternalIdentity; + import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; @@ -25,7 +27,7 @@ import javax.persistence.Table; @Entity @Table(name="host_details") -public class DetailVO { +public class DetailVO implements InternalIdentity { @Id @GeneratedValue(strategy=GenerationType.IDENTITY) @Column(name="id") diff --git a/core/src/com/cloud/host/HostTagVO.java b/core/src/com/cloud/host/HostTagVO.java index 7164d10df0c..b1f5ace99c0 100644 --- a/core/src/com/cloud/host/HostTagVO.java +++ b/core/src/com/cloud/host/HostTagVO.java @@ -16,6 +16,8 @@ // under the License. package com.cloud.host; +import org.apache.cloudstack.api.InternalIdentity; + import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; @@ -25,7 +27,7 @@ import javax.persistence.Table; @Entity @Table(name="host_tags") -public class HostTagVO { +public class HostTagVO implements InternalIdentity { @Id @GeneratedValue(strategy=GenerationType.IDENTITY) @Column(name="id") diff --git a/core/src/com/cloud/host/HostVO.java b/core/src/com/cloud/host/HostVO.java index 069b26345c6..92445a9430c 100755 --- a/core/src/com/cloud/host/HostVO.java +++ b/core/src/com/cloud/host/HostVO.java @@ -43,12 +43,13 @@ import com.cloud.resource.ResourceState; import com.cloud.storage.Storage.StoragePoolType; import com.cloud.utils.NumbersUtil; import com.cloud.utils.db.GenericDao; +import org.apache.cloudstack.api.InternalIdentity; @Entity @Table(name="host") @Inheritance(strategy=InheritanceType.TABLE_PER_CLASS) @DiscriminatorColumn(name="type", discriminatorType=DiscriminatorType.STRING, length=32) -public class HostVO implements Host, Identity { +public class HostVO implements Host, Identity, InternalIdentity { @Id @GeneratedValue(strategy=GenerationType.IDENTITY) @Column(name="id") diff --git a/core/src/com/cloud/hypervisor/HypervisorCapabilitiesVO.java b/core/src/com/cloud/hypervisor/HypervisorCapabilitiesVO.java index c5c67f96f5f..6e19f11a03f 100644 --- a/core/src/com/cloud/hypervisor/HypervisorCapabilitiesVO.java +++ b/core/src/com/cloud/hypervisor/HypervisorCapabilitiesVO.java @@ -30,10 +30,11 @@ import javax.persistence.Table; import org.apache.cloudstack.api.Identity; import com.cloud.hypervisor.Hypervisor.HypervisorType; import com.cloud.utils.NumbersUtil; +import org.apache.cloudstack.api.InternalIdentity; @Entity @Table(name="hypervisor_capabilities") -public class HypervisorCapabilitiesVO implements HypervisorCapabilities, Identity { +public class HypervisorCapabilitiesVO implements HypervisorCapabilities, Identity, InternalIdentity { @Id @GeneratedValue(strategy=GenerationType.IDENTITY) @Column(name="id") diff --git a/core/src/com/cloud/network/VpnUserVO.java b/core/src/com/cloud/network/VpnUserVO.java index 02c53683394..4d3266a3a0f 100644 --- a/core/src/com/cloud/network/VpnUserVO.java +++ b/core/src/com/cloud/network/VpnUserVO.java @@ -29,10 +29,11 @@ import javax.persistence.Table; import org.apache.cloudstack.api.Identity; import com.cloud.utils.db.Encrypt; +import org.apache.cloudstack.api.InternalIdentity; @Entity @Table(name=("vpn_users")) -public class VpnUserVO implements VpnUser, Identity { +public class VpnUserVO implements VpnUser, Identity, InternalIdentity { @Id @GeneratedValue(strategy=GenerationType.IDENTITY) @Column(name="id") diff --git a/core/src/com/cloud/network/security/SecurityGroupRuleVO.java b/core/src/com/cloud/network/security/SecurityGroupRuleVO.java index 7c223ee817f..0b26dd14412 100644 --- a/core/src/com/cloud/network/security/SecurityGroupRuleVO.java +++ b/core/src/com/cloud/network/security/SecurityGroupRuleVO.java @@ -29,10 +29,11 @@ import javax.persistence.Table; import com.cloud.async.AsyncInstanceCreateStatus; import com.google.gson.annotations.Expose; +import org.apache.cloudstack.api.InternalIdentity; @Entity @Table(name = ("security_group_rule")) -public class SecurityGroupRuleVO implements SecurityRule { +public class SecurityGroupRuleVO implements SecurityRule, InternalIdentity { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "id") diff --git a/core/src/com/cloud/network/security/SecurityGroupRulesVO.java b/core/src/com/cloud/network/security/SecurityGroupRulesVO.java index d322a79d304..eb58a5480e8 100644 --- a/core/src/com/cloud/network/security/SecurityGroupRulesVO.java +++ b/core/src/com/cloud/network/security/SecurityGroupRulesVO.java @@ -27,12 +27,13 @@ import javax.persistence.Table; import com.cloud.network.security.SecurityRule.SecurityRuleType; import com.cloud.utils.db.JoinType; +import org.apache.cloudstack.api.InternalIdentity; @Entity @Table(name = ("security_group")) @JoinType(type = "left") @SecondaryTable(name = "security_group_rule", pkJoinColumns = { @PrimaryKeyJoinColumn(name = "id", referencedColumnName = "security_group_id") }) -public class SecurityGroupRulesVO implements SecurityGroupRules { +public class SecurityGroupRulesVO implements SecurityGroupRules, InternalIdentity { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "id") diff --git a/core/src/com/cloud/network/security/SecurityGroupVMMapVO.java b/core/src/com/cloud/network/security/SecurityGroupVMMapVO.java index e3dd28108c8..75bde3321ce 100644 --- a/core/src/com/cloud/network/security/SecurityGroupVMMapVO.java +++ b/core/src/com/cloud/network/security/SecurityGroupVMMapVO.java @@ -27,13 +27,14 @@ import javax.persistence.SecondaryTables; import javax.persistence.Table; import com.cloud.vm.VirtualMachine.State; +import org.apache.cloudstack.api.InternalIdentity; @Entity @Table(name = ("security_group_vm_map")) @SecondaryTables({ @SecondaryTable(name = "nics", pkJoinColumns = { @PrimaryKeyJoinColumn(name = "instance_id", referencedColumnName = "instance_id") }), @SecondaryTable(name = "vm_instance", pkJoinColumns = { @PrimaryKeyJoinColumn(name = "instance_id", referencedColumnName = "id") }), @SecondaryTable(name = "security_group", pkJoinColumns = { @PrimaryKeyJoinColumn(name = "security_group_id", referencedColumnName = "id") }) }) -public class SecurityGroupVMMapVO { +public class SecurityGroupVMMapVO implements InternalIdentity { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "id") @@ -62,7 +63,7 @@ public class SecurityGroupVMMapVO { this.instanceId = instanceId; } - public Long getId() { + public long getId() { return id; } diff --git a/core/src/com/cloud/network/security/SecurityGroupVO.java b/core/src/com/cloud/network/security/SecurityGroupVO.java index 3d4aceaab13..00101661cd0 100644 --- a/core/src/com/cloud/network/security/SecurityGroupVO.java +++ b/core/src/com/cloud/network/security/SecurityGroupVO.java @@ -26,10 +26,11 @@ import javax.persistence.Id; import javax.persistence.Table; import org.apache.cloudstack.api.Identity; +import org.apache.cloudstack.api.InternalIdentity; @Entity @Table(name = ("security_group")) -public class SecurityGroupVO implements SecurityGroup, Identity { +public class SecurityGroupVO implements SecurityGroup, Identity, InternalIdentity { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "id") diff --git a/core/src/com/cloud/network/security/SecurityGroupWorkVO.java b/core/src/com/cloud/network/security/SecurityGroupWorkVO.java index b0c8ef3a463..33d30fb1d59 100644 --- a/core/src/com/cloud/network/security/SecurityGroupWorkVO.java +++ b/core/src/com/cloud/network/security/SecurityGroupWorkVO.java @@ -30,10 +30,11 @@ import javax.persistence.Temporal; import javax.persistence.TemporalType; import com.cloud.utils.db.GenericDao; +import org.apache.cloudstack.api.InternalIdentity; @Entity @Table(name="op_nwgrp_work") -public class SecurityGroupWorkVO implements SecurityGroupWork{ +public class SecurityGroupWorkVO implements SecurityGroupWork, InternalIdentity { @Id @@ -67,7 +68,7 @@ public class SecurityGroupWorkVO implements SecurityGroupWork{ protected SecurityGroupWorkVO() { } - public Long getId() { + public long getId() { return id; } diff --git a/core/src/com/cloud/network/security/VmRulesetLogVO.java b/core/src/com/cloud/network/security/VmRulesetLogVO.java index 709a3c97cd9..2090ce359e4 100644 --- a/core/src/com/cloud/network/security/VmRulesetLogVO.java +++ b/core/src/com/cloud/network/security/VmRulesetLogVO.java @@ -26,6 +26,7 @@ import javax.persistence.Id; import javax.persistence.Table; import com.cloud.utils.db.GenericDao; +import org.apache.cloudstack.api.InternalIdentity; /** * Records the intent to update a VM's ingress ruleset @@ -33,7 +34,7 @@ import com.cloud.utils.db.GenericDao; */ @Entity @Table(name="op_vm_ruleset_log") -public class VmRulesetLogVO { +public class VmRulesetLogVO implements InternalIdentity { @Id @GeneratedValue(strategy=GenerationType.IDENTITY) @Column(name="id") @@ -57,7 +58,7 @@ public class VmRulesetLogVO { this.instanceId = instanceId; } - public Long getId() { + public long getId() { return id; } diff --git a/core/src/com/cloud/storage/DiskOfferingVO.java b/core/src/com/cloud/storage/DiskOfferingVO.java index 8b3a2de2ec2..9dad8838c46 100755 --- a/core/src/com/cloud/storage/DiskOfferingVO.java +++ b/core/src/com/cloud/storage/DiskOfferingVO.java @@ -37,12 +37,13 @@ import javax.persistence.Transient; import org.apache.cloudstack.api.Identity; import com.cloud.offering.DiskOffering; import com.cloud.utils.db.GenericDao; +import org.apache.cloudstack.api.InternalIdentity; @Entity @Table(name="disk_offering") @Inheritance(strategy=InheritanceType.JOINED) @DiscriminatorColumn(name="type", discriminatorType=DiscriminatorType.STRING, length=32) -public class DiskOfferingVO implements DiskOffering, Identity { +public class DiskOfferingVO implements DiskOffering, Identity, InternalIdentity { public enum Type { Disk, Service diff --git a/core/src/com/cloud/storage/GuestOSCategoryVO.java b/core/src/com/cloud/storage/GuestOSCategoryVO.java index b67fb873f49..fa1b73db791 100644 --- a/core/src/com/cloud/storage/GuestOSCategoryVO.java +++ b/core/src/com/cloud/storage/GuestOSCategoryVO.java @@ -26,10 +26,11 @@ import javax.persistence.Id; import javax.persistence.Table; import org.apache.cloudstack.api.Identity; +import org.apache.cloudstack.api.InternalIdentity; @Entity @Table(name="guest_os_category") -public class GuestOSCategoryVO implements GuestOsCategory, Identity { +public class GuestOSCategoryVO implements GuestOsCategory, Identity, InternalIdentity { @Id @GeneratedValue(strategy=GenerationType.IDENTITY) @Column(name="id") diff --git a/core/src/com/cloud/storage/GuestOSVO.java b/core/src/com/cloud/storage/GuestOSVO.java index 4281917298d..5f3e4a939c1 100644 --- a/core/src/com/cloud/storage/GuestOSVO.java +++ b/core/src/com/cloud/storage/GuestOSVO.java @@ -26,10 +26,11 @@ import javax.persistence.Id; import javax.persistence.Table; import org.apache.cloudstack.api.Identity; +import org.apache.cloudstack.api.InternalIdentity; @Entity @Table(name="guest_os") -public class GuestOSVO implements GuestOS, Identity { +public class GuestOSVO implements GuestOS, Identity, InternalIdentity { @Id @GeneratedValue(strategy=GenerationType.IDENTITY) @Column(name="id") diff --git a/core/src/com/cloud/storage/LaunchPermissionVO.java b/core/src/com/cloud/storage/LaunchPermissionVO.java index 8bfe09d3719..992bac2365e 100644 --- a/core/src/com/cloud/storage/LaunchPermissionVO.java +++ b/core/src/com/cloud/storage/LaunchPermissionVO.java @@ -16,6 +16,8 @@ // under the License. package com.cloud.storage; +import org.apache.cloudstack.api.InternalIdentity; + import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.Id; @@ -23,7 +25,7 @@ import javax.persistence.Table; @Entity @Table(name="launch_permission") -public class LaunchPermissionVO { +public class LaunchPermissionVO implements InternalIdentity { @Id @Column(name="id") private Long id; @@ -41,7 +43,7 @@ public class LaunchPermissionVO { this.accountId = accountId; } - public Long getId() { + public long getId() { return id; } diff --git a/core/src/com/cloud/storage/S3VO.java b/core/src/com/cloud/storage/S3VO.java index ab16b2a512b..3017f7e7436 100644 --- a/core/src/com/cloud/storage/S3VO.java +++ b/core/src/com/cloud/storage/S3VO.java @@ -21,6 +21,7 @@ package com.cloud.storage; import com.cloud.agent.api.to.S3TO; import com.cloud.utils.db.GenericDao; import org.apache.cloudstack.api.Identity; +import org.apache.cloudstack.api.InternalIdentity; import javax.persistence.Column; import javax.persistence.Entity; @@ -32,7 +33,7 @@ import java.util.Date; @Entity @Table(name = "s3") -public class S3VO implements S3, Identity { +public class S3VO implements S3, Identity, InternalIdentity { public static final String ID_COLUMN_NAME = "id"; diff --git a/core/src/com/cloud/storage/SnapshotPolicyVO.java b/core/src/com/cloud/storage/SnapshotPolicyVO.java index e5b0cb5770a..2240ec53ef5 100644 --- a/core/src/com/cloud/storage/SnapshotPolicyVO.java +++ b/core/src/com/cloud/storage/SnapshotPolicyVO.java @@ -28,10 +28,11 @@ import javax.persistence.Table; import org.apache.cloudstack.api.Identity; import com.cloud.storage.snapshot.SnapshotPolicy; import com.cloud.utils.DateUtil.IntervalType; +import org.apache.cloudstack.api.InternalIdentity; @Entity @Table(name="snapshot_policy") -public class SnapshotPolicyVO implements SnapshotPolicy{ +public class SnapshotPolicyVO implements SnapshotPolicy, InternalIdentity { @Id @GeneratedValue(strategy=GenerationType.IDENTITY) diff --git a/core/src/com/cloud/storage/SnapshotScheduleVO.java b/core/src/com/cloud/storage/SnapshotScheduleVO.java index 4b89c6f6e68..80966b33951 100644 --- a/core/src/com/cloud/storage/SnapshotScheduleVO.java +++ b/core/src/com/cloud/storage/SnapshotScheduleVO.java @@ -30,10 +30,11 @@ import javax.persistence.TemporalType; import org.apache.cloudstack.api.Identity; import com.cloud.storage.snapshot.SnapshotSchedule; +import org.apache.cloudstack.api.InternalIdentity; @Entity @Table(name="snapshot_schedule") -public class SnapshotScheduleVO implements SnapshotSchedule { +public class SnapshotScheduleVO implements SnapshotSchedule, InternalIdentity { @Id @GeneratedValue(strategy=GenerationType.IDENTITY) diff --git a/core/src/com/cloud/storage/SnapshotVO.java b/core/src/com/cloud/storage/SnapshotVO.java index 885a4795ad3..44d97f53df4 100644 --- a/core/src/com/cloud/storage/SnapshotVO.java +++ b/core/src/com/cloud/storage/SnapshotVO.java @@ -32,10 +32,11 @@ import org.apache.cloudstack.api.Identity; import com.cloud.hypervisor.Hypervisor.HypervisorType; import com.cloud.utils.db.GenericDao; import com.google.gson.annotations.Expose; +import org.apache.cloudstack.api.InternalIdentity; @Entity @Table(name="snapshots") -public class SnapshotVO implements Snapshot, Identity { +public class SnapshotVO implements Snapshot, Identity, InternalIdentity { @Id @GeneratedValue(strategy=GenerationType.IDENTITY) diff --git a/core/src/com/cloud/storage/StoragePoolDetailVO.java b/core/src/com/cloud/storage/StoragePoolDetailVO.java index 2e1af7b6dab..48487e566ac 100644 --- a/core/src/com/cloud/storage/StoragePoolDetailVO.java +++ b/core/src/com/cloud/storage/StoragePoolDetailVO.java @@ -16,6 +16,8 @@ // under the License. package com.cloud.storage; +import org.apache.cloudstack.api.InternalIdentity; + import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; @@ -25,7 +27,7 @@ import javax.persistence.Table; @Entity @Table(name="storage_pool_details") -public class StoragePoolDetailVO { +public class StoragePoolDetailVO implements InternalIdentity { @Id @GeneratedValue(strategy=GenerationType.IDENTITY) @Column(name="id") diff --git a/core/src/com/cloud/storage/StoragePoolHostVO.java b/core/src/com/cloud/storage/StoragePoolHostVO.java index 41c7ce853e6..a50e3ebdcf8 100644 --- a/core/src/com/cloud/storage/StoragePoolHostVO.java +++ b/core/src/com/cloud/storage/StoragePoolHostVO.java @@ -28,6 +28,7 @@ import javax.persistence.Temporal; import javax.persistence.TemporalType; import com.cloud.utils.db.GenericDaoBase; +import org.apache.cloudstack.api.InternalIdentity; /** * Join table for storage pools and hosts @@ -35,7 +36,7 @@ import com.cloud.utils.db.GenericDaoBase; */ @Entity @Table(name="storage_pool_host_ref") -public class StoragePoolHostVO implements StoragePoolHostAssoc { +public class StoragePoolHostVO implements StoragePoolHostAssoc, InternalIdentity { @Id @GeneratedValue(strategy=GenerationType.IDENTITY) private Long id; @@ -75,7 +76,7 @@ public class StoragePoolHostVO implements StoragePoolHostAssoc { } - public Long getId() { + public long getId() { return id; } diff --git a/core/src/com/cloud/storage/StoragePoolVO.java b/core/src/com/cloud/storage/StoragePoolVO.java index 9ed9f7e3176..343e440e1fa 100644 --- a/core/src/com/cloud/storage/StoragePoolVO.java +++ b/core/src/com/cloud/storage/StoragePoolVO.java @@ -33,10 +33,11 @@ import javax.persistence.Transient; import org.apache.cloudstack.api.Identity; import com.cloud.storage.Storage.StoragePoolType; import com.cloud.utils.db.GenericDao; +import org.apache.cloudstack.api.InternalIdentity; @Entity @Table(name="storage_pool") -public class StoragePoolVO implements StoragePool, Identity { +public class StoragePoolVO implements StoragePool, Identity, InternalIdentity { @Id @TableGenerator(name="storage_pool_sq", table="sequence", pkColumnName="name", valueColumnName="value", pkColumnValue="storage_pool_seq", allocationSize=1) @Column(name="id", updatable=false, nullable = false) diff --git a/core/src/com/cloud/storage/StoragePoolWorkVO.java b/core/src/com/cloud/storage/StoragePoolWorkVO.java index c5101eabb85..440065da66b 100644 --- a/core/src/com/cloud/storage/StoragePoolWorkVO.java +++ b/core/src/com/cloud/storage/StoragePoolWorkVO.java @@ -16,6 +16,8 @@ // under the License. package com.cloud.storage; +import org.apache.cloudstack.api.InternalIdentity; + import javax.persistence.Column; import javax.persistence.Entity; @@ -26,9 +28,9 @@ import javax.persistence.Table; @Entity @Table(name="storage_pool_work") -public class StoragePoolWorkVO { +public class StoragePoolWorkVO implements InternalIdentity { - public Long getId() { + public long getId() { return id; } diff --git a/core/src/com/cloud/storage/SwiftVO.java b/core/src/com/cloud/storage/SwiftVO.java index 239bd75ead3..c99f0efc702 100644 --- a/core/src/com/cloud/storage/SwiftVO.java +++ b/core/src/com/cloud/storage/SwiftVO.java @@ -29,10 +29,11 @@ import javax.persistence.Table; import com.cloud.agent.api.to.SwiftTO; import org.apache.cloudstack.api.Identity; import com.cloud.utils.db.GenericDao; +import org.apache.cloudstack.api.InternalIdentity; @Entity @Table(name="swift") -public class SwiftVO implements Swift { +public class SwiftVO implements Swift, InternalIdentity { @Id @GeneratedValue(strategy=GenerationType.IDENTITY) diff --git a/core/src/com/cloud/storage/UploadVO.java b/core/src/com/cloud/storage/UploadVO.java index 65555178890..be2b642f215 100755 --- a/core/src/com/cloud/storage/UploadVO.java +++ b/core/src/com/cloud/storage/UploadVO.java @@ -32,10 +32,11 @@ import javax.persistence.TemporalType; import com.cloud.utils.NumbersUtil; import com.cloud.utils.db.GenericDaoBase; +import org.apache.cloudstack.api.InternalIdentity; @Entity @Table(name="upload") -public class UploadVO implements Upload { +public class UploadVO implements Upload, InternalIdentity { @Id @GeneratedValue(strategy=GenerationType.IDENTITY) long id; diff --git a/core/src/com/cloud/storage/VMTemplateDetailVO.java b/core/src/com/cloud/storage/VMTemplateDetailVO.java index e3f7487460f..c007802db3f 100644 --- a/core/src/com/cloud/storage/VMTemplateDetailVO.java +++ b/core/src/com/cloud/storage/VMTemplateDetailVO.java @@ -16,6 +16,8 @@ // under the License. package com.cloud.storage; +import org.apache.cloudstack.api.InternalIdentity; + import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; @@ -25,7 +27,7 @@ import javax.persistence.Table; @Entity @Table(name="vm_template_details") -public class VMTemplateDetailVO { +public class VMTemplateDetailVO implements InternalIdentity { @Id @GeneratedValue(strategy=GenerationType.IDENTITY) @Column(name="id") diff --git a/core/src/com/cloud/storage/VMTemplateHostVO.java b/core/src/com/cloud/storage/VMTemplateHostVO.java index 9c85dd2cc6c..e07a9b9639e 100755 --- a/core/src/com/cloud/storage/VMTemplateHostVO.java +++ b/core/src/com/cloud/storage/VMTemplateHostVO.java @@ -30,6 +30,7 @@ import javax.persistence.Temporal; import javax.persistence.TemporalType; import com.cloud.utils.db.GenericDaoBase; +import org.apache.cloudstack.api.InternalIdentity; /** * Join table for storage hosts and templates @@ -37,7 +38,7 @@ import com.cloud.utils.db.GenericDaoBase; */ @Entity @Table(name="template_host_ref") -public class VMTemplateHostVO implements VMTemplateStorageResourceAssoc { +public class VMTemplateHostVO implements VMTemplateStorageResourceAssoc, InternalIdentity { @Id @GeneratedValue(strategy=GenerationType.IDENTITY) Long id; diff --git a/core/src/com/cloud/storage/VMTemplateS3VO.java b/core/src/com/cloud/storage/VMTemplateS3VO.java index a75c37d192d..02f3ff5cf7f 100644 --- a/core/src/com/cloud/storage/VMTemplateS3VO.java +++ b/core/src/com/cloud/storage/VMTemplateS3VO.java @@ -19,6 +19,7 @@ package com.cloud.storage; import com.cloud.utils.db.GenericDaoBase; +import org.apache.cloudstack.api.InternalIdentity; import javax.persistence.Column; import javax.persistence.Entity; @@ -32,7 +33,7 @@ import java.util.Date; @Entity @Table(name = "template_s3_ref") -public class VMTemplateS3VO { +public class VMTemplateS3VO implements InternalIdentity { public static final String S3_ID_COLUMN_NAME = "s3_id"; diff --git a/core/src/com/cloud/storage/VMTemplateStoragePoolVO.java b/core/src/com/cloud/storage/VMTemplateStoragePoolVO.java index f497c099f2b..cb8c7aa2a29 100644 --- a/core/src/com/cloud/storage/VMTemplateStoragePoolVO.java +++ b/core/src/com/cloud/storage/VMTemplateStoragePoolVO.java @@ -30,6 +30,7 @@ import javax.persistence.Temporal; import javax.persistence.TemporalType; import com.cloud.utils.db.GenericDaoBase; +import org.apache.cloudstack.api.InternalIdentity; /** * Join table for storage pools and templates @@ -37,7 +38,7 @@ import com.cloud.utils.db.GenericDaoBase; */ @Entity @Table(name="template_spool_ref") -public class VMTemplateStoragePoolVO implements VMTemplateStorageResourceAssoc{ +public class VMTemplateStoragePoolVO implements VMTemplateStorageResourceAssoc, InternalIdentity { @Id @GeneratedValue(strategy=GenerationType.IDENTITY) long id; diff --git a/core/src/com/cloud/storage/VMTemplateSwiftVO.java b/core/src/com/cloud/storage/VMTemplateSwiftVO.java index a009e237943..6c7a73d3c05 100755 --- a/core/src/com/cloud/storage/VMTemplateSwiftVO.java +++ b/core/src/com/cloud/storage/VMTemplateSwiftVO.java @@ -26,6 +26,7 @@ import javax.persistence.Id; import javax.persistence.Table; import com.cloud.utils.db.GenericDaoBase; +import org.apache.cloudstack.api.InternalIdentity; /** * Join table for swift and templates @@ -34,7 +35,7 @@ import com.cloud.utils.db.GenericDaoBase; */ @Entity @Table(name = "template_swift_ref") -public class VMTemplateSwiftVO { +public class VMTemplateSwiftVO implements InternalIdentity { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) Long id; diff --git a/core/src/com/cloud/storage/VMTemplateVO.java b/core/src/com/cloud/storage/VMTemplateVO.java index fdfd5a1abe4..aa089ac8c3f 100755 --- a/core/src/com/cloud/storage/VMTemplateVO.java +++ b/core/src/com/cloud/storage/VMTemplateVO.java @@ -37,10 +37,11 @@ import com.cloud.storage.Storage.ImageFormat; import com.cloud.storage.Storage.TemplateType; import com.cloud.template.VirtualMachineTemplate; import com.cloud.utils.db.GenericDao; +import org.apache.cloudstack.api.InternalIdentity; @Entity @Table(name="vm_template") -public class VMTemplateVO implements VirtualMachineTemplate { +public class VMTemplateVO implements VirtualMachineTemplate, InternalIdentity { @Id @TableGenerator(name="vm_template_sq", table="sequence", pkColumnName="name", valueColumnName="value", pkColumnValue="vm_template_seq", allocationSize=1) @Column(name="id", nullable = false) diff --git a/core/src/com/cloud/storage/VMTemplateZoneVO.java b/core/src/com/cloud/storage/VMTemplateZoneVO.java index e7169b8cdae..93a67b565d4 100644 --- a/core/src/com/cloud/storage/VMTemplateZoneVO.java +++ b/core/src/com/cloud/storage/VMTemplateZoneVO.java @@ -29,10 +29,11 @@ import javax.persistence.TemporalType; import com.cloud.utils.db.GenericDao; import com.cloud.utils.db.GenericDaoBase; +import org.apache.cloudstack.api.InternalIdentity; @Entity @Table(name="template_zone_ref") -public class VMTemplateZoneVO { +public class VMTemplateZoneVO implements InternalIdentity { @Id @GeneratedValue(strategy=GenerationType.IDENTITY) Long id; @@ -64,7 +65,7 @@ public class VMTemplateZoneVO { this.lastUpdated = lastUpdated; } - public Long getId() { + public long getId() { return id; } diff --git a/core/src/com/cloud/storage/VolumeHostVO.java b/core/src/com/cloud/storage/VolumeHostVO.java index d3d88ae27a8..f4fc7abc4ee 100755 --- a/core/src/com/cloud/storage/VolumeHostVO.java +++ b/core/src/com/cloud/storage/VolumeHostVO.java @@ -33,6 +33,7 @@ import javax.persistence.TemporalType; import com.cloud.storage.Storage.ImageFormat; import com.cloud.storage.VMTemplateStorageResourceAssoc.Status; import com.cloud.utils.db.GenericDaoBase; +import org.apache.cloudstack.api.InternalIdentity; /** * Join table for storage hosts and volumes @@ -40,7 +41,7 @@ import com.cloud.utils.db.GenericDaoBase; */ @Entity @Table(name="volume_host_ref") -public class VolumeHostVO { +public class VolumeHostVO implements InternalIdentity { @Id @GeneratedValue(strategy=GenerationType.IDENTITY) Long id; diff --git a/core/src/com/cloud/storage/VolumeVO.java b/core/src/com/cloud/storage/VolumeVO.java index d541b9427ea..070fb64b776 100755 --- a/core/src/com/cloud/storage/VolumeVO.java +++ b/core/src/com/cloud/storage/VolumeVO.java @@ -35,10 +35,11 @@ import org.apache.cloudstack.api.Identity; import com.cloud.storage.Storage.StoragePoolType; import com.cloud.utils.NumbersUtil; import com.cloud.utils.db.GenericDao; +import org.apache.cloudstack.api.InternalIdentity; @Entity @Table(name = "volumes") -public class VolumeVO implements Volume, Identity { +public class VolumeVO implements Volume, Identity, InternalIdentity { @Id @TableGenerator(name = "volume_sq", table = "sequence", pkColumnName = "name", valueColumnName = "value", pkColumnValue = "volume_seq", allocationSize = 1) @GeneratedValue(strategy = GenerationType.TABLE) diff --git a/core/src/com/cloud/user/AccountVO.java b/core/src/com/cloud/user/AccountVO.java index 5958d492a0a..d7228e6c091 100644 --- a/core/src/com/cloud/user/AccountVO.java +++ b/core/src/com/cloud/user/AccountVO.java @@ -30,10 +30,11 @@ import javax.persistence.Table; import org.apache.cloudstack.api.Identity; import com.cloud.utils.db.GenericDao; +import org.apache.cloudstack.api.InternalIdentity; @Entity @Table(name="account") -public class AccountVO implements Account, Identity { +public class AccountVO implements Account, Identity, InternalIdentity { @Id @GeneratedValue(strategy=GenerationType.IDENTITY) @Column(name="id") diff --git a/core/src/com/cloud/user/SSHKeyPairVO.java b/core/src/com/cloud/user/SSHKeyPairVO.java index 0e13dc54c00..025e858f8a0 100644 --- a/core/src/com/cloud/user/SSHKeyPairVO.java +++ b/core/src/com/cloud/user/SSHKeyPairVO.java @@ -16,6 +16,8 @@ // under the License. package com.cloud.user; +import org.apache.cloudstack.api.InternalIdentity; + import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; @@ -26,7 +28,7 @@ import javax.persistence.Transient; @Entity @Table(name="ssh_keypairs") -public class SSHKeyPairVO implements SSHKeyPair { +public class SSHKeyPairVO implements SSHKeyPair, InternalIdentity { @Id @GeneratedValue(strategy=GenerationType.IDENTITY) diff --git a/core/src/com/cloud/user/UserAccountVO.java b/core/src/com/cloud/user/UserAccountVO.java index 1236061475b..cfad6171e55 100644 --- a/core/src/com/cloud/user/UserAccountVO.java +++ b/core/src/com/cloud/user/UserAccountVO.java @@ -29,12 +29,13 @@ import javax.persistence.Table; import com.cloud.utils.db.Encrypt; import com.cloud.utils.db.GenericDao; +import org.apache.cloudstack.api.InternalIdentity; @Entity @Table(name="user") @SecondaryTable(name="account", pkJoinColumns={@PrimaryKeyJoinColumn(name="account_id", referencedColumnName="id")}) -public class UserAccountVO implements UserAccount { +public class UserAccountVO implements UserAccount, InternalIdentity { @Id @GeneratedValue(strategy=GenerationType.IDENTITY) @Column(name="id") @@ -101,7 +102,7 @@ public class UserAccountVO implements UserAccount { public UserAccountVO() {} @Override - public Long getId() { + public long getId() { return id; } diff --git a/core/src/com/cloud/user/UserStatisticsVO.java b/core/src/com/cloud/user/UserStatisticsVO.java index d560c3e6dad..eb59a74f8aa 100644 --- a/core/src/com/cloud/user/UserStatisticsVO.java +++ b/core/src/com/cloud/user/UserStatisticsVO.java @@ -16,6 +16,8 @@ // under the License. package com.cloud.user; +import org.apache.cloudstack.api.InternalIdentity; + import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; @@ -25,7 +27,7 @@ import javax.persistence.Table; @Entity @Table(name="user_statistics") -public class UserStatisticsVO { +public class UserStatisticsVO implements InternalIdentity { @Id @GeneratedValue(strategy=GenerationType.IDENTITY) @Column(name="id") @@ -88,7 +90,7 @@ public class UserStatisticsVO { return accountId; } - public Long getId() { + public long getId() { return id; } diff --git a/core/src/com/cloud/user/UserVO.java b/core/src/com/cloud/user/UserVO.java index 99dd51bff9b..919f4134e06 100644 --- a/core/src/com/cloud/user/UserVO.java +++ b/core/src/com/cloud/user/UserVO.java @@ -32,6 +32,7 @@ import org.apache.cloudstack.api.Identity; import com.cloud.user.Account.State; import com.cloud.utils.db.Encrypt; import com.cloud.utils.db.GenericDao; +import org.apache.cloudstack.api.InternalIdentity; /** * A bean representing a user @@ -39,7 +40,7 @@ import com.cloud.utils.db.GenericDao; */ @Entity @Table(name = "user") -public class UserVO implements User, Identity { +public class UserVO implements User, Identity, InternalIdentity { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "id") diff --git a/core/src/com/cloud/vm/InstanceGroupVMMapVO.java b/core/src/com/cloud/vm/InstanceGroupVMMapVO.java index 09cfd9c6070..996655da57e 100644 --- a/core/src/com/cloud/vm/InstanceGroupVMMapVO.java +++ b/core/src/com/cloud/vm/InstanceGroupVMMapVO.java @@ -16,6 +16,8 @@ // under the License. package com.cloud.vm; +import org.apache.cloudstack.api.InternalIdentity; + import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; @@ -34,7 +36,7 @@ import javax.persistence.Table; @SecondaryTable(name="instance_group", pkJoinColumns={@PrimaryKeyJoinColumn(name="group_id", referencedColumnName="id")}) }) -public class InstanceGroupVMMapVO { +public class InstanceGroupVMMapVO implements InternalIdentity { @Id @GeneratedValue(strategy=GenerationType.IDENTITY) @Column(name="id") @@ -54,7 +56,7 @@ public class InstanceGroupVMMapVO { this.instanceId = instanceId; } - public Long getId() { + public long getId() { return id; } diff --git a/core/src/com/cloud/vm/InstanceGroupVO.java b/core/src/com/cloud/vm/InstanceGroupVO.java index f87676a2487..39bebb16d1b 100644 --- a/core/src/com/cloud/vm/InstanceGroupVO.java +++ b/core/src/com/cloud/vm/InstanceGroupVO.java @@ -30,12 +30,13 @@ import javax.persistence.Table; import org.apache.cloudstack.api.Identity; import com.cloud.utils.db.GenericDao; +import org.apache.cloudstack.api.InternalIdentity; @Entity @Table(name="instance_group") @SecondaryTable(name="account", pkJoinColumns={@PrimaryKeyJoinColumn(name="account_id", referencedColumnName="id")}) -public class InstanceGroupVO implements InstanceGroup, Identity { +public class InstanceGroupVO implements InstanceGroup, Identity, InternalIdentity { @Id @GeneratedValue(strategy=GenerationType.IDENTITY) @Column(name="id") diff --git a/core/src/com/cloud/vm/UserVmDetailVO.java b/core/src/com/cloud/vm/UserVmDetailVO.java index bf2f32351a1..245b577bc39 100644 --- a/core/src/com/cloud/vm/UserVmDetailVO.java +++ b/core/src/com/cloud/vm/UserVmDetailVO.java @@ -16,6 +16,8 @@ // under the License. package com.cloud.vm; +import org.apache.cloudstack.api.InternalIdentity; + import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; @@ -25,7 +27,7 @@ import javax.persistence.Table; @Entity @Table(name="user_vm_details") -public class UserVmDetailVO { +public class UserVmDetailVO implements InternalIdentity { @Id @GeneratedValue(strategy=GenerationType.IDENTITY) @Column(name="id") diff --git a/core/src/com/cloud/vm/VMInstanceVO.java b/core/src/com/cloud/vm/VMInstanceVO.java index 8cb5816724d..cd5d581268a 100644 --- a/core/src/com/cloud/vm/VMInstanceVO.java +++ b/core/src/com/cloud/vm/VMInstanceVO.java @@ -42,12 +42,13 @@ import com.cloud.utils.db.GenericDao; import com.cloud.utils.db.StateMachine; import com.cloud.utils.fsm.FiniteStateObject; import com.cloud.vm.VirtualMachine.State; +import org.apache.cloudstack.api.InternalIdentity; @Entity @Table(name="vm_instance") @Inheritance(strategy=InheritanceType.JOINED) @DiscriminatorColumn(name="type", discriminatorType=DiscriminatorType.STRING, length=32) -public class VMInstanceVO implements VirtualMachine, FiniteStateObject { +public class VMInstanceVO implements VirtualMachine, InternalIdentity, FiniteStateObject { @Id @TableGenerator(name="vm_instance_sq", table="sequence", pkColumnName="name", valueColumnName="value", pkColumnValue="vm_instance_seq", allocationSize=1) @Column(name="id", updatable=false, nullable = false) @@ -470,5 +471,5 @@ public class VMInstanceVO implements VirtualMachine, FiniteStateObject Date: Wed, 26 Dec 2012 15:34:35 -0800 Subject: [PATCH 220/421] Rename @Entity to @EntityReference used in Response classes - Renames to @EntityReference as @Entity is too general and used in javax's pkg - Remove redundant imports Signed-off-by: Rohit Yadav --- .../cloudstack/api/{Entity.java => EntityReference.java} | 4 ++-- .../org/apache/cloudstack/api/response/AccountResponse.java | 5 ++--- .../org/apache/cloudstack/api/response/AlertResponse.java | 4 ++-- .../apache/cloudstack/api/response/AsyncJobResponse.java | 4 ++-- .../cloudstack/api/response/AutoScalePolicyResponse.java | 4 ++-- .../cloudstack/api/response/AutoScaleVmGroupResponse.java | 5 ++--- .../cloudstack/api/response/AutoScaleVmProfileResponse.java | 4 ++-- .../org/apache/cloudstack/api/response/ClusterResponse.java | 6 ++---- .../apache/cloudstack/api/response/ConditionResponse.java | 4 ++-- .../org/apache/cloudstack/api/response/CounterResponse.java | 4 ++-- .../cloudstack/api/response/DiskOfferingResponse.java | 4 ++-- .../org/apache/cloudstack/api/response/DomainResponse.java | 5 ++--- .../cloudstack/api/response/DomainRouterResponse.java | 4 ++-- .../org/apache/cloudstack/api/response/EventResponse.java | 4 ++-- .../cloudstack/api/response/FirewallRuleResponse.java | 4 ++-- .../cloudstack/api/response/GuestOSCategoryResponse.java | 4 ++-- .../org/apache/cloudstack/api/response/GuestOSResponse.java | 4 ++-- .../org/apache/cloudstack/api/response/HostResponse.java | 5 ++--- .../api/response/HypervisorCapabilitiesResponse.java | 4 ++-- .../apache/cloudstack/api/response/IPAddressResponse.java | 4 ++-- .../cloudstack/api/response/InstanceGroupResponse.java | 5 ++--- .../cloudstack/api/response/LBStickinessResponse.java | 4 ++-- .../cloudstack/api/response/NetworkOfferingResponse.java | 4 ++-- .../org/apache/cloudstack/api/response/NetworkResponse.java | 4 ++-- .../cloudstack/api/response/PhysicalNetworkResponse.java | 5 ++--- api/src/org/apache/cloudstack/api/response/PodResponse.java | 4 ++-- .../cloudstack/api/response/PrivateGatewayResponse.java | 4 ++-- .../cloudstack/api/response/ProjectAccountResponse.java | 5 ++--- .../cloudstack/api/response/ProjectInvitationResponse.java | 4 ++-- .../org/apache/cloudstack/api/response/ProjectResponse.java | 5 ++--- .../apache/cloudstack/api/response/ProviderResponse.java | 4 ++-- .../cloudstack/api/response/RemoteAccessVpnResponse.java | 4 ++-- .../cloudstack/api/response/ResourceLimitResponse.java | 5 ++--- .../cloudstack/api/response/SecurityGroupResponse.java | 4 ++-- .../cloudstack/api/response/SecurityGroupRuleResponse.java | 4 ++-- .../api/response/Site2SiteCustomerGatewayResponse.java | 4 ++-- .../api/response/Site2SiteVpnConnectionResponse.java | 4 ++-- .../api/response/Site2SiteVpnGatewayResponse.java | 4 ++-- .../cloudstack/api/response/SnapshotPolicyResponse.java | 4 ++-- .../apache/cloudstack/api/response/SnapshotResponse.java | 4 ++-- .../apache/cloudstack/api/response/StaticRouteResponse.java | 4 ++-- .../api/response/StorageNetworkIpRangeResponse.java | 4 ++-- .../apache/cloudstack/api/response/StoragePoolResponse.java | 4 ++-- .../apache/cloudstack/api/response/SystemVmResponse.java | 4 ++-- .../api/response/TemplatePermissionsResponse.java | 4 ++-- .../apache/cloudstack/api/response/TemplateResponse.java | 4 ++-- .../apache/cloudstack/api/response/TrafficTypeResponse.java | 4 ++-- .../org/apache/cloudstack/api/response/UserResponse.java | 4 ++-- .../org/apache/cloudstack/api/response/UserVmResponse.java | 4 ++-- .../api/response/VirtualRouterProviderResponse.java | 4 ++-- .../apache/cloudstack/api/response/VlanIpRangeResponse.java | 4 ++-- .../org/apache/cloudstack/api/response/VolumeResponse.java | 5 ++--- .../apache/cloudstack/api/response/VpcOfferingResponse.java | 4 ++-- api/src/org/apache/cloudstack/api/response/VpcResponse.java | 4 ++-- .../apache/cloudstack/api/response/VpnUsersResponse.java | 4 ++-- .../org/apache/cloudstack/api/response/ZoneResponse.java | 4 ++-- server/src/com/cloud/api/ApiDispatcher.java | 4 ++-- 57 files changed, 114 insertions(+), 126 deletions(-) rename api/src/org/apache/cloudstack/api/{Entity.java => EntityReference.java} (89%) diff --git a/api/src/org/apache/cloudstack/api/Entity.java b/api/src/org/apache/cloudstack/api/EntityReference.java similarity index 89% rename from api/src/org/apache/cloudstack/api/Entity.java rename to api/src/org/apache/cloudstack/api/EntityReference.java index f6e6235770d..1de84cee5da 100644 --- a/api/src/org/apache/cloudstack/api/Entity.java +++ b/api/src/org/apache/cloudstack/api/EntityReference.java @@ -19,10 +19,10 @@ package org.apache.cloudstack.api; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; -/* There is a one on one mapping between the Entity and the EntityResponse +/* There is a one on one mapping between the EntityReference and the EntityResponse * to the OTW layer. Value is the actual entity class it refers to. */ @Retention(RetentionPolicy.RUNTIME) -public @interface Entity { +public @interface EntityReference { Class[] value() default {}; } diff --git a/api/src/org/apache/cloudstack/api/response/AccountResponse.java b/api/src/org/apache/cloudstack/api/response/AccountResponse.java index 2f186fb4032..51d3352c647 100644 --- a/api/src/org/apache/cloudstack/api/response/AccountResponse.java +++ b/api/src/org/apache/cloudstack/api/response/AccountResponse.java @@ -20,16 +20,15 @@ import java.util.List; import java.util.Map; import org.apache.cloudstack.api.ApiConstants; -import org.apache.cloudstack.api.Entity; +import org.apache.cloudstack.api.EntityReference; -import com.cloud.domain.Domain; import com.cloud.serializer.Param; import com.cloud.user.Account; import com.google.gson.annotations.SerializedName; import org.apache.cloudstack.api.BaseResponse; @SuppressWarnings("unused") -@Entity(value = Account.class) +@EntityReference(value = Account.class) public class AccountResponse extends BaseResponse { @SerializedName(ApiConstants.ID) @Param(description="the id of the account") private String id; diff --git a/api/src/org/apache/cloudstack/api/response/AlertResponse.java b/api/src/org/apache/cloudstack/api/response/AlertResponse.java index f81f07e7863..f01a3e9c1f3 100644 --- a/api/src/org/apache/cloudstack/api/response/AlertResponse.java +++ b/api/src/org/apache/cloudstack/api/response/AlertResponse.java @@ -23,9 +23,9 @@ import org.apache.cloudstack.api.ApiConstants; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; import org.apache.cloudstack.api.BaseResponse; -import org.apache.cloudstack.api.Entity; +import org.apache.cloudstack.api.EntityReference; -@Entity(value=Alert.class) +@EntityReference(value=Alert.class) @SuppressWarnings("unused") public class AlertResponse extends BaseResponse { @SerializedName(ApiConstants.ID) @Param(description="the id of the alert") diff --git a/api/src/org/apache/cloudstack/api/response/AsyncJobResponse.java b/api/src/org/apache/cloudstack/api/response/AsyncJobResponse.java index 355942fb3dd..1a47cd2a3d2 100644 --- a/api/src/org/apache/cloudstack/api/response/AsyncJobResponse.java +++ b/api/src/org/apache/cloudstack/api/response/AsyncJobResponse.java @@ -20,13 +20,13 @@ import java.util.Date; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseResponse; -import org.apache.cloudstack.api.Entity; +import org.apache.cloudstack.api.EntityReference; import org.apache.cloudstack.api.ResponseObject; import com.cloud.async.AsyncJob; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; -@Entity(value=AsyncJob.class) +@EntityReference(value=AsyncJob.class) @SuppressWarnings("unused") public class AsyncJobResponse extends BaseResponse { diff --git a/api/src/org/apache/cloudstack/api/response/AutoScalePolicyResponse.java b/api/src/org/apache/cloudstack/api/response/AutoScalePolicyResponse.java index 27b50bead73..424a4fa446a 100644 --- a/api/src/org/apache/cloudstack/api/response/AutoScalePolicyResponse.java +++ b/api/src/org/apache/cloudstack/api/response/AutoScalePolicyResponse.java @@ -21,11 +21,11 @@ import org.apache.cloudstack.api.ApiConstants; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; import org.apache.cloudstack.api.BaseResponse; -import org.apache.cloudstack.api.Entity; +import org.apache.cloudstack.api.EntityReference; import java.util.List; -@Entity(value=AutoScalePolicy.class) +@EntityReference(value=AutoScalePolicy.class) public class AutoScalePolicyResponse extends BaseResponse implements ControlledEntityResponse { @SerializedName(ApiConstants.ID) diff --git a/api/src/org/apache/cloudstack/api/response/AutoScaleVmGroupResponse.java b/api/src/org/apache/cloudstack/api/response/AutoScaleVmGroupResponse.java index d7938994541..dc0e0155d5f 100644 --- a/api/src/org/apache/cloudstack/api/response/AutoScaleVmGroupResponse.java +++ b/api/src/org/apache/cloudstack/api/response/AutoScaleVmGroupResponse.java @@ -18,15 +18,14 @@ package org.apache.cloudstack.api.response; import com.cloud.network.as.AutoScaleVmGroup; import org.apache.cloudstack.api.ApiConstants; -import com.cloud.utils.IdentityProxy; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; import org.apache.cloudstack.api.BaseResponse; -import org.apache.cloudstack.api.Entity; +import org.apache.cloudstack.api.EntityReference; import java.util.List; -@Entity(value=AutoScaleVmGroup.class) +@EntityReference(value=AutoScaleVmGroup.class) public class AutoScaleVmGroupResponse extends BaseResponse implements ControlledEntityResponse { @SerializedName(ApiConstants.ID) diff --git a/api/src/org/apache/cloudstack/api/response/AutoScaleVmProfileResponse.java b/api/src/org/apache/cloudstack/api/response/AutoScaleVmProfileResponse.java index 356460b0948..0ae216706d0 100644 --- a/api/src/org/apache/cloudstack/api/response/AutoScaleVmProfileResponse.java +++ b/api/src/org/apache/cloudstack/api/response/AutoScaleVmProfileResponse.java @@ -24,13 +24,13 @@ import com.cloud.network.as.AutoScaleVmProfile; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseCmd.CommandType; import org.apache.cloudstack.api.BaseResponse; -import org.apache.cloudstack.api.Entity; +import org.apache.cloudstack.api.EntityReference; import org.apache.cloudstack.api.Parameter; import com.cloud.serializer.Param; import com.cloud.utils.Pair; import com.google.gson.annotations.SerializedName; -@Entity(value=AutoScaleVmProfile.class) +@EntityReference(value=AutoScaleVmProfile.class) public class AutoScaleVmProfileResponse extends BaseResponse implements ControlledEntityResponse { @SerializedName(ApiConstants.ID) diff --git a/api/src/org/apache/cloudstack/api/response/ClusterResponse.java b/api/src/org/apache/cloudstack/api/response/ClusterResponse.java index fee550cf029..e436c9987e9 100644 --- a/api/src/org/apache/cloudstack/api/response/ClusterResponse.java +++ b/api/src/org/apache/cloudstack/api/response/ClusterResponse.java @@ -20,16 +20,14 @@ import java.util.ArrayList; import java.util.List; import org.apache.cloudstack.api.ApiConstants; -import org.apache.cloudstack.api.Entity; +import org.apache.cloudstack.api.EntityReference; -import com.cloud.utils.IdentityProxy; -import com.cloud.dc.DataCenter; import com.cloud.org.Cluster; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; import org.apache.cloudstack.api.BaseResponse; -@Entity(value = Cluster.class) +@EntityReference(value = Cluster.class) public class ClusterResponse extends BaseResponse { @SerializedName(ApiConstants.ID) @Param(description="the cluster ID") private String id; diff --git a/api/src/org/apache/cloudstack/api/response/ConditionResponse.java b/api/src/org/apache/cloudstack/api/response/ConditionResponse.java index f2665c7bcc9..f398f0aaed5 100644 --- a/api/src/org/apache/cloudstack/api/response/ConditionResponse.java +++ b/api/src/org/apache/cloudstack/api/response/ConditionResponse.java @@ -24,9 +24,9 @@ import org.apache.cloudstack.api.ApiConstants; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; import org.apache.cloudstack.api.BaseResponse; -import org.apache.cloudstack.api.Entity; +import org.apache.cloudstack.api.EntityReference; -@Entity(value=Condition.class) +@EntityReference(value=Condition.class) @SuppressWarnings("unused") public class ConditionResponse extends BaseResponse implements ControlledEntityResponse { @SerializedName("id") diff --git a/api/src/org/apache/cloudstack/api/response/CounterResponse.java b/api/src/org/apache/cloudstack/api/response/CounterResponse.java index 6afc0dea40c..4dc44e767bf 100644 --- a/api/src/org/apache/cloudstack/api/response/CounterResponse.java +++ b/api/src/org/apache/cloudstack/api/response/CounterResponse.java @@ -18,7 +18,7 @@ package org.apache.cloudstack.api.response; import org.apache.cloudstack.api.ApiConstants; -import org.apache.cloudstack.api.Entity; +import org.apache.cloudstack.api.EntityReference; import com.cloud.network.as.Counter; import com.cloud.serializer.Param; @@ -26,7 +26,7 @@ import com.google.gson.annotations.SerializedName; import org.apache.cloudstack.api.BaseResponse; @SuppressWarnings("unused") -@Entity(value=Counter.class) +@EntityReference(value=Counter.class) public class CounterResponse extends BaseResponse { @SerializedName("id") @Param(description = "the id of the Counter") diff --git a/api/src/org/apache/cloudstack/api/response/DiskOfferingResponse.java b/api/src/org/apache/cloudstack/api/response/DiskOfferingResponse.java index d155984fbef..de3daf587ad 100644 --- a/api/src/org/apache/cloudstack/api/response/DiskOfferingResponse.java +++ b/api/src/org/apache/cloudstack/api/response/DiskOfferingResponse.java @@ -23,9 +23,9 @@ import org.apache.cloudstack.api.ApiConstants; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; import org.apache.cloudstack.api.BaseResponse; -import org.apache.cloudstack.api.Entity; +import org.apache.cloudstack.api.EntityReference; -@Entity(value=DiskOffering.class) +@EntityReference(value=DiskOffering.class) public class DiskOfferingResponse extends BaseResponse { @SerializedName(ApiConstants.ID) @Param(description="unique ID of the disk offering") private String id; diff --git a/api/src/org/apache/cloudstack/api/response/DomainResponse.java b/api/src/org/apache/cloudstack/api/response/DomainResponse.java index 2888f5ed62b..c74e7c98d2f 100644 --- a/api/src/org/apache/cloudstack/api/response/DomainResponse.java +++ b/api/src/org/apache/cloudstack/api/response/DomainResponse.java @@ -18,13 +18,12 @@ package org.apache.cloudstack.api.response; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseResponse; -import org.apache.cloudstack.api.Entity; +import org.apache.cloudstack.api.EntityReference; import com.cloud.domain.Domain; -import com.cloud.utils.IdentityProxy; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; -@Entity(value = Domain.class) +@EntityReference(value = Domain.class) public class DomainResponse extends BaseResponse { @SerializedName(ApiConstants.ID) @Param(description="the ID of the domain") private String id; diff --git a/api/src/org/apache/cloudstack/api/response/DomainRouterResponse.java b/api/src/org/apache/cloudstack/api/response/DomainRouterResponse.java index bd44f2614f2..cf2f3f41f56 100644 --- a/api/src/org/apache/cloudstack/api/response/DomainRouterResponse.java +++ b/api/src/org/apache/cloudstack/api/response/DomainRouterResponse.java @@ -27,9 +27,9 @@ import com.cloud.serializer.Param; import com.cloud.vm.VirtualMachine.State; import com.google.gson.annotations.SerializedName; import org.apache.cloudstack.api.BaseResponse; -import org.apache.cloudstack.api.Entity; +import org.apache.cloudstack.api.EntityReference; -@Entity(value=VirtualMachine.class) +@EntityReference(value=VirtualMachine.class) @SuppressWarnings("unused") public class DomainRouterResponse extends BaseResponse implements ControlledViewEntityResponse{ @SerializedName(ApiConstants.ID) @Param(description="the id of the router") diff --git a/api/src/org/apache/cloudstack/api/response/EventResponse.java b/api/src/org/apache/cloudstack/api/response/EventResponse.java index 26dfdf15574..b2148db5da1 100644 --- a/api/src/org/apache/cloudstack/api/response/EventResponse.java +++ b/api/src/org/apache/cloudstack/api/response/EventResponse.java @@ -23,9 +23,9 @@ import com.cloud.event.Event; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; import org.apache.cloudstack.api.BaseResponse; -import org.apache.cloudstack.api.Entity; +import org.apache.cloudstack.api.EntityReference; -@Entity(value=Event.class) +@EntityReference(value=Event.class) @SuppressWarnings("unused") public class EventResponse extends BaseResponse implements ControlledViewEntityResponse{ @SerializedName(ApiConstants.ID) @Param(description="the ID of the event") diff --git a/api/src/org/apache/cloudstack/api/response/FirewallRuleResponse.java b/api/src/org/apache/cloudstack/api/response/FirewallRuleResponse.java index 8f7be39d6a7..0009658c2a7 100644 --- a/api/src/org/apache/cloudstack/api/response/FirewallRuleResponse.java +++ b/api/src/org/apache/cloudstack/api/response/FirewallRuleResponse.java @@ -23,9 +23,9 @@ import org.apache.cloudstack.api.ApiConstants; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; import org.apache.cloudstack.api.BaseResponse; -import org.apache.cloudstack.api.Entity; +import org.apache.cloudstack.api.EntityReference; -@Entity(value=FirewallRule.class) +@EntityReference(value=FirewallRule.class) @SuppressWarnings("unused") public class FirewallRuleResponse extends BaseResponse { @SerializedName(ApiConstants.ID) @Param(description="the ID of the port forwarding rule") diff --git a/api/src/org/apache/cloudstack/api/response/GuestOSCategoryResponse.java b/api/src/org/apache/cloudstack/api/response/GuestOSCategoryResponse.java index f7f0b8dd67e..a14ce59f968 100644 --- a/api/src/org/apache/cloudstack/api/response/GuestOSCategoryResponse.java +++ b/api/src/org/apache/cloudstack/api/response/GuestOSCategoryResponse.java @@ -21,9 +21,9 @@ import org.apache.cloudstack.api.ApiConstants; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; import org.apache.cloudstack.api.BaseResponse; -import org.apache.cloudstack.api.Entity; +import org.apache.cloudstack.api.EntityReference; -@Entity(value=GuestOsCategory.class) +@EntityReference(value=GuestOsCategory.class) public class GuestOSCategoryResponse extends BaseResponse { @SerializedName(ApiConstants.ID) @Param(description="the ID of the OS category") private String id; diff --git a/api/src/org/apache/cloudstack/api/response/GuestOSResponse.java b/api/src/org/apache/cloudstack/api/response/GuestOSResponse.java index c7efa4fe831..0bc5dd2956e 100644 --- a/api/src/org/apache/cloudstack/api/response/GuestOSResponse.java +++ b/api/src/org/apache/cloudstack/api/response/GuestOSResponse.java @@ -21,9 +21,9 @@ import org.apache.cloudstack.api.ApiConstants; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; import org.apache.cloudstack.api.BaseResponse; -import org.apache.cloudstack.api.Entity; +import org.apache.cloudstack.api.EntityReference; -@Entity(value=GuestOS.class) +@EntityReference(value=GuestOS.class) public class GuestOSResponse extends BaseResponse { @SerializedName(ApiConstants.ID) @Param(description="the ID of the OS type") private String id; diff --git a/api/src/org/apache/cloudstack/api/response/HostResponse.java b/api/src/org/apache/cloudstack/api/response/HostResponse.java index 348d48a48a9..35b07dda83d 100644 --- a/api/src/org/apache/cloudstack/api/response/HostResponse.java +++ b/api/src/org/apache/cloudstack/api/response/HostResponse.java @@ -19,16 +19,15 @@ package org.apache.cloudstack.api.response; import java.util.Date; import org.apache.cloudstack.api.ApiConstants; -import com.cloud.utils.IdentityProxy; import com.cloud.host.Host; import com.cloud.host.Status; import com.cloud.hypervisor.Hypervisor.HypervisorType; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; import org.apache.cloudstack.api.BaseResponse; -import org.apache.cloudstack.api.Entity; +import org.apache.cloudstack.api.EntityReference; -@Entity(value=Host.class) +@EntityReference(value=Host.class) public class HostResponse extends BaseResponse { @SerializedName(ApiConstants.ID) @Param(description="the ID of the host") private String id; diff --git a/api/src/org/apache/cloudstack/api/response/HypervisorCapabilitiesResponse.java b/api/src/org/apache/cloudstack/api/response/HypervisorCapabilitiesResponse.java index c7d31560e4a..44e0513e32c 100644 --- a/api/src/org/apache/cloudstack/api/response/HypervisorCapabilitiesResponse.java +++ b/api/src/org/apache/cloudstack/api/response/HypervisorCapabilitiesResponse.java @@ -22,9 +22,9 @@ import com.cloud.hypervisor.Hypervisor.HypervisorType; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; import org.apache.cloudstack.api.BaseResponse; -import org.apache.cloudstack.api.Entity; +import org.apache.cloudstack.api.EntityReference; -@Entity(value=HypervisorCapabilities.class) +@EntityReference(value=HypervisorCapabilities.class) public class HypervisorCapabilitiesResponse extends BaseResponse { @SerializedName(ApiConstants.ID) @Param(description="the ID of the hypervisor capabilities row") private String id; diff --git a/api/src/org/apache/cloudstack/api/response/IPAddressResponse.java b/api/src/org/apache/cloudstack/api/response/IPAddressResponse.java index ea87b361a3e..4d18aef5569 100644 --- a/api/src/org/apache/cloudstack/api/response/IPAddressResponse.java +++ b/api/src/org/apache/cloudstack/api/response/IPAddressResponse.java @@ -24,9 +24,9 @@ import org.apache.cloudstack.api.ApiConstants; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; import org.apache.cloudstack.api.BaseResponse; -import org.apache.cloudstack.api.Entity; +import org.apache.cloudstack.api.EntityReference; -@Entity(value=IpAddress.class) +@EntityReference(value=IpAddress.class) @SuppressWarnings("unused") public class IPAddressResponse extends BaseResponse implements ControlledEntityResponse { @SerializedName(ApiConstants.ID) @Param(description="public IP address id") diff --git a/api/src/org/apache/cloudstack/api/response/InstanceGroupResponse.java b/api/src/org/apache/cloudstack/api/response/InstanceGroupResponse.java index 7231958ea62..24706ab09fc 100644 --- a/api/src/org/apache/cloudstack/api/response/InstanceGroupResponse.java +++ b/api/src/org/apache/cloudstack/api/response/InstanceGroupResponse.java @@ -20,14 +20,13 @@ import java.util.Date; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseResponse; -import org.apache.cloudstack.api.Entity; +import org.apache.cloudstack.api.EntityReference; import com.cloud.vm.InstanceGroup; -import com.cloud.utils.IdentityProxy; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; @SuppressWarnings("unused") -@Entity(value = InstanceGroup.class) +@EntityReference(value = InstanceGroup.class) public class InstanceGroupResponse extends BaseResponse implements ControlledViewEntityResponse{ @SerializedName(ApiConstants.ID) @Param(description="the id of the instance group") private String id; diff --git a/api/src/org/apache/cloudstack/api/response/LBStickinessResponse.java b/api/src/org/apache/cloudstack/api/response/LBStickinessResponse.java index 6d70ba15a65..7887e7c430a 100644 --- a/api/src/org/apache/cloudstack/api/response/LBStickinessResponse.java +++ b/api/src/org/apache/cloudstack/api/response/LBStickinessResponse.java @@ -21,11 +21,11 @@ import org.apache.cloudstack.api.ApiConstants; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; import org.apache.cloudstack.api.BaseResponse; -import org.apache.cloudstack.api.Entity; +import org.apache.cloudstack.api.EntityReference; import java.util.List; -@Entity(value=StickinessPolicy.class) +@EntityReference(value=StickinessPolicy.class) public class LBStickinessResponse extends BaseResponse { @SerializedName("lbruleid") @Param(description = "the LB rule ID") diff --git a/api/src/org/apache/cloudstack/api/response/NetworkOfferingResponse.java b/api/src/org/apache/cloudstack/api/response/NetworkOfferingResponse.java index 5988a2fc0a4..5c1479105f8 100644 --- a/api/src/org/apache/cloudstack/api/response/NetworkOfferingResponse.java +++ b/api/src/org/apache/cloudstack/api/response/NetworkOfferingResponse.java @@ -24,9 +24,9 @@ import org.apache.cloudstack.api.ApiConstants; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; import org.apache.cloudstack.api.BaseResponse; -import org.apache.cloudstack.api.Entity; +import org.apache.cloudstack.api.EntityReference; -@Entity(value=NetworkOffering.class) +@EntityReference(value=NetworkOffering.class) @SuppressWarnings("unused") public class NetworkOfferingResponse extends BaseResponse { @SerializedName("id") @Param(description="the id of the network offering") diff --git a/api/src/org/apache/cloudstack/api/response/NetworkResponse.java b/api/src/org/apache/cloudstack/api/response/NetworkResponse.java index f5110c73ff6..64cc9531901 100644 --- a/api/src/org/apache/cloudstack/api/response/NetworkResponse.java +++ b/api/src/org/apache/cloudstack/api/response/NetworkResponse.java @@ -21,13 +21,13 @@ import java.util.List; import com.cloud.network.Network; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseResponse; -import org.apache.cloudstack.api.Entity; +import org.apache.cloudstack.api.EntityReference; import com.cloud.projects.ProjectAccount; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; @SuppressWarnings("unused") -@Entity(value = {Network.class, ProjectAccount.class}) +@EntityReference(value = {Network.class, ProjectAccount.class}) public class NetworkResponse extends BaseResponse implements ControlledEntityResponse{ @SerializedName(ApiConstants.ID) @Param(description="the id of the network") diff --git a/api/src/org/apache/cloudstack/api/response/PhysicalNetworkResponse.java b/api/src/org/apache/cloudstack/api/response/PhysicalNetworkResponse.java index 0f1e166ef4b..78257b1bd0f 100644 --- a/api/src/org/apache/cloudstack/api/response/PhysicalNetworkResponse.java +++ b/api/src/org/apache/cloudstack/api/response/PhysicalNetworkResponse.java @@ -19,14 +19,13 @@ package org.apache.cloudstack.api.response; import java.util.List; import com.cloud.network.PhysicalNetwork; -import com.cloud.network.PhysicalNetworkServiceProvider; import org.apache.cloudstack.api.ApiConstants; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; import org.apache.cloudstack.api.BaseResponse; -import org.apache.cloudstack.api.Entity; +import org.apache.cloudstack.api.EntityReference; -@Entity(value=PhysicalNetwork.class) +@EntityReference(value=PhysicalNetwork.class) @SuppressWarnings("unused") public class PhysicalNetworkResponse extends BaseResponse { diff --git a/api/src/org/apache/cloudstack/api/response/PodResponse.java b/api/src/org/apache/cloudstack/api/response/PodResponse.java index 33184df86d0..71192796b25 100644 --- a/api/src/org/apache/cloudstack/api/response/PodResponse.java +++ b/api/src/org/apache/cloudstack/api/response/PodResponse.java @@ -19,14 +19,14 @@ package org.apache.cloudstack.api.response; import java.util.List; import org.apache.cloudstack.api.ApiConstants; -import org.apache.cloudstack.api.Entity; +import org.apache.cloudstack.api.EntityReference; import com.cloud.dc.Pod; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; import org.apache.cloudstack.api.BaseResponse; -@Entity(value = Pod.class) +@EntityReference(value = Pod.class) public class PodResponse extends BaseResponse { @SerializedName("id") @Param(description="the ID of the Pod") private String id; diff --git a/api/src/org/apache/cloudstack/api/response/PrivateGatewayResponse.java b/api/src/org/apache/cloudstack/api/response/PrivateGatewayResponse.java index 0bbc66a24d2..37c96ff6a17 100644 --- a/api/src/org/apache/cloudstack/api/response/PrivateGatewayResponse.java +++ b/api/src/org/apache/cloudstack/api/response/PrivateGatewayResponse.java @@ -20,9 +20,9 @@ import org.apache.cloudstack.api.ApiConstants; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; import org.apache.cloudstack.api.BaseResponse; -import org.apache.cloudstack.api.Entity; +import org.apache.cloudstack.api.EntityReference; -@Entity(value=VpcGateway.class) +@EntityReference(value=VpcGateway.class) @SuppressWarnings("unused") public class PrivateGatewayResponse extends BaseResponse implements ControlledEntityResponse{ diff --git a/api/src/org/apache/cloudstack/api/response/ProjectAccountResponse.java b/api/src/org/apache/cloudstack/api/response/ProjectAccountResponse.java index da16291f43c..134841caf31 100644 --- a/api/src/org/apache/cloudstack/api/response/ProjectAccountResponse.java +++ b/api/src/org/apache/cloudstack/api/response/ProjectAccountResponse.java @@ -20,13 +20,12 @@ import java.util.List; import com.cloud.projects.ProjectAccount; import org.apache.cloudstack.api.ApiConstants; -import com.cloud.utils.IdentityProxy; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; import org.apache.cloudstack.api.BaseResponse; -import org.apache.cloudstack.api.Entity; +import org.apache.cloudstack.api.EntityReference; -@Entity(value=ProjectAccount.class) +@EntityReference(value=ProjectAccount.class) @SuppressWarnings("unused") public class ProjectAccountResponse extends BaseResponse implements ControlledViewEntityResponse { @SerializedName(ApiConstants.PROJECT_ID) diff --git a/api/src/org/apache/cloudstack/api/response/ProjectInvitationResponse.java b/api/src/org/apache/cloudstack/api/response/ProjectInvitationResponse.java index 9d91c070d72..0c9ce685bcc 100644 --- a/api/src/org/apache/cloudstack/api/response/ProjectInvitationResponse.java +++ b/api/src/org/apache/cloudstack/api/response/ProjectInvitationResponse.java @@ -21,9 +21,9 @@ import org.apache.cloudstack.api.ApiConstants; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; import org.apache.cloudstack.api.BaseResponse; -import org.apache.cloudstack.api.Entity; +import org.apache.cloudstack.api.EntityReference; -@Entity(value=ProjectInvitation.class) +@EntityReference(value=ProjectInvitation.class) @SuppressWarnings("unused") public class ProjectInvitationResponse extends BaseResponse implements ControlledViewEntityResponse{ @SerializedName(ApiConstants.ID) @Param(description="the id of the invitation") diff --git a/api/src/org/apache/cloudstack/api/response/ProjectResponse.java b/api/src/org/apache/cloudstack/api/response/ProjectResponse.java index 937c8248ee3..7ecda234814 100644 --- a/api/src/org/apache/cloudstack/api/response/ProjectResponse.java +++ b/api/src/org/apache/cloudstack/api/response/ProjectResponse.java @@ -22,12 +22,11 @@ import java.util.List; import com.cloud.projects.Project; import org.apache.cloudstack.api.ApiConstants; import com.cloud.serializer.Param; -import com.cloud.utils.IdentityProxy; import com.google.gson.annotations.SerializedName; import org.apache.cloudstack.api.BaseResponse; -import org.apache.cloudstack.api.Entity; +import org.apache.cloudstack.api.EntityReference; -@Entity(value=Project.class) +@EntityReference(value=Project.class) @SuppressWarnings("unused") public class ProjectResponse extends BaseResponse { diff --git a/api/src/org/apache/cloudstack/api/response/ProviderResponse.java b/api/src/org/apache/cloudstack/api/response/ProviderResponse.java index d564dad08f9..b83c2348390 100644 --- a/api/src/org/apache/cloudstack/api/response/ProviderResponse.java +++ b/api/src/org/apache/cloudstack/api/response/ProviderResponse.java @@ -23,9 +23,9 @@ import org.apache.cloudstack.api.ApiConstants; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; import org.apache.cloudstack.api.BaseResponse; -import org.apache.cloudstack.api.Entity; +import org.apache.cloudstack.api.EntityReference; -@Entity(value=PhysicalNetworkServiceProvider.class) +@EntityReference(value=PhysicalNetworkServiceProvider.class) @SuppressWarnings("unused") public class ProviderResponse extends BaseResponse { diff --git a/api/src/org/apache/cloudstack/api/response/RemoteAccessVpnResponse.java b/api/src/org/apache/cloudstack/api/response/RemoteAccessVpnResponse.java index ca28f00bdfb..3fd7d7a668b 100644 --- a/api/src/org/apache/cloudstack/api/response/RemoteAccessVpnResponse.java +++ b/api/src/org/apache/cloudstack/api/response/RemoteAccessVpnResponse.java @@ -21,9 +21,9 @@ import org.apache.cloudstack.api.ApiConstants; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; import org.apache.cloudstack.api.BaseResponse; -import org.apache.cloudstack.api.Entity; +import org.apache.cloudstack.api.EntityReference; -@Entity(value=RemoteAccessVpn.class) +@EntityReference(value=RemoteAccessVpn.class) @SuppressWarnings("unused") public class RemoteAccessVpnResponse extends BaseResponse implements ControlledEntityResponse{ diff --git a/api/src/org/apache/cloudstack/api/response/ResourceLimitResponse.java b/api/src/org/apache/cloudstack/api/response/ResourceLimitResponse.java index ef847e7b2b1..c01e12f2e23 100644 --- a/api/src/org/apache/cloudstack/api/response/ResourceLimitResponse.java +++ b/api/src/org/apache/cloudstack/api/response/ResourceLimitResponse.java @@ -18,13 +18,12 @@ package org.apache.cloudstack.api.response; import com.cloud.configuration.ResourceLimit; import org.apache.cloudstack.api.ApiConstants; -import com.cloud.utils.IdentityProxy; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; import org.apache.cloudstack.api.BaseResponse; -import org.apache.cloudstack.api.Entity; +import org.apache.cloudstack.api.EntityReference; -@Entity(value = ResourceLimit.class) +@EntityReference(value = ResourceLimit.class) @SuppressWarnings("unused") public class ResourceLimitResponse extends BaseResponse implements ControlledEntityResponse { @SerializedName(ApiConstants.ACCOUNT) @Param(description="the account of the resource limit") diff --git a/api/src/org/apache/cloudstack/api/response/SecurityGroupResponse.java b/api/src/org/apache/cloudstack/api/response/SecurityGroupResponse.java index 049709e4e20..f3b9beb8d3e 100644 --- a/api/src/org/apache/cloudstack/api/response/SecurityGroupResponse.java +++ b/api/src/org/apache/cloudstack/api/response/SecurityGroupResponse.java @@ -21,13 +21,13 @@ import java.util.Set; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseResponse; -import org.apache.cloudstack.api.Entity; +import org.apache.cloudstack.api.EntityReference; import com.cloud.network.security.SecurityGroup; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; @SuppressWarnings("unused") -@Entity(value = SecurityGroup.class) +@EntityReference(value = SecurityGroup.class) public class SecurityGroupResponse extends BaseResponse implements ControlledViewEntityResponse{ @SerializedName(ApiConstants.ID) @Param(description="the ID of the security group") diff --git a/api/src/org/apache/cloudstack/api/response/SecurityGroupRuleResponse.java b/api/src/org/apache/cloudstack/api/response/SecurityGroupRuleResponse.java index 314c2db9c5b..19aaa4594b9 100644 --- a/api/src/org/apache/cloudstack/api/response/SecurityGroupRuleResponse.java +++ b/api/src/org/apache/cloudstack/api/response/SecurityGroupRuleResponse.java @@ -17,13 +17,13 @@ package org.apache.cloudstack.api.response; import org.apache.cloudstack.api.ApiConstants; -import org.apache.cloudstack.api.Entity; +import org.apache.cloudstack.api.EntityReference; import com.cloud.network.security.SecurityGroupRules; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; import org.apache.cloudstack.api.BaseResponse; -@Entity(value = SecurityGroupRules.class) +@EntityReference(value = SecurityGroupRules.class) public class SecurityGroupRuleResponse extends BaseResponse { @SerializedName("ruleid") @Param(description="the id of the security group rule") private String ruleId; diff --git a/api/src/org/apache/cloudstack/api/response/Site2SiteCustomerGatewayResponse.java b/api/src/org/apache/cloudstack/api/response/Site2SiteCustomerGatewayResponse.java index 5f42fa2a87b..d164580bdea 100644 --- a/api/src/org/apache/cloudstack/api/response/Site2SiteCustomerGatewayResponse.java +++ b/api/src/org/apache/cloudstack/api/response/Site2SiteCustomerGatewayResponse.java @@ -23,9 +23,9 @@ import org.apache.cloudstack.api.ApiConstants; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; import org.apache.cloudstack.api.BaseResponse; -import org.apache.cloudstack.api.Entity; +import org.apache.cloudstack.api.EntityReference; -@Entity(value=Site2SiteCustomerGateway.class) +@EntityReference(value=Site2SiteCustomerGateway.class) @SuppressWarnings("unused") public class Site2SiteCustomerGatewayResponse extends BaseResponse implements ControlledEntityResponse { @SerializedName(ApiConstants.ID) @Param(description="the vpn gateway ID") diff --git a/api/src/org/apache/cloudstack/api/response/Site2SiteVpnConnectionResponse.java b/api/src/org/apache/cloudstack/api/response/Site2SiteVpnConnectionResponse.java index da4adc39375..c398116a9f8 100644 --- a/api/src/org/apache/cloudstack/api/response/Site2SiteVpnConnectionResponse.java +++ b/api/src/org/apache/cloudstack/api/response/Site2SiteVpnConnectionResponse.java @@ -23,9 +23,9 @@ import org.apache.cloudstack.api.ApiConstants; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; import org.apache.cloudstack.api.BaseResponse; -import org.apache.cloudstack.api.Entity; +import org.apache.cloudstack.api.EntityReference; -@Entity(value=Site2SiteVpnConnection.class) +@EntityReference(value=Site2SiteVpnConnection.class) @SuppressWarnings("unused") public class Site2SiteVpnConnectionResponse extends BaseResponse implements ControlledEntityResponse { @SerializedName(ApiConstants.ID) @Param(description="the vpn gateway ID") diff --git a/api/src/org/apache/cloudstack/api/response/Site2SiteVpnGatewayResponse.java b/api/src/org/apache/cloudstack/api/response/Site2SiteVpnGatewayResponse.java index 03c9a0d26d4..8cb06fc8a56 100644 --- a/api/src/org/apache/cloudstack/api/response/Site2SiteVpnGatewayResponse.java +++ b/api/src/org/apache/cloudstack/api/response/Site2SiteVpnGatewayResponse.java @@ -23,9 +23,9 @@ import org.apache.cloudstack.api.ApiConstants; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; import org.apache.cloudstack.api.BaseResponse; -import org.apache.cloudstack.api.Entity; +import org.apache.cloudstack.api.EntityReference; -@Entity(value=Site2SiteVpnGateway.class) +@EntityReference(value=Site2SiteVpnGateway.class) @SuppressWarnings("unused") public class Site2SiteVpnGatewayResponse extends BaseResponse implements ControlledEntityResponse { @SerializedName(ApiConstants.ID) @Param(description="the vpn gateway ID") diff --git a/api/src/org/apache/cloudstack/api/response/SnapshotPolicyResponse.java b/api/src/org/apache/cloudstack/api/response/SnapshotPolicyResponse.java index de1a31730d1..6bf77a04298 100644 --- a/api/src/org/apache/cloudstack/api/response/SnapshotPolicyResponse.java +++ b/api/src/org/apache/cloudstack/api/response/SnapshotPolicyResponse.java @@ -20,9 +20,9 @@ import com.cloud.serializer.Param; import com.cloud.storage.snapshot.SnapshotPolicy; import com.google.gson.annotations.SerializedName; import org.apache.cloudstack.api.BaseResponse; -import org.apache.cloudstack.api.Entity; +import org.apache.cloudstack.api.EntityReference; -@Entity(value=SnapshotPolicy.class) +@EntityReference(value=SnapshotPolicy.class) public class SnapshotPolicyResponse extends BaseResponse { @SerializedName("id") @Param(description="the ID of the snapshot policy") private String id; diff --git a/api/src/org/apache/cloudstack/api/response/SnapshotResponse.java b/api/src/org/apache/cloudstack/api/response/SnapshotResponse.java index 8f5dc20570b..8ea0d7fb87f 100644 --- a/api/src/org/apache/cloudstack/api/response/SnapshotResponse.java +++ b/api/src/org/apache/cloudstack/api/response/SnapshotResponse.java @@ -24,9 +24,9 @@ import com.cloud.serializer.Param; import com.cloud.storage.Snapshot; import com.google.gson.annotations.SerializedName; import org.apache.cloudstack.api.BaseResponse; -import org.apache.cloudstack.api.Entity; +import org.apache.cloudstack.api.EntityReference; -@Entity(value=Snapshot.class) +@EntityReference(value=Snapshot.class) @SuppressWarnings("unused") public class SnapshotResponse extends BaseResponse implements ControlledEntityResponse { @SerializedName(ApiConstants.ID) diff --git a/api/src/org/apache/cloudstack/api/response/StaticRouteResponse.java b/api/src/org/apache/cloudstack/api/response/StaticRouteResponse.java index bfd2bb16a55..e7383e3787d 100644 --- a/api/src/org/apache/cloudstack/api/response/StaticRouteResponse.java +++ b/api/src/org/apache/cloudstack/api/response/StaticRouteResponse.java @@ -23,9 +23,9 @@ import org.apache.cloudstack.api.ApiConstants; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; import org.apache.cloudstack.api.BaseResponse; -import org.apache.cloudstack.api.Entity; +import org.apache.cloudstack.api.EntityReference; -@Entity(value=StaticRoute.class) +@EntityReference(value=StaticRoute.class) @SuppressWarnings("unused") public class StaticRouteResponse extends BaseResponse implements ControlledEntityResponse{ @SerializedName(ApiConstants.ID) @Param(description="the ID of static route") diff --git a/api/src/org/apache/cloudstack/api/response/StorageNetworkIpRangeResponse.java b/api/src/org/apache/cloudstack/api/response/StorageNetworkIpRangeResponse.java index ec814fc1aa0..328180f5260 100644 --- a/api/src/org/apache/cloudstack/api/response/StorageNetworkIpRangeResponse.java +++ b/api/src/org/apache/cloudstack/api/response/StorageNetworkIpRangeResponse.java @@ -21,9 +21,9 @@ import org.apache.cloudstack.api.ApiConstants; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; import org.apache.cloudstack.api.BaseResponse; -import org.apache.cloudstack.api.Entity; +import org.apache.cloudstack.api.EntityReference; -@Entity(value=StorageNetworkIpRange.class) +@EntityReference(value=StorageNetworkIpRange.class) public class StorageNetworkIpRangeResponse extends BaseResponse { @SerializedName(ApiConstants.ID) @Param(description="the uuid of storage network IP range.") private String uuid; diff --git a/api/src/org/apache/cloudstack/api/response/StoragePoolResponse.java b/api/src/org/apache/cloudstack/api/response/StoragePoolResponse.java index 707c852d262..7afce716fda 100644 --- a/api/src/org/apache/cloudstack/api/response/StoragePoolResponse.java +++ b/api/src/org/apache/cloudstack/api/response/StoragePoolResponse.java @@ -24,9 +24,9 @@ import com.cloud.serializer.Param; import com.cloud.storage.StoragePoolStatus; import com.google.gson.annotations.SerializedName; import org.apache.cloudstack.api.BaseResponse; -import org.apache.cloudstack.api.Entity; +import org.apache.cloudstack.api.EntityReference; -@Entity(value=StoragePool.class) +@EntityReference(value=StoragePool.class) public class StoragePoolResponse extends BaseResponse { @SerializedName("id") @Param(description="the ID of the storage pool") private String id; diff --git a/api/src/org/apache/cloudstack/api/response/SystemVmResponse.java b/api/src/org/apache/cloudstack/api/response/SystemVmResponse.java index 806cada0877..8b0f80b255a 100644 --- a/api/src/org/apache/cloudstack/api/response/SystemVmResponse.java +++ b/api/src/org/apache/cloudstack/api/response/SystemVmResponse.java @@ -23,9 +23,9 @@ import org.apache.cloudstack.api.ApiConstants; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; import org.apache.cloudstack.api.BaseResponse; -import org.apache.cloudstack.api.Entity; +import org.apache.cloudstack.api.EntityReference; -@Entity(value=VirtualMachine.class) +@EntityReference(value=VirtualMachine.class) public class SystemVmResponse extends BaseResponse { @SerializedName("id") @Param(description="the ID of the system VM") private String id; diff --git a/api/src/org/apache/cloudstack/api/response/TemplatePermissionsResponse.java b/api/src/org/apache/cloudstack/api/response/TemplatePermissionsResponse.java index 3774347b1eb..f1e08e3dcc6 100644 --- a/api/src/org/apache/cloudstack/api/response/TemplatePermissionsResponse.java +++ b/api/src/org/apache/cloudstack/api/response/TemplatePermissionsResponse.java @@ -23,9 +23,9 @@ import org.apache.cloudstack.api.ApiConstants; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; import org.apache.cloudstack.api.BaseResponse; -import org.apache.cloudstack.api.Entity; +import org.apache.cloudstack.api.EntityReference; -@Entity(value=VirtualMachineTemplate.class) +@EntityReference(value=VirtualMachineTemplate.class) @SuppressWarnings("unused") public class TemplatePermissionsResponse extends BaseResponse { @SerializedName(ApiConstants.ID) @Param(description="the template ID") diff --git a/api/src/org/apache/cloudstack/api/response/TemplateResponse.java b/api/src/org/apache/cloudstack/api/response/TemplateResponse.java index 17ddcad8ae3..f6f74dac5b7 100644 --- a/api/src/org/apache/cloudstack/api/response/TemplateResponse.java +++ b/api/src/org/apache/cloudstack/api/response/TemplateResponse.java @@ -26,9 +26,9 @@ import com.cloud.serializer.Param; import com.cloud.storage.Storage.ImageFormat; import com.google.gson.annotations.SerializedName; import org.apache.cloudstack.api.BaseResponse; -import org.apache.cloudstack.api.Entity; +import org.apache.cloudstack.api.EntityReference; -@Entity(value=VirtualMachineTemplate.class) +@EntityReference(value=VirtualMachineTemplate.class) @SuppressWarnings("unused") public class TemplateResponse extends BaseResponse implements ControlledEntityResponse { @SerializedName(ApiConstants.ID) @Param(description="the template ID") diff --git a/api/src/org/apache/cloudstack/api/response/TrafficTypeResponse.java b/api/src/org/apache/cloudstack/api/response/TrafficTypeResponse.java index 846bcf67836..43760f2e1b4 100644 --- a/api/src/org/apache/cloudstack/api/response/TrafficTypeResponse.java +++ b/api/src/org/apache/cloudstack/api/response/TrafficTypeResponse.java @@ -21,9 +21,9 @@ import org.apache.cloudstack.api.ApiConstants; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; import org.apache.cloudstack.api.BaseResponse; -import org.apache.cloudstack.api.Entity; +import org.apache.cloudstack.api.EntityReference; -@Entity(value=PhysicalNetworkTrafficType.class) +@EntityReference(value=PhysicalNetworkTrafficType.class) public class TrafficTypeResponse extends BaseResponse { @SerializedName(ApiConstants.ID) @Param(description="id of the network provider") diff --git a/api/src/org/apache/cloudstack/api/response/UserResponse.java b/api/src/org/apache/cloudstack/api/response/UserResponse.java index 36ed52fd874..9ab6248ed2e 100644 --- a/api/src/org/apache/cloudstack/api/response/UserResponse.java +++ b/api/src/org/apache/cloudstack/api/response/UserResponse.java @@ -23,9 +23,9 @@ import com.cloud.serializer.Param; import com.cloud.user.User; import org.apache.cloudstack.api.BaseResponse; -import org.apache.cloudstack.api.Entity; +import org.apache.cloudstack.api.EntityReference; -@Entity(value = User.class) +@EntityReference(value = User.class) public class UserResponse extends BaseResponse { @SerializedName("id") @Param(description="the user ID") private String id; diff --git a/api/src/org/apache/cloudstack/api/response/UserVmResponse.java b/api/src/org/apache/cloudstack/api/response/UserVmResponse.java index d90362b29d7..5450bfb6452 100644 --- a/api/src/org/apache/cloudstack/api/response/UserVmResponse.java +++ b/api/src/org/apache/cloudstack/api/response/UserVmResponse.java @@ -24,13 +24,13 @@ import com.cloud.network.router.VirtualRouter; import com.cloud.uservm.UserVm; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseResponse; -import org.apache.cloudstack.api.Entity; +import org.apache.cloudstack.api.EntityReference; import com.cloud.vm.VirtualMachine; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; @SuppressWarnings("unused") -@Entity(value={VirtualMachine.class, UserVm.class, VirtualRouter.class}) +@EntityReference(value={VirtualMachine.class, UserVm.class, VirtualRouter.class}) public class UserVmResponse extends BaseResponse implements ControlledEntityResponse { @SerializedName(ApiConstants.ID) @Param(description="the ID of the virtual machine") private String id; diff --git a/api/src/org/apache/cloudstack/api/response/VirtualRouterProviderResponse.java b/api/src/org/apache/cloudstack/api/response/VirtualRouterProviderResponse.java index 0e4c9f67bab..dcb2322e5b9 100644 --- a/api/src/org/apache/cloudstack/api/response/VirtualRouterProviderResponse.java +++ b/api/src/org/apache/cloudstack/api/response/VirtualRouterProviderResponse.java @@ -21,9 +21,9 @@ import org.apache.cloudstack.api.ApiConstants; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; import org.apache.cloudstack.api.BaseResponse; -import org.apache.cloudstack.api.Entity; +import org.apache.cloudstack.api.EntityReference; -@Entity(value=VirtualRouterProvider.class) +@EntityReference(value=VirtualRouterProvider.class) public class VirtualRouterProviderResponse extends BaseResponse implements ControlledEntityResponse { @SerializedName(ApiConstants.ID) @Param(description="the id of the router") private String id; diff --git a/api/src/org/apache/cloudstack/api/response/VlanIpRangeResponse.java b/api/src/org/apache/cloudstack/api/response/VlanIpRangeResponse.java index 1e8fcf4376b..bfde73963c1 100644 --- a/api/src/org/apache/cloudstack/api/response/VlanIpRangeResponse.java +++ b/api/src/org/apache/cloudstack/api/response/VlanIpRangeResponse.java @@ -21,9 +21,9 @@ import org.apache.cloudstack.api.ApiConstants; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; import org.apache.cloudstack.api.BaseResponse; -import org.apache.cloudstack.api.Entity; +import org.apache.cloudstack.api.EntityReference; -@Entity(value=Vlan.class) +@EntityReference(value=Vlan.class) @SuppressWarnings("unused") public class VlanIpRangeResponse extends BaseResponse implements ControlledEntityResponse{ @SerializedName(ApiConstants.ID) @Param(description="the ID of the VLAN IP range") diff --git a/api/src/org/apache/cloudstack/api/response/VolumeResponse.java b/api/src/org/apache/cloudstack/api/response/VolumeResponse.java index bc217680626..d92153d0dbe 100644 --- a/api/src/org/apache/cloudstack/api/response/VolumeResponse.java +++ b/api/src/org/apache/cloudstack/api/response/VolumeResponse.java @@ -18,7 +18,6 @@ package org.apache.cloudstack.api.response; import java.util.Date; import java.util.HashSet; -import java.util.List; import java.util.Set; import com.cloud.storage.Volume; @@ -26,9 +25,9 @@ import org.apache.cloudstack.api.ApiConstants; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; import org.apache.cloudstack.api.BaseResponse; -import org.apache.cloudstack.api.Entity; +import org.apache.cloudstack.api.EntityReference; -@Entity(value=Volume.class) +@EntityReference(value=Volume.class) @SuppressWarnings("unused") public class VolumeResponse extends BaseResponse implements ControlledViewEntityResponse{ @SerializedName(ApiConstants.ID) diff --git a/api/src/org/apache/cloudstack/api/response/VpcOfferingResponse.java b/api/src/org/apache/cloudstack/api/response/VpcOfferingResponse.java index 8395612a8de..3e196febe24 100644 --- a/api/src/org/apache/cloudstack/api/response/VpcOfferingResponse.java +++ b/api/src/org/apache/cloudstack/api/response/VpcOfferingResponse.java @@ -24,9 +24,9 @@ import org.apache.cloudstack.api.ApiConstants; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; import org.apache.cloudstack.api.BaseResponse; -import org.apache.cloudstack.api.Entity; +import org.apache.cloudstack.api.EntityReference; -@Entity(value=VpcOffering.class) +@EntityReference(value=VpcOffering.class) @SuppressWarnings("unused") public class VpcOfferingResponse extends BaseResponse { @SerializedName("id") @Param(description="the id of the vpc offering") diff --git a/api/src/org/apache/cloudstack/api/response/VpcResponse.java b/api/src/org/apache/cloudstack/api/response/VpcResponse.java index 7b9665118de..94ea5983bf6 100644 --- a/api/src/org/apache/cloudstack/api/response/VpcResponse.java +++ b/api/src/org/apache/cloudstack/api/response/VpcResponse.java @@ -24,9 +24,9 @@ import org.apache.cloudstack.api.ApiConstants; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; import org.apache.cloudstack.api.BaseResponse; -import org.apache.cloudstack.api.Entity; +import org.apache.cloudstack.api.EntityReference; -@Entity(value=Vpc.class) +@EntityReference(value=Vpc.class) @SuppressWarnings("unused") public class VpcResponse extends BaseResponse implements ControlledEntityResponse{ @SerializedName("id") @Param(description="the id of the VPC") diff --git a/api/src/org/apache/cloudstack/api/response/VpnUsersResponse.java b/api/src/org/apache/cloudstack/api/response/VpnUsersResponse.java index 98fee886447..958c8b59bc4 100644 --- a/api/src/org/apache/cloudstack/api/response/VpnUsersResponse.java +++ b/api/src/org/apache/cloudstack/api/response/VpnUsersResponse.java @@ -21,9 +21,9 @@ import org.apache.cloudstack.api.ApiConstants; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; import org.apache.cloudstack.api.BaseResponse; -import org.apache.cloudstack.api.Entity; +import org.apache.cloudstack.api.EntityReference; -@Entity(value = VpnUser.class) +@EntityReference(value = VpnUser.class) @SuppressWarnings("unused") public class VpnUsersResponse extends BaseResponse implements ControlledEntityResponse{ @SerializedName(ApiConstants.ID) @Param(description="the vpn userID") diff --git a/api/src/org/apache/cloudstack/api/response/ZoneResponse.java b/api/src/org/apache/cloudstack/api/response/ZoneResponse.java index 216247267f2..72e0bb2844d 100644 --- a/api/src/org/apache/cloudstack/api/response/ZoneResponse.java +++ b/api/src/org/apache/cloudstack/api/response/ZoneResponse.java @@ -20,13 +20,13 @@ import java.util.List; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseResponse; -import org.apache.cloudstack.api.Entity; +import org.apache.cloudstack.api.EntityReference; import com.cloud.dc.DataCenter; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; @SuppressWarnings("unused") -@Entity(value = DataCenter.class) +@EntityReference(value = DataCenter.class) public class ZoneResponse extends BaseResponse { @SerializedName(ApiConstants.ID) @Param(description="Zone id") private String id; diff --git a/server/src/com/cloud/api/ApiDispatcher.java b/server/src/com/cloud/api/ApiDispatcher.java index a9d8af3add6..b2b9ec2c408 100755 --- a/server/src/com/cloud/api/ApiDispatcher.java +++ b/server/src/com/cloud/api/ApiDispatcher.java @@ -540,9 +540,9 @@ public class ApiDispatcher { // APITODO: Find and get rid of all hardcoded params in API Cmds and service layer return -1L; } - // There may be multiple entities defined on the @Entity of a Response.class + // There may be multiple entities defined on the @EntityReference of a Response.class // UUID CommandType would expect only one entityType, so use the first entityType - Class[] entities = annotation.entityType()[0].getAnnotation(Entity.class).value(); + Class[] entities = annotation.entityType()[0].getAnnotation(EntityReference.class).value(); Long internalId = null; // Go through each entity which is an interface to a VO class and get a VO object // Try to getId() for the object using reflection, break on first non-null value From 7a7fe583e0a57b4b4c82200127037961eee14e1c Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Wed, 26 Dec 2012 15:55:34 -0800 Subject: [PATCH 221/421] Rename Implementation annotation to APICommand Signed-off-by: Rohit Yadav --- api/src/com/cloud/api/commands/AddS3Cmd.java | 4 ++-- .../api/commands/CreatePrivateNetworkCmd.java | 10 +++------- .../cloud/api/commands/DestroyConsoleProxyCmd.java | 10 +++------- .../commands/ListRecurringSnapshotScheduleCmd.java | 4 ++-- api/src/com/cloud/api/commands/ListS3sCmd.java | 4 ++-- .../commands/ListTemplateOrIsoPermissionsCmd.java | 4 ++-- .../api/{Implementation.java => APICommand.java} | 2 +- .../command/admin/account/CreateAccountCmd.java | 9 +++------ .../command/admin/account/DeleteAccountCmd.java | 10 +++------- .../command/admin/account/DisableAccountCmd.java | 10 +++------- .../command/admin/account/EnableAccountCmd.java | 4 ++-- .../api/command/admin/account/LockAccountCmd.java | 4 ++-- .../command/admin/account/UpdateAccountCmd.java | 4 ++-- .../command/admin/autoscale/CreateCounterCmd.java | 4 ++-- .../command/admin/autoscale/DeleteCounterCmd.java | 4 ++-- .../api/command/admin/cluster/AddClusterCmd.java | 9 +++------ .../command/admin/cluster/DeleteClusterCmd.java | 4 ++-- .../api/command/admin/cluster/ListClustersCmd.java | 4 ++-- .../command/admin/cluster/UpdateClusterCmd.java | 4 ++-- .../api/command/admin/config/ListCfgsByCmd.java | 4 ++-- .../config/ListHypervisorCapabilitiesCmd.java | 4 ++-- .../api/command/admin/config/UpdateCfgCmd.java | 4 ++-- .../config/UpdateHypervisorCapabilitiesCmd.java | 4 ++-- .../api/command/admin/domain/CreateDomainCmd.java | 9 +++------ .../api/command/admin/domain/DeleteDomainCmd.java | 10 +++------- .../admin/domain/ListDomainChildrenCmd.java | 4 ++-- .../api/command/admin/domain/ListDomainsCmd.java | 4 ++-- .../api/command/admin/domain/UpdateDomainCmd.java | 9 +++------ .../api/command/admin/host/AddHostCmd.java | 4 ++-- .../command/admin/host/AddSecondaryStorageCmd.java | 9 +++------ .../command/admin/host/CancelMaintenanceCmd.java | 4 ++-- .../api/command/admin/host/DeleteHostCmd.java | 4 ++-- .../api/command/admin/host/ListHostsCmd.java | 5 ++--- .../admin/host/PrepareForMaintenanceCmd.java | 4 ++-- .../api/command/admin/host/ReconnectHostCmd.java | 4 ++-- .../api/command/admin/host/UpdateHostCmd.java | 4 ++-- .../command/admin/host/UpdateHostPasswordCmd.java | 4 ++-- .../api/command/admin/ldap/LDAPConfigCmd.java | 4 ++-- .../api/command/admin/ldap/LDAPRemoveCmd.java | 4 ++-- .../command/admin/network/AddNetworkDeviceCmd.java | 4 ++-- .../network/AddNetworkServiceProviderCmd.java | 4 ++-- .../admin/network/CreateNetworkOfferingCmd.java | 9 +++------ .../admin/network/CreatePhysicalNetworkCmd.java | 4 ++-- .../network/CreateStorageNetworkIpRangeCmd.java | 4 ++-- .../admin/network/DeleteNetworkDeviceCmd.java | 4 ++-- .../admin/network/DeleteNetworkOfferingCmd.java | 4 ++-- .../network/DeleteNetworkServiceProviderCmd.java | 4 ++-- .../admin/network/DeletePhysicalNetworkCmd.java | 10 +++------- .../network/DeleteStorageNetworkIpRangeCmd.java | 10 +++------- .../admin/network/ListNetworkDeviceCmd.java | 4 ++-- .../network/ListNetworkServiceProvidersCmd.java | 4 ++-- .../admin/network/ListPhysicalNetworksCmd.java | 4 ++-- .../network/ListStorageNetworkIpRangeCmd.java | 10 +++------- .../network/ListSupportedNetworkServicesCmd.java | 4 ++-- .../admin/network/UpdateNetworkOfferingCmd.java | 9 +++------ .../network/UpdateNetworkServiceProviderCmd.java | 4 ++-- .../admin/network/UpdatePhysicalNetworkCmd.java | 4 ++-- .../network/UpdateStorageNetworkIpRangeCmd.java | 10 +++------- .../admin/offering/CreateDiskOfferingCmd.java | 4 ++-- .../admin/offering/CreateServiceOfferingCmd.java | 4 ++-- .../admin/offering/DeleteDiskOfferingCmd.java | 4 ++-- .../admin/offering/DeleteServiceOfferingCmd.java | 9 +++------ .../admin/offering/UpdateDiskOfferingCmd.java | 4 ++-- .../admin/offering/UpdateServiceOfferingCmd.java | 9 +++------ .../api/command/admin/pod/CreatePodCmd.java | 9 +++------ .../api/command/admin/pod/DeletePodCmd.java | 4 ++-- .../api/command/admin/pod/ListPodsByCmd.java | 4 ++-- .../api/command/admin/pod/UpdatePodCmd.java | 9 +++------ .../api/command/admin/resource/ListAlertsCmd.java | 4 ++-- .../command/admin/resource/ListCapacityCmd.java | 4 ++-- .../admin/resource/UploadCustomCertificateCmd.java | 10 +++------- .../router/ConfigureVirtualRouterElementCmd.java | 4 ++-- .../router/CreateVirtualRouterElementCmd.java | 11 +++-------- .../api/command/admin/router/DestroyRouterCmd.java | 4 ++-- .../api/command/admin/router/ListRoutersCmd.java | 4 ++-- .../admin/router/ListVirtualRouterElementsCmd.java | 4 ++-- .../api/command/admin/router/RebootRouterCmd.java | 10 +++------- .../api/command/admin/router/StartRouterCmd.java | 10 +++------- .../api/command/admin/router/StopRouterCmd.java | 4 ++-- .../api/command/admin/router/UpgradeRouterCmd.java | 9 +++------ .../CancelPrimaryStorageMaintenanceCmd.java | 4 ++-- .../admin/storagepool/CreateStoragePoolCmd.java | 9 +++------ .../command/admin/storagepool/DeletePoolCmd.java | 9 +++------ .../admin/storagepool/ListStoragePoolsCmd.java | 4 ++-- .../PreparePrimaryStorageForMaintenanceCmd.java | 4 ++-- .../admin/storagepool/UpdateStoragePoolCmd.java | 9 +++------ .../api/command/admin/swift/AddSwiftCmd.java | 9 +++------ .../api/command/admin/swift/ListSwiftsCmd.java | 4 ++-- .../command/admin/systemvm/DestroySystemVmCmd.java | 10 +++------- .../command/admin/systemvm/ListSystemVMsCmd.java | 4 ++-- .../command/admin/systemvm/MigrateSystemVMCmd.java | 4 ++-- .../command/admin/systemvm/RebootSystemVmCmd.java | 4 ++-- .../command/admin/systemvm/StartSystemVMCmd.java | 4 ++-- .../command/admin/systemvm/StopSystemVmCmd.java | 10 +++------- .../command/admin/systemvm/UpgradeSystemVMCmd.java | 9 +++------ .../command/admin/template/PrepareTemplateCmd.java | 4 ++-- .../api/command/admin/usage/AddTrafficTypeCmd.java | 4 ++-- .../command/admin/usage/DeleteTrafficTypeCmd.java | 4 ++-- .../usage/ListTrafficTypeImplementorsCmd.java | 9 +++------ .../command/admin/usage/ListTrafficTypesCmd.java | 4 ++-- .../command/admin/usage/UpdateTrafficTypeCmd.java | 4 ++-- .../api/command/admin/user/CreateUserCmd.java | 4 ++-- .../api/command/admin/user/DeleteUserCmd.java | 4 ++-- .../api/command/admin/user/DisableUserCmd.java | 4 ++-- .../api/command/admin/user/EnableUserCmd.java | 9 +++------ .../api/command/admin/user/GetUserCmd.java | 4 ++-- .../api/command/admin/user/ListUsersCmd.java | 4 ++-- .../api/command/admin/user/LockUserCmd.java | 4 ++-- .../api/command/admin/user/RegisterCmd.java | 4 ++-- .../api/command/admin/user/UpdateUserCmd.java | 9 +++------ .../command/admin/vlan/CreateVlanIpRangeCmd.java | 9 +++------ .../command/admin/vlan/DeleteVlanIpRangeCmd.java | 4 ++-- .../command/admin/vlan/ListVlanIpRangesCmd.java | 4 ++-- .../api/command/admin/vm/AssignVMCmd.java | 9 +++------ .../api/command/admin/vm/MigrateVMCmd.java | 10 +++------- .../api/command/admin/vm/RecoverVMCmd.java | 4 ++-- .../command/admin/vpc/CreatePrivateGatewayCmd.java | 4 ++-- .../command/admin/vpc/CreateVPCOfferingCmd.java | 10 +++------- .../command/admin/vpc/DeletePrivateGatewayCmd.java | 4 ++-- .../command/admin/vpc/DeleteVPCOfferingCmd.java | 4 ++-- .../command/admin/vpc/UpdateVPCOfferingCmd.java | 10 +++------- .../api/command/admin/zone/CreateZoneCmd.java | 4 ++-- .../api/command/admin/zone/DeleteZoneCmd.java | 9 +++------ .../admin/zone/MarkDefaultZoneForAccountCmd.java | 4 ++-- .../api/command/admin/zone/UpdateZoneCmd.java | 9 +++------ .../user/account/AddAccountToProjectCmd.java | 10 +++------- .../user/account/DeleteAccountFromProjectCmd.java | 10 +++------- .../api/command/user/account/ListAccountsCmd.java | 4 ++-- .../user/account/ListProjectAccountsCmd.java | 4 ++-- .../command/user/address/AssociateIPAddrCmd.java | 4 ++-- .../user/address/DisassociateIPAddrCmd.java | 10 +++------- .../user/address/ListPublicIpAddressesCmd.java | 4 ++-- .../user/autoscale/CreateAutoScalePolicyCmd.java | 10 +++------- .../user/autoscale/CreateAutoScaleVmGroupCmd.java | 10 +++------- .../autoscale/CreateAutoScaleVmProfileCmd.java | 4 ++-- .../command/user/autoscale/CreateConditionCmd.java | 4 ++-- .../user/autoscale/DeleteAutoScalePolicyCmd.java | 4 ++-- .../user/autoscale/DeleteAutoScaleVmGroupCmd.java | 4 ++-- .../autoscale/DeleteAutoScaleVmProfileCmd.java | 4 ++-- .../command/user/autoscale/DeleteConditionCmd.java | 4 ++-- .../user/autoscale/DisableAutoScaleVmGroupCmd.java | 4 ++-- .../user/autoscale/EnableAutoScaleVmGroupCmd.java | 10 +++------- .../user/autoscale/ListAutoScalePoliciesCmd.java | 4 ++-- .../user/autoscale/ListAutoScaleVmGroupsCmd.java | 4 ++-- .../user/autoscale/ListAutoScaleVmProfilesCmd.java | 4 ++-- .../command/user/autoscale/ListConditionsCmd.java | 4 ++-- .../command/user/autoscale/ListCountersCmd.java | 4 ++-- .../user/autoscale/UpdateAutoScalePolicyCmd.java | 4 ++-- .../user/autoscale/UpdateAutoScaleVmGroupCmd.java | 10 +++------- .../autoscale/UpdateAutoScaleVmProfileCmd.java | 10 +++------- .../command/user/config/ListCapabilitiesCmd.java | 4 ++-- .../api/command/user/event/ListEventTypesCmd.java | 4 ++-- .../api/command/user/event/ListEventsCmd.java | 4 ++-- .../user/firewall/CreateFirewallRuleCmd.java | 4 ++-- .../user/firewall/CreatePortForwardingRuleCmd.java | 11 +++-------- .../user/firewall/DeleteFirewallRuleCmd.java | 10 +++------- .../user/firewall/DeletePortForwardingRuleCmd.java | 10 +++------- .../user/firewall/ListFirewallRulesCmd.java | 4 ++-- .../user/firewall/ListPortForwardingRulesCmd.java | 4 ++-- .../user/firewall/UpdatePortForwardingRuleCmd.java | 4 ++-- .../user/guest/ListGuestOsCategoriesCmd.java | 4 ++-- .../api/command/user/guest/ListGuestOsCmd.java | 4 ++-- .../api/command/user/iso/AttachIsoCmd.java | 4 ++-- .../api/command/user/iso/DeleteIsoCmd.java | 4 ++-- .../api/command/user/iso/DetachIsoCmd.java | 4 ++-- .../api/command/user/iso/ExtractIsoCmd.java | 10 +++------- .../api/command/user/iso/ListIsosCmd.java | 4 ++-- .../api/command/user/iso/RegisterIsoCmd.java | 9 +++------ .../api/command/user/iso/UpdateIsoCmd.java | 4 ++-- .../command/user/iso/UpdateIsoPermissionsCmd.java | 4 ++-- .../api/command/user/job/ListAsyncJobsCmd.java | 4 ++-- .../command/user/job/QueryAsyncJobResultCmd.java | 4 ++-- .../loadbalancer/AssignToLoadBalancerRuleCmd.java | 4 ++-- .../loadbalancer/CreateLBStickinessPolicyCmd.java | 4 ++-- .../loadbalancer/CreateLoadBalancerRuleCmd.java | 4 ++-- .../loadbalancer/DeleteLBStickinessPolicyCmd.java | 4 ++-- .../loadbalancer/DeleteLoadBalancerRuleCmd.java | 10 +++------- .../loadbalancer/ListLBStickinessPoliciesCmd.java | 4 ++-- .../ListLoadBalancerRuleInstancesCmd.java | 4 ++-- .../loadbalancer/ListLoadBalancerRulesCmd.java | 4 ++-- .../RemoveFromLoadBalancerRuleCmd.java | 10 +++------- .../loadbalancer/UpdateLoadBalancerRuleCmd.java | 10 +++------- .../user/nat/CreateIpForwardingRuleCmd.java | 4 ++-- .../user/nat/DeleteIpForwardingRuleCmd.java | 4 ++-- .../api/command/user/nat/DisableStaticNatCmd.java | 4 ++-- .../api/command/user/nat/EnableStaticNatCmd.java | 4 ++-- .../command/user/nat/ListIpForwardingRulesCmd.java | 4 ++-- .../command/user/network/CreateNetworkACLCmd.java | 4 ++-- .../api/command/user/network/CreateNetworkCmd.java | 4 ++-- .../command/user/network/DeleteNetworkACLCmd.java | 4 ++-- .../api/command/user/network/DeleteNetworkCmd.java | 10 +++------- .../command/user/network/ListNetworkACLsCmd.java | 4 ++-- .../user/network/ListNetworkOfferingsCmd.java | 4 ++-- .../api/command/user/network/ListNetworksCmd.java | 4 ++-- .../command/user/network/RestartNetworkCmd.java | 10 +++------- .../api/command/user/network/UpdateNetworkCmd.java | 4 ++-- .../user/offering/ListDiskOfferingsCmd.java | 4 ++-- .../user/offering/ListServiceOfferingsCmd.java | 4 ++-- .../command/user/project/ActivateProjectCmd.java | 10 +++------- .../api/command/user/project/CreateProjectCmd.java | 10 +++------- .../api/command/user/project/DeleteProjectCmd.java | 4 ++-- .../user/project/DeleteProjectInvitationCmd.java | 4 ++-- .../user/project/ListProjectInvitationsCmd.java | 4 ++-- .../api/command/user/project/ListProjectsCmd.java | 4 ++-- .../command/user/project/SuspendProjectCmd.java | 10 +++------- .../api/command/user/project/UpdateProjectCmd.java | 4 ++-- .../user/project/UpdateProjectInvitationCmd.java | 10 +++------- .../user/resource/GetCloudIdentifierCmd.java | 4 ++-- .../command/user/resource/ListHypervisorsCmd.java | 4 ++-- .../user/resource/ListResourceLimitsCmd.java | 4 ++-- .../user/resource/UpdateResourceCountCmd.java | 9 +++------ .../user/resource/UpdateResourceLimitCmd.java | 9 +++------ .../AuthorizeSecurityGroupEgressCmd.java | 11 ++++------- .../AuthorizeSecurityGroupIngressCmd.java | 4 ++-- .../user/securitygroup/CreateSecurityGroupCmd.java | 4 ++-- .../user/securitygroup/DeleteSecurityGroupCmd.java | 4 ++-- .../user/securitygroup/ListSecurityGroupsCmd.java | 4 ++-- .../RevokeSecurityGroupEgressCmd.java | 10 +++------- .../RevokeSecurityGroupIngressCmd.java | 4 ++-- .../command/user/snapshot/CreateSnapshotCmd.java | 11 +++-------- .../user/snapshot/CreateSnapshotPolicyCmd.java | 9 +++------ .../command/user/snapshot/DeleteSnapshotCmd.java | 10 +++------- .../user/snapshot/DeleteSnapshotPoliciesCmd.java | 4 ++-- .../user/snapshot/ListSnapshotPoliciesCmd.java | 4 ++-- .../command/user/snapshot/ListSnapshotsCmd.java | 4 ++-- .../api/command/user/ssh/CreateSSHKeyPairCmd.java | 4 ++-- .../api/command/user/ssh/DeleteSSHKeyPairCmd.java | 4 ++-- .../api/command/user/ssh/ListSSHKeyPairsCmd.java | 4 ++-- .../command/user/ssh/RegisterSSHKeyPairCmd.java | 4 ++-- .../api/command/user/tag/CreateTagsCmd.java | 4 ++-- .../api/command/user/tag/DeleteTagsCmd.java | 4 ++-- .../api/command/user/tag/ListTagsCmd.java | 4 ++-- .../api/command/user/template/CopyTemplateCmd.java | 4 ++-- .../command/user/template/CreateTemplateCmd.java | 10 +++------- .../command/user/template/DeleteTemplateCmd.java | 10 +++------- .../command/user/template/ExtractTemplateCmd.java | 10 +++------- .../command/user/template/ListTemplatesCmd.java | 4 ++-- .../command/user/template/RegisterTemplateCmd.java | 4 ++-- .../command/user/template/UpdateTemplateCmd.java | 4 ++-- .../template/UpdateTemplatePermissionsCmd.java | 4 ++-- .../api/command/user/vm/DeployVMCmd.java | 11 +++-------- .../api/command/user/vm/DestroyVMCmd.java | 10 +++------- .../api/command/user/vm/GetVMPasswordCmd.java | 4 ++-- .../cloudstack/api/command/user/vm/ListVMsCmd.java | 4 ++-- .../api/command/user/vm/RebootVMCmd.java | 4 ++-- .../api/command/user/vm/ResetVMPasswordCmd.java | 4 ++-- .../api/command/user/vm/RestoreVMCmd.java | 4 ++-- .../cloudstack/api/command/user/vm/StartVMCmd.java | 10 +++------- .../cloudstack/api/command/user/vm/StopVMCmd.java | 10 +++------- .../api/command/user/vm/UpdateVMCmd.java | 4 ++-- .../api/command/user/vm/UpgradeVMCmd.java | 9 +++------ .../api/command/user/vmgroup/CreateVMGroupCmd.java | 9 +++------ .../api/command/user/vmgroup/DeleteVMGroupCmd.java | 9 +++------ .../api/command/user/vmgroup/ListVMGroupsCmd.java | 4 ++-- .../api/command/user/vmgroup/UpdateVMGroupCmd.java | 9 +++------ .../api/command/user/volume/AttachVolumeCmd.java | 4 ++-- .../api/command/user/volume/CreateVolumeCmd.java | 4 ++-- .../api/command/user/volume/DeleteVolumeCmd.java | 4 ++-- .../api/command/user/volume/DetachVolumeCmd.java | 10 +++------- .../api/command/user/volume/ExtractVolumeCmd.java | 4 ++-- .../api/command/user/volume/ListVolumesCmd.java | 9 ++------- .../api/command/user/volume/MigrateVolumeCmd.java | 4 ++-- .../api/command/user/volume/UploadVolumeCmd.java | 10 +++------- .../api/command/user/vpc/CreateStaticRouteCmd.java | 4 ++-- .../api/command/user/vpc/CreateVPCCmd.java | 4 ++-- .../api/command/user/vpc/DeleteStaticRouteCmd.java | 10 +++------- .../api/command/user/vpc/DeleteVPCCmd.java | 10 +++------- .../command/user/vpc/ListPrivateGatewaysCmd.java | 4 ++-- .../api/command/user/vpc/ListStaticRoutesCmd.java | 4 ++-- .../api/command/user/vpc/ListVPCOfferingsCmd.java | 4 ++-- .../api/command/user/vpc/ListVPCsCmd.java | 4 ++-- .../api/command/user/vpc/RestartVPCCmd.java | 10 +++------- .../api/command/user/vpc/UpdateVPCCmd.java | 4 ++-- .../api/command/user/vpn/AddVpnUserCmd.java | 4 ++-- .../command/user/vpn/CreateRemoteAccessVpnCmd.java | 11 +++-------- .../command/user/vpn/CreateVpnConnectionCmd.java | 11 +++-------- .../user/vpn/CreateVpnCustomerGatewayCmd.java | 4 ++-- .../api/command/user/vpn/CreateVpnGatewayCmd.java | 4 ++-- .../command/user/vpn/DeleteRemoteAccessVpnCmd.java | 4 ++-- .../command/user/vpn/DeleteVpnConnectionCmd.java | 10 +++------- .../user/vpn/DeleteVpnCustomerGatewayCmd.java | 10 +++------- .../api/command/user/vpn/DeleteVpnGatewayCmd.java | 10 +++------- .../command/user/vpn/ListRemoteAccessVpnsCmd.java | 4 ++-- .../command/user/vpn/ListVpnConnectionsCmd.java | 4 ++-- .../user/vpn/ListVpnCustomerGatewaysCmd.java | 4 ++-- .../api/command/user/vpn/ListVpnGatewaysCmd.java | 4 ++-- .../api/command/user/vpn/ListVpnUsersCmd.java | 4 ++-- .../api/command/user/vpn/RemoveVpnUserCmd.java | 4 ++-- .../command/user/vpn/ResetVpnConnectionCmd.java | 10 +++------- .../user/vpn/UpdateVpnCustomerGatewayCmd.java | 10 +++------- .../api/command/user/zone/ListZonesByCmd.java | 4 ++-- .../cloud/api/commands/netapp/AssociateLunCmd.java | 4 ++-- .../cloud/api/commands/netapp/CreateLunCmd.java | 4 ++-- .../commands/netapp/CreateVolumeOnFilerCmd.java | 4 ++-- .../api/commands/netapp/CreateVolumePoolCmd.java | 4 ++-- .../api/commands/netapp/DeleteVolumePoolCmd.java | 4 ++-- .../cloud/api/commands/netapp/DestroyLunCmd.java | 4 ++-- .../commands/netapp/DestroyVolumeOnFilerCmd.java | 9 +++------ .../api/commands/netapp/DissociateLunCmd.java | 9 +++------ .../com/cloud/api/commands/netapp/ListLunsCmd.java | 4 ++-- .../api/commands/netapp/ListVolumePoolsCmd.java | 4 ++-- .../api/commands/netapp/ListVolumesOnFilerCmd.java | 9 +++------ .../api/commands/netapp/ModifyVolumePoolCmd.java | 4 ++-- .../com/cloud/api/commands/ConfigureSimulator.java | 4 ++-- .../cloud/api/commands/DeleteCiscoNexusVSMCmd.java | 4 ++-- .../api/commands/DisableCiscoNexusVSMCmd.java | 4 ++-- .../cloud/api/commands/EnableCiscoNexusVSMCmd.java | 11 +++-------- .../cloud/api/commands/ListCiscoNexusVSMsCmd.java | 4 ++-- .../api/commands/AddExternalLoadBalancerCmd.java | 5 ++--- .../cloud/api/commands/AddF5LoadBalancerCmd.java | 11 +++-------- .../api/commands/ConfigureF5LoadBalancerCmd.java | 12 +++--------- .../commands/DeleteExternalLoadBalancerCmd.java | 11 +++-------- .../api/commands/DeleteF5LoadBalancerCmd.java | 4 ++-- .../api/commands/ListExternalLoadBalancersCmd.java | 10 +++------- .../commands/ListF5LoadBalancerNetworksCmd.java | 4 ++-- .../cloud/api/commands/ListF5LoadBalancersCmd.java | 12 +++--------- .../cloud/api/commands/AddExternalFirewallCmd.java | 4 ++-- .../com/cloud/api/commands/AddSrxFirewallCmd.java | 4 ++-- .../api/commands/ConfigureSrxFirewallCmd.java | 5 ++--- .../api/commands/DeleteExternalFirewallCmd.java | 4 ++-- .../cloud/api/commands/DeleteSrxFirewallCmd.java | 4 ++-- .../api/commands/ListExternalFirewallsCmd.java | 4 ++-- .../api/commands/ListSrxFirewallNetworksCmd.java | 12 +++--------- .../cloud/api/commands/ListSrxFirewallsCmd.java | 12 +++--------- .../api/commands/AddNetscalerLoadBalancerCmd.java | 12 +++--------- .../ConfigureNetscalerLoadBalancerCmd.java | 12 +++--------- .../commands/DeleteNetscalerLoadBalancerCmd.java | 4 ++-- .../ListNetscalerLoadBalancerNetworksCmd.java | 4 ++-- .../commands/ListNetscalerLoadBalancersCmd.java | 4 ++-- .../cloud/api/commands/AddNiciraNvpDeviceCmd.java | 11 +++-------- .../api/commands/DeleteNiciraNvpDeviceCmd.java | 4 ++-- .../commands/ListNiciraNvpDeviceNetworksCmd.java | 4 ++-- .../api/commands/ListNiciraNvpDevicesCmd.java | 12 +++--------- .../cloud/api/commands/AddTrafficMonitorCmd.java | 9 +++------ .../api/commands/DeleteTrafficMonitorCmd.java | 4 ++-- .../api/commands/GenerateUsageRecordsCmd.java | 9 +++------ .../com/cloud/api/commands/GetUsageRecordsCmd.java | 4 ++-- .../cloud/api/commands/ListTrafficMonitorsCmd.java | 4 ++-- .../com/cloud/api/commands/ListUsageTypesCmd.java | 4 ++-- server/src/com/cloud/api/doc/ApiXmlDocWriter.java | 14 +++++--------- 340 files changed, 794 insertions(+), 1236 deletions(-) rename api/src/org/apache/cloudstack/api/{Implementation.java => APICommand.java} (97%) diff --git a/api/src/com/cloud/api/commands/AddS3Cmd.java b/api/src/com/cloud/api/commands/AddS3Cmd.java index 8ef6c98e51b..ec5534a2a7d 100644 --- a/api/src/com/cloud/api/commands/AddS3Cmd.java +++ b/api/src/com/cloud/api/commands/AddS3Cmd.java @@ -32,7 +32,7 @@ import static org.apache.cloudstack.api.BaseCmd.CommandType.BOOLEAN; import static com.cloud.user.Account.ACCOUNT_ID_SYSTEM; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; import com.cloud.api.response.S3Response; @@ -44,7 +44,7 @@ import com.cloud.exception.ResourceAllocationException; import com.cloud.exception.ResourceUnavailableException; import com.cloud.storage.S3; -@Implementation(description = "Adds S3", responseObject = S3Response.class, since = "4.0.0") +@APICommand(description = "Adds S3", responseObject = S3Response.class, since = "4.0.0") public final class AddS3Cmd extends BaseCmd { private static String COMMAND_NAME = "adds3response"; diff --git a/api/src/com/cloud/api/commands/CreatePrivateNetworkCmd.java b/api/src/com/cloud/api/commands/CreatePrivateNetworkCmd.java index 92dc5a6109d..92c7ac58be0 100644 --- a/api/src/com/cloud/api/commands/CreatePrivateNetworkCmd.java +++ b/api/src/com/cloud/api/commands/CreatePrivateNetworkCmd.java @@ -16,17 +16,13 @@ // under the License. package com.cloud.api.commands; +import org.apache.cloudstack.api.*; import org.apache.cloudstack.api.response.DomainResponse; import org.apache.cloudstack.api.response.PhysicalNetworkResponse; import org.apache.cloudstack.api.response.ProjectResponse; import org.apache.log4j.Logger; -import org.apache.cloudstack.api.ApiConstants; -import org.apache.cloudstack.api.BaseAsyncCreateCmd; -import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.Implementation; -import org.apache.cloudstack.api.Parameter; -import org.apache.cloudstack.api.ServerApiException; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.response.NetworkResponse; import com.cloud.event.EventTypes; import com.cloud.exception.ConcurrentOperationException; @@ -35,7 +31,7 @@ import com.cloud.exception.ResourceAllocationException; import com.cloud.network.Network; import com.cloud.user.UserContext; -@Implementation(description="Creates a private network", responseObject=NetworkResponse.class) +@APICommand(description="Creates a private network", responseObject=NetworkResponse.class) public class CreatePrivateNetworkCmd extends BaseAsyncCreateCmd { public static final Logger s_logger = Logger.getLogger(CreatePrivateNetworkCmd.class.getName()); diff --git a/api/src/com/cloud/api/commands/DestroyConsoleProxyCmd.java b/api/src/com/cloud/api/commands/DestroyConsoleProxyCmd.java index ef9be6b0598..17bafb1918d 100644 --- a/api/src/com/cloud/api/commands/DestroyConsoleProxyCmd.java +++ b/api/src/com/cloud/api/commands/DestroyConsoleProxyCmd.java @@ -16,20 +16,16 @@ // under the License. package com.cloud.api.commands; +import org.apache.cloudstack.api.*; import org.apache.log4j.Logger; -import org.apache.cloudstack.api.ApiConstants; -import org.apache.cloudstack.api.BaseAsyncCmd; -import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.Implementation; -import org.apache.cloudstack.api.Parameter; -import org.apache.cloudstack.api.ServerApiException; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.response.SuccessResponse; import com.cloud.event.EventTypes; import com.cloud.user.Account; import com.cloud.user.UserContext; -@Implementation(description="Destroys console proxy", responseObject=SuccessResponse.class) +@APICommand(description="Destroys console proxy", responseObject=SuccessResponse.class) public class DestroyConsoleProxyCmd extends BaseAsyncCmd { public static final Logger s_logger = Logger.getLogger(DestroyConsoleProxyCmd.class.getName()); diff --git a/api/src/com/cloud/api/commands/ListRecurringSnapshotScheduleCmd.java b/api/src/com/cloud/api/commands/ListRecurringSnapshotScheduleCmd.java index 7fb6e0675f0..41f28f93110 100644 --- a/api/src/com/cloud/api/commands/ListRecurringSnapshotScheduleCmd.java +++ b/api/src/com/cloud/api/commands/ListRecurringSnapshotScheduleCmd.java @@ -19,15 +19,15 @@ package com.cloud.api.commands; import java.util.ArrayList; import java.util.List; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseListCmd; -import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.response.ListResponse; import org.apache.cloudstack.api.response.SnapshotScheduleResponse; import com.cloud.storage.snapshot.SnapshotSchedule; -@Implementation(description="Lists recurring snapshot schedule", responseObject=SnapshotScheduleResponse.class) +@APICommand(description="Lists recurring snapshot schedule", responseObject=SnapshotScheduleResponse.class) public class ListRecurringSnapshotScheduleCmd extends BaseListCmd { private static final String s_name = "listrecurringsnapshotscheduleresponse"; diff --git a/api/src/com/cloud/api/commands/ListS3sCmd.java b/api/src/com/cloud/api/commands/ListS3sCmd.java index 86c8c539d9a..714ad8e00e2 100644 --- a/api/src/com/cloud/api/commands/ListS3sCmd.java +++ b/api/src/com/cloud/api/commands/ListS3sCmd.java @@ -24,8 +24,8 @@ import static org.apache.cloudstack.api.BaseCmd.CommandType.LONG; import java.util.ArrayList; import java.util.List; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.BaseListCmd; -import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; import org.apache.cloudstack.api.response.ListResponse; @@ -37,7 +37,7 @@ import com.cloud.exception.ResourceAllocationException; import com.cloud.exception.ResourceUnavailableException; import com.cloud.storage.S3; -@Implementation(description = "Lists S3s", responseObject = S3Response.class, since = "4.0.0") +@APICommand(description = "Lists S3s", responseObject = S3Response.class, since = "4.0.0") public final class ListS3sCmd extends BaseListCmd { private static final String COMMAND_NAME = "lists3sresponse"; diff --git a/api/src/com/cloud/api/commands/ListTemplateOrIsoPermissionsCmd.java b/api/src/com/cloud/api/commands/ListTemplateOrIsoPermissionsCmd.java index 10eeea250e2..54bbace4493 100644 --- a/api/src/com/cloud/api/commands/ListTemplateOrIsoPermissionsCmd.java +++ b/api/src/com/cloud/api/commands/ListTemplateOrIsoPermissionsCmd.java @@ -18,18 +18,18 @@ package com.cloud.api.commands; import java.util.List; +import org.apache.cloudstack.api.APICommand; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.response.TemplatePermissionsResponse; import com.cloud.template.VirtualMachineTemplate; import com.cloud.user.Account; import com.cloud.user.UserContext; -@Implementation(description="List template visibility and all accounts that have permissions to view this template.", responseObject=TemplatePermissionsResponse.class) +@APICommand(description="List template visibility and all accounts that have permissions to view this template.", responseObject=TemplatePermissionsResponse.class) public class ListTemplateOrIsoPermissionsCmd extends BaseCmd { public Logger s_logger = getLogger(); protected String s_name = "listtemplatepermissionsresponse"; diff --git a/api/src/org/apache/cloudstack/api/Implementation.java b/api/src/org/apache/cloudstack/api/APICommand.java similarity index 97% rename from api/src/org/apache/cloudstack/api/Implementation.java rename to api/src/org/apache/cloudstack/api/APICommand.java index b1c1b774629..7c185b1ae62 100644 --- a/api/src/org/apache/cloudstack/api/Implementation.java +++ b/api/src/org/apache/cloudstack/api/APICommand.java @@ -24,7 +24,7 @@ import java.lang.annotation.Target; @Retention(RetentionPolicy.RUNTIME) @Target({ TYPE }) -public @interface Implementation { +public @interface APICommand { Class responseObject(); String description() default ""; diff --git a/api/src/org/apache/cloudstack/api/command/admin/account/CreateAccountCmd.java b/api/src/org/apache/cloudstack/api/command/admin/account/CreateAccountCmd.java index 27292ac2a0e..45fed67130f 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/account/CreateAccountCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/account/CreateAccountCmd.java @@ -19,13 +19,10 @@ package org.apache.cloudstack.api.command.admin.account; import java.util.Collection; import java.util.Map; +import org.apache.cloudstack.api.*; import org.apache.log4j.Logger; -import org.apache.cloudstack.api.ApiConstants; -import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.Implementation; -import org.apache.cloudstack.api.Parameter; -import org.apache.cloudstack.api.ServerApiException; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.response.AccountResponse; import org.apache.cloudstack.api.response.DomainResponse; import org.apache.cloudstack.api.response.UserResponse; @@ -33,7 +30,7 @@ import com.cloud.user.Account; import com.cloud.user.UserAccount; import com.cloud.user.UserContext; -@Implementation(description="Creates an account", responseObject=UserResponse.class) +@APICommand(description="Creates an account", responseObject=UserResponse.class) public class CreateAccountCmd extends BaseCmd { public static final Logger s_logger = Logger.getLogger(CreateAccountCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/admin/account/DeleteAccountCmd.java b/api/src/org/apache/cloudstack/api/command/admin/account/DeleteAccountCmd.java index d1f39bb2044..faa01f1a966 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/account/DeleteAccountCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/account/DeleteAccountCmd.java @@ -16,14 +16,10 @@ // under the License. package org.apache.cloudstack.api.command.admin.account; +import org.apache.cloudstack.api.*; import org.apache.log4j.Logger; -import org.apache.cloudstack.api.ApiConstants; -import org.apache.cloudstack.api.BaseAsyncCmd; -import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.Implementation; -import org.apache.cloudstack.api.Parameter; -import org.apache.cloudstack.api.ServerApiException; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.response.AccountResponse; import org.apache.cloudstack.api.response.SuccessResponse; import com.cloud.async.AsyncJob; @@ -32,7 +28,7 @@ import com.cloud.user.Account; import com.cloud.user.User; import com.cloud.user.UserContext; -@Implementation(description="Deletes a account, and all users associated with this account", responseObject=SuccessResponse.class) +@APICommand(description="Deletes a account, and all users associated with this account", responseObject=SuccessResponse.class) public class DeleteAccountCmd extends BaseAsyncCmd { public static final Logger s_logger = Logger.getLogger(DeleteAccountCmd.class.getName()); private static final String s_name = "deleteaccountresponse"; diff --git a/api/src/org/apache/cloudstack/api/command/admin/account/DisableAccountCmd.java b/api/src/org/apache/cloudstack/api/command/admin/account/DisableAccountCmd.java index 9e266b4d203..ffde50a3900 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/account/DisableAccountCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/account/DisableAccountCmd.java @@ -16,14 +16,10 @@ // under the License. package org.apache.cloudstack.api.command.admin.account; +import org.apache.cloudstack.api.*; import org.apache.log4j.Logger; -import org.apache.cloudstack.api.ApiConstants; -import org.apache.cloudstack.api.BaseAsyncCmd; -import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.Implementation; -import org.apache.cloudstack.api.Parameter; -import org.apache.cloudstack.api.ServerApiException; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.response.AccountResponse; import org.apache.cloudstack.api.response.DomainResponse; @@ -34,7 +30,7 @@ import com.cloud.exception.ResourceUnavailableException; import com.cloud.user.Account; import com.cloud.user.UserContext; -@Implementation(description="Disables an account", responseObject=AccountResponse.class) +@APICommand(description="Disables an account", responseObject=AccountResponse.class) public class DisableAccountCmd extends BaseAsyncCmd { public static final Logger s_logger = Logger.getLogger(DisableAccountCmd.class.getName()); private static final String s_name = "disableaccountresponse"; diff --git a/api/src/org/apache/cloudstack/api/command/admin/account/EnableAccountCmd.java b/api/src/org/apache/cloudstack/api/command/admin/account/EnableAccountCmd.java index 35476a314b7..dba2007e513 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/account/EnableAccountCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/account/EnableAccountCmd.java @@ -20,7 +20,7 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; import org.apache.cloudstack.api.response.AccountResponse; @@ -28,7 +28,7 @@ import org.apache.cloudstack.api.response.DomainResponse; import com.cloud.user.Account; -@Implementation(description="Enables an account", responseObject=AccountResponse.class) +@APICommand(description="Enables an account", responseObject=AccountResponse.class) public class EnableAccountCmd extends BaseCmd { public static final Logger s_logger = Logger.getLogger(EnableAccountCmd.class.getName()); private static final String s_name = "enableaccountresponse"; diff --git a/api/src/org/apache/cloudstack/api/command/admin/account/LockAccountCmd.java b/api/src/org/apache/cloudstack/api/command/admin/account/LockAccountCmd.java index c5e7871ace8..8ff9dd4ca60 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/account/LockAccountCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/account/LockAccountCmd.java @@ -20,14 +20,14 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.response.AccountResponse; import org.apache.cloudstack.api.response.DomainResponse; import com.cloud.user.Account; -@Implementation(description="Locks an account", responseObject=AccountResponse.class) +@APICommand(description="Locks an account", responseObject=AccountResponse.class) public class LockAccountCmd extends BaseCmd { public static final Logger s_logger = Logger.getLogger(LockAccountCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/admin/account/UpdateAccountCmd.java b/api/src/org/apache/cloudstack/api/command/admin/account/UpdateAccountCmd.java index e9bf76d37ba..f8e41f774fd 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/account/UpdateAccountCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/account/UpdateAccountCmd.java @@ -23,7 +23,7 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; import org.apache.cloudstack.api.response.AccountResponse; @@ -31,7 +31,7 @@ import org.apache.cloudstack.api.response.DomainResponse; import com.cloud.user.Account; -@Implementation(description="Updates account information for the authenticated user", responseObject=AccountResponse.class) +@APICommand(description="Updates account information for the authenticated user", responseObject=AccountResponse.class) public class UpdateAccountCmd extends BaseCmd{ public static final Logger s_logger = Logger.getLogger(UpdateAccountCmd.class.getName()); private static final String s_name = "updateaccountresponse"; diff --git a/api/src/org/apache/cloudstack/api/command/admin/autoscale/CreateCounterCmd.java b/api/src/org/apache/cloudstack/api/command/admin/autoscale/CreateCounterCmd.java index c68ed9ff94a..4fb69a8352c 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/autoscale/CreateCounterCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/autoscale/CreateCounterCmd.java @@ -22,7 +22,7 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseAsyncCreateCmd; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; import org.apache.cloudstack.api.response.CounterResponse; @@ -31,7 +31,7 @@ import com.cloud.event.EventTypes; import com.cloud.network.as.Counter; import com.cloud.user.Account; -@Implementation(description = "Adds metric counter", responseObject = CounterResponse.class) +@APICommand(description = "Adds metric counter", responseObject = CounterResponse.class) public class CreateCounterCmd extends BaseAsyncCreateCmd { public static final Logger s_logger = Logger.getLogger(CreateCounterCmd.class.getName()); private static final String s_name = "counterresponse"; diff --git a/api/src/org/apache/cloudstack/api/command/admin/autoscale/DeleteCounterCmd.java b/api/src/org/apache/cloudstack/api/command/admin/autoscale/DeleteCounterCmd.java index 0cde5cd0fea..836d18cee16 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/autoscale/DeleteCounterCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/autoscale/DeleteCounterCmd.java @@ -22,7 +22,7 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; import org.apache.cloudstack.api.response.CounterResponse; @@ -32,7 +32,7 @@ import com.cloud.event.EventTypes; import com.cloud.exception.ResourceInUseException; import com.cloud.user.Account; -@Implementation(description = "Deletes a counter", responseObject = SuccessResponse.class) +@APICommand(description = "Deletes a counter", responseObject = SuccessResponse.class) public class DeleteCounterCmd extends BaseAsyncCmd { public static final Logger s_logger = Logger.getLogger(DeleteCounterCmd.class.getName()); private static final String s_name = "deletecounterresponse"; diff --git a/api/src/org/apache/cloudstack/api/command/admin/cluster/AddClusterCmd.java b/api/src/org/apache/cloudstack/api/command/admin/cluster/AddClusterCmd.java index d9564de3775..543ee29fc7f 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/cluster/AddClusterCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/cluster/AddClusterCmd.java @@ -20,13 +20,10 @@ package org.apache.cloudstack.api.command.admin.cluster; import java.util.ArrayList; import java.util.List; +import org.apache.cloudstack.api.*; import org.apache.log4j.Logger; -import org.apache.cloudstack.api.ApiConstants; -import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.Implementation; -import org.apache.cloudstack.api.Parameter; -import org.apache.cloudstack.api.ServerApiException; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.response.ClusterResponse; import org.apache.cloudstack.api.response.ListResponse; import org.apache.cloudstack.api.response.PodResponse; @@ -37,7 +34,7 @@ import com.cloud.exception.ResourceInUseException; import com.cloud.org.Cluster; import com.cloud.user.Account; -@Implementation(description="Adds a new cluster", responseObject=ClusterResponse.class) +@APICommand(description="Adds a new cluster", responseObject=ClusterResponse.class) public class AddClusterCmd extends BaseCmd { public static final Logger s_logger = Logger.getLogger(AddClusterCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/admin/cluster/DeleteClusterCmd.java b/api/src/org/apache/cloudstack/api/command/admin/cluster/DeleteClusterCmd.java index 23a80faecd3..1f90696d7c0 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/cluster/DeleteClusterCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/cluster/DeleteClusterCmd.java @@ -20,14 +20,14 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; import org.apache.cloudstack.api.response.ClusterResponse; import org.apache.cloudstack.api.response.SuccessResponse; import com.cloud.user.Account; -@Implementation(description="Deletes a cluster.", responseObject=SuccessResponse.class) +@APICommand(description="Deletes a cluster.", responseObject=SuccessResponse.class) public class DeleteClusterCmd extends BaseCmd { public static final Logger s_logger = Logger.getLogger(DeleteClusterCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/admin/cluster/ListClustersCmd.java b/api/src/org/apache/cloudstack/api/command/admin/cluster/ListClustersCmd.java index 4ff55acfcd6..4830f6fd7e2 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/cluster/ListClustersCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/cluster/ListClustersCmd.java @@ -25,7 +25,7 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseListCmd; -import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.response.ClusterResponse; import org.apache.cloudstack.api.response.ListResponse; @@ -34,7 +34,7 @@ import org.apache.cloudstack.api.response.ZoneResponse; import com.cloud.org.Cluster; import com.cloud.utils.Pair; -@Implementation(description="Lists clusters.", responseObject=ClusterResponse.class) +@APICommand(description="Lists clusters.", responseObject=ClusterResponse.class) public class ListClustersCmd extends BaseListCmd { public static final Logger s_logger = Logger.getLogger(ListServiceOfferingsCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/admin/cluster/UpdateClusterCmd.java b/api/src/org/apache/cloudstack/api/command/admin/cluster/UpdateClusterCmd.java index fe1800abaa0..59403cdb6bc 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/cluster/UpdateClusterCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/cluster/UpdateClusterCmd.java @@ -20,7 +20,7 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; import org.apache.cloudstack.api.response.ClusterResponse; @@ -28,7 +28,7 @@ import com.cloud.exception.InvalidParameterValueException; import com.cloud.org.Cluster; import com.cloud.user.Account; -@Implementation(description="Updates an existing cluster", responseObject=ClusterResponse.class) +@APICommand(description="Updates an existing cluster", responseObject=ClusterResponse.class) public class UpdateClusterCmd extends BaseCmd { public static final Logger s_logger = Logger.getLogger(AddClusterCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/admin/config/ListCfgsByCmd.java b/api/src/org/apache/cloudstack/api/command/admin/config/ListCfgsByCmd.java index c7ef7737b25..590a6fbc089 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/config/ListCfgsByCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/config/ListCfgsByCmd.java @@ -19,18 +19,18 @@ package org.apache.cloudstack.api.command.admin.config; import java.util.ArrayList; import java.util.List; +import org.apache.cloudstack.api.APICommand; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseListCmd; -import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.response.ConfigurationResponse; import org.apache.cloudstack.api.response.ListResponse; import com.cloud.configuration.Configuration; import com.cloud.utils.Pair; -@Implementation(description = "Lists all configurations.", responseObject = ConfigurationResponse.class) +@APICommand(description = "Lists all configurations.", responseObject = ConfigurationResponse.class) public class ListCfgsByCmd extends BaseListCmd { public static final Logger s_logger = Logger.getLogger(ListCfgsByCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/admin/config/ListHypervisorCapabilitiesCmd.java b/api/src/org/apache/cloudstack/api/command/admin/config/ListHypervisorCapabilitiesCmd.java index 9d8e59f080a..588427474f2 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/config/ListHypervisorCapabilitiesCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/config/ListHypervisorCapabilitiesCmd.java @@ -19,11 +19,11 @@ package org.apache.cloudstack.api.command.admin.config; import java.util.ArrayList; import java.util.List; +import org.apache.cloudstack.api.APICommand; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseListCmd; -import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.response.HypervisorCapabilitiesResponse; import org.apache.cloudstack.api.response.ListResponse; @@ -31,7 +31,7 @@ import com.cloud.hypervisor.Hypervisor.HypervisorType; import com.cloud.hypervisor.HypervisorCapabilities; import com.cloud.utils.Pair; -@Implementation(description="Lists all hypervisor capabilities.", responseObject=HypervisorCapabilitiesResponse.class, since="3.0.0") +@APICommand(description="Lists all hypervisor capabilities.", responseObject=HypervisorCapabilitiesResponse.class, since="3.0.0") public class ListHypervisorCapabilitiesCmd extends BaseListCmd { public static final Logger s_logger = Logger.getLogger(ListHypervisorCapabilitiesCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/admin/config/UpdateCfgCmd.java b/api/src/org/apache/cloudstack/api/command/admin/config/UpdateCfgCmd.java index ced4b7911ee..5cf4246675e 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/config/UpdateCfgCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/config/UpdateCfgCmd.java @@ -20,14 +20,14 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; import org.apache.cloudstack.api.response.ConfigurationResponse; import com.cloud.configuration.Configuration; import com.cloud.user.Account; -@Implementation(description="Updates a configuration.", responseObject=ConfigurationResponse.class) +@APICommand(description="Updates a configuration.", responseObject=ConfigurationResponse.class) public class UpdateCfgCmd extends BaseCmd { public static final Logger s_logger = Logger.getLogger(UpdateCfgCmd.class.getName()); private static final String s_name = "updateconfigurationresponse"; diff --git a/api/src/org/apache/cloudstack/api/command/admin/config/UpdateHypervisorCapabilitiesCmd.java b/api/src/org/apache/cloudstack/api/command/admin/config/UpdateHypervisorCapabilitiesCmd.java index 4fc9a8373cc..cc380ddf386 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/config/UpdateHypervisorCapabilitiesCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/config/UpdateHypervisorCapabilitiesCmd.java @@ -20,7 +20,7 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; import org.apache.cloudstack.api.response.HypervisorCapabilitiesResponse; @@ -28,7 +28,7 @@ import org.apache.cloudstack.api.response.ServiceOfferingResponse; import com.cloud.hypervisor.HypervisorCapabilities; import com.cloud.user.Account; -@Implementation(description="Updates a hypervisor capabilities.", responseObject=ServiceOfferingResponse.class, since="3.0.0") +@APICommand(description="Updates a hypervisor capabilities.", responseObject=ServiceOfferingResponse.class, since="3.0.0") public class UpdateHypervisorCapabilitiesCmd extends BaseCmd { public static final Logger s_logger = Logger.getLogger(UpdateHypervisorCapabilitiesCmd.class.getName()); private static final String s_name = "updatehypervisorcapabilitiesresponse"; diff --git a/api/src/org/apache/cloudstack/api/command/admin/domain/CreateDomainCmd.java b/api/src/org/apache/cloudstack/api/command/admin/domain/CreateDomainCmd.java index 269df5804da..6ae3161c157 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/domain/CreateDomainCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/domain/CreateDomainCmd.java @@ -16,19 +16,16 @@ // under the License. package org.apache.cloudstack.api.command.admin.domain; +import org.apache.cloudstack.api.*; import org.apache.log4j.Logger; -import org.apache.cloudstack.api.ApiConstants; -import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.Implementation; -import org.apache.cloudstack.api.Parameter; -import org.apache.cloudstack.api.ServerApiException; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.response.DomainResponse; import com.cloud.domain.Domain; import com.cloud.user.Account; import com.cloud.user.UserContext; -@Implementation(description="Creates a domain", responseObject=DomainResponse.class) +@APICommand(description="Creates a domain", responseObject=DomainResponse.class) public class CreateDomainCmd extends BaseCmd { public static final Logger s_logger = Logger.getLogger(CreateDomainCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/admin/domain/DeleteDomainCmd.java b/api/src/org/apache/cloudstack/api/command/admin/domain/DeleteDomainCmd.java index dc5ae7a5192..d63475af617 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/domain/DeleteDomainCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/domain/DeleteDomainCmd.java @@ -16,22 +16,18 @@ // under the License. package org.apache.cloudstack.api.command.admin.domain; +import org.apache.cloudstack.api.*; import org.apache.cloudstack.api.response.DomainResponse; import org.apache.log4j.Logger; -import org.apache.cloudstack.api.ApiConstants; -import org.apache.cloudstack.api.BaseAsyncCmd; -import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.Implementation; -import org.apache.cloudstack.api.Parameter; -import org.apache.cloudstack.api.ServerApiException; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.response.SuccessResponse; import com.cloud.domain.Domain; import com.cloud.event.EventTypes; import com.cloud.user.Account; import com.cloud.user.UserContext; -@Implementation(description="Deletes a specified domain", responseObject=SuccessResponse.class) +@APICommand(description="Deletes a specified domain", responseObject=SuccessResponse.class) public class DeleteDomainCmd extends BaseAsyncCmd { public static final Logger s_logger = Logger.getLogger(DeleteDomainCmd.class.getName()); private static final String s_name = "deletedomainresponse"; diff --git a/api/src/org/apache/cloudstack/api/command/admin/domain/ListDomainChildrenCmd.java b/api/src/org/apache/cloudstack/api/command/admin/domain/ListDomainChildrenCmd.java index 166a09f831d..7c4b0222b98 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/domain/ListDomainChildrenCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/domain/ListDomainChildrenCmd.java @@ -23,14 +23,14 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseListCmd; -import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.response.DomainResponse; import org.apache.cloudstack.api.response.ListResponse; import com.cloud.domain.Domain; import com.cloud.utils.Pair; -@Implementation(description="Lists all children domains belonging to a specified domain", responseObject=DomainResponse.class) +@APICommand(description="Lists all children domains belonging to a specified domain", responseObject=DomainResponse.class) public class ListDomainChildrenCmd extends BaseListCmd { public static final Logger s_logger = Logger.getLogger(ListDomainChildrenCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/admin/domain/ListDomainsCmd.java b/api/src/org/apache/cloudstack/api/command/admin/domain/ListDomainsCmd.java index 0d4c57dcf52..4e0ac9c186b 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/domain/ListDomainsCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/domain/ListDomainsCmd.java @@ -23,14 +23,14 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseListCmd; -import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.response.DomainResponse; import org.apache.cloudstack.api.response.ListResponse; import com.cloud.domain.Domain; import com.cloud.utils.Pair; -@Implementation(description="Lists domains and provides detailed information for listed domains", responseObject=DomainResponse.class) +@APICommand(description="Lists domains and provides detailed information for listed domains", responseObject=DomainResponse.class) public class ListDomainsCmd extends BaseListCmd { public static final Logger s_logger = Logger.getLogger(ListDomainsCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/admin/domain/UpdateDomainCmd.java b/api/src/org/apache/cloudstack/api/command/admin/domain/UpdateDomainCmd.java index fa15f477973..86a160fdc7b 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/domain/UpdateDomainCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/domain/UpdateDomainCmd.java @@ -16,19 +16,16 @@ // under the License. package org.apache.cloudstack.api.command.admin.domain; +import org.apache.cloudstack.api.*; import org.apache.log4j.Logger; -import org.apache.cloudstack.api.ApiConstants; -import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.Implementation; -import org.apache.cloudstack.api.Parameter; -import org.apache.cloudstack.api.ServerApiException; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.response.DomainResponse; import com.cloud.domain.Domain; import com.cloud.user.Account; import com.cloud.user.UserContext; -@Implementation(description="Updates a domain with a new name", responseObject=DomainResponse.class) +@APICommand(description="Updates a domain with a new name", responseObject=DomainResponse.class) public class UpdateDomainCmd extends BaseCmd { public static final Logger s_logger = Logger.getLogger(UpdateDomainCmd.class.getName()); private static final String s_name = "updatedomainresponse"; diff --git a/api/src/org/apache/cloudstack/api/command/admin/host/AddHostCmd.java b/api/src/org/apache/cloudstack/api/command/admin/host/AddHostCmd.java index 76832e00f27..c0d774a1c2b 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/host/AddHostCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/host/AddHostCmd.java @@ -23,7 +23,7 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; import org.apache.cloudstack.api.response.ClusterResponse; @@ -35,7 +35,7 @@ import com.cloud.exception.DiscoveryException; import com.cloud.host.Host; import com.cloud.user.Account; -@Implementation(description="Adds a new host.", responseObject=HostResponse.class) +@APICommand(description="Adds a new host.", responseObject=HostResponse.class) public class AddHostCmd extends BaseCmd { public static final Logger s_logger = Logger.getLogger(AddHostCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/admin/host/AddSecondaryStorageCmd.java b/api/src/org/apache/cloudstack/api/command/admin/host/AddSecondaryStorageCmd.java index 01ca3920bb6..faa214df5d3 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/host/AddSecondaryStorageCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/host/AddSecondaryStorageCmd.java @@ -18,20 +18,17 @@ package org.apache.cloudstack.api.command.admin.host; import java.util.List; +import org.apache.cloudstack.api.*; import org.apache.log4j.Logger; -import org.apache.cloudstack.api.ApiConstants; -import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.Implementation; -import org.apache.cloudstack.api.Parameter; -import org.apache.cloudstack.api.ServerApiException; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.response.HostResponse; import org.apache.cloudstack.api.response.ZoneResponse; import com.cloud.exception.DiscoveryException; import com.cloud.host.Host; import com.cloud.user.Account; -@Implementation(description="Adds secondary storage.", responseObject=HostResponse.class) +@APICommand(description="Adds secondary storage.", responseObject=HostResponse.class) public class AddSecondaryStorageCmd extends BaseCmd { public static final Logger s_logger = Logger.getLogger(AddSecondaryStorageCmd.class.getName()); private static final String s_name = "addsecondarystorageresponse"; diff --git a/api/src/org/apache/cloudstack/api/command/admin/host/CancelMaintenanceCmd.java b/api/src/org/apache/cloudstack/api/command/admin/host/CancelMaintenanceCmd.java index 35b7789f2da..3c5d5aa1b5a 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/host/CancelMaintenanceCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/host/CancelMaintenanceCmd.java @@ -21,7 +21,7 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; import org.apache.cloudstack.api.response.HostResponse; @@ -31,7 +31,7 @@ import com.cloud.host.Host; import com.cloud.user.Account; import com.cloud.user.UserContext; -@Implementation(description="Cancels host maintenance.", responseObject=HostResponse.class) +@APICommand(description="Cancels host maintenance.", responseObject=HostResponse.class) public class CancelMaintenanceCmd extends BaseAsyncCmd { public static final Logger s_logger = Logger.getLogger(CancelMaintenanceCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/admin/host/DeleteHostCmd.java b/api/src/org/apache/cloudstack/api/command/admin/host/DeleteHostCmd.java index c11bbcf4aa8..609b4938b27 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/host/DeleteHostCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/host/DeleteHostCmd.java @@ -21,13 +21,13 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; import org.apache.cloudstack.api.response.SuccessResponse; import com.cloud.user.Account; -@Implementation(description = "Deletes a host.", responseObject = SuccessResponse.class) +@APICommand(description = "Deletes a host.", responseObject = SuccessResponse.class) public class DeleteHostCmd extends BaseCmd { public static final Logger s_logger = Logger.getLogger(DeleteHostCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/admin/host/ListHostsCmd.java b/api/src/org/apache/cloudstack/api/command/admin/host/ListHostsCmd.java index 881b1f2c300..ec20ee67b74 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/host/ListHostsCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/host/ListHostsCmd.java @@ -20,15 +20,14 @@ import java.util.ArrayList; import java.util.EnumSet; import java.util.List; +import org.apache.cloudstack.api.APICommand; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.ApiConstants.HostDetails; import org.apache.cloudstack.api.BaseListCmd; -import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.response.ClusterResponse; -import org.apache.cloudstack.api.response.DomainRouterResponse; import org.apache.cloudstack.api.response.HostResponse; import org.apache.cloudstack.api.response.ListResponse; import org.apache.cloudstack.api.response.PodResponse; @@ -39,7 +38,7 @@ import com.cloud.exception.InvalidParameterValueException; import com.cloud.host.Host; import com.cloud.utils.Pair; -@Implementation(description="Lists hosts.", responseObject=HostResponse.class) +@APICommand(description="Lists hosts.", responseObject=HostResponse.class) public class ListHostsCmd extends BaseListCmd { public static final Logger s_logger = Logger.getLogger(ListHostsCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/admin/host/PrepareForMaintenanceCmd.java b/api/src/org/apache/cloudstack/api/command/admin/host/PrepareForMaintenanceCmd.java index 6eacba5cd13..a6ff9db30a8 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/host/PrepareForMaintenanceCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/host/PrepareForMaintenanceCmd.java @@ -21,7 +21,7 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; import org.apache.cloudstack.api.response.HostResponse; @@ -31,7 +31,7 @@ import com.cloud.host.Host; import com.cloud.user.Account; import com.cloud.user.UserContext; -@Implementation(description="Prepares a host for maintenance.", responseObject=HostResponse.class) +@APICommand(description="Prepares a host for maintenance.", responseObject=HostResponse.class) public class PrepareForMaintenanceCmd extends BaseAsyncCmd { public static final Logger s_logger = Logger.getLogger(PrepareForMaintenanceCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/admin/host/ReconnectHostCmd.java b/api/src/org/apache/cloudstack/api/command/admin/host/ReconnectHostCmd.java index 1cabc205f0f..e232b1da9b2 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/host/ReconnectHostCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/host/ReconnectHostCmd.java @@ -21,7 +21,7 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; import org.apache.cloudstack.api.response.HostResponse; @@ -31,7 +31,7 @@ import com.cloud.host.Host; import com.cloud.user.Account; import com.cloud.user.UserContext; -@Implementation(description="Reconnects a host.", responseObject=HostResponse.class) +@APICommand(description="Reconnects a host.", responseObject=HostResponse.class) public class ReconnectHostCmd extends BaseAsyncCmd { public static final Logger s_logger = Logger.getLogger(ReconnectHostCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/admin/host/UpdateHostCmd.java b/api/src/org/apache/cloudstack/api/command/admin/host/UpdateHostCmd.java index 9de6107a682..e729d7df181 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/host/UpdateHostCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/host/UpdateHostCmd.java @@ -22,7 +22,7 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; import org.apache.cloudstack.api.response.GuestOSCategoryResponse; @@ -30,7 +30,7 @@ import org.apache.cloudstack.api.response.HostResponse; import com.cloud.host.Host; import com.cloud.user.Account; -@Implementation(description="Updates a host.", responseObject=HostResponse.class) +@APICommand(description="Updates a host.", responseObject=HostResponse.class) public class UpdateHostCmd extends BaseCmd { public static final Logger s_logger = Logger.getLogger(UpdateHostCmd.class.getName()); private static final String s_name = "updatehostresponse"; diff --git a/api/src/org/apache/cloudstack/api/command/admin/host/UpdateHostPasswordCmd.java b/api/src/org/apache/cloudstack/api/command/admin/host/UpdateHostPasswordCmd.java index e0f2f5d0104..6a02c3e244c 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/host/UpdateHostPasswordCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/host/UpdateHostPasswordCmd.java @@ -20,14 +20,14 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.response.ClusterResponse; import org.apache.cloudstack.api.response.HostResponse; import org.apache.cloudstack.api.response.SuccessResponse; import com.cloud.user.Account; -@Implementation(description = "Update password of a host/pool on management server.", responseObject = SuccessResponse.class) +@APICommand(description = "Update password of a host/pool on management server.", responseObject = SuccessResponse.class) public class UpdateHostPasswordCmd extends BaseCmd { public static final Logger s_logger = Logger.getLogger(UpdateHostPasswordCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/admin/ldap/LDAPConfigCmd.java b/api/src/org/apache/cloudstack/api/command/admin/ldap/LDAPConfigCmd.java index d5e0d2f2175..4862df0fc13 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/ldap/LDAPConfigCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/ldap/LDAPConfigCmd.java @@ -23,7 +23,7 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; import org.apache.cloudstack.api.response.LDAPConfigResponse; @@ -33,7 +33,7 @@ import com.cloud.exception.ResourceAllocationException; import com.cloud.exception.ResourceUnavailableException; import com.cloud.user.Account; -@Implementation(description="Configure the LDAP context for this site.", responseObject=LDAPConfigResponse.class, since="3.0.0") +@APICommand(description="Configure the LDAP context for this site.", responseObject=LDAPConfigResponse.class, since="3.0.0") public class LDAPConfigCmd extends BaseCmd { public static final Logger s_logger = Logger.getLogger(LDAPConfigCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/admin/ldap/LDAPRemoveCmd.java b/api/src/org/apache/cloudstack/api/command/admin/ldap/LDAPRemoveCmd.java index 666e1545f7d..f7fb2b8c5c6 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/ldap/LDAPRemoveCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/ldap/LDAPRemoveCmd.java @@ -17,15 +17,15 @@ package org.apache.cloudstack.api.command.admin.ldap; +import org.apache.cloudstack.api.APICommand; import org.apache.log4j.Logger; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.response.LDAPConfigResponse; import org.apache.cloudstack.api.response.LDAPRemoveResponse; import com.cloud.user.Account; -@Implementation(description="Remove the LDAP context for this site.", responseObject=LDAPConfigResponse.class, since="3.0.1") +@APICommand(description="Remove the LDAP context for this site.", responseObject=LDAPConfigResponse.class, since="3.0.1") public class LDAPRemoveCmd extends BaseCmd { public static final Logger s_logger = Logger.getLogger(LDAPRemoveCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/admin/network/AddNetworkDeviceCmd.java b/api/src/org/apache/cloudstack/api/command/admin/network/AddNetworkDeviceCmd.java index 111cd8db506..39efc644c9d 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/network/AddNetworkDeviceCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/network/AddNetworkDeviceCmd.java @@ -22,7 +22,7 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; import com.cloud.exception.ConcurrentOperationException; @@ -37,7 +37,7 @@ import org.apache.cloudstack.api.response.NetworkDeviceResponse; import com.cloud.utils.component.ComponentLocator; import com.cloud.utils.exception.CloudRuntimeException; -@Implementation(description="Adds a network device of one of the following types: ExternalDhcp, ExternalFirewall, ExternalLoadBalancer, PxeServer", responseObject = NetworkDeviceResponse.class) +@APICommand(description="Adds a network device of one of the following types: ExternalDhcp, ExternalFirewall, ExternalLoadBalancer, PxeServer", responseObject = NetworkDeviceResponse.class) public class AddNetworkDeviceCmd extends BaseCmd { public static final Logger s_logger = Logger.getLogger(AddNetworkDeviceCmd.class); private static final String s_name = "addnetworkdeviceresponse"; diff --git a/api/src/org/apache/cloudstack/api/command/admin/network/AddNetworkServiceProviderCmd.java b/api/src/org/apache/cloudstack/api/command/admin/network/AddNetworkServiceProviderCmd.java index d73be640bdf..acff41e6914 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/network/AddNetworkServiceProviderCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/network/AddNetworkServiceProviderCmd.java @@ -23,7 +23,7 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseAsyncCreateCmd; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; import org.apache.cloudstack.api.response.PhysicalNetworkResponse; @@ -35,7 +35,7 @@ import com.cloud.network.PhysicalNetworkServiceProvider; import com.cloud.user.Account; import com.cloud.user.UserContext; -@Implementation(description="Adds a network serviceProvider to a physical network", responseObject=ProviderResponse.class, since="3.0.0") +@APICommand(description="Adds a network serviceProvider to a physical network", responseObject=ProviderResponse.class, since="3.0.0") public class AddNetworkServiceProviderCmd extends BaseAsyncCreateCmd { public static final Logger s_logger = Logger.getLogger(AddNetworkServiceProviderCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/admin/network/CreateNetworkOfferingCmd.java b/api/src/org/apache/cloudstack/api/command/admin/network/CreateNetworkOfferingCmd.java index 867d40280d3..2ca61f7512a 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/network/CreateNetworkOfferingCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/network/CreateNetworkOfferingCmd.java @@ -23,14 +23,11 @@ import java.util.Iterator; import java.util.List; import java.util.Map; +import org.apache.cloudstack.api.*; import org.apache.cloudstack.api.response.DiskOfferingResponse; import org.apache.log4j.Logger; -import org.apache.cloudstack.api.ApiConstants; -import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.Implementation; -import org.apache.cloudstack.api.Parameter; -import org.apache.cloudstack.api.ServerApiException; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.response.NetworkOfferingResponse; import com.cloud.exception.InvalidParameterValueException; import com.cloud.network.Network.Capability; @@ -39,7 +36,7 @@ import com.cloud.offering.NetworkOffering; import com.cloud.offering.NetworkOffering.Availability; import com.cloud.user.Account; -@Implementation(description="Creates a network offering.", responseObject=NetworkOfferingResponse.class, since="3.0.0") +@APICommand(description="Creates a network offering.", responseObject=NetworkOfferingResponse.class, since="3.0.0") public class CreateNetworkOfferingCmd extends BaseCmd { public static final Logger s_logger = Logger.getLogger(CreateNetworkOfferingCmd.class.getName()); private static final String _name = "createnetworkofferingresponse"; diff --git a/api/src/org/apache/cloudstack/api/command/admin/network/CreatePhysicalNetworkCmd.java b/api/src/org/apache/cloudstack/api/command/admin/network/CreatePhysicalNetworkCmd.java index 92e01e4fbf7..54a19e5a03e 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/network/CreatePhysicalNetworkCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/network/CreatePhysicalNetworkCmd.java @@ -23,7 +23,7 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseAsyncCreateCmd; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; import org.apache.cloudstack.api.response.PhysicalNetworkResponse; @@ -36,7 +36,7 @@ import com.cloud.network.PhysicalNetwork; import com.cloud.user.Account; import com.cloud.user.UserContext; -@Implementation(description="Creates a physical network", responseObject=PhysicalNetworkResponse.class, since="3.0.0") +@APICommand(description="Creates a physical network", responseObject=PhysicalNetworkResponse.class, since="3.0.0") public class CreatePhysicalNetworkCmd extends BaseAsyncCreateCmd { public static final Logger s_logger = Logger.getLogger(CreatePhysicalNetworkCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/admin/network/CreateStorageNetworkIpRangeCmd.java b/api/src/org/apache/cloudstack/api/command/admin/network/CreateStorageNetworkIpRangeCmd.java index dd34e80d4d2..f052cbb1911 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/network/CreateStorageNetworkIpRangeCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/network/CreateStorageNetworkIpRangeCmd.java @@ -21,7 +21,7 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; import org.apache.cloudstack.api.response.PodResponse; @@ -34,7 +34,7 @@ import com.cloud.exception.ResourceAllocationException; import com.cloud.exception.ResourceUnavailableException; import com.cloud.user.Account; -@Implementation(description="Creates a Storage network IP range.", responseObject=StorageNetworkIpRangeResponse.class, since="3.0.0") +@APICommand(description="Creates a Storage network IP range.", responseObject=StorageNetworkIpRangeResponse.class, since="3.0.0") public class CreateStorageNetworkIpRangeCmd extends BaseAsyncCmd { public static final Logger s_logger = Logger.getLogger(CreateStorageNetworkIpRangeCmd.class); diff --git a/api/src/org/apache/cloudstack/api/command/admin/network/DeleteNetworkDeviceCmd.java b/api/src/org/apache/cloudstack/api/command/admin/network/DeleteNetworkDeviceCmd.java index a88e6de220d..12ca5c7cb86 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/network/DeleteNetworkDeviceCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/network/DeleteNetworkDeviceCmd.java @@ -20,7 +20,7 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; import org.apache.cloudstack.network.ExternalNetworkDeviceManager; @@ -35,7 +35,7 @@ import com.cloud.server.ManagementService; import com.cloud.utils.component.ComponentLocator; import com.cloud.utils.exception.CloudRuntimeException; -@Implementation(description="Deletes network device.", responseObject=SuccessResponse.class) +@APICommand(description="Deletes network device.", responseObject=SuccessResponse.class) public class DeleteNetworkDeviceCmd extends BaseCmd { public static final Logger s_logger = Logger.getLogger(DeleteNetworkDeviceCmd.class); private static final String s_name = "deletenetworkdeviceresponse"; diff --git a/api/src/org/apache/cloudstack/api/command/admin/network/DeleteNetworkOfferingCmd.java b/api/src/org/apache/cloudstack/api/command/admin/network/DeleteNetworkOfferingCmd.java index 9c9702eab3d..bede9223279 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/network/DeleteNetworkOfferingCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/network/DeleteNetworkOfferingCmd.java @@ -20,14 +20,14 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; import org.apache.cloudstack.api.response.NetworkOfferingResponse; import org.apache.cloudstack.api.response.SuccessResponse; import com.cloud.user.Account; -@Implementation(description="Deletes a network offering.", responseObject=SuccessResponse.class, since="3.0.0") +@APICommand(description="Deletes a network offering.", responseObject=SuccessResponse.class, since="3.0.0") public class DeleteNetworkOfferingCmd extends BaseCmd{ public static final Logger s_logger = Logger.getLogger(DeleteNetworkOfferingCmd.class.getName()); private static final String s_name = "deletenetworkofferingresponse"; diff --git a/api/src/org/apache/cloudstack/api/command/admin/network/DeleteNetworkServiceProviderCmd.java b/api/src/org/apache/cloudstack/api/command/admin/network/DeleteNetworkServiceProviderCmd.java index 688b0abee71..0918bacd48b 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/network/DeleteNetworkServiceProviderCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/network/DeleteNetworkServiceProviderCmd.java @@ -21,7 +21,7 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; import org.apache.cloudstack.api.response.ProviderResponse; @@ -32,7 +32,7 @@ import com.cloud.exception.ConcurrentOperationException; import com.cloud.exception.ResourceUnavailableException; import com.cloud.user.Account; -@Implementation(description="Deletes a Network Service Provider.", responseObject=SuccessResponse.class, since="3.0.0") +@APICommand(description="Deletes a Network Service Provider.", responseObject=SuccessResponse.class, since="3.0.0") public class DeleteNetworkServiceProviderCmd extends BaseAsyncCmd { public static final Logger s_logger = Logger.getLogger(DeleteNetworkServiceProviderCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/admin/network/DeletePhysicalNetworkCmd.java b/api/src/org/apache/cloudstack/api/command/admin/network/DeletePhysicalNetworkCmd.java index 264ebe4653f..b5e46e8ed1a 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/network/DeletePhysicalNetworkCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/network/DeletePhysicalNetworkCmd.java @@ -16,14 +16,10 @@ // under the License. package org.apache.cloudstack.api.command.admin.network; +import org.apache.cloudstack.api.*; import org.apache.log4j.Logger; -import org.apache.cloudstack.api.ApiConstants; -import org.apache.cloudstack.api.BaseAsyncCmd; -import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.Implementation; -import org.apache.cloudstack.api.Parameter; -import org.apache.cloudstack.api.ServerApiException; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.response.PhysicalNetworkResponse; import org.apache.cloudstack.api.response.SuccessResponse; import com.cloud.async.AsyncJob; @@ -31,7 +27,7 @@ import com.cloud.event.EventTypes; import com.cloud.user.Account; import com.cloud.user.UserContext; -@Implementation(description="Deletes a Physical Network.", responseObject=SuccessResponse.class, since="3.0.0") +@APICommand(description="Deletes a Physical Network.", responseObject=SuccessResponse.class, since="3.0.0") public class DeletePhysicalNetworkCmd extends BaseAsyncCmd { public static final Logger s_logger = Logger.getLogger(DeletePhysicalNetworkCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/admin/network/DeleteStorageNetworkIpRangeCmd.java b/api/src/org/apache/cloudstack/api/command/admin/network/DeleteStorageNetworkIpRangeCmd.java index 9d3209d4d16..a1da5bd763d 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/network/DeleteStorageNetworkIpRangeCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/network/DeleteStorageNetworkIpRangeCmd.java @@ -16,14 +16,10 @@ // under the License. package org.apache.cloudstack.api.command.admin.network; +import org.apache.cloudstack.api.*; import org.apache.log4j.Logger; -import org.apache.cloudstack.api.ApiConstants; -import org.apache.cloudstack.api.BaseAsyncCmd; -import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.Implementation; -import org.apache.cloudstack.api.Parameter; -import org.apache.cloudstack.api.ServerApiException; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.response.StorageNetworkIpRangeResponse; import org.apache.cloudstack.api.response.SuccessResponse; import com.cloud.event.EventTypes; @@ -33,7 +29,7 @@ import com.cloud.exception.ResourceAllocationException; import com.cloud.exception.ResourceUnavailableException; import com.cloud.user.Account; -@Implementation(description="Deletes a storage network IP Range.", responseObject=SuccessResponse.class, since="3.0.0") +@APICommand(description="Deletes a storage network IP Range.", responseObject=SuccessResponse.class, since="3.0.0") public class DeleteStorageNetworkIpRangeCmd extends BaseAsyncCmd { public static final Logger s_logger = Logger.getLogger(DeleteStorageNetworkIpRangeCmd.class); diff --git a/api/src/org/apache/cloudstack/api/command/admin/network/ListNetworkDeviceCmd.java b/api/src/org/apache/cloudstack/api/command/admin/network/ListNetworkDeviceCmd.java index ebe5ef9b7b5..794fe188072 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/network/ListNetworkDeviceCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/network/ListNetworkDeviceCmd.java @@ -25,7 +25,7 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.BaseListCmd; -import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; import org.apache.cloudstack.network.ExternalNetworkDeviceManager; @@ -41,7 +41,7 @@ import com.cloud.server.ManagementService; import com.cloud.utils.component.ComponentLocator; import com.cloud.utils.exception.CloudRuntimeException; -@Implementation(description="List network devices", responseObject = NetworkDeviceResponse.class) +@APICommand(description="List network devices", responseObject = NetworkDeviceResponse.class) public class ListNetworkDeviceCmd extends BaseListCmd { public static final Logger s_logger = Logger.getLogger(ListNetworkDeviceCmd.class); private static final String s_name = "listnetworkdevice"; diff --git a/api/src/org/apache/cloudstack/api/command/admin/network/ListNetworkServiceProvidersCmd.java b/api/src/org/apache/cloudstack/api/command/admin/network/ListNetworkServiceProvidersCmd.java index 21bec8fef18..1dadcc80d67 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/network/ListNetworkServiceProvidersCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/network/ListNetworkServiceProvidersCmd.java @@ -23,7 +23,7 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseListCmd; -import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.response.ListResponse; import org.apache.cloudstack.api.response.PhysicalNetworkResponse; @@ -32,7 +32,7 @@ import com.cloud.network.PhysicalNetworkServiceProvider; import com.cloud.user.Account; import com.cloud.utils.Pair; -@Implementation(description="Lists network serviceproviders for a given physical network.", responseObject=ProviderResponse.class, since="3.0.0") +@APICommand(description="Lists network serviceproviders for a given physical network.", responseObject=ProviderResponse.class, since="3.0.0") public class ListNetworkServiceProvidersCmd extends BaseListCmd { public static final Logger s_logger = Logger.getLogger(ListNetworkServiceProvidersCmd.class.getName()); private static final String _name = "listnetworkserviceprovidersresponse"; diff --git a/api/src/org/apache/cloudstack/api/command/admin/network/ListPhysicalNetworksCmd.java b/api/src/org/apache/cloudstack/api/command/admin/network/ListPhysicalNetworksCmd.java index 2b2de2da76f..fd0f1feca9f 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/network/ListPhysicalNetworksCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/network/ListPhysicalNetworksCmd.java @@ -25,7 +25,7 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.BaseListCmd; -import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; import org.apache.cloudstack.api.response.ListResponse; @@ -34,7 +34,7 @@ import com.cloud.network.PhysicalNetwork; import com.cloud.user.Account; import com.cloud.utils.Pair; -@Implementation(description="Lists physical networks", responseObject=PhysicalNetworkResponse.class, since="3.0.0") +@APICommand(description="Lists physical networks", responseObject=PhysicalNetworkResponse.class, since="3.0.0") public class ListPhysicalNetworksCmd extends BaseListCmd { public static final Logger s_logger = Logger.getLogger(ListPhysicalNetworksCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/admin/network/ListStorageNetworkIpRangeCmd.java b/api/src/org/apache/cloudstack/api/command/admin/network/ListStorageNetworkIpRangeCmd.java index 319bf6a370c..b972a33ad2b 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/network/ListStorageNetworkIpRangeCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/network/ListStorageNetworkIpRangeCmd.java @@ -19,14 +19,10 @@ package org.apache.cloudstack.api.command.admin.network; import java.util.ArrayList; import java.util.List; +import org.apache.cloudstack.api.*; import org.apache.log4j.Logger; -import org.apache.cloudstack.api.ApiConstants; -import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.BaseListCmd; -import org.apache.cloudstack.api.Implementation; -import org.apache.cloudstack.api.Parameter; -import org.apache.cloudstack.api.ServerApiException; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.response.PodResponse; import org.apache.cloudstack.api.response.ZoneResponse; import org.apache.cloudstack.api.response.ListResponse; @@ -38,7 +34,7 @@ import com.cloud.exception.ResourceAllocationException; import com.cloud.exception.ResourceUnavailableException; import com.cloud.user.Account; -@Implementation(description="List a storage network IP range.", responseObject=StorageNetworkIpRangeResponse.class, since="3.0.0") +@APICommand(description="List a storage network IP range.", responseObject=StorageNetworkIpRangeResponse.class, since="3.0.0") public class ListStorageNetworkIpRangeCmd extends BaseListCmd { public static final Logger s_logger = Logger.getLogger(ListStorageNetworkIpRangeCmd.class); diff --git a/api/src/org/apache/cloudstack/api/command/admin/network/ListSupportedNetworkServicesCmd.java b/api/src/org/apache/cloudstack/api/command/admin/network/ListSupportedNetworkServicesCmd.java index 6326bc8d4eb..6c4430ce0bc 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/network/ListSupportedNetworkServicesCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/network/ListSupportedNetworkServicesCmd.java @@ -19,11 +19,11 @@ package org.apache.cloudstack.api.command.admin.network; import java.util.ArrayList; import java.util.List; +import org.apache.cloudstack.api.APICommand; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseListCmd; -import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.response.ListResponse; import org.apache.cloudstack.api.response.ServiceResponse; @@ -33,7 +33,7 @@ import com.cloud.network.Network.Service; import com.cloud.user.Account; -@Implementation(description="Lists all network services provided by CloudStack or for the given Provider.", responseObject=ServiceResponse.class, since="3.0.0") +@APICommand(description="Lists all network services provided by CloudStack or for the given Provider.", responseObject=ServiceResponse.class, since="3.0.0") public class ListSupportedNetworkServicesCmd extends BaseListCmd { public static final Logger s_logger = Logger.getLogger(ListSupportedNetworkServicesCmd.class.getName()); private static final String _name = "listsupportednetworkservicesresponse"; diff --git a/api/src/org/apache/cloudstack/api/command/admin/network/UpdateNetworkOfferingCmd.java b/api/src/org/apache/cloudstack/api/command/admin/network/UpdateNetworkOfferingCmd.java index 7c3c0c48a2e..64c16b88af9 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/network/UpdateNetworkOfferingCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/network/UpdateNetworkOfferingCmd.java @@ -16,18 +16,15 @@ // under the License. package org.apache.cloudstack.api.command.admin.network; +import org.apache.cloudstack.api.*; import org.apache.log4j.Logger; -import org.apache.cloudstack.api.ApiConstants; -import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.Implementation; -import org.apache.cloudstack.api.Parameter; -import org.apache.cloudstack.api.ServerApiException; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.response.NetworkOfferingResponse; import com.cloud.offering.NetworkOffering; import com.cloud.user.Account; -@Implementation(description="Updates a network offering.", responseObject=NetworkOfferingResponse.class) +@APICommand(description="Updates a network offering.", responseObject=NetworkOfferingResponse.class) public class UpdateNetworkOfferingCmd extends BaseCmd { public static final Logger s_logger = Logger.getLogger(UpdateNetworkOfferingCmd.class.getName()); private static final String _name = "updatenetworkofferingresponse"; diff --git a/api/src/org/apache/cloudstack/api/command/admin/network/UpdateNetworkServiceProviderCmd.java b/api/src/org/apache/cloudstack/api/command/admin/network/UpdateNetworkServiceProviderCmd.java index 7b8298e3c62..b0ce671ba95 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/network/UpdateNetworkServiceProviderCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/network/UpdateNetworkServiceProviderCmd.java @@ -23,7 +23,7 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; import org.apache.cloudstack.api.response.ProviderResponse; @@ -32,7 +32,7 @@ import com.cloud.event.EventTypes; import com.cloud.network.PhysicalNetworkServiceProvider; import com.cloud.user.Account; -@Implementation(description="Updates a network serviceProvider of a physical network", responseObject=ProviderResponse.class, since="3.0.0") +@APICommand(description="Updates a network serviceProvider of a physical network", responseObject=ProviderResponse.class, since="3.0.0") public class UpdateNetworkServiceProviderCmd extends BaseAsyncCmd { public static final Logger s_logger = Logger.getLogger(UpdateNetworkServiceProviderCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/admin/network/UpdatePhysicalNetworkCmd.java b/api/src/org/apache/cloudstack/api/command/admin/network/UpdatePhysicalNetworkCmd.java index d6830dfbfe7..e6df839f6f2 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/network/UpdatePhysicalNetworkCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/network/UpdatePhysicalNetworkCmd.java @@ -18,11 +18,11 @@ package org.apache.cloudstack.api.command.admin.network; import java.util.List; +import org.apache.cloudstack.api.APICommand; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseAsyncCmd; -import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.response.PhysicalNetworkResponse; import com.cloud.async.AsyncJob; @@ -30,7 +30,7 @@ import com.cloud.event.EventTypes; import com.cloud.network.PhysicalNetwork; import com.cloud.user.Account; -@Implementation(description="Updates a physical network", responseObject=PhysicalNetworkResponse.class, since="3.0.0") +@APICommand(description="Updates a physical network", responseObject=PhysicalNetworkResponse.class, since="3.0.0") public class UpdatePhysicalNetworkCmd extends BaseAsyncCmd { public static final Logger s_logger = Logger.getLogger(UpdatePhysicalNetworkCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/admin/network/UpdateStorageNetworkIpRangeCmd.java b/api/src/org/apache/cloudstack/api/command/admin/network/UpdateStorageNetworkIpRangeCmd.java index 64bb9775e29..f7cb7b6a4a8 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/network/UpdateStorageNetworkIpRangeCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/network/UpdateStorageNetworkIpRangeCmd.java @@ -16,14 +16,10 @@ // under the License. package org.apache.cloudstack.api.command.admin.network; +import org.apache.cloudstack.api.*; import org.apache.log4j.Logger; -import org.apache.cloudstack.api.ApiConstants; -import org.apache.cloudstack.api.BaseAsyncCmd; -import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.Implementation; -import org.apache.cloudstack.api.Parameter; -import org.apache.cloudstack.api.ServerApiException; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.response.StorageNetworkIpRangeResponse; import com.cloud.dc.StorageNetworkIpRange; import com.cloud.event.EventTypes; @@ -33,7 +29,7 @@ import com.cloud.exception.ResourceAllocationException; import com.cloud.exception.ResourceUnavailableException; import com.cloud.user.Account; -@Implementation(description="Update a Storage network IP range, only allowed when no IPs in this range have been allocated.", responseObject=StorageNetworkIpRangeResponse.class, since="3.0.0") +@APICommand(description="Update a Storage network IP range, only allowed when no IPs in this range have been allocated.", responseObject=StorageNetworkIpRangeResponse.class, since="3.0.0") public class UpdateStorageNetworkIpRangeCmd extends BaseAsyncCmd { public static final Logger s_logger = Logger.getLogger(UpdateStorageNetworkIpRangeCmd.class); private static final String s_name = "updatestoragenetworkiprangeresponse"; diff --git a/api/src/org/apache/cloudstack/api/command/admin/offering/CreateDiskOfferingCmd.java b/api/src/org/apache/cloudstack/api/command/admin/offering/CreateDiskOfferingCmd.java index a2967bdf6e5..5ce4c9bf448 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/offering/CreateDiskOfferingCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/offering/CreateDiskOfferingCmd.java @@ -21,7 +21,7 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; import org.apache.cloudstack.api.response.DiskOfferingResponse; @@ -29,7 +29,7 @@ import com.cloud.offering.DiskOffering; import com.cloud.offering.ServiceOffering; import com.cloud.user.Account; -@Implementation(description="Creates a disk offering.", responseObject=DiskOfferingResponse.class) +@APICommand(description="Creates a disk offering.", responseObject=DiskOfferingResponse.class) public class CreateDiskOfferingCmd extends BaseCmd { public static final Logger s_logger = Logger.getLogger(CreateDiskOfferingCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/admin/offering/CreateServiceOfferingCmd.java b/api/src/org/apache/cloudstack/api/command/admin/offering/CreateServiceOfferingCmd.java index dc3f619c095..6aec6c4a26f 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/offering/CreateServiceOfferingCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/offering/CreateServiceOfferingCmd.java @@ -21,14 +21,14 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; import org.apache.cloudstack.api.response.ServiceOfferingResponse; import com.cloud.offering.ServiceOffering; import com.cloud.user.Account; -@Implementation(description="Creates a service offering.", responseObject=ServiceOfferingResponse.class) +@APICommand(description="Creates a service offering.", responseObject=ServiceOfferingResponse.class) public class CreateServiceOfferingCmd extends BaseCmd { public static final Logger s_logger = Logger.getLogger(CreateServiceOfferingCmd.class.getName()); private static final String _name = "createserviceofferingresponse"; diff --git a/api/src/org/apache/cloudstack/api/command/admin/offering/DeleteDiskOfferingCmd.java b/api/src/org/apache/cloudstack/api/command/admin/offering/DeleteDiskOfferingCmd.java index 848d58a9acf..011aae0b1b4 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/offering/DeleteDiskOfferingCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/offering/DeleteDiskOfferingCmd.java @@ -21,13 +21,13 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; import org.apache.cloudstack.api.response.SuccessResponse; import com.cloud.user.Account; -@Implementation(description="Updates a disk offering.", responseObject=SuccessResponse.class) +@APICommand(description="Updates a disk offering.", responseObject=SuccessResponse.class) public class DeleteDiskOfferingCmd extends BaseCmd { public static final Logger s_logger = Logger.getLogger(DeleteDiskOfferingCmd.class.getName()); private static final String s_name = "deletediskofferingresponse"; diff --git a/api/src/org/apache/cloudstack/api/command/admin/offering/DeleteServiceOfferingCmd.java b/api/src/org/apache/cloudstack/api/command/admin/offering/DeleteServiceOfferingCmd.java index b96ab6053b4..738d85fbe2e 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/offering/DeleteServiceOfferingCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/offering/DeleteServiceOfferingCmd.java @@ -16,18 +16,15 @@ // under the License. package org.apache.cloudstack.api.command.admin.offering; +import org.apache.cloudstack.api.*; import org.apache.cloudstack.api.response.DomainResponse; import org.apache.log4j.Logger; -import org.apache.cloudstack.api.ApiConstants; -import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.Implementation; -import org.apache.cloudstack.api.Parameter; -import org.apache.cloudstack.api.ServerApiException; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.response.SuccessResponse; import com.cloud.user.Account; -@Implementation(description="Deletes a service offering.", responseObject=SuccessResponse.class) +@APICommand(description="Deletes a service offering.", responseObject=SuccessResponse.class) public class DeleteServiceOfferingCmd extends BaseCmd{ public static final Logger s_logger = Logger.getLogger(DeleteServiceOfferingCmd.class.getName()); private static final String s_name = "deleteserviceofferingresponse"; diff --git a/api/src/org/apache/cloudstack/api/command/admin/offering/UpdateDiskOfferingCmd.java b/api/src/org/apache/cloudstack/api/command/admin/offering/UpdateDiskOfferingCmd.java index d565091a009..d8b66f33174 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/offering/UpdateDiskOfferingCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/offering/UpdateDiskOfferingCmd.java @@ -19,14 +19,14 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; import org.apache.cloudstack.api.response.DiskOfferingResponse; import com.cloud.offering.DiskOffering; import com.cloud.user.Account; -@Implementation(description="Updates a disk offering.", responseObject=DiskOfferingResponse.class) +@APICommand(description="Updates a disk offering.", responseObject=DiskOfferingResponse.class) public class UpdateDiskOfferingCmd extends BaseCmd{ public static final Logger s_logger = Logger.getLogger(UpdateDiskOfferingCmd.class.getName()); private static final String s_name = "updatediskofferingresponse"; diff --git a/api/src/org/apache/cloudstack/api/command/admin/offering/UpdateServiceOfferingCmd.java b/api/src/org/apache/cloudstack/api/command/admin/offering/UpdateServiceOfferingCmd.java index 3cea4232c43..562e9b7c582 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/offering/UpdateServiceOfferingCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/offering/UpdateServiceOfferingCmd.java @@ -17,18 +17,15 @@ package org.apache.cloudstack.api.command.admin.offering; import com.cloud.offering.DiskOffering; +import org.apache.cloudstack.api.*; import org.apache.log4j.Logger; -import org.apache.cloudstack.api.ApiConstants; -import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.Implementation; -import org.apache.cloudstack.api.Parameter; -import org.apache.cloudstack.api.ServerApiException; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.response.ServiceOfferingResponse; import com.cloud.offering.ServiceOffering; import com.cloud.user.Account; -@Implementation(description="Updates a service offering.", responseObject=ServiceOfferingResponse.class) +@APICommand(description="Updates a service offering.", responseObject=ServiceOfferingResponse.class) public class UpdateServiceOfferingCmd extends BaseCmd { public static final Logger s_logger = Logger.getLogger(UpdateServiceOfferingCmd.class.getName()); private static final String s_name = "updateserviceofferingresponse"; diff --git a/api/src/org/apache/cloudstack/api/command/admin/pod/CreatePodCmd.java b/api/src/org/apache/cloudstack/api/command/admin/pod/CreatePodCmd.java index aba5be1ab84..f83515a1332 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/pod/CreatePodCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/pod/CreatePodCmd.java @@ -16,20 +16,17 @@ // under the License. package org.apache.cloudstack.api.command.admin.pod; +import org.apache.cloudstack.api.*; import org.apache.log4j.Logger; -import org.apache.cloudstack.api.ApiConstants; -import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.Implementation; -import org.apache.cloudstack.api.Parameter; -import org.apache.cloudstack.api.ServerApiException; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.response.PodResponse; import org.apache.cloudstack.api.response.ZoneResponse; import com.cloud.dc.Pod; import com.cloud.user.Account; -@Implementation(description="Creates a new Pod.", responseObject=PodResponse.class) +@APICommand(description="Creates a new Pod.", responseObject=PodResponse.class) public class CreatePodCmd extends BaseCmd { public static final Logger s_logger = Logger.getLogger(CreatePodCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/admin/pod/DeletePodCmd.java b/api/src/org/apache/cloudstack/api/command/admin/pod/DeletePodCmd.java index a64762fac5b..c9c5769a3c8 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/pod/DeletePodCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/pod/DeletePodCmd.java @@ -20,7 +20,7 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; import org.apache.cloudstack.api.response.PodResponse; @@ -28,7 +28,7 @@ import org.apache.cloudstack.api.response.SuccessResponse; import com.cloud.user.Account; -@Implementation(description="Deletes a Pod.", responseObject=SuccessResponse.class) +@APICommand(description="Deletes a Pod.", responseObject=SuccessResponse.class) public class DeletePodCmd extends BaseCmd { public static final Logger s_logger = Logger.getLogger(DeletePodCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/admin/pod/ListPodsByCmd.java b/api/src/org/apache/cloudstack/api/command/admin/pod/ListPodsByCmd.java index 87b84155db5..e9a8391d963 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/pod/ListPodsByCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/pod/ListPodsByCmd.java @@ -19,11 +19,11 @@ package org.apache.cloudstack.api.command.admin.pod; import java.util.ArrayList; import java.util.List; +import org.apache.cloudstack.api.APICommand; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseListCmd; -import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.response.ListResponse; import org.apache.cloudstack.api.response.PodResponse; @@ -32,7 +32,7 @@ import org.apache.cloudstack.api.response.ZoneResponse; import com.cloud.dc.Pod; import com.cloud.utils.Pair; -@Implementation(description="Lists all Pods.", responseObject=PodResponse.class) +@APICommand(description="Lists all Pods.", responseObject=PodResponse.class) public class ListPodsByCmd extends BaseListCmd { public static final Logger s_logger = Logger.getLogger(ListPodsByCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/admin/pod/UpdatePodCmd.java b/api/src/org/apache/cloudstack/api/command/admin/pod/UpdatePodCmd.java index 6b564cdb830..80198f2e288 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/pod/UpdatePodCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/pod/UpdatePodCmd.java @@ -16,19 +16,16 @@ // under the License. package org.apache.cloudstack.api.command.admin.pod; +import org.apache.cloudstack.api.*; import org.apache.log4j.Logger; -import org.apache.cloudstack.api.ApiConstants; -import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.Implementation; -import org.apache.cloudstack.api.Parameter; -import org.apache.cloudstack.api.ServerApiException; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.response.PodResponse; import com.cloud.dc.Pod; import com.cloud.user.Account; -@Implementation(description="Updates a Pod.", responseObject=PodResponse.class) +@APICommand(description="Updates a Pod.", responseObject=PodResponse.class) public class UpdatePodCmd extends BaseCmd { public static final Logger s_logger = Logger.getLogger(UpdatePodCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/admin/resource/ListAlertsCmd.java b/api/src/org/apache/cloudstack/api/command/admin/resource/ListAlertsCmd.java index cbccc2f383b..2b67d5a71c4 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/resource/ListAlertsCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/resource/ListAlertsCmd.java @@ -19,18 +19,18 @@ package org.apache.cloudstack.api.command.admin.resource; import java.util.ArrayList; import java.util.List; +import org.apache.cloudstack.api.APICommand; import org.apache.log4j.Logger; import com.cloud.alert.Alert; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseListCmd; -import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.response.AlertResponse; import org.apache.cloudstack.api.response.ListResponse; import com.cloud.utils.Pair; -@Implementation(description = "Lists all alerts.", responseObject = AlertResponse.class) +@APICommand(description = "Lists all alerts.", responseObject = AlertResponse.class) public class ListAlertsCmd extends BaseListCmd { public static final Logger s_logger = Logger.getLogger(ListAlertsCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/admin/resource/ListCapacityCmd.java b/api/src/org/apache/cloudstack/api/command/admin/resource/ListCapacityCmd.java index e6e4c7a5b9a..70375d2ccb4 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/resource/ListCapacityCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/resource/ListCapacityCmd.java @@ -19,11 +19,11 @@ package org.apache.cloudstack.api.command.admin.resource; import java.text.DecimalFormat; import java.util.List; +import org.apache.cloudstack.api.APICommand; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseListCmd; -import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.response.CapacityResponse; import org.apache.cloudstack.api.response.ListResponse; @@ -33,7 +33,7 @@ import org.apache.cloudstack.api.response.ZoneResponse; import com.cloud.capacity.Capacity; import com.cloud.exception.InvalidParameterValueException; -@Implementation(description="Lists all the system wide capacities.", responseObject=CapacityResponse.class) +@APICommand(description="Lists all the system wide capacities.", responseObject=CapacityResponse.class) public class ListCapacityCmd extends BaseListCmd { public static final Logger s_logger = Logger.getLogger(ListCapacityCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/admin/resource/UploadCustomCertificateCmd.java b/api/src/org/apache/cloudstack/api/command/admin/resource/UploadCustomCertificateCmd.java index 6588c0a047c..6526dbe19f6 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/resource/UploadCustomCertificateCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/resource/UploadCustomCertificateCmd.java @@ -16,19 +16,15 @@ // under the License. package org.apache.cloudstack.api.command.admin.resource; +import org.apache.cloudstack.api.*; import org.apache.log4j.Logger; -import org.apache.cloudstack.api.ApiConstants; -import org.apache.cloudstack.api.BaseAsyncCmd; -import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.Implementation; -import org.apache.cloudstack.api.Parameter; -import org.apache.cloudstack.api.ServerApiException; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.response.CustomCertificateResponse; import com.cloud.event.EventTypes; import com.cloud.user.Account; -@Implementation(responseObject=CustomCertificateResponse.class, description="Uploads a custom certificate for the console proxy VMs to use for SSL. Can be used to upload a single certificate signed by a known CA. Can also be used, through multiple calls, to upload a chain of certificates from CA to the custom certificate itself.") +@APICommand(responseObject=CustomCertificateResponse.class, description="Uploads a custom certificate for the console proxy VMs to use for SSL. Can be used to upload a single certificate signed by a known CA. Can also be used, through multiple calls, to upload a chain of certificates from CA to the custom certificate itself.") public class UploadCustomCertificateCmd extends BaseAsyncCmd { public static final Logger s_logger = Logger.getLogger(UploadCustomCertificateCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/admin/router/ConfigureVirtualRouterElementCmd.java b/api/src/org/apache/cloudstack/api/command/admin/router/ConfigureVirtualRouterElementCmd.java index 4a9926d250e..573b84fee5b 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/router/ConfigureVirtualRouterElementCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/router/ConfigureVirtualRouterElementCmd.java @@ -21,7 +21,7 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.PlugService; import org.apache.cloudstack.api.ServerApiException; @@ -36,7 +36,7 @@ import com.cloud.exception.ResourceUnavailableException; import com.cloud.user.Account; import com.cloud.user.UserContext; -@Implementation(responseObject=VirtualRouterProviderResponse.class, description="Configures a virtual router element.") +@APICommand(responseObject=VirtualRouterProviderResponse.class, description="Configures a virtual router element.") public class ConfigureVirtualRouterElementCmd extends BaseAsyncCmd { public static final Logger s_logger = Logger.getLogger(ConfigureVirtualRouterElementCmd.class.getName()); private static final String s_name = "configurevirtualrouterelementresponse"; diff --git a/api/src/org/apache/cloudstack/api/command/admin/router/CreateVirtualRouterElementCmd.java b/api/src/org/apache/cloudstack/api/command/admin/router/CreateVirtualRouterElementCmd.java index 834bd93d1eb..99c2e9d41a5 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/router/CreateVirtualRouterElementCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/router/CreateVirtualRouterElementCmd.java @@ -16,16 +16,11 @@ // under the License. package org.apache.cloudstack.api.command.admin.router; +import org.apache.cloudstack.api.*; import org.apache.cloudstack.api.response.ProviderResponse; import org.apache.log4j.Logger; -import org.apache.cloudstack.api.ApiConstants; -import org.apache.cloudstack.api.BaseAsyncCreateCmd; -import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.Implementation; -import org.apache.cloudstack.api.Parameter; -import org.apache.cloudstack.api.PlugService; -import org.apache.cloudstack.api.ServerApiException; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.response.VirtualRouterProviderResponse; import com.cloud.event.EventTypes; import com.cloud.exception.ResourceAllocationException; @@ -35,7 +30,7 @@ import com.cloud.network.element.VirtualRouterElementService; import com.cloud.user.Account; import com.cloud.user.UserContext; -@Implementation(responseObject=VirtualRouterProviderResponse.class, description="Create a virtual router element.") +@APICommand(responseObject=VirtualRouterProviderResponse.class, description="Create a virtual router element.") public class CreateVirtualRouterElementCmd extends BaseAsyncCreateCmd { public static final Logger s_logger = Logger.getLogger(CreateVirtualRouterElementCmd.class.getName()); private static final String s_name = "createvirtualrouterelementresponse"; diff --git a/api/src/org/apache/cloudstack/api/command/admin/router/DestroyRouterCmd.java b/api/src/org/apache/cloudstack/api/command/admin/router/DestroyRouterCmd.java index fbea225992b..1d3c72b02cf 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/router/DestroyRouterCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/router/DestroyRouterCmd.java @@ -21,7 +21,7 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; import org.apache.cloudstack.api.response.DomainRouterResponse; @@ -33,7 +33,7 @@ import com.cloud.network.router.VirtualRouter; import com.cloud.user.Account; import com.cloud.user.UserContext; -@Implementation(description = "Destroys a router.", responseObject = DomainRouterResponse.class) +@APICommand(description = "Destroys a router.", responseObject = DomainRouterResponse.class) public class DestroyRouterCmd extends BaseAsyncCmd { public static final Logger s_logger = Logger.getLogger(DestroyRouterCmd.class.getName()); private static final String s_name = "destroyrouterresponse"; diff --git a/api/src/org/apache/cloudstack/api/command/admin/router/ListRoutersCmd.java b/api/src/org/apache/cloudstack/api/command/admin/router/ListRoutersCmd.java index 334c85cfce0..d366e2008f0 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/router/ListRoutersCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/router/ListRoutersCmd.java @@ -20,7 +20,7 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseListProjectAndAccountResourcesCmd; -import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.response.DomainRouterResponse; import org.apache.cloudstack.api.response.HostResponse; @@ -33,7 +33,7 @@ import org.apache.cloudstack.api.response.ZoneResponse; import com.cloud.async.AsyncJob; -@Implementation(description="List routers.", responseObject=DomainRouterResponse.class) +@APICommand(description="List routers.", responseObject=DomainRouterResponse.class) public class ListRoutersCmd extends BaseListProjectAndAccountResourcesCmd { public static final Logger s_logger = Logger.getLogger(ListRoutersCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/admin/router/ListVirtualRouterElementsCmd.java b/api/src/org/apache/cloudstack/api/command/admin/router/ListVirtualRouterElementsCmd.java index 427467871c3..d32bf554b55 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/router/ListVirtualRouterElementsCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/router/ListVirtualRouterElementsCmd.java @@ -25,7 +25,7 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseListCmd; -import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.PlugService; import org.apache.cloudstack.api.ServerApiException; @@ -38,7 +38,7 @@ import com.cloud.exception.ResourceUnavailableException; import com.cloud.network.VirtualRouterProvider; import com.cloud.network.element.VirtualRouterElementService; -@Implementation(description="Lists all available virtual router elements.", responseObject=VirtualRouterProviderResponse.class) +@APICommand(description="Lists all available virtual router elements.", responseObject=VirtualRouterProviderResponse.class) public class ListVirtualRouterElementsCmd extends BaseListCmd { public static final Logger s_logger = Logger.getLogger(ListNetworkOfferingsCmd.class.getName()); private static final String _name = "listvirtualrouterelementsresponse"; diff --git a/api/src/org/apache/cloudstack/api/command/admin/router/RebootRouterCmd.java b/api/src/org/apache/cloudstack/api/command/admin/router/RebootRouterCmd.java index af043766dd7..ab7f04e0d29 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/router/RebootRouterCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/router/RebootRouterCmd.java @@ -16,14 +16,10 @@ // under the License. package org.apache.cloudstack.api.command.admin.router; +import org.apache.cloudstack.api.*; import org.apache.log4j.Logger; -import org.apache.cloudstack.api.ApiConstants; -import org.apache.cloudstack.api.BaseAsyncCmd; -import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.Implementation; -import org.apache.cloudstack.api.Parameter; -import org.apache.cloudstack.api.ServerApiException; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.response.DomainRouterResponse; import com.cloud.async.AsyncJob; import com.cloud.event.EventTypes; @@ -34,7 +30,7 @@ import com.cloud.network.router.VirtualRouter; import com.cloud.user.Account; import com.cloud.user.UserContext; -@Implementation(description="Starts a router.", responseObject=DomainRouterResponse.class) +@APICommand(description="Starts a router.", responseObject=DomainRouterResponse.class) public class RebootRouterCmd extends BaseAsyncCmd { public static final Logger s_logger = Logger.getLogger(RebootRouterCmd.class.getName()); private static final String s_name = "rebootrouterresponse"; diff --git a/api/src/org/apache/cloudstack/api/command/admin/router/StartRouterCmd.java b/api/src/org/apache/cloudstack/api/command/admin/router/StartRouterCmd.java index 3d323c9d0b0..fc7c01f253a 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/router/StartRouterCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/router/StartRouterCmd.java @@ -16,14 +16,10 @@ // under the License. package org.apache.cloudstack.api.command.admin.router; +import org.apache.cloudstack.api.*; import org.apache.log4j.Logger; -import org.apache.cloudstack.api.ApiConstants; -import org.apache.cloudstack.api.BaseAsyncCmd; -import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.Implementation; -import org.apache.cloudstack.api.Parameter; -import org.apache.cloudstack.api.ServerApiException; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.response.DomainRouterResponse; import com.cloud.async.AsyncJob; import com.cloud.event.EventTypes; @@ -34,7 +30,7 @@ import com.cloud.network.router.VirtualRouter; import com.cloud.user.Account; import com.cloud.user.UserContext; -@Implementation(responseObject=DomainRouterResponse.class, description="Starts a router.") +@APICommand(responseObject=DomainRouterResponse.class, description="Starts a router.") public class StartRouterCmd extends BaseAsyncCmd { public static final Logger s_logger = Logger.getLogger(StartRouterCmd.class.getName()); private static final String s_name = "startrouterresponse"; diff --git a/api/src/org/apache/cloudstack/api/command/admin/router/StopRouterCmd.java b/api/src/org/apache/cloudstack/api/command/admin/router/StopRouterCmd.java index fe282f74c0b..0003e707818 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/router/StopRouterCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/router/StopRouterCmd.java @@ -21,7 +21,7 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; import org.apache.cloudstack.api.response.DomainRouterResponse; @@ -33,7 +33,7 @@ import com.cloud.network.router.VirtualRouter; import com.cloud.user.Account; import com.cloud.user.UserContext; -@Implementation(description = "Stops a router.", responseObject = DomainRouterResponse.class) +@APICommand(description = "Stops a router.", responseObject = DomainRouterResponse.class) public class StopRouterCmd extends BaseAsyncCmd { public static final Logger s_logger = Logger.getLogger(StopRouterCmd.class.getName()); private static final String s_name = "stoprouterresponse"; diff --git a/api/src/org/apache/cloudstack/api/command/admin/router/UpgradeRouterCmd.java b/api/src/org/apache/cloudstack/api/command/admin/router/UpgradeRouterCmd.java index d76ab986ca8..331def837db 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/router/UpgradeRouterCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/router/UpgradeRouterCmd.java @@ -16,19 +16,16 @@ // under the License. package org.apache.cloudstack.api.command.admin.router; +import org.apache.cloudstack.api.*; import org.apache.cloudstack.api.response.DiskOfferingResponse; import org.apache.log4j.Logger; -import org.apache.cloudstack.api.ApiConstants; -import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.Implementation; -import org.apache.cloudstack.api.Parameter; -import org.apache.cloudstack.api.ServerApiException; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.response.DomainRouterResponse; import com.cloud.network.router.VirtualRouter; import com.cloud.user.Account; -@Implementation(description="Upgrades domain router to a new service offering", responseObject=DomainRouterResponse.class) +@APICommand(description="Upgrades domain router to a new service offering", responseObject=DomainRouterResponse.class) public class UpgradeRouterCmd extends BaseCmd { public static final Logger s_logger = Logger.getLogger(UpgradeRouterCmd.class.getName()); private static final String s_name = "changeserviceforrouterresponse"; diff --git a/api/src/org/apache/cloudstack/api/command/admin/storagepool/CancelPrimaryStorageMaintenanceCmd.java b/api/src/org/apache/cloudstack/api/command/admin/storagepool/CancelPrimaryStorageMaintenanceCmd.java index c47691d14b5..7ccd4e841a5 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/storagepool/CancelPrimaryStorageMaintenanceCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/storagepool/CancelPrimaryStorageMaintenanceCmd.java @@ -21,7 +21,7 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; import org.apache.cloudstack.api.response.StoragePoolResponse; @@ -32,7 +32,7 @@ import com.cloud.storage.StoragePool; import com.cloud.user.Account; import com.cloud.user.UserContext; -@Implementation(description="Cancels maintenance for primary storage", responseObject=StoragePoolResponse.class) +@APICommand(description="Cancels maintenance for primary storage", responseObject=StoragePoolResponse.class) public class CancelPrimaryStorageMaintenanceCmd extends BaseAsyncCmd { public static final Logger s_logger = Logger.getLogger(CancelPrimaryStorageMaintenanceCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/admin/storagepool/CreateStoragePoolCmd.java b/api/src/org/apache/cloudstack/api/command/admin/storagepool/CreateStoragePoolCmd.java index d9f1d24f9c1..fcf8d5fc9c7 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/storagepool/CreateStoragePoolCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/storagepool/CreateStoragePoolCmd.java @@ -19,16 +19,13 @@ package org.apache.cloudstack.api.command.admin.storagepool; import java.net.UnknownHostException; import java.util.Map; +import org.apache.cloudstack.api.*; import org.apache.cloudstack.api.response.ClusterResponse; import org.apache.cloudstack.api.response.PodResponse; import org.apache.cloudstack.api.response.ZoneResponse; import org.apache.log4j.Logger; -import org.apache.cloudstack.api.ApiConstants; -import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.Implementation; -import org.apache.cloudstack.api.Parameter; -import org.apache.cloudstack.api.ServerApiException; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.response.StoragePoolResponse; import com.cloud.exception.ResourceInUseException; import com.cloud.exception.ResourceUnavailableException; @@ -36,7 +33,7 @@ import com.cloud.storage.StoragePool; import com.cloud.user.Account; @SuppressWarnings("rawtypes") -@Implementation(description="Creates a storage pool.", responseObject=StoragePoolResponse.class) +@APICommand(description="Creates a storage pool.", responseObject=StoragePoolResponse.class) public class CreateStoragePoolCmd extends BaseCmd { public static final Logger s_logger = Logger.getLogger(CreateStoragePoolCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/admin/storagepool/DeletePoolCmd.java b/api/src/org/apache/cloudstack/api/command/admin/storagepool/DeletePoolCmd.java index 84cfdd56a50..ec9d5b88694 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/storagepool/DeletePoolCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/storagepool/DeletePoolCmd.java @@ -16,20 +16,17 @@ // under the License. package org.apache.cloudstack.api.command.admin.storagepool; +import org.apache.cloudstack.api.*; import org.apache.cloudstack.api.response.StoragePoolResponse; import org.apache.log4j.Logger; -import org.apache.cloudstack.api.ApiConstants; -import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.Implementation; -import org.apache.cloudstack.api.Parameter; -import org.apache.cloudstack.api.ServerApiException; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.response.SuccessResponse; import com.cloud.storage.StoragePool; import com.cloud.storage.StoragePoolStatus; import com.cloud.user.Account; -@Implementation(description = "Deletes a storage pool.", responseObject = SuccessResponse.class) +@APICommand(description = "Deletes a storage pool.", responseObject = SuccessResponse.class) public class DeletePoolCmd extends BaseCmd { public static final Logger s_logger = Logger.getLogger(DeletePoolCmd.class.getName()); private static final String s_name = "deletestoragepoolresponse"; diff --git a/api/src/org/apache/cloudstack/api/command/admin/storagepool/ListStoragePoolsCmd.java b/api/src/org/apache/cloudstack/api/command/admin/storagepool/ListStoragePoolsCmd.java index 12a2dc31c44..1d77f8b2afd 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/storagepool/ListStoragePoolsCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/storagepool/ListStoragePoolsCmd.java @@ -19,11 +19,11 @@ package org.apache.cloudstack.api.command.admin.storagepool; import java.util.ArrayList; import java.util.List; +import org.apache.cloudstack.api.APICommand; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseListCmd; -import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.response.ClusterResponse; import org.apache.cloudstack.api.response.ListResponse; @@ -34,7 +34,7 @@ import com.cloud.async.AsyncJob; import com.cloud.storage.StoragePool; import com.cloud.utils.Pair; -@Implementation(description="Lists storage pools.", responseObject=StoragePoolResponse.class) +@APICommand(description="Lists storage pools.", responseObject=StoragePoolResponse.class) public class ListStoragePoolsCmd extends BaseListCmd { public static final Logger s_logger = Logger.getLogger(ListStoragePoolsCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/admin/storagepool/PreparePrimaryStorageForMaintenanceCmd.java b/api/src/org/apache/cloudstack/api/command/admin/storagepool/PreparePrimaryStorageForMaintenanceCmd.java index e5114873f51..c81d46cf388 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/storagepool/PreparePrimaryStorageForMaintenanceCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/storagepool/PreparePrimaryStorageForMaintenanceCmd.java @@ -21,7 +21,7 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; import org.apache.cloudstack.api.response.StoragePoolResponse; @@ -33,7 +33,7 @@ import com.cloud.storage.StoragePool; import com.cloud.user.Account; import com.cloud.user.UserContext; -@Implementation(description="Puts storage pool into maintenance state", responseObject=StoragePoolResponse.class) +@APICommand(description="Puts storage pool into maintenance state", responseObject=StoragePoolResponse.class) public class PreparePrimaryStorageForMaintenanceCmd extends BaseAsyncCmd { public static final Logger s_logger = Logger.getLogger(PreparePrimaryStorageForMaintenanceCmd.class.getName()); private static final String s_name = "prepareprimarystorageformaintenanceresponse"; diff --git a/api/src/org/apache/cloudstack/api/command/admin/storagepool/UpdateStoragePoolCmd.java b/api/src/org/apache/cloudstack/api/command/admin/storagepool/UpdateStoragePoolCmd.java index bfaff43c8f1..55e3b334a3f 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/storagepool/UpdateStoragePoolCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/storagepool/UpdateStoragePoolCmd.java @@ -18,18 +18,15 @@ package org.apache.cloudstack.api.command.admin.storagepool; import java.util.List; +import org.apache.cloudstack.api.*; import org.apache.log4j.Logger; -import org.apache.cloudstack.api.ApiConstants; -import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.Implementation; -import org.apache.cloudstack.api.Parameter; -import org.apache.cloudstack.api.ServerApiException; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.response.StoragePoolResponse; import com.cloud.storage.StoragePool; import com.cloud.user.Account; -@Implementation(description="Updates a storage pool.", responseObject=StoragePoolResponse.class, since="3.0.0") +@APICommand(description="Updates a storage pool.", responseObject=StoragePoolResponse.class, since="3.0.0") public class UpdateStoragePoolCmd extends BaseCmd { public static final Logger s_logger = Logger.getLogger(UpdateStoragePoolCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/admin/swift/AddSwiftCmd.java b/api/src/org/apache/cloudstack/api/command/admin/swift/AddSwiftCmd.java index 11c8e04868a..c399c51f6a0 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/swift/AddSwiftCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/swift/AddSwiftCmd.java @@ -16,20 +16,17 @@ // under the License. package org.apache.cloudstack.api.command.admin.swift; +import org.apache.cloudstack.api.*; import org.apache.log4j.Logger; -import org.apache.cloudstack.api.ApiConstants; -import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.Implementation; -import org.apache.cloudstack.api.Parameter; -import org.apache.cloudstack.api.ServerApiException; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.response.HostResponse; import org.apache.cloudstack.api.response.SwiftResponse; import com.cloud.exception.DiscoveryException; import com.cloud.storage.Swift; import com.cloud.user.Account; -@Implementation(description = "Adds Swift.", responseObject = HostResponse.class, since="3.0.0") +@APICommand(description = "Adds Swift.", responseObject = HostResponse.class, since="3.0.0") public class AddSwiftCmd extends BaseCmd { public static final Logger s_logger = Logger.getLogger(AddSwiftCmd.class.getName()); private static final String s_name = "addswiftresponse"; diff --git a/api/src/org/apache/cloudstack/api/command/admin/swift/ListSwiftsCmd.java b/api/src/org/apache/cloudstack/api/command/admin/swift/ListSwiftsCmd.java index 9121a9f142f..67636b51ebe 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/swift/ListSwiftsCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/swift/ListSwiftsCmd.java @@ -19,11 +19,11 @@ package org.apache.cloudstack.api.command.admin.swift; import java.util.ArrayList; import java.util.List; +import org.apache.cloudstack.api.APICommand; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseListCmd; -import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.response.HostResponse; import org.apache.cloudstack.api.response.ListResponse; @@ -31,7 +31,7 @@ import org.apache.cloudstack.api.response.SwiftResponse; import com.cloud.storage.Swift; import com.cloud.user.Account; -@Implementation(description = "List Swift.", responseObject = HostResponse.class, since="3.0.0") +@APICommand(description = "List Swift.", responseObject = HostResponse.class, since="3.0.0") public class ListSwiftsCmd extends BaseListCmd { public static final Logger s_logger = Logger.getLogger(ListSwiftsCmd.class.getName()); private static final String s_name = "listswiftsresponse"; diff --git a/api/src/org/apache/cloudstack/api/command/admin/systemvm/DestroySystemVmCmd.java b/api/src/org/apache/cloudstack/api/command/admin/systemvm/DestroySystemVmCmd.java index f2462155c9c..36155e33a4c 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/systemvm/DestroySystemVmCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/systemvm/DestroySystemVmCmd.java @@ -16,14 +16,10 @@ // under the License. package org.apache.cloudstack.api.command.admin.systemvm; +import org.apache.cloudstack.api.*; import org.apache.log4j.Logger; -import org.apache.cloudstack.api.ApiConstants; -import org.apache.cloudstack.api.BaseAsyncCmd; -import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.Implementation; -import org.apache.cloudstack.api.Parameter; -import org.apache.cloudstack.api.ServerApiException; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.response.SystemVmResponse; import com.cloud.async.AsyncJob; import com.cloud.event.EventTypes; @@ -31,7 +27,7 @@ import com.cloud.user.Account; import com.cloud.user.UserContext; import com.cloud.vm.VirtualMachine; -@Implementation(responseObject=SystemVmResponse.class, description="Destroyes a system virtual machine.") +@APICommand(responseObject=SystemVmResponse.class, description="Destroyes a system virtual machine.") public class DestroySystemVmCmd extends BaseAsyncCmd { public static final Logger s_logger = Logger.getLogger(DestroySystemVmCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/admin/systemvm/ListSystemVMsCmd.java b/api/src/org/apache/cloudstack/api/command/admin/systemvm/ListSystemVMsCmd.java index f81ee062dd1..3373d848db9 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/systemvm/ListSystemVMsCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/systemvm/ListSystemVMsCmd.java @@ -19,11 +19,11 @@ package org.apache.cloudstack.api.command.admin.systemvm; import java.util.ArrayList; import java.util.List; +import org.apache.cloudstack.api.APICommand; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseListCmd; -import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.response.HostResponse; import org.apache.cloudstack.api.response.ListResponse; @@ -35,7 +35,7 @@ import com.cloud.async.AsyncJob; import com.cloud.utils.Pair; import com.cloud.vm.VirtualMachine; -@Implementation(description="List system virtual machines.", responseObject=SystemVmResponse.class) +@APICommand(description="List system virtual machines.", responseObject=SystemVmResponse.class) public class ListSystemVMsCmd extends BaseListCmd { public static final Logger s_logger = Logger.getLogger(ListSystemVMsCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/admin/systemvm/MigrateSystemVMCmd.java b/api/src/org/apache/cloudstack/api/command/admin/systemvm/MigrateSystemVMCmd.java index 0406c773a44..95072c6e829 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/systemvm/MigrateSystemVMCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/systemvm/MigrateSystemVMCmd.java @@ -21,7 +21,7 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; import org.apache.cloudstack.api.response.HostResponse; @@ -38,7 +38,7 @@ import com.cloud.user.Account; import com.cloud.user.UserContext; import com.cloud.vm.VirtualMachine; -@Implementation(description="Attempts Migration of a system virtual machine to the host specified.", responseObject=SystemVmInstanceResponse.class) +@APICommand(description="Attempts Migration of a system virtual machine to the host specified.", responseObject=SystemVmInstanceResponse.class) public class MigrateSystemVMCmd extends BaseAsyncCmd { public static final Logger s_logger = Logger.getLogger(MigrateSystemVMCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/admin/systemvm/RebootSystemVmCmd.java b/api/src/org/apache/cloudstack/api/command/admin/systemvm/RebootSystemVmCmd.java index edfca8244ca..5455c481ba1 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/systemvm/RebootSystemVmCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/systemvm/RebootSystemVmCmd.java @@ -21,7 +21,7 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; import org.apache.cloudstack.api.response.SystemVmResponse; @@ -31,7 +31,7 @@ import com.cloud.user.Account; import com.cloud.user.UserContext; import com.cloud.vm.VirtualMachine; -@Implementation(description="Reboots a system VM.", responseObject=SystemVmResponse.class) +@APICommand(description="Reboots a system VM.", responseObject=SystemVmResponse.class) public class RebootSystemVmCmd extends BaseAsyncCmd { public static final Logger s_logger = Logger.getLogger(RebootSystemVmCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/admin/systemvm/StartSystemVMCmd.java b/api/src/org/apache/cloudstack/api/command/admin/systemvm/StartSystemVMCmd.java index 94bd5dccf3d..bd4b6f32c98 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/systemvm/StartSystemVMCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/systemvm/StartSystemVMCmd.java @@ -21,7 +21,7 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; import org.apache.cloudstack.api.response.SystemVmResponse; @@ -31,7 +31,7 @@ import com.cloud.user.Account; import com.cloud.user.UserContext; import com.cloud.vm.VirtualMachine; -@Implementation(responseObject=SystemVmResponse.class, description="Starts a system virtual machine.") +@APICommand(responseObject=SystemVmResponse.class, description="Starts a system virtual machine.") public class StartSystemVMCmd extends BaseAsyncCmd { public static final Logger s_logger = Logger.getLogger(StartSystemVMCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/admin/systemvm/StopSystemVmCmd.java b/api/src/org/apache/cloudstack/api/command/admin/systemvm/StopSystemVmCmd.java index 60e25430258..9e4c618ac8e 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/systemvm/StopSystemVmCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/systemvm/StopSystemVmCmd.java @@ -16,14 +16,10 @@ // under the License. package org.apache.cloudstack.api.command.admin.systemvm; +import org.apache.cloudstack.api.*; import org.apache.log4j.Logger; -import org.apache.cloudstack.api.ApiConstants; -import org.apache.cloudstack.api.BaseAsyncCmd; -import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.Implementation; -import org.apache.cloudstack.api.Parameter; -import org.apache.cloudstack.api.ServerApiException; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.response.SystemVmResponse; import com.cloud.async.AsyncJob; import com.cloud.event.EventTypes; @@ -33,7 +29,7 @@ import com.cloud.user.Account; import com.cloud.user.UserContext; import com.cloud.vm.VirtualMachine; -@Implementation(description="Stops a system VM.", responseObject=SystemVmResponse.class) +@APICommand(description="Stops a system VM.", responseObject=SystemVmResponse.class) public class StopSystemVmCmd extends BaseAsyncCmd { public static final Logger s_logger = Logger.getLogger(StopSystemVmCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/admin/systemvm/UpgradeSystemVMCmd.java b/api/src/org/apache/cloudstack/api/command/admin/systemvm/UpgradeSystemVMCmd.java index 77d812afc99..de5e847751d 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/systemvm/UpgradeSystemVMCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/systemvm/UpgradeSystemVMCmd.java @@ -16,15 +16,12 @@ // under the License. package org.apache.cloudstack.api.command.admin.systemvm; +import org.apache.cloudstack.api.*; import org.apache.cloudstack.api.command.user.vm.UpgradeVMCmd; import org.apache.cloudstack.api.response.DiskOfferingResponse; import org.apache.log4j.Logger; -import org.apache.cloudstack.api.ApiConstants; -import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.Implementation; -import org.apache.cloudstack.api.Parameter; -import org.apache.cloudstack.api.ServerApiException; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.response.SystemVmResponse; import com.cloud.exception.InvalidParameterValueException; import com.cloud.offering.ServiceOffering; @@ -32,7 +29,7 @@ import com.cloud.user.Account; import com.cloud.user.UserContext; import com.cloud.vm.VirtualMachine; -@Implementation(responseObject=SystemVmResponse.class, description="Changes the service offering for a system vm (console proxy or secondary storage). " + +@APICommand(responseObject=SystemVmResponse.class, description="Changes the service offering for a system vm (console proxy or secondary storage). " + "The system vm must be in a \"Stopped\" state for " + "this command to take effect.") public class UpgradeSystemVMCmd extends BaseCmd { diff --git a/api/src/org/apache/cloudstack/api/command/admin/template/PrepareTemplateCmd.java b/api/src/org/apache/cloudstack/api/command/admin/template/PrepareTemplateCmd.java index 579c4b0bb3e..2021a575276 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/template/PrepareTemplateCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/template/PrepareTemplateCmd.java @@ -23,14 +23,14 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.response.ListResponse; import org.apache.cloudstack.api.response.TemplateResponse; import com.cloud.template.VirtualMachineTemplate; import com.cloud.user.Account; -@Implementation(responseObject=TemplateResponse.class, description="load template into primary storage") +@APICommand(responseObject=TemplateResponse.class, description="load template into primary storage") public class PrepareTemplateCmd extends BaseCmd { public static final Logger s_logger = Logger.getLogger(PrepareTemplateCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/admin/usage/AddTrafficTypeCmd.java b/api/src/org/apache/cloudstack/api/command/admin/usage/AddTrafficTypeCmd.java index 1cd62f57acb..2e9d58070b7 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/usage/AddTrafficTypeCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/usage/AddTrafficTypeCmd.java @@ -22,7 +22,7 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseAsyncCreateCmd; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; import org.apache.cloudstack.api.response.TrafficTypeResponse; @@ -33,7 +33,7 @@ import com.cloud.network.PhysicalNetworkTrafficType; import com.cloud.user.Account; import com.cloud.user.UserContext; -@Implementation(description="Adds traffic type to a physical network", responseObject=TrafficTypeResponse.class, since="3.0.0") +@APICommand(description="Adds traffic type to a physical network", responseObject=TrafficTypeResponse.class, since="3.0.0") public class AddTrafficTypeCmd extends BaseAsyncCreateCmd { public static final Logger s_logger = Logger.getLogger(AddTrafficTypeCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/admin/usage/DeleteTrafficTypeCmd.java b/api/src/org/apache/cloudstack/api/command/admin/usage/DeleteTrafficTypeCmd.java index 3c0018523b7..b3d7c0ab446 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/usage/DeleteTrafficTypeCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/usage/DeleteTrafficTypeCmd.java @@ -22,7 +22,7 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; import org.apache.cloudstack.api.response.SuccessResponse; @@ -30,7 +30,7 @@ import com.cloud.async.AsyncJob; import com.cloud.event.EventTypes; import com.cloud.user.Account; -@Implementation(description="Deletes traffic type of a physical network", responseObject=SuccessResponse.class, since="3.0.0") +@APICommand(description="Deletes traffic type of a physical network", responseObject=SuccessResponse.class, since="3.0.0") public class DeleteTrafficTypeCmd extends BaseAsyncCmd { public static final Logger s_logger = Logger.getLogger(DeleteTrafficTypeCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/admin/usage/ListTrafficTypeImplementorsCmd.java b/api/src/org/apache/cloudstack/api/command/admin/usage/ListTrafficTypeImplementorsCmd.java index b96b7454bd3..f5173d2d5fc 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/usage/ListTrafficTypeImplementorsCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/usage/ListTrafficTypeImplementorsCmd.java @@ -19,13 +19,10 @@ package org.apache.cloudstack.api.command.admin.usage; import java.util.ArrayList; import java.util.List; +import org.apache.cloudstack.api.*; import org.apache.log4j.Logger; -import org.apache.cloudstack.api.ApiConstants; -import org.apache.cloudstack.api.BaseListCmd; -import org.apache.cloudstack.api.Implementation; -import org.apache.cloudstack.api.Parameter; -import org.apache.cloudstack.api.ServerApiException; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.response.ListResponse; import org.apache.cloudstack.api.response.TrafficTypeImplementorResponse; import com.cloud.exception.ConcurrentOperationException; @@ -36,7 +33,7 @@ import com.cloud.network.Networks.TrafficType; import com.cloud.user.Account; import com.cloud.utils.Pair; -@Implementation(description="Lists implementors of implementor of a network traffic type or implementors of all network traffic types", responseObject=TrafficTypeImplementorResponse.class, since="3.0.0") +@APICommand(description="Lists implementors of implementor of a network traffic type or implementors of all network traffic types", responseObject=TrafficTypeImplementorResponse.class, since="3.0.0") public class ListTrafficTypeImplementorsCmd extends BaseListCmd { public static final Logger s_logger = Logger.getLogger(ListTrafficTypeImplementorsCmd.class); private static final String _name = "listtraffictypeimplementorsresponse"; diff --git a/api/src/org/apache/cloudstack/api/command/admin/usage/ListTrafficTypesCmd.java b/api/src/org/apache/cloudstack/api/command/admin/usage/ListTrafficTypesCmd.java index f82829e6be9..59527a9cd52 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/usage/ListTrafficTypesCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/usage/ListTrafficTypesCmd.java @@ -19,12 +19,12 @@ package org.apache.cloudstack.api.command.admin.usage; import java.util.ArrayList; import java.util.List; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.response.PhysicalNetworkResponse; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseListCmd; -import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.response.ListResponse; import org.apache.cloudstack.api.response.ProviderResponse; @@ -33,7 +33,7 @@ import com.cloud.network.PhysicalNetworkTrafficType; import com.cloud.user.Account; import com.cloud.utils.Pair; -@Implementation(description="Lists traffic types of a given physical network.", responseObject=ProviderResponse.class, since="3.0.0") +@APICommand(description="Lists traffic types of a given physical network.", responseObject=ProviderResponse.class, since="3.0.0") public class ListTrafficTypesCmd extends BaseListCmd { public static final Logger s_logger = Logger.getLogger(ListTrafficTypesCmd.class.getName()); private static final String _name = "listtraffictypesresponse"; diff --git a/api/src/org/apache/cloudstack/api/command/admin/usage/UpdateTrafficTypeCmd.java b/api/src/org/apache/cloudstack/api/command/admin/usage/UpdateTrafficTypeCmd.java index 8f8d333b8cf..015cb86cc9c 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/usage/UpdateTrafficTypeCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/usage/UpdateTrafficTypeCmd.java @@ -21,7 +21,7 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; import org.apache.cloudstack.api.response.TrafficTypeResponse; @@ -30,7 +30,7 @@ import com.cloud.event.EventTypes; import com.cloud.network.PhysicalNetworkTrafficType; import com.cloud.user.Account; -@Implementation(description="Updates traffic type of a physical network", responseObject=TrafficTypeResponse.class, since="3.0.0") +@APICommand(description="Updates traffic type of a physical network", responseObject=TrafficTypeResponse.class, since="3.0.0") public class UpdateTrafficTypeCmd extends BaseAsyncCmd { public static final Logger s_logger = Logger.getLogger(UpdateTrafficTypeCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/admin/user/CreateUserCmd.java b/api/src/org/apache/cloudstack/api/command/admin/user/CreateUserCmd.java index a1461fbba12..3d523c6c21c 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/user/CreateUserCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/user/CreateUserCmd.java @@ -20,7 +20,7 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; import org.apache.cloudstack.api.response.DomainResponse; @@ -29,7 +29,7 @@ import com.cloud.user.Account; import com.cloud.user.User; import com.cloud.user.UserContext; -@Implementation(description="Creates a user for an account that already exists", responseObject=UserResponse.class) +@APICommand(description="Creates a user for an account that already exists", responseObject=UserResponse.class) public class CreateUserCmd extends BaseCmd { public static final Logger s_logger = Logger.getLogger(CreateUserCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/admin/user/DeleteUserCmd.java b/api/src/org/apache/cloudstack/api/command/admin/user/DeleteUserCmd.java index 8c85bc6965f..573d7cc32a5 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/user/DeleteUserCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/user/DeleteUserCmd.java @@ -20,7 +20,7 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; import org.apache.cloudstack.api.response.SuccessResponse; @@ -29,7 +29,7 @@ import com.cloud.user.Account; import com.cloud.user.User; import com.cloud.user.UserContext; -@Implementation(description="Creates a user for an account", responseObject=UserResponse.class) +@APICommand(description="Creates a user for an account", responseObject=UserResponse.class) public class DeleteUserCmd extends BaseCmd { public static final Logger s_logger = Logger.getLogger(DeleteUserCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/admin/user/DisableUserCmd.java b/api/src/org/apache/cloudstack/api/command/admin/user/DisableUserCmd.java index 403014bb6c5..205d3722047 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/user/DisableUserCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/user/DisableUserCmd.java @@ -21,7 +21,7 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; import org.apache.cloudstack.api.response.UserResponse; @@ -32,7 +32,7 @@ import com.cloud.user.User; import com.cloud.user.UserAccount; import com.cloud.user.UserContext; -@Implementation(description="Disables a user account", responseObject=UserResponse.class) +@APICommand(description="Disables a user account", responseObject=UserResponse.class) public class DisableUserCmd extends BaseAsyncCmd { public static final Logger s_logger = Logger.getLogger(DisableUserCmd.class.getName()); private static final String s_name = "disableuserresponse"; diff --git a/api/src/org/apache/cloudstack/api/command/admin/user/EnableUserCmd.java b/api/src/org/apache/cloudstack/api/command/admin/user/EnableUserCmd.java index 0e88627c43a..b309cf8e0b5 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/user/EnableUserCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/user/EnableUserCmd.java @@ -16,20 +16,17 @@ // under the License. package org.apache.cloudstack.api.command.admin.user; +import org.apache.cloudstack.api.*; import org.apache.log4j.Logger; -import org.apache.cloudstack.api.ApiConstants; -import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.Implementation; -import org.apache.cloudstack.api.Parameter; -import org.apache.cloudstack.api.ServerApiException; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.response.UserResponse; import com.cloud.user.Account; import com.cloud.user.User; import com.cloud.user.UserAccount; import com.cloud.user.UserContext; -@Implementation(description="Enables a user account", responseObject=UserResponse.class) +@APICommand(description="Enables a user account", responseObject=UserResponse.class) public class EnableUserCmd extends BaseCmd { public static final Logger s_logger = Logger.getLogger(EnableUserCmd.class.getName()); private static final String s_name = "enableuserresponse"; diff --git a/api/src/org/apache/cloudstack/api/command/admin/user/GetUserCmd.java b/api/src/org/apache/cloudstack/api/command/admin/user/GetUserCmd.java index 420de6a290d..3b30af9f87b 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/user/GetUserCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/user/GetUserCmd.java @@ -20,13 +20,13 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.response.UserResponse; import com.cloud.exception.InvalidParameterValueException; import com.cloud.user.UserAccount; -@Implementation(description="Find user account by API key", responseObject=UserResponse.class) +@APICommand(description="Find user account by API key", responseObject=UserResponse.class) public class GetUserCmd extends BaseCmd { public static final Logger s_logger = Logger.getLogger(GetUserCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/admin/user/ListUsersCmd.java b/api/src/org/apache/cloudstack/api/command/admin/user/ListUsersCmd.java index fba7a62eedd..3e0dc1148f4 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/user/ListUsersCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/user/ListUsersCmd.java @@ -20,12 +20,12 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseListAccountResourcesCmd; -import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.response.ListResponse; import org.apache.cloudstack.api.response.UserResponse; -@Implementation(description="Lists user accounts", responseObject=UserResponse.class) +@APICommand(description="Lists user accounts", responseObject=UserResponse.class) public class ListUsersCmd extends BaseListAccountResourcesCmd { public static final Logger s_logger = Logger.getLogger(ListUsersCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/admin/user/LockUserCmd.java b/api/src/org/apache/cloudstack/api/command/admin/user/LockUserCmd.java index a29739385c1..d78c174b4b1 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/user/LockUserCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/user/LockUserCmd.java @@ -20,7 +20,7 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; import org.apache.cloudstack.api.response.UserResponse; @@ -28,7 +28,7 @@ import com.cloud.user.Account; import com.cloud.user.User; import com.cloud.user.UserAccount; -@Implementation(description="Locks a user account", responseObject=UserResponse.class) +@APICommand(description="Locks a user account", responseObject=UserResponse.class) public class LockUserCmd extends BaseCmd { public static final Logger s_logger = Logger.getLogger(LockUserCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/admin/user/RegisterCmd.java b/api/src/org/apache/cloudstack/api/command/admin/user/RegisterCmd.java index b762ac66e99..5427b501194 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/user/RegisterCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/user/RegisterCmd.java @@ -20,14 +20,14 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.response.RegisterResponse; import org.apache.cloudstack.api.response.UserResponse; import com.cloud.user.Account; import com.cloud.user.User; -@Implementation(responseObject=RegisterResponse.class, description="This command allows a user to register for the developer API, returning a secret key and an API key. This request is made through the integration API port, so it is a privileged command and must be made on behalf of a user. It is up to the implementer just how the username and password are entered, and then how that translates to an integration API request. Both secret key and API key should be returned to the user") +@APICommand(responseObject=RegisterResponse.class, description="This command allows a user to register for the developer API, returning a secret key and an API key. This request is made through the integration API port, so it is a privileged command and must be made on behalf of a user. It is up to the implementer just how the username and password are entered, and then how that translates to an integration API request. Both secret key and API key should be returned to the user") public class RegisterCmd extends BaseCmd { public static final Logger s_logger = Logger.getLogger(RegisterCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/admin/user/UpdateUserCmd.java b/api/src/org/apache/cloudstack/api/command/admin/user/UpdateUserCmd.java index b2f4399d172..15ba2d6b3ae 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/user/UpdateUserCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/user/UpdateUserCmd.java @@ -16,20 +16,17 @@ // under the License. package org.apache.cloudstack.api.command.admin.user; +import org.apache.cloudstack.api.*; import org.apache.log4j.Logger; -import org.apache.cloudstack.api.ApiConstants; -import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.Implementation; -import org.apache.cloudstack.api.Parameter; -import org.apache.cloudstack.api.ServerApiException; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.response.UserResponse; import com.cloud.user.Account; import com.cloud.user.User; import com.cloud.user.UserAccount; import com.cloud.user.UserContext; -@Implementation(description="Updates a user account", responseObject=UserResponse.class) +@APICommand(description="Updates a user account", responseObject=UserResponse.class) public class UpdateUserCmd extends BaseCmd { public static final Logger s_logger = Logger.getLogger(UpdateUserCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/admin/vlan/CreateVlanIpRangeCmd.java b/api/src/org/apache/cloudstack/api/command/admin/vlan/CreateVlanIpRangeCmd.java index d9b955701f5..a676c22fd8f 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/vlan/CreateVlanIpRangeCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/vlan/CreateVlanIpRangeCmd.java @@ -16,13 +16,10 @@ // under the License. package org.apache.cloudstack.api.command.admin.vlan; +import org.apache.cloudstack.api.*; import org.apache.log4j.Logger; -import org.apache.cloudstack.api.ApiConstants; -import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.Implementation; -import org.apache.cloudstack.api.Parameter; -import org.apache.cloudstack.api.ServerApiException; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.response.DomainResponse; import org.apache.cloudstack.api.response.PodResponse; import org.apache.cloudstack.api.response.PhysicalNetworkResponse; @@ -37,7 +34,7 @@ import com.cloud.exception.ResourceAllocationException; import com.cloud.exception.ResourceUnavailableException; import com.cloud.user.Account; -@Implementation(description="Creates a VLAN IP range.", responseObject=VlanIpRangeResponse.class) +@APICommand(description="Creates a VLAN IP range.", responseObject=VlanIpRangeResponse.class) public class CreateVlanIpRangeCmd extends BaseCmd { public static final Logger s_logger = Logger.getLogger(CreateVlanIpRangeCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/admin/vlan/DeleteVlanIpRangeCmd.java b/api/src/org/apache/cloudstack/api/command/admin/vlan/DeleteVlanIpRangeCmd.java index 3700dbd58eb..2363f1c30ad 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/vlan/DeleteVlanIpRangeCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/vlan/DeleteVlanIpRangeCmd.java @@ -21,13 +21,13 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; import org.apache.cloudstack.api.response.SuccessResponse; import com.cloud.user.Account; -@Implementation(description="Creates a VLAN IP range.", responseObject=SuccessResponse.class) +@APICommand(description="Creates a VLAN IP range.", responseObject=SuccessResponse.class) public class DeleteVlanIpRangeCmd extends BaseCmd { public static final Logger s_logger = Logger.getLogger(DeleteVlanIpRangeCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/admin/vlan/ListVlanIpRangesCmd.java b/api/src/org/apache/cloudstack/api/command/admin/vlan/ListVlanIpRangesCmd.java index 1cb3ea22674..93c26e785a1 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/vlan/ListVlanIpRangesCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/vlan/ListVlanIpRangesCmd.java @@ -19,11 +19,11 @@ package org.apache.cloudstack.api.command.admin.vlan; import java.util.ArrayList; import java.util.List; +import org.apache.cloudstack.api.APICommand; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseListCmd; -import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.response.DomainResponse; import org.apache.cloudstack.api.response.ListResponse; @@ -36,7 +36,7 @@ import org.apache.cloudstack.api.response.VlanIpRangeResponse; import com.cloud.dc.Vlan; import com.cloud.utils.Pair; -@Implementation(description="Lists all VLAN IP ranges.", responseObject=VlanIpRangeResponse.class) +@APICommand(description="Lists all VLAN IP ranges.", responseObject=VlanIpRangeResponse.class) public class ListVlanIpRangesCmd extends BaseListCmd { public static final Logger s_logger = Logger.getLogger(ListVlanIpRangesCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/admin/vm/AssignVMCmd.java b/api/src/org/apache/cloudstack/api/command/admin/vm/AssignVMCmd.java index 18ac324caac..7d6d25a72ff 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/vm/AssignVMCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/vm/AssignVMCmd.java @@ -19,14 +19,11 @@ package org.apache.cloudstack.api.command.admin.vm; import java.util.List; +import org.apache.cloudstack.api.*; import org.apache.cloudstack.api.command.user.vm.DeployVMCmd; import org.apache.log4j.Logger; -import org.apache.cloudstack.api.ApiConstants; -import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.Implementation; -import org.apache.cloudstack.api.Parameter; -import org.apache.cloudstack.api.ServerApiException; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.response.DomainResponse; import org.apache.cloudstack.api.response.NetworkResponse; @@ -35,7 +32,7 @@ import org.apache.cloudstack.api.response.UserVmResponse; import com.cloud.user.Account; import com.cloud.uservm.UserVm; -@Implementation(description="Move a user VM to another user under same domain.", responseObject=UserVmResponse.class, since="3.0.0") +@APICommand(description="Move a user VM to another user under same domain.", responseObject=UserVmResponse.class, since="3.0.0") public class AssignVMCmd extends BaseCmd { public static final Logger s_logger = Logger.getLogger(AssignVMCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/admin/vm/MigrateVMCmd.java b/api/src/org/apache/cloudstack/api/command/admin/vm/MigrateVMCmd.java index 19fee5bb5ef..36f0ffd6077 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/vm/MigrateVMCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/vm/MigrateVMCmd.java @@ -16,14 +16,10 @@ // under the License. package org.apache.cloudstack.api.command.admin.vm; +import org.apache.cloudstack.api.*; import org.apache.log4j.Logger; -import org.apache.cloudstack.api.ApiConstants; -import org.apache.cloudstack.api.BaseAsyncCmd; -import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.Implementation; -import org.apache.cloudstack.api.Parameter; -import org.apache.cloudstack.api.ServerApiException; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.response.HostResponse; import org.apache.cloudstack.api.response.StoragePoolResponse; @@ -41,7 +37,7 @@ import com.cloud.user.UserContext; import com.cloud.uservm.UserVm; import com.cloud.vm.VirtualMachine; -@Implementation(description="Attempts Migration of a VM to a different host or Root volume of the vm to a different storage pool", responseObject=UserVmResponse.class) +@APICommand(description="Attempts Migration of a VM to a different host or Root volume of the vm to a different storage pool", responseObject=UserVmResponse.class) public class MigrateVMCmd extends BaseAsyncCmd { public static final Logger s_logger = Logger.getLogger(MigrateVMCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/admin/vm/RecoverVMCmd.java b/api/src/org/apache/cloudstack/api/command/admin/vm/RecoverVMCmd.java index 5033b3e0c34..acffa211af0 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/vm/RecoverVMCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/vm/RecoverVMCmd.java @@ -20,7 +20,7 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; import org.apache.cloudstack.api.response.UserVmResponse; @@ -28,7 +28,7 @@ import com.cloud.exception.ResourceAllocationException; import com.cloud.user.Account; import com.cloud.uservm.UserVm; -@Implementation(description="Recovers a virtual machine.", responseObject=UserVmResponse.class) +@APICommand(description="Recovers a virtual machine.", responseObject=UserVmResponse.class) public class RecoverVMCmd extends BaseCmd { public static final Logger s_logger = Logger.getLogger(RecoverVMCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/admin/vpc/CreatePrivateGatewayCmd.java b/api/src/org/apache/cloudstack/api/command/admin/vpc/CreatePrivateGatewayCmd.java index 3126e6de105..6b426f8255f 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/vpc/CreatePrivateGatewayCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/vpc/CreatePrivateGatewayCmd.java @@ -24,7 +24,7 @@ import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseAsyncCreateCmd; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; import org.apache.cloudstack.api.response.PrivateGatewayResponse; @@ -39,7 +39,7 @@ import com.cloud.network.vpc.PrivateGateway; import com.cloud.network.vpc.Vpc; import com.cloud.user.Account; -@Implementation(description="Creates a private gateway", responseObject=PrivateGatewayResponse.class) +@APICommand(description="Creates a private gateway", responseObject=PrivateGatewayResponse.class) public class CreatePrivateGatewayCmd extends BaseAsyncCreateCmd { public static final Logger s_logger = Logger.getLogger(CreatePrivateGatewayCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/admin/vpc/CreateVPCOfferingCmd.java b/api/src/org/apache/cloudstack/api/command/admin/vpc/CreateVPCOfferingCmd.java index 8e64087e432..762278de825 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/vpc/CreateVPCOfferingCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/vpc/CreateVPCOfferingCmd.java @@ -18,21 +18,17 @@ package org.apache.cloudstack.api.command.admin.vpc; import java.util.List; +import org.apache.cloudstack.api.*; import org.apache.log4j.Logger; -import org.apache.cloudstack.api.ApiConstants; -import org.apache.cloudstack.api.BaseAsyncCreateCmd; -import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.Implementation; -import org.apache.cloudstack.api.Parameter; -import org.apache.cloudstack.api.ServerApiException; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.response.VpcOfferingResponse; import com.cloud.event.EventTypes; import com.cloud.exception.ResourceAllocationException; import com.cloud.network.vpc.VpcOffering; import com.cloud.user.Account; -@Implementation(description="Creates VPC offering", responseObject=VpcOfferingResponse.class) +@APICommand(description="Creates VPC offering", responseObject=VpcOfferingResponse.class) public class CreateVPCOfferingCmd extends BaseAsyncCreateCmd{ public static final Logger s_logger = Logger.getLogger(CreateVPCOfferingCmd.class.getName()); private static final String _name = "createvpcofferingresponse"; diff --git a/api/src/org/apache/cloudstack/api/command/admin/vpc/DeletePrivateGatewayCmd.java b/api/src/org/apache/cloudstack/api/command/admin/vpc/DeletePrivateGatewayCmd.java index 53b6ba1572d..33aa70c2565 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/vpc/DeletePrivateGatewayCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/vpc/DeletePrivateGatewayCmd.java @@ -22,7 +22,7 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; import org.apache.cloudstack.api.response.SuccessResponse; @@ -35,7 +35,7 @@ import com.cloud.network.vpc.VpcGateway; import com.cloud.user.Account; import com.cloud.user.UserContext; -@Implementation(description="Deletes a Private gateway", responseObject=SuccessResponse.class) +@APICommand(description="Deletes a Private gateway", responseObject=SuccessResponse.class) public class DeletePrivateGatewayCmd extends BaseAsyncCmd { public static final Logger s_logger = Logger.getLogger(DeletePrivateGatewayCmd.class.getName()); private static final String s_name = "deleteprivategatewayresponse"; diff --git a/api/src/org/apache/cloudstack/api/command/admin/vpc/DeleteVPCOfferingCmd.java b/api/src/org/apache/cloudstack/api/command/admin/vpc/DeleteVPCOfferingCmd.java index 71f4148f6d8..fdf04837bc8 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/vpc/DeleteVPCOfferingCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/vpc/DeleteVPCOfferingCmd.java @@ -22,14 +22,14 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; import org.apache.cloudstack.api.response.SuccessResponse; import com.cloud.event.EventTypes; import com.cloud.user.Account; -@Implementation(description="Deletes VPC offering", responseObject=SuccessResponse.class) +@APICommand(description="Deletes VPC offering", responseObject=SuccessResponse.class) public class DeleteVPCOfferingCmd extends BaseAsyncCmd{ public static final Logger s_logger = Logger.getLogger(DeleteVPCOfferingCmd.class.getName()); private static final String s_name = "deletevpcofferingresponse"; diff --git a/api/src/org/apache/cloudstack/api/command/admin/vpc/UpdateVPCOfferingCmd.java b/api/src/org/apache/cloudstack/api/command/admin/vpc/UpdateVPCOfferingCmd.java index c2fcbc81d06..7c14cf3f31e 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/vpc/UpdateVPCOfferingCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/vpc/UpdateVPCOfferingCmd.java @@ -16,20 +16,16 @@ // under the License. package org.apache.cloudstack.api.command.admin.vpc; +import org.apache.cloudstack.api.*; import org.apache.log4j.Logger; -import org.apache.cloudstack.api.ApiConstants; -import org.apache.cloudstack.api.BaseAsyncCmd; -import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.Implementation; -import org.apache.cloudstack.api.Parameter; -import org.apache.cloudstack.api.ServerApiException; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.response.VpcOfferingResponse; import com.cloud.event.EventTypes; import com.cloud.network.vpc.VpcOffering; import com.cloud.user.Account; -@Implementation(description="Updates VPC offering", responseObject=VpcOfferingResponse.class) +@APICommand(description="Updates VPC offering", responseObject=VpcOfferingResponse.class) public class UpdateVPCOfferingCmd extends BaseAsyncCmd{ public static final Logger s_logger = Logger.getLogger(UpdateVPCOfferingCmd.class.getName()); private static final String _name = "updatevpcofferingresponse"; diff --git a/api/src/org/apache/cloudstack/api/command/admin/zone/CreateZoneCmd.java b/api/src/org/apache/cloudstack/api/command/admin/zone/CreateZoneCmd.java index 58a486bcfcb..06e48d4d8dd 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/zone/CreateZoneCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/zone/CreateZoneCmd.java @@ -20,7 +20,7 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; @@ -30,7 +30,7 @@ import com.cloud.dc.DataCenter; import com.cloud.user.Account; import com.cloud.user.UserContext; -@Implementation(description="Creates a Zone.", responseObject=ZoneResponse.class) +@APICommand(description="Creates a Zone.", responseObject=ZoneResponse.class) public class CreateZoneCmd extends BaseCmd { public static final Logger s_logger = Logger.getLogger(CreateZoneCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/admin/zone/DeleteZoneCmd.java b/api/src/org/apache/cloudstack/api/command/admin/zone/DeleteZoneCmd.java index 7c7f19f808c..d25311b39ae 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/zone/DeleteZoneCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/zone/DeleteZoneCmd.java @@ -16,19 +16,16 @@ // under the License. package org.apache.cloudstack.api.command.admin.zone; +import org.apache.cloudstack.api.*; import org.apache.log4j.Logger; -import org.apache.cloudstack.api.ApiConstants; -import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.Implementation; -import org.apache.cloudstack.api.Parameter; -import org.apache.cloudstack.api.ServerApiException; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.response.SuccessResponse; import org.apache.cloudstack.api.response.ZoneResponse; import com.cloud.user.Account; import com.cloud.user.UserContext; -@Implementation(description="Deletes a Zone.", responseObject=SuccessResponse.class) +@APICommand(description="Deletes a Zone.", responseObject=SuccessResponse.class) public class DeleteZoneCmd extends BaseCmd { public static final Logger s_logger = Logger.getLogger(DeleteZoneCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/admin/zone/MarkDefaultZoneForAccountCmd.java b/api/src/org/apache/cloudstack/api/command/admin/zone/MarkDefaultZoneForAccountCmd.java index e7a4fb3c250..cf7f295d00c 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/zone/MarkDefaultZoneForAccountCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/zone/MarkDefaultZoneForAccountCmd.java @@ -20,7 +20,7 @@ package org.apache.cloudstack.api.command.admin.zone; import org.apache.log4j.Logger; import org.apache.cloudstack.api.BaseAsyncCmd; -import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ApiConstants; import com.cloud.user.Account; @@ -33,7 +33,7 @@ import org.apache.cloudstack.api.response.ZoneResponse; import org.apache.cloudstack.api.ServerApiException; import org.apache.cloudstack.api.BaseCmd; -@Implementation(description="Marks a default zone for this account", responseObject=AccountResponse.class, since="4.0") +@APICommand(description="Marks a default zone for this account", responseObject=AccountResponse.class, since="4.0") public class MarkDefaultZoneForAccountCmd extends BaseAsyncCmd { public static final Logger s_logger = Logger.getLogger(MarkDefaultZoneForAccountCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/admin/zone/UpdateZoneCmd.java b/api/src/org/apache/cloudstack/api/command/admin/zone/UpdateZoneCmd.java index bf74af31275..474ea3f1e02 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/zone/UpdateZoneCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/zone/UpdateZoneCmd.java @@ -19,19 +19,16 @@ package org.apache.cloudstack.api.command.admin.zone; import java.util.List; import java.util.Map; +import org.apache.cloudstack.api.*; import org.apache.log4j.Logger; -import org.apache.cloudstack.api.ApiConstants; -import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.Implementation; -import org.apache.cloudstack.api.Parameter; -import org.apache.cloudstack.api.ServerApiException; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.response.ZoneResponse; import com.cloud.dc.DataCenter; import com.cloud.user.Account; import com.cloud.user.UserContext; -@Implementation(description="Updates a Zone.", responseObject=ZoneResponse.class) +@APICommand(description="Updates a Zone.", responseObject=ZoneResponse.class) public class UpdateZoneCmd extends BaseCmd { public static final Logger s_logger = Logger.getLogger(UpdateZoneCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/user/account/AddAccountToProjectCmd.java b/api/src/org/apache/cloudstack/api/command/user/account/AddAccountToProjectCmd.java index 74f91436de2..f5dfc7b8e76 100644 --- a/api/src/org/apache/cloudstack/api/command/user/account/AddAccountToProjectCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/account/AddAccountToProjectCmd.java @@ -16,15 +16,11 @@ // under the License. package org.apache.cloudstack.api.command.user.account; +import org.apache.cloudstack.api.*; import org.apache.cloudstack.api.response.ProjectResponse; import org.apache.log4j.Logger; -import org.apache.cloudstack.api.ApiConstants; -import org.apache.cloudstack.api.BaseAsyncCmd; -import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.Implementation; -import org.apache.cloudstack.api.Parameter; -import org.apache.cloudstack.api.ServerApiException; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.response.SuccessResponse; import com.cloud.event.EventTypes; import com.cloud.exception.InvalidParameterValueException; @@ -32,7 +28,7 @@ import com.cloud.projects.Project; import com.cloud.user.UserContext; -@Implementation(description="Adds acoount to a project", responseObject=SuccessResponse.class, since="3.0.0") +@APICommand(description="Adds acoount to a project", responseObject=SuccessResponse.class, since="3.0.0") public class AddAccountToProjectCmd extends BaseAsyncCmd { public static final Logger s_logger = Logger.getLogger(AddAccountToProjectCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/user/account/DeleteAccountFromProjectCmd.java b/api/src/org/apache/cloudstack/api/command/user/account/DeleteAccountFromProjectCmd.java index 61bd59c30dc..57f80681c69 100644 --- a/api/src/org/apache/cloudstack/api/command/user/account/DeleteAccountFromProjectCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/account/DeleteAccountFromProjectCmd.java @@ -16,23 +16,19 @@ // under the License. package org.apache.cloudstack.api.command.user.account; +import org.apache.cloudstack.api.*; import org.apache.cloudstack.api.command.user.project.DeleteProjectCmd; import org.apache.cloudstack.api.response.ProjectResponse; import org.apache.log4j.Logger; -import org.apache.cloudstack.api.ApiConstants; -import org.apache.cloudstack.api.BaseAsyncCmd; -import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.Implementation; -import org.apache.cloudstack.api.Parameter; -import org.apache.cloudstack.api.ServerApiException; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.response.SuccessResponse; import com.cloud.event.EventTypes; import com.cloud.exception.InvalidParameterValueException; import com.cloud.projects.Project; import com.cloud.user.UserContext; -@Implementation(description="Deletes account from the project", responseObject=SuccessResponse.class, since="3.0.0") +@APICommand(description="Deletes account from the project", responseObject=SuccessResponse.class, since="3.0.0") public class DeleteAccountFromProjectCmd extends BaseAsyncCmd { public static final Logger s_logger = Logger.getLogger(DeleteProjectCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/user/account/ListAccountsCmd.java b/api/src/org/apache/cloudstack/api/command/user/account/ListAccountsCmd.java index 6155bcd6466..2c9101a463c 100644 --- a/api/src/org/apache/cloudstack/api/command/user/account/ListAccountsCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/account/ListAccountsCmd.java @@ -23,14 +23,14 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseListDomainResourcesCmd; -import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.response.AccountResponse; import org.apache.cloudstack.api.response.ListResponse; import com.cloud.user.Account; import com.cloud.utils.Pair; -@Implementation(description="Lists accounts and provides detailed account information for listed accounts", responseObject=AccountResponse.class) +@APICommand(description="Lists accounts and provides detailed account information for listed accounts", responseObject=AccountResponse.class) public class ListAccountsCmd extends BaseListDomainResourcesCmd { public static final Logger s_logger = Logger.getLogger(ListAccountsCmd.class.getName()); private static final String s_name = "listaccountsresponse"; diff --git a/api/src/org/apache/cloudstack/api/command/user/account/ListProjectAccountsCmd.java b/api/src/org/apache/cloudstack/api/command/user/account/ListProjectAccountsCmd.java index f24ccf3c3a4..1088c948aae 100644 --- a/api/src/org/apache/cloudstack/api/command/user/account/ListProjectAccountsCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/account/ListProjectAccountsCmd.java @@ -16,11 +16,11 @@ // under the License. package org.apache.cloudstack.api.command.user.account; +import org.apache.cloudstack.api.APICommand; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseListCmd; -import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.response.ListResponse; import org.apache.cloudstack.api.response.ProjectAccountResponse; @@ -28,7 +28,7 @@ import org.apache.cloudstack.api.response.ProjectResponse; import com.cloud.user.Account; -@Implementation(description="Lists project's accounts", responseObject=ProjectResponse.class, since="3.0.0") +@APICommand(description="Lists project's accounts", responseObject=ProjectResponse.class, since="3.0.0") public class ListProjectAccountsCmd extends BaseListCmd { public static final Logger s_logger = Logger.getLogger(ListProjectAccountsCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/user/address/AssociateIPAddrCmd.java b/api/src/org/apache/cloudstack/api/command/user/address/AssociateIPAddrCmd.java index c696c6ee4ee..05d78a57fa2 100644 --- a/api/src/org/apache/cloudstack/api/command/user/address/AssociateIPAddrCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/address/AssociateIPAddrCmd.java @@ -24,7 +24,7 @@ import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseAsyncCreateCmd; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; import org.apache.cloudstack.api.response.DomainResponse; @@ -49,7 +49,7 @@ import com.cloud.network.vpc.Vpc; import com.cloud.user.Account; import com.cloud.user.UserContext; -@Implementation(description="Acquires and associates a public IP to an account.", responseObject=IPAddressResponse.class) +@APICommand(description="Acquires and associates a public IP to an account.", responseObject=IPAddressResponse.class) public class AssociateIPAddrCmd extends BaseAsyncCreateCmd { public static final Logger s_logger = Logger.getLogger(AssociateIPAddrCmd.class.getName()); private static final String s_name = "associateipaddressresponse"; diff --git a/api/src/org/apache/cloudstack/api/command/user/address/DisassociateIPAddrCmd.java b/api/src/org/apache/cloudstack/api/command/user/address/DisassociateIPAddrCmd.java index c3d9d39df1b..a5cfc74f964 100644 --- a/api/src/org/apache/cloudstack/api/command/user/address/DisassociateIPAddrCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/address/DisassociateIPAddrCmd.java @@ -16,16 +16,12 @@ // under the License. package org.apache.cloudstack.api.command.user.address; +import org.apache.cloudstack.api.*; import org.apache.cloudstack.api.response.AccountResponse; import org.apache.cloudstack.api.response.IPAddressResponse; import org.apache.log4j.Logger; -import org.apache.cloudstack.api.ApiConstants; -import org.apache.cloudstack.api.BaseAsyncCmd; -import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.Implementation; -import org.apache.cloudstack.api.Parameter; -import org.apache.cloudstack.api.ServerApiException; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.response.SuccessResponse; import com.cloud.async.AsyncJob; import com.cloud.event.EventTypes; @@ -35,7 +31,7 @@ import com.cloud.network.IpAddress; import com.cloud.user.Account; import com.cloud.user.UserContext; -@Implementation(description="Disassociates an ip address from the account.", responseObject=SuccessResponse.class) +@APICommand(description="Disassociates an ip address from the account.", responseObject=SuccessResponse.class) public class DisassociateIPAddrCmd extends BaseAsyncCmd { public static final Logger s_logger = Logger.getLogger(DisassociateIPAddrCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/user/address/ListPublicIpAddressesCmd.java b/api/src/org/apache/cloudstack/api/command/user/address/ListPublicIpAddressesCmd.java index 5951b5f6c38..deae8d3de89 100644 --- a/api/src/org/apache/cloudstack/api/command/user/address/ListPublicIpAddressesCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/address/ListPublicIpAddressesCmd.java @@ -23,7 +23,7 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseListTaggedResourcesCmd; -import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.response.IPAddressResponse; import org.apache.cloudstack.api.response.ListResponse; @@ -36,7 +36,7 @@ import com.cloud.async.AsyncJob; import com.cloud.network.IpAddress; import com.cloud.utils.Pair; -@Implementation(description="Lists all public ip addresses", responseObject=IPAddressResponse.class) +@APICommand(description="Lists all public ip addresses", responseObject=IPAddressResponse.class) public class ListPublicIpAddressesCmd extends BaseListTaggedResourcesCmd { public static final Logger s_logger = Logger.getLogger(ListPublicIpAddressesCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/user/autoscale/CreateAutoScalePolicyCmd.java b/api/src/org/apache/cloudstack/api/command/user/autoscale/CreateAutoScalePolicyCmd.java index 48e06b9c275..59cd306b951 100644 --- a/api/src/org/apache/cloudstack/api/command/user/autoscale/CreateAutoScalePolicyCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/autoscale/CreateAutoScalePolicyCmd.java @@ -18,15 +18,11 @@ package org.apache.cloudstack.api.command.user.autoscale; import java.util.List; +import org.apache.cloudstack.api.*; import org.apache.cloudstack.api.response.ConditionResponse; import org.apache.log4j.Logger; -import org.apache.cloudstack.api.ApiConstants; -import org.apache.cloudstack.api.BaseAsyncCreateCmd; -import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.Implementation; -import org.apache.cloudstack.api.Parameter; -import org.apache.cloudstack.api.ServerApiException; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.response.AutoScalePolicyResponse; import com.cloud.async.AsyncJob; import com.cloud.domain.Domain; @@ -36,7 +32,7 @@ import com.cloud.network.as.AutoScalePolicy; import com.cloud.network.as.Condition; import com.cloud.user.Account; -@Implementation(description = "Creates an autoscale policy for a provision or deprovision action, the action is taken when the all the conditions evaluates to true for the specified duration. The policy is in effect once it is attached to a autscale vm group.", responseObject = AutoScalePolicyResponse.class) +@APICommand(description = "Creates an autoscale policy for a provision or deprovision action, the action is taken when the all the conditions evaluates to true for the specified duration. The policy is in effect once it is attached to a autscale vm group.", responseObject = AutoScalePolicyResponse.class) public class CreateAutoScalePolicyCmd extends BaseAsyncCreateCmd { public static final Logger s_logger = Logger.getLogger(CreateAutoScalePolicyCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/user/autoscale/CreateAutoScaleVmGroupCmd.java b/api/src/org/apache/cloudstack/api/command/user/autoscale/CreateAutoScaleVmGroupCmd.java index dadc9658e07..84fd0c3f032 100644 --- a/api/src/org/apache/cloudstack/api/command/user/autoscale/CreateAutoScaleVmGroupCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/autoscale/CreateAutoScaleVmGroupCmd.java @@ -18,14 +18,10 @@ package org.apache.cloudstack.api.command.user.autoscale; import java.util.List; +import org.apache.cloudstack.api.*; import org.apache.log4j.Logger; -import org.apache.cloudstack.api.ApiConstants; -import org.apache.cloudstack.api.BaseAsyncCreateCmd; -import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.Implementation; -import org.apache.cloudstack.api.Parameter; -import org.apache.cloudstack.api.ServerApiException; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.response.AutoScaleVmGroupResponse; import org.apache.cloudstack.api.response.AutoScalePolicyResponse; import org.apache.cloudstack.api.response.AutoScaleVmProfileResponse; @@ -37,7 +33,7 @@ import com.cloud.exception.ResourceAllocationException; import com.cloud.network.as.AutoScaleVmGroup; import com.cloud.network.rules.LoadBalancer; -@Implementation(description = "Creates and automatically starts a virtual machine based on a service offering, disk offering, and template.", responseObject = AutoScaleVmGroupResponse.class) +@APICommand(description = "Creates and automatically starts a virtual machine based on a service offering, disk offering, and template.", responseObject = AutoScaleVmGroupResponse.class) public class CreateAutoScaleVmGroupCmd extends BaseAsyncCreateCmd { public static final Logger s_logger = Logger.getLogger(CreateAutoScaleVmGroupCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/user/autoscale/CreateAutoScaleVmProfileCmd.java b/api/src/org/apache/cloudstack/api/command/user/autoscale/CreateAutoScaleVmProfileCmd.java index 05ddaa6d4d0..be2ddf5aea8 100644 --- a/api/src/org/apache/cloudstack/api/command/user/autoscale/CreateAutoScaleVmProfileCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/autoscale/CreateAutoScaleVmProfileCmd.java @@ -24,7 +24,7 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseAsyncCreateCmd; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; import org.apache.cloudstack.api.response.AutoScaleVmProfileResponse; @@ -41,7 +41,7 @@ import com.cloud.user.Account; import com.cloud.user.User; import com.cloud.user.UserContext; -@Implementation(description = "Creates a profile that contains information about the virtual machine which will be provisioned automatically by autoscale feature.", responseObject = AutoScaleVmProfileResponse.class) +@APICommand(description = "Creates a profile that contains information about the virtual machine which will be provisioned automatically by autoscale feature.", responseObject = AutoScaleVmProfileResponse.class) @SuppressWarnings("rawtypes") public class CreateAutoScaleVmProfileCmd extends BaseAsyncCreateCmd { public static final Logger s_logger = Logger.getLogger(CreateAutoScaleVmProfileCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/user/autoscale/CreateConditionCmd.java b/api/src/org/apache/cloudstack/api/command/user/autoscale/CreateConditionCmd.java index a9dcd2f6f2a..e4cef078271 100644 --- a/api/src/org/apache/cloudstack/api/command/user/autoscale/CreateConditionCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/autoscale/CreateConditionCmd.java @@ -24,7 +24,7 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseAsyncCreateCmd; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; import org.apache.cloudstack.api.response.ConditionResponse; @@ -34,7 +34,7 @@ import com.cloud.exception.ResourceAllocationException; import com.cloud.network.as.Condition; import com.cloud.user.UserContext; -@Implementation(description = "Creates a condition", responseObject = ConditionResponse.class) +@APICommand(description = "Creates a condition", responseObject = ConditionResponse.class) public class CreateConditionCmd extends BaseAsyncCreateCmd { public static final Logger s_logger = Logger.getLogger(CreateConditionCmd.class.getName()); private static final String s_name = "conditionresponse"; diff --git a/api/src/org/apache/cloudstack/api/command/user/autoscale/DeleteAutoScalePolicyCmd.java b/api/src/org/apache/cloudstack/api/command/user/autoscale/DeleteAutoScalePolicyCmd.java index ceb5f6aa889..f8d6685ba14 100644 --- a/api/src/org/apache/cloudstack/api/command/user/autoscale/DeleteAutoScalePolicyCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/autoscale/DeleteAutoScalePolicyCmd.java @@ -22,7 +22,7 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; import org.apache.cloudstack.api.response.SuccessResponse; @@ -32,7 +32,7 @@ import com.cloud.network.as.AutoScalePolicy; import com.cloud.user.Account; import com.cloud.user.UserContext; -@Implementation(description = "Deletes a autoscale policy.", responseObject = SuccessResponse.class) +@APICommand(description = "Deletes a autoscale policy.", responseObject = SuccessResponse.class) public class DeleteAutoScalePolicyCmd extends BaseAsyncCmd { public static final Logger s_logger = Logger.getLogger(DeleteAutoScalePolicyCmd.class.getName()); private static final String s_name = "deleteautoscalepolicyresponse"; diff --git a/api/src/org/apache/cloudstack/api/command/user/autoscale/DeleteAutoScaleVmGroupCmd.java b/api/src/org/apache/cloudstack/api/command/user/autoscale/DeleteAutoScaleVmGroupCmd.java index 9628e8476c7..a12103153fb 100644 --- a/api/src/org/apache/cloudstack/api/command/user/autoscale/DeleteAutoScaleVmGroupCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/autoscale/DeleteAutoScaleVmGroupCmd.java @@ -22,7 +22,7 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; import org.apache.cloudstack.api.response.SuccessResponse; @@ -32,7 +32,7 @@ import com.cloud.network.as.AutoScaleVmGroup; import com.cloud.user.Account; import com.cloud.user.UserContext; -@Implementation(description = "Deletes a autoscale vm group.", responseObject = SuccessResponse.class) +@APICommand(description = "Deletes a autoscale vm group.", responseObject = SuccessResponse.class) public class DeleteAutoScaleVmGroupCmd extends BaseAsyncCmd { public static final Logger s_logger = Logger.getLogger(DeleteAutoScaleVmGroupCmd.class.getName()); private static final String s_name = "deleteautoscalevmgroupresponse"; diff --git a/api/src/org/apache/cloudstack/api/command/user/autoscale/DeleteAutoScaleVmProfileCmd.java b/api/src/org/apache/cloudstack/api/command/user/autoscale/DeleteAutoScaleVmProfileCmd.java index 5605f0279d2..a831db3c831 100644 --- a/api/src/org/apache/cloudstack/api/command/user/autoscale/DeleteAutoScaleVmProfileCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/autoscale/DeleteAutoScaleVmProfileCmd.java @@ -22,7 +22,7 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; import org.apache.cloudstack.api.response.SuccessResponse; @@ -32,7 +32,7 @@ import com.cloud.network.as.AutoScaleVmProfile; import com.cloud.user.Account; import com.cloud.user.UserContext; -@Implementation(description = "Deletes a autoscale vm profile.", responseObject = SuccessResponse.class) +@APICommand(description = "Deletes a autoscale vm profile.", responseObject = SuccessResponse.class) public class DeleteAutoScaleVmProfileCmd extends BaseAsyncCmd { public static final Logger s_logger = Logger.getLogger(DeleteAutoScaleVmProfileCmd.class.getName()); private static final String s_name = "deleteautoscalevmprofileresponse"; diff --git a/api/src/org/apache/cloudstack/api/command/user/autoscale/DeleteConditionCmd.java b/api/src/org/apache/cloudstack/api/command/user/autoscale/DeleteConditionCmd.java index 94b366313b8..9626726cc77 100644 --- a/api/src/org/apache/cloudstack/api/command/user/autoscale/DeleteConditionCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/autoscale/DeleteConditionCmd.java @@ -23,7 +23,7 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; import org.apache.cloudstack.api.response.SuccessResponse; @@ -33,7 +33,7 @@ import com.cloud.exception.ResourceInUseException; import com.cloud.network.as.Condition; import com.cloud.user.Account; -@Implementation(description = "Removes a condition", responseObject = SuccessResponse.class) +@APICommand(description = "Removes a condition", responseObject = SuccessResponse.class) public class DeleteConditionCmd extends BaseAsyncCmd { public static final Logger s_logger = Logger.getLogger(DeleteConditionCmd.class.getName()); private static final String s_name = "deleteconditionresponse"; diff --git a/api/src/org/apache/cloudstack/api/command/user/autoscale/DisableAutoScaleVmGroupCmd.java b/api/src/org/apache/cloudstack/api/command/user/autoscale/DisableAutoScaleVmGroupCmd.java index c02c4ed5869..7979b8228e5 100644 --- a/api/src/org/apache/cloudstack/api/command/user/autoscale/DisableAutoScaleVmGroupCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/autoscale/DisableAutoScaleVmGroupCmd.java @@ -22,7 +22,7 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; import org.apache.cloudstack.api.response.AutoScaleVmGroupResponse; @@ -31,7 +31,7 @@ import com.cloud.event.EventTypes; import com.cloud.network.as.AutoScaleVmGroup; import com.cloud.user.Account; -@Implementation(description = "Disables an AutoScale Vm Group", responseObject = AutoScaleVmGroupResponse.class) +@APICommand(description = "Disables an AutoScale Vm Group", responseObject = AutoScaleVmGroupResponse.class) public class DisableAutoScaleVmGroupCmd extends BaseAsyncCmd { public static final Logger s_logger = Logger.getLogger(DisableAutoScaleVmGroupCmd.class.getName()); private static final String s_name = "disableautoscalevmGroupresponse"; diff --git a/api/src/org/apache/cloudstack/api/command/user/autoscale/EnableAutoScaleVmGroupCmd.java b/api/src/org/apache/cloudstack/api/command/user/autoscale/EnableAutoScaleVmGroupCmd.java index 1c3c852208a..ceed0e15451 100644 --- a/api/src/org/apache/cloudstack/api/command/user/autoscale/EnableAutoScaleVmGroupCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/autoscale/EnableAutoScaleVmGroupCmd.java @@ -17,21 +17,17 @@ package org.apache.cloudstack.api.command.user.autoscale; +import org.apache.cloudstack.api.*; import org.apache.log4j.Logger; -import org.apache.cloudstack.api.ApiConstants; -import org.apache.cloudstack.api.BaseAsyncCmd; -import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.Implementation; -import org.apache.cloudstack.api.Parameter; -import org.apache.cloudstack.api.ServerApiException; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.response.AutoScaleVmGroupResponse; import com.cloud.async.AsyncJob; import com.cloud.event.EventTypes; import com.cloud.network.as.AutoScaleVmGroup; import com.cloud.user.Account; -@Implementation(description = "Enables an AutoScale Vm Group", responseObject = AutoScaleVmGroupResponse.class) +@APICommand(description = "Enables an AutoScale Vm Group", responseObject = AutoScaleVmGroupResponse.class) public class EnableAutoScaleVmGroupCmd extends BaseAsyncCmd { public static final Logger s_logger = Logger.getLogger(EnableAutoScaleVmGroupCmd.class.getName()); private static final String s_name = "enableautoscalevmGroupresponse"; diff --git a/api/src/org/apache/cloudstack/api/command/user/autoscale/ListAutoScalePoliciesCmd.java b/api/src/org/apache/cloudstack/api/command/user/autoscale/ListAutoScalePoliciesCmd.java index 60e6c39fe55..665459f724e 100644 --- a/api/src/org/apache/cloudstack/api/command/user/autoscale/ListAutoScalePoliciesCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/autoscale/ListAutoScalePoliciesCmd.java @@ -25,13 +25,13 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseListAccountResourcesCmd; -import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.response.AutoScalePolicyResponse; import org.apache.cloudstack.api.response.ListResponse; import com.cloud.network.as.AutoScalePolicy; -@Implementation(description = "Lists autoscale policies.", responseObject = AutoScalePolicyResponse.class) +@APICommand(description = "Lists autoscale policies.", responseObject = AutoScalePolicyResponse.class) public class ListAutoScalePoliciesCmd extends BaseListAccountResourcesCmd { public static final Logger s_logger = Logger.getLogger(ListAutoScalePoliciesCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/user/autoscale/ListAutoScaleVmGroupsCmd.java b/api/src/org/apache/cloudstack/api/command/user/autoscale/ListAutoScaleVmGroupsCmd.java index 7024cfc989a..8139b03c614 100644 --- a/api/src/org/apache/cloudstack/api/command/user/autoscale/ListAutoScaleVmGroupsCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/autoscale/ListAutoScaleVmGroupsCmd.java @@ -19,11 +19,11 @@ package org.apache.cloudstack.api.command.user.autoscale; import java.util.ArrayList; import java.util.List; +import org.apache.cloudstack.api.APICommand; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseListProjectAndAccountResourcesCmd; -import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.response.AutoScalePolicyResponse; import org.apache.cloudstack.api.response.AutoScaleVmGroupResponse; @@ -34,7 +34,7 @@ import org.apache.cloudstack.api.response.ZoneResponse; import com.cloud.exception.InvalidParameterValueException; import com.cloud.network.as.AutoScaleVmGroup; -@Implementation(description = "Lists autoscale vm groups.", responseObject = AutoScaleVmGroupResponse.class) +@APICommand(description = "Lists autoscale vm groups.", responseObject = AutoScaleVmGroupResponse.class) public class ListAutoScaleVmGroupsCmd extends BaseListProjectAndAccountResourcesCmd { public static final Logger s_logger = Logger.getLogger(ListAutoScaleVmGroupsCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/user/autoscale/ListAutoScaleVmProfilesCmd.java b/api/src/org/apache/cloudstack/api/command/user/autoscale/ListAutoScaleVmProfilesCmd.java index 908c299dbac..49a02febd2c 100644 --- a/api/src/org/apache/cloudstack/api/command/user/autoscale/ListAutoScaleVmProfilesCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/autoscale/ListAutoScaleVmProfilesCmd.java @@ -19,18 +19,18 @@ package org.apache.cloudstack.api.command.user.autoscale; import java.util.ArrayList; import java.util.List; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.response.TemplateResponse; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseListProjectAndAccountResourcesCmd; -import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.response.AutoScaleVmProfileResponse; import org.apache.cloudstack.api.response.ListResponse; import com.cloud.network.as.AutoScaleVmProfile; -@Implementation(description = "Lists autoscale vm profiles.", responseObject = AutoScaleVmProfileResponse.class) +@APICommand(description = "Lists autoscale vm profiles.", responseObject = AutoScaleVmProfileResponse.class) public class ListAutoScaleVmProfilesCmd extends BaseListProjectAndAccountResourcesCmd { public static final Logger s_logger = Logger.getLogger(ListAutoScaleVmProfilesCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/user/autoscale/ListConditionsCmd.java b/api/src/org/apache/cloudstack/api/command/user/autoscale/ListConditionsCmd.java index c66f7cff7a5..e6311275a3a 100644 --- a/api/src/org/apache/cloudstack/api/command/user/autoscale/ListConditionsCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/autoscale/ListConditionsCmd.java @@ -25,14 +25,14 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseListAccountResourcesCmd; -import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.response.ConditionResponse; import org.apache.cloudstack.api.response.CounterResponse; import org.apache.cloudstack.api.response.ListResponse; import com.cloud.network.as.Condition; -@Implementation(description = "List Conditions for the specific user", responseObject = CounterResponse.class) +@APICommand(description = "List Conditions for the specific user", responseObject = CounterResponse.class) public class ListConditionsCmd extends BaseListAccountResourcesCmd { public static final Logger s_logger = Logger.getLogger(ListConditionsCmd.class.getName()); private static final String s_name = "listconditionsresponse"; diff --git a/api/src/org/apache/cloudstack/api/command/user/autoscale/ListCountersCmd.java b/api/src/org/apache/cloudstack/api/command/user/autoscale/ListCountersCmd.java index 04e6006a0cc..202ad5e1c7d 100644 --- a/api/src/org/apache/cloudstack/api/command/user/autoscale/ListCountersCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/autoscale/ListCountersCmd.java @@ -20,18 +20,18 @@ package org.apache.cloudstack.api.command.user.autoscale; import java.util.ArrayList; import java.util.List; +import org.apache.cloudstack.api.APICommand; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseListCmd; -import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.response.CounterResponse; import org.apache.cloudstack.api.response.ListResponse; import com.cloud.network.as.Counter; import com.cloud.user.Account; -@Implementation(description = "List the counters", responseObject = CounterResponse.class) +@APICommand(description = "List the counters", responseObject = CounterResponse.class) public class ListCountersCmd extends BaseListCmd { public static final Logger s_logger = Logger.getLogger(ListCountersCmd.class.getName()); private static final String s_name = "counterresponse"; diff --git a/api/src/org/apache/cloudstack/api/command/user/autoscale/UpdateAutoScalePolicyCmd.java b/api/src/org/apache/cloudstack/api/command/user/autoscale/UpdateAutoScalePolicyCmd.java index a949888a612..f2189ff1277 100644 --- a/api/src/org/apache/cloudstack/api/command/user/autoscale/UpdateAutoScalePolicyCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/autoscale/UpdateAutoScalePolicyCmd.java @@ -25,7 +25,7 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; import org.apache.cloudstack.api.response.AutoScalePolicyResponse; @@ -35,7 +35,7 @@ import com.cloud.network.as.AutoScalePolicy; import com.cloud.user.Account; import com.cloud.user.UserContext; -@Implementation(description = "Updates an existing autoscale policy.", responseObject = AutoScalePolicyResponse.class) +@APICommand(description = "Updates an existing autoscale policy.", responseObject = AutoScalePolicyResponse.class) public class UpdateAutoScalePolicyCmd extends BaseAsyncCmd { public static final Logger s_logger = Logger.getLogger(UpdateAutoScalePolicyCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/user/autoscale/UpdateAutoScaleVmGroupCmd.java b/api/src/org/apache/cloudstack/api/command/user/autoscale/UpdateAutoScaleVmGroupCmd.java index 2ca95159c8c..b2bcd33efe5 100644 --- a/api/src/org/apache/cloudstack/api/command/user/autoscale/UpdateAutoScaleVmGroupCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/autoscale/UpdateAutoScaleVmGroupCmd.java @@ -19,15 +19,11 @@ package org.apache.cloudstack.api.command.user.autoscale; import java.util.List; +import org.apache.cloudstack.api.*; import org.apache.cloudstack.api.response.AutoScalePolicyResponse; import org.apache.log4j.Logger; -import org.apache.cloudstack.api.ApiConstants; -import org.apache.cloudstack.api.BaseAsyncCmd; -import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.Implementation; -import org.apache.cloudstack.api.Parameter; -import org.apache.cloudstack.api.ServerApiException; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.response.AutoScaleVmGroupResponse; import com.cloud.async.AsyncJob; import com.cloud.event.EventTypes; @@ -35,7 +31,7 @@ import com.cloud.network.as.AutoScaleVmGroup; import com.cloud.user.Account; import com.cloud.user.UserContext; -@Implementation(description = "Updates an existing autoscale vm group.", responseObject = AutoScaleVmGroupResponse.class) +@APICommand(description = "Updates an existing autoscale vm group.", responseObject = AutoScaleVmGroupResponse.class) public class UpdateAutoScaleVmGroupCmd extends BaseAsyncCmd { public static final Logger s_logger = Logger.getLogger(UpdateAutoScaleVmGroupCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/user/autoscale/UpdateAutoScaleVmProfileCmd.java b/api/src/org/apache/cloudstack/api/command/user/autoscale/UpdateAutoScaleVmProfileCmd.java index d616eb94bdf..938ce5b4bd9 100644 --- a/api/src/org/apache/cloudstack/api/command/user/autoscale/UpdateAutoScaleVmProfileCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/autoscale/UpdateAutoScaleVmProfileCmd.java @@ -19,16 +19,12 @@ package org.apache.cloudstack.api.command.user.autoscale; import java.util.Map; +import org.apache.cloudstack.api.*; import org.apache.cloudstack.api.response.TemplateResponse; import org.apache.cloudstack.api.response.UserResponse; import org.apache.log4j.Logger; -import org.apache.cloudstack.api.ApiConstants; -import org.apache.cloudstack.api.BaseAsyncCmd; -import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.Implementation; -import org.apache.cloudstack.api.Parameter; -import org.apache.cloudstack.api.ServerApiException; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.response.AutoScaleVmProfileResponse; import com.cloud.async.AsyncJob; import com.cloud.event.EventTypes; @@ -36,7 +32,7 @@ import com.cloud.network.as.AutoScaleVmProfile; import com.cloud.user.Account; import com.cloud.user.UserContext; -@Implementation(description = "Updates an existing autoscale vm profile.", responseObject = AutoScaleVmProfileResponse.class) +@APICommand(description = "Updates an existing autoscale vm profile.", responseObject = AutoScaleVmProfileResponse.class) public class UpdateAutoScaleVmProfileCmd extends BaseAsyncCmd { public static final Logger s_logger = Logger.getLogger(UpdateAutoScaleVmProfileCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/user/config/ListCapabilitiesCmd.java b/api/src/org/apache/cloudstack/api/command/user/config/ListCapabilitiesCmd.java index c72e8a03b2c..3a33f0ff2d2 100644 --- a/api/src/org/apache/cloudstack/api/command/user/config/ListCapabilitiesCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/config/ListCapabilitiesCmd.java @@ -21,11 +21,11 @@ import java.util.Map; import org.apache.log4j.Logger; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.response.CapabilitiesResponse; import com.cloud.user.Account; -@Implementation(description="Lists capabilities", responseObject=CapabilitiesResponse.class) +@APICommand(description="Lists capabilities", responseObject=CapabilitiesResponse.class) public class ListCapabilitiesCmd extends BaseCmd { public static final Logger s_logger = Logger.getLogger(ListCapabilitiesCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/user/event/ListEventTypesCmd.java b/api/src/org/apache/cloudstack/api/command/user/event/ListEventTypesCmd.java index 42520d4a026..53a2990162f 100644 --- a/api/src/org/apache/cloudstack/api/command/user/event/ListEventTypesCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/event/ListEventTypesCmd.java @@ -18,15 +18,15 @@ package org.apache.cloudstack.api.command.user.event; import java.util.ArrayList; +import org.apache.cloudstack.api.APICommand; import org.apache.log4j.Logger; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.response.EventTypeResponse; import org.apache.cloudstack.api.response.ListResponse; import com.cloud.user.Account; -@Implementation(description = "List Event Types", responseObject = EventTypeResponse.class) +@APICommand(description = "List Event Types", responseObject = EventTypeResponse.class) public class ListEventTypesCmd extends BaseCmd { public static final Logger s_logger = Logger.getLogger(ListEventTypesCmd.class.getName()); private static final String s_name = "listeventtypesresponse"; diff --git a/api/src/org/apache/cloudstack/api/command/user/event/ListEventsCmd.java b/api/src/org/apache/cloudstack/api/command/user/event/ListEventsCmd.java index e74f40adda9..f59b6cd24aa 100644 --- a/api/src/org/apache/cloudstack/api/command/user/event/ListEventsCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/event/ListEventsCmd.java @@ -21,12 +21,12 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseListProjectAndAccountResourcesCmd; -import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.response.EventResponse; import org.apache.cloudstack.api.response.ListResponse; -@Implementation(description="A command to list events.", responseObject=EventResponse.class) +@APICommand(description="A command to list events.", responseObject=EventResponse.class) public class ListEventsCmd extends BaseListProjectAndAccountResourcesCmd { public static final Logger s_logger = Logger.getLogger(ListEventsCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/user/firewall/CreateFirewallRuleCmd.java b/api/src/org/apache/cloudstack/api/command/user/firewall/CreateFirewallRuleCmd.java index f9b1b33c84c..cb131a6d2b1 100644 --- a/api/src/org/apache/cloudstack/api/command/user/firewall/CreateFirewallRuleCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/firewall/CreateFirewallRuleCmd.java @@ -26,7 +26,7 @@ import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseAsyncCreateCmd; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; import org.apache.cloudstack.api.response.FirewallResponse; @@ -41,7 +41,7 @@ import com.cloud.user.Account; import com.cloud.user.UserContext; import com.cloud.utils.net.NetUtils; -@Implementation(description = "Creates a firewall rule for a given ip address", responseObject = FirewallResponse.class) +@APICommand(description = "Creates a firewall rule for a given ip address", responseObject = FirewallResponse.class) public class CreateFirewallRuleCmd extends BaseAsyncCreateCmd implements FirewallRule { public static final Logger s_logger = Logger.getLogger(CreateFirewallRuleCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/user/firewall/CreatePortForwardingRuleCmd.java b/api/src/org/apache/cloudstack/api/command/user/firewall/CreatePortForwardingRuleCmd.java index 631c27f5dd7..165a92e9293 100644 --- a/api/src/org/apache/cloudstack/api/command/user/firewall/CreatePortForwardingRuleCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/firewall/CreatePortForwardingRuleCmd.java @@ -18,18 +18,13 @@ package org.apache.cloudstack.api.command.user.firewall; import java.util.List; +import org.apache.cloudstack.api.*; import org.apache.cloudstack.api.response.IPAddressResponse; import org.apache.cloudstack.api.response.NetworkResponse; import org.apache.cloudstack.api.response.UserVmResponse; import org.apache.log4j.Logger; -import org.apache.cloudstack.api.ApiConstants; -import org.apache.cloudstack.api.BaseAsyncCmd; -import org.apache.cloudstack.api.BaseAsyncCreateCmd; -import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.Implementation; -import org.apache.cloudstack.api.Parameter; -import org.apache.cloudstack.api.ServerApiException; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.response.FirewallRuleResponse; import com.cloud.async.AsyncJob; import com.cloud.event.EventTypes; @@ -42,7 +37,7 @@ import com.cloud.user.Account; import com.cloud.user.UserContext; import com.cloud.utils.net.Ip; -@Implementation(description = "Creates a port forwarding rule", responseObject = FirewallRuleResponse.class) +@APICommand(description = "Creates a port forwarding rule", responseObject = FirewallRuleResponse.class) public class CreatePortForwardingRuleCmd extends BaseAsyncCreateCmd implements PortForwardingRule { public static final Logger s_logger = Logger.getLogger(CreatePortForwardingRuleCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/user/firewall/DeleteFirewallRuleCmd.java b/api/src/org/apache/cloudstack/api/command/user/firewall/DeleteFirewallRuleCmd.java index baec4fe86c1..966894d4949 100644 --- a/api/src/org/apache/cloudstack/api/command/user/firewall/DeleteFirewallRuleCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/firewall/DeleteFirewallRuleCmd.java @@ -16,16 +16,12 @@ // under the License. package org.apache.cloudstack.api.command.user.firewall; +import org.apache.cloudstack.api.*; import org.apache.cloudstack.api.response.AccountResponse; import org.apache.cloudstack.api.response.FirewallRuleResponse; import org.apache.log4j.Logger; -import org.apache.cloudstack.api.ApiConstants; -import org.apache.cloudstack.api.BaseAsyncCmd; -import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.Implementation; -import org.apache.cloudstack.api.Parameter; -import org.apache.cloudstack.api.ServerApiException; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.response.SuccessResponse; import com.cloud.async.AsyncJob; import com.cloud.event.EventTypes; @@ -34,7 +30,7 @@ import com.cloud.exception.ResourceUnavailableException; import com.cloud.network.rules.FirewallRule; import com.cloud.user.UserContext; -@Implementation(description="Deletes a firewall rule", responseObject=SuccessResponse.class) +@APICommand(description="Deletes a firewall rule", responseObject=SuccessResponse.class) public class DeleteFirewallRuleCmd extends BaseAsyncCmd { public static final Logger s_logger = Logger.getLogger(DeleteFirewallRuleCmd.class.getName()); private static final String s_name = "deletefirewallruleresponse"; diff --git a/api/src/org/apache/cloudstack/api/command/user/firewall/DeletePortForwardingRuleCmd.java b/api/src/org/apache/cloudstack/api/command/user/firewall/DeletePortForwardingRuleCmd.java index a7500b97ef5..28948e43762 100644 --- a/api/src/org/apache/cloudstack/api/command/user/firewall/DeletePortForwardingRuleCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/firewall/DeletePortForwardingRuleCmd.java @@ -16,16 +16,12 @@ // under the License. package org.apache.cloudstack.api.command.user.firewall; +import org.apache.cloudstack.api.*; import org.apache.cloudstack.api.response.AccountResponse; import org.apache.cloudstack.api.response.FirewallRuleResponse; import org.apache.log4j.Logger; -import org.apache.cloudstack.api.ApiConstants; -import org.apache.cloudstack.api.BaseAsyncCmd; -import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.Implementation; -import org.apache.cloudstack.api.Parameter; -import org.apache.cloudstack.api.ServerApiException; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.response.SuccessResponse; import com.cloud.async.AsyncJob; import com.cloud.event.EventTypes; @@ -33,7 +29,7 @@ import com.cloud.exception.InvalidParameterValueException; import com.cloud.network.rules.PortForwardingRule; import com.cloud.user.UserContext; -@Implementation(description="Deletes a port forwarding rule", responseObject=SuccessResponse.class) +@APICommand(description="Deletes a port forwarding rule", responseObject=SuccessResponse.class) public class DeletePortForwardingRuleCmd extends BaseAsyncCmd { public static final Logger s_logger = Logger.getLogger(DeletePortForwardingRuleCmd.class.getName()); private static final String s_name = "deleteportforwardingruleresponse"; diff --git a/api/src/org/apache/cloudstack/api/command/user/firewall/ListFirewallRulesCmd.java b/api/src/org/apache/cloudstack/api/command/user/firewall/ListFirewallRulesCmd.java index ad9610e2275..29ea0dbb339 100644 --- a/api/src/org/apache/cloudstack/api/command/user/firewall/ListFirewallRulesCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/firewall/ListFirewallRulesCmd.java @@ -25,14 +25,14 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseListTaggedResourcesCmd; -import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.response.FirewallResponse; import org.apache.cloudstack.api.response.ListResponse; import com.cloud.network.rules.FirewallRule; import com.cloud.utils.Pair; -@Implementation(description="Lists all firewall rules for an IP address.", responseObject=FirewallResponse.class) +@APICommand(description="Lists all firewall rules for an IP address.", responseObject=FirewallResponse.class) public class ListFirewallRulesCmd extends BaseListTaggedResourcesCmd { public static final Logger s_logger = Logger.getLogger(ListFirewallRulesCmd.class.getName()); private static final String s_name = "listfirewallrulesresponse"; diff --git a/api/src/org/apache/cloudstack/api/command/user/firewall/ListPortForwardingRulesCmd.java b/api/src/org/apache/cloudstack/api/command/user/firewall/ListPortForwardingRulesCmd.java index 7de6e3f0b32..8ef434e9d20 100644 --- a/api/src/org/apache/cloudstack/api/command/user/firewall/ListPortForwardingRulesCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/firewall/ListPortForwardingRulesCmd.java @@ -24,14 +24,14 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseListTaggedResourcesCmd; -import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.response.FirewallRuleResponse; import org.apache.cloudstack.api.response.ListResponse; import com.cloud.network.rules.PortForwardingRule; import com.cloud.utils.Pair; -@Implementation(description="Lists all port forwarding rules for an IP address.", responseObject=FirewallRuleResponse.class) +@APICommand(description="Lists all port forwarding rules for an IP address.", responseObject=FirewallRuleResponse.class) public class ListPortForwardingRulesCmd extends BaseListTaggedResourcesCmd { public static final Logger s_logger = Logger.getLogger(ListPortForwardingRulesCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/user/firewall/UpdatePortForwardingRuleCmd.java b/api/src/org/apache/cloudstack/api/command/user/firewall/UpdatePortForwardingRuleCmd.java index deafd476f06..0c17d710311 100644 --- a/api/src/org/apache/cloudstack/api/command/user/firewall/UpdatePortForwardingRuleCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/firewall/UpdatePortForwardingRuleCmd.java @@ -22,14 +22,14 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseAsyncCmd; -import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.response.FirewallRuleResponse; import com.cloud.event.EventTypes; import com.cloud.network.IpAddress; import com.cloud.user.Account; -@Implementation(responseObject=FirewallRuleResponse.class, description="Updates a port forwarding rule. Only the private port and the virtual machine can be updated.") +@APICommand(responseObject=FirewallRuleResponse.class, description="Updates a port forwarding rule. Only the private port and the virtual machine can be updated.") public class UpdatePortForwardingRuleCmd extends BaseAsyncCmd { public static final Logger s_logger = Logger.getLogger(UpdatePortForwardingRuleCmd.class.getName()); private static final String s_name = "updateportforwardingruleresponse"; diff --git a/api/src/org/apache/cloudstack/api/command/user/guest/ListGuestOsCategoriesCmd.java b/api/src/org/apache/cloudstack/api/command/user/guest/ListGuestOsCategoriesCmd.java index 5209777f498..0abc0d805f0 100644 --- a/api/src/org/apache/cloudstack/api/command/user/guest/ListGuestOsCategoriesCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/guest/ListGuestOsCategoriesCmd.java @@ -24,14 +24,14 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseListCmd; -import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.response.GuestOSCategoryResponse; import org.apache.cloudstack.api.response.ListResponse; import com.cloud.storage.GuestOsCategory; import com.cloud.utils.Pair; -@Implementation(description="Lists all supported OS categories for this cloud.", responseObject=GuestOSCategoryResponse.class) +@APICommand(description="Lists all supported OS categories for this cloud.", responseObject=GuestOSCategoryResponse.class) public class ListGuestOsCategoriesCmd extends BaseListCmd { public static final Logger s_logger = Logger.getLogger(ListIsosCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/user/guest/ListGuestOsCmd.java b/api/src/org/apache/cloudstack/api/command/user/guest/ListGuestOsCmd.java index 93d2d46a99c..dda36d6bcd6 100644 --- a/api/src/org/apache/cloudstack/api/command/user/guest/ListGuestOsCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/guest/ListGuestOsCmd.java @@ -19,20 +19,20 @@ package org.apache.cloudstack.api.command.user.guest; import java.util.ArrayList; import java.util.List; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.command.user.iso.ListIsosCmd; import org.apache.cloudstack.api.response.GuestOSCategoryResponse; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseListCmd; -import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.response.GuestOSResponse; import org.apache.cloudstack.api.response.ListResponse; import com.cloud.storage.GuestOS; import com.cloud.utils.Pair; -@Implementation(description="Lists all supported OS types for this cloud.", responseObject=GuestOSResponse.class) +@APICommand(description="Lists all supported OS types for this cloud.", responseObject=GuestOSResponse.class) public class ListGuestOsCmd extends BaseListCmd { public static final Logger s_logger = Logger.getLogger(ListIsosCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/user/iso/AttachIsoCmd.java b/api/src/org/apache/cloudstack/api/command/user/iso/AttachIsoCmd.java index 755dbb6d246..fabb2e98b4a 100644 --- a/api/src/org/apache/cloudstack/api/command/user/iso/AttachIsoCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/iso/AttachIsoCmd.java @@ -23,7 +23,7 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; import org.apache.cloudstack.api.response.UserVmResponse; @@ -32,7 +32,7 @@ import com.cloud.exception.InvalidParameterValueException; import com.cloud.user.UserContext; import com.cloud.uservm.UserVm; -@Implementation(description="Attaches an ISO to a virtual machine.", responseObject=UserVmResponse.class) +@APICommand(description="Attaches an ISO to a virtual machine.", responseObject=UserVmResponse.class) public class AttachIsoCmd extends BaseAsyncCmd { public static final Logger s_logger = Logger.getLogger(AttachIsoCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/user/iso/DeleteIsoCmd.java b/api/src/org/apache/cloudstack/api/command/user/iso/DeleteIsoCmd.java index 2f5a7675af4..a27c3292a8f 100644 --- a/api/src/org/apache/cloudstack/api/command/user/iso/DeleteIsoCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/iso/DeleteIsoCmd.java @@ -21,7 +21,7 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; import org.apache.cloudstack.api.response.SuccessResponse; @@ -33,7 +33,7 @@ import com.cloud.template.VirtualMachineTemplate; import com.cloud.user.Account; import com.cloud.user.UserContext; -@Implementation(description="Deletes an ISO file.", responseObject=SuccessResponse.class) +@APICommand(description="Deletes an ISO file.", responseObject=SuccessResponse.class) public class DeleteIsoCmd extends BaseAsyncCmd { public static final Logger s_logger = Logger.getLogger(DeleteIsoCmd.class.getName()); private static final String s_name = "deleteisosresponse"; diff --git a/api/src/org/apache/cloudstack/api/command/user/iso/DetachIsoCmd.java b/api/src/org/apache/cloudstack/api/command/user/iso/DetachIsoCmd.java index a79c7009153..1c197c55c53 100644 --- a/api/src/org/apache/cloudstack/api/command/user/iso/DetachIsoCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/iso/DetachIsoCmd.java @@ -23,7 +23,7 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; import org.apache.cloudstack.api.response.UserVmResponse; @@ -31,7 +31,7 @@ import com.cloud.event.EventTypes; import com.cloud.exception.InvalidParameterValueException; import com.cloud.uservm.UserVm; -@Implementation(description="Detaches any ISO file (if any) currently attached to a virtual machine.", responseObject=UserVmResponse.class) +@APICommand(description="Detaches any ISO file (if any) currently attached to a virtual machine.", responseObject=UserVmResponse.class) public class DetachIsoCmd extends BaseAsyncCmd { public static final Logger s_logger = Logger.getLogger(DetachIsoCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/user/iso/ExtractIsoCmd.java b/api/src/org/apache/cloudstack/api/command/user/iso/ExtractIsoCmd.java index d2d6859bf7d..463728a2f3a 100644 --- a/api/src/org/apache/cloudstack/api/command/user/iso/ExtractIsoCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/iso/ExtractIsoCmd.java @@ -16,16 +16,12 @@ // under the License. package org.apache.cloudstack.api.command.user.iso; +import org.apache.cloudstack.api.*; import org.apache.cloudstack.api.response.TemplateResponse; import org.apache.cloudstack.api.response.ZoneResponse; import org.apache.log4j.Logger; -import org.apache.cloudstack.api.ApiConstants; -import org.apache.cloudstack.api.BaseAsyncCmd; -import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.Implementation; -import org.apache.cloudstack.api.Parameter; -import org.apache.cloudstack.api.ServerApiException; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.response.ExtractResponse; import com.cloud.async.AsyncJob; import com.cloud.event.EventTypes; @@ -34,7 +30,7 @@ import com.cloud.template.VirtualMachineTemplate; import com.cloud.user.Account; import com.cloud.user.UserContext; -@Implementation(description="Extracts an ISO", responseObject=ExtractResponse.class) +@APICommand(description="Extracts an ISO", responseObject=ExtractResponse.class) public class ExtractIsoCmd extends BaseAsyncCmd { public static final Logger s_logger = Logger.getLogger(ExtractIsoCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/user/iso/ListIsosCmd.java b/api/src/org/apache/cloudstack/api/command/user/iso/ListIsosCmd.java index 7b5feaee6bb..351ab709c2e 100644 --- a/api/src/org/apache/cloudstack/api/command/user/iso/ListIsosCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/iso/ListIsosCmd.java @@ -20,12 +20,12 @@ import java.util.ArrayList; import java.util.List; import java.util.Set; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.response.ZoneResponse; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseListTaggedResourcesCmd; -import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.response.ListResponse; import org.apache.cloudstack.api.response.TemplateResponse; @@ -35,7 +35,7 @@ import com.cloud.user.Account; import com.cloud.user.UserContext; import com.cloud.utils.Pair; -@Implementation(description="Lists all available ISO files.", responseObject=TemplateResponse.class) +@APICommand(description="Lists all available ISO files.", responseObject=TemplateResponse.class) public class ListIsosCmd extends BaseListTaggedResourcesCmd { public static final Logger s_logger = Logger.getLogger(ListIsosCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/user/iso/RegisterIsoCmd.java b/api/src/org/apache/cloudstack/api/command/user/iso/RegisterIsoCmd.java index a380b1374a8..53c601e86ff 100644 --- a/api/src/org/apache/cloudstack/api/command/user/iso/RegisterIsoCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/iso/RegisterIsoCmd.java @@ -18,13 +18,10 @@ package org.apache.cloudstack.api.command.user.iso; import java.util.List; +import org.apache.cloudstack.api.*; import org.apache.log4j.Logger; -import org.apache.cloudstack.api.ApiConstants; -import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.Implementation; -import org.apache.cloudstack.api.Parameter; -import org.apache.cloudstack.api.ServerApiException; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.response.DomainResponse; import org.apache.cloudstack.api.response.GuestOSResponse; import org.apache.cloudstack.api.response.ListResponse; @@ -35,7 +32,7 @@ import com.cloud.exception.ResourceAllocationException; import com.cloud.template.VirtualMachineTemplate; import com.cloud.user.UserContext; -@Implementation(responseObject=TemplateResponse.class, description="Registers an existing ISO into the CloudStack Cloud.") +@APICommand(responseObject=TemplateResponse.class, description="Registers an existing ISO into the CloudStack Cloud.") public class RegisterIsoCmd extends BaseCmd { public static final Logger s_logger = Logger.getLogger(RegisterIsoCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/user/iso/UpdateIsoCmd.java b/api/src/org/apache/cloudstack/api/command/user/iso/UpdateIsoCmd.java index 629cdb8bb1e..35f36611cb9 100644 --- a/api/src/org/apache/cloudstack/api/command/user/iso/UpdateIsoCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/iso/UpdateIsoCmd.java @@ -20,13 +20,13 @@ import com.cloud.api.commands.UpdateTemplateOrIsoCmd; import org.apache.log4j.Logger; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.ServerApiException; import org.apache.cloudstack.api.response.TemplateResponse; import com.cloud.template.VirtualMachineTemplate; import com.cloud.user.Account; -@Implementation(description="Updates an ISO file.", responseObject=TemplateResponse.class) +@APICommand(description="Updates an ISO file.", responseObject=TemplateResponse.class) public class UpdateIsoCmd extends UpdateTemplateOrIsoCmd { public static final Logger s_logger = Logger.getLogger(UpdateIsoCmd.class.getName()); private static final String s_name = "updateisoresponse"; diff --git a/api/src/org/apache/cloudstack/api/command/user/iso/UpdateIsoPermissionsCmd.java b/api/src/org/apache/cloudstack/api/command/user/iso/UpdateIsoPermissionsCmd.java index f0f9c468810..14e9a091e20 100644 --- a/api/src/org/apache/cloudstack/api/command/user/iso/UpdateIsoPermissionsCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/iso/UpdateIsoPermissionsCmd.java @@ -19,12 +19,12 @@ package org.apache.cloudstack.api.command.user.iso; import com.cloud.api.commands.UpdateTemplateOrIsoPermissionsCmd; import org.apache.log4j.Logger; -import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.response.SuccessResponse; import com.cloud.template.VirtualMachineTemplate; import com.cloud.user.Account; -@Implementation(description="Updates iso permissions", responseObject=SuccessResponse.class) +@APICommand(description="Updates iso permissions", responseObject=SuccessResponse.class) public class UpdateIsoPermissionsCmd extends UpdateTemplateOrIsoPermissionsCmd { protected String getResponseName() { return "updateisopermissionsresponse"; diff --git a/api/src/org/apache/cloudstack/api/command/user/job/ListAsyncJobsCmd.java b/api/src/org/apache/cloudstack/api/command/user/job/ListAsyncJobsCmd.java index a07e8be785f..ebcd3a27e35 100644 --- a/api/src/org/apache/cloudstack/api/command/user/job/ListAsyncJobsCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/job/ListAsyncJobsCmd.java @@ -20,16 +20,16 @@ import java.util.ArrayList; import java.util.Date; import java.util.List; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseListAccountResourcesCmd; -import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.response.AsyncJobResponse; import org.apache.cloudstack.api.response.ListResponse; import com.cloud.async.AsyncJob; import com.cloud.utils.Pair; -@Implementation(description="Lists all pending asynchronous jobs for the account.", responseObject=AsyncJobResponse.class) +@APICommand(description="Lists all pending asynchronous jobs for the account.", responseObject=AsyncJobResponse.class) public class ListAsyncJobsCmd extends BaseListAccountResourcesCmd { private static final String s_name = "listasyncjobsresponse"; diff --git a/api/src/org/apache/cloudstack/api/command/user/job/QueryAsyncJobResultCmd.java b/api/src/org/apache/cloudstack/api/command/user/job/QueryAsyncJobResultCmd.java index 2e2e6678444..558ea6d6ac2 100644 --- a/api/src/org/apache/cloudstack/api/command/user/job/QueryAsyncJobResultCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/job/QueryAsyncJobResultCmd.java @@ -20,12 +20,12 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.response.AsyncJobResponse; import com.cloud.user.Account; -@Implementation(description="Retrieves the current status of asynchronous job.", responseObject=AsyncJobResponse.class) +@APICommand(description="Retrieves the current status of asynchronous job.", responseObject=AsyncJobResponse.class) public class QueryAsyncJobResultCmd extends BaseCmd { public static final Logger s_logger = Logger.getLogger(QueryAsyncJobResultCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/user/loadbalancer/AssignToLoadBalancerRuleCmd.java b/api/src/org/apache/cloudstack/api/command/user/loadbalancer/AssignToLoadBalancerRuleCmd.java index 575ea4ff42d..995f57a854e 100644 --- a/api/src/org/apache/cloudstack/api/command/user/loadbalancer/AssignToLoadBalancerRuleCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/loadbalancer/AssignToLoadBalancerRuleCmd.java @@ -25,7 +25,7 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; import org.apache.cloudstack.api.response.SuccessResponse; @@ -36,7 +36,7 @@ import com.cloud.user.Account; import com.cloud.user.UserContext; import com.cloud.utils.StringUtils; -@Implementation(description="Assigns virtual machine or a list of virtual machines to a load balancer rule.", responseObject=SuccessResponse.class) +@APICommand(description="Assigns virtual machine or a list of virtual machines to a load balancer rule.", responseObject=SuccessResponse.class) public class AssignToLoadBalancerRuleCmd extends BaseAsyncCmd { public static final Logger s_logger = Logger.getLogger(AssignToLoadBalancerRuleCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/user/loadbalancer/CreateLBStickinessPolicyCmd.java b/api/src/org/apache/cloudstack/api/command/user/loadbalancer/CreateLBStickinessPolicyCmd.java index 004340faec3..d4d7bc6d0ab 100644 --- a/api/src/org/apache/cloudstack/api/command/user/loadbalancer/CreateLBStickinessPolicyCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/loadbalancer/CreateLBStickinessPolicyCmd.java @@ -25,7 +25,7 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseAsyncCreateCmd; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; import com.cloud.event.EventTypes; @@ -39,7 +39,7 @@ import com.cloud.user.Account; import com.cloud.user.UserContext; -@Implementation(description = "Creates a Load Balancer stickiness policy ", responseObject = LBStickinessResponse.class, since="3.0.0") +@APICommand(description = "Creates a Load Balancer stickiness policy ", responseObject = LBStickinessResponse.class, since="3.0.0") @SuppressWarnings("rawtypes") public class CreateLBStickinessPolicyCmd extends BaseAsyncCreateCmd { public static final Logger s_logger = Logger diff --git a/api/src/org/apache/cloudstack/api/command/user/loadbalancer/CreateLoadBalancerRuleCmd.java b/api/src/org/apache/cloudstack/api/command/user/loadbalancer/CreateLoadBalancerRuleCmd.java index 6782723cd08..6024fb2fd14 100644 --- a/api/src/org/apache/cloudstack/api/command/user/loadbalancer/CreateLoadBalancerRuleCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/loadbalancer/CreateLoadBalancerRuleCmd.java @@ -23,7 +23,7 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseAsyncCreateCmd; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; import org.apache.cloudstack.api.response.DomainResponse; @@ -47,7 +47,7 @@ import com.cloud.user.Account; import com.cloud.user.UserContext; import com.cloud.utils.net.NetUtils; -@Implementation(description="Creates a load balancer rule", responseObject=LoadBalancerResponse.class) +@APICommand(description="Creates a load balancer rule", responseObject=LoadBalancerResponse.class) public class CreateLoadBalancerRuleCmd extends BaseAsyncCreateCmd /*implements LoadBalancer */{ public static final Logger s_logger = Logger.getLogger(CreateLoadBalancerRuleCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/user/loadbalancer/DeleteLBStickinessPolicyCmd.java b/api/src/org/apache/cloudstack/api/command/user/loadbalancer/DeleteLBStickinessPolicyCmd.java index 0dfd934ca30..42cd990d41b 100644 --- a/api/src/org/apache/cloudstack/api/command/user/loadbalancer/DeleteLBStickinessPolicyCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/loadbalancer/DeleteLBStickinessPolicyCmd.java @@ -22,7 +22,7 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; import org.apache.cloudstack.api.response.SuccessResponse; @@ -33,7 +33,7 @@ import com.cloud.network.rules.LoadBalancer; import com.cloud.user.Account; import com.cloud.user.UserContext; -@Implementation(description = "Deletes a LB stickiness policy.", responseObject = SuccessResponse.class, since="3.0.0") +@APICommand(description = "Deletes a LB stickiness policy.", responseObject = SuccessResponse.class, since="3.0.0") public class DeleteLBStickinessPolicyCmd extends BaseAsyncCmd { public static final Logger s_logger = Logger.getLogger(DeleteLBStickinessPolicyCmd.class.getName()); private static final String s_name = "deleteLBstickinessrruleresponse"; diff --git a/api/src/org/apache/cloudstack/api/command/user/loadbalancer/DeleteLoadBalancerRuleCmd.java b/api/src/org/apache/cloudstack/api/command/user/loadbalancer/DeleteLoadBalancerRuleCmd.java index 9dd3dc5449a..a8d20fe07a7 100644 --- a/api/src/org/apache/cloudstack/api/command/user/loadbalancer/DeleteLoadBalancerRuleCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/loadbalancer/DeleteLoadBalancerRuleCmd.java @@ -16,15 +16,11 @@ // under the License. package org.apache.cloudstack.api.command.user.loadbalancer; +import org.apache.cloudstack.api.*; import org.apache.cloudstack.api.response.FirewallRuleResponse; import org.apache.log4j.Logger; -import org.apache.cloudstack.api.ApiConstants; -import org.apache.cloudstack.api.BaseAsyncCmd; -import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.Implementation; -import org.apache.cloudstack.api.Parameter; -import org.apache.cloudstack.api.ServerApiException; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.response.SuccessResponse; import com.cloud.async.AsyncJob; import com.cloud.event.EventTypes; @@ -33,7 +29,7 @@ import com.cloud.network.rules.LoadBalancer; import com.cloud.user.Account; import com.cloud.user.UserContext; -@Implementation(description="Deletes a load balancer rule.", responseObject=SuccessResponse.class) +@APICommand(description="Deletes a load balancer rule.", responseObject=SuccessResponse.class) public class DeleteLoadBalancerRuleCmd extends BaseAsyncCmd { public static final Logger s_logger = Logger.getLogger(DeleteLoadBalancerRuleCmd.class.getName()); private static final String s_name = "deleteloadbalancerruleresponse"; diff --git a/api/src/org/apache/cloudstack/api/command/user/loadbalancer/ListLBStickinessPoliciesCmd.java b/api/src/org/apache/cloudstack/api/command/user/loadbalancer/ListLBStickinessPoliciesCmd.java index b563468efce..180504078c1 100644 --- a/api/src/org/apache/cloudstack/api/command/user/loadbalancer/ListLBStickinessPoliciesCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/loadbalancer/ListLBStickinessPoliciesCmd.java @@ -19,12 +19,12 @@ package org.apache.cloudstack.api.command.user.loadbalancer; import java.util.ArrayList; import java.util.List; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.response.FirewallRuleResponse; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseListCmd; -import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.response.LBStickinessResponse; import org.apache.cloudstack.api.response.ListResponse; @@ -33,7 +33,7 @@ import com.cloud.network.rules.StickinessPolicy; import com.cloud.user.Account; import com.cloud.user.UserContext; -@Implementation(description = "Lists LBStickiness policies.", responseObject = LBStickinessResponse.class, since="3.0.0") +@APICommand(description = "Lists LBStickiness policies.", responseObject = LBStickinessResponse.class, since="3.0.0") public class ListLBStickinessPoliciesCmd extends BaseListCmd { public static final Logger s_logger = Logger .getLogger(ListLBStickinessPoliciesCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/user/loadbalancer/ListLoadBalancerRuleInstancesCmd.java b/api/src/org/apache/cloudstack/api/command/user/loadbalancer/ListLoadBalancerRuleInstancesCmd.java index f8a977bf36e..f5121857b52 100644 --- a/api/src/org/apache/cloudstack/api/command/user/loadbalancer/ListLoadBalancerRuleInstancesCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/loadbalancer/ListLoadBalancerRuleInstancesCmd.java @@ -24,13 +24,13 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseListCmd; -import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.response.ListResponse; import org.apache.cloudstack.api.response.UserVmResponse; import com.cloud.uservm.UserVm; -@Implementation(description="List all virtual machine instances that are assigned to a load balancer rule.", responseObject=UserVmResponse.class) +@APICommand(description="List all virtual machine instances that are assigned to a load balancer rule.", responseObject=UserVmResponse.class) public class ListLoadBalancerRuleInstancesCmd extends BaseListCmd { public static final Logger s_logger = Logger.getLogger (ListLoadBalancerRuleInstancesCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/user/loadbalancer/ListLoadBalancerRulesCmd.java b/api/src/org/apache/cloudstack/api/command/user/loadbalancer/ListLoadBalancerRulesCmd.java index a4dc7658122..74bae65dbf2 100644 --- a/api/src/org/apache/cloudstack/api/command/user/loadbalancer/ListLoadBalancerRulesCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/loadbalancer/ListLoadBalancerRulesCmd.java @@ -23,7 +23,7 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseListTaggedResourcesCmd; -import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.response.FirewallRuleResponse; import org.apache.cloudstack.api.response.IPAddressResponse; @@ -34,7 +34,7 @@ import org.apache.cloudstack.api.response.ZoneResponse; import com.cloud.network.rules.LoadBalancer; import com.cloud.utils.Pair; -@Implementation(description = "Lists load balancer rules.", responseObject = LoadBalancerResponse.class) +@APICommand(description = "Lists load balancer rules.", responseObject = LoadBalancerResponse.class) public class ListLoadBalancerRulesCmd extends BaseListTaggedResourcesCmd { public static final Logger s_logger = Logger.getLogger(ListLoadBalancerRulesCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/user/loadbalancer/RemoveFromLoadBalancerRuleCmd.java b/api/src/org/apache/cloudstack/api/command/user/loadbalancer/RemoveFromLoadBalancerRuleCmd.java index 775c3ca235f..3393b09ed90 100644 --- a/api/src/org/apache/cloudstack/api/command/user/loadbalancer/RemoveFromLoadBalancerRuleCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/loadbalancer/RemoveFromLoadBalancerRuleCmd.java @@ -18,14 +18,10 @@ package org.apache.cloudstack.api.command.user.loadbalancer; import java.util.List; +import org.apache.cloudstack.api.*; import org.apache.log4j.Logger; -import org.apache.cloudstack.api.ApiConstants; -import org.apache.cloudstack.api.BaseAsyncCmd; -import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.Implementation; -import org.apache.cloudstack.api.Parameter; -import org.apache.cloudstack.api.ServerApiException; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.response.FirewallRuleResponse; import org.apache.cloudstack.api.response.UserVmResponse; import org.apache.cloudstack.api.response.SuccessResponse; @@ -36,7 +32,7 @@ import com.cloud.user.Account; import com.cloud.user.UserContext; import com.cloud.utils.StringUtils; -@Implementation(description="Removes a virtual machine or a list of virtual machines from a load balancer rule.", responseObject=SuccessResponse.class) +@APICommand(description="Removes a virtual machine or a list of virtual machines from a load balancer rule.", responseObject=SuccessResponse.class) public class RemoveFromLoadBalancerRuleCmd extends BaseAsyncCmd { public static final Logger s_logger = Logger.getLogger(RemoveFromLoadBalancerRuleCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/user/loadbalancer/UpdateLoadBalancerRuleCmd.java b/api/src/org/apache/cloudstack/api/command/user/loadbalancer/UpdateLoadBalancerRuleCmd.java index edcbc0bd925..06d2ca6b8f5 100644 --- a/api/src/org/apache/cloudstack/api/command/user/loadbalancer/UpdateLoadBalancerRuleCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/loadbalancer/UpdateLoadBalancerRuleCmd.java @@ -16,22 +16,18 @@ // under the License. package org.apache.cloudstack.api.command.user.loadbalancer; +import org.apache.cloudstack.api.*; import org.apache.cloudstack.api.response.FirewallRuleResponse; import org.apache.log4j.Logger; -import org.apache.cloudstack.api.ApiConstants; -import org.apache.cloudstack.api.BaseAsyncCmd; -import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.Implementation; -import org.apache.cloudstack.api.Parameter; -import org.apache.cloudstack.api.ServerApiException; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.response.LoadBalancerResponse; import com.cloud.event.EventTypes; import com.cloud.network.rules.LoadBalancer; import com.cloud.user.Account; import com.cloud.user.UserContext; -@Implementation(description="Updates load balancer", responseObject=LoadBalancerResponse.class) +@APICommand(description="Updates load balancer", responseObject=LoadBalancerResponse.class) public class UpdateLoadBalancerRuleCmd extends BaseAsyncCmd { public static final Logger s_logger = Logger.getLogger(UpdateLoadBalancerRuleCmd.class.getName()); private static final String s_name = "updateloadbalancerruleresponse"; diff --git a/api/src/org/apache/cloudstack/api/command/user/nat/CreateIpForwardingRuleCmd.java b/api/src/org/apache/cloudstack/api/command/user/nat/CreateIpForwardingRuleCmd.java index e05695352ee..a3d79f35d85 100644 --- a/api/src/org/apache/cloudstack/api/command/user/nat/CreateIpForwardingRuleCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/nat/CreateIpForwardingRuleCmd.java @@ -25,7 +25,7 @@ import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseAsyncCreateCmd; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; import org.apache.cloudstack.api.response.FirewallRuleResponse; @@ -41,7 +41,7 @@ import com.cloud.network.rules.StaticNatRule; import com.cloud.user.Account; import com.cloud.user.UserContext; -@Implementation(description="Creates an ip forwarding rule", responseObject=FirewallRuleResponse.class) +@APICommand(description="Creates an ip forwarding rule", responseObject=FirewallRuleResponse.class) public class CreateIpForwardingRuleCmd extends BaseAsyncCreateCmd implements StaticNatRule { public static final Logger s_logger = Logger.getLogger(CreateIpForwardingRuleCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/user/nat/DeleteIpForwardingRuleCmd.java b/api/src/org/apache/cloudstack/api/command/user/nat/DeleteIpForwardingRuleCmd.java index aa3fca2ba25..b45d622b257 100644 --- a/api/src/org/apache/cloudstack/api/command/user/nat/DeleteIpForwardingRuleCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/nat/DeleteIpForwardingRuleCmd.java @@ -23,7 +23,7 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; import org.apache.cloudstack.api.response.SuccessResponse; @@ -33,7 +33,7 @@ import com.cloud.exception.InvalidParameterValueException; import com.cloud.network.rules.FirewallRule; import com.cloud.user.UserContext; -@Implementation(description="Deletes an ip forwarding rule", responseObject=SuccessResponse.class) +@APICommand(description="Deletes an ip forwarding rule", responseObject=SuccessResponse.class) public class DeleteIpForwardingRuleCmd extends BaseAsyncCmd { public static final Logger s_logger = Logger.getLogger(DeleteIpForwardingRuleCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/user/nat/DisableStaticNatCmd.java b/api/src/org/apache/cloudstack/api/command/user/nat/DisableStaticNatCmd.java index 3b5dd02fec4..e6d56e3f6bf 100644 --- a/api/src/org/apache/cloudstack/api/command/user/nat/DisableStaticNatCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/nat/DisableStaticNatCmd.java @@ -23,7 +23,7 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; import org.apache.cloudstack.api.response.SuccessResponse; @@ -34,7 +34,7 @@ import com.cloud.exception.NetworkRuleConflictException; import com.cloud.exception.ResourceUnavailableException; import com.cloud.network.IpAddress; -@Implementation(description="Disables static rule for given ip address", responseObject=SuccessResponse.class) +@APICommand(description="Disables static rule for given ip address", responseObject=SuccessResponse.class) public class DisableStaticNatCmd extends BaseAsyncCmd { public static final Logger s_logger = Logger.getLogger(DeletePortForwardingRuleCmd.class.getName()); private static final String s_name = "disablestaticnatresponse"; diff --git a/api/src/org/apache/cloudstack/api/command/user/nat/EnableStaticNatCmd.java b/api/src/org/apache/cloudstack/api/command/user/nat/EnableStaticNatCmd.java index 9e6e967d238..3e9325d027a 100644 --- a/api/src/org/apache/cloudstack/api/command/user/nat/EnableStaticNatCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/nat/EnableStaticNatCmd.java @@ -20,7 +20,7 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; import org.apache.cloudstack.api.response.SuccessResponse; @@ -34,7 +34,7 @@ import com.cloud.network.IpAddress; import com.cloud.user.Account; import com.cloud.uservm.UserVm; -@Implementation(description="Enables static nat for given ip address", responseObject=SuccessResponse.class) +@APICommand(description="Enables static nat for given ip address", responseObject=SuccessResponse.class) public class EnableStaticNatCmd extends BaseCmd{ public static final Logger s_logger = Logger.getLogger(CreateIpForwardingRuleCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/user/nat/ListIpForwardingRulesCmd.java b/api/src/org/apache/cloudstack/api/command/user/nat/ListIpForwardingRulesCmd.java index 255032da47b..4fc9216ea1b 100644 --- a/api/src/org/apache/cloudstack/api/command/user/nat/ListIpForwardingRulesCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/nat/ListIpForwardingRulesCmd.java @@ -19,11 +19,11 @@ package org.apache.cloudstack.api.command.user.nat; import java.util.ArrayList; import java.util.List; +import org.apache.cloudstack.api.APICommand; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseListProjectAndAccountResourcesCmd; -import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.response.FirewallRuleResponse; import org.apache.cloudstack.api.response.IPAddressResponse; @@ -34,7 +34,7 @@ import com.cloud.network.rules.FirewallRule; import com.cloud.network.rules.StaticNatRule; import com.cloud.utils.Pair; -@Implementation(description="List the ip forwarding rules", responseObject=FirewallRuleResponse.class) +@APICommand(description="List the ip forwarding rules", responseObject=FirewallRuleResponse.class) public class ListIpForwardingRulesCmd extends BaseListProjectAndAccountResourcesCmd { public static final Logger s_logger = Logger.getLogger(ListIpForwardingRulesCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/user/network/CreateNetworkACLCmd.java b/api/src/org/apache/cloudstack/api/command/user/network/CreateNetworkACLCmd.java index 9512b8b4f84..fae8f912363 100644 --- a/api/src/org/apache/cloudstack/api/command/user/network/CreateNetworkACLCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/network/CreateNetworkACLCmd.java @@ -26,7 +26,7 @@ import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseAsyncCreateCmd; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; import org.apache.cloudstack.api.response.NetworkACLResponse; @@ -42,7 +42,7 @@ import com.cloud.user.Account; import com.cloud.user.UserContext; import com.cloud.utils.net.NetUtils; -@Implementation(description = "Creates a ACL rule the given network (the network has to belong to VPC)", +@APICommand(description = "Creates a ACL rule the given network (the network has to belong to VPC)", responseObject = NetworkACLResponse.class) public class CreateNetworkACLCmd extends BaseAsyncCreateCmd implements FirewallRule { public static final Logger s_logger = Logger.getLogger(CreateNetworkACLCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/user/network/CreateNetworkCmd.java b/api/src/org/apache/cloudstack/api/command/user/network/CreateNetworkCmd.java index a9e8c20957d..85d1b6853d4 100644 --- a/api/src/org/apache/cloudstack/api/command/user/network/CreateNetworkCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/network/CreateNetworkCmd.java @@ -20,7 +20,7 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; import org.apache.cloudstack.api.response.DomainResponse; @@ -39,7 +39,7 @@ import com.cloud.network.Network.GuestType; import com.cloud.offering.NetworkOffering; import com.cloud.user.UserContext; -@Implementation(description="Creates a network", responseObject=NetworkResponse.class) +@APICommand(description="Creates a network", responseObject=NetworkResponse.class) public class CreateNetworkCmd extends BaseCmd { public static final Logger s_logger = Logger.getLogger(CreateNetworkCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/user/network/DeleteNetworkACLCmd.java b/api/src/org/apache/cloudstack/api/command/user/network/DeleteNetworkACLCmd.java index fe1a2c12732..2610f2f9f79 100644 --- a/api/src/org/apache/cloudstack/api/command/user/network/DeleteNetworkACLCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/network/DeleteNetworkACLCmd.java @@ -21,7 +21,7 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; import org.apache.cloudstack.api.response.SuccessResponse; @@ -34,7 +34,7 @@ import com.cloud.exception.ResourceUnavailableException; import com.cloud.network.rules.FirewallRule; import com.cloud.user.UserContext; -@Implementation(description="Deletes a Network ACL", responseObject=SuccessResponse.class) +@APICommand(description="Deletes a Network ACL", responseObject=SuccessResponse.class) public class DeleteNetworkACLCmd extends BaseAsyncCmd { public static final Logger s_logger = Logger.getLogger(DeleteNetworkACLCmd.class.getName()); private static final String s_name = "deletenetworkaclresponse"; diff --git a/api/src/org/apache/cloudstack/api/command/user/network/DeleteNetworkCmd.java b/api/src/org/apache/cloudstack/api/command/user/network/DeleteNetworkCmd.java index 5be67fafcce..0648d402059 100644 --- a/api/src/org/apache/cloudstack/api/command/user/network/DeleteNetworkCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/network/DeleteNetworkCmd.java @@ -16,23 +16,19 @@ // under the License. package org.apache.cloudstack.api.command.user.network; +import org.apache.cloudstack.api.*; import org.apache.cloudstack.api.command.admin.network.DeleteNetworkOfferingCmd; import org.apache.cloudstack.api.response.NetworkResponse; import org.apache.log4j.Logger; -import org.apache.cloudstack.api.ApiConstants; -import org.apache.cloudstack.api.BaseAsyncCmd; -import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.Implementation; -import org.apache.cloudstack.api.Parameter; -import org.apache.cloudstack.api.ServerApiException; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.response.SuccessResponse; import com.cloud.event.EventTypes; import com.cloud.exception.InvalidParameterValueException; import com.cloud.network.Network; import com.cloud.user.UserContext; -@Implementation(description="Deletes a network", responseObject=SuccessResponse.class) +@APICommand(description="Deletes a network", responseObject=SuccessResponse.class) public class DeleteNetworkCmd extends BaseAsyncCmd{ public static final Logger s_logger = Logger.getLogger(DeleteNetworkOfferingCmd.class.getName()); private static final String s_name = "deletenetworkresponse"; diff --git a/api/src/org/apache/cloudstack/api/command/user/network/ListNetworkACLsCmd.java b/api/src/org/apache/cloudstack/api/command/user/network/ListNetworkACLsCmd.java index 43c4945a2bd..08a57b1d957 100644 --- a/api/src/org/apache/cloudstack/api/command/user/network/ListNetworkACLsCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/network/ListNetworkACLsCmd.java @@ -23,7 +23,7 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseListTaggedResourcesCmd; -import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.response.ListResponse; import org.apache.cloudstack.api.response.NetworkACLResponse; @@ -32,7 +32,7 @@ import org.apache.cloudstack.api.response.NetworkResponse; import com.cloud.network.rules.FirewallRule; import com.cloud.utils.Pair; -@Implementation(description="Lists all network ACLs", responseObject=NetworkACLResponse.class) +@APICommand(description="Lists all network ACLs", responseObject=NetworkACLResponse.class) public class ListNetworkACLsCmd extends BaseListTaggedResourcesCmd { public static final Logger s_logger = Logger.getLogger(ListNetworkACLsCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/user/network/ListNetworkOfferingsCmd.java b/api/src/org/apache/cloudstack/api/command/user/network/ListNetworkOfferingsCmd.java index a3d299ab3d6..cd1ded7a57d 100644 --- a/api/src/org/apache/cloudstack/api/command/user/network/ListNetworkOfferingsCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/network/ListNetworkOfferingsCmd.java @@ -23,7 +23,7 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseListCmd; -import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.response.ListResponse; import org.apache.cloudstack.api.response.NetworkOfferingResponse; @@ -31,7 +31,7 @@ import org.apache.cloudstack.api.response.NetworkResponse; import org.apache.cloudstack.api.response.ZoneResponse; import com.cloud.offering.NetworkOffering; -@Implementation(description="Lists all available network offerings.", responseObject=NetworkOfferingResponse.class) +@APICommand(description="Lists all available network offerings.", responseObject=NetworkOfferingResponse.class) public class ListNetworkOfferingsCmd extends BaseListCmd { public static final Logger s_logger = Logger.getLogger(ListNetworkOfferingsCmd.class.getName()); private static final String _name = "listnetworkofferingsresponse"; diff --git a/api/src/org/apache/cloudstack/api/command/user/network/ListNetworksCmd.java b/api/src/org/apache/cloudstack/api/command/user/network/ListNetworksCmd.java index 0986631d014..7cf752e8d97 100644 --- a/api/src/org/apache/cloudstack/api/command/user/network/ListNetworksCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/network/ListNetworksCmd.java @@ -23,7 +23,7 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseListTaggedResourcesCmd; -import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.response.ListResponse; import org.apache.cloudstack.api.response.NetworkResponse; @@ -32,7 +32,7 @@ import org.apache.cloudstack.api.response.VpcResponse; import org.apache.cloudstack.api.response.ZoneResponse; import com.cloud.network.Network; -@Implementation(description="Lists all available networks.", responseObject=NetworkResponse.class) +@APICommand(description="Lists all available networks.", responseObject=NetworkResponse.class) public class ListNetworksCmd extends BaseListTaggedResourcesCmd { public static final Logger s_logger = Logger.getLogger(ListNetworksCmd.class.getName()); private static final String _name = "listnetworksresponse"; diff --git a/api/src/org/apache/cloudstack/api/command/user/network/RestartNetworkCmd.java b/api/src/org/apache/cloudstack/api/command/user/network/RestartNetworkCmd.java index c200b6a20b5..a8f5301beac 100644 --- a/api/src/org/apache/cloudstack/api/command/user/network/RestartNetworkCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/network/RestartNetworkCmd.java @@ -16,14 +16,10 @@ // under the License. package org.apache.cloudstack.api.command.user.network; +import org.apache.cloudstack.api.*; import org.apache.log4j.Logger; -import org.apache.cloudstack.api.ApiConstants; -import org.apache.cloudstack.api.BaseAsyncCmd; -import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.Implementation; -import org.apache.cloudstack.api.Parameter; -import org.apache.cloudstack.api.ServerApiException; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.response.IPAddressResponse; import org.apache.cloudstack.api.response.SuccessResponse; import org.apache.cloudstack.api.response.NetworkResponse; @@ -35,7 +31,7 @@ import com.cloud.exception.ResourceAllocationException; import com.cloud.exception.ResourceUnavailableException; import com.cloud.network.Network; -@Implementation(description="Restarts the network; includes 1) restarting network elements - virtual routers, dhcp servers 2) reapplying all public ips 3) reapplying loadBalancing/portForwarding rules", responseObject=IPAddressResponse.class) +@APICommand(description="Restarts the network; includes 1) restarting network elements - virtual routers, dhcp servers 2) reapplying all public ips 3) reapplying loadBalancing/portForwarding rules", responseObject=IPAddressResponse.class) public class RestartNetworkCmd extends BaseAsyncCmd { public static final Logger s_logger = Logger.getLogger(RestartNetworkCmd.class.getName()); private static final String s_name = "restartnetworkresponse"; diff --git a/api/src/org/apache/cloudstack/api/command/user/network/UpdateNetworkCmd.java b/api/src/org/apache/cloudstack/api/command/user/network/UpdateNetworkCmd.java index 24d00fbf115..205d14dfd3c 100644 --- a/api/src/org/apache/cloudstack/api/command/user/network/UpdateNetworkCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/network/UpdateNetworkCmd.java @@ -21,7 +21,7 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; import org.apache.cloudstack.api.response.NetworkResponse; @@ -35,7 +35,7 @@ import com.cloud.user.Account; import com.cloud.user.User; import com.cloud.user.UserContext; -@Implementation(description="Updates a network", responseObject=NetworkResponse.class) +@APICommand(description="Updates a network", responseObject=NetworkResponse.class) public class UpdateNetworkCmd extends BaseAsyncCmd { public static final Logger s_logger = Logger.getLogger(UpdateNetworkCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/user/offering/ListDiskOfferingsCmd.java b/api/src/org/apache/cloudstack/api/command/user/offering/ListDiskOfferingsCmd.java index f08df7a8837..f49bd7f32a8 100644 --- a/api/src/org/apache/cloudstack/api/command/user/offering/ListDiskOfferingsCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/offering/ListDiskOfferingsCmd.java @@ -23,14 +23,14 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseListCmd; -import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.response.DiskOfferingResponse; import org.apache.cloudstack.api.response.DomainResponse; import org.apache.cloudstack.api.response.ListResponse; import com.cloud.offering.DiskOffering; -@Implementation(description="Lists all available disk offerings.", responseObject=DiskOfferingResponse.class) +@APICommand(description="Lists all available disk offerings.", responseObject=DiskOfferingResponse.class) public class ListDiskOfferingsCmd extends BaseListCmd { public static final Logger s_logger = Logger.getLogger(ListDiskOfferingsCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/user/offering/ListServiceOfferingsCmd.java b/api/src/org/apache/cloudstack/api/command/user/offering/ListServiceOfferingsCmd.java index 6077723ab98..1938124e7f9 100644 --- a/api/src/org/apache/cloudstack/api/command/user/offering/ListServiceOfferingsCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/offering/ListServiceOfferingsCmd.java @@ -23,7 +23,7 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseListCmd; -import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.response.DomainResponse; import org.apache.cloudstack.api.response.DiskOfferingResponse; @@ -32,7 +32,7 @@ import org.apache.cloudstack.api.response.ServiceOfferingResponse; import org.apache.cloudstack.api.response.UserVmResponse; import com.cloud.offering.ServiceOffering; -@Implementation(description="Lists all available service offerings.", responseObject=ServiceOfferingResponse.class) +@APICommand(description="Lists all available service offerings.", responseObject=ServiceOfferingResponse.class) public class ListServiceOfferingsCmd extends BaseListCmd { public static final Logger s_logger = Logger.getLogger(ListServiceOfferingsCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/user/project/ActivateProjectCmd.java b/api/src/org/apache/cloudstack/api/command/user/project/ActivateProjectCmd.java index fe319514fb0..2ea31fe9bd3 100644 --- a/api/src/org/apache/cloudstack/api/command/user/project/ActivateProjectCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/project/ActivateProjectCmd.java @@ -16,21 +16,17 @@ // under the License. package org.apache.cloudstack.api.command.user.project; +import org.apache.cloudstack.api.*; import org.apache.log4j.Logger; -import org.apache.cloudstack.api.ApiConstants; -import org.apache.cloudstack.api.BaseAsyncCmd; -import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.Implementation; -import org.apache.cloudstack.api.Parameter; -import org.apache.cloudstack.api.ServerApiException; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.response.ProjectResponse; import com.cloud.event.EventTypes; import com.cloud.exception.InvalidParameterValueException; import com.cloud.projects.Project; import com.cloud.user.UserContext; -@Implementation(description="Activates a project", responseObject=ProjectResponse.class, since="3.0.0") +@APICommand(description="Activates a project", responseObject=ProjectResponse.class, since="3.0.0") public class ActivateProjectCmd extends BaseAsyncCmd { public static final Logger s_logger = Logger.getLogger(ActivateProjectCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/user/project/CreateProjectCmd.java b/api/src/org/apache/cloudstack/api/command/user/project/CreateProjectCmd.java index 8a20fe65af9..fef09f8e495 100644 --- a/api/src/org/apache/cloudstack/api/command/user/project/CreateProjectCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/project/CreateProjectCmd.java @@ -16,14 +16,10 @@ // under the License. package org.apache.cloudstack.api.command.user.project; +import org.apache.cloudstack.api.*; import org.apache.log4j.Logger; -import org.apache.cloudstack.api.ApiConstants; -import org.apache.cloudstack.api.BaseAsyncCreateCmd; -import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.Implementation; -import org.apache.cloudstack.api.Parameter; -import org.apache.cloudstack.api.ServerApiException; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.response.DomainResponse; import org.apache.cloudstack.api.response.ProjectResponse; import com.cloud.event.EventTypes; @@ -33,7 +29,7 @@ import com.cloud.projects.Project; import com.cloud.user.Account; import com.cloud.user.UserContext; -@Implementation(description = "Creates a project", responseObject = ProjectResponse.class, since = "3.0.0") +@APICommand(description = "Creates a project", responseObject = ProjectResponse.class, since = "3.0.0") public class CreateProjectCmd extends BaseAsyncCreateCmd { public static final Logger s_logger = Logger.getLogger(CreateProjectCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/user/project/DeleteProjectCmd.java b/api/src/org/apache/cloudstack/api/command/user/project/DeleteProjectCmd.java index 000cb42b747..4d9a36af7ce 100644 --- a/api/src/org/apache/cloudstack/api/command/user/project/DeleteProjectCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/project/DeleteProjectCmd.java @@ -22,7 +22,7 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; import org.apache.cloudstack.api.response.SuccessResponse; @@ -31,7 +31,7 @@ import com.cloud.exception.InvalidParameterValueException; import com.cloud.projects.Project; import com.cloud.user.UserContext; -@Implementation(description="Deletes a project", responseObject=SuccessResponse.class, since="3.0.0") +@APICommand(description="Deletes a project", responseObject=SuccessResponse.class, since="3.0.0") public class DeleteProjectCmd extends BaseAsyncCmd { public static final Logger s_logger = Logger.getLogger(DeleteProjectCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/user/project/DeleteProjectInvitationCmd.java b/api/src/org/apache/cloudstack/api/command/user/project/DeleteProjectInvitationCmd.java index f493cd95f50..d235a6b45cf 100644 --- a/api/src/org/apache/cloudstack/api/command/user/project/DeleteProjectInvitationCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/project/DeleteProjectInvitationCmd.java @@ -22,7 +22,7 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; import org.apache.cloudstack.api.response.SuccessResponse; @@ -30,7 +30,7 @@ import com.cloud.event.EventTypes; import com.cloud.user.Account; import com.cloud.user.UserContext; -@Implementation(description = "Accepts or declines project invitation", responseObject = SuccessResponse.class, since = "3.0.0") +@APICommand(description = "Accepts or declines project invitation", responseObject = SuccessResponse.class, since = "3.0.0") public class DeleteProjectInvitationCmd extends BaseAsyncCmd { public static final Logger s_logger = Logger.getLogger(DeleteProjectInvitationCmd.class.getName()); private static final String s_name = "deleteprojectinvitationresponse"; diff --git a/api/src/org/apache/cloudstack/api/command/user/project/ListProjectInvitationsCmd.java b/api/src/org/apache/cloudstack/api/command/user/project/ListProjectInvitationsCmd.java index 1d92bea2e9d..6490849429a 100644 --- a/api/src/org/apache/cloudstack/api/command/user/project/ListProjectInvitationsCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/project/ListProjectInvitationsCmd.java @@ -21,12 +21,12 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseListAccountResourcesCmd; -import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.response.ListResponse; import org.apache.cloudstack.api.response.ProjectInvitationResponse; -@Implementation(description = "Lists projects and provides detailed information for listed projects", responseObject = ProjectInvitationResponse.class, since = "3.0.0") +@APICommand(description = "Lists projects and provides detailed information for listed projects", responseObject = ProjectInvitationResponse.class, since = "3.0.0") public class ListProjectInvitationsCmd extends BaseListAccountResourcesCmd { public static final Logger s_logger = Logger.getLogger(ListProjectInvitationsCmd.class.getName()); private static final String s_name = "listprojectinvitationsresponse"; diff --git a/api/src/org/apache/cloudstack/api/command/user/project/ListProjectsCmd.java b/api/src/org/apache/cloudstack/api/command/user/project/ListProjectsCmd.java index 276fe728510..48ad6a30951 100644 --- a/api/src/org/apache/cloudstack/api/command/user/project/ListProjectsCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/project/ListProjectsCmd.java @@ -25,14 +25,14 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseListAccountResourcesCmd; -import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.response.ListResponse; import org.apache.cloudstack.api.response.ProjectResponse; import com.cloud.exception.InvalidParameterValueException; -@Implementation(description="Lists projects and provides detailed information for listed projects", responseObject=ProjectResponse.class, since="3.0.0") +@APICommand(description="Lists projects and provides detailed information for listed projects", responseObject=ProjectResponse.class, since="3.0.0") public class ListProjectsCmd extends BaseListAccountResourcesCmd { public static final Logger s_logger = Logger.getLogger(ListProjectsCmd.class.getName()); private static final String s_name = "listprojectsresponse"; diff --git a/api/src/org/apache/cloudstack/api/command/user/project/SuspendProjectCmd.java b/api/src/org/apache/cloudstack/api/command/user/project/SuspendProjectCmd.java index d4a1390ff9a..7291c4b207f 100644 --- a/api/src/org/apache/cloudstack/api/command/user/project/SuspendProjectCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/project/SuspendProjectCmd.java @@ -16,14 +16,10 @@ // under the License. package org.apache.cloudstack.api.command.user.project; +import org.apache.cloudstack.api.*; import org.apache.log4j.Logger; -import org.apache.cloudstack.api.ApiConstants; -import org.apache.cloudstack.api.BaseAsyncCmd; -import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.Implementation; -import org.apache.cloudstack.api.Parameter; -import org.apache.cloudstack.api.ServerApiException; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.response.ProjectResponse; import com.cloud.event.EventTypes; import com.cloud.exception.ConcurrentOperationException; @@ -32,7 +28,7 @@ import com.cloud.exception.ResourceUnavailableException; import com.cloud.projects.Project; import com.cloud.user.UserContext; -@Implementation(description="Suspends a project", responseObject=ProjectResponse.class, since="3.0.0") +@APICommand(description="Suspends a project", responseObject=ProjectResponse.class, since="3.0.0") public class SuspendProjectCmd extends BaseAsyncCmd { public static final Logger s_logger = Logger.getLogger(SuspendProjectCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/user/project/UpdateProjectCmd.java b/api/src/org/apache/cloudstack/api/command/user/project/UpdateProjectCmd.java index c85b9a9bb00..102c84e98a8 100644 --- a/api/src/org/apache/cloudstack/api/command/user/project/UpdateProjectCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/project/UpdateProjectCmd.java @@ -21,7 +21,7 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; import org.apache.cloudstack.api.response.ProjectResponse; @@ -31,7 +31,7 @@ import com.cloud.exception.ResourceAllocationException; import com.cloud.projects.Project; import com.cloud.user.UserContext; -@Implementation(description="Updates a project", responseObject=ProjectResponse.class, since="3.0.0") +@APICommand(description="Updates a project", responseObject=ProjectResponse.class, since="3.0.0") public class UpdateProjectCmd extends BaseAsyncCmd { public static final Logger s_logger = Logger.getLogger(UpdateProjectCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/user/project/UpdateProjectInvitationCmd.java b/api/src/org/apache/cloudstack/api/command/user/project/UpdateProjectInvitationCmd.java index 7baab710be6..e51e0450bd7 100644 --- a/api/src/org/apache/cloudstack/api/command/user/project/UpdateProjectInvitationCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/project/UpdateProjectInvitationCmd.java @@ -16,21 +16,17 @@ // under the License. package org.apache.cloudstack.api.command.user.project; +import org.apache.cloudstack.api.*; import org.apache.cloudstack.api.response.ProjectResponse; import org.apache.log4j.Logger; -import org.apache.cloudstack.api.ApiConstants; -import org.apache.cloudstack.api.BaseAsyncCmd; -import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.Implementation; -import org.apache.cloudstack.api.Parameter; -import org.apache.cloudstack.api.ServerApiException; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.response.SuccessResponse; import com.cloud.event.EventTypes; import com.cloud.user.Account; import com.cloud.user.UserContext; -@Implementation(description = "Accepts or declines project invitation", responseObject = SuccessResponse.class, since = "3.0.0") +@APICommand(description = "Accepts or declines project invitation", responseObject = SuccessResponse.class, since = "3.0.0") public class UpdateProjectInvitationCmd extends BaseAsyncCmd { public static final Logger s_logger = Logger.getLogger(UpdateProjectInvitationCmd.class.getName()); private static final String s_name = "updateprojectinvitationresponse"; diff --git a/api/src/org/apache/cloudstack/api/command/user/resource/GetCloudIdentifierCmd.java b/api/src/org/apache/cloudstack/api/command/user/resource/GetCloudIdentifierCmd.java index 398cae5ee9a..7043ad68afe 100644 --- a/api/src/org/apache/cloudstack/api/command/user/resource/GetCloudIdentifierCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/resource/GetCloudIdentifierCmd.java @@ -22,14 +22,14 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; import org.apache.cloudstack.api.response.CloudIdentifierResponse; import org.apache.cloudstack.api.response.UserResponse; import com.cloud.user.Account; -@Implementation(description="Retrieves a cloud identifier.", responseObject=CloudIdentifierResponse.class) +@APICommand(description="Retrieves a cloud identifier.", responseObject=CloudIdentifierResponse.class) public class GetCloudIdentifierCmd extends BaseCmd { public static final Logger s_logger = Logger.getLogger(GetCloudIdentifierCmd.class.getName()); private static final String s_name = "getcloudidentifierresponse"; diff --git a/api/src/org/apache/cloudstack/api/command/user/resource/ListHypervisorsCmd.java b/api/src/org/apache/cloudstack/api/command/user/resource/ListHypervisorsCmd.java index ece0c9fe2c4..4c77d09a67e 100644 --- a/api/src/org/apache/cloudstack/api/command/user/resource/ListHypervisorsCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/resource/ListHypervisorsCmd.java @@ -24,14 +24,14 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.response.HypervisorResponse; import org.apache.cloudstack.api.response.ListResponse; import org.apache.cloudstack.api.response.ZoneResponse; import com.cloud.user.Account; -@Implementation(description = "List hypervisors", responseObject = HypervisorResponse.class) +@APICommand(description = "List hypervisors", responseObject = HypervisorResponse.class) public class ListHypervisorsCmd extends BaseCmd { public static final Logger s_logger = Logger.getLogger(UpgradeRouterCmd.class.getName()); private static final String s_name = "listhypervisorsresponse"; diff --git a/api/src/org/apache/cloudstack/api/command/user/resource/ListResourceLimitsCmd.java b/api/src/org/apache/cloudstack/api/command/user/resource/ListResourceLimitsCmd.java index 72f96095ced..25840ef2b75 100644 --- a/api/src/org/apache/cloudstack/api/command/user/resource/ListResourceLimitsCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/resource/ListResourceLimitsCmd.java @@ -23,13 +23,13 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseListProjectAndAccountResourcesCmd; -import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.response.ListResponse; import org.apache.cloudstack.api.response.ResourceLimitResponse; import com.cloud.configuration.ResourceLimit; -@Implementation(description="Lists resource limits.", responseObject=ResourceLimitResponse.class) +@APICommand(description="Lists resource limits.", responseObject=ResourceLimitResponse.class) public class ListResourceLimitsCmd extends BaseListProjectAndAccountResourcesCmd { public static final Logger s_logger = Logger.getLogger(ListResourceLimitsCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/user/resource/UpdateResourceCountCmd.java b/api/src/org/apache/cloudstack/api/command/user/resource/UpdateResourceCountCmd.java index 8af243f1c48..9677abf23a0 100644 --- a/api/src/org/apache/cloudstack/api/command/user/resource/UpdateResourceCountCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/resource/UpdateResourceCountCmd.java @@ -19,13 +19,10 @@ package org.apache.cloudstack.api.command.user.resource; import java.util.ArrayList; import java.util.List; +import org.apache.cloudstack.api.*; import org.apache.log4j.Logger; -import org.apache.cloudstack.api.ApiConstants; -import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.Implementation; -import org.apache.cloudstack.api.Parameter; -import org.apache.cloudstack.api.ServerApiException; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.response.DomainResponse; import org.apache.cloudstack.api.response.ProjectResponse; import org.apache.cloudstack.api.response.ListResponse; @@ -34,7 +31,7 @@ import com.cloud.configuration.ResourceCount; import com.cloud.user.Account; import com.cloud.user.UserContext; -@Implementation(description="Recalculate and update resource count for an account or domain.", responseObject=ResourceCountResponse.class) +@APICommand(description="Recalculate and update resource count for an account or domain.", responseObject=ResourceCountResponse.class) public class UpdateResourceCountCmd extends BaseCmd { public static final Logger s_logger = Logger.getLogger(UpdateResourceCountCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/user/resource/UpdateResourceLimitCmd.java b/api/src/org/apache/cloudstack/api/command/user/resource/UpdateResourceLimitCmd.java index bdb65cc6f97..accb13a091a 100644 --- a/api/src/org/apache/cloudstack/api/command/user/resource/UpdateResourceLimitCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/resource/UpdateResourceLimitCmd.java @@ -16,20 +16,17 @@ // under the License. package org.apache.cloudstack.api.command.user.resource; +import org.apache.cloudstack.api.*; import org.apache.log4j.Logger; -import org.apache.cloudstack.api.ApiConstants; -import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.Implementation; -import org.apache.cloudstack.api.Parameter; -import org.apache.cloudstack.api.ServerApiException; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.response.DomainResponse; import org.apache.cloudstack.api.response.ProjectResponse; import org.apache.cloudstack.api.response.ResourceLimitResponse; import com.cloud.configuration.ResourceLimit; import com.cloud.user.UserContext; -@Implementation(description="Updates resource limits for an account or domain.", responseObject=ResourceLimitResponse.class) +@APICommand(description="Updates resource limits for an account or domain.", responseObject=ResourceLimitResponse.class) public class UpdateResourceLimitCmd extends BaseCmd { public static final Logger s_logger = Logger.getLogger(UpdateResourceLimitCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/user/securitygroup/AuthorizeSecurityGroupEgressCmd.java b/api/src/org/apache/cloudstack/api/command/user/securitygroup/AuthorizeSecurityGroupEgressCmd.java index e5c78024d4e..46f098e76a7 100644 --- a/api/src/org/apache/cloudstack/api/command/user/securitygroup/AuthorizeSecurityGroupEgressCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/securitygroup/AuthorizeSecurityGroupEgressCmd.java @@ -21,13 +21,10 @@ import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; + +import org.apache.cloudstack.api.*; import org.apache.log4j.Logger; -import org.apache.cloudstack.api.ApiConstants; -import org.apache.cloudstack.api.BaseAsyncCmd; -import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.Implementation; -import org.apache.cloudstack.api.Parameter; -import org.apache.cloudstack.api.ServerApiException; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.response.DomainResponse; import org.apache.cloudstack.api.response.ProjectAccountResponse; import org.apache.cloudstack.api.response.SecurityGroupRuleResponse; @@ -39,7 +36,7 @@ import com.cloud.network.security.SecurityRule; import com.cloud.user.UserContext; import com.cloud.utils.StringUtils; -@Implementation(responseObject = SecurityGroupRuleResponse.class, description = "Authorizes a particular egress rule for this security group", since="3.0.0") +@APICommand(responseObject = SecurityGroupRuleResponse.class, description = "Authorizes a particular egress rule for this security group", since="3.0.0") @SuppressWarnings("rawtypes") public class AuthorizeSecurityGroupEgressCmd extends BaseAsyncCmd { public static final Logger s_logger = Logger.getLogger(AuthorizeSecurityGroupIngressCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/user/securitygroup/AuthorizeSecurityGroupIngressCmd.java b/api/src/org/apache/cloudstack/api/command/user/securitygroup/AuthorizeSecurityGroupIngressCmd.java index ac6b6afa797..e46577d2fe5 100644 --- a/api/src/org/apache/cloudstack/api/command/user/securitygroup/AuthorizeSecurityGroupIngressCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/securitygroup/AuthorizeSecurityGroupIngressCmd.java @@ -27,7 +27,7 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; import org.apache.cloudstack.api.response.DomainResponse; @@ -42,7 +42,7 @@ import com.cloud.user.UserContext; import com.cloud.utils.StringUtils; import com.cloud.utils.net.NetUtils; -@Implementation(responseObject = SecurityGroupRuleResponse.class, description = "Authorizes a particular ingress rule for this security group") +@APICommand(responseObject = SecurityGroupRuleResponse.class, description = "Authorizes a particular ingress rule for this security group") @SuppressWarnings("rawtypes") public class AuthorizeSecurityGroupIngressCmd extends BaseAsyncCmd { public static final Logger s_logger = Logger.getLogger(AuthorizeSecurityGroupIngressCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/user/securitygroup/CreateSecurityGroupCmd.java b/api/src/org/apache/cloudstack/api/command/user/securitygroup/CreateSecurityGroupCmd.java index 9ea7951857a..ee1f9eabb0d 100644 --- a/api/src/org/apache/cloudstack/api/command/user/securitygroup/CreateSecurityGroupCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/securitygroup/CreateSecurityGroupCmd.java @@ -20,7 +20,7 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; import org.apache.cloudstack.api.response.DomainResponse; @@ -30,7 +30,7 @@ import com.cloud.network.security.SecurityGroup; import com.cloud.user.Account; import com.cloud.user.UserContext; -@Implementation(responseObject = SecurityGroupResponse.class, description = "Creates a security group") +@APICommand(responseObject = SecurityGroupResponse.class, description = "Creates a security group") public class CreateSecurityGroupCmd extends BaseCmd { public static final Logger s_logger = Logger.getLogger(CreateSecurityGroupCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/user/securitygroup/DeleteSecurityGroupCmd.java b/api/src/org/apache/cloudstack/api/command/user/securitygroup/DeleteSecurityGroupCmd.java index 38429adcba7..c06929a18a5 100644 --- a/api/src/org/apache/cloudstack/api/command/user/securitygroup/DeleteSecurityGroupCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/securitygroup/DeleteSecurityGroupCmd.java @@ -20,7 +20,7 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; import org.apache.cloudstack.api.response.DomainResponse; @@ -31,7 +31,7 @@ import com.cloud.exception.InvalidParameterValueException; import com.cloud.exception.ResourceInUseException; import com.cloud.user.UserContext; -@Implementation(description="Deletes security group", responseObject=SuccessResponse.class) +@APICommand(description="Deletes security group", responseObject=SuccessResponse.class) public class DeleteSecurityGroupCmd extends BaseCmd { public static final Logger s_logger = Logger.getLogger(DeleteSecurityGroupCmd.class.getName()); private static final String s_name = "deletesecuritygroupresponse"; diff --git a/api/src/org/apache/cloudstack/api/command/user/securitygroup/ListSecurityGroupsCmd.java b/api/src/org/apache/cloudstack/api/command/user/securitygroup/ListSecurityGroupsCmd.java index b43dbd7cd58..b13ce278edf 100644 --- a/api/src/org/apache/cloudstack/api/command/user/securitygroup/ListSecurityGroupsCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/securitygroup/ListSecurityGroupsCmd.java @@ -20,7 +20,7 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseListTaggedResourcesCmd; -import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.response.ListResponse; import org.apache.cloudstack.api.response.SecurityGroupResponse; @@ -28,7 +28,7 @@ import org.apache.cloudstack.api.response.UserVmResponse; import com.cloud.async.AsyncJob; -@Implementation(description="Lists security groups", responseObject=SecurityGroupResponse.class) +@APICommand(description="Lists security groups", responseObject=SecurityGroupResponse.class) public class ListSecurityGroupsCmd extends BaseListTaggedResourcesCmd { public static final Logger s_logger = Logger.getLogger(ListSecurityGroupsCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/user/securitygroup/RevokeSecurityGroupEgressCmd.java b/api/src/org/apache/cloudstack/api/command/user/securitygroup/RevokeSecurityGroupEgressCmd.java index 023896bff8b..71e1abca50a 100644 --- a/api/src/org/apache/cloudstack/api/command/user/securitygroup/RevokeSecurityGroupEgressCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/securitygroup/RevokeSecurityGroupEgressCmd.java @@ -16,14 +16,10 @@ // under the License. package org.apache.cloudstack.api.command.user.securitygroup; +import org.apache.cloudstack.api.*; import org.apache.log4j.Logger; -import org.apache.cloudstack.api.ApiConstants; -import org.apache.cloudstack.api.BaseAsyncCmd; -import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.Implementation; -import org.apache.cloudstack.api.Parameter; -import org.apache.cloudstack.api.ServerApiException; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.response.SecurityGroupRuleResponse; import org.apache.cloudstack.api.response.SuccessResponse; import com.cloud.async.AsyncJob; @@ -31,7 +27,7 @@ import com.cloud.event.EventTypes; import com.cloud.network.security.SecurityGroup; import com.cloud.user.Account; -@Implementation(responseObject = SuccessResponse.class, description = "Deletes a particular egress rule from this security group", since="3.0.0") +@APICommand(responseObject = SuccessResponse.class, description = "Deletes a particular egress rule from this security group", since="3.0.0") public class RevokeSecurityGroupEgressCmd extends BaseAsyncCmd { public static final Logger s_logger = Logger.getLogger(RevokeSecurityGroupEgressCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/user/securitygroup/RevokeSecurityGroupIngressCmd.java b/api/src/org/apache/cloudstack/api/command/user/securitygroup/RevokeSecurityGroupIngressCmd.java index 7d7d1155148..488520d6b13 100644 --- a/api/src/org/apache/cloudstack/api/command/user/securitygroup/RevokeSecurityGroupIngressCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/securitygroup/RevokeSecurityGroupIngressCmd.java @@ -21,7 +21,7 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; import org.apache.cloudstack.api.response.SecurityGroupRuleResponse; @@ -31,7 +31,7 @@ import com.cloud.event.EventTypes; import com.cloud.network.security.SecurityGroup; import com.cloud.user.Account; -@Implementation(responseObject = SuccessResponse.class, description = "Deletes a particular ingress rule from this security group") +@APICommand(responseObject = SuccessResponse.class, description = "Deletes a particular ingress rule from this security group") public class RevokeSecurityGroupIngressCmd extends BaseAsyncCmd { public static final Logger s_logger = Logger.getLogger(RevokeSecurityGroupIngressCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/user/snapshot/CreateSnapshotCmd.java b/api/src/org/apache/cloudstack/api/command/user/snapshot/CreateSnapshotCmd.java index 13175c712aa..aceab2c23a0 100644 --- a/api/src/org/apache/cloudstack/api/command/user/snapshot/CreateSnapshotCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/snapshot/CreateSnapshotCmd.java @@ -16,15 +16,10 @@ // under the License. package org.apache.cloudstack.api.command.user.snapshot; +import org.apache.cloudstack.api.*; import org.apache.log4j.Logger; -import org.apache.cloudstack.api.ApiConstants; -import org.apache.cloudstack.api.BaseAsyncCmd; -import org.apache.cloudstack.api.BaseAsyncCreateCmd; -import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.Implementation; -import org.apache.cloudstack.api.Parameter; -import org.apache.cloudstack.api.ServerApiException; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.response.SnapshotResponse; import org.apache.cloudstack.api.response.DomainResponse; import org.apache.cloudstack.api.response.SnapshotPolicyResponse; @@ -40,7 +35,7 @@ import com.cloud.storage.Volume; import com.cloud.user.Account; import com.cloud.user.UserContext; -@Implementation(description = "Creates an instant snapshot of a volume.", responseObject = SnapshotResponse.class) +@APICommand(description = "Creates an instant snapshot of a volume.", responseObject = SnapshotResponse.class) public class CreateSnapshotCmd extends BaseAsyncCreateCmd { public static final Logger s_logger = Logger.getLogger(CreateSnapshotCmd.class.getName()); private static final String s_name = "createsnapshotresponse"; diff --git a/api/src/org/apache/cloudstack/api/command/user/snapshot/CreateSnapshotPolicyCmd.java b/api/src/org/apache/cloudstack/api/command/user/snapshot/CreateSnapshotPolicyCmd.java index ceb5ec1f186..703925ed42a 100644 --- a/api/src/org/apache/cloudstack/api/command/user/snapshot/CreateSnapshotPolicyCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/snapshot/CreateSnapshotPolicyCmd.java @@ -16,13 +16,10 @@ // under the License. package org.apache.cloudstack.api.command.user.snapshot; +import org.apache.cloudstack.api.*; import org.apache.log4j.Logger; -import org.apache.cloudstack.api.ApiConstants; -import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.Implementation; -import org.apache.cloudstack.api.Parameter; -import org.apache.cloudstack.api.ServerApiException; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.response.SnapshotPolicyResponse; import org.apache.cloudstack.api.response.VolumeResponse; import com.cloud.exception.InvalidParameterValueException; @@ -32,7 +29,7 @@ import com.cloud.storage.Volume; import com.cloud.storage.snapshot.SnapshotPolicy; import com.cloud.user.Account; -@Implementation(description="Creates a snapshot policy for the account.", responseObject=SnapshotPolicyResponse.class) +@APICommand(description="Creates a snapshot policy for the account.", responseObject=SnapshotPolicyResponse.class) public class CreateSnapshotPolicyCmd extends BaseCmd { public static final Logger s_logger = Logger.getLogger(CreateSnapshotPolicyCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/user/snapshot/DeleteSnapshotCmd.java b/api/src/org/apache/cloudstack/api/command/user/snapshot/DeleteSnapshotCmd.java index 0ef553b28cc..8e8edb582c0 100644 --- a/api/src/org/apache/cloudstack/api/command/user/snapshot/DeleteSnapshotCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/snapshot/DeleteSnapshotCmd.java @@ -16,14 +16,10 @@ // under the License. package org.apache.cloudstack.api.command.user.snapshot; +import org.apache.cloudstack.api.*; import org.apache.log4j.Logger; -import org.apache.cloudstack.api.ApiConstants; -import org.apache.cloudstack.api.BaseAsyncCmd; -import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.Implementation; -import org.apache.cloudstack.api.Parameter; -import org.apache.cloudstack.api.ServerApiException; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.response.SnapshotResponse; import org.apache.cloudstack.api.response.SuccessResponse; import com.cloud.async.AsyncJob; @@ -32,7 +28,7 @@ import com.cloud.storage.Snapshot; import com.cloud.user.Account; import com.cloud.user.UserContext; -@Implementation(description="Deletes a snapshot of a disk volume.", responseObject=SuccessResponse.class) +@APICommand(description="Deletes a snapshot of a disk volume.", responseObject=SuccessResponse.class) public class DeleteSnapshotCmd extends BaseAsyncCmd { public static final Logger s_logger = Logger.getLogger(DeleteSnapshotCmd.class.getName()); private static final String s_name = "deletesnapshotresponse"; diff --git a/api/src/org/apache/cloudstack/api/command/user/snapshot/DeleteSnapshotPoliciesCmd.java b/api/src/org/apache/cloudstack/api/command/user/snapshot/DeleteSnapshotPoliciesCmd.java index dd682edc9c8..7bfb546ea7d 100644 --- a/api/src/org/apache/cloudstack/api/command/user/snapshot/DeleteSnapshotPoliciesCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/snapshot/DeleteSnapshotPoliciesCmd.java @@ -22,14 +22,14 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; import org.apache.cloudstack.api.response.SnapshotPolicyResponse; import org.apache.cloudstack.api.response.SuccessResponse; import com.cloud.user.Account; -@Implementation(description="Deletes snapshot policies for the account.", responseObject=SuccessResponse.class) +@APICommand(description="Deletes snapshot policies for the account.", responseObject=SuccessResponse.class) public class DeleteSnapshotPoliciesCmd extends BaseCmd { public static final Logger s_logger = Logger.getLogger(DeleteSnapshotPoliciesCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/user/snapshot/ListSnapshotPoliciesCmd.java b/api/src/org/apache/cloudstack/api/command/user/snapshot/ListSnapshotPoliciesCmd.java index f3cea498c1c..d16b730e4b3 100644 --- a/api/src/org/apache/cloudstack/api/command/user/snapshot/ListSnapshotPoliciesCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/snapshot/ListSnapshotPoliciesCmd.java @@ -19,18 +19,18 @@ package org.apache.cloudstack.api.command.user.snapshot; import java.util.ArrayList; import java.util.List; +import org.apache.cloudstack.api.APICommand; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseListCmd; -import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.response.ListResponse; import org.apache.cloudstack.api.response.SnapshotPolicyResponse; import org.apache.cloudstack.api.response.VolumeResponse; import com.cloud.storage.snapshot.SnapshotPolicy; -@Implementation(description="Lists snapshot policies.", responseObject=SnapshotPolicyResponse.class) +@APICommand(description="Lists snapshot policies.", responseObject=SnapshotPolicyResponse.class) public class ListSnapshotPoliciesCmd extends BaseListCmd { public static final Logger s_logger = Logger.getLogger(ListSnapshotPoliciesCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/user/snapshot/ListSnapshotsCmd.java b/api/src/org/apache/cloudstack/api/command/user/snapshot/ListSnapshotsCmd.java index 10da8c5dcc0..5de186f743c 100644 --- a/api/src/org/apache/cloudstack/api/command/user/snapshot/ListSnapshotsCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/snapshot/ListSnapshotsCmd.java @@ -23,7 +23,7 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseListTaggedResourcesCmd; -import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.response.ListResponse; import org.apache.cloudstack.api.response.SnapshotResponse; @@ -32,7 +32,7 @@ import com.cloud.async.AsyncJob; import com.cloud.storage.Snapshot; import com.cloud.utils.Pair; -@Implementation(description="Lists all available snapshots for the account.", responseObject=SnapshotResponse.class) +@APICommand(description="Lists all available snapshots for the account.", responseObject=SnapshotResponse.class) public class ListSnapshotsCmd extends BaseListTaggedResourcesCmd { public static final Logger s_logger = Logger.getLogger(ListSnapshotsCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/user/ssh/CreateSSHKeyPairCmd.java b/api/src/org/apache/cloudstack/api/command/user/ssh/CreateSSHKeyPairCmd.java index a858cc9a9e8..fa406303e87 100644 --- a/api/src/org/apache/cloudstack/api/command/user/ssh/CreateSSHKeyPairCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/ssh/CreateSSHKeyPairCmd.java @@ -16,11 +16,11 @@ // under the License. package org.apache.cloudstack.api.command.user.ssh; +import org.apache.cloudstack.api.APICommand; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.response.DomainResponse; import org.apache.cloudstack.api.response.ProjectResponse; @@ -28,7 +28,7 @@ import org.apache.cloudstack.api.response.SSHKeyPairResponse; import com.cloud.user.SSHKeyPair; import com.cloud.user.UserContext; -@Implementation(description="Create a new keypair and returns the private key", responseObject=SSHKeyPairResponse.class) +@APICommand(description="Create a new keypair and returns the private key", responseObject=SSHKeyPairResponse.class) public class CreateSSHKeyPairCmd extends BaseCmd { public static final Logger s_logger = Logger.getLogger(CreateSSHKeyPairCmd.class.getName()); private static final String s_name = "createsshkeypairresponse"; diff --git a/api/src/org/apache/cloudstack/api/command/user/ssh/DeleteSSHKeyPairCmd.java b/api/src/org/apache/cloudstack/api/command/user/ssh/DeleteSSHKeyPairCmd.java index 2ee32078aca..ba30e54fec2 100644 --- a/api/src/org/apache/cloudstack/api/command/user/ssh/DeleteSSHKeyPairCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/ssh/DeleteSSHKeyPairCmd.java @@ -20,7 +20,7 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.response.DomainResponse; import org.apache.cloudstack.api.response.ProjectResponse; @@ -28,7 +28,7 @@ import org.apache.cloudstack.api.response.SuccessResponse; import com.cloud.user.Account; import com.cloud.user.UserContext; -@Implementation(description="Deletes a keypair by name", responseObject=SuccessResponse.class) +@APICommand(description="Deletes a keypair by name", responseObject=SuccessResponse.class) public class DeleteSSHKeyPairCmd extends BaseCmd { public static final Logger s_logger = Logger.getLogger(CreateSSHKeyPairCmd.class.getName()); private static final String s_name = "deletesshkeypairresponse"; diff --git a/api/src/org/apache/cloudstack/api/command/user/ssh/ListSSHKeyPairsCmd.java b/api/src/org/apache/cloudstack/api/command/user/ssh/ListSSHKeyPairsCmd.java index 336825b8bd6..4e86e71b53b 100644 --- a/api/src/org/apache/cloudstack/api/command/user/ssh/ListSSHKeyPairsCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/ssh/ListSSHKeyPairsCmd.java @@ -19,18 +19,18 @@ package org.apache.cloudstack.api.command.user.ssh; import java.util.ArrayList; import java.util.List; +import org.apache.cloudstack.api.APICommand; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseListProjectAndAccountResourcesCmd; -import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.response.ListResponse; import org.apache.cloudstack.api.response.SSHKeyPairResponse; import com.cloud.user.SSHKeyPair; import com.cloud.utils.Pair; -@Implementation(description="List registered keypairs", responseObject=SSHKeyPairResponse.class) +@APICommand(description="List registered keypairs", responseObject=SSHKeyPairResponse.class) public class ListSSHKeyPairsCmd extends BaseListProjectAndAccountResourcesCmd { public static final Logger s_logger = Logger.getLogger(ListSSHKeyPairsCmd.class.getName()); private static final String s_name = "listsshkeypairsresponse"; diff --git a/api/src/org/apache/cloudstack/api/command/user/ssh/RegisterSSHKeyPairCmd.java b/api/src/org/apache/cloudstack/api/command/user/ssh/RegisterSSHKeyPairCmd.java index 1d051ceed85..ed242135726 100644 --- a/api/src/org/apache/cloudstack/api/command/user/ssh/RegisterSSHKeyPairCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/ssh/RegisterSSHKeyPairCmd.java @@ -20,7 +20,7 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.response.DomainResponse; import org.apache.cloudstack.api.response.ProjectResponse; @@ -28,7 +28,7 @@ import org.apache.cloudstack.api.response.SSHKeyPairResponse; import com.cloud.user.SSHKeyPair; import com.cloud.user.UserContext; -@Implementation(description="Register a public key in a keypair under a certain name", responseObject=SSHKeyPairResponse.class) +@APICommand(description="Register a public key in a keypair under a certain name", responseObject=SSHKeyPairResponse.class) public class RegisterSSHKeyPairCmd extends BaseCmd { public static final Logger s_logger = Logger.getLogger(RegisterSSHKeyPairCmd.class.getName()); private static final String s_name = "registersshkeypairresponse"; diff --git a/api/src/org/apache/cloudstack/api/command/user/tag/CreateTagsCmd.java b/api/src/org/apache/cloudstack/api/command/user/tag/CreateTagsCmd.java index 14c6167ff84..602c4e77567 100644 --- a/api/src/org/apache/cloudstack/api/command/user/tag/CreateTagsCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/tag/CreateTagsCmd.java @@ -28,14 +28,14 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; import org.apache.cloudstack.api.response.SuccessResponse; import com.cloud.event.EventTypes; import com.cloud.server.ResourceTag; import com.cloud.server.ResourceTag.TaggedResourceType; -@Implementation(description = "Creates resource tag(s)", responseObject = SuccessResponse.class, since = "Burbank") +@APICommand(description = "Creates resource tag(s)", responseObject = SuccessResponse.class, since = "Burbank") public class CreateTagsCmd extends BaseAsyncCmd{ public static final Logger s_logger = Logger.getLogger(CreateTagsCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/user/tag/DeleteTagsCmd.java b/api/src/org/apache/cloudstack/api/command/user/tag/DeleteTagsCmd.java index f5de4a3d6ea..ecb3a66ef30 100644 --- a/api/src/org/apache/cloudstack/api/command/user/tag/DeleteTagsCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/tag/DeleteTagsCmd.java @@ -28,13 +28,13 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; import org.apache.cloudstack.api.response.SuccessResponse; import com.cloud.event.EventTypes; import com.cloud.server.ResourceTag.TaggedResourceType; -@Implementation(description = "Deleting resource tag(s)", responseObject = SuccessResponse.class, since = "Burbank") +@APICommand(description = "Deleting resource tag(s)", responseObject = SuccessResponse.class, since = "Burbank") public class DeleteTagsCmd extends BaseAsyncCmd{ public static final Logger s_logger = Logger.getLogger(DeleteTagsCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/user/tag/ListTagsCmd.java b/api/src/org/apache/cloudstack/api/command/user/tag/ListTagsCmd.java index d5f732e1f4b..4b1dedd3da1 100644 --- a/api/src/org/apache/cloudstack/api/command/user/tag/ListTagsCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/tag/ListTagsCmd.java @@ -17,14 +17,14 @@ package org.apache.cloudstack.api.command.user.tag; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseListProjectAndAccountResourcesCmd; -import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.response.ListResponse; import org.apache.cloudstack.api.response.ResourceTagResponse; -@Implementation(description = "List resource tag(s)", responseObject = ResourceTagResponse.class, since = "Burbank") +@APICommand(description = "List resource tag(s)", responseObject = ResourceTagResponse.class, since = "Burbank") public class ListTagsCmd extends BaseListProjectAndAccountResourcesCmd{ private static final String s_name = "listtagsresponse"; diff --git a/api/src/org/apache/cloudstack/api/command/user/template/CopyTemplateCmd.java b/api/src/org/apache/cloudstack/api/command/user/template/CopyTemplateCmd.java index 9aa3d167644..b44abd1d040 100644 --- a/api/src/org/apache/cloudstack/api/command/user/template/CopyTemplateCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/template/CopyTemplateCmd.java @@ -23,7 +23,7 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; import org.apache.cloudstack.api.response.TemplateResponse; @@ -37,7 +37,7 @@ import com.cloud.template.VirtualMachineTemplate; import com.cloud.user.Account; import com.cloud.user.UserContext; -@Implementation(description="Copies a template from one zone to another.", responseObject=TemplateResponse.class) +@APICommand(description="Copies a template from one zone to another.", responseObject=TemplateResponse.class) public class CopyTemplateCmd extends BaseAsyncCmd { public static final Logger s_logger = Logger.getLogger(CopyTemplateCmd.class.getName()); private static final String s_name = "copytemplateresponse"; diff --git a/api/src/org/apache/cloudstack/api/command/user/template/CreateTemplateCmd.java b/api/src/org/apache/cloudstack/api/command/user/template/CreateTemplateCmd.java index cee33ec9c34..6fed5dea965 100644 --- a/api/src/org/apache/cloudstack/api/command/user/template/CreateTemplateCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/template/CreateTemplateCmd.java @@ -20,14 +20,10 @@ import java.util.Collection; import java.util.List; import java.util.Map; +import org.apache.cloudstack.api.*; import org.apache.log4j.Logger; -import org.apache.cloudstack.api.ApiConstants; -import org.apache.cloudstack.api.BaseAsyncCreateCmd; -import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.Implementation; -import org.apache.cloudstack.api.Parameter; -import org.apache.cloudstack.api.ServerApiException; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.response.GuestOSResponse; import org.apache.cloudstack.api.response.SnapshotResponse; import org.apache.cloudstack.api.response.StoragePoolResponse; @@ -46,7 +42,7 @@ import com.cloud.template.VirtualMachineTemplate; import com.cloud.user.Account; import com.cloud.user.UserContext; -@Implementation(responseObject = StoragePoolResponse.class, description = "Creates a template of a virtual machine. " + "The virtual machine must be in a STOPPED state. " +@APICommand(responseObject = StoragePoolResponse.class, description = "Creates a template of a virtual machine. " + "The virtual machine must be in a STOPPED state. " + "A template created from this command is automatically designated as a private template visible to the account that created it.") public class CreateTemplateCmd extends BaseAsyncCreateCmd { public static final Logger s_logger = Logger.getLogger(CreateTemplateCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/user/template/DeleteTemplateCmd.java b/api/src/org/apache/cloudstack/api/command/user/template/DeleteTemplateCmd.java index 2e5bb9e3103..ba7b8235d5f 100644 --- a/api/src/org/apache/cloudstack/api/command/user/template/DeleteTemplateCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/template/DeleteTemplateCmd.java @@ -16,16 +16,12 @@ // under the License. package org.apache.cloudstack.api.command.user.template; +import org.apache.cloudstack.api.*; import org.apache.cloudstack.api.response.UserVmResponse; import org.apache.cloudstack.api.response.ZoneResponse; import org.apache.log4j.Logger; -import org.apache.cloudstack.api.ApiConstants; -import org.apache.cloudstack.api.BaseAsyncCmd; -import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.Implementation; -import org.apache.cloudstack.api.Parameter; -import org.apache.cloudstack.api.ServerApiException; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.response.SuccessResponse; import com.cloud.async.AsyncJob; import com.cloud.event.EventTypes; @@ -33,7 +29,7 @@ import com.cloud.template.VirtualMachineTemplate; import com.cloud.user.Account; import com.cloud.user.UserContext; -@Implementation(responseObject=SuccessResponse.class, description="Deletes a template from the system. All virtual machines using the deleted template will not be affected.") +@APICommand(responseObject=SuccessResponse.class, description="Deletes a template from the system. All virtual machines using the deleted template will not be affected.") public class DeleteTemplateCmd extends BaseAsyncCmd { public static final Logger s_logger = Logger.getLogger(DeleteTemplateCmd.class.getName()); private static final String s_name = "deletetemplateresponse"; diff --git a/api/src/org/apache/cloudstack/api/command/user/template/ExtractTemplateCmd.java b/api/src/org/apache/cloudstack/api/command/user/template/ExtractTemplateCmd.java index 6a6e9853b81..28bc39c1acc 100644 --- a/api/src/org/apache/cloudstack/api/command/user/template/ExtractTemplateCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/template/ExtractTemplateCmd.java @@ -16,16 +16,12 @@ // under the License. package org.apache.cloudstack.api.command.user.template; +import org.apache.cloudstack.api.*; import org.apache.cloudstack.api.response.UserVmResponse; import org.apache.cloudstack.api.response.ZoneResponse; import org.apache.log4j.Logger; -import org.apache.cloudstack.api.ApiConstants; -import org.apache.cloudstack.api.BaseAsyncCmd; -import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.Implementation; -import org.apache.cloudstack.api.Parameter; -import org.apache.cloudstack.api.ServerApiException; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.response.ExtractResponse; import com.cloud.async.AsyncJob; import com.cloud.event.EventTypes; @@ -34,7 +30,7 @@ import com.cloud.template.VirtualMachineTemplate; import com.cloud.user.Account; import com.cloud.user.UserContext; -@Implementation(description="Extracts a template", responseObject=ExtractResponse.class) +@APICommand(description="Extracts a template", responseObject=ExtractResponse.class) public class ExtractTemplateCmd extends BaseAsyncCmd { public static final Logger s_logger = Logger.getLogger(ExtractTemplateCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/user/template/ListTemplatesCmd.java b/api/src/org/apache/cloudstack/api/command/user/template/ListTemplatesCmd.java index 647a0c7e12a..bb9624c7c05 100644 --- a/api/src/org/apache/cloudstack/api/command/user/template/ListTemplatesCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/template/ListTemplatesCmd.java @@ -26,7 +26,7 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseListTaggedResourcesCmd; -import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.response.ListResponse; import org.apache.cloudstack.api.response.TemplateResponse; @@ -36,7 +36,7 @@ import com.cloud.user.Account; import com.cloud.user.UserContext; import com.cloud.utils.Pair; -@Implementation(description="List all public, private, and privileged templates.", responseObject=TemplateResponse.class) +@APICommand(description="List all public, private, and privileged templates.", responseObject=TemplateResponse.class) public class ListTemplatesCmd extends BaseListTaggedResourcesCmd { public static final Logger s_logger = Logger.getLogger(ListTemplatesCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/user/template/RegisterTemplateCmd.java b/api/src/org/apache/cloudstack/api/command/user/template/RegisterTemplateCmd.java index 1855cdc31e4..1a080888925 100644 --- a/api/src/org/apache/cloudstack/api/command/user/template/RegisterTemplateCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/template/RegisterTemplateCmd.java @@ -25,7 +25,7 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; import org.apache.cloudstack.api.response.DomainResponse; @@ -39,7 +39,7 @@ import com.cloud.exception.ResourceAllocationException; import com.cloud.template.VirtualMachineTemplate; import com.cloud.user.UserContext; -@Implementation(description="Registers an existing template into the CloudStack cloud. ", responseObject=TemplateResponse.class) +@APICommand(description="Registers an existing template into the CloudStack cloud. ", responseObject=TemplateResponse.class) public class RegisterTemplateCmd extends BaseCmd { public static final Logger s_logger = Logger.getLogger(RegisterTemplateCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/user/template/UpdateTemplateCmd.java b/api/src/org/apache/cloudstack/api/command/user/template/UpdateTemplateCmd.java index 92c608c29c0..a5dc4cfdac8 100644 --- a/api/src/org/apache/cloudstack/api/command/user/template/UpdateTemplateCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/template/UpdateTemplateCmd.java @@ -20,13 +20,13 @@ import com.cloud.api.commands.UpdateTemplateOrIsoCmd; import org.apache.log4j.Logger; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.ServerApiException; import org.apache.cloudstack.api.response.TemplateResponse; import com.cloud.template.VirtualMachineTemplate; import com.cloud.user.Account; -@Implementation(description="Updates attributes of a template.", responseObject=TemplateResponse.class) +@APICommand(description="Updates attributes of a template.", responseObject=TemplateResponse.class) public class UpdateTemplateCmd extends UpdateTemplateOrIsoCmd { public static final Logger s_logger = Logger.getLogger(UpdateTemplateCmd.class.getName()); private static final String s_name = "updatetemplateresponse"; diff --git a/api/src/org/apache/cloudstack/api/command/user/template/UpdateTemplatePermissionsCmd.java b/api/src/org/apache/cloudstack/api/command/user/template/UpdateTemplatePermissionsCmd.java index 4a29d9cbb92..d7a4ecf0d7a 100644 --- a/api/src/org/apache/cloudstack/api/command/user/template/UpdateTemplatePermissionsCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/template/UpdateTemplatePermissionsCmd.java @@ -19,12 +19,12 @@ package org.apache.cloudstack.api.command.user.template; import com.cloud.api.commands.UpdateTemplateOrIsoPermissionsCmd; import org.apache.log4j.Logger; -import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.response.SuccessResponse; import com.cloud.template.VirtualMachineTemplate; import com.cloud.user.Account; -@Implementation(responseObject=SuccessResponse.class, description="Updates a template visibility permissions. " + +@APICommand(responseObject=SuccessResponse.class, description="Updates a template visibility permissions. " + "A public template is visible to all accounts within the same domain. " + "A private template is visible only to the owner of the template. " + "A priviledged template is a private template with account permissions added. " + diff --git a/api/src/org/apache/cloudstack/api/command/user/vm/DeployVMCmd.java b/api/src/org/apache/cloudstack/api/command/user/vm/DeployVMCmd.java index 1454a2d5c0f..e2e09e0e1ca 100644 --- a/api/src/org/apache/cloudstack/api/command/user/vm/DeployVMCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vm/DeployVMCmd.java @@ -24,15 +24,10 @@ import java.util.LinkedHashMap; import java.util.List; import java.util.Map; +import org.apache.cloudstack.api.*; import org.apache.log4j.Logger; -import org.apache.cloudstack.api.ACL; -import org.apache.cloudstack.api.ApiConstants; -import org.apache.cloudstack.api.BaseAsyncCreateCmd; -import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.Implementation; -import org.apache.cloudstack.api.Parameter; -import org.apache.cloudstack.api.ServerApiException; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.response.DiskOfferingResponse; import org.apache.cloudstack.api.response.DomainResponse; @@ -64,7 +59,7 @@ import com.cloud.user.UserContext; import com.cloud.uservm.UserVm; -@Implementation(description="Creates and automatically starts a virtual machine based on a service offering, disk offering, and template.", responseObject=UserVmResponse.class) +@APICommand(description="Creates and automatically starts a virtual machine based on a service offering, disk offering, and template.", responseObject=UserVmResponse.class) public class DeployVMCmd extends BaseAsyncCreateCmd { public static final Logger s_logger = Logger.getLogger(DeployVMCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/user/vm/DestroyVMCmd.java b/api/src/org/apache/cloudstack/api/command/user/vm/DestroyVMCmd.java index 5738ede0bf1..a58424896f7 100644 --- a/api/src/org/apache/cloudstack/api/command/user/vm/DestroyVMCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vm/DestroyVMCmd.java @@ -16,14 +16,10 @@ // under the License. package org.apache.cloudstack.api.command.user.vm; +import org.apache.cloudstack.api.*; import org.apache.log4j.Logger; -import org.apache.cloudstack.api.ApiConstants; -import org.apache.cloudstack.api.BaseAsyncCmd; -import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.Implementation; -import org.apache.cloudstack.api.Parameter; -import org.apache.cloudstack.api.ServerApiException; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.response.UserVmResponse; import com.cloud.async.AsyncJob; import com.cloud.event.EventTypes; @@ -34,7 +30,7 @@ import com.cloud.user.Account; import com.cloud.user.UserContext; import com.cloud.uservm.UserVm; -@Implementation(description="Destroys a virtual machine. Once destroyed, only the administrator can recover it.", responseObject=UserVmResponse.class) +@APICommand(description="Destroys a virtual machine. Once destroyed, only the administrator can recover it.", responseObject=UserVmResponse.class) public class DestroyVMCmd extends BaseAsyncCmd { public static final Logger s_logger = Logger.getLogger(DestroyVMCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/user/vm/GetVMPasswordCmd.java b/api/src/org/apache/cloudstack/api/command/user/vm/GetVMPasswordCmd.java index 6d747fa6501..caae1868774 100644 --- a/api/src/org/apache/cloudstack/api/command/user/vm/GetVMPasswordCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vm/GetVMPasswordCmd.java @@ -18,18 +18,18 @@ package org.apache.cloudstack.api.command.user.vm; import java.security.InvalidParameterException; +import org.apache.cloudstack.api.APICommand; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.response.GetVMPasswordResponse; import org.apache.cloudstack.api.response.UserVmResponse; import com.cloud.user.Account; import com.cloud.uservm.UserVm; -@Implementation(responseObject=GetVMPasswordResponse.class, description="Returns an encrypted password for the VM") +@APICommand(responseObject=GetVMPasswordResponse.class, description="Returns an encrypted password for the VM") public class GetVMPasswordCmd extends BaseCmd { public static final Logger s_logger = Logger.getLogger(GetVMPasswordCmd.class.getName()); private static final String s_name = "getvmpasswordresponse"; diff --git a/api/src/org/apache/cloudstack/api/command/user/vm/ListVMsCmd.java b/api/src/org/apache/cloudstack/api/command/user/vm/ListVMsCmd.java index 84a0d914140..fe5e4dd82e8 100644 --- a/api/src/org/apache/cloudstack/api/command/user/vm/ListVMsCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vm/ListVMsCmd.java @@ -25,7 +25,7 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.ApiConstants.VMDetails; import org.apache.cloudstack.api.BaseListTaggedResourcesCmd; -import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.response.HostResponse; @@ -44,7 +44,7 @@ import com.cloud.async.AsyncJob; import com.cloud.exception.InvalidParameterValueException; -@Implementation(description="List the virtual machines owned by the account.", responseObject=UserVmResponse.class) +@APICommand(description="List the virtual machines owned by the account.", responseObject=UserVmResponse.class) public class ListVMsCmd extends BaseListTaggedResourcesCmd { public static final Logger s_logger = Logger.getLogger(ListVMsCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/user/vm/RebootVMCmd.java b/api/src/org/apache/cloudstack/api/command/user/vm/RebootVMCmd.java index f272eb12848..505bccfa7a3 100644 --- a/api/src/org/apache/cloudstack/api/command/user/vm/RebootVMCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vm/RebootVMCmd.java @@ -21,7 +21,7 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; import org.apache.cloudstack.api.response.UserVmResponse; @@ -34,7 +34,7 @@ import com.cloud.user.Account; import com.cloud.user.UserContext; import com.cloud.uservm.UserVm; -@Implementation(description="Reboots a virtual machine.", responseObject=UserVmResponse.class) +@APICommand(description="Reboots a virtual machine.", responseObject=UserVmResponse.class) public class RebootVMCmd extends BaseAsyncCmd { public static final Logger s_logger = Logger.getLogger(RebootVMCmd.class.getName()); private static final String s_name = "rebootvirtualmachineresponse"; diff --git a/api/src/org/apache/cloudstack/api/command/user/vm/ResetVMPasswordCmd.java b/api/src/org/apache/cloudstack/api/command/user/vm/ResetVMPasswordCmd.java index 034b10d7008..53705a072de 100644 --- a/api/src/org/apache/cloudstack/api/command/user/vm/ResetVMPasswordCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vm/ResetVMPasswordCmd.java @@ -21,7 +21,7 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; import org.apache.cloudstack.api.response.UserVmResponse; @@ -33,7 +33,7 @@ import com.cloud.user.Account; import com.cloud.user.UserContext; import com.cloud.uservm.UserVm; -@Implementation(responseObject=UserVmResponse.class, description="Resets the password for virtual machine. " + +@APICommand(responseObject=UserVmResponse.class, description="Resets the password for virtual machine. " + "The virtual machine must be in a \"Stopped\" state and the template must already " + "support this feature for this command to take effect. [async]") public class ResetVMPasswordCmd extends BaseAsyncCmd { diff --git a/api/src/org/apache/cloudstack/api/command/user/vm/RestoreVMCmd.java b/api/src/org/apache/cloudstack/api/command/user/vm/RestoreVMCmd.java index c6f4ab38584..3c24e21eb26 100644 --- a/api/src/org/apache/cloudstack/api/command/user/vm/RestoreVMCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vm/RestoreVMCmd.java @@ -21,7 +21,7 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; import org.apache.cloudstack.api.response.UserVmResponse; @@ -34,7 +34,7 @@ import com.cloud.user.Account; import com.cloud.user.UserContext; import com.cloud.uservm.UserVm; -@Implementation(description="Restore a VM to original template or specific snapshot", responseObject=UserVmResponse.class, since="3.0.0") +@APICommand(description="Restore a VM to original template or specific snapshot", responseObject=UserVmResponse.class, since="3.0.0") public class RestoreVMCmd extends BaseAsyncCmd { public static final Logger s_logger = Logger.getLogger(RestoreVMCmd.class); private static final String s_name = "restorevmresponse"; diff --git a/api/src/org/apache/cloudstack/api/command/user/vm/StartVMCmd.java b/api/src/org/apache/cloudstack/api/command/user/vm/StartVMCmd.java index a8887a520e5..fdf32ea244f 100644 --- a/api/src/org/apache/cloudstack/api/command/user/vm/StartVMCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vm/StartVMCmd.java @@ -16,14 +16,10 @@ // under the License. package org.apache.cloudstack.api.command.user.vm; +import org.apache.cloudstack.api.*; import org.apache.log4j.Logger; -import org.apache.cloudstack.api.ApiConstants; -import org.apache.cloudstack.api.BaseAsyncCmd; -import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.Implementation; -import org.apache.cloudstack.api.Parameter; -import org.apache.cloudstack.api.ServerApiException; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.response.HostResponse; import org.apache.cloudstack.api.response.UserVmResponse; @@ -40,7 +36,7 @@ import com.cloud.user.UserContext; import com.cloud.uservm.UserVm; import com.cloud.utils.exception.ExecutionException; -@Implementation(responseObject = UserVmResponse.class, description = "Starts a virtual machine.") +@APICommand(responseObject = UserVmResponse.class, description = "Starts a virtual machine.") public class StartVMCmd extends BaseAsyncCmd { public static final Logger s_logger = Logger.getLogger(StartVMCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/user/vm/StopVMCmd.java b/api/src/org/apache/cloudstack/api/command/user/vm/StopVMCmd.java index 643ae03406d..dd07a1207c9 100644 --- a/api/src/org/apache/cloudstack/api/command/user/vm/StopVMCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vm/StopVMCmd.java @@ -16,14 +16,10 @@ // under the License. package org.apache.cloudstack.api.command.user.vm; +import org.apache.cloudstack.api.*; import org.apache.log4j.Logger; -import org.apache.cloudstack.api.ApiConstants; -import org.apache.cloudstack.api.BaseAsyncCmd; -import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.Implementation; -import org.apache.cloudstack.api.Parameter; -import org.apache.cloudstack.api.ServerApiException; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.response.UserVmResponse; import com.cloud.async.AsyncJob; import com.cloud.event.EventTypes; @@ -33,7 +29,7 @@ import com.cloud.user.Account; import com.cloud.user.UserContext; import com.cloud.uservm.UserVm; -@Implementation(responseObject = UserVmResponse.class, description = "Stops a virtual machine.") +@APICommand(responseObject = UserVmResponse.class, description = "Stops a virtual machine.") public class StopVMCmd extends BaseAsyncCmd { public static final Logger s_logger = Logger.getLogger(StopVMCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/user/vm/UpdateVMCmd.java b/api/src/org/apache/cloudstack/api/command/user/vm/UpdateVMCmd.java index 09cabd4470b..9cac1f0e441 100644 --- a/api/src/org/apache/cloudstack/api/command/user/vm/UpdateVMCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vm/UpdateVMCmd.java @@ -20,7 +20,7 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; @@ -33,7 +33,7 @@ import com.cloud.user.UserContext; import com.cloud.uservm.UserVm; -@Implementation(description="Updates properties of a virtual machine. The VM has to be stopped and restarted for the " + +@APICommand(description="Updates properties of a virtual machine. The VM has to be stopped and restarted for the " + "new properties to take effect. UpdateVirtualMachine does not first check whether the VM is stopped. " + "Therefore, stop the VM manually before issuing this call.", responseObject=UserVmResponse.class) public class UpdateVMCmd extends BaseCmd{ diff --git a/api/src/org/apache/cloudstack/api/command/user/vm/UpgradeVMCmd.java b/api/src/org/apache/cloudstack/api/command/user/vm/UpgradeVMCmd.java index 6a840ce9c3b..b9503b3d604 100644 --- a/api/src/org/apache/cloudstack/api/command/user/vm/UpgradeVMCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vm/UpgradeVMCmd.java @@ -16,13 +16,10 @@ // under the License. package org.apache.cloudstack.api.command.user.vm; +import org.apache.cloudstack.api.*; import org.apache.log4j.Logger; -import org.apache.cloudstack.api.ApiConstants; -import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.Implementation; -import org.apache.cloudstack.api.Parameter; -import org.apache.cloudstack.api.ServerApiException; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.response.DiskOfferingResponse; import org.apache.cloudstack.api.response.UserVmResponse; @@ -32,7 +29,7 @@ import com.cloud.user.Account; import com.cloud.user.UserContext; import com.cloud.uservm.UserVm; -@Implementation(responseObject=UserVmResponse.class, description="Changes the service offering for a virtual machine. " + +@APICommand(responseObject=UserVmResponse.class, description="Changes the service offering for a virtual machine. " + "The virtual machine must be in a \"Stopped\" state for " + "this command to take effect.") public class UpgradeVMCmd extends BaseCmd { diff --git a/api/src/org/apache/cloudstack/api/command/user/vmgroup/CreateVMGroupCmd.java b/api/src/org/apache/cloudstack/api/command/user/vmgroup/CreateVMGroupCmd.java index bcc2644b125..a9969b025f2 100644 --- a/api/src/org/apache/cloudstack/api/command/user/vmgroup/CreateVMGroupCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vmgroup/CreateVMGroupCmd.java @@ -16,13 +16,10 @@ // under the License. package org.apache.cloudstack.api.command.user.vmgroup; +import org.apache.cloudstack.api.*; import org.apache.log4j.Logger; -import org.apache.cloudstack.api.ApiConstants; -import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.Implementation; -import org.apache.cloudstack.api.Parameter; -import org.apache.cloudstack.api.ServerApiException; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.response.DomainResponse; import org.apache.cloudstack.api.response.InstanceGroupResponse; @@ -30,7 +27,7 @@ import org.apache.cloudstack.api.response.ProjectAccountResponse; import com.cloud.user.UserContext; import com.cloud.vm.InstanceGroup; -@Implementation(description = "Creates a vm group", responseObject = InstanceGroupResponse.class) +@APICommand(description = "Creates a vm group", responseObject = InstanceGroupResponse.class) public class CreateVMGroupCmd extends BaseCmd { public static final Logger s_logger = Logger.getLogger(CreateVMGroupCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/user/vmgroup/DeleteVMGroupCmd.java b/api/src/org/apache/cloudstack/api/command/user/vmgroup/DeleteVMGroupCmd.java index 5983b689315..8bb7638a212 100644 --- a/api/src/org/apache/cloudstack/api/command/user/vmgroup/DeleteVMGroupCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vmgroup/DeleteVMGroupCmd.java @@ -16,20 +16,17 @@ // under the License. package org.apache.cloudstack.api.command.user.vmgroup; +import org.apache.cloudstack.api.*; import org.apache.log4j.Logger; -import org.apache.cloudstack.api.ApiConstants; -import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.Implementation; -import org.apache.cloudstack.api.Parameter; -import org.apache.cloudstack.api.ServerApiException; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.response.InstanceGroupResponse; import org.apache.cloudstack.api.response.SuccessResponse; import com.cloud.user.Account; import com.cloud.vm.InstanceGroup; -@Implementation(description="Deletes a vm group", responseObject=SuccessResponse.class) +@APICommand(description="Deletes a vm group", responseObject=SuccessResponse.class) public class DeleteVMGroupCmd extends BaseCmd{ public static final Logger s_logger = Logger.getLogger(DeleteVMGroupCmd.class.getName()); private static final String s_name = "deleteinstancegroupresponse"; diff --git a/api/src/org/apache/cloudstack/api/command/user/vmgroup/ListVMGroupsCmd.java b/api/src/org/apache/cloudstack/api/command/user/vmgroup/ListVMGroupsCmd.java index a8906edd68d..0c8ea91b7d4 100644 --- a/api/src/org/apache/cloudstack/api/command/user/vmgroup/ListVMGroupsCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vmgroup/ListVMGroupsCmd.java @@ -20,12 +20,12 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseListProjectAndAccountResourcesCmd; -import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.response.InstanceGroupResponse; import org.apache.cloudstack.api.response.ListResponse; -@Implementation(description="Lists vm groups", responseObject=InstanceGroupResponse.class) +@APICommand(description="Lists vm groups", responseObject=InstanceGroupResponse.class) public class ListVMGroupsCmd extends BaseListProjectAndAccountResourcesCmd { public static final Logger s_logger = Logger.getLogger(ListVMGroupsCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/user/vmgroup/UpdateVMGroupCmd.java b/api/src/org/apache/cloudstack/api/command/user/vmgroup/UpdateVMGroupCmd.java index 3adf1f78341..49c1b4984cc 100644 --- a/api/src/org/apache/cloudstack/api/command/user/vmgroup/UpdateVMGroupCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vmgroup/UpdateVMGroupCmd.java @@ -16,18 +16,15 @@ // under the License. package org.apache.cloudstack.api.command.user.vmgroup; +import org.apache.cloudstack.api.*; import org.apache.log4j.Logger; -import org.apache.cloudstack.api.ApiConstants; -import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.Implementation; -import org.apache.cloudstack.api.Parameter; -import org.apache.cloudstack.api.ServerApiException; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.response.InstanceGroupResponse; import com.cloud.user.Account; import com.cloud.vm.InstanceGroup; -@Implementation(description="Updates a vm group", responseObject=InstanceGroupResponse.class) +@APICommand(description="Updates a vm group", responseObject=InstanceGroupResponse.class) public class UpdateVMGroupCmd extends BaseCmd{ private static final String s_name = "updateinstancegroupresponse"; diff --git a/api/src/org/apache/cloudstack/api/command/user/volume/AttachVolumeCmd.java b/api/src/org/apache/cloudstack/api/command/user/volume/AttachVolumeCmd.java index 09a252585c0..c839202bc9d 100644 --- a/api/src/org/apache/cloudstack/api/command/user/volume/AttachVolumeCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/volume/AttachVolumeCmd.java @@ -22,7 +22,7 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; import org.apache.cloudstack.api.response.VolumeResponse; @@ -32,7 +32,7 @@ import com.cloud.storage.Volume; import com.cloud.user.Account; import com.cloud.user.UserContext; -@Implementation(description="Attaches a disk volume to a virtual machine.", responseObject=VolumeResponse.class) +@APICommand(description="Attaches a disk volume to a virtual machine.", responseObject=VolumeResponse.class) public class AttachVolumeCmd extends BaseAsyncCmd { public static final Logger s_logger = Logger.getLogger(AttachVolumeCmd.class.getName()); private static final String s_name = "attachvolumeresponse"; diff --git a/api/src/org/apache/cloudstack/api/command/user/volume/CreateVolumeCmd.java b/api/src/org/apache/cloudstack/api/command/user/volume/CreateVolumeCmd.java index 0df4a13707a..cf5cd2db996 100644 --- a/api/src/org/apache/cloudstack/api/command/user/volume/CreateVolumeCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/volume/CreateVolumeCmd.java @@ -22,7 +22,7 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseAsyncCreateCmd; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; import com.cloud.async.AsyncJob; @@ -32,7 +32,7 @@ import com.cloud.storage.Snapshot; import com.cloud.storage.Volume; import com.cloud.user.UserContext; -@Implementation(responseObject=VolumeResponse.class, description="Creates a disk volume from a disk offering. This disk volume must still be attached to a virtual machine to make use of it.") +@APICommand(responseObject=VolumeResponse.class, description="Creates a disk volume from a disk offering. This disk volume must still be attached to a virtual machine to make use of it.") public class CreateVolumeCmd extends BaseAsyncCreateCmd { public static final Logger s_logger = Logger.getLogger(CreateVolumeCmd.class.getName()); private static final String s_name = "createvolumeresponse"; diff --git a/api/src/org/apache/cloudstack/api/command/user/volume/DeleteVolumeCmd.java b/api/src/org/apache/cloudstack/api/command/user/volume/DeleteVolumeCmd.java index a03be710135..99837aec92d 100644 --- a/api/src/org/apache/cloudstack/api/command/user/volume/DeleteVolumeCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/volume/DeleteVolumeCmd.java @@ -21,7 +21,7 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; import org.apache.cloudstack.api.response.SuccessResponse; @@ -30,7 +30,7 @@ import com.cloud.storage.Volume; import com.cloud.user.Account; import com.cloud.user.UserContext; -@Implementation(description="Deletes a detached disk volume.", responseObject=SuccessResponse.class) +@APICommand(description="Deletes a detached disk volume.", responseObject=SuccessResponse.class) public class DeleteVolumeCmd extends BaseCmd { public static final Logger s_logger = Logger.getLogger(DeleteVolumeCmd.class.getName()); private static final String s_name = "deletevolumeresponse"; diff --git a/api/src/org/apache/cloudstack/api/command/user/volume/DetachVolumeCmd.java b/api/src/org/apache/cloudstack/api/command/user/volume/DetachVolumeCmd.java index 4c85e0ad4b8..b4801fef8bd 100644 --- a/api/src/org/apache/cloudstack/api/command/user/volume/DetachVolumeCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/volume/DetachVolumeCmd.java @@ -16,15 +16,11 @@ // under the License. package org.apache.cloudstack.api.command.user.volume; +import org.apache.cloudstack.api.*; import org.apache.cloudstack.api.response.UserVmResponse; import org.apache.log4j.Logger; -import org.apache.cloudstack.api.ApiConstants; -import org.apache.cloudstack.api.BaseAsyncCmd; -import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.Implementation; -import org.apache.cloudstack.api.Parameter; -import org.apache.cloudstack.api.ServerApiException; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.response.VolumeResponse; import com.cloud.async.AsyncJob; import com.cloud.event.EventTypes; @@ -33,7 +29,7 @@ import com.cloud.user.Account; import com.cloud.user.UserContext; import com.cloud.uservm.UserVm; -@Implementation(description="Detaches a disk volume from a virtual machine.", responseObject=VolumeResponse.class) +@APICommand(description="Detaches a disk volume from a virtual machine.", responseObject=VolumeResponse.class) public class DetachVolumeCmd extends BaseAsyncCmd { public static final Logger s_logger = Logger.getLogger(DetachVolumeCmd.class.getName()); private static final String s_name = "detachvolumeresponse"; diff --git a/api/src/org/apache/cloudstack/api/command/user/volume/ExtractVolumeCmd.java b/api/src/org/apache/cloudstack/api/command/user/volume/ExtractVolumeCmd.java index a2683736407..26a97d10caf 100644 --- a/api/src/org/apache/cloudstack/api/command/user/volume/ExtractVolumeCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/volume/ExtractVolumeCmd.java @@ -25,7 +25,7 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; import org.apache.cloudstack.api.response.ExtractResponse; @@ -37,7 +37,7 @@ import com.cloud.storage.Volume; import com.cloud.user.Account; import com.cloud.user.UserContext; -@Implementation(description="Extracts volume", responseObject=ExtractResponse.class) +@APICommand(description="Extracts volume", responseObject=ExtractResponse.class) public class ExtractVolumeCmd extends BaseAsyncCmd { public static final Logger s_logger = Logger.getLogger(ExtractVolumeCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/user/volume/ListVolumesCmd.java b/api/src/org/apache/cloudstack/api/command/user/volume/ListVolumesCmd.java index bbee6775764..644fbb7a134 100644 --- a/api/src/org/apache/cloudstack/api/command/user/volume/ListVolumesCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/volume/ListVolumesCmd.java @@ -16,22 +16,17 @@ // under the License. package org.apache.cloudstack.api.command.user.volume; -import java.util.ArrayList; -import java.util.List; - import org.apache.cloudstack.api.response.*; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseListTaggedResourcesCmd; -import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; import com.cloud.async.AsyncJob; -import com.cloud.storage.Volume; -import com.cloud.utils.Pair; -@Implementation(description="Lists all volumes.", responseObject=VolumeResponse.class) +@APICommand(description="Lists all volumes.", responseObject=VolumeResponse.class) public class ListVolumesCmd extends BaseListTaggedResourcesCmd { public static final Logger s_logger = Logger.getLogger(ListVolumesCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/user/volume/MigrateVolumeCmd.java b/api/src/org/apache/cloudstack/api/command/user/volume/MigrateVolumeCmd.java index d15379b750e..e6cf4634ce1 100644 --- a/api/src/org/apache/cloudstack/api/command/user/volume/MigrateVolumeCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/volume/MigrateVolumeCmd.java @@ -19,7 +19,7 @@ package org.apache.cloudstack.api.command.user.volume; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; import org.apache.cloudstack.api.response.StoragePoolResponse; @@ -30,7 +30,7 @@ import com.cloud.storage.Volume; import com.cloud.user.Account; -@Implementation(description="Migrate volume", responseObject=VolumeResponse.class, since="3.0.0") +@APICommand(description="Migrate volume", responseObject=VolumeResponse.class, since="3.0.0") public class MigrateVolumeCmd extends BaseAsyncCmd { private static final String s_name = "migratevolumeresponse"; diff --git a/api/src/org/apache/cloudstack/api/command/user/volume/UploadVolumeCmd.java b/api/src/org/apache/cloudstack/api/command/user/volume/UploadVolumeCmd.java index ff39cd91802..0311444f2d3 100644 --- a/api/src/org/apache/cloudstack/api/command/user/volume/UploadVolumeCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/volume/UploadVolumeCmd.java @@ -16,16 +16,12 @@ // under the License. package org.apache.cloudstack.api.command.user.volume; +import org.apache.cloudstack.api.*; import org.apache.cloudstack.api.response.DomainResponse; import org.apache.cloudstack.api.response.ZoneResponse; import org.apache.log4j.Logger; -import org.apache.cloudstack.api.ApiConstants; -import org.apache.cloudstack.api.BaseAsyncCmd; -import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.Implementation; -import org.apache.cloudstack.api.Parameter; -import org.apache.cloudstack.api.ServerApiException; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.response.VolumeResponse; import com.cloud.event.EventTypes; import com.cloud.exception.ConcurrentOperationException; @@ -36,7 +32,7 @@ import com.cloud.exception.ResourceUnavailableException; import com.cloud.storage.Volume; import com.cloud.user.UserContext; -@Implementation(description="Uploads a data disk.", responseObject=VolumeResponse.class) +@APICommand(description="Uploads a data disk.", responseObject=VolumeResponse.class) public class UploadVolumeCmd extends BaseAsyncCmd { public static final Logger s_logger = Logger.getLogger(UploadVolumeCmd.class.getName()); private static final String s_name = "uploadvolumeresponse"; diff --git a/api/src/org/apache/cloudstack/api/command/user/vpc/CreateStaticRouteCmd.java b/api/src/org/apache/cloudstack/api/command/user/vpc/CreateStaticRouteCmd.java index 9b674d98589..8a9ac9596e6 100644 --- a/api/src/org/apache/cloudstack/api/command/user/vpc/CreateStaticRouteCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vpc/CreateStaticRouteCmd.java @@ -22,7 +22,7 @@ import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseAsyncCreateCmd; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; import org.apache.cloudstack.api.response.StaticRouteResponse; @@ -36,7 +36,7 @@ import com.cloud.network.vpc.StaticRoute; import com.cloud.network.vpc.VpcGateway; import com.cloud.user.UserContext; -@Implementation(description="Creates a static route", responseObject=StaticRouteResponse.class) +@APICommand(description="Creates a static route", responseObject=StaticRouteResponse.class) public class CreateStaticRouteCmd extends BaseAsyncCreateCmd{ private static final String s_name = "createstaticrouteresponse"; public static final Logger s_logger = Logger.getLogger(CreateStaticRouteCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/user/vpc/CreateVPCCmd.java b/api/src/org/apache/cloudstack/api/command/user/vpc/CreateVPCCmd.java index b5ad04eb256..d8829d67cf2 100644 --- a/api/src/org/apache/cloudstack/api/command/user/vpc/CreateVPCCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vpc/CreateVPCCmd.java @@ -26,7 +26,7 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseAsyncCreateCmd; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; import com.cloud.event.EventTypes; @@ -37,7 +37,7 @@ import com.cloud.exception.ResourceUnavailableException; import com.cloud.network.vpc.Vpc; import com.cloud.user.UserContext; -@Implementation(description="Creates a VPC", responseObject=VpcResponse.class) +@APICommand(description="Creates a VPC", responseObject=VpcResponse.class) public class CreateVPCCmd extends BaseAsyncCreateCmd{ public static final Logger s_logger = Logger.getLogger(CreateVPCCmd.class.getName()); private static final String s_name = "createvpcresponse"; diff --git a/api/src/org/apache/cloudstack/api/command/user/vpc/DeleteStaticRouteCmd.java b/api/src/org/apache/cloudstack/api/command/user/vpc/DeleteStaticRouteCmd.java index b8c2437bce4..de53b984cf9 100644 --- a/api/src/org/apache/cloudstack/api/command/user/vpc/DeleteStaticRouteCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vpc/DeleteStaticRouteCmd.java @@ -16,16 +16,12 @@ // under the License. package org.apache.cloudstack.api.command.user.vpc; +import org.apache.cloudstack.api.*; import org.apache.cloudstack.api.response.AccountResponse; import org.apache.cloudstack.api.response.StaticRouteResponse; import org.apache.log4j.Logger; -import org.apache.cloudstack.api.ApiConstants; -import org.apache.cloudstack.api.BaseAsyncCmd; -import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.Implementation; -import org.apache.cloudstack.api.Parameter; -import org.apache.cloudstack.api.ServerApiException; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.response.SuccessResponse; import com.cloud.async.AsyncJob; import com.cloud.event.EventTypes; @@ -34,7 +30,7 @@ import com.cloud.exception.ResourceUnavailableException; import com.cloud.network.vpc.StaticRoute; import com.cloud.user.UserContext; -@Implementation(description="Deletes a static route", responseObject=SuccessResponse.class) +@APICommand(description="Deletes a static route", responseObject=SuccessResponse.class) public class DeleteStaticRouteCmd extends BaseAsyncCmd{ public static final Logger s_logger = Logger.getLogger(DeleteStaticRouteCmd.class.getName()); private static final String s_name = "deletestaticrouteresponse"; diff --git a/api/src/org/apache/cloudstack/api/command/user/vpc/DeleteVPCCmd.java b/api/src/org/apache/cloudstack/api/command/user/vpc/DeleteVPCCmd.java index 4c02903d3cc..9d1821e021a 100644 --- a/api/src/org/apache/cloudstack/api/command/user/vpc/DeleteVPCCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vpc/DeleteVPCCmd.java @@ -16,15 +16,11 @@ // under the License. package org.apache.cloudstack.api.command.user.vpc; +import org.apache.cloudstack.api.*; import org.apache.cloudstack.api.response.VpcResponse; import org.apache.log4j.Logger; -import org.apache.cloudstack.api.ApiConstants; -import org.apache.cloudstack.api.BaseAsyncCmd; -import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.Implementation; -import org.apache.cloudstack.api.Parameter; -import org.apache.cloudstack.api.ServerApiException; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.response.SuccessResponse; import com.cloud.event.EventTypes; import com.cloud.exception.ConcurrentOperationException; @@ -32,7 +28,7 @@ import com.cloud.exception.ResourceUnavailableException; import com.cloud.network.vpc.Vpc; import com.cloud.user.Account; -@Implementation(description="Deletes a VPC", responseObject=SuccessResponse.class) +@APICommand(description="Deletes a VPC", responseObject=SuccessResponse.class) public class DeleteVPCCmd extends BaseAsyncCmd{ public static final Logger s_logger = Logger.getLogger(DeleteVPCCmd.class.getName()); private static final String s_name = "deletevpcresponse"; diff --git a/api/src/org/apache/cloudstack/api/command/user/vpc/ListPrivateGatewaysCmd.java b/api/src/org/apache/cloudstack/api/command/user/vpc/ListPrivateGatewaysCmd.java index b71c06789fb..190286689ea 100644 --- a/api/src/org/apache/cloudstack/api/command/user/vpc/ListPrivateGatewaysCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vpc/ListPrivateGatewaysCmd.java @@ -19,19 +19,19 @@ package org.apache.cloudstack.api.command.user.vpc; import java.util.ArrayList; import java.util.List; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.response.VpcResponse; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseListProjectAndAccountResourcesCmd; -import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.response.ListResponse; import org.apache.cloudstack.api.response.PrivateGatewayResponse; import com.cloud.network.vpc.PrivateGateway; import com.cloud.utils.Pair; -@Implementation(description="List private gateways", responseObject=PrivateGatewayResponse.class) +@APICommand(description="List private gateways", responseObject=PrivateGatewayResponse.class) public class ListPrivateGatewaysCmd extends BaseListProjectAndAccountResourcesCmd{ public static final Logger s_logger = Logger.getLogger(ListPrivateGatewaysCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/user/vpc/ListStaticRoutesCmd.java b/api/src/org/apache/cloudstack/api/command/user/vpc/ListStaticRoutesCmd.java index 9efcc6d8e83..a9e1bcdc950 100644 --- a/api/src/org/apache/cloudstack/api/command/user/vpc/ListStaticRoutesCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vpc/ListStaticRoutesCmd.java @@ -20,7 +20,7 @@ import java.util.ArrayList; import java.util.List; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseListTaggedResourcesCmd; -import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.response.ListResponse; import org.apache.cloudstack.api.response.PrivateGatewayResponse; @@ -29,7 +29,7 @@ import com.cloud.network.vpc.StaticRoute; import com.cloud.utils.Pair; import org.apache.cloudstack.api.response.VpcResponse; -@Implementation(description="Lists all static routes", responseObject=StaticRouteResponse.class) +@APICommand(description="Lists all static routes", responseObject=StaticRouteResponse.class) public class ListStaticRoutesCmd extends BaseListTaggedResourcesCmd { private static final String s_name = "liststaticroutesresponse"; diff --git a/api/src/org/apache/cloudstack/api/command/user/vpc/ListVPCOfferingsCmd.java b/api/src/org/apache/cloudstack/api/command/user/vpc/ListVPCOfferingsCmd.java index d10eac787de..deff5b2a554 100644 --- a/api/src/org/apache/cloudstack/api/command/user/vpc/ListVPCOfferingsCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vpc/ListVPCOfferingsCmd.java @@ -23,13 +23,13 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseListCmd; -import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.response.ListResponse; import org.apache.cloudstack.api.response.VpcOfferingResponse; import com.cloud.network.vpc.VpcOffering; -@Implementation(description="Lists VPC offerings", responseObject=VpcOfferingResponse.class) +@APICommand(description="Lists VPC offerings", responseObject=VpcOfferingResponse.class) public class ListVPCOfferingsCmd extends BaseListCmd{ public static final Logger s_logger = Logger.getLogger(ListVPCOfferingsCmd.class.getName()); private static final String _name = "listvpcofferingsresponse"; diff --git a/api/src/org/apache/cloudstack/api/command/user/vpc/ListVPCsCmd.java b/api/src/org/apache/cloudstack/api/command/user/vpc/ListVPCsCmd.java index e9a7e290422..b4da5ebad89 100644 --- a/api/src/org/apache/cloudstack/api/command/user/vpc/ListVPCsCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vpc/ListVPCsCmd.java @@ -28,12 +28,12 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseListTaggedResourcesCmd; -import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; import com.cloud.network.vpc.Vpc; -@Implementation(description="Lists VPCs", responseObject=VpcResponse.class) +@APICommand(description="Lists VPCs", responseObject=VpcResponse.class) public class ListVPCsCmd extends BaseListTaggedResourcesCmd{ public static final Logger s_logger = Logger.getLogger(ListVPCsCmd.class.getName()); private static final String s_name = "listvpcsresponse"; diff --git a/api/src/org/apache/cloudstack/api/command/user/vpc/RestartVPCCmd.java b/api/src/org/apache/cloudstack/api/command/user/vpc/RestartVPCCmd.java index 47065b4d239..5e2ead813e6 100644 --- a/api/src/org/apache/cloudstack/api/command/user/vpc/RestartVPCCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vpc/RestartVPCCmd.java @@ -16,14 +16,10 @@ // under the License. package org.apache.cloudstack.api.command.user.vpc; +import org.apache.cloudstack.api.*; import org.apache.log4j.Logger; -import org.apache.cloudstack.api.ApiConstants; -import org.apache.cloudstack.api.BaseAsyncCmd; -import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.Implementation; -import org.apache.cloudstack.api.Parameter; -import org.apache.cloudstack.api.ServerApiException; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.response.SuccessResponse; import org.apache.cloudstack.api.response.VpcResponse; import com.cloud.event.EventTypes; @@ -33,7 +29,7 @@ import com.cloud.exception.ResourceUnavailableException; import com.cloud.network.vpc.Vpc; import com.cloud.user.Account; -@Implementation(description="Restarts a VPC", responseObject=VpcResponse.class) +@APICommand(description="Restarts a VPC", responseObject=VpcResponse.class) public class RestartVPCCmd extends BaseAsyncCmd{ public static final Logger s_logger = Logger.getLogger(RestartVPCCmd.class.getName()); private static final String _name = "restartvpcresponse"; diff --git a/api/src/org/apache/cloudstack/api/command/user/vpc/UpdateVPCCmd.java b/api/src/org/apache/cloudstack/api/command/user/vpc/UpdateVPCCmd.java index 3299035bd15..4ff9cf59d6b 100644 --- a/api/src/org/apache/cloudstack/api/command/user/vpc/UpdateVPCCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vpc/UpdateVPCCmd.java @@ -21,7 +21,7 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; import org.apache.cloudstack.api.response.VpcResponse; @@ -29,7 +29,7 @@ import com.cloud.event.EventTypes; import com.cloud.network.vpc.Vpc; import com.cloud.user.Account; -@Implementation(description="Updates a VPC", responseObject=VpcResponse.class) +@APICommand(description="Updates a VPC", responseObject=VpcResponse.class) public class UpdateVPCCmd extends BaseAsyncCmd{ public static final Logger s_logger = Logger.getLogger(UpdateVPCCmd.class.getName()); private static final String _name = "updatevpcresponse"; diff --git a/api/src/org/apache/cloudstack/api/command/user/vpn/AddVpnUserCmd.java b/api/src/org/apache/cloudstack/api/command/user/vpn/AddVpnUserCmd.java index ee20521a328..efc4c7d5d92 100644 --- a/api/src/org/apache/cloudstack/api/command/user/vpn/AddVpnUserCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vpn/AddVpnUserCmd.java @@ -21,7 +21,7 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseAsyncCreateCmd; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; import org.apache.cloudstack.api.response.DomainResponse; @@ -33,7 +33,7 @@ import com.cloud.network.VpnUser; import com.cloud.user.Account; import com.cloud.user.UserContext; -@Implementation(description="Adds vpn users", responseObject=VpnUsersResponse.class) +@APICommand(description="Adds vpn users", responseObject=VpnUsersResponse.class) public class AddVpnUserCmd extends BaseAsyncCreateCmd { public static final Logger s_logger = Logger.getLogger(AddVpnUserCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/user/vpn/CreateRemoteAccessVpnCmd.java b/api/src/org/apache/cloudstack/api/command/user/vpn/CreateRemoteAccessVpnCmd.java index 9b307e2c7ab..032cef6aa17 100644 --- a/api/src/org/apache/cloudstack/api/command/user/vpn/CreateRemoteAccessVpnCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vpn/CreateRemoteAccessVpnCmd.java @@ -16,17 +16,12 @@ // under the License. package org.apache.cloudstack.api.command.user.vpn; +import org.apache.cloudstack.api.*; import org.apache.cloudstack.api.response.DomainResponse; import org.apache.cloudstack.api.response.IPAddressResponse; import org.apache.log4j.Logger; -import org.apache.cloudstack.api.ApiConstants; -import org.apache.cloudstack.api.BaseAsyncCmd; -import org.apache.cloudstack.api.BaseAsyncCreateCmd; -import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.Implementation; -import org.apache.cloudstack.api.Parameter; -import org.apache.cloudstack.api.ServerApiException; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.response.RemoteAccessVpnResponse; import com.cloud.event.EventTypes; import com.cloud.exception.InvalidParameterValueException; @@ -35,7 +30,7 @@ import com.cloud.exception.ResourceUnavailableException; import com.cloud.network.IpAddress; import com.cloud.network.RemoteAccessVpn; -@Implementation(description="Creates a l2tp/ipsec remote access vpn", responseObject=RemoteAccessVpnResponse.class) +@APICommand(description="Creates a l2tp/ipsec remote access vpn", responseObject=RemoteAccessVpnResponse.class) public class CreateRemoteAccessVpnCmd extends BaseAsyncCreateCmd { public static final Logger s_logger = Logger.getLogger(CreateRemoteAccessVpnCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/user/vpn/CreateVpnConnectionCmd.java b/api/src/org/apache/cloudstack/api/command/user/vpn/CreateVpnConnectionCmd.java index af0e3900de7..70e8fdff29d 100644 --- a/api/src/org/apache/cloudstack/api/command/user/vpn/CreateVpnConnectionCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vpn/CreateVpnConnectionCmd.java @@ -16,17 +16,12 @@ // under the License. package org.apache.cloudstack.api.command.user.vpn; +import org.apache.cloudstack.api.*; import org.apache.cloudstack.api.response.Site2SiteCustomerGatewayResponse; import org.apache.cloudstack.api.response.Site2SiteVpnGatewayResponse; import org.apache.log4j.Logger; -import org.apache.cloudstack.api.ApiConstants; -import org.apache.cloudstack.api.BaseAsyncCmd; -import org.apache.cloudstack.api.BaseAsyncCreateCmd; -import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.Implementation; -import org.apache.cloudstack.api.Parameter; -import org.apache.cloudstack.api.ServerApiException; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.response.Site2SiteVpnConnectionResponse; import com.cloud.event.EventTypes; import com.cloud.exception.NetworkRuleConflictException; @@ -35,7 +30,7 @@ import com.cloud.network.Site2SiteVpnConnection; import com.cloud.network.Site2SiteVpnGateway; import com.cloud.network.vpc.Vpc; -@Implementation(description="Create site to site vpn connection", responseObject=Site2SiteVpnConnectionResponse.class) +@APICommand(description="Create site to site vpn connection", responseObject=Site2SiteVpnConnectionResponse.class) public class CreateVpnConnectionCmd extends BaseAsyncCreateCmd { public static final Logger s_logger = Logger.getLogger(CreateVpnConnectionCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/user/vpn/CreateVpnCustomerGatewayCmd.java b/api/src/org/apache/cloudstack/api/command/user/vpn/CreateVpnCustomerGatewayCmd.java index 2259ff15834..cde105df17e 100644 --- a/api/src/org/apache/cloudstack/api/command/user/vpn/CreateVpnCustomerGatewayCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vpn/CreateVpnCustomerGatewayCmd.java @@ -22,7 +22,7 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; import org.apache.cloudstack.api.response.Site2SiteCustomerGatewayResponse; @@ -30,7 +30,7 @@ import com.cloud.event.EventTypes; import com.cloud.network.Site2SiteCustomerGateway; import com.cloud.user.UserContext; -@Implementation(description="Creates site to site vpn customer gateway", responseObject=Site2SiteCustomerGatewayResponse.class) +@APICommand(description="Creates site to site vpn customer gateway", responseObject=Site2SiteCustomerGatewayResponse.class) public class CreateVpnCustomerGatewayCmd extends BaseAsyncCmd { public static final Logger s_logger = Logger.getLogger(CreateVpnCustomerGatewayCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/user/vpn/CreateVpnGatewayCmd.java b/api/src/org/apache/cloudstack/api/command/user/vpn/CreateVpnGatewayCmd.java index ec81594642a..5a227ffcd75 100644 --- a/api/src/org/apache/cloudstack/api/command/user/vpn/CreateVpnGatewayCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vpn/CreateVpnGatewayCmd.java @@ -22,7 +22,7 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; import org.apache.cloudstack.api.response.Site2SiteVpnGatewayResponse; @@ -30,7 +30,7 @@ import com.cloud.event.EventTypes; import com.cloud.network.Site2SiteVpnGateway; import com.cloud.network.vpc.Vpc; -@Implementation(description="Creates site to site vpn local gateway", responseObject=Site2SiteVpnGatewayResponse.class) +@APICommand(description="Creates site to site vpn local gateway", responseObject=Site2SiteVpnGatewayResponse.class) public class CreateVpnGatewayCmd extends BaseAsyncCmd { public static final Logger s_logger = Logger.getLogger(CreateVpnGatewayCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/user/vpn/DeleteRemoteAccessVpnCmd.java b/api/src/org/apache/cloudstack/api/command/user/vpn/DeleteRemoteAccessVpnCmd.java index c9a57f31d9b..eb2ae3c3ba0 100644 --- a/api/src/org/apache/cloudstack/api/command/user/vpn/DeleteRemoteAccessVpnCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vpn/DeleteRemoteAccessVpnCmd.java @@ -16,13 +16,13 @@ // under the License. package org.apache.cloudstack.api.command.user.vpn; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.response.AccountResponse; import org.apache.cloudstack.api.response.IPAddressResponse; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseAsyncCmd; -import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.response.SuccessResponse; import com.cloud.event.EventTypes; @@ -31,7 +31,7 @@ import com.cloud.exception.ResourceUnavailableException; import com.cloud.network.RemoteAccessVpn; import com.cloud.user.UserContext; -@Implementation(description="Destroys a l2tp/ipsec remote access vpn", responseObject=SuccessResponse.class) +@APICommand(description="Destroys a l2tp/ipsec remote access vpn", responseObject=SuccessResponse.class) public class DeleteRemoteAccessVpnCmd extends BaseAsyncCmd { public static final Logger s_logger = Logger.getLogger(DeleteRemoteAccessVpnCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/user/vpn/DeleteVpnConnectionCmd.java b/api/src/org/apache/cloudstack/api/command/user/vpn/DeleteVpnConnectionCmd.java index ac736a6c739..0fd4717269e 100644 --- a/api/src/org/apache/cloudstack/api/command/user/vpn/DeleteVpnConnectionCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vpn/DeleteVpnConnectionCmd.java @@ -16,22 +16,18 @@ // under the License. package org.apache.cloudstack.api.command.user.vpn; +import org.apache.cloudstack.api.*; import org.apache.cloudstack.api.response.Site2SiteVpnConnectionResponse; import org.apache.log4j.Logger; -import org.apache.cloudstack.api.ApiConstants; -import org.apache.cloudstack.api.BaseAsyncCmd; -import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.Implementation; -import org.apache.cloudstack.api.Parameter; -import org.apache.cloudstack.api.ServerApiException; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.response.SuccessResponse; import com.cloud.event.EventTypes; import com.cloud.exception.ResourceUnavailableException; import com.cloud.network.Site2SiteVpnConnection; import com.cloud.user.Account; -@Implementation(description="Delete site to site vpn connection", responseObject=SuccessResponse.class) +@APICommand(description="Delete site to site vpn connection", responseObject=SuccessResponse.class) public class DeleteVpnConnectionCmd extends BaseAsyncCmd { public static final Logger s_logger = Logger.getLogger(DeleteVpnConnectionCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/user/vpn/DeleteVpnCustomerGatewayCmd.java b/api/src/org/apache/cloudstack/api/command/user/vpn/DeleteVpnCustomerGatewayCmd.java index efb59bfe461..338597df870 100644 --- a/api/src/org/apache/cloudstack/api/command/user/vpn/DeleteVpnCustomerGatewayCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vpn/DeleteVpnCustomerGatewayCmd.java @@ -16,21 +16,17 @@ // under the License. package org.apache.cloudstack.api.command.user.vpn; +import org.apache.cloudstack.api.*; import org.apache.cloudstack.api.response.Site2SiteCustomerGatewayResponse; import org.apache.log4j.Logger; -import org.apache.cloudstack.api.ApiConstants; -import org.apache.cloudstack.api.BaseAsyncCmd; -import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.Implementation; -import org.apache.cloudstack.api.Parameter; -import org.apache.cloudstack.api.ServerApiException; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.response.SuccessResponse; import com.cloud.event.EventTypes; import com.cloud.network.Site2SiteCustomerGateway; import com.cloud.user.Account; -@Implementation(description="Delete site to site vpn customer gateway", responseObject=SuccessResponse.class) +@APICommand(description="Delete site to site vpn customer gateway", responseObject=SuccessResponse.class) public class DeleteVpnCustomerGatewayCmd extends BaseAsyncCmd { public static final Logger s_logger = Logger.getLogger(DeleteVpnCustomerGatewayCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/user/vpn/DeleteVpnGatewayCmd.java b/api/src/org/apache/cloudstack/api/command/user/vpn/DeleteVpnGatewayCmd.java index 29ef56c93a6..32a2021b9aa 100644 --- a/api/src/org/apache/cloudstack/api/command/user/vpn/DeleteVpnGatewayCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vpn/DeleteVpnGatewayCmd.java @@ -16,21 +16,17 @@ // under the License. package org.apache.cloudstack.api.command.user.vpn; +import org.apache.cloudstack.api.*; import org.apache.cloudstack.api.response.Site2SiteVpnGatewayResponse; import org.apache.log4j.Logger; -import org.apache.cloudstack.api.ApiConstants; -import org.apache.cloudstack.api.BaseAsyncCmd; -import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.Implementation; -import org.apache.cloudstack.api.Parameter; -import org.apache.cloudstack.api.ServerApiException; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.response.SuccessResponse; import com.cloud.event.EventTypes; import com.cloud.network.Site2SiteVpnGateway; import com.cloud.user.Account; -@Implementation(description="Delete site to site vpn gateway", responseObject=SuccessResponse.class) +@APICommand(description="Delete site to site vpn gateway", responseObject=SuccessResponse.class) public class DeleteVpnGatewayCmd extends BaseAsyncCmd { public static final Logger s_logger = Logger.getLogger(DeleteVpnGatewayCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/user/vpn/ListRemoteAccessVpnsCmd.java b/api/src/org/apache/cloudstack/api/command/user/vpn/ListRemoteAccessVpnsCmd.java index 5c6a5208ef2..4a96d0ebd3b 100644 --- a/api/src/org/apache/cloudstack/api/command/user/vpn/ListRemoteAccessVpnsCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vpn/ListRemoteAccessVpnsCmd.java @@ -24,14 +24,14 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseListProjectAndAccountResourcesCmd; -import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.response.ListResponse; import org.apache.cloudstack.api.response.RemoteAccessVpnResponse; import com.cloud.network.RemoteAccessVpn; import com.cloud.utils.Pair; -@Implementation(description="Lists remote access vpns", responseObject=RemoteAccessVpnResponse.class) +@APICommand(description="Lists remote access vpns", responseObject=RemoteAccessVpnResponse.class) public class ListRemoteAccessVpnsCmd extends BaseListProjectAndAccountResourcesCmd { public static final Logger s_logger = Logger.getLogger (ListRemoteAccessVpnsCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/user/vpn/ListVpnConnectionsCmd.java b/api/src/org/apache/cloudstack/api/command/user/vpn/ListVpnConnectionsCmd.java index f671f33aa98..d1c94227b12 100644 --- a/api/src/org/apache/cloudstack/api/command/user/vpn/ListVpnConnectionsCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vpn/ListVpnConnectionsCmd.java @@ -19,19 +19,19 @@ package org.apache.cloudstack.api.command.user.vpn; import java.util.ArrayList; import java.util.List; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.response.VpcResponse; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseListProjectAndAccountResourcesCmd; -import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.response.ListResponse; import org.apache.cloudstack.api.response.Site2SiteVpnConnectionResponse; import com.cloud.network.Site2SiteVpnConnection; import com.cloud.utils.Pair; -@Implementation(description="Lists site to site vpn connection gateways", responseObject=Site2SiteVpnConnectionResponse.class) +@APICommand(description="Lists site to site vpn connection gateways", responseObject=Site2SiteVpnConnectionResponse.class) public class ListVpnConnectionsCmd extends BaseListProjectAndAccountResourcesCmd { public static final Logger s_logger = Logger.getLogger (ListVpnConnectionsCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/user/vpn/ListVpnCustomerGatewaysCmd.java b/api/src/org/apache/cloudstack/api/command/user/vpn/ListVpnCustomerGatewaysCmd.java index c279a77009c..98880f1908f 100644 --- a/api/src/org/apache/cloudstack/api/command/user/vpn/ListVpnCustomerGatewaysCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vpn/ListVpnCustomerGatewaysCmd.java @@ -19,18 +19,18 @@ package org.apache.cloudstack.api.command.user.vpn; import java.util.ArrayList; import java.util.List; +import org.apache.cloudstack.api.APICommand; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseListProjectAndAccountResourcesCmd; -import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.response.ListResponse; import org.apache.cloudstack.api.response.Site2SiteCustomerGatewayResponse; import com.cloud.network.Site2SiteCustomerGateway; import com.cloud.utils.Pair; -@Implementation(description="Lists site to site vpn customer gateways", responseObject=Site2SiteCustomerGatewayResponse.class) +@APICommand(description="Lists site to site vpn customer gateways", responseObject=Site2SiteCustomerGatewayResponse.class) public class ListVpnCustomerGatewaysCmd extends BaseListProjectAndAccountResourcesCmd { public static final Logger s_logger = Logger.getLogger (ListVpnCustomerGatewaysCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/user/vpn/ListVpnGatewaysCmd.java b/api/src/org/apache/cloudstack/api/command/user/vpn/ListVpnGatewaysCmd.java index 2c7a83e7242..3fc5344b488 100644 --- a/api/src/org/apache/cloudstack/api/command/user/vpn/ListVpnGatewaysCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vpn/ListVpnGatewaysCmd.java @@ -19,19 +19,19 @@ package org.apache.cloudstack.api.command.user.vpn; import java.util.ArrayList; import java.util.List; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.response.VpcResponse; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseListProjectAndAccountResourcesCmd; -import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.response.ListResponse; import org.apache.cloudstack.api.response.Site2SiteVpnGatewayResponse; import com.cloud.network.Site2SiteVpnGateway; import com.cloud.utils.Pair; -@Implementation(description="Lists site 2 site vpn gateways", responseObject=Site2SiteVpnGatewayResponse.class) +@APICommand(description="Lists site 2 site vpn gateways", responseObject=Site2SiteVpnGatewayResponse.class) public class ListVpnGatewaysCmd extends BaseListProjectAndAccountResourcesCmd { public static final Logger s_logger = Logger.getLogger (ListVpnGatewaysCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/user/vpn/ListVpnUsersCmd.java b/api/src/org/apache/cloudstack/api/command/user/vpn/ListVpnUsersCmd.java index 6ac950e407a..e1b5e4ed271 100644 --- a/api/src/org/apache/cloudstack/api/command/user/vpn/ListVpnUsersCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vpn/ListVpnUsersCmd.java @@ -19,18 +19,18 @@ package org.apache.cloudstack.api.command.user.vpn; import java.util.ArrayList; import java.util.List; +import org.apache.cloudstack.api.APICommand; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseListProjectAndAccountResourcesCmd; -import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.response.ListResponse; import org.apache.cloudstack.api.response.VpnUsersResponse; import com.cloud.network.VpnUser; import com.cloud.utils.Pair; -@Implementation(description="Lists vpn users", responseObject=VpnUsersResponse.class) +@APICommand(description="Lists vpn users", responseObject=VpnUsersResponse.class) public class ListVpnUsersCmd extends BaseListProjectAndAccountResourcesCmd { public static final Logger s_logger = Logger.getLogger (ListVpnUsersCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/user/vpn/RemoveVpnUserCmd.java b/api/src/org/apache/cloudstack/api/command/user/vpn/RemoveVpnUserCmd.java index 2dbb0ade3e3..49edc415780 100644 --- a/api/src/org/apache/cloudstack/api/command/user/vpn/RemoveVpnUserCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vpn/RemoveVpnUserCmd.java @@ -21,7 +21,7 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; import org.apache.cloudstack.api.response.DomainResponse; @@ -31,7 +31,7 @@ import com.cloud.event.EventTypes; import com.cloud.user.Account; import com.cloud.user.UserContext; -@Implementation(description="Removes vpn user", responseObject=SuccessResponse.class) +@APICommand(description="Removes vpn user", responseObject=SuccessResponse.class) public class RemoveVpnUserCmd extends BaseAsyncCmd { public static final Logger s_logger = Logger.getLogger(RemoveVpnUserCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/user/vpn/ResetVpnConnectionCmd.java b/api/src/org/apache/cloudstack/api/command/user/vpn/ResetVpnConnectionCmd.java index 770e8aae7d3..8fff0382591 100644 --- a/api/src/org/apache/cloudstack/api/command/user/vpn/ResetVpnConnectionCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vpn/ResetVpnConnectionCmd.java @@ -16,15 +16,11 @@ // under the License. package org.apache.cloudstack.api.command.user.vpn; +import org.apache.cloudstack.api.*; import org.apache.cloudstack.api.response.DomainResponse; import org.apache.log4j.Logger; -import org.apache.cloudstack.api.ApiConstants; -import org.apache.cloudstack.api.BaseAsyncCmd; -import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.Implementation; -import org.apache.cloudstack.api.Parameter; -import org.apache.cloudstack.api.ServerApiException; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.response.Site2SiteVpnConnectionResponse; import com.cloud.event.EventTypes; import com.cloud.exception.ResourceUnavailableException; @@ -32,7 +28,7 @@ import com.cloud.network.Site2SiteVpnConnection; import com.cloud.user.Account; import com.cloud.user.UserContext; -@Implementation(description="Reset site to site vpn connection", responseObject=Site2SiteVpnConnectionResponse.class) +@APICommand(description="Reset site to site vpn connection", responseObject=Site2SiteVpnConnectionResponse.class) public class ResetVpnConnectionCmd extends BaseAsyncCmd { public static final Logger s_logger = Logger.getLogger(ResetVpnConnectionCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/user/vpn/UpdateVpnCustomerGatewayCmd.java b/api/src/org/apache/cloudstack/api/command/user/vpn/UpdateVpnCustomerGatewayCmd.java index 9a0ba4e032b..b602e7487fd 100644 --- a/api/src/org/apache/cloudstack/api/command/user/vpn/UpdateVpnCustomerGatewayCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vpn/UpdateVpnCustomerGatewayCmd.java @@ -16,21 +16,17 @@ // under the License. package org.apache.cloudstack.api.command.user.vpn; +import org.apache.cloudstack.api.*; import org.apache.cloudstack.api.response.DomainResponse; import org.apache.log4j.Logger; -import org.apache.cloudstack.api.ApiConstants; -import org.apache.cloudstack.api.BaseAsyncCmd; -import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.Implementation; -import org.apache.cloudstack.api.Parameter; -import org.apache.cloudstack.api.ServerApiException; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.response.Site2SiteCustomerGatewayResponse; import com.cloud.event.EventTypes; import com.cloud.network.Site2SiteCustomerGateway; import com.cloud.user.UserContext; -@Implementation(description="Update site to site vpn customer gateway", responseObject=Site2SiteCustomerGatewayResponse.class) +@APICommand(description="Update site to site vpn customer gateway", responseObject=Site2SiteCustomerGatewayResponse.class) public class UpdateVpnCustomerGatewayCmd extends BaseAsyncCmd { public static final Logger s_logger = Logger.getLogger(UpdateVpnCustomerGatewayCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/user/zone/ListZonesByCmd.java b/api/src/org/apache/cloudstack/api/command/user/zone/ListZonesByCmd.java index dbe775fdad6..d561ed33929 100644 --- a/api/src/org/apache/cloudstack/api/command/user/zone/ListZonesByCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/zone/ListZonesByCmd.java @@ -19,18 +19,18 @@ package org.apache.cloudstack.api.command.user.zone; import java.util.ArrayList; import java.util.List; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.response.DomainResponse; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseListCmd; -import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.response.ListResponse; import org.apache.cloudstack.api.response.ZoneResponse; import com.cloud.dc.DataCenter; -@Implementation(description="Lists zones", responseObject=ZoneResponse.class) +@APICommand(description="Lists zones", responseObject=ZoneResponse.class) public class ListZonesByCmd extends BaseListCmd { public static final Logger s_logger = Logger.getLogger(ListZonesByCmd.class.getName()); diff --git a/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/AssociateLunCmd.java b/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/AssociateLunCmd.java index bf8fc50b283..99e4e5fd40f 100644 --- a/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/AssociateLunCmd.java +++ b/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/AssociateLunCmd.java @@ -22,7 +22,7 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; import com.cloud.exception.InvalidParameterValueException; @@ -31,7 +31,7 @@ import com.cloud.server.ManagementService; import com.cloud.server.api.response.netapp.AssociateLunCmdResponse; import com.cloud.utils.component.ComponentLocator; -@Implementation(description="Associate a LUN with a guest IQN", responseObject = AssociateLunCmdResponse.class) +@APICommand(description="Associate a LUN with a guest IQN", responseObject = AssociateLunCmdResponse.class) public class AssociateLunCmd extends BaseCmd { public static final Logger s_logger = Logger.getLogger(AssociateLunCmd.class.getName()); private static final String s_name = "associatelunresponse"; diff --git a/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/CreateLunCmd.java b/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/CreateLunCmd.java index 84ef5e29bc5..026eb140adb 100644 --- a/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/CreateLunCmd.java +++ b/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/CreateLunCmd.java @@ -22,7 +22,7 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; import com.cloud.exception.ConcurrentOperationException; @@ -35,7 +35,7 @@ import com.cloud.server.ManagementService; import com.cloud.server.api.response.netapp.CreateLunCmdResponse; import com.cloud.utils.component.ComponentLocator; -@Implementation(description="Create a LUN from a pool", responseObject = CreateLunCmdResponse.class) +@APICommand(description="Create a LUN from a pool", responseObject = CreateLunCmdResponse.class) public class CreateLunCmd extends BaseCmd { public static final Logger s_logger = Logger.getLogger(CreateLunCmd.class.getName()); private static final String s_name = "createlunresponse"; diff --git a/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/CreateVolumeOnFilerCmd.java b/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/CreateVolumeOnFilerCmd.java index d37e2d40323..c46a146d5c4 100644 --- a/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/CreateVolumeOnFilerCmd.java +++ b/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/CreateVolumeOnFilerCmd.java @@ -21,7 +21,7 @@ import java.rmi.ServerException; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; import com.cloud.exception.ConcurrentOperationException; @@ -34,7 +34,7 @@ import com.cloud.server.ManagementService; import com.cloud.server.api.response.netapp.CreateVolumeOnFilerCmdResponse; import com.cloud.utils.component.ComponentLocator; -@Implementation(description="Create a volume", responseObject = CreateVolumeOnFilerCmdResponse.class) +@APICommand(description="Create a volume", responseObject = CreateVolumeOnFilerCmdResponse.class) public class CreateVolumeOnFilerCmd extends BaseCmd { private static final String s_name = "createvolumeresponse"; diff --git a/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/CreateVolumePoolCmd.java b/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/CreateVolumePoolCmd.java index e0cff197d1a..0f9a4e76ff2 100644 --- a/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/CreateVolumePoolCmd.java +++ b/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/CreateVolumePoolCmd.java @@ -20,7 +20,7 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; import com.cloud.exception.ConcurrentOperationException; @@ -33,7 +33,7 @@ import com.cloud.server.ManagementService; import com.cloud.server.api.response.netapp.CreateVolumePoolCmdResponse; import com.cloud.utils.component.ComponentLocator; -@Implementation(description="Create a pool", responseObject = CreateVolumePoolCmdResponse.class) +@APICommand(description="Create a pool", responseObject = CreateVolumePoolCmdResponse.class) public class CreateVolumePoolCmd extends BaseCmd { public static final Logger s_logger = Logger.getLogger(CreateVolumePoolCmd.class.getName()); private static final String s_name = "createpoolresponse"; diff --git a/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/DeleteVolumePoolCmd.java b/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/DeleteVolumePoolCmd.java index 11c408fe68d..e26a11edc6f 100644 --- a/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/DeleteVolumePoolCmd.java +++ b/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/DeleteVolumePoolCmd.java @@ -21,7 +21,7 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; import com.cloud.exception.ConcurrentOperationException; @@ -35,7 +35,7 @@ import com.cloud.server.ManagementService; import com.cloud.server.api.response.netapp.DeleteVolumePoolCmdResponse; import com.cloud.utils.component.ComponentLocator; -@Implementation(description="Delete a pool", responseObject = DeleteVolumePoolCmdResponse.class) +@APICommand(description="Delete a pool", responseObject = DeleteVolumePoolCmdResponse.class) public class DeleteVolumePoolCmd extends BaseCmd { public static final Logger s_logger = Logger.getLogger(DeleteVolumePoolCmd.class.getName()); private static final String s_name = "deletepoolresponse"; diff --git a/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/DestroyLunCmd.java b/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/DestroyLunCmd.java index ecf09ced1b6..c6499ba791f 100644 --- a/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/DestroyLunCmd.java +++ b/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/DestroyLunCmd.java @@ -22,7 +22,7 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; import com.cloud.exception.ConcurrentOperationException; @@ -35,7 +35,7 @@ import com.cloud.server.ManagementService; import com.cloud.server.api.response.netapp.DeleteLUNCmdResponse; import com.cloud.utils.component.ComponentLocator; -@Implementation(description="Destroy a LUN", responseObject = DeleteLUNCmdResponse.class) +@APICommand(description="Destroy a LUN", responseObject = DeleteLUNCmdResponse.class) public class DestroyLunCmd extends BaseCmd { public static final Logger s_logger = Logger.getLogger(DestroyLunCmd.class.getName()); diff --git a/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/DestroyVolumeOnFilerCmd.java b/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/DestroyVolumeOnFilerCmd.java index c1223336446..c695802e17f 100644 --- a/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/DestroyVolumeOnFilerCmd.java +++ b/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/DestroyVolumeOnFilerCmd.java @@ -18,13 +18,10 @@ package com.cloud.api.commands.netapp; import java.rmi.ServerException; +import org.apache.cloudstack.api.*; import org.apache.log4j.Logger; -import org.apache.cloudstack.api.ApiConstants; -import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.Implementation; -import org.apache.cloudstack.api.Parameter; -import org.apache.cloudstack.api.ServerApiException; +import org.apache.cloudstack.api.APICommand; import com.cloud.exception.ConcurrentOperationException; import com.cloud.exception.InsufficientCapacityException; import com.cloud.exception.InvalidParameterValueException; @@ -36,7 +33,7 @@ import com.cloud.server.ManagementService; import com.cloud.server.api.response.netapp.DeleteVolumeOnFilerCmdResponse; import com.cloud.utils.component.ComponentLocator; -@Implementation(description="Destroy a Volume", responseObject = DeleteVolumeOnFilerCmdResponse.class) +@APICommand(description="Destroy a Volume", responseObject = DeleteVolumeOnFilerCmdResponse.class) public class DestroyVolumeOnFilerCmd extends BaseCmd { public static final Logger s_logger = Logger.getLogger(DestroyVolumeOnFilerCmd.class.getName()); private static final String s_name = "destroyvolumeresponse"; diff --git a/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/DissociateLunCmd.java b/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/DissociateLunCmd.java index 217c4d68700..a44852882ec 100644 --- a/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/DissociateLunCmd.java +++ b/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/DissociateLunCmd.java @@ -18,13 +18,10 @@ package com.cloud.api.commands.netapp; import java.rmi.ServerException; +import org.apache.cloudstack.api.*; import org.apache.log4j.Logger; -import org.apache.cloudstack.api.ApiConstants; -import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.Implementation; -import org.apache.cloudstack.api.Parameter; -import org.apache.cloudstack.api.ServerApiException; +import org.apache.cloudstack.api.APICommand; import com.cloud.exception.ConcurrentOperationException; import com.cloud.exception.InsufficientCapacityException; import com.cloud.exception.InvalidParameterValueException; @@ -35,7 +32,7 @@ import com.cloud.server.ManagementService; import com.cloud.server.api.response.netapp.DissociateLunCmdResponse; import com.cloud.utils.component.ComponentLocator; -@Implementation(description="Dissociate a LUN", responseObject = DissociateLunCmdResponse.class) +@APICommand(description="Dissociate a LUN", responseObject = DissociateLunCmdResponse.class) public class DissociateLunCmd extends BaseCmd { public static final Logger s_logger = Logger.getLogger(DissociateLunCmd.class.getName()); private static final String s_name = "dissociatelunresponse"; diff --git a/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/ListLunsCmd.java b/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/ListLunsCmd.java index 4b8254e35bb..4de052ddd91 100644 --- a/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/ListLunsCmd.java +++ b/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/ListLunsCmd.java @@ -23,7 +23,7 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; import org.apache.cloudstack.api.response.ListResponse; @@ -38,7 +38,7 @@ import com.cloud.server.ManagementService; import com.cloud.server.api.response.netapp.ListLunsCmdResponse; import com.cloud.utils.component.ComponentLocator; -@Implementation(description="List LUN", responseObject = ListLunsCmdResponse.class) +@APICommand(description="List LUN", responseObject = ListLunsCmdResponse.class) public class ListLunsCmd extends BaseCmd { public static final Logger s_logger = Logger.getLogger(ListLunsCmd.class.getName()); diff --git a/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/ListVolumePoolsCmd.java b/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/ListVolumePoolsCmd.java index 78033ff0893..00257eea94e 100644 --- a/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/ListVolumePoolsCmd.java +++ b/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/ListVolumePoolsCmd.java @@ -22,7 +22,7 @@ import java.util.List; import org.apache.log4j.Logger; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.ServerApiException; import org.apache.cloudstack.api.response.ListResponse; import com.cloud.exception.ConcurrentOperationException; @@ -36,7 +36,7 @@ import com.cloud.server.ManagementService; import com.cloud.server.api.response.netapp.ListVolumePoolsCmdResponse; import com.cloud.utils.component.ComponentLocator; -@Implementation(description="List Pool", responseObject = ListVolumePoolsCmdResponse.class) +@APICommand(description="List Pool", responseObject = ListVolumePoolsCmdResponse.class) public class ListVolumePoolsCmd extends BaseCmd { public static final Logger s_logger = Logger.getLogger(ListVolumePoolsCmd.class.getName()); private static final String s_name = "listpoolresponse"; diff --git a/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/ListVolumesOnFilerCmd.java b/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/ListVolumesOnFilerCmd.java index 597af5dfef1..258a3cf09b7 100644 --- a/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/ListVolumesOnFilerCmd.java +++ b/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/ListVolumesOnFilerCmd.java @@ -19,13 +19,10 @@ package com.cloud.api.commands.netapp; import java.util.ArrayList; import java.util.List; +import org.apache.cloudstack.api.*; import org.apache.log4j.Logger; -import org.apache.cloudstack.api.ApiConstants; -import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.Implementation; -import org.apache.cloudstack.api.Parameter; -import org.apache.cloudstack.api.ServerApiException; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.response.ListResponse; import com.cloud.exception.ConcurrentOperationException; import com.cloud.exception.InsufficientCapacityException; @@ -38,7 +35,7 @@ import com.cloud.server.ManagementService; import com.cloud.server.api.response.netapp.ListVolumesOnFilerCmdResponse; import com.cloud.utils.component.ComponentLocator; -@Implementation(description="List Volumes", responseObject = ListVolumesOnFilerCmdResponse.class) +@APICommand(description="List Volumes", responseObject = ListVolumesOnFilerCmdResponse.class) public class ListVolumesOnFilerCmd extends BaseCmd { public static final Logger s_logger = Logger.getLogger(ListVolumesOnFilerCmd.class.getName()); private static final String s_name = "listvolumesresponse"; diff --git a/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/ModifyVolumePoolCmd.java b/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/ModifyVolumePoolCmd.java index b6186bdb849..ad77cbe0168 100644 --- a/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/ModifyVolumePoolCmd.java +++ b/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/ModifyVolumePoolCmd.java @@ -21,7 +21,7 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; import com.cloud.exception.ConcurrentOperationException; @@ -33,7 +33,7 @@ import com.cloud.server.ManagementService; import com.cloud.server.api.response.netapp.ModifyVolumePoolCmdResponse; import com.cloud.utils.component.ComponentLocator; -@Implementation(description="Modify pool", responseObject = ModifyVolumePoolCmdResponse.class) +@APICommand(description="Modify pool", responseObject = ModifyVolumePoolCmdResponse.class) public class ModifyVolumePoolCmd extends BaseCmd { public static final Logger s_logger = Logger.getLogger(ModifyVolumePoolCmd.class.getName()); private static final String s_name = "modifypoolresponse"; diff --git a/plugins/hypervisors/simulator/src/com/cloud/api/commands/ConfigureSimulator.java b/plugins/hypervisors/simulator/src/com/cloud/api/commands/ConfigureSimulator.java index 92f89488221..713c489df21 100755 --- a/plugins/hypervisors/simulator/src/com/cloud/api/commands/ConfigureSimulator.java +++ b/plugins/hypervisors/simulator/src/com/cloud/api/commands/ConfigureSimulator.java @@ -21,7 +21,7 @@ import org.apache.log4j.Logger; import com.cloud.agent.manager.SimulatorManager; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; import org.apache.cloudstack.api.response.SuccessResponse; @@ -33,7 +33,7 @@ import com.cloud.server.ManagementService; import com.cloud.user.Account; import com.cloud.utils.component.ComponentLocator; -@Implementation(description="configure simulator", responseObject=SuccessResponse.class) +@APICommand(description="configure simulator", responseObject=SuccessResponse.class) public class ConfigureSimulator extends BaseCmd { public static final Logger s_logger = Logger.getLogger(ConfigureSimulator.class.getName()); private static final String s_name = "configuresimulatorresponse"; diff --git a/plugins/hypervisors/vmware/src/com/cloud/api/commands/DeleteCiscoNexusVSMCmd.java b/plugins/hypervisors/vmware/src/com/cloud/api/commands/DeleteCiscoNexusVSMCmd.java index 8c228685a8e..edab31bf384 100644 --- a/plugins/hypervisors/vmware/src/com/cloud/api/commands/DeleteCiscoNexusVSMCmd.java +++ b/plugins/hypervisors/vmware/src/com/cloud/api/commands/DeleteCiscoNexusVSMCmd.java @@ -22,7 +22,7 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.IdentityMapper; -import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.PlugService; import org.apache.cloudstack.api.ServerApiException; @@ -35,7 +35,7 @@ import com.cloud.exception.ResourceUnavailableException; import com.cloud.network.element.CiscoNexusVSMElementService; import com.cloud.user.Account; -@Implementation(responseObject=SuccessResponse.class, description=" delete a Cisco Nexus VSM device") +@APICommand(responseObject=SuccessResponse.class, description=" delete a Cisco Nexus VSM device") public class DeleteCiscoNexusVSMCmd extends BaseAsyncCmd { public static final Logger s_logger = Logger.getLogger(DeleteCiscoNexusVSMCmd.class.getName()); diff --git a/plugins/hypervisors/vmware/src/com/cloud/api/commands/DisableCiscoNexusVSMCmd.java b/plugins/hypervisors/vmware/src/com/cloud/api/commands/DisableCiscoNexusVSMCmd.java index 4048e88af19..12a5d32e047 100644 --- a/plugins/hypervisors/vmware/src/com/cloud/api/commands/DisableCiscoNexusVSMCmd.java +++ b/plugins/hypervisors/vmware/src/com/cloud/api/commands/DisableCiscoNexusVSMCmd.java @@ -22,7 +22,7 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.IdentityMapper; -import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.PlugService; import org.apache.cloudstack.api.ServerApiException; @@ -36,7 +36,7 @@ import com.cloud.event.EventTypes; import com.cloud.api.response.CiscoNexusVSMResponse; import com.cloud.network.CiscoNexusVSMDevice; -@Implementation(responseObject=CiscoNexusVSMResponse.class, description="disable a Cisco Nexus VSM device") +@APICommand(responseObject=CiscoNexusVSMResponse.class, description="disable a Cisco Nexus VSM device") public class DisableCiscoNexusVSMCmd extends BaseAsyncCmd { public static final Logger s_logger = Logger.getLogger(DisableCiscoNexusVSMCmd.class.getName()); diff --git a/plugins/hypervisors/vmware/src/com/cloud/api/commands/EnableCiscoNexusVSMCmd.java b/plugins/hypervisors/vmware/src/com/cloud/api/commands/EnableCiscoNexusVSMCmd.java index 5706b901d6e..25288fbf3f0 100644 --- a/plugins/hypervisors/vmware/src/com/cloud/api/commands/EnableCiscoNexusVSMCmd.java +++ b/plugins/hypervisors/vmware/src/com/cloud/api/commands/EnableCiscoNexusVSMCmd.java @@ -17,15 +17,10 @@ package com.cloud.api.commands; +import org.apache.cloudstack.api.*; import org.apache.log4j.Logger; -import org.apache.cloudstack.api.ApiConstants; -import org.apache.cloudstack.api.BaseAsyncCmd; -import org.apache.cloudstack.api.IdentityMapper; -import org.apache.cloudstack.api.Implementation; -import org.apache.cloudstack.api.Parameter; -import org.apache.cloudstack.api.PlugService; -import org.apache.cloudstack.api.ServerApiException; +import org.apache.cloudstack.api.APICommand; import com.cloud.event.EventTypes; import com.cloud.exception.ConcurrentOperationException; import com.cloud.exception.InsufficientCapacityException; @@ -36,7 +31,7 @@ import com.cloud.user.Account; import com.cloud.api.response.CiscoNexusVSMResponse; import com.cloud.network.CiscoNexusVSMDevice; -@Implementation(responseObject=CiscoNexusVSMResponse.class, description="Enable a Cisco Nexus VSM device") +@APICommand(responseObject=CiscoNexusVSMResponse.class, description="Enable a Cisco Nexus VSM device") public class EnableCiscoNexusVSMCmd extends BaseAsyncCmd { public static final Logger s_logger = Logger.getLogger(EnableCiscoNexusVSMCmd.class.getName()); diff --git a/plugins/hypervisors/vmware/src/com/cloud/api/commands/ListCiscoNexusVSMsCmd.java b/plugins/hypervisors/vmware/src/com/cloud/api/commands/ListCiscoNexusVSMsCmd.java index 6c8c79b5305..657614fa208 100755 --- a/plugins/hypervisors/vmware/src/com/cloud/api/commands/ListCiscoNexusVSMsCmd.java +++ b/plugins/hypervisors/vmware/src/com/cloud/api/commands/ListCiscoNexusVSMsCmd.java @@ -22,7 +22,7 @@ import org.apache.cloudstack.api.response.ZoneResponse; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseListCmd; -import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.PlugService; import org.apache.cloudstack.api.ServerApiException; @@ -39,7 +39,7 @@ import com.cloud.user.Account; import java.util.ArrayList; import java.util.List; -@Implementation(responseObject=CiscoNexusVSMResponse.class, description="Retrieves a Cisco Nexus 1000v Virtual Switch Manager device associated with a Cluster") +@APICommand(responseObject=CiscoNexusVSMResponse.class, description="Retrieves a Cisco Nexus 1000v Virtual Switch Manager device associated with a Cluster") public class ListCiscoNexusVSMsCmd extends BaseListCmd { /** diff --git a/plugins/network-elements/f5/src/com/cloud/api/commands/AddExternalLoadBalancerCmd.java b/plugins/network-elements/f5/src/com/cloud/api/commands/AddExternalLoadBalancerCmd.java index 635c5e871bc..bb8d05e03e3 100644 --- a/plugins/network-elements/f5/src/com/cloud/api/commands/AddExternalLoadBalancerCmd.java +++ b/plugins/network-elements/f5/src/com/cloud/api/commands/AddExternalLoadBalancerCmd.java @@ -22,8 +22,7 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.IdentityMapper; -import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.PlugService; import org.apache.cloudstack.api.ServerApiException; @@ -34,7 +33,7 @@ import com.cloud.server.api.response.ExternalLoadBalancerResponse; import com.cloud.user.Account; import com.cloud.utils.exception.CloudRuntimeException; -@Implementation(description="Adds F5 external load balancer appliance.", responseObject = ExternalLoadBalancerResponse.class) +@APICommand(description="Adds F5 external load balancer appliance.", responseObject = ExternalLoadBalancerResponse.class) @Deprecated // API supported only for backward compatibility. public class AddExternalLoadBalancerCmd extends BaseCmd { public static final Logger s_logger = Logger.getLogger(AddExternalLoadBalancerCmd.class.getName()); diff --git a/plugins/network-elements/f5/src/com/cloud/api/commands/AddF5LoadBalancerCmd.java b/plugins/network-elements/f5/src/com/cloud/api/commands/AddF5LoadBalancerCmd.java index 1069e4e29c5..35590ccdc99 100644 --- a/plugins/network-elements/f5/src/com/cloud/api/commands/AddF5LoadBalancerCmd.java +++ b/plugins/network-elements/f5/src/com/cloud/api/commands/AddF5LoadBalancerCmd.java @@ -17,16 +17,11 @@ package com.cloud.api.commands; +import org.apache.cloudstack.api.*; import org.apache.cloudstack.api.response.PhysicalNetworkResponse; import org.apache.log4j.Logger; -import org.apache.cloudstack.api.ApiConstants; -import org.apache.cloudstack.api.BaseAsyncCmd; -import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.Implementation; -import org.apache.cloudstack.api.Parameter; -import org.apache.cloudstack.api.PlugService; -import org.apache.cloudstack.api.ServerApiException; +import org.apache.cloudstack.api.APICommand; import com.cloud.api.response.F5LoadBalancerResponse; import com.cloud.event.EventTypes; import com.cloud.exception.ConcurrentOperationException; @@ -39,7 +34,7 @@ import com.cloud.network.element.F5ExternalLoadBalancerElementService; import com.cloud.user.UserContext; import com.cloud.utils.exception.CloudRuntimeException; -@Implementation(responseObject=F5LoadBalancerResponse.class, description="Adds a F5 BigIP load balancer device") +@APICommand(responseObject=F5LoadBalancerResponse.class, description="Adds a F5 BigIP load balancer device") public class AddF5LoadBalancerCmd extends BaseAsyncCmd { public static final Logger s_logger = Logger.getLogger(AddF5LoadBalancerCmd.class.getName()); diff --git a/plugins/network-elements/f5/src/com/cloud/api/commands/ConfigureF5LoadBalancerCmd.java b/plugins/network-elements/f5/src/com/cloud/api/commands/ConfigureF5LoadBalancerCmd.java index 737fbb98d5d..9ce8dda20df 100644 --- a/plugins/network-elements/f5/src/com/cloud/api/commands/ConfigureF5LoadBalancerCmd.java +++ b/plugins/network-elements/f5/src/com/cloud/api/commands/ConfigureF5LoadBalancerCmd.java @@ -17,16 +17,10 @@ package com.cloud.api.commands; +import org.apache.cloudstack.api.*; import org.apache.log4j.Logger; -import org.apache.cloudstack.api.ApiConstants; -import org.apache.cloudstack.api.BaseAsyncCmd; -import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.IdentityMapper; -import org.apache.cloudstack.api.Implementation; -import org.apache.cloudstack.api.Parameter; -import org.apache.cloudstack.api.PlugService; -import org.apache.cloudstack.api.ServerApiException; +import org.apache.cloudstack.api.APICommand; import com.cloud.api.response.F5LoadBalancerResponse; import com.cloud.event.EventTypes; import com.cloud.exception.ConcurrentOperationException; @@ -39,7 +33,7 @@ import com.cloud.network.element.F5ExternalLoadBalancerElementService; import com.cloud.user.UserContext; import com.cloud.utils.exception.CloudRuntimeException; -@Implementation(responseObject=F5LoadBalancerResponse.class, description="configures a F5 load balancer device") +@APICommand(responseObject=F5LoadBalancerResponse.class, description="configures a F5 load balancer device") public class ConfigureF5LoadBalancerCmd extends BaseAsyncCmd { public static final Logger s_logger = Logger.getLogger(ConfigureF5LoadBalancerCmd.class.getName()); diff --git a/plugins/network-elements/f5/src/com/cloud/api/commands/DeleteExternalLoadBalancerCmd.java b/plugins/network-elements/f5/src/com/cloud/api/commands/DeleteExternalLoadBalancerCmd.java index ccb27db2bf1..71d6b59e20e 100644 --- a/plugins/network-elements/f5/src/com/cloud/api/commands/DeleteExternalLoadBalancerCmd.java +++ b/plugins/network-elements/f5/src/com/cloud/api/commands/DeleteExternalLoadBalancerCmd.java @@ -17,22 +17,17 @@ package com.cloud.api.commands; +import org.apache.cloudstack.api.*; import org.apache.cloudstack.api.response.HostResponse; import org.apache.log4j.Logger; -import org.apache.cloudstack.api.ApiConstants; -import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.IdentityMapper; -import org.apache.cloudstack.api.Implementation; -import org.apache.cloudstack.api.Parameter; -import org.apache.cloudstack.api.PlugService; -import org.apache.cloudstack.api.ServerApiException; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.response.SuccessResponse; import com.cloud.exception.InvalidParameterValueException; import com.cloud.network.element.F5ExternalLoadBalancerElementService; import com.cloud.user.Account; -@Implementation(description="Deletes a F5 external load balancer appliance added in a zone.", responseObject = SuccessResponse.class) +@APICommand(description="Deletes a F5 external load balancer appliance added in a zone.", responseObject = SuccessResponse.class) @Deprecated // API supported for backward compatibility. public class DeleteExternalLoadBalancerCmd extends BaseCmd { public static final Logger s_logger = Logger.getLogger(DeleteExternalLoadBalancerCmd.class.getName()); diff --git a/plugins/network-elements/f5/src/com/cloud/api/commands/DeleteF5LoadBalancerCmd.java b/plugins/network-elements/f5/src/com/cloud/api/commands/DeleteF5LoadBalancerCmd.java index 867fbf9aa0f..5e746f02097 100644 --- a/plugins/network-elements/f5/src/com/cloud/api/commands/DeleteF5LoadBalancerCmd.java +++ b/plugins/network-elements/f5/src/com/cloud/api/commands/DeleteF5LoadBalancerCmd.java @@ -24,7 +24,7 @@ import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.IdentityMapper; -import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.PlugService; import org.apache.cloudstack.api.ServerApiException; @@ -39,7 +39,7 @@ import com.cloud.network.element.F5ExternalLoadBalancerElementService; import com.cloud.user.UserContext; import com.cloud.utils.exception.CloudRuntimeException; -@Implementation(responseObject=SuccessResponse.class, description=" delete a F5 load balancer device") +@APICommand(responseObject=SuccessResponse.class, description=" delete a F5 load balancer device") public class DeleteF5LoadBalancerCmd extends BaseAsyncCmd { public static final Logger s_logger = Logger.getLogger(DeleteF5LoadBalancerCmd.class.getName()); private static final String s_name = "deletef5loadbalancerresponse"; diff --git a/plugins/network-elements/f5/src/com/cloud/api/commands/ListExternalLoadBalancersCmd.java b/plugins/network-elements/f5/src/com/cloud/api/commands/ListExternalLoadBalancersCmd.java index da46e9cddbf..e8ee1c25fce 100644 --- a/plugins/network-elements/f5/src/com/cloud/api/commands/ListExternalLoadBalancersCmd.java +++ b/plugins/network-elements/f5/src/com/cloud/api/commands/ListExternalLoadBalancersCmd.java @@ -20,21 +20,17 @@ package com.cloud.api.commands; import java.util.ArrayList; import java.util.List; +import org.apache.cloudstack.api.*; import org.apache.log4j.Logger; -import org.apache.cloudstack.api.ApiConstants; -import org.apache.cloudstack.api.BaseListCmd; -import org.apache.cloudstack.api.IdentityMapper; -import org.apache.cloudstack.api.Implementation; -import org.apache.cloudstack.api.Parameter; -import org.apache.cloudstack.api.PlugService; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.response.HostResponse; import org.apache.cloudstack.api.response.ListResponse; import com.cloud.host.Host; import com.cloud.network.element.F5ExternalLoadBalancerElementService; import com.cloud.server.api.response.ExternalLoadBalancerResponse; -@Implementation(description="Lists F5 external load balancer appliances added in a zone.", responseObject = HostResponse.class) +@APICommand(description="Lists F5 external load balancer appliances added in a zone.", responseObject = HostResponse.class) @Deprecated // API supported for backward compatibility. public class ListExternalLoadBalancersCmd extends BaseListCmd { public static final Logger s_logger = Logger.getLogger(ListExternalLoadBalancersCmd.class.getName()); diff --git a/plugins/network-elements/f5/src/com/cloud/api/commands/ListF5LoadBalancerNetworksCmd.java b/plugins/network-elements/f5/src/com/cloud/api/commands/ListF5LoadBalancerNetworksCmd.java index 38570225892..3519a81f67b 100644 --- a/plugins/network-elements/f5/src/com/cloud/api/commands/ListF5LoadBalancerNetworksCmd.java +++ b/plugins/network-elements/f5/src/com/cloud/api/commands/ListF5LoadBalancerNetworksCmd.java @@ -26,7 +26,7 @@ import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.BaseListCmd; import org.apache.cloudstack.api.IdentityMapper; -import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.PlugService; import org.apache.cloudstack.api.ServerApiException; @@ -41,7 +41,7 @@ import com.cloud.network.Network; import com.cloud.network.element.F5ExternalLoadBalancerElementService; import com.cloud.utils.exception.CloudRuntimeException; -@Implementation(responseObject=NetworkResponse.class, description="lists network that are using a F5 load balancer device") +@APICommand(responseObject=NetworkResponse.class, description="lists network that are using a F5 load balancer device") public class ListF5LoadBalancerNetworksCmd extends BaseListCmd { public static final Logger s_logger = Logger.getLogger(ListF5LoadBalancerNetworksCmd.class.getName()); diff --git a/plugins/network-elements/f5/src/com/cloud/api/commands/ListF5LoadBalancersCmd.java b/plugins/network-elements/f5/src/com/cloud/api/commands/ListF5LoadBalancersCmd.java index b9eb3039bb8..4c28fa39613 100644 --- a/plugins/network-elements/f5/src/com/cloud/api/commands/ListF5LoadBalancersCmd.java +++ b/plugins/network-elements/f5/src/com/cloud/api/commands/ListF5LoadBalancersCmd.java @@ -20,17 +20,11 @@ package com.cloud.api.commands; import java.util.ArrayList; import java.util.List; +import org.apache.cloudstack.api.*; import org.apache.cloudstack.api.response.PhysicalNetworkResponse; import org.apache.log4j.Logger; -import org.apache.cloudstack.api.ApiConstants; -import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.BaseListCmd; -import org.apache.cloudstack.api.IdentityMapper; -import org.apache.cloudstack.api.Implementation; -import org.apache.cloudstack.api.Parameter; -import org.apache.cloudstack.api.PlugService; -import org.apache.cloudstack.api.ServerApiException; +import org.apache.cloudstack.api.APICommand; import com.cloud.api.response.F5LoadBalancerResponse; import org.apache.cloudstack.api.response.ListResponse; import com.cloud.exception.ConcurrentOperationException; @@ -42,7 +36,7 @@ import com.cloud.network.ExternalLoadBalancerDeviceVO; import com.cloud.network.element.F5ExternalLoadBalancerElementService; import com.cloud.utils.exception.CloudRuntimeException; -@Implementation(responseObject=F5LoadBalancerResponse.class, description="lists F5 load balancer devices") +@APICommand(responseObject=F5LoadBalancerResponse.class, description="lists F5 load balancer devices") public class ListF5LoadBalancersCmd extends BaseListCmd { public static final Logger s_logger = Logger.getLogger(ListF5LoadBalancersCmd.class.getName()); private static final String s_name = "listf5loadbalancerresponse"; diff --git a/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/AddExternalFirewallCmd.java b/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/AddExternalFirewallCmd.java index 59ca33a5ec9..c2083268309 100644 --- a/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/AddExternalFirewallCmd.java +++ b/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/AddExternalFirewallCmd.java @@ -21,7 +21,7 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.PlugService; import org.apache.cloudstack.api.ServerApiException; @@ -32,7 +32,7 @@ import com.cloud.server.api.response.ExternalFirewallResponse; import com.cloud.user.Account; import com.cloud.utils.exception.CloudRuntimeException; -@Implementation(description="Adds an external firewall appliance", responseObject = ExternalFirewallResponse.class) +@APICommand(description="Adds an external firewall appliance", responseObject = ExternalFirewallResponse.class) public class AddExternalFirewallCmd extends BaseCmd { public static final Logger s_logger = Logger.getLogger(AddExternalFirewallCmd.class.getName()); private static final String s_name = "addexternalfirewallresponse"; diff --git a/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/AddSrxFirewallCmd.java b/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/AddSrxFirewallCmd.java index f36f66ae837..dd1df59440d 100644 --- a/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/AddSrxFirewallCmd.java +++ b/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/AddSrxFirewallCmd.java @@ -22,7 +22,7 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.PlugService; import org.apache.cloudstack.api.ServerApiException; @@ -38,7 +38,7 @@ import com.cloud.network.element.JuniperSRXFirewallElementService; import com.cloud.user.UserContext; import com.cloud.utils.exception.CloudRuntimeException; -@Implementation(responseObject=SrxFirewallResponse.class, description="Adds a SRX firewall device") +@APICommand(responseObject=SrxFirewallResponse.class, description="Adds a SRX firewall device") public class AddSrxFirewallCmd extends BaseAsyncCmd { public static final Logger s_logger = Logger.getLogger(AddSrxFirewallCmd.class.getName()); private static final String s_name = "addsrxfirewallresponse"; diff --git a/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/ConfigureSrxFirewallCmd.java b/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/ConfigureSrxFirewallCmd.java index dd77d2bc3b7..61c44e27c57 100644 --- a/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/ConfigureSrxFirewallCmd.java +++ b/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/ConfigureSrxFirewallCmd.java @@ -16,14 +16,13 @@ // under the License. package com.cloud.api.commands; -import com.cloud.server.api.response.ExternalLoadBalancerResponse; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.IdentityMapper; -import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.PlugService; import org.apache.cloudstack.api.ServerApiException; @@ -39,7 +38,7 @@ import com.cloud.network.element.JuniperSRXFirewallElementService; import com.cloud.user.UserContext; import com.cloud.utils.exception.CloudRuntimeException; -@Implementation(responseObject=SrxFirewallResponse.class, description="Configures a SRX firewall device") +@APICommand(responseObject=SrxFirewallResponse.class, description="Configures a SRX firewall device") public class ConfigureSrxFirewallCmd extends BaseAsyncCmd { public static final Logger s_logger = Logger.getLogger(ConfigureSrxFirewallCmd.class.getName()); diff --git a/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/DeleteExternalFirewallCmd.java b/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/DeleteExternalFirewallCmd.java index 7887fe0b2d9..d5e8963136c 100644 --- a/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/DeleteExternalFirewallCmd.java +++ b/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/DeleteExternalFirewallCmd.java @@ -21,7 +21,7 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.PlugService; import org.apache.cloudstack.api.ServerApiException; @@ -30,7 +30,7 @@ import com.cloud.exception.InvalidParameterValueException; import com.cloud.network.element.JuniperSRXFirewallElementService; import com.cloud.user.Account; -@Implementation(description="Deletes an external firewall appliance.", responseObject = SuccessResponse.class) +@APICommand(description="Deletes an external firewall appliance.", responseObject = SuccessResponse.class) public class DeleteExternalFirewallCmd extends BaseCmd { public static final Logger s_logger = Logger.getLogger(DeleteExternalFirewallCmd.class.getName()); private static final String s_name = "deleteexternalfirewallresponse"; diff --git a/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/DeleteSrxFirewallCmd.java b/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/DeleteSrxFirewallCmd.java index b416fefbf5f..226bde5ddd7 100644 --- a/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/DeleteSrxFirewallCmd.java +++ b/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/DeleteSrxFirewallCmd.java @@ -22,7 +22,7 @@ import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.IdentityMapper; -import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.PlugService; import org.apache.cloudstack.api.ServerApiException; @@ -37,7 +37,7 @@ import com.cloud.network.element.JuniperSRXFirewallElementService; import com.cloud.user.UserContext; import com.cloud.utils.exception.CloudRuntimeException; -@Implementation(responseObject=SuccessResponse.class, description=" delete a SRX firewall device") +@APICommand(responseObject=SuccessResponse.class, description=" delete a SRX firewall device") public class DeleteSrxFirewallCmd extends BaseAsyncCmd { public static final Logger s_logger = Logger.getLogger(DeleteSrxFirewallCmd.class.getName()); private static final String s_name = "deletesrxfirewallresponse"; diff --git a/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/ListExternalFirewallsCmd.java b/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/ListExternalFirewallsCmd.java index 31e35f65784..5d02ed97c9f 100644 --- a/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/ListExternalFirewallsCmd.java +++ b/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/ListExternalFirewallsCmd.java @@ -25,7 +25,7 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseListCmd; -import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.PlugService; import org.apache.cloudstack.api.response.ListResponse; @@ -33,7 +33,7 @@ import com.cloud.host.Host; import com.cloud.network.element.JuniperSRXFirewallElementService; import com.cloud.server.api.response.ExternalFirewallResponse; -@Implementation(description="List external firewall appliances.", responseObject = ExternalFirewallResponse.class) +@APICommand(description="List external firewall appliances.", responseObject = ExternalFirewallResponse.class) public class ListExternalFirewallsCmd extends BaseListCmd { public static final Logger s_logger = Logger.getLogger(ListServiceOfferingsCmd.class.getName()); private static final String s_name = "listexternalfirewallsresponse"; diff --git a/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/ListSrxFirewallNetworksCmd.java b/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/ListSrxFirewallNetworksCmd.java index 73af77f74e4..296784c2757 100644 --- a/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/ListSrxFirewallNetworksCmd.java +++ b/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/ListSrxFirewallNetworksCmd.java @@ -19,16 +19,10 @@ package com.cloud.api.commands; import java.util.ArrayList; import java.util.List; +import org.apache.cloudstack.api.*; import org.apache.log4j.Logger; -import org.apache.cloudstack.api.ApiConstants; -import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.BaseListCmd; -import org.apache.cloudstack.api.IdentityMapper; -import org.apache.cloudstack.api.Implementation; -import org.apache.cloudstack.api.Parameter; -import org.apache.cloudstack.api.PlugService; -import org.apache.cloudstack.api.ServerApiException; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.response.ListResponse; import org.apache.cloudstack.api.response.NetworkResponse; import com.cloud.exception.ConcurrentOperationException; @@ -40,7 +34,7 @@ import com.cloud.network.Network; import com.cloud.network.element.JuniperSRXFirewallElementService; import com.cloud.utils.exception.CloudRuntimeException; -@Implementation(responseObject=NetworkResponse.class, description="lists network that are using SRX firewall device") +@APICommand(responseObject=NetworkResponse.class, description="lists network that are using SRX firewall device") public class ListSrxFirewallNetworksCmd extends BaseListCmd { public static final Logger s_logger = Logger.getLogger(ListSrxFirewallNetworksCmd.class.getName()); diff --git a/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/ListSrxFirewallsCmd.java b/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/ListSrxFirewallsCmd.java index fdf117151fe..ac1c3c4b0d7 100644 --- a/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/ListSrxFirewallsCmd.java +++ b/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/ListSrxFirewallsCmd.java @@ -19,17 +19,11 @@ package com.cloud.api.commands; import java.util.ArrayList; import java.util.List; +import org.apache.cloudstack.api.*; import org.apache.cloudstack.api.response.PhysicalNetworkResponse; import org.apache.log4j.Logger; -import org.apache.cloudstack.api.ApiConstants; -import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.BaseListCmd; -import org.apache.cloudstack.api.IdentityMapper; -import org.apache.cloudstack.api.Implementation; -import org.apache.cloudstack.api.Parameter; -import org.apache.cloudstack.api.PlugService; -import org.apache.cloudstack.api.ServerApiException; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.response.ListResponse; import com.cloud.api.response.SrxFirewallResponse; import com.cloud.exception.ConcurrentOperationException; @@ -41,7 +35,7 @@ import com.cloud.network.ExternalFirewallDeviceVO; import com.cloud.network.element.JuniperSRXFirewallElementService; import com.cloud.utils.exception.CloudRuntimeException; -@Implementation(responseObject=SrxFirewallResponse.class, description="lists SRX firewall devices in a physical network") +@APICommand(responseObject=SrxFirewallResponse.class, description="lists SRX firewall devices in a physical network") public class ListSrxFirewallsCmd extends BaseListCmd { public static final Logger s_logger = Logger.getLogger(ListSrxFirewallsCmd.class.getName()); diff --git a/plugins/network-elements/netscaler/src/com/cloud/api/commands/AddNetscalerLoadBalancerCmd.java b/plugins/network-elements/netscaler/src/com/cloud/api/commands/AddNetscalerLoadBalancerCmd.java index 9785ec927be..83397ff2634 100644 --- a/plugins/network-elements/netscaler/src/com/cloud/api/commands/AddNetscalerLoadBalancerCmd.java +++ b/plugins/network-elements/netscaler/src/com/cloud/api/commands/AddNetscalerLoadBalancerCmd.java @@ -15,16 +15,10 @@ package com.cloud.api.commands; +import org.apache.cloudstack.api.*; import org.apache.cloudstack.api.response.PhysicalNetworkResponse; import org.apache.log4j.Logger; -import org.apache.cloudstack.api.ApiConstants; -import org.apache.cloudstack.api.BaseAsyncCmd; -import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.IdentityMapper; -import org.apache.cloudstack.api.Implementation; -import org.apache.cloudstack.api.Parameter; -import org.apache.cloudstack.api.PlugService; -import org.apache.cloudstack.api.ServerApiException; +import org.apache.cloudstack.api.APICommand; import com.cloud.api.response.NetscalerLoadBalancerResponse; import com.cloud.event.EventTypes; import com.cloud.exception.ConcurrentOperationException; @@ -37,7 +31,7 @@ import com.cloud.network.element.NetscalerLoadBalancerElementService; import com.cloud.user.UserContext; import com.cloud.utils.exception.CloudRuntimeException; -@Implementation(responseObject=NetscalerLoadBalancerResponse.class, description="Adds a netscaler load balancer device") +@APICommand(responseObject=NetscalerLoadBalancerResponse.class, description="Adds a netscaler load balancer device") public class AddNetscalerLoadBalancerCmd extends BaseAsyncCmd { public static final Logger s_logger = Logger.getLogger(AddNetscalerLoadBalancerCmd.class.getName()); diff --git a/plugins/network-elements/netscaler/src/com/cloud/api/commands/ConfigureNetscalerLoadBalancerCmd.java b/plugins/network-elements/netscaler/src/com/cloud/api/commands/ConfigureNetscalerLoadBalancerCmd.java index 60d3fcef971..7d1f4d34f31 100644 --- a/plugins/network-elements/netscaler/src/com/cloud/api/commands/ConfigureNetscalerLoadBalancerCmd.java +++ b/plugins/network-elements/netscaler/src/com/cloud/api/commands/ConfigureNetscalerLoadBalancerCmd.java @@ -16,17 +16,11 @@ package com.cloud.api.commands; import java.util.List; +import org.apache.cloudstack.api.*; import org.apache.cloudstack.api.response.PodResponse; import org.apache.log4j.Logger; -import org.apache.cloudstack.api.ApiConstants; -import org.apache.cloudstack.api.BaseAsyncCmd; -import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.IdentityMapper; -import org.apache.cloudstack.api.Implementation; -import org.apache.cloudstack.api.Parameter; -import org.apache.cloudstack.api.PlugService; -import org.apache.cloudstack.api.ServerApiException; +import org.apache.cloudstack.api.APICommand; import com.cloud.api.response.NetscalerLoadBalancerResponse; import com.cloud.event.EventTypes; import com.cloud.exception.ConcurrentOperationException; @@ -39,7 +33,7 @@ import com.cloud.network.element.NetscalerLoadBalancerElementService; import com.cloud.user.UserContext; import com.cloud.utils.exception.CloudRuntimeException; -@Implementation(responseObject=NetscalerLoadBalancerResponse.class, description="configures a netscaler load balancer device") +@APICommand(responseObject=NetscalerLoadBalancerResponse.class, description="configures a netscaler load balancer device") public class ConfigureNetscalerLoadBalancerCmd extends BaseAsyncCmd { public static final Logger s_logger = Logger.getLogger(ConfigureNetscalerLoadBalancerCmd.class.getName()); diff --git a/plugins/network-elements/netscaler/src/com/cloud/api/commands/DeleteNetscalerLoadBalancerCmd.java b/plugins/network-elements/netscaler/src/com/cloud/api/commands/DeleteNetscalerLoadBalancerCmd.java index 00e898e6bba..64101c674af 100644 --- a/plugins/network-elements/netscaler/src/com/cloud/api/commands/DeleteNetscalerLoadBalancerCmd.java +++ b/plugins/network-elements/netscaler/src/com/cloud/api/commands/DeleteNetscalerLoadBalancerCmd.java @@ -21,7 +21,7 @@ import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.IdentityMapper; -import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.PlugService; import org.apache.cloudstack.api.ServerApiException; @@ -36,7 +36,7 @@ import com.cloud.network.element.NetscalerLoadBalancerElementService; import com.cloud.user.UserContext; import com.cloud.utils.exception.CloudRuntimeException; -@Implementation(responseObject=SuccessResponse.class, description=" delete a netscaler load balancer device") +@APICommand(responseObject=SuccessResponse.class, description=" delete a netscaler load balancer device") public class DeleteNetscalerLoadBalancerCmd extends BaseAsyncCmd { public static final Logger s_logger = Logger.getLogger(DeleteNetscalerLoadBalancerCmd.class.getName()); diff --git a/plugins/network-elements/netscaler/src/com/cloud/api/commands/ListNetscalerLoadBalancerNetworksCmd.java b/plugins/network-elements/netscaler/src/com/cloud/api/commands/ListNetscalerLoadBalancerNetworksCmd.java index 6e02c35a21f..7b4202c4a23 100644 --- a/plugins/network-elements/netscaler/src/com/cloud/api/commands/ListNetscalerLoadBalancerNetworksCmd.java +++ b/plugins/network-elements/netscaler/src/com/cloud/api/commands/ListNetscalerLoadBalancerNetworksCmd.java @@ -23,7 +23,7 @@ import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.BaseListCmd; import org.apache.cloudstack.api.IdentityMapper; -import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.PlugService; import org.apache.cloudstack.api.ServerApiException; @@ -38,7 +38,7 @@ import com.cloud.network.Network; import com.cloud.network.element.NetscalerLoadBalancerElementService; import com.cloud.utils.exception.CloudRuntimeException; -@Implementation(responseObject=NetworkResponse.class, description="lists network that are using a netscaler load balancer device") +@APICommand(responseObject=NetworkResponse.class, description="lists network that are using a netscaler load balancer device") public class ListNetscalerLoadBalancerNetworksCmd extends BaseListCmd { public static final Logger s_logger = Logger.getLogger(ListNetscalerLoadBalancerNetworksCmd.class.getName()); diff --git a/plugins/network-elements/netscaler/src/com/cloud/api/commands/ListNetscalerLoadBalancersCmd.java b/plugins/network-elements/netscaler/src/com/cloud/api/commands/ListNetscalerLoadBalancersCmd.java index d17d8b67650..961a3a407b9 100644 --- a/plugins/network-elements/netscaler/src/com/cloud/api/commands/ListNetscalerLoadBalancersCmd.java +++ b/plugins/network-elements/netscaler/src/com/cloud/api/commands/ListNetscalerLoadBalancersCmd.java @@ -24,7 +24,7 @@ import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.BaseListCmd; import org.apache.cloudstack.api.IdentityMapper; -import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.PlugService; import org.apache.cloudstack.api.ServerApiException; @@ -39,7 +39,7 @@ import com.cloud.network.ExternalLoadBalancerDeviceVO; import com.cloud.network.element.NetscalerLoadBalancerElementService; import com.cloud.utils.exception.CloudRuntimeException; -@Implementation(responseObject=NetscalerLoadBalancerResponse.class, description="lists netscaler load balancer devices") +@APICommand(responseObject=NetscalerLoadBalancerResponse.class, description="lists netscaler load balancer devices") public class ListNetscalerLoadBalancersCmd extends BaseListCmd { public static final Logger s_logger = Logger.getLogger(ListNetscalerLoadBalancersCmd.class.getName()); diff --git a/plugins/network-elements/nicira-nvp/src/com/cloud/api/commands/AddNiciraNvpDeviceCmd.java b/plugins/network-elements/nicira-nvp/src/com/cloud/api/commands/AddNiciraNvpDeviceCmd.java index 3425a14ce41..5f78fed1f49 100644 --- a/plugins/network-elements/nicira-nvp/src/com/cloud/api/commands/AddNiciraNvpDeviceCmd.java +++ b/plugins/network-elements/nicira-nvp/src/com/cloud/api/commands/AddNiciraNvpDeviceCmd.java @@ -16,16 +16,11 @@ // under the License. package com.cloud.api.commands; +import org.apache.cloudstack.api.*; import org.apache.cloudstack.api.response.PhysicalNetworkResponse; import org.apache.log4j.Logger; -import org.apache.cloudstack.api.ApiConstants; -import org.apache.cloudstack.api.BaseAsyncCmd; -import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.Implementation; -import org.apache.cloudstack.api.Parameter; -import org.apache.cloudstack.api.PlugService; -import org.apache.cloudstack.api.ServerApiException; +import org.apache.cloudstack.api.APICommand; import com.cloud.api.response.NiciraNvpDeviceResponse; import com.cloud.event.EventTypes; import com.cloud.exception.ConcurrentOperationException; @@ -38,7 +33,7 @@ import com.cloud.network.element.NiciraNvpElementService; import com.cloud.user.UserContext; import com.cloud.utils.exception.CloudRuntimeException; -@Implementation(responseObject=NiciraNvpDeviceResponse.class, description="Adds a Nicira NVP device") +@APICommand(responseObject=NiciraNvpDeviceResponse.class, description="Adds a Nicira NVP device") public class AddNiciraNvpDeviceCmd extends BaseAsyncCmd { private static final Logger s_logger = Logger.getLogger(AddNiciraNvpDeviceCmd.class.getName()); private static final String s_name = "addniciranvpdeviceresponse"; diff --git a/plugins/network-elements/nicira-nvp/src/com/cloud/api/commands/DeleteNiciraNvpDeviceCmd.java b/plugins/network-elements/nicira-nvp/src/com/cloud/api/commands/DeleteNiciraNvpDeviceCmd.java index d02b324a623..2cbce919823 100644 --- a/plugins/network-elements/nicira-nvp/src/com/cloud/api/commands/DeleteNiciraNvpDeviceCmd.java +++ b/plugins/network-elements/nicira-nvp/src/com/cloud/api/commands/DeleteNiciraNvpDeviceCmd.java @@ -22,7 +22,7 @@ import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.IdentityMapper; -import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.PlugService; import org.apache.cloudstack.api.ServerApiException; @@ -37,7 +37,7 @@ import com.cloud.network.element.NiciraNvpElementService; import com.cloud.user.UserContext; import com.cloud.utils.exception.CloudRuntimeException; -@Implementation(responseObject=SuccessResponse.class, description=" delete a nicira nvp device") +@APICommand(responseObject=SuccessResponse.class, description=" delete a nicira nvp device") public class DeleteNiciraNvpDeviceCmd extends BaseAsyncCmd { private static final Logger s_logger = Logger.getLogger(DeleteNiciraNvpDeviceCmd.class.getName()); private static final String s_name = "deleteniciranvpdeviceresponse"; diff --git a/plugins/network-elements/nicira-nvp/src/com/cloud/api/commands/ListNiciraNvpDeviceNetworksCmd.java b/plugins/network-elements/nicira-nvp/src/com/cloud/api/commands/ListNiciraNvpDeviceNetworksCmd.java index 07932952d0c..482ab2cc2a9 100644 --- a/plugins/network-elements/nicira-nvp/src/com/cloud/api/commands/ListNiciraNvpDeviceNetworksCmd.java +++ b/plugins/network-elements/nicira-nvp/src/com/cloud/api/commands/ListNiciraNvpDeviceNetworksCmd.java @@ -25,7 +25,7 @@ import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.BaseListCmd; import org.apache.cloudstack.api.IdentityMapper; -import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.PlugService; import org.apache.cloudstack.api.ServerApiException; @@ -40,7 +40,7 @@ import com.cloud.network.Network; import com.cloud.network.element.NiciraNvpElementService; import com.cloud.utils.exception.CloudRuntimeException; -@Implementation(responseObject=NetworkResponse.class, description="lists network that are using a nicira nvp device") +@APICommand(responseObject=NetworkResponse.class, description="lists network that are using a nicira nvp device") public class ListNiciraNvpDeviceNetworksCmd extends BaseListCmd { public static final Logger s_logger = Logger.getLogger(ListNiciraNvpDeviceNetworksCmd.class.getName()); diff --git a/plugins/network-elements/nicira-nvp/src/com/cloud/api/commands/ListNiciraNvpDevicesCmd.java b/plugins/network-elements/nicira-nvp/src/com/cloud/api/commands/ListNiciraNvpDevicesCmd.java index 8c2b2c73adf..722c96794bd 100644 --- a/plugins/network-elements/nicira-nvp/src/com/cloud/api/commands/ListNiciraNvpDevicesCmd.java +++ b/plugins/network-elements/nicira-nvp/src/com/cloud/api/commands/ListNiciraNvpDevicesCmd.java @@ -19,17 +19,11 @@ package com.cloud.api.commands; import java.util.ArrayList; import java.util.List; +import org.apache.cloudstack.api.*; import org.apache.cloudstack.api.response.PhysicalNetworkResponse; import org.apache.log4j.Logger; -import org.apache.cloudstack.api.ApiConstants; -import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.BaseListCmd; -import org.apache.cloudstack.api.IdentityMapper; -import org.apache.cloudstack.api.Implementation; -import org.apache.cloudstack.api.Parameter; -import org.apache.cloudstack.api.PlugService; -import org.apache.cloudstack.api.ServerApiException; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.response.ListResponse; import com.cloud.api.response.NiciraNvpDeviceResponse; import com.cloud.exception.ConcurrentOperationException; @@ -41,7 +35,7 @@ import com.cloud.network.NiciraNvpDeviceVO; import com.cloud.network.element.NiciraNvpElementService; import com.cloud.utils.exception.CloudRuntimeException; -@Implementation(responseObject=NiciraNvpDeviceResponse.class, description="Lists Nicira NVP devices") +@APICommand(responseObject=NiciraNvpDeviceResponse.class, description="Lists Nicira NVP devices") public class ListNiciraNvpDevicesCmd extends BaseListCmd { private static final Logger s_logger = Logger.getLogger(ListNiciraNvpDevicesCmd.class.getName()); private static final String s_name = "listniciranvpdeviceresponse"; diff --git a/server/src/com/cloud/api/commands/AddTrafficMonitorCmd.java b/server/src/com/cloud/api/commands/AddTrafficMonitorCmd.java index 1aba3959293..7522bedc820 100644 --- a/server/src/com/cloud/api/commands/AddTrafficMonitorCmd.java +++ b/server/src/com/cloud/api/commands/AddTrafficMonitorCmd.java @@ -16,14 +16,11 @@ // under the License. package com.cloud.api.commands; +import org.apache.cloudstack.api.*; import org.apache.cloudstack.api.response.ZoneResponse; import org.apache.log4j.Logger; -import org.apache.cloudstack.api.ApiConstants; -import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.Implementation; -import org.apache.cloudstack.api.Parameter; -import org.apache.cloudstack.api.ServerApiException; +import org.apache.cloudstack.api.APICommand; import com.cloud.exception.InvalidParameterValueException; import com.cloud.host.Host; import com.cloud.network.NetworkUsageManager; @@ -34,7 +31,7 @@ import com.cloud.user.Account; import com.cloud.utils.component.ComponentLocator; import com.cloud.utils.exception.CloudRuntimeException; -@Implementation(description="Adds Traffic Monitor Host for Direct Network Usage", responseObject = ExternalFirewallResponse.class) +@APICommand(description="Adds Traffic Monitor Host for Direct Network Usage", responseObject = ExternalFirewallResponse.class) public class AddTrafficMonitorCmd extends BaseCmd { public static final Logger s_logger = Logger.getLogger(AddTrafficMonitorCmd.class.getName()); private static final String s_name = "addtrafficmonitorresponse"; diff --git a/server/src/com/cloud/api/commands/DeleteTrafficMonitorCmd.java b/server/src/com/cloud/api/commands/DeleteTrafficMonitorCmd.java index 265de338a47..9e918195b86 100644 --- a/server/src/com/cloud/api/commands/DeleteTrafficMonitorCmd.java +++ b/server/src/com/cloud/api/commands/DeleteTrafficMonitorCmd.java @@ -21,7 +21,7 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; import org.apache.cloudstack.api.response.SuccessResponse; @@ -31,7 +31,7 @@ import com.cloud.server.ManagementService; import com.cloud.user.Account; import com.cloud.utils.component.ComponentLocator; -@Implementation(description="Deletes an traffic monitor host.", responseObject = SuccessResponse.class) +@APICommand(description="Deletes an traffic monitor host.", responseObject = SuccessResponse.class) public class DeleteTrafficMonitorCmd extends BaseCmd { public static final Logger s_logger = Logger.getLogger(DeleteTrafficMonitorCmd.class.getName()); private static final String s_name = "deletetrafficmonitorresponse"; diff --git a/server/src/com/cloud/api/commands/GenerateUsageRecordsCmd.java b/server/src/com/cloud/api/commands/GenerateUsageRecordsCmd.java index 5bb276626fe..bb4db4a6a1b 100644 --- a/server/src/com/cloud/api/commands/GenerateUsageRecordsCmd.java +++ b/server/src/com/cloud/api/commands/GenerateUsageRecordsCmd.java @@ -18,19 +18,16 @@ package com.cloud.api.commands; import java.util.Date; +import org.apache.cloudstack.api.*; import org.apache.cloudstack.api.response.DomainResponse; import org.apache.log4j.Logger; -import org.apache.cloudstack.api.ApiConstants; -import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.Implementation; -import org.apache.cloudstack.api.Parameter; -import org.apache.cloudstack.api.ServerApiException; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.response.SuccessResponse; import com.cloud.server.ManagementServerExt; import com.cloud.user.Account; -@Implementation(description="Generates usage records. This will generate records only if there any records to be generated, i.e if the scheduled usage job was not run or failed", responseObject=SuccessResponse.class) +@APICommand(description="Generates usage records. This will generate records only if there any records to be generated, i.e if the scheduled usage job was not run or failed", responseObject=SuccessResponse.class) public class GenerateUsageRecordsCmd extends BaseCmd { public static final Logger s_logger = Logger.getLogger(GenerateUsageRecordsCmd.class.getName()); diff --git a/server/src/com/cloud/api/commands/GetUsageRecordsCmd.java b/server/src/com/cloud/api/commands/GetUsageRecordsCmd.java index 86993023b0f..82ddcbbd5b2 100644 --- a/server/src/com/cloud/api/commands/GetUsageRecordsCmd.java +++ b/server/src/com/cloud/api/commands/GetUsageRecordsCmd.java @@ -34,7 +34,7 @@ import com.cloud.dc.DataCenter; import com.cloud.domain.Domain; import org.apache.cloudstack.api.BaseListCmd; -import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.response.ListResponse; import com.cloud.projects.Project; @@ -48,7 +48,7 @@ import com.cloud.uuididentity.dao.IdentityDao; import com.cloud.uuididentity.dao.IdentityDaoImpl; import com.cloud.vm.VMInstanceVO; -@Implementation(description="Lists usage records for accounts", responseObject=UsageRecordResponse.class) +@APICommand(description="Lists usage records for accounts", responseObject=UsageRecordResponse.class) public class GetUsageRecordsCmd extends BaseListCmd { public static final Logger s_logger = Logger.getLogger(GetUsageRecordsCmd.class.getName()); diff --git a/server/src/com/cloud/api/commands/ListTrafficMonitorsCmd.java b/server/src/com/cloud/api/commands/ListTrafficMonitorsCmd.java index 07e45fbc6f3..f2b07a4d370 100644 --- a/server/src/com/cloud/api/commands/ListTrafficMonitorsCmd.java +++ b/server/src/com/cloud/api/commands/ListTrafficMonitorsCmd.java @@ -25,7 +25,7 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseListCmd; -import org.apache.cloudstack.api.Implementation; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.response.ListResponse; import com.cloud.host.Host; @@ -35,7 +35,7 @@ import com.cloud.server.api.response.ExternalFirewallResponse; import com.cloud.server.api.response.TrafficMonitorResponse; import com.cloud.utils.component.ComponentLocator; -@Implementation(description="List traffic monitor Hosts.", responseObject = ExternalFirewallResponse.class) +@APICommand(description="List traffic monitor Hosts.", responseObject = ExternalFirewallResponse.class) public class ListTrafficMonitorsCmd extends BaseListCmd { public static final Logger s_logger = Logger.getLogger(ListServiceOfferingsCmd.class.getName()); private static final String s_name = "listtrafficmonitorsresponse"; diff --git a/server/src/com/cloud/api/commands/ListUsageTypesCmd.java b/server/src/com/cloud/api/commands/ListUsageTypesCmd.java index 5193cd786a7..acdc53a0930 100644 --- a/server/src/com/cloud/api/commands/ListUsageTypesCmd.java +++ b/server/src/com/cloud/api/commands/ListUsageTypesCmd.java @@ -18,16 +18,16 @@ package com.cloud.api.commands; import java.util.List; +import org.apache.cloudstack.api.APICommand; import org.apache.log4j.Logger; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.Implementation; import org.apache.cloudstack.api.response.ListResponse; import com.cloud.server.ManagementServerExt; import com.cloud.server.api.response.UsageTypeResponse; import com.cloud.user.Account; -@Implementation(description = "List Usage Types", responseObject = UsageTypeResponse.class) +@APICommand(description = "List Usage Types", responseObject = UsageTypeResponse.class) public class ListUsageTypesCmd extends BaseCmd { public static final Logger s_logger = Logger.getLogger(ListUsageTypesCmd.class.getName()); private static final String s_name = "listusagetypesresponse"; diff --git a/server/src/com/cloud/api/doc/ApiXmlDocWriter.java b/server/src/com/cloud/api/doc/ApiXmlDocWriter.java index 9e37ff9a105..a6adcf7f7c4 100644 --- a/server/src/com/cloud/api/doc/ApiXmlDocWriter.java +++ b/server/src/com/cloud/api/doc/ApiXmlDocWriter.java @@ -37,16 +37,12 @@ import java.util.TreeMap; import java.util.zip.ZipEntry; import java.util.zip.ZipOutputStream; +import org.apache.cloudstack.api.*; import org.apache.log4j.Logger; import com.cloud.alert.AlertManager; -import org.apache.cloudstack.api.BaseAsyncCmd; -import org.apache.cloudstack.api.BaseAsyncCreateCmd; -import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.Implementation; -import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.response.AsyncJobResponse; -import org.apache.cloudstack.api.BaseResponse; import org.apache.cloudstack.api.response.HostResponse; import org.apache.cloudstack.api.response.IPAddressResponse; import org.apache.cloudstack.api.response.SecurityGroupResponse; @@ -307,14 +303,14 @@ public class ApiXmlDocWriter { Command apiCommand = new Command(); apiCommand.setName(command); - Implementation impl = clas.getAnnotation(Implementation.class); + APICommand impl = clas.getAnnotation(APICommand.class); if (impl == null) { - impl = clas.getSuperclass().getAnnotation(Implementation.class); + impl = clas.getSuperclass().getAnnotation(APICommand.class); } if (impl == null) { throw new IllegalStateException(String.format("An %1$s annotation is required for class %2$s.", - Implementation.class.getCanonicalName(), clas.getCanonicalName())); + APICommand.class.getCanonicalName(), clas.getCanonicalName())); } if (impl.includeInApiDoc()) { From b8369b808e4757c6442fd74092df375c095e89a5 Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Wed, 26 Dec 2012 15:56:14 -0800 Subject: [PATCH 222/421] api: Introduce name field which would hold the OTW api command name Signed-off-by: Rohit Yadav --- api/src/org/apache/cloudstack/api/APICommand.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/api/src/org/apache/cloudstack/api/APICommand.java b/api/src/org/apache/cloudstack/api/APICommand.java index 7c185b1ae62..4d024c15a5d 100644 --- a/api/src/org/apache/cloudstack/api/APICommand.java +++ b/api/src/org/apache/cloudstack/api/APICommand.java @@ -27,6 +27,8 @@ import java.lang.annotation.Target; public @interface APICommand { Class responseObject(); + String name() default ""; + String description() default ""; String usage() default ""; From b80dccee3fcb938461d0058ec100379fa730ec4a Mon Sep 17 00:00:00 2001 From: Prasanna Santhanam Date: Wed, 26 Dec 2012 18:27:31 -0800 Subject: [PATCH 223/421] api: ListTemplateCmd returns TemplateInfo not UserVmResponse Correcting the incorrecty response entity when LIstTemplatesCmd was caled --- .../cloudstack/api/command/user/template/ListTemplatesCmd.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/api/src/org/apache/cloudstack/api/command/user/template/ListTemplatesCmd.java b/api/src/org/apache/cloudstack/api/command/user/template/ListTemplatesCmd.java index bb9624c7c05..1e0d19bb737 100644 --- a/api/src/org/apache/cloudstack/api/command/user/template/ListTemplatesCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/template/ListTemplatesCmd.java @@ -20,6 +20,7 @@ import java.util.ArrayList; import java.util.List; import java.util.Set; +import com.cloud.storage.template.TemplateInfo; import org.apache.cloudstack.api.response.UserVmResponse; import org.apache.cloudstack.api.response.ZoneResponse; import org.apache.log4j.Logger; @@ -49,7 +50,7 @@ public class ListTemplatesCmd extends BaseListTaggedResourcesCmd { @Parameter(name=ApiConstants.HYPERVISOR, type=CommandType.STRING, description="the hypervisor for which to restrict the search") private String hypervisor; - @Parameter(name=ApiConstants.ID, type=CommandType.UUID, entityType = UserVmResponse.class, + @Parameter(name=ApiConstants.ID, type=CommandType.UUID, entityType=TemplateInfo.class, description="the template ID") private Long id; From 840da555204afac026a8797a02881b33dc1779c3 Mon Sep 17 00:00:00 2001 From: Prasanna Santhanam Date: Wed, 26 Dec 2012 18:28:55 -0800 Subject: [PATCH 224/421] api: Entities will extend InternalIdentity and Identity Entities correlated to the Identity and carry a uuid and those correlated to InternalIdentity carry an id. Those entities that carry both will correlated to Identity and InternalIdentity. This refactors entities wherever possible to ensure the VO only implements the first class entity. Signed-off-by: Prasanna Santhanam --- api/src/com/cloud/alert/Alert.java | 7 ++- api/src/com/cloud/async/AsyncJob.java | 2 - api/src/com/cloud/capacity/Capacity.java | 9 ++- .../cloud/cluster/ManagementServerHost.java | 4 +- .../cloud/configuration/ResourceCount.java | 2 - .../cloud/configuration/ResourceLimit.java | 2 - api/src/com/cloud/dc/DataCenter.java | 8 +-- api/src/com/cloud/dc/Pod.java | 11 +--- .../com/cloud/dc/StorageNetworkIpRange.java | 6 +- api/src/com/cloud/dc/Vlan.java | 9 ++- api/src/com/cloud/domain/Domain.java | 7 +-- api/src/com/cloud/event/Event.java | 7 +-- api/src/com/cloud/host/Host.java | 11 +--- .../hypervisor/HypervisorCapabilities.java | 10 +-- api/src/com/cloud/network/IpAddress.java | 11 +--- api/src/com/cloud/network/Network.java | 10 +-- api/src/com/cloud/network/NetworkProfile.java | 2 +- .../com/cloud/network/PhysicalNetwork.java | 7 +-- .../network/PhysicalNetworkTrafficType.java | 7 +-- .../network/Site2SiteCustomerGateway.java | 5 +- .../cloud/network/Site2SiteVpnGateway.java | 5 +- .../cloud/network/VirtualRouterProvider.java | 7 +-- api/src/com/cloud/network/VpnUser.java | 7 +-- api/src/com/cloud/network/as/Condition.java | 7 +-- api/src/com/cloud/network/as/Counter.java | 9 ++- .../cloud/network/lb/LoadBalancingRule.java | 2 +- .../com/cloud/network/rules/FirewallRule.java | 14 +---- .../com/cloud/network/rules/LoadBalancer.java | 1 - .../cloud/network/rules/StaticNatRule.java | 29 +-------- .../cloud/network/rules/StickinessPolicy.java | 7 +-- .../cloud/network/security/SecurityGroup.java | 6 +- .../network/security/SecurityGroupRules.java | 4 +- .../cloud/network/security/SecurityRule.java | 8 +-- .../com/cloud/network/vpc/PrivateGateway.java | 2 +- .../com/cloud/network/vpc/StaticRoute.java | 12 +--- .../cloud/network/vpc/StaticRouteProfile.java | 2 +- api/src/com/cloud/network/vpc/Vpc.java | 7 +-- api/src/com/cloud/network/vpc/VpcGateway.java | 2 - .../com/cloud/network/vpc/VpcOffering.java | 7 +-- api/src/com/cloud/offering/DiskOffering.java | 8 +-- .../com/cloud/offering/NetworkOffering.java | 8 +-- api/src/com/cloud/org/Cluster.java | 8 +-- .../com/cloud/projects/ProjectInvitation.java | 5 +- api/src/com/cloud/server/ResourceTag.java | 8 +-- api/src/com/cloud/storage/GuestOS.java | 7 +-- .../com/cloud/storage/GuestOsCategory.java | 8 +-- api/src/com/cloud/storage/S3.java | 8 +-- api/src/com/cloud/storage/Snapshot.java | 7 +-- api/src/com/cloud/storage/StoragePool.java | 15 +---- api/src/com/cloud/storage/Upload.java | 7 +-- .../VMTemplateStorageResourceAssoc.java | 7 ++- api/src/com/cloud/storage/Volume.java | 7 +-- .../storage/snapshot/SnapshotPolicy.java | 6 +- .../template/VirtualMachineTemplate.java | 10 +-- api/src/com/cloud/user/Account.java | 7 +-- api/src/com/cloud/user/SSHKeyPair.java | 5 -- api/src/com/cloud/vm/InstanceGroup.java | 4 +- api/src/com/cloud/vm/Nic.java | 9 +-- api/src/com/cloud/vm/VirtualMachine.java | 5 -- api/test/integration/api/__init__.py | 16 +++++ api/test/integration/api/setup.py | 16 +++++ api/test/integration/api/test/__init__.py | 16 +++++ .../integration/api/test/account/__init__.py | 16 +++++ .../api/test/account/testCreateAccount.py | 61 +++++++++++++++++++ core/src/com/cloud/alert/AlertVO.java | 2 +- core/src/com/cloud/async/AsyncJobVO.java | 32 +++++----- core/src/com/cloud/capacity/CapacityVO.java | 9 ++- .../cloud/configuration/ResourceCountVO.java | 2 +- .../cloud/configuration/ResourceLimitVO.java | 2 +- core/src/com/cloud/event/EventVO.java | 2 +- core/src/com/cloud/event/UsageEvent.java | 1 - core/src/com/cloud/event/UsageEventVO.java | 2 +- core/src/com/cloud/host/HostVO.java | 2 +- .../hypervisor/HypervisorCapabilitiesVO.java | 2 +- core/src/com/cloud/network/VpnUserVO.java | 2 +- .../network/security/SecurityGroupRuleVO.java | 2 +- .../security/SecurityGroupRulesVO.java | 2 +- .../network/security/SecurityGroupVO.java | 2 +- .../network/security/SecurityGroupWork.java | 2 + .../src/com/cloud/storage/DiskOfferingVO.java | 2 +- .../com/cloud/storage/GuestOSCategoryVO.java | 2 +- core/src/com/cloud/storage/GuestOSVO.java | 2 +- core/src/com/cloud/storage/S3VO.java | 2 +- .../com/cloud/storage/SnapshotPolicyVO.java | 2 +- .../com/cloud/storage/SnapshotScheduleVO.java | 2 +- core/src/com/cloud/storage/SnapshotVO.java | 2 +- .../cloud/storage/StoragePoolHostAssoc.java | 4 +- .../com/cloud/storage/StoragePoolHostVO.java | 2 +- core/src/com/cloud/storage/StoragePoolVO.java | 2 +- core/src/com/cloud/storage/UploadVO.java | 2 +- .../com/cloud/storage/VMTemplateHostVO.java | 2 +- .../storage/VMTemplateStoragePoolVO.java | 2 +- core/src/com/cloud/storage/VMTemplateVO.java | 2 +- core/src/com/cloud/storage/VolumeVO.java | 2 +- .../storage/snapshot/SnapshotSchedule.java | 8 +-- core/src/com/cloud/user/AccountVO.java | 2 +- core/src/com/cloud/user/SSHKeyPairVO.java | 2 +- core/src/com/cloud/vm/InstanceGroupVO.java | 2 +- core/src/com/cloud/vm/VMInstanceVO.java | 2 +- .../cloud/network/CiscoNexusVSMDevice.java | 9 ++- .../cloud/network/CiscoNexusVSMDeviceVO.java | 2 +- .../api/query/vo/SecurityGroupJoinVO.java | 1 - .../cloud/cluster/ManagementServerHostVO.java | 2 +- server/src/com/cloud/dc/ClusterVO.java | 2 +- server/src/com/cloud/dc/DataCenterVO.java | 2 +- server/src/com/cloud/dc/HostPodVO.java | 2 +- .../com/cloud/dc/StorageNetworkIpRangeVO.java | 2 +- server/src/com/cloud/dc/VlanVO.java | 2 +- server/src/com/cloud/domain/DomainVO.java | 2 +- server/src/com/cloud/network/IPAddressVO.java | 2 +- .../cloud/network/LBStickinessPolicyVO.java | 2 +- server/src/com/cloud/network/NetworkVO.java | 2 +- .../com/cloud/network/PhysicalNetworkVO.java | 2 +- .../network/Site2SiteCustomerGatewayVO.java | 2 +- .../cloud/network/Site2SiteVpnGatewayVO.java | 2 +- .../dao/PhysicalNetworkTrafficTypeVO.java | 2 +- .../element/VirtualRouterProviderVO.java | 2 +- .../cloud/network/rules/FirewallRuleVO.java | 2 +- .../network/rules/StaticNatRuleImpl.java | 2 +- .../network/vpc/PrivateGatewayProfile.java | 2 +- .../com/cloud/network/vpc/StaticRouteVO.java | 2 +- .../com/cloud/network/vpc/VpcGatewayVO.java | 2 +- .../com/cloud/network/vpc/VpcOfferingVO.java | 2 +- server/src/com/cloud/network/vpc/VpcVO.java | 2 +- .../cloud/offerings/NetworkOfferingVO.java | 2 +- .../cloud/projects/ProjectInvitationVO.java | 2 +- server/src/com/cloud/tags/ResourceTagVO.java | 2 +- server/src/com/cloud/vm/NicVO.java | 2 +- 128 files changed, 344 insertions(+), 383 deletions(-) create mode 100644 api/test/integration/api/__init__.py create mode 100644 api/test/integration/api/setup.py create mode 100644 api/test/integration/api/test/__init__.py create mode 100644 api/test/integration/api/test/account/__init__.py create mode 100644 api/test/integration/api/test/account/testCreateAccount.py diff --git a/api/src/com/cloud/alert/Alert.java b/api/src/com/cloud/alert/Alert.java index da75de8f458..defd15490e5 100644 --- a/api/src/com/cloud/alert/Alert.java +++ b/api/src/com/cloud/alert/Alert.java @@ -16,11 +16,12 @@ // under the License. package com.cloud.alert; +import org.apache.cloudstack.api.Identity; +import org.apache.cloudstack.api.InternalIdentity; + import java.util.Date; -public interface Alert { - long getId(); - String getUuid(); +public interface Alert extends Identity, InternalIdentity { short getType(); String getSubject(); Long getPodId(); diff --git a/api/src/com/cloud/async/AsyncJob.java b/api/src/com/cloud/async/AsyncJob.java index 2fc70a60644..034c853e8f9 100644 --- a/api/src/com/cloud/async/AsyncJob.java +++ b/api/src/com/cloud/async/AsyncJob.java @@ -51,8 +51,6 @@ public interface AsyncJob extends Identity, InternalIdentity { AutoScaleVmGroup } - long getId(); - long getUserId(); long getAccountId(); diff --git a/api/src/com/cloud/capacity/Capacity.java b/api/src/com/cloud/capacity/Capacity.java index d698189bca6..c1c5d8fa9b2 100755 --- a/api/src/com/cloud/capacity/Capacity.java +++ b/api/src/com/cloud/capacity/Capacity.java @@ -16,7 +16,10 @@ // under the License. package com.cloud.capacity; -public interface Capacity { +import org.apache.cloudstack.api.Identity; +import org.apache.cloudstack.api.InternalIdentity; + +public interface Capacity extends InternalIdentity, Identity { public static final short CAPACITY_TYPE_MEMORY = 0; public static final short CAPACITY_TYPE_CPU = 1; public static final short CAPACITY_TYPE_STORAGE = 2; @@ -28,8 +31,6 @@ public interface Capacity { public static final short CAPACITY_TYPE_DIRECT_ATTACHED_PUBLIC_IP = 8; public static final short CAPACITY_TYPE_LOCAL_STORAGE = 9; - public long getId(); - public Long getHostOrPoolId(); public Long getDataCenterId(); @@ -47,6 +48,4 @@ public interface Capacity { public long getReservedCapacity(); public Float getUsedPercentage(); - - } diff --git a/api/src/com/cloud/cluster/ManagementServerHost.java b/api/src/com/cloud/cluster/ManagementServerHost.java index 0273d472bea..9c88a2b2006 100644 --- a/api/src/com/cloud/cluster/ManagementServerHost.java +++ b/api/src/com/cloud/cluster/ManagementServerHost.java @@ -16,7 +16,9 @@ // under the License. package com.cloud.cluster; -public interface ManagementServerHost { +import org.apache.cloudstack.api.InternalIdentity; + +public interface ManagementServerHost extends InternalIdentity { public static enum State { Up, Starting, Down diff --git a/api/src/com/cloud/configuration/ResourceCount.java b/api/src/com/cloud/configuration/ResourceCount.java index 16c0c2eb484..f0b1d7190d5 100644 --- a/api/src/com/cloud/configuration/ResourceCount.java +++ b/api/src/com/cloud/configuration/ResourceCount.java @@ -20,8 +20,6 @@ import org.apache.cloudstack.api.InternalIdentity; public interface ResourceCount extends Resource, InternalIdentity { - public long getId(); - public long getCount(); public void setCount(long count); diff --git a/api/src/com/cloud/configuration/ResourceLimit.java b/api/src/com/cloud/configuration/ResourceLimit.java index d2d029a29bc..801feebbe10 100644 --- a/api/src/com/cloud/configuration/ResourceLimit.java +++ b/api/src/com/cloud/configuration/ResourceLimit.java @@ -20,8 +20,6 @@ import org.apache.cloudstack.api.InternalIdentity; public interface ResourceLimit extends Resource, InternalIdentity { - public long getId(); - public Long getMax(); public void setMax(Long max); diff --git a/api/src/com/cloud/dc/DataCenter.java b/api/src/com/cloud/dc/DataCenter.java index 617c6c1ceed..081cd55e162 100644 --- a/api/src/com/cloud/dc/DataCenter.java +++ b/api/src/com/cloud/dc/DataCenter.java @@ -19,20 +19,18 @@ package com.cloud.dc; import java.util.Map; import com.cloud.org.Grouping; +import org.apache.cloudstack.api.Identity; +import org.apache.cloudstack.api.InternalIdentity; /** * */ -public interface DataCenter extends Grouping { +public interface DataCenter extends Grouping, Identity, InternalIdentity { public enum NetworkType { Basic, Advanced, } - long getId(); - - String getUuid(); - String getDns1(); String getDns2(); diff --git a/api/src/com/cloud/dc/Pod.java b/api/src/com/cloud/dc/Pod.java index 0356f0f317c..8c893163730 100644 --- a/api/src/com/cloud/dc/Pod.java +++ b/api/src/com/cloud/dc/Pod.java @@ -17,19 +17,14 @@ package com.cloud.dc; import com.cloud.org.Grouping; +import org.apache.cloudstack.api.Identity; import org.apache.cloudstack.api.InternalIdentity; /** * Represents one pod in the cloud stack. * */ -public interface Pod extends Grouping, InternalIdentity { - /** - * @return unique id mapped to the pod. - */ - long getId(); - - String getUuid(); +public interface Pod extends Grouping, Identity, InternalIdentity { String getCidrAddress(); @@ -39,8 +34,6 @@ public interface Pod extends Grouping, InternalIdentity { long getDataCenterId(); - // String getUniqueName(); - String getDescription(); String getName(); diff --git a/api/src/com/cloud/dc/StorageNetworkIpRange.java b/api/src/com/cloud/dc/StorageNetworkIpRange.java index 8786251468a..7f15d6197da 100755 --- a/api/src/com/cloud/dc/StorageNetworkIpRange.java +++ b/api/src/com/cloud/dc/StorageNetworkIpRange.java @@ -16,8 +16,10 @@ // under the License. package com.cloud.dc; -public interface StorageNetworkIpRange { - String getUuid(); +import org.apache.cloudstack.api.Identity; +import org.apache.cloudstack.api.InternalIdentity; + +public interface StorageNetworkIpRange extends InternalIdentity, Identity { Integer getVlan(); diff --git a/api/src/com/cloud/dc/Vlan.java b/api/src/com/cloud/dc/Vlan.java index d4cfb4ef442..8d4ae3a9e1b 100644 --- a/api/src/com/cloud/dc/Vlan.java +++ b/api/src/com/cloud/dc/Vlan.java @@ -16,7 +16,10 @@ // under the License. package com.cloud.dc; -public interface Vlan { +import org.apache.cloudstack.api.Identity; +import org.apache.cloudstack.api.InternalIdentity; + +public interface Vlan extends InternalIdentity, Identity { public enum VlanType { DirectAttached, VirtualNetwork @@ -24,10 +27,6 @@ public interface Vlan { public final static String UNTAGGED = "untagged"; - public long getId(); - - public String getUuid(); - public String getVlanTag(); public String getVlanGateway(); diff --git a/api/src/com/cloud/domain/Domain.java b/api/src/com/cloud/domain/Domain.java index 844974d1d1e..cfed519ada9 100644 --- a/api/src/com/cloud/domain/Domain.java +++ b/api/src/com/cloud/domain/Domain.java @@ -19,23 +19,20 @@ package com.cloud.domain; import java.util.Date; import com.cloud.user.OwnedBy; +import org.apache.cloudstack.api.Identity; import org.apache.cloudstack.api.InternalIdentity; /** * Domain defines the Domain object. */ -public interface Domain extends OwnedBy, InternalIdentity { +public interface Domain extends OwnedBy, Identity, InternalIdentity { public static final long ROOT_DOMAIN = 1L; enum State { Active, Inactive }; - long getId(); - - String getUuid(); - Long getParent(); void setParent(Long parent); diff --git a/api/src/com/cloud/event/Event.java b/api/src/com/cloud/event/Event.java index 95c8b7f59eb..f869c472986 100644 --- a/api/src/com/cloud/event/Event.java +++ b/api/src/com/cloud/event/Event.java @@ -19,9 +19,10 @@ package com.cloud.event; import java.util.Date; import com.cloud.acl.ControlledEntity; +import org.apache.cloudstack.api.Identity; import org.apache.cloudstack.api.InternalIdentity; -public interface Event extends ControlledEntity, InternalIdentity { +public interface Event extends ControlledEntity, Identity, InternalIdentity { public enum State { Created, Scheduled, @@ -29,16 +30,12 @@ public interface Event extends ControlledEntity, InternalIdentity { Completed; } - - long getId(); String getType(); State getState(); String getDescription(); Date getCreateDate(); long getUserId(); - long getAccountId(); - long getDomainId(); int getTotalSize(); String getLevel(); long getStartId(); diff --git a/api/src/com/cloud/host/Host.java b/api/src/com/cloud/host/Host.java index 2783cd9817d..bd26f81c8c2 100755 --- a/api/src/com/cloud/host/Host.java +++ b/api/src/com/cloud/host/Host.java @@ -21,12 +21,14 @@ import java.util.Date; import com.cloud.hypervisor.Hypervisor.HypervisorType; import com.cloud.resource.ResourceState; import com.cloud.utils.fsm.StateObject; +import org.apache.cloudstack.api.Identity; +import org.apache.cloudstack.api.InternalIdentity; /** * Host represents one particular host server. */ -public interface Host extends StateObject { +public interface Host extends StateObject, Identity, InternalIdentity { public enum Type { Storage(false), Routing(false), @@ -61,13 +63,6 @@ public interface Host extends StateObject { } } - /** - * @return id of the host. - */ - long getId(); - - String getUuid(); - /** * @return name of the machine. */ diff --git a/api/src/com/cloud/hypervisor/HypervisorCapabilities.java b/api/src/com/cloud/hypervisor/HypervisorCapabilities.java index e2fbc077a7a..efb8a6a208b 100644 --- a/api/src/com/cloud/hypervisor/HypervisorCapabilities.java +++ b/api/src/com/cloud/hypervisor/HypervisorCapabilities.java @@ -17,18 +17,14 @@ package com.cloud.hypervisor; import com.cloud.hypervisor.Hypervisor.HypervisorType; +import org.apache.cloudstack.api.Identity; +import org.apache.cloudstack.api.InternalIdentity; /** * HypervisorCapability represents one particular hypervisor version's capabilities. */ -public interface HypervisorCapabilities { - /** - * @return id of the host. - */ - long getId(); - - String getUuid(); +public interface HypervisorCapabilities extends Identity, InternalIdentity{ /** * @return type of hypervisor diff --git a/api/src/com/cloud/network/IpAddress.java b/api/src/com/cloud/network/IpAddress.java index 8433da2be3c..0d05efbc78c 100644 --- a/api/src/com/cloud/network/IpAddress.java +++ b/api/src/com/cloud/network/IpAddress.java @@ -20,6 +20,7 @@ import java.util.Date; import com.cloud.acl.ControlledEntity; import com.cloud.utils.net.Ip; +import org.apache.cloudstack.api.Identity; import org.apache.cloudstack.api.InternalIdentity; /** @@ -33,7 +34,7 @@ import org.apache.cloudstack.api.InternalIdentity; * - DomainId = domain of the account owner. * - Allocated = time it was allocated. */ -public interface IpAddress extends ControlledEntity, InternalIdentity { +public interface IpAddress extends ControlledEntity, Identity, InternalIdentity { enum State { Allocating, // The IP Address is being propagated to other network elements and is not ready for use yet. Allocated, // The IP address is in used. @@ -68,13 +69,6 @@ public interface IpAddress extends ControlledEntity, InternalIdentity { public Long getPhysicalNetworkId(); - /** - * @return database id. - */ - long getId(); - - String getUuid(); - void setState(IpAddress.State state); Long getAllocatedToAccountId(); @@ -92,5 +86,4 @@ public interface IpAddress extends ControlledEntity, InternalIdentity { * @param vpcId */ void setVpcId(Long vpcId); - } diff --git a/api/src/com/cloud/network/Network.java b/api/src/com/cloud/network/Network.java index c10ab6a32f8..fdf11cb65bf 100644 --- a/api/src/com/cloud/network/Network.java +++ b/api/src/com/cloud/network/Network.java @@ -22,6 +22,7 @@ import com.cloud.network.Networks.Mode; import com.cloud.network.Networks.TrafficType; import com.cloud.utils.fsm.FiniteState; import com.cloud.utils.fsm.StateMachine; +import org.apache.cloudstack.api.Identity; import org.apache.cloudstack.api.InternalIdentity; import java.net.URI; @@ -32,7 +33,7 @@ import java.util.Set; /** * owned by an account. */ -public interface Network extends ControlledEntity, InternalIdentity { +public interface Network extends ControlledEntity, InternalIdentity, Identity { public enum GuestType { Shared, @@ -252,13 +253,6 @@ public interface Network extends ControlledEntity, InternalIdentity { } } - /** - * @return id of the network profile. Null means the network profile is not from the database. - */ - long getId(); - - String getUuid(); - String getName(); Mode getMode(); diff --git a/api/src/com/cloud/network/NetworkProfile.java b/api/src/com/cloud/network/NetworkProfile.java index 3872a150dd2..b5c463de375 100644 --- a/api/src/com/cloud/network/NetworkProfile.java +++ b/api/src/com/cloud/network/NetworkProfile.java @@ -23,7 +23,7 @@ import com.cloud.network.Networks.Mode; import com.cloud.network.Networks.TrafficType; import org.apache.cloudstack.api.InternalIdentity; -public class NetworkProfile implements Network, InternalIdentity { +public class NetworkProfile implements Network { private long id; private String uuid; private long dataCenterId; diff --git a/api/src/com/cloud/network/PhysicalNetwork.java b/api/src/com/cloud/network/PhysicalNetwork.java index 48848279e9a..a495092879e 100644 --- a/api/src/com/cloud/network/PhysicalNetwork.java +++ b/api/src/com/cloud/network/PhysicalNetwork.java @@ -16,6 +16,7 @@ // under the License. package com.cloud.network; +import org.apache.cloudstack.api.Identity; import org.apache.cloudstack.api.InternalIdentity; import java.util.List; @@ -23,7 +24,7 @@ import java.util.List; /** * */ -public interface PhysicalNetwork extends InternalIdentity { +public interface PhysicalNetwork extends Identity, InternalIdentity { public enum State { Disabled, @@ -42,8 +43,6 @@ public interface PhysicalNetwork extends InternalIdentity { ZONE; } - long getId(); - BroadcastDomainRange getBroadcastDomainRange(); // TrafficType getTrafficType(); @@ -62,8 +61,6 @@ public interface PhysicalNetwork extends InternalIdentity { String getSpeed(); - String getUuid(); - String getName(); } diff --git a/api/src/com/cloud/network/PhysicalNetworkTrafficType.java b/api/src/com/cloud/network/PhysicalNetworkTrafficType.java index 393b6a4c1cb..62400e80a9e 100644 --- a/api/src/com/cloud/network/PhysicalNetworkTrafficType.java +++ b/api/src/com/cloud/network/PhysicalNetworkTrafficType.java @@ -17,14 +17,13 @@ package com.cloud.network; import com.cloud.network.Networks.TrafficType; +import org.apache.cloudstack.api.Identity; import org.apache.cloudstack.api.InternalIdentity; /** * */ -public interface PhysicalNetworkTrafficType extends InternalIdentity { - - long getId(); +public interface PhysicalNetworkTrafficType extends InternalIdentity, Identity { long getPhysicalNetworkId(); @@ -37,6 +36,4 @@ public interface PhysicalNetworkTrafficType extends InternalIdentity { String getVmwareNetworkLabel(); String getSimulatorNetworkLabel(); - - String getUuid(); } diff --git a/api/src/com/cloud/network/Site2SiteCustomerGateway.java b/api/src/com/cloud/network/Site2SiteCustomerGateway.java index 2bf4368ee45..1d7467ba266 100644 --- a/api/src/com/cloud/network/Site2SiteCustomerGateway.java +++ b/api/src/com/cloud/network/Site2SiteCustomerGateway.java @@ -19,11 +19,10 @@ package com.cloud.network; import java.util.Date; import com.cloud.acl.ControlledEntity; +import org.apache.cloudstack.api.Identity; import org.apache.cloudstack.api.InternalIdentity; -public interface Site2SiteCustomerGateway extends ControlledEntity, InternalIdentity { - public long getId(); - public String getUuid(); +public interface Site2SiteCustomerGateway extends ControlledEntity, Identity, InternalIdentity { public String getGatewayIp(); public String getGuestCidrList(); public String getIpsecPsk(); diff --git a/api/src/com/cloud/network/Site2SiteVpnGateway.java b/api/src/com/cloud/network/Site2SiteVpnGateway.java index 5a20102dc32..feb3b94de0d 100644 --- a/api/src/com/cloud/network/Site2SiteVpnGateway.java +++ b/api/src/com/cloud/network/Site2SiteVpnGateway.java @@ -19,11 +19,10 @@ package com.cloud.network; import java.util.Date; import com.cloud.acl.ControlledEntity; +import org.apache.cloudstack.api.Identity; import org.apache.cloudstack.api.InternalIdentity; -public interface Site2SiteVpnGateway extends ControlledEntity, InternalIdentity { - public long getId(); - public String getUuid(); +public interface Site2SiteVpnGateway extends ControlledEntity, Identity, InternalIdentity { public long getAddrId(); public long getVpcId(); public Date getRemoved(); diff --git a/api/src/com/cloud/network/VirtualRouterProvider.java b/api/src/com/cloud/network/VirtualRouterProvider.java index 034652d9d24..ed6a2741ba0 100644 --- a/api/src/com/cloud/network/VirtualRouterProvider.java +++ b/api/src/com/cloud/network/VirtualRouterProvider.java @@ -16,9 +16,10 @@ // under the License. package com.cloud.network; +import org.apache.cloudstack.api.Identity; import org.apache.cloudstack.api.InternalIdentity; -public interface VirtualRouterProvider extends InternalIdentity { +public interface VirtualRouterProvider extends InternalIdentity, Identity { public enum VirtualRouterProviderType { VirtualRouter, ElasticLoadBalancerVm, @@ -27,10 +28,6 @@ public interface VirtualRouterProvider extends InternalIdentity { public VirtualRouterProviderType getType(); - public long getId(); - - public String getUuid(); - public boolean isEnabled(); public long getNspId(); diff --git a/api/src/com/cloud/network/VpnUser.java b/api/src/com/cloud/network/VpnUser.java index d0b65043576..61e6bf3f355 100644 --- a/api/src/com/cloud/network/VpnUser.java +++ b/api/src/com/cloud/network/VpnUser.java @@ -17,19 +17,16 @@ package com.cloud.network; import com.cloud.acl.ControlledEntity; +import org.apache.cloudstack.api.Identity; import org.apache.cloudstack.api.InternalIdentity; -public interface VpnUser extends ControlledEntity, InternalIdentity { +public interface VpnUser extends ControlledEntity, InternalIdentity, Identity { enum State { Add, Revoke, Active } - long getId(); - - String getUuid(); - String getUsername(); String getPassword(); diff --git a/api/src/com/cloud/network/as/Condition.java b/api/src/com/cloud/network/as/Condition.java index 424299d3802..3d36a1086f0 100644 --- a/api/src/com/cloud/network/as/Condition.java +++ b/api/src/com/cloud/network/as/Condition.java @@ -18,9 +18,10 @@ package com.cloud.network.as; import com.cloud.acl.ControlledEntity; +import org.apache.cloudstack.api.Identity; import org.apache.cloudstack.api.InternalIdentity; -public interface Condition extends ControlledEntity, InternalIdentity { +public interface Condition extends ControlledEntity, Identity, InternalIdentity { static enum Operator { EQ, GT, LT, GE, LE @@ -31,8 +32,4 @@ public interface Condition extends ControlledEntity, InternalIdentity { long getThreshold(); Operator getRelationalOperator(); - - String getUuid(); - - long getId(); } diff --git a/api/src/com/cloud/network/as/Counter.java b/api/src/com/cloud/network/as/Counter.java index d9e2e0a1e1f..207ec57b592 100644 --- a/api/src/com/cloud/network/as/Counter.java +++ b/api/src/com/cloud/network/as/Counter.java @@ -17,7 +17,10 @@ package com.cloud.network.as; -public interface Counter { +import org.apache.cloudstack.api.Identity; +import org.apache.cloudstack.api.InternalIdentity; + +public interface Counter extends InternalIdentity, Identity { public static enum Source { netscaler, @@ -29,8 +32,4 @@ public interface Counter { String getValue(); Source getSource(); - - String getUuid(); - - long getId(); } diff --git a/api/src/com/cloud/network/lb/LoadBalancingRule.java b/api/src/com/cloud/network/lb/LoadBalancingRule.java index 3f37bdb628a..b68b9cbddd4 100644 --- a/api/src/com/cloud/network/lb/LoadBalancingRule.java +++ b/api/src/com/cloud/network/lb/LoadBalancingRule.java @@ -28,7 +28,7 @@ import com.cloud.network.rules.LoadBalancer; import com.cloud.utils.Pair; import org.apache.cloudstack.api.InternalIdentity; -public class LoadBalancingRule implements FirewallRule, LoadBalancer, InternalIdentity { +public class LoadBalancingRule implements FirewallRule, LoadBalancer { private LoadBalancer lb; private List destinations; private List stickinessPolicies; diff --git a/api/src/com/cloud/network/rules/FirewallRule.java b/api/src/com/cloud/network/rules/FirewallRule.java index 7f0c5eb6fe8..59f44681962 100644 --- a/api/src/com/cloud/network/rules/FirewallRule.java +++ b/api/src/com/cloud/network/rules/FirewallRule.java @@ -19,9 +19,10 @@ package com.cloud.network.rules; import java.util.List; import com.cloud.acl.ControlledEntity; +import org.apache.cloudstack.api.Identity; import org.apache.cloudstack.api.InternalIdentity; -public interface FirewallRule extends ControlledEntity, InternalIdentity { +public interface FirewallRule extends ControlledEntity, Identity, InternalIdentity { enum Purpose { Firewall, PortForwarding, @@ -48,17 +49,6 @@ public interface FirewallRule extends ControlledEntity, InternalIdentity { Egress } - /** - * @return database id. - */ - long getId(); - - /** - * - * @return uuid - */ - String getUuid(); - /** * @return external id. */ diff --git a/api/src/com/cloud/network/rules/LoadBalancer.java b/api/src/com/cloud/network/rules/LoadBalancer.java index 9734e7e3cb6..ab6085aceb7 100644 --- a/api/src/com/cloud/network/rules/LoadBalancer.java +++ b/api/src/com/cloud/network/rules/LoadBalancer.java @@ -31,5 +31,4 @@ public interface LoadBalancer extends FirewallRule { String getAlgorithm(); - String getUuid(); } diff --git a/api/src/com/cloud/network/rules/StaticNatRule.java b/api/src/com/cloud/network/rules/StaticNatRule.java index af06ec14c46..839430a6b8c 100644 --- a/api/src/com/cloud/network/rules/StaticNatRule.java +++ b/api/src/com/cloud/network/rules/StaticNatRule.java @@ -16,32 +16,7 @@ // under the License. package com.cloud.network.rules; -import com.cloud.acl.ControlledEntity; -import org.apache.cloudstack.api.InternalIdentity; - -public interface StaticNatRule extends ControlledEntity, InternalIdentity, FirewallRule { - - long getId(); - - String getXid(); - - String getProtocol(); - - Integer getSourcePortStart(); - - Integer getSourcePortEnd(); - - Purpose getPurpose(); - - State getState(); - - long getAccountId(); - - long getDomainId(); - - long getNetworkId(); - - Long getSourceIpAddressId(); +public interface StaticNatRule extends FirewallRule { String getDestIpAddress(); -} +} \ No newline at end of file diff --git a/api/src/com/cloud/network/rules/StickinessPolicy.java b/api/src/com/cloud/network/rules/StickinessPolicy.java index 49c2e60c493..e23ff828f74 100644 --- a/api/src/com/cloud/network/rules/StickinessPolicy.java +++ b/api/src/com/cloud/network/rules/StickinessPolicy.java @@ -19,12 +19,12 @@ package com.cloud.network.rules; import java.util.List; import com.cloud.utils.Pair; +import org.apache.cloudstack.api.Identity; +import org.apache.cloudstack.api.InternalIdentity; /** */ -public interface StickinessPolicy { - - public long getId(); +public interface StickinessPolicy extends InternalIdentity, Identity { public long getLoadBalancerId(); @@ -38,5 +38,4 @@ public interface StickinessPolicy { public List> getParams(); /* get params in Map format */ - public String getUuid(); } diff --git a/api/src/com/cloud/network/security/SecurityGroup.java b/api/src/com/cloud/network/security/SecurityGroup.java index 9cf885b2aa8..b39ccc4904f 100644 --- a/api/src/com/cloud/network/security/SecurityGroup.java +++ b/api/src/com/cloud/network/security/SecurityGroup.java @@ -17,13 +17,11 @@ package com.cloud.network.security; import com.cloud.acl.ControlledEntity; +import org.apache.cloudstack.api.Identity; import org.apache.cloudstack.api.InternalIdentity; //FIXME: Annotation @doc("") -public interface SecurityGroup extends ControlledEntity, InternalIdentity { - long getId(); - - String getUuid(); +public interface SecurityGroup extends ControlledEntity, InternalIdentity, Identity { String getName(); diff --git a/api/src/com/cloud/network/security/SecurityGroupRules.java b/api/src/com/cloud/network/security/SecurityGroupRules.java index 86c2acaae02..0b575e10d56 100644 --- a/api/src/com/cloud/network/security/SecurityGroupRules.java +++ b/api/src/com/cloud/network/security/SecurityGroupRules.java @@ -16,9 +16,9 @@ // under the License. package com.cloud.network.security; import com.cloud.network.security.SecurityRule.SecurityRuleType; +import org.apache.cloudstack.api.InternalIdentity; -public interface SecurityGroupRules { - long getId(); +public interface SecurityGroupRules extends InternalIdentity { String getName(); diff --git a/api/src/com/cloud/network/security/SecurityRule.java b/api/src/com/cloud/network/security/SecurityRule.java index faf1b56db3a..bd4192d614c 100644 --- a/api/src/com/cloud/network/security/SecurityRule.java +++ b/api/src/com/cloud/network/security/SecurityRule.java @@ -17,8 +17,10 @@ package com.cloud.network.security; import com.cloud.async.AsyncInstanceCreateStatus; +import org.apache.cloudstack.api.Identity; +import org.apache.cloudstack.api.InternalIdentity; -public interface SecurityRule { +public interface SecurityRule extends Identity, InternalIdentity { public static class SecurityRuleType { public static final SecurityRuleType IngressRule = new SecurityRuleType("ingress"); @@ -33,7 +35,6 @@ public interface SecurityRule { } private String _type; } - long getId(); long getSecurityGroupId(); @@ -52,7 +53,4 @@ public interface SecurityRule { Long getAllowedNetworkId(); String getAllowedSourceIpCidr(); - - String getUuid(); - } diff --git a/api/src/com/cloud/network/vpc/PrivateGateway.java b/api/src/com/cloud/network/vpc/PrivateGateway.java index 82672a6ef12..2f346852e30 100644 --- a/api/src/com/cloud/network/vpc/PrivateGateway.java +++ b/api/src/com/cloud/network/vpc/PrivateGateway.java @@ -16,6 +16,6 @@ // under the License. package com.cloud.network.vpc; -public interface PrivateGateway extends VpcGateway{ +public interface PrivateGateway extends VpcGateway { long getPhysicalNetworkId(); } diff --git a/api/src/com/cloud/network/vpc/StaticRoute.java b/api/src/com/cloud/network/vpc/StaticRoute.java index f06df7d80e9..f45691f49ac 100644 --- a/api/src/com/cloud/network/vpc/StaticRoute.java +++ b/api/src/com/cloud/network/vpc/StaticRoute.java @@ -17,9 +17,10 @@ package com.cloud.network.vpc; import com.cloud.acl.ControlledEntity; +import org.apache.cloudstack.api.Identity; import org.apache.cloudstack.api.InternalIdentity; -public interface StaticRoute extends ControlledEntity, InternalIdentity { +public interface StaticRoute extends ControlledEntity, Identity, InternalIdentity { enum State { Staged, // route been created but has never got through network rule conflict detection. Routes in this state can not be sent to VPC virtual router. Add, // Add means the route has been created and has gone through network rule conflict detection. @@ -46,13 +47,4 @@ public interface StaticRoute extends ControlledEntity, InternalIdentity { * @return */ Long getVpcId(); - - /** - * @return - */ - long getId(); - - String getUuid(); - - } diff --git a/api/src/com/cloud/network/vpc/StaticRouteProfile.java b/api/src/com/cloud/network/vpc/StaticRouteProfile.java index 9ef3c6621da..656355590f3 100644 --- a/api/src/com/cloud/network/vpc/StaticRouteProfile.java +++ b/api/src/com/cloud/network/vpc/StaticRouteProfile.java @@ -18,7 +18,7 @@ package com.cloud.network.vpc; import org.apache.cloudstack.api.InternalIdentity; -public class StaticRouteProfile implements StaticRoute, InternalIdentity { +public class StaticRouteProfile implements StaticRoute { private long id; private String uuid; private String targetCidr; diff --git a/api/src/com/cloud/network/vpc/Vpc.java b/api/src/com/cloud/network/vpc/Vpc.java index d3fc594fd9e..d37b12e232b 100644 --- a/api/src/com/cloud/network/vpc/Vpc.java +++ b/api/src/com/cloud/network/vpc/Vpc.java @@ -18,9 +18,10 @@ package com.cloud.network.vpc; import com.cloud.acl.ControlledEntity; import com.cloud.network.Network; +import org.apache.cloudstack.api.Identity; import org.apache.cloudstack.api.InternalIdentity; -public interface Vpc extends ControlledEntity, InternalIdentity{ +public interface Vpc extends ControlledEntity, Identity, InternalIdentity { public enum State { Enabled, Inactive @@ -30,10 +31,6 @@ public interface Vpc extends ControlledEntity, InternalIdentity{ boolean readyToUse(); - long getId(); - - String getUuid(); - String getName(); long getZoneId(); diff --git a/api/src/com/cloud/network/vpc/VpcGateway.java b/api/src/com/cloud/network/vpc/VpcGateway.java index 7bed3e71cb2..e78422d6af9 100644 --- a/api/src/com/cloud/network/vpc/VpcGateway.java +++ b/api/src/com/cloud/network/vpc/VpcGateway.java @@ -33,8 +33,6 @@ public interface VpcGateway extends Identity, ControlledEntity, InternalIdentity Deleting } - long getId(); - /** * @return */ diff --git a/api/src/com/cloud/network/vpc/VpcOffering.java b/api/src/com/cloud/network/vpc/VpcOffering.java index 721b943479f..1acfcd21418 100644 --- a/api/src/com/cloud/network/vpc/VpcOffering.java +++ b/api/src/com/cloud/network/vpc/VpcOffering.java @@ -16,9 +16,10 @@ // under the License. package com.cloud.network.vpc; +import org.apache.cloudstack.api.Identity; import org.apache.cloudstack.api.InternalIdentity; -public interface VpcOffering extends InternalIdentity { +public interface VpcOffering extends InternalIdentity, Identity { public enum State { Disabled, Enabled @@ -26,10 +27,6 @@ public interface VpcOffering extends InternalIdentity { public static final String defaultVPCOfferingName = "Default VPC offering"; - long getId(); - - String getUuid(); - String getName(); String getUniqueName(); diff --git a/api/src/com/cloud/offering/DiskOffering.java b/api/src/com/cloud/offering/DiskOffering.java index 10a045d330a..8e9b54c0053 100644 --- a/api/src/com/cloud/offering/DiskOffering.java +++ b/api/src/com/cloud/offering/DiskOffering.java @@ -16,6 +16,9 @@ // under the License. package com.cloud.offering; +import org.apache.cloudstack.api.Identity; +import org.apache.cloudstack.api.InternalIdentity; + import java.util.Date; /** @@ -23,10 +26,7 @@ import java.util.Date; * the disk offering. * */ -public interface DiskOffering { - long getId(); - - String getUuid(); +public interface DiskOffering extends Identity, InternalIdentity { String getUniqueName(); diff --git a/api/src/com/cloud/offering/NetworkOffering.java b/api/src/com/cloud/offering/NetworkOffering.java index 4b8ffd34ee0..4035ca2a941 100644 --- a/api/src/com/cloud/offering/NetworkOffering.java +++ b/api/src/com/cloud/offering/NetworkOffering.java @@ -18,13 +18,14 @@ package com.cloud.offering; import com.cloud.network.Network.GuestType; import com.cloud.network.Networks.TrafficType; +import org.apache.cloudstack.api.Identity; import org.apache.cloudstack.api.InternalIdentity; /** * Describes network offering * */ -public interface NetworkOffering extends InternalIdentity { +public interface NetworkOffering extends InternalIdentity, Identity { public enum Availability { Required, @@ -51,11 +52,6 @@ public interface NetworkOffering extends InternalIdentity { public final static String DefaultIsolatedNetworkOfferingForVpcNetworks = "DefaultIsolatedNetworkOfferingForVpcNetworks"; public final static String DefaultIsolatedNetworkOfferingForVpcNetworksNoLB = "DefaultIsolatedNetworkOfferingForVpcNetworksNoLB"; - - long getId(); - - String getUuid(); - /** * @return name for the network offering. */ diff --git a/api/src/com/cloud/org/Cluster.java b/api/src/com/cloud/org/Cluster.java index db73db4bba2..cb72a70b817 100644 --- a/api/src/com/cloud/org/Cluster.java +++ b/api/src/com/cloud/org/Cluster.java @@ -18,17 +18,15 @@ package com.cloud.org; import com.cloud.hypervisor.Hypervisor.HypervisorType; import com.cloud.org.Managed.ManagedState; +import org.apache.cloudstack.api.Identity; +import org.apache.cloudstack.api.InternalIdentity; -public interface Cluster extends Grouping { +public interface Cluster extends Grouping, InternalIdentity, Identity { public static enum ClusterType { CloudManaged, ExternalManaged; }; - long getId(); - - String getUuid(); - String getName(); long getDataCenterId(); diff --git a/api/src/com/cloud/projects/ProjectInvitation.java b/api/src/com/cloud/projects/ProjectInvitation.java index f4cac2ebea3..bfa35302601 100644 --- a/api/src/com/cloud/projects/ProjectInvitation.java +++ b/api/src/com/cloud/projects/ProjectInvitation.java @@ -19,15 +19,14 @@ package com.cloud.projects; import java.util.Date; import com.cloud.acl.ControlledEntity; +import org.apache.cloudstack.api.Identity; import org.apache.cloudstack.api.InternalIdentity; -public interface ProjectInvitation extends ControlledEntity, InternalIdentity { +public interface ProjectInvitation extends ControlledEntity, Identity, InternalIdentity { public enum State { Pending, Completed, Expired, Declined } - long getId(); - long getProjectId(); Long getForAccountId(); diff --git a/api/src/com/cloud/server/ResourceTag.java b/api/src/com/cloud/server/ResourceTag.java index e693569ade4..5e82ae43846 100644 --- a/api/src/com/cloud/server/ResourceTag.java +++ b/api/src/com/cloud/server/ResourceTag.java @@ -17,9 +17,10 @@ package com.cloud.server; import com.cloud.acl.ControlledEntity; +import org.apache.cloudstack.api.Identity; import org.apache.cloudstack.api.InternalIdentity; -public interface ResourceTag extends ControlledEntity, InternalIdentity { +public interface ResourceTag extends ControlledEntity, Identity, InternalIdentity { public enum TaggedResourceType { UserVm, @@ -39,11 +40,6 @@ public interface ResourceTag extends ControlledEntity, InternalIdentity { StaticRoute } - /** - * @return - */ - long getId(); - /** * @return */ diff --git a/api/src/com/cloud/storage/GuestOS.java b/api/src/com/cloud/storage/GuestOS.java index de04272929c..437cd37d1ab 100644 --- a/api/src/com/cloud/storage/GuestOS.java +++ b/api/src/com/cloud/storage/GuestOS.java @@ -16,13 +16,10 @@ // under the License. package com.cloud.storage; +import org.apache.cloudstack.api.Identity; import org.apache.cloudstack.api.InternalIdentity; -public interface GuestOS extends InternalIdentity { - - long getId(); - - String getUuid(); +public interface GuestOS extends InternalIdentity, Identity { String getName(); diff --git a/api/src/com/cloud/storage/GuestOsCategory.java b/api/src/com/cloud/storage/GuestOsCategory.java index cae4518fc0b..c28d7d6bf77 100644 --- a/api/src/com/cloud/storage/GuestOsCategory.java +++ b/api/src/com/cloud/storage/GuestOsCategory.java @@ -16,12 +16,12 @@ // under the License. package com.cloud.storage; -public interface GuestOsCategory { +import org.apache.cloudstack.api.Identity; +import org.apache.cloudstack.api.InternalIdentity; + +public interface GuestOsCategory extends Identity, InternalIdentity { // Used by OS preference, 'None' for no OS preference public static final String CATEGORY_NONE ="None"; - long getId(); - - String getUuid(); String getName(); diff --git a/api/src/com/cloud/storage/S3.java b/api/src/com/cloud/storage/S3.java index 7a679f2adc5..708e280ca5b 100644 --- a/api/src/com/cloud/storage/S3.java +++ b/api/src/com/cloud/storage/S3.java @@ -19,14 +19,12 @@ package com.cloud.storage; import com.cloud.agent.api.to.S3TO; +import org.apache.cloudstack.api.Identity; +import org.apache.cloudstack.api.InternalIdentity; import java.util.Date; -public interface S3 { - - long getId(); - - String getUuid(); +public interface S3 extends InternalIdentity, Identity { String getAccessKey(); diff --git a/api/src/com/cloud/storage/Snapshot.java b/api/src/com/cloud/storage/Snapshot.java index 0ca05b7e106..5405a24d10d 100644 --- a/api/src/com/cloud/storage/Snapshot.java +++ b/api/src/com/cloud/storage/Snapshot.java @@ -20,9 +20,10 @@ import java.util.Date; import com.cloud.acl.ControlledEntity; import com.cloud.hypervisor.Hypervisor.HypervisorType; +import org.apache.cloudstack.api.Identity; import org.apache.cloudstack.api.InternalIdentity; -public interface Snapshot extends ControlledEntity, InternalIdentity { +public interface Snapshot extends ControlledEntity, Identity, InternalIdentity { public enum Type { MANUAL, RECURRING, @@ -68,10 +69,6 @@ public interface Snapshot extends ControlledEntity, InternalIdentity { public static final long MANUAL_POLICY_ID = 0L; - long getId(); - - String getUuid(); - long getAccountId(); long getVolumeId(); diff --git a/api/src/com/cloud/storage/StoragePool.java b/api/src/com/cloud/storage/StoragePool.java index 2d01f9c324e..3334da54ec0 100644 --- a/api/src/com/cloud/storage/StoragePool.java +++ b/api/src/com/cloud/storage/StoragePool.java @@ -19,25 +19,16 @@ package com.cloud.storage; import java.util.Date; import com.cloud.storage.Storage.StoragePoolType; +import org.apache.cloudstack.api.Identity; +import org.apache.cloudstack.api.InternalIdentity; -public interface StoragePool { - - /** - * @return id of the pool. - */ - long getId(); +public interface StoragePool extends Identity, InternalIdentity { /** * @return name of the pool. */ String getName(); - /*** - * - * @return unique identifier - */ - String getUuid(); - /** * @return the type of pool. */ diff --git a/api/src/com/cloud/storage/Upload.java b/api/src/com/cloud/storage/Upload.java index c1abc4c389c..a20faf1dc34 100755 --- a/api/src/com/cloud/storage/Upload.java +++ b/api/src/com/cloud/storage/Upload.java @@ -16,11 +16,12 @@ // under the License. package com.cloud.storage; +import org.apache.cloudstack.api.Identity; import org.apache.cloudstack.api.InternalIdentity; import java.util.Date; -public interface Upload extends InternalIdentity { +public interface Upload extends InternalIdentity, Identity { public static enum Status { UNKNOWN, ABANDONED, UPLOADED, NOT_UPLOADED, UPLOAD_ERROR, UPLOAD_IN_PROGRESS, NOT_COPIED, COPY_IN_PROGRESS, COPY_ERROR, COPY_COMPLETE, DOWNLOAD_URL_CREATED, DOWNLOAD_URL_NOT_CREATED, ERROR @@ -36,10 +37,6 @@ public interface Upload extends InternalIdentity { long getHostId(); - long getId(); - - String getUuid(); - Date getCreated(); Date getLastUpdated(); diff --git a/api/src/com/cloud/storage/VMTemplateStorageResourceAssoc.java b/api/src/com/cloud/storage/VMTemplateStorageResourceAssoc.java index 49fbc6da427..97baa4b29c4 100644 --- a/api/src/com/cloud/storage/VMTemplateStorageResourceAssoc.java +++ b/api/src/com/cloud/storage/VMTemplateStorageResourceAssoc.java @@ -16,9 +16,12 @@ // under the License. package com.cloud.storage; +import org.apache.cloudstack.api.Identity; +import org.apache.cloudstack.api.InternalIdentity; + import java.util.Date; -public interface VMTemplateStorageResourceAssoc { +public interface VMTemplateStorageResourceAssoc extends InternalIdentity { public static enum Status { UNKNOWN, DOWNLOAD_ERROR, NOT_DOWNLOADED, DOWNLOAD_IN_PROGRESS, DOWNLOADED, ABANDONED, UPLOADED, NOT_UPLOADED, UPLOAD_ERROR, UPLOAD_IN_PROGRESS } @@ -35,8 +38,6 @@ public interface VMTemplateStorageResourceAssoc { void setDownloadState(Status downloadState); - long getId(); - Date getCreated(); Date getLastUpdated(); diff --git a/api/src/com/cloud/storage/Volume.java b/api/src/com/cloud/storage/Volume.java index 52b7a112804..747f06f6e21 100755 --- a/api/src/com/cloud/storage/Volume.java +++ b/api/src/com/cloud/storage/Volume.java @@ -22,9 +22,10 @@ import com.cloud.acl.ControlledEntity; import com.cloud.template.BasedOn; import com.cloud.utils.fsm.StateMachine2; import com.cloud.utils.fsm.StateObject; +import org.apache.cloudstack.api.Identity; import org.apache.cloudstack.api.InternalIdentity; -public interface Volume extends ControlledEntity, InternalIdentity, BasedOn, StateObject { +public interface Volume extends ControlledEntity, Identity, InternalIdentity, BasedOn, StateObject { enum Type { UNKNOWN, ROOT, SWAP, DATADISK, ISO }; @@ -94,10 +95,6 @@ public interface Volume extends ControlledEntity, InternalIdentity, BasedOn, Sta ExpungingRequested; } - long getId(); - - String getUuid(); - /** * @return the volume name */ diff --git a/api/src/com/cloud/storage/snapshot/SnapshotPolicy.java b/api/src/com/cloud/storage/snapshot/SnapshotPolicy.java index 7d850ac3872..37ce6fd1536 100644 --- a/api/src/com/cloud/storage/snapshot/SnapshotPolicy.java +++ b/api/src/com/cloud/storage/snapshot/SnapshotPolicy.java @@ -16,10 +16,10 @@ // under the License. package com.cloud.storage.snapshot; -public interface SnapshotPolicy { - long getId(); +import org.apache.cloudstack.api.Identity; +import org.apache.cloudstack.api.InternalIdentity; - String getUuid(); +public interface SnapshotPolicy extends Identity, InternalIdentity { long getVolumeId(); diff --git a/api/src/com/cloud/template/VirtualMachineTemplate.java b/api/src/com/cloud/template/VirtualMachineTemplate.java index 7527e9a1c30..967429c1fec 100755 --- a/api/src/com/cloud/template/VirtualMachineTemplate.java +++ b/api/src/com/cloud/template/VirtualMachineTemplate.java @@ -23,9 +23,10 @@ import com.cloud.acl.ControlledEntity; import com.cloud.hypervisor.Hypervisor.HypervisorType; import com.cloud.storage.Storage.ImageFormat; import com.cloud.storage.Storage.TemplateType; +import org.apache.cloudstack.api.Identity; import org.apache.cloudstack.api.InternalIdentity; -public interface VirtualMachineTemplate extends ControlledEntity, InternalIdentity { +public interface VirtualMachineTemplate extends ControlledEntity, Identity, InternalIdentity { public static enum BootloaderType { PyGrub, HVM, External, CD @@ -41,13 +42,6 @@ public interface VirtualMachineTemplate extends ControlledEntity, InternalIdenti all // all templates (only usable by admins) } - /** - * @return id. - */ - long getId(); - - String getUuid(); - boolean isFeatured(); /** diff --git a/api/src/com/cloud/user/Account.java b/api/src/com/cloud/user/Account.java index 2a1a8ea7fe4..b07883a3a7e 100755 --- a/api/src/com/cloud/user/Account.java +++ b/api/src/com/cloud/user/Account.java @@ -19,9 +19,10 @@ package com.cloud.user; import java.util.Date; import com.cloud.acl.ControlledEntity; +import org.apache.cloudstack.api.Identity; import org.apache.cloudstack.api.InternalIdentity; -public interface Account extends ControlledEntity, InternalIdentity { +public interface Account extends ControlledEntity, InternalIdentity, Identity { public enum Type { Normal, Admin, @@ -50,10 +51,6 @@ public interface Account extends ControlledEntity, InternalIdentity { public static final long ACCOUNT_ID_SYSTEM = 1; - public long getId(); - - public String getUuid(); - public String getAccountName(); public short getType(); diff --git a/api/src/com/cloud/user/SSHKeyPair.java b/api/src/com/cloud/user/SSHKeyPair.java index 117c4727bfd..8da58e52dcf 100644 --- a/api/src/com/cloud/user/SSHKeyPair.java +++ b/api/src/com/cloud/user/SSHKeyPair.java @@ -21,11 +21,6 @@ import org.apache.cloudstack.api.InternalIdentity; public interface SSHKeyPair extends ControlledEntity, InternalIdentity { - /** - * @return The id of the key pair. - */ - public long getId(); - /** * @return The given name of the key pair. */ diff --git a/api/src/com/cloud/vm/InstanceGroup.java b/api/src/com/cloud/vm/InstanceGroup.java index 283e1e5cb75..4a5bc691c27 100644 --- a/api/src/com/cloud/vm/InstanceGroup.java +++ b/api/src/com/cloud/vm/InstanceGroup.java @@ -19,10 +19,10 @@ package com.cloud.vm; import java.util.Date; import com.cloud.acl.ControlledEntity; +import org.apache.cloudstack.api.Identity; import org.apache.cloudstack.api.InternalIdentity; -public interface InstanceGroup extends ControlledEntity, InternalIdentity { - long getId(); +public interface InstanceGroup extends ControlledEntity, Identity, InternalIdentity { String getName(); diff --git a/api/src/com/cloud/vm/Nic.java b/api/src/com/cloud/vm/Nic.java index dfba18a7def..84c0034b430 100644 --- a/api/src/com/cloud/vm/Nic.java +++ b/api/src/com/cloud/vm/Nic.java @@ -25,11 +25,13 @@ import com.cloud.network.Networks.AddressFormat; import com.cloud.network.Networks.Mode; import com.cloud.utils.fsm.FiniteState; import com.cloud.utils.fsm.StateMachine; +import org.apache.cloudstack.api.Identity; +import org.apache.cloudstack.api.InternalIdentity; /** * Nic represents one nic on the VM. */ -public interface Nic { +public interface Nic extends Identity, InternalIdentity { enum Event { ReservationRequested, ReleaseRequested, CancelRequested, OperationCompleted, OperationFailed, } @@ -86,11 +88,6 @@ public interface Nic { PlaceHolder, Create, Start, Managed; } - /** - * @return id in the CloudStack database - */ - long getId(); - /** * @return reservation id returned by the allocation source. This can be the String version of the database id if * the diff --git a/api/src/com/cloud/vm/VirtualMachine.java b/api/src/com/cloud/vm/VirtualMachine.java index 87a903d2deb..6f084efdc81 100755 --- a/api/src/com/cloud/vm/VirtualMachine.java +++ b/api/src/com/cloud/vm/VirtualMachine.java @@ -207,11 +207,6 @@ public interface VirtualMachine extends RunningOn, ControlledEntity, Identity, I */ public String getInstanceName(); - /** - * @return the id of this virtual machine. null means the id has not been set. - */ - public long getId(); - /** * @return the host name of the virtual machine. If the user did not * specify the host name when creating the virtual machine then it is diff --git a/api/test/integration/api/__init__.py b/api/test/integration/api/__init__.py new file mode 100644 index 00000000000..d216be4ddc9 --- /dev/null +++ b/api/test/integration/api/__init__.py @@ -0,0 +1,16 @@ +# 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. \ No newline at end of file diff --git a/api/test/integration/api/setup.py b/api/test/integration/api/setup.py new file mode 100644 index 00000000000..13a83393a91 --- /dev/null +++ b/api/test/integration/api/setup.py @@ -0,0 +1,16 @@ +# 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. diff --git a/api/test/integration/api/test/__init__.py b/api/test/integration/api/test/__init__.py new file mode 100644 index 00000000000..d216be4ddc9 --- /dev/null +++ b/api/test/integration/api/test/__init__.py @@ -0,0 +1,16 @@ +# 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. \ No newline at end of file diff --git a/api/test/integration/api/test/account/__init__.py b/api/test/integration/api/test/account/__init__.py new file mode 100644 index 00000000000..d216be4ddc9 --- /dev/null +++ b/api/test/integration/api/test/account/__init__.py @@ -0,0 +1,16 @@ +# 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. \ No newline at end of file diff --git a/api/test/integration/api/test/account/testCreateAccount.py b/api/test/integration/api/test/account/testCreateAccount.py new file mode 100644 index 00000000000..b094e819421 --- /dev/null +++ b/api/test/integration/api/test/account/testCreateAccount.py @@ -0,0 +1,61 @@ +# 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. + +import factory +import marvin +from marvin import cloudstackTestCase +from marvin.integration.lib.base import * +from marvin.integration.lib import utils + +class AccountFactory(factory.Factory): + FACTORY_FOR = createAccount.createAccountCmd + + firstname = 'firstname-'+random_gen() + lastname = 'lastname-'+random_gen() + email = factory.lazy_attribute(lambda e: '{0}.{1}@cloudstack.org'.format(e.firstname, e.lastname).lower()) + +class AdminAccountFactory(AccountFactory): + accounttype = 1 + +class UserAccountFactory(AccountFactory): + accounttype = 0 + +class TestCreateAccount(cloudstackTestCase): + def setUp(self): + self.apiClient = self.testClient.getApiClient() + self.userApiClient = self.testClient.getUserApiClient(account='test'+utils.random_gen(), 'ROOT') + + def test_createAccountAsAdmin(self): + """ + creates an account for a user as admin + """ + Account.create(self.apiClient, services=None) + from marvin.cloudstackAPI.createAccount import createAccountCmd + self.assertEqual(True, False) + + def test_createAccountAsUser(self): + """ + negative: create account as a user + """ + self.assertEqual(True, False) + + def tearDown(self): + self.apiClient.close() + self.userApiClient.close() + +if __name__ == '__main__': + unittest.main() diff --git a/core/src/com/cloud/alert/AlertVO.java b/core/src/com/cloud/alert/AlertVO.java index 7208b34d465..f6089d65043 100755 --- a/core/src/com/cloud/alert/AlertVO.java +++ b/core/src/com/cloud/alert/AlertVO.java @@ -34,7 +34,7 @@ import org.apache.cloudstack.api.InternalIdentity; @Entity @Table(name="alert") -public class AlertVO implements Alert, Identity, InternalIdentity { +public class AlertVO implements Alert { @Id @GeneratedValue(strategy=GenerationType.IDENTITY) @Column(name="id") diff --git a/core/src/com/cloud/async/AsyncJobVO.java b/core/src/com/cloud/async/AsyncJobVO.java index 75b9e2d842d..ad482b03a9d 100644 --- a/core/src/com/cloud/async/AsyncJobVO.java +++ b/core/src/com/cloud/async/AsyncJobVO.java @@ -36,7 +36,7 @@ import org.apache.cloudstack.api.InternalIdentity; @Entity @Table(name="async_job") -public class AsyncJobVO implements AsyncJob, InternalIdentity { +public class AsyncJobVO implements AsyncJob { public static final int CALLBACK_POLLING = 0; public static final int CALLBACK_EMAIL = 1; @@ -123,24 +123,24 @@ public class AsyncJobVO implements AsyncJob, InternalIdentity { public AsyncJobVO() { this.uuid = UUID.randomUUID().toString(); - } - - public AsyncJobVO(long userId, long accountId, String cmd, String cmdInfo, Long instanceId, Type instanceType) { - this.userId = userId; - this.accountId = accountId; - this.cmd = cmd; - this.cmdInfo = cmdInfo; + } + + public AsyncJobVO(long userId, long accountId, String cmd, String cmdInfo, Long instanceId, Type instanceType) { + this.userId = userId; + this.accountId = accountId; + this.cmd = cmd; + this.cmdInfo = cmdInfo; this.callbackType = CALLBACK_POLLING; this.uuid = UUID.randomUUID().toString(); this.instanceId = instanceId; - } - - public AsyncJobVO(long userId, long accountId, String cmd, String cmdInfo, - int callbackType, String callbackAddress, Long instanceId, Type instanceType) { - - this(userId, accountId, cmd, cmdInfo, instanceId, instanceType); - this.callbackType = callbackType; - this.callbackAddress = callbackAddress; + } + + public AsyncJobVO(long userId, long accountId, String cmd, String cmdInfo, + int callbackType, String callbackAddress, Long instanceId, Type instanceType) { + + this(userId, accountId, cmd, cmdInfo, instanceId, instanceType); + this.callbackType = callbackType; + this.callbackAddress = callbackAddress; this.uuid = UUID.randomUUID().toString(); } diff --git a/core/src/com/cloud/capacity/CapacityVO.java b/core/src/com/cloud/capacity/CapacityVO.java index 7a61252e9b2..d34e9d36840 100755 --- a/core/src/com/cloud/capacity/CapacityVO.java +++ b/core/src/com/cloud/capacity/CapacityVO.java @@ -33,7 +33,7 @@ import org.apache.cloudstack.api.InternalIdentity; @Entity @Table(name="op_host_capacity") -public class CapacityVO implements Capacity, InternalIdentity { +public class CapacityVO implements Capacity { @Id @GeneratedValue(strategy=GenerationType.IDENTITY) @Column(name="id") @@ -103,7 +103,7 @@ public class CapacityVO implements Capacity, InternalIdentity { public long getId() { return id; } - + @Override public Long getHostOrPoolId() { return hostOrPoolId; @@ -196,4 +196,9 @@ public class CapacityVO implements Capacity, InternalIdentity { public void setUsedPercentage(float usedPercentage) { this.usedPercentage = usedPercentage; } + + @Override + public String getUuid() { + return null; //To change body of implemented methods use File | Settings | File Templates. + } } diff --git a/core/src/com/cloud/configuration/ResourceCountVO.java b/core/src/com/cloud/configuration/ResourceCountVO.java index 88ad1a80e23..b87f55caa5e 100644 --- a/core/src/com/cloud/configuration/ResourceCountVO.java +++ b/core/src/com/cloud/configuration/ResourceCountVO.java @@ -29,7 +29,7 @@ import javax.persistence.Table; @Entity @Table(name="resource_count") -public class ResourceCountVO implements ResourceCount, InternalIdentity { +public class ResourceCountVO implements ResourceCount { @Id @GeneratedValue(strategy=GenerationType.IDENTITY) diff --git a/core/src/com/cloud/configuration/ResourceLimitVO.java b/core/src/com/cloud/configuration/ResourceLimitVO.java index 4aefa4e69ac..c131495a74f 100644 --- a/core/src/com/cloud/configuration/ResourceLimitVO.java +++ b/core/src/com/cloud/configuration/ResourceLimitVO.java @@ -29,7 +29,7 @@ import javax.persistence.Table; @Entity @Table(name = "resource_limit") -public class ResourceLimitVO implements ResourceLimit, InternalIdentity { +public class ResourceLimitVO implements ResourceLimit { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) diff --git a/core/src/com/cloud/event/EventVO.java b/core/src/com/cloud/event/EventVO.java index d91439bf618..ac46f24b2ee 100644 --- a/core/src/com/cloud/event/EventVO.java +++ b/core/src/com/cloud/event/EventVO.java @@ -35,7 +35,7 @@ import org.apache.cloudstack.api.InternalIdentity; @Entity @Table(name="event") -public class EventVO implements Event, Identity, InternalIdentity { +public class EventVO implements Event { @Id @GeneratedValue(strategy=GenerationType.IDENTITY) @Column(name="id") diff --git a/core/src/com/cloud/event/UsageEvent.java b/core/src/com/cloud/event/UsageEvent.java index 0b0505065e5..0d4ef177405 100644 --- a/core/src/com/cloud/event/UsageEvent.java +++ b/core/src/com/cloud/event/UsageEvent.java @@ -21,7 +21,6 @@ import org.apache.cloudstack.api.InternalIdentity; import java.util.Date; public interface UsageEvent extends InternalIdentity { - long getId(); String getType(); Date getCreateDate(); diff --git a/core/src/com/cloud/event/UsageEventVO.java b/core/src/com/cloud/event/UsageEventVO.java index ed34f01cd64..c92972b6072 100644 --- a/core/src/com/cloud/event/UsageEventVO.java +++ b/core/src/com/cloud/event/UsageEventVO.java @@ -30,7 +30,7 @@ import org.apache.cloudstack.api.InternalIdentity; @Entity @Table(name="usage_event") -public class UsageEventVO implements UsageEvent, InternalIdentity { +public class UsageEventVO implements UsageEvent { @Id @GeneratedValue(strategy=GenerationType.IDENTITY) @Column(name="id") diff --git a/core/src/com/cloud/host/HostVO.java b/core/src/com/cloud/host/HostVO.java index 92445a9430c..c814b94a426 100755 --- a/core/src/com/cloud/host/HostVO.java +++ b/core/src/com/cloud/host/HostVO.java @@ -49,7 +49,7 @@ import org.apache.cloudstack.api.InternalIdentity; @Table(name="host") @Inheritance(strategy=InheritanceType.TABLE_PER_CLASS) @DiscriminatorColumn(name="type", discriminatorType=DiscriminatorType.STRING, length=32) -public class HostVO implements Host, Identity, InternalIdentity { +public class HostVO implements Host { @Id @GeneratedValue(strategy=GenerationType.IDENTITY) @Column(name="id") diff --git a/core/src/com/cloud/hypervisor/HypervisorCapabilitiesVO.java b/core/src/com/cloud/hypervisor/HypervisorCapabilitiesVO.java index 6e19f11a03f..56e8e0a734d 100644 --- a/core/src/com/cloud/hypervisor/HypervisorCapabilitiesVO.java +++ b/core/src/com/cloud/hypervisor/HypervisorCapabilitiesVO.java @@ -34,7 +34,7 @@ import org.apache.cloudstack.api.InternalIdentity; @Entity @Table(name="hypervisor_capabilities") -public class HypervisorCapabilitiesVO implements HypervisorCapabilities, Identity, InternalIdentity { +public class HypervisorCapabilitiesVO implements HypervisorCapabilities { @Id @GeneratedValue(strategy=GenerationType.IDENTITY) @Column(name="id") diff --git a/core/src/com/cloud/network/VpnUserVO.java b/core/src/com/cloud/network/VpnUserVO.java index 4d3266a3a0f..5a8e531893e 100644 --- a/core/src/com/cloud/network/VpnUserVO.java +++ b/core/src/com/cloud/network/VpnUserVO.java @@ -33,7 +33,7 @@ import org.apache.cloudstack.api.InternalIdentity; @Entity @Table(name=("vpn_users")) -public class VpnUserVO implements VpnUser, Identity, InternalIdentity { +public class VpnUserVO implements VpnUser { @Id @GeneratedValue(strategy=GenerationType.IDENTITY) @Column(name="id") diff --git a/core/src/com/cloud/network/security/SecurityGroupRuleVO.java b/core/src/com/cloud/network/security/SecurityGroupRuleVO.java index 0b26dd14412..f01b50fd250 100644 --- a/core/src/com/cloud/network/security/SecurityGroupRuleVO.java +++ b/core/src/com/cloud/network/security/SecurityGroupRuleVO.java @@ -33,7 +33,7 @@ import org.apache.cloudstack.api.InternalIdentity; @Entity @Table(name = ("security_group_rule")) -public class SecurityGroupRuleVO implements SecurityRule, InternalIdentity { +public class SecurityGroupRuleVO implements SecurityRule { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "id") diff --git a/core/src/com/cloud/network/security/SecurityGroupRulesVO.java b/core/src/com/cloud/network/security/SecurityGroupRulesVO.java index eb58a5480e8..82060efce12 100644 --- a/core/src/com/cloud/network/security/SecurityGroupRulesVO.java +++ b/core/src/com/cloud/network/security/SecurityGroupRulesVO.java @@ -33,7 +33,7 @@ import org.apache.cloudstack.api.InternalIdentity; @Table(name = ("security_group")) @JoinType(type = "left") @SecondaryTable(name = "security_group_rule", pkJoinColumns = { @PrimaryKeyJoinColumn(name = "id", referencedColumnName = "security_group_id") }) -public class SecurityGroupRulesVO implements SecurityGroupRules, InternalIdentity { +public class SecurityGroupRulesVO implements SecurityGroupRules { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "id") diff --git a/core/src/com/cloud/network/security/SecurityGroupVO.java b/core/src/com/cloud/network/security/SecurityGroupVO.java index 00101661cd0..be7c593f744 100644 --- a/core/src/com/cloud/network/security/SecurityGroupVO.java +++ b/core/src/com/cloud/network/security/SecurityGroupVO.java @@ -30,7 +30,7 @@ import org.apache.cloudstack.api.InternalIdentity; @Entity @Table(name = ("security_group")) -public class SecurityGroupVO implements SecurityGroup, Identity, InternalIdentity { +public class SecurityGroupVO implements SecurityGroup { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "id") diff --git a/core/src/com/cloud/network/security/SecurityGroupWork.java b/core/src/com/cloud/network/security/SecurityGroupWork.java index a7f89561174..e50f3eb425c 100644 --- a/core/src/com/cloud/network/security/SecurityGroupWork.java +++ b/core/src/com/cloud/network/security/SecurityGroupWork.java @@ -16,6 +16,8 @@ // under the License. package com.cloud.network.security; +import org.apache.cloudstack.api.InternalIdentity; + /** * Work related to security groups for a vm * diff --git a/core/src/com/cloud/storage/DiskOfferingVO.java b/core/src/com/cloud/storage/DiskOfferingVO.java index 9dad8838c46..5f4f18bcd34 100755 --- a/core/src/com/cloud/storage/DiskOfferingVO.java +++ b/core/src/com/cloud/storage/DiskOfferingVO.java @@ -43,7 +43,7 @@ import org.apache.cloudstack.api.InternalIdentity; @Table(name="disk_offering") @Inheritance(strategy=InheritanceType.JOINED) @DiscriminatorColumn(name="type", discriminatorType=DiscriminatorType.STRING, length=32) -public class DiskOfferingVO implements DiskOffering, Identity, InternalIdentity { +public class DiskOfferingVO implements DiskOffering { public enum Type { Disk, Service diff --git a/core/src/com/cloud/storage/GuestOSCategoryVO.java b/core/src/com/cloud/storage/GuestOSCategoryVO.java index fa1b73db791..03a74793001 100644 --- a/core/src/com/cloud/storage/GuestOSCategoryVO.java +++ b/core/src/com/cloud/storage/GuestOSCategoryVO.java @@ -30,7 +30,7 @@ import org.apache.cloudstack.api.InternalIdentity; @Entity @Table(name="guest_os_category") -public class GuestOSCategoryVO implements GuestOsCategory, Identity, InternalIdentity { +public class GuestOSCategoryVO implements GuestOsCategory { @Id @GeneratedValue(strategy=GenerationType.IDENTITY) @Column(name="id") diff --git a/core/src/com/cloud/storage/GuestOSVO.java b/core/src/com/cloud/storage/GuestOSVO.java index 5f3e4a939c1..49e136d03c1 100644 --- a/core/src/com/cloud/storage/GuestOSVO.java +++ b/core/src/com/cloud/storage/GuestOSVO.java @@ -30,7 +30,7 @@ import org.apache.cloudstack.api.InternalIdentity; @Entity @Table(name="guest_os") -public class GuestOSVO implements GuestOS, Identity, InternalIdentity { +public class GuestOSVO implements GuestOS { @Id @GeneratedValue(strategy=GenerationType.IDENTITY) @Column(name="id") diff --git a/core/src/com/cloud/storage/S3VO.java b/core/src/com/cloud/storage/S3VO.java index 3017f7e7436..ec49bc92d74 100644 --- a/core/src/com/cloud/storage/S3VO.java +++ b/core/src/com/cloud/storage/S3VO.java @@ -33,7 +33,7 @@ import java.util.Date; @Entity @Table(name = "s3") -public class S3VO implements S3, Identity, InternalIdentity { +public class S3VO implements S3 { public static final String ID_COLUMN_NAME = "id"; diff --git a/core/src/com/cloud/storage/SnapshotPolicyVO.java b/core/src/com/cloud/storage/SnapshotPolicyVO.java index 2240ec53ef5..4eb4916afd3 100644 --- a/core/src/com/cloud/storage/SnapshotPolicyVO.java +++ b/core/src/com/cloud/storage/SnapshotPolicyVO.java @@ -32,7 +32,7 @@ import org.apache.cloudstack.api.InternalIdentity; @Entity @Table(name="snapshot_policy") -public class SnapshotPolicyVO implements SnapshotPolicy, InternalIdentity { +public class SnapshotPolicyVO implements SnapshotPolicy { @Id @GeneratedValue(strategy=GenerationType.IDENTITY) diff --git a/core/src/com/cloud/storage/SnapshotScheduleVO.java b/core/src/com/cloud/storage/SnapshotScheduleVO.java index 80966b33951..75757c6b22b 100644 --- a/core/src/com/cloud/storage/SnapshotScheduleVO.java +++ b/core/src/com/cloud/storage/SnapshotScheduleVO.java @@ -34,7 +34,7 @@ import org.apache.cloudstack.api.InternalIdentity; @Entity @Table(name="snapshot_schedule") -public class SnapshotScheduleVO implements SnapshotSchedule, InternalIdentity { +public class SnapshotScheduleVO implements SnapshotSchedule { @Id @GeneratedValue(strategy=GenerationType.IDENTITY) diff --git a/core/src/com/cloud/storage/SnapshotVO.java b/core/src/com/cloud/storage/SnapshotVO.java index 44d97f53df4..e5e36504ea6 100644 --- a/core/src/com/cloud/storage/SnapshotVO.java +++ b/core/src/com/cloud/storage/SnapshotVO.java @@ -36,7 +36,7 @@ import org.apache.cloudstack.api.InternalIdentity; @Entity @Table(name="snapshots") -public class SnapshotVO implements Snapshot, Identity, InternalIdentity { +public class SnapshotVO implements Snapshot { @Id @GeneratedValue(strategy=GenerationType.IDENTITY) diff --git a/core/src/com/cloud/storage/StoragePoolHostAssoc.java b/core/src/com/cloud/storage/StoragePoolHostAssoc.java index 3e0d8daa149..34326d963a6 100644 --- a/core/src/com/cloud/storage/StoragePoolHostAssoc.java +++ b/core/src/com/cloud/storage/StoragePoolHostAssoc.java @@ -16,9 +16,11 @@ // under the License. package com.cloud.storage; +import org.apache.cloudstack.api.InternalIdentity; + import java.util.Date; -public interface StoragePoolHostAssoc { +public interface StoragePoolHostAssoc extends InternalIdentity { long getHostId(); diff --git a/core/src/com/cloud/storage/StoragePoolHostVO.java b/core/src/com/cloud/storage/StoragePoolHostVO.java index a50e3ebdcf8..a8a2bac4886 100644 --- a/core/src/com/cloud/storage/StoragePoolHostVO.java +++ b/core/src/com/cloud/storage/StoragePoolHostVO.java @@ -36,7 +36,7 @@ import org.apache.cloudstack.api.InternalIdentity; */ @Entity @Table(name="storage_pool_host_ref") -public class StoragePoolHostVO implements StoragePoolHostAssoc, InternalIdentity { +public class StoragePoolHostVO implements StoragePoolHostAssoc { @Id @GeneratedValue(strategy=GenerationType.IDENTITY) private Long id; diff --git a/core/src/com/cloud/storage/StoragePoolVO.java b/core/src/com/cloud/storage/StoragePoolVO.java index 343e440e1fa..cb5209f3e63 100644 --- a/core/src/com/cloud/storage/StoragePoolVO.java +++ b/core/src/com/cloud/storage/StoragePoolVO.java @@ -37,7 +37,7 @@ import org.apache.cloudstack.api.InternalIdentity; @Entity @Table(name="storage_pool") -public class StoragePoolVO implements StoragePool, Identity, InternalIdentity { +public class StoragePoolVO implements StoragePool { @Id @TableGenerator(name="storage_pool_sq", table="sequence", pkColumnName="name", valueColumnName="value", pkColumnValue="storage_pool_seq", allocationSize=1) @Column(name="id", updatable=false, nullable = false) diff --git a/core/src/com/cloud/storage/UploadVO.java b/core/src/com/cloud/storage/UploadVO.java index be2b642f215..d761bf17e3b 100755 --- a/core/src/com/cloud/storage/UploadVO.java +++ b/core/src/com/cloud/storage/UploadVO.java @@ -36,7 +36,7 @@ import org.apache.cloudstack.api.InternalIdentity; @Entity @Table(name="upload") -public class UploadVO implements Upload, InternalIdentity { +public class UploadVO implements Upload { @Id @GeneratedValue(strategy=GenerationType.IDENTITY) long id; diff --git a/core/src/com/cloud/storage/VMTemplateHostVO.java b/core/src/com/cloud/storage/VMTemplateHostVO.java index e07a9b9639e..9eae1a00303 100755 --- a/core/src/com/cloud/storage/VMTemplateHostVO.java +++ b/core/src/com/cloud/storage/VMTemplateHostVO.java @@ -38,7 +38,7 @@ import org.apache.cloudstack.api.InternalIdentity; */ @Entity @Table(name="template_host_ref") -public class VMTemplateHostVO implements VMTemplateStorageResourceAssoc, InternalIdentity { +public class VMTemplateHostVO implements VMTemplateStorageResourceAssoc { @Id @GeneratedValue(strategy=GenerationType.IDENTITY) Long id; diff --git a/core/src/com/cloud/storage/VMTemplateStoragePoolVO.java b/core/src/com/cloud/storage/VMTemplateStoragePoolVO.java index cb8c7aa2a29..32c9dd2ece5 100644 --- a/core/src/com/cloud/storage/VMTemplateStoragePoolVO.java +++ b/core/src/com/cloud/storage/VMTemplateStoragePoolVO.java @@ -38,7 +38,7 @@ import org.apache.cloudstack.api.InternalIdentity; */ @Entity @Table(name="template_spool_ref") -public class VMTemplateStoragePoolVO implements VMTemplateStorageResourceAssoc, InternalIdentity { +public class VMTemplateStoragePoolVO implements VMTemplateStorageResourceAssoc { @Id @GeneratedValue(strategy=GenerationType.IDENTITY) long id; diff --git a/core/src/com/cloud/storage/VMTemplateVO.java b/core/src/com/cloud/storage/VMTemplateVO.java index aa089ac8c3f..fcfdd0067e1 100755 --- a/core/src/com/cloud/storage/VMTemplateVO.java +++ b/core/src/com/cloud/storage/VMTemplateVO.java @@ -41,7 +41,7 @@ import org.apache.cloudstack.api.InternalIdentity; @Entity @Table(name="vm_template") -public class VMTemplateVO implements VirtualMachineTemplate, InternalIdentity { +public class VMTemplateVO implements VirtualMachineTemplate { @Id @TableGenerator(name="vm_template_sq", table="sequence", pkColumnName="name", valueColumnName="value", pkColumnValue="vm_template_seq", allocationSize=1) @Column(name="id", nullable = false) diff --git a/core/src/com/cloud/storage/VolumeVO.java b/core/src/com/cloud/storage/VolumeVO.java index 070fb64b776..aac82df80ce 100755 --- a/core/src/com/cloud/storage/VolumeVO.java +++ b/core/src/com/cloud/storage/VolumeVO.java @@ -39,7 +39,7 @@ import org.apache.cloudstack.api.InternalIdentity; @Entity @Table(name = "volumes") -public class VolumeVO implements Volume, Identity, InternalIdentity { +public class VolumeVO implements Volume { @Id @TableGenerator(name = "volume_sq", table = "sequence", pkColumnName = "name", valueColumnName = "value", pkColumnValue = "volume_seq", allocationSize = 1) @GeneratedValue(strategy = GenerationType.TABLE) diff --git a/core/src/com/cloud/storage/snapshot/SnapshotSchedule.java b/core/src/com/cloud/storage/snapshot/SnapshotSchedule.java index 55a24841068..6f3d2ce5468 100644 --- a/core/src/com/cloud/storage/snapshot/SnapshotSchedule.java +++ b/core/src/com/cloud/storage/snapshot/SnapshotSchedule.java @@ -16,12 +16,12 @@ // under the License. package com.cloud.storage.snapshot; +import org.apache.cloudstack.api.Identity; +import org.apache.cloudstack.api.InternalIdentity; + import java.util.Date; -public interface SnapshotSchedule { - long getId(); - - String getUuid(); +public interface SnapshotSchedule extends InternalIdentity, Identity { Long getVolumeId(); diff --git a/core/src/com/cloud/user/AccountVO.java b/core/src/com/cloud/user/AccountVO.java index d7228e6c091..922c8b99eb5 100644 --- a/core/src/com/cloud/user/AccountVO.java +++ b/core/src/com/cloud/user/AccountVO.java @@ -34,7 +34,7 @@ import org.apache.cloudstack.api.InternalIdentity; @Entity @Table(name="account") -public class AccountVO implements Account, Identity, InternalIdentity { +public class AccountVO implements Account { @Id @GeneratedValue(strategy=GenerationType.IDENTITY) @Column(name="id") diff --git a/core/src/com/cloud/user/SSHKeyPairVO.java b/core/src/com/cloud/user/SSHKeyPairVO.java index 025e858f8a0..ab7eb8ea0b5 100644 --- a/core/src/com/cloud/user/SSHKeyPairVO.java +++ b/core/src/com/cloud/user/SSHKeyPairVO.java @@ -28,7 +28,7 @@ import javax.persistence.Transient; @Entity @Table(name="ssh_keypairs") -public class SSHKeyPairVO implements SSHKeyPair, InternalIdentity { +public class SSHKeyPairVO implements SSHKeyPair { @Id @GeneratedValue(strategy=GenerationType.IDENTITY) diff --git a/core/src/com/cloud/vm/InstanceGroupVO.java b/core/src/com/cloud/vm/InstanceGroupVO.java index 39bebb16d1b..ad66b5a4b2c 100644 --- a/core/src/com/cloud/vm/InstanceGroupVO.java +++ b/core/src/com/cloud/vm/InstanceGroupVO.java @@ -36,7 +36,7 @@ import org.apache.cloudstack.api.InternalIdentity; @Table(name="instance_group") @SecondaryTable(name="account", pkJoinColumns={@PrimaryKeyJoinColumn(name="account_id", referencedColumnName="id")}) -public class InstanceGroupVO implements InstanceGroup, Identity, InternalIdentity { +public class InstanceGroupVO implements InstanceGroup { @Id @GeneratedValue(strategy=GenerationType.IDENTITY) @Column(name="id") diff --git a/core/src/com/cloud/vm/VMInstanceVO.java b/core/src/com/cloud/vm/VMInstanceVO.java index cd5d581268a..13c1cf35902 100644 --- a/core/src/com/cloud/vm/VMInstanceVO.java +++ b/core/src/com/cloud/vm/VMInstanceVO.java @@ -48,7 +48,7 @@ import org.apache.cloudstack.api.InternalIdentity; @Table(name="vm_instance") @Inheritance(strategy=InheritanceType.JOINED) @DiscriminatorColumn(name="type", discriminatorType=DiscriminatorType.STRING, length=32) -public class VMInstanceVO implements VirtualMachine, InternalIdentity, FiniteStateObject { +public class VMInstanceVO implements VirtualMachine, FiniteStateObject { @Id @TableGenerator(name="vm_instance_sq", table="sequence", pkColumnName="name", valueColumnName="value", pkColumnValue="vm_instance_seq", allocationSize=1) @Column(name="id", updatable=false, nullable = false) diff --git a/plugins/hypervisors/vmware/src/com/cloud/network/CiscoNexusVSMDevice.java b/plugins/hypervisors/vmware/src/com/cloud/network/CiscoNexusVSMDevice.java index 8fc68d167e5..19da27116de 100644 --- a/plugins/hypervisors/vmware/src/com/cloud/network/CiscoNexusVSMDevice.java +++ b/plugins/hypervisors/vmware/src/com/cloud/network/CiscoNexusVSMDevice.java @@ -16,7 +16,10 @@ // under the License. package com.cloud.network; -public interface CiscoNexusVSMDevice { +import org.apache.cloudstack.api.Identity; +import org.apache.cloudstack.api.InternalIdentity; + +public interface CiscoNexusVSMDevice extends InternalIdentity, Identity { // This tells us whether the VSM is currently enabled or disabled. We may // need this if we would like to carry out any sort of maintenance on the @@ -39,10 +42,6 @@ public interface CiscoNexusVSMDevice { Standby } - long getId(); - - String getUuid(); - public String getvsmName(); public long getHostId(); diff --git a/plugins/hypervisors/vmware/src/com/cloud/network/CiscoNexusVSMDeviceVO.java b/plugins/hypervisors/vmware/src/com/cloud/network/CiscoNexusVSMDeviceVO.java index 0082f6d9550..d24f15def97 100644 --- a/plugins/hypervisors/vmware/src/com/cloud/network/CiscoNexusVSMDeviceVO.java +++ b/plugins/hypervisors/vmware/src/com/cloud/network/CiscoNexusVSMDeviceVO.java @@ -38,7 +38,7 @@ import org.apache.cloudstack.api.InternalIdentity; @Entity @Table(name="virtual_supervisor_module") -public class CiscoNexusVSMDeviceVO implements CiscoNexusVSMDevice, Identity, InternalIdentity { +public class CiscoNexusVSMDeviceVO implements CiscoNexusVSMDevice { // We need to know what properties a VSM has. Put them here. diff --git a/server/src/com/cloud/api/query/vo/SecurityGroupJoinVO.java b/server/src/com/cloud/api/query/vo/SecurityGroupJoinVO.java index c5c45f1cacb..89c174ae798 100644 --- a/server/src/com/cloud/api/query/vo/SecurityGroupJoinVO.java +++ b/server/src/com/cloud/api/query/vo/SecurityGroupJoinVO.java @@ -447,5 +447,4 @@ public class SecurityGroupJoinVO extends BaseViewVO implements ControlledViewEnt this.tagCustomer = tagCustomer; } - } diff --git a/server/src/com/cloud/cluster/ManagementServerHostVO.java b/server/src/com/cloud/cluster/ManagementServerHostVO.java index 4279e04fbcb..31642e4d0c5 100644 --- a/server/src/com/cloud/cluster/ManagementServerHostVO.java +++ b/server/src/com/cloud/cluster/ManagementServerHostVO.java @@ -34,7 +34,7 @@ import org.apache.cloudstack.api.InternalIdentity; @Entity @Table(name="mshost") -public class ManagementServerHostVO implements ManagementServerHost, InternalIdentity { +public class ManagementServerHostVO implements ManagementServerHost { @Id @GeneratedValue(strategy=GenerationType.IDENTITY) diff --git a/server/src/com/cloud/dc/ClusterVO.java b/server/src/com/cloud/dc/ClusterVO.java index cf562c19093..4195b74f87f 100644 --- a/server/src/com/cloud/dc/ClusterVO.java +++ b/server/src/com/cloud/dc/ClusterVO.java @@ -39,7 +39,7 @@ import org.apache.cloudstack.api.InternalIdentity; @Entity @Table(name="cluster") -public class ClusterVO implements Cluster, Identity, InternalIdentity { +public class ClusterVO implements Cluster { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) diff --git a/server/src/com/cloud/dc/DataCenterVO.java b/server/src/com/cloud/dc/DataCenterVO.java index 18546ce17cd..28fb11f8cc0 100644 --- a/server/src/com/cloud/dc/DataCenterVO.java +++ b/server/src/com/cloud/dc/DataCenterVO.java @@ -40,7 +40,7 @@ import org.apache.cloudstack.api.InternalIdentity; @Entity @Table(name="data_center") -public class DataCenterVO implements DataCenter, InternalIdentity, Identity { +public class DataCenterVO implements DataCenter { @Id @GeneratedValue(strategy=GenerationType.IDENTITY) diff --git a/server/src/com/cloud/dc/HostPodVO.java b/server/src/com/cloud/dc/HostPodVO.java index 45571e1d0b2..e4ba9d0c111 100644 --- a/server/src/com/cloud/dc/HostPodVO.java +++ b/server/src/com/cloud/dc/HostPodVO.java @@ -36,7 +36,7 @@ import org.apache.cloudstack.api.InternalIdentity; @Entity @Table(name = "host_pod_ref") -public class HostPodVO implements Pod, InternalIdentity { +public class HostPodVO implements Pod { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) long id; diff --git a/server/src/com/cloud/dc/StorageNetworkIpRangeVO.java b/server/src/com/cloud/dc/StorageNetworkIpRangeVO.java index c61cadf44c6..e410d22959e 100755 --- a/server/src/com/cloud/dc/StorageNetworkIpRangeVO.java +++ b/server/src/com/cloud/dc/StorageNetworkIpRangeVO.java @@ -36,7 +36,7 @@ import javax.persistence.Table; @SecondaryTable(name="host_pod_ref", pkJoinColumns={@PrimaryKeyJoinColumn(name="pod_id", referencedColumnName="id")}), @SecondaryTable(name="data_center", pkJoinColumns={@PrimaryKeyJoinColumn(name="data_center_id", referencedColumnName="id")}) }) -public class StorageNetworkIpRangeVO implements StorageNetworkIpRange, InternalIdentity { +public class StorageNetworkIpRangeVO implements StorageNetworkIpRange { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "id") diff --git a/server/src/com/cloud/dc/VlanVO.java b/server/src/com/cloud/dc/VlanVO.java index 04317cba929..fcb46c4971e 100644 --- a/server/src/com/cloud/dc/VlanVO.java +++ b/server/src/com/cloud/dc/VlanVO.java @@ -32,7 +32,7 @@ import org.apache.cloudstack.api.InternalIdentity; @Entity @Table(name="vlan") -public class VlanVO implements Vlan, Identity, InternalIdentity { +public class VlanVO implements Vlan { @Id @GeneratedValue(strategy=GenerationType.IDENTITY) diff --git a/server/src/com/cloud/domain/DomainVO.java b/server/src/com/cloud/domain/DomainVO.java index 275395a70d6..bb4ce0cecf7 100644 --- a/server/src/com/cloud/domain/DomainVO.java +++ b/server/src/com/cloud/domain/DomainVO.java @@ -34,7 +34,7 @@ import com.cloud.utils.db.GenericDao; @Entity @Table(name="domain") -public class DomainVO implements Domain, Identity, InternalIdentity { +public class DomainVO implements Domain { public static final Logger s_logger = Logger.getLogger(DomainVO.class.getName()); @Id diff --git a/server/src/com/cloud/network/IPAddressVO.java b/server/src/com/cloud/network/IPAddressVO.java index 1c846b82667..c17d68f0787 100644 --- a/server/src/com/cloud/network/IPAddressVO.java +++ b/server/src/com/cloud/network/IPAddressVO.java @@ -41,7 +41,7 @@ import org.apache.cloudstack.api.InternalIdentity; */ @Entity @Table(name=("user_ip_address")) -public class IPAddressVO implements IpAddress, Identity, InternalIdentity { +public class IPAddressVO implements IpAddress { @Id @GeneratedValue(strategy=GenerationType.IDENTITY) @Column(name="id") diff --git a/server/src/com/cloud/network/LBStickinessPolicyVO.java b/server/src/com/cloud/network/LBStickinessPolicyVO.java index 0e0df6457db..9a629ce017c 100644 --- a/server/src/com/cloud/network/LBStickinessPolicyVO.java +++ b/server/src/com/cloud/network/LBStickinessPolicyVO.java @@ -37,7 +37,7 @@ import org.apache.cloudstack.api.InternalIdentity; @Entity @Table(name = ("load_balancer_stickiness_policies")) @PrimaryKeyJoinColumn(name = "load_balancer_id", referencedColumnName = "id") -public class LBStickinessPolicyVO implements StickinessPolicy, InternalIdentity { +public class LBStickinessPolicyVO implements StickinessPolicy { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "id") diff --git a/server/src/com/cloud/network/NetworkVO.java b/server/src/com/cloud/network/NetworkVO.java index d83f4585edc..818f44c6462 100644 --- a/server/src/com/cloud/network/NetworkVO.java +++ b/server/src/com/cloud/network/NetworkVO.java @@ -45,7 +45,7 @@ import org.apache.cloudstack.api.InternalIdentity; */ @Entity @Table(name="networks") -public class NetworkVO implements Network, Identity, InternalIdentity { +public class NetworkVO implements Network { @Id @TableGenerator(name="networks_sq", table="sequence", pkColumnName="name", valueColumnName="value", pkColumnValue="networks_seq", allocationSize=1) @Column(name="id") diff --git a/server/src/com/cloud/network/PhysicalNetworkVO.java b/server/src/com/cloud/network/PhysicalNetworkVO.java index e12f5e4be03..9bf8601c503 100644 --- a/server/src/com/cloud/network/PhysicalNetworkVO.java +++ b/server/src/com/cloud/network/PhysicalNetworkVO.java @@ -43,7 +43,7 @@ import org.apache.cloudstack.api.InternalIdentity; */ @Entity @Table(name="physical_network") -public class PhysicalNetworkVO implements PhysicalNetwork, InternalIdentity { +public class PhysicalNetworkVO implements PhysicalNetwork { @Id @TableGenerator(name="physical_networks_sq", table="sequence", pkColumnName="name", valueColumnName="value", pkColumnValue="physical_networks_seq", allocationSize=1) @Column(name="id") diff --git a/server/src/com/cloud/network/Site2SiteCustomerGatewayVO.java b/server/src/com/cloud/network/Site2SiteCustomerGatewayVO.java index 46a63f02ce4..c327b1e33e5 100644 --- a/server/src/com/cloud/network/Site2SiteCustomerGatewayVO.java +++ b/server/src/com/cloud/network/Site2SiteCustomerGatewayVO.java @@ -31,7 +31,7 @@ import org.apache.cloudstack.api.InternalIdentity; @Entity @Table(name=("s2s_customer_gateway")) -public class Site2SiteCustomerGatewayVO implements Site2SiteCustomerGateway, InternalIdentity { +public class Site2SiteCustomerGatewayVO implements Site2SiteCustomerGateway { @Id @GeneratedValue(strategy=GenerationType.IDENTITY) @Column(name="id") diff --git a/server/src/com/cloud/network/Site2SiteVpnGatewayVO.java b/server/src/com/cloud/network/Site2SiteVpnGatewayVO.java index 6124ecb41b0..ada50c40869 100644 --- a/server/src/com/cloud/network/Site2SiteVpnGatewayVO.java +++ b/server/src/com/cloud/network/Site2SiteVpnGatewayVO.java @@ -31,7 +31,7 @@ import org.apache.cloudstack.api.InternalIdentity; @Entity @Table(name=("s2s_vpn_gateway")) -public class Site2SiteVpnGatewayVO implements Site2SiteVpnGateway, InternalIdentity { +public class Site2SiteVpnGatewayVO implements Site2SiteVpnGateway { @Id @GeneratedValue(strategy=GenerationType.IDENTITY) @Column(name="id") diff --git a/server/src/com/cloud/network/dao/PhysicalNetworkTrafficTypeVO.java b/server/src/com/cloud/network/dao/PhysicalNetworkTrafficTypeVO.java index ee20e86290b..4c32d0a949b 100644 --- a/server/src/com/cloud/network/dao/PhysicalNetworkTrafficTypeVO.java +++ b/server/src/com/cloud/network/dao/PhysicalNetworkTrafficTypeVO.java @@ -33,7 +33,7 @@ import org.apache.cloudstack.api.InternalIdentity; @Entity @Table(name = "physical_network_traffic_types") -public class PhysicalNetworkTrafficTypeVO implements PhysicalNetworkTrafficType, InternalIdentity { +public class PhysicalNetworkTrafficTypeVO implements PhysicalNetworkTrafficType { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "id") diff --git a/server/src/com/cloud/network/element/VirtualRouterProviderVO.java b/server/src/com/cloud/network/element/VirtualRouterProviderVO.java index 1548e1ae621..ff2b6210504 100644 --- a/server/src/com/cloud/network/element/VirtualRouterProviderVO.java +++ b/server/src/com/cloud/network/element/VirtualRouterProviderVO.java @@ -34,7 +34,7 @@ import org.apache.cloudstack.api.InternalIdentity; @Entity @Table(name=("virtual_router_providers")) -public class VirtualRouterProviderVO implements VirtualRouterProvider, InternalIdentity { +public class VirtualRouterProviderVO implements VirtualRouterProvider { @Id @GeneratedValue(strategy=GenerationType.IDENTITY) @Column(name="id") diff --git a/server/src/com/cloud/network/rules/FirewallRuleVO.java b/server/src/com/cloud/network/rules/FirewallRuleVO.java index 7cdd9927197..63ace5baa6e 100644 --- a/server/src/com/cloud/network/rules/FirewallRuleVO.java +++ b/server/src/com/cloud/network/rules/FirewallRuleVO.java @@ -45,7 +45,7 @@ import org.apache.cloudstack.api.InternalIdentity; @Table(name="firewall_rules") @Inheritance(strategy=InheritanceType.JOINED) @DiscriminatorColumn(name="purpose", discriminatorType=DiscriminatorType.STRING, length=32) -public class FirewallRuleVO implements FirewallRule, Identity, InternalIdentity { +public class FirewallRuleVO implements FirewallRule { protected final FirewallRulesCidrsDaoImpl _firewallRulesCidrsDao = ComponentLocator.inject(FirewallRulesCidrsDaoImpl.class); @Id diff --git a/server/src/com/cloud/network/rules/StaticNatRuleImpl.java b/server/src/com/cloud/network/rules/StaticNatRuleImpl.java index d2632582505..6103689a31b 100644 --- a/server/src/com/cloud/network/rules/StaticNatRuleImpl.java +++ b/server/src/com/cloud/network/rules/StaticNatRuleImpl.java @@ -19,7 +19,7 @@ package com.cloud.network.rules; import java.util.List; -public class StaticNatRuleImpl implements StaticNatRule{ +public class StaticNatRuleImpl implements StaticNatRule { long id; String xid; String uuid; diff --git a/server/src/com/cloud/network/vpc/PrivateGatewayProfile.java b/server/src/com/cloud/network/vpc/PrivateGatewayProfile.java index 4ad1fb6f525..2595a6a0fa4 100644 --- a/server/src/com/cloud/network/vpc/PrivateGatewayProfile.java +++ b/server/src/com/cloud/network/vpc/PrivateGatewayProfile.java @@ -17,7 +17,7 @@ package com.cloud.network.vpc; -public class PrivateGatewayProfile implements PrivateGateway{ +public class PrivateGatewayProfile implements PrivateGateway { VpcGateway vpcGateway; long physicalNetworkId; diff --git a/server/src/com/cloud/network/vpc/StaticRouteVO.java b/server/src/com/cloud/network/vpc/StaticRouteVO.java index 99294e1f50d..eb4c61b7860 100644 --- a/server/src/com/cloud/network/vpc/StaticRouteVO.java +++ b/server/src/com/cloud/network/vpc/StaticRouteVO.java @@ -35,7 +35,7 @@ import org.apache.cloudstack.api.InternalIdentity; @Entity @Table(name="static_routes") -public class StaticRouteVO implements StaticRoute, InternalIdentity { +public class StaticRouteVO implements StaticRoute { @Id @GeneratedValue(strategy=GenerationType.IDENTITY) @Column(name="id") diff --git a/server/src/com/cloud/network/vpc/VpcGatewayVO.java b/server/src/com/cloud/network/vpc/VpcGatewayVO.java index ebf6e289143..718e4df82df 100644 --- a/server/src/com/cloud/network/vpc/VpcGatewayVO.java +++ b/server/src/com/cloud/network/vpc/VpcGatewayVO.java @@ -34,7 +34,7 @@ import org.apache.cloudstack.api.InternalIdentity; @Entity @Table(name="vpc_gateways") -public class VpcGatewayVO implements VpcGateway, InternalIdentity { +public class VpcGatewayVO implements VpcGateway { @Id @GeneratedValue(strategy=GenerationType.IDENTITY) diff --git a/server/src/com/cloud/network/vpc/VpcOfferingVO.java b/server/src/com/cloud/network/vpc/VpcOfferingVO.java index 6cf0cd62b92..dce7a81e4d0 100644 --- a/server/src/com/cloud/network/vpc/VpcOfferingVO.java +++ b/server/src/com/cloud/network/vpc/VpcOfferingVO.java @@ -34,7 +34,7 @@ import org.apache.cloudstack.api.InternalIdentity; @Entity @Table(name="vpc_offerings") -public class VpcOfferingVO implements VpcOffering, InternalIdentity { +public class VpcOfferingVO implements VpcOffering { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) diff --git a/server/src/com/cloud/network/vpc/VpcVO.java b/server/src/com/cloud/network/vpc/VpcVO.java index 9bf83af8eda..634df052850 100644 --- a/server/src/com/cloud/network/vpc/VpcVO.java +++ b/server/src/com/cloud/network/vpc/VpcVO.java @@ -32,7 +32,7 @@ import org.apache.cloudstack.api.InternalIdentity; @Entity @Table(name="vpc") -public class VpcVO implements Vpc, Identity, InternalIdentity { +public class VpcVO implements Vpc { @Id @Column(name="id") long id; diff --git a/server/src/com/cloud/offerings/NetworkOfferingVO.java b/server/src/com/cloud/offerings/NetworkOfferingVO.java index eff0d1934f6..49f2a40031e 100755 --- a/server/src/com/cloud/offerings/NetworkOfferingVO.java +++ b/server/src/com/cloud/offerings/NetworkOfferingVO.java @@ -43,7 +43,7 @@ import java.util.UUID; @Entity @Table(name = "network_offerings") -public class NetworkOfferingVO implements NetworkOffering, InternalIdentity { +public class NetworkOfferingVO implements NetworkOffering { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) diff --git a/server/src/com/cloud/projects/ProjectInvitationVO.java b/server/src/com/cloud/projects/ProjectInvitationVO.java index bf54f3c90d4..78f05c792e6 100644 --- a/server/src/com/cloud/projects/ProjectInvitationVO.java +++ b/server/src/com/cloud/projects/ProjectInvitationVO.java @@ -34,7 +34,7 @@ import org.apache.cloudstack.api.InternalIdentity; @Entity @Table(name = "project_invitations") -public class ProjectInvitationVO implements ProjectInvitation, Identity, InternalIdentity { +public class ProjectInvitationVO implements ProjectInvitation { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "id") diff --git a/server/src/com/cloud/tags/ResourceTagVO.java b/server/src/com/cloud/tags/ResourceTagVO.java index ffb73af7e0b..04ae757bf75 100644 --- a/server/src/com/cloud/tags/ResourceTagVO.java +++ b/server/src/com/cloud/tags/ResourceTagVO.java @@ -34,7 +34,7 @@ import org.apache.cloudstack.api.InternalIdentity; @Entity @Table(name="resource_tags") -public class ResourceTagVO implements Identity, InternalIdentity, ResourceTag{ +public class ResourceTagVO implements ResourceTag { @Id @GeneratedValue(strategy=GenerationType.IDENTITY) diff --git a/server/src/com/cloud/vm/NicVO.java b/server/src/com/cloud/vm/NicVO.java index befe0a93204..64b9153a347 100644 --- a/server/src/com/cloud/vm/NicVO.java +++ b/server/src/com/cloud/vm/NicVO.java @@ -37,7 +37,7 @@ import org.apache.cloudstack.api.InternalIdentity; @Entity @Table(name = "nics") -public class NicVO implements Nic, Identity, InternalIdentity { +public class NicVO implements Nic { protected NicVO() { } From 617a0507e1d0ffe5454cb282783ef6c0282cb11e Mon Sep 17 00:00:00 2001 From: Prasanna Santhanam Date: Wed, 26 Dec 2012 19:10:38 -0800 Subject: [PATCH 225/421] api: EntityReference for serviceOfferingResponse ServiceOfferingResponse's entityReference was missed Signed-off-by: Prasanna Santhanam --- .../cloudstack/api/response/ServiceOfferingResponse.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/api/src/org/apache/cloudstack/api/response/ServiceOfferingResponse.java b/api/src/org/apache/cloudstack/api/response/ServiceOfferingResponse.java index 32cd9961c46..7a10f7f7673 100644 --- a/api/src/org/apache/cloudstack/api/response/ServiceOfferingResponse.java +++ b/api/src/org/apache/cloudstack/api/response/ServiceOfferingResponse.java @@ -18,11 +18,14 @@ package org.apache.cloudstack.api.response; import java.util.Date; +import com.cloud.offering.ServiceOffering; import org.apache.cloudstack.api.ApiConstants; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; import org.apache.cloudstack.api.BaseResponse; +import org.apache.cloudstack.api.EntityReference; +@EntityReference(value = ServiceOffering.class) public class ServiceOfferingResponse extends BaseResponse { @SerializedName("id") @Param(description="the id of the service offering") private String id; From 39db3be294ab8d492116bc3f5434c6052ee7f06d Mon Sep 17 00:00:00 2001 From: Prasanna Santhanam Date: Wed, 26 Dec 2012 19:20:32 -0800 Subject: [PATCH 226/421] Simulator: Fixing the listTemplatesCommand Should return the ListTemplatesAnswer and ListVolumes returns ListVolumesAnswer Signed-off-by: Prasanna Santhanam --- .../src/com/cloud/agent/manager/MockStorageManagerImpl.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/plugins/hypervisors/simulator/src/com/cloud/agent/manager/MockStorageManagerImpl.java b/plugins/hypervisors/simulator/src/com/cloud/agent/manager/MockStorageManagerImpl.java index a950926a515..1076089dcd6 100644 --- a/plugins/hypervisors/simulator/src/com/cloud/agent/manager/MockStorageManagerImpl.java +++ b/plugins/hypervisors/simulator/src/com/cloud/agent/manager/MockStorageManagerImpl.java @@ -434,13 +434,13 @@ public class MockStorageManagerImpl implements MockStorageManager { List volumes = _mockVolumeDao.findByStorageIdAndType(storage.getId(), MockVolumeType.VOLUME); - Map templateInfos = new HashMap(); + Map templateInfos = new HashMap(); for (MockVolumeVO volume : volumes) { - templateInfos.put(volume.getName(), new TemplateInfo(volume.getName(), volume.getPath() + templateInfos.put(volume.getId(), new TemplateInfo(volume.getName(), volume.getPath() .replaceAll(storage.getMountPoint(), ""), volume.getSize(), volume.getSize(), true, false)); } txn.commit(); - return new ListTemplateAnswer(cmd.getSecUrl(), templateInfos); + return new ListVolumeAnswer(cmd.getSecUrl(), templateInfos); } catch (Exception ex) { txn.rollback(); throw new CloudRuntimeException("Error when finding template on sec storage " + storage.getId(), ex); From 623e7389ef0b2923b7859629cd70406e2e471525 Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Thu, 27 Dec 2012 15:24:17 -0800 Subject: [PATCH 227/421] api: Make APIServer backward compatible to accept both uuid and id for pre 3.x apis - Allow both uuid and id in param for pre 3.x apis - Enforce uuid as param for all >= 3.x apis - Use regex to better match uuid param Signed-off-by: Rohit Yadav --- server/src/com/cloud/api/ApiDispatcher.java | 25 ++++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) diff --git a/server/src/com/cloud/api/ApiDispatcher.java b/server/src/com/cloud/api/ApiDispatcher.java index b2b9ec2c408..b81e070f613 100755 --- a/server/src/com/cloud/api/ApiDispatcher.java +++ b/server/src/com/cloud/api/ApiDispatcher.java @@ -540,10 +540,29 @@ public class ApiDispatcher { // APITODO: Find and get rid of all hardcoded params in API Cmds and service layer return -1L; } + Long internalId = null; + // If annotation's empty, the cmd existed before 3.x try conversion to long + // FIXME: Fails if someone adds since field for any pre 3.x apis + boolean isPre3x = annotation.since().isEmpty(); + // Match against Java's UUID regex to check if input is uuid string + boolean isUuid = uuid.matches("^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$"); + // Enforce that it's uuid for newly added apis from version 3.x + if (!isPre3x && !isUuid) + return null; + // Allow both uuid and internal id for pre3x apis + if (isPre3x && !isUuid) { + try { + internalId = Long.parseLong(uuid); + } catch(NumberFormatException e) { + // In case regex failed, and it's still uuid string + internalId = null; + } + if (internalId != null) + return internalId; + } // There may be multiple entities defined on the @EntityReference of a Response.class // UUID CommandType would expect only one entityType, so use the first entityType Class[] entities = annotation.entityType()[0].getAnnotation(EntityReference.class).value(); - Long internalId = null; // Go through each entity which is an interface to a VO class and get a VO object // Try to getId() for the object using reflection, break on first non-null value for (Class entity: entities) { @@ -662,8 +681,8 @@ public class ApiDispatcher { Long internalId = translateUuidToInternalId(paramObj.toString(), annotation); // If id is null, entity with the uuid was not found, throw exception if (internalId == null) { - throw new InvalidParameterValueException("No entity with " + field.getName() + "(uuid)=" - + paramObj.toString() + " was found in the database."); + throw new InvalidParameterValueException("Object entity with " + field.getName() + "(uuid)=" + + paramObj.toString() + " was not found."); } field.set(cmdObj, internalId); break; From 76ea0e7c45877df9d991e775cca86a4113066365 Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Fri, 28 Dec 2012 01:09:28 -0800 Subject: [PATCH 228/421] api: Annotate and fill name field of @APICommand from commands.properties.in - Reads and fills name field of all cmd class and api name mapping from commands.properties.in - Automation using following python script ensures correctness of the change import os file_prefix = "api/src/" search_pattern = "@APICommand(" pattern_len = len(search_pattern) prop_file = "client/tomcatconf/commands.properties.in" f = open(prop_file, 'r') data = f.read() f.close() apis = filter(lambda x: x.strip()!='' and (not x.startswith('#')), data.split('\n')) for api in apis: api_name = api.split('=')[0] cmd_name = file_prefix + api.split('=')[1].split(';')[0].replace('.', '/').strip() + ".java" if not os.path.exists(cmd_name): print cmd_name, api_name f = open(cmd_name, 'r') d = f.read() f.close() idx = d.find(search_pattern) + pattern_len new_str = d[:idx] + "name = \"%s\", " % api_name + d[idx:] f = open(cmd_name, 'w') f.write(new_str) f.close() Signed-off-by: Rohit Yadav --- api/src/com/cloud/api/commands/AddS3Cmd.java | 2 +- api/src/com/cloud/api/commands/ListS3sCmd.java | 2 +- .../cloudstack/api/command/admin/account/CreateAccountCmd.java | 2 +- .../cloudstack/api/command/admin/account/DeleteAccountCmd.java | 2 +- .../cloudstack/api/command/admin/account/DisableAccountCmd.java | 2 +- .../cloudstack/api/command/admin/account/EnableAccountCmd.java | 2 +- .../cloudstack/api/command/admin/account/LockAccountCmd.java | 2 +- .../cloudstack/api/command/admin/account/UpdateAccountCmd.java | 2 +- .../api/command/admin/autoscale/CreateCounterCmd.java | 2 +- .../api/command/admin/autoscale/DeleteCounterCmd.java | 2 +- .../cloudstack/api/command/admin/cluster/AddClusterCmd.java | 2 +- .../cloudstack/api/command/admin/cluster/DeleteClusterCmd.java | 2 +- .../cloudstack/api/command/admin/cluster/ListClustersCmd.java | 2 +- .../cloudstack/api/command/admin/cluster/UpdateClusterCmd.java | 2 +- .../cloudstack/api/command/admin/config/ListCfgsByCmd.java | 2 +- .../api/command/admin/config/ListHypervisorCapabilitiesCmd.java | 2 +- .../cloudstack/api/command/admin/config/UpdateCfgCmd.java | 2 +- .../command/admin/config/UpdateHypervisorCapabilitiesCmd.java | 2 +- .../cloudstack/api/command/admin/domain/CreateDomainCmd.java | 2 +- .../cloudstack/api/command/admin/domain/DeleteDomainCmd.java | 2 +- .../api/command/admin/domain/ListDomainChildrenCmd.java | 2 +- .../cloudstack/api/command/admin/domain/ListDomainsCmd.java | 2 +- .../cloudstack/api/command/admin/domain/UpdateDomainCmd.java | 2 +- .../apache/cloudstack/api/command/admin/host/AddHostCmd.java | 2 +- .../api/command/admin/host/AddSecondaryStorageCmd.java | 2 +- .../cloudstack/api/command/admin/host/CancelMaintenanceCmd.java | 2 +- .../apache/cloudstack/api/command/admin/host/DeleteHostCmd.java | 2 +- .../apache/cloudstack/api/command/admin/host/ListHostsCmd.java | 2 +- .../api/command/admin/host/PrepareForMaintenanceCmd.java | 2 +- .../cloudstack/api/command/admin/host/ReconnectHostCmd.java | 2 +- .../apache/cloudstack/api/command/admin/host/UpdateHostCmd.java | 2 +- .../api/command/admin/host/UpdateHostPasswordCmd.java | 2 +- .../apache/cloudstack/api/command/admin/ldap/LDAPConfigCmd.java | 2 +- .../apache/cloudstack/api/command/admin/ldap/LDAPRemoveCmd.java | 2 +- .../api/command/admin/network/AddNetworkDeviceCmd.java | 2 +- .../api/command/admin/network/AddNetworkServiceProviderCmd.java | 2 +- .../api/command/admin/network/CreateNetworkOfferingCmd.java | 2 +- .../api/command/admin/network/CreatePhysicalNetworkCmd.java | 2 +- .../command/admin/network/CreateStorageNetworkIpRangeCmd.java | 2 +- .../api/command/admin/network/DeleteNetworkDeviceCmd.java | 2 +- .../api/command/admin/network/DeleteNetworkOfferingCmd.java | 2 +- .../command/admin/network/DeleteNetworkServiceProviderCmd.java | 2 +- .../api/command/admin/network/DeletePhysicalNetworkCmd.java | 2 +- .../command/admin/network/DeleteStorageNetworkIpRangeCmd.java | 2 +- .../api/command/admin/network/ListNetworkDeviceCmd.java | 2 +- .../command/admin/network/ListNetworkServiceProvidersCmd.java | 2 +- .../api/command/admin/network/ListPhysicalNetworksCmd.java | 2 +- .../api/command/admin/network/ListStorageNetworkIpRangeCmd.java | 2 +- .../command/admin/network/ListSupportedNetworkServicesCmd.java | 2 +- .../api/command/admin/network/UpdateNetworkOfferingCmd.java | 2 +- .../command/admin/network/UpdateNetworkServiceProviderCmd.java | 2 +- .../api/command/admin/network/UpdatePhysicalNetworkCmd.java | 2 +- .../command/admin/network/UpdateStorageNetworkIpRangeCmd.java | 2 +- .../api/command/admin/offering/CreateDiskOfferingCmd.java | 2 +- .../api/command/admin/offering/CreateServiceOfferingCmd.java | 2 +- .../api/command/admin/offering/DeleteDiskOfferingCmd.java | 2 +- .../api/command/admin/offering/DeleteServiceOfferingCmd.java | 2 +- .../api/command/admin/offering/UpdateDiskOfferingCmd.java | 2 +- .../api/command/admin/offering/UpdateServiceOfferingCmd.java | 2 +- .../apache/cloudstack/api/command/admin/pod/CreatePodCmd.java | 2 +- .../apache/cloudstack/api/command/admin/pod/DeletePodCmd.java | 2 +- .../apache/cloudstack/api/command/admin/pod/ListPodsByCmd.java | 2 +- .../apache/cloudstack/api/command/admin/pod/UpdatePodCmd.java | 2 +- .../cloudstack/api/command/admin/resource/ListAlertsCmd.java | 2 +- .../cloudstack/api/command/admin/resource/ListCapacityCmd.java | 2 +- .../api/command/admin/resource/UploadCustomCertificateCmd.java | 2 +- .../command/admin/router/ConfigureVirtualRouterElementCmd.java | 2 +- .../api/command/admin/router/CreateVirtualRouterElementCmd.java | 2 +- .../cloudstack/api/command/admin/router/DestroyRouterCmd.java | 2 +- .../cloudstack/api/command/admin/router/ListRoutersCmd.java | 2 +- .../api/command/admin/router/ListVirtualRouterElementsCmd.java | 2 +- .../cloudstack/api/command/admin/router/RebootRouterCmd.java | 2 +- .../cloudstack/api/command/admin/router/StartRouterCmd.java | 2 +- .../cloudstack/api/command/admin/router/StopRouterCmd.java | 2 +- .../cloudstack/api/command/admin/router/UpgradeRouterCmd.java | 2 +- .../admin/storagepool/CancelPrimaryStorageMaintenanceCmd.java | 2 +- .../api/command/admin/storagepool/CreateStoragePoolCmd.java | 2 +- .../cloudstack/api/command/admin/storagepool/DeletePoolCmd.java | 2 +- .../api/command/admin/storagepool/ListStoragePoolsCmd.java | 2 +- .../storagepool/PreparePrimaryStorageForMaintenanceCmd.java | 2 +- .../api/command/admin/storagepool/UpdateStoragePoolCmd.java | 2 +- .../apache/cloudstack/api/command/admin/swift/AddSwiftCmd.java | 2 +- .../cloudstack/api/command/admin/swift/ListSwiftsCmd.java | 2 +- .../api/command/admin/systemvm/DestroySystemVmCmd.java | 2 +- .../cloudstack/api/command/admin/systemvm/ListSystemVMsCmd.java | 2 +- .../api/command/admin/systemvm/MigrateSystemVMCmd.java | 2 +- .../api/command/admin/systemvm/RebootSystemVmCmd.java | 2 +- .../cloudstack/api/command/admin/systemvm/StartSystemVMCmd.java | 2 +- .../cloudstack/api/command/admin/systemvm/StopSystemVmCmd.java | 2 +- .../api/command/admin/systemvm/UpgradeSystemVMCmd.java | 2 +- .../api/command/admin/template/PrepareTemplateCmd.java | 2 +- .../cloudstack/api/command/admin/usage/AddTrafficTypeCmd.java | 2 +- .../api/command/admin/usage/DeleteTrafficTypeCmd.java | 2 +- .../api/command/admin/usage/ListTrafficTypeImplementorsCmd.java | 2 +- .../cloudstack/api/command/admin/usage/ListTrafficTypesCmd.java | 2 +- .../api/command/admin/usage/UpdateTrafficTypeCmd.java | 2 +- .../apache/cloudstack/api/command/admin/user/CreateUserCmd.java | 2 +- .../apache/cloudstack/api/command/admin/user/DeleteUserCmd.java | 2 +- .../cloudstack/api/command/admin/user/DisableUserCmd.java | 2 +- .../apache/cloudstack/api/command/admin/user/EnableUserCmd.java | 2 +- .../apache/cloudstack/api/command/admin/user/GetUserCmd.java | 2 +- .../apache/cloudstack/api/command/admin/user/ListUsersCmd.java | 2 +- .../apache/cloudstack/api/command/admin/user/LockUserCmd.java | 2 +- .../apache/cloudstack/api/command/admin/user/RegisterCmd.java | 2 +- .../apache/cloudstack/api/command/admin/user/UpdateUserCmd.java | 2 +- .../cloudstack/api/command/admin/vlan/CreateVlanIpRangeCmd.java | 2 +- .../cloudstack/api/command/admin/vlan/DeleteVlanIpRangeCmd.java | 2 +- .../cloudstack/api/command/admin/vlan/ListVlanIpRangesCmd.java | 2 +- .../org/apache/cloudstack/api/command/admin/vm/AssignVMCmd.java | 2 +- .../apache/cloudstack/api/command/admin/vm/MigrateVMCmd.java | 2 +- .../apache/cloudstack/api/command/admin/vm/RecoverVMCmd.java | 2 +- .../api/command/admin/vpc/CreatePrivateGatewayCmd.java | 2 +- .../cloudstack/api/command/admin/vpc/CreateVPCOfferingCmd.java | 2 +- .../api/command/admin/vpc/DeletePrivateGatewayCmd.java | 2 +- .../cloudstack/api/command/admin/vpc/DeleteVPCOfferingCmd.java | 2 +- .../cloudstack/api/command/admin/vpc/UpdateVPCOfferingCmd.java | 2 +- .../apache/cloudstack/api/command/admin/zone/CreateZoneCmd.java | 2 +- .../apache/cloudstack/api/command/admin/zone/DeleteZoneCmd.java | 2 +- .../api/command/admin/zone/MarkDefaultZoneForAccountCmd.java | 2 +- .../apache/cloudstack/api/command/admin/zone/UpdateZoneCmd.java | 2 +- .../api/command/user/account/AddAccountToProjectCmd.java | 2 +- .../api/command/user/account/DeleteAccountFromProjectCmd.java | 2 +- .../cloudstack/api/command/user/account/ListAccountsCmd.java | 2 +- .../api/command/user/account/ListProjectAccountsCmd.java | 2 +- .../cloudstack/api/command/user/address/AssociateIPAddrCmd.java | 2 +- .../api/command/user/address/DisassociateIPAddrCmd.java | 2 +- .../api/command/user/address/ListPublicIpAddressesCmd.java | 2 +- .../api/command/user/autoscale/CreateAutoScalePolicyCmd.java | 2 +- .../api/command/user/autoscale/CreateAutoScaleVmGroupCmd.java | 2 +- .../api/command/user/autoscale/CreateAutoScaleVmProfileCmd.java | 2 +- .../api/command/user/autoscale/CreateConditionCmd.java | 2 +- .../api/command/user/autoscale/DeleteAutoScalePolicyCmd.java | 2 +- .../api/command/user/autoscale/DeleteAutoScaleVmGroupCmd.java | 2 +- .../api/command/user/autoscale/DeleteAutoScaleVmProfileCmd.java | 2 +- .../api/command/user/autoscale/DeleteConditionCmd.java | 2 +- .../api/command/user/autoscale/DisableAutoScaleVmGroupCmd.java | 2 +- .../api/command/user/autoscale/EnableAutoScaleVmGroupCmd.java | 2 +- .../api/command/user/autoscale/ListAutoScalePoliciesCmd.java | 2 +- .../api/command/user/autoscale/ListAutoScaleVmGroupsCmd.java | 2 +- .../api/command/user/autoscale/ListAutoScaleVmProfilesCmd.java | 2 +- .../api/command/user/autoscale/ListConditionsCmd.java | 2 +- .../cloudstack/api/command/user/autoscale/ListCountersCmd.java | 2 +- .../api/command/user/autoscale/UpdateAutoScalePolicyCmd.java | 2 +- .../api/command/user/autoscale/UpdateAutoScaleVmGroupCmd.java | 2 +- .../api/command/user/autoscale/UpdateAutoScaleVmProfileCmd.java | 2 +- .../cloudstack/api/command/user/config/ListCapabilitiesCmd.java | 2 +- .../cloudstack/api/command/user/event/ListEventTypesCmd.java | 2 +- .../apache/cloudstack/api/command/user/event/ListEventsCmd.java | 2 +- .../api/command/user/firewall/CreateFirewallRuleCmd.java | 2 +- .../api/command/user/firewall/CreatePortForwardingRuleCmd.java | 2 +- .../api/command/user/firewall/DeleteFirewallRuleCmd.java | 2 +- .../api/command/user/firewall/DeletePortForwardingRuleCmd.java | 2 +- .../api/command/user/firewall/ListFirewallRulesCmd.java | 2 +- .../api/command/user/firewall/ListPortForwardingRulesCmd.java | 2 +- .../api/command/user/firewall/UpdatePortForwardingRuleCmd.java | 2 +- .../api/command/user/guest/ListGuestOsCategoriesCmd.java | 2 +- .../cloudstack/api/command/user/guest/ListGuestOsCmd.java | 2 +- .../apache/cloudstack/api/command/user/iso/AttachIsoCmd.java | 2 +- .../apache/cloudstack/api/command/user/iso/DeleteIsoCmd.java | 2 +- .../apache/cloudstack/api/command/user/iso/DetachIsoCmd.java | 2 +- .../apache/cloudstack/api/command/user/iso/ExtractIsoCmd.java | 2 +- .../cloudstack/api/command/user/iso/ListIsoPermissionsCmd.java | 2 +- .../org/apache/cloudstack/api/command/user/iso/ListIsosCmd.java | 2 +- .../apache/cloudstack/api/command/user/iso/RegisterIsoCmd.java | 2 +- .../apache/cloudstack/api/command/user/iso/UpdateIsoCmd.java | 2 +- .../api/command/user/iso/UpdateIsoPermissionsCmd.java | 2 +- .../cloudstack/api/command/user/job/ListAsyncJobsCmd.java | 2 +- .../cloudstack/api/command/user/job/QueryAsyncJobResultCmd.java | 2 +- .../command/user/loadbalancer/AssignToLoadBalancerRuleCmd.java | 2 +- .../command/user/loadbalancer/CreateLBStickinessPolicyCmd.java | 2 +- .../command/user/loadbalancer/CreateLoadBalancerRuleCmd.java | 2 +- .../command/user/loadbalancer/DeleteLBStickinessPolicyCmd.java | 2 +- .../command/user/loadbalancer/DeleteLoadBalancerRuleCmd.java | 2 +- .../command/user/loadbalancer/ListLBStickinessPoliciesCmd.java | 2 +- .../user/loadbalancer/ListLoadBalancerRuleInstancesCmd.java | 2 +- .../api/command/user/loadbalancer/ListLoadBalancerRulesCmd.java | 2 +- .../user/loadbalancer/RemoveFromLoadBalancerRuleCmd.java | 2 +- .../command/user/loadbalancer/UpdateLoadBalancerRuleCmd.java | 2 +- .../api/command/user/nat/CreateIpForwardingRuleCmd.java | 2 +- .../api/command/user/nat/DeleteIpForwardingRuleCmd.java | 2 +- .../cloudstack/api/command/user/nat/DisableStaticNatCmd.java | 2 +- .../cloudstack/api/command/user/nat/EnableStaticNatCmd.java | 2 +- .../api/command/user/nat/ListIpForwardingRulesCmd.java | 2 +- .../api/command/user/network/CreateNetworkACLCmd.java | 2 +- .../cloudstack/api/command/user/network/CreateNetworkCmd.java | 2 +- .../api/command/user/network/DeleteNetworkACLCmd.java | 2 +- .../cloudstack/api/command/user/network/DeleteNetworkCmd.java | 2 +- .../cloudstack/api/command/user/network/ListNetworkACLsCmd.java | 2 +- .../api/command/user/network/ListNetworkOfferingsCmd.java | 2 +- .../cloudstack/api/command/user/network/ListNetworksCmd.java | 2 +- .../cloudstack/api/command/user/network/RestartNetworkCmd.java | 2 +- .../cloudstack/api/command/user/network/UpdateNetworkCmd.java | 2 +- .../api/command/user/offering/ListDiskOfferingsCmd.java | 2 +- .../api/command/user/offering/ListServiceOfferingsCmd.java | 2 +- .../cloudstack/api/command/user/project/ActivateProjectCmd.java | 2 +- .../cloudstack/api/command/user/project/CreateProjectCmd.java | 2 +- .../cloudstack/api/command/user/project/DeleteProjectCmd.java | 2 +- .../api/command/user/project/DeleteProjectInvitationCmd.java | 2 +- .../api/command/user/project/ListProjectInvitationsCmd.java | 2 +- .../cloudstack/api/command/user/project/ListProjectsCmd.java | 2 +- .../cloudstack/api/command/user/project/SuspendProjectCmd.java | 2 +- .../cloudstack/api/command/user/project/UpdateProjectCmd.java | 2 +- .../api/command/user/project/UpdateProjectInvitationCmd.java | 2 +- .../api/command/user/resource/GetCloudIdentifierCmd.java | 2 +- .../api/command/user/resource/ListHypervisorsCmd.java | 2 +- .../api/command/user/resource/ListResourceLimitsCmd.java | 2 +- .../api/command/user/resource/UpdateResourceCountCmd.java | 2 +- .../api/command/user/resource/UpdateResourceLimitCmd.java | 2 +- .../user/securitygroup/AuthorizeSecurityGroupEgressCmd.java | 2 +- .../user/securitygroup/AuthorizeSecurityGroupIngressCmd.java | 2 +- .../api/command/user/securitygroup/CreateSecurityGroupCmd.java | 2 +- .../api/command/user/securitygroup/DeleteSecurityGroupCmd.java | 2 +- .../api/command/user/securitygroup/ListSecurityGroupsCmd.java | 2 +- .../user/securitygroup/RevokeSecurityGroupEgressCmd.java | 2 +- .../user/securitygroup/RevokeSecurityGroupIngressCmd.java | 2 +- .../cloudstack/api/command/user/snapshot/CreateSnapshotCmd.java | 2 +- .../api/command/user/snapshot/CreateSnapshotPolicyCmd.java | 2 +- .../cloudstack/api/command/user/snapshot/DeleteSnapshotCmd.java | 2 +- .../api/command/user/snapshot/DeleteSnapshotPoliciesCmd.java | 2 +- .../api/command/user/snapshot/ListSnapshotPoliciesCmd.java | 2 +- .../cloudstack/api/command/user/snapshot/ListSnapshotsCmd.java | 2 +- .../cloudstack/api/command/user/ssh/CreateSSHKeyPairCmd.java | 2 +- .../cloudstack/api/command/user/ssh/DeleteSSHKeyPairCmd.java | 2 +- .../cloudstack/api/command/user/ssh/ListSSHKeyPairsCmd.java | 2 +- .../cloudstack/api/command/user/ssh/RegisterSSHKeyPairCmd.java | 2 +- .../apache/cloudstack/api/command/user/tag/CreateTagsCmd.java | 2 +- .../apache/cloudstack/api/command/user/tag/DeleteTagsCmd.java | 2 +- .../org/apache/cloudstack/api/command/user/tag/ListTagsCmd.java | 2 +- .../cloudstack/api/command/user/template/CopyTemplateCmd.java | 2 +- .../cloudstack/api/command/user/template/CreateTemplateCmd.java | 2 +- .../cloudstack/api/command/user/template/DeleteTemplateCmd.java | 2 +- .../api/command/user/template/ExtractTemplateCmd.java | 2 +- .../api/command/user/template/ListTemplatePermissionsCmd.java | 2 +- .../cloudstack/api/command/user/template/ListTemplatesCmd.java | 2 +- .../api/command/user/template/RegisterTemplateCmd.java | 2 +- .../cloudstack/api/command/user/template/UpdateTemplateCmd.java | 2 +- .../api/command/user/template/UpdateTemplatePermissionsCmd.java | 2 +- .../org/apache/cloudstack/api/command/user/vm/DeployVMCmd.java | 2 +- .../org/apache/cloudstack/api/command/user/vm/DestroyVMCmd.java | 2 +- .../apache/cloudstack/api/command/user/vm/GetVMPasswordCmd.java | 2 +- .../org/apache/cloudstack/api/command/user/vm/ListVMsCmd.java | 2 +- .../org/apache/cloudstack/api/command/user/vm/RebootVMCmd.java | 2 +- .../cloudstack/api/command/user/vm/ResetVMPasswordCmd.java | 2 +- .../org/apache/cloudstack/api/command/user/vm/RestoreVMCmd.java | 2 +- .../org/apache/cloudstack/api/command/user/vm/StartVMCmd.java | 2 +- .../org/apache/cloudstack/api/command/user/vm/StopVMCmd.java | 2 +- .../org/apache/cloudstack/api/command/user/vm/UpdateVMCmd.java | 2 +- .../org/apache/cloudstack/api/command/user/vm/UpgradeVMCmd.java | 2 +- .../cloudstack/api/command/user/vmgroup/CreateVMGroupCmd.java | 2 +- .../cloudstack/api/command/user/vmgroup/DeleteVMGroupCmd.java | 2 +- .../cloudstack/api/command/user/vmgroup/ListVMGroupsCmd.java | 2 +- .../cloudstack/api/command/user/vmgroup/UpdateVMGroupCmd.java | 2 +- .../cloudstack/api/command/user/volume/AttachVolumeCmd.java | 2 +- .../cloudstack/api/command/user/volume/CreateVolumeCmd.java | 2 +- .../cloudstack/api/command/user/volume/DeleteVolumeCmd.java | 2 +- .../cloudstack/api/command/user/volume/DetachVolumeCmd.java | 2 +- .../cloudstack/api/command/user/volume/ExtractVolumeCmd.java | 2 +- .../cloudstack/api/command/user/volume/ListVolumesCmd.java | 2 +- .../cloudstack/api/command/user/volume/MigrateVolumeCmd.java | 2 +- .../cloudstack/api/command/user/volume/UploadVolumeCmd.java | 2 +- .../cloudstack/api/command/user/vpc/CreateStaticRouteCmd.java | 2 +- .../apache/cloudstack/api/command/user/vpc/CreateVPCCmd.java | 2 +- .../cloudstack/api/command/user/vpc/DeleteStaticRouteCmd.java | 2 +- .../apache/cloudstack/api/command/user/vpc/DeleteVPCCmd.java | 2 +- .../cloudstack/api/command/user/vpc/ListPrivateGatewaysCmd.java | 2 +- .../cloudstack/api/command/user/vpc/ListStaticRoutesCmd.java | 2 +- .../cloudstack/api/command/user/vpc/ListVPCOfferingsCmd.java | 2 +- .../org/apache/cloudstack/api/command/user/vpc/ListVPCsCmd.java | 2 +- .../apache/cloudstack/api/command/user/vpc/RestartVPCCmd.java | 2 +- .../apache/cloudstack/api/command/user/vpc/UpdateVPCCmd.java | 2 +- .../apache/cloudstack/api/command/user/vpn/AddVpnUserCmd.java | 2 +- .../api/command/user/vpn/CreateRemoteAccessVpnCmd.java | 2 +- .../cloudstack/api/command/user/vpn/CreateVpnConnectionCmd.java | 2 +- .../api/command/user/vpn/CreateVpnCustomerGatewayCmd.java | 2 +- .../cloudstack/api/command/user/vpn/CreateVpnGatewayCmd.java | 2 +- .../api/command/user/vpn/DeleteRemoteAccessVpnCmd.java | 2 +- .../cloudstack/api/command/user/vpn/DeleteVpnConnectionCmd.java | 2 +- .../api/command/user/vpn/DeleteVpnCustomerGatewayCmd.java | 2 +- .../cloudstack/api/command/user/vpn/DeleteVpnGatewayCmd.java | 2 +- .../api/command/user/vpn/ListRemoteAccessVpnsCmd.java | 2 +- .../cloudstack/api/command/user/vpn/ListVpnConnectionsCmd.java | 2 +- .../api/command/user/vpn/ListVpnCustomerGatewaysCmd.java | 2 +- .../cloudstack/api/command/user/vpn/ListVpnGatewaysCmd.java | 2 +- .../apache/cloudstack/api/command/user/vpn/ListVpnUsersCmd.java | 2 +- .../cloudstack/api/command/user/vpn/RemoveVpnUserCmd.java | 2 +- .../cloudstack/api/command/user/vpn/ResetVpnConnectionCmd.java | 2 +- .../api/command/user/vpn/UpdateVpnCustomerGatewayCmd.java | 2 +- .../apache/cloudstack/api/command/user/zone/ListZonesByCmd.java | 2 +- 288 files changed, 288 insertions(+), 288 deletions(-) diff --git a/api/src/com/cloud/api/commands/AddS3Cmd.java b/api/src/com/cloud/api/commands/AddS3Cmd.java index ec5534a2a7d..2dfc8ff3044 100644 --- a/api/src/com/cloud/api/commands/AddS3Cmd.java +++ b/api/src/com/cloud/api/commands/AddS3Cmd.java @@ -44,7 +44,7 @@ import com.cloud.exception.ResourceAllocationException; import com.cloud.exception.ResourceUnavailableException; import com.cloud.storage.S3; -@APICommand(description = "Adds S3", responseObject = S3Response.class, since = "4.0.0") +@APICommand(name = "addS3", description = "Adds S3", responseObject = S3Response.class, since = "4.0.0") public final class AddS3Cmd extends BaseCmd { private static String COMMAND_NAME = "adds3response"; diff --git a/api/src/com/cloud/api/commands/ListS3sCmd.java b/api/src/com/cloud/api/commands/ListS3sCmd.java index 714ad8e00e2..43a37b584e8 100644 --- a/api/src/com/cloud/api/commands/ListS3sCmd.java +++ b/api/src/com/cloud/api/commands/ListS3sCmd.java @@ -37,7 +37,7 @@ import com.cloud.exception.ResourceAllocationException; import com.cloud.exception.ResourceUnavailableException; import com.cloud.storage.S3; -@APICommand(description = "Lists S3s", responseObject = S3Response.class, since = "4.0.0") +@APICommand(name = "listS3s", description = "Lists S3s", responseObject = S3Response.class, since = "4.0.0") public final class ListS3sCmd extends BaseListCmd { private static final String COMMAND_NAME = "lists3sresponse"; diff --git a/api/src/org/apache/cloudstack/api/command/admin/account/CreateAccountCmd.java b/api/src/org/apache/cloudstack/api/command/admin/account/CreateAccountCmd.java index 45fed67130f..f93787b7bc5 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/account/CreateAccountCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/account/CreateAccountCmd.java @@ -30,7 +30,7 @@ import com.cloud.user.Account; import com.cloud.user.UserAccount; import com.cloud.user.UserContext; -@APICommand(description="Creates an account", responseObject=UserResponse.class) +@APICommand(name = "createAccount", description="Creates an account", responseObject=UserResponse.class) public class CreateAccountCmd extends BaseCmd { public static final Logger s_logger = Logger.getLogger(CreateAccountCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/admin/account/DeleteAccountCmd.java b/api/src/org/apache/cloudstack/api/command/admin/account/DeleteAccountCmd.java index faa01f1a966..a1d9b6419cb 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/account/DeleteAccountCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/account/DeleteAccountCmd.java @@ -28,7 +28,7 @@ import com.cloud.user.Account; import com.cloud.user.User; import com.cloud.user.UserContext; -@APICommand(description="Deletes a account, and all users associated with this account", responseObject=SuccessResponse.class) +@APICommand(name = "deleteAccount", description="Deletes a account, and all users associated with this account", responseObject=SuccessResponse.class) public class DeleteAccountCmd extends BaseAsyncCmd { public static final Logger s_logger = Logger.getLogger(DeleteAccountCmd.class.getName()); private static final String s_name = "deleteaccountresponse"; diff --git a/api/src/org/apache/cloudstack/api/command/admin/account/DisableAccountCmd.java b/api/src/org/apache/cloudstack/api/command/admin/account/DisableAccountCmd.java index ffde50a3900..f0a5e7078b7 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/account/DisableAccountCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/account/DisableAccountCmd.java @@ -30,7 +30,7 @@ import com.cloud.exception.ResourceUnavailableException; import com.cloud.user.Account; import com.cloud.user.UserContext; -@APICommand(description="Disables an account", responseObject=AccountResponse.class) +@APICommand(name = "disableAccount", description="Disables an account", responseObject=AccountResponse.class) public class DisableAccountCmd extends BaseAsyncCmd { public static final Logger s_logger = Logger.getLogger(DisableAccountCmd.class.getName()); private static final String s_name = "disableaccountresponse"; diff --git a/api/src/org/apache/cloudstack/api/command/admin/account/EnableAccountCmd.java b/api/src/org/apache/cloudstack/api/command/admin/account/EnableAccountCmd.java index dba2007e513..4aa1e4fc1b9 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/account/EnableAccountCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/account/EnableAccountCmd.java @@ -28,7 +28,7 @@ import org.apache.cloudstack.api.response.DomainResponse; import com.cloud.user.Account; -@APICommand(description="Enables an account", responseObject=AccountResponse.class) +@APICommand(name = "enableAccount", description="Enables an account", responseObject=AccountResponse.class) public class EnableAccountCmd extends BaseCmd { public static final Logger s_logger = Logger.getLogger(EnableAccountCmd.class.getName()); private static final String s_name = "enableaccountresponse"; diff --git a/api/src/org/apache/cloudstack/api/command/admin/account/LockAccountCmd.java b/api/src/org/apache/cloudstack/api/command/admin/account/LockAccountCmd.java index 8ff9dd4ca60..34e9e53b84d 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/account/LockAccountCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/account/LockAccountCmd.java @@ -27,7 +27,7 @@ import org.apache.cloudstack.api.response.DomainResponse; import com.cloud.user.Account; -@APICommand(description="Locks an account", responseObject=AccountResponse.class) +@APICommand(name = "lockAccount", description="Locks an account", responseObject=AccountResponse.class) public class LockAccountCmd extends BaseCmd { public static final Logger s_logger = Logger.getLogger(LockAccountCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/admin/account/UpdateAccountCmd.java b/api/src/org/apache/cloudstack/api/command/admin/account/UpdateAccountCmd.java index f8e41f774fd..f1340464d6b 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/account/UpdateAccountCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/account/UpdateAccountCmd.java @@ -31,7 +31,7 @@ import org.apache.cloudstack.api.response.DomainResponse; import com.cloud.user.Account; -@APICommand(description="Updates account information for the authenticated user", responseObject=AccountResponse.class) +@APICommand(name = "updateAccount", description="Updates account information for the authenticated user", responseObject=AccountResponse.class) public class UpdateAccountCmd extends BaseCmd{ public static final Logger s_logger = Logger.getLogger(UpdateAccountCmd.class.getName()); private static final String s_name = "updateaccountresponse"; diff --git a/api/src/org/apache/cloudstack/api/command/admin/autoscale/CreateCounterCmd.java b/api/src/org/apache/cloudstack/api/command/admin/autoscale/CreateCounterCmd.java index 4fb69a8352c..7a3f8369065 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/autoscale/CreateCounterCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/autoscale/CreateCounterCmd.java @@ -31,7 +31,7 @@ import com.cloud.event.EventTypes; import com.cloud.network.as.Counter; import com.cloud.user.Account; -@APICommand(description = "Adds metric counter", responseObject = CounterResponse.class) +@APICommand(name = "createCounter ", description = "Adds metric counter", responseObject = CounterResponse.class) public class CreateCounterCmd extends BaseAsyncCreateCmd { public static final Logger s_logger = Logger.getLogger(CreateCounterCmd.class.getName()); private static final String s_name = "counterresponse"; diff --git a/api/src/org/apache/cloudstack/api/command/admin/autoscale/DeleteCounterCmd.java b/api/src/org/apache/cloudstack/api/command/admin/autoscale/DeleteCounterCmd.java index 836d18cee16..7a28b3c9f24 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/autoscale/DeleteCounterCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/autoscale/DeleteCounterCmd.java @@ -32,7 +32,7 @@ import com.cloud.event.EventTypes; import com.cloud.exception.ResourceInUseException; import com.cloud.user.Account; -@APICommand(description = "Deletes a counter", responseObject = SuccessResponse.class) +@APICommand(name = "deleteCounter ", description = "Deletes a counter", responseObject = SuccessResponse.class) public class DeleteCounterCmd extends BaseAsyncCmd { public static final Logger s_logger = Logger.getLogger(DeleteCounterCmd.class.getName()); private static final String s_name = "deletecounterresponse"; diff --git a/api/src/org/apache/cloudstack/api/command/admin/cluster/AddClusterCmd.java b/api/src/org/apache/cloudstack/api/command/admin/cluster/AddClusterCmd.java index 543ee29fc7f..28bf72ddba7 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/cluster/AddClusterCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/cluster/AddClusterCmd.java @@ -34,7 +34,7 @@ import com.cloud.exception.ResourceInUseException; import com.cloud.org.Cluster; import com.cloud.user.Account; -@APICommand(description="Adds a new cluster", responseObject=ClusterResponse.class) +@APICommand(name = "addCluster", description="Adds a new cluster", responseObject=ClusterResponse.class) public class AddClusterCmd extends BaseCmd { public static final Logger s_logger = Logger.getLogger(AddClusterCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/admin/cluster/DeleteClusterCmd.java b/api/src/org/apache/cloudstack/api/command/admin/cluster/DeleteClusterCmd.java index 1f90696d7c0..f0b40cb6b03 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/cluster/DeleteClusterCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/cluster/DeleteClusterCmd.java @@ -27,7 +27,7 @@ import org.apache.cloudstack.api.response.ClusterResponse; import org.apache.cloudstack.api.response.SuccessResponse; import com.cloud.user.Account; -@APICommand(description="Deletes a cluster.", responseObject=SuccessResponse.class) +@APICommand(name = "deleteCluster", description="Deletes a cluster.", responseObject=SuccessResponse.class) public class DeleteClusterCmd extends BaseCmd { public static final Logger s_logger = Logger.getLogger(DeleteClusterCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/admin/cluster/ListClustersCmd.java b/api/src/org/apache/cloudstack/api/command/admin/cluster/ListClustersCmd.java index 4830f6fd7e2..95ab0bff4f3 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/cluster/ListClustersCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/cluster/ListClustersCmd.java @@ -34,7 +34,7 @@ import org.apache.cloudstack.api.response.ZoneResponse; import com.cloud.org.Cluster; import com.cloud.utils.Pair; -@APICommand(description="Lists clusters.", responseObject=ClusterResponse.class) +@APICommand(name = "listClusters", description="Lists clusters.", responseObject=ClusterResponse.class) public class ListClustersCmd extends BaseListCmd { public static final Logger s_logger = Logger.getLogger(ListServiceOfferingsCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/admin/cluster/UpdateClusterCmd.java b/api/src/org/apache/cloudstack/api/command/admin/cluster/UpdateClusterCmd.java index 59403cdb6bc..03b43def3ca 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/cluster/UpdateClusterCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/cluster/UpdateClusterCmd.java @@ -28,7 +28,7 @@ import com.cloud.exception.InvalidParameterValueException; import com.cloud.org.Cluster; import com.cloud.user.Account; -@APICommand(description="Updates an existing cluster", responseObject=ClusterResponse.class) +@APICommand(name = "updateCluster", description="Updates an existing cluster", responseObject=ClusterResponse.class) public class UpdateClusterCmd extends BaseCmd { public static final Logger s_logger = Logger.getLogger(AddClusterCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/admin/config/ListCfgsByCmd.java b/api/src/org/apache/cloudstack/api/command/admin/config/ListCfgsByCmd.java index 590a6fbc089..16010fdb495 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/config/ListCfgsByCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/config/ListCfgsByCmd.java @@ -30,7 +30,7 @@ import org.apache.cloudstack.api.response.ListResponse; import com.cloud.configuration.Configuration; import com.cloud.utils.Pair; -@APICommand(description = "Lists all configurations.", responseObject = ConfigurationResponse.class) +@APICommand(name = "listConfigurations", description = "Lists all configurations.", responseObject = ConfigurationResponse.class) public class ListCfgsByCmd extends BaseListCmd { public static final Logger s_logger = Logger.getLogger(ListCfgsByCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/admin/config/ListHypervisorCapabilitiesCmd.java b/api/src/org/apache/cloudstack/api/command/admin/config/ListHypervisorCapabilitiesCmd.java index 588427474f2..b69e9eab597 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/config/ListHypervisorCapabilitiesCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/config/ListHypervisorCapabilitiesCmd.java @@ -31,7 +31,7 @@ import com.cloud.hypervisor.Hypervisor.HypervisorType; import com.cloud.hypervisor.HypervisorCapabilities; import com.cloud.utils.Pair; -@APICommand(description="Lists all hypervisor capabilities.", responseObject=HypervisorCapabilitiesResponse.class, since="3.0.0") +@APICommand(name = "listHypervisorCapabilities", description="Lists all hypervisor capabilities.", responseObject=HypervisorCapabilitiesResponse.class, since="3.0.0") public class ListHypervisorCapabilitiesCmd extends BaseListCmd { public static final Logger s_logger = Logger.getLogger(ListHypervisorCapabilitiesCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/admin/config/UpdateCfgCmd.java b/api/src/org/apache/cloudstack/api/command/admin/config/UpdateCfgCmd.java index 5cf4246675e..79693e76f84 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/config/UpdateCfgCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/config/UpdateCfgCmd.java @@ -27,7 +27,7 @@ import org.apache.cloudstack.api.response.ConfigurationResponse; import com.cloud.configuration.Configuration; import com.cloud.user.Account; -@APICommand(description="Updates a configuration.", responseObject=ConfigurationResponse.class) +@APICommand(name = "updateConfiguration", description="Updates a configuration.", responseObject=ConfigurationResponse.class) public class UpdateCfgCmd extends BaseCmd { public static final Logger s_logger = Logger.getLogger(UpdateCfgCmd.class.getName()); private static final String s_name = "updateconfigurationresponse"; diff --git a/api/src/org/apache/cloudstack/api/command/admin/config/UpdateHypervisorCapabilitiesCmd.java b/api/src/org/apache/cloudstack/api/command/admin/config/UpdateHypervisorCapabilitiesCmd.java index cc380ddf386..82880c1fbae 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/config/UpdateHypervisorCapabilitiesCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/config/UpdateHypervisorCapabilitiesCmd.java @@ -28,7 +28,7 @@ import org.apache.cloudstack.api.response.ServiceOfferingResponse; import com.cloud.hypervisor.HypervisorCapabilities; import com.cloud.user.Account; -@APICommand(description="Updates a hypervisor capabilities.", responseObject=ServiceOfferingResponse.class, since="3.0.0") +@APICommand(name = "updateHypervisorCapabilities", description="Updates a hypervisor capabilities.", responseObject=ServiceOfferingResponse.class, since="3.0.0") public class UpdateHypervisorCapabilitiesCmd extends BaseCmd { public static final Logger s_logger = Logger.getLogger(UpdateHypervisorCapabilitiesCmd.class.getName()); private static final String s_name = "updatehypervisorcapabilitiesresponse"; diff --git a/api/src/org/apache/cloudstack/api/command/admin/domain/CreateDomainCmd.java b/api/src/org/apache/cloudstack/api/command/admin/domain/CreateDomainCmd.java index 6ae3161c157..0e6ae32583b 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/domain/CreateDomainCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/domain/CreateDomainCmd.java @@ -25,7 +25,7 @@ import com.cloud.domain.Domain; import com.cloud.user.Account; import com.cloud.user.UserContext; -@APICommand(description="Creates a domain", responseObject=DomainResponse.class) +@APICommand(name = "createDomain", description="Creates a domain", responseObject=DomainResponse.class) public class CreateDomainCmd extends BaseCmd { public static final Logger s_logger = Logger.getLogger(CreateDomainCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/admin/domain/DeleteDomainCmd.java b/api/src/org/apache/cloudstack/api/command/admin/domain/DeleteDomainCmd.java index d63475af617..7009e70ca32 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/domain/DeleteDomainCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/domain/DeleteDomainCmd.java @@ -27,7 +27,7 @@ import com.cloud.event.EventTypes; import com.cloud.user.Account; import com.cloud.user.UserContext; -@APICommand(description="Deletes a specified domain", responseObject=SuccessResponse.class) +@APICommand(name = "deleteDomain", description="Deletes a specified domain", responseObject=SuccessResponse.class) public class DeleteDomainCmd extends BaseAsyncCmd { public static final Logger s_logger = Logger.getLogger(DeleteDomainCmd.class.getName()); private static final String s_name = "deletedomainresponse"; diff --git a/api/src/org/apache/cloudstack/api/command/admin/domain/ListDomainChildrenCmd.java b/api/src/org/apache/cloudstack/api/command/admin/domain/ListDomainChildrenCmd.java index 7c4b0222b98..4bc05d1c0f9 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/domain/ListDomainChildrenCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/domain/ListDomainChildrenCmd.java @@ -30,7 +30,7 @@ import org.apache.cloudstack.api.response.ListResponse; import com.cloud.domain.Domain; import com.cloud.utils.Pair; -@APICommand(description="Lists all children domains belonging to a specified domain", responseObject=DomainResponse.class) +@APICommand(name = "listDomainChildren", description="Lists all children domains belonging to a specified domain", responseObject=DomainResponse.class) public class ListDomainChildrenCmd extends BaseListCmd { public static final Logger s_logger = Logger.getLogger(ListDomainChildrenCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/admin/domain/ListDomainsCmd.java b/api/src/org/apache/cloudstack/api/command/admin/domain/ListDomainsCmd.java index 4e0ac9c186b..9b9e200abcd 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/domain/ListDomainsCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/domain/ListDomainsCmd.java @@ -30,7 +30,7 @@ import org.apache.cloudstack.api.response.ListResponse; import com.cloud.domain.Domain; import com.cloud.utils.Pair; -@APICommand(description="Lists domains and provides detailed information for listed domains", responseObject=DomainResponse.class) +@APICommand(name = "listDomains", description="Lists domains and provides detailed information for listed domains", responseObject=DomainResponse.class) public class ListDomainsCmd extends BaseListCmd { public static final Logger s_logger = Logger.getLogger(ListDomainsCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/admin/domain/UpdateDomainCmd.java b/api/src/org/apache/cloudstack/api/command/admin/domain/UpdateDomainCmd.java index 86a160fdc7b..cc5926cace1 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/domain/UpdateDomainCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/domain/UpdateDomainCmd.java @@ -25,7 +25,7 @@ import com.cloud.domain.Domain; import com.cloud.user.Account; import com.cloud.user.UserContext; -@APICommand(description="Updates a domain with a new name", responseObject=DomainResponse.class) +@APICommand(name = "updateDomain", description="Updates a domain with a new name", responseObject=DomainResponse.class) public class UpdateDomainCmd extends BaseCmd { public static final Logger s_logger = Logger.getLogger(UpdateDomainCmd.class.getName()); private static final String s_name = "updatedomainresponse"; diff --git a/api/src/org/apache/cloudstack/api/command/admin/host/AddHostCmd.java b/api/src/org/apache/cloudstack/api/command/admin/host/AddHostCmd.java index c0d774a1c2b..0a0a98c1c45 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/host/AddHostCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/host/AddHostCmd.java @@ -35,7 +35,7 @@ import com.cloud.exception.DiscoveryException; import com.cloud.host.Host; import com.cloud.user.Account; -@APICommand(description="Adds a new host.", responseObject=HostResponse.class) +@APICommand(name = "addHost", description="Adds a new host.", responseObject=HostResponse.class) public class AddHostCmd extends BaseCmd { public static final Logger s_logger = Logger.getLogger(AddHostCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/admin/host/AddSecondaryStorageCmd.java b/api/src/org/apache/cloudstack/api/command/admin/host/AddSecondaryStorageCmd.java index faa214df5d3..579e286f884 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/host/AddSecondaryStorageCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/host/AddSecondaryStorageCmd.java @@ -28,7 +28,7 @@ import com.cloud.exception.DiscoveryException; import com.cloud.host.Host; import com.cloud.user.Account; -@APICommand(description="Adds secondary storage.", responseObject=HostResponse.class) +@APICommand(name = "addSecondaryStorage", description="Adds secondary storage.", responseObject=HostResponse.class) public class AddSecondaryStorageCmd extends BaseCmd { public static final Logger s_logger = Logger.getLogger(AddSecondaryStorageCmd.class.getName()); private static final String s_name = "addsecondarystorageresponse"; diff --git a/api/src/org/apache/cloudstack/api/command/admin/host/CancelMaintenanceCmd.java b/api/src/org/apache/cloudstack/api/command/admin/host/CancelMaintenanceCmd.java index 3c5d5aa1b5a..93dca9140f9 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/host/CancelMaintenanceCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/host/CancelMaintenanceCmd.java @@ -31,7 +31,7 @@ import com.cloud.host.Host; import com.cloud.user.Account; import com.cloud.user.UserContext; -@APICommand(description="Cancels host maintenance.", responseObject=HostResponse.class) +@APICommand(name = "cancelHostMaintenance", description="Cancels host maintenance.", responseObject=HostResponse.class) public class CancelMaintenanceCmd extends BaseAsyncCmd { public static final Logger s_logger = Logger.getLogger(CancelMaintenanceCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/admin/host/DeleteHostCmd.java b/api/src/org/apache/cloudstack/api/command/admin/host/DeleteHostCmd.java index 609b4938b27..5103f986e10 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/host/DeleteHostCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/host/DeleteHostCmd.java @@ -27,7 +27,7 @@ import org.apache.cloudstack.api.ServerApiException; import org.apache.cloudstack.api.response.SuccessResponse; import com.cloud.user.Account; -@APICommand(description = "Deletes a host.", responseObject = SuccessResponse.class) +@APICommand(name = "deleteHost", description = "Deletes a host.", responseObject = SuccessResponse.class) public class DeleteHostCmd extends BaseCmd { public static final Logger s_logger = Logger.getLogger(DeleteHostCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/admin/host/ListHostsCmd.java b/api/src/org/apache/cloudstack/api/command/admin/host/ListHostsCmd.java index ec20ee67b74..82f329f4b7e 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/host/ListHostsCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/host/ListHostsCmd.java @@ -38,7 +38,7 @@ import com.cloud.exception.InvalidParameterValueException; import com.cloud.host.Host; import com.cloud.utils.Pair; -@APICommand(description="Lists hosts.", responseObject=HostResponse.class) +@APICommand(name = "listHosts", description="Lists hosts.", responseObject=HostResponse.class) public class ListHostsCmd extends BaseListCmd { public static final Logger s_logger = Logger.getLogger(ListHostsCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/admin/host/PrepareForMaintenanceCmd.java b/api/src/org/apache/cloudstack/api/command/admin/host/PrepareForMaintenanceCmd.java index a6ff9db30a8..385e2aef415 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/host/PrepareForMaintenanceCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/host/PrepareForMaintenanceCmd.java @@ -31,7 +31,7 @@ import com.cloud.host.Host; import com.cloud.user.Account; import com.cloud.user.UserContext; -@APICommand(description="Prepares a host for maintenance.", responseObject=HostResponse.class) +@APICommand(name = "prepareHostForMaintenance", description="Prepares a host for maintenance.", responseObject=HostResponse.class) public class PrepareForMaintenanceCmd extends BaseAsyncCmd { public static final Logger s_logger = Logger.getLogger(PrepareForMaintenanceCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/admin/host/ReconnectHostCmd.java b/api/src/org/apache/cloudstack/api/command/admin/host/ReconnectHostCmd.java index e232b1da9b2..99e867bbebd 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/host/ReconnectHostCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/host/ReconnectHostCmd.java @@ -31,7 +31,7 @@ import com.cloud.host.Host; import com.cloud.user.Account; import com.cloud.user.UserContext; -@APICommand(description="Reconnects a host.", responseObject=HostResponse.class) +@APICommand(name = "reconnectHost", description="Reconnects a host.", responseObject=HostResponse.class) public class ReconnectHostCmd extends BaseAsyncCmd { public static final Logger s_logger = Logger.getLogger(ReconnectHostCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/admin/host/UpdateHostCmd.java b/api/src/org/apache/cloudstack/api/command/admin/host/UpdateHostCmd.java index e729d7df181..9ab27178838 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/host/UpdateHostCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/host/UpdateHostCmd.java @@ -30,7 +30,7 @@ import org.apache.cloudstack.api.response.HostResponse; import com.cloud.host.Host; import com.cloud.user.Account; -@APICommand(description="Updates a host.", responseObject=HostResponse.class) +@APICommand(name = "updateHost", description="Updates a host.", responseObject=HostResponse.class) public class UpdateHostCmd extends BaseCmd { public static final Logger s_logger = Logger.getLogger(UpdateHostCmd.class.getName()); private static final String s_name = "updatehostresponse"; diff --git a/api/src/org/apache/cloudstack/api/command/admin/host/UpdateHostPasswordCmd.java b/api/src/org/apache/cloudstack/api/command/admin/host/UpdateHostPasswordCmd.java index 6a02c3e244c..dd9e4559b9d 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/host/UpdateHostPasswordCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/host/UpdateHostPasswordCmd.java @@ -27,7 +27,7 @@ import org.apache.cloudstack.api.response.HostResponse; import org.apache.cloudstack.api.response.SuccessResponse; import com.cloud.user.Account; -@APICommand(description = "Update password of a host/pool on management server.", responseObject = SuccessResponse.class) +@APICommand(name = "updateHostPassword", description = "Update password of a host/pool on management server.", responseObject = SuccessResponse.class) public class UpdateHostPasswordCmd extends BaseCmd { public static final Logger s_logger = Logger.getLogger(UpdateHostPasswordCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/admin/ldap/LDAPConfigCmd.java b/api/src/org/apache/cloudstack/api/command/admin/ldap/LDAPConfigCmd.java index 4862df0fc13..b71ba73405f 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/ldap/LDAPConfigCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/ldap/LDAPConfigCmd.java @@ -33,7 +33,7 @@ import com.cloud.exception.ResourceAllocationException; import com.cloud.exception.ResourceUnavailableException; import com.cloud.user.Account; -@APICommand(description="Configure the LDAP context for this site.", responseObject=LDAPConfigResponse.class, since="3.0.0") +@APICommand(name = "ldapConfig", description="Configure the LDAP context for this site.", responseObject=LDAPConfigResponse.class, since="3.0.0") public class LDAPConfigCmd extends BaseCmd { public static final Logger s_logger = Logger.getLogger(LDAPConfigCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/admin/ldap/LDAPRemoveCmd.java b/api/src/org/apache/cloudstack/api/command/admin/ldap/LDAPRemoveCmd.java index f7fb2b8c5c6..6bf5f4ff851 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/ldap/LDAPRemoveCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/ldap/LDAPRemoveCmd.java @@ -25,7 +25,7 @@ import org.apache.cloudstack.api.response.LDAPConfigResponse; import org.apache.cloudstack.api.response.LDAPRemoveResponse; import com.cloud.user.Account; -@APICommand(description="Remove the LDAP context for this site.", responseObject=LDAPConfigResponse.class, since="3.0.1") +@APICommand(name = "ldapRemove", description="Remove the LDAP context for this site.", responseObject=LDAPConfigResponse.class, since="3.0.1") public class LDAPRemoveCmd extends BaseCmd { public static final Logger s_logger = Logger.getLogger(LDAPRemoveCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/admin/network/AddNetworkDeviceCmd.java b/api/src/org/apache/cloudstack/api/command/admin/network/AddNetworkDeviceCmd.java index 39efc644c9d..3e1d74df405 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/network/AddNetworkDeviceCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/network/AddNetworkDeviceCmd.java @@ -37,7 +37,7 @@ import org.apache.cloudstack.api.response.NetworkDeviceResponse; import com.cloud.utils.component.ComponentLocator; import com.cloud.utils.exception.CloudRuntimeException; -@APICommand(description="Adds a network device of one of the following types: ExternalDhcp, ExternalFirewall, ExternalLoadBalancer, PxeServer", responseObject = NetworkDeviceResponse.class) +@APICommand(name = "addNetworkDevice", description="Adds a network device of one of the following types: ExternalDhcp, ExternalFirewall, ExternalLoadBalancer, PxeServer", responseObject = NetworkDeviceResponse.class) public class AddNetworkDeviceCmd extends BaseCmd { public static final Logger s_logger = Logger.getLogger(AddNetworkDeviceCmd.class); private static final String s_name = "addnetworkdeviceresponse"; diff --git a/api/src/org/apache/cloudstack/api/command/admin/network/AddNetworkServiceProviderCmd.java b/api/src/org/apache/cloudstack/api/command/admin/network/AddNetworkServiceProviderCmd.java index acff41e6914..b6518d8eb59 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/network/AddNetworkServiceProviderCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/network/AddNetworkServiceProviderCmd.java @@ -35,7 +35,7 @@ import com.cloud.network.PhysicalNetworkServiceProvider; import com.cloud.user.Account; import com.cloud.user.UserContext; -@APICommand(description="Adds a network serviceProvider to a physical network", responseObject=ProviderResponse.class, since="3.0.0") +@APICommand(name = "addNetworkServiceProvider", description="Adds a network serviceProvider to a physical network", responseObject=ProviderResponse.class, since="3.0.0") public class AddNetworkServiceProviderCmd extends BaseAsyncCreateCmd { public static final Logger s_logger = Logger.getLogger(AddNetworkServiceProviderCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/admin/network/CreateNetworkOfferingCmd.java b/api/src/org/apache/cloudstack/api/command/admin/network/CreateNetworkOfferingCmd.java index 2ca61f7512a..b97f85ec1ba 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/network/CreateNetworkOfferingCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/network/CreateNetworkOfferingCmd.java @@ -36,7 +36,7 @@ import com.cloud.offering.NetworkOffering; import com.cloud.offering.NetworkOffering.Availability; import com.cloud.user.Account; -@APICommand(description="Creates a network offering.", responseObject=NetworkOfferingResponse.class, since="3.0.0") +@APICommand(name = "createNetworkOffering", description="Creates a network offering.", responseObject=NetworkOfferingResponse.class, since="3.0.0") public class CreateNetworkOfferingCmd extends BaseCmd { public static final Logger s_logger = Logger.getLogger(CreateNetworkOfferingCmd.class.getName()); private static final String _name = "createnetworkofferingresponse"; diff --git a/api/src/org/apache/cloudstack/api/command/admin/network/CreatePhysicalNetworkCmd.java b/api/src/org/apache/cloudstack/api/command/admin/network/CreatePhysicalNetworkCmd.java index 54a19e5a03e..dd3f3231351 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/network/CreatePhysicalNetworkCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/network/CreatePhysicalNetworkCmd.java @@ -36,7 +36,7 @@ import com.cloud.network.PhysicalNetwork; import com.cloud.user.Account; import com.cloud.user.UserContext; -@APICommand(description="Creates a physical network", responseObject=PhysicalNetworkResponse.class, since="3.0.0") +@APICommand(name = "createPhysicalNetwork", description="Creates a physical network", responseObject=PhysicalNetworkResponse.class, since="3.0.0") public class CreatePhysicalNetworkCmd extends BaseAsyncCreateCmd { public static final Logger s_logger = Logger.getLogger(CreatePhysicalNetworkCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/admin/network/CreateStorageNetworkIpRangeCmd.java b/api/src/org/apache/cloudstack/api/command/admin/network/CreateStorageNetworkIpRangeCmd.java index f052cbb1911..ccd92e19d67 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/network/CreateStorageNetworkIpRangeCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/network/CreateStorageNetworkIpRangeCmd.java @@ -34,7 +34,7 @@ import com.cloud.exception.ResourceAllocationException; import com.cloud.exception.ResourceUnavailableException; import com.cloud.user.Account; -@APICommand(description="Creates a Storage network IP range.", responseObject=StorageNetworkIpRangeResponse.class, since="3.0.0") +@APICommand(name = "createStorageNetworkIpRange", description="Creates a Storage network IP range.", responseObject=StorageNetworkIpRangeResponse.class, since="3.0.0") public class CreateStorageNetworkIpRangeCmd extends BaseAsyncCmd { public static final Logger s_logger = Logger.getLogger(CreateStorageNetworkIpRangeCmd.class); diff --git a/api/src/org/apache/cloudstack/api/command/admin/network/DeleteNetworkDeviceCmd.java b/api/src/org/apache/cloudstack/api/command/admin/network/DeleteNetworkDeviceCmd.java index 12ca5c7cb86..09451242daf 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/network/DeleteNetworkDeviceCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/network/DeleteNetworkDeviceCmd.java @@ -35,7 +35,7 @@ import com.cloud.server.ManagementService; import com.cloud.utils.component.ComponentLocator; import com.cloud.utils.exception.CloudRuntimeException; -@APICommand(description="Deletes network device.", responseObject=SuccessResponse.class) +@APICommand(name = "deleteNetworkDevice", description="Deletes network device.", responseObject=SuccessResponse.class) public class DeleteNetworkDeviceCmd extends BaseCmd { public static final Logger s_logger = Logger.getLogger(DeleteNetworkDeviceCmd.class); private static final String s_name = "deletenetworkdeviceresponse"; diff --git a/api/src/org/apache/cloudstack/api/command/admin/network/DeleteNetworkOfferingCmd.java b/api/src/org/apache/cloudstack/api/command/admin/network/DeleteNetworkOfferingCmd.java index bede9223279..c13088f6123 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/network/DeleteNetworkOfferingCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/network/DeleteNetworkOfferingCmd.java @@ -27,7 +27,7 @@ import org.apache.cloudstack.api.response.NetworkOfferingResponse; import org.apache.cloudstack.api.response.SuccessResponse; import com.cloud.user.Account; -@APICommand(description="Deletes a network offering.", responseObject=SuccessResponse.class, since="3.0.0") +@APICommand(name = "deleteNetworkOffering", description="Deletes a network offering.", responseObject=SuccessResponse.class, since="3.0.0") public class DeleteNetworkOfferingCmd extends BaseCmd{ public static final Logger s_logger = Logger.getLogger(DeleteNetworkOfferingCmd.class.getName()); private static final String s_name = "deletenetworkofferingresponse"; diff --git a/api/src/org/apache/cloudstack/api/command/admin/network/DeleteNetworkServiceProviderCmd.java b/api/src/org/apache/cloudstack/api/command/admin/network/DeleteNetworkServiceProviderCmd.java index 0918bacd48b..bc744399a33 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/network/DeleteNetworkServiceProviderCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/network/DeleteNetworkServiceProviderCmd.java @@ -32,7 +32,7 @@ import com.cloud.exception.ConcurrentOperationException; import com.cloud.exception.ResourceUnavailableException; import com.cloud.user.Account; -@APICommand(description="Deletes a Network Service Provider.", responseObject=SuccessResponse.class, since="3.0.0") +@APICommand(name = "deleteNetworkServiceProvider", description="Deletes a Network Service Provider.", responseObject=SuccessResponse.class, since="3.0.0") public class DeleteNetworkServiceProviderCmd extends BaseAsyncCmd { public static final Logger s_logger = Logger.getLogger(DeleteNetworkServiceProviderCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/admin/network/DeletePhysicalNetworkCmd.java b/api/src/org/apache/cloudstack/api/command/admin/network/DeletePhysicalNetworkCmd.java index b5e46e8ed1a..5f86efa9ad8 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/network/DeletePhysicalNetworkCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/network/DeletePhysicalNetworkCmd.java @@ -27,7 +27,7 @@ import com.cloud.event.EventTypes; import com.cloud.user.Account; import com.cloud.user.UserContext; -@APICommand(description="Deletes a Physical Network.", responseObject=SuccessResponse.class, since="3.0.0") +@APICommand(name = "deletePhysicalNetwork", description="Deletes a Physical Network.", responseObject=SuccessResponse.class, since="3.0.0") public class DeletePhysicalNetworkCmd extends BaseAsyncCmd { public static final Logger s_logger = Logger.getLogger(DeletePhysicalNetworkCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/admin/network/DeleteStorageNetworkIpRangeCmd.java b/api/src/org/apache/cloudstack/api/command/admin/network/DeleteStorageNetworkIpRangeCmd.java index a1da5bd763d..1873fc7d6ef 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/network/DeleteStorageNetworkIpRangeCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/network/DeleteStorageNetworkIpRangeCmd.java @@ -29,7 +29,7 @@ import com.cloud.exception.ResourceAllocationException; import com.cloud.exception.ResourceUnavailableException; import com.cloud.user.Account; -@APICommand(description="Deletes a storage network IP Range.", responseObject=SuccessResponse.class, since="3.0.0") +@APICommand(name = "deleteStorageNetworkIpRange", description="Deletes a storage network IP Range.", responseObject=SuccessResponse.class, since="3.0.0") public class DeleteStorageNetworkIpRangeCmd extends BaseAsyncCmd { public static final Logger s_logger = Logger.getLogger(DeleteStorageNetworkIpRangeCmd.class); diff --git a/api/src/org/apache/cloudstack/api/command/admin/network/ListNetworkDeviceCmd.java b/api/src/org/apache/cloudstack/api/command/admin/network/ListNetworkDeviceCmd.java index 794fe188072..742ff1f74af 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/network/ListNetworkDeviceCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/network/ListNetworkDeviceCmd.java @@ -41,7 +41,7 @@ import com.cloud.server.ManagementService; import com.cloud.utils.component.ComponentLocator; import com.cloud.utils.exception.CloudRuntimeException; -@APICommand(description="List network devices", responseObject = NetworkDeviceResponse.class) +@APICommand(name = "listNetworkDevice", description="List network devices", responseObject = NetworkDeviceResponse.class) public class ListNetworkDeviceCmd extends BaseListCmd { public static final Logger s_logger = Logger.getLogger(ListNetworkDeviceCmd.class); private static final String s_name = "listnetworkdevice"; diff --git a/api/src/org/apache/cloudstack/api/command/admin/network/ListNetworkServiceProvidersCmd.java b/api/src/org/apache/cloudstack/api/command/admin/network/ListNetworkServiceProvidersCmd.java index 1dadcc80d67..06a0518af20 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/network/ListNetworkServiceProvidersCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/network/ListNetworkServiceProvidersCmd.java @@ -32,7 +32,7 @@ import com.cloud.network.PhysicalNetworkServiceProvider; import com.cloud.user.Account; import com.cloud.utils.Pair; -@APICommand(description="Lists network serviceproviders for a given physical network.", responseObject=ProviderResponse.class, since="3.0.0") +@APICommand(name = "listNetworkServiceProviders", description="Lists network serviceproviders for a given physical network.", responseObject=ProviderResponse.class, since="3.0.0") public class ListNetworkServiceProvidersCmd extends BaseListCmd { public static final Logger s_logger = Logger.getLogger(ListNetworkServiceProvidersCmd.class.getName()); private static final String _name = "listnetworkserviceprovidersresponse"; diff --git a/api/src/org/apache/cloudstack/api/command/admin/network/ListPhysicalNetworksCmd.java b/api/src/org/apache/cloudstack/api/command/admin/network/ListPhysicalNetworksCmd.java index fd0f1feca9f..a301ac004ea 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/network/ListPhysicalNetworksCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/network/ListPhysicalNetworksCmd.java @@ -34,7 +34,7 @@ import com.cloud.network.PhysicalNetwork; import com.cloud.user.Account; import com.cloud.utils.Pair; -@APICommand(description="Lists physical networks", responseObject=PhysicalNetworkResponse.class, since="3.0.0") +@APICommand(name = "listPhysicalNetworks", description="Lists physical networks", responseObject=PhysicalNetworkResponse.class, since="3.0.0") public class ListPhysicalNetworksCmd extends BaseListCmd { public static final Logger s_logger = Logger.getLogger(ListPhysicalNetworksCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/admin/network/ListStorageNetworkIpRangeCmd.java b/api/src/org/apache/cloudstack/api/command/admin/network/ListStorageNetworkIpRangeCmd.java index b972a33ad2b..8fcaf4958b1 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/network/ListStorageNetworkIpRangeCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/network/ListStorageNetworkIpRangeCmd.java @@ -34,7 +34,7 @@ import com.cloud.exception.ResourceAllocationException; import com.cloud.exception.ResourceUnavailableException; import com.cloud.user.Account; -@APICommand(description="List a storage network IP range.", responseObject=StorageNetworkIpRangeResponse.class, since="3.0.0") +@APICommand(name = "listStorageNetworkIpRange", description="List a storage network IP range.", responseObject=StorageNetworkIpRangeResponse.class, since="3.0.0") public class ListStorageNetworkIpRangeCmd extends BaseListCmd { public static final Logger s_logger = Logger.getLogger(ListStorageNetworkIpRangeCmd.class); diff --git a/api/src/org/apache/cloudstack/api/command/admin/network/ListSupportedNetworkServicesCmd.java b/api/src/org/apache/cloudstack/api/command/admin/network/ListSupportedNetworkServicesCmd.java index 6c4430ce0bc..f7407a108e0 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/network/ListSupportedNetworkServicesCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/network/ListSupportedNetworkServicesCmd.java @@ -33,7 +33,7 @@ import com.cloud.network.Network.Service; import com.cloud.user.Account; -@APICommand(description="Lists all network services provided by CloudStack or for the given Provider.", responseObject=ServiceResponse.class, since="3.0.0") +@APICommand(name = "listSupportedNetworkServices", description="Lists all network services provided by CloudStack or for the given Provider.", responseObject=ServiceResponse.class, since="3.0.0") public class ListSupportedNetworkServicesCmd extends BaseListCmd { public static final Logger s_logger = Logger.getLogger(ListSupportedNetworkServicesCmd.class.getName()); private static final String _name = "listsupportednetworkservicesresponse"; diff --git a/api/src/org/apache/cloudstack/api/command/admin/network/UpdateNetworkOfferingCmd.java b/api/src/org/apache/cloudstack/api/command/admin/network/UpdateNetworkOfferingCmd.java index 64c16b88af9..dc2f3099206 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/network/UpdateNetworkOfferingCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/network/UpdateNetworkOfferingCmd.java @@ -24,7 +24,7 @@ import org.apache.cloudstack.api.response.NetworkOfferingResponse; import com.cloud.offering.NetworkOffering; import com.cloud.user.Account; -@APICommand(description="Updates a network offering.", responseObject=NetworkOfferingResponse.class) +@APICommand(name = "updateNetworkOffering", description="Updates a network offering.", responseObject=NetworkOfferingResponse.class) public class UpdateNetworkOfferingCmd extends BaseCmd { public static final Logger s_logger = Logger.getLogger(UpdateNetworkOfferingCmd.class.getName()); private static final String _name = "updatenetworkofferingresponse"; diff --git a/api/src/org/apache/cloudstack/api/command/admin/network/UpdateNetworkServiceProviderCmd.java b/api/src/org/apache/cloudstack/api/command/admin/network/UpdateNetworkServiceProviderCmd.java index b0ce671ba95..b770ea26c12 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/network/UpdateNetworkServiceProviderCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/network/UpdateNetworkServiceProviderCmd.java @@ -32,7 +32,7 @@ import com.cloud.event.EventTypes; import com.cloud.network.PhysicalNetworkServiceProvider; import com.cloud.user.Account; -@APICommand(description="Updates a network serviceProvider of a physical network", responseObject=ProviderResponse.class, since="3.0.0") +@APICommand(name = "updateNetworkServiceProvider", description="Updates a network serviceProvider of a physical network", responseObject=ProviderResponse.class, since="3.0.0") public class UpdateNetworkServiceProviderCmd extends BaseAsyncCmd { public static final Logger s_logger = Logger.getLogger(UpdateNetworkServiceProviderCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/admin/network/UpdatePhysicalNetworkCmd.java b/api/src/org/apache/cloudstack/api/command/admin/network/UpdatePhysicalNetworkCmd.java index e6df839f6f2..d9a3e044c73 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/network/UpdatePhysicalNetworkCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/network/UpdatePhysicalNetworkCmd.java @@ -30,7 +30,7 @@ import com.cloud.event.EventTypes; import com.cloud.network.PhysicalNetwork; import com.cloud.user.Account; -@APICommand(description="Updates a physical network", responseObject=PhysicalNetworkResponse.class, since="3.0.0") +@APICommand(name = "updatePhysicalNetwork", description="Updates a physical network", responseObject=PhysicalNetworkResponse.class, since="3.0.0") public class UpdatePhysicalNetworkCmd extends BaseAsyncCmd { public static final Logger s_logger = Logger.getLogger(UpdatePhysicalNetworkCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/admin/network/UpdateStorageNetworkIpRangeCmd.java b/api/src/org/apache/cloudstack/api/command/admin/network/UpdateStorageNetworkIpRangeCmd.java index f7cb7b6a4a8..d6d0b92e4b7 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/network/UpdateStorageNetworkIpRangeCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/network/UpdateStorageNetworkIpRangeCmd.java @@ -29,7 +29,7 @@ import com.cloud.exception.ResourceAllocationException; import com.cloud.exception.ResourceUnavailableException; import com.cloud.user.Account; -@APICommand(description="Update a Storage network IP range, only allowed when no IPs in this range have been allocated.", responseObject=StorageNetworkIpRangeResponse.class, since="3.0.0") +@APICommand(name = "updateStorageNetworkIpRange", description="Update a Storage network IP range, only allowed when no IPs in this range have been allocated.", responseObject=StorageNetworkIpRangeResponse.class, since="3.0.0") public class UpdateStorageNetworkIpRangeCmd extends BaseAsyncCmd { public static final Logger s_logger = Logger.getLogger(UpdateStorageNetworkIpRangeCmd.class); private static final String s_name = "updatestoragenetworkiprangeresponse"; diff --git a/api/src/org/apache/cloudstack/api/command/admin/offering/CreateDiskOfferingCmd.java b/api/src/org/apache/cloudstack/api/command/admin/offering/CreateDiskOfferingCmd.java index 5ce4c9bf448..08101dc4137 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/offering/CreateDiskOfferingCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/offering/CreateDiskOfferingCmd.java @@ -29,7 +29,7 @@ import com.cloud.offering.DiskOffering; import com.cloud.offering.ServiceOffering; import com.cloud.user.Account; -@APICommand(description="Creates a disk offering.", responseObject=DiskOfferingResponse.class) +@APICommand(name = "createDiskOffering", description="Creates a disk offering.", responseObject=DiskOfferingResponse.class) public class CreateDiskOfferingCmd extends BaseCmd { public static final Logger s_logger = Logger.getLogger(CreateDiskOfferingCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/admin/offering/CreateServiceOfferingCmd.java b/api/src/org/apache/cloudstack/api/command/admin/offering/CreateServiceOfferingCmd.java index 6aec6c4a26f..f93c2a88ce2 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/offering/CreateServiceOfferingCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/offering/CreateServiceOfferingCmd.java @@ -28,7 +28,7 @@ import org.apache.cloudstack.api.response.ServiceOfferingResponse; import com.cloud.offering.ServiceOffering; import com.cloud.user.Account; -@APICommand(description="Creates a service offering.", responseObject=ServiceOfferingResponse.class) +@APICommand(name = "createServiceOffering", description="Creates a service offering.", responseObject=ServiceOfferingResponse.class) public class CreateServiceOfferingCmd extends BaseCmd { public static final Logger s_logger = Logger.getLogger(CreateServiceOfferingCmd.class.getName()); private static final String _name = "createserviceofferingresponse"; diff --git a/api/src/org/apache/cloudstack/api/command/admin/offering/DeleteDiskOfferingCmd.java b/api/src/org/apache/cloudstack/api/command/admin/offering/DeleteDiskOfferingCmd.java index 011aae0b1b4..2126adadfca 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/offering/DeleteDiskOfferingCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/offering/DeleteDiskOfferingCmd.java @@ -27,7 +27,7 @@ import org.apache.cloudstack.api.ServerApiException; import org.apache.cloudstack.api.response.SuccessResponse; import com.cloud.user.Account; -@APICommand(description="Updates a disk offering.", responseObject=SuccessResponse.class) +@APICommand(name = "deleteDiskOffering", description="Updates a disk offering.", responseObject=SuccessResponse.class) public class DeleteDiskOfferingCmd extends BaseCmd { public static final Logger s_logger = Logger.getLogger(DeleteDiskOfferingCmd.class.getName()); private static final String s_name = "deletediskofferingresponse"; diff --git a/api/src/org/apache/cloudstack/api/command/admin/offering/DeleteServiceOfferingCmd.java b/api/src/org/apache/cloudstack/api/command/admin/offering/DeleteServiceOfferingCmd.java index 738d85fbe2e..d5debdfcccd 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/offering/DeleteServiceOfferingCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/offering/DeleteServiceOfferingCmd.java @@ -24,7 +24,7 @@ import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.response.SuccessResponse; import com.cloud.user.Account; -@APICommand(description="Deletes a service offering.", responseObject=SuccessResponse.class) +@APICommand(name = "deleteServiceOffering", description="Deletes a service offering.", responseObject=SuccessResponse.class) public class DeleteServiceOfferingCmd extends BaseCmd{ public static final Logger s_logger = Logger.getLogger(DeleteServiceOfferingCmd.class.getName()); private static final String s_name = "deleteserviceofferingresponse"; diff --git a/api/src/org/apache/cloudstack/api/command/admin/offering/UpdateDiskOfferingCmd.java b/api/src/org/apache/cloudstack/api/command/admin/offering/UpdateDiskOfferingCmd.java index d8b66f33174..a9cd2ec883e 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/offering/UpdateDiskOfferingCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/offering/UpdateDiskOfferingCmd.java @@ -26,7 +26,7 @@ import org.apache.cloudstack.api.response.DiskOfferingResponse; import com.cloud.offering.DiskOffering; import com.cloud.user.Account; -@APICommand(description="Updates a disk offering.", responseObject=DiskOfferingResponse.class) +@APICommand(name = "updateDiskOffering", description="Updates a disk offering.", responseObject=DiskOfferingResponse.class) public class UpdateDiskOfferingCmd extends BaseCmd{ public static final Logger s_logger = Logger.getLogger(UpdateDiskOfferingCmd.class.getName()); private static final String s_name = "updatediskofferingresponse"; diff --git a/api/src/org/apache/cloudstack/api/command/admin/offering/UpdateServiceOfferingCmd.java b/api/src/org/apache/cloudstack/api/command/admin/offering/UpdateServiceOfferingCmd.java index 562e9b7c582..d8f3d9742a7 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/offering/UpdateServiceOfferingCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/offering/UpdateServiceOfferingCmd.java @@ -25,7 +25,7 @@ import org.apache.cloudstack.api.response.ServiceOfferingResponse; import com.cloud.offering.ServiceOffering; import com.cloud.user.Account; -@APICommand(description="Updates a service offering.", responseObject=ServiceOfferingResponse.class) +@APICommand(name = "updateServiceOffering", description="Updates a service offering.", responseObject=ServiceOfferingResponse.class) public class UpdateServiceOfferingCmd extends BaseCmd { public static final Logger s_logger = Logger.getLogger(UpdateServiceOfferingCmd.class.getName()); private static final String s_name = "updateserviceofferingresponse"; diff --git a/api/src/org/apache/cloudstack/api/command/admin/pod/CreatePodCmd.java b/api/src/org/apache/cloudstack/api/command/admin/pod/CreatePodCmd.java index f83515a1332..331968b00db 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/pod/CreatePodCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/pod/CreatePodCmd.java @@ -26,7 +26,7 @@ import org.apache.cloudstack.api.response.ZoneResponse; import com.cloud.dc.Pod; import com.cloud.user.Account; -@APICommand(description="Creates a new Pod.", responseObject=PodResponse.class) +@APICommand(name = "createPod", description="Creates a new Pod.", responseObject=PodResponse.class) public class CreatePodCmd extends BaseCmd { public static final Logger s_logger = Logger.getLogger(CreatePodCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/admin/pod/DeletePodCmd.java b/api/src/org/apache/cloudstack/api/command/admin/pod/DeletePodCmd.java index c9c5769a3c8..8c64a8dad33 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/pod/DeletePodCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/pod/DeletePodCmd.java @@ -28,7 +28,7 @@ import org.apache.cloudstack.api.response.SuccessResponse; import com.cloud.user.Account; -@APICommand(description="Deletes a Pod.", responseObject=SuccessResponse.class) +@APICommand(name = "deletePod", description="Deletes a Pod.", responseObject=SuccessResponse.class) public class DeletePodCmd extends BaseCmd { public static final Logger s_logger = Logger.getLogger(DeletePodCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/admin/pod/ListPodsByCmd.java b/api/src/org/apache/cloudstack/api/command/admin/pod/ListPodsByCmd.java index e9a8391d963..a64ecdde9b5 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/pod/ListPodsByCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/pod/ListPodsByCmd.java @@ -32,7 +32,7 @@ import org.apache.cloudstack.api.response.ZoneResponse; import com.cloud.dc.Pod; import com.cloud.utils.Pair; -@APICommand(description="Lists all Pods.", responseObject=PodResponse.class) +@APICommand(name = "listPods", description="Lists all Pods.", responseObject=PodResponse.class) public class ListPodsByCmd extends BaseListCmd { public static final Logger s_logger = Logger.getLogger(ListPodsByCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/admin/pod/UpdatePodCmd.java b/api/src/org/apache/cloudstack/api/command/admin/pod/UpdatePodCmd.java index 80198f2e288..ca5e03953a3 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/pod/UpdatePodCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/pod/UpdatePodCmd.java @@ -25,7 +25,7 @@ import org.apache.cloudstack.api.response.PodResponse; import com.cloud.dc.Pod; import com.cloud.user.Account; -@APICommand(description="Updates a Pod.", responseObject=PodResponse.class) +@APICommand(name = "updatePod", description="Updates a Pod.", responseObject=PodResponse.class) public class UpdatePodCmd extends BaseCmd { public static final Logger s_logger = Logger.getLogger(UpdatePodCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/admin/resource/ListAlertsCmd.java b/api/src/org/apache/cloudstack/api/command/admin/resource/ListAlertsCmd.java index 2b67d5a71c4..db7a20b02a3 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/resource/ListAlertsCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/resource/ListAlertsCmd.java @@ -30,7 +30,7 @@ import org.apache.cloudstack.api.response.AlertResponse; import org.apache.cloudstack.api.response.ListResponse; import com.cloud.utils.Pair; -@APICommand(description = "Lists all alerts.", responseObject = AlertResponse.class) +@APICommand(name = "listAlerts", description = "Lists all alerts.", responseObject = AlertResponse.class) public class ListAlertsCmd extends BaseListCmd { public static final Logger s_logger = Logger.getLogger(ListAlertsCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/admin/resource/ListCapacityCmd.java b/api/src/org/apache/cloudstack/api/command/admin/resource/ListCapacityCmd.java index 70375d2ccb4..ce20a3e27de 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/resource/ListCapacityCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/resource/ListCapacityCmd.java @@ -33,7 +33,7 @@ import org.apache.cloudstack.api.response.ZoneResponse; import com.cloud.capacity.Capacity; import com.cloud.exception.InvalidParameterValueException; -@APICommand(description="Lists all the system wide capacities.", responseObject=CapacityResponse.class) +@APICommand(name = "listCapacity", description="Lists all the system wide capacities.", responseObject=CapacityResponse.class) public class ListCapacityCmd extends BaseListCmd { public static final Logger s_logger = Logger.getLogger(ListCapacityCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/admin/resource/UploadCustomCertificateCmd.java b/api/src/org/apache/cloudstack/api/command/admin/resource/UploadCustomCertificateCmd.java index 6526dbe19f6..0e559189904 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/resource/UploadCustomCertificateCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/resource/UploadCustomCertificateCmd.java @@ -24,7 +24,7 @@ import org.apache.cloudstack.api.response.CustomCertificateResponse; import com.cloud.event.EventTypes; import com.cloud.user.Account; -@APICommand(responseObject=CustomCertificateResponse.class, description="Uploads a custom certificate for the console proxy VMs to use for SSL. Can be used to upload a single certificate signed by a known CA. Can also be used, through multiple calls, to upload a chain of certificates from CA to the custom certificate itself.") +@APICommand(name = "uploadCustomCertificate", responseObject=CustomCertificateResponse.class, description="Uploads a custom certificate for the console proxy VMs to use for SSL. Can be used to upload a single certificate signed by a known CA. Can also be used, through multiple calls, to upload a chain of certificates from CA to the custom certificate itself.") public class UploadCustomCertificateCmd extends BaseAsyncCmd { public static final Logger s_logger = Logger.getLogger(UploadCustomCertificateCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/admin/router/ConfigureVirtualRouterElementCmd.java b/api/src/org/apache/cloudstack/api/command/admin/router/ConfigureVirtualRouterElementCmd.java index 573b84fee5b..be6be26a36f 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/router/ConfigureVirtualRouterElementCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/router/ConfigureVirtualRouterElementCmd.java @@ -36,7 +36,7 @@ import com.cloud.exception.ResourceUnavailableException; import com.cloud.user.Account; import com.cloud.user.UserContext; -@APICommand(responseObject=VirtualRouterProviderResponse.class, description="Configures a virtual router element.") +@APICommand(name = "configureVirtualRouterElement", responseObject=VirtualRouterProviderResponse.class, description="Configures a virtual router element.") public class ConfigureVirtualRouterElementCmd extends BaseAsyncCmd { public static final Logger s_logger = Logger.getLogger(ConfigureVirtualRouterElementCmd.class.getName()); private static final String s_name = "configurevirtualrouterelementresponse"; diff --git a/api/src/org/apache/cloudstack/api/command/admin/router/CreateVirtualRouterElementCmd.java b/api/src/org/apache/cloudstack/api/command/admin/router/CreateVirtualRouterElementCmd.java index 99c2e9d41a5..545218f0364 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/router/CreateVirtualRouterElementCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/router/CreateVirtualRouterElementCmd.java @@ -30,7 +30,7 @@ import com.cloud.network.element.VirtualRouterElementService; import com.cloud.user.Account; import com.cloud.user.UserContext; -@APICommand(responseObject=VirtualRouterProviderResponse.class, description="Create a virtual router element.") +@APICommand(name = "createVirtualRouterElement", responseObject=VirtualRouterProviderResponse.class, description="Create a virtual router element.") public class CreateVirtualRouterElementCmd extends BaseAsyncCreateCmd { public static final Logger s_logger = Logger.getLogger(CreateVirtualRouterElementCmd.class.getName()); private static final String s_name = "createvirtualrouterelementresponse"; diff --git a/api/src/org/apache/cloudstack/api/command/admin/router/DestroyRouterCmd.java b/api/src/org/apache/cloudstack/api/command/admin/router/DestroyRouterCmd.java index 1d3c72b02cf..1157aaa7b93 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/router/DestroyRouterCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/router/DestroyRouterCmd.java @@ -33,7 +33,7 @@ import com.cloud.network.router.VirtualRouter; import com.cloud.user.Account; import com.cloud.user.UserContext; -@APICommand(description = "Destroys a router.", responseObject = DomainRouterResponse.class) +@APICommand(name = "destroyRouter", description = "Destroys a router.", responseObject = DomainRouterResponse.class) public class DestroyRouterCmd extends BaseAsyncCmd { public static final Logger s_logger = Logger.getLogger(DestroyRouterCmd.class.getName()); private static final String s_name = "destroyrouterresponse"; diff --git a/api/src/org/apache/cloudstack/api/command/admin/router/ListRoutersCmd.java b/api/src/org/apache/cloudstack/api/command/admin/router/ListRoutersCmd.java index d366e2008f0..198d8766b21 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/router/ListRoutersCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/router/ListRoutersCmd.java @@ -33,7 +33,7 @@ import org.apache.cloudstack.api.response.ZoneResponse; import com.cloud.async.AsyncJob; -@APICommand(description="List routers.", responseObject=DomainRouterResponse.class) +@APICommand(name = "listRouters", description="List routers.", responseObject=DomainRouterResponse.class) public class ListRoutersCmd extends BaseListProjectAndAccountResourcesCmd { public static final Logger s_logger = Logger.getLogger(ListRoutersCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/admin/router/ListVirtualRouterElementsCmd.java b/api/src/org/apache/cloudstack/api/command/admin/router/ListVirtualRouterElementsCmd.java index d32bf554b55..0a93ea5ab3e 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/router/ListVirtualRouterElementsCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/router/ListVirtualRouterElementsCmd.java @@ -38,7 +38,7 @@ import com.cloud.exception.ResourceUnavailableException; import com.cloud.network.VirtualRouterProvider; import com.cloud.network.element.VirtualRouterElementService; -@APICommand(description="Lists all available virtual router elements.", responseObject=VirtualRouterProviderResponse.class) +@APICommand(name = "listVirtualRouterElements", description="Lists all available virtual router elements.", responseObject=VirtualRouterProviderResponse.class) public class ListVirtualRouterElementsCmd extends BaseListCmd { public static final Logger s_logger = Logger.getLogger(ListNetworkOfferingsCmd.class.getName()); private static final String _name = "listvirtualrouterelementsresponse"; diff --git a/api/src/org/apache/cloudstack/api/command/admin/router/RebootRouterCmd.java b/api/src/org/apache/cloudstack/api/command/admin/router/RebootRouterCmd.java index ab7f04e0d29..9c50d2ffb0f 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/router/RebootRouterCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/router/RebootRouterCmd.java @@ -30,7 +30,7 @@ import com.cloud.network.router.VirtualRouter; import com.cloud.user.Account; import com.cloud.user.UserContext; -@APICommand(description="Starts a router.", responseObject=DomainRouterResponse.class) +@APICommand(name = "rebootRouter", description="Starts a router.", responseObject=DomainRouterResponse.class) public class RebootRouterCmd extends BaseAsyncCmd { public static final Logger s_logger = Logger.getLogger(RebootRouterCmd.class.getName()); private static final String s_name = "rebootrouterresponse"; diff --git a/api/src/org/apache/cloudstack/api/command/admin/router/StartRouterCmd.java b/api/src/org/apache/cloudstack/api/command/admin/router/StartRouterCmd.java index fc7c01f253a..f1f3f681829 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/router/StartRouterCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/router/StartRouterCmd.java @@ -30,7 +30,7 @@ import com.cloud.network.router.VirtualRouter; import com.cloud.user.Account; import com.cloud.user.UserContext; -@APICommand(responseObject=DomainRouterResponse.class, description="Starts a router.") +@APICommand(name = "startRouter", responseObject=DomainRouterResponse.class, description="Starts a router.") public class StartRouterCmd extends BaseAsyncCmd { public static final Logger s_logger = Logger.getLogger(StartRouterCmd.class.getName()); private static final String s_name = "startrouterresponse"; diff --git a/api/src/org/apache/cloudstack/api/command/admin/router/StopRouterCmd.java b/api/src/org/apache/cloudstack/api/command/admin/router/StopRouterCmd.java index 0003e707818..2d1b609aa5d 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/router/StopRouterCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/router/StopRouterCmd.java @@ -33,7 +33,7 @@ import com.cloud.network.router.VirtualRouter; import com.cloud.user.Account; import com.cloud.user.UserContext; -@APICommand(description = "Stops a router.", responseObject = DomainRouterResponse.class) +@APICommand(name = "stopRouter", description = "Stops a router.", responseObject = DomainRouterResponse.class) public class StopRouterCmd extends BaseAsyncCmd { public static final Logger s_logger = Logger.getLogger(StopRouterCmd.class.getName()); private static final String s_name = "stoprouterresponse"; diff --git a/api/src/org/apache/cloudstack/api/command/admin/router/UpgradeRouterCmd.java b/api/src/org/apache/cloudstack/api/command/admin/router/UpgradeRouterCmd.java index 331def837db..e2b020e09f9 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/router/UpgradeRouterCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/router/UpgradeRouterCmd.java @@ -25,7 +25,7 @@ import org.apache.cloudstack.api.response.DomainRouterResponse; import com.cloud.network.router.VirtualRouter; import com.cloud.user.Account; -@APICommand(description="Upgrades domain router to a new service offering", responseObject=DomainRouterResponse.class) +@APICommand(name = "changeServiceForRouter", description="Upgrades domain router to a new service offering", responseObject=DomainRouterResponse.class) public class UpgradeRouterCmd extends BaseCmd { public static final Logger s_logger = Logger.getLogger(UpgradeRouterCmd.class.getName()); private static final String s_name = "changeserviceforrouterresponse"; diff --git a/api/src/org/apache/cloudstack/api/command/admin/storagepool/CancelPrimaryStorageMaintenanceCmd.java b/api/src/org/apache/cloudstack/api/command/admin/storagepool/CancelPrimaryStorageMaintenanceCmd.java index 7ccd4e841a5..4d62184f1ba 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/storagepool/CancelPrimaryStorageMaintenanceCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/storagepool/CancelPrimaryStorageMaintenanceCmd.java @@ -32,7 +32,7 @@ import com.cloud.storage.StoragePool; import com.cloud.user.Account; import com.cloud.user.UserContext; -@APICommand(description="Cancels maintenance for primary storage", responseObject=StoragePoolResponse.class) +@APICommand(name = "cancelStorageMaintenance", description="Cancels maintenance for primary storage", responseObject=StoragePoolResponse.class) public class CancelPrimaryStorageMaintenanceCmd extends BaseAsyncCmd { public static final Logger s_logger = Logger.getLogger(CancelPrimaryStorageMaintenanceCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/admin/storagepool/CreateStoragePoolCmd.java b/api/src/org/apache/cloudstack/api/command/admin/storagepool/CreateStoragePoolCmd.java index fcf8d5fc9c7..352001778cb 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/storagepool/CreateStoragePoolCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/storagepool/CreateStoragePoolCmd.java @@ -33,7 +33,7 @@ import com.cloud.storage.StoragePool; import com.cloud.user.Account; @SuppressWarnings("rawtypes") -@APICommand(description="Creates a storage pool.", responseObject=StoragePoolResponse.class) +@APICommand(name = "createStoragePool", description="Creates a storage pool.", responseObject=StoragePoolResponse.class) public class CreateStoragePoolCmd extends BaseCmd { public static final Logger s_logger = Logger.getLogger(CreateStoragePoolCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/admin/storagepool/DeletePoolCmd.java b/api/src/org/apache/cloudstack/api/command/admin/storagepool/DeletePoolCmd.java index ec9d5b88694..6b45e3e0331 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/storagepool/DeletePoolCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/storagepool/DeletePoolCmd.java @@ -26,7 +26,7 @@ import com.cloud.storage.StoragePool; import com.cloud.storage.StoragePoolStatus; import com.cloud.user.Account; -@APICommand(description = "Deletes a storage pool.", responseObject = SuccessResponse.class) +@APICommand(name = "deleteStoragePool", description = "Deletes a storage pool.", responseObject = SuccessResponse.class) public class DeletePoolCmd extends BaseCmd { public static final Logger s_logger = Logger.getLogger(DeletePoolCmd.class.getName()); private static final String s_name = "deletestoragepoolresponse"; diff --git a/api/src/org/apache/cloudstack/api/command/admin/storagepool/ListStoragePoolsCmd.java b/api/src/org/apache/cloudstack/api/command/admin/storagepool/ListStoragePoolsCmd.java index 1d77f8b2afd..2ba3bbbc2d0 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/storagepool/ListStoragePoolsCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/storagepool/ListStoragePoolsCmd.java @@ -34,7 +34,7 @@ import com.cloud.async.AsyncJob; import com.cloud.storage.StoragePool; import com.cloud.utils.Pair; -@APICommand(description="Lists storage pools.", responseObject=StoragePoolResponse.class) +@APICommand(name = "listStoragePools", description="Lists storage pools.", responseObject=StoragePoolResponse.class) public class ListStoragePoolsCmd extends BaseListCmd { public static final Logger s_logger = Logger.getLogger(ListStoragePoolsCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/admin/storagepool/PreparePrimaryStorageForMaintenanceCmd.java b/api/src/org/apache/cloudstack/api/command/admin/storagepool/PreparePrimaryStorageForMaintenanceCmd.java index c81d46cf388..602f278fbf8 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/storagepool/PreparePrimaryStorageForMaintenanceCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/storagepool/PreparePrimaryStorageForMaintenanceCmd.java @@ -33,7 +33,7 @@ import com.cloud.storage.StoragePool; import com.cloud.user.Account; import com.cloud.user.UserContext; -@APICommand(description="Puts storage pool into maintenance state", responseObject=StoragePoolResponse.class) +@APICommand(name = "enableStorageMaintenance", description="Puts storage pool into maintenance state", responseObject=StoragePoolResponse.class) public class PreparePrimaryStorageForMaintenanceCmd extends BaseAsyncCmd { public static final Logger s_logger = Logger.getLogger(PreparePrimaryStorageForMaintenanceCmd.class.getName()); private static final String s_name = "prepareprimarystorageformaintenanceresponse"; diff --git a/api/src/org/apache/cloudstack/api/command/admin/storagepool/UpdateStoragePoolCmd.java b/api/src/org/apache/cloudstack/api/command/admin/storagepool/UpdateStoragePoolCmd.java index 55e3b334a3f..c6796a808c5 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/storagepool/UpdateStoragePoolCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/storagepool/UpdateStoragePoolCmd.java @@ -26,7 +26,7 @@ import org.apache.cloudstack.api.response.StoragePoolResponse; import com.cloud.storage.StoragePool; import com.cloud.user.Account; -@APICommand(description="Updates a storage pool.", responseObject=StoragePoolResponse.class, since="3.0.0") +@APICommand(name = "updateStoragePool", description="Updates a storage pool.", responseObject=StoragePoolResponse.class, since="3.0.0") public class UpdateStoragePoolCmd extends BaseCmd { public static final Logger s_logger = Logger.getLogger(UpdateStoragePoolCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/admin/swift/AddSwiftCmd.java b/api/src/org/apache/cloudstack/api/command/admin/swift/AddSwiftCmd.java index c399c51f6a0..23a00ca04dc 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/swift/AddSwiftCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/swift/AddSwiftCmd.java @@ -26,7 +26,7 @@ import com.cloud.exception.DiscoveryException; import com.cloud.storage.Swift; import com.cloud.user.Account; -@APICommand(description = "Adds Swift.", responseObject = HostResponse.class, since="3.0.0") +@APICommand(name = "addSwift", description = "Adds Swift.", responseObject = HostResponse.class, since="3.0.0") public class AddSwiftCmd extends BaseCmd { public static final Logger s_logger = Logger.getLogger(AddSwiftCmd.class.getName()); private static final String s_name = "addswiftresponse"; diff --git a/api/src/org/apache/cloudstack/api/command/admin/swift/ListSwiftsCmd.java b/api/src/org/apache/cloudstack/api/command/admin/swift/ListSwiftsCmd.java index 67636b51ebe..d7c151188e7 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/swift/ListSwiftsCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/swift/ListSwiftsCmd.java @@ -31,7 +31,7 @@ import org.apache.cloudstack.api.response.SwiftResponse; import com.cloud.storage.Swift; import com.cloud.user.Account; -@APICommand(description = "List Swift.", responseObject = HostResponse.class, since="3.0.0") +@APICommand(name = "listSwifts", description = "List Swift.", responseObject = HostResponse.class, since="3.0.0") public class ListSwiftsCmd extends BaseListCmd { public static final Logger s_logger = Logger.getLogger(ListSwiftsCmd.class.getName()); private static final String s_name = "listswiftsresponse"; diff --git a/api/src/org/apache/cloudstack/api/command/admin/systemvm/DestroySystemVmCmd.java b/api/src/org/apache/cloudstack/api/command/admin/systemvm/DestroySystemVmCmd.java index 36155e33a4c..ad0f09cba46 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/systemvm/DestroySystemVmCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/systemvm/DestroySystemVmCmd.java @@ -27,7 +27,7 @@ import com.cloud.user.Account; import com.cloud.user.UserContext; import com.cloud.vm.VirtualMachine; -@APICommand(responseObject=SystemVmResponse.class, description="Destroyes a system virtual machine.") +@APICommand(name = "destroySystemVm", responseObject=SystemVmResponse.class, description="Destroyes a system virtual machine.") public class DestroySystemVmCmd extends BaseAsyncCmd { public static final Logger s_logger = Logger.getLogger(DestroySystemVmCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/admin/systemvm/ListSystemVMsCmd.java b/api/src/org/apache/cloudstack/api/command/admin/systemvm/ListSystemVMsCmd.java index 3373d848db9..27e2ee40daf 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/systemvm/ListSystemVMsCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/systemvm/ListSystemVMsCmd.java @@ -35,7 +35,7 @@ import com.cloud.async.AsyncJob; import com.cloud.utils.Pair; import com.cloud.vm.VirtualMachine; -@APICommand(description="List system virtual machines.", responseObject=SystemVmResponse.class) +@APICommand(name = "listSystemVms", description="List system virtual machines.", responseObject=SystemVmResponse.class) public class ListSystemVMsCmd extends BaseListCmd { public static final Logger s_logger = Logger.getLogger(ListSystemVMsCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/admin/systemvm/MigrateSystemVMCmd.java b/api/src/org/apache/cloudstack/api/command/admin/systemvm/MigrateSystemVMCmd.java index 95072c6e829..dd844acd17f 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/systemvm/MigrateSystemVMCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/systemvm/MigrateSystemVMCmd.java @@ -38,7 +38,7 @@ import com.cloud.user.Account; import com.cloud.user.UserContext; import com.cloud.vm.VirtualMachine; -@APICommand(description="Attempts Migration of a system virtual machine to the host specified.", responseObject=SystemVmInstanceResponse.class) +@APICommand(name = "migrateSystemVm", description="Attempts Migration of a system virtual machine to the host specified.", responseObject=SystemVmInstanceResponse.class) public class MigrateSystemVMCmd extends BaseAsyncCmd { public static final Logger s_logger = Logger.getLogger(MigrateSystemVMCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/admin/systemvm/RebootSystemVmCmd.java b/api/src/org/apache/cloudstack/api/command/admin/systemvm/RebootSystemVmCmd.java index 5455c481ba1..49e895b22fe 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/systemvm/RebootSystemVmCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/systemvm/RebootSystemVmCmd.java @@ -31,7 +31,7 @@ import com.cloud.user.Account; import com.cloud.user.UserContext; import com.cloud.vm.VirtualMachine; -@APICommand(description="Reboots a system VM.", responseObject=SystemVmResponse.class) +@APICommand(name = "rebootSystemVm", description="Reboots a system VM.", responseObject=SystemVmResponse.class) public class RebootSystemVmCmd extends BaseAsyncCmd { public static final Logger s_logger = Logger.getLogger(RebootSystemVmCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/admin/systemvm/StartSystemVMCmd.java b/api/src/org/apache/cloudstack/api/command/admin/systemvm/StartSystemVMCmd.java index bd4b6f32c98..70ab5f38720 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/systemvm/StartSystemVMCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/systemvm/StartSystemVMCmd.java @@ -31,7 +31,7 @@ import com.cloud.user.Account; import com.cloud.user.UserContext; import com.cloud.vm.VirtualMachine; -@APICommand(responseObject=SystemVmResponse.class, description="Starts a system virtual machine.") +@APICommand(name = "startSystemVm", responseObject=SystemVmResponse.class, description="Starts a system virtual machine.") public class StartSystemVMCmd extends BaseAsyncCmd { public static final Logger s_logger = Logger.getLogger(StartSystemVMCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/admin/systemvm/StopSystemVmCmd.java b/api/src/org/apache/cloudstack/api/command/admin/systemvm/StopSystemVmCmd.java index 9e4c618ac8e..af2bd3ad64f 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/systemvm/StopSystemVmCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/systemvm/StopSystemVmCmd.java @@ -29,7 +29,7 @@ import com.cloud.user.Account; import com.cloud.user.UserContext; import com.cloud.vm.VirtualMachine; -@APICommand(description="Stops a system VM.", responseObject=SystemVmResponse.class) +@APICommand(name = "stopSystemVm", description="Stops a system VM.", responseObject=SystemVmResponse.class) public class StopSystemVmCmd extends BaseAsyncCmd { public static final Logger s_logger = Logger.getLogger(StopSystemVmCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/admin/systemvm/UpgradeSystemVMCmd.java b/api/src/org/apache/cloudstack/api/command/admin/systemvm/UpgradeSystemVMCmd.java index de5e847751d..290c3603f1f 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/systemvm/UpgradeSystemVMCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/systemvm/UpgradeSystemVMCmd.java @@ -29,7 +29,7 @@ import com.cloud.user.Account; import com.cloud.user.UserContext; import com.cloud.vm.VirtualMachine; -@APICommand(responseObject=SystemVmResponse.class, description="Changes the service offering for a system vm (console proxy or secondary storage). " + +@APICommand(name = "changeServiceForSystemVm", responseObject=SystemVmResponse.class, description="Changes the service offering for a system vm (console proxy or secondary storage). " + "The system vm must be in a \"Stopped\" state for " + "this command to take effect.") public class UpgradeSystemVMCmd extends BaseCmd { diff --git a/api/src/org/apache/cloudstack/api/command/admin/template/PrepareTemplateCmd.java b/api/src/org/apache/cloudstack/api/command/admin/template/PrepareTemplateCmd.java index 2021a575276..74f33915551 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/template/PrepareTemplateCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/template/PrepareTemplateCmd.java @@ -30,7 +30,7 @@ import org.apache.cloudstack.api.response.TemplateResponse; import com.cloud.template.VirtualMachineTemplate; import com.cloud.user.Account; -@APICommand(responseObject=TemplateResponse.class, description="load template into primary storage") +@APICommand(name = "prepareTemplate", responseObject=TemplateResponse.class, description="load template into primary storage") public class PrepareTemplateCmd extends BaseCmd { public static final Logger s_logger = Logger.getLogger(PrepareTemplateCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/admin/usage/AddTrafficTypeCmd.java b/api/src/org/apache/cloudstack/api/command/admin/usage/AddTrafficTypeCmd.java index 2e9d58070b7..1759ff7e8e6 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/usage/AddTrafficTypeCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/usage/AddTrafficTypeCmd.java @@ -33,7 +33,7 @@ import com.cloud.network.PhysicalNetworkTrafficType; import com.cloud.user.Account; import com.cloud.user.UserContext; -@APICommand(description="Adds traffic type to a physical network", responseObject=TrafficTypeResponse.class, since="3.0.0") +@APICommand(name = "addTrafficType", description="Adds traffic type to a physical network", responseObject=TrafficTypeResponse.class, since="3.0.0") public class AddTrafficTypeCmd extends BaseAsyncCreateCmd { public static final Logger s_logger = Logger.getLogger(AddTrafficTypeCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/admin/usage/DeleteTrafficTypeCmd.java b/api/src/org/apache/cloudstack/api/command/admin/usage/DeleteTrafficTypeCmd.java index b3d7c0ab446..bb665fbfd58 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/usage/DeleteTrafficTypeCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/usage/DeleteTrafficTypeCmd.java @@ -30,7 +30,7 @@ import com.cloud.async.AsyncJob; import com.cloud.event.EventTypes; import com.cloud.user.Account; -@APICommand(description="Deletes traffic type of a physical network", responseObject=SuccessResponse.class, since="3.0.0") +@APICommand(name = "deleteTrafficType", description="Deletes traffic type of a physical network", responseObject=SuccessResponse.class, since="3.0.0") public class DeleteTrafficTypeCmd extends BaseAsyncCmd { public static final Logger s_logger = Logger.getLogger(DeleteTrafficTypeCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/admin/usage/ListTrafficTypeImplementorsCmd.java b/api/src/org/apache/cloudstack/api/command/admin/usage/ListTrafficTypeImplementorsCmd.java index f5173d2d5fc..3cd00c02af7 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/usage/ListTrafficTypeImplementorsCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/usage/ListTrafficTypeImplementorsCmd.java @@ -33,7 +33,7 @@ import com.cloud.network.Networks.TrafficType; import com.cloud.user.Account; import com.cloud.utils.Pair; -@APICommand(description="Lists implementors of implementor of a network traffic type or implementors of all network traffic types", responseObject=TrafficTypeImplementorResponse.class, since="3.0.0") +@APICommand(name = "listTrafficTypeImplementors", description="Lists implementors of implementor of a network traffic type or implementors of all network traffic types", responseObject=TrafficTypeImplementorResponse.class, since="3.0.0") public class ListTrafficTypeImplementorsCmd extends BaseListCmd { public static final Logger s_logger = Logger.getLogger(ListTrafficTypeImplementorsCmd.class); private static final String _name = "listtraffictypeimplementorsresponse"; diff --git a/api/src/org/apache/cloudstack/api/command/admin/usage/ListTrafficTypesCmd.java b/api/src/org/apache/cloudstack/api/command/admin/usage/ListTrafficTypesCmd.java index 59527a9cd52..2cbb13df0d3 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/usage/ListTrafficTypesCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/usage/ListTrafficTypesCmd.java @@ -33,7 +33,7 @@ import com.cloud.network.PhysicalNetworkTrafficType; import com.cloud.user.Account; import com.cloud.utils.Pair; -@APICommand(description="Lists traffic types of a given physical network.", responseObject=ProviderResponse.class, since="3.0.0") +@APICommand(name = "listTrafficTypes", description="Lists traffic types of a given physical network.", responseObject=ProviderResponse.class, since="3.0.0") public class ListTrafficTypesCmd extends BaseListCmd { public static final Logger s_logger = Logger.getLogger(ListTrafficTypesCmd.class.getName()); private static final String _name = "listtraffictypesresponse"; diff --git a/api/src/org/apache/cloudstack/api/command/admin/usage/UpdateTrafficTypeCmd.java b/api/src/org/apache/cloudstack/api/command/admin/usage/UpdateTrafficTypeCmd.java index 015cb86cc9c..279c2b858d3 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/usage/UpdateTrafficTypeCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/usage/UpdateTrafficTypeCmd.java @@ -30,7 +30,7 @@ import com.cloud.event.EventTypes; import com.cloud.network.PhysicalNetworkTrafficType; import com.cloud.user.Account; -@APICommand(description="Updates traffic type of a physical network", responseObject=TrafficTypeResponse.class, since="3.0.0") +@APICommand(name = "updateTrafficType", description="Updates traffic type of a physical network", responseObject=TrafficTypeResponse.class, since="3.0.0") public class UpdateTrafficTypeCmd extends BaseAsyncCmd { public static final Logger s_logger = Logger.getLogger(UpdateTrafficTypeCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/admin/user/CreateUserCmd.java b/api/src/org/apache/cloudstack/api/command/admin/user/CreateUserCmd.java index 3d523c6c21c..2045abf4e93 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/user/CreateUserCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/user/CreateUserCmd.java @@ -29,7 +29,7 @@ import com.cloud.user.Account; import com.cloud.user.User; import com.cloud.user.UserContext; -@APICommand(description="Creates a user for an account that already exists", responseObject=UserResponse.class) +@APICommand(name = "createUser", description="Creates a user for an account that already exists", responseObject=UserResponse.class) public class CreateUserCmd extends BaseCmd { public static final Logger s_logger = Logger.getLogger(CreateUserCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/admin/user/DeleteUserCmd.java b/api/src/org/apache/cloudstack/api/command/admin/user/DeleteUserCmd.java index 573d7cc32a5..a43501e7641 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/user/DeleteUserCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/user/DeleteUserCmd.java @@ -29,7 +29,7 @@ import com.cloud.user.Account; import com.cloud.user.User; import com.cloud.user.UserContext; -@APICommand(description="Creates a user for an account", responseObject=UserResponse.class) +@APICommand(name = "deleteUser", description="Creates a user for an account", responseObject=UserResponse.class) public class DeleteUserCmd extends BaseCmd { public static final Logger s_logger = Logger.getLogger(DeleteUserCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/admin/user/DisableUserCmd.java b/api/src/org/apache/cloudstack/api/command/admin/user/DisableUserCmd.java index 205d3722047..f483e628928 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/user/DisableUserCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/user/DisableUserCmd.java @@ -32,7 +32,7 @@ import com.cloud.user.User; import com.cloud.user.UserAccount; import com.cloud.user.UserContext; -@APICommand(description="Disables a user account", responseObject=UserResponse.class) +@APICommand(name = "disableUser", description="Disables a user account", responseObject=UserResponse.class) public class DisableUserCmd extends BaseAsyncCmd { public static final Logger s_logger = Logger.getLogger(DisableUserCmd.class.getName()); private static final String s_name = "disableuserresponse"; diff --git a/api/src/org/apache/cloudstack/api/command/admin/user/EnableUserCmd.java b/api/src/org/apache/cloudstack/api/command/admin/user/EnableUserCmd.java index b309cf8e0b5..e444aa395d2 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/user/EnableUserCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/user/EnableUserCmd.java @@ -26,7 +26,7 @@ import com.cloud.user.User; import com.cloud.user.UserAccount; import com.cloud.user.UserContext; -@APICommand(description="Enables a user account", responseObject=UserResponse.class) +@APICommand(name = "enableUser", description="Enables a user account", responseObject=UserResponse.class) public class EnableUserCmd extends BaseCmd { public static final Logger s_logger = Logger.getLogger(EnableUserCmd.class.getName()); private static final String s_name = "enableuserresponse"; diff --git a/api/src/org/apache/cloudstack/api/command/admin/user/GetUserCmd.java b/api/src/org/apache/cloudstack/api/command/admin/user/GetUserCmd.java index 3b30af9f87b..2ffe4ab245d 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/user/GetUserCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/user/GetUserCmd.java @@ -26,7 +26,7 @@ import org.apache.cloudstack.api.response.UserResponse; import com.cloud.exception.InvalidParameterValueException; import com.cloud.user.UserAccount; -@APICommand(description="Find user account by API key", responseObject=UserResponse.class) +@APICommand(name = "getUser", description="Find user account by API key", responseObject=UserResponse.class) public class GetUserCmd extends BaseCmd { public static final Logger s_logger = Logger.getLogger(GetUserCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/admin/user/ListUsersCmd.java b/api/src/org/apache/cloudstack/api/command/admin/user/ListUsersCmd.java index 3e0dc1148f4..3d68e2f48c9 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/user/ListUsersCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/user/ListUsersCmd.java @@ -25,7 +25,7 @@ import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.response.ListResponse; import org.apache.cloudstack.api.response.UserResponse; -@APICommand(description="Lists user accounts", responseObject=UserResponse.class) +@APICommand(name = "listUsers", description="Lists user accounts", responseObject=UserResponse.class) public class ListUsersCmd extends BaseListAccountResourcesCmd { public static final Logger s_logger = Logger.getLogger(ListUsersCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/admin/user/LockUserCmd.java b/api/src/org/apache/cloudstack/api/command/admin/user/LockUserCmd.java index d78c174b4b1..622b4e9a023 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/user/LockUserCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/user/LockUserCmd.java @@ -28,7 +28,7 @@ import com.cloud.user.Account; import com.cloud.user.User; import com.cloud.user.UserAccount; -@APICommand(description="Locks a user account", responseObject=UserResponse.class) +@APICommand(name = "lockUser", description="Locks a user account", responseObject=UserResponse.class) public class LockUserCmd extends BaseCmd { public static final Logger s_logger = Logger.getLogger(LockUserCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/admin/user/RegisterCmd.java b/api/src/org/apache/cloudstack/api/command/admin/user/RegisterCmd.java index 5427b501194..06ffc537995 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/user/RegisterCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/user/RegisterCmd.java @@ -27,7 +27,7 @@ import org.apache.cloudstack.api.response.UserResponse; import com.cloud.user.Account; import com.cloud.user.User; -@APICommand(responseObject=RegisterResponse.class, description="This command allows a user to register for the developer API, returning a secret key and an API key. This request is made through the integration API port, so it is a privileged command and must be made on behalf of a user. It is up to the implementer just how the username and password are entered, and then how that translates to an integration API request. Both secret key and API key should be returned to the user") +@APICommand(name = "registerUserKeys", responseObject=RegisterResponse.class, description="This command allows a user to register for the developer API, returning a secret key and an API key. This request is made through the integration API port, so it is a privileged command and must be made on behalf of a user. It is up to the implementer just how the username and password are entered, and then how that translates to an integration API request. Both secret key and API key should be returned to the user") public class RegisterCmd extends BaseCmd { public static final Logger s_logger = Logger.getLogger(RegisterCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/admin/user/UpdateUserCmd.java b/api/src/org/apache/cloudstack/api/command/admin/user/UpdateUserCmd.java index 15ba2d6b3ae..170d852ff58 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/user/UpdateUserCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/user/UpdateUserCmd.java @@ -26,7 +26,7 @@ import com.cloud.user.User; import com.cloud.user.UserAccount; import com.cloud.user.UserContext; -@APICommand(description="Updates a user account", responseObject=UserResponse.class) +@APICommand(name = "updateUser", description="Updates a user account", responseObject=UserResponse.class) public class UpdateUserCmd extends BaseCmd { public static final Logger s_logger = Logger.getLogger(UpdateUserCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/admin/vlan/CreateVlanIpRangeCmd.java b/api/src/org/apache/cloudstack/api/command/admin/vlan/CreateVlanIpRangeCmd.java index a676c22fd8f..c9717480e44 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/vlan/CreateVlanIpRangeCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/vlan/CreateVlanIpRangeCmd.java @@ -34,7 +34,7 @@ import com.cloud.exception.ResourceAllocationException; import com.cloud.exception.ResourceUnavailableException; import com.cloud.user.Account; -@APICommand(description="Creates a VLAN IP range.", responseObject=VlanIpRangeResponse.class) +@APICommand(name = "createVlanIpRange", description="Creates a VLAN IP range.", responseObject=VlanIpRangeResponse.class) public class CreateVlanIpRangeCmd extends BaseCmd { public static final Logger s_logger = Logger.getLogger(CreateVlanIpRangeCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/admin/vlan/DeleteVlanIpRangeCmd.java b/api/src/org/apache/cloudstack/api/command/admin/vlan/DeleteVlanIpRangeCmd.java index 2363f1c30ad..f12b2175aef 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/vlan/DeleteVlanIpRangeCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/vlan/DeleteVlanIpRangeCmd.java @@ -27,7 +27,7 @@ import org.apache.cloudstack.api.ServerApiException; import org.apache.cloudstack.api.response.SuccessResponse; import com.cloud.user.Account; -@APICommand(description="Creates a VLAN IP range.", responseObject=SuccessResponse.class) +@APICommand(name = "deleteVlanIpRange", description="Creates a VLAN IP range.", responseObject=SuccessResponse.class) public class DeleteVlanIpRangeCmd extends BaseCmd { public static final Logger s_logger = Logger.getLogger(DeleteVlanIpRangeCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/admin/vlan/ListVlanIpRangesCmd.java b/api/src/org/apache/cloudstack/api/command/admin/vlan/ListVlanIpRangesCmd.java index 93c26e785a1..9b6b997c4b8 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/vlan/ListVlanIpRangesCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/vlan/ListVlanIpRangesCmd.java @@ -36,7 +36,7 @@ import org.apache.cloudstack.api.response.VlanIpRangeResponse; import com.cloud.dc.Vlan; import com.cloud.utils.Pair; -@APICommand(description="Lists all VLAN IP ranges.", responseObject=VlanIpRangeResponse.class) +@APICommand(name = "listVlanIpRanges", description="Lists all VLAN IP ranges.", responseObject=VlanIpRangeResponse.class) public class ListVlanIpRangesCmd extends BaseListCmd { public static final Logger s_logger = Logger.getLogger(ListVlanIpRangesCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/admin/vm/AssignVMCmd.java b/api/src/org/apache/cloudstack/api/command/admin/vm/AssignVMCmd.java index 7d6d25a72ff..3482ec756fb 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/vm/AssignVMCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/vm/AssignVMCmd.java @@ -32,7 +32,7 @@ import org.apache.cloudstack.api.response.UserVmResponse; import com.cloud.user.Account; import com.cloud.uservm.UserVm; -@APICommand(description="Move a user VM to another user under same domain.", responseObject=UserVmResponse.class, since="3.0.0") +@APICommand(name = "assignVirtualMachine", description="Move a user VM to another user under same domain.", responseObject=UserVmResponse.class, since="3.0.0") public class AssignVMCmd extends BaseCmd { public static final Logger s_logger = Logger.getLogger(AssignVMCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/admin/vm/MigrateVMCmd.java b/api/src/org/apache/cloudstack/api/command/admin/vm/MigrateVMCmd.java index 36f0ffd6077..5bb694da655 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/vm/MigrateVMCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/vm/MigrateVMCmd.java @@ -37,7 +37,7 @@ import com.cloud.user.UserContext; import com.cloud.uservm.UserVm; import com.cloud.vm.VirtualMachine; -@APICommand(description="Attempts Migration of a VM to a different host or Root volume of the vm to a different storage pool", responseObject=UserVmResponse.class) +@APICommand(name = "migrateVirtualMachine", description="Attempts Migration of a VM to a different host or Root volume of the vm to a different storage pool", responseObject=UserVmResponse.class) public class MigrateVMCmd extends BaseAsyncCmd { public static final Logger s_logger = Logger.getLogger(MigrateVMCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/admin/vm/RecoverVMCmd.java b/api/src/org/apache/cloudstack/api/command/admin/vm/RecoverVMCmd.java index acffa211af0..f8308614b89 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/vm/RecoverVMCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/vm/RecoverVMCmd.java @@ -28,7 +28,7 @@ import com.cloud.exception.ResourceAllocationException; import com.cloud.user.Account; import com.cloud.uservm.UserVm; -@APICommand(description="Recovers a virtual machine.", responseObject=UserVmResponse.class) +@APICommand(name = "recoverVirtualMachine", description="Recovers a virtual machine.", responseObject=UserVmResponse.class) public class RecoverVMCmd extends BaseCmd { public static final Logger s_logger = Logger.getLogger(RecoverVMCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/admin/vpc/CreatePrivateGatewayCmd.java b/api/src/org/apache/cloudstack/api/command/admin/vpc/CreatePrivateGatewayCmd.java index 6b426f8255f..7950b877cec 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/vpc/CreatePrivateGatewayCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/vpc/CreatePrivateGatewayCmd.java @@ -39,7 +39,7 @@ import com.cloud.network.vpc.PrivateGateway; import com.cloud.network.vpc.Vpc; import com.cloud.user.Account; -@APICommand(description="Creates a private gateway", responseObject=PrivateGatewayResponse.class) +@APICommand(name = "createPrivateGateway", description="Creates a private gateway", responseObject=PrivateGatewayResponse.class) public class CreatePrivateGatewayCmd extends BaseAsyncCreateCmd { public static final Logger s_logger = Logger.getLogger(CreatePrivateGatewayCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/admin/vpc/CreateVPCOfferingCmd.java b/api/src/org/apache/cloudstack/api/command/admin/vpc/CreateVPCOfferingCmd.java index 762278de825..a0abe99f826 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/vpc/CreateVPCOfferingCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/vpc/CreateVPCOfferingCmd.java @@ -28,7 +28,7 @@ import com.cloud.exception.ResourceAllocationException; import com.cloud.network.vpc.VpcOffering; import com.cloud.user.Account; -@APICommand(description="Creates VPC offering", responseObject=VpcOfferingResponse.class) +@APICommand(name = "createVPCOffering", description="Creates VPC offering", responseObject=VpcOfferingResponse.class) public class CreateVPCOfferingCmd extends BaseAsyncCreateCmd{ public static final Logger s_logger = Logger.getLogger(CreateVPCOfferingCmd.class.getName()); private static final String _name = "createvpcofferingresponse"; diff --git a/api/src/org/apache/cloudstack/api/command/admin/vpc/DeletePrivateGatewayCmd.java b/api/src/org/apache/cloudstack/api/command/admin/vpc/DeletePrivateGatewayCmd.java index 33aa70c2565..4a1e8d05912 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/vpc/DeletePrivateGatewayCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/vpc/DeletePrivateGatewayCmd.java @@ -35,7 +35,7 @@ import com.cloud.network.vpc.VpcGateway; import com.cloud.user.Account; import com.cloud.user.UserContext; -@APICommand(description="Deletes a Private gateway", responseObject=SuccessResponse.class) +@APICommand(name = "deletePrivateGateway", description="Deletes a Private gateway", responseObject=SuccessResponse.class) public class DeletePrivateGatewayCmd extends BaseAsyncCmd { public static final Logger s_logger = Logger.getLogger(DeletePrivateGatewayCmd.class.getName()); private static final String s_name = "deleteprivategatewayresponse"; diff --git a/api/src/org/apache/cloudstack/api/command/admin/vpc/DeleteVPCOfferingCmd.java b/api/src/org/apache/cloudstack/api/command/admin/vpc/DeleteVPCOfferingCmd.java index fdf04837bc8..231f2ee2955 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/vpc/DeleteVPCOfferingCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/vpc/DeleteVPCOfferingCmd.java @@ -29,7 +29,7 @@ import org.apache.cloudstack.api.response.SuccessResponse; import com.cloud.event.EventTypes; import com.cloud.user.Account; -@APICommand(description="Deletes VPC offering", responseObject=SuccessResponse.class) +@APICommand(name = "deleteVPCOffering", description="Deletes VPC offering", responseObject=SuccessResponse.class) public class DeleteVPCOfferingCmd extends BaseAsyncCmd{ public static final Logger s_logger = Logger.getLogger(DeleteVPCOfferingCmd.class.getName()); private static final String s_name = "deletevpcofferingresponse"; diff --git a/api/src/org/apache/cloudstack/api/command/admin/vpc/UpdateVPCOfferingCmd.java b/api/src/org/apache/cloudstack/api/command/admin/vpc/UpdateVPCOfferingCmd.java index 7c14cf3f31e..65df48e3e1f 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/vpc/UpdateVPCOfferingCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/vpc/UpdateVPCOfferingCmd.java @@ -25,7 +25,7 @@ import com.cloud.event.EventTypes; import com.cloud.network.vpc.VpcOffering; import com.cloud.user.Account; -@APICommand(description="Updates VPC offering", responseObject=VpcOfferingResponse.class) +@APICommand(name = "updateVPCOffering", description="Updates VPC offering", responseObject=VpcOfferingResponse.class) public class UpdateVPCOfferingCmd extends BaseAsyncCmd{ public static final Logger s_logger = Logger.getLogger(UpdateVPCOfferingCmd.class.getName()); private static final String _name = "updatevpcofferingresponse"; diff --git a/api/src/org/apache/cloudstack/api/command/admin/zone/CreateZoneCmd.java b/api/src/org/apache/cloudstack/api/command/admin/zone/CreateZoneCmd.java index 06e48d4d8dd..e49f2439288 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/zone/CreateZoneCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/zone/CreateZoneCmd.java @@ -30,7 +30,7 @@ import com.cloud.dc.DataCenter; import com.cloud.user.Account; import com.cloud.user.UserContext; -@APICommand(description="Creates a Zone.", responseObject=ZoneResponse.class) +@APICommand(name = "createZone", description="Creates a Zone.", responseObject=ZoneResponse.class) public class CreateZoneCmd extends BaseCmd { public static final Logger s_logger = Logger.getLogger(CreateZoneCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/admin/zone/DeleteZoneCmd.java b/api/src/org/apache/cloudstack/api/command/admin/zone/DeleteZoneCmd.java index d25311b39ae..d09c7fff891 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/zone/DeleteZoneCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/zone/DeleteZoneCmd.java @@ -25,7 +25,7 @@ import org.apache.cloudstack.api.response.ZoneResponse; import com.cloud.user.Account; import com.cloud.user.UserContext; -@APICommand(description="Deletes a Zone.", responseObject=SuccessResponse.class) +@APICommand(name = "deleteZone", description="Deletes a Zone.", responseObject=SuccessResponse.class) public class DeleteZoneCmd extends BaseCmd { public static final Logger s_logger = Logger.getLogger(DeleteZoneCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/admin/zone/MarkDefaultZoneForAccountCmd.java b/api/src/org/apache/cloudstack/api/command/admin/zone/MarkDefaultZoneForAccountCmd.java index cf7f295d00c..816befbd029 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/zone/MarkDefaultZoneForAccountCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/zone/MarkDefaultZoneForAccountCmd.java @@ -33,7 +33,7 @@ import org.apache.cloudstack.api.response.ZoneResponse; import org.apache.cloudstack.api.ServerApiException; import org.apache.cloudstack.api.BaseCmd; -@APICommand(description="Marks a default zone for this account", responseObject=AccountResponse.class, since="4.0") +@APICommand(name = "markDefaultZoneForAccount", description="Marks a default zone for this account", responseObject=AccountResponse.class, since="4.0") public class MarkDefaultZoneForAccountCmd extends BaseAsyncCmd { public static final Logger s_logger = Logger.getLogger(MarkDefaultZoneForAccountCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/admin/zone/UpdateZoneCmd.java b/api/src/org/apache/cloudstack/api/command/admin/zone/UpdateZoneCmd.java index 474ea3f1e02..0bfd1a31a0f 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/zone/UpdateZoneCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/zone/UpdateZoneCmd.java @@ -28,7 +28,7 @@ import com.cloud.dc.DataCenter; import com.cloud.user.Account; import com.cloud.user.UserContext; -@APICommand(description="Updates a Zone.", responseObject=ZoneResponse.class) +@APICommand(name = "updateZone", description="Updates a Zone.", responseObject=ZoneResponse.class) public class UpdateZoneCmd extends BaseCmd { public static final Logger s_logger = Logger.getLogger(UpdateZoneCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/user/account/AddAccountToProjectCmd.java b/api/src/org/apache/cloudstack/api/command/user/account/AddAccountToProjectCmd.java index f5dfc7b8e76..889c3697515 100644 --- a/api/src/org/apache/cloudstack/api/command/user/account/AddAccountToProjectCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/account/AddAccountToProjectCmd.java @@ -28,7 +28,7 @@ import com.cloud.projects.Project; import com.cloud.user.UserContext; -@APICommand(description="Adds acoount to a project", responseObject=SuccessResponse.class, since="3.0.0") +@APICommand(name = "addAccountToProject", description="Adds acoount to a project", responseObject=SuccessResponse.class, since="3.0.0") public class AddAccountToProjectCmd extends BaseAsyncCmd { public static final Logger s_logger = Logger.getLogger(AddAccountToProjectCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/user/account/DeleteAccountFromProjectCmd.java b/api/src/org/apache/cloudstack/api/command/user/account/DeleteAccountFromProjectCmd.java index 57f80681c69..f9e967ad4c2 100644 --- a/api/src/org/apache/cloudstack/api/command/user/account/DeleteAccountFromProjectCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/account/DeleteAccountFromProjectCmd.java @@ -28,7 +28,7 @@ import com.cloud.exception.InvalidParameterValueException; import com.cloud.projects.Project; import com.cloud.user.UserContext; -@APICommand(description="Deletes account from the project", responseObject=SuccessResponse.class, since="3.0.0") +@APICommand(name = "deleteAccountFromProject", description="Deletes account from the project", responseObject=SuccessResponse.class, since="3.0.0") public class DeleteAccountFromProjectCmd extends BaseAsyncCmd { public static final Logger s_logger = Logger.getLogger(DeleteProjectCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/user/account/ListAccountsCmd.java b/api/src/org/apache/cloudstack/api/command/user/account/ListAccountsCmd.java index 2c9101a463c..f61c0bb924e 100644 --- a/api/src/org/apache/cloudstack/api/command/user/account/ListAccountsCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/account/ListAccountsCmd.java @@ -30,7 +30,7 @@ import org.apache.cloudstack.api.response.ListResponse; import com.cloud.user.Account; import com.cloud.utils.Pair; -@APICommand(description="Lists accounts and provides detailed account information for listed accounts", responseObject=AccountResponse.class) +@APICommand(name = "listAccounts", description="Lists accounts and provides detailed account information for listed accounts", responseObject=AccountResponse.class) public class ListAccountsCmd extends BaseListDomainResourcesCmd { public static final Logger s_logger = Logger.getLogger(ListAccountsCmd.class.getName()); private static final String s_name = "listaccountsresponse"; diff --git a/api/src/org/apache/cloudstack/api/command/user/account/ListProjectAccountsCmd.java b/api/src/org/apache/cloudstack/api/command/user/account/ListProjectAccountsCmd.java index 1088c948aae..2c279db64a8 100644 --- a/api/src/org/apache/cloudstack/api/command/user/account/ListProjectAccountsCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/account/ListProjectAccountsCmd.java @@ -28,7 +28,7 @@ import org.apache.cloudstack.api.response.ProjectResponse; import com.cloud.user.Account; -@APICommand(description="Lists project's accounts", responseObject=ProjectResponse.class, since="3.0.0") +@APICommand(name = "listProjectAccounts", description="Lists project's accounts", responseObject=ProjectResponse.class, since="3.0.0") public class ListProjectAccountsCmd extends BaseListCmd { public static final Logger s_logger = Logger.getLogger(ListProjectAccountsCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/user/address/AssociateIPAddrCmd.java b/api/src/org/apache/cloudstack/api/command/user/address/AssociateIPAddrCmd.java index 05d78a57fa2..7d4e44bb507 100644 --- a/api/src/org/apache/cloudstack/api/command/user/address/AssociateIPAddrCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/address/AssociateIPAddrCmd.java @@ -49,7 +49,7 @@ import com.cloud.network.vpc.Vpc; import com.cloud.user.Account; import com.cloud.user.UserContext; -@APICommand(description="Acquires and associates a public IP to an account.", responseObject=IPAddressResponse.class) +@APICommand(name = "associateIpAddress", description="Acquires and associates a public IP to an account.", responseObject=IPAddressResponse.class) public class AssociateIPAddrCmd extends BaseAsyncCreateCmd { public static final Logger s_logger = Logger.getLogger(AssociateIPAddrCmd.class.getName()); private static final String s_name = "associateipaddressresponse"; diff --git a/api/src/org/apache/cloudstack/api/command/user/address/DisassociateIPAddrCmd.java b/api/src/org/apache/cloudstack/api/command/user/address/DisassociateIPAddrCmd.java index a5cfc74f964..20ccd89ba84 100644 --- a/api/src/org/apache/cloudstack/api/command/user/address/DisassociateIPAddrCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/address/DisassociateIPAddrCmd.java @@ -31,7 +31,7 @@ import com.cloud.network.IpAddress; import com.cloud.user.Account; import com.cloud.user.UserContext; -@APICommand(description="Disassociates an ip address from the account.", responseObject=SuccessResponse.class) +@APICommand(name = "disassociateIpAddress", description="Disassociates an ip address from the account.", responseObject=SuccessResponse.class) public class DisassociateIPAddrCmd extends BaseAsyncCmd { public static final Logger s_logger = Logger.getLogger(DisassociateIPAddrCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/user/address/ListPublicIpAddressesCmd.java b/api/src/org/apache/cloudstack/api/command/user/address/ListPublicIpAddressesCmd.java index deae8d3de89..06b08da6907 100644 --- a/api/src/org/apache/cloudstack/api/command/user/address/ListPublicIpAddressesCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/address/ListPublicIpAddressesCmd.java @@ -36,7 +36,7 @@ import com.cloud.async.AsyncJob; import com.cloud.network.IpAddress; import com.cloud.utils.Pair; -@APICommand(description="Lists all public ip addresses", responseObject=IPAddressResponse.class) +@APICommand(name = "listPublicIpAddresses", description="Lists all public ip addresses", responseObject=IPAddressResponse.class) public class ListPublicIpAddressesCmd extends BaseListTaggedResourcesCmd { public static final Logger s_logger = Logger.getLogger(ListPublicIpAddressesCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/user/autoscale/CreateAutoScalePolicyCmd.java b/api/src/org/apache/cloudstack/api/command/user/autoscale/CreateAutoScalePolicyCmd.java index 59cd306b951..db3aaa6dc5d 100644 --- a/api/src/org/apache/cloudstack/api/command/user/autoscale/CreateAutoScalePolicyCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/autoscale/CreateAutoScalePolicyCmd.java @@ -32,7 +32,7 @@ import com.cloud.network.as.AutoScalePolicy; import com.cloud.network.as.Condition; import com.cloud.user.Account; -@APICommand(description = "Creates an autoscale policy for a provision or deprovision action, the action is taken when the all the conditions evaluates to true for the specified duration. The policy is in effect once it is attached to a autscale vm group.", responseObject = AutoScalePolicyResponse.class) +@APICommand(name = "createAutoScalePolicy", description = "Creates an autoscale policy for a provision or deprovision action, the action is taken when the all the conditions evaluates to true for the specified duration. The policy is in effect once it is attached to a autscale vm group.", responseObject = AutoScalePolicyResponse.class) public class CreateAutoScalePolicyCmd extends BaseAsyncCreateCmd { public static final Logger s_logger = Logger.getLogger(CreateAutoScalePolicyCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/user/autoscale/CreateAutoScaleVmGroupCmd.java b/api/src/org/apache/cloudstack/api/command/user/autoscale/CreateAutoScaleVmGroupCmd.java index 84fd0c3f032..6297888f5d3 100644 --- a/api/src/org/apache/cloudstack/api/command/user/autoscale/CreateAutoScaleVmGroupCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/autoscale/CreateAutoScaleVmGroupCmd.java @@ -33,7 +33,7 @@ import com.cloud.exception.ResourceAllocationException; import com.cloud.network.as.AutoScaleVmGroup; import com.cloud.network.rules.LoadBalancer; -@APICommand(description = "Creates and automatically starts a virtual machine based on a service offering, disk offering, and template.", responseObject = AutoScaleVmGroupResponse.class) +@APICommand(name = "createAutoScaleVmGroup", description = "Creates and automatically starts a virtual machine based on a service offering, disk offering, and template.", responseObject = AutoScaleVmGroupResponse.class) public class CreateAutoScaleVmGroupCmd extends BaseAsyncCreateCmd { public static final Logger s_logger = Logger.getLogger(CreateAutoScaleVmGroupCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/user/autoscale/CreateAutoScaleVmProfileCmd.java b/api/src/org/apache/cloudstack/api/command/user/autoscale/CreateAutoScaleVmProfileCmd.java index be2ddf5aea8..daa48501c53 100644 --- a/api/src/org/apache/cloudstack/api/command/user/autoscale/CreateAutoScaleVmProfileCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/autoscale/CreateAutoScaleVmProfileCmd.java @@ -41,7 +41,7 @@ import com.cloud.user.Account; import com.cloud.user.User; import com.cloud.user.UserContext; -@APICommand(description = "Creates a profile that contains information about the virtual machine which will be provisioned automatically by autoscale feature.", responseObject = AutoScaleVmProfileResponse.class) +@APICommand(name = "createAutoScaleVmProfile", description = "Creates a profile that contains information about the virtual machine which will be provisioned automatically by autoscale feature.", responseObject = AutoScaleVmProfileResponse.class) @SuppressWarnings("rawtypes") public class CreateAutoScaleVmProfileCmd extends BaseAsyncCreateCmd { public static final Logger s_logger = Logger.getLogger(CreateAutoScaleVmProfileCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/user/autoscale/CreateConditionCmd.java b/api/src/org/apache/cloudstack/api/command/user/autoscale/CreateConditionCmd.java index e4cef078271..7ef9ef546d8 100644 --- a/api/src/org/apache/cloudstack/api/command/user/autoscale/CreateConditionCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/autoscale/CreateConditionCmd.java @@ -34,7 +34,7 @@ import com.cloud.exception.ResourceAllocationException; import com.cloud.network.as.Condition; import com.cloud.user.UserContext; -@APICommand(description = "Creates a condition", responseObject = ConditionResponse.class) +@APICommand(name = "createCondition ", description = "Creates a condition", responseObject = ConditionResponse.class) public class CreateConditionCmd extends BaseAsyncCreateCmd { public static final Logger s_logger = Logger.getLogger(CreateConditionCmd.class.getName()); private static final String s_name = "conditionresponse"; diff --git a/api/src/org/apache/cloudstack/api/command/user/autoscale/DeleteAutoScalePolicyCmd.java b/api/src/org/apache/cloudstack/api/command/user/autoscale/DeleteAutoScalePolicyCmd.java index f8d6685ba14..483a87ac892 100644 --- a/api/src/org/apache/cloudstack/api/command/user/autoscale/DeleteAutoScalePolicyCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/autoscale/DeleteAutoScalePolicyCmd.java @@ -32,7 +32,7 @@ import com.cloud.network.as.AutoScalePolicy; import com.cloud.user.Account; import com.cloud.user.UserContext; -@APICommand(description = "Deletes a autoscale policy.", responseObject = SuccessResponse.class) +@APICommand(name = "deleteAutoScalePolicy", description = "Deletes a autoscale policy.", responseObject = SuccessResponse.class) public class DeleteAutoScalePolicyCmd extends BaseAsyncCmd { public static final Logger s_logger = Logger.getLogger(DeleteAutoScalePolicyCmd.class.getName()); private static final String s_name = "deleteautoscalepolicyresponse"; diff --git a/api/src/org/apache/cloudstack/api/command/user/autoscale/DeleteAutoScaleVmGroupCmd.java b/api/src/org/apache/cloudstack/api/command/user/autoscale/DeleteAutoScaleVmGroupCmd.java index a12103153fb..1d78fe80395 100644 --- a/api/src/org/apache/cloudstack/api/command/user/autoscale/DeleteAutoScaleVmGroupCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/autoscale/DeleteAutoScaleVmGroupCmd.java @@ -32,7 +32,7 @@ import com.cloud.network.as.AutoScaleVmGroup; import com.cloud.user.Account; import com.cloud.user.UserContext; -@APICommand(description = "Deletes a autoscale vm group.", responseObject = SuccessResponse.class) +@APICommand(name = "deleteAutoScaleVmGroup", description = "Deletes a autoscale vm group.", responseObject = SuccessResponse.class) public class DeleteAutoScaleVmGroupCmd extends BaseAsyncCmd { public static final Logger s_logger = Logger.getLogger(DeleteAutoScaleVmGroupCmd.class.getName()); private static final String s_name = "deleteautoscalevmgroupresponse"; diff --git a/api/src/org/apache/cloudstack/api/command/user/autoscale/DeleteAutoScaleVmProfileCmd.java b/api/src/org/apache/cloudstack/api/command/user/autoscale/DeleteAutoScaleVmProfileCmd.java index a831db3c831..e49f0c862a3 100644 --- a/api/src/org/apache/cloudstack/api/command/user/autoscale/DeleteAutoScaleVmProfileCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/autoscale/DeleteAutoScaleVmProfileCmd.java @@ -32,7 +32,7 @@ import com.cloud.network.as.AutoScaleVmProfile; import com.cloud.user.Account; import com.cloud.user.UserContext; -@APICommand(description = "Deletes a autoscale vm profile.", responseObject = SuccessResponse.class) +@APICommand(name = "deleteAutoScaleVmProfile", description = "Deletes a autoscale vm profile.", responseObject = SuccessResponse.class) public class DeleteAutoScaleVmProfileCmd extends BaseAsyncCmd { public static final Logger s_logger = Logger.getLogger(DeleteAutoScaleVmProfileCmd.class.getName()); private static final String s_name = "deleteautoscalevmprofileresponse"; diff --git a/api/src/org/apache/cloudstack/api/command/user/autoscale/DeleteConditionCmd.java b/api/src/org/apache/cloudstack/api/command/user/autoscale/DeleteConditionCmd.java index 9626726cc77..1de64e0d641 100644 --- a/api/src/org/apache/cloudstack/api/command/user/autoscale/DeleteConditionCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/autoscale/DeleteConditionCmd.java @@ -33,7 +33,7 @@ import com.cloud.exception.ResourceInUseException; import com.cloud.network.as.Condition; import com.cloud.user.Account; -@APICommand(description = "Removes a condition", responseObject = SuccessResponse.class) +@APICommand(name = "deleteCondition ", description = "Removes a condition", responseObject = SuccessResponse.class) public class DeleteConditionCmd extends BaseAsyncCmd { public static final Logger s_logger = Logger.getLogger(DeleteConditionCmd.class.getName()); private static final String s_name = "deleteconditionresponse"; diff --git a/api/src/org/apache/cloudstack/api/command/user/autoscale/DisableAutoScaleVmGroupCmd.java b/api/src/org/apache/cloudstack/api/command/user/autoscale/DisableAutoScaleVmGroupCmd.java index 7979b8228e5..2aba82c2a93 100644 --- a/api/src/org/apache/cloudstack/api/command/user/autoscale/DisableAutoScaleVmGroupCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/autoscale/DisableAutoScaleVmGroupCmd.java @@ -31,7 +31,7 @@ import com.cloud.event.EventTypes; import com.cloud.network.as.AutoScaleVmGroup; import com.cloud.user.Account; -@APICommand(description = "Disables an AutoScale Vm Group", responseObject = AutoScaleVmGroupResponse.class) +@APICommand(name = "disableAutoScaleVmGroup", description = "Disables an AutoScale Vm Group", responseObject = AutoScaleVmGroupResponse.class) public class DisableAutoScaleVmGroupCmd extends BaseAsyncCmd { public static final Logger s_logger = Logger.getLogger(DisableAutoScaleVmGroupCmd.class.getName()); private static final String s_name = "disableautoscalevmGroupresponse"; diff --git a/api/src/org/apache/cloudstack/api/command/user/autoscale/EnableAutoScaleVmGroupCmd.java b/api/src/org/apache/cloudstack/api/command/user/autoscale/EnableAutoScaleVmGroupCmd.java index ceed0e15451..db7acdf5d98 100644 --- a/api/src/org/apache/cloudstack/api/command/user/autoscale/EnableAutoScaleVmGroupCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/autoscale/EnableAutoScaleVmGroupCmd.java @@ -27,7 +27,7 @@ import com.cloud.event.EventTypes; import com.cloud.network.as.AutoScaleVmGroup; import com.cloud.user.Account; -@APICommand(description = "Enables an AutoScale Vm Group", responseObject = AutoScaleVmGroupResponse.class) +@APICommand(name = "enableAutoScaleVmGroup", description = "Enables an AutoScale Vm Group", responseObject = AutoScaleVmGroupResponse.class) public class EnableAutoScaleVmGroupCmd extends BaseAsyncCmd { public static final Logger s_logger = Logger.getLogger(EnableAutoScaleVmGroupCmd.class.getName()); private static final String s_name = "enableautoscalevmGroupresponse"; diff --git a/api/src/org/apache/cloudstack/api/command/user/autoscale/ListAutoScalePoliciesCmd.java b/api/src/org/apache/cloudstack/api/command/user/autoscale/ListAutoScalePoliciesCmd.java index 665459f724e..31621442252 100644 --- a/api/src/org/apache/cloudstack/api/command/user/autoscale/ListAutoScalePoliciesCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/autoscale/ListAutoScalePoliciesCmd.java @@ -31,7 +31,7 @@ import org.apache.cloudstack.api.response.AutoScalePolicyResponse; import org.apache.cloudstack.api.response.ListResponse; import com.cloud.network.as.AutoScalePolicy; -@APICommand(description = "Lists autoscale policies.", responseObject = AutoScalePolicyResponse.class) +@APICommand(name = "listAutoScalePolicies", description = "Lists autoscale policies.", responseObject = AutoScalePolicyResponse.class) public class ListAutoScalePoliciesCmd extends BaseListAccountResourcesCmd { public static final Logger s_logger = Logger.getLogger(ListAutoScalePoliciesCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/user/autoscale/ListAutoScaleVmGroupsCmd.java b/api/src/org/apache/cloudstack/api/command/user/autoscale/ListAutoScaleVmGroupsCmd.java index 8139b03c614..7561757fcab 100644 --- a/api/src/org/apache/cloudstack/api/command/user/autoscale/ListAutoScaleVmGroupsCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/autoscale/ListAutoScaleVmGroupsCmd.java @@ -34,7 +34,7 @@ import org.apache.cloudstack.api.response.ZoneResponse; import com.cloud.exception.InvalidParameterValueException; import com.cloud.network.as.AutoScaleVmGroup; -@APICommand(description = "Lists autoscale vm groups.", responseObject = AutoScaleVmGroupResponse.class) +@APICommand(name = "listAutoScaleVmGroups", description = "Lists autoscale vm groups.", responseObject = AutoScaleVmGroupResponse.class) public class ListAutoScaleVmGroupsCmd extends BaseListProjectAndAccountResourcesCmd { public static final Logger s_logger = Logger.getLogger(ListAutoScaleVmGroupsCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/user/autoscale/ListAutoScaleVmProfilesCmd.java b/api/src/org/apache/cloudstack/api/command/user/autoscale/ListAutoScaleVmProfilesCmd.java index 49a02febd2c..7a88db3e7b9 100644 --- a/api/src/org/apache/cloudstack/api/command/user/autoscale/ListAutoScaleVmProfilesCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/autoscale/ListAutoScaleVmProfilesCmd.java @@ -30,7 +30,7 @@ import org.apache.cloudstack.api.response.AutoScaleVmProfileResponse; import org.apache.cloudstack.api.response.ListResponse; import com.cloud.network.as.AutoScaleVmProfile; -@APICommand(description = "Lists autoscale vm profiles.", responseObject = AutoScaleVmProfileResponse.class) +@APICommand(name = "listAutoScaleVmProfiles", description = "Lists autoscale vm profiles.", responseObject = AutoScaleVmProfileResponse.class) public class ListAutoScaleVmProfilesCmd extends BaseListProjectAndAccountResourcesCmd { public static final Logger s_logger = Logger.getLogger(ListAutoScaleVmProfilesCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/user/autoscale/ListConditionsCmd.java b/api/src/org/apache/cloudstack/api/command/user/autoscale/ListConditionsCmd.java index e6311275a3a..3ed6a3af4b8 100644 --- a/api/src/org/apache/cloudstack/api/command/user/autoscale/ListConditionsCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/autoscale/ListConditionsCmd.java @@ -32,7 +32,7 @@ import org.apache.cloudstack.api.response.CounterResponse; import org.apache.cloudstack.api.response.ListResponse; import com.cloud.network.as.Condition; -@APICommand(description = "List Conditions for the specific user", responseObject = CounterResponse.class) +@APICommand(name = "listConditions ", description = "List Conditions for the specific user", responseObject = CounterResponse.class) public class ListConditionsCmd extends BaseListAccountResourcesCmd { public static final Logger s_logger = Logger.getLogger(ListConditionsCmd.class.getName()); private static final String s_name = "listconditionsresponse"; diff --git a/api/src/org/apache/cloudstack/api/command/user/autoscale/ListCountersCmd.java b/api/src/org/apache/cloudstack/api/command/user/autoscale/ListCountersCmd.java index 202ad5e1c7d..8f8ceb6d148 100644 --- a/api/src/org/apache/cloudstack/api/command/user/autoscale/ListCountersCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/autoscale/ListCountersCmd.java @@ -31,7 +31,7 @@ import org.apache.cloudstack.api.response.ListResponse; import com.cloud.network.as.Counter; import com.cloud.user.Account; -@APICommand(description = "List the counters", responseObject = CounterResponse.class) +@APICommand(name = "listCounters ", description = "List the counters", responseObject = CounterResponse.class) public class ListCountersCmd extends BaseListCmd { public static final Logger s_logger = Logger.getLogger(ListCountersCmd.class.getName()); private static final String s_name = "counterresponse"; diff --git a/api/src/org/apache/cloudstack/api/command/user/autoscale/UpdateAutoScalePolicyCmd.java b/api/src/org/apache/cloudstack/api/command/user/autoscale/UpdateAutoScalePolicyCmd.java index f2189ff1277..56d71078ece 100644 --- a/api/src/org/apache/cloudstack/api/command/user/autoscale/UpdateAutoScalePolicyCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/autoscale/UpdateAutoScalePolicyCmd.java @@ -35,7 +35,7 @@ import com.cloud.network.as.AutoScalePolicy; import com.cloud.user.Account; import com.cloud.user.UserContext; -@APICommand(description = "Updates an existing autoscale policy.", responseObject = AutoScalePolicyResponse.class) +@APICommand(name = "updateAutoScalePolicy", description = "Updates an existing autoscale policy.", responseObject = AutoScalePolicyResponse.class) public class UpdateAutoScalePolicyCmd extends BaseAsyncCmd { public static final Logger s_logger = Logger.getLogger(UpdateAutoScalePolicyCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/user/autoscale/UpdateAutoScaleVmGroupCmd.java b/api/src/org/apache/cloudstack/api/command/user/autoscale/UpdateAutoScaleVmGroupCmd.java index b2bcd33efe5..ea5b6a9f489 100644 --- a/api/src/org/apache/cloudstack/api/command/user/autoscale/UpdateAutoScaleVmGroupCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/autoscale/UpdateAutoScaleVmGroupCmd.java @@ -31,7 +31,7 @@ import com.cloud.network.as.AutoScaleVmGroup; import com.cloud.user.Account; import com.cloud.user.UserContext; -@APICommand(description = "Updates an existing autoscale vm group.", responseObject = AutoScaleVmGroupResponse.class) +@APICommand(name = "updateAutoScaleVmGroup", description = "Updates an existing autoscale vm group.", responseObject = AutoScaleVmGroupResponse.class) public class UpdateAutoScaleVmGroupCmd extends BaseAsyncCmd { public static final Logger s_logger = Logger.getLogger(UpdateAutoScaleVmGroupCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/user/autoscale/UpdateAutoScaleVmProfileCmd.java b/api/src/org/apache/cloudstack/api/command/user/autoscale/UpdateAutoScaleVmProfileCmd.java index 938ce5b4bd9..c8ef8b11198 100644 --- a/api/src/org/apache/cloudstack/api/command/user/autoscale/UpdateAutoScaleVmProfileCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/autoscale/UpdateAutoScaleVmProfileCmd.java @@ -32,7 +32,7 @@ import com.cloud.network.as.AutoScaleVmProfile; import com.cloud.user.Account; import com.cloud.user.UserContext; -@APICommand(description = "Updates an existing autoscale vm profile.", responseObject = AutoScaleVmProfileResponse.class) +@APICommand(name = "updateAutoScaleVmProfile", description = "Updates an existing autoscale vm profile.", responseObject = AutoScaleVmProfileResponse.class) public class UpdateAutoScaleVmProfileCmd extends BaseAsyncCmd { public static final Logger s_logger = Logger.getLogger(UpdateAutoScaleVmProfileCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/user/config/ListCapabilitiesCmd.java b/api/src/org/apache/cloudstack/api/command/user/config/ListCapabilitiesCmd.java index 3a33f0ff2d2..129aeb85d24 100644 --- a/api/src/org/apache/cloudstack/api/command/user/config/ListCapabilitiesCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/config/ListCapabilitiesCmd.java @@ -25,7 +25,7 @@ import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.response.CapabilitiesResponse; import com.cloud.user.Account; -@APICommand(description="Lists capabilities", responseObject=CapabilitiesResponse.class) +@APICommand(name = "listCapabilities", description="Lists capabilities", responseObject=CapabilitiesResponse.class) public class ListCapabilitiesCmd extends BaseCmd { public static final Logger s_logger = Logger.getLogger(ListCapabilitiesCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/user/event/ListEventTypesCmd.java b/api/src/org/apache/cloudstack/api/command/user/event/ListEventTypesCmd.java index 53a2990162f..4c432f35ebb 100644 --- a/api/src/org/apache/cloudstack/api/command/user/event/ListEventTypesCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/event/ListEventTypesCmd.java @@ -26,7 +26,7 @@ import org.apache.cloudstack.api.response.EventTypeResponse; import org.apache.cloudstack.api.response.ListResponse; import com.cloud.user.Account; -@APICommand(description = "List Event Types", responseObject = EventTypeResponse.class) +@APICommand(name = "listEventTypes", description = "List Event Types", responseObject = EventTypeResponse.class) public class ListEventTypesCmd extends BaseCmd { public static final Logger s_logger = Logger.getLogger(ListEventTypesCmd.class.getName()); private static final String s_name = "listeventtypesresponse"; diff --git a/api/src/org/apache/cloudstack/api/command/user/event/ListEventsCmd.java b/api/src/org/apache/cloudstack/api/command/user/event/ListEventsCmd.java index f59b6cd24aa..94205d13226 100644 --- a/api/src/org/apache/cloudstack/api/command/user/event/ListEventsCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/event/ListEventsCmd.java @@ -26,7 +26,7 @@ import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.response.EventResponse; import org.apache.cloudstack.api.response.ListResponse; -@APICommand(description="A command to list events.", responseObject=EventResponse.class) +@APICommand(name = "listEvents", description="A command to list events.", responseObject=EventResponse.class) public class ListEventsCmd extends BaseListProjectAndAccountResourcesCmd { public static final Logger s_logger = Logger.getLogger(ListEventsCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/user/firewall/CreateFirewallRuleCmd.java b/api/src/org/apache/cloudstack/api/command/user/firewall/CreateFirewallRuleCmd.java index cb131a6d2b1..803301febe9 100644 --- a/api/src/org/apache/cloudstack/api/command/user/firewall/CreateFirewallRuleCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/firewall/CreateFirewallRuleCmd.java @@ -41,7 +41,7 @@ import com.cloud.user.Account; import com.cloud.user.UserContext; import com.cloud.utils.net.NetUtils; -@APICommand(description = "Creates a firewall rule for a given ip address", responseObject = FirewallResponse.class) +@APICommand(name = "createFirewallRule", description = "Creates a firewall rule for a given ip address", responseObject = FirewallResponse.class) public class CreateFirewallRuleCmd extends BaseAsyncCreateCmd implements FirewallRule { public static final Logger s_logger = Logger.getLogger(CreateFirewallRuleCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/user/firewall/CreatePortForwardingRuleCmd.java b/api/src/org/apache/cloudstack/api/command/user/firewall/CreatePortForwardingRuleCmd.java index 165a92e9293..ecccf032ace 100644 --- a/api/src/org/apache/cloudstack/api/command/user/firewall/CreatePortForwardingRuleCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/firewall/CreatePortForwardingRuleCmd.java @@ -37,7 +37,7 @@ import com.cloud.user.Account; import com.cloud.user.UserContext; import com.cloud.utils.net.Ip; -@APICommand(description = "Creates a port forwarding rule", responseObject = FirewallRuleResponse.class) +@APICommand(name = "createPortForwardingRule", description = "Creates a port forwarding rule", responseObject = FirewallRuleResponse.class) public class CreatePortForwardingRuleCmd extends BaseAsyncCreateCmd implements PortForwardingRule { public static final Logger s_logger = Logger.getLogger(CreatePortForwardingRuleCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/user/firewall/DeleteFirewallRuleCmd.java b/api/src/org/apache/cloudstack/api/command/user/firewall/DeleteFirewallRuleCmd.java index 966894d4949..5655b5e430f 100644 --- a/api/src/org/apache/cloudstack/api/command/user/firewall/DeleteFirewallRuleCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/firewall/DeleteFirewallRuleCmd.java @@ -30,7 +30,7 @@ import com.cloud.exception.ResourceUnavailableException; import com.cloud.network.rules.FirewallRule; import com.cloud.user.UserContext; -@APICommand(description="Deletes a firewall rule", responseObject=SuccessResponse.class) +@APICommand(name = "deleteFirewallRule", description="Deletes a firewall rule", responseObject=SuccessResponse.class) public class DeleteFirewallRuleCmd extends BaseAsyncCmd { public static final Logger s_logger = Logger.getLogger(DeleteFirewallRuleCmd.class.getName()); private static final String s_name = "deletefirewallruleresponse"; diff --git a/api/src/org/apache/cloudstack/api/command/user/firewall/DeletePortForwardingRuleCmd.java b/api/src/org/apache/cloudstack/api/command/user/firewall/DeletePortForwardingRuleCmd.java index 28948e43762..8f4d5996df8 100644 --- a/api/src/org/apache/cloudstack/api/command/user/firewall/DeletePortForwardingRuleCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/firewall/DeletePortForwardingRuleCmd.java @@ -29,7 +29,7 @@ import com.cloud.exception.InvalidParameterValueException; import com.cloud.network.rules.PortForwardingRule; import com.cloud.user.UserContext; -@APICommand(description="Deletes a port forwarding rule", responseObject=SuccessResponse.class) +@APICommand(name = "deletePortForwardingRule", description="Deletes a port forwarding rule", responseObject=SuccessResponse.class) public class DeletePortForwardingRuleCmd extends BaseAsyncCmd { public static final Logger s_logger = Logger.getLogger(DeletePortForwardingRuleCmd.class.getName()); private static final String s_name = "deleteportforwardingruleresponse"; diff --git a/api/src/org/apache/cloudstack/api/command/user/firewall/ListFirewallRulesCmd.java b/api/src/org/apache/cloudstack/api/command/user/firewall/ListFirewallRulesCmd.java index 29ea0dbb339..80581fb7d3b 100644 --- a/api/src/org/apache/cloudstack/api/command/user/firewall/ListFirewallRulesCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/firewall/ListFirewallRulesCmd.java @@ -32,7 +32,7 @@ import org.apache.cloudstack.api.response.ListResponse; import com.cloud.network.rules.FirewallRule; import com.cloud.utils.Pair; -@APICommand(description="Lists all firewall rules for an IP address.", responseObject=FirewallResponse.class) +@APICommand(name = "listFirewallRules", description="Lists all firewall rules for an IP address.", responseObject=FirewallResponse.class) public class ListFirewallRulesCmd extends BaseListTaggedResourcesCmd { public static final Logger s_logger = Logger.getLogger(ListFirewallRulesCmd.class.getName()); private static final String s_name = "listfirewallrulesresponse"; diff --git a/api/src/org/apache/cloudstack/api/command/user/firewall/ListPortForwardingRulesCmd.java b/api/src/org/apache/cloudstack/api/command/user/firewall/ListPortForwardingRulesCmd.java index 8ef434e9d20..665af44ad96 100644 --- a/api/src/org/apache/cloudstack/api/command/user/firewall/ListPortForwardingRulesCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/firewall/ListPortForwardingRulesCmd.java @@ -31,7 +31,7 @@ import org.apache.cloudstack.api.response.ListResponse; import com.cloud.network.rules.PortForwardingRule; import com.cloud.utils.Pair; -@APICommand(description="Lists all port forwarding rules for an IP address.", responseObject=FirewallRuleResponse.class) +@APICommand(name = "listPortForwardingRules", description="Lists all port forwarding rules for an IP address.", responseObject=FirewallRuleResponse.class) public class ListPortForwardingRulesCmd extends BaseListTaggedResourcesCmd { public static final Logger s_logger = Logger.getLogger(ListPortForwardingRulesCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/user/firewall/UpdatePortForwardingRuleCmd.java b/api/src/org/apache/cloudstack/api/command/user/firewall/UpdatePortForwardingRuleCmd.java index 0c17d710311..a52ebb77257 100644 --- a/api/src/org/apache/cloudstack/api/command/user/firewall/UpdatePortForwardingRuleCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/firewall/UpdatePortForwardingRuleCmd.java @@ -29,7 +29,7 @@ import com.cloud.event.EventTypes; import com.cloud.network.IpAddress; import com.cloud.user.Account; -@APICommand(responseObject=FirewallRuleResponse.class, description="Updates a port forwarding rule. Only the private port and the virtual machine can be updated.") +@APICommand(name = "updatePortForwardingRule", responseObject=FirewallRuleResponse.class, description="Updates a port forwarding rule. Only the private port and the virtual machine can be updated.") public class UpdatePortForwardingRuleCmd extends BaseAsyncCmd { public static final Logger s_logger = Logger.getLogger(UpdatePortForwardingRuleCmd.class.getName()); private static final String s_name = "updateportforwardingruleresponse"; diff --git a/api/src/org/apache/cloudstack/api/command/user/guest/ListGuestOsCategoriesCmd.java b/api/src/org/apache/cloudstack/api/command/user/guest/ListGuestOsCategoriesCmd.java index 0abc0d805f0..3b4c4cd2c34 100644 --- a/api/src/org/apache/cloudstack/api/command/user/guest/ListGuestOsCategoriesCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/guest/ListGuestOsCategoriesCmd.java @@ -31,7 +31,7 @@ import org.apache.cloudstack.api.response.ListResponse; import com.cloud.storage.GuestOsCategory; import com.cloud.utils.Pair; -@APICommand(description="Lists all supported OS categories for this cloud.", responseObject=GuestOSCategoryResponse.class) +@APICommand(name = "listOsCategories", description="Lists all supported OS categories for this cloud.", responseObject=GuestOSCategoryResponse.class) public class ListGuestOsCategoriesCmd extends BaseListCmd { public static final Logger s_logger = Logger.getLogger(ListIsosCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/user/guest/ListGuestOsCmd.java b/api/src/org/apache/cloudstack/api/command/user/guest/ListGuestOsCmd.java index dda36d6bcd6..3c145e9bd95 100644 --- a/api/src/org/apache/cloudstack/api/command/user/guest/ListGuestOsCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/guest/ListGuestOsCmd.java @@ -32,7 +32,7 @@ import org.apache.cloudstack.api.response.ListResponse; import com.cloud.storage.GuestOS; import com.cloud.utils.Pair; -@APICommand(description="Lists all supported OS types for this cloud.", responseObject=GuestOSResponse.class) +@APICommand(name = "listOsTypes", description="Lists all supported OS types for this cloud.", responseObject=GuestOSResponse.class) public class ListGuestOsCmd extends BaseListCmd { public static final Logger s_logger = Logger.getLogger(ListIsosCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/user/iso/AttachIsoCmd.java b/api/src/org/apache/cloudstack/api/command/user/iso/AttachIsoCmd.java index fabb2e98b4a..1e154e2a07d 100644 --- a/api/src/org/apache/cloudstack/api/command/user/iso/AttachIsoCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/iso/AttachIsoCmd.java @@ -32,7 +32,7 @@ import com.cloud.exception.InvalidParameterValueException; import com.cloud.user.UserContext; import com.cloud.uservm.UserVm; -@APICommand(description="Attaches an ISO to a virtual machine.", responseObject=UserVmResponse.class) +@APICommand(name = "attachIso", description="Attaches an ISO to a virtual machine.", responseObject=UserVmResponse.class) public class AttachIsoCmd extends BaseAsyncCmd { public static final Logger s_logger = Logger.getLogger(AttachIsoCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/user/iso/DeleteIsoCmd.java b/api/src/org/apache/cloudstack/api/command/user/iso/DeleteIsoCmd.java index a27c3292a8f..44efbf88f2c 100644 --- a/api/src/org/apache/cloudstack/api/command/user/iso/DeleteIsoCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/iso/DeleteIsoCmd.java @@ -33,7 +33,7 @@ import com.cloud.template.VirtualMachineTemplate; import com.cloud.user.Account; import com.cloud.user.UserContext; -@APICommand(description="Deletes an ISO file.", responseObject=SuccessResponse.class) +@APICommand(name = "deleteIso", description="Deletes an ISO file.", responseObject=SuccessResponse.class) public class DeleteIsoCmd extends BaseAsyncCmd { public static final Logger s_logger = Logger.getLogger(DeleteIsoCmd.class.getName()); private static final String s_name = "deleteisosresponse"; diff --git a/api/src/org/apache/cloudstack/api/command/user/iso/DetachIsoCmd.java b/api/src/org/apache/cloudstack/api/command/user/iso/DetachIsoCmd.java index 1c197c55c53..eb1c6eed2d6 100644 --- a/api/src/org/apache/cloudstack/api/command/user/iso/DetachIsoCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/iso/DetachIsoCmd.java @@ -31,7 +31,7 @@ import com.cloud.event.EventTypes; import com.cloud.exception.InvalidParameterValueException; import com.cloud.uservm.UserVm; -@APICommand(description="Detaches any ISO file (if any) currently attached to a virtual machine.", responseObject=UserVmResponse.class) +@APICommand(name = "detachIso", description="Detaches any ISO file (if any) currently attached to a virtual machine.", responseObject=UserVmResponse.class) public class DetachIsoCmd extends BaseAsyncCmd { public static final Logger s_logger = Logger.getLogger(DetachIsoCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/user/iso/ExtractIsoCmd.java b/api/src/org/apache/cloudstack/api/command/user/iso/ExtractIsoCmd.java index 463728a2f3a..5f8303ec320 100644 --- a/api/src/org/apache/cloudstack/api/command/user/iso/ExtractIsoCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/iso/ExtractIsoCmd.java @@ -30,7 +30,7 @@ import com.cloud.template.VirtualMachineTemplate; import com.cloud.user.Account; import com.cloud.user.UserContext; -@APICommand(description="Extracts an ISO", responseObject=ExtractResponse.class) +@APICommand(name = "extractIso", description="Extracts an ISO", responseObject=ExtractResponse.class) public class ExtractIsoCmd extends BaseAsyncCmd { public static final Logger s_logger = Logger.getLogger(ExtractIsoCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/user/iso/ListIsoPermissionsCmd.java b/api/src/org/apache/cloudstack/api/command/user/iso/ListIsoPermissionsCmd.java index a2e17121750..4ab7061a323 100644 --- a/api/src/org/apache/cloudstack/api/command/user/iso/ListIsoPermissionsCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/iso/ListIsoPermissionsCmd.java @@ -1,4 +1,4 @@ -// Licensed to the Apache Software Foundation (ASF) under one +// Licensedname = "listIsoPermissions", 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 diff --git a/api/src/org/apache/cloudstack/api/command/user/iso/ListIsosCmd.java b/api/src/org/apache/cloudstack/api/command/user/iso/ListIsosCmd.java index 351ab709c2e..e6ccfff3449 100644 --- a/api/src/org/apache/cloudstack/api/command/user/iso/ListIsosCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/iso/ListIsosCmd.java @@ -35,7 +35,7 @@ import com.cloud.user.Account; import com.cloud.user.UserContext; import com.cloud.utils.Pair; -@APICommand(description="Lists all available ISO files.", responseObject=TemplateResponse.class) +@APICommand(name = "listIsos", description="Lists all available ISO files.", responseObject=TemplateResponse.class) public class ListIsosCmd extends BaseListTaggedResourcesCmd { public static final Logger s_logger = Logger.getLogger(ListIsosCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/user/iso/RegisterIsoCmd.java b/api/src/org/apache/cloudstack/api/command/user/iso/RegisterIsoCmd.java index 53c601e86ff..214d18de5cc 100644 --- a/api/src/org/apache/cloudstack/api/command/user/iso/RegisterIsoCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/iso/RegisterIsoCmd.java @@ -32,7 +32,7 @@ import com.cloud.exception.ResourceAllocationException; import com.cloud.template.VirtualMachineTemplate; import com.cloud.user.UserContext; -@APICommand(responseObject=TemplateResponse.class, description="Registers an existing ISO into the CloudStack Cloud.") +@APICommand(name = "registerIso", responseObject=TemplateResponse.class, description="Registers an existing ISO into the CloudStack Cloud.") public class RegisterIsoCmd extends BaseCmd { public static final Logger s_logger = Logger.getLogger(RegisterIsoCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/user/iso/UpdateIsoCmd.java b/api/src/org/apache/cloudstack/api/command/user/iso/UpdateIsoCmd.java index 35f36611cb9..eb368df1909 100644 --- a/api/src/org/apache/cloudstack/api/command/user/iso/UpdateIsoCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/iso/UpdateIsoCmd.java @@ -26,7 +26,7 @@ import org.apache.cloudstack.api.response.TemplateResponse; import com.cloud.template.VirtualMachineTemplate; import com.cloud.user.Account; -@APICommand(description="Updates an ISO file.", responseObject=TemplateResponse.class) +@APICommand(name = "updateIso", description="Updates an ISO file.", responseObject=TemplateResponse.class) public class UpdateIsoCmd extends UpdateTemplateOrIsoCmd { public static final Logger s_logger = Logger.getLogger(UpdateIsoCmd.class.getName()); private static final String s_name = "updateisoresponse"; diff --git a/api/src/org/apache/cloudstack/api/command/user/iso/UpdateIsoPermissionsCmd.java b/api/src/org/apache/cloudstack/api/command/user/iso/UpdateIsoPermissionsCmd.java index 14e9a091e20..4f15659a578 100644 --- a/api/src/org/apache/cloudstack/api/command/user/iso/UpdateIsoPermissionsCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/iso/UpdateIsoPermissionsCmd.java @@ -24,7 +24,7 @@ import org.apache.cloudstack.api.response.SuccessResponse; import com.cloud.template.VirtualMachineTemplate; import com.cloud.user.Account; -@APICommand(description="Updates iso permissions", responseObject=SuccessResponse.class) +@APICommand(name = "updateIsoPermissions", description="Updates iso permissions", responseObject=SuccessResponse.class) public class UpdateIsoPermissionsCmd extends UpdateTemplateOrIsoPermissionsCmd { protected String getResponseName() { return "updateisopermissionsresponse"; diff --git a/api/src/org/apache/cloudstack/api/command/user/job/ListAsyncJobsCmd.java b/api/src/org/apache/cloudstack/api/command/user/job/ListAsyncJobsCmd.java index ebcd3a27e35..e9301e95b6d 100644 --- a/api/src/org/apache/cloudstack/api/command/user/job/ListAsyncJobsCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/job/ListAsyncJobsCmd.java @@ -29,7 +29,7 @@ import org.apache.cloudstack.api.response.ListResponse; import com.cloud.async.AsyncJob; import com.cloud.utils.Pair; -@APICommand(description="Lists all pending asynchronous jobs for the account.", responseObject=AsyncJobResponse.class) +@APICommand(name = "listAsyncJobs", description="Lists all pending asynchronous jobs for the account.", responseObject=AsyncJobResponse.class) public class ListAsyncJobsCmd extends BaseListAccountResourcesCmd { private static final String s_name = "listasyncjobsresponse"; diff --git a/api/src/org/apache/cloudstack/api/command/user/job/QueryAsyncJobResultCmd.java b/api/src/org/apache/cloudstack/api/command/user/job/QueryAsyncJobResultCmd.java index 558ea6d6ac2..256d4ff5cc3 100644 --- a/api/src/org/apache/cloudstack/api/command/user/job/QueryAsyncJobResultCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/job/QueryAsyncJobResultCmd.java @@ -25,7 +25,7 @@ import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.response.AsyncJobResponse; import com.cloud.user.Account; -@APICommand(description="Retrieves the current status of asynchronous job.", responseObject=AsyncJobResponse.class) +@APICommand(name = "queryAsyncJobResult", description="Retrieves the current status of asynchronous job.", responseObject=AsyncJobResponse.class) public class QueryAsyncJobResultCmd extends BaseCmd { public static final Logger s_logger = Logger.getLogger(QueryAsyncJobResultCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/user/loadbalancer/AssignToLoadBalancerRuleCmd.java b/api/src/org/apache/cloudstack/api/command/user/loadbalancer/AssignToLoadBalancerRuleCmd.java index 995f57a854e..972673f4954 100644 --- a/api/src/org/apache/cloudstack/api/command/user/loadbalancer/AssignToLoadBalancerRuleCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/loadbalancer/AssignToLoadBalancerRuleCmd.java @@ -36,7 +36,7 @@ import com.cloud.user.Account; import com.cloud.user.UserContext; import com.cloud.utils.StringUtils; -@APICommand(description="Assigns virtual machine or a list of virtual machines to a load balancer rule.", responseObject=SuccessResponse.class) +@APICommand(name = "assignToLoadBalancerRule", description="Assigns virtual machine or a list of virtual machines to a load balancer rule.", responseObject=SuccessResponse.class) public class AssignToLoadBalancerRuleCmd extends BaseAsyncCmd { public static final Logger s_logger = Logger.getLogger(AssignToLoadBalancerRuleCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/user/loadbalancer/CreateLBStickinessPolicyCmd.java b/api/src/org/apache/cloudstack/api/command/user/loadbalancer/CreateLBStickinessPolicyCmd.java index d4d7bc6d0ab..dc80d312769 100644 --- a/api/src/org/apache/cloudstack/api/command/user/loadbalancer/CreateLBStickinessPolicyCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/loadbalancer/CreateLBStickinessPolicyCmd.java @@ -39,7 +39,7 @@ import com.cloud.user.Account; import com.cloud.user.UserContext; -@APICommand(description = "Creates a Load Balancer stickiness policy ", responseObject = LBStickinessResponse.class, since="3.0.0") +@APICommand(name = "createLBStickinessPolicy", description = "Creates a Load Balancer stickiness policy ", responseObject = LBStickinessResponse.class, since="3.0.0") @SuppressWarnings("rawtypes") public class CreateLBStickinessPolicyCmd extends BaseAsyncCreateCmd { public static final Logger s_logger = Logger diff --git a/api/src/org/apache/cloudstack/api/command/user/loadbalancer/CreateLoadBalancerRuleCmd.java b/api/src/org/apache/cloudstack/api/command/user/loadbalancer/CreateLoadBalancerRuleCmd.java index 6024fb2fd14..4aacc8e19b2 100644 --- a/api/src/org/apache/cloudstack/api/command/user/loadbalancer/CreateLoadBalancerRuleCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/loadbalancer/CreateLoadBalancerRuleCmd.java @@ -47,7 +47,7 @@ import com.cloud.user.Account; import com.cloud.user.UserContext; import com.cloud.utils.net.NetUtils; -@APICommand(description="Creates a load balancer rule", responseObject=LoadBalancerResponse.class) +@APICommand(name = "createLoadBalancerRule", description="Creates a load balancer rule", responseObject=LoadBalancerResponse.class) public class CreateLoadBalancerRuleCmd extends BaseAsyncCreateCmd /*implements LoadBalancer */{ public static final Logger s_logger = Logger.getLogger(CreateLoadBalancerRuleCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/user/loadbalancer/DeleteLBStickinessPolicyCmd.java b/api/src/org/apache/cloudstack/api/command/user/loadbalancer/DeleteLBStickinessPolicyCmd.java index 42cd990d41b..9329bd35aba 100644 --- a/api/src/org/apache/cloudstack/api/command/user/loadbalancer/DeleteLBStickinessPolicyCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/loadbalancer/DeleteLBStickinessPolicyCmd.java @@ -33,7 +33,7 @@ import com.cloud.network.rules.LoadBalancer; import com.cloud.user.Account; import com.cloud.user.UserContext; -@APICommand(description = "Deletes a LB stickiness policy.", responseObject = SuccessResponse.class, since="3.0.0") +@APICommand(name = "deleteLBStickinessPolicy", description = "Deletes a LB stickiness policy.", responseObject = SuccessResponse.class, since="3.0.0") public class DeleteLBStickinessPolicyCmd extends BaseAsyncCmd { public static final Logger s_logger = Logger.getLogger(DeleteLBStickinessPolicyCmd.class.getName()); private static final String s_name = "deleteLBstickinessrruleresponse"; diff --git a/api/src/org/apache/cloudstack/api/command/user/loadbalancer/DeleteLoadBalancerRuleCmd.java b/api/src/org/apache/cloudstack/api/command/user/loadbalancer/DeleteLoadBalancerRuleCmd.java index a8d20fe07a7..d53155f17b9 100644 --- a/api/src/org/apache/cloudstack/api/command/user/loadbalancer/DeleteLoadBalancerRuleCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/loadbalancer/DeleteLoadBalancerRuleCmd.java @@ -29,7 +29,7 @@ import com.cloud.network.rules.LoadBalancer; import com.cloud.user.Account; import com.cloud.user.UserContext; -@APICommand(description="Deletes a load balancer rule.", responseObject=SuccessResponse.class) +@APICommand(name = "deleteLoadBalancerRule", description="Deletes a load balancer rule.", responseObject=SuccessResponse.class) public class DeleteLoadBalancerRuleCmd extends BaseAsyncCmd { public static final Logger s_logger = Logger.getLogger(DeleteLoadBalancerRuleCmd.class.getName()); private static final String s_name = "deleteloadbalancerruleresponse"; diff --git a/api/src/org/apache/cloudstack/api/command/user/loadbalancer/ListLBStickinessPoliciesCmd.java b/api/src/org/apache/cloudstack/api/command/user/loadbalancer/ListLBStickinessPoliciesCmd.java index 180504078c1..90708c0bfe0 100644 --- a/api/src/org/apache/cloudstack/api/command/user/loadbalancer/ListLBStickinessPoliciesCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/loadbalancer/ListLBStickinessPoliciesCmd.java @@ -33,7 +33,7 @@ import com.cloud.network.rules.StickinessPolicy; import com.cloud.user.Account; import com.cloud.user.UserContext; -@APICommand(description = "Lists LBStickiness policies.", responseObject = LBStickinessResponse.class, since="3.0.0") +@APICommand(name = "listLBStickinessPolicies", description = "Lists LBStickiness policies.", responseObject = LBStickinessResponse.class, since="3.0.0") public class ListLBStickinessPoliciesCmd extends BaseListCmd { public static final Logger s_logger = Logger .getLogger(ListLBStickinessPoliciesCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/user/loadbalancer/ListLoadBalancerRuleInstancesCmd.java b/api/src/org/apache/cloudstack/api/command/user/loadbalancer/ListLoadBalancerRuleInstancesCmd.java index f5121857b52..374c6fb25e5 100644 --- a/api/src/org/apache/cloudstack/api/command/user/loadbalancer/ListLoadBalancerRuleInstancesCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/loadbalancer/ListLoadBalancerRuleInstancesCmd.java @@ -30,7 +30,7 @@ import org.apache.cloudstack.api.response.ListResponse; import org.apache.cloudstack.api.response.UserVmResponse; import com.cloud.uservm.UserVm; -@APICommand(description="List all virtual machine instances that are assigned to a load balancer rule.", responseObject=UserVmResponse.class) +@APICommand(name = "listLoadBalancerRuleInstances", description="List all virtual machine instances that are assigned to a load balancer rule.", responseObject=UserVmResponse.class) public class ListLoadBalancerRuleInstancesCmd extends BaseListCmd { public static final Logger s_logger = Logger.getLogger (ListLoadBalancerRuleInstancesCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/user/loadbalancer/ListLoadBalancerRulesCmd.java b/api/src/org/apache/cloudstack/api/command/user/loadbalancer/ListLoadBalancerRulesCmd.java index 74bae65dbf2..d0d4e8db85c 100644 --- a/api/src/org/apache/cloudstack/api/command/user/loadbalancer/ListLoadBalancerRulesCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/loadbalancer/ListLoadBalancerRulesCmd.java @@ -34,7 +34,7 @@ import org.apache.cloudstack.api.response.ZoneResponse; import com.cloud.network.rules.LoadBalancer; import com.cloud.utils.Pair; -@APICommand(description = "Lists load balancer rules.", responseObject = LoadBalancerResponse.class) +@APICommand(name = "listLoadBalancerRules", description = "Lists load balancer rules.", responseObject = LoadBalancerResponse.class) public class ListLoadBalancerRulesCmd extends BaseListTaggedResourcesCmd { public static final Logger s_logger = Logger.getLogger(ListLoadBalancerRulesCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/user/loadbalancer/RemoveFromLoadBalancerRuleCmd.java b/api/src/org/apache/cloudstack/api/command/user/loadbalancer/RemoveFromLoadBalancerRuleCmd.java index 3393b09ed90..f56f06d15c5 100644 --- a/api/src/org/apache/cloudstack/api/command/user/loadbalancer/RemoveFromLoadBalancerRuleCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/loadbalancer/RemoveFromLoadBalancerRuleCmd.java @@ -32,7 +32,7 @@ import com.cloud.user.Account; import com.cloud.user.UserContext; import com.cloud.utils.StringUtils; -@APICommand(description="Removes a virtual machine or a list of virtual machines from a load balancer rule.", responseObject=SuccessResponse.class) +@APICommand(name = "removeFromLoadBalancerRule", description="Removes a virtual machine or a list of virtual machines from a load balancer rule.", responseObject=SuccessResponse.class) public class RemoveFromLoadBalancerRuleCmd extends BaseAsyncCmd { public static final Logger s_logger = Logger.getLogger(RemoveFromLoadBalancerRuleCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/user/loadbalancer/UpdateLoadBalancerRuleCmd.java b/api/src/org/apache/cloudstack/api/command/user/loadbalancer/UpdateLoadBalancerRuleCmd.java index 06d2ca6b8f5..8a86f74260d 100644 --- a/api/src/org/apache/cloudstack/api/command/user/loadbalancer/UpdateLoadBalancerRuleCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/loadbalancer/UpdateLoadBalancerRuleCmd.java @@ -27,7 +27,7 @@ import com.cloud.network.rules.LoadBalancer; import com.cloud.user.Account; import com.cloud.user.UserContext; -@APICommand(description="Updates load balancer", responseObject=LoadBalancerResponse.class) +@APICommand(name = "updateLoadBalancerRule", description="Updates load balancer", responseObject=LoadBalancerResponse.class) public class UpdateLoadBalancerRuleCmd extends BaseAsyncCmd { public static final Logger s_logger = Logger.getLogger(UpdateLoadBalancerRuleCmd.class.getName()); private static final String s_name = "updateloadbalancerruleresponse"; diff --git a/api/src/org/apache/cloudstack/api/command/user/nat/CreateIpForwardingRuleCmd.java b/api/src/org/apache/cloudstack/api/command/user/nat/CreateIpForwardingRuleCmd.java index a3d79f35d85..e612b84c835 100644 --- a/api/src/org/apache/cloudstack/api/command/user/nat/CreateIpForwardingRuleCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/nat/CreateIpForwardingRuleCmd.java @@ -41,7 +41,7 @@ import com.cloud.network.rules.StaticNatRule; import com.cloud.user.Account; import com.cloud.user.UserContext; -@APICommand(description="Creates an ip forwarding rule", responseObject=FirewallRuleResponse.class) +@APICommand(name = "createIpForwardingRule", description="Creates an ip forwarding rule", responseObject=FirewallRuleResponse.class) public class CreateIpForwardingRuleCmd extends BaseAsyncCreateCmd implements StaticNatRule { public static final Logger s_logger = Logger.getLogger(CreateIpForwardingRuleCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/user/nat/DeleteIpForwardingRuleCmd.java b/api/src/org/apache/cloudstack/api/command/user/nat/DeleteIpForwardingRuleCmd.java index b45d622b257..6300a412d54 100644 --- a/api/src/org/apache/cloudstack/api/command/user/nat/DeleteIpForwardingRuleCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/nat/DeleteIpForwardingRuleCmd.java @@ -33,7 +33,7 @@ import com.cloud.exception.InvalidParameterValueException; import com.cloud.network.rules.FirewallRule; import com.cloud.user.UserContext; -@APICommand(description="Deletes an ip forwarding rule", responseObject=SuccessResponse.class) +@APICommand(name = "deleteIpForwardingRule", description="Deletes an ip forwarding rule", responseObject=SuccessResponse.class) public class DeleteIpForwardingRuleCmd extends BaseAsyncCmd { public static final Logger s_logger = Logger.getLogger(DeleteIpForwardingRuleCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/user/nat/DisableStaticNatCmd.java b/api/src/org/apache/cloudstack/api/command/user/nat/DisableStaticNatCmd.java index e6d56e3f6bf..fbd0b5ce900 100644 --- a/api/src/org/apache/cloudstack/api/command/user/nat/DisableStaticNatCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/nat/DisableStaticNatCmd.java @@ -34,7 +34,7 @@ import com.cloud.exception.NetworkRuleConflictException; import com.cloud.exception.ResourceUnavailableException; import com.cloud.network.IpAddress; -@APICommand(description="Disables static rule for given ip address", responseObject=SuccessResponse.class) +@APICommand(name = "disableStaticNat", description="Disables static rule for given ip address", responseObject=SuccessResponse.class) public class DisableStaticNatCmd extends BaseAsyncCmd { public static final Logger s_logger = Logger.getLogger(DeletePortForwardingRuleCmd.class.getName()); private static final String s_name = "disablestaticnatresponse"; diff --git a/api/src/org/apache/cloudstack/api/command/user/nat/EnableStaticNatCmd.java b/api/src/org/apache/cloudstack/api/command/user/nat/EnableStaticNatCmd.java index 3e9325d027a..79a8e2bc9ff 100644 --- a/api/src/org/apache/cloudstack/api/command/user/nat/EnableStaticNatCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/nat/EnableStaticNatCmd.java @@ -34,7 +34,7 @@ import com.cloud.network.IpAddress; import com.cloud.user.Account; import com.cloud.uservm.UserVm; -@APICommand(description="Enables static nat for given ip address", responseObject=SuccessResponse.class) +@APICommand(name = "enableStaticNat", description="Enables static nat for given ip address", responseObject=SuccessResponse.class) public class EnableStaticNatCmd extends BaseCmd{ public static final Logger s_logger = Logger.getLogger(CreateIpForwardingRuleCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/user/nat/ListIpForwardingRulesCmd.java b/api/src/org/apache/cloudstack/api/command/user/nat/ListIpForwardingRulesCmd.java index 4fc9216ea1b..e4aaff3e56f 100644 --- a/api/src/org/apache/cloudstack/api/command/user/nat/ListIpForwardingRulesCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/nat/ListIpForwardingRulesCmd.java @@ -34,7 +34,7 @@ import com.cloud.network.rules.FirewallRule; import com.cloud.network.rules.StaticNatRule; import com.cloud.utils.Pair; -@APICommand(description="List the ip forwarding rules", responseObject=FirewallRuleResponse.class) +@APICommand(name = "listIpForwardingRules", description="List the ip forwarding rules", responseObject=FirewallRuleResponse.class) public class ListIpForwardingRulesCmd extends BaseListProjectAndAccountResourcesCmd { public static final Logger s_logger = Logger.getLogger(ListIpForwardingRulesCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/user/network/CreateNetworkACLCmd.java b/api/src/org/apache/cloudstack/api/command/user/network/CreateNetworkACLCmd.java index fae8f912363..e2aba5b321e 100644 --- a/api/src/org/apache/cloudstack/api/command/user/network/CreateNetworkACLCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/network/CreateNetworkACLCmd.java @@ -42,7 +42,7 @@ import com.cloud.user.Account; import com.cloud.user.UserContext; import com.cloud.utils.net.NetUtils; -@APICommand(description = "Creates a ACL rule the given network (the network has to belong to VPC)", +@APICommand(name = "createNetworkACL", description = "Creates a ACL rule the given network (the network has to belong to VPC)", responseObject = NetworkACLResponse.class) public class CreateNetworkACLCmd extends BaseAsyncCreateCmd implements FirewallRule { public static final Logger s_logger = Logger.getLogger(CreateNetworkACLCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/user/network/CreateNetworkCmd.java b/api/src/org/apache/cloudstack/api/command/user/network/CreateNetworkCmd.java index 85d1b6853d4..3b2608729a4 100644 --- a/api/src/org/apache/cloudstack/api/command/user/network/CreateNetworkCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/network/CreateNetworkCmd.java @@ -39,7 +39,7 @@ import com.cloud.network.Network.GuestType; import com.cloud.offering.NetworkOffering; import com.cloud.user.UserContext; -@APICommand(description="Creates a network", responseObject=NetworkResponse.class) +@APICommand(name = "createNetwork", description="Creates a network", responseObject=NetworkResponse.class) public class CreateNetworkCmd extends BaseCmd { public static final Logger s_logger = Logger.getLogger(CreateNetworkCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/user/network/DeleteNetworkACLCmd.java b/api/src/org/apache/cloudstack/api/command/user/network/DeleteNetworkACLCmd.java index 2610f2f9f79..4b078ed7fe3 100644 --- a/api/src/org/apache/cloudstack/api/command/user/network/DeleteNetworkACLCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/network/DeleteNetworkACLCmd.java @@ -34,7 +34,7 @@ import com.cloud.exception.ResourceUnavailableException; import com.cloud.network.rules.FirewallRule; import com.cloud.user.UserContext; -@APICommand(description="Deletes a Network ACL", responseObject=SuccessResponse.class) +@APICommand(name = "deleteNetworkACL", description="Deletes a Network ACL", responseObject=SuccessResponse.class) public class DeleteNetworkACLCmd extends BaseAsyncCmd { public static final Logger s_logger = Logger.getLogger(DeleteNetworkACLCmd.class.getName()); private static final String s_name = "deletenetworkaclresponse"; diff --git a/api/src/org/apache/cloudstack/api/command/user/network/DeleteNetworkCmd.java b/api/src/org/apache/cloudstack/api/command/user/network/DeleteNetworkCmd.java index 0648d402059..df070ff8ecb 100644 --- a/api/src/org/apache/cloudstack/api/command/user/network/DeleteNetworkCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/network/DeleteNetworkCmd.java @@ -28,7 +28,7 @@ import com.cloud.exception.InvalidParameterValueException; import com.cloud.network.Network; import com.cloud.user.UserContext; -@APICommand(description="Deletes a network", responseObject=SuccessResponse.class) +@APICommand(name = "deleteNetwork", description="Deletes a network", responseObject=SuccessResponse.class) public class DeleteNetworkCmd extends BaseAsyncCmd{ public static final Logger s_logger = Logger.getLogger(DeleteNetworkOfferingCmd.class.getName()); private static final String s_name = "deletenetworkresponse"; diff --git a/api/src/org/apache/cloudstack/api/command/user/network/ListNetworkACLsCmd.java b/api/src/org/apache/cloudstack/api/command/user/network/ListNetworkACLsCmd.java index 08a57b1d957..f556ce1cbfd 100644 --- a/api/src/org/apache/cloudstack/api/command/user/network/ListNetworkACLsCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/network/ListNetworkACLsCmd.java @@ -32,7 +32,7 @@ import org.apache.cloudstack.api.response.NetworkResponse; import com.cloud.network.rules.FirewallRule; import com.cloud.utils.Pair; -@APICommand(description="Lists all network ACLs", responseObject=NetworkACLResponse.class) +@APICommand(name = "listNetworkACLs", description="Lists all network ACLs", responseObject=NetworkACLResponse.class) public class ListNetworkACLsCmd extends BaseListTaggedResourcesCmd { public static final Logger s_logger = Logger.getLogger(ListNetworkACLsCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/user/network/ListNetworkOfferingsCmd.java b/api/src/org/apache/cloudstack/api/command/user/network/ListNetworkOfferingsCmd.java index cd1ded7a57d..94bc71dc993 100644 --- a/api/src/org/apache/cloudstack/api/command/user/network/ListNetworkOfferingsCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/network/ListNetworkOfferingsCmd.java @@ -31,7 +31,7 @@ import org.apache.cloudstack.api.response.NetworkResponse; import org.apache.cloudstack.api.response.ZoneResponse; import com.cloud.offering.NetworkOffering; -@APICommand(description="Lists all available network offerings.", responseObject=NetworkOfferingResponse.class) +@APICommand(name = "listNetworkOfferings", description="Lists all available network offerings.", responseObject=NetworkOfferingResponse.class) public class ListNetworkOfferingsCmd extends BaseListCmd { public static final Logger s_logger = Logger.getLogger(ListNetworkOfferingsCmd.class.getName()); private static final String _name = "listnetworkofferingsresponse"; diff --git a/api/src/org/apache/cloudstack/api/command/user/network/ListNetworksCmd.java b/api/src/org/apache/cloudstack/api/command/user/network/ListNetworksCmd.java index 7cf752e8d97..1f366c223a6 100644 --- a/api/src/org/apache/cloudstack/api/command/user/network/ListNetworksCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/network/ListNetworksCmd.java @@ -32,7 +32,7 @@ import org.apache.cloudstack.api.response.VpcResponse; import org.apache.cloudstack.api.response.ZoneResponse; import com.cloud.network.Network; -@APICommand(description="Lists all available networks.", responseObject=NetworkResponse.class) +@APICommand(name = "listNetworks", description="Lists all available networks.", responseObject=NetworkResponse.class) public class ListNetworksCmd extends BaseListTaggedResourcesCmd { public static final Logger s_logger = Logger.getLogger(ListNetworksCmd.class.getName()); private static final String _name = "listnetworksresponse"; diff --git a/api/src/org/apache/cloudstack/api/command/user/network/RestartNetworkCmd.java b/api/src/org/apache/cloudstack/api/command/user/network/RestartNetworkCmd.java index a8f5301beac..ee9af3b0009 100644 --- a/api/src/org/apache/cloudstack/api/command/user/network/RestartNetworkCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/network/RestartNetworkCmd.java @@ -31,7 +31,7 @@ import com.cloud.exception.ResourceAllocationException; import com.cloud.exception.ResourceUnavailableException; import com.cloud.network.Network; -@APICommand(description="Restarts the network; includes 1) restarting network elements - virtual routers, dhcp servers 2) reapplying all public ips 3) reapplying loadBalancing/portForwarding rules", responseObject=IPAddressResponse.class) +@APICommand(name = "restartNetwork", description="Restarts the network; includes 1) restarting network elements - virtual routers, dhcp servers 2) reapplying all public ips 3) reapplying loadBalancing/portForwarding rules", responseObject=IPAddressResponse.class) public class RestartNetworkCmd extends BaseAsyncCmd { public static final Logger s_logger = Logger.getLogger(RestartNetworkCmd.class.getName()); private static final String s_name = "restartnetworkresponse"; diff --git a/api/src/org/apache/cloudstack/api/command/user/network/UpdateNetworkCmd.java b/api/src/org/apache/cloudstack/api/command/user/network/UpdateNetworkCmd.java index 205d14dfd3c..5ab8a6035ad 100644 --- a/api/src/org/apache/cloudstack/api/command/user/network/UpdateNetworkCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/network/UpdateNetworkCmd.java @@ -35,7 +35,7 @@ import com.cloud.user.Account; import com.cloud.user.User; import com.cloud.user.UserContext; -@APICommand(description="Updates a network", responseObject=NetworkResponse.class) +@APICommand(name = "updateNetwork", description="Updates a network", responseObject=NetworkResponse.class) public class UpdateNetworkCmd extends BaseAsyncCmd { public static final Logger s_logger = Logger.getLogger(UpdateNetworkCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/user/offering/ListDiskOfferingsCmd.java b/api/src/org/apache/cloudstack/api/command/user/offering/ListDiskOfferingsCmd.java index f49bd7f32a8..7209429cfa0 100644 --- a/api/src/org/apache/cloudstack/api/command/user/offering/ListDiskOfferingsCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/offering/ListDiskOfferingsCmd.java @@ -30,7 +30,7 @@ import org.apache.cloudstack.api.response.DomainResponse; import org.apache.cloudstack.api.response.ListResponse; import com.cloud.offering.DiskOffering; -@APICommand(description="Lists all available disk offerings.", responseObject=DiskOfferingResponse.class) +@APICommand(name = "listDiskOfferings", description="Lists all available disk offerings.", responseObject=DiskOfferingResponse.class) public class ListDiskOfferingsCmd extends BaseListCmd { public static final Logger s_logger = Logger.getLogger(ListDiskOfferingsCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/user/offering/ListServiceOfferingsCmd.java b/api/src/org/apache/cloudstack/api/command/user/offering/ListServiceOfferingsCmd.java index 1938124e7f9..b599aa55156 100644 --- a/api/src/org/apache/cloudstack/api/command/user/offering/ListServiceOfferingsCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/offering/ListServiceOfferingsCmd.java @@ -32,7 +32,7 @@ import org.apache.cloudstack.api.response.ServiceOfferingResponse; import org.apache.cloudstack.api.response.UserVmResponse; import com.cloud.offering.ServiceOffering; -@APICommand(description="Lists all available service offerings.", responseObject=ServiceOfferingResponse.class) +@APICommand(name = "listServiceOfferings", description="Lists all available service offerings.", responseObject=ServiceOfferingResponse.class) public class ListServiceOfferingsCmd extends BaseListCmd { public static final Logger s_logger = Logger.getLogger(ListServiceOfferingsCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/user/project/ActivateProjectCmd.java b/api/src/org/apache/cloudstack/api/command/user/project/ActivateProjectCmd.java index 2ea31fe9bd3..6cc9387ac2b 100644 --- a/api/src/org/apache/cloudstack/api/command/user/project/ActivateProjectCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/project/ActivateProjectCmd.java @@ -26,7 +26,7 @@ import com.cloud.exception.InvalidParameterValueException; import com.cloud.projects.Project; import com.cloud.user.UserContext; -@APICommand(description="Activates a project", responseObject=ProjectResponse.class, since="3.0.0") +@APICommand(name = "activateProject", description="Activates a project", responseObject=ProjectResponse.class, since="3.0.0") public class ActivateProjectCmd extends BaseAsyncCmd { public static final Logger s_logger = Logger.getLogger(ActivateProjectCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/user/project/CreateProjectCmd.java b/api/src/org/apache/cloudstack/api/command/user/project/CreateProjectCmd.java index fef09f8e495..9500a972b36 100644 --- a/api/src/org/apache/cloudstack/api/command/user/project/CreateProjectCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/project/CreateProjectCmd.java @@ -29,7 +29,7 @@ import com.cloud.projects.Project; import com.cloud.user.Account; import com.cloud.user.UserContext; -@APICommand(description = "Creates a project", responseObject = ProjectResponse.class, since = "3.0.0") +@APICommand(name = "createProject", description = "Creates a project", responseObject = ProjectResponse.class, since = "3.0.0") public class CreateProjectCmd extends BaseAsyncCreateCmd { public static final Logger s_logger = Logger.getLogger(CreateProjectCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/user/project/DeleteProjectCmd.java b/api/src/org/apache/cloudstack/api/command/user/project/DeleteProjectCmd.java index 4d9a36af7ce..fb41a7f14ef 100644 --- a/api/src/org/apache/cloudstack/api/command/user/project/DeleteProjectCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/project/DeleteProjectCmd.java @@ -31,7 +31,7 @@ import com.cloud.exception.InvalidParameterValueException; import com.cloud.projects.Project; import com.cloud.user.UserContext; -@APICommand(description="Deletes a project", responseObject=SuccessResponse.class, since="3.0.0") +@APICommand(name = "deleteProject", description="Deletes a project", responseObject=SuccessResponse.class, since="3.0.0") public class DeleteProjectCmd extends BaseAsyncCmd { public static final Logger s_logger = Logger.getLogger(DeleteProjectCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/user/project/DeleteProjectInvitationCmd.java b/api/src/org/apache/cloudstack/api/command/user/project/DeleteProjectInvitationCmd.java index d235a6b45cf..67c7cefc252 100644 --- a/api/src/org/apache/cloudstack/api/command/user/project/DeleteProjectInvitationCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/project/DeleteProjectInvitationCmd.java @@ -30,7 +30,7 @@ import com.cloud.event.EventTypes; import com.cloud.user.Account; import com.cloud.user.UserContext; -@APICommand(description = "Accepts or declines project invitation", responseObject = SuccessResponse.class, since = "3.0.0") +@APICommand(name = "deleteProjectInvitation", description = "Accepts or declines project invitation", responseObject = SuccessResponse.class, since = "3.0.0") public class DeleteProjectInvitationCmd extends BaseAsyncCmd { public static final Logger s_logger = Logger.getLogger(DeleteProjectInvitationCmd.class.getName()); private static final String s_name = "deleteprojectinvitationresponse"; diff --git a/api/src/org/apache/cloudstack/api/command/user/project/ListProjectInvitationsCmd.java b/api/src/org/apache/cloudstack/api/command/user/project/ListProjectInvitationsCmd.java index 6490849429a..4157daa7b4a 100644 --- a/api/src/org/apache/cloudstack/api/command/user/project/ListProjectInvitationsCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/project/ListProjectInvitationsCmd.java @@ -26,7 +26,7 @@ import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.response.ListResponse; import org.apache.cloudstack.api.response.ProjectInvitationResponse; -@APICommand(description = "Lists projects and provides detailed information for listed projects", responseObject = ProjectInvitationResponse.class, since = "3.0.0") +@APICommand(name = "listProjectInvitations", description = "Lists projects and provides detailed information for listed projects", responseObject = ProjectInvitationResponse.class, since = "3.0.0") public class ListProjectInvitationsCmd extends BaseListAccountResourcesCmd { public static final Logger s_logger = Logger.getLogger(ListProjectInvitationsCmd.class.getName()); private static final String s_name = "listprojectinvitationsresponse"; diff --git a/api/src/org/apache/cloudstack/api/command/user/project/ListProjectsCmd.java b/api/src/org/apache/cloudstack/api/command/user/project/ListProjectsCmd.java index 48ad6a30951..321a19fe62d 100644 --- a/api/src/org/apache/cloudstack/api/command/user/project/ListProjectsCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/project/ListProjectsCmd.java @@ -32,7 +32,7 @@ import org.apache.cloudstack.api.response.ProjectResponse; import com.cloud.exception.InvalidParameterValueException; -@APICommand(description="Lists projects and provides detailed information for listed projects", responseObject=ProjectResponse.class, since="3.0.0") +@APICommand(name = "listProjects", description="Lists projects and provides detailed information for listed projects", responseObject=ProjectResponse.class, since="3.0.0") public class ListProjectsCmd extends BaseListAccountResourcesCmd { public static final Logger s_logger = Logger.getLogger(ListProjectsCmd.class.getName()); private static final String s_name = "listprojectsresponse"; diff --git a/api/src/org/apache/cloudstack/api/command/user/project/SuspendProjectCmd.java b/api/src/org/apache/cloudstack/api/command/user/project/SuspendProjectCmd.java index 7291c4b207f..120e4fe0c55 100644 --- a/api/src/org/apache/cloudstack/api/command/user/project/SuspendProjectCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/project/SuspendProjectCmd.java @@ -28,7 +28,7 @@ import com.cloud.exception.ResourceUnavailableException; import com.cloud.projects.Project; import com.cloud.user.UserContext; -@APICommand(description="Suspends a project", responseObject=ProjectResponse.class, since="3.0.0") +@APICommand(name = "suspendProject", description="Suspends a project", responseObject=ProjectResponse.class, since="3.0.0") public class SuspendProjectCmd extends BaseAsyncCmd { public static final Logger s_logger = Logger.getLogger(SuspendProjectCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/user/project/UpdateProjectCmd.java b/api/src/org/apache/cloudstack/api/command/user/project/UpdateProjectCmd.java index 102c84e98a8..bad117727e0 100644 --- a/api/src/org/apache/cloudstack/api/command/user/project/UpdateProjectCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/project/UpdateProjectCmd.java @@ -31,7 +31,7 @@ import com.cloud.exception.ResourceAllocationException; import com.cloud.projects.Project; import com.cloud.user.UserContext; -@APICommand(description="Updates a project", responseObject=ProjectResponse.class, since="3.0.0") +@APICommand(name = "updateProject", description="Updates a project", responseObject=ProjectResponse.class, since="3.0.0") public class UpdateProjectCmd extends BaseAsyncCmd { public static final Logger s_logger = Logger.getLogger(UpdateProjectCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/user/project/UpdateProjectInvitationCmd.java b/api/src/org/apache/cloudstack/api/command/user/project/UpdateProjectInvitationCmd.java index e51e0450bd7..32e1a755484 100644 --- a/api/src/org/apache/cloudstack/api/command/user/project/UpdateProjectInvitationCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/project/UpdateProjectInvitationCmd.java @@ -26,7 +26,7 @@ import com.cloud.event.EventTypes; import com.cloud.user.Account; import com.cloud.user.UserContext; -@APICommand(description = "Accepts or declines project invitation", responseObject = SuccessResponse.class, since = "3.0.0") +@APICommand(name = "updateProjectInvitation", description = "Accepts or declines project invitation", responseObject = SuccessResponse.class, since = "3.0.0") public class UpdateProjectInvitationCmd extends BaseAsyncCmd { public static final Logger s_logger = Logger.getLogger(UpdateProjectInvitationCmd.class.getName()); private static final String s_name = "updateprojectinvitationresponse"; diff --git a/api/src/org/apache/cloudstack/api/command/user/resource/GetCloudIdentifierCmd.java b/api/src/org/apache/cloudstack/api/command/user/resource/GetCloudIdentifierCmd.java index 7043ad68afe..0d62c18f55d 100644 --- a/api/src/org/apache/cloudstack/api/command/user/resource/GetCloudIdentifierCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/resource/GetCloudIdentifierCmd.java @@ -29,7 +29,7 @@ import org.apache.cloudstack.api.response.CloudIdentifierResponse; import org.apache.cloudstack.api.response.UserResponse; import com.cloud.user.Account; -@APICommand(description="Retrieves a cloud identifier.", responseObject=CloudIdentifierResponse.class) +@APICommand(name = "getCloudIdentifier", description="Retrieves a cloud identifier.", responseObject=CloudIdentifierResponse.class) public class GetCloudIdentifierCmd extends BaseCmd { public static final Logger s_logger = Logger.getLogger(GetCloudIdentifierCmd.class.getName()); private static final String s_name = "getcloudidentifierresponse"; diff --git a/api/src/org/apache/cloudstack/api/command/user/resource/ListHypervisorsCmd.java b/api/src/org/apache/cloudstack/api/command/user/resource/ListHypervisorsCmd.java index 4c77d09a67e..c1e29d3f37e 100644 --- a/api/src/org/apache/cloudstack/api/command/user/resource/ListHypervisorsCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/resource/ListHypervisorsCmd.java @@ -31,7 +31,7 @@ import org.apache.cloudstack.api.response.ListResponse; import org.apache.cloudstack.api.response.ZoneResponse; import com.cloud.user.Account; -@APICommand(description = "List hypervisors", responseObject = HypervisorResponse.class) +@APICommand(name = "listHypervisors", description = "List hypervisors", responseObject = HypervisorResponse.class) public class ListHypervisorsCmd extends BaseCmd { public static final Logger s_logger = Logger.getLogger(UpgradeRouterCmd.class.getName()); private static final String s_name = "listhypervisorsresponse"; diff --git a/api/src/org/apache/cloudstack/api/command/user/resource/ListResourceLimitsCmd.java b/api/src/org/apache/cloudstack/api/command/user/resource/ListResourceLimitsCmd.java index 25840ef2b75..12a8494bde8 100644 --- a/api/src/org/apache/cloudstack/api/command/user/resource/ListResourceLimitsCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/resource/ListResourceLimitsCmd.java @@ -29,7 +29,7 @@ import org.apache.cloudstack.api.response.ListResponse; import org.apache.cloudstack.api.response.ResourceLimitResponse; import com.cloud.configuration.ResourceLimit; -@APICommand(description="Lists resource limits.", responseObject=ResourceLimitResponse.class) +@APICommand(name = "listResourceLimits", description="Lists resource limits.", responseObject=ResourceLimitResponse.class) public class ListResourceLimitsCmd extends BaseListProjectAndAccountResourcesCmd { public static final Logger s_logger = Logger.getLogger(ListResourceLimitsCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/user/resource/UpdateResourceCountCmd.java b/api/src/org/apache/cloudstack/api/command/user/resource/UpdateResourceCountCmd.java index 9677abf23a0..d2b6870f0ca 100644 --- a/api/src/org/apache/cloudstack/api/command/user/resource/UpdateResourceCountCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/resource/UpdateResourceCountCmd.java @@ -31,7 +31,7 @@ import com.cloud.configuration.ResourceCount; import com.cloud.user.Account; import com.cloud.user.UserContext; -@APICommand(description="Recalculate and update resource count for an account or domain.", responseObject=ResourceCountResponse.class) +@APICommand(name = "updateResourceCount", description="Recalculate and update resource count for an account or domain.", responseObject=ResourceCountResponse.class) public class UpdateResourceCountCmd extends BaseCmd { public static final Logger s_logger = Logger.getLogger(UpdateResourceCountCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/user/resource/UpdateResourceLimitCmd.java b/api/src/org/apache/cloudstack/api/command/user/resource/UpdateResourceLimitCmd.java index accb13a091a..262d12dc264 100644 --- a/api/src/org/apache/cloudstack/api/command/user/resource/UpdateResourceLimitCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/resource/UpdateResourceLimitCmd.java @@ -26,7 +26,7 @@ import org.apache.cloudstack.api.response.ResourceLimitResponse; import com.cloud.configuration.ResourceLimit; import com.cloud.user.UserContext; -@APICommand(description="Updates resource limits for an account or domain.", responseObject=ResourceLimitResponse.class) +@APICommand(name = "updateResourceLimit", description="Updates resource limits for an account or domain.", responseObject=ResourceLimitResponse.class) public class UpdateResourceLimitCmd extends BaseCmd { public static final Logger s_logger = Logger.getLogger(UpdateResourceLimitCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/user/securitygroup/AuthorizeSecurityGroupEgressCmd.java b/api/src/org/apache/cloudstack/api/command/user/securitygroup/AuthorizeSecurityGroupEgressCmd.java index 46f098e76a7..acafcbe19a9 100644 --- a/api/src/org/apache/cloudstack/api/command/user/securitygroup/AuthorizeSecurityGroupEgressCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/securitygroup/AuthorizeSecurityGroupEgressCmd.java @@ -36,7 +36,7 @@ import com.cloud.network.security.SecurityRule; import com.cloud.user.UserContext; import com.cloud.utils.StringUtils; -@APICommand(responseObject = SecurityGroupRuleResponse.class, description = "Authorizes a particular egress rule for this security group", since="3.0.0") +@APICommand(name = "authorizeSecurityGroupEgress", responseObject = SecurityGroupRuleResponse.class, description = "Authorizes a particular egress rule for this security group", since="3.0.0") @SuppressWarnings("rawtypes") public class AuthorizeSecurityGroupEgressCmd extends BaseAsyncCmd { public static final Logger s_logger = Logger.getLogger(AuthorizeSecurityGroupIngressCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/user/securitygroup/AuthorizeSecurityGroupIngressCmd.java b/api/src/org/apache/cloudstack/api/command/user/securitygroup/AuthorizeSecurityGroupIngressCmd.java index e46577d2fe5..abd20fcc81d 100644 --- a/api/src/org/apache/cloudstack/api/command/user/securitygroup/AuthorizeSecurityGroupIngressCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/securitygroup/AuthorizeSecurityGroupIngressCmd.java @@ -42,7 +42,7 @@ import com.cloud.user.UserContext; import com.cloud.utils.StringUtils; import com.cloud.utils.net.NetUtils; -@APICommand(responseObject = SecurityGroupRuleResponse.class, description = "Authorizes a particular ingress rule for this security group") +@APICommand(name = "authorizeSecurityGroupIngress", responseObject = SecurityGroupRuleResponse.class, description = "Authorizes a particular ingress rule for this security group") @SuppressWarnings("rawtypes") public class AuthorizeSecurityGroupIngressCmd extends BaseAsyncCmd { public static final Logger s_logger = Logger.getLogger(AuthorizeSecurityGroupIngressCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/user/securitygroup/CreateSecurityGroupCmd.java b/api/src/org/apache/cloudstack/api/command/user/securitygroup/CreateSecurityGroupCmd.java index ee1f9eabb0d..c494355e15e 100644 --- a/api/src/org/apache/cloudstack/api/command/user/securitygroup/CreateSecurityGroupCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/securitygroup/CreateSecurityGroupCmd.java @@ -30,7 +30,7 @@ import com.cloud.network.security.SecurityGroup; import com.cloud.user.Account; import com.cloud.user.UserContext; -@APICommand(responseObject = SecurityGroupResponse.class, description = "Creates a security group") +@APICommand(name = "createSecurityGroup", responseObject = SecurityGroupResponse.class, description = "Creates a security group") public class CreateSecurityGroupCmd extends BaseCmd { public static final Logger s_logger = Logger.getLogger(CreateSecurityGroupCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/user/securitygroup/DeleteSecurityGroupCmd.java b/api/src/org/apache/cloudstack/api/command/user/securitygroup/DeleteSecurityGroupCmd.java index c06929a18a5..15a00253b63 100644 --- a/api/src/org/apache/cloudstack/api/command/user/securitygroup/DeleteSecurityGroupCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/securitygroup/DeleteSecurityGroupCmd.java @@ -31,7 +31,7 @@ import com.cloud.exception.InvalidParameterValueException; import com.cloud.exception.ResourceInUseException; import com.cloud.user.UserContext; -@APICommand(description="Deletes security group", responseObject=SuccessResponse.class) +@APICommand(name = "deleteSecurityGroup", description="Deletes security group", responseObject=SuccessResponse.class) public class DeleteSecurityGroupCmd extends BaseCmd { public static final Logger s_logger = Logger.getLogger(DeleteSecurityGroupCmd.class.getName()); private static final String s_name = "deletesecuritygroupresponse"; diff --git a/api/src/org/apache/cloudstack/api/command/user/securitygroup/ListSecurityGroupsCmd.java b/api/src/org/apache/cloudstack/api/command/user/securitygroup/ListSecurityGroupsCmd.java index b13ce278edf..cf1ab84bad0 100644 --- a/api/src/org/apache/cloudstack/api/command/user/securitygroup/ListSecurityGroupsCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/securitygroup/ListSecurityGroupsCmd.java @@ -28,7 +28,7 @@ import org.apache.cloudstack.api.response.UserVmResponse; import com.cloud.async.AsyncJob; -@APICommand(description="Lists security groups", responseObject=SecurityGroupResponse.class) +@APICommand(name = "listSecurityGroups", description="Lists security groups", responseObject=SecurityGroupResponse.class) public class ListSecurityGroupsCmd extends BaseListTaggedResourcesCmd { public static final Logger s_logger = Logger.getLogger(ListSecurityGroupsCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/user/securitygroup/RevokeSecurityGroupEgressCmd.java b/api/src/org/apache/cloudstack/api/command/user/securitygroup/RevokeSecurityGroupEgressCmd.java index 71e1abca50a..53d8fcf59c7 100644 --- a/api/src/org/apache/cloudstack/api/command/user/securitygroup/RevokeSecurityGroupEgressCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/securitygroup/RevokeSecurityGroupEgressCmd.java @@ -27,7 +27,7 @@ import com.cloud.event.EventTypes; import com.cloud.network.security.SecurityGroup; import com.cloud.user.Account; -@APICommand(responseObject = SuccessResponse.class, description = "Deletes a particular egress rule from this security group", since="3.0.0") +@APICommand(name = "revokeSecurityGroupEgress", responseObject = SuccessResponse.class, description = "Deletes a particular egress rule from this security group", since="3.0.0") public class RevokeSecurityGroupEgressCmd extends BaseAsyncCmd { public static final Logger s_logger = Logger.getLogger(RevokeSecurityGroupEgressCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/user/securitygroup/RevokeSecurityGroupIngressCmd.java b/api/src/org/apache/cloudstack/api/command/user/securitygroup/RevokeSecurityGroupIngressCmd.java index 488520d6b13..1f56dee9bca 100644 --- a/api/src/org/apache/cloudstack/api/command/user/securitygroup/RevokeSecurityGroupIngressCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/securitygroup/RevokeSecurityGroupIngressCmd.java @@ -31,7 +31,7 @@ import com.cloud.event.EventTypes; import com.cloud.network.security.SecurityGroup; import com.cloud.user.Account; -@APICommand(responseObject = SuccessResponse.class, description = "Deletes a particular ingress rule from this security group") +@APICommand(name = "revokeSecurityGroupIngress", responseObject = SuccessResponse.class, description = "Deletes a particular ingress rule from this security group") public class RevokeSecurityGroupIngressCmd extends BaseAsyncCmd { public static final Logger s_logger = Logger.getLogger(RevokeSecurityGroupIngressCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/user/snapshot/CreateSnapshotCmd.java b/api/src/org/apache/cloudstack/api/command/user/snapshot/CreateSnapshotCmd.java index aceab2c23a0..33469ac4882 100644 --- a/api/src/org/apache/cloudstack/api/command/user/snapshot/CreateSnapshotCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/snapshot/CreateSnapshotCmd.java @@ -35,7 +35,7 @@ import com.cloud.storage.Volume; import com.cloud.user.Account; import com.cloud.user.UserContext; -@APICommand(description = "Creates an instant snapshot of a volume.", responseObject = SnapshotResponse.class) +@APICommand(name = "createSnapshot", description = "Creates an instant snapshot of a volume.", responseObject = SnapshotResponse.class) public class CreateSnapshotCmd extends BaseAsyncCreateCmd { public static final Logger s_logger = Logger.getLogger(CreateSnapshotCmd.class.getName()); private static final String s_name = "createsnapshotresponse"; diff --git a/api/src/org/apache/cloudstack/api/command/user/snapshot/CreateSnapshotPolicyCmd.java b/api/src/org/apache/cloudstack/api/command/user/snapshot/CreateSnapshotPolicyCmd.java index 703925ed42a..cafb79e0523 100644 --- a/api/src/org/apache/cloudstack/api/command/user/snapshot/CreateSnapshotPolicyCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/snapshot/CreateSnapshotPolicyCmd.java @@ -29,7 +29,7 @@ import com.cloud.storage.Volume; import com.cloud.storage.snapshot.SnapshotPolicy; import com.cloud.user.Account; -@APICommand(description="Creates a snapshot policy for the account.", responseObject=SnapshotPolicyResponse.class) +@APICommand(name = "createSnapshotPolicy", description="Creates a snapshot policy for the account.", responseObject=SnapshotPolicyResponse.class) public class CreateSnapshotPolicyCmd extends BaseCmd { public static final Logger s_logger = Logger.getLogger(CreateSnapshotPolicyCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/user/snapshot/DeleteSnapshotCmd.java b/api/src/org/apache/cloudstack/api/command/user/snapshot/DeleteSnapshotCmd.java index 8e8edb582c0..6def8730cbd 100644 --- a/api/src/org/apache/cloudstack/api/command/user/snapshot/DeleteSnapshotCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/snapshot/DeleteSnapshotCmd.java @@ -28,7 +28,7 @@ import com.cloud.storage.Snapshot; import com.cloud.user.Account; import com.cloud.user.UserContext; -@APICommand(description="Deletes a snapshot of a disk volume.", responseObject=SuccessResponse.class) +@APICommand(name = "deleteSnapshot", description="Deletes a snapshot of a disk volume.", responseObject=SuccessResponse.class) public class DeleteSnapshotCmd extends BaseAsyncCmd { public static final Logger s_logger = Logger.getLogger(DeleteSnapshotCmd.class.getName()); private static final String s_name = "deletesnapshotresponse"; diff --git a/api/src/org/apache/cloudstack/api/command/user/snapshot/DeleteSnapshotPoliciesCmd.java b/api/src/org/apache/cloudstack/api/command/user/snapshot/DeleteSnapshotPoliciesCmd.java index 7bfb546ea7d..17f28d931ea 100644 --- a/api/src/org/apache/cloudstack/api/command/user/snapshot/DeleteSnapshotPoliciesCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/snapshot/DeleteSnapshotPoliciesCmd.java @@ -29,7 +29,7 @@ import org.apache.cloudstack.api.response.SnapshotPolicyResponse; import org.apache.cloudstack.api.response.SuccessResponse; import com.cloud.user.Account; -@APICommand(description="Deletes snapshot policies for the account.", responseObject=SuccessResponse.class) +@APICommand(name = "deleteSnapshotPolicies", description="Deletes snapshot policies for the account.", responseObject=SuccessResponse.class) public class DeleteSnapshotPoliciesCmd extends BaseCmd { public static final Logger s_logger = Logger.getLogger(DeleteSnapshotPoliciesCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/user/snapshot/ListSnapshotPoliciesCmd.java b/api/src/org/apache/cloudstack/api/command/user/snapshot/ListSnapshotPoliciesCmd.java index d16b730e4b3..647c503a445 100644 --- a/api/src/org/apache/cloudstack/api/command/user/snapshot/ListSnapshotPoliciesCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/snapshot/ListSnapshotPoliciesCmd.java @@ -30,7 +30,7 @@ import org.apache.cloudstack.api.response.SnapshotPolicyResponse; import org.apache.cloudstack.api.response.VolumeResponse; import com.cloud.storage.snapshot.SnapshotPolicy; -@APICommand(description="Lists snapshot policies.", responseObject=SnapshotPolicyResponse.class) +@APICommand(name = "listSnapshotPolicies", description="Lists snapshot policies.", responseObject=SnapshotPolicyResponse.class) public class ListSnapshotPoliciesCmd extends BaseListCmd { public static final Logger s_logger = Logger.getLogger(ListSnapshotPoliciesCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/user/snapshot/ListSnapshotsCmd.java b/api/src/org/apache/cloudstack/api/command/user/snapshot/ListSnapshotsCmd.java index 5de186f743c..5c6e79c9170 100644 --- a/api/src/org/apache/cloudstack/api/command/user/snapshot/ListSnapshotsCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/snapshot/ListSnapshotsCmd.java @@ -32,7 +32,7 @@ import com.cloud.async.AsyncJob; import com.cloud.storage.Snapshot; import com.cloud.utils.Pair; -@APICommand(description="Lists all available snapshots for the account.", responseObject=SnapshotResponse.class) +@APICommand(name = "listSnapshots", description="Lists all available snapshots for the account.", responseObject=SnapshotResponse.class) public class ListSnapshotsCmd extends BaseListTaggedResourcesCmd { public static final Logger s_logger = Logger.getLogger(ListSnapshotsCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/user/ssh/CreateSSHKeyPairCmd.java b/api/src/org/apache/cloudstack/api/command/user/ssh/CreateSSHKeyPairCmd.java index fa406303e87..bade8572f82 100644 --- a/api/src/org/apache/cloudstack/api/command/user/ssh/CreateSSHKeyPairCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/ssh/CreateSSHKeyPairCmd.java @@ -28,7 +28,7 @@ import org.apache.cloudstack.api.response.SSHKeyPairResponse; import com.cloud.user.SSHKeyPair; import com.cloud.user.UserContext; -@APICommand(description="Create a new keypair and returns the private key", responseObject=SSHKeyPairResponse.class) +@APICommand(name = "createSSHKeyPair", description="Create a new keypair and returns the private key", responseObject=SSHKeyPairResponse.class) public class CreateSSHKeyPairCmd extends BaseCmd { public static final Logger s_logger = Logger.getLogger(CreateSSHKeyPairCmd.class.getName()); private static final String s_name = "createsshkeypairresponse"; diff --git a/api/src/org/apache/cloudstack/api/command/user/ssh/DeleteSSHKeyPairCmd.java b/api/src/org/apache/cloudstack/api/command/user/ssh/DeleteSSHKeyPairCmd.java index ba30e54fec2..9b6d403f48e 100644 --- a/api/src/org/apache/cloudstack/api/command/user/ssh/DeleteSSHKeyPairCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/ssh/DeleteSSHKeyPairCmd.java @@ -28,7 +28,7 @@ import org.apache.cloudstack.api.response.SuccessResponse; import com.cloud.user.Account; import com.cloud.user.UserContext; -@APICommand(description="Deletes a keypair by name", responseObject=SuccessResponse.class) +@APICommand(name = "deleteSSHKeyPair", description="Deletes a keypair by name", responseObject=SuccessResponse.class) public class DeleteSSHKeyPairCmd extends BaseCmd { public static final Logger s_logger = Logger.getLogger(CreateSSHKeyPairCmd.class.getName()); private static final String s_name = "deletesshkeypairresponse"; diff --git a/api/src/org/apache/cloudstack/api/command/user/ssh/ListSSHKeyPairsCmd.java b/api/src/org/apache/cloudstack/api/command/user/ssh/ListSSHKeyPairsCmd.java index 4e86e71b53b..27013dfd5f6 100644 --- a/api/src/org/apache/cloudstack/api/command/user/ssh/ListSSHKeyPairsCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/ssh/ListSSHKeyPairsCmd.java @@ -30,7 +30,7 @@ import org.apache.cloudstack.api.response.SSHKeyPairResponse; import com.cloud.user.SSHKeyPair; import com.cloud.utils.Pair; -@APICommand(description="List registered keypairs", responseObject=SSHKeyPairResponse.class) +@APICommand(name = "listSSHKeyPairs", description="List registered keypairs", responseObject=SSHKeyPairResponse.class) public class ListSSHKeyPairsCmd extends BaseListProjectAndAccountResourcesCmd { public static final Logger s_logger = Logger.getLogger(ListSSHKeyPairsCmd.class.getName()); private static final String s_name = "listsshkeypairsresponse"; diff --git a/api/src/org/apache/cloudstack/api/command/user/ssh/RegisterSSHKeyPairCmd.java b/api/src/org/apache/cloudstack/api/command/user/ssh/RegisterSSHKeyPairCmd.java index ed242135726..2f08692f09b 100644 --- a/api/src/org/apache/cloudstack/api/command/user/ssh/RegisterSSHKeyPairCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/ssh/RegisterSSHKeyPairCmd.java @@ -28,7 +28,7 @@ import org.apache.cloudstack.api.response.SSHKeyPairResponse; import com.cloud.user.SSHKeyPair; import com.cloud.user.UserContext; -@APICommand(description="Register a public key in a keypair under a certain name", responseObject=SSHKeyPairResponse.class) +@APICommand(name = "registerSSHKeyPair", description="Register a public key in a keypair under a certain name", responseObject=SSHKeyPairResponse.class) public class RegisterSSHKeyPairCmd extends BaseCmd { public static final Logger s_logger = Logger.getLogger(RegisterSSHKeyPairCmd.class.getName()); private static final String s_name = "registersshkeypairresponse"; diff --git a/api/src/org/apache/cloudstack/api/command/user/tag/CreateTagsCmd.java b/api/src/org/apache/cloudstack/api/command/user/tag/CreateTagsCmd.java index 602c4e77567..54338bd24e2 100644 --- a/api/src/org/apache/cloudstack/api/command/user/tag/CreateTagsCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/tag/CreateTagsCmd.java @@ -35,7 +35,7 @@ import org.apache.cloudstack.api.response.SuccessResponse; import com.cloud.event.EventTypes; import com.cloud.server.ResourceTag; import com.cloud.server.ResourceTag.TaggedResourceType; -@APICommand(description = "Creates resource tag(s)", responseObject = SuccessResponse.class, since = "Burbank") +@APICommand(name = "createTags", description = "Creates resource tag(s)", responseObject = SuccessResponse.class, since = "Burbank") public class CreateTagsCmd extends BaseAsyncCmd{ public static final Logger s_logger = Logger.getLogger(CreateTagsCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/user/tag/DeleteTagsCmd.java b/api/src/org/apache/cloudstack/api/command/user/tag/DeleteTagsCmd.java index ecb3a66ef30..cf2ea9ec1cb 100644 --- a/api/src/org/apache/cloudstack/api/command/user/tag/DeleteTagsCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/tag/DeleteTagsCmd.java @@ -34,7 +34,7 @@ import org.apache.cloudstack.api.ServerApiException; import org.apache.cloudstack.api.response.SuccessResponse; import com.cloud.event.EventTypes; import com.cloud.server.ResourceTag.TaggedResourceType; -@APICommand(description = "Deleting resource tag(s)", responseObject = SuccessResponse.class, since = "Burbank") +@APICommand(name = "deleteTags", description = "Deleting resource tag(s)", responseObject = SuccessResponse.class, since = "Burbank") public class DeleteTagsCmd extends BaseAsyncCmd{ public static final Logger s_logger = Logger.getLogger(DeleteTagsCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/user/tag/ListTagsCmd.java b/api/src/org/apache/cloudstack/api/command/user/tag/ListTagsCmd.java index 4b1dedd3da1..e3dc108a757 100644 --- a/api/src/org/apache/cloudstack/api/command/user/tag/ListTagsCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/tag/ListTagsCmd.java @@ -24,7 +24,7 @@ import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.response.ListResponse; import org.apache.cloudstack.api.response.ResourceTagResponse; -@APICommand(description = "List resource tag(s)", responseObject = ResourceTagResponse.class, since = "Burbank") +@APICommand(name = "listTags", description = "List resource tag(s)", responseObject = ResourceTagResponse.class, since = "Burbank") public class ListTagsCmd extends BaseListProjectAndAccountResourcesCmd{ private static final String s_name = "listtagsresponse"; diff --git a/api/src/org/apache/cloudstack/api/command/user/template/CopyTemplateCmd.java b/api/src/org/apache/cloudstack/api/command/user/template/CopyTemplateCmd.java index b44abd1d040..3b24ba1920a 100644 --- a/api/src/org/apache/cloudstack/api/command/user/template/CopyTemplateCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/template/CopyTemplateCmd.java @@ -37,7 +37,7 @@ import com.cloud.template.VirtualMachineTemplate; import com.cloud.user.Account; import com.cloud.user.UserContext; -@APICommand(description="Copies a template from one zone to another.", responseObject=TemplateResponse.class) +@APICommand(name = "copyIso", name = "copyTemplate", description="Copies a template from one zone to another.", responseObject=TemplateResponse.class) public class CopyTemplateCmd extends BaseAsyncCmd { public static final Logger s_logger = Logger.getLogger(CopyTemplateCmd.class.getName()); private static final String s_name = "copytemplateresponse"; diff --git a/api/src/org/apache/cloudstack/api/command/user/template/CreateTemplateCmd.java b/api/src/org/apache/cloudstack/api/command/user/template/CreateTemplateCmd.java index 6fed5dea965..65cc8b9e9a4 100644 --- a/api/src/org/apache/cloudstack/api/command/user/template/CreateTemplateCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/template/CreateTemplateCmd.java @@ -42,7 +42,7 @@ import com.cloud.template.VirtualMachineTemplate; import com.cloud.user.Account; import com.cloud.user.UserContext; -@APICommand(responseObject = StoragePoolResponse.class, description = "Creates a template of a virtual machine. " + "The virtual machine must be in a STOPPED state. " +@APICommand(name = "createTemplate", responseObject = StoragePoolResponse.class, description = "Creates a template of a virtual machine. " + "The virtual machine must be in a STOPPED state. " + "A template created from this command is automatically designated as a private template visible to the account that created it.") public class CreateTemplateCmd extends BaseAsyncCreateCmd { public static final Logger s_logger = Logger.getLogger(CreateTemplateCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/user/template/DeleteTemplateCmd.java b/api/src/org/apache/cloudstack/api/command/user/template/DeleteTemplateCmd.java index ba7b8235d5f..26f3e841f68 100644 --- a/api/src/org/apache/cloudstack/api/command/user/template/DeleteTemplateCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/template/DeleteTemplateCmd.java @@ -29,7 +29,7 @@ import com.cloud.template.VirtualMachineTemplate; import com.cloud.user.Account; import com.cloud.user.UserContext; -@APICommand(responseObject=SuccessResponse.class, description="Deletes a template from the system. All virtual machines using the deleted template will not be affected.") +@APICommand(name = "deleteTemplate", responseObject=SuccessResponse.class, description="Deletes a template from the system. All virtual machines using the deleted template will not be affected.") public class DeleteTemplateCmd extends BaseAsyncCmd { public static final Logger s_logger = Logger.getLogger(DeleteTemplateCmd.class.getName()); private static final String s_name = "deletetemplateresponse"; diff --git a/api/src/org/apache/cloudstack/api/command/user/template/ExtractTemplateCmd.java b/api/src/org/apache/cloudstack/api/command/user/template/ExtractTemplateCmd.java index 28bc39c1acc..521293cb275 100644 --- a/api/src/org/apache/cloudstack/api/command/user/template/ExtractTemplateCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/template/ExtractTemplateCmd.java @@ -30,7 +30,7 @@ import com.cloud.template.VirtualMachineTemplate; import com.cloud.user.Account; import com.cloud.user.UserContext; -@APICommand(description="Extracts a template", responseObject=ExtractResponse.class) +@APICommand(name = "extractTemplate", description="Extracts a template", responseObject=ExtractResponse.class) public class ExtractTemplateCmd extends BaseAsyncCmd { public static final Logger s_logger = Logger.getLogger(ExtractTemplateCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/user/template/ListTemplatePermissionsCmd.java b/api/src/org/apache/cloudstack/api/command/user/template/ListTemplatePermissionsCmd.java index cd38215ca4f..7c489b2d6d5 100644 --- a/api/src/org/apache/cloudstack/api/command/user/template/ListTemplatePermissionsCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/template/ListTemplatePermissionsCmd.java @@ -1,4 +1,4 @@ -// Licensed to the Apache Software Foundation (ASF) under one +// Licensedname = "listTemplatePermissions", 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 diff --git a/api/src/org/apache/cloudstack/api/command/user/template/ListTemplatesCmd.java b/api/src/org/apache/cloudstack/api/command/user/template/ListTemplatesCmd.java index 1e0d19bb737..90ca8bc7c0e 100644 --- a/api/src/org/apache/cloudstack/api/command/user/template/ListTemplatesCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/template/ListTemplatesCmd.java @@ -37,7 +37,7 @@ import com.cloud.user.Account; import com.cloud.user.UserContext; import com.cloud.utils.Pair; -@APICommand(description="List all public, private, and privileged templates.", responseObject=TemplateResponse.class) +@APICommand(name = "listTemplates", description="List all public, private, and privileged templates.", responseObject=TemplateResponse.class) public class ListTemplatesCmd extends BaseListTaggedResourcesCmd { public static final Logger s_logger = Logger.getLogger(ListTemplatesCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/user/template/RegisterTemplateCmd.java b/api/src/org/apache/cloudstack/api/command/user/template/RegisterTemplateCmd.java index 1a080888925..b3677b9d3a1 100644 --- a/api/src/org/apache/cloudstack/api/command/user/template/RegisterTemplateCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/template/RegisterTemplateCmd.java @@ -39,7 +39,7 @@ import com.cloud.exception.ResourceAllocationException; import com.cloud.template.VirtualMachineTemplate; import com.cloud.user.UserContext; -@APICommand(description="Registers an existing template into the CloudStack cloud. ", responseObject=TemplateResponse.class) +@APICommand(name = "registerTemplate", description="Registers an existing template into the CloudStack cloud. ", responseObject=TemplateResponse.class) public class RegisterTemplateCmd extends BaseCmd { public static final Logger s_logger = Logger.getLogger(RegisterTemplateCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/user/template/UpdateTemplateCmd.java b/api/src/org/apache/cloudstack/api/command/user/template/UpdateTemplateCmd.java index a5dc4cfdac8..31f375bd41b 100644 --- a/api/src/org/apache/cloudstack/api/command/user/template/UpdateTemplateCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/template/UpdateTemplateCmd.java @@ -26,7 +26,7 @@ import org.apache.cloudstack.api.response.TemplateResponse; import com.cloud.template.VirtualMachineTemplate; import com.cloud.user.Account; -@APICommand(description="Updates attributes of a template.", responseObject=TemplateResponse.class) +@APICommand(name = "updateTemplate", description="Updates attributes of a template.", responseObject=TemplateResponse.class) public class UpdateTemplateCmd extends UpdateTemplateOrIsoCmd { public static final Logger s_logger = Logger.getLogger(UpdateTemplateCmd.class.getName()); private static final String s_name = "updatetemplateresponse"; diff --git a/api/src/org/apache/cloudstack/api/command/user/template/UpdateTemplatePermissionsCmd.java b/api/src/org/apache/cloudstack/api/command/user/template/UpdateTemplatePermissionsCmd.java index d7a4ecf0d7a..184cabe481f 100644 --- a/api/src/org/apache/cloudstack/api/command/user/template/UpdateTemplatePermissionsCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/template/UpdateTemplatePermissionsCmd.java @@ -24,7 +24,7 @@ import org.apache.cloudstack.api.response.SuccessResponse; import com.cloud.template.VirtualMachineTemplate; import com.cloud.user.Account; -@APICommand(responseObject=SuccessResponse.class, description="Updates a template visibility permissions. " + +@APICommand(name = "updateTemplatePermissions", responseObject=SuccessResponse.class, description="Updates a template visibility permissions. " + "A public template is visible to all accounts within the same domain. " + "A private template is visible only to the owner of the template. " + "A priviledged template is a private template with account permissions added. " + diff --git a/api/src/org/apache/cloudstack/api/command/user/vm/DeployVMCmd.java b/api/src/org/apache/cloudstack/api/command/user/vm/DeployVMCmd.java index e2e09e0e1ca..d08234f8ee3 100644 --- a/api/src/org/apache/cloudstack/api/command/user/vm/DeployVMCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vm/DeployVMCmd.java @@ -59,7 +59,7 @@ import com.cloud.user.UserContext; import com.cloud.uservm.UserVm; -@APICommand(description="Creates and automatically starts a virtual machine based on a service offering, disk offering, and template.", responseObject=UserVmResponse.class) +@APICommand(name = "deployVirtualMachine", description="Creates and automatically starts a virtual machine based on a service offering, disk offering, and template.", responseObject=UserVmResponse.class) public class DeployVMCmd extends BaseAsyncCreateCmd { public static final Logger s_logger = Logger.getLogger(DeployVMCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/user/vm/DestroyVMCmd.java b/api/src/org/apache/cloudstack/api/command/user/vm/DestroyVMCmd.java index a58424896f7..db830d1a188 100644 --- a/api/src/org/apache/cloudstack/api/command/user/vm/DestroyVMCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vm/DestroyVMCmd.java @@ -30,7 +30,7 @@ import com.cloud.user.Account; import com.cloud.user.UserContext; import com.cloud.uservm.UserVm; -@APICommand(description="Destroys a virtual machine. Once destroyed, only the administrator can recover it.", responseObject=UserVmResponse.class) +@APICommand(name = "destroyVirtualMachine", description="Destroys a virtual machine. Once destroyed, only the administrator can recover it.", responseObject=UserVmResponse.class) public class DestroyVMCmd extends BaseAsyncCmd { public static final Logger s_logger = Logger.getLogger(DestroyVMCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/user/vm/GetVMPasswordCmd.java b/api/src/org/apache/cloudstack/api/command/user/vm/GetVMPasswordCmd.java index caae1868774..cd3a5609d8c 100644 --- a/api/src/org/apache/cloudstack/api/command/user/vm/GetVMPasswordCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vm/GetVMPasswordCmd.java @@ -29,7 +29,7 @@ import org.apache.cloudstack.api.response.UserVmResponse; import com.cloud.user.Account; import com.cloud.uservm.UserVm; -@APICommand(responseObject=GetVMPasswordResponse.class, description="Returns an encrypted password for the VM") +@APICommand(name = "getVMPassword", responseObject=GetVMPasswordResponse.class, description="Returns an encrypted password for the VM") public class GetVMPasswordCmd extends BaseCmd { public static final Logger s_logger = Logger.getLogger(GetVMPasswordCmd.class.getName()); private static final String s_name = "getvmpasswordresponse"; diff --git a/api/src/org/apache/cloudstack/api/command/user/vm/ListVMsCmd.java b/api/src/org/apache/cloudstack/api/command/user/vm/ListVMsCmd.java index fe5e4dd82e8..b74c8e70f13 100644 --- a/api/src/org/apache/cloudstack/api/command/user/vm/ListVMsCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vm/ListVMsCmd.java @@ -44,7 +44,7 @@ import com.cloud.async.AsyncJob; import com.cloud.exception.InvalidParameterValueException; -@APICommand(description="List the virtual machines owned by the account.", responseObject=UserVmResponse.class) +@APICommand(name = "listVirtualMachines", description="List the virtual machines owned by the account.", responseObject=UserVmResponse.class) public class ListVMsCmd extends BaseListTaggedResourcesCmd { public static final Logger s_logger = Logger.getLogger(ListVMsCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/user/vm/RebootVMCmd.java b/api/src/org/apache/cloudstack/api/command/user/vm/RebootVMCmd.java index 505bccfa7a3..45ebc287913 100644 --- a/api/src/org/apache/cloudstack/api/command/user/vm/RebootVMCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vm/RebootVMCmd.java @@ -34,7 +34,7 @@ import com.cloud.user.Account; import com.cloud.user.UserContext; import com.cloud.uservm.UserVm; -@APICommand(description="Reboots a virtual machine.", responseObject=UserVmResponse.class) +@APICommand(name = "rebootVirtualMachine", description="Reboots a virtual machine.", responseObject=UserVmResponse.class) public class RebootVMCmd extends BaseAsyncCmd { public static final Logger s_logger = Logger.getLogger(RebootVMCmd.class.getName()); private static final String s_name = "rebootvirtualmachineresponse"; diff --git a/api/src/org/apache/cloudstack/api/command/user/vm/ResetVMPasswordCmd.java b/api/src/org/apache/cloudstack/api/command/user/vm/ResetVMPasswordCmd.java index 53705a072de..a4c2b3772e9 100644 --- a/api/src/org/apache/cloudstack/api/command/user/vm/ResetVMPasswordCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vm/ResetVMPasswordCmd.java @@ -33,7 +33,7 @@ import com.cloud.user.Account; import com.cloud.user.UserContext; import com.cloud.uservm.UserVm; -@APICommand(responseObject=UserVmResponse.class, description="Resets the password for virtual machine. " + +@APICommand(name = "resetPasswordForVirtualMachine", responseObject=UserVmResponse.class, description="Resets the password for virtual machine. " + "The virtual machine must be in a \"Stopped\" state and the template must already " + "support this feature for this command to take effect. [async]") public class ResetVMPasswordCmd extends BaseAsyncCmd { diff --git a/api/src/org/apache/cloudstack/api/command/user/vm/RestoreVMCmd.java b/api/src/org/apache/cloudstack/api/command/user/vm/RestoreVMCmd.java index 3c24e21eb26..9b2452e355d 100644 --- a/api/src/org/apache/cloudstack/api/command/user/vm/RestoreVMCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vm/RestoreVMCmd.java @@ -34,7 +34,7 @@ import com.cloud.user.Account; import com.cloud.user.UserContext; import com.cloud.uservm.UserVm; -@APICommand(description="Restore a VM to original template or specific snapshot", responseObject=UserVmResponse.class, since="3.0.0") +@APICommand(name = "restoreVirtualMachine", description="Restore a VM to original template or specific snapshot", responseObject=UserVmResponse.class, since="3.0.0") public class RestoreVMCmd extends BaseAsyncCmd { public static final Logger s_logger = Logger.getLogger(RestoreVMCmd.class); private static final String s_name = "restorevmresponse"; diff --git a/api/src/org/apache/cloudstack/api/command/user/vm/StartVMCmd.java b/api/src/org/apache/cloudstack/api/command/user/vm/StartVMCmd.java index fdf32ea244f..36199d13c24 100644 --- a/api/src/org/apache/cloudstack/api/command/user/vm/StartVMCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vm/StartVMCmd.java @@ -36,7 +36,7 @@ import com.cloud.user.UserContext; import com.cloud.uservm.UserVm; import com.cloud.utils.exception.ExecutionException; -@APICommand(responseObject = UserVmResponse.class, description = "Starts a virtual machine.") +@APICommand(name = "startVirtualMachine", responseObject = UserVmResponse.class, description = "Starts a virtual machine.") public class StartVMCmd extends BaseAsyncCmd { public static final Logger s_logger = Logger.getLogger(StartVMCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/user/vm/StopVMCmd.java b/api/src/org/apache/cloudstack/api/command/user/vm/StopVMCmd.java index dd07a1207c9..af3bbaab7aa 100644 --- a/api/src/org/apache/cloudstack/api/command/user/vm/StopVMCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vm/StopVMCmd.java @@ -29,7 +29,7 @@ import com.cloud.user.Account; import com.cloud.user.UserContext; import com.cloud.uservm.UserVm; -@APICommand(responseObject = UserVmResponse.class, description = "Stops a virtual machine.") +@APICommand(name = "stopVirtualMachine", responseObject = UserVmResponse.class, description = "Stops a virtual machine.") public class StopVMCmd extends BaseAsyncCmd { public static final Logger s_logger = Logger.getLogger(StopVMCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/user/vm/UpdateVMCmd.java b/api/src/org/apache/cloudstack/api/command/user/vm/UpdateVMCmd.java index 9cac1f0e441..7f1e7efdc1a 100644 --- a/api/src/org/apache/cloudstack/api/command/user/vm/UpdateVMCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vm/UpdateVMCmd.java @@ -33,7 +33,7 @@ import com.cloud.user.UserContext; import com.cloud.uservm.UserVm; -@APICommand(description="Updates properties of a virtual machine. The VM has to be stopped and restarted for the " + +@APICommand(name = "updateVirtualMachine", description="Updates properties of a virtual machine. The VM has to be stopped and restarted for the " + "new properties to take effect. UpdateVirtualMachine does not first check whether the VM is stopped. " + "Therefore, stop the VM manually before issuing this call.", responseObject=UserVmResponse.class) public class UpdateVMCmd extends BaseCmd{ diff --git a/api/src/org/apache/cloudstack/api/command/user/vm/UpgradeVMCmd.java b/api/src/org/apache/cloudstack/api/command/user/vm/UpgradeVMCmd.java index b9503b3d604..f2c3882bd3c 100644 --- a/api/src/org/apache/cloudstack/api/command/user/vm/UpgradeVMCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vm/UpgradeVMCmd.java @@ -29,7 +29,7 @@ import com.cloud.user.Account; import com.cloud.user.UserContext; import com.cloud.uservm.UserVm; -@APICommand(responseObject=UserVmResponse.class, description="Changes the service offering for a virtual machine. " + +@APICommand(name = "changeServiceForVirtualMachine", responseObject=UserVmResponse.class, description="Changes the service offering for a virtual machine. " + "The virtual machine must be in a \"Stopped\" state for " + "this command to take effect.") public class UpgradeVMCmd extends BaseCmd { diff --git a/api/src/org/apache/cloudstack/api/command/user/vmgroup/CreateVMGroupCmd.java b/api/src/org/apache/cloudstack/api/command/user/vmgroup/CreateVMGroupCmd.java index a9969b025f2..9c2c6027ac9 100644 --- a/api/src/org/apache/cloudstack/api/command/user/vmgroup/CreateVMGroupCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vmgroup/CreateVMGroupCmd.java @@ -27,7 +27,7 @@ import org.apache.cloudstack.api.response.ProjectAccountResponse; import com.cloud.user.UserContext; import com.cloud.vm.InstanceGroup; -@APICommand(description = "Creates a vm group", responseObject = InstanceGroupResponse.class) +@APICommand(name = "createInstanceGroup", description = "Creates a vm group", responseObject = InstanceGroupResponse.class) public class CreateVMGroupCmd extends BaseCmd { public static final Logger s_logger = Logger.getLogger(CreateVMGroupCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/user/vmgroup/DeleteVMGroupCmd.java b/api/src/org/apache/cloudstack/api/command/user/vmgroup/DeleteVMGroupCmd.java index 8bb7638a212..47c2f764db6 100644 --- a/api/src/org/apache/cloudstack/api/command/user/vmgroup/DeleteVMGroupCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vmgroup/DeleteVMGroupCmd.java @@ -26,7 +26,7 @@ import org.apache.cloudstack.api.response.SuccessResponse; import com.cloud.user.Account; import com.cloud.vm.InstanceGroup; -@APICommand(description="Deletes a vm group", responseObject=SuccessResponse.class) +@APICommand(name = "deleteInstanceGroup", description="Deletes a vm group", responseObject=SuccessResponse.class) public class DeleteVMGroupCmd extends BaseCmd{ public static final Logger s_logger = Logger.getLogger(DeleteVMGroupCmd.class.getName()); private static final String s_name = "deleteinstancegroupresponse"; diff --git a/api/src/org/apache/cloudstack/api/command/user/vmgroup/ListVMGroupsCmd.java b/api/src/org/apache/cloudstack/api/command/user/vmgroup/ListVMGroupsCmd.java index 0c8ea91b7d4..8a581b02e12 100644 --- a/api/src/org/apache/cloudstack/api/command/user/vmgroup/ListVMGroupsCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vmgroup/ListVMGroupsCmd.java @@ -25,7 +25,7 @@ import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.response.InstanceGroupResponse; import org.apache.cloudstack.api.response.ListResponse; -@APICommand(description="Lists vm groups", responseObject=InstanceGroupResponse.class) +@APICommand(name = "listInstanceGroups", description="Lists vm groups", responseObject=InstanceGroupResponse.class) public class ListVMGroupsCmd extends BaseListProjectAndAccountResourcesCmd { public static final Logger s_logger = Logger.getLogger(ListVMGroupsCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/user/vmgroup/UpdateVMGroupCmd.java b/api/src/org/apache/cloudstack/api/command/user/vmgroup/UpdateVMGroupCmd.java index 49c1b4984cc..09313c0f797 100644 --- a/api/src/org/apache/cloudstack/api/command/user/vmgroup/UpdateVMGroupCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vmgroup/UpdateVMGroupCmd.java @@ -24,7 +24,7 @@ import org.apache.cloudstack.api.response.InstanceGroupResponse; import com.cloud.user.Account; import com.cloud.vm.InstanceGroup; -@APICommand(description="Updates a vm group", responseObject=InstanceGroupResponse.class) +@APICommand(name = "updateInstanceGroup", description="Updates a vm group", responseObject=InstanceGroupResponse.class) public class UpdateVMGroupCmd extends BaseCmd{ private static final String s_name = "updateinstancegroupresponse"; diff --git a/api/src/org/apache/cloudstack/api/command/user/volume/AttachVolumeCmd.java b/api/src/org/apache/cloudstack/api/command/user/volume/AttachVolumeCmd.java index c839202bc9d..e48e4e43093 100644 --- a/api/src/org/apache/cloudstack/api/command/user/volume/AttachVolumeCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/volume/AttachVolumeCmd.java @@ -32,7 +32,7 @@ import com.cloud.storage.Volume; import com.cloud.user.Account; import com.cloud.user.UserContext; -@APICommand(description="Attaches a disk volume to a virtual machine.", responseObject=VolumeResponse.class) +@APICommand(name = "attachVolume", description="Attaches a disk volume to a virtual machine.", responseObject=VolumeResponse.class) public class AttachVolumeCmd extends BaseAsyncCmd { public static final Logger s_logger = Logger.getLogger(AttachVolumeCmd.class.getName()); private static final String s_name = "attachvolumeresponse"; diff --git a/api/src/org/apache/cloudstack/api/command/user/volume/CreateVolumeCmd.java b/api/src/org/apache/cloudstack/api/command/user/volume/CreateVolumeCmd.java index cf5cd2db996..512685f77f6 100644 --- a/api/src/org/apache/cloudstack/api/command/user/volume/CreateVolumeCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/volume/CreateVolumeCmd.java @@ -32,7 +32,7 @@ import com.cloud.storage.Snapshot; import com.cloud.storage.Volume; import com.cloud.user.UserContext; -@APICommand(responseObject=VolumeResponse.class, description="Creates a disk volume from a disk offering. This disk volume must still be attached to a virtual machine to make use of it.") +@APICommand(name = "createVolume", responseObject=VolumeResponse.class, description="Creates a disk volume from a disk offering. This disk volume must still be attached to a virtual machine to make use of it.") public class CreateVolumeCmd extends BaseAsyncCreateCmd { public static final Logger s_logger = Logger.getLogger(CreateVolumeCmd.class.getName()); private static final String s_name = "createvolumeresponse"; diff --git a/api/src/org/apache/cloudstack/api/command/user/volume/DeleteVolumeCmd.java b/api/src/org/apache/cloudstack/api/command/user/volume/DeleteVolumeCmd.java index 99837aec92d..2b2e94cab6b 100644 --- a/api/src/org/apache/cloudstack/api/command/user/volume/DeleteVolumeCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/volume/DeleteVolumeCmd.java @@ -30,7 +30,7 @@ import com.cloud.storage.Volume; import com.cloud.user.Account; import com.cloud.user.UserContext; -@APICommand(description="Deletes a detached disk volume.", responseObject=SuccessResponse.class) +@APICommand(name = "deleteVolume", description="Deletes a detached disk volume.", responseObject=SuccessResponse.class) public class DeleteVolumeCmd extends BaseCmd { public static final Logger s_logger = Logger.getLogger(DeleteVolumeCmd.class.getName()); private static final String s_name = "deletevolumeresponse"; diff --git a/api/src/org/apache/cloudstack/api/command/user/volume/DetachVolumeCmd.java b/api/src/org/apache/cloudstack/api/command/user/volume/DetachVolumeCmd.java index b4801fef8bd..c8ecddea699 100644 --- a/api/src/org/apache/cloudstack/api/command/user/volume/DetachVolumeCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/volume/DetachVolumeCmd.java @@ -29,7 +29,7 @@ import com.cloud.user.Account; import com.cloud.user.UserContext; import com.cloud.uservm.UserVm; -@APICommand(description="Detaches a disk volume from a virtual machine.", responseObject=VolumeResponse.class) +@APICommand(name = "detachVolume", description="Detaches a disk volume from a virtual machine.", responseObject=VolumeResponse.class) public class DetachVolumeCmd extends BaseAsyncCmd { public static final Logger s_logger = Logger.getLogger(DetachVolumeCmd.class.getName()); private static final String s_name = "detachvolumeresponse"; diff --git a/api/src/org/apache/cloudstack/api/command/user/volume/ExtractVolumeCmd.java b/api/src/org/apache/cloudstack/api/command/user/volume/ExtractVolumeCmd.java index 26a97d10caf..7f6cd052470 100644 --- a/api/src/org/apache/cloudstack/api/command/user/volume/ExtractVolumeCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/volume/ExtractVolumeCmd.java @@ -37,7 +37,7 @@ import com.cloud.storage.Volume; import com.cloud.user.Account; import com.cloud.user.UserContext; -@APICommand(description="Extracts volume", responseObject=ExtractResponse.class) +@APICommand(name = "extractVolume", description="Extracts volume", responseObject=ExtractResponse.class) public class ExtractVolumeCmd extends BaseAsyncCmd { public static final Logger s_logger = Logger.getLogger(ExtractVolumeCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/user/volume/ListVolumesCmd.java b/api/src/org/apache/cloudstack/api/command/user/volume/ListVolumesCmd.java index 644fbb7a134..9ba4f346869 100644 --- a/api/src/org/apache/cloudstack/api/command/user/volume/ListVolumesCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/volume/ListVolumesCmd.java @@ -26,7 +26,7 @@ import org.apache.cloudstack.api.Parameter; import com.cloud.async.AsyncJob; -@APICommand(description="Lists all volumes.", responseObject=VolumeResponse.class) +@APICommand(name = "listVolumes", description="Lists all volumes.", responseObject=VolumeResponse.class) public class ListVolumesCmd extends BaseListTaggedResourcesCmd { public static final Logger s_logger = Logger.getLogger(ListVolumesCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/user/volume/MigrateVolumeCmd.java b/api/src/org/apache/cloudstack/api/command/user/volume/MigrateVolumeCmd.java index e6cf4634ce1..30e672ada1b 100644 --- a/api/src/org/apache/cloudstack/api/command/user/volume/MigrateVolumeCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/volume/MigrateVolumeCmd.java @@ -30,7 +30,7 @@ import com.cloud.storage.Volume; import com.cloud.user.Account; -@APICommand(description="Migrate volume", responseObject=VolumeResponse.class, since="3.0.0") +@APICommand(name = "migrateVolume", description="Migrate volume", responseObject=VolumeResponse.class, since="3.0.0") public class MigrateVolumeCmd extends BaseAsyncCmd { private static final String s_name = "migratevolumeresponse"; diff --git a/api/src/org/apache/cloudstack/api/command/user/volume/UploadVolumeCmd.java b/api/src/org/apache/cloudstack/api/command/user/volume/UploadVolumeCmd.java index 0311444f2d3..4167ffd6460 100644 --- a/api/src/org/apache/cloudstack/api/command/user/volume/UploadVolumeCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/volume/UploadVolumeCmd.java @@ -32,7 +32,7 @@ import com.cloud.exception.ResourceUnavailableException; import com.cloud.storage.Volume; import com.cloud.user.UserContext; -@APICommand(description="Uploads a data disk.", responseObject=VolumeResponse.class) +@APICommand(name = "uploadVolume", description="Uploads a data disk.", responseObject=VolumeResponse.class) public class UploadVolumeCmd extends BaseAsyncCmd { public static final Logger s_logger = Logger.getLogger(UploadVolumeCmd.class.getName()); private static final String s_name = "uploadvolumeresponse"; diff --git a/api/src/org/apache/cloudstack/api/command/user/vpc/CreateStaticRouteCmd.java b/api/src/org/apache/cloudstack/api/command/user/vpc/CreateStaticRouteCmd.java index 8a9ac9596e6..85a0ae45ae8 100644 --- a/api/src/org/apache/cloudstack/api/command/user/vpc/CreateStaticRouteCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vpc/CreateStaticRouteCmd.java @@ -36,7 +36,7 @@ import com.cloud.network.vpc.StaticRoute; import com.cloud.network.vpc.VpcGateway; import com.cloud.user.UserContext; -@APICommand(description="Creates a static route", responseObject=StaticRouteResponse.class) +@APICommand(name = "createStaticRoute", description="Creates a static route", responseObject=StaticRouteResponse.class) public class CreateStaticRouteCmd extends BaseAsyncCreateCmd{ private static final String s_name = "createstaticrouteresponse"; public static final Logger s_logger = Logger.getLogger(CreateStaticRouteCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/user/vpc/CreateVPCCmd.java b/api/src/org/apache/cloudstack/api/command/user/vpc/CreateVPCCmd.java index d8829d67cf2..df16c8edc88 100644 --- a/api/src/org/apache/cloudstack/api/command/user/vpc/CreateVPCCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vpc/CreateVPCCmd.java @@ -37,7 +37,7 @@ import com.cloud.exception.ResourceUnavailableException; import com.cloud.network.vpc.Vpc; import com.cloud.user.UserContext; -@APICommand(description="Creates a VPC", responseObject=VpcResponse.class) +@APICommand(name = "createVPC", description="Creates a VPC", responseObject=VpcResponse.class) public class CreateVPCCmd extends BaseAsyncCreateCmd{ public static final Logger s_logger = Logger.getLogger(CreateVPCCmd.class.getName()); private static final String s_name = "createvpcresponse"; diff --git a/api/src/org/apache/cloudstack/api/command/user/vpc/DeleteStaticRouteCmd.java b/api/src/org/apache/cloudstack/api/command/user/vpc/DeleteStaticRouteCmd.java index de53b984cf9..c9e4463db14 100644 --- a/api/src/org/apache/cloudstack/api/command/user/vpc/DeleteStaticRouteCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vpc/DeleteStaticRouteCmd.java @@ -30,7 +30,7 @@ import com.cloud.exception.ResourceUnavailableException; import com.cloud.network.vpc.StaticRoute; import com.cloud.user.UserContext; -@APICommand(description="Deletes a static route", responseObject=SuccessResponse.class) +@APICommand(name = "deleteStaticRoute", description="Deletes a static route", responseObject=SuccessResponse.class) public class DeleteStaticRouteCmd extends BaseAsyncCmd{ public static final Logger s_logger = Logger.getLogger(DeleteStaticRouteCmd.class.getName()); private static final String s_name = "deletestaticrouteresponse"; diff --git a/api/src/org/apache/cloudstack/api/command/user/vpc/DeleteVPCCmd.java b/api/src/org/apache/cloudstack/api/command/user/vpc/DeleteVPCCmd.java index 9d1821e021a..ed4e754f736 100644 --- a/api/src/org/apache/cloudstack/api/command/user/vpc/DeleteVPCCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vpc/DeleteVPCCmd.java @@ -28,7 +28,7 @@ import com.cloud.exception.ResourceUnavailableException; import com.cloud.network.vpc.Vpc; import com.cloud.user.Account; -@APICommand(description="Deletes a VPC", responseObject=SuccessResponse.class) +@APICommand(name = "deleteVPC", description="Deletes a VPC", responseObject=SuccessResponse.class) public class DeleteVPCCmd extends BaseAsyncCmd{ public static final Logger s_logger = Logger.getLogger(DeleteVPCCmd.class.getName()); private static final String s_name = "deletevpcresponse"; diff --git a/api/src/org/apache/cloudstack/api/command/user/vpc/ListPrivateGatewaysCmd.java b/api/src/org/apache/cloudstack/api/command/user/vpc/ListPrivateGatewaysCmd.java index 190286689ea..08da25df279 100644 --- a/api/src/org/apache/cloudstack/api/command/user/vpc/ListPrivateGatewaysCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vpc/ListPrivateGatewaysCmd.java @@ -31,7 +31,7 @@ import org.apache.cloudstack.api.response.PrivateGatewayResponse; import com.cloud.network.vpc.PrivateGateway; import com.cloud.utils.Pair; -@APICommand(description="List private gateways", responseObject=PrivateGatewayResponse.class) +@APICommand(name = "listPrivateGateways", description="List private gateways", responseObject=PrivateGatewayResponse.class) public class ListPrivateGatewaysCmd extends BaseListProjectAndAccountResourcesCmd{ public static final Logger s_logger = Logger.getLogger(ListPrivateGatewaysCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/user/vpc/ListStaticRoutesCmd.java b/api/src/org/apache/cloudstack/api/command/user/vpc/ListStaticRoutesCmd.java index a9e1bcdc950..e9fada0a314 100644 --- a/api/src/org/apache/cloudstack/api/command/user/vpc/ListStaticRoutesCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vpc/ListStaticRoutesCmd.java @@ -29,7 +29,7 @@ import com.cloud.network.vpc.StaticRoute; import com.cloud.utils.Pair; import org.apache.cloudstack.api.response.VpcResponse; -@APICommand(description="Lists all static routes", responseObject=StaticRouteResponse.class) +@APICommand(name = "listStaticRoutes", description="Lists all static routes", responseObject=StaticRouteResponse.class) public class ListStaticRoutesCmd extends BaseListTaggedResourcesCmd { private static final String s_name = "liststaticroutesresponse"; diff --git a/api/src/org/apache/cloudstack/api/command/user/vpc/ListVPCOfferingsCmd.java b/api/src/org/apache/cloudstack/api/command/user/vpc/ListVPCOfferingsCmd.java index deff5b2a554..f776302d3c1 100644 --- a/api/src/org/apache/cloudstack/api/command/user/vpc/ListVPCOfferingsCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vpc/ListVPCOfferingsCmd.java @@ -29,7 +29,7 @@ import org.apache.cloudstack.api.response.ListResponse; import org.apache.cloudstack.api.response.VpcOfferingResponse; import com.cloud.network.vpc.VpcOffering; -@APICommand(description="Lists VPC offerings", responseObject=VpcOfferingResponse.class) +@APICommand(name = "listVPCOfferings", description="Lists VPC offerings", responseObject=VpcOfferingResponse.class) public class ListVPCOfferingsCmd extends BaseListCmd{ public static final Logger s_logger = Logger.getLogger(ListVPCOfferingsCmd.class.getName()); private static final String _name = "listvpcofferingsresponse"; diff --git a/api/src/org/apache/cloudstack/api/command/user/vpc/ListVPCsCmd.java b/api/src/org/apache/cloudstack/api/command/user/vpc/ListVPCsCmd.java index b4da5ebad89..6d3c8bd06c7 100644 --- a/api/src/org/apache/cloudstack/api/command/user/vpc/ListVPCsCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vpc/ListVPCsCmd.java @@ -33,7 +33,7 @@ import org.apache.cloudstack.api.Parameter; import com.cloud.network.vpc.Vpc; -@APICommand(description="Lists VPCs", responseObject=VpcResponse.class) +@APICommand(name = "listVPCs", description="Lists VPCs", responseObject=VpcResponse.class) public class ListVPCsCmd extends BaseListTaggedResourcesCmd{ public static final Logger s_logger = Logger.getLogger(ListVPCsCmd.class.getName()); private static final String s_name = "listvpcsresponse"; diff --git a/api/src/org/apache/cloudstack/api/command/user/vpc/RestartVPCCmd.java b/api/src/org/apache/cloudstack/api/command/user/vpc/RestartVPCCmd.java index 5e2ead813e6..4a23e6e6595 100644 --- a/api/src/org/apache/cloudstack/api/command/user/vpc/RestartVPCCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vpc/RestartVPCCmd.java @@ -29,7 +29,7 @@ import com.cloud.exception.ResourceUnavailableException; import com.cloud.network.vpc.Vpc; import com.cloud.user.Account; -@APICommand(description="Restarts a VPC", responseObject=VpcResponse.class) +@APICommand(name = "restartVPC", description="Restarts a VPC", responseObject=VpcResponse.class) public class RestartVPCCmd extends BaseAsyncCmd{ public static final Logger s_logger = Logger.getLogger(RestartVPCCmd.class.getName()); private static final String _name = "restartvpcresponse"; diff --git a/api/src/org/apache/cloudstack/api/command/user/vpc/UpdateVPCCmd.java b/api/src/org/apache/cloudstack/api/command/user/vpc/UpdateVPCCmd.java index 4ff9cf59d6b..2dc64dba267 100644 --- a/api/src/org/apache/cloudstack/api/command/user/vpc/UpdateVPCCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vpc/UpdateVPCCmd.java @@ -29,7 +29,7 @@ import com.cloud.event.EventTypes; import com.cloud.network.vpc.Vpc; import com.cloud.user.Account; -@APICommand(description="Updates a VPC", responseObject=VpcResponse.class) +@APICommand(name = "updateVPC", description="Updates a VPC", responseObject=VpcResponse.class) public class UpdateVPCCmd extends BaseAsyncCmd{ public static final Logger s_logger = Logger.getLogger(UpdateVPCCmd.class.getName()); private static final String _name = "updatevpcresponse"; diff --git a/api/src/org/apache/cloudstack/api/command/user/vpn/AddVpnUserCmd.java b/api/src/org/apache/cloudstack/api/command/user/vpn/AddVpnUserCmd.java index efc4c7d5d92..674dc6a5809 100644 --- a/api/src/org/apache/cloudstack/api/command/user/vpn/AddVpnUserCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vpn/AddVpnUserCmd.java @@ -33,7 +33,7 @@ import com.cloud.network.VpnUser; import com.cloud.user.Account; import com.cloud.user.UserContext; -@APICommand(description="Adds vpn users", responseObject=VpnUsersResponse.class) +@APICommand(name = "addVpnUser", description="Adds vpn users", responseObject=VpnUsersResponse.class) public class AddVpnUserCmd extends BaseAsyncCreateCmd { public static final Logger s_logger = Logger.getLogger(AddVpnUserCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/user/vpn/CreateRemoteAccessVpnCmd.java b/api/src/org/apache/cloudstack/api/command/user/vpn/CreateRemoteAccessVpnCmd.java index 032cef6aa17..37952f8777a 100644 --- a/api/src/org/apache/cloudstack/api/command/user/vpn/CreateRemoteAccessVpnCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vpn/CreateRemoteAccessVpnCmd.java @@ -30,7 +30,7 @@ import com.cloud.exception.ResourceUnavailableException; import com.cloud.network.IpAddress; import com.cloud.network.RemoteAccessVpn; -@APICommand(description="Creates a l2tp/ipsec remote access vpn", responseObject=RemoteAccessVpnResponse.class) +@APICommand(name = "createRemoteAccessVpn", description="Creates a l2tp/ipsec remote access vpn", responseObject=RemoteAccessVpnResponse.class) public class CreateRemoteAccessVpnCmd extends BaseAsyncCreateCmd { public static final Logger s_logger = Logger.getLogger(CreateRemoteAccessVpnCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/user/vpn/CreateVpnConnectionCmd.java b/api/src/org/apache/cloudstack/api/command/user/vpn/CreateVpnConnectionCmd.java index 70e8fdff29d..7f85fb4ebf6 100644 --- a/api/src/org/apache/cloudstack/api/command/user/vpn/CreateVpnConnectionCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vpn/CreateVpnConnectionCmd.java @@ -30,7 +30,7 @@ import com.cloud.network.Site2SiteVpnConnection; import com.cloud.network.Site2SiteVpnGateway; import com.cloud.network.vpc.Vpc; -@APICommand(description="Create site to site vpn connection", responseObject=Site2SiteVpnConnectionResponse.class) +@APICommand(name = "createVpnConnection", description="Create site to site vpn connection", responseObject=Site2SiteVpnConnectionResponse.class) public class CreateVpnConnectionCmd extends BaseAsyncCreateCmd { public static final Logger s_logger = Logger.getLogger(CreateVpnConnectionCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/user/vpn/CreateVpnCustomerGatewayCmd.java b/api/src/org/apache/cloudstack/api/command/user/vpn/CreateVpnCustomerGatewayCmd.java index cde105df17e..65085182e0c 100644 --- a/api/src/org/apache/cloudstack/api/command/user/vpn/CreateVpnCustomerGatewayCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vpn/CreateVpnCustomerGatewayCmd.java @@ -30,7 +30,7 @@ import com.cloud.event.EventTypes; import com.cloud.network.Site2SiteCustomerGateway; import com.cloud.user.UserContext; -@APICommand(description="Creates site to site vpn customer gateway", responseObject=Site2SiteCustomerGatewayResponse.class) +@APICommand(name = "createVpnCustomerGateway", description="Creates site to site vpn customer gateway", responseObject=Site2SiteCustomerGatewayResponse.class) public class CreateVpnCustomerGatewayCmd extends BaseAsyncCmd { public static final Logger s_logger = Logger.getLogger(CreateVpnCustomerGatewayCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/user/vpn/CreateVpnGatewayCmd.java b/api/src/org/apache/cloudstack/api/command/user/vpn/CreateVpnGatewayCmd.java index 5a227ffcd75..89965bd842c 100644 --- a/api/src/org/apache/cloudstack/api/command/user/vpn/CreateVpnGatewayCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vpn/CreateVpnGatewayCmd.java @@ -30,7 +30,7 @@ import com.cloud.event.EventTypes; import com.cloud.network.Site2SiteVpnGateway; import com.cloud.network.vpc.Vpc; -@APICommand(description="Creates site to site vpn local gateway", responseObject=Site2SiteVpnGatewayResponse.class) +@APICommand(name = "createVpnGateway", description="Creates site to site vpn local gateway", responseObject=Site2SiteVpnGatewayResponse.class) public class CreateVpnGatewayCmd extends BaseAsyncCmd { public static final Logger s_logger = Logger.getLogger(CreateVpnGatewayCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/user/vpn/DeleteRemoteAccessVpnCmd.java b/api/src/org/apache/cloudstack/api/command/user/vpn/DeleteRemoteAccessVpnCmd.java index eb2ae3c3ba0..a634a0a7c5a 100644 --- a/api/src/org/apache/cloudstack/api/command/user/vpn/DeleteRemoteAccessVpnCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vpn/DeleteRemoteAccessVpnCmd.java @@ -31,7 +31,7 @@ import com.cloud.exception.ResourceUnavailableException; import com.cloud.network.RemoteAccessVpn; import com.cloud.user.UserContext; -@APICommand(description="Destroys a l2tp/ipsec remote access vpn", responseObject=SuccessResponse.class) +@APICommand(name = "deleteRemoteAccessVpn", description="Destroys a l2tp/ipsec remote access vpn", responseObject=SuccessResponse.class) public class DeleteRemoteAccessVpnCmd extends BaseAsyncCmd { public static final Logger s_logger = Logger.getLogger(DeleteRemoteAccessVpnCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/user/vpn/DeleteVpnConnectionCmd.java b/api/src/org/apache/cloudstack/api/command/user/vpn/DeleteVpnConnectionCmd.java index 0fd4717269e..a079e8bcc30 100644 --- a/api/src/org/apache/cloudstack/api/command/user/vpn/DeleteVpnConnectionCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vpn/DeleteVpnConnectionCmd.java @@ -27,7 +27,7 @@ import com.cloud.exception.ResourceUnavailableException; import com.cloud.network.Site2SiteVpnConnection; import com.cloud.user.Account; -@APICommand(description="Delete site to site vpn connection", responseObject=SuccessResponse.class) +@APICommand(name = "deleteVpnConnection", description="Delete site to site vpn connection", responseObject=SuccessResponse.class) public class DeleteVpnConnectionCmd extends BaseAsyncCmd { public static final Logger s_logger = Logger.getLogger(DeleteVpnConnectionCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/user/vpn/DeleteVpnCustomerGatewayCmd.java b/api/src/org/apache/cloudstack/api/command/user/vpn/DeleteVpnCustomerGatewayCmd.java index 338597df870..ef5ff3db438 100644 --- a/api/src/org/apache/cloudstack/api/command/user/vpn/DeleteVpnCustomerGatewayCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vpn/DeleteVpnCustomerGatewayCmd.java @@ -26,7 +26,7 @@ import com.cloud.event.EventTypes; import com.cloud.network.Site2SiteCustomerGateway; import com.cloud.user.Account; -@APICommand(description="Delete site to site vpn customer gateway", responseObject=SuccessResponse.class) +@APICommand(name = "deleteVpnCustomerGateway", description="Delete site to site vpn customer gateway", responseObject=SuccessResponse.class) public class DeleteVpnCustomerGatewayCmd extends BaseAsyncCmd { public static final Logger s_logger = Logger.getLogger(DeleteVpnCustomerGatewayCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/user/vpn/DeleteVpnGatewayCmd.java b/api/src/org/apache/cloudstack/api/command/user/vpn/DeleteVpnGatewayCmd.java index 32a2021b9aa..f9b9e35a420 100644 --- a/api/src/org/apache/cloudstack/api/command/user/vpn/DeleteVpnGatewayCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vpn/DeleteVpnGatewayCmd.java @@ -26,7 +26,7 @@ import com.cloud.event.EventTypes; import com.cloud.network.Site2SiteVpnGateway; import com.cloud.user.Account; -@APICommand(description="Delete site to site vpn gateway", responseObject=SuccessResponse.class) +@APICommand(name = "deleteVpnGateway", description="Delete site to site vpn gateway", responseObject=SuccessResponse.class) public class DeleteVpnGatewayCmd extends BaseAsyncCmd { public static final Logger s_logger = Logger.getLogger(DeleteVpnGatewayCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/user/vpn/ListRemoteAccessVpnsCmd.java b/api/src/org/apache/cloudstack/api/command/user/vpn/ListRemoteAccessVpnsCmd.java index 4a96d0ebd3b..4b6a2058bee 100644 --- a/api/src/org/apache/cloudstack/api/command/user/vpn/ListRemoteAccessVpnsCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vpn/ListRemoteAccessVpnsCmd.java @@ -31,7 +31,7 @@ import org.apache.cloudstack.api.response.RemoteAccessVpnResponse; import com.cloud.network.RemoteAccessVpn; import com.cloud.utils.Pair; -@APICommand(description="Lists remote access vpns", responseObject=RemoteAccessVpnResponse.class) +@APICommand(name = "listRemoteAccessVpns", description="Lists remote access vpns", responseObject=RemoteAccessVpnResponse.class) public class ListRemoteAccessVpnsCmd extends BaseListProjectAndAccountResourcesCmd { public static final Logger s_logger = Logger.getLogger (ListRemoteAccessVpnsCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/user/vpn/ListVpnConnectionsCmd.java b/api/src/org/apache/cloudstack/api/command/user/vpn/ListVpnConnectionsCmd.java index d1c94227b12..56f8aa547e8 100644 --- a/api/src/org/apache/cloudstack/api/command/user/vpn/ListVpnConnectionsCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vpn/ListVpnConnectionsCmd.java @@ -31,7 +31,7 @@ import org.apache.cloudstack.api.response.Site2SiteVpnConnectionResponse; import com.cloud.network.Site2SiteVpnConnection; import com.cloud.utils.Pair; -@APICommand(description="Lists site to site vpn connection gateways", responseObject=Site2SiteVpnConnectionResponse.class) +@APICommand(name = "listVpnConnections", description="Lists site to site vpn connection gateways", responseObject=Site2SiteVpnConnectionResponse.class) public class ListVpnConnectionsCmd extends BaseListProjectAndAccountResourcesCmd { public static final Logger s_logger = Logger.getLogger (ListVpnConnectionsCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/user/vpn/ListVpnCustomerGatewaysCmd.java b/api/src/org/apache/cloudstack/api/command/user/vpn/ListVpnCustomerGatewaysCmd.java index 98880f1908f..0e4209ba873 100644 --- a/api/src/org/apache/cloudstack/api/command/user/vpn/ListVpnCustomerGatewaysCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vpn/ListVpnCustomerGatewaysCmd.java @@ -30,7 +30,7 @@ import org.apache.cloudstack.api.response.Site2SiteCustomerGatewayResponse; import com.cloud.network.Site2SiteCustomerGateway; import com.cloud.utils.Pair; -@APICommand(description="Lists site to site vpn customer gateways", responseObject=Site2SiteCustomerGatewayResponse.class) +@APICommand(name = "listVpnCustomerGateways", description="Lists site to site vpn customer gateways", responseObject=Site2SiteCustomerGatewayResponse.class) public class ListVpnCustomerGatewaysCmd extends BaseListProjectAndAccountResourcesCmd { public static final Logger s_logger = Logger.getLogger (ListVpnCustomerGatewaysCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/user/vpn/ListVpnGatewaysCmd.java b/api/src/org/apache/cloudstack/api/command/user/vpn/ListVpnGatewaysCmd.java index 3fc5344b488..63f70e3efe0 100644 --- a/api/src/org/apache/cloudstack/api/command/user/vpn/ListVpnGatewaysCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vpn/ListVpnGatewaysCmd.java @@ -31,7 +31,7 @@ import org.apache.cloudstack.api.response.Site2SiteVpnGatewayResponse; import com.cloud.network.Site2SiteVpnGateway; import com.cloud.utils.Pair; -@APICommand(description="Lists site 2 site vpn gateways", responseObject=Site2SiteVpnGatewayResponse.class) +@APICommand(name = "listVpnGateways", description="Lists site 2 site vpn gateways", responseObject=Site2SiteVpnGatewayResponse.class) public class ListVpnGatewaysCmd extends BaseListProjectAndAccountResourcesCmd { public static final Logger s_logger = Logger.getLogger (ListVpnGatewaysCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/user/vpn/ListVpnUsersCmd.java b/api/src/org/apache/cloudstack/api/command/user/vpn/ListVpnUsersCmd.java index e1b5e4ed271..fb12f65faa5 100644 --- a/api/src/org/apache/cloudstack/api/command/user/vpn/ListVpnUsersCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vpn/ListVpnUsersCmd.java @@ -30,7 +30,7 @@ import org.apache.cloudstack.api.response.VpnUsersResponse; import com.cloud.network.VpnUser; import com.cloud.utils.Pair; -@APICommand(description="Lists vpn users", responseObject=VpnUsersResponse.class) +@APICommand(name = "listVpnUsers", description="Lists vpn users", responseObject=VpnUsersResponse.class) public class ListVpnUsersCmd extends BaseListProjectAndAccountResourcesCmd { public static final Logger s_logger = Logger.getLogger (ListVpnUsersCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/user/vpn/RemoveVpnUserCmd.java b/api/src/org/apache/cloudstack/api/command/user/vpn/RemoveVpnUserCmd.java index 49edc415780..bdad7e31dd9 100644 --- a/api/src/org/apache/cloudstack/api/command/user/vpn/RemoveVpnUserCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vpn/RemoveVpnUserCmd.java @@ -31,7 +31,7 @@ import com.cloud.event.EventTypes; import com.cloud.user.Account; import com.cloud.user.UserContext; -@APICommand(description="Removes vpn user", responseObject=SuccessResponse.class) +@APICommand(name = "removeVpnUser", description="Removes vpn user", responseObject=SuccessResponse.class) public class RemoveVpnUserCmd extends BaseAsyncCmd { public static final Logger s_logger = Logger.getLogger(RemoveVpnUserCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/user/vpn/ResetVpnConnectionCmd.java b/api/src/org/apache/cloudstack/api/command/user/vpn/ResetVpnConnectionCmd.java index 8fff0382591..0d7632ac1aa 100644 --- a/api/src/org/apache/cloudstack/api/command/user/vpn/ResetVpnConnectionCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vpn/ResetVpnConnectionCmd.java @@ -28,7 +28,7 @@ import com.cloud.network.Site2SiteVpnConnection; import com.cloud.user.Account; import com.cloud.user.UserContext; -@APICommand(description="Reset site to site vpn connection", responseObject=Site2SiteVpnConnectionResponse.class) +@APICommand(name = "resetVpnConnection", description="Reset site to site vpn connection", responseObject=Site2SiteVpnConnectionResponse.class) public class ResetVpnConnectionCmd extends BaseAsyncCmd { public static final Logger s_logger = Logger.getLogger(ResetVpnConnectionCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/user/vpn/UpdateVpnCustomerGatewayCmd.java b/api/src/org/apache/cloudstack/api/command/user/vpn/UpdateVpnCustomerGatewayCmd.java index b602e7487fd..f2778e06103 100644 --- a/api/src/org/apache/cloudstack/api/command/user/vpn/UpdateVpnCustomerGatewayCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vpn/UpdateVpnCustomerGatewayCmd.java @@ -26,7 +26,7 @@ import com.cloud.event.EventTypes; import com.cloud.network.Site2SiteCustomerGateway; import com.cloud.user.UserContext; -@APICommand(description="Update site to site vpn customer gateway", responseObject=Site2SiteCustomerGatewayResponse.class) +@APICommand(name = "updateVpnCustomerGateway", description="Update site to site vpn customer gateway", responseObject=Site2SiteCustomerGatewayResponse.class) public class UpdateVpnCustomerGatewayCmd extends BaseAsyncCmd { public static final Logger s_logger = Logger.getLogger(UpdateVpnCustomerGatewayCmd.class.getName()); diff --git a/api/src/org/apache/cloudstack/api/command/user/zone/ListZonesByCmd.java b/api/src/org/apache/cloudstack/api/command/user/zone/ListZonesByCmd.java index d561ed33929..5f5f9e7bda0 100644 --- a/api/src/org/apache/cloudstack/api/command/user/zone/ListZonesByCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/zone/ListZonesByCmd.java @@ -30,7 +30,7 @@ import org.apache.cloudstack.api.response.ListResponse; import org.apache.cloudstack.api.response.ZoneResponse; import com.cloud.dc.DataCenter; -@APICommand(description="Lists zones", responseObject=ZoneResponse.class) +@APICommand(name = "listZones", description="Lists zones", responseObject=ZoneResponse.class) public class ListZonesByCmd extends BaseListCmd { public static final Logger s_logger = Logger.getLogger(ListZonesByCmd.class.getName()); From 774cb29b0c46e5677faf9fc52f91f5d6d2617dae Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Fri, 28 Dec 2012 01:28:47 -0800 Subject: [PATCH 229/421] api: Annotate all remaining cmd classes with APICommand name field Automates name field filling using following python program which reads from various *commands.properties.in files and populates name fields based on the name cmd class mapping defined in them. import os search_pattern = "@APICommand(" pattern_len = len(search_pattern) prop_files = [ "client/tomcatconf/cisconexusvsm_commands.properties.in", "client/tomcatconf/f5bigip_commands.properties.in", "client/tomcatconf/junipersrx_commands.properties.in", "client/tomcatconf/netapp_commands.properties.in", "client/tomcatconf/netscalerloadbalancer_commands.properties.in", "client/tomcatconf/nicira-nvp_commands.properties.in", "client/tomcatconf/simulator_commands.properties.in",] file_prefixes = [ "plugins/hypervisors/vmware/src/", "plugins/network-elements/f5/src/", "plugins/network-elements/juniper-srx/src/", "plugins/file-systems/netapp/src/", "plugins/network-elements/netscaler/src/", "plugins/network-elements/nicira-nvp/src/", "plugins/hypervisors/simulator/src/",] counter = 0 for prop_file in prop_files: f = open(prop_file, 'r') data = f.read() f.close() file_prefix = file_prefixes[counter] apis = filter(lambda x: x.strip()!='' and (not x.startswith('#')), data.split('\n')) for api in apis: api_name = api.split('=')[0].strip() cmd_name = file_prefix + api.split('=')[1].split(';')[0].replace('.', '/').strip() + ".java" if not os.path.exists(cmd_name): print cmd_name, api_name f = open(cmd_name, 'r') d = f.read() f.close() idx = d.find(search_pattern) + pattern_len new_str = d[:idx] + "name = \"%s\", " % api_name + d[idx:] f = open(cmd_name, 'w') f.write(new_str) f.close() counter += 1 Signed-off-by: Rohit Yadav --- .../src/com/cloud/api/commands/netapp/AssociateLunCmd.java | 2 +- .../netapp/src/com/cloud/api/commands/netapp/CreateLunCmd.java | 2 +- .../com/cloud/api/commands/netapp/CreateVolumeOnFilerCmd.java | 2 +- .../src/com/cloud/api/commands/netapp/CreateVolumePoolCmd.java | 2 +- .../src/com/cloud/api/commands/netapp/DeleteVolumePoolCmd.java | 2 +- .../netapp/src/com/cloud/api/commands/netapp/DestroyLunCmd.java | 2 +- .../com/cloud/api/commands/netapp/DestroyVolumeOnFilerCmd.java | 2 +- .../src/com/cloud/api/commands/netapp/DissociateLunCmd.java | 2 +- .../netapp/src/com/cloud/api/commands/netapp/ListLunsCmd.java | 2 +- .../src/com/cloud/api/commands/netapp/ListVolumePoolsCmd.java | 2 +- .../com/cloud/api/commands/netapp/ListVolumesOnFilerCmd.java | 2 +- .../src/com/cloud/api/commands/netapp/ModifyVolumePoolCmd.java | 2 +- .../src/com/cloud/api/commands/ConfigureSimulator.java | 2 +- .../src/com/cloud/api/commands/DeleteCiscoNexusVSMCmd.java | 2 +- .../src/com/cloud/api/commands/DisableCiscoNexusVSMCmd.java | 2 +- .../src/com/cloud/api/commands/EnableCiscoNexusVSMCmd.java | 2 +- .../src/com/cloud/api/commands/ListCiscoNexusVSMsCmd.java | 2 +- .../src/com/cloud/api/commands/AddExternalLoadBalancerCmd.java | 2 +- .../f5/src/com/cloud/api/commands/AddF5LoadBalancerCmd.java | 2 +- .../src/com/cloud/api/commands/ConfigureF5LoadBalancerCmd.java | 2 +- .../com/cloud/api/commands/DeleteExternalLoadBalancerCmd.java | 2 +- .../f5/src/com/cloud/api/commands/DeleteF5LoadBalancerCmd.java | 2 +- .../com/cloud/api/commands/ListExternalLoadBalancersCmd.java | 2 +- .../com/cloud/api/commands/ListF5LoadBalancerNetworksCmd.java | 2 +- .../f5/src/com/cloud/api/commands/ListF5LoadBalancersCmd.java | 2 +- .../src/com/cloud/api/commands/AddExternalFirewallCmd.java | 2 +- .../src/com/cloud/api/commands/AddSrxFirewallCmd.java | 2 +- .../src/com/cloud/api/commands/ConfigureSrxFirewallCmd.java | 2 +- .../src/com/cloud/api/commands/DeleteExternalFirewallCmd.java | 2 +- .../src/com/cloud/api/commands/DeleteSrxFirewallCmd.java | 2 +- .../src/com/cloud/api/commands/ListExternalFirewallsCmd.java | 2 +- .../src/com/cloud/api/commands/ListSrxFirewallNetworksCmd.java | 2 +- .../src/com/cloud/api/commands/ListSrxFirewallsCmd.java | 2 +- .../src/com/cloud/api/commands/AddNetscalerLoadBalancerCmd.java | 2 +- .../cloud/api/commands/ConfigureNetscalerLoadBalancerCmd.java | 2 +- .../com/cloud/api/commands/DeleteNetscalerLoadBalancerCmd.java | 2 +- .../api/commands/ListNetscalerLoadBalancerNetworksCmd.java | 2 +- .../com/cloud/api/commands/ListNetscalerLoadBalancersCmd.java | 2 +- .../src/com/cloud/api/commands/AddNiciraNvpDeviceCmd.java | 2 +- .../src/com/cloud/api/commands/DeleteNiciraNvpDeviceCmd.java | 2 +- .../com/cloud/api/commands/ListNiciraNvpDeviceNetworksCmd.java | 2 +- .../src/com/cloud/api/commands/ListNiciraNvpDevicesCmd.java | 2 +- 42 files changed, 42 insertions(+), 42 deletions(-) diff --git a/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/AssociateLunCmd.java b/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/AssociateLunCmd.java index 99e4e5fd40f..c87c9242010 100644 --- a/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/AssociateLunCmd.java +++ b/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/AssociateLunCmd.java @@ -31,7 +31,7 @@ import com.cloud.server.ManagementService; import com.cloud.server.api.response.netapp.AssociateLunCmdResponse; import com.cloud.utils.component.ComponentLocator; -@APICommand(description="Associate a LUN with a guest IQN", responseObject = AssociateLunCmdResponse.class) +@APICommand(name = "associateLun", description="Associate a LUN with a guest IQN", responseObject = AssociateLunCmdResponse.class) public class AssociateLunCmd extends BaseCmd { public static final Logger s_logger = Logger.getLogger(AssociateLunCmd.class.getName()); private static final String s_name = "associatelunresponse"; diff --git a/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/CreateLunCmd.java b/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/CreateLunCmd.java index 026eb140adb..8c89730b978 100644 --- a/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/CreateLunCmd.java +++ b/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/CreateLunCmd.java @@ -35,7 +35,7 @@ import com.cloud.server.ManagementService; import com.cloud.server.api.response.netapp.CreateLunCmdResponse; import com.cloud.utils.component.ComponentLocator; -@APICommand(description="Create a LUN from a pool", responseObject = CreateLunCmdResponse.class) +@APICommand(name = "createLunOnFiler", description="Create a LUN from a pool", responseObject = CreateLunCmdResponse.class) public class CreateLunCmd extends BaseCmd { public static final Logger s_logger = Logger.getLogger(CreateLunCmd.class.getName()); private static final String s_name = "createlunresponse"; diff --git a/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/CreateVolumeOnFilerCmd.java b/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/CreateVolumeOnFilerCmd.java index c46a146d5c4..a2d4b96e6dd 100644 --- a/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/CreateVolumeOnFilerCmd.java +++ b/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/CreateVolumeOnFilerCmd.java @@ -34,7 +34,7 @@ import com.cloud.server.ManagementService; import com.cloud.server.api.response.netapp.CreateVolumeOnFilerCmdResponse; import com.cloud.utils.component.ComponentLocator; -@APICommand(description="Create a volume", responseObject = CreateVolumeOnFilerCmdResponse.class) +@APICommand(name = "createVolumeOnFiler", description="Create a volume", responseObject = CreateVolumeOnFilerCmdResponse.class) public class CreateVolumeOnFilerCmd extends BaseCmd { private static final String s_name = "createvolumeresponse"; diff --git a/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/CreateVolumePoolCmd.java b/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/CreateVolumePoolCmd.java index 0f9a4e76ff2..9e38c5fc097 100644 --- a/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/CreateVolumePoolCmd.java +++ b/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/CreateVolumePoolCmd.java @@ -33,7 +33,7 @@ import com.cloud.server.ManagementService; import com.cloud.server.api.response.netapp.CreateVolumePoolCmdResponse; import com.cloud.utils.component.ComponentLocator; -@APICommand(description="Create a pool", responseObject = CreateVolumePoolCmdResponse.class) +@APICommand(name = "createPool", description="Create a pool", responseObject = CreateVolumePoolCmdResponse.class) public class CreateVolumePoolCmd extends BaseCmd { public static final Logger s_logger = Logger.getLogger(CreateVolumePoolCmd.class.getName()); private static final String s_name = "createpoolresponse"; diff --git a/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/DeleteVolumePoolCmd.java b/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/DeleteVolumePoolCmd.java index e26a11edc6f..1105ea53e9d 100644 --- a/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/DeleteVolumePoolCmd.java +++ b/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/DeleteVolumePoolCmd.java @@ -35,7 +35,7 @@ import com.cloud.server.ManagementService; import com.cloud.server.api.response.netapp.DeleteVolumePoolCmdResponse; import com.cloud.utils.component.ComponentLocator; -@APICommand(description="Delete a pool", responseObject = DeleteVolumePoolCmdResponse.class) +@APICommand(name = "deletePool", description="Delete a pool", responseObject = DeleteVolumePoolCmdResponse.class) public class DeleteVolumePoolCmd extends BaseCmd { public static final Logger s_logger = Logger.getLogger(DeleteVolumePoolCmd.class.getName()); private static final String s_name = "deletepoolresponse"; diff --git a/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/DestroyLunCmd.java b/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/DestroyLunCmd.java index c6499ba791f..c5f7b117f5b 100644 --- a/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/DestroyLunCmd.java +++ b/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/DestroyLunCmd.java @@ -35,7 +35,7 @@ import com.cloud.server.ManagementService; import com.cloud.server.api.response.netapp.DeleteLUNCmdResponse; import com.cloud.utils.component.ComponentLocator; -@APICommand(description="Destroy a LUN", responseObject = DeleteLUNCmdResponse.class) +@APICommand(name = "destroyLunOnFiler", description="Destroy a LUN", responseObject = DeleteLUNCmdResponse.class) public class DestroyLunCmd extends BaseCmd { public static final Logger s_logger = Logger.getLogger(DestroyLunCmd.class.getName()); diff --git a/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/DestroyVolumeOnFilerCmd.java b/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/DestroyVolumeOnFilerCmd.java index c695802e17f..4ddc0c9f6d0 100644 --- a/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/DestroyVolumeOnFilerCmd.java +++ b/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/DestroyVolumeOnFilerCmd.java @@ -33,7 +33,7 @@ import com.cloud.server.ManagementService; import com.cloud.server.api.response.netapp.DeleteVolumeOnFilerCmdResponse; import com.cloud.utils.component.ComponentLocator; -@APICommand(description="Destroy a Volume", responseObject = DeleteVolumeOnFilerCmdResponse.class) +@APICommand(name = "destroyVolumeOnFiler", description="Destroy a Volume", responseObject = DeleteVolumeOnFilerCmdResponse.class) public class DestroyVolumeOnFilerCmd extends BaseCmd { public static final Logger s_logger = Logger.getLogger(DestroyVolumeOnFilerCmd.class.getName()); private static final String s_name = "destroyvolumeresponse"; diff --git a/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/DissociateLunCmd.java b/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/DissociateLunCmd.java index a44852882ec..0a6c1a70ef1 100644 --- a/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/DissociateLunCmd.java +++ b/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/DissociateLunCmd.java @@ -32,7 +32,7 @@ import com.cloud.server.ManagementService; import com.cloud.server.api.response.netapp.DissociateLunCmdResponse; import com.cloud.utils.component.ComponentLocator; -@APICommand(description="Dissociate a LUN", responseObject = DissociateLunCmdResponse.class) +@APICommand(name = "dissociateLun", description="Dissociate a LUN", responseObject = DissociateLunCmdResponse.class) public class DissociateLunCmd extends BaseCmd { public static final Logger s_logger = Logger.getLogger(DissociateLunCmd.class.getName()); private static final String s_name = "dissociatelunresponse"; diff --git a/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/ListLunsCmd.java b/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/ListLunsCmd.java index 4de052ddd91..630b14994e7 100644 --- a/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/ListLunsCmd.java +++ b/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/ListLunsCmd.java @@ -38,7 +38,7 @@ import com.cloud.server.ManagementService; import com.cloud.server.api.response.netapp.ListLunsCmdResponse; import com.cloud.utils.component.ComponentLocator; -@APICommand(description="List LUN", responseObject = ListLunsCmdResponse.class) +@APICommand(name = "listLunsOnFiler", description="List LUN", responseObject = ListLunsCmdResponse.class) public class ListLunsCmd extends BaseCmd { public static final Logger s_logger = Logger.getLogger(ListLunsCmd.class.getName()); diff --git a/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/ListVolumePoolsCmd.java b/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/ListVolumePoolsCmd.java index 00257eea94e..d77f4fad849 100644 --- a/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/ListVolumePoolsCmd.java +++ b/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/ListVolumePoolsCmd.java @@ -36,7 +36,7 @@ import com.cloud.server.ManagementService; import com.cloud.server.api.response.netapp.ListVolumePoolsCmdResponse; import com.cloud.utils.component.ComponentLocator; -@APICommand(description="List Pool", responseObject = ListVolumePoolsCmdResponse.class) +@APICommand(name = "listPools", description="List Pool", responseObject = ListVolumePoolsCmdResponse.class) public class ListVolumePoolsCmd extends BaseCmd { public static final Logger s_logger = Logger.getLogger(ListVolumePoolsCmd.class.getName()); private static final String s_name = "listpoolresponse"; diff --git a/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/ListVolumesOnFilerCmd.java b/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/ListVolumesOnFilerCmd.java index 258a3cf09b7..66a96f3a221 100644 --- a/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/ListVolumesOnFilerCmd.java +++ b/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/ListVolumesOnFilerCmd.java @@ -35,7 +35,7 @@ import com.cloud.server.ManagementService; import com.cloud.server.api.response.netapp.ListVolumesOnFilerCmdResponse; import com.cloud.utils.component.ComponentLocator; -@APICommand(description="List Volumes", responseObject = ListVolumesOnFilerCmdResponse.class) +@APICommand(name = "listVolumesOnFiler", description="List Volumes", responseObject = ListVolumesOnFilerCmdResponse.class) public class ListVolumesOnFilerCmd extends BaseCmd { public static final Logger s_logger = Logger.getLogger(ListVolumesOnFilerCmd.class.getName()); private static final String s_name = "listvolumesresponse"; diff --git a/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/ModifyVolumePoolCmd.java b/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/ModifyVolumePoolCmd.java index ad77cbe0168..3e32caebef3 100644 --- a/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/ModifyVolumePoolCmd.java +++ b/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/ModifyVolumePoolCmd.java @@ -33,7 +33,7 @@ import com.cloud.server.ManagementService; import com.cloud.server.api.response.netapp.ModifyVolumePoolCmdResponse; import com.cloud.utils.component.ComponentLocator; -@APICommand(description="Modify pool", responseObject = ModifyVolumePoolCmdResponse.class) +@APICommand(name = "modifyPool", description="Modify pool", responseObject = ModifyVolumePoolCmdResponse.class) public class ModifyVolumePoolCmd extends BaseCmd { public static final Logger s_logger = Logger.getLogger(ModifyVolumePoolCmd.class.getName()); private static final String s_name = "modifypoolresponse"; diff --git a/plugins/hypervisors/simulator/src/com/cloud/api/commands/ConfigureSimulator.java b/plugins/hypervisors/simulator/src/com/cloud/api/commands/ConfigureSimulator.java index 713c489df21..df81249538d 100755 --- a/plugins/hypervisors/simulator/src/com/cloud/api/commands/ConfigureSimulator.java +++ b/plugins/hypervisors/simulator/src/com/cloud/api/commands/ConfigureSimulator.java @@ -33,7 +33,7 @@ import com.cloud.server.ManagementService; import com.cloud.user.Account; import com.cloud.utils.component.ComponentLocator; -@APICommand(description="configure simulator", responseObject=SuccessResponse.class) +@APICommand(name = "configureSimulator", description="configure simulator", responseObject=SuccessResponse.class) public class ConfigureSimulator extends BaseCmd { public static final Logger s_logger = Logger.getLogger(ConfigureSimulator.class.getName()); private static final String s_name = "configuresimulatorresponse"; diff --git a/plugins/hypervisors/vmware/src/com/cloud/api/commands/DeleteCiscoNexusVSMCmd.java b/plugins/hypervisors/vmware/src/com/cloud/api/commands/DeleteCiscoNexusVSMCmd.java index edab31bf384..c050f124cf6 100644 --- a/plugins/hypervisors/vmware/src/com/cloud/api/commands/DeleteCiscoNexusVSMCmd.java +++ b/plugins/hypervisors/vmware/src/com/cloud/api/commands/DeleteCiscoNexusVSMCmd.java @@ -35,7 +35,7 @@ import com.cloud.exception.ResourceUnavailableException; import com.cloud.network.element.CiscoNexusVSMElementService; import com.cloud.user.Account; -@APICommand(responseObject=SuccessResponse.class, description=" delete a Cisco Nexus VSM device") +@APICommand(name = "deleteCiscoNexusVSM", responseObject=SuccessResponse.class, description=" delete a Cisco Nexus VSM device") public class DeleteCiscoNexusVSMCmd extends BaseAsyncCmd { public static final Logger s_logger = Logger.getLogger(DeleteCiscoNexusVSMCmd.class.getName()); diff --git a/plugins/hypervisors/vmware/src/com/cloud/api/commands/DisableCiscoNexusVSMCmd.java b/plugins/hypervisors/vmware/src/com/cloud/api/commands/DisableCiscoNexusVSMCmd.java index 12a5d32e047..cdeb85d70a9 100644 --- a/plugins/hypervisors/vmware/src/com/cloud/api/commands/DisableCiscoNexusVSMCmd.java +++ b/plugins/hypervisors/vmware/src/com/cloud/api/commands/DisableCiscoNexusVSMCmd.java @@ -36,7 +36,7 @@ import com.cloud.event.EventTypes; import com.cloud.api.response.CiscoNexusVSMResponse; import com.cloud.network.CiscoNexusVSMDevice; -@APICommand(responseObject=CiscoNexusVSMResponse.class, description="disable a Cisco Nexus VSM device") +@APICommand(name = "disableCiscoNexusVSM", responseObject=CiscoNexusVSMResponse.class, description="disable a Cisco Nexus VSM device") public class DisableCiscoNexusVSMCmd extends BaseAsyncCmd { public static final Logger s_logger = Logger.getLogger(DisableCiscoNexusVSMCmd.class.getName()); diff --git a/plugins/hypervisors/vmware/src/com/cloud/api/commands/EnableCiscoNexusVSMCmd.java b/plugins/hypervisors/vmware/src/com/cloud/api/commands/EnableCiscoNexusVSMCmd.java index 25288fbf3f0..ad63dddb603 100644 --- a/plugins/hypervisors/vmware/src/com/cloud/api/commands/EnableCiscoNexusVSMCmd.java +++ b/plugins/hypervisors/vmware/src/com/cloud/api/commands/EnableCiscoNexusVSMCmd.java @@ -31,7 +31,7 @@ import com.cloud.user.Account; import com.cloud.api.response.CiscoNexusVSMResponse; import com.cloud.network.CiscoNexusVSMDevice; -@APICommand(responseObject=CiscoNexusVSMResponse.class, description="Enable a Cisco Nexus VSM device") +@APICommand(name = "enableCiscoNexusVSM", responseObject=CiscoNexusVSMResponse.class, description="Enable a Cisco Nexus VSM device") public class EnableCiscoNexusVSMCmd extends BaseAsyncCmd { public static final Logger s_logger = Logger.getLogger(EnableCiscoNexusVSMCmd.class.getName()); diff --git a/plugins/hypervisors/vmware/src/com/cloud/api/commands/ListCiscoNexusVSMsCmd.java b/plugins/hypervisors/vmware/src/com/cloud/api/commands/ListCiscoNexusVSMsCmd.java index 657614fa208..ee6a01bdb8a 100755 --- a/plugins/hypervisors/vmware/src/com/cloud/api/commands/ListCiscoNexusVSMsCmd.java +++ b/plugins/hypervisors/vmware/src/com/cloud/api/commands/ListCiscoNexusVSMsCmd.java @@ -39,7 +39,7 @@ import com.cloud.user.Account; import java.util.ArrayList; import java.util.List; -@APICommand(responseObject=CiscoNexusVSMResponse.class, description="Retrieves a Cisco Nexus 1000v Virtual Switch Manager device associated with a Cluster") +@APICommand(name = "listCiscoNexusVSMs", responseObject=CiscoNexusVSMResponse.class, description="Retrieves a Cisco Nexus 1000v Virtual Switch Manager device associated with a Cluster") public class ListCiscoNexusVSMsCmd extends BaseListCmd { /** diff --git a/plugins/network-elements/f5/src/com/cloud/api/commands/AddExternalLoadBalancerCmd.java b/plugins/network-elements/f5/src/com/cloud/api/commands/AddExternalLoadBalancerCmd.java index bb8d05e03e3..5b931e1b4e7 100644 --- a/plugins/network-elements/f5/src/com/cloud/api/commands/AddExternalLoadBalancerCmd.java +++ b/plugins/network-elements/f5/src/com/cloud/api/commands/AddExternalLoadBalancerCmd.java @@ -33,7 +33,7 @@ import com.cloud.server.api.response.ExternalLoadBalancerResponse; import com.cloud.user.Account; import com.cloud.utils.exception.CloudRuntimeException; -@APICommand(description="Adds F5 external load balancer appliance.", responseObject = ExternalLoadBalancerResponse.class) +@APICommand(name = "addExternalLoadBalancer", description="Adds F5 external load balancer appliance.", responseObject = ExternalLoadBalancerResponse.class) @Deprecated // API supported only for backward compatibility. public class AddExternalLoadBalancerCmd extends BaseCmd { public static final Logger s_logger = Logger.getLogger(AddExternalLoadBalancerCmd.class.getName()); diff --git a/plugins/network-elements/f5/src/com/cloud/api/commands/AddF5LoadBalancerCmd.java b/plugins/network-elements/f5/src/com/cloud/api/commands/AddF5LoadBalancerCmd.java index 35590ccdc99..a5616e0ee73 100644 --- a/plugins/network-elements/f5/src/com/cloud/api/commands/AddF5LoadBalancerCmd.java +++ b/plugins/network-elements/f5/src/com/cloud/api/commands/AddF5LoadBalancerCmd.java @@ -34,7 +34,7 @@ import com.cloud.network.element.F5ExternalLoadBalancerElementService; import com.cloud.user.UserContext; import com.cloud.utils.exception.CloudRuntimeException; -@APICommand(responseObject=F5LoadBalancerResponse.class, description="Adds a F5 BigIP load balancer device") +@APICommand(name = "addF5LoadBalancer", responseObject=F5LoadBalancerResponse.class, description="Adds a F5 BigIP load balancer device") public class AddF5LoadBalancerCmd extends BaseAsyncCmd { public static final Logger s_logger = Logger.getLogger(AddF5LoadBalancerCmd.class.getName()); diff --git a/plugins/network-elements/f5/src/com/cloud/api/commands/ConfigureF5LoadBalancerCmd.java b/plugins/network-elements/f5/src/com/cloud/api/commands/ConfigureF5LoadBalancerCmd.java index 9ce8dda20df..f6eddc8497c 100644 --- a/plugins/network-elements/f5/src/com/cloud/api/commands/ConfigureF5LoadBalancerCmd.java +++ b/plugins/network-elements/f5/src/com/cloud/api/commands/ConfigureF5LoadBalancerCmd.java @@ -33,7 +33,7 @@ import com.cloud.network.element.F5ExternalLoadBalancerElementService; import com.cloud.user.UserContext; import com.cloud.utils.exception.CloudRuntimeException; -@APICommand(responseObject=F5LoadBalancerResponse.class, description="configures a F5 load balancer device") +@APICommand(name = "configureF5LoadBalancer", responseObject=F5LoadBalancerResponse.class, description="configures a F5 load balancer device") public class ConfigureF5LoadBalancerCmd extends BaseAsyncCmd { public static final Logger s_logger = Logger.getLogger(ConfigureF5LoadBalancerCmd.class.getName()); diff --git a/plugins/network-elements/f5/src/com/cloud/api/commands/DeleteExternalLoadBalancerCmd.java b/plugins/network-elements/f5/src/com/cloud/api/commands/DeleteExternalLoadBalancerCmd.java index 71d6b59e20e..d3015712596 100644 --- a/plugins/network-elements/f5/src/com/cloud/api/commands/DeleteExternalLoadBalancerCmd.java +++ b/plugins/network-elements/f5/src/com/cloud/api/commands/DeleteExternalLoadBalancerCmd.java @@ -27,7 +27,7 @@ import com.cloud.exception.InvalidParameterValueException; import com.cloud.network.element.F5ExternalLoadBalancerElementService; import com.cloud.user.Account; -@APICommand(description="Deletes a F5 external load balancer appliance added in a zone.", responseObject = SuccessResponse.class) +@APICommand(name = "deleteExternalLoadBalancer", description="Deletes a F5 external load balancer appliance added in a zone.", responseObject = SuccessResponse.class) @Deprecated // API supported for backward compatibility. public class DeleteExternalLoadBalancerCmd extends BaseCmd { public static final Logger s_logger = Logger.getLogger(DeleteExternalLoadBalancerCmd.class.getName()); diff --git a/plugins/network-elements/f5/src/com/cloud/api/commands/DeleteF5LoadBalancerCmd.java b/plugins/network-elements/f5/src/com/cloud/api/commands/DeleteF5LoadBalancerCmd.java index 5e746f02097..346bfdff48c 100644 --- a/plugins/network-elements/f5/src/com/cloud/api/commands/DeleteF5LoadBalancerCmd.java +++ b/plugins/network-elements/f5/src/com/cloud/api/commands/DeleteF5LoadBalancerCmd.java @@ -39,7 +39,7 @@ import com.cloud.network.element.F5ExternalLoadBalancerElementService; import com.cloud.user.UserContext; import com.cloud.utils.exception.CloudRuntimeException; -@APICommand(responseObject=SuccessResponse.class, description=" delete a F5 load balancer device") +@APICommand(name = "deleteF5LoadBalancer", responseObject=SuccessResponse.class, description=" delete a F5 load balancer device") public class DeleteF5LoadBalancerCmd extends BaseAsyncCmd { public static final Logger s_logger = Logger.getLogger(DeleteF5LoadBalancerCmd.class.getName()); private static final String s_name = "deletef5loadbalancerresponse"; diff --git a/plugins/network-elements/f5/src/com/cloud/api/commands/ListExternalLoadBalancersCmd.java b/plugins/network-elements/f5/src/com/cloud/api/commands/ListExternalLoadBalancersCmd.java index e8ee1c25fce..029c502f079 100644 --- a/plugins/network-elements/f5/src/com/cloud/api/commands/ListExternalLoadBalancersCmd.java +++ b/plugins/network-elements/f5/src/com/cloud/api/commands/ListExternalLoadBalancersCmd.java @@ -30,7 +30,7 @@ import com.cloud.host.Host; import com.cloud.network.element.F5ExternalLoadBalancerElementService; import com.cloud.server.api.response.ExternalLoadBalancerResponse; -@APICommand(description="Lists F5 external load balancer appliances added in a zone.", responseObject = HostResponse.class) +@APICommand(name = "listExternalLoadBalancers", description="Lists F5 external load balancer appliances added in a zone.", responseObject = HostResponse.class) @Deprecated // API supported for backward compatibility. public class ListExternalLoadBalancersCmd extends BaseListCmd { public static final Logger s_logger = Logger.getLogger(ListExternalLoadBalancersCmd.class.getName()); diff --git a/plugins/network-elements/f5/src/com/cloud/api/commands/ListF5LoadBalancerNetworksCmd.java b/plugins/network-elements/f5/src/com/cloud/api/commands/ListF5LoadBalancerNetworksCmd.java index 3519a81f67b..0194b5d9e8f 100644 --- a/plugins/network-elements/f5/src/com/cloud/api/commands/ListF5LoadBalancerNetworksCmd.java +++ b/plugins/network-elements/f5/src/com/cloud/api/commands/ListF5LoadBalancerNetworksCmd.java @@ -41,7 +41,7 @@ import com.cloud.network.Network; import com.cloud.network.element.F5ExternalLoadBalancerElementService; import com.cloud.utils.exception.CloudRuntimeException; -@APICommand(responseObject=NetworkResponse.class, description="lists network that are using a F5 load balancer device") +@APICommand(name = "listF5LoadBalancerNetworks", responseObject=NetworkResponse.class, description="lists network that are using a F5 load balancer device") public class ListF5LoadBalancerNetworksCmd extends BaseListCmd { public static final Logger s_logger = Logger.getLogger(ListF5LoadBalancerNetworksCmd.class.getName()); diff --git a/plugins/network-elements/f5/src/com/cloud/api/commands/ListF5LoadBalancersCmd.java b/plugins/network-elements/f5/src/com/cloud/api/commands/ListF5LoadBalancersCmd.java index 4c28fa39613..36b6dc0bf17 100644 --- a/plugins/network-elements/f5/src/com/cloud/api/commands/ListF5LoadBalancersCmd.java +++ b/plugins/network-elements/f5/src/com/cloud/api/commands/ListF5LoadBalancersCmd.java @@ -36,7 +36,7 @@ import com.cloud.network.ExternalLoadBalancerDeviceVO; import com.cloud.network.element.F5ExternalLoadBalancerElementService; import com.cloud.utils.exception.CloudRuntimeException; -@APICommand(responseObject=F5LoadBalancerResponse.class, description="lists F5 load balancer devices") +@APICommand(name = "listF5LoadBalancers", responseObject=F5LoadBalancerResponse.class, description="lists F5 load balancer devices") public class ListF5LoadBalancersCmd extends BaseListCmd { public static final Logger s_logger = Logger.getLogger(ListF5LoadBalancersCmd.class.getName()); private static final String s_name = "listf5loadbalancerresponse"; diff --git a/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/AddExternalFirewallCmd.java b/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/AddExternalFirewallCmd.java index c2083268309..c2f8f03354a 100644 --- a/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/AddExternalFirewallCmd.java +++ b/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/AddExternalFirewallCmd.java @@ -32,7 +32,7 @@ import com.cloud.server.api.response.ExternalFirewallResponse; import com.cloud.user.Account; import com.cloud.utils.exception.CloudRuntimeException; -@APICommand(description="Adds an external firewall appliance", responseObject = ExternalFirewallResponse.class) +@APICommand(name = "addExternalFirewall", description="Adds an external firewall appliance", responseObject = ExternalFirewallResponse.class) public class AddExternalFirewallCmd extends BaseCmd { public static final Logger s_logger = Logger.getLogger(AddExternalFirewallCmd.class.getName()); private static final String s_name = "addexternalfirewallresponse"; diff --git a/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/AddSrxFirewallCmd.java b/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/AddSrxFirewallCmd.java index dd1df59440d..a2ad4e5ce2b 100644 --- a/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/AddSrxFirewallCmd.java +++ b/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/AddSrxFirewallCmd.java @@ -38,7 +38,7 @@ import com.cloud.network.element.JuniperSRXFirewallElementService; import com.cloud.user.UserContext; import com.cloud.utils.exception.CloudRuntimeException; -@APICommand(responseObject=SrxFirewallResponse.class, description="Adds a SRX firewall device") +@APICommand(name = "addSrxFirewall", responseObject=SrxFirewallResponse.class, description="Adds a SRX firewall device") public class AddSrxFirewallCmd extends BaseAsyncCmd { public static final Logger s_logger = Logger.getLogger(AddSrxFirewallCmd.class.getName()); private static final String s_name = "addsrxfirewallresponse"; diff --git a/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/ConfigureSrxFirewallCmd.java b/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/ConfigureSrxFirewallCmd.java index 61c44e27c57..002fad72d0b 100644 --- a/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/ConfigureSrxFirewallCmd.java +++ b/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/ConfigureSrxFirewallCmd.java @@ -38,7 +38,7 @@ import com.cloud.network.element.JuniperSRXFirewallElementService; import com.cloud.user.UserContext; import com.cloud.utils.exception.CloudRuntimeException; -@APICommand(responseObject=SrxFirewallResponse.class, description="Configures a SRX firewall device") +@APICommand(name = "configureSrxFirewall", responseObject=SrxFirewallResponse.class, description="Configures a SRX firewall device") public class ConfigureSrxFirewallCmd extends BaseAsyncCmd { public static final Logger s_logger = Logger.getLogger(ConfigureSrxFirewallCmd.class.getName()); diff --git a/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/DeleteExternalFirewallCmd.java b/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/DeleteExternalFirewallCmd.java index d5e8963136c..5cdc9e3c92c 100644 --- a/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/DeleteExternalFirewallCmd.java +++ b/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/DeleteExternalFirewallCmd.java @@ -30,7 +30,7 @@ import com.cloud.exception.InvalidParameterValueException; import com.cloud.network.element.JuniperSRXFirewallElementService; import com.cloud.user.Account; -@APICommand(description="Deletes an external firewall appliance.", responseObject = SuccessResponse.class) +@APICommand(name = "deleteExternalFirewall", description="Deletes an external firewall appliance.", responseObject = SuccessResponse.class) public class DeleteExternalFirewallCmd extends BaseCmd { public static final Logger s_logger = Logger.getLogger(DeleteExternalFirewallCmd.class.getName()); private static final String s_name = "deleteexternalfirewallresponse"; diff --git a/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/DeleteSrxFirewallCmd.java b/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/DeleteSrxFirewallCmd.java index 226bde5ddd7..4595c225aef 100644 --- a/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/DeleteSrxFirewallCmd.java +++ b/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/DeleteSrxFirewallCmd.java @@ -37,7 +37,7 @@ import com.cloud.network.element.JuniperSRXFirewallElementService; import com.cloud.user.UserContext; import com.cloud.utils.exception.CloudRuntimeException; -@APICommand(responseObject=SuccessResponse.class, description=" delete a SRX firewall device") +@APICommand(name = "deleteSrxFirewall", responseObject=SuccessResponse.class, description=" delete a SRX firewall device") public class DeleteSrxFirewallCmd extends BaseAsyncCmd { public static final Logger s_logger = Logger.getLogger(DeleteSrxFirewallCmd.class.getName()); private static final String s_name = "deletesrxfirewallresponse"; diff --git a/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/ListExternalFirewallsCmd.java b/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/ListExternalFirewallsCmd.java index 5d02ed97c9f..f2c33bcb88e 100644 --- a/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/ListExternalFirewallsCmd.java +++ b/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/ListExternalFirewallsCmd.java @@ -33,7 +33,7 @@ import com.cloud.host.Host; import com.cloud.network.element.JuniperSRXFirewallElementService; import com.cloud.server.api.response.ExternalFirewallResponse; -@APICommand(description="List external firewall appliances.", responseObject = ExternalFirewallResponse.class) +@APICommand(name = "listExternalFirewalls", description="List external firewall appliances.", responseObject = ExternalFirewallResponse.class) public class ListExternalFirewallsCmd extends BaseListCmd { public static final Logger s_logger = Logger.getLogger(ListServiceOfferingsCmd.class.getName()); private static final String s_name = "listexternalfirewallsresponse"; diff --git a/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/ListSrxFirewallNetworksCmd.java b/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/ListSrxFirewallNetworksCmd.java index 296784c2757..80881d4fbb5 100644 --- a/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/ListSrxFirewallNetworksCmd.java +++ b/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/ListSrxFirewallNetworksCmd.java @@ -34,7 +34,7 @@ import com.cloud.network.Network; import com.cloud.network.element.JuniperSRXFirewallElementService; import com.cloud.utils.exception.CloudRuntimeException; -@APICommand(responseObject=NetworkResponse.class, description="lists network that are using SRX firewall device") +@APICommand(name = "listSrxFirewallNetworks", responseObject=NetworkResponse.class, description="lists network that are using SRX firewall device") public class ListSrxFirewallNetworksCmd extends BaseListCmd { public static final Logger s_logger = Logger.getLogger(ListSrxFirewallNetworksCmd.class.getName()); diff --git a/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/ListSrxFirewallsCmd.java b/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/ListSrxFirewallsCmd.java index ac1c3c4b0d7..36ecaea0a5d 100644 --- a/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/ListSrxFirewallsCmd.java +++ b/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/ListSrxFirewallsCmd.java @@ -35,7 +35,7 @@ import com.cloud.network.ExternalFirewallDeviceVO; import com.cloud.network.element.JuniperSRXFirewallElementService; import com.cloud.utils.exception.CloudRuntimeException; -@APICommand(responseObject=SrxFirewallResponse.class, description="lists SRX firewall devices in a physical network") +@APICommand(name = "listSrxFirewalls", responseObject=SrxFirewallResponse.class, description="lists SRX firewall devices in a physical network") public class ListSrxFirewallsCmd extends BaseListCmd { public static final Logger s_logger = Logger.getLogger(ListSrxFirewallsCmd.class.getName()); diff --git a/plugins/network-elements/netscaler/src/com/cloud/api/commands/AddNetscalerLoadBalancerCmd.java b/plugins/network-elements/netscaler/src/com/cloud/api/commands/AddNetscalerLoadBalancerCmd.java index 83397ff2634..9d902975723 100644 --- a/plugins/network-elements/netscaler/src/com/cloud/api/commands/AddNetscalerLoadBalancerCmd.java +++ b/plugins/network-elements/netscaler/src/com/cloud/api/commands/AddNetscalerLoadBalancerCmd.java @@ -31,7 +31,7 @@ import com.cloud.network.element.NetscalerLoadBalancerElementService; import com.cloud.user.UserContext; import com.cloud.utils.exception.CloudRuntimeException; -@APICommand(responseObject=NetscalerLoadBalancerResponse.class, description="Adds a netscaler load balancer device") +@APICommand(name = "addNetscalerLoadBalancer", responseObject=NetscalerLoadBalancerResponse.class, description="Adds a netscaler load balancer device") public class AddNetscalerLoadBalancerCmd extends BaseAsyncCmd { public static final Logger s_logger = Logger.getLogger(AddNetscalerLoadBalancerCmd.class.getName()); diff --git a/plugins/network-elements/netscaler/src/com/cloud/api/commands/ConfigureNetscalerLoadBalancerCmd.java b/plugins/network-elements/netscaler/src/com/cloud/api/commands/ConfigureNetscalerLoadBalancerCmd.java index 7d1f4d34f31..6fc7adbb70e 100644 --- a/plugins/network-elements/netscaler/src/com/cloud/api/commands/ConfigureNetscalerLoadBalancerCmd.java +++ b/plugins/network-elements/netscaler/src/com/cloud/api/commands/ConfigureNetscalerLoadBalancerCmd.java @@ -33,7 +33,7 @@ import com.cloud.network.element.NetscalerLoadBalancerElementService; import com.cloud.user.UserContext; import com.cloud.utils.exception.CloudRuntimeException; -@APICommand(responseObject=NetscalerLoadBalancerResponse.class, description="configures a netscaler load balancer device") +@APICommand(name = "configureNetscalerLoadBalancer", responseObject=NetscalerLoadBalancerResponse.class, description="configures a netscaler load balancer device") public class ConfigureNetscalerLoadBalancerCmd extends BaseAsyncCmd { public static final Logger s_logger = Logger.getLogger(ConfigureNetscalerLoadBalancerCmd.class.getName()); diff --git a/plugins/network-elements/netscaler/src/com/cloud/api/commands/DeleteNetscalerLoadBalancerCmd.java b/plugins/network-elements/netscaler/src/com/cloud/api/commands/DeleteNetscalerLoadBalancerCmd.java index 64101c674af..3f763ba5c2a 100644 --- a/plugins/network-elements/netscaler/src/com/cloud/api/commands/DeleteNetscalerLoadBalancerCmd.java +++ b/plugins/network-elements/netscaler/src/com/cloud/api/commands/DeleteNetscalerLoadBalancerCmd.java @@ -36,7 +36,7 @@ import com.cloud.network.element.NetscalerLoadBalancerElementService; import com.cloud.user.UserContext; import com.cloud.utils.exception.CloudRuntimeException; -@APICommand(responseObject=SuccessResponse.class, description=" delete a netscaler load balancer device") +@APICommand(name = "deleteNetscalerLoadBalancer", responseObject=SuccessResponse.class, description=" delete a netscaler load balancer device") public class DeleteNetscalerLoadBalancerCmd extends BaseAsyncCmd { public static final Logger s_logger = Logger.getLogger(DeleteNetscalerLoadBalancerCmd.class.getName()); diff --git a/plugins/network-elements/netscaler/src/com/cloud/api/commands/ListNetscalerLoadBalancerNetworksCmd.java b/plugins/network-elements/netscaler/src/com/cloud/api/commands/ListNetscalerLoadBalancerNetworksCmd.java index 7b4202c4a23..2dd3fe4ef6e 100644 --- a/plugins/network-elements/netscaler/src/com/cloud/api/commands/ListNetscalerLoadBalancerNetworksCmd.java +++ b/plugins/network-elements/netscaler/src/com/cloud/api/commands/ListNetscalerLoadBalancerNetworksCmd.java @@ -38,7 +38,7 @@ import com.cloud.network.Network; import com.cloud.network.element.NetscalerLoadBalancerElementService; import com.cloud.utils.exception.CloudRuntimeException; -@APICommand(responseObject=NetworkResponse.class, description="lists network that are using a netscaler load balancer device") +@APICommand(name = "listNetscalerLoadBalancerNetworks", responseObject=NetworkResponse.class, description="lists network that are using a netscaler load balancer device") public class ListNetscalerLoadBalancerNetworksCmd extends BaseListCmd { public static final Logger s_logger = Logger.getLogger(ListNetscalerLoadBalancerNetworksCmd.class.getName()); diff --git a/plugins/network-elements/netscaler/src/com/cloud/api/commands/ListNetscalerLoadBalancersCmd.java b/plugins/network-elements/netscaler/src/com/cloud/api/commands/ListNetscalerLoadBalancersCmd.java index 961a3a407b9..56ed464d116 100644 --- a/plugins/network-elements/netscaler/src/com/cloud/api/commands/ListNetscalerLoadBalancersCmd.java +++ b/plugins/network-elements/netscaler/src/com/cloud/api/commands/ListNetscalerLoadBalancersCmd.java @@ -39,7 +39,7 @@ import com.cloud.network.ExternalLoadBalancerDeviceVO; import com.cloud.network.element.NetscalerLoadBalancerElementService; import com.cloud.utils.exception.CloudRuntimeException; -@APICommand(responseObject=NetscalerLoadBalancerResponse.class, description="lists netscaler load balancer devices") +@APICommand(name = "listNetscalerLoadBalancers", responseObject=NetscalerLoadBalancerResponse.class, description="lists netscaler load balancer devices") public class ListNetscalerLoadBalancersCmd extends BaseListCmd { public static final Logger s_logger = Logger.getLogger(ListNetscalerLoadBalancersCmd.class.getName()); diff --git a/plugins/network-elements/nicira-nvp/src/com/cloud/api/commands/AddNiciraNvpDeviceCmd.java b/plugins/network-elements/nicira-nvp/src/com/cloud/api/commands/AddNiciraNvpDeviceCmd.java index 5f78fed1f49..1734ce2ff3d 100644 --- a/plugins/network-elements/nicira-nvp/src/com/cloud/api/commands/AddNiciraNvpDeviceCmd.java +++ b/plugins/network-elements/nicira-nvp/src/com/cloud/api/commands/AddNiciraNvpDeviceCmd.java @@ -33,7 +33,7 @@ import com.cloud.network.element.NiciraNvpElementService; import com.cloud.user.UserContext; import com.cloud.utils.exception.CloudRuntimeException; -@APICommand(responseObject=NiciraNvpDeviceResponse.class, description="Adds a Nicira NVP device") +@APICommand(name = "addNiciraNvpDevice", responseObject=NiciraNvpDeviceResponse.class, description="Adds a Nicira NVP device") public class AddNiciraNvpDeviceCmd extends BaseAsyncCmd { private static final Logger s_logger = Logger.getLogger(AddNiciraNvpDeviceCmd.class.getName()); private static final String s_name = "addniciranvpdeviceresponse"; diff --git a/plugins/network-elements/nicira-nvp/src/com/cloud/api/commands/DeleteNiciraNvpDeviceCmd.java b/plugins/network-elements/nicira-nvp/src/com/cloud/api/commands/DeleteNiciraNvpDeviceCmd.java index 2cbce919823..69f6eaf1375 100644 --- a/plugins/network-elements/nicira-nvp/src/com/cloud/api/commands/DeleteNiciraNvpDeviceCmd.java +++ b/plugins/network-elements/nicira-nvp/src/com/cloud/api/commands/DeleteNiciraNvpDeviceCmd.java @@ -37,7 +37,7 @@ import com.cloud.network.element.NiciraNvpElementService; import com.cloud.user.UserContext; import com.cloud.utils.exception.CloudRuntimeException; -@APICommand(responseObject=SuccessResponse.class, description=" delete a nicira nvp device") +@APICommand(name = "deleteNiciraNvpDevice", responseObject=SuccessResponse.class, description=" delete a nicira nvp device") public class DeleteNiciraNvpDeviceCmd extends BaseAsyncCmd { private static final Logger s_logger = Logger.getLogger(DeleteNiciraNvpDeviceCmd.class.getName()); private static final String s_name = "deleteniciranvpdeviceresponse"; diff --git a/plugins/network-elements/nicira-nvp/src/com/cloud/api/commands/ListNiciraNvpDeviceNetworksCmd.java b/plugins/network-elements/nicira-nvp/src/com/cloud/api/commands/ListNiciraNvpDeviceNetworksCmd.java index 482ab2cc2a9..29931b2733e 100644 --- a/plugins/network-elements/nicira-nvp/src/com/cloud/api/commands/ListNiciraNvpDeviceNetworksCmd.java +++ b/plugins/network-elements/nicira-nvp/src/com/cloud/api/commands/ListNiciraNvpDeviceNetworksCmd.java @@ -40,7 +40,7 @@ import com.cloud.network.Network; import com.cloud.network.element.NiciraNvpElementService; import com.cloud.utils.exception.CloudRuntimeException; -@APICommand(responseObject=NetworkResponse.class, description="lists network that are using a nicira nvp device") +@APICommand(name = "listNiciraNvpDeviceNetworks", responseObject=NetworkResponse.class, description="lists network that are using a nicira nvp device") public class ListNiciraNvpDeviceNetworksCmd extends BaseListCmd { public static final Logger s_logger = Logger.getLogger(ListNiciraNvpDeviceNetworksCmd.class.getName()); diff --git a/plugins/network-elements/nicira-nvp/src/com/cloud/api/commands/ListNiciraNvpDevicesCmd.java b/plugins/network-elements/nicira-nvp/src/com/cloud/api/commands/ListNiciraNvpDevicesCmd.java index 722c96794bd..7311b91a658 100644 --- a/plugins/network-elements/nicira-nvp/src/com/cloud/api/commands/ListNiciraNvpDevicesCmd.java +++ b/plugins/network-elements/nicira-nvp/src/com/cloud/api/commands/ListNiciraNvpDevicesCmd.java @@ -35,7 +35,7 @@ import com.cloud.network.NiciraNvpDeviceVO; import com.cloud.network.element.NiciraNvpElementService; import com.cloud.utils.exception.CloudRuntimeException; -@APICommand(responseObject=NiciraNvpDeviceResponse.class, description="Lists Nicira NVP devices") +@APICommand(name = "listNiciraNvpDevices", responseObject=NiciraNvpDeviceResponse.class, description="Lists Nicira NVP devices") public class ListNiciraNvpDevicesCmd extends BaseListCmd { private static final Logger s_logger = Logger.getLogger(ListNiciraNvpDevicesCmd.class.getName()); private static final String s_name = "listniciranvpdeviceresponse"; From 983fe9712fac863397fdc0f9eb1eeb727986b112 Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Fri, 28 Dec 2012 01:47:22 -0800 Subject: [PATCH 230/421] api: Fix name field in @APICommand for CopyTemplateCmd.java Signed-off-by: Rohit Yadav --- .../cloudstack/api/command/user/template/CopyTemplateCmd.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/api/src/org/apache/cloudstack/api/command/user/template/CopyTemplateCmd.java b/api/src/org/apache/cloudstack/api/command/user/template/CopyTemplateCmd.java index 3b24ba1920a..c6461a75e28 100644 --- a/api/src/org/apache/cloudstack/api/command/user/template/CopyTemplateCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/template/CopyTemplateCmd.java @@ -37,7 +37,7 @@ import com.cloud.template.VirtualMachineTemplate; import com.cloud.user.Account; import com.cloud.user.UserContext; -@APICommand(name = "copyIso", name = "copyTemplate", description="Copies a template from one zone to another.", responseObject=TemplateResponse.class) +@APICommand(name = "copyTemplate", description="Copies a template from one zone to another.", responseObject=TemplateResponse.class) public class CopyTemplateCmd extends BaseAsyncCmd { public static final Logger s_logger = Logger.getLogger(CopyTemplateCmd.class.getName()); private static final String s_name = "copytemplateresponse"; From d928014a75461d21cd8eeca628150445440e9b08 Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Fri, 28 Dec 2012 01:49:43 -0800 Subject: [PATCH 231/421] api: Add CopyIsoCmd, boilerplate cmd class for api copyIso Two apis, copyIso and copyTemplate point to the same Cmd class, the commit adds the child class CopyIsoCmd that extends on CopyTemplateCmd. This just serves as the boilerplate class. Every api cmd name maps 1:1 to a cmd class. Signed-off-by: Rohit Yadav --- .../api/command/user/iso/CopyIsoCmd.java | 30 +++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 api/src/org/apache/cloudstack/api/command/user/iso/CopyIsoCmd.java diff --git a/api/src/org/apache/cloudstack/api/command/user/iso/CopyIsoCmd.java b/api/src/org/apache/cloudstack/api/command/user/iso/CopyIsoCmd.java new file mode 100644 index 00000000000..b449ff59180 --- /dev/null +++ b/api/src/org/apache/cloudstack/api/command/user/iso/CopyIsoCmd.java @@ -0,0 +1,30 @@ +// 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 org.apache.cloudstack.api.command.user.iso; + +import org.apache.log4j.Logger; + +import org.apache.cloudstack.api.APICommand; +import org.apache.cloudstack.api.response.TemplateResponse; +import org.apache.cloudstack.api.command.user.template.CopyTemplateCmd; + +@APICommand(name = "copyIso", description="Copies an iso from one zone to another.", responseObject=TemplateResponse.class) +public class CopyIsoCmd extends CopyTemplateCmd { + public static final Logger s_logger = Logger.getLogger(CopyIsoCmd.class.getName()); + private static final String s_name = "copyisoresponse"; +} + From d235859168569fcd344e2210891b7611dbb3da12 Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Wed, 2 Jan 2013 16:29:39 -0800 Subject: [PATCH 232/421] Fix PluggableService to provide interface for ACL adapters etc. to get configs - Fix interface to return array of strings, or filenames - Fix StaticRoleBased ACL adapter to process config files by going through all pluggable services - Refactor interface names Signed-off-by: Rohit Yadav --- .../server/ManagementServerSimulatorImpl.java | 4 +- .../network/element/NiciraNvpElement.java | 4 +- .../acl/StaticRoleBasedAPIAccessChecker.java | 117 +++++++----------- .../network/element/VirtualRouterElement.java | 4 +- .../com/cloud/server/ManagementServer.java | 5 +- .../cloud/server/ManagementServerExtImpl.java | 2 +- .../cloud/server/ManagementServerImpl.java | 2 +- .../cloud/servlet/CloudStartupServlet.java | 2 +- .../utils/component/PluggableService.java | 15 +-- 9 files changed, 62 insertions(+), 93 deletions(-) diff --git a/plugins/hypervisors/simulator/src/com/cloud/server/ManagementServerSimulatorImpl.java b/plugins/hypervisors/simulator/src/com/cloud/server/ManagementServerSimulatorImpl.java index 35aa3010005..ad42c23380e 100644 --- a/plugins/hypervisors/simulator/src/com/cloud/server/ManagementServerSimulatorImpl.java +++ b/plugins/hypervisors/simulator/src/com/cloud/server/ManagementServerSimulatorImpl.java @@ -19,8 +19,8 @@ package com.cloud.server; public class ManagementServerSimulatorImpl extends ManagementServerExtImpl { @Override - public String[] getApiConfig() { - String[] apis = super.getApiConfig(); + public String[] getPropertiesFiles() { + String[] apis = super.getPropertiesFiles(); String[] newapis = new String[apis.length + 1]; for (int i = 0; i < apis.length; i++) { newapis[i] = apis[i]; diff --git a/plugins/network-elements/nicira-nvp/src/com/cloud/network/element/NiciraNvpElement.java b/plugins/network-elements/nicira-nvp/src/com/cloud/network/element/NiciraNvpElement.java index dc47a7399a2..4974cbe59e4 100644 --- a/plugins/network-elements/nicira-nvp/src/com/cloud/network/element/NiciraNvpElement.java +++ b/plugins/network-elements/nicira-nvp/src/com/cloud/network/element/NiciraNvpElement.java @@ -540,8 +540,8 @@ public class NiciraNvpElement extends AdapterBase implements } @Override - public String getPropertiesFile() { - return "nicira-nvp_commands.properties"; + public String[] getPropertiesFiles() { + return new String[] { "nicira-nvp_commands.properties" }; } @Override diff --git a/server/src/com/cloud/acl/StaticRoleBasedAPIAccessChecker.java b/server/src/com/cloud/acl/StaticRoleBasedAPIAccessChecker.java index 29dbc13b0f4..816b0def446 100644 --- a/server/src/com/cloud/acl/StaticRoleBasedAPIAccessChecker.java +++ b/server/src/com/cloud/acl/StaticRoleBasedAPIAccessChecker.java @@ -21,10 +21,7 @@ import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; -import java.util.Properties; +import java.util.*; import javax.ejb.Local; import javax.naming.ConfigurationException; @@ -60,7 +57,6 @@ public class StaticRoleBasedAPIAccessChecker extends AdapterBase implements APIA private static List s_adminCommands = null; private static List s_resourceDomainAdminCommands = null; private static List s_allCommands = null; - private static List s_pluggableServiceCommands = null; private Properties _apiCommands = null; protected @Inject AccountManager _accountMgr; @@ -72,7 +68,6 @@ public class StaticRoleBasedAPIAccessChecker extends AdapterBase implements APIA s_resellerCommands = new ArrayList(); s_adminCommands = new ArrayList(); s_resourceDomainAdminCommands = new ArrayList(); - s_pluggableServiceCommands = new ArrayList(); } @Override @@ -119,88 +114,70 @@ public class StaticRoleBasedAPIAccessChecker extends AdapterBase implements APIA public boolean configure(String name, Map params) throws ConfigurationException { super.configure(name, params); - //load command.properties to build the static map per role. + // Read command properties files to build the static map per role. ComponentLocator locator = ComponentLocator.getLocator(ManagementServer.Name); - String[] apiConfig = ((ManagementServer) ComponentLocator.getComponent(ManagementServer.Name)).getApiConfig(); + List services = locator.getAllPluggableServices(); + services.add((PluggableService) ComponentLocator.getComponent(ManagementServer.Name)); - processConfigFiles(apiConfig, false); - - // get commands for all pluggable services - String[] pluggableServicesApiConfigs = getPluggableServicesApiConfigs(); - processConfigFiles(pluggableServicesApiConfigs, true); + List configFiles = new ArrayList(); + for (PluggableService service : services) { + configFiles.addAll(Arrays.asList(service.getPropertiesFiles())); + } + processConfigFiles(configFiles); return true; } - - private String[] getPluggableServicesApiConfigs() { - List pluggableServicesApiConfigs = new ArrayList(); - - ComponentLocator locator = ComponentLocator.getLocator(ManagementServer.Name); - List services = locator.getAllPluggableServices(); - for (PluggableService service : services) { - pluggableServicesApiConfigs.add(service.getPropertiesFile()); - } - return pluggableServicesApiConfigs.toArray(new String[0]); - } - - private void processConfigFiles(String[] apiConfig, boolean pluggableServicesConfig) { + private void processConfigFiles(List configFiles) { try { if (_apiCommands == null) _apiCommands = new Properties(); Properties preProcessedCommands = new Properties(); - if (apiConfig != null) { - for (String configFile : apiConfig) { - File commandsFile = PropertiesUtil.findConfigFile(configFile); - if (commandsFile != null) { - try { - preProcessedCommands.load(new FileInputStream(commandsFile)); - } catch (FileNotFoundException fnfex) { - // in case of a file within a jar in classpath, try to open stream using url - InputStream stream = PropertiesUtil.openStreamFromURL(configFile); - if (stream != null) { - preProcessedCommands.load(stream); - } else { - s_logger.error("Unable to find properites file", fnfex); - } + for (String configFile : configFiles) { + File commandsFile = PropertiesUtil.findConfigFile(configFile); + if (commandsFile != null) { + try { + preProcessedCommands.load(new FileInputStream(commandsFile)); + } catch (FileNotFoundException fnfex) { + // in case of a file within a jar in classpath, try to open stream using url + InputStream stream = PropertiesUtil.openStreamFromURL(configFile); + if (stream != null) { + preProcessedCommands.load(stream); + } else { + s_logger.error("Unable to find properites file", fnfex); } } } - for (Object key : preProcessedCommands.keySet()) { - String preProcessedCommand = preProcessedCommands.getProperty((String) key); - String[] commandParts = preProcessedCommand.split(";"); - _apiCommands.setProperty(key.toString(), commandParts[0]); + } + for (Object key : preProcessedCommands.keySet()) { + String preProcessedCommand = preProcessedCommands.getProperty((String) key); + String[] commandParts = preProcessedCommand.split(";"); + _apiCommands.setProperty(key.toString(), commandParts[0]); - if (pluggableServicesConfig) { - s_pluggableServiceCommands.add(commandParts[0]); - } - - if (commandParts.length > 1) { - try { - short cmdPermissions = Short.parseShort(commandParts[1]); - if ((cmdPermissions & ADMIN_COMMAND) != 0) { - s_adminCommands.add((String) key); - } - if ((cmdPermissions & RESOURCE_DOMAIN_ADMIN_COMMAND) != 0) { - s_resourceDomainAdminCommands.add((String) key); - } - if ((cmdPermissions & DOMAIN_ADMIN_COMMAND) != 0) { - s_resellerCommands.add((String) key); - } - if ((cmdPermissions & USER_COMMAND) != 0) { - s_userCommands.add((String) key); - } - s_allCommands.addAll(s_adminCommands); - s_allCommands.addAll(s_resourceDomainAdminCommands); - s_allCommands.addAll(s_userCommands); - s_allCommands.addAll(s_resellerCommands); - } catch (NumberFormatException nfe) { - s_logger.info("Malformed command.properties permissions value, key = " + key + ", value = " + preProcessedCommand); + if (commandParts.length > 1) { + try { + short cmdPermissions = Short.parseShort(commandParts[1]); + if ((cmdPermissions & ADMIN_COMMAND) != 0) { + s_adminCommands.add((String) key); } + if ((cmdPermissions & RESOURCE_DOMAIN_ADMIN_COMMAND) != 0) { + s_resourceDomainAdminCommands.add((String) key); + } + if ((cmdPermissions & DOMAIN_ADMIN_COMMAND) != 0) { + s_resellerCommands.add((String) key); + } + if ((cmdPermissions & USER_COMMAND) != 0) { + s_userCommands.add((String) key); + } + s_allCommands.addAll(s_adminCommands); + s_allCommands.addAll(s_resourceDomainAdminCommands); + s_allCommands.addAll(s_userCommands); + s_allCommands.addAll(s_resellerCommands); + } catch (NumberFormatException nfe) { + s_logger.info("Malformed command.properties permissions value, key = " + key + ", value = " + preProcessedCommand); } } - } } catch (FileNotFoundException fnfex) { s_logger.error("Unable to find properties file", fnfex); diff --git a/server/src/com/cloud/network/element/VirtualRouterElement.java b/server/src/com/cloud/network/element/VirtualRouterElement.java index 5167616f085..b5b8b1a73cd 100755 --- a/server/src/com/cloud/network/element/VirtualRouterElement.java +++ b/server/src/com/cloud/network/element/VirtualRouterElement.java @@ -680,8 +680,8 @@ public class VirtualRouterElement extends AdapterBase implements VirtualRouterEl } @Override - public String getPropertiesFile() { - return "virtualrouter_commands.properties"; + public String[] getPropertiesFiles() { + return new String[] { "virtualrouter_commands.properties" }; } @Override diff --git a/server/src/com/cloud/server/ManagementServer.java b/server/src/com/cloud/server/ManagementServer.java index 91f82f874d5..29c76e051c5 100755 --- a/server/src/com/cloud/server/ManagementServer.java +++ b/server/src/com/cloud/server/ManagementServer.java @@ -25,11 +25,12 @@ import com.cloud.info.ConsoleProxyInfo; import com.cloud.storage.GuestOSVO; import com.cloud.storage.StoragePoolVO; import com.cloud.utils.Pair; +import com.cloud.utils.component.PluggableService; import com.cloud.vm.VirtualMachine; /** */ -public interface ManagementServer extends ManagementService { +public interface ManagementServer extends ManagementService, PluggableService { /** * returns the instance id of this management server. @@ -43,8 +44,6 @@ public interface ManagementServer extends ManagementService { */ @Override String getVersion(); - - String[] getApiConfig(); /** * Retrieves a host by id diff --git a/server/src/com/cloud/server/ManagementServerExtImpl.java b/server/src/com/cloud/server/ManagementServerExtImpl.java index 992d006e37d..fbd517dc5c2 100644 --- a/server/src/com/cloud/server/ManagementServerExtImpl.java +++ b/server/src/com/cloud/server/ManagementServerExtImpl.java @@ -206,7 +206,7 @@ public class ManagementServerExtImpl extends ManagementServerImpl implements Man } @Override - public String[] getApiConfig() { + public String[] getPropertiesFiles() { return new String[] { "commands.properties", "commands-ext.properties" }; } diff --git a/server/src/com/cloud/server/ManagementServerImpl.java b/server/src/com/cloud/server/ManagementServerImpl.java index c3e5f8f1b0f..ee5f78e5640 100755 --- a/server/src/com/cloud/server/ManagementServerImpl.java +++ b/server/src/com/cloud/server/ManagementServerImpl.java @@ -2309,7 +2309,7 @@ public class ManagementServerImpl implements ManagementServer { } @Override - public String[] getApiConfig() { + public String[] getPropertiesFiles() { return new String[] { "commands.properties" }; } diff --git a/server/src/com/cloud/servlet/CloudStartupServlet.java b/server/src/com/cloud/servlet/CloudStartupServlet.java index 9efb4ea5a8c..389bd26bc4b 100755 --- a/server/src/com/cloud/servlet/CloudStartupServlet.java +++ b/server/src/com/cloud/servlet/CloudStartupServlet.java @@ -48,7 +48,7 @@ public class CloudStartupServlet extends HttpServlet implements ServletContextLi s_locator = ComponentLocator.getLocator(ManagementServer.Name); ManagementServer ms = (ManagementServer)ComponentLocator.getComponent(ManagementServer.Name); ms.enableAdminUser("password"); - ApiServer.initApiServer(ms.getApiConfig()); + ApiServer.initApiServer(ms.getPropertiesFiles()); } catch (InvalidParameterValueException ipve) { s_logger.error("Exception starting management server ", ipve); throw new ServletException (ipve.getMessage()); diff --git a/utils/src/com/cloud/utils/component/PluggableService.java b/utils/src/com/cloud/utils/component/PluggableService.java index 9c946284eea..d2199394a69 100644 --- a/utils/src/com/cloud/utils/component/PluggableService.java +++ b/utils/src/com/cloud/utils/component/PluggableService.java @@ -16,16 +16,9 @@ // under the License. package com.cloud.utils.component; - - -/** - * This interface defines methods for pluggable code within the Cloud Stack. - */ +// This interface defines methods for pluggable code within the Cloud Stack. public interface PluggableService { - - /** - * The config file name that lists API commands supported by this pluggable service - */ - String getPropertiesFile(); - + // The config command properties filenames that lists allowed API commands + // and role masks supported by this pluggable service + String[] getPropertiesFiles(); } From bc8e0af0a3eff4d3e73796ffd4a8481b6f8c2f6e Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Wed, 2 Jan 2013 16:56:48 -0800 Subject: [PATCH 233/421] plugin: ACL Static Role Based api access checker Signed-off-by: Rohit Yadav --- client/pom.xml | 5 + client/tomcatconf/components.xml.in | 2 +- plugins/acl/static-role-based/pom.xml | 32 ++ .../acl/StaticRoleBasedAPIAccessChecker.java | 380 +++++++++--------- plugins/pom.xml | 1 + 5 files changed, 231 insertions(+), 189 deletions(-) create mode 100644 plugins/acl/static-role-based/pom.xml rename {server/src/com/cloud => plugins/acl/static-role-based/src/org/apache/cloudstack}/acl/StaticRoleBasedAPIAccessChecker.java (64%) diff --git a/client/pom.xml b/client/pom.xml index 77077066f9a..897aa2cea20 100644 --- a/client/pom.xml +++ b/client/pom.xml @@ -25,6 +25,11 @@ cloud-server ${project.version} + + org.apache.cloudstack + cloud-plugin-acl-static-role-based + ${project.version} + org.apache.cloudstack cloud-plugin-user-authenticator-ldap diff --git a/client/tomcatconf/components.xml.in b/client/tomcatconf/components.xml.in index 990bf6a2180..ef6274edb05 100755 --- a/client/tomcatconf/components.xml.in +++ b/client/tomcatconf/components.xml.in @@ -54,7 +54,7 @@ under the License. true - + diff --git a/plugins/acl/static-role-based/pom.xml b/plugins/acl/static-role-based/pom.xml new file mode 100644 index 00000000000..a2e8d05d48e --- /dev/null +++ b/plugins/acl/static-role-based/pom.xml @@ -0,0 +1,32 @@ + + + 4.0.0 + cloud-plugin-acl-static-role-based + Apache CloudStack Plugin - ACL Static Role Based + + org.apache.cloudstack + cloudstack-plugins + 4.1.0-SNAPSHOT + ../../pom.xml + + diff --git a/server/src/com/cloud/acl/StaticRoleBasedAPIAccessChecker.java b/plugins/acl/static-role-based/src/org/apache/cloudstack/acl/StaticRoleBasedAPIAccessChecker.java similarity index 64% rename from server/src/com/cloud/acl/StaticRoleBasedAPIAccessChecker.java rename to plugins/acl/static-role-based/src/org/apache/cloudstack/acl/StaticRoleBasedAPIAccessChecker.java index 816b0def446..5a7af5514d3 100644 --- a/server/src/com/cloud/acl/StaticRoleBasedAPIAccessChecker.java +++ b/plugins/acl/static-role-based/src/org/apache/cloudstack/acl/StaticRoleBasedAPIAccessChecker.java @@ -1,188 +1,192 @@ -// 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.acl; - -import java.io.File; -import java.io.FileInputStream; -import java.io.FileNotFoundException; -import java.io.IOException; -import java.io.InputStream; -import java.util.*; - -import javax.ejb.Local; -import javax.naming.ConfigurationException; - -import org.apache.log4j.Logger; - -import com.cloud.exception.PermissionDeniedException; -import com.cloud.server.ManagementServer; -import com.cloud.user.Account; -import com.cloud.user.AccountManager; -import com.cloud.user.User; -import com.cloud.utils.PropertiesUtil; -import com.cloud.utils.component.AdapterBase; -import com.cloud.utils.component.ComponentLocator; -import com.cloud.utils.component.Inject; -import com.cloud.utils.component.PluggableService; - -/* - * This is the default API access checker that grab's the user's account - * based on the account type, access is granted referring to commands in all *.properties files. - */ - -@Local(value=APIAccessChecker.class) -public class StaticRoleBasedAPIAccessChecker extends AdapterBase implements APIAccessChecker { - - protected static final Logger s_logger = Logger.getLogger(StaticRoleBasedAPIAccessChecker.class); - public static final short ADMIN_COMMAND = 1; - public static final short DOMAIN_ADMIN_COMMAND = 4; - public static final short RESOURCE_DOMAIN_ADMIN_COMMAND = 2; - public static final short USER_COMMAND = 8; - private static List s_userCommands = null; - private static List s_resellerCommands = null; // AKA domain-admin - private static List s_adminCommands = null; - private static List s_resourceDomainAdminCommands = null; - private static List s_allCommands = null; - private Properties _apiCommands = null; - - protected @Inject AccountManager _accountMgr; - - protected StaticRoleBasedAPIAccessChecker() { - super(); - s_allCommands = new ArrayList(); - s_userCommands = new ArrayList(); - s_resellerCommands = new ArrayList(); - s_adminCommands = new ArrayList(); - s_resourceDomainAdminCommands = new ArrayList(); - } - - @Override - public boolean canAccessAPI(User user, String apiCommandName) - throws PermissionDeniedException{ - - boolean commandExists = s_allCommands.contains(apiCommandName); - - if(commandExists && user != null){ - Long accountId = user.getAccountId(); - Account userAccount = _accountMgr.getAccount(accountId); - short accountType = userAccount.getType(); - return isCommandAvailableForAccount(accountType, apiCommandName); - } - - return commandExists; - } - - @Override - public Properties getApiCommands() { - return _apiCommands; - } - - private static boolean isCommandAvailableForAccount(short accountType, String commandName) { - boolean isCommandAvailable = false; - switch (accountType) { - case Account.ACCOUNT_TYPE_ADMIN: - isCommandAvailable = s_adminCommands.contains(commandName); - break; - case Account.ACCOUNT_TYPE_DOMAIN_ADMIN: - isCommandAvailable = s_resellerCommands.contains(commandName); - break; - case Account.ACCOUNT_TYPE_RESOURCE_DOMAIN_ADMIN: - isCommandAvailable = s_resourceDomainAdminCommands.contains(commandName); - break; - case Account.ACCOUNT_TYPE_NORMAL: - isCommandAvailable = s_userCommands.contains(commandName); - break; - } - return isCommandAvailable; - } - - @Override - public boolean configure(String name, Map params) throws ConfigurationException { - super.configure(name, params); - - // Read command properties files to build the static map per role. - ComponentLocator locator = ComponentLocator.getLocator(ManagementServer.Name); - List services = locator.getAllPluggableServices(); - services.add((PluggableService) ComponentLocator.getComponent(ManagementServer.Name)); - - List configFiles = new ArrayList(); - for (PluggableService service : services) { - configFiles.addAll(Arrays.asList(service.getPropertiesFiles())); - } - - processConfigFiles(configFiles); - return true; - } - - private void processConfigFiles(List configFiles) { - try { - if (_apiCommands == null) - _apiCommands = new Properties(); - - Properties preProcessedCommands = new Properties(); - for (String configFile : configFiles) { - File commandsFile = PropertiesUtil.findConfigFile(configFile); - if (commandsFile != null) { - try { - preProcessedCommands.load(new FileInputStream(commandsFile)); - } catch (FileNotFoundException fnfex) { - // in case of a file within a jar in classpath, try to open stream using url - InputStream stream = PropertiesUtil.openStreamFromURL(configFile); - if (stream != null) { - preProcessedCommands.load(stream); - } else { - s_logger.error("Unable to find properites file", fnfex); - } - } - } - } - for (Object key : preProcessedCommands.keySet()) { - String preProcessedCommand = preProcessedCommands.getProperty((String) key); - String[] commandParts = preProcessedCommand.split(";"); - _apiCommands.setProperty(key.toString(), commandParts[0]); - - if (commandParts.length > 1) { - try { - short cmdPermissions = Short.parseShort(commandParts[1]); - if ((cmdPermissions & ADMIN_COMMAND) != 0) { - s_adminCommands.add((String) key); - } - if ((cmdPermissions & RESOURCE_DOMAIN_ADMIN_COMMAND) != 0) { - s_resourceDomainAdminCommands.add((String) key); - } - if ((cmdPermissions & DOMAIN_ADMIN_COMMAND) != 0) { - s_resellerCommands.add((String) key); - } - if ((cmdPermissions & USER_COMMAND) != 0) { - s_userCommands.add((String) key); - } - s_allCommands.addAll(s_adminCommands); - s_allCommands.addAll(s_resourceDomainAdminCommands); - s_allCommands.addAll(s_userCommands); - s_allCommands.addAll(s_resellerCommands); - } catch (NumberFormatException nfe) { - s_logger.info("Malformed command.properties permissions value, key = " + key + ", value = " + preProcessedCommand); - } - } - } - } catch (FileNotFoundException fnfex) { - s_logger.error("Unable to find properties file", fnfex); - } catch (IOException ioex) { - s_logger.error("IO Exception loading properties file", ioex); - } - } -} +// 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 org.apache.cloudstack.acl; + +import java.io.File; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.IOException; +import java.io.InputStream; +import java.util.*; + +import javax.ejb.Local; +import javax.naming.ConfigurationException; + +import com.cloud.acl.APIAccessChecker; +import org.apache.log4j.Logger; + +import com.cloud.exception.PermissionDeniedException; +import com.cloud.server.ManagementServer; +import com.cloud.user.Account; +import com.cloud.user.AccountManager; +import com.cloud.user.User; +import com.cloud.utils.PropertiesUtil; +import com.cloud.utils.component.AdapterBase; +import com.cloud.utils.component.ComponentLocator; +import com.cloud.utils.component.Inject; +import com.cloud.utils.component.PluggableService; + +/* + * This is the default API access checker that grab's the user's account + * based on the account type, access is granted referring to commands in all *.properties files. + */ + +@Local(value=APIAccessChecker.class) +public class StaticRoleBasedAPIAccessChecker extends AdapterBase implements APIAccessChecker { + + protected static final Logger s_logger = Logger.getLogger(StaticRoleBasedAPIAccessChecker.class); + public static final short ADMIN_COMMAND = 1; + public static final short DOMAIN_ADMIN_COMMAND = 4; + public static final short RESOURCE_DOMAIN_ADMIN_COMMAND = 2; + public static final short USER_COMMAND = 8; + private static List s_userCommands = null; + private static List s_resellerCommands = null; // AKA domain-admin + private static List s_adminCommands = null; + private static List s_resourceDomainAdminCommands = null; + private static List s_allCommands = null; + private Properties _apiCommands = null; + + protected @Inject AccountManager _accountMgr; + + protected StaticRoleBasedAPIAccessChecker() { + super(); + s_allCommands = new ArrayList(); + s_userCommands = new ArrayList(); + s_resellerCommands = new ArrayList(); + s_adminCommands = new ArrayList(); + s_resourceDomainAdminCommands = new ArrayList(); + } + + @Override + public boolean canAccessAPI(User user, String apiCommandName) + throws PermissionDeniedException{ + + boolean commandExists = s_allCommands.contains(apiCommandName); + + if(commandExists && user != null){ + Long accountId = user.getAccountId(); + Account userAccount = _accountMgr.getAccount(accountId); + short accountType = userAccount.getType(); + return isCommandAvailableForAccount(accountType, apiCommandName); + } + + return commandExists; + } + + @Override + public Properties getApiCommands() { + return _apiCommands; + } + + private static boolean isCommandAvailableForAccount(short accountType, String commandName) { + boolean isCommandAvailable = false; + switch (accountType) { + case Account.ACCOUNT_TYPE_ADMIN: + isCommandAvailable = s_adminCommands.contains(commandName); + break; + case Account.ACCOUNT_TYPE_DOMAIN_ADMIN: + isCommandAvailable = s_resellerCommands.contains(commandName); + break; + case Account.ACCOUNT_TYPE_RESOURCE_DOMAIN_ADMIN: + isCommandAvailable = s_resourceDomainAdminCommands.contains(commandName); + break; + case Account.ACCOUNT_TYPE_NORMAL: + isCommandAvailable = s_userCommands.contains(commandName); + break; + } + return isCommandAvailable; + } + + @Override + public boolean configure(String name, Map params) throws ConfigurationException { + super.configure(name, params); + + // Read command properties files to build the static map per role. + ComponentLocator locator = ComponentLocator.getLocator(ManagementServer.Name); + List services = locator.getAllPluggableServices(); + services.add((PluggableService) ComponentLocator.getComponent(ManagementServer.Name)); + + List configFiles = new ArrayList(); + for (PluggableService service : services) { + configFiles.addAll(Arrays.asList(service.getPropertiesFiles())); + } + + processConfigFiles(configFiles); + return true; + } + + private void processConfigFiles(List configFiles) { + if (_apiCommands == null) + _apiCommands = new Properties(); + + Properties preProcessedCommands = new Properties(); + + for (String configFile : configFiles) { + File commandsFile = PropertiesUtil.findConfigFile(configFile); + if (commandsFile != null) { + try { + preProcessedCommands.load(new FileInputStream(commandsFile)); + } catch (FileNotFoundException fnfex) { + // in case of a file within a jar in classpath, try to open stream using url + InputStream stream = PropertiesUtil.openStreamFromURL(configFile); + if (stream != null) { + try { + preProcessedCommands.load(stream); + } catch (IOException e) { + s_logger.error("IO Exception, unable to find properties file:", fnfex); + } + } else { + s_logger.error("Unable to find properites file", fnfex); + } + } catch (IOException ioe) { + s_logger.error("IO Exception loading properties file", ioe); + } + } + } + + for (Object key : preProcessedCommands.keySet()) { + String preProcessedCommand = preProcessedCommands.getProperty((String) key); + String[] commandParts = preProcessedCommand.split(";"); + _apiCommands.setProperty(key.toString(), commandParts[0]); + + if (commandParts.length > 1) { + try { + short cmdPermissions = Short.parseShort(commandParts[1]); + if ((cmdPermissions & ADMIN_COMMAND) != 0) { + s_adminCommands.add((String) key); + } + if ((cmdPermissions & RESOURCE_DOMAIN_ADMIN_COMMAND) != 0) { + s_resourceDomainAdminCommands.add((String) key); + } + if ((cmdPermissions & DOMAIN_ADMIN_COMMAND) != 0) { + s_resellerCommands.add((String) key); + } + if ((cmdPermissions & USER_COMMAND) != 0) { + s_userCommands.add((String) key); + } + s_allCommands.addAll(s_adminCommands); + s_allCommands.addAll(s_resourceDomainAdminCommands); + s_allCommands.addAll(s_userCommands); + s_allCommands.addAll(s_resellerCommands); + } catch (NumberFormatException nfe) { + s_logger.info("Malformed command.properties permissions value, key = " + key + ", value = " + preProcessedCommand); + } + } + } + } + +} diff --git a/plugins/pom.xml b/plugins/pom.xml index 820e76fc0e9..f0589a1caaf 100644 --- a/plugins/pom.xml +++ b/plugins/pom.xml @@ -32,6 +32,7 @@ test + acl/static-role-based deployment-planners/user-concentrated-pod deployment-planners/user-dispersing host-allocators/random From ebfb90e2176e6b2f9b3a1a79d1ebc5c4cd8ebaff Mon Sep 17 00:00:00 2001 From: Min Chen Date: Wed, 2 Jan 2013 17:38:58 -0800 Subject: [PATCH 234/421] Create DB view for Account to speed up ListAccountsCmd, and add missing async job information for some response objects. Signed-off-by: Min Chen --- api/src/com/cloud/user/AccountService.java | 4 - .../com/cloud/user/ResourceLimitService.java | 10 + .../command/user/account/ListAccountsCmd.java | 13 +- .../apache/cloudstack/query/QueryService.java | 4 + server/src/com/cloud/api/ApiDBUtils.java | 24 +- .../src/com/cloud/api/ApiResponseHelper.java | 156 +---- server/src/com/cloud/api/ApiServer.java | 7 +- .../com/cloud/api/query/QueryManagerImpl.java | 148 ++++- .../cloud/api/query/ViewResponseHelper.java | 10 + .../cloud/api/query/dao/AccountJoinDao.java | 33 + .../api/query/dao/AccountJoinDaoImpl.java | 227 +++++++ .../query/dao/DomainRouterJoinDaoImpl.java | 4 + .../cloud/api/query/dao/HostJoinDaoImpl.java | 5 + .../query/dao/SecurityGroupJoinDaoImpl.java | 5 + .../query}/dao/UserAccountJoinDao.java | 2 +- .../query}/dao/UserAccountJoinDaoImpl.java | 7 +- .../api/query/dao/VolumeJoinDaoImpl.java | 5 + .../com/cloud/api/query/vo/AccountJoinVO.java | 569 ++++++++++++++++++ .../api/query/vo/ControlledViewEntity.java | 4 +- .../api/query/vo/DomainRouterJoinVO.java | 4 +- .../com/cloud/api/query/vo/EventJoinVO.java | 4 +- .../com/cloud/api/query/vo/HostJoinVO.java | 5 +- .../api/query/vo/InstanceGroupJoinVO.java | 4 +- .../api/query/vo/ProjectInvitationJoinVO.java | 4 +- .../com/cloud/api/query/vo/ProjectJoinVO.java | 5 +- .../cloud/api/query/vo/ResourceTagJoinVO.java | 4 +- .../api/query/vo/SecurityGroupJoinVO.java | 4 +- .../cloud/api/query/vo/UserAccountJoinVO.java | 37 +- .../com/cloud/api/query/vo/UserVmJoinVO.java | 4 +- .../com/cloud/api/query/vo/VolumeJoinVO.java | 5 +- .../DefaultComponentLibrary.java | 4 +- .../ResourceLimitManagerImpl.java | 30 + .../com/cloud/user/AccountManagerImpl.java | 121 +--- server/test/com/cloud/api/ListPerfTest.java | 30 +- .../cloud/user/MockAccountManagerImpl.java | 7 - .../vpc/MockResourceLimitManagerImpl.java | 13 +- setup/db/create-schema.sql | 110 +++- setup/db/db/schema-40to410.sql | 107 +++- 38 files changed, 1398 insertions(+), 341 deletions(-) create mode 100644 server/src/com/cloud/api/query/dao/AccountJoinDao.java create mode 100644 server/src/com/cloud/api/query/dao/AccountJoinDaoImpl.java rename server/src/com/cloud/{user => api/query}/dao/UserAccountJoinDao.java (97%) rename server/src/com/cloud/{user => api/query}/dao/UserAccountJoinDaoImpl.java (96%) create mode 100644 server/src/com/cloud/api/query/vo/AccountJoinVO.java diff --git a/api/src/com/cloud/user/AccountService.java b/api/src/com/cloud/user/AccountService.java index 0a6cc6bd59c..be4d23bb5fa 100755 --- a/api/src/com/cloud/user/AccountService.java +++ b/api/src/com/cloud/user/AccountService.java @@ -192,10 +192,6 @@ public interface AccountService { public String[] createApiKeyAndSecretKey(RegisterCmd cmd); - Pair, Integer> searchForAccounts(ListAccountsCmd cmd); - - - UserAccount getUserByApiKey(String apiKey); void checkAccess(Account account, Domain domain) throws PermissionDeniedException; diff --git a/api/src/com/cloud/user/ResourceLimitService.java b/api/src/com/cloud/user/ResourceLimitService.java index 75411b08405..bec65d5b7e8 100644 --- a/api/src/com/cloud/user/ResourceLimitService.java +++ b/api/src/com/cloud/user/ResourceLimitService.java @@ -80,6 +80,16 @@ public interface ResourceLimitService { */ public long findCorrectResourceLimitForAccount(Account account, ResourceType type); + /** + * This call should be used when we have already queried resource limit for an account. This is to handle + * some corner cases where queried limit may be null. + * @param accountType + * @param limit + * @param type + * @return + */ + public long findCorrectResourceLimitForAccount(short accountType, Long limit, ResourceType type); + /** * Finds the resource limit for a specified domain and type. If the domain has an infinite limit, will check * up the domain hierarchy diff --git a/api/src/org/apache/cloudstack/api/command/user/account/ListAccountsCmd.java b/api/src/org/apache/cloudstack/api/command/user/account/ListAccountsCmd.java index f61c0bb924e..f679a5ae7d1 100644 --- a/api/src/org/apache/cloudstack/api/command/user/account/ListAccountsCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/account/ListAccountsCmd.java @@ -27,6 +27,8 @@ import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.response.AccountResponse; import org.apache.cloudstack.api.response.ListResponse; +import org.apache.cloudstack.api.response.UserResponse; + import com.cloud.user.Account; import com.cloud.utils.Pair; @@ -91,17 +93,8 @@ public class ListAccountsCmd extends BaseListDomainResourcesCmd { @Override public void execute(){ - Pair, Integer> accounts = _accountService.searchForAccounts(this); - ListResponse response = new ListResponse(); - List accountResponses = new ArrayList(); - for (Account account : accounts.first()) { - AccountResponse acctResponse = _responseGenerator.createAccountResponse(account); - acctResponse.setObjectName("account"); - accountResponses.add(acctResponse); - } - response.setResponses(accountResponses, accounts.second()); + ListResponse response = _queryService.searchForAccounts(this); response.setResponseName(getCommandName()); - this.setResponseObject(response); } } diff --git a/api/src/org/apache/cloudstack/query/QueryService.java b/api/src/org/apache/cloudstack/query/QueryService.java index ef3c52f20c9..a310bb3b35f 100644 --- a/api/src/org/apache/cloudstack/query/QueryService.java +++ b/api/src/org/apache/cloudstack/query/QueryService.java @@ -19,6 +19,7 @@ package org.apache.cloudstack.query; import org.apache.cloudstack.api.command.admin.host.ListHostsCmd; import org.apache.cloudstack.api.command.admin.router.ListRoutersCmd; import org.apache.cloudstack.api.command.admin.user.ListUsersCmd; +import org.apache.cloudstack.api.command.user.account.ListAccountsCmd; import org.apache.cloudstack.api.command.user.account.ListProjectAccountsCmd; import org.apache.cloudstack.api.command.user.event.ListEventsCmd; import org.apache.cloudstack.api.command.user.project.ListProjectInvitationsCmd; @@ -28,6 +29,7 @@ import org.apache.cloudstack.api.command.user.tag.ListTagsCmd; import org.apache.cloudstack.api.command.user.vm.ListVMsCmd; import org.apache.cloudstack.api.command.user.vmgroup.ListVMGroupsCmd; import org.apache.cloudstack.api.command.user.volume.ListVolumesCmd; +import org.apache.cloudstack.api.response.AccountResponse; import org.apache.cloudstack.api.response.DomainRouterResponse; import org.apache.cloudstack.api.response.EventResponse; import org.apache.cloudstack.api.response.HostResponse; @@ -76,4 +78,6 @@ public interface QueryService { public ListResponse searchForServers(ListHostsCmd cmd); public ListResponse searchForVolumes(ListVolumesCmd cmd); + + public ListResponse searchForAccounts(ListAccountsCmd cmd); } diff --git a/server/src/com/cloud/api/ApiDBUtils.java b/server/src/com/cloud/api/ApiDBUtils.java index 74658730951..1b2327ad156 100755 --- a/server/src/com/cloud/api/ApiDBUtils.java +++ b/server/src/com/cloud/api/ApiDBUtils.java @@ -24,6 +24,7 @@ import java.util.Set; import org.apache.cloudstack.api.ApiConstants.HostDetails; import org.apache.cloudstack.api.ApiConstants.VMDetails; +import org.apache.cloudstack.api.response.AccountResponse; import org.apache.cloudstack.api.response.DomainRouterResponse; import org.apache.cloudstack.api.response.EventResponse; import org.apache.cloudstack.api.response.HostResponse; @@ -37,6 +38,7 @@ import org.apache.cloudstack.api.response.UserResponse; import org.apache.cloudstack.api.response.UserVmResponse; import org.apache.cloudstack.api.response.VolumeResponse; +import com.cloud.api.query.dao.AccountJoinDao; import com.cloud.api.query.dao.DomainRouterJoinDao; import com.cloud.api.query.dao.HostJoinDao; import com.cloud.api.query.dao.InstanceGroupJoinDao; @@ -45,8 +47,10 @@ import com.cloud.api.query.dao.ProjectInvitationJoinDao; import com.cloud.api.query.dao.ProjectJoinDao; import com.cloud.api.query.dao.ResourceTagJoinDao; import com.cloud.api.query.dao.SecurityGroupJoinDao; +import com.cloud.api.query.dao.UserAccountJoinDao; import com.cloud.api.query.dao.UserVmJoinDao; import com.cloud.api.query.dao.VolumeJoinDao; +import com.cloud.api.query.vo.AccountJoinVO; import com.cloud.api.query.vo.DomainRouterJoinVO; import com.cloud.api.query.vo.EventJoinVO; import com.cloud.api.query.vo.HostJoinVO; @@ -213,7 +217,6 @@ import com.cloud.user.UserStatisticsVO; import com.cloud.user.UserVO; import com.cloud.user.dao.AccountDao; import com.cloud.user.dao.SSHKeyPairDao; -import com.cloud.user.dao.UserAccountJoinDao; import com.cloud.user.dao.UserDao; import com.cloud.user.dao.UserStatisticsDao; import com.cloud.uservm.UserVm; @@ -318,6 +321,7 @@ public class ApiDBUtils { private static ProjectInvitationJoinDao _projectInvitationJoinDao; private static HostJoinDao _hostJoinDao; private static VolumeJoinDao _volJoinDao; + private static AccountJoinDao _accountJoinDao; private static PhysicalNetworkTrafficTypeDao _physicalNetworkTrafficTypeDao; private static PhysicalNetworkServiceProviderDao _physicalNetworkServiceProviderDao; @@ -406,6 +410,7 @@ public class ApiDBUtils { _projectInvitationJoinDao = locator.getDao(ProjectInvitationJoinDao.class); _hostJoinDao = locator.getDao(HostJoinDao.class); _volJoinDao = locator.getDao(VolumeJoinDao.class); + _accountJoinDao = locator.getDao(AccountJoinDao.class); _physicalNetworkTrafficTypeDao = locator.getDao(PhysicalNetworkTrafficTypeDao.class); _physicalNetworkServiceProviderDao = locator.getDao(PhysicalNetworkServiceProviderDao.class); @@ -491,6 +496,10 @@ public class ApiDBUtils { return _resourceLimitMgr.findCorrectResourceLimitForAccount(account, type); } + public static long findCorrectResourceLimit(Long limit, short accountType, ResourceType type) { + return _resourceLimitMgr.findCorrectResourceLimitForAccount(accountType, limit, type); + } + public static AsyncJobVO findInstancePendingAsyncJob(String instanceType, long instanceId) { return _asyncMgr.findInstancePendingAsyncJob(instanceType, instanceId); } @@ -589,7 +598,7 @@ public class ApiDBUtils { public static DomainVO findDomainByIdIncludingRemoved(Long domainId) { return _domainDao.findByIdIncludingRemoved(domainId); } - + public static boolean isChildDomain(long parentId, long childId) { return _domainDao.isChildDomain(parentId, childId); } @@ -1344,4 +1353,15 @@ public class ApiDBUtils { return _volJoinDao.newVolumeView(vr); } + public static AccountResponse newAccountResponse(AccountJoinVO ve) { + return _accountJoinDao.newAccountResponse(ve); + } + + public static AccountJoinVO newAccountView(Account e){ + return _accountJoinDao.newAccountView(e); + } + + public static AccountJoinVO findAccountViewById(Long accountId) { + return _accountJoinDao.findByIdIncludingRemoved(accountId); + } } diff --git a/server/src/com/cloud/api/ApiResponseHelper.java b/server/src/com/cloud/api/ApiResponseHelper.java index 22e89ddaa02..1013bbf93c2 100755 --- a/server/src/com/cloud/api/ApiResponseHelper.java +++ b/server/src/com/cloud/api/ApiResponseHelper.java @@ -45,6 +45,7 @@ import org.apache.cloudstack.api.command.user.job.QueryAsyncJobResultCmd; import org.apache.cloudstack.api.response.AccountResponse; import com.cloud.api.query.ViewResponseHelper; +import com.cloud.api.query.vo.AccountJoinVO; import com.cloud.api.query.vo.ControlledViewEntity; import com.cloud.api.query.vo.DomainRouterJoinVO; import com.cloud.api.query.vo.EventJoinVO; @@ -275,162 +276,13 @@ public class ApiResponseHelper implements ResponseGenerator { // this method is used for response generation via createAccount (which creates an account + user) @Override public AccountResponse createUserAccountResponse(UserAccount user) { - return createAccountResponse(ApiDBUtils.findAccountById(user.getAccountId())); + return ApiDBUtils.newAccountResponse(ApiDBUtils.findAccountViewById(user.getAccountId())); } @Override public AccountResponse createAccountResponse(Account account) { - boolean accountIsAdmin = (account.getType() == Account.ACCOUNT_TYPE_ADMIN); - AccountResponse accountResponse = new AccountResponse(); - accountResponse.setId(account.getUuid()); - accountResponse.setName(account.getAccountName()); - accountResponse.setAccountType(account.getType()); - Domain domain = ApiDBUtils.findDomainById(account.getDomainId()); - if (domain != null) { - accountResponse.setDomainId(domain.getUuid()); - accountResponse.setDomainName(domain.getName()); - } - accountResponse.setState(account.getState().toString()); - accountResponse.setNetworkDomain(account.getNetworkDomain()); - DataCenter dc = ApiDBUtils.findZoneById(account.getDefaultZoneId()); - if (dc != null) { - accountResponse.setDefaultZone(dc.getUuid()); - } - - // get network stat - List stats = ApiDBUtils.listUserStatsBy(account.getId()); - if (stats == null) { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Internal error searching for user stats"); - } - - Long bytesSent = 0L; - Long bytesReceived = 0L; - for (UserStatisticsVO stat : stats) { - Long rx = stat.getNetBytesReceived() + stat.getCurrentBytesReceived(); - Long tx = stat.getNetBytesSent() + stat.getCurrentBytesSent(); - bytesReceived = bytesReceived + Long.valueOf(rx); - bytesSent = bytesSent + Long.valueOf(tx); - } - accountResponse.setBytesReceived(bytesReceived); - accountResponse.setBytesSent(bytesSent); - - // Get resource limits and counts - - Long vmLimit = ApiDBUtils.findCorrectResourceLimit(ResourceType.user_vm, account.getId()); - String vmLimitDisplay = (accountIsAdmin || vmLimit == -1) ? "Unlimited" : String.valueOf(vmLimit); - Long vmTotal = ApiDBUtils.getResourceCount(ResourceType.user_vm, account.getId()); - String vmAvail = (accountIsAdmin || vmLimit == -1) ? "Unlimited" : String.valueOf(vmLimit - vmTotal); - accountResponse.setVmLimit(vmLimitDisplay); - accountResponse.setVmTotal(vmTotal); - accountResponse.setVmAvailable(vmAvail); - - Long ipLimit = ApiDBUtils.findCorrectResourceLimit(ResourceType.public_ip, account.getId()); - String ipLimitDisplay = (accountIsAdmin || ipLimit == -1) ? "Unlimited" : String.valueOf(ipLimit); - Long ipTotal = ApiDBUtils.getResourceCount(ResourceType.public_ip, account.getId()); - - Long ips = ipLimit - ipTotal; - // check how many free ips are left, and if it's less than max allowed number of ips from account - use this - // value - Long ipsLeft = ApiDBUtils.countFreePublicIps(); - boolean unlimited = true; - if (ips.longValue() > ipsLeft.longValue()) { - ips = ipsLeft; - unlimited = false; - } - - String ipAvail = ((accountIsAdmin || ipLimit == -1) && unlimited) ? "Unlimited" : String.valueOf(ips); - - accountResponse.setIpLimit(ipLimitDisplay); - accountResponse.setIpTotal(ipTotal); - accountResponse.setIpAvailable(ipAvail); - - Long volumeLimit = ApiDBUtils.findCorrectResourceLimit(ResourceType.volume, account.getId()); - String volumeLimitDisplay = (accountIsAdmin || volumeLimit == -1) ? "Unlimited" : String.valueOf(volumeLimit); - Long volumeTotal = ApiDBUtils.getResourceCount(ResourceType.volume, account.getId()); - String volumeAvail = (accountIsAdmin || volumeLimit == -1) ? "Unlimited" : String.valueOf(volumeLimit - volumeTotal); - accountResponse.setVolumeLimit(volumeLimitDisplay); - accountResponse.setVolumeTotal(volumeTotal); - accountResponse.setVolumeAvailable(volumeAvail); - - Long snapshotLimit = ApiDBUtils.findCorrectResourceLimit(ResourceType.snapshot, account.getId()); - String snapshotLimitDisplay = (accountIsAdmin || snapshotLimit == -1) ? "Unlimited" : String.valueOf(snapshotLimit); - Long snapshotTotal = ApiDBUtils.getResourceCount(ResourceType.snapshot, account.getId()); - String snapshotAvail = (accountIsAdmin || snapshotLimit == -1) ? "Unlimited" : String.valueOf(snapshotLimit - snapshotTotal); - accountResponse.setSnapshotLimit(snapshotLimitDisplay); - accountResponse.setSnapshotTotal(snapshotTotal); - accountResponse.setSnapshotAvailable(snapshotAvail); - - Long templateLimit = ApiDBUtils.findCorrectResourceLimit(ResourceType.template, account.getId()); - String templateLimitDisplay = (accountIsAdmin || templateLimit == -1) ? "Unlimited" : String.valueOf(templateLimit); - Long templateTotal = ApiDBUtils.getResourceCount(ResourceType.template, account.getId()); - String templateAvail = (accountIsAdmin || templateLimit == -1) ? "Unlimited" : String.valueOf(templateLimit - templateTotal); - accountResponse.setTemplateLimit(templateLimitDisplay); - accountResponse.setTemplateTotal(templateTotal); - accountResponse.setTemplateAvailable(templateAvail); - - // Get stopped and running VMs - int vmStopped = 0; - int vmRunning = 0; - - List permittedAccounts = new ArrayList(); - permittedAccounts.add(account.getId()); - - List virtualMachines = ApiDBUtils.searchForUserVMs(new Criteria(), permittedAccounts); - - // get Running/Stopped VMs - for (Iterator iter = virtualMachines.iterator(); iter.hasNext();) { - // count how many stopped/running vms we have - UserVmJoinVO vm = iter.next(); - - if (vm.getState() == State.Stopped) { - vmStopped++; - } else if (vm.getState() == State.Running) { - vmRunning++; - } - } - - accountResponse.setVmStopped(vmStopped); - accountResponse.setVmRunning(vmRunning); - accountResponse.setObjectName("account"); - - //get resource limits for projects - Long projectLimit = ApiDBUtils.findCorrectResourceLimit(ResourceType.project, account.getId()); - String projectLimitDisplay = (accountIsAdmin || projectLimit == -1) ? "Unlimited" : String.valueOf(projectLimit); - Long projectTotal = ApiDBUtils.getResourceCount(ResourceType.project, account.getId()); - String projectAvail = (accountIsAdmin || projectLimit == -1) ? "Unlimited" : String.valueOf(projectLimit - projectTotal); - accountResponse.setProjectLimit(projectLimitDisplay); - accountResponse.setProjectTotal(projectTotal); - accountResponse.setProjectAvailable(projectAvail); - - //get resource limits for networks - Long networkLimit = ApiDBUtils.findCorrectResourceLimit(ResourceType.network, account.getId()); - String networkLimitDisplay = (accountIsAdmin || networkLimit == -1) ? "Unlimited" : String.valueOf(networkLimit); - Long networkTotal = ApiDBUtils.getResourceCount(ResourceType.network, account.getId()); - String networkAvail = (accountIsAdmin || networkLimit == -1) ? "Unlimited" : String.valueOf(networkLimit - networkTotal); - accountResponse.setNetworkLimit(networkLimitDisplay); - accountResponse.setNetworkTotal(networkTotal); - accountResponse.setNetworkAvailable(networkAvail); - - //get resource limits for vpcs - Long vpcLimit = ApiDBUtils.findCorrectResourceLimit(ResourceType.vpc, account.getId()); - String vpcLimitDisplay = (accountIsAdmin || vpcLimit == -1) ? "Unlimited" : String.valueOf(vpcLimit); - Long vpcTotal = ApiDBUtils.getResourceCount(ResourceType.vpc, account.getId()); - String vpcAvail = (accountIsAdmin || vpcLimit == -1) ? "Unlimited" : String.valueOf(vpcLimit - vpcTotal); - accountResponse.setNetworkLimit(vpcLimitDisplay); - accountResponse.setNetworkTotal(vpcTotal); - accountResponse.setNetworkAvailable(vpcAvail); - - // adding all the users for an account as part of the response obj - List usersForAccount = ApiDBUtils.listUsersByAccount(account.getAccountId()); - List userResponseList = new ArrayList(); - for (UserVO user : usersForAccount) { - UserResponse userResponse = createUserResponse(user); - userResponseList.add(userResponse); - } - - accountResponse.setUsers(userResponseList); - accountResponse.setDetails(ApiDBUtils.getAccountDetails(account.getId())); - return accountResponse; + AccountJoinVO vUser = ApiDBUtils.newAccountView(account); + return ApiDBUtils.newAccountResponse(vUser); } diff --git a/server/src/com/cloud/api/ApiServer.java b/server/src/com/cloud/api/ApiServer.java index 3f027ed1465..5ee7c356aba 100755 --- a/server/src/com/cloud/api/ApiServer.java +++ b/server/src/com/cloud/api/ApiServer.java @@ -51,6 +51,7 @@ import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import org.apache.cloudstack.api.*; +import org.apache.cloudstack.api.command.user.account.ListAccountsCmd; import org.apache.cloudstack.api.command.user.account.ListProjectAccountsCmd; import org.apache.cloudstack.api.command.user.event.ListEventsCmd; import org.apache.cloudstack.api.command.user.vm.ListVMsCmd; @@ -88,6 +89,7 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.command.admin.host.ListHostsCmd; import org.apache.cloudstack.api.command.admin.router.ListRoutersCmd; +import org.apache.cloudstack.api.command.admin.user.ListUsersCmd; import org.apache.cloudstack.api.command.user.project.ListProjectInvitationsCmd; import org.apache.cloudstack.api.command.user.project.ListProjectsCmd; import org.apache.cloudstack.api.command.user.securitygroup.ListSecurityGroupsCmd; @@ -466,7 +468,10 @@ public class ApiServer implements HttpRequestHandler { && !(cmdObj instanceof ListProjectAccountsCmd) && !(cmdObj instanceof ListProjectInvitationsCmd) && !(cmdObj instanceof ListHostsCmd) - && !(cmdObj instanceof ListVolumesCmd)) { + && !(cmdObj instanceof ListVolumesCmd) + && !(cmdObj instanceof ListUsersCmd) + && !(cmdObj instanceof ListAccountsCmd) + ) { buildAsyncListResponse((BaseListCmd) cmdObj, caller); } diff --git a/server/src/com/cloud/api/query/QueryManagerImpl.java b/server/src/com/cloud/api/query/QueryManagerImpl.java index 19577d2a11e..a4ec02ad856 100644 --- a/server/src/com/cloud/api/query/QueryManagerImpl.java +++ b/server/src/com/cloud/api/query/QueryManagerImpl.java @@ -31,6 +31,7 @@ import org.apache.cloudstack.api.ApiConstants.VMDetails; import org.apache.cloudstack.api.command.admin.host.ListHostsCmd; import org.apache.cloudstack.api.command.admin.router.ListRoutersCmd; import org.apache.cloudstack.api.command.admin.user.ListUsersCmd; +import org.apache.cloudstack.api.command.user.account.ListAccountsCmd; import org.apache.cloudstack.api.command.user.account.ListProjectAccountsCmd; import org.apache.cloudstack.api.command.user.event.ListEventsCmd; import org.apache.cloudstack.api.command.user.project.ListProjectInvitationsCmd; @@ -40,6 +41,7 @@ import org.apache.cloudstack.api.command.user.tag.ListTagsCmd; import org.apache.cloudstack.api.command.user.vm.ListVMsCmd; import org.apache.cloudstack.api.command.user.vmgroup.ListVMGroupsCmd; import org.apache.cloudstack.api.command.user.volume.ListVolumesCmd; +import org.apache.cloudstack.api.response.AccountResponse; import org.apache.cloudstack.api.response.DomainRouterResponse; import org.apache.cloudstack.api.response.EventResponse; import org.apache.cloudstack.api.response.HostResponse; @@ -56,8 +58,10 @@ import org.apache.cloudstack.api.response.VolumeResponse; import org.apache.cloudstack.query.QueryService; import org.apache.log4j.Logger; +import com.cloud.acl.ControlledEntity; import com.cloud.api.ApiDBUtils; import com.cloud.api.ApiResponseHelper; +import com.cloud.api.query.dao.AccountJoinDao; import com.cloud.api.query.dao.DomainRouterJoinDao; import com.cloud.api.query.dao.HostJoinDao; import com.cloud.api.query.dao.InstanceGroupJoinDao; @@ -66,8 +70,10 @@ import com.cloud.api.query.dao.ProjectInvitationJoinDao; import com.cloud.api.query.dao.ProjectJoinDao; import com.cloud.api.query.dao.ResourceTagJoinDao; import com.cloud.api.query.dao.SecurityGroupJoinDao; +import com.cloud.api.query.dao.UserAccountJoinDao; import com.cloud.api.query.dao.UserVmJoinDao; import com.cloud.api.query.dao.VolumeJoinDao; +import com.cloud.api.query.vo.AccountJoinVO; import com.cloud.api.query.vo.DomainRouterJoinVO; import com.cloud.api.query.vo.EventJoinVO; import com.cloud.api.query.vo.HostJoinVO; @@ -92,11 +98,13 @@ import com.cloud.host.Host; import com.cloud.host.HostTagVO; import com.cloud.host.HostVO; import com.cloud.hypervisor.Hypervisor.HypervisorType; +import com.cloud.network.IPAddressVO; import com.cloud.network.security.SecurityGroupVMMapVO; import com.cloud.network.security.dao.SecurityGroupVMMapDao; import com.cloud.projects.ProjectInvitation; import com.cloud.projects.Project.ListProjectResourcesCriteria; import com.cloud.projects.Project; +import com.cloud.projects.ProjectInvitationVO; import com.cloud.projects.ProjectManager; import com.cloud.projects.ProjectService; import com.cloud.projects.dao.ProjectAccountDao; @@ -115,7 +123,7 @@ import com.cloud.user.AccountService; import com.cloud.user.AccountVO; import com.cloud.user.DomainManager; import com.cloud.user.UserContext; -import com.cloud.user.dao.UserAccountJoinDao; +import com.cloud.user.dao.AccountDao; import com.cloud.utils.DateUtil; import com.cloud.utils.Pair; import com.cloud.utils.Ternary; @@ -202,6 +210,12 @@ public class QueryManagerImpl implements QueryService, Manager { @Inject private VolumeJoinDao _volumeJoinDao; + @Inject + private AccountDao _accountDao; + + @Inject + private AccountJoinDao _accountJoinDao; + @Inject private HighAvailabilityManager _haMgr; @@ -1458,8 +1472,8 @@ public class QueryManagerImpl implements QueryService, Manager { Pair, Integer> result = searchForVolumesInternal(cmd); ListResponse response = new ListResponse(); - List routerResponses = ViewResponseHelper.createVolumeResponse(result.first().toArray(new VolumeJoinVO[result.first().size()])); - response.setResponses(routerResponses, result.second()); + List volumeResponses = ViewResponseHelper.createVolumeResponse(result.first().toArray(new VolumeJoinVO[result.first().size()])); + response.setResponses(volumeResponses, result.second()); return response; } @@ -1590,5 +1604,133 @@ public class QueryManagerImpl implements QueryService, Manager { return new Pair, Integer>(vrs, count); } + @Override + public ListResponse searchForAccounts(ListAccountsCmd cmd) { + Pair, Integer> result = searchForAccountsInternal(cmd); + ListResponse response = new ListResponse(); + List accountResponses = ViewResponseHelper.createAccountResponse(result.first().toArray(new AccountJoinVO[result.first().size()])); + response.setResponses(accountResponses, result.second()); + return response; + } + + + public Pair, Integer> searchForAccountsInternal(ListAccountsCmd cmd) { + Account caller = UserContext.current().getCaller(); + Long domainId = cmd.getDomainId(); + Long accountId = cmd.getId(); + String accountName = cmd.getSearchName(); + boolean isRecursive = cmd.isRecursive(); + boolean listAll = cmd.listAll(); + Boolean listForDomain = false; + + if (accountId != null) { + Account account = _accountDao.findById(accountId); + if (account == null || account.getId() == Account.ACCOUNT_ID_SYSTEM) { + throw new InvalidParameterValueException("Unable to find account by id " + accountId); + } + + _accountMgr.checkAccess(caller, null, true, account); + } + + if (domainId != null) { + Domain domain = _domainDao.findById(domainId); + if (domain == null) { + throw new InvalidParameterValueException("Domain id=" + domainId + " doesn't exist"); + } + + _accountMgr.checkAccess(caller, domain); + + if (accountName != null) { + Account account = _accountDao.findActiveAccount(accountName, domainId); + if (account == null || account.getId() == Account.ACCOUNT_ID_SYSTEM) { + throw new InvalidParameterValueException("Unable to find account by name " + accountName + " in domain " + domainId); + } + _accountMgr.checkAccess(caller, null, true, account); + } + } + + if (accountId == null) { + if (_accountMgr.isAdmin(caller.getType()) && listAll && domainId == null) { + listForDomain = true; + isRecursive = true; + if (domainId == null) { + domainId = caller.getDomainId(); + } + } else if (_accountMgr.isAdmin(caller.getType()) && domainId != null) { + listForDomain = true; + } else { + accountId = caller.getAccountId(); + } + } + + Filter searchFilter = new Filter(AccountJoinVO.class, "id", true, cmd.getStartIndex(), cmd.getPageSizeVal()); + + Object type = cmd.getAccountType(); + Object state = cmd.getState(); + Object isCleanupRequired = cmd.isCleanupRequired(); + Object keyword = cmd.getKeyword(); + + SearchBuilder sb = _accountJoinDao.createSearchBuilder(); + sb.and("accountName", sb.entity().getAccountName(), SearchCriteria.Op.EQ); + sb.and("domainId", sb.entity().getDomainId(), SearchCriteria.Op.EQ); + sb.and("id", sb.entity().getId(), SearchCriteria.Op.EQ); + sb.and("type", sb.entity().getType(), SearchCriteria.Op.EQ); + sb.and("state", sb.entity().getState(), SearchCriteria.Op.EQ); + sb.and("needsCleanup", sb.entity().isNeedsCleanup(), SearchCriteria.Op.EQ); + sb.and("typeNEQ", sb.entity().getType(), SearchCriteria.Op.NEQ); + sb.and("idNEQ", sb.entity().getId(), SearchCriteria.Op.NEQ); + + if (listForDomain && isRecursive) { + sb.and("path", sb.entity().getDomainPath(), SearchCriteria.Op.LIKE); + } + + SearchCriteria sc = sb.create(); + + sc.setParameters("idNEQ", Account.ACCOUNT_ID_SYSTEM); + + if (keyword != null) { + SearchCriteria ssc = _accountJoinDao.createSearchCriteria(); + ssc.addOr("accountName", SearchCriteria.Op.LIKE, "%" + keyword + "%"); + ssc.addOr("state", SearchCriteria.Op.LIKE, "%" + keyword + "%"); + sc.addAnd("accountName", SearchCriteria.Op.SC, ssc); + } + + if (type != null) { + sc.setParameters("type", type); + } + + if (state != null) { + sc.setParameters("state", state); + } + + if (isCleanupRequired != null) { + sc.setParameters("needsCleanup", isCleanupRequired); + } + + if (accountName != null) { + sc.setParameters("accountName", accountName); + } + + // don't return account of type project to the end user + sc.setParameters("typeNEQ", 5); + + if (accountId != null) { + sc.setParameters("id", accountId); + } + + if (listForDomain) { + if (isRecursive) { + Domain domain = _domainDao.findById(domainId); + sc.setParameters("path", domain.getPath() + "%"); + } else { + sc.setParameters("domainId", domainId); + } + } + + Pair, Integer> result = _accountJoinDao.searchAndCount(sc, searchFilter); + return new Pair, Integer>(result.first(), result.second()); + } + + } diff --git a/server/src/com/cloud/api/query/ViewResponseHelper.java b/server/src/com/cloud/api/query/ViewResponseHelper.java index b1a53991e31..c29c93b394f 100644 --- a/server/src/com/cloud/api/query/ViewResponseHelper.java +++ b/server/src/com/cloud/api/query/ViewResponseHelper.java @@ -23,6 +23,7 @@ import java.util.List; import org.apache.cloudstack.api.ApiConstants.HostDetails; import org.apache.cloudstack.api.ApiConstants.VMDetails; +import org.apache.cloudstack.api.response.AccountResponse; import org.apache.cloudstack.api.response.DomainRouterResponse; import org.apache.cloudstack.api.response.EventResponse; import org.apache.cloudstack.api.response.HostResponse; @@ -38,6 +39,7 @@ import org.apache.cloudstack.api.response.VolumeResponse; import org.apache.log4j.Logger; import com.cloud.api.ApiDBUtils; +import com.cloud.api.query.vo.AccountJoinVO; import com.cloud.api.query.vo.DomainRouterJoinVO; import com.cloud.api.query.vo.EventJoinVO; import com.cloud.api.query.vo.HostJoinVO; @@ -233,4 +235,12 @@ public class ViewResponseHelper { } return new ArrayList(vrDataList.values()); } + + public static List createAccountResponse(AccountJoinVO... accounts) { + List respList = new ArrayList(); + for (AccountJoinVO vt : accounts){ + respList.add(ApiDBUtils.newAccountResponse(vt)); + } + return respList; + } } diff --git a/server/src/com/cloud/api/query/dao/AccountJoinDao.java b/server/src/com/cloud/api/query/dao/AccountJoinDao.java new file mode 100644 index 00000000000..037e4447d2e --- /dev/null +++ b/server/src/com/cloud/api/query/dao/AccountJoinDao.java @@ -0,0 +1,33 @@ +// 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.query.dao; + +import java.util.List; + +import org.apache.cloudstack.api.response.AccountResponse; +import com.cloud.api.query.vo.AccountJoinVO; +import com.cloud.user.Account; +import com.cloud.utils.db.GenericDao; + +public interface AccountJoinDao extends GenericDao { + + AccountResponse newAccountResponse(AccountJoinVO vol); + + AccountJoinVO newAccountView(Account vol); + + List searchByIds(Long... ids); +} diff --git a/server/src/com/cloud/api/query/dao/AccountJoinDaoImpl.java b/server/src/com/cloud/api/query/dao/AccountJoinDaoImpl.java new file mode 100644 index 00000000000..2b18a80d844 --- /dev/null +++ b/server/src/com/cloud/api/query/dao/AccountJoinDaoImpl.java @@ -0,0 +1,227 @@ +// 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.query.dao; + +import java.util.ArrayList; +import java.util.Iterator; +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.query.ViewResponseHelper; +import com.cloud.api.query.vo.AccountJoinVO; +import com.cloud.api.query.vo.InstanceGroupJoinVO; +import com.cloud.api.query.vo.ResourceTagJoinVO; +import com.cloud.api.query.vo.UserAccountJoinVO; +import com.cloud.api.query.vo.UserVmJoinVO; +import com.cloud.api.query.vo.VolumeJoinVO; +import com.cloud.configuration.Resource.ResourceType; +import com.cloud.dc.DataCenter; +import com.cloud.domain.Domain; + +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.ServerApiException; +import org.apache.cloudstack.api.response.AccountResponse; +import org.apache.cloudstack.api.response.ListResponse; +import org.apache.cloudstack.api.response.UserResponse; +import org.apache.cloudstack.api.response.VolumeResponse; + +import com.cloud.offering.ServiceOffering; +import com.cloud.server.Criteria; +import com.cloud.storage.Storage; +import com.cloud.storage.VMTemplateHostVO; +import com.cloud.storage.Volume; +import com.cloud.storage.VMTemplateStorageResourceAssoc.Status; +import com.cloud.user.Account; +import com.cloud.user.UserContext; +import com.cloud.user.UserStatisticsVO; +import com.cloud.user.UserVO; +import com.cloud.utils.db.GenericDaoBase; +import com.cloud.utils.db.SearchBuilder; +import com.cloud.utils.db.SearchCriteria; +import com.cloud.vm.VirtualMachine.State; + + +@Local(value={AccountJoinDao.class}) +public class AccountJoinDaoImpl extends GenericDaoBase implements AccountJoinDao { + public static final Logger s_logger = Logger.getLogger(AccountJoinDaoImpl.class); + + private SearchBuilder acctSearch; + + private SearchBuilder acctIdSearch; + + protected AccountJoinDaoImpl() { + + acctSearch = createSearchBuilder(); + acctSearch.and("idIN", acctSearch.entity().getId(), SearchCriteria.Op.IN); + acctSearch.done(); + + acctIdSearch = createSearchBuilder(); + acctIdSearch.and("id", acctIdSearch.entity().getId(), SearchCriteria.Op.EQ); + acctIdSearch.done(); + + this._count = "select count(distinct id) from account_view WHERE "; + } + + + + @Override + public AccountResponse newAccountResponse(AccountJoinVO account) { + boolean accountIsAdmin = (account.getType() == Account.ACCOUNT_TYPE_ADMIN); + AccountResponse accountResponse = new AccountResponse(); + accountResponse.setId(account.getUuid()); + accountResponse.setName(account.getAccountName()); + accountResponse.setAccountType(account.getType()); + accountResponse.setDomainId(account.getDomainUuid()); + accountResponse.setDomainName(account.getDomainName()); + accountResponse.setState(account.getState().toString()); + accountResponse.setNetworkDomain(account.getNetworkDomain()); + accountResponse.setDefaultZone(account.getDataCenterUuid()); + + // get network stat + accountResponse.setBytesReceived(account.getBytesReceived()); + accountResponse.setBytesSent(account.getBytesSent()); + + // Get resource limits and counts + + long vmLimit = ApiDBUtils.findCorrectResourceLimit(account.getVmLimit(), account.getType(), ResourceType.user_vm); + String vmLimitDisplay = (accountIsAdmin || vmLimit == -1) ? "Unlimited" : String.valueOf(vmLimit); + long vmTotal = (account.getVmTotal() == null) ? 0 : account.getVmTotal(); + String vmAvail = (accountIsAdmin || vmLimit == -1) ? "Unlimited" : String.valueOf(vmLimit - vmTotal); + accountResponse.setVmLimit(vmLimitDisplay); + accountResponse.setVmTotal(vmTotal); + accountResponse.setVmAvailable(vmAvail); + + long ipLimit = ApiDBUtils.findCorrectResourceLimit(account.getIpLimit(), account.getType(), ResourceType.public_ip); + String ipLimitDisplay = (accountIsAdmin || ipLimit == -1) ? "Unlimited" : String.valueOf(ipLimit); + long ipTotal = (account.getIpTotal() == null) ? 0 : account.getIpTotal(); + + Long ips = ipLimit - ipTotal; + // check how many free ips are left, and if it's less than max allowed number of ips from account - use this + // value + Long ipsLeft = account.getIpFree(); + boolean unlimited = true; + if (ips.longValue() > ipsLeft.longValue()) { + ips = ipsLeft; + unlimited = false; + } + + String ipAvail = ((accountIsAdmin || ipLimit == -1) && unlimited) ? "Unlimited" : String.valueOf(ips); + + accountResponse.setIpLimit(ipLimitDisplay); + accountResponse.setIpTotal(ipTotal); + accountResponse.setIpAvailable(ipAvail); + + long volumeLimit = ApiDBUtils.findCorrectResourceLimit(account.getVolumeLimit(), account.getType(), ResourceType.volume); + String volumeLimitDisplay = (accountIsAdmin || volumeLimit == -1) ? "Unlimited" : String.valueOf(volumeLimit); + long volumeTotal = (account.getVolumeTotal() == 0) ? 0 : account.getVolumeTotal(); + String volumeAvail = (accountIsAdmin || volumeLimit == -1) ? "Unlimited" : String.valueOf(volumeLimit - volumeTotal); + accountResponse.setVolumeLimit(volumeLimitDisplay); + accountResponse.setVolumeTotal(volumeTotal); + accountResponse.setVolumeAvailable(volumeAvail); + + long snapshotLimit = ApiDBUtils.findCorrectResourceLimit(account.getSnapshotLimit(), account.getType(), ResourceType.snapshot); + String snapshotLimitDisplay = (accountIsAdmin || snapshotLimit == -1) ? "Unlimited" : String.valueOf(snapshotLimit); + long snapshotTotal = (account.getSnapshotTotal() == null) ? 0 : account.getSnapshotTotal(); + String snapshotAvail = (accountIsAdmin || snapshotLimit == -1) ? "Unlimited" : String.valueOf(snapshotLimit - snapshotTotal); + accountResponse.setSnapshotLimit(snapshotLimitDisplay); + accountResponse.setSnapshotTotal(snapshotTotal); + accountResponse.setSnapshotAvailable(snapshotAvail); + + Long templateLimit = ApiDBUtils.findCorrectResourceLimit(account.getTemplateLimit(), account.getType(), ResourceType.template); + String templateLimitDisplay = (accountIsAdmin || templateLimit == -1) ? "Unlimited" : String.valueOf(templateLimit); + Long templateTotal = (account.getTemplateTotal() == null) ? 0 : account.getTemplateTotal(); + String templateAvail = (accountIsAdmin || templateLimit == -1) ? "Unlimited" : String.valueOf(templateLimit - templateTotal); + accountResponse.setTemplateLimit(templateLimitDisplay); + accountResponse.setTemplateTotal(templateTotal); + accountResponse.setTemplateAvailable(templateAvail); + + // Get stopped and running VMs + accountResponse.setVmStopped(account.getVmStopped()); + accountResponse.setVmRunning(account.getVmRunning()); + + + //get resource limits for projects + long projectLimit = ApiDBUtils.findCorrectResourceLimit(account.getProjectLimit(), account.getType(), ResourceType.project); + String projectLimitDisplay = (accountIsAdmin || projectLimit == -1) ? "Unlimited" : String.valueOf(projectLimit); + long projectTotal = (account.getProjectTotal() == null) ? 0 : account.getProjectTotal(); + String projectAvail = (accountIsAdmin || projectLimit == -1) ? "Unlimited" : String.valueOf(projectLimit - projectTotal); + accountResponse.setProjectLimit(projectLimitDisplay); + accountResponse.setProjectTotal(projectTotal); + accountResponse.setProjectAvailable(projectAvail); + + //get resource limits for networks + long networkLimit = ApiDBUtils.findCorrectResourceLimit(account.getNetworkLimit(), account.getType(), ResourceType.network); + String networkLimitDisplay = (accountIsAdmin || networkLimit == -1) ? "Unlimited" : String.valueOf(networkLimit); + long networkTotal = (account.getNetworkTotal() == null) ? 0 : account.getNetworkTotal(); + String networkAvail = (accountIsAdmin || networkLimit == -1) ? "Unlimited" : String.valueOf(networkLimit - networkTotal); + accountResponse.setNetworkLimit(networkLimitDisplay); + accountResponse.setNetworkTotal(networkTotal); + accountResponse.setNetworkAvailable(networkAvail); + + //get resource limits for vpcs + long vpcLimit = ApiDBUtils.findCorrectResourceLimit(account.getVpcLimit(), account.getType(), ResourceType.vpc); + String vpcLimitDisplay = (accountIsAdmin || vpcLimit == -1) ? "Unlimited" : String.valueOf(vpcLimit); + long vpcTotal = (account.getVpcTotal() == null) ? 0 : account.getVpcTotal(); + String vpcAvail = (accountIsAdmin || vpcLimit == -1) ? "Unlimited" : String.valueOf(vpcLimit - vpcTotal); + accountResponse.setNetworkLimit(vpcLimitDisplay); + accountResponse.setNetworkTotal(vpcTotal); + accountResponse.setNetworkAvailable(vpcAvail); + + // adding all the users for an account as part of the response obj + List usersForAccount = ApiDBUtils.findUserViewByAccountId(account.getId()); + List userResponses = ViewResponseHelper.createUserResponse(usersForAccount.toArray(new UserAccountJoinVO[usersForAccount.size()])); + accountResponse.setUsers(userResponses); + + // set details + accountResponse.setDetails(ApiDBUtils.getAccountDetails(account.getId())); + accountResponse.setObjectName("account"); + + // set async job + accountResponse.setJobId(account.getJobUuid()); + accountResponse.setJobStatus(account.getJobStatus()); + return accountResponse; + } + + + @Override + public AccountJoinVO newAccountView(Account acct) { + SearchCriteria sc = acctIdSearch.create(); + sc.setParameters("id", acct.getId()); + List accounts = searchIncludingRemoved(sc, null, null, false); + assert accounts != null && accounts.size() == 1 : "No account found for account id " + acct.getId(); + return accounts.get(0); + + } + + + + + @Override + public List searchByIds(Long... ids) { + SearchCriteria sc = acctSearch.create(); + sc.setParameters("idIN", ids); + return searchIncludingRemoved(sc, null, null, false); + } + + + +} diff --git a/server/src/com/cloud/api/query/dao/DomainRouterJoinDaoImpl.java b/server/src/com/cloud/api/query/dao/DomainRouterJoinDaoImpl.java index 9d5c36da07b..9feb131a7a8 100644 --- a/server/src/com/cloud/api/query/dao/DomainRouterJoinDaoImpl.java +++ b/server/src/com/cloud/api/query/dao/DomainRouterJoinDaoImpl.java @@ -145,6 +145,10 @@ public class DomainRouterJoinDaoImpl extends GenericDaoBase implements } hostResponse.setResourceState(host.getResourceState().toString()); + + // set async job + hostResponse.setJobId(host.getJobUuid()); + hostResponse.setJobStatus(host.getJobStatus()); + hostResponse.setObjectName("host"); return hostResponse; diff --git a/server/src/com/cloud/api/query/dao/SecurityGroupJoinDaoImpl.java b/server/src/com/cloud/api/query/dao/SecurityGroupJoinDaoImpl.java index b7994cbb322..57cbf4732ac 100644 --- a/server/src/com/cloud/api/query/dao/SecurityGroupJoinDaoImpl.java +++ b/server/src/com/cloud/api/query/dao/SecurityGroupJoinDaoImpl.java @@ -109,6 +109,11 @@ public class SecurityGroupJoinDaoImpl extends GenericDaoBase implem } volResponse.setExtractable(isExtractable); + + // set async job + volResponse.setJobId(volume.getJobUuid()); + volResponse.setJobStatus(volume.getJobStatus()); + volResponse.setObjectName("volume"); return volResponse; } diff --git a/server/src/com/cloud/api/query/vo/AccountJoinVO.java b/server/src/com/cloud/api/query/vo/AccountJoinVO.java new file mode 100644 index 00000000000..f9b43183da8 --- /dev/null +++ b/server/src/com/cloud/api/query/vo/AccountJoinVO.java @@ -0,0 +1,569 @@ +// 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.query.vo; + +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.user.Account.State; +import com.cloud.utils.db.GenericDao; +import org.apache.cloudstack.api.Identity; +import org.apache.cloudstack.api.InternalIdentity; + +@Entity +@Table(name="account_view") +public class AccountJoinVO extends BaseViewVO implements InternalIdentity, Identity { + + @Column(name="id") + private long id; + + @Column(name="uuid") + private String uuid; + + @Column(name="account_name") + private String accountName = null; + + @Column(name="type") + private short type; + + + @Column(name="state") + @Enumerated(value=EnumType.STRING) + private State state; + + @Column(name=GenericDao.REMOVED_COLUMN) + private Date removed; + + @Column(name="cleanup_needed") + private boolean needsCleanup = false; + + @Column(name="network_domain") + private String networkDomain; + + + @Column(name="domain_id") + private long domainId; + + @Column(name="domain_uuid") + private String domainUuid; + + @Column(name="domain_name") + private String domainName = null; + + @Column(name="domain_path") + private String domainPath = null; + + + @Column(name="data_center_id") + private long dataCenterId; + + @Column(name="data_center_uuid") + private String dataCenterUuid; + + @Column(name="data_center_name") + private String dataCenterName; + + @Column(name="bytesReceived") + private Long bytesReceived; + + @Column(name="bytesSent") + private Long bytesSent; + + @Column(name="vmLimit") + private Long vmLimit; + + @Column(name="vmTotal") + private Long vmTotal; + + + @Column(name="ipLimit") + private Long ipLimit; + + @Column(name="ipTotal") + private Long ipTotal; + + @Column(name="ipFree") + private Long ipFree; + + @Column(name="volumeLimit") + private Long volumeLimit; + + @Column(name="volumeTotal") + private Long volumeTotal; + + @Column(name="snapshotLimit") + private Long snapshotLimit; + + @Column(name="snapshotTotal") + private Long snapshotTotal; + + @Column(name="templateLimit") + private Long templateLimit; + + @Column(name="templateTotal") + private Long templateTotal; + + @Column(name="stoppedVms") + private Integer vmStopped; + + @Column(name="runningVms") + private Integer vmRunning; + + @Column(name="projectLimit") + private Long projectLimit; + + @Column(name="projectTotal") + private Long projectTotal; + + + @Column(name="networkLimit") + private Long networkLimit; + + @Column(name="networkTotal") + private Long networkTotal; + + + @Column(name="vpcLimit") + private Long vpcLimit; + + @Column(name="vpcTotal") + private Long vpcTotal; + + @Column(name="job_id") + private long jobId; + + @Column(name="job_uuid") + private String jobUuid; + + @Column(name="job_status") + private int jobStatus; + + public AccountJoinVO() { + } + + + @Override + public long getId() { + return id; + } + + + @Override + public void setId(long id) { + this.id = id; + } + + + @Override + public String getUuid() { + return uuid; + } + + + public void setUuid(String uuid) { + this.uuid = uuid; + } + + + public String getAccountName() { + return accountName; + } + + + public void setAccountName(String accountName) { + this.accountName = accountName; + } + + + public short getType() { + return type; + } + + + public void setType(short type) { + this.type = type; + } + + + public State getState() { + return state; + } + + + public void setState(State state) { + this.state = state; + } + + + public Date getRemoved() { + return removed; + } + + + public void setRemoved(Date removed) { + this.removed = removed; + } + + + public boolean isNeedsCleanup() { + return needsCleanup; + } + + + public void setNeedsCleanup(boolean needsCleanup) { + this.needsCleanup = needsCleanup; + } + + + public String getNetworkDomain() { + return networkDomain; + } + + + public void setNetworkDomain(String networkDomain) { + this.networkDomain = networkDomain; + } + + + public long getDomainId() { + return domainId; + } + + + public void setDomainId(long domainId) { + this.domainId = domainId; + } + + + public String getDomainUuid() { + return domainUuid; + } + + + public void setDomainUuid(String domainUuid) { + this.domainUuid = domainUuid; + } + + + public String getDomainName() { + return domainName; + } + + + public void setDomainName(String domainName) { + this.domainName = domainName; + } + + + public String getDomainPath() { + return domainPath; + } + + + public void setDomainPath(String domainPath) { + this.domainPath = domainPath; + } + + + public long getDataCenterId() { + return dataCenterId; + } + + + public void setDataCenterId(long dataCenterId) { + this.dataCenterId = dataCenterId; + } + + + public String getDataCenterUuid() { + return dataCenterUuid; + } + + + public void setDataCenterUuid(String dataCenterUuid) { + this.dataCenterUuid = dataCenterUuid; + } + + + public String getDataCenterName() { + return dataCenterName; + } + + + public void setDataCenterName(String dataCenterName) { + this.dataCenterName = dataCenterName; + } + + + public Long getBytesReceived() { + return bytesReceived; + } + + + public void setBytesReceived(Long bytesReceived) { + this.bytesReceived = bytesReceived; + } + + + public Long getBytesSent() { + return bytesSent; + } + + + public void setBytesSent(Long bytesSent) { + this.bytesSent = bytesSent; + } + + + + + public Long getVmTotal() { + return vmTotal; + } + + + public void setVmTotal(Long vmTotal) { + this.vmTotal = vmTotal; + } + + + + + + public Long getIpTotal() { + return ipTotal; + } + + + public void setIpTotal(Long ipTotal) { + this.ipTotal = ipTotal; + } + + + public Long getIpFree() { + return ipFree; + } + + + public void setIpFree(Long ipFree) { + this.ipFree = ipFree; + } + + + + public Long getVolumeTotal() { + return volumeTotal; + } + + + public void setVolumeTotal(Long volumeTotal) { + this.volumeTotal = volumeTotal; + } + + + + public Long getSnapshotTotal() { + return snapshotTotal; + } + + + public void setSnapshotTotal(Long snapshotTotal) { + this.snapshotTotal = snapshotTotal; + } + + + + + public Long getTemplateTotal() { + return templateTotal; + } + + + public void setTemplateTotal(Long templateTotal) { + this.templateTotal = templateTotal; + } + + + public Integer getVmStopped() { + return vmStopped; + } + + + public void setVmStopped(Integer vmStopped) { + this.vmStopped = vmStopped; + } + + + public Integer getVmRunning() { + return vmRunning; + } + + + public void setVmRunning(Integer vmRunning) { + this.vmRunning = vmRunning; + } + + + + public Long getProjectTotal() { + return projectTotal; + } + + + public void setProjectTotal(Long projectTotal) { + this.projectTotal = projectTotal; + } + + + + public Long getNetworkTotal() { + return networkTotal; + } + + + public void setNetworkTotal(Long networkTotal) { + this.networkTotal = networkTotal; + } + + + + public Long getVpcTotal() { + return vpcTotal; + } + + + public void setVpcTotal(Long vpcTotal) { + this.vpcTotal = vpcTotal; + } + + + public Long getVmLimit() { + return vmLimit; + } + + + public void setVmLimit(Long vmLimit) { + this.vmLimit = vmLimit; + } + + + public Long getIpLimit() { + return ipLimit; + } + + + public void setIpLimit(Long ipLimit) { + this.ipLimit = ipLimit; + } + + + public Long getVolumeLimit() { + return volumeLimit; + } + + + public void setVolumeLimit(Long volumeLimit) { + this.volumeLimit = volumeLimit; + } + + + public Long getSnapshotLimit() { + return snapshotLimit; + } + + + public void setSnapshotLimit(Long snapshotLimit) { + this.snapshotLimit = snapshotLimit; + } + + + public Long getTemplateLimit() { + return templateLimit; + } + + + public void setTemplateLimit(Long templateLimit) { + this.templateLimit = templateLimit; + } + + + public Long getProjectLimit() { + return projectLimit; + } + + + public void setProjectLimit(Long projectLimit) { + this.projectLimit = projectLimit; + } + + + public Long getNetworkLimit() { + return networkLimit; + } + + + public void setNetworkLimit(Long networkLimit) { + this.networkLimit = networkLimit; + } + + + public Long getVpcLimit() { + return vpcLimit; + } + + + public void setVpcLimit(Long vpcLimit) { + this.vpcLimit = vpcLimit; + } + + + 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; + } + + + + +} diff --git a/server/src/com/cloud/api/query/vo/ControlledViewEntity.java b/server/src/com/cloud/api/query/vo/ControlledViewEntity.java index a21a6f5608a..b989502a8f3 100644 --- a/server/src/com/cloud/api/query/vo/ControlledViewEntity.java +++ b/server/src/com/cloud/api/query/vo/ControlledViewEntity.java @@ -17,6 +17,8 @@ package com.cloud.api.query.vo; import com.cloud.acl.ControlledEntity; + +import org.apache.cloudstack.api.Identity; import org.apache.cloudstack.api.InternalIdentity; /** @@ -25,7 +27,7 @@ import org.apache.cloudstack.api.InternalIdentity; * @author minc * */ -public interface ControlledViewEntity extends ControlledEntity, InternalIdentity { +public interface ControlledViewEntity extends ControlledEntity, InternalIdentity, Identity { public String getDomainPath(); diff --git a/server/src/com/cloud/api/query/vo/DomainRouterJoinVO.java b/server/src/com/cloud/api/query/vo/DomainRouterJoinVO.java index 9dfa666cd9e..f3d904bb05b 100644 --- a/server/src/com/cloud/api/query/vo/DomainRouterJoinVO.java +++ b/server/src/com/cloud/api/query/vo/DomainRouterJoinVO.java @@ -30,11 +30,10 @@ 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; -import org.apache.cloudstack.api.InternalIdentity; @Entity @Table(name="domain_router_view") -public class DomainRouterJoinVO extends BaseViewVO implements ControlledViewEntity, InternalIdentity { +public class DomainRouterJoinVO extends BaseViewVO implements ControlledViewEntity { @Column(name="id", updatable=false, nullable = false) private long id; @@ -243,6 +242,7 @@ public class DomainRouterJoinVO extends BaseViewVO implements ControlledViewEnti + @Override public String getUuid() { return uuid; } diff --git a/server/src/com/cloud/api/query/vo/EventJoinVO.java b/server/src/com/cloud/api/query/vo/EventJoinVO.java index 790f004af9c..2511d964820 100644 --- a/server/src/com/cloud/api/query/vo/EventJoinVO.java +++ b/server/src/com/cloud/api/query/vo/EventJoinVO.java @@ -26,11 +26,10 @@ import javax.persistence.Table; import com.cloud.utils.db.GenericDao; import com.cloud.event.Event.State; -import org.apache.cloudstack.api.InternalIdentity; @Entity @Table(name="event_view") -public class EventJoinVO extends BaseViewVO implements ControlledViewEntity, InternalIdentity { +public class EventJoinVO extends BaseViewVO implements ControlledViewEntity { @Column(name="id", updatable=false, nullable = false) private long id; @@ -119,6 +118,7 @@ public class EventJoinVO extends BaseViewVO implements ControlledViewEntity, Int } + @Override public String getUuid() { return uuid; } diff --git a/server/src/com/cloud/api/query/vo/HostJoinVO.java b/server/src/com/cloud/api/query/vo/HostJoinVO.java index a1cdb50e8ad..1eb82fbd320 100644 --- a/server/src/com/cloud/api/query/vo/HostJoinVO.java +++ b/server/src/com/cloud/api/query/vo/HostJoinVO.java @@ -32,6 +32,8 @@ import com.cloud.hypervisor.Hypervisor.HypervisorType; import com.cloud.org.Cluster; import com.cloud.resource.ResourceState; import com.cloud.utils.db.GenericDao; + +import org.apache.cloudstack.api.Identity; import org.apache.cloudstack.api.InternalIdentity; /** @@ -41,7 +43,7 @@ import org.apache.cloudstack.api.InternalIdentity; */ @Entity @Table(name="host_view") -public class HostJoinVO extends BaseViewVO implements InternalIdentity { +public class HostJoinVO extends BaseViewVO implements InternalIdentity, Identity { @Column(name="id") private long id; @@ -188,6 +190,7 @@ public class HostJoinVO extends BaseViewVO implements InternalIdentity { } + @Override public String getUuid() { return uuid; } diff --git a/server/src/com/cloud/api/query/vo/InstanceGroupJoinVO.java b/server/src/com/cloud/api/query/vo/InstanceGroupJoinVO.java index 6b9d27ed437..02c53e97a5f 100644 --- a/server/src/com/cloud/api/query/vo/InstanceGroupJoinVO.java +++ b/server/src/com/cloud/api/query/vo/InstanceGroupJoinVO.java @@ -23,11 +23,10 @@ import javax.persistence.Entity; import javax.persistence.Table; import com.cloud.utils.db.GenericDao; -import org.apache.cloudstack.api.InternalIdentity; @Entity @Table(name="instance_group_view") -public class InstanceGroupJoinVO extends BaseViewVO implements ControlledViewEntity, InternalIdentity { +public class InstanceGroupJoinVO extends BaseViewVO implements ControlledViewEntity { @Column(name="id", updatable=false, nullable = false) private long id; @@ -96,6 +95,7 @@ public class InstanceGroupJoinVO extends BaseViewVO implements ControlledViewEnt } + @Override public String getUuid() { return uuid; } diff --git a/server/src/com/cloud/api/query/vo/ProjectInvitationJoinVO.java b/server/src/com/cloud/api/query/vo/ProjectInvitationJoinVO.java index 1ec63db5028..8571c2629aa 100644 --- a/server/src/com/cloud/api/query/vo/ProjectInvitationJoinVO.java +++ b/server/src/com/cloud/api/query/vo/ProjectInvitationJoinVO.java @@ -26,11 +26,10 @@ import javax.persistence.Table; import com.cloud.utils.db.GenericDao; import com.cloud.vm.VirtualMachine.State; -import org.apache.cloudstack.api.InternalIdentity; @Entity @Table(name="project_invitation_view") -public class ProjectInvitationJoinVO extends BaseViewVO implements ControlledViewEntity, InternalIdentity { +public class ProjectInvitationJoinVO extends BaseViewVO implements ControlledViewEntity { @Column(name="id", updatable=false, nullable = false) private long id; @@ -96,6 +95,7 @@ public class ProjectInvitationJoinVO extends BaseViewVO implements ControlledVie } + @Override public String getUuid() { return uuid; } diff --git a/server/src/com/cloud/api/query/vo/ProjectJoinVO.java b/server/src/com/cloud/api/query/vo/ProjectJoinVO.java index 8e18e7b7ff0..cc9e21fb3c7 100644 --- a/server/src/com/cloud/api/query/vo/ProjectJoinVO.java +++ b/server/src/com/cloud/api/query/vo/ProjectJoinVO.java @@ -27,11 +27,13 @@ import javax.persistence.Table; import com.cloud.server.ResourceTag.TaggedResourceType; import com.cloud.utils.db.GenericDao; import com.cloud.vm.VirtualMachine.State; + +import org.apache.cloudstack.api.Identity; import org.apache.cloudstack.api.InternalIdentity; @Entity @Table(name="project_view") -public class ProjectJoinVO extends BaseViewVO implements InternalIdentity { +public class ProjectJoinVO extends BaseViewVO implements InternalIdentity, Identity { @Column(name="id", updatable=false, nullable = false) private long id; @@ -120,6 +122,7 @@ public class ProjectJoinVO extends BaseViewVO implements InternalIdentity { } + @Override public String getUuid() { return uuid; } diff --git a/server/src/com/cloud/api/query/vo/ResourceTagJoinVO.java b/server/src/com/cloud/api/query/vo/ResourceTagJoinVO.java index 6064b6f8d4a..fadb3504c7c 100644 --- a/server/src/com/cloud/api/query/vo/ResourceTagJoinVO.java +++ b/server/src/com/cloud/api/query/vo/ResourceTagJoinVO.java @@ -23,11 +23,10 @@ import javax.persistence.Enumerated; import javax.persistence.Table; import com.cloud.server.ResourceTag.TaggedResourceType; -import org.apache.cloudstack.api.InternalIdentity; @Entity @Table(name="resource_tag_view") -public class ResourceTagJoinVO extends BaseViewVO implements ControlledViewEntity, InternalIdentity { +public class ResourceTagJoinVO extends BaseViewVO implements ControlledViewEntity { @Column(name="id", updatable=false, nullable = false) private long id; @@ -95,6 +94,7 @@ public class ResourceTagJoinVO extends BaseViewVO implements ControlledViewEntit public ResourceTagJoinVO() { } + @Override public String getUuid() { return uuid; } diff --git a/server/src/com/cloud/api/query/vo/SecurityGroupJoinVO.java b/server/src/com/cloud/api/query/vo/SecurityGroupJoinVO.java index 89c174ae798..eb89ea994de 100644 --- a/server/src/com/cloud/api/query/vo/SecurityGroupJoinVO.java +++ b/server/src/com/cloud/api/query/vo/SecurityGroupJoinVO.java @@ -24,11 +24,10 @@ import javax.persistence.Table; import com.cloud.network.security.SecurityRule.SecurityRuleType; import com.cloud.server.ResourceTag.TaggedResourceType; -import org.apache.cloudstack.api.InternalIdentity; @Entity @Table(name="security_group_view") -public class SecurityGroupJoinVO extends BaseViewVO implements ControlledViewEntity, InternalIdentity { +public class SecurityGroupJoinVO extends BaseViewVO implements ControlledViewEntity{ @Column(name="id", updatable=false, nullable = false) private long id; @@ -152,6 +151,7 @@ public class SecurityGroupJoinVO extends BaseViewVO implements ControlledViewEnt this.id = id; } + @Override public String getUuid() { return uuid; } diff --git a/server/src/com/cloud/api/query/vo/UserAccountJoinVO.java b/server/src/com/cloud/api/query/vo/UserAccountJoinVO.java index f62d8225d75..3a438abfba5 100644 --- a/server/src/com/cloud/api/query/vo/UserAccountJoinVO.java +++ b/server/src/com/cloud/api/query/vo/UserAccountJoinVO.java @@ -24,11 +24,13 @@ import javax.persistence.Table; import com.cloud.utils.db.Encrypt; import com.cloud.utils.db.GenericDao; + +import org.apache.cloudstack.api.Identity; import org.apache.cloudstack.api.InternalIdentity; @Entity @Table(name="user_view") -public class UserAccountJoinVO extends BaseViewVO implements InternalIdentity { +public class UserAccountJoinVO extends BaseViewVO implements InternalIdentity, Identity { @Column(name="id", updatable=false, nullable = false) private long id; @@ -104,6 +106,14 @@ public class UserAccountJoinVO extends BaseViewVO implements InternalIdentity { @Column(name="domain_path") private String domainPath = null; + @Column(name="job_id") + private long jobId; + + @Column(name="job_uuid") + private String jobUuid; + + @Column(name="job_status") + private int jobStatus; public UserAccountJoinVO() { } @@ -118,6 +128,7 @@ public class UserAccountJoinVO extends BaseViewVO implements InternalIdentity { this.id = id; } + @Override public String getUuid() { return uuid; } @@ -308,6 +319,30 @@ public class UserAccountJoinVO extends BaseViewVO implements InternalIdentity { this.loginAttempts = loginAttempts; } + 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; + } + } diff --git a/server/src/com/cloud/api/query/vo/UserVmJoinVO.java b/server/src/com/cloud/api/query/vo/UserVmJoinVO.java index 62a1daf2181..db400ffdeff 100644 --- a/server/src/com/cloud/api/query/vo/UserVmJoinVO.java +++ b/server/src/com/cloud/api/query/vo/UserVmJoinVO.java @@ -37,11 +37,10 @@ import com.cloud.utils.db.Encrypt; import com.cloud.utils.db.GenericDao; import com.cloud.vm.VirtualMachine; import com.cloud.vm.VirtualMachine.State; -import org.apache.cloudstack.api.InternalIdentity; @Entity @Table(name="user_vm_view") -public class UserVmJoinVO extends BaseViewVO implements ControlledViewEntity, InternalIdentity { +public class UserVmJoinVO extends BaseViewVO implements ControlledViewEntity { @Column(name="id", updatable=false, nullable = false) private long id; @@ -378,6 +377,7 @@ public class UserVmJoinVO extends BaseViewVO implements ControlledViewEntity, In } + @Override public String getUuid() { return uuid; } diff --git a/server/src/com/cloud/api/query/vo/VolumeJoinVO.java b/server/src/com/cloud/api/query/vo/VolumeJoinVO.java index 89e9f84960c..907b02b633a 100644 --- a/server/src/com/cloud/api/query/vo/VolumeJoinVO.java +++ b/server/src/com/cloud/api/query/vo/VolumeJoinVO.java @@ -31,12 +31,10 @@ import com.cloud.storage.Volume; import com.cloud.storage.VMTemplateStorageResourceAssoc.Status; import com.cloud.utils.db.GenericDao; import com.cloud.vm.VirtualMachine; -import com.cloud.vm.VirtualMachine.Type; -import org.apache.cloudstack.api.InternalIdentity; @Entity @Table(name="volume_view") -public class VolumeJoinVO extends BaseViewVO implements ControlledViewEntity, InternalIdentity { +public class VolumeJoinVO extends BaseViewVO implements ControlledViewEntity { @Column(name="id") private long id; @@ -263,6 +261,7 @@ public class VolumeJoinVO extends BaseViewVO implements ControlledViewEntity, In + @Override public String getUuid() { return uuid; } diff --git a/server/src/com/cloud/configuration/DefaultComponentLibrary.java b/server/src/com/cloud/configuration/DefaultComponentLibrary.java index 1824f496ab0..ac7602c45c0 100755 --- a/server/src/com/cloud/configuration/DefaultComponentLibrary.java +++ b/server/src/com/cloud/configuration/DefaultComponentLibrary.java @@ -25,6 +25,7 @@ import com.cloud.agent.manager.ClusteredAgentManagerImpl; import com.cloud.alert.AlertManagerImpl; import com.cloud.alert.dao.AlertDaoImpl; import com.cloud.api.query.QueryManagerImpl; +import com.cloud.api.query.dao.AccountJoinDaoImpl; import com.cloud.api.query.dao.DomainRouterJoinDaoImpl; import com.cloud.api.query.dao.InstanceGroupJoinDaoImpl; import com.cloud.api.query.dao.ProjectAccountJoinDaoImpl; @@ -32,6 +33,7 @@ import com.cloud.api.query.dao.ProjectInvitationJoinDaoImpl; import com.cloud.api.query.dao.ProjectJoinDaoImpl; import com.cloud.api.query.dao.ResourceTagJoinDaoImpl; import com.cloud.api.query.dao.SecurityGroupJoinDaoImpl; +import com.cloud.api.query.dao.UserAccountJoinDaoImpl; import com.cloud.api.query.dao.UserVmJoinDaoImpl; import com.cloud.api.query.dao.HostJoinDaoImpl; import com.cloud.api.query.dao.VolumeJoinDaoImpl; @@ -195,7 +197,6 @@ import com.cloud.user.DomainManagerImpl; import com.cloud.user.dao.AccountDaoImpl; import com.cloud.user.dao.SSHKeyPairDaoImpl; import com.cloud.user.dao.UserAccountDaoImpl; -import com.cloud.user.dao.UserAccountJoinDaoImpl; import com.cloud.user.dao.UserDaoImpl; import com.cloud.user.dao.UserStatisticsDaoImpl; import com.cloud.user.dao.UserStatsLogDaoImpl; @@ -244,6 +245,7 @@ public class DefaultComponentLibrary extends ComponentLibraryBase implements Com addDao("ProjectInvitationJoinDao", ProjectInvitationJoinDaoImpl.class); addDao("HostJoinDao", HostJoinDaoImpl.class); addDao("VolumeJoinDao", VolumeJoinDaoImpl.class); + addDao("AccountJoinDao", AccountJoinDaoImpl.class); ComponentInfo> info = addDao("ServiceOfferingDao", ServiceOfferingDaoImpl.class); info.addParameter("cache.size", "50"); info.addParameter("cache.time.to.live", "600"); diff --git a/server/src/com/cloud/resourcelimit/ResourceLimitManagerImpl.java b/server/src/com/cloud/resourcelimit/ResourceLimitManagerImpl.java index 7f446d747cb..92be18bae78 100755 --- a/server/src/com/cloud/resourcelimit/ResourceLimitManagerImpl.java +++ b/server/src/com/cloud/resourcelimit/ResourceLimitManagerImpl.java @@ -242,6 +242,36 @@ public class ResourceLimitManagerImpl implements ResourceLimitService, Manager { return max; } + @Override + public long findCorrectResourceLimitForAccount(short accountType, Long limit, ResourceType type) { + + long max = Resource.RESOURCE_UNLIMITED; // if resource limit is not found, then we treat it as unlimited + + // No limits for Root Admin accounts + if (_accountMgr.isRootAdmin(accountType)) { + return max; + } + + + // Check if limit is configured for account + if (limit != null) { + max = limit.longValue(); + } else { + // If the account has an no limit set, then return global default account limits + Long value = null; + if (accountType == Account.ACCOUNT_TYPE_PROJECT) { + value = projectResourceLimitMap.get(type); + } else { + value = accountResourceLimitMap.get(type); + } + if (value != null) { + return value; + } + } + + return max; + } + @Override public long findCorrectResourceLimitForDomain(Domain domain, ResourceType type) { long max = Resource.RESOURCE_UNLIMITED; diff --git a/server/src/com/cloud/user/AccountManagerImpl.java b/server/src/com/cloud/user/AccountManagerImpl.java index 593d2950e97..6a498c20ae8 100755 --- a/server/src/com/cloud/user/AccountManagerImpl.java +++ b/server/src/com/cloud/user/AccountManagerImpl.java @@ -46,6 +46,7 @@ import com.cloud.acl.ControlledEntity; import com.cloud.acl.SecurityChecker; import com.cloud.acl.SecurityChecker.AccessType; import com.cloud.api.ApiDBUtils; +import com.cloud.api.query.dao.UserAccountJoinDao; import com.cloud.api.query.vo.ControlledViewEntity; @@ -110,7 +111,6 @@ import com.cloud.template.VirtualMachineTemplate; import com.cloud.user.Account.State; import com.cloud.user.dao.AccountDao; import com.cloud.user.dao.UserAccountDao; -import com.cloud.user.dao.UserAccountJoinDao; import com.cloud.user.dao.UserDao; import com.cloud.utils.NumbersUtil; import com.cloud.utils.Pair; @@ -2021,125 +2021,6 @@ public class AccountManagerImpl implements AccountManager, AccountService, Manag return null; } - @Override - public Pair, Integer> searchForAccounts(ListAccountsCmd cmd) { - Account caller = UserContext.current().getCaller(); - Long domainId = cmd.getDomainId(); - Long accountId = cmd.getId(); - String accountName = cmd.getSearchName(); - boolean isRecursive = cmd.isRecursive(); - boolean listAll = cmd.listAll(); - Boolean listForDomain = false; - - if (accountId != null) { - Account account = _accountDao.findById(accountId); - if (account == null || account.getId() == Account.ACCOUNT_ID_SYSTEM) { - throw new InvalidParameterValueException("Unable to find account by id " + accountId); - } - - checkAccess(caller, null, true, account); - } - - if (domainId != null) { - Domain domain = _domainMgr.getDomain(domainId); - if (domain == null) { - throw new InvalidParameterValueException("Domain id=" + domainId + " doesn't exist"); - } - - checkAccess(caller, domain); - - if (accountName != null) { - Account account = _accountDao.findActiveAccount(accountName, domainId); - if (account == null || account.getId() == Account.ACCOUNT_ID_SYSTEM) { - throw new InvalidParameterValueException("Unable to find account by name " + accountName + " in domain " + domainId); - } - checkAccess(caller, null, true, account); - } - } - - if (accountId == null) { - if (isAdmin(caller.getType()) && listAll && domainId == null) { - listForDomain = true; - isRecursive = true; - if (domainId == null) { - domainId = caller.getDomainId(); - } - } else if (isAdmin(caller.getType()) && domainId != null) { - listForDomain = true; - } else { - accountId = caller.getAccountId(); - } - } - - Filter searchFilter = new Filter(AccountVO.class, "id", true, cmd.getStartIndex(), cmd.getPageSizeVal()); - - Object type = cmd.getAccountType(); - Object state = cmd.getState(); - Object isCleanupRequired = cmd.isCleanupRequired(); - Object keyword = cmd.getKeyword(); - - SearchBuilder sb = _accountDao.createSearchBuilder(); - sb.and("accountName", sb.entity().getAccountName(), SearchCriteria.Op.EQ); - sb.and("domainId", sb.entity().getDomainId(), SearchCriteria.Op.EQ); - sb.and("id", sb.entity().getId(), SearchCriteria.Op.EQ); - sb.and("type", sb.entity().getType(), SearchCriteria.Op.EQ); - sb.and("state", sb.entity().getState(), SearchCriteria.Op.EQ); - sb.and("needsCleanup", sb.entity().getNeedsCleanup(), SearchCriteria.Op.EQ); - sb.and("typeNEQ", sb.entity().getType(), SearchCriteria.Op.NEQ); - sb.and("idNEQ", sb.entity().getId(), SearchCriteria.Op.NEQ); - - if (listForDomain && isRecursive) { - SearchBuilder domainSearch = _domainDao.createSearchBuilder(); - domainSearch.and("path", domainSearch.entity().getPath(), SearchCriteria.Op.LIKE); - sb.join("domainSearch", domainSearch, sb.entity().getDomainId(), domainSearch.entity().getId(), JoinBuilder.JoinType.INNER); - } - - SearchCriteria sc = sb.create(); - - sc.setParameters("idNEQ", Account.ACCOUNT_ID_SYSTEM); - - if (keyword != null) { - SearchCriteria ssc = _accountDao.createSearchCriteria(); - ssc.addOr("accountName", SearchCriteria.Op.LIKE, "%" + keyword + "%"); - ssc.addOr("state", SearchCriteria.Op.LIKE, "%" + keyword + "%"); - sc.addAnd("accountName", SearchCriteria.Op.SC, ssc); - } - - if (type != null) { - sc.setParameters("type", type); - } - - if (state != null) { - sc.setParameters("state", state); - } - - if (isCleanupRequired != null) { - sc.setParameters("needsCleanup", isCleanupRequired); - } - - if (accountName != null) { - sc.setParameters("accountName", accountName); - } - - // don't return account of type project to the end user - sc.setParameters("typeNEQ", 5); - - if (accountId != null) { - sc.setParameters("id", accountId); - } - - if (listForDomain) { - DomainVO domain = _domainDao.findById(domainId); - if (isRecursive) { - sc.setJoinParameters("domainSearch", "path", domain.getPath() + "%"); - } else { - sc.setParameters("domainId", domainId); - } - } - - Pair, Integer> result = _accountDao.searchAndCount(sc, searchFilter); - return new Pair, Integer>(result.first(), result.second()); - } @Override diff --git a/server/test/com/cloud/api/ListPerfTest.java b/server/test/com/cloud/api/ListPerfTest.java index 9f1b4b554c1..7402cea711a 100644 --- a/server/test/com/cloud/api/ListPerfTest.java +++ b/server/test/com/cloud/api/ListPerfTest.java @@ -109,7 +109,7 @@ public class ListPerfTest extends APITest { @Test public void testListVolumes(){ - // issue list Hosts calls + // issue list Volumes calls HashMap params = new HashMap(); params.put("response", "json"); params.put("listAll", "true"); @@ -120,4 +120,32 @@ public class ListPerfTest extends APITest { System.out.println("Time taken to list Volumes: " + (after - before) + " ms"); } + + @Test + public void testListAccounts(){ + // issue list Accounts calls + HashMap params = new HashMap(); + params.put("response", "json"); + params.put("listAll", "true"); + params.put("sessionkey", sessionKey); + long before = System.currentTimeMillis(); + String result = this.sendRequest("listAccounts", params); + long after = System.currentTimeMillis(); + System.out.println("Time taken to list Accounts: " + (after - before) + " ms"); + + } + + @Test + public void testListUsers(){ + // issue list Users calls + HashMap params = new HashMap(); + params.put("response", "json"); + params.put("listAll", "true"); + params.put("sessionkey", sessionKey); + long before = System.currentTimeMillis(); + String result = this.sendRequest("listUsers", params); + long after = System.currentTimeMillis(); + System.out.println("Time taken to list Users: " + (after - before) + " ms"); + + } } diff --git a/server/test/com/cloud/user/MockAccountManagerImpl.java b/server/test/com/cloud/user/MockAccountManagerImpl.java index 29c9f6f3bb6..4a4196e1c77 100644 --- a/server/test/com/cloud/user/MockAccountManagerImpl.java +++ b/server/test/com/cloud/user/MockAccountManagerImpl.java @@ -301,13 +301,6 @@ public class MockAccountManagerImpl implements Manager, AccountManager, AccountS return null; } - @Override - public Pair, Integer> searchForAccounts(ListAccountsCmd cmd) { - // TODO Auto-generated method stub - return null; - } - - @Override public boolean enableAccount(long accountId) { // TODO Auto-generated method stub diff --git a/server/test/com/cloud/vpc/MockResourceLimitManagerImpl.java b/server/test/com/cloud/vpc/MockResourceLimitManagerImpl.java index cb052ed64e4..a0c7b70190c 100644 --- a/server/test/com/cloud/vpc/MockResourceLimitManagerImpl.java +++ b/server/test/com/cloud/vpc/MockResourceLimitManagerImpl.java @@ -70,6 +70,13 @@ public class MockResourceLimitManagerImpl implements ResourceLimitService, Manag return 0; } + + @Override + public long findCorrectResourceLimitForAccount(short accountType, Long limit, ResourceType type) { + // TODO Auto-generated method stub + return 0; + } + /* (non-Javadoc) * @see com.cloud.user.ResourceLimitService#findCorrectResourceLimitForDomain(com.cloud.domain.Domain, com.cloud.configuration.Resource.ResourceType) */ @@ -85,7 +92,7 @@ public class MockResourceLimitManagerImpl implements ResourceLimitService, Manag @Override public void incrementResourceCount(long accountId, ResourceType type, Long... delta) { // TODO Auto-generated method stub - + } /* (non-Javadoc) @@ -94,7 +101,7 @@ public class MockResourceLimitManagerImpl implements ResourceLimitService, Manag @Override public void decrementResourceCount(long accountId, ResourceType type, Long... delta) { // TODO Auto-generated method stub - + } /* (non-Javadoc) @@ -103,7 +110,7 @@ public class MockResourceLimitManagerImpl implements ResourceLimitService, Manag @Override public void checkResourceLimit(Account account, ResourceType type, long... count) throws ResourceAllocationException { // TODO Auto-generated method stub - + } /* (non-Javadoc) diff --git a/setup/db/create-schema.sql b/setup/db/create-schema.sql index 4068cc6ecf0..34ac66f6bd7 100755 --- a/setup/db/create-schema.sql +++ b/setup/db/create-schema.sql @@ -2900,7 +2900,7 @@ left join projects on projects.project_account_id = instance_group.account_id; DROP VIEW IF EXISTS `cloud`.`user_view`; CREATE VIEW user_view AS -select +select user.id, user.uuid, user.username, @@ -2917,17 +2917,25 @@ user.timezone, user.registration_token, user.is_registered, user.incorrect_login_attempts, -account.id account_id, +account.id account_id, account.uuid account_uuid, account.account_name account_name, account.type account_type, -domain.id domain_id, +domain.id domain_id, domain.uuid domain_uuid, -domain.name domain_name, -domain.path domain_path -from user +domain.name domain_name, +domain.path domain_path, +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 inner join account on user.account_id = account.id -inner join domain on account.domain_id=domain.id; +inner join domain on account.domain_id=domain.id +left join async_job on async_job.instance_id = user.id and async_job.instance_type = "User" and async_job.job_status = 0; + + + DROP VIEW IF EXISTS `cloud`.`project_view`; CREATE VIEW project_view AS @@ -3145,3 +3153,91 @@ left join vm_template on volumes.template_id = vm_template.id left join resource_tags on resource_tags.resource_id = volumes.id and resource_tags.resource_type = "Volume" left join async_job on async_job.instance_id = volumes.id and async_job.instance_type = "Volume" and async_job.job_status = 0; +DROP VIEW IF EXISTS `cloud`.`account_netstats_view`; +CREATE VIEW account_netstats_view AS +SELECT account_id, +sum(net_bytes_received)+ sum(current_bytes_received) as bytesReceived, +sum(net_bytes_sent)+ sum(current_bytes_sent) as bytesSent +FROM user_statistics +group by account_id; + + +DROP VIEW IF EXISTS `cloud`.`account_vmstats_view`; +CREATE VIEW account_vmstats_view AS +SELECT account_id, state, count(*) as vmcount +from vm_instance +group by account_id, state; + +DROP VIEW IF EXISTS `cloud`.`free_ip_view`; +CREATE VIEW free_ip_view AS +select count(user_ip_address.id) free_ip +from user_ip_address +inner join vlan on vlan.id = user_ip_address.vlan_db_id and vlan.vlan_type = "VirtualNetwork" +where state = "Free" + +DROP VIEW IF EXISTS `cloud`.`account_view`; +CREATE VIEW account_view AS +select +account.id, +account.uuid, +account.account_name, +account.type, +account.state, +account.removed, +account.cleanup_needed, +account.network_domain, +domain.id domain_id, +domain.uuid domain_uuid, +domain.name domain_name, +domain.path domain_path, +data_center.id data_center_id, +data_center.uuid data_center_uuid, +data_center.name data_center_name, +account_netstats_view.bytesReceived, +account_netstats_view.bytesSent, +vmlimit.max vmLimit, +vmcount.count vmTotal, +runningvm.vmcount runningVms, +stoppedvm.vmcount stoppedVms, +iplimit.max ipLimit, +ipcount.count ipTotal, +free_ip_view.free_ip ipFree, +volumelimit.max volumeLimit, +volumecount.count volumeTotal, +snapshotlimit.max snapshotLimit, +snapshotcount.count snapshotTotal, +templatelimit.max templateLimit, +templatecount.count templateTotal, +vpclimit.max vpcLimit, +vpccount.count vpcTotal, +projectlimit.max projectLimit, +projectcount.count projectTotal, +networklimit.max networkLimit, +networkcount.count networkTotal, +async_job.id job_id, +async_job.uuid job_uuid, +async_job.job_status job_status, +async_job.account_id job_account_id +from free_ip_view, account +inner join domain on account.domain_id=domain.id +left join data_center on account.default_zone_id = data_center.id +left join account_netstats_view on account.id = account_netstats_view.account_id +left join resource_limit vmlimit on account.id = vmlimit.account_id and vmlimit.type = "user_vm" +left join resource_count vmcount on account.id = vmcount.account_id and vmcount.type = "user_vm" +left join account_vmstats_view runningvm on account.id = runningvm.account_id and runningvm.state = "Running" +left join account_vmstats_view stoppedvm on account.id = stoppedvm.account_id and stoppedvm.state = "Stopped" +left join resource_limit iplimit on account.id = iplimit.account_id and iplimit.type = "public_ip" +left join resource_count ipcount on account.id = ipcount.account_id and ipcount.type = "public_ip" +left join resource_limit volumelimit on account.id = volumelimit.account_id and volumelimit.type = "volume" +left join resource_count volumecount on account.id = volumecount.account_id and volumecount.type = "volume" +left join resource_limit snapshotlimit on account.id = snapshotlimit.account_id and snapshotlimit.type = "snapshot" +left join resource_count snapshotcount on account.id = snapshotcount.account_id and snapshotcount.type = "snapshot" +left join resource_limit templatelimit on account.id = templatelimit.account_id and templatelimit.type = "template" +left join resource_count templatecount on account.id = templatecount.account_id and templatecount.type = "template" +left join resource_limit vpclimit on account.id = vpclimit.account_id and vpclimit.type = "vpc" +left join resource_count vpccount on account.id = vpccount.account_id and vpccount.type = "vpc" +left join resource_limit projectlimit on account.id = projectlimit.account_id and projectlimit.type = "project" +left join resource_count projectcount on account.id = projectcount.account_id and projectcount.type = "project" +left join resource_limit networklimit on account.id = networklimit.account_id and networklimit.type = "network" +left join resource_count networkcount on account.id = networkcount.account_id and networkcount.type = "network" +left join async_job on async_job.instance_id = account.id and async_job.instance_type = "Account" and async_job.job_status = 0; \ No newline at end of file diff --git a/setup/db/db/schema-40to410.sql b/setup/db/db/schema-40to410.sql index fc3ab6f182a..c8626419ae5 100644 --- a/setup/db/db/schema-40to410.sql +++ b/setup/db/db/schema-40to410.sql @@ -482,7 +482,7 @@ left join projects on projects.project_account_id = instance_group.account_id; DROP VIEW IF EXISTS `cloud`.`user_view`; CREATE VIEW user_view AS -select +select user.id, user.uuid, user.username, @@ -499,17 +499,23 @@ user.timezone, user.registration_token, user.is_registered, user.incorrect_login_attempts, -account.id account_id, +account.id account_id, account.uuid account_uuid, account.account_name account_name, account.type account_type, -domain.id domain_id, +domain.id domain_id, domain.uuid domain_uuid, -domain.name domain_name, -domain.path domain_path -from user +domain.name domain_name, +domain.path domain_path, +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 inner join account on user.account_id = account.id -inner join domain on account.domain_id=domain.id; +inner join domain on account.domain_id=domain.id +left join async_job on async_job.instance_id = user.id and async_job.instance_type = "User" and async_job.job_status = 0; + DROP VIEW IF EXISTS `cloud`.`project_view`; CREATE VIEW project_view AS @@ -727,4 +733,91 @@ left join vm_template on volumes.template_id = vm_template.id left join resource_tags on resource_tags.resource_id = volumes.id and resource_tags.resource_type = "Volume" left join async_job on async_job.instance_id = volumes.id and async_job.instance_type = "Volume" and async_job.job_status = 0; +DROP VIEW IF EXISTS `cloud`.`account_netstats_view`; +CREATE VIEW account_netstats_view AS +SELECT account_id, +sum(net_bytes_received)+ sum(current_bytes_received) as bytesReceived, +sum(net_bytes_sent)+ sum(current_bytes_sent) as bytesSent +FROM user_statistics +group by account_id; + +DROP VIEW IF EXISTS `cloud`.`account_vmstats_view`; +CREATE VIEW account_vmstats_view AS +SELECT account_id, state, count(*) as vmcount +from vm_instance +group by account_id, state; + +DROP VIEW IF EXISTS `cloud`.`free_ip_view`; +CREATE VIEW free_ip_view AS +select count(user_ip_address.id) free_ip +from user_ip_address +inner join vlan on vlan.id = user_ip_address.vlan_db_id and vlan.vlan_type = "VirtualNetwork" +where state = "Free" + +DROP VIEW IF EXISTS `cloud`.`account_view`; +CREATE VIEW account_view AS +select +account.id, +account.uuid, +account.account_name, +account.type, +account.state, +account.removed, +account.cleanup_needed, +account.network_domain, +domain.id domain_id, +domain.uuid domain_uuid, +domain.name domain_name, +domain.path domain_path, +data_center.id data_center_id, +data_center.uuid data_center_uuid, +data_center.name data_center_name, +account_netstats_view.bytesReceived, +account_netstats_view.bytesSent, +vmlimit.max vmLimit, +vmcount.count vmTotal, +runningvm.vmcount runningVms, +stoppedvm.vmcount stoppedVms, +iplimit.max ipLimit, +ipcount.count ipTotal, +free_ip_view.free_ip ipFree, +volumelimit.max volumeLimit, +volumecount.count volumeTotal, +snapshotlimit.max snapshotLimit, +snapshotcount.count snapshotTotal, +templatelimit.max templateLimit, +templatecount.count templateTotal, +vpclimit.max vpcLimit, +vpccount.count vpcTotal, +projectlimit.max projectLimit, +projectcount.count projectTotal, +networklimit.max networkLimit, +networkcount.count networkTotal, +async_job.id job_id, +async_job.uuid job_uuid, +async_job.job_status job_status, +async_job.account_id job_account_id +from free_ip_view, account +inner join domain on account.domain_id=domain.id +left join data_center on account.default_zone_id = data_center.id +left join account_netstats_view on account.id = account_netstats_view.account_id +left join resource_limit vmlimit on account.id = vmlimit.account_id and vmlimit.type = "user_vm" +left join resource_count vmcount on account.id = vmcount.account_id and vmcount.type = "user_vm" +left join account_vmstats_view runningvm on account.id = runningvm.account_id and runningvm.state = "Running" +left join account_vmstats_view stoppedvm on account.id = stoppedvm.account_id and stoppedvm.state = "Stopped" +left join resource_limit iplimit on account.id = iplimit.account_id and iplimit.type = "public_ip" +left join resource_count ipcount on account.id = ipcount.account_id and ipcount.type = "public_ip" +left join resource_limit volumelimit on account.id = volumelimit.account_id and volumelimit.type = "volume" +left join resource_count volumecount on account.id = volumecount.account_id and volumecount.type = "volume" +left join resource_limit snapshotlimit on account.id = snapshotlimit.account_id and snapshotlimit.type = "snapshot" +left join resource_count snapshotcount on account.id = snapshotcount.account_id and snapshotcount.type = "snapshot" +left join resource_limit templatelimit on account.id = templatelimit.account_id and templatelimit.type = "template" +left join resource_count templatecount on account.id = templatecount.account_id and templatecount.type = "template" +left join resource_limit vpclimit on account.id = vpclimit.account_id and vpclimit.type = "vpc" +left join resource_count vpccount on account.id = vpccount.account_id and vpccount.type = "vpc" +left join resource_limit projectlimit on account.id = projectlimit.account_id and projectlimit.type = "project" +left join resource_count projectcount on account.id = projectcount.account_id and projectcount.type = "project" +left join resource_limit networklimit on account.id = networklimit.account_id and networklimit.type = "network" +left join resource_count networkcount on account.id = networkcount.account_id and networkcount.type = "network" +left join async_job on async_job.instance_id = account.id and async_job.instance_type = "Account" and async_job.job_status = 0; From 65e4f00a101c130d15ad028f00961ebef11995a0 Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Wed, 2 Jan 2013 18:20:53 -0800 Subject: [PATCH 235/421] Annotate api name on usage related apis Signed-off-by: Rohit Yadav --- server/src/com/cloud/api/commands/AddTrafficMonitorCmd.java | 2 +- server/src/com/cloud/api/commands/DeleteTrafficMonitorCmd.java | 2 +- server/src/com/cloud/api/commands/GenerateUsageRecordsCmd.java | 2 +- server/src/com/cloud/api/commands/GetUsageRecordsCmd.java | 2 +- server/src/com/cloud/api/commands/ListTrafficMonitorsCmd.java | 2 +- server/src/com/cloud/api/commands/ListUsageTypesCmd.java | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/server/src/com/cloud/api/commands/AddTrafficMonitorCmd.java b/server/src/com/cloud/api/commands/AddTrafficMonitorCmd.java index 7522bedc820..f20e5b98432 100644 --- a/server/src/com/cloud/api/commands/AddTrafficMonitorCmd.java +++ b/server/src/com/cloud/api/commands/AddTrafficMonitorCmd.java @@ -31,7 +31,7 @@ import com.cloud.user.Account; import com.cloud.utils.component.ComponentLocator; import com.cloud.utils.exception.CloudRuntimeException; -@APICommand(description="Adds Traffic Monitor Host for Direct Network Usage", responseObject = ExternalFirewallResponse.class) +@APICommand(name = "addTrafficMonitor", description="Adds Traffic Monitor Host for Direct Network Usage", responseObject = ExternalFirewallResponse.class) public class AddTrafficMonitorCmd extends BaseCmd { public static final Logger s_logger = Logger.getLogger(AddTrafficMonitorCmd.class.getName()); private static final String s_name = "addtrafficmonitorresponse"; diff --git a/server/src/com/cloud/api/commands/DeleteTrafficMonitorCmd.java b/server/src/com/cloud/api/commands/DeleteTrafficMonitorCmd.java index 9e918195b86..4c7d3a70546 100644 --- a/server/src/com/cloud/api/commands/DeleteTrafficMonitorCmd.java +++ b/server/src/com/cloud/api/commands/DeleteTrafficMonitorCmd.java @@ -31,7 +31,7 @@ import com.cloud.server.ManagementService; import com.cloud.user.Account; import com.cloud.utils.component.ComponentLocator; -@APICommand(description="Deletes an traffic monitor host.", responseObject = SuccessResponse.class) +@APICommand(name = "deleteTrafficMonitor", description="Deletes an traffic monitor host.", responseObject = SuccessResponse.class) public class DeleteTrafficMonitorCmd extends BaseCmd { public static final Logger s_logger = Logger.getLogger(DeleteTrafficMonitorCmd.class.getName()); private static final String s_name = "deletetrafficmonitorresponse"; diff --git a/server/src/com/cloud/api/commands/GenerateUsageRecordsCmd.java b/server/src/com/cloud/api/commands/GenerateUsageRecordsCmd.java index bb4db4a6a1b..aa3c082ce81 100644 --- a/server/src/com/cloud/api/commands/GenerateUsageRecordsCmd.java +++ b/server/src/com/cloud/api/commands/GenerateUsageRecordsCmd.java @@ -27,7 +27,7 @@ import org.apache.cloudstack.api.response.SuccessResponse; import com.cloud.server.ManagementServerExt; import com.cloud.user.Account; -@APICommand(description="Generates usage records. This will generate records only if there any records to be generated, i.e if the scheduled usage job was not run or failed", responseObject=SuccessResponse.class) +@APICommand(name = "generateUsageRecords", description="Generates usage records. This will generate records only if there any records to be generated, i.e if the scheduled usage job was not run or failed", responseObject=SuccessResponse.class) public class GenerateUsageRecordsCmd extends BaseCmd { public static final Logger s_logger = Logger.getLogger(GenerateUsageRecordsCmd.class.getName()); diff --git a/server/src/com/cloud/api/commands/GetUsageRecordsCmd.java b/server/src/com/cloud/api/commands/GetUsageRecordsCmd.java index 82ddcbbd5b2..434d81c4808 100644 --- a/server/src/com/cloud/api/commands/GetUsageRecordsCmd.java +++ b/server/src/com/cloud/api/commands/GetUsageRecordsCmd.java @@ -48,7 +48,7 @@ import com.cloud.uuididentity.dao.IdentityDao; import com.cloud.uuididentity.dao.IdentityDaoImpl; import com.cloud.vm.VMInstanceVO; -@APICommand(description="Lists usage records for accounts", responseObject=UsageRecordResponse.class) +@APICommand(name = "listUsageRecords", description="Lists usage records for accounts", responseObject=UsageRecordResponse.class) public class GetUsageRecordsCmd extends BaseListCmd { public static final Logger s_logger = Logger.getLogger(GetUsageRecordsCmd.class.getName()); diff --git a/server/src/com/cloud/api/commands/ListTrafficMonitorsCmd.java b/server/src/com/cloud/api/commands/ListTrafficMonitorsCmd.java index f2b07a4d370..aba9ffd83a6 100644 --- a/server/src/com/cloud/api/commands/ListTrafficMonitorsCmd.java +++ b/server/src/com/cloud/api/commands/ListTrafficMonitorsCmd.java @@ -35,7 +35,7 @@ import com.cloud.server.api.response.ExternalFirewallResponse; import com.cloud.server.api.response.TrafficMonitorResponse; import com.cloud.utils.component.ComponentLocator; -@APICommand(description="List traffic monitor Hosts.", responseObject = ExternalFirewallResponse.class) +@APICommand(name = "listTrafficMonitors", description="List traffic monitor Hosts.", responseObject = ExternalFirewallResponse.class) public class ListTrafficMonitorsCmd extends BaseListCmd { public static final Logger s_logger = Logger.getLogger(ListServiceOfferingsCmd.class.getName()); private static final String s_name = "listtrafficmonitorsresponse"; diff --git a/server/src/com/cloud/api/commands/ListUsageTypesCmd.java b/server/src/com/cloud/api/commands/ListUsageTypesCmd.java index acdc53a0930..97526fb4067 100644 --- a/server/src/com/cloud/api/commands/ListUsageTypesCmd.java +++ b/server/src/com/cloud/api/commands/ListUsageTypesCmd.java @@ -27,7 +27,7 @@ import com.cloud.server.ManagementServerExt; import com.cloud.server.api.response.UsageTypeResponse; import com.cloud.user.Account; -@APICommand(description = "List Usage Types", responseObject = UsageTypeResponse.class) +@APICommand(name = "listUsageTypes", description = "List Usage Types", responseObject = UsageTypeResponse.class) public class ListUsageTypesCmd extends BaseCmd { public static final Logger s_logger = Logger.getLogger(ListUsageTypesCmd.class.getName()); private static final String s_name = "listusagetypesresponse"; From c5b51b7c39d3215c412f47d272d204ec276a4bf1 Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Wed, 2 Jan 2013 18:21:54 -0800 Subject: [PATCH 236/421] plugin: Remove memory mapping of apiname and class name in StaticRoleBasedAPIAccessChecker Signed-off-by: Rohit Yadav --- .../acl/StaticRoleBasedAPIAccessChecker.java | 54 ++++++++----------- 1 file changed, 22 insertions(+), 32 deletions(-) diff --git a/plugins/acl/static-role-based/src/org/apache/cloudstack/acl/StaticRoleBasedAPIAccessChecker.java b/plugins/acl/static-role-based/src/org/apache/cloudstack/acl/StaticRoleBasedAPIAccessChecker.java index 5a7af5514d3..aee708deee7 100644 --- a/plugins/acl/static-role-based/src/org/apache/cloudstack/acl/StaticRoleBasedAPIAccessChecker.java +++ b/plugins/acl/static-role-based/src/org/apache/cloudstack/acl/StaticRoleBasedAPIAccessChecker.java @@ -58,7 +58,6 @@ public class StaticRoleBasedAPIAccessChecker extends AdapterBase implements APIA private static List s_adminCommands = null; private static List s_resourceDomainAdminCommands = null; private static List s_allCommands = null; - private Properties _apiCommands = null; protected @Inject AccountManager _accountMgr; @@ -87,11 +86,6 @@ public class StaticRoleBasedAPIAccessChecker extends AdapterBase implements APIA return commandExists; } - @Override - public Properties getApiCommands() { - return _apiCommands; - } - private static boolean isCommandAvailableForAccount(short accountType, String commandName) { boolean isCommandAvailable = false; switch (accountType) { @@ -130,9 +124,6 @@ public class StaticRoleBasedAPIAccessChecker extends AdapterBase implements APIA } private void processConfigFiles(List configFiles) { - if (_apiCommands == null) - _apiCommands = new Properties(); - Properties preProcessedCommands = new Properties(); for (String configFile : configFiles) { @@ -160,31 +151,30 @@ public class StaticRoleBasedAPIAccessChecker extends AdapterBase implements APIA for (Object key : preProcessedCommands.keySet()) { String preProcessedCommand = preProcessedCommands.getProperty((String) key); - String[] commandParts = preProcessedCommand.split(";"); - _apiCommands.setProperty(key.toString(), commandParts[0]); + int splitIndex = preProcessedCommand.lastIndexOf(";"); + // Backward compatible to old style, apiname=pkg;mask + String mask = preProcessedCommand.substring(splitIndex+1); - if (commandParts.length > 1) { - try { - short cmdPermissions = Short.parseShort(commandParts[1]); - if ((cmdPermissions & ADMIN_COMMAND) != 0) { - s_adminCommands.add((String) key); - } - if ((cmdPermissions & RESOURCE_DOMAIN_ADMIN_COMMAND) != 0) { - s_resourceDomainAdminCommands.add((String) key); - } - if ((cmdPermissions & DOMAIN_ADMIN_COMMAND) != 0) { - s_resellerCommands.add((String) key); - } - if ((cmdPermissions & USER_COMMAND) != 0) { - s_userCommands.add((String) key); - } - s_allCommands.addAll(s_adminCommands); - s_allCommands.addAll(s_resourceDomainAdminCommands); - s_allCommands.addAll(s_userCommands); - s_allCommands.addAll(s_resellerCommands); - } catch (NumberFormatException nfe) { - s_logger.info("Malformed command.properties permissions value, key = " + key + ", value = " + preProcessedCommand); + try { + short cmdPermissions = Short.parseShort(mask); + if ((cmdPermissions & ADMIN_COMMAND) != 0) { + s_adminCommands.add((String) key); } + if ((cmdPermissions & RESOURCE_DOMAIN_ADMIN_COMMAND) != 0) { + s_resourceDomainAdminCommands.add((String) key); + } + if ((cmdPermissions & DOMAIN_ADMIN_COMMAND) != 0) { + s_resellerCommands.add((String) key); + } + if ((cmdPermissions & USER_COMMAND) != 0) { + s_userCommands.add((String) key); + } + s_allCommands.addAll(s_adminCommands); + s_allCommands.addAll(s_resourceDomainAdminCommands); + s_allCommands.addAll(s_userCommands); + s_allCommands.addAll(s_resellerCommands); + } catch (NumberFormatException nfe) { + s_logger.info("Malformed command.properties permissions value, key = " + key + ", value = " + preProcessedCommand); } } } From 072c6f1988a224b4d31ff3c7864b1c6f86882bca Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Wed, 2 Jan 2013 18:23:45 -0800 Subject: [PATCH 237/421] acl: Remove getApiCommands() method on APIAccessChecker interface Signed-off-by: Rohit Yadav --- api/src/com/cloud/acl/APIAccessChecker.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/api/src/com/cloud/acl/APIAccessChecker.java b/api/src/com/cloud/acl/APIAccessChecker.java index 234f665cfe4..caa94f5416a 100644 --- a/api/src/com/cloud/acl/APIAccessChecker.java +++ b/api/src/com/cloud/acl/APIAccessChecker.java @@ -29,6 +29,4 @@ import com.cloud.utils.component.Adapter; public interface APIAccessChecker extends Adapter { // Interface for checking access to an API for a user boolean canAccessAPI(User user, String apiCommandName) throws PermissionDeniedException; - // Interface for getting API Cmd properties - Properties getApiCommands(); } From 580bf857ff41cd6bff36f8cfdb8e821d7978598d Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Wed, 2 Jan 2013 18:34:54 -0800 Subject: [PATCH 238/421] server: ApiServer inits with processing cmd classes to fill apiname:class mapping - Add maven dependency reflections (wtfl license, apl compliant) - Use reflections to recurse and get apiname:class mapping Signed-off-by: Rohit Yadav --- server/pom.xml | 5 +++ server/src/com/cloud/api/ApiServer.java | 43 ++++++++++++++----------- 2 files changed, 29 insertions(+), 19 deletions(-) diff --git a/server/pom.xml b/server/pom.xml index c253e43acc7..1fd18319823 100644 --- a/server/pom.xml +++ b/server/pom.xml @@ -79,6 +79,11 @@ tests test + + org.reflections + reflections + 0.9.8 + install diff --git a/server/src/com/cloud/api/ApiServer.java b/server/src/com/cloud/api/ApiServer.java index 5ee7c356aba..b853094dd6c 100755 --- a/server/src/com/cloud/api/ApiServer.java +++ b/server/src/com/cloud/api/ApiServer.java @@ -119,10 +119,8 @@ import com.cloud.user.User; import com.cloud.user.UserAccount; import com.cloud.user.UserContext; import com.cloud.user.UserVO; -import com.cloud.utils.IdentityProxy; import com.cloud.utils.Pair; import com.cloud.utils.component.Adapters; -import com.cloud.utils.PropertiesUtil; import com.cloud.utils.StringUtils; import com.cloud.utils.component.ComponentLocator; import com.cloud.utils.component.Inject; @@ -133,6 +131,8 @@ import com.cloud.utils.exception.CSExceptionErrorCode; import com.cloud.uuididentity.dao.IdentityDao; import com.cloud.acl.APIAccessChecker; +import org.reflections.Reflections; + public class ApiServer implements HttpRequestHandler { private static final Logger s_logger = Logger.getLogger(ApiServer.class.getName()); private static final Logger s_accessLogger = Logger.getLogger("apiserver." + ApiServer.class.getName()); @@ -152,6 +152,7 @@ public class ApiServer implements HttpRequestHandler { private static int _workerCount = 0; private static ApiServer s_instance = null; private static final DateFormat _dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ"); + private Map> _apiNameCmdClassMap = new HashMap>(); private static ExecutorService _executor = new ThreadPoolExecutor(10, 150, 60, TimeUnit.SECONDS, new LinkedBlockingQueue(), new NamedThreadFactory("ApiServer")); @@ -199,6 +200,19 @@ public class ApiServer implements HttpRequestHandler { } } + // Populate api name and cmd class mappings + Reflections reflections = new Reflections("org.apache.cloudstack"); + Set> cmdClasses = reflections.getTypesAnnotatedWith(APICommand.class); + reflections = new Reflections("com.cloud.api"); + cmdClasses.addAll(reflections.getTypesAnnotatedWith(APICommand.class)); + for(Class cmdClass: cmdClasses) { + String apiName = cmdClass.getAnnotation(APICommand.class).name(); + if (_apiNameCmdClassMap.containsKey(apiName)) { + s_logger.error("Cmd class " + cmdClass.getName() + " conflicts on apiname" + apiName); + } + _apiNameCmdClassMap.put(apiName, cmdClass); + } + encodeApiResponse = Boolean.valueOf(configDao.getValue(Config.EncodeApiResponse.key())); String jsonType = configDao.getValue(Config.JavaScriptDefaultContentType.key()); if (jsonType != null) { @@ -322,9 +336,8 @@ public class ApiServer implements HttpRequestHandler { paramMap.put(key, decodedValue); } - String cmdClassName = getCmdClassName(command[0]); - if (cmdClassName != null) { - Class cmdClass = Class.forName(cmdClassName); + Class cmdClass = getCmdClass(command[0]); + if (cmdClass != null) { BaseCmd cmdObj = (BaseCmd) cmdClass.newInstance(); cmdObj.setFullUrlParams(paramMap); cmdObj.setResponseType(responseType); @@ -795,15 +808,8 @@ public class ApiServer implements HttpRequestHandler { return true; } - private String getCmdClassName(String cmdName) { - String cmdClassName = null; - for (APIAccessChecker apiChecker : _apiAccessCheckers){ - cmdClassName = apiChecker.getApiCommands().getProperty(cmdName); - // Break on the first non-null value - if (cmdClassName != null) - return cmdClassName; - } - return null; + private Class getCmdClass(String cmdName) { + return _apiNameCmdClassMap.get(cmdName); } // FIXME: rather than isError, we might was to pass in the status code to give more flexibility @@ -939,7 +945,7 @@ public class ApiServer implements HttpRequestHandler { public String getSerializedApiError(int errorCode, String errorText, Map apiCommandParams, String responseType, Exception ex) { String responseName = null; - String cmdClassName = null; + Class cmdClass = null; String responseText = null; try { @@ -950,10 +956,9 @@ public class ApiServer implements HttpRequestHandler { // cmd name can be null when "command" parameter is missing in the request if (cmdObj != null) { String cmdName = ((String[]) cmdObj)[0]; - cmdClassName = getCmdClassName(cmdName); - if (cmdClassName != null) { - Class claz = Class.forName(cmdClassName); - responseName = ((BaseCmd) claz.newInstance()).getCommandName(); + cmdClass = getCmdClass(cmdName); + if (cmdClass != null) { + responseName = ((BaseCmd) cmdClass.newInstance()).getCommandName(); } else { responseName = "errorresponse"; } From c0a0318f29ad73c00793e98d24ab315dfea0a1e0 Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Thu, 3 Jan 2013 11:24:12 -0800 Subject: [PATCH 239/421] setup/db: Fix missing semicolon in db create view command Signed-off-by: Rohit Yadav --- setup/db/create-schema.sql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup/db/create-schema.sql b/setup/db/create-schema.sql index 34ac66f6bd7..dcea14201b3 100755 --- a/setup/db/create-schema.sql +++ b/setup/db/create-schema.sql @@ -3173,7 +3173,7 @@ CREATE VIEW free_ip_view AS select count(user_ip_address.id) free_ip from user_ip_address inner join vlan on vlan.id = user_ip_address.vlan_db_id and vlan.vlan_type = "VirtualNetwork" -where state = "Free" +where state = "Free"; DROP VIEW IF EXISTS `cloud`.`account_view`; CREATE VIEW account_view AS From ff8fdbd1942e6206eba02d9db3c36730b0c0d7d1 Mon Sep 17 00:00:00 2001 From: Min Chen Date: Thu, 3 Jan 2013 14:12:15 -0800 Subject: [PATCH 240/421] Add missing @Id annotation to id fields for all the join VOs to support findById call. --- server/src/com/cloud/api/query/vo/AccountJoinVO.java | 2 ++ server/src/com/cloud/api/query/vo/DomainRouterJoinVO.java | 2 ++ server/src/com/cloud/api/query/vo/EventJoinVO.java | 2 ++ server/src/com/cloud/api/query/vo/HostJoinVO.java | 2 ++ server/src/com/cloud/api/query/vo/InstanceGroupJoinVO.java | 2 ++ server/src/com/cloud/api/query/vo/ProjectAccountJoinVO.java | 2 ++ server/src/com/cloud/api/query/vo/ProjectInvitationJoinVO.java | 2 ++ server/src/com/cloud/api/query/vo/ProjectJoinVO.java | 2 ++ server/src/com/cloud/api/query/vo/ResourceTagJoinVO.java | 2 ++ server/src/com/cloud/api/query/vo/SecurityGroupJoinVO.java | 2 ++ server/src/com/cloud/api/query/vo/UserAccountJoinVO.java | 2 ++ server/src/com/cloud/api/query/vo/UserVmJoinVO.java | 2 ++ server/src/com/cloud/api/query/vo/VolumeJoinVO.java | 2 ++ 13 files changed, 26 insertions(+) diff --git a/server/src/com/cloud/api/query/vo/AccountJoinVO.java b/server/src/com/cloud/api/query/vo/AccountJoinVO.java index f9b43183da8..6d37f4de00e 100644 --- a/server/src/com/cloud/api/query/vo/AccountJoinVO.java +++ b/server/src/com/cloud/api/query/vo/AccountJoinVO.java @@ -21,6 +21,7 @@ import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.EnumType; import javax.persistence.Enumerated; +import javax.persistence.Id; import javax.persistence.Table; import com.cloud.user.Account.State; import com.cloud.utils.db.GenericDao; @@ -31,6 +32,7 @@ import org.apache.cloudstack.api.InternalIdentity; @Table(name="account_view") public class AccountJoinVO extends BaseViewVO implements InternalIdentity, Identity { + @Id @Column(name="id") private long id; diff --git a/server/src/com/cloud/api/query/vo/DomainRouterJoinVO.java b/server/src/com/cloud/api/query/vo/DomainRouterJoinVO.java index f3d904bb05b..a9c04586a92 100644 --- a/server/src/com/cloud/api/query/vo/DomainRouterJoinVO.java +++ b/server/src/com/cloud/api/query/vo/DomainRouterJoinVO.java @@ -23,6 +23,7 @@ import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.EnumType; import javax.persistence.Enumerated; +import javax.persistence.Id; import javax.persistence.Table; import com.cloud.network.Network.GuestType; @@ -35,6 +36,7 @@ import com.cloud.vm.VirtualMachine.State; @Table(name="domain_router_view") public class DomainRouterJoinVO extends BaseViewVO implements ControlledViewEntity { + @Id @Column(name="id", updatable=false, nullable = false) private long id; diff --git a/server/src/com/cloud/api/query/vo/EventJoinVO.java b/server/src/com/cloud/api/query/vo/EventJoinVO.java index 2511d964820..f29a942a59f 100644 --- a/server/src/com/cloud/api/query/vo/EventJoinVO.java +++ b/server/src/com/cloud/api/query/vo/EventJoinVO.java @@ -22,6 +22,7 @@ import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.EnumType; import javax.persistence.Enumerated; +import javax.persistence.Id; import javax.persistence.Table; import com.cloud.utils.db.GenericDao; @@ -31,6 +32,7 @@ import com.cloud.event.Event.State; @Table(name="event_view") public class EventJoinVO extends BaseViewVO implements ControlledViewEntity { + @Id @Column(name="id", updatable=false, nullable = false) private long id; diff --git a/server/src/com/cloud/api/query/vo/HostJoinVO.java b/server/src/com/cloud/api/query/vo/HostJoinVO.java index 1eb82fbd320..a3796b97eba 100644 --- a/server/src/com/cloud/api/query/vo/HostJoinVO.java +++ b/server/src/com/cloud/api/query/vo/HostJoinVO.java @@ -22,6 +22,7 @@ import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.EnumType; import javax.persistence.Enumerated; +import javax.persistence.Id; import javax.persistence.Table; import javax.persistence.Temporal; import javax.persistence.TemporalType; @@ -45,6 +46,7 @@ import org.apache.cloudstack.api.InternalIdentity; @Table(name="host_view") public class HostJoinVO extends BaseViewVO implements InternalIdentity, Identity { + @Id @Column(name="id") private long id; diff --git a/server/src/com/cloud/api/query/vo/InstanceGroupJoinVO.java b/server/src/com/cloud/api/query/vo/InstanceGroupJoinVO.java index 02c53e97a5f..3fb43094ad3 100644 --- a/server/src/com/cloud/api/query/vo/InstanceGroupJoinVO.java +++ b/server/src/com/cloud/api/query/vo/InstanceGroupJoinVO.java @@ -20,6 +20,7 @@ import java.util.Date; import javax.persistence.Column; import javax.persistence.Entity; +import javax.persistence.Id; import javax.persistence.Table; import com.cloud.utils.db.GenericDao; @@ -28,6 +29,7 @@ import com.cloud.utils.db.GenericDao; @Table(name="instance_group_view") public class InstanceGroupJoinVO extends BaseViewVO implements ControlledViewEntity { + @Id @Column(name="id", updatable=false, nullable = false) private long id; diff --git a/server/src/com/cloud/api/query/vo/ProjectAccountJoinVO.java b/server/src/com/cloud/api/query/vo/ProjectAccountJoinVO.java index cbc9531c535..1a8818a22e4 100644 --- a/server/src/com/cloud/api/query/vo/ProjectAccountJoinVO.java +++ b/server/src/com/cloud/api/query/vo/ProjectAccountJoinVO.java @@ -20,6 +20,7 @@ import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.EnumType; import javax.persistence.Enumerated; +import javax.persistence.Id; import javax.persistence.Table; import com.cloud.projects.ProjectAccount.Role; @@ -29,6 +30,7 @@ import org.apache.cloudstack.api.InternalIdentity; @Table(name="project_account_view") public class ProjectAccountJoinVO extends BaseViewVO implements InternalIdentity { + @Id @Column(name="id", updatable=false, nullable = false) private long id; diff --git a/server/src/com/cloud/api/query/vo/ProjectInvitationJoinVO.java b/server/src/com/cloud/api/query/vo/ProjectInvitationJoinVO.java index 8571c2629aa..a60c9370530 100644 --- a/server/src/com/cloud/api/query/vo/ProjectInvitationJoinVO.java +++ b/server/src/com/cloud/api/query/vo/ProjectInvitationJoinVO.java @@ -22,6 +22,7 @@ import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.EnumType; import javax.persistence.Enumerated; +import javax.persistence.Id; import javax.persistence.Table; import com.cloud.utils.db.GenericDao; @@ -31,6 +32,7 @@ import com.cloud.vm.VirtualMachine.State; @Table(name="project_invitation_view") public class ProjectInvitationJoinVO extends BaseViewVO implements ControlledViewEntity { + @Id @Column(name="id", updatable=false, nullable = false) private long id; diff --git a/server/src/com/cloud/api/query/vo/ProjectJoinVO.java b/server/src/com/cloud/api/query/vo/ProjectJoinVO.java index cc9e21fb3c7..73ec9313289 100644 --- a/server/src/com/cloud/api/query/vo/ProjectJoinVO.java +++ b/server/src/com/cloud/api/query/vo/ProjectJoinVO.java @@ -22,6 +22,7 @@ import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.EnumType; import javax.persistence.Enumerated; +import javax.persistence.Id; import javax.persistence.Table; import com.cloud.server.ResourceTag.TaggedResourceType; @@ -35,6 +36,7 @@ import org.apache.cloudstack.api.InternalIdentity; @Table(name="project_view") public class ProjectJoinVO extends BaseViewVO implements InternalIdentity, Identity { + @Id @Column(name="id", updatable=false, nullable = false) private long id; diff --git a/server/src/com/cloud/api/query/vo/ResourceTagJoinVO.java b/server/src/com/cloud/api/query/vo/ResourceTagJoinVO.java index fadb3504c7c..9ce9555d1be 100644 --- a/server/src/com/cloud/api/query/vo/ResourceTagJoinVO.java +++ b/server/src/com/cloud/api/query/vo/ResourceTagJoinVO.java @@ -20,6 +20,7 @@ import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.EnumType; import javax.persistence.Enumerated; +import javax.persistence.Id; import javax.persistence.Table; import com.cloud.server.ResourceTag.TaggedResourceType; @@ -28,6 +29,7 @@ import com.cloud.server.ResourceTag.TaggedResourceType; @Table(name="resource_tag_view") public class ResourceTagJoinVO extends BaseViewVO implements ControlledViewEntity { + @Id @Column(name="id", updatable=false, nullable = false) private long id; diff --git a/server/src/com/cloud/api/query/vo/SecurityGroupJoinVO.java b/server/src/com/cloud/api/query/vo/SecurityGroupJoinVO.java index eb89ea994de..922e130ed30 100644 --- a/server/src/com/cloud/api/query/vo/SecurityGroupJoinVO.java +++ b/server/src/com/cloud/api/query/vo/SecurityGroupJoinVO.java @@ -20,6 +20,7 @@ import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.EnumType; import javax.persistence.Enumerated; +import javax.persistence.Id; import javax.persistence.Table; import com.cloud.network.security.SecurityRule.SecurityRuleType; @@ -29,6 +30,7 @@ import com.cloud.server.ResourceTag.TaggedResourceType; @Table(name="security_group_view") public class SecurityGroupJoinVO extends BaseViewVO implements ControlledViewEntity{ + @Id @Column(name="id", updatable=false, nullable = false) private long id; diff --git a/server/src/com/cloud/api/query/vo/UserAccountJoinVO.java b/server/src/com/cloud/api/query/vo/UserAccountJoinVO.java index 3a438abfba5..44637db3400 100644 --- a/server/src/com/cloud/api/query/vo/UserAccountJoinVO.java +++ b/server/src/com/cloud/api/query/vo/UserAccountJoinVO.java @@ -20,6 +20,7 @@ import java.util.Date; import javax.persistence.Column; import javax.persistence.Entity; +import javax.persistence.Id; import javax.persistence.Table; import com.cloud.utils.db.Encrypt; @@ -32,6 +33,7 @@ import org.apache.cloudstack.api.InternalIdentity; @Table(name="user_view") public class UserAccountJoinVO extends BaseViewVO implements InternalIdentity, Identity { + @Id @Column(name="id", updatable=false, nullable = false) private long id; diff --git a/server/src/com/cloud/api/query/vo/UserVmJoinVO.java b/server/src/com/cloud/api/query/vo/UserVmJoinVO.java index db400ffdeff..025db47d599 100644 --- a/server/src/com/cloud/api/query/vo/UserVmJoinVO.java +++ b/server/src/com/cloud/api/query/vo/UserVmJoinVO.java @@ -24,6 +24,7 @@ import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.EnumType; import javax.persistence.Enumerated; +import javax.persistence.Id; import javax.persistence.Table; import javax.persistence.Transient; @@ -42,6 +43,7 @@ import com.cloud.vm.VirtualMachine.State; @Table(name="user_vm_view") public class UserVmJoinVO extends BaseViewVO implements ControlledViewEntity { + @Id @Column(name="id", updatable=false, nullable = false) private long id; diff --git a/server/src/com/cloud/api/query/vo/VolumeJoinVO.java b/server/src/com/cloud/api/query/vo/VolumeJoinVO.java index 907b02b633a..4f6b35bab82 100644 --- a/server/src/com/cloud/api/query/vo/VolumeJoinVO.java +++ b/server/src/com/cloud/api/query/vo/VolumeJoinVO.java @@ -21,6 +21,7 @@ import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.EnumType; import javax.persistence.Enumerated; +import javax.persistence.Id; import javax.persistence.Table; import javax.persistence.Temporal; import javax.persistence.TemporalType; @@ -36,6 +37,7 @@ import com.cloud.vm.VirtualMachine; @Table(name="volume_view") public class VolumeJoinVO extends BaseViewVO implements ControlledViewEntity { + @Id @Column(name="id") private long id; From daeb4abcca6f6f97d64bd560ce9087d4c92ca4a2 Mon Sep 17 00:00:00 2001 From: Min Chen Date: Thu, 3 Jan 2013 15:35:26 -0800 Subject: [PATCH 241/421] Create DB views for AsyncJobResponse to speed up listAsyncJobsCmd. Signed-off-by: Min Chen --- .../com/cloud/server/ManagementService.java | 15 - .../command/user/job/ListAsyncJobsCmd.java | 10 +- .../apache/cloudstack/query/QueryService.java | 8 + server/src/com/cloud/api/ApiDBUtils.java | 13 + .../src/com/cloud/api/ApiResponseHelper.java | 46 +-- .../com/cloud/api/query/QueryManagerImpl.java | 88 ++++- .../cloud/api/query/ViewResponseHelper.java | 10 + .../cloud/api/query/dao/AsyncJobJoinDao.java | 34 ++ .../api/query/dao/AsyncJobJoinDaoImpl.java | 161 +++++++++ .../cloud/api/query/vo/AsyncJobJoinVO.java | 333 ++++++++++++++++++ .../DefaultComponentLibrary.java | 2 + .../cloud/server/ManagementServerImpl.java | 84 +---- setup/db/create-schema.sql | 77 +++- setup/db/db/schema-40to410.sql | 76 ++++ 14 files changed, 808 insertions(+), 149 deletions(-) create mode 100644 server/src/com/cloud/api/query/dao/AsyncJobJoinDao.java create mode 100644 server/src/com/cloud/api/query/dao/AsyncJobJoinDaoImpl.java create mode 100644 server/src/com/cloud/api/query/vo/AsyncJobJoinVO.java diff --git a/api/src/com/cloud/server/ManagementService.java b/api/src/com/cloud/server/ManagementService.java index ccccb90e92a..cacf5cf1100 100755 --- a/api/src/com/cloud/server/ManagementService.java +++ b/api/src/com/cloud/server/ManagementService.java @@ -25,12 +25,10 @@ import java.util.Set; import com.cloud.alert.Alert; import org.apache.cloudstack.api.ServerApiException; import org.apache.cloudstack.api.command.admin.cluster.ListClustersCmd; -import org.apache.cloudstack.api.command.admin.host.ListHostsCmd; import org.apache.cloudstack.api.command.admin.host.UpdateHostPasswordCmd; import org.apache.cloudstack.api.command.admin.pod.ListPodsByCmd; import org.apache.cloudstack.api.command.admin.resource.ListAlertsCmd; import org.apache.cloudstack.api.command.admin.resource.ListCapacityCmd; -import org.apache.cloudstack.api.command.admin.router.ListRoutersCmd; import org.apache.cloudstack.api.command.admin.domain.UpdateDomainCmd; import org.apache.cloudstack.api.command.admin.storagepool.ListStoragePoolsCmd; import org.apache.cloudstack.api.command.admin.systemvm.*; @@ -38,7 +36,6 @@ import org.apache.cloudstack.api.command.admin.vlan.ListVlanIpRangesCmd; import org.apache.cloudstack.api.command.user.address.ListPublicIpAddressesCmd; import org.apache.cloudstack.api.command.user.config.ListCapabilitiesCmd; import org.apache.cloudstack.api.command.user.guest.ListGuestOsCmd; -import org.apache.cloudstack.api.command.user.job.ListAsyncJobsCmd; import org.apache.cloudstack.api.command.user.offering.ListDiskOfferingsCmd; import org.apache.cloudstack.api.command.user.offering.ListServiceOfferingsCmd; import org.apache.cloudstack.api.command.user.ssh.DeleteSSHKeyPairCmd; @@ -48,12 +45,10 @@ import org.apache.cloudstack.api.command.user.vm.GetVMPasswordCmd; import org.apache.cloudstack.api.command.user.volume.ExtractVolumeCmd; import org.apache.cloudstack.api.command.user.template.UpdateTemplateCmd; import org.apache.cloudstack.api.command.admin.config.ListCfgsByCmd; -import org.apache.cloudstack.api.command.user.event.ListEventsCmd; import org.apache.cloudstack.api.command.user.guest.ListGuestOsCategoriesCmd; import org.apache.cloudstack.api.command.user.iso.ListIsosCmd; import org.apache.cloudstack.api.command.user.ssh.ListSSHKeyPairsCmd; import org.apache.cloudstack.api.command.admin.systemvm.ListSystemVMsCmd; -import org.apache.cloudstack.api.command.user.vmgroup.ListVMGroupsCmd; import org.apache.cloudstack.api.command.user.zone.ListZonesByCmd; import org.apache.cloudstack.api.command.admin.systemvm.RebootSystemVmCmd; import org.apache.cloudstack.api.command.user.ssh.RegisterSSHKeyPairCmd; @@ -63,7 +58,6 @@ import org.apache.cloudstack.api.command.user.vmgroup.UpdateVMGroupCmd; import org.apache.cloudstack.api.command.admin.systemvm.UpgradeSystemVMCmd; import org.apache.cloudstack.api.command.admin.resource.UploadCustomCertificateCmd; -import com.cloud.async.AsyncJob; import com.cloud.capacity.Capacity; import com.cloud.configuration.Configuration; import com.cloud.dc.DataCenter; @@ -328,15 +322,6 @@ public interface ManagementService { */ Pair, Integer> searchForVlans(ListVlanIpRangesCmd cmd); - /** - * Search for async jobs by account and/or startDate - * - * @param cmd - * the command specifying the account and start date parameters - * @return the list of async jobs that match the criteria - */ - Pair, Integer> searchForAsyncJobs(ListAsyncJobsCmd cmd); - /** * Generates a random password that will be used (initially) by newly created and started virtual machines * diff --git a/api/src/org/apache/cloudstack/api/command/user/job/ListAsyncJobsCmd.java b/api/src/org/apache/cloudstack/api/command/user/job/ListAsyncJobsCmd.java index e9301e95b6d..50ac52e025f 100644 --- a/api/src/org/apache/cloudstack/api/command/user/job/ListAsyncJobsCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/job/ListAsyncJobsCmd.java @@ -24,6 +24,7 @@ import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseListAccountResourcesCmd; import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.response.AccountResponse; import org.apache.cloudstack.api.response.AsyncJobResponse; import org.apache.cloudstack.api.response.ListResponse; import com.cloud.async.AsyncJob; @@ -59,15 +60,10 @@ public class ListAsyncJobsCmd extends BaseListAccountResourcesCmd { @Override public void execute(){ - Pair, Integer> result = _mgr.searchForAsyncJobs(this); - ListResponse response = new ListResponse(); - List jobResponses = new ArrayList(); - for (AsyncJob job : result.first()) { - jobResponses.add(_responseGenerator.createAsyncJobResponse(job)); - } - response.setResponses(jobResponses, result.second()); + ListResponse response = _queryService.searchForAsyncJobs(this); response.setResponseName(getCommandName()); this.setResponseObject(response); + } } diff --git a/api/src/org/apache/cloudstack/query/QueryService.java b/api/src/org/apache/cloudstack/query/QueryService.java index a310bb3b35f..480eb316e97 100644 --- a/api/src/org/apache/cloudstack/query/QueryService.java +++ b/api/src/org/apache/cloudstack/query/QueryService.java @@ -16,12 +16,15 @@ // under the License. package org.apache.cloudstack.query; +import java.util.List; + import org.apache.cloudstack.api.command.admin.host.ListHostsCmd; import org.apache.cloudstack.api.command.admin.router.ListRoutersCmd; import org.apache.cloudstack.api.command.admin.user.ListUsersCmd; import org.apache.cloudstack.api.command.user.account.ListAccountsCmd; import org.apache.cloudstack.api.command.user.account.ListProjectAccountsCmd; import org.apache.cloudstack.api.command.user.event.ListEventsCmd; +import org.apache.cloudstack.api.command.user.job.ListAsyncJobsCmd; import org.apache.cloudstack.api.command.user.project.ListProjectInvitationsCmd; import org.apache.cloudstack.api.command.user.project.ListProjectsCmd; import org.apache.cloudstack.api.command.user.securitygroup.ListSecurityGroupsCmd; @@ -30,6 +33,7 @@ import org.apache.cloudstack.api.command.user.vm.ListVMsCmd; import org.apache.cloudstack.api.command.user.vmgroup.ListVMGroupsCmd; import org.apache.cloudstack.api.command.user.volume.ListVolumesCmd; import org.apache.cloudstack.api.response.AccountResponse; +import org.apache.cloudstack.api.response.AsyncJobResponse; import org.apache.cloudstack.api.response.DomainRouterResponse; import org.apache.cloudstack.api.response.EventResponse; import org.apache.cloudstack.api.response.HostResponse; @@ -46,7 +50,9 @@ import org.apache.cloudstack.api.response.VolumeResponse; +import com.cloud.async.AsyncJob; import com.cloud.exception.PermissionDeniedException; +import com.cloud.utils.Pair; /** * Service used for list api query. @@ -80,4 +86,6 @@ public interface QueryService { public ListResponse searchForVolumes(ListVolumesCmd cmd); public ListResponse searchForAccounts(ListAccountsCmd cmd); + + public ListResponse searchForAsyncJobs(ListAsyncJobsCmd cmd); } diff --git a/server/src/com/cloud/api/ApiDBUtils.java b/server/src/com/cloud/api/ApiDBUtils.java index 1b2327ad156..343dad9b67a 100755 --- a/server/src/com/cloud/api/ApiDBUtils.java +++ b/server/src/com/cloud/api/ApiDBUtils.java @@ -25,6 +25,7 @@ import java.util.Set; import org.apache.cloudstack.api.ApiConstants.HostDetails; import org.apache.cloudstack.api.ApiConstants.VMDetails; import org.apache.cloudstack.api.response.AccountResponse; +import org.apache.cloudstack.api.response.AsyncJobResponse; import org.apache.cloudstack.api.response.DomainRouterResponse; import org.apache.cloudstack.api.response.EventResponse; import org.apache.cloudstack.api.response.HostResponse; @@ -39,6 +40,7 @@ import org.apache.cloudstack.api.response.UserVmResponse; import org.apache.cloudstack.api.response.VolumeResponse; import com.cloud.api.query.dao.AccountJoinDao; +import com.cloud.api.query.dao.AsyncJobJoinDao; import com.cloud.api.query.dao.DomainRouterJoinDao; import com.cloud.api.query.dao.HostJoinDao; import com.cloud.api.query.dao.InstanceGroupJoinDao; @@ -51,6 +53,7 @@ import com.cloud.api.query.dao.UserAccountJoinDao; import com.cloud.api.query.dao.UserVmJoinDao; import com.cloud.api.query.dao.VolumeJoinDao; import com.cloud.api.query.vo.AccountJoinVO; +import com.cloud.api.query.vo.AsyncJobJoinVO; import com.cloud.api.query.vo.DomainRouterJoinVO; import com.cloud.api.query.vo.EventJoinVO; import com.cloud.api.query.vo.HostJoinVO; @@ -322,6 +325,7 @@ public class ApiDBUtils { private static HostJoinDao _hostJoinDao; private static VolumeJoinDao _volJoinDao; private static AccountJoinDao _accountJoinDao; + private static AsyncJobJoinDao _jobJoinDao; private static PhysicalNetworkTrafficTypeDao _physicalNetworkTrafficTypeDao; private static PhysicalNetworkServiceProviderDao _physicalNetworkServiceProviderDao; @@ -411,6 +415,7 @@ public class ApiDBUtils { _hostJoinDao = locator.getDao(HostJoinDao.class); _volJoinDao = locator.getDao(VolumeJoinDao.class); _accountJoinDao = locator.getDao(AccountJoinDao.class); + _jobJoinDao = locator.getDao(AsyncJobJoinDao.class); _physicalNetworkTrafficTypeDao = locator.getDao(PhysicalNetworkTrafficTypeDao.class); _physicalNetworkServiceProviderDao = locator.getDao(PhysicalNetworkServiceProviderDao.class); @@ -1364,4 +1369,12 @@ public class ApiDBUtils { public static AccountJoinVO findAccountViewById(Long accountId) { return _accountJoinDao.findByIdIncludingRemoved(accountId); } + + public static AsyncJobResponse newAsyncJobResponse(AsyncJobJoinVO ve) { + return _jobJoinDao.newAsyncJobResponse(ve); + } + + public static AsyncJobJoinVO newAsyncJobView(AsyncJob e){ + return _jobJoinDao.newAsyncJobView(e); + } } diff --git a/server/src/com/cloud/api/ApiResponseHelper.java b/server/src/com/cloud/api/ApiResponseHelper.java index 1013bbf93c2..7fc3c036e95 100755 --- a/server/src/com/cloud/api/ApiResponseHelper.java +++ b/server/src/com/cloud/api/ApiResponseHelper.java @@ -46,6 +46,7 @@ import org.apache.cloudstack.api.response.AccountResponse; import com.cloud.api.query.ViewResponseHelper; import com.cloud.api.query.vo.AccountJoinVO; +import com.cloud.api.query.vo.AsyncJobJoinVO; import com.cloud.api.query.vo.ControlledViewEntity; import com.cloud.api.query.vo.DomainRouterJoinVO; import com.cloud.api.query.vo.EventJoinVO; @@ -1803,49 +1804,8 @@ public class ApiResponseHelper implements ResponseGenerator { @Override public AsyncJobResponse createAsyncJobResponse(AsyncJob job) { - AsyncJobResponse jobResponse = new AsyncJobResponse(); - Account account = ApiDBUtils.findAccountById(job.getAccountId()); - if (account != null) { - jobResponse.setAccountId(account.getUuid()); - } - User user = ApiDBUtils.findUserById(job.getUserId()); - if (user != null) { - jobResponse.setUserId(user.getUuid()); - } - jobResponse.setCmd(job.getCmd()); - jobResponse.setCreated(job.getCreated()); - jobResponse.setJobId(job.getUuid()); - jobResponse.setJobStatus(job.getStatus()); - jobResponse.setJobProcStatus(job.getProcessStatus()); - - if (job.getInstanceType() != null && job.getInstanceId() != null) { - jobResponse.setJobInstanceType(job.getInstanceType().toString()); - String jobInstanceId = ApiDBUtils.findJobInstanceUuid(job); - - if (jobInstanceId != null) { - jobResponse.setJobInstanceId(jobInstanceId); - } - } - jobResponse.setJobResultCode(job.getResultCode()); - - boolean savedValue = SerializationContext.current().getUuidTranslation(); - SerializationContext.current().setUuidTranslation(false); - - Object resultObject = ApiSerializerHelper.fromSerializedString(job.getResult()); - jobResponse.setJobResult((ResponseObject) resultObject); - SerializationContext.current().setUuidTranslation(savedValue); - - if (resultObject != null) { - Class clz = resultObject.getClass(); - if (clz.isPrimitive() || clz.getSuperclass() == Number.class || clz == String.class || clz == Date.class) { - jobResponse.setJobResultType("text"); - } else { - jobResponse.setJobResultType("object"); - } - } - - jobResponse.setObjectName("asyncjobs"); - return jobResponse; + AsyncJobJoinVO vJob = ApiDBUtils.newAsyncJobView(job); + return ApiDBUtils.newAsyncJobResponse(vJob); } @Override diff --git a/server/src/com/cloud/api/query/QueryManagerImpl.java b/server/src/com/cloud/api/query/QueryManagerImpl.java index a4ec02ad856..c47c1ef3375 100644 --- a/server/src/com/cloud/api/query/QueryManagerImpl.java +++ b/server/src/com/cloud/api/query/QueryManagerImpl.java @@ -34,6 +34,7 @@ import org.apache.cloudstack.api.command.admin.user.ListUsersCmd; import org.apache.cloudstack.api.command.user.account.ListAccountsCmd; import org.apache.cloudstack.api.command.user.account.ListProjectAccountsCmd; import org.apache.cloudstack.api.command.user.event.ListEventsCmd; +import org.apache.cloudstack.api.command.user.job.ListAsyncJobsCmd; import org.apache.cloudstack.api.command.user.project.ListProjectInvitationsCmd; import org.apache.cloudstack.api.command.user.project.ListProjectsCmd; import org.apache.cloudstack.api.command.user.securitygroup.ListSecurityGroupsCmd; @@ -42,6 +43,7 @@ import org.apache.cloudstack.api.command.user.vm.ListVMsCmd; import org.apache.cloudstack.api.command.user.vmgroup.ListVMGroupsCmd; import org.apache.cloudstack.api.command.user.volume.ListVolumesCmd; import org.apache.cloudstack.api.response.AccountResponse; +import org.apache.cloudstack.api.response.AsyncJobResponse; import org.apache.cloudstack.api.response.DomainRouterResponse; import org.apache.cloudstack.api.response.EventResponse; import org.apache.cloudstack.api.response.HostResponse; @@ -62,6 +64,7 @@ import com.cloud.acl.ControlledEntity; import com.cloud.api.ApiDBUtils; import com.cloud.api.ApiResponseHelper; import com.cloud.api.query.dao.AccountJoinDao; +import com.cloud.api.query.dao.AsyncJobJoinDao; import com.cloud.api.query.dao.DomainRouterJoinDao; import com.cloud.api.query.dao.HostJoinDao; import com.cloud.api.query.dao.InstanceGroupJoinDao; @@ -74,6 +77,7 @@ import com.cloud.api.query.dao.UserAccountJoinDao; import com.cloud.api.query.dao.UserVmJoinDao; import com.cloud.api.query.dao.VolumeJoinDao; import com.cloud.api.query.vo.AccountJoinVO; +import com.cloud.api.query.vo.AsyncJobJoinVO; import com.cloud.api.query.vo.DomainRouterJoinVO; import com.cloud.api.query.vo.EventJoinVO; import com.cloud.api.query.vo.HostJoinVO; @@ -87,6 +91,7 @@ import com.cloud.api.query.vo.UserAccountJoinVO; import com.cloud.api.query.vo.UserVmJoinVO; import com.cloud.api.query.vo.VolumeJoinVO; import com.cloud.async.AsyncJob; +import com.cloud.async.AsyncJobVO; import com.cloud.domain.Domain; import com.cloud.domain.DomainVO; import com.cloud.domain.dao.DomainDao; @@ -216,6 +221,9 @@ public class QueryManagerImpl implements QueryService, Manager { @Inject private AccountJoinDao _accountJoinDao; + @Inject + private AsyncJobJoinDao _jobJoinDao; + @Inject private HighAvailabilityManager _haMgr; @@ -1727,10 +1735,86 @@ public class QueryManagerImpl implements QueryService, Manager { } } - Pair, Integer> result = _accountJoinDao.searchAndCount(sc, searchFilter); - return new Pair, Integer>(result.first(), result.second()); + return _accountJoinDao.searchAndCount(sc, searchFilter); + } + + @Override + public ListResponse searchForAsyncJobs(ListAsyncJobsCmd cmd) { + Pair, Integer> result = searchForAsyncJobsInternal(cmd); + ListResponse response = new ListResponse(); + List jobResponses = ViewResponseHelper.createAsyncJobResponse(result.first().toArray(new AsyncJobJoinVO[result.first().size()])); + response.setResponses(jobResponses, result.second()); + return response; } + public Pair, Integer> searchForAsyncJobsInternal(ListAsyncJobsCmd cmd) { + + Account caller = UserContext.current().getCaller(); + + List permittedAccounts = new ArrayList(); + + Ternary domainIdRecursiveListProject = new Ternary( + cmd.getDomainId(), cmd.isRecursive(), null); + _accountMgr.buildACLSearchParameters(caller, null, cmd.getAccountName(), null, permittedAccounts, domainIdRecursiveListProject, + cmd.listAll(), false); + Long domainId = domainIdRecursiveListProject.first(); + Boolean isRecursive = domainIdRecursiveListProject.second(); + ListProjectResourcesCriteria listProjectResourcesCriteria = domainIdRecursiveListProject.third(); + + Filter searchFilter = new Filter(AsyncJobJoinVO.class, "id", true, cmd.getStartIndex(), cmd.getPageSizeVal()); + SearchBuilder sb = _jobJoinDao.createSearchBuilder(); + sb.and("accountIdIN", sb.entity().getAccountId(), SearchCriteria.Op.IN); + SearchBuilder accountSearch = null; + boolean accountJoinIsDone = false; + if (permittedAccounts.isEmpty() && domainId != null) { + sb.and("domainId", sb.entity().getDomainId(), SearchCriteria.Op.EQ); + sb.and("path", sb.entity().getDomainPath(), SearchCriteria.Op.LIKE); + accountJoinIsDone = true; + } + + if (listProjectResourcesCriteria != null) { + + if (listProjectResourcesCriteria == Project.ListProjectResourcesCriteria.ListProjectResourcesOnly) { + sb.and("type", sb.entity().getAccountType(), SearchCriteria.Op.EQ); + } else if (listProjectResourcesCriteria == Project.ListProjectResourcesCriteria.SkipProjectResources) { + sb.and("type", sb.entity().getAccountType(), SearchCriteria.Op.NEQ); + } + + if (!accountJoinIsDone) { + sb.and("domainId", sb.entity().getDomainId(), SearchCriteria.Op.EQ); + sb.and("path", sb.entity().getDomainPath(), SearchCriteria.Op.LIKE); + } + } + + Object keyword = cmd.getKeyword(); + Object startDate = cmd.getStartDate(); + + SearchCriteria sc = sb.create(); + if (listProjectResourcesCriteria != null) { + sc.setParameters("type", 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("path", domain.getPath() + "%"); + } else { + sc.setParameters("domainId", domainId); + } + } + + if (keyword != null) { + sc.addAnd("cmd", SearchCriteria.Op.LIKE, "%" + keyword + "%"); + } + + if (startDate != null) { + sc.addAnd("created", SearchCriteria.Op.GTEQ, startDate); + } + + return _jobJoinDao.searchAndCount(sc, searchFilter); + } } diff --git a/server/src/com/cloud/api/query/ViewResponseHelper.java b/server/src/com/cloud/api/query/ViewResponseHelper.java index c29c93b394f..08495860b20 100644 --- a/server/src/com/cloud/api/query/ViewResponseHelper.java +++ b/server/src/com/cloud/api/query/ViewResponseHelper.java @@ -24,6 +24,7 @@ import java.util.List; import org.apache.cloudstack.api.ApiConstants.HostDetails; import org.apache.cloudstack.api.ApiConstants.VMDetails; import org.apache.cloudstack.api.response.AccountResponse; +import org.apache.cloudstack.api.response.AsyncJobResponse; import org.apache.cloudstack.api.response.DomainRouterResponse; import org.apache.cloudstack.api.response.EventResponse; import org.apache.cloudstack.api.response.HostResponse; @@ -40,6 +41,7 @@ import org.apache.log4j.Logger; import com.cloud.api.ApiDBUtils; import com.cloud.api.query.vo.AccountJoinVO; +import com.cloud.api.query.vo.AsyncJobJoinVO; import com.cloud.api.query.vo.DomainRouterJoinVO; import com.cloud.api.query.vo.EventJoinVO; import com.cloud.api.query.vo.HostJoinVO; @@ -243,4 +245,12 @@ public class ViewResponseHelper { } return respList; } + + public static List createAsyncJobResponse(AsyncJobJoinVO... jobs) { + List respList = new ArrayList(); + for (AsyncJobJoinVO vt : jobs){ + respList.add(ApiDBUtils.newAsyncJobResponse(vt)); + } + return respList; + } } diff --git a/server/src/com/cloud/api/query/dao/AsyncJobJoinDao.java b/server/src/com/cloud/api/query/dao/AsyncJobJoinDao.java new file mode 100644 index 00000000000..59fcc87247a --- /dev/null +++ b/server/src/com/cloud/api/query/dao/AsyncJobJoinDao.java @@ -0,0 +1,34 @@ +// 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.query.dao; + +import java.util.List; + +import org.apache.cloudstack.api.response.AsyncJobResponse; + +import com.cloud.api.query.vo.AsyncJobJoinVO; +import com.cloud.async.AsyncJob; +import com.cloud.utils.db.GenericDao; + +public interface AsyncJobJoinDao extends GenericDao { + + AsyncJobResponse newAsyncJobResponse(AsyncJobJoinVO vol); + + AsyncJobJoinVO newAsyncJobView(AsyncJob vol); + + List searchByIds(Long... ids); +} diff --git a/server/src/com/cloud/api/query/dao/AsyncJobJoinDaoImpl.java b/server/src/com/cloud/api/query/dao/AsyncJobJoinDaoImpl.java new file mode 100644 index 00000000000..c0c827b124a --- /dev/null +++ b/server/src/com/cloud/api/query/dao/AsyncJobJoinDaoImpl.java @@ -0,0 +1,161 @@ +// 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.query.dao; + +import java.util.ArrayList; +import java.util.Date; +import java.util.Iterator; +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.ApiSerializerHelper; +import com.cloud.api.SerializationContext; +import com.cloud.api.query.ViewResponseHelper; +import com.cloud.api.query.vo.AccountJoinVO; +import com.cloud.api.query.vo.AsyncJobJoinVO; +import com.cloud.api.query.vo.InstanceGroupJoinVO; +import com.cloud.api.query.vo.ResourceTagJoinVO; +import com.cloud.api.query.vo.UserAccountJoinVO; +import com.cloud.api.query.vo.UserVmJoinVO; +import com.cloud.api.query.vo.VolumeJoinVO; +import com.cloud.async.AsyncJob; +import com.cloud.configuration.Resource.ResourceType; +import com.cloud.dc.DataCenter; +import com.cloud.domain.Domain; + +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.ResponseObject; +import org.apache.cloudstack.api.ServerApiException; +import org.apache.cloudstack.api.response.AccountResponse; +import org.apache.cloudstack.api.response.AsyncJobResponse; +import org.apache.cloudstack.api.response.ListResponse; +import org.apache.cloudstack.api.response.UserResponse; +import org.apache.cloudstack.api.response.VolumeResponse; + +import com.cloud.offering.ServiceOffering; +import com.cloud.server.Criteria; +import com.cloud.storage.Storage; +import com.cloud.storage.VMTemplateHostVO; +import com.cloud.storage.Volume; +import com.cloud.storage.VMTemplateStorageResourceAssoc.Status; +import com.cloud.user.Account; +import com.cloud.user.User; +import com.cloud.user.UserContext; +import com.cloud.user.UserStatisticsVO; +import com.cloud.user.UserVO; +import com.cloud.utils.db.GenericDaoBase; +import com.cloud.utils.db.SearchBuilder; +import com.cloud.utils.db.SearchCriteria; +import com.cloud.vm.VirtualMachine.State; + + +@Local(value={AsyncJobJoinDao.class}) +public class AsyncJobJoinDaoImpl extends GenericDaoBase implements AsyncJobJoinDao { + public static final Logger s_logger = Logger.getLogger(AsyncJobJoinDaoImpl.class); + + private SearchBuilder jobSearch; + + private SearchBuilder jobIdSearch; + + protected AsyncJobJoinDaoImpl() { + + jobSearch = createSearchBuilder(); + jobSearch.and("idIN", jobSearch.entity().getId(), SearchCriteria.Op.IN); + jobSearch.done(); + + jobIdSearch = createSearchBuilder(); + jobIdSearch.and("id", jobIdSearch.entity().getId(), SearchCriteria.Op.EQ); + jobIdSearch.done(); + + this._count = "select count(distinct id) from async_job_view WHERE "; + } + + + + + + @Override + public AsyncJobResponse newAsyncJobResponse(AsyncJobJoinVO job) { + AsyncJobResponse jobResponse = new AsyncJobResponse(); + jobResponse.setAccountId(job.getAccountUuid()); + jobResponse.setUserId(job.getUserUuid()); + jobResponse.setCmd(job.getCmd()); + jobResponse.setCreated(job.getCreated()); + jobResponse.setJobId(job.getUuid()); + jobResponse.setJobStatus(job.getStatus()); + jobResponse.setJobProcStatus(job.getProcessStatus()); + + if (job.getInstanceType() != null && job.getInstanceId() != null) { + jobResponse.setJobInstanceType(job.getInstanceType().toString()); + + jobResponse.setJobInstanceId(job.getInstanceUuid()); + + } + jobResponse.setJobResultCode(job.getResultCode()); + + boolean savedValue = SerializationContext.current().getUuidTranslation(); + SerializationContext.current().setUuidTranslation(false); + + Object resultObject = ApiSerializerHelper.fromSerializedString(job.getResult()); + jobResponse.setJobResult((ResponseObject) resultObject); + SerializationContext.current().setUuidTranslation(savedValue); + + if (resultObject != null) { + Class clz = resultObject.getClass(); + if (clz.isPrimitive() || clz.getSuperclass() == Number.class || clz == String.class || clz == Date.class) { + jobResponse.setJobResultType("text"); + } else { + jobResponse.setJobResultType("object"); + } + } + + jobResponse.setObjectName("asyncjobs"); + return jobResponse; + } + + + + + + @Override + public AsyncJobJoinVO newAsyncJobView(AsyncJob job) { + SearchCriteria sc = jobIdSearch.create(); + sc.setParameters("id", job.getId()); + List accounts = searchIncludingRemoved(sc, null, null, false); + assert accounts != null && accounts.size() == 1 : "No async job found for job id " + job.getId(); + return accounts.get(0); + + } + + + + + @Override + public List searchByIds(Long... ids) { + SearchCriteria sc = jobSearch.create(); + sc.setParameters("idIN", ids); + return searchIncludingRemoved(sc, null, null, false); + } + + + +} diff --git a/server/src/com/cloud/api/query/vo/AsyncJobJoinVO.java b/server/src/com/cloud/api/query/vo/AsyncJobJoinVO.java new file mode 100644 index 00000000000..39bcb1777e6 --- /dev/null +++ b/server/src/com/cloud/api/query/vo/AsyncJobJoinVO.java @@ -0,0 +1,333 @@ +// 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.query.vo; + +import java.util.Date; +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.EnumType; +import javax.persistence.Enumerated; +import javax.persistence.Id; +import javax.persistence.Table; + +import com.cloud.async.AsyncJob.Type; +import com.cloud.utils.db.GenericDao; +import org.apache.cloudstack.api.Identity; +import org.apache.cloudstack.api.InternalIdentity; + +@Entity +@Table(name="async_job_view") +public class AsyncJobJoinVO extends BaseViewVO implements InternalIdentity, Identity { + + @Id + @Column(name="id") + private long id; + + @Column(name="uuid") + private String uuid; + + @Column(name="account_id") + private long accountId; + + @Column(name="account_uuid") + private String accountUuid; + + @Column(name="account_name") + private String accountName = null; + + @Column(name="account_type") + private short accountType; + + + @Column(name="domain_id") + private long domainId; + + @Column(name="domain_uuid") + private String domainUuid; + + @Column(name="domain_name") + private String domainName = null; + + @Column(name="domain_path") + private String domainPath = null; + + + @Column(name="user_id") + private long userId; + + @Column(name="user_uuid") + private String userUuid; + + @Column(name="job_cmd") + private String cmd; + + @Column(name="job_status") + private int status; + + @Column(name="job_process_status") + private int processStatus; + + @Column(name="job_result_code") + private int resultCode; + + @Column(name="job_result", length=65535) + private String result; + + @Column(name=GenericDao.CREATED_COLUMN) + private Date created; + + @Column(name=GenericDao.REMOVED_COLUMN) + private Date removed; + + @Enumerated(value=EnumType.STRING) + @Column(name="instance_type", length=64) + private Type instanceType; + + @Column(name="instance_id", length=64) + private Long instanceId; + + @Column(name="instance_uuid") + private String instanceUuid; + + + public AsyncJobJoinVO() { + } + + + @Override + public long getId() { + return id; + } + + + @Override + public void setId(long id) { + this.id = id; + } + + + @Override + public String getUuid() { + return uuid; + } + + + public void setUuid(String uuid) { + this.uuid = uuid; + } + + + public long getAccountId() { + return accountId; + } + + + public void setAccountId(long accountId) { + this.accountId = accountId; + } + + + public String getAccountUuid() { + return accountUuid; + } + + + public void setAccountUuid(String accountUuid) { + this.accountUuid = accountUuid; + } + + + public String getAccountName() { + return accountName; + } + + + public void setAccountName(String accountName) { + this.accountName = accountName; + } + + + public short getAccountType() { + return accountType; + } + + + public void setAccountType(short accountType) { + this.accountType = accountType; + } + + + public long getDomainId() { + return domainId; + } + + + public void setDomainId(long domainId) { + this.domainId = domainId; + } + + + public String getDomainUuid() { + return domainUuid; + } + + + public void setDomainUuid(String domainUuid) { + this.domainUuid = domainUuid; + } + + + public String getDomainName() { + return domainName; + } + + + public void setDomainName(String domainName) { + this.domainName = domainName; + } + + + public String getDomainPath() { + return domainPath; + } + + + public void setDomainPath(String domainPath) { + this.domainPath = domainPath; + } + + + public long getUserId() { + return userId; + } + + + public void setUserId(long userId) { + this.userId = userId; + } + + + public String getUserUuid() { + return userUuid; + } + + + public void setUserUuid(String userUuid) { + this.userUuid = userUuid; + } + + + public String getCmd() { + return cmd; + } + + + public void setCmd(String cmd) { + this.cmd = cmd; + } + + + public int getStatus() { + return status; + } + + + public void setStatus(int status) { + this.status = status; + } + + + public int getProcessStatus() { + return processStatus; + } + + + public void setProcessStatus(int processStatus) { + this.processStatus = processStatus; + } + + + public int getResultCode() { + return resultCode; + } + + + public void setResultCode(int resultCode) { + this.resultCode = resultCode; + } + + + public String getResult() { + return result; + } + + + public void setResult(String result) { + this.result = result; + } + + + 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 Type getInstanceType() { + return instanceType; + } + + + public void setInstanceType(Type instanceType) { + this.instanceType = instanceType; + } + + + public Long getInstanceId() { + return instanceId; + } + + + public void setInstanceId(Long instanceId) { + this.instanceId = instanceId; + } + + + public String getInstanceUuid() { + return instanceUuid; + } + + + public void setInstanceUuid(String instanceUuid) { + this.instanceUuid = instanceUuid; + } + +} diff --git a/server/src/com/cloud/configuration/DefaultComponentLibrary.java b/server/src/com/cloud/configuration/DefaultComponentLibrary.java index ac7602c45c0..2fbe7586ac9 100755 --- a/server/src/com/cloud/configuration/DefaultComponentLibrary.java +++ b/server/src/com/cloud/configuration/DefaultComponentLibrary.java @@ -26,6 +26,7 @@ import com.cloud.alert.AlertManagerImpl; import com.cloud.alert.dao.AlertDaoImpl; import com.cloud.api.query.QueryManagerImpl; import com.cloud.api.query.dao.AccountJoinDaoImpl; +import com.cloud.api.query.dao.AsyncJobJoinDaoImpl; import com.cloud.api.query.dao.DomainRouterJoinDaoImpl; import com.cloud.api.query.dao.InstanceGroupJoinDaoImpl; import com.cloud.api.query.dao.ProjectAccountJoinDaoImpl; @@ -246,6 +247,7 @@ public class DefaultComponentLibrary extends ComponentLibraryBase implements Com addDao("HostJoinDao", HostJoinDaoImpl.class); addDao("VolumeJoinDao", VolumeJoinDaoImpl.class); addDao("AccountJoinDao", AccountJoinDaoImpl.class); + addDao("AsyncJobJoinDao", AsyncJobJoinDaoImpl.class); ComponentInfo> info = addDao("ServiceOfferingDao", ServiceOfferingDaoImpl.class); info.addParameter("cache.size", "50"); info.addParameter("cache.time.to.live", "600"); diff --git a/server/src/com/cloud/server/ManagementServerImpl.java b/server/src/com/cloud/server/ManagementServerImpl.java index ee5f78e5640..e5001927191 100755 --- a/server/src/com/cloud/server/ManagementServerImpl.java +++ b/server/src/com/cloud/server/ManagementServerImpl.java @@ -1426,14 +1426,14 @@ public class ManagementServerImpl implements ManagementServer { } } else if (_s3Mgr.isS3Enabled()) { if (template == null) { - templateZonePairSet = _templateDao.searchSwiftTemplates(name, keyword, templateFilter, isIso, + templateZonePairSet = _templateDao.searchSwiftTemplates(name, keyword, templateFilter, isIso, hypers, bootable, domain, pageSize, startIndex, zoneId, hyperType, onlyReady, showDomr, permittedAccounts, caller, tags); Set> templateZonePairSet2 = new HashSet>(); - templateZonePairSet2 = _templateDao.searchTemplates(name, keyword, templateFilter, isIso, hypers, + templateZonePairSet2 = _templateDao.searchTemplates(name, keyword, templateFilter, isIso, hypers, bootable, domain, pageSize, startIndex, zoneId, hyperType, onlyReady, showDomr, permittedAccounts, caller, listProjectResourcesCriteria, tags); - + for (Pair tmpltPair : templateZonePairSet2) { if (!templateZonePairSet.contains(new Pair(tmpltPair.first(), -1L))) { templateZonePairSet.add(tmpltPair); @@ -2417,84 +2417,6 @@ public class ManagementServerImpl implements ManagementServer { return _poolDao.searchAndCount(sc, searchFilter); } - @Override - public Pair, Integer> searchForAsyncJobs(ListAsyncJobsCmd cmd) { - - Account caller = UserContext.current().getCaller(); - - List permittedAccounts = new ArrayList(); - - Ternary domainIdRecursiveListProject = new Ternary( - cmd.getDomainId(), cmd.isRecursive(), null); - _accountMgr.buildACLSearchParameters(caller, null, cmd.getAccountName(), null, permittedAccounts, domainIdRecursiveListProject, - cmd.listAll(), false); - Long domainId = domainIdRecursiveListProject.first(); - Boolean isRecursive = domainIdRecursiveListProject.second(); - ListProjectResourcesCriteria listProjectResourcesCriteria = domainIdRecursiveListProject.third(); - - Filter searchFilter = new Filter(AsyncJobVO.class, "id", true, cmd.getStartIndex(), cmd.getPageSizeVal()); - SearchBuilder sb = _jobDao.createSearchBuilder(); - sb.and("accountIdIN", sb.entity().getAccountId(), SearchCriteria.Op.IN); - SearchBuilder accountSearch = null; - boolean accountJoinIsDone = false; - if (permittedAccounts.isEmpty() && domainId != null) { - accountSearch = _accountDao.createSearchBuilder(); - // if accountId isn't specified, we can do a domain match for the - // admin case if isRecursive is true - SearchBuilder domainSearch = _domainDao.createSearchBuilder(); - domainSearch.and("domainId", domainSearch.entity().getId(), SearchCriteria.Op.EQ); - domainSearch.and("path", domainSearch.entity().getPath(), SearchCriteria.Op.LIKE); - sb.join("accountSearch", accountSearch, sb.entity().getAccountId(), accountSearch.entity().getId(), JoinBuilder.JoinType.INNER); - accountJoinIsDone = true; - accountSearch.join("domainSearch", domainSearch, accountSearch.entity().getDomainId(), domainSearch.entity().getId(), - JoinBuilder.JoinType.INNER); - } - - if (listProjectResourcesCriteria != null) { - if (accountSearch == null) { - accountSearch = _accountDao.createSearchBuilder(); - } - if (listProjectResourcesCriteria == Project.ListProjectResourcesCriteria.ListProjectResourcesOnly) { - accountSearch.and("type", accountSearch.entity().getType(), SearchCriteria.Op.EQ); - } else if (listProjectResourcesCriteria == Project.ListProjectResourcesCriteria.SkipProjectResources) { - accountSearch.and("type", accountSearch.entity().getType(), SearchCriteria.Op.NEQ); - } - - if (!accountJoinIsDone) { - sb.join("accountSearch", accountSearch, sb.entity().getAccountId(), accountSearch.entity().getId(), JoinBuilder.JoinType.INNER); - } - } - - Object keyword = cmd.getKeyword(); - Object startDate = cmd.getStartDate(); - - SearchCriteria sc = sb.create(); - if (listProjectResourcesCriteria != null) { - sc.setJoinParameters("accountSearch", "type", Account.ACCOUNT_TYPE_PROJECT); - } - - if (!permittedAccounts.isEmpty()) { - sc.setParameters("accountIdIN", permittedAccounts.toArray()); - } else if (domainId != null) { - DomainVO domain = _domainDao.findById(domainId); - if (isRecursive) { - sc.setJoinParameters("domainSearch", "path", domain.getPath() + "%"); - } else { - sc.setJoinParameters("domainSearch", "domainId", domainId); - } - } - - if (keyword != null) { - sc.addAnd("cmd", SearchCriteria.Op.LIKE, "%" + keyword + "%"); - } - - if (startDate != null) { - sc.addAnd("created", SearchCriteria.Op.GTEQ, startDate); - } - - Pair, Integer> result = _jobDao.searchAndCount(sc, searchFilter); - return new Pair, Integer>(result.first(), result.second()); - } @ActionEvent(eventType = EventTypes.EVENT_SSVM_START, eventDescription = "starting secondary storage Vm", async = true) public SecondaryStorageVmVO startSecondaryStorageVm(long instanceId) { diff --git a/setup/db/create-schema.sql b/setup/db/create-schema.sql index dcea14201b3..d95984aa69c 100755 --- a/setup/db/create-schema.sql +++ b/setup/db/create-schema.sql @@ -3240,4 +3240,79 @@ left join resource_limit projectlimit on account.id = projectlimit.account_id an left join resource_count projectcount on account.id = projectcount.account_id and projectcount.type = "project" left join resource_limit networklimit on account.id = networklimit.account_id and networklimit.type = "network" left join resource_count networkcount on account.id = networkcount.account_id and networkcount.type = "network" -left join async_job on async_job.instance_id = account.id and async_job.instance_type = "Account" and async_job.job_status = 0; \ No newline at end of file +left join async_job on async_job.instance_id = account.id and async_job.instance_type = "Account" and async_job.job_status = 0; + +DROP VIEW IF EXISTS `cloud`.`async_job_view`; +CREATE VIEW async_job_view AS +select +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, +user.id user_id, +user.uuid user_uuid, +async_job.id, +async_job.uuid, +async_job.job_cmd, +async_job.job_status, +async_job.job_process_status, +async_job.job_result_code, +async_job.job_result, +async_job.created, +async_job.removed, +async_job.instance_type, +async_job.instance_id, +CASE +WHEN async_job.instance_type = 'Volume' THEN volumes.uuid +WHEN async_job.instance_type = 'Template' or async_job.instance_type = 'Iso' THEN vm_template.uuid +WHEN async_job.instance_type = 'VirtualMachine' or async_job.instance_type = 'ConsoleProxy' or async_job.instance_type = 'SystemVm' or async_job.instance_type = 'DomainRouter' THEN vm_instance.uuid +WHEN async_job.instance_type = 'Snapshot' THEN snapshots.uuid +WHEN async_job.instance_type = 'Host' THEN host.uuid +WHEN async_job.instance_type = 'StoragePool' THEN storage_pool.uuid +WHEN async_job.instance_type = 'IpAddress' THEN user_ip_address.uuid +WHEN async_job.instance_type = 'SecurityGroup' THEN security_group.uuid +WHEN async_job.instance_type = 'PhysicalNetwork' THEN physical_network.uuid +WHEN async_job.instance_type = 'TrafficType' THEN physical_network_traffic_types.uuid +WHEN async_job.instance_type = 'PhysicalNetworkServiceProvider' THEN physical_network_service_providers.uuid +WHEN async_job.instance_type = 'FirewallRule' THEN firewall_rules.uuid +WHEN async_job.instance_type = 'Account' THEN acct.uuid +WHEN async_job.instance_type = 'User' THEN us.uuid +WHEN async_job.instance_type = 'StaticRoute' THEN static_routes.uuid +WHEN async_job.instance_type = 'PrivateGateway' THEN vpc_gateways.uuid +WHEN async_job.instance_type = 'Counter' THEN counter.uuid +WHEN async_job.instance_type = 'Condition' THEN conditions.uuid +WHEN async_job.instance_type = 'AutoScalePolicy' THEN autoscale_policies.uuid +WHEN async_job.instance_type = 'AutoScaleVmProfile' THEN autoscale_vmprofiles.uuid +WHEN async_job.instance_type = 'AutoScaleVmGroup' THEN autoscale_vmgroups.uuid +ELSE null +END instance_uuid +from async_job +left join account on async_job.account_id = account.id +left join domain on domain.id = account.domain_id +left join user on async_job.user_id = user.id +left join volumes on async_job.instance_id = volumes.id +left join vm_template on async_job.instance_id = vm_template.id +left join vm_instance on async_job.instance_id = vm_instance.id +left join snapshots on async_job.instance_id = snapshots.id +left join host on async_job.instance_id = host.id +left join storage_pool on async_job.instance_id = storage_pool.id +left join user_ip_address on async_job.instance_id = user_ip_address.id +left join security_group on async_job.instance_id = security_group.id +left join physical_network on async_job.instance_id = physical_network.id +left join physical_network_traffic_types on async_job.instance_id = physical_network_traffic_types.id +left join physical_network_service_providers on async_job.instance_id = physical_network_service_providers.id +left join firewall_rules on async_job.instance_id = firewall_rules.id +left join account acct on async_job.instance_id = acct.id +left join user us on async_job.instance_id = us.id +left join static_routes on async_job.instance_id = static_routes.id +left join vpc_gateways on async_job.instance_id = vpc_gateways.id +left join counter on async_job.instance_id = counter.id +left join conditions on async_job.instance_id = conditions.id +left join autoscale_policies on async_job.instance_id = autoscale_policies.id +left join autoscale_vmprofiles on async_job.instance_id = autoscale_vmprofiles.id +left join autoscale_vmgroups on async_job.instance_id = autoscale_vmgroups.id; + diff --git a/setup/db/db/schema-40to410.sql b/setup/db/db/schema-40to410.sql index c8626419ae5..18e1cebf43b 100644 --- a/setup/db/db/schema-40to410.sql +++ b/setup/db/db/schema-40to410.sql @@ -821,3 +821,79 @@ left join resource_count projectcount on account.id = projectcount.account_id an left join resource_limit networklimit on account.id = networklimit.account_id and networklimit.type = "network" left join resource_count networkcount on account.id = networkcount.account_id and networkcount.type = "network" left join async_job on async_job.instance_id = account.id and async_job.instance_type = "Account" and async_job.job_status = 0; + +DROP VIEW IF EXISTS `cloud`.`async_job_view`; +CREATE VIEW async_job_view AS +select +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, +user.id user_id, +user.uuid user_uuid, +async_job.id, +async_job.uuid, +async_job.job_cmd, +async_job.job_status, +async_job.job_process_status, +async_job.job_result_code, +async_job.job_result, +async_job.created, +async_job.removed, +async_job.instance_type, +async_job.instance_id, +CASE +WHEN async_job.instance_type = 'Volume' THEN volumes.uuid +WHEN async_job.instance_type = 'Template' or async_job.instance_type = 'Iso' THEN vm_template.uuid +WHEN async_job.instance_type = 'VirtualMachine' or async_job.instance_type = 'ConsoleProxy' or async_job.instance_type = 'SystemVm' or async_job.instance_type = 'DomainRouter' THEN vm_instance.uuid +WHEN async_job.instance_type = 'Snapshot' THEN snapshots.uuid +WHEN async_job.instance_type = 'Host' THEN host.uuid +WHEN async_job.instance_type = 'StoragePool' THEN storage_pool.uuid +WHEN async_job.instance_type = 'IpAddress' THEN user_ip_address.uuid +WHEN async_job.instance_type = 'SecurityGroup' THEN security_group.uuid +WHEN async_job.instance_type = 'PhysicalNetwork' THEN physical_network.uuid +WHEN async_job.instance_type = 'TrafficType' THEN physical_network_traffic_types.uuid +WHEN async_job.instance_type = 'PhysicalNetworkServiceProvider' THEN physical_network_service_providers.uuid +WHEN async_job.instance_type = 'FirewallRule' THEN firewall_rules.uuid +WHEN async_job.instance_type = 'Account' THEN acct.uuid +WHEN async_job.instance_type = 'User' THEN us.uuid +WHEN async_job.instance_type = 'StaticRoute' THEN static_routes.uuid +WHEN async_job.instance_type = 'PrivateGateway' THEN vpc_gateways.uuid +WHEN async_job.instance_type = 'Counter' THEN counter.uuid +WHEN async_job.instance_type = 'Condition' THEN conditions.uuid +WHEN async_job.instance_type = 'AutoScalePolicy' THEN autoscale_policies.uuid +WHEN async_job.instance_type = 'AutoScaleVmProfile' THEN autoscale_vmprofiles.uuid +WHEN async_job.instance_type = 'AutoScaleVmGroup' THEN autoscale_vmgroups.uuid +ELSE null +END instance_uuid +from async_job +left join account on async_job.account_id = account.id +left join domain on domain.id = account.domain_id +left join user on async_job.user_id = user.id +left join volumes on async_job.instance_id = volumes.id +left join vm_template on async_job.instance_id = vm_template.id +left join vm_instance on async_job.instance_id = vm_instance.id +left join snapshots on async_job.instance_id = snapshots.id +left join host on async_job.instance_id = host.id +left join storage_pool on async_job.instance_id = storage_pool.id +left join user_ip_address on async_job.instance_id = user_ip_address.id +left join security_group on async_job.instance_id = security_group.id +left join physical_network on async_job.instance_id = physical_network.id +left join physical_network_traffic_types on async_job.instance_id = physical_network_traffic_types.id +left join physical_network_service_providers on async_job.instance_id = physical_network_service_providers.id +left join firewall_rules on async_job.instance_id = firewall_rules.id +left join account acct on async_job.instance_id = acct.id +left join user us on async_job.instance_id = us.id +left join static_routes on async_job.instance_id = static_routes.id +left join vpc_gateways on async_job.instance_id = vpc_gateways.id +left join counter on async_job.instance_id = counter.id +left join conditions on async_job.instance_id = conditions.id +left join autoscale_policies on async_job.instance_id = autoscale_policies.id +left join autoscale_vmprofiles on async_job.instance_id = autoscale_vmprofiles.id +left join autoscale_vmgroups on async_job.instance_id = autoscale_vmgroups.id; + + From 102fcf370ba2bf539870d204e1331836665eb6cf Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Thu, 3 Jan 2013 15:35:35 -0800 Subject: [PATCH 242/421] CLOUDSTACK-736: Make integration smoke test assert on deployed vm name from response Signed-off-by: Rohit Yadav --- test/integration/smoke/test_vm_life_cycle.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/test/integration/smoke/test_vm_life_cycle.py b/test/integration/smoke/test_vm_life_cycle.py index 1633c538342..f6fe4e002a1 100644 --- a/test/integration/smoke/test_vm_life_cycle.py +++ b/test/integration/smoke/test_vm_life_cycle.py @@ -227,9 +227,9 @@ class TestDeployVM(cloudstackTestCase): ) self.assertEqual( - vm_response.displayname, - self.virtual_machine.displayname, - "Check virtual machine displayname in listVirtualMachines" + vm_response.name, + self.virtual_machine.name, + "Check virtual machine name in listVirtualMachines" ) return From 32f035c9fa416c3a4f9a73aab71995b51e57b029 Mon Sep 17 00:00:00 2001 From: Min Chen Date: Thu, 3 Jan 2013 18:23:09 -0800 Subject: [PATCH 243/421] Separate db view creation into create-schema-view.sql. --- setup/bindir/cloud-setup-databases.in | 4 +- setup/db/create-schema-view.sql | 784 ++++++++++++++++++++++++++ setup/db/create-schema.sql | 768 ------------------------- setup/db/deploy-db-dev.sh | 11 + setup/db/deploy-db-simulator.sh | 12 + 5 files changed, 809 insertions(+), 770 deletions(-) create mode 100755 setup/db/create-schema-view.sql diff --git a/setup/bindir/cloud-setup-databases.in b/setup/bindir/cloud-setup-databases.in index bd5a0ba11f3..e50aa29aa62 100755 --- a/setup/bindir/cloud-setup-databases.in +++ b/setup/bindir/cloud-setup-databases.in @@ -212,7 +212,7 @@ for full help ""), ) - for f in ["create-database","create-schema","create-database-premium","create-schema-premium"]: + for f in ["create-database","create-schema", "create-database-premium","create-schema-premium", "create-schema-view"]: p = os.path.join(self.dbFilesPath,"%s.sql"%f) if not os.path.exists(p): continue text = file(p).read() @@ -359,7 +359,7 @@ for example: if not os.path.exists(dbf): self.errorAndExit("Cannot find %s"%dbf) - coreSchemas = ['create-database.sql', 'create-schema.sql', 'templates.sql', 'create-index-fk.sql'] + coreSchemas = ['create-database.sql', 'create-schema.sql', 'create-schema-view.sql', 'templates.sql', 'create-index-fk.sql'] if not self.serversetup: coreSchemas.append('server-setup.sql') diff --git a/setup/db/create-schema-view.sql b/setup/db/create-schema-view.sql new file mode 100755 index 00000000000..f502c88a90d --- /dev/null +++ b/setup/db/create-schema-view.sql @@ -0,0 +1,784 @@ +-- 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. +use cloud; + +--- 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; + +DROP VIEW IF EXISTS `cloud`.`security_group_view`; +CREATE VIEW security_group_view AS +select +security_group.id id, +security_group.name name, +security_group.description description, +security_group.uuid uuid, +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, +security_group_rule.id rule_id, +security_group_rule.uuid rule_uuid, +security_group_rule.type rule_type, +security_group_rule.start_port rule_start_port, +security_group_rule.end_port rule_end_port, +security_group_rule.protocol rule_protocol, +security_group_rule.allowed_network_id rule_allowed_network_id, +security_group_rule.allowed_ip_cidr rule_allowed_ip_cidr, +security_group_rule.create_status rule_create_status, +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 security_group +left join security_group_rule on security_group.id = security_group_rule.security_group_id +inner join account on security_group.account_id=account.id +inner join domain on security_group.domain_id=domain.id +left join projects on projects.project_account_id = security_group.account_id +left join resource_tags on resource_tags.resource_id = security_group.id and resource_tags.resource_type = "SecurityGroup" +left join async_job on async_job.instance_id = security_group.id and async_job.instance_type = "SecurityGroup" and async_job.job_status = 0; + +DROP VIEW IF EXISTS `cloud`.`resource_tag_view`; +CREATE VIEW resource_tag_view AS +select +resource_tags.id, +resource_tags.uuid, +resource_tags.key, +resource_tags.value, +resource_tags.resource_id, +resource_tags.resource_uuid, +resource_tags.resource_type, +resource_tags.customer, +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 +from resource_tags +inner join account on resource_tags.account_id=account.id +inner join domain on resource_tags.domain_id=domain.id +left join projects on projects.project_account_id = resource_tags.account_id; + + +DROP VIEW IF EXISTS `cloud`.`event_view`; +CREATE VIEW event_view AS +select +event.id, +event.uuid, +event.type, +event.state, +event.description, +event.created, +event.level, +event.parameters, +event.start_id, +eve.uuid start_uuid, +event.user_id, +user.username user_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 +from event +inner join account on event.account_id=account.id +inner join domain on event.domain_id=domain.id +inner join user on event.user_id = user.id +left join projects on projects.project_account_id = event.account_id +left join event eve on event.start_id = eve.id; + +DROP VIEW IF EXISTS `cloud`.`instance_group_view`; +CREATE VIEW instance_group_view AS +select +instance_group.id, +instance_group.uuid, +instance_group.name, +instance_group.removed, +instance_group.created, +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 +from instance_group +inner join account on instance_group.account_id=account.id +inner join domain on account.domain_id=domain.id +left join projects on projects.project_account_id = instance_group.account_id; + +DROP VIEW IF EXISTS `cloud`.`user_view`; +CREATE VIEW user_view AS +select +user.id, +user.uuid, +user.username, +user.password, +user.firstname, +user.lastname, +user.email, +user.state, +user.api_key, +user.secret_key, +user.created, +user.removed, +user.timezone, +user.registration_token, +user.is_registered, +user.incorrect_login_attempts, +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, +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 +inner join account on user.account_id = account.id +inner join domain on account.domain_id=domain.id +left join async_job on async_job.instance_id = user.id and async_job.instance_type = "User" and async_job.job_status = 0; + + + + +DROP VIEW IF EXISTS `cloud`.`project_view`; +CREATE VIEW project_view AS +select +projects.id, +projects.uuid, +projects.name, +projects.display_text, +projects.state, +projects.removed, +projects.created, +account.account_name owner, +pacct.account_id, +domain.id domain_id, +domain.uuid domain_uuid, +domain.name domain_name, +domain.path domain_path, +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 +from projects +inner join domain on projects.domain_id=domain.id +inner join project_account on projects.id = project_account.project_id and project_account.account_role = "Admin" +inner join account on account.id = project_account.account_id +left join resource_tags on resource_tags.resource_id = projects.id and resource_tags.resource_type = "Project" +left join project_account pacct on projects.id = pacct.project_id; + +DROP VIEW IF EXISTS `cloud`.`project_account_view`; +CREATE VIEW project_account_view AS +select +project_account.id, +account.id account_id, +account.uuid account_uuid, +account.account_name, +account.type account_type, +project_account.account_role, +projects.id project_id, +projects.uuid project_uuid, +projects.name project_name, +domain.id domain_id, +domain.uuid domain_uuid, +domain.name domain_name, +domain.path domain_path +from project_account +inner join account on project_account.account_id = account.id +inner join domain on account.domain_id=domain.id +inner join projects on projects.id = project_account.project_id; + +DROP VIEW IF EXISTS `cloud`.`project_invitation_view`; +CREATE VIEW project_invitation_view AS +select +project_invitations.id, +project_invitations.uuid, +project_invitations.email, +project_invitations.created, +project_invitations.state, +projects.id project_id, +projects.uuid project_uuid, +projects.name project_name, +account.id account_id, +account.uuid account_uuid, +account.account_name, +account.type account_type, +domain.id domain_id, +domain.uuid domain_uuid, +domain.name domain_name, +domain.path domain_path +from project_invitations +left join account on project_invitations.account_id = account.id +left join domain on project_invitations.domain_id=domain.id +left join projects on projects.id = project_invitations.project_id; + +DROP VIEW IF EXISTS `cloud`.`host_view`; +CREATE VIEW host_view AS +select +host.id, +host.uuid, +host.name, +host.status, +host.disconnected, +host.type, +host.private_ip_address, +host.version, +host.hypervisor_type, +host.hypervisor_version, +host.capabilities, +host.last_ping, +host.created, +host.removed, +host.resource_state, +host.mgmt_server_id, +host.cpus, +host.speed, +host.ram, +cluster.id cluster_id, +cluster.uuid cluster_uuid, +cluster.name cluster_name, +cluster.cluster_type, +data_center.id data_center_id, +data_center.uuid data_center_uuid, +data_center.name data_center_name, +host_pod_ref.id pod_id, +host_pod_ref.uuid pod_uuid, +host_pod_ref.name pod_name, +host_tags.tag, +guest_os_category.id guest_os_category_id, +guest_os_category.uuid guest_os_category_uuid, +guest_os_category.name guest_os_category_name, +mem_caps.used_capacity memory_used_capacity, +mem_caps.reserved_capacity memory_reserved_capacity, +cpu_caps.used_capacity cpu_used_capacity, +cpu_caps.reserved_capacity cpu_reserved_capacity, +async_job.id job_id, +async_job.uuid job_uuid, +async_job.job_status job_status, +async_job.account_id job_account_id +from host +left join cluster on host.cluster_id = cluster.id +left join data_center on host.data_center_id = data_center.id +left join host_pod_ref on host.pod_id = host_pod_ref.id +left join host_details on host.id = host_details.id and host_details.name = "guest.os.category.id" +left join guest_os_category on guest_os_category.id = CONVERT( host_details.value, UNSIGNED ) +left join host_tags on host_tags.host_id = host.id +left join op_host_capacity mem_caps on host.id = mem_caps.host_id and mem_caps.capacity_type = 0 +left join op_host_capacity cpu_caps on host.id = cpu_caps.host_id and cpu_caps.capacity_type = 1 +left join async_job on async_job.instance_id = host.id and async_job.instance_type = "Host" and async_job.job_status = 0; + +DROP VIEW IF EXISTS `cloud`.`volume_view`; +CREATE VIEW volume_view AS +select +volumes.id, +volumes.uuid, +volumes.name, +volumes.device_id, +volumes.volume_type, +volumes.size, +volumes.created, +volumes.state, +volumes.attached, +volumes.removed, +volumes.pod_id, +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, +data_center.id data_center_id, +data_center.uuid data_center_uuid, +data_center.name data_center_name, +vm_instance.id vm_id, +vm_instance.uuid vm_uuid, +vm_instance.name vm_name, +vm_instance.state vm_state, +vm_instance.vm_type, +user_vm.display_name vm_display_name, +volume_host_ref.size volume_host_size, +volume_host_ref.created volume_host_created, +volume_host_ref.format, +volume_host_ref.download_pct, +volume_host_ref.download_state, +volume_host_ref.error_str, +disk_offering.id disk_offering_id, +disk_offering.uuid disk_offering_uuid, +disk_offering.name disk_offering_name, +disk_offering.display_text disk_offering_display_text, +disk_offering.use_local_storage, +disk_offering.system_use, +storage_pool.id pool_id, +storage_pool.uuid pool_uuid, +storage_pool.name pool_name, +cluster.hypervisor_type, +vm_template.id template_id, +vm_template.uuid template_uuid, +vm_template.extractable, +vm_template.type template_type, +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 volumes +inner join account on volumes.account_id=account.id +inner join domain on volumes.domain_id=domain.id +left join projects on projects.project_account_id = account.id +left join data_center on volumes.data_center_id = data_center.id +left join vm_instance on volumes.instance_id = vm_instance.id +left join user_vm on user_vm.id = vm_instance.id +left join volume_host_ref on volumes.id = volume_host_ref.volume_id and volumes.data_center_id = volume_host_ref.zone_id +left join disk_offering on volumes.disk_offering_id = disk_offering.id +left join storage_pool on volumes.pool_id = storage_pool.id +left join cluster on storage_pool.cluster_id = cluster.id +left join vm_template on volumes.template_id = vm_template.id +left join resource_tags on resource_tags.resource_id = volumes.id and resource_tags.resource_type = "Volume" +left join async_job on async_job.instance_id = volumes.id and async_job.instance_type = "Volume" and async_job.job_status = 0; + +DROP VIEW IF EXISTS `cloud`.`account_netstats_view`; +CREATE VIEW account_netstats_view AS +SELECT account_id, +sum(net_bytes_received)+ sum(current_bytes_received) as bytesReceived, +sum(net_bytes_sent)+ sum(current_bytes_sent) as bytesSent +FROM user_statistics +group by account_id; + + +DROP VIEW IF EXISTS `cloud`.`account_vmstats_view`; +CREATE VIEW account_vmstats_view AS +SELECT account_id, state, count(*) as vmcount +from vm_instance +group by account_id, state; + +DROP VIEW IF EXISTS `cloud`.`free_ip_view`; +CREATE VIEW free_ip_view AS +select count(user_ip_address.id) free_ip +from user_ip_address +inner join vlan on vlan.id = user_ip_address.vlan_db_id and vlan.vlan_type = "VirtualNetwork" +where state = "Free"; + +DROP VIEW IF EXISTS `cloud`.`account_view`; +CREATE VIEW account_view AS +select +account.id, +account.uuid, +account.account_name, +account.type, +account.state, +account.removed, +account.cleanup_needed, +account.network_domain, +domain.id domain_id, +domain.uuid domain_uuid, +domain.name domain_name, +domain.path domain_path, +data_center.id data_center_id, +data_center.uuid data_center_uuid, +data_center.name data_center_name, +account_netstats_view.bytesReceived, +account_netstats_view.bytesSent, +vmlimit.max vmLimit, +vmcount.count vmTotal, +runningvm.vmcount runningVms, +stoppedvm.vmcount stoppedVms, +iplimit.max ipLimit, +ipcount.count ipTotal, +free_ip_view.free_ip ipFree, +volumelimit.max volumeLimit, +volumecount.count volumeTotal, +snapshotlimit.max snapshotLimit, +snapshotcount.count snapshotTotal, +templatelimit.max templateLimit, +templatecount.count templateTotal, +vpclimit.max vpcLimit, +vpccount.count vpcTotal, +projectlimit.max projectLimit, +projectcount.count projectTotal, +networklimit.max networkLimit, +networkcount.count networkTotal, +async_job.id job_id, +async_job.uuid job_uuid, +async_job.job_status job_status, +async_job.account_id job_account_id +from free_ip_view, account +inner join domain on account.domain_id=domain.id +left join data_center on account.default_zone_id = data_center.id +left join account_netstats_view on account.id = account_netstats_view.account_id +left join resource_limit vmlimit on account.id = vmlimit.account_id and vmlimit.type = "user_vm" +left join resource_count vmcount on account.id = vmcount.account_id and vmcount.type = "user_vm" +left join account_vmstats_view runningvm on account.id = runningvm.account_id and runningvm.state = "Running" +left join account_vmstats_view stoppedvm on account.id = stoppedvm.account_id and stoppedvm.state = "Stopped" +left join resource_limit iplimit on account.id = iplimit.account_id and iplimit.type = "public_ip" +left join resource_count ipcount on account.id = ipcount.account_id and ipcount.type = "public_ip" +left join resource_limit volumelimit on account.id = volumelimit.account_id and volumelimit.type = "volume" +left join resource_count volumecount on account.id = volumecount.account_id and volumecount.type = "volume" +left join resource_limit snapshotlimit on account.id = snapshotlimit.account_id and snapshotlimit.type = "snapshot" +left join resource_count snapshotcount on account.id = snapshotcount.account_id and snapshotcount.type = "snapshot" +left join resource_limit templatelimit on account.id = templatelimit.account_id and templatelimit.type = "template" +left join resource_count templatecount on account.id = templatecount.account_id and templatecount.type = "template" +left join resource_limit vpclimit on account.id = vpclimit.account_id and vpclimit.type = "vpc" +left join resource_count vpccount on account.id = vpccount.account_id and vpccount.type = "vpc" +left join resource_limit projectlimit on account.id = projectlimit.account_id and projectlimit.type = "project" +left join resource_count projectcount on account.id = projectcount.account_id and projectcount.type = "project" +left join resource_limit networklimit on account.id = networklimit.account_id and networklimit.type = "network" +left join resource_count networkcount on account.id = networkcount.account_id and networkcount.type = "network" +left join async_job on async_job.instance_id = account.id and async_job.instance_type = "Account" and async_job.job_status = 0; + +DROP VIEW IF EXISTS `cloud`.`async_job_view`; +CREATE VIEW async_job_view AS +select +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, +user.id user_id, +user.uuid user_uuid, +async_job.id, +async_job.uuid, +async_job.job_cmd, +async_job.job_status, +async_job.job_process_status, +async_job.job_result_code, +async_job.job_result, +async_job.created, +async_job.removed, +async_job.instance_type, +async_job.instance_id, +CASE +WHEN async_job.instance_type = 'Volume' THEN volumes.uuid +WHEN async_job.instance_type = 'Template' or async_job.instance_type = 'Iso' THEN vm_template.uuid +WHEN async_job.instance_type = 'VirtualMachine' or async_job.instance_type = 'ConsoleProxy' or async_job.instance_type = 'SystemVm' or async_job.instance_type = 'DomainRouter' THEN vm_instance.uuid +WHEN async_job.instance_type = 'Snapshot' THEN snapshots.uuid +WHEN async_job.instance_type = 'Host' THEN host.uuid +WHEN async_job.instance_type = 'StoragePool' THEN storage_pool.uuid +WHEN async_job.instance_type = 'IpAddress' THEN user_ip_address.uuid +WHEN async_job.instance_type = 'SecurityGroup' THEN security_group.uuid +WHEN async_job.instance_type = 'PhysicalNetwork' THEN physical_network.uuid +WHEN async_job.instance_type = 'TrafficType' THEN physical_network_traffic_types.uuid +WHEN async_job.instance_type = 'PhysicalNetworkServiceProvider' THEN physical_network_service_providers.uuid +WHEN async_job.instance_type = 'FirewallRule' THEN firewall_rules.uuid +WHEN async_job.instance_type = 'Account' THEN acct.uuid +WHEN async_job.instance_type = 'User' THEN us.uuid +WHEN async_job.instance_type = 'StaticRoute' THEN static_routes.uuid +WHEN async_job.instance_type = 'PrivateGateway' THEN vpc_gateways.uuid +WHEN async_job.instance_type = 'Counter' THEN counter.uuid +WHEN async_job.instance_type = 'Condition' THEN conditions.uuid +WHEN async_job.instance_type = 'AutoScalePolicy' THEN autoscale_policies.uuid +WHEN async_job.instance_type = 'AutoScaleVmProfile' THEN autoscale_vmprofiles.uuid +WHEN async_job.instance_type = 'AutoScaleVmGroup' THEN autoscale_vmgroups.uuid +ELSE null +END instance_uuid +from async_job +left join account on async_job.account_id = account.id +left join domain on domain.id = account.domain_id +left join user on async_job.user_id = user.id +left join volumes on async_job.instance_id = volumes.id +left join vm_template on async_job.instance_id = vm_template.id +left join vm_instance on async_job.instance_id = vm_instance.id +left join snapshots on async_job.instance_id = snapshots.id +left join host on async_job.instance_id = host.id +left join storage_pool on async_job.instance_id = storage_pool.id +left join user_ip_address on async_job.instance_id = user_ip_address.id +left join security_group on async_job.instance_id = security_group.id +left join physical_network on async_job.instance_id = physical_network.id +left join physical_network_traffic_types on async_job.instance_id = physical_network_traffic_types.id +left join physical_network_service_providers on async_job.instance_id = physical_network_service_providers.id +left join firewall_rules on async_job.instance_id = firewall_rules.id +left join account acct on async_job.instance_id = acct.id +left join user us on async_job.instance_id = us.id +left join static_routes on async_job.instance_id = static_routes.id +left join vpc_gateways on async_job.instance_id = vpc_gateways.id +left join counter on async_job.instance_id = counter.id +left join conditions on async_job.instance_id = conditions.id +left join autoscale_policies on async_job.instance_id = autoscale_policies.id +left join autoscale_vmprofiles on async_job.instance_id = autoscale_vmprofiles.id +left join autoscale_vmgroups on async_job.instance_id = autoscale_vmgroups.id; + diff --git a/setup/db/create-schema.sql b/setup/db/create-schema.sql index d95984aa69c..ce83e8b1f1f 100755 --- a/setup/db/create-schema.sql +++ b/setup/db/create-schema.sql @@ -2548,771 +2548,3 @@ INSERT INTO `cloud`.`counter` (id, source, name, value,created) VALUES (100,'net 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; - -DROP VIEW IF EXISTS `cloud`.`security_group_view`; -CREATE VIEW security_group_view AS -select -security_group.id id, -security_group.name name, -security_group.description description, -security_group.uuid uuid, -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, -security_group_rule.id rule_id, -security_group_rule.uuid rule_uuid, -security_group_rule.type rule_type, -security_group_rule.start_port rule_start_port, -security_group_rule.end_port rule_end_port, -security_group_rule.protocol rule_protocol, -security_group_rule.allowed_network_id rule_allowed_network_id, -security_group_rule.allowed_ip_cidr rule_allowed_ip_cidr, -security_group_rule.create_status rule_create_status, -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 security_group -left join security_group_rule on security_group.id = security_group_rule.security_group_id -inner join account on security_group.account_id=account.id -inner join domain on security_group.domain_id=domain.id -left join projects on projects.project_account_id = security_group.account_id -left join resource_tags on resource_tags.resource_id = security_group.id and resource_tags.resource_type = "SecurityGroup" -left join async_job on async_job.instance_id = security_group.id and async_job.instance_type = "SecurityGroup" and async_job.job_status = 0; - -DROP VIEW IF EXISTS `cloud`.`resource_tag_view`; -CREATE VIEW resource_tag_view AS -select -resource_tags.id, -resource_tags.uuid, -resource_tags.key, -resource_tags.value, -resource_tags.resource_id, -resource_tags.resource_uuid, -resource_tags.resource_type, -resource_tags.customer, -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 -from resource_tags -inner join account on resource_tags.account_id=account.id -inner join domain on resource_tags.domain_id=domain.id -left join projects on projects.project_account_id = resource_tags.account_id; - - -DROP VIEW IF EXISTS `cloud`.`event_view`; -CREATE VIEW event_view AS -select -event.id, -event.uuid, -event.type, -event.state, -event.description, -event.created, -event.level, -event.parameters, -event.start_id, -eve.uuid start_uuid, -event.user_id, -user.username user_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 -from event -inner join account on event.account_id=account.id -inner join domain on event.domain_id=domain.id -inner join user on event.user_id = user.id -left join projects on projects.project_account_id = event.account_id -left join event eve on event.start_id = eve.id; - -DROP VIEW IF EXISTS `cloud`.`instance_group_view`; -CREATE VIEW instance_group_view AS -select -instance_group.id, -instance_group.uuid, -instance_group.name, -instance_group.removed, -instance_group.created, -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 -from instance_group -inner join account on instance_group.account_id=account.id -inner join domain on account.domain_id=domain.id -left join projects on projects.project_account_id = instance_group.account_id; - -DROP VIEW IF EXISTS `cloud`.`user_view`; -CREATE VIEW user_view AS -select -user.id, -user.uuid, -user.username, -user.password, -user.firstname, -user.lastname, -user.email, -user.state, -user.api_key, -user.secret_key, -user.created, -user.removed, -user.timezone, -user.registration_token, -user.is_registered, -user.incorrect_login_attempts, -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, -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 -inner join account on user.account_id = account.id -inner join domain on account.domain_id=domain.id -left join async_job on async_job.instance_id = user.id and async_job.instance_type = "User" and async_job.job_status = 0; - - - - -DROP VIEW IF EXISTS `cloud`.`project_view`; -CREATE VIEW project_view AS -select -projects.id, -projects.uuid, -projects.name, -projects.display_text, -projects.state, -projects.removed, -projects.created, -account.account_name owner, -pacct.account_id, -domain.id domain_id, -domain.uuid domain_uuid, -domain.name domain_name, -domain.path domain_path, -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 -from projects -inner join domain on projects.domain_id=domain.id -inner join project_account on projects.id = project_account.project_id and project_account.account_role = "Admin" -inner join account on account.id = project_account.account_id -left join resource_tags on resource_tags.resource_id = projects.id and resource_tags.resource_type = "Project" -left join project_account pacct on projects.id = pacct.project_id; - -DROP VIEW IF EXISTS `cloud`.`project_account_view`; -CREATE VIEW project_account_view AS -select -project_account.id, -account.id account_id, -account.uuid account_uuid, -account.account_name, -account.type account_type, -project_account.account_role, -projects.id project_id, -projects.uuid project_uuid, -projects.name project_name, -domain.id domain_id, -domain.uuid domain_uuid, -domain.name domain_name, -domain.path domain_path -from project_account -inner join account on project_account.account_id = account.id -inner join domain on account.domain_id=domain.id -inner join projects on projects.id = project_account.project_id; - -DROP VIEW IF EXISTS `cloud`.`project_invitation_view`; -CREATE VIEW project_invitation_view AS -select -project_invitations.id, -project_invitations.uuid, -project_invitations.email, -project_invitations.created, -project_invitations.state, -projects.id project_id, -projects.uuid project_uuid, -projects.name project_name, -account.id account_id, -account.uuid account_uuid, -account.account_name, -account.type account_type, -domain.id domain_id, -domain.uuid domain_uuid, -domain.name domain_name, -domain.path domain_path -from project_invitations -left join account on project_invitations.account_id = account.id -left join domain on project_invitations.domain_id=domain.id -left join projects on projects.id = project_invitations.project_id; - -DROP VIEW IF EXISTS `cloud`.`host_view`; -CREATE VIEW host_view AS -select -host.id, -host.uuid, -host.name, -host.status, -host.disconnected, -host.type, -host.private_ip_address, -host.version, -host.hypervisor_type, -host.hypervisor_version, -host.capabilities, -host.last_ping, -host.created, -host.removed, -host.resource_state, -host.mgmt_server_id, -host.cpus, -host.speed, -host.ram, -cluster.id cluster_id, -cluster.uuid cluster_uuid, -cluster.name cluster_name, -cluster.cluster_type, -data_center.id data_center_id, -data_center.uuid data_center_uuid, -data_center.name data_center_name, -host_pod_ref.id pod_id, -host_pod_ref.uuid pod_uuid, -host_pod_ref.name pod_name, -host_tags.tag, -guest_os_category.id guest_os_category_id, -guest_os_category.uuid guest_os_category_uuid, -guest_os_category.name guest_os_category_name, -mem_caps.used_capacity memory_used_capacity, -mem_caps.reserved_capacity memory_reserved_capacity, -cpu_caps.used_capacity cpu_used_capacity, -cpu_caps.reserved_capacity cpu_reserved_capacity, -async_job.id job_id, -async_job.uuid job_uuid, -async_job.job_status job_status, -async_job.account_id job_account_id -from host -left join cluster on host.cluster_id = cluster.id -left join data_center on host.data_center_id = data_center.id -left join host_pod_ref on host.pod_id = host_pod_ref.id -left join host_details on host.id = host_details.id and host_details.name = "guest.os.category.id" -left join guest_os_category on guest_os_category.id = CONVERT( host_details.value, UNSIGNED ) -left join host_tags on host_tags.host_id = host.id -left join op_host_capacity mem_caps on host.id = mem_caps.host_id and mem_caps.capacity_type = 0 -left join op_host_capacity cpu_caps on host.id = cpu_caps.host_id and cpu_caps.capacity_type = 1 -left join async_job on async_job.instance_id = host.id and async_job.instance_type = "Host" and async_job.job_status = 0; - -DROP VIEW IF EXISTS `cloud`.`volume_view`; -CREATE VIEW volume_view AS -select -volumes.id, -volumes.uuid, -volumes.name, -volumes.device_id, -volumes.volume_type, -volumes.size, -volumes.created, -volumes.state, -volumes.attached, -volumes.removed, -volumes.pod_id, -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, -data_center.id data_center_id, -data_center.uuid data_center_uuid, -data_center.name data_center_name, -vm_instance.id vm_id, -vm_instance.uuid vm_uuid, -vm_instance.name vm_name, -vm_instance.state vm_state, -vm_instance.vm_type, -user_vm.display_name vm_display_name, -volume_host_ref.size volume_host_size, -volume_host_ref.created volume_host_created, -volume_host_ref.format, -volume_host_ref.download_pct, -volume_host_ref.download_state, -volume_host_ref.error_str, -disk_offering.id disk_offering_id, -disk_offering.uuid disk_offering_uuid, -disk_offering.name disk_offering_name, -disk_offering.display_text disk_offering_display_text, -disk_offering.use_local_storage, -disk_offering.system_use, -storage_pool.id pool_id, -storage_pool.uuid pool_uuid, -storage_pool.name pool_name, -cluster.hypervisor_type, -vm_template.id template_id, -vm_template.uuid template_uuid, -vm_template.extractable, -vm_template.type template_type, -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 volumes -inner join account on volumes.account_id=account.id -inner join domain on volumes.domain_id=domain.id -left join projects on projects.project_account_id = account.id -left join data_center on volumes.data_center_id = data_center.id -left join vm_instance on volumes.instance_id = vm_instance.id -left join user_vm on user_vm.id = vm_instance.id -left join volume_host_ref on volumes.id = volume_host_ref.volume_id and volumes.data_center_id = volume_host_ref.zone_id -left join disk_offering on volumes.disk_offering_id = disk_offering.id -left join storage_pool on volumes.pool_id = storage_pool.id -left join cluster on storage_pool.cluster_id = cluster.id -left join vm_template on volumes.template_id = vm_template.id -left join resource_tags on resource_tags.resource_id = volumes.id and resource_tags.resource_type = "Volume" -left join async_job on async_job.instance_id = volumes.id and async_job.instance_type = "Volume" and async_job.job_status = 0; - -DROP VIEW IF EXISTS `cloud`.`account_netstats_view`; -CREATE VIEW account_netstats_view AS -SELECT account_id, -sum(net_bytes_received)+ sum(current_bytes_received) as bytesReceived, -sum(net_bytes_sent)+ sum(current_bytes_sent) as bytesSent -FROM user_statistics -group by account_id; - - -DROP VIEW IF EXISTS `cloud`.`account_vmstats_view`; -CREATE VIEW account_vmstats_view AS -SELECT account_id, state, count(*) as vmcount -from vm_instance -group by account_id, state; - -DROP VIEW IF EXISTS `cloud`.`free_ip_view`; -CREATE VIEW free_ip_view AS -select count(user_ip_address.id) free_ip -from user_ip_address -inner join vlan on vlan.id = user_ip_address.vlan_db_id and vlan.vlan_type = "VirtualNetwork" -where state = "Free"; - -DROP VIEW IF EXISTS `cloud`.`account_view`; -CREATE VIEW account_view AS -select -account.id, -account.uuid, -account.account_name, -account.type, -account.state, -account.removed, -account.cleanup_needed, -account.network_domain, -domain.id domain_id, -domain.uuid domain_uuid, -domain.name domain_name, -domain.path domain_path, -data_center.id data_center_id, -data_center.uuid data_center_uuid, -data_center.name data_center_name, -account_netstats_view.bytesReceived, -account_netstats_view.bytesSent, -vmlimit.max vmLimit, -vmcount.count vmTotal, -runningvm.vmcount runningVms, -stoppedvm.vmcount stoppedVms, -iplimit.max ipLimit, -ipcount.count ipTotal, -free_ip_view.free_ip ipFree, -volumelimit.max volumeLimit, -volumecount.count volumeTotal, -snapshotlimit.max snapshotLimit, -snapshotcount.count snapshotTotal, -templatelimit.max templateLimit, -templatecount.count templateTotal, -vpclimit.max vpcLimit, -vpccount.count vpcTotal, -projectlimit.max projectLimit, -projectcount.count projectTotal, -networklimit.max networkLimit, -networkcount.count networkTotal, -async_job.id job_id, -async_job.uuid job_uuid, -async_job.job_status job_status, -async_job.account_id job_account_id -from free_ip_view, account -inner join domain on account.domain_id=domain.id -left join data_center on account.default_zone_id = data_center.id -left join account_netstats_view on account.id = account_netstats_view.account_id -left join resource_limit vmlimit on account.id = vmlimit.account_id and vmlimit.type = "user_vm" -left join resource_count vmcount on account.id = vmcount.account_id and vmcount.type = "user_vm" -left join account_vmstats_view runningvm on account.id = runningvm.account_id and runningvm.state = "Running" -left join account_vmstats_view stoppedvm on account.id = stoppedvm.account_id and stoppedvm.state = "Stopped" -left join resource_limit iplimit on account.id = iplimit.account_id and iplimit.type = "public_ip" -left join resource_count ipcount on account.id = ipcount.account_id and ipcount.type = "public_ip" -left join resource_limit volumelimit on account.id = volumelimit.account_id and volumelimit.type = "volume" -left join resource_count volumecount on account.id = volumecount.account_id and volumecount.type = "volume" -left join resource_limit snapshotlimit on account.id = snapshotlimit.account_id and snapshotlimit.type = "snapshot" -left join resource_count snapshotcount on account.id = snapshotcount.account_id and snapshotcount.type = "snapshot" -left join resource_limit templatelimit on account.id = templatelimit.account_id and templatelimit.type = "template" -left join resource_count templatecount on account.id = templatecount.account_id and templatecount.type = "template" -left join resource_limit vpclimit on account.id = vpclimit.account_id and vpclimit.type = "vpc" -left join resource_count vpccount on account.id = vpccount.account_id and vpccount.type = "vpc" -left join resource_limit projectlimit on account.id = projectlimit.account_id and projectlimit.type = "project" -left join resource_count projectcount on account.id = projectcount.account_id and projectcount.type = "project" -left join resource_limit networklimit on account.id = networklimit.account_id and networklimit.type = "network" -left join resource_count networkcount on account.id = networkcount.account_id and networkcount.type = "network" -left join async_job on async_job.instance_id = account.id and async_job.instance_type = "Account" and async_job.job_status = 0; - -DROP VIEW IF EXISTS `cloud`.`async_job_view`; -CREATE VIEW async_job_view AS -select -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, -user.id user_id, -user.uuid user_uuid, -async_job.id, -async_job.uuid, -async_job.job_cmd, -async_job.job_status, -async_job.job_process_status, -async_job.job_result_code, -async_job.job_result, -async_job.created, -async_job.removed, -async_job.instance_type, -async_job.instance_id, -CASE -WHEN async_job.instance_type = 'Volume' THEN volumes.uuid -WHEN async_job.instance_type = 'Template' or async_job.instance_type = 'Iso' THEN vm_template.uuid -WHEN async_job.instance_type = 'VirtualMachine' or async_job.instance_type = 'ConsoleProxy' or async_job.instance_type = 'SystemVm' or async_job.instance_type = 'DomainRouter' THEN vm_instance.uuid -WHEN async_job.instance_type = 'Snapshot' THEN snapshots.uuid -WHEN async_job.instance_type = 'Host' THEN host.uuid -WHEN async_job.instance_type = 'StoragePool' THEN storage_pool.uuid -WHEN async_job.instance_type = 'IpAddress' THEN user_ip_address.uuid -WHEN async_job.instance_type = 'SecurityGroup' THEN security_group.uuid -WHEN async_job.instance_type = 'PhysicalNetwork' THEN physical_network.uuid -WHEN async_job.instance_type = 'TrafficType' THEN physical_network_traffic_types.uuid -WHEN async_job.instance_type = 'PhysicalNetworkServiceProvider' THEN physical_network_service_providers.uuid -WHEN async_job.instance_type = 'FirewallRule' THEN firewall_rules.uuid -WHEN async_job.instance_type = 'Account' THEN acct.uuid -WHEN async_job.instance_type = 'User' THEN us.uuid -WHEN async_job.instance_type = 'StaticRoute' THEN static_routes.uuid -WHEN async_job.instance_type = 'PrivateGateway' THEN vpc_gateways.uuid -WHEN async_job.instance_type = 'Counter' THEN counter.uuid -WHEN async_job.instance_type = 'Condition' THEN conditions.uuid -WHEN async_job.instance_type = 'AutoScalePolicy' THEN autoscale_policies.uuid -WHEN async_job.instance_type = 'AutoScaleVmProfile' THEN autoscale_vmprofiles.uuid -WHEN async_job.instance_type = 'AutoScaleVmGroup' THEN autoscale_vmgroups.uuid -ELSE null -END instance_uuid -from async_job -left join account on async_job.account_id = account.id -left join domain on domain.id = account.domain_id -left join user on async_job.user_id = user.id -left join volumes on async_job.instance_id = volumes.id -left join vm_template on async_job.instance_id = vm_template.id -left join vm_instance on async_job.instance_id = vm_instance.id -left join snapshots on async_job.instance_id = snapshots.id -left join host on async_job.instance_id = host.id -left join storage_pool on async_job.instance_id = storage_pool.id -left join user_ip_address on async_job.instance_id = user_ip_address.id -left join security_group on async_job.instance_id = security_group.id -left join physical_network on async_job.instance_id = physical_network.id -left join physical_network_traffic_types on async_job.instance_id = physical_network_traffic_types.id -left join physical_network_service_providers on async_job.instance_id = physical_network_service_providers.id -left join firewall_rules on async_job.instance_id = firewall_rules.id -left join account acct on async_job.instance_id = acct.id -left join user us on async_job.instance_id = us.id -left join static_routes on async_job.instance_id = static_routes.id -left join vpc_gateways on async_job.instance_id = vpc_gateways.id -left join counter on async_job.instance_id = counter.id -left join conditions on async_job.instance_id = conditions.id -left join autoscale_policies on async_job.instance_id = autoscale_policies.id -left join autoscale_vmprofiles on async_job.instance_id = autoscale_vmprofiles.id -left join autoscale_vmgroups on async_job.instance_id = autoscale_vmgroups.id; - diff --git a/setup/db/deploy-db-dev.sh b/setup/db/deploy-db-dev.sh index 29ec4db6050..a40e278b002 100755 --- a/setup/db/deploy-db-dev.sh +++ b/setup/db/deploy-db-dev.sh @@ -55,6 +55,11 @@ if [ ! -f create-index-fk.sql ]; then exit 6; fi +if [ ! -f create-schema-view.sql ]; then + printf "Error: Unable to find create-schema-view.sql\n" + exit 7 +fi + PATHSEP=':' if [[ $OSTYPE == "cygwin" ]] ; then export CATALINA_HOME=`cygpath -m $CATALINA_HOME` @@ -100,6 +105,12 @@ if [ $? -ne 0 ]; then exit 11 fi +mysql --user=cloud --password=cloud cloud < create-schema-view.sql +if [ $? -ne 0 ]; then + printf "Error: Cannot execute create-schema-view.sql\n" + exit 11 +fi + CP=./ CP=${CP}$PATHSEP$CATALINA_HOME/conf diff --git a/setup/db/deploy-db-simulator.sh b/setup/db/deploy-db-simulator.sh index 4f8c14ebfe5..c918df43009 100644 --- a/setup/db/deploy-db-simulator.sh +++ b/setup/db/deploy-db-simulator.sh @@ -55,6 +55,12 @@ if [ ! -f create-index-fk.sql ]; then exit 6; fi +if [ ! -f create-schema-view.sql ]; then + printf "Error: Unable to find create-schema-view.sql\n" + exit 7 +fi + + PATHSEP=':' if [[ $OSTYPE == "cygwin" ]] ; then export CATALINA_HOME=`cygpath -m $CATALINA_HOME` @@ -103,6 +109,12 @@ if [ $? -ne 0 ]; then exit 11 fi +mysql --user=cloud --password=cloud cloud < create-schema-view.sql +if [ $? -ne 0 ]; then + printf "Error: Cannot execute create-schema-view.sql\n" + exit 11 +fi + mysql --user=cloud --password=cloud cloud < create-schema-simulator.sql if [ $? -ne 0 ]; then printf "Error: Cannot execute create-schema-simulator.sql\n" From 65b274d09bdaf05ea277a5eeabe76c25093f3c8a Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Thu, 3 Jan 2013 17:01:46 -0800 Subject: [PATCH 244/421] api: Fix incorrect annotation for list template cmd Signed-off-by: Rohit Yadav --- .../cloudstack/api/command/user/template/ListTemplatesCmd.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/api/src/org/apache/cloudstack/api/command/user/template/ListTemplatesCmd.java b/api/src/org/apache/cloudstack/api/command/user/template/ListTemplatesCmd.java index 90ca8bc7c0e..a1464ccdc4e 100644 --- a/api/src/org/apache/cloudstack/api/command/user/template/ListTemplatesCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/template/ListTemplatesCmd.java @@ -50,7 +50,7 @@ public class ListTemplatesCmd extends BaseListTaggedResourcesCmd { @Parameter(name=ApiConstants.HYPERVISOR, type=CommandType.STRING, description="the hypervisor for which to restrict the search") private String hypervisor; - @Parameter(name=ApiConstants.ID, type=CommandType.UUID, entityType=TemplateInfo.class, + @Parameter(name=ApiConstants.ID, type=CommandType.UUID, entityType=TemplateResponse.class, description="the template ID") private Long id; From 223bfc07c31a0952cd85d017611c3f0dae28f74a Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Thu, 3 Jan 2013 17:16:13 -0800 Subject: [PATCH 245/421] api: Fix Parameter annotation in DeleteServiceOfferingCmd.java Signed-off-by: Rohit Yadav --- .../api/command/admin/offering/DeleteServiceOfferingCmd.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/api/src/org/apache/cloudstack/api/command/admin/offering/DeleteServiceOfferingCmd.java b/api/src/org/apache/cloudstack/api/command/admin/offering/DeleteServiceOfferingCmd.java index d5debdfcccd..a8cab4e6fcf 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/offering/DeleteServiceOfferingCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/offering/DeleteServiceOfferingCmd.java @@ -16,8 +16,8 @@ // under the License. package org.apache.cloudstack.api.command.admin.offering; +import com.cloud.offering.DiskOffering; import org.apache.cloudstack.api.*; -import org.apache.cloudstack.api.response.DomainResponse; import org.apache.log4j.Logger; import org.apache.cloudstack.api.APICommand; @@ -33,7 +33,7 @@ public class DeleteServiceOfferingCmd extends BaseCmd{ //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - @Parameter(name=ApiConstants.ID, type=CommandType.UUID, entityType= DomainResponse.class, + @Parameter(name=ApiConstants.ID, type=CommandType.UUID, entityType=DiskOffering.class, required=true, description="the ID of the service offering") private Long id; From 98d5719b57e34b5852fb9e27ea939361a75a2099 Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Thu, 3 Jan 2013 17:17:21 -0800 Subject: [PATCH 246/421] server: Make ApiDispatcher backward compatible to not throw error on incorrect params Incorrect params are silently ignored in 4.0 and before. The fix would log the error in debug log, but will continue processing. In case of an issue with uuid or param an empty response is sent, for ex. in case of deleted entities as well. Signed-off-by: Rohit Yadav --- server/src/com/cloud/api/ApiDispatcher.java | 13 +++---------- 1 file changed, 3 insertions(+), 10 deletions(-) diff --git a/server/src/com/cloud/api/ApiDispatcher.java b/server/src/com/cloud/api/ApiDispatcher.java index b81e070f613..0f7f0929a55 100755 --- a/server/src/com/cloud/api/ApiDispatcher.java +++ b/server/src/com/cloud/api/ApiDispatcher.java @@ -582,6 +582,9 @@ public class ApiDispatcher { if (internalId != null) break; } + if (internalId == null && s_logger.isDebugEnabled()) { + s_logger.debug("Object entity with uuid=" + uuid + " does not exist in the database."); + } return internalId; } @@ -655,11 +658,6 @@ public class ApiDispatcher { if (token.isEmpty()) break; Long internalId = translateUuidToInternalId(token, annotation); - // If id is null, entity with the uuid was not found, throw exception - if (internalId == null) { - throw new InvalidParameterValueException("No entity with " + field.getName() + "(uuid)=" - + paramObj.toString() + " was found in the database."); - } listParam.add(internalId); break; case LONG: { @@ -679,11 +677,6 @@ public class ApiDispatcher { if (paramObj.toString().isEmpty()) break; Long internalId = translateUuidToInternalId(paramObj.toString(), annotation); - // If id is null, entity with the uuid was not found, throw exception - if (internalId == null) { - throw new InvalidParameterValueException("Object entity with " + field.getName() + "(uuid)=" - + paramObj.toString() + " was not found."); - } field.set(cmdObj, internalId); break; case LONG: From 6fa8c708eeed0b511780b900b7869385091cac1d Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Thu, 3 Jan 2013 22:16:51 -0800 Subject: [PATCH 247/421] api: Fix service and disk offering annotations Signed-off-by: Rohit Yadav --- api/src/com/cloud/offering/ServiceOffering.java | 9 ++++----- .../command/admin/offering/DeleteDiskOfferingCmd.java | 4 ++-- .../command/admin/offering/DeleteServiceOfferingCmd.java | 4 ++-- .../command/admin/offering/UpdateDiskOfferingCmd.java | 2 +- .../command/admin/offering/UpdateServiceOfferingCmd.java | 3 +-- .../command/user/offering/ListServiceOfferingsCmd.java | 3 +-- 6 files changed, 11 insertions(+), 14 deletions(-) diff --git a/api/src/com/cloud/offering/ServiceOffering.java b/api/src/com/cloud/offering/ServiceOffering.java index 84950c65a63..d9393be38cf 100755 --- a/api/src/com/cloud/offering/ServiceOffering.java +++ b/api/src/com/cloud/offering/ServiceOffering.java @@ -16,12 +16,15 @@ // under the License. package com.cloud.offering; +import org.apache.cloudstack.api.Identity; +import org.apache.cloudstack.api.InternalIdentity; + import java.util.Date; /** * offered. */ -public interface ServiceOffering { +public interface ServiceOffering extends InternalIdentity, Identity { public static final String consoleProxyDefaultOffUniqueName = "Cloud.com-ConsoleProxy"; public static final String ssvmDefaultOffUniqueName = "Cloud.com-SecondaryStorage"; public static final String routerDefaultOffUniqueName = "Cloud.Com-SoftwareRouter"; @@ -32,10 +35,6 @@ public interface ServiceOffering { shared } - long getId(); - - String getUuid(); - String getDisplayText(); Date getCreated(); diff --git a/api/src/org/apache/cloudstack/api/command/admin/offering/DeleteDiskOfferingCmd.java b/api/src/org/apache/cloudstack/api/command/admin/offering/DeleteDiskOfferingCmd.java index 2126adadfca..85e034f6191 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/offering/DeleteDiskOfferingCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/offering/DeleteDiskOfferingCmd.java @@ -16,7 +16,7 @@ // under the License. package org.apache.cloudstack.api.command.admin.offering; -import com.cloud.offering.DiskOffering; +import org.apache.cloudstack.api.response.DiskOfferingResponse; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; @@ -36,7 +36,7 @@ public class DeleteDiskOfferingCmd extends BaseCmd { //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - @Parameter(name=ApiConstants.ID, type=CommandType.UUID, entityType=DiskOffering.class, + @Parameter(name=ApiConstants.ID, type=CommandType.UUID, entityType=DiskOfferingResponse.class, required=true, description="ID of the disk offering") private Long id; diff --git a/api/src/org/apache/cloudstack/api/command/admin/offering/DeleteServiceOfferingCmd.java b/api/src/org/apache/cloudstack/api/command/admin/offering/DeleteServiceOfferingCmd.java index a8cab4e6fcf..d1ea4de0504 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/offering/DeleteServiceOfferingCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/offering/DeleteServiceOfferingCmd.java @@ -16,8 +16,8 @@ // under the License. package org.apache.cloudstack.api.command.admin.offering; -import com.cloud.offering.DiskOffering; import org.apache.cloudstack.api.*; +import org.apache.cloudstack.api.response.ServiceOfferingResponse; import org.apache.log4j.Logger; import org.apache.cloudstack.api.APICommand; @@ -33,7 +33,7 @@ public class DeleteServiceOfferingCmd extends BaseCmd{ //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - @Parameter(name=ApiConstants.ID, type=CommandType.UUID, entityType=DiskOffering.class, + @Parameter(name=ApiConstants.ID, type=CommandType.UUID, entityType=ServiceOfferingResponse.class, required=true, description="the ID of the service offering") private Long id; diff --git a/api/src/org/apache/cloudstack/api/command/admin/offering/UpdateDiskOfferingCmd.java b/api/src/org/apache/cloudstack/api/command/admin/offering/UpdateDiskOfferingCmd.java index a9cd2ec883e..8db731d3b31 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/offering/UpdateDiskOfferingCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/offering/UpdateDiskOfferingCmd.java @@ -38,7 +38,7 @@ public class UpdateDiskOfferingCmd extends BaseCmd{ @Parameter(name=ApiConstants.DISPLAY_TEXT, type=CommandType.STRING, description="updates alternate display text of the disk offering with this value", length=4096) private String displayText; - @Parameter(name=ApiConstants.ID, type=CommandType.UUID, entityType=DiskOffering.class, + @Parameter(name=ApiConstants.ID, type=CommandType.UUID, entityType=DiskOfferingResponse.class, required=true, description="ID of the disk offering") private Long id; diff --git a/api/src/org/apache/cloudstack/api/command/admin/offering/UpdateServiceOfferingCmd.java b/api/src/org/apache/cloudstack/api/command/admin/offering/UpdateServiceOfferingCmd.java index d8f3d9742a7..38220b90673 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/offering/UpdateServiceOfferingCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/offering/UpdateServiceOfferingCmd.java @@ -16,7 +16,6 @@ // under the License. package org.apache.cloudstack.api.command.admin.offering; -import com.cloud.offering.DiskOffering; import org.apache.cloudstack.api.*; import org.apache.log4j.Logger; @@ -33,7 +32,7 @@ public class UpdateServiceOfferingCmd extends BaseCmd { ///////////////////////////////////////////////////// //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - @Parameter(name=ApiConstants.ID, type=CommandType.UUID, entityType= DiskOffering.class, + @Parameter(name=ApiConstants.ID, type=CommandType.UUID, entityType=ServiceOfferingResponse.class, required=true, description="the ID of the service offering to be updated") private Long id; diff --git a/api/src/org/apache/cloudstack/api/command/user/offering/ListServiceOfferingsCmd.java b/api/src/org/apache/cloudstack/api/command/user/offering/ListServiceOfferingsCmd.java index b599aa55156..9fad577d8ad 100644 --- a/api/src/org/apache/cloudstack/api/command/user/offering/ListServiceOfferingsCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/offering/ListServiceOfferingsCmd.java @@ -26,7 +26,6 @@ import org.apache.cloudstack.api.BaseListCmd; import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.response.DomainResponse; -import org.apache.cloudstack.api.response.DiskOfferingResponse; import org.apache.cloudstack.api.response.ListResponse; import org.apache.cloudstack.api.response.ServiceOfferingResponse; import org.apache.cloudstack.api.response.UserVmResponse; @@ -42,7 +41,7 @@ public class ListServiceOfferingsCmd extends BaseListCmd { //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - @Parameter(name=ApiConstants.ID, type=CommandType.UUID, entityType = DiskOfferingResponse.class, + @Parameter(name=ApiConstants.ID, type=CommandType.UUID, entityType = ServiceOfferingResponse.class, description="ID of the service offering") private Long id; From 6929bd947348c3912c19a260428c063bb0aea0ea Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Thu, 3 Jan 2013 22:18:27 -0800 Subject: [PATCH 248/421] server: Don't silently ignore uuid param translation for required param in case they fail Signed-off-by: Rohit Yadav --- server/src/com/cloud/api/ApiDispatcher.java | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/server/src/com/cloud/api/ApiDispatcher.java b/server/src/com/cloud/api/ApiDispatcher.java index 0f7f0929a55..9ae048ece3a 100755 --- a/server/src/com/cloud/api/ApiDispatcher.java +++ b/server/src/com/cloud/api/ApiDispatcher.java @@ -582,8 +582,14 @@ public class ApiDispatcher { if (internalId != null) break; } - if (internalId == null && s_logger.isDebugEnabled()) { - s_logger.debug("Object entity with uuid=" + uuid + " does not exist in the database."); + if (internalId == null) { + if (s_logger.isDebugEnabled()) { + s_logger.debug("Object entity with uuid=" + uuid + " does not exist in the database."); + } + if (annotation.required()) { + throw new InvalidParameterValueException("Invalid parameter with uuid=" + uuid + + ". Entity not found, or an annotation bug."); + } } return internalId; } From 3e6435b6e8f4c835fd2956737de958adc63e83a9 Mon Sep 17 00:00:00 2001 From: Pranav Saxena Date: Fri, 4 Jan 2013 18:22:09 +0530 Subject: [PATCH 249/421] CLOUDSTACK-720:Fail to load a png image when accessing the web console --- ui/css/cloudstack3.css | 1 - 1 file changed, 1 deletion(-) diff --git a/ui/css/cloudstack3.css b/ui/css/cloudstack3.css index 6156f47be3a..e1c9c86a04f 100644 --- a/ui/css/cloudstack3.css +++ b/ui/css/cloudstack3.css @@ -2062,7 +2062,6 @@ div.detail-group.actions td { float: right; margin-top: 8px; display: inline-block; - background: url(../images/citrix-logo-darkbg.png) no-repeat 97% 8px; padding: 0 96px 0 0; } From 7240204a507cce8143c248e6aa635da6dad60ed0 Mon Sep 17 00:00:00 2001 From: Wido den Hollander Date: Fri, 4 Jan 2013 14:31:25 +0100 Subject: [PATCH 250/421] Pass on the destination host in StartCommand I added this in commit bc94948e0604e0e5931759be3c3d3155e84686f6 to be able to bind the VNC on KVM on the Private IP Address of the Hypervisor. This got (accidentally) reverted in commit 110903a91a21c04b931a26354a04bd7f534ba050 breaking this behaviour with KVM. By passing the destination host again in StartCommand we are able to bind the VNC to the private IP address of the hypervisor. This makes sure the VNC is not open for the world and users don't have to firewall these ports, nor do they have to change "vnc_listen" in their qemu.conf libvirt settings. --- server/src/com/cloud/vm/VirtualMachineManagerImpl.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server/src/com/cloud/vm/VirtualMachineManagerImpl.java b/server/src/com/cloud/vm/VirtualMachineManagerImpl.java index 9230f4ae729..4d94fc57d02 100755 --- a/server/src/com/cloud/vm/VirtualMachineManagerImpl.java +++ b/server/src/com/cloud/vm/VirtualMachineManagerImpl.java @@ -764,7 +764,7 @@ public class VirtualMachineManagerImpl implements VirtualMachineManager, Listene VirtualMachineTO vmTO = hvGuru.implement(vmProfile); cmds = new Commands(OnError.Stop); - cmds.addCommand(new StartCommand(vmTO)); + cmds.addCommand(new StartCommand(vmTO, dest.getHost())); vmGuru.finalizeDeployment(cmds, vmProfile, dest, ctx); From 0055d80211def39d3e174d5cad7e1b3839c19b15 Mon Sep 17 00:00:00 2001 From: Noa Resare Date: Fri, 4 Jan 2013 12:20:06 -0500 Subject: [PATCH 251/421] CLOUDSTACK-771: maven: add mysql version reference to enable non-snapshot builds If you update your build to build a version with a name not ending in -SNAPSHOT, you are required to declare versions on all your depdendencies. There is already a cs.mysql.version property, this patch makes sure it is used where appropriate. Signed-off-by: Chip Childers --- awsapi/pom.xml | 1 + client/pom.xml | 1 + server/pom.xml | 1 + utils/pom.xml | 1 + 4 files changed, 4 insertions(+) diff --git a/awsapi/pom.xml b/awsapi/pom.xml index 06c9d7e058a..3ab595211d4 100644 --- a/awsapi/pom.xml +++ b/awsapi/pom.xml @@ -266,6 +266,7 @@ mysql mysql-connector-java + ${cs.mysql.version} runtime diff --git a/client/pom.xml b/client/pom.xml index 77077066f9a..3d126984d3f 100644 --- a/client/pom.xml +++ b/client/pom.xml @@ -104,6 +104,7 @@ mysql mysql-connector-java + ${cs.mysql.version} runtime diff --git a/server/pom.xml b/server/pom.xml index 5ae926f9111..f8a1ae0aac2 100644 --- a/server/pom.xml +++ b/server/pom.xml @@ -45,6 +45,7 @@ mysql mysql-connector-java + ${cs.mysql.version} provided diff --git a/utils/pom.xml b/utils/pom.xml index 1ee8b7e50e3..0b3392d3aed 100644 --- a/utils/pom.xml +++ b/utils/pom.xml @@ -132,6 +132,7 @@ mysql mysql-connector-java + ${cs.mysql.version} test From 22e3454ae4a6bffbd81340d09dbb23a973ad72ec Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Fri, 4 Jan 2013 13:08:29 -0800 Subject: [PATCH 252/421] developer: Load create-schema-view sql for developer deploydb profile The fix would run create-schema-view.sql which would setup db table views. Signed-off-by: Rohit Yadav --- developer/pom.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/developer/pom.xml b/developer/pom.xml index b782a595f3a..684eb0cf683 100644 --- a/developer/pom.xml +++ b/developer/pom.xml @@ -289,6 +289,7 @@ ${basedir}/target/db/create-schema.sql + ${basedir}/target/db/create-schema-view.sql ${basedir}/target/db/create-schema-premium.sql ${basedir}/target/db/templates.sql ${basedir}/target/db/create-index-fk.sql From 0428b30a5a1cf079a2afac81aedc37dd2415de88 Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Fri, 4 Jan 2013 14:35:05 -0800 Subject: [PATCH 253/421] Fix reflections cmd class loading in ApiServer Signed-off-by: Rohit Yadav --- server/src/com/cloud/api/ApiServer.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/server/src/com/cloud/api/ApiServer.java b/server/src/com/cloud/api/ApiServer.java index b853094dd6c..223edcc4f4d 100755 --- a/server/src/com/cloud/api/ApiServer.java +++ b/server/src/com/cloud/api/ApiServer.java @@ -201,14 +201,14 @@ public class ApiServer implements HttpRequestHandler { } // Populate api name and cmd class mappings - Reflections reflections = new Reflections("org.apache.cloudstack"); + Reflections reflections = new Reflections("org.apache.cloudstack.api"); Set> cmdClasses = reflections.getTypesAnnotatedWith(APICommand.class); reflections = new Reflections("com.cloud.api"); cmdClasses.addAll(reflections.getTypesAnnotatedWith(APICommand.class)); for(Class cmdClass: cmdClasses) { String apiName = cmdClass.getAnnotation(APICommand.class).name(); if (_apiNameCmdClassMap.containsKey(apiName)) { - s_logger.error("Cmd class " + cmdClass.getName() + " conflicts on apiname" + apiName); + s_logger.error("API Cmd class " + cmdClass.getName() + " has non-unique apiname" + apiName); } _apiNameCmdClassMap.put(apiName, cmdClass); } From 569ca6d7a360196553f598836d8405f6b48bfc2e Mon Sep 17 00:00:00 2001 From: Pranav Saxena Date: Sat, 5 Jan 2013 04:19:48 +0530 Subject: [PATCH 254/421] CLOUDSTACK-725:UI-Error when the Egress rules tab is selected for a network:Hiding the egress rules tab --- ui/scripts/network.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ui/scripts/network.js b/ui/scripts/network.js index c8979d05c48..4103c3e2b6e 100755 --- a/ui/scripts/network.js +++ b/ui/scripts/network.js @@ -867,9 +867,9 @@ hiddenTabs.push("addloadBalancer"); } - if (isVPC || isAdvancedSGZone || hasSRXFirewall) { + // if (isVPC || isAdvancedSGZone || hasSRXFirewall) { hiddenTabs.push('egressRules'); - } + // } return hiddenTabs; }, From 9a66beb6589634ae4e0792706a332e447e6ba6dc Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Fri, 4 Jan 2013 14:51:08 -0800 Subject: [PATCH 255/421] CLOUDSTACK-717: Fix response json handling in cloudmonkey - Fixes response handling - Sorts alphabetically, count and id are on top if available - Fix colors Signed-off-by: Rohit Yadav --- tools/cli/cloudmonkey/cloudmonkey.py | 23 ++++++++++++++--------- 1 file changed, 14 insertions(+), 9 deletions(-) diff --git a/tools/cli/cloudmonkey/cloudmonkey.py b/tools/cli/cloudmonkey/cloudmonkey.py index edb62ccc801..e1fc63eeb83 100644 --- a/tools/cli/cloudmonkey/cloudmonkey.py +++ b/tools/cli/cloudmonkey/cloudmonkey.py @@ -160,11 +160,11 @@ class CloudMonkeyShell(cmd.Cmd, object): elif 'type' in arg: print colored.green(arg), elif 'state' in arg or 'count' in arg: - print colored.yellow(arg), - elif 'id =' in arg: - print colored.cyan(arg), - elif 'name =' in arg: print colored.magenta(arg), + elif 'id =' in arg: + print colored.yellow(arg), + elif 'name =' in arg: + print colored.cyan(arg), else: print arg, else: @@ -203,7 +203,8 @@ class CloudMonkeyShell(cmd.Cmd, object): print printer def print_result_as_dict(result, result_filter=None): - for key in result.keys(): + for key in sorted(result.keys(), + key=lambda x: x!='id' and x!='count' and x): if not (isinstance(result[key], list) or isinstance(result[key], dict)): self.print_shell("%s = %s" % (key, result[key])) @@ -268,7 +269,11 @@ class CloudMonkeyShell(cmd.Cmd, object): while timeout > 0: response = process_json(conn.make_request_with_auth(command, requests)) - result = response[response.keys()[0]] + responsekeys = filter(lambda x: 'response' in x, + response.keys()) + if len(responsekeys) < 1: + continue + result = response[responsekeys[0]] jobstatus = result['jobstatus'] if jobstatus == 2: jobresult = result["jobresult"] @@ -346,9 +351,9 @@ class CloudMonkeyShell(cmd.Cmd, object): if result is None: return try: - # Response is in the key "apiname+response" (lowercase) - self.print_result(result[api_name.lower() + 'response'], - field_filter) + responsekeys = filter(lambda x: 'response' in x, result.keys()) + for responsekey in responsekeys: + self.print_result(result[responsekey], field_filter) print except Exception as e: self.print_shell("🙈 Error on parsing and printing", e) From c7563cb7bd5f813332cfe7bbdf96bc235d56c1ff Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Fri, 4 Jan 2013 15:15:21 -0800 Subject: [PATCH 256/421] cli: Show progress during polling for async jobs If asyncblock is set to true, prints dots as polling requests are made. When result is obtained, dots are wiped and result is printed. Signed-off-by: Rohit Yadav --- tools/cli/cloudmonkey/cloudmonkey.py | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/tools/cli/cloudmonkey/cloudmonkey.py b/tools/cli/cloudmonkey/cloudmonkey.py index e1fc63eeb83..3bc87169f63 100644 --- a/tools/cli/cloudmonkey/cloudmonkey.py +++ b/tools/cli/cloudmonkey/cloudmonkey.py @@ -266,7 +266,11 @@ class CloudMonkeyShell(cmd.Cmd, object): command = "queryAsyncJobResult" requests = {'jobid': jobId} timeout = int(self.timeout) + pollperiod = 3 while timeout > 0: + progress = int((int(self.timeout) - timeout) / pollperiod ) + 1 + print '\r' + '.' * progress, + sys.stdout.flush() response = process_json(conn.make_request_with_auth(command, requests)) responsekeys = filter(lambda x: 'response' in x, @@ -282,9 +286,10 @@ class CloudMonkeyShell(cmd.Cmd, object): jobresult["errortext"]) return elif jobstatus == 1: + print '\r', return response - time.sleep(4) - timeout = timeout - 4 + time.sleep(pollperiod) + timeout = timeout - pollperiod logger.debug("job: %s to timeout in %ds" % (jobId, timeout)) self.print_shell("Error:", "Async query timeout for jobid=", jobId) From a2f8f42575e99303ccade4adc3d5fc12a4c0b21a Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Fri, 4 Jan 2013 16:33:40 -0800 Subject: [PATCH 257/421] nicira-nvp: Annotate nvp plugin, remove IdentityMapper Signed-off-by: Rohit Yadav --- .../cloud/api/commands/DeleteNiciraNvpDeviceCmd.java | 5 +++-- .../api/commands/ListNiciraNvpDeviceNetworksCmd.java | 6 +++--- .../cloud/api/commands/ListNiciraNvpDevicesCmd.java | 11 ++++++++--- .../cloud/api/response/NiciraNvpDeviceResponse.java | 3 +++ 4 files changed, 17 insertions(+), 8 deletions(-) diff --git a/plugins/network-elements/nicira-nvp/src/com/cloud/api/commands/DeleteNiciraNvpDeviceCmd.java b/plugins/network-elements/nicira-nvp/src/com/cloud/api/commands/DeleteNiciraNvpDeviceCmd.java index 69f6eaf1375..b3cfa8aba16 100644 --- a/plugins/network-elements/nicira-nvp/src/com/cloud/api/commands/DeleteNiciraNvpDeviceCmd.java +++ b/plugins/network-elements/nicira-nvp/src/com/cloud/api/commands/DeleteNiciraNvpDeviceCmd.java @@ -16,6 +16,7 @@ // under the License. package com.cloud.api.commands; +import com.cloud.api.response.NiciraNvpDeviceResponse; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; @@ -47,8 +48,8 @@ public class DeleteNiciraNvpDeviceCmd extends BaseAsyncCmd { //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - @IdentityMapper(entityTableName="external_nicira_nvp_devices") - @Parameter(name=ApiConstants.NICIRA_NVP_DEVICE_ID, type=CommandType.LONG, required=true, description="Nicira device ID") + @Parameter(name=ApiConstants.NICIRA_NVP_DEVICE_ID, type=CommandType.UUID, entityType = NiciraNvpDeviceResponse.class, + required=true, description="Nicira device ID") private Long niciraNvpDeviceId; ///////////////////////////////////////////////////// diff --git a/plugins/network-elements/nicira-nvp/src/com/cloud/api/commands/ListNiciraNvpDeviceNetworksCmd.java b/plugins/network-elements/nicira-nvp/src/com/cloud/api/commands/ListNiciraNvpDeviceNetworksCmd.java index 29931b2733e..bea417d3687 100644 --- a/plugins/network-elements/nicira-nvp/src/com/cloud/api/commands/ListNiciraNvpDeviceNetworksCmd.java +++ b/plugins/network-elements/nicira-nvp/src/com/cloud/api/commands/ListNiciraNvpDeviceNetworksCmd.java @@ -19,12 +19,12 @@ package com.cloud.api.commands; import java.util.ArrayList; import java.util.List; +import com.cloud.api.response.NiciraNvpDeviceResponse; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.BaseListCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.PlugService; @@ -51,8 +51,8 @@ public class ListNiciraNvpDeviceNetworksCmd extends BaseListCmd { //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - @IdentityMapper(entityTableName="external_nicira_nvp_devices") - @Parameter(name=ApiConstants.NICIRA_NVP_DEVICE_ID, type=CommandType.LONG, required = true, description="nicira nvp device ID") + @Parameter(name=ApiConstants.NICIRA_NVP_DEVICE_ID, type=CommandType.UUID, entityType = NiciraNvpDeviceResponse.class, + required = true, description="nicira nvp device ID") private Long niciraNvpDeviceId; ///////////////////////////////////////////////////// diff --git a/plugins/network-elements/nicira-nvp/src/com/cloud/api/commands/ListNiciraNvpDevicesCmd.java b/plugins/network-elements/nicira-nvp/src/com/cloud/api/commands/ListNiciraNvpDevicesCmd.java index 7311b91a658..04aab2a296a 100644 --- a/plugins/network-elements/nicira-nvp/src/com/cloud/api/commands/ListNiciraNvpDevicesCmd.java +++ b/plugins/network-elements/nicira-nvp/src/com/cloud/api/commands/ListNiciraNvpDevicesCmd.java @@ -19,7 +19,12 @@ package com.cloud.api.commands; import java.util.ArrayList; import java.util.List; -import org.apache.cloudstack.api.*; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.BaseListCmd; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.PlugService; +import org.apache.cloudstack.api.ServerApiException; import org.apache.cloudstack.api.response.PhysicalNetworkResponse; import org.apache.log4j.Logger; @@ -49,8 +54,8 @@ public class ListNiciraNvpDevicesCmd extends BaseListCmd { description="the Physical Network ID") private Long physicalNetworkId; - @IdentityMapper(entityTableName="external_nicira_nvp_devices") - @Parameter(name=ApiConstants.NICIRA_NVP_DEVICE_ID, type=CommandType.LONG, description="nicira nvp device ID") + @Parameter(name=ApiConstants.NICIRA_NVP_DEVICE_ID, type=CommandType.UUID, entityType = NiciraNvpDeviceResponse.class, + description="nicira nvp device ID") private Long niciraNvpDeviceId; ///////////////////////////////////////////////////// diff --git a/plugins/network-elements/nicira-nvp/src/com/cloud/api/response/NiciraNvpDeviceResponse.java b/plugins/network-elements/nicira-nvp/src/com/cloud/api/response/NiciraNvpDeviceResponse.java index 612d15b7bbe..097ecd975b2 100644 --- a/plugins/network-elements/nicira-nvp/src/com/cloud/api/response/NiciraNvpDeviceResponse.java +++ b/plugins/network-elements/nicira-nvp/src/com/cloud/api/response/NiciraNvpDeviceResponse.java @@ -16,11 +16,14 @@ // under the License. package com.cloud.api.response; +import com.cloud.network.NiciraNvpDeviceVO; import org.apache.cloudstack.api.ApiConstants; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; import org.apache.cloudstack.api.BaseResponse; +import org.apache.cloudstack.api.EntityReference; +@EntityReference(value=NiciraNvpDeviceVO.class) public class NiciraNvpDeviceResponse extends BaseResponse { @SerializedName(ApiConstants.NICIRA_NVP_DEVICE_ID) @Param(description="device id of the Nicire Nvp") private String id; From 4cf0b05a0be0ccedc74d691c77d9ed07e36669b1 Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Fri, 4 Jan 2013 16:42:28 -0800 Subject: [PATCH 258/421] vmware: Annotate cisco related apis, remove IdentityMapper Signed-off-by: Rohit Yadav --- .../src/com/cloud/api/commands/DeleteCiscoNexusVSMCmd.java | 6 +++--- .../src/com/cloud/api/commands/DisableCiscoNexusVSMCmd.java | 4 ++-- .../src/com/cloud/api/commands/EnableCiscoNexusVSMCmd.java | 4 ++-- .../src/com/cloud/api/response/CiscoNexusVSMResponse.java | 4 ++++ 4 files changed, 11 insertions(+), 7 deletions(-) diff --git a/plugins/hypervisors/vmware/src/com/cloud/api/commands/DeleteCiscoNexusVSMCmd.java b/plugins/hypervisors/vmware/src/com/cloud/api/commands/DeleteCiscoNexusVSMCmd.java index c050f124cf6..3e45ce2a084 100644 --- a/plugins/hypervisors/vmware/src/com/cloud/api/commands/DeleteCiscoNexusVSMCmd.java +++ b/plugins/hypervisors/vmware/src/com/cloud/api/commands/DeleteCiscoNexusVSMCmd.java @@ -21,12 +21,12 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseAsyncCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.PlugService; import org.apache.cloudstack.api.ServerApiException; import org.apache.cloudstack.api.response.SuccessResponse; +import com.cloud.api.response.CiscoNexusVSMResponse; import com.cloud.event.EventTypes; import com.cloud.exception.ConcurrentOperationException; import com.cloud.exception.InsufficientCapacityException; @@ -46,8 +46,8 @@ public class DeleteCiscoNexusVSMCmd extends BaseAsyncCmd { //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - @IdentityMapper(entityTableName="virtual_supervisor_module") - @Parameter(name=ApiConstants.ID, type=CommandType.LONG, required=true, description="Id of the Cisco Nexus 1000v VSM device to be deleted") + @Parameter(name=ApiConstants.ID, type=CommandType.UUID, entityType = CiscoNexusVSMResponse.class, + required=true, description="Id of the Cisco Nexus 1000v VSM device to be deleted") private Long id; ///////////////////////////////////////////////////// diff --git a/plugins/hypervisors/vmware/src/com/cloud/api/commands/DisableCiscoNexusVSMCmd.java b/plugins/hypervisors/vmware/src/com/cloud/api/commands/DisableCiscoNexusVSMCmd.java index cdeb85d70a9..1f1ff650d0c 100644 --- a/plugins/hypervisors/vmware/src/com/cloud/api/commands/DisableCiscoNexusVSMCmd.java +++ b/plugins/hypervisors/vmware/src/com/cloud/api/commands/DisableCiscoNexusVSMCmd.java @@ -47,8 +47,8 @@ public class DisableCiscoNexusVSMCmd extends BaseAsyncCmd { //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - @IdentityMapper(entityTableName="virtual_supervisor_module") - @Parameter(name=ApiConstants.ID, type=CommandType.LONG, required=true, description="Id of the Cisco Nexus 1000v VSM device to be deleted") + @Parameter(name=ApiConstants.ID, type=CommandType.UUID, entityType = CiscoNexusVSMResponse.class, + required=true, description="Id of the Cisco Nexus 1000v VSM device to be deleted") private Long id; ///////////////////////////////////////////////////// diff --git a/plugins/hypervisors/vmware/src/com/cloud/api/commands/EnableCiscoNexusVSMCmd.java b/plugins/hypervisors/vmware/src/com/cloud/api/commands/EnableCiscoNexusVSMCmd.java index ad63dddb603..5dc67212fd3 100644 --- a/plugins/hypervisors/vmware/src/com/cloud/api/commands/EnableCiscoNexusVSMCmd.java +++ b/plugins/hypervisors/vmware/src/com/cloud/api/commands/EnableCiscoNexusVSMCmd.java @@ -42,8 +42,8 @@ public class EnableCiscoNexusVSMCmd extends BaseAsyncCmd { //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - @IdentityMapper(entityTableName="virtual_supervisor_module") - @Parameter(name=ApiConstants.ID, type=CommandType.LONG, required=true, description="Id of the Cisco Nexus 1000v VSM device to be enabled") + @Parameter(name=ApiConstants.ID, type=CommandType.UUID, entityType=CiscoNexusVSMResponse.class, + required=true, description="Id of the Cisco Nexus 1000v VSM device to be enabled") private Long id; ///////////////////////////////////////////////////// diff --git a/plugins/hypervisors/vmware/src/com/cloud/api/response/CiscoNexusVSMResponse.java b/plugins/hypervisors/vmware/src/com/cloud/api/response/CiscoNexusVSMResponse.java index 79985daea85..25a824e5796 100644 --- a/plugins/hypervisors/vmware/src/com/cloud/api/response/CiscoNexusVSMResponse.java +++ b/plugins/hypervisors/vmware/src/com/cloud/api/response/CiscoNexusVSMResponse.java @@ -20,7 +20,11 @@ import org.apache.cloudstack.api.ApiConstants; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; import org.apache.cloudstack.api.BaseResponse; +import org.apache.cloudstack.api.EntityReference; +import com.cloud.network.CiscoNexusVSMDevice; + +@EntityReference(value=CiscoNexusVSMDevice.class) public class CiscoNexusVSMResponse extends BaseResponse { @SerializedName(ApiConstants.EXTERNAL_SWITCH_MGMT_DEVICE_ID) @Param(description="device id of the Cisco N1KV VSM device") From 4dd5f14e76d7442ef2ea90b3c0aa4bb630ea9a71 Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Fri, 4 Jan 2013 16:49:27 -0800 Subject: [PATCH 259/421] f5: Annotate f5 cmd classes, remove IdentityMapper Signed-off-by: Rohit Yadav --- .../com/cloud/api/commands/ConfigureF5LoadBalancerCmd.java | 4 ++-- .../src/com/cloud/api/commands/DeleteF5LoadBalancerCmd.java | 5 +++-- .../cloud/api/commands/ListF5LoadBalancerNetworksCmd.java | 5 ++--- .../src/com/cloud/api/commands/ListF5LoadBalancersCmd.java | 4 ++-- .../src/com/cloud/api/response/F5LoadBalancerResponse.java | 3 +++ .../src/com/cloud/network/ExternalLoadBalancerDeviceVO.java | 3 ++- 6 files changed, 14 insertions(+), 10 deletions(-) diff --git a/plugins/network-elements/f5/src/com/cloud/api/commands/ConfigureF5LoadBalancerCmd.java b/plugins/network-elements/f5/src/com/cloud/api/commands/ConfigureF5LoadBalancerCmd.java index f6eddc8497c..e796b57cc41 100644 --- a/plugins/network-elements/f5/src/com/cloud/api/commands/ConfigureF5LoadBalancerCmd.java +++ b/plugins/network-elements/f5/src/com/cloud/api/commands/ConfigureF5LoadBalancerCmd.java @@ -44,8 +44,8 @@ public class ConfigureF5LoadBalancerCmd extends BaseAsyncCmd { //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - @IdentityMapper(entityTableName="external_load_balancer_devices") - @Parameter(name=ApiConstants.LOAD_BALANCER_DEVICE_ID, type=CommandType.LONG, required=true, description="F5 load balancer device ID") + @Parameter(name=ApiConstants.LOAD_BALANCER_DEVICE_ID, type=CommandType.UUID, entityType = F5LoadBalancerResponse.class, + required=true, description="F5 load balancer device ID") private Long lbDeviceId; @Parameter(name=ApiConstants.LOAD_BALANCER_DEVICE_CAPACITY, type=CommandType.LONG, required=false, description="capacity of the device, Capacity will be interpreted as number of networks device can handle") diff --git a/plugins/network-elements/f5/src/com/cloud/api/commands/DeleteF5LoadBalancerCmd.java b/plugins/network-elements/f5/src/com/cloud/api/commands/DeleteF5LoadBalancerCmd.java index 346bfdff48c..bca90d55d76 100644 --- a/plugins/network-elements/f5/src/com/cloud/api/commands/DeleteF5LoadBalancerCmd.java +++ b/plugins/network-elements/f5/src/com/cloud/api/commands/DeleteF5LoadBalancerCmd.java @@ -29,6 +29,7 @@ import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.PlugService; import org.apache.cloudstack.api.ServerApiException; import org.apache.cloudstack.api.response.SuccessResponse; +import com.cloud.api.response.F5LoadBalancerResponse; import com.cloud.event.EventTypes; import com.cloud.exception.ConcurrentOperationException; import com.cloud.exception.InsufficientCapacityException; @@ -49,8 +50,8 @@ public class DeleteF5LoadBalancerCmd extends BaseAsyncCmd { //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - @IdentityMapper(entityTableName="external_load_balancer_devices") - @Parameter(name=ApiConstants.LOAD_BALANCER_DEVICE_ID, type=CommandType.LONG, required=true, description="netscaler load balancer device ID") + @Parameter(name=ApiConstants.LOAD_BALANCER_DEVICE_ID, type=CommandType.UUID, entityType = F5LoadBalancerResponse.class, + required=true, description="netscaler load balancer device ID") private Long lbDeviceId; ///////////////////////////////////////////////////// diff --git a/plugins/network-elements/f5/src/com/cloud/api/commands/ListF5LoadBalancerNetworksCmd.java b/plugins/network-elements/f5/src/com/cloud/api/commands/ListF5LoadBalancerNetworksCmd.java index 0194b5d9e8f..4ec98f02d58 100644 --- a/plugins/network-elements/f5/src/com/cloud/api/commands/ListF5LoadBalancerNetworksCmd.java +++ b/plugins/network-elements/f5/src/com/cloud/api/commands/ListF5LoadBalancerNetworksCmd.java @@ -25,7 +25,6 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.BaseListCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.PlugService; @@ -52,8 +51,8 @@ public class ListF5LoadBalancerNetworksCmd extends BaseListCmd { //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - @IdentityMapper(entityTableName="external_load_balancer_devices") - @Parameter(name=ApiConstants.LOAD_BALANCER_DEVICE_ID, type=CommandType.LONG, required = true, description="f5 load balancer device ID") + @Parameter(name=ApiConstants.LOAD_BALANCER_DEVICE_ID, type=CommandType.UUID, entityType = F5LoadBalancerResponse.class, + required = true, description="f5 load balancer device ID") private Long lbDeviceId; ///////////////////////////////////////////////////// diff --git a/plugins/network-elements/f5/src/com/cloud/api/commands/ListF5LoadBalancersCmd.java b/plugins/network-elements/f5/src/com/cloud/api/commands/ListF5LoadBalancersCmd.java index 36b6dc0bf17..c03d55abc0a 100644 --- a/plugins/network-elements/f5/src/com/cloud/api/commands/ListF5LoadBalancersCmd.java +++ b/plugins/network-elements/f5/src/com/cloud/api/commands/ListF5LoadBalancersCmd.java @@ -50,8 +50,8 @@ public class ListF5LoadBalancersCmd extends BaseListCmd { description="the Physical Network ID") private Long physicalNetworkId; - @IdentityMapper(entityTableName="external_load_balancer_devices") - @Parameter(name=ApiConstants.LOAD_BALANCER_DEVICE_ID, type=CommandType.LONG, description="f5 load balancer device ID") + @Parameter(name=ApiConstants.LOAD_BALANCER_DEVICE_ID, type=CommandType.UUID, entityType = F5LoadBalancerResponse.class, + description="f5 load balancer device ID") private Long lbDeviceId; ///////////////////////////////////////////////////// diff --git a/plugins/network-elements/f5/src/com/cloud/api/response/F5LoadBalancerResponse.java b/plugins/network-elements/f5/src/com/cloud/api/response/F5LoadBalancerResponse.java index a6d540fd67d..9f6d6451140 100644 --- a/plugins/network-elements/f5/src/com/cloud/api/response/F5LoadBalancerResponse.java +++ b/plugins/network-elements/f5/src/com/cloud/api/response/F5LoadBalancerResponse.java @@ -16,11 +16,14 @@ // under the License. package com.cloud.api.response; +import org.apache.cloudstack.api.EntityReference; import org.apache.cloudstack.api.ApiConstants; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; import org.apache.cloudstack.api.BaseResponse; +import com.cloud.network.ExternalLoadBalancerDeviceVO; +@EntityReference(value=ExternalLoadBalancerDeviceVO.class) public class F5LoadBalancerResponse extends BaseResponse { @SerializedName(ApiConstants.LOAD_BALANCER_DEVICE_ID) @Param(description="device id of the F5 load balancer") private String id; diff --git a/server/src/com/cloud/network/ExternalLoadBalancerDeviceVO.java b/server/src/com/cloud/network/ExternalLoadBalancerDeviceVO.java index c78decb5ffa..46723d64a15 100644 --- a/server/src/com/cloud/network/ExternalLoadBalancerDeviceVO.java +++ b/server/src/com/cloud/network/ExternalLoadBalancerDeviceVO.java @@ -16,6 +16,7 @@ // under the License. package com.cloud.network; +import org.apache.cloudstack.api.Identity; import org.apache.cloudstack.api.InternalIdentity; import org.apache.cloudstack.network.ExternalNetworkDeviceManager; @@ -36,7 +37,7 @@ import javax.persistence.Table; @Entity @Table(name="external_load_balancer_devices") -public class ExternalLoadBalancerDeviceVO implements InternalIdentity { +public class ExternalLoadBalancerDeviceVO implements InternalIdentity, Identity { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) From 65a1284e83bd0179a27c3b99426d6026b21f2aa9 Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Fri, 4 Jan 2013 17:00:10 -0800 Subject: [PATCH 260/421] srx: Annotate api classes, remove IdentityMapper Signed-off-by: Rohit Yadav --- .../src/com/cloud/api/commands/ConfigureSrxFirewallCmd.java | 5 ++--- .../src/com/cloud/api/commands/DeleteSrxFirewallCmd.java | 6 +++--- .../com/cloud/api/commands/ListSrxFirewallNetworksCmd.java | 5 +++-- .../src/com/cloud/api/commands/ListSrxFirewallsCmd.java | 4 ++-- .../src/com/cloud/api/response/SrxFirewallResponse.java | 3 +++ server/src/com/cloud/network/ExternalFirewallDeviceVO.java | 3 ++- 6 files changed, 15 insertions(+), 11 deletions(-) diff --git a/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/ConfigureSrxFirewallCmd.java b/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/ConfigureSrxFirewallCmd.java index 002fad72d0b..482fcc8c0c7 100644 --- a/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/ConfigureSrxFirewallCmd.java +++ b/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/ConfigureSrxFirewallCmd.java @@ -21,7 +21,6 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.PlugService; @@ -49,8 +48,8 @@ public class ConfigureSrxFirewallCmd extends BaseAsyncCmd { //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - @IdentityMapper(entityTableName="external_load_balancer_devices") - @Parameter(name=ApiConstants.FIREWALL_DEVICE_ID, type=CommandType.LONG, required=true, description="SRX firewall device ID") + @Parameter(name=ApiConstants.FIREWALL_DEVICE_ID, type=CommandType.UUID, entityType = SrxFirewallResponse.class, + required=true, description="SRX firewall device ID") private Long fwDeviceId; @Parameter(name=ApiConstants.FIREWALL_DEVICE_CAPACITY, type=CommandType.LONG, required=false, description="capacity of the firewall device, Capacity will be interpreted as number of networks device can handle") diff --git a/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/DeleteSrxFirewallCmd.java b/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/DeleteSrxFirewallCmd.java index 4595c225aef..1dc792a723a 100644 --- a/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/DeleteSrxFirewallCmd.java +++ b/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/DeleteSrxFirewallCmd.java @@ -21,12 +21,12 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.PlugService; import org.apache.cloudstack.api.ServerApiException; import org.apache.cloudstack.api.response.SuccessResponse; +import com.cloud.api.response.SrxFirewallResponse; import com.cloud.event.EventTypes; import com.cloud.exception.ConcurrentOperationException; import com.cloud.exception.InsufficientCapacityException; @@ -47,8 +47,8 @@ public class DeleteSrxFirewallCmd extends BaseAsyncCmd { //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - @IdentityMapper(entityTableName="external_firewall_devices") - @Parameter(name=ApiConstants.FIREWALL_DEVICE_ID, type=CommandType.LONG, required=true, description="srx firewall device ID") + @Parameter(name=ApiConstants.FIREWALL_DEVICE_ID, type=CommandType.UUID, entityType = SrxFirewallResponse.class, + required=true, description="srx firewall device ID") private Long fwDeviceId; ///////////////////////////////////////////////////// diff --git a/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/ListSrxFirewallNetworksCmd.java b/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/ListSrxFirewallNetworksCmd.java index 80881d4fbb5..9c2b3962a6f 100644 --- a/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/ListSrxFirewallNetworksCmd.java +++ b/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/ListSrxFirewallNetworksCmd.java @@ -25,6 +25,7 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.response.ListResponse; import org.apache.cloudstack.api.response.NetworkResponse; +import com.cloud.api.response.SrxFirewallResponse; import com.cloud.exception.ConcurrentOperationException; import com.cloud.exception.InsufficientCapacityException; import com.cloud.exception.InvalidParameterValueException; @@ -45,8 +46,8 @@ public class ListSrxFirewallNetworksCmd extends BaseListCmd { //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - @IdentityMapper(entityTableName="external_firewall_devices") - @Parameter(name=ApiConstants.LOAD_BALANCER_DEVICE_ID, type=CommandType.LONG, required = true, description="netscaler load balancer device ID") + @Parameter(name=ApiConstants.LOAD_BALANCER_DEVICE_ID, type=CommandType.UUID, entityType = SrxFirewallResponse.class, + required = true, description="netscaler load balancer device ID") private Long fwDeviceId; ///////////////////////////////////////////////////// diff --git a/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/ListSrxFirewallsCmd.java b/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/ListSrxFirewallsCmd.java index 36ecaea0a5d..6508cc83c7d 100644 --- a/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/ListSrxFirewallsCmd.java +++ b/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/ListSrxFirewallsCmd.java @@ -50,8 +50,8 @@ public class ListSrxFirewallsCmd extends BaseListCmd { description="the Physical Network ID") private Long physicalNetworkId; - @IdentityMapper(entityTableName="external_firewall_devices") - @Parameter(name=ApiConstants.FIREWALL_DEVICE_ID, type=CommandType.LONG, description="SRX firewall device ID") + @Parameter(name=ApiConstants.FIREWALL_DEVICE_ID, type=CommandType.UUID, entityType = SrxFirewallResponse.class, + description="SRX firewall device ID") private Long fwDeviceId; ///////////////////////////////////////////////////// diff --git a/plugins/network-elements/juniper-srx/src/com/cloud/api/response/SrxFirewallResponse.java b/plugins/network-elements/juniper-srx/src/com/cloud/api/response/SrxFirewallResponse.java index 8ac488f0da0..56aab70f2f3 100644 --- a/plugins/network-elements/juniper-srx/src/com/cloud/api/response/SrxFirewallResponse.java +++ b/plugins/network-elements/juniper-srx/src/com/cloud/api/response/SrxFirewallResponse.java @@ -17,10 +17,13 @@ package com.cloud.api.response; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.EntityReference; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; import org.apache.cloudstack.api.BaseResponse; +import com.cloud.network.ExternalFirewallDeviceVO; +@EntityReference(value=ExternalFirewallDeviceVO.class) @SuppressWarnings("unused") public class SrxFirewallResponse extends BaseResponse { diff --git a/server/src/com/cloud/network/ExternalFirewallDeviceVO.java b/server/src/com/cloud/network/ExternalFirewallDeviceVO.java index a4b674133d5..83be8c40b3d 100644 --- a/server/src/com/cloud/network/ExternalFirewallDeviceVO.java +++ b/server/src/com/cloud/network/ExternalFirewallDeviceVO.java @@ -16,6 +16,7 @@ // under the License. package com.cloud.network; +import org.apache.cloudstack.api.Identity; import org.apache.cloudstack.api.InternalIdentity; import java.util.UUID; @@ -35,7 +36,7 @@ import javax.persistence.Table; @Entity @Table(name="external_firewall_devices") -public class ExternalFirewallDeviceVO implements InternalIdentity { +public class ExternalFirewallDeviceVO implements InternalIdentity, Identity { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "id") From 596f9d0905de327e96d1f8a48ce60218934606ed Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Fri, 4 Jan 2013 17:09:40 -0800 Subject: [PATCH 261/421] api: Annotate netscaler apis, remove IdentityMapper from everywhere Signed-off-by: Rohit Yadav --- .../src/com/cloud/api/commands/DisableCiscoNexusVSMCmd.java | 1 - .../src/com/cloud/api/commands/DeleteF5LoadBalancerCmd.java | 1 - .../api/commands/ConfigureNetscalerLoadBalancerCmd.java | 4 ++-- .../cloud/api/commands/DeleteNetscalerLoadBalancerCmd.java | 6 +++--- .../api/commands/ListNetscalerLoadBalancerNetworksCmd.java | 6 +++--- .../cloud/api/commands/ListNetscalerLoadBalancersCmd.java | 5 ++--- .../cloud/api/response/NetscalerLoadBalancerResponse.java | 3 +++ .../com/cloud/api/commands/DeleteNiciraNvpDeviceCmd.java | 1 - 8 files changed, 13 insertions(+), 14 deletions(-) diff --git a/plugins/hypervisors/vmware/src/com/cloud/api/commands/DisableCiscoNexusVSMCmd.java b/plugins/hypervisors/vmware/src/com/cloud/api/commands/DisableCiscoNexusVSMCmd.java index 1f1ff650d0c..9a7f6ada97c 100644 --- a/plugins/hypervisors/vmware/src/com/cloud/api/commands/DisableCiscoNexusVSMCmd.java +++ b/plugins/hypervisors/vmware/src/com/cloud/api/commands/DisableCiscoNexusVSMCmd.java @@ -21,7 +21,6 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseAsyncCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.PlugService; diff --git a/plugins/network-elements/f5/src/com/cloud/api/commands/DeleteF5LoadBalancerCmd.java b/plugins/network-elements/f5/src/com/cloud/api/commands/DeleteF5LoadBalancerCmd.java index bca90d55d76..8b53d70f76d 100644 --- a/plugins/network-elements/f5/src/com/cloud/api/commands/DeleteF5LoadBalancerCmd.java +++ b/plugins/network-elements/f5/src/com/cloud/api/commands/DeleteF5LoadBalancerCmd.java @@ -23,7 +23,6 @@ import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.PlugService; diff --git a/plugins/network-elements/netscaler/src/com/cloud/api/commands/ConfigureNetscalerLoadBalancerCmd.java b/plugins/network-elements/netscaler/src/com/cloud/api/commands/ConfigureNetscalerLoadBalancerCmd.java index 6fc7adbb70e..e0ec73ad501 100644 --- a/plugins/network-elements/netscaler/src/com/cloud/api/commands/ConfigureNetscalerLoadBalancerCmd.java +++ b/plugins/network-elements/netscaler/src/com/cloud/api/commands/ConfigureNetscalerLoadBalancerCmd.java @@ -44,8 +44,8 @@ public class ConfigureNetscalerLoadBalancerCmd extends BaseAsyncCmd { //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - @IdentityMapper(entityTableName="external_load_balancer_devices") - @Parameter(name=ApiConstants.LOAD_BALANCER_DEVICE_ID, type=CommandType.LONG, required=true, description="Netscaler load balancer device ID") + @Parameter(name=ApiConstants.LOAD_BALANCER_DEVICE_ID, type=CommandType.UUID, entityType = NetscalerLoadBalancerResponse.class, + required=true, description="Netscaler load balancer device ID") private Long lbDeviceId; @Parameter(name=ApiConstants.LOAD_BALANCER_DEVICE_CAPACITY, type=CommandType.LONG, required=false, description="capacity of the device, Capacity will be interpreted as number of networks device can handle") diff --git a/plugins/network-elements/netscaler/src/com/cloud/api/commands/DeleteNetscalerLoadBalancerCmd.java b/plugins/network-elements/netscaler/src/com/cloud/api/commands/DeleteNetscalerLoadBalancerCmd.java index 3f763ba5c2a..ec7faab39d4 100644 --- a/plugins/network-elements/netscaler/src/com/cloud/api/commands/DeleteNetscalerLoadBalancerCmd.java +++ b/plugins/network-elements/netscaler/src/com/cloud/api/commands/DeleteNetscalerLoadBalancerCmd.java @@ -20,12 +20,12 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.PlugService; import org.apache.cloudstack.api.ServerApiException; import org.apache.cloudstack.api.response.SuccessResponse; +import com.cloud.api.response.NetscalerLoadBalancerResponse; import com.cloud.event.EventTypes; import com.cloud.exception.ConcurrentOperationException; import com.cloud.exception.InsufficientCapacityException; @@ -47,8 +47,8 @@ public class DeleteNetscalerLoadBalancerCmd extends BaseAsyncCmd { //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - @IdentityMapper(entityTableName="external_load_balancer_devices") - @Parameter(name=ApiConstants.LOAD_BALANCER_DEVICE_ID, type=CommandType.LONG, required=true, description="netscaler load balancer device ID") + @Parameter(name=ApiConstants.LOAD_BALANCER_DEVICE_ID, type=CommandType.UUID, entityType = NetscalerLoadBalancerResponse.class, + required=true, description="netscaler load balancer device ID") private Long lbDeviceId; ///////////////////////////////////////////////////// diff --git a/plugins/network-elements/netscaler/src/com/cloud/api/commands/ListNetscalerLoadBalancerNetworksCmd.java b/plugins/network-elements/netscaler/src/com/cloud/api/commands/ListNetscalerLoadBalancerNetworksCmd.java index 2dd3fe4ef6e..b5935f34fda 100644 --- a/plugins/network-elements/netscaler/src/com/cloud/api/commands/ListNetscalerLoadBalancerNetworksCmd.java +++ b/plugins/network-elements/netscaler/src/com/cloud/api/commands/ListNetscalerLoadBalancerNetworksCmd.java @@ -22,13 +22,13 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.BaseListCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.PlugService; import org.apache.cloudstack.api.ServerApiException; import org.apache.cloudstack.api.response.ListResponse; import org.apache.cloudstack.api.response.NetworkResponse; +import com.cloud.api.response.NetscalerLoadBalancerResponse; import com.cloud.exception.ConcurrentOperationException; import com.cloud.exception.InsufficientCapacityException; import com.cloud.exception.InvalidParameterValueException; @@ -49,8 +49,8 @@ public class ListNetscalerLoadBalancerNetworksCmd extends BaseListCmd { //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - @IdentityMapper(entityTableName="external_load_balancer_devices") - @Parameter(name=ApiConstants.LOAD_BALANCER_DEVICE_ID, type=CommandType.LONG, required = true, description="netscaler load balancer device ID") + @Parameter(name=ApiConstants.LOAD_BALANCER_DEVICE_ID, type=CommandType.UUID, entityType = NetscalerLoadBalancerResponse.class, , + required = true, description="netscaler load balancer device ID") private Long lbDeviceId; ///////////////////////////////////////////////////// diff --git a/plugins/network-elements/netscaler/src/com/cloud/api/commands/ListNetscalerLoadBalancersCmd.java b/plugins/network-elements/netscaler/src/com/cloud/api/commands/ListNetscalerLoadBalancersCmd.java index 56ed464d116..bf679fa51c1 100644 --- a/plugins/network-elements/netscaler/src/com/cloud/api/commands/ListNetscalerLoadBalancersCmd.java +++ b/plugins/network-elements/netscaler/src/com/cloud/api/commands/ListNetscalerLoadBalancersCmd.java @@ -23,7 +23,6 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.BaseListCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.PlugService; @@ -54,8 +53,8 @@ public class ListNetscalerLoadBalancersCmd extends BaseListCmd { description="the Physical Network ID") private Long physicalNetworkId; - @IdentityMapper(entityTableName="external_load_balancer_devices") - @Parameter(name=ApiConstants.LOAD_BALANCER_DEVICE_ID, type=CommandType.LONG, description="netscaler load balancer device ID") + @Parameter(name=ApiConstants.LOAD_BALANCER_DEVICE_ID, type=CommandType.UUID, entityType = NetscalerLoadBalancerResponse.class, + description="netscaler load balancer device ID") private Long lbDeviceId; ///////////////////////////////////////////////////// diff --git a/plugins/network-elements/netscaler/src/com/cloud/api/response/NetscalerLoadBalancerResponse.java b/plugins/network-elements/netscaler/src/com/cloud/api/response/NetscalerLoadBalancerResponse.java index 2983da26811..2c0e90be2dd 100644 --- a/plugins/network-elements/netscaler/src/com/cloud/api/response/NetscalerLoadBalancerResponse.java +++ b/plugins/network-elements/netscaler/src/com/cloud/api/response/NetscalerLoadBalancerResponse.java @@ -19,10 +19,13 @@ package com.cloud.api.response; import java.util.List; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.EntityReference; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; import org.apache.cloudstack.api.BaseResponse; +import com.cloud.network.ExternalLoadBalancerDeviceVO; +@EntityReference(value=ExternalLoadBalancerDeviceVO.class) @SuppressWarnings("unused") public class NetscalerLoadBalancerResponse extends BaseResponse { diff --git a/plugins/network-elements/nicira-nvp/src/com/cloud/api/commands/DeleteNiciraNvpDeviceCmd.java b/plugins/network-elements/nicira-nvp/src/com/cloud/api/commands/DeleteNiciraNvpDeviceCmd.java index b3cfa8aba16..12544410599 100644 --- a/plugins/network-elements/nicira-nvp/src/com/cloud/api/commands/DeleteNiciraNvpDeviceCmd.java +++ b/plugins/network-elements/nicira-nvp/src/com/cloud/api/commands/DeleteNiciraNvpDeviceCmd.java @@ -22,7 +22,6 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.IdentityMapper; import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.PlugService; From 364116074e6ffe0404b461e75c328dcda536d522 Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Fri, 4 Jan 2013 17:12:14 -0800 Subject: [PATCH 262/421] api: Remove IdentityMapper finally Signed-off-by: Rohit Yadav --- .../apache/cloudstack/api/IdentityMapper.java | 29 ------------------- 1 file changed, 29 deletions(-) delete mode 100644 api/src/org/apache/cloudstack/api/IdentityMapper.java diff --git a/api/src/org/apache/cloudstack/api/IdentityMapper.java b/api/src/org/apache/cloudstack/api/IdentityMapper.java deleted file mode 100644 index 0403ff75f00..00000000000 --- a/api/src/org/apache/cloudstack/api/IdentityMapper.java +++ /dev/null @@ -1,29 +0,0 @@ -// 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 org.apache.cloudstack.api; - -import static java.lang.annotation.ElementType.FIELD; - -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; -import java.lang.annotation.Target; - -@Retention(RetentionPolicy.RUNTIME) -@Target({ FIELD }) -public @interface IdentityMapper { - String entityTableName(); -} From 95e605ed25c3878b2cbdd3af15093b5b09096880 Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Fri, 4 Jan 2013 18:16:29 -0800 Subject: [PATCH 263/421] api: Fix failing unit test, regression due to recent merge Signed-off-by: Rohit Yadav --- api/src/com/cloud/agent/api/BackupSnapshotCommand.java | 3 --- 1 file changed, 3 deletions(-) diff --git a/api/src/com/cloud/agent/api/BackupSnapshotCommand.java b/api/src/com/cloud/agent/api/BackupSnapshotCommand.java index 52d9d389fe4..a0ac8d7ad71 100644 --- a/api/src/com/cloud/agent/api/BackupSnapshotCommand.java +++ b/api/src/com/cloud/agent/api/BackupSnapshotCommand.java @@ -111,7 +111,4 @@ public class BackupSnapshotCommand extends SnapshotCommand { return snapshotId; } - public StorageFilerTO getPool() { - return pool; - } } From dea822700195930a78762cc5a6f5a0c74dce71a2 Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Fri, 4 Jan 2013 18:25:13 -0800 Subject: [PATCH 264/421] server: Exclude ListPerf test in as it requires real MS and DB Excluded test as per test author's comment: "Currently we commented out this test suite since it requires a real MS and Db running" Signed-off-by: Rohit Yadav --- server/pom.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/server/pom.xml b/server/pom.xml index b1a5d3de484..9e6bc68f8f6 100644 --- a/server/pom.xml +++ b/server/pom.xml @@ -109,6 +109,7 @@ com/cloud/storage/dao/* com/cloud/vm/dao/* com/cloud/vpc/* + com/cloud/api/ListPerfTest.java From 717f9dcd4d25e2a3ccf12598d16cc5d81fd880a9 Mon Sep 17 00:00:00 2001 From: Sheng Yang Date: Fri, 4 Jan 2013 18:56:47 -0800 Subject: [PATCH 265/421] CLOUDSTACK-306: Implement SRX firewall Use SRX firewall filter as SRX firewall. The old security policy mechanism cannot be used as IP based. This would enable SRX's ability to control traffic for F5 behind it. --- .../cloud/agent/api/to/FirewallRuleTO.java | 1 + .../cloud/agent/api/to/StaticNatRuleTO.java | 5 + .../JuniperSRXExternalFirewallElement.java | 2 +- .../network/resource/JuniperSrxResource.java | 239 +++++++++++++++++- .../juniper/firewall-filter-term-add.xml | 25 ++ .../juniper/firewall-filter-term-getone.xml | 14 + scripts/network/juniper/template-entry.xml | 3 + .../ExternalFirewallDeviceManager.java | 9 + .../ExternalFirewallDeviceManagerImpl.java | 189 +++++++++++--- 9 files changed, 445 insertions(+), 42 deletions(-) create mode 100644 scripts/network/juniper/firewall-filter-term-add.xml create mode 100644 scripts/network/juniper/firewall-filter-term-getone.xml create mode 100644 scripts/network/juniper/template-entry.xml diff --git a/api/src/com/cloud/agent/api/to/FirewallRuleTO.java b/api/src/com/cloud/agent/api/to/FirewallRuleTO.java index 01860204c00..8ce3def11d6 100644 --- a/api/src/com/cloud/agent/api/to/FirewallRuleTO.java +++ b/api/src/com/cloud/agent/api/to/FirewallRuleTO.java @@ -58,6 +58,7 @@ public class FirewallRuleTO { this(id,null,srcIp,protocol,srcPortStart,srcPortEnd,revoked,alreadyAdded,purpose,sourceCidr,icmpType,icmpCode); } public FirewallRuleTO(long id,String srcVlanTag, String srcIp, String protocol, Integer srcPortStart, Integer srcPortEnd, boolean revoked, boolean alreadyAdded, FirewallRule.Purpose purpose, List sourceCidr,Integer icmpType,Integer icmpCode) { + this.id = id; this.srcVlanTag = srcVlanTag; this.srcIp = srcIp; this.protocol = protocol; diff --git a/api/src/com/cloud/agent/api/to/StaticNatRuleTO.java b/api/src/com/cloud/agent/api/to/StaticNatRuleTO.java index fd77dd69578..6f600149237 100644 --- a/api/src/com/cloud/agent/api/to/StaticNatRuleTO.java +++ b/api/src/com/cloud/agent/api/to/StaticNatRuleTO.java @@ -47,6 +47,11 @@ public class StaticNatRuleTO extends FirewallRuleTO{ super(id, srcIp, protocol, srcPortStart, srcPortEnd, revoked, alreadyAdded, FirewallRule.Purpose.StaticNat, null,0,0); this.dstIp = dstIp; } + + public StaticNatRuleTO(long id,String srcVlanTag, String srcIp, Integer srcPortStart, Integer srcPortEnd, String dstIp, Integer dstPortStart, Integer dstPortEnd, String protocol, boolean revoked, boolean alreadyAdded) { + super(id, srcVlanTag, srcIp, protocol, srcPortStart, srcPortEnd, revoked, alreadyAdded, FirewallRule.Purpose.StaticNat, null,0,0); + this.dstIp = dstIp; + } public String getDstIp() { return dstIp; diff --git a/plugins/network-elements/juniper-srx/src/com/cloud/network/element/JuniperSRXExternalFirewallElement.java b/plugins/network-elements/juniper-srx/src/com/cloud/network/element/JuniperSRXExternalFirewallElement.java index 95bc031726a..50c088c2447 100644 --- a/plugins/network-elements/juniper-srx/src/com/cloud/network/element/JuniperSRXExternalFirewallElement.java +++ b/plugins/network-elements/juniper-srx/src/com/cloud/network/element/JuniperSRXExternalFirewallElement.java @@ -268,7 +268,7 @@ public class JuniperSRXExternalFirewallElement extends ExternalFirewallDeviceMan // Set capabilities for Firewall service Map firewallCapabilities = new HashMap(); - firewallCapabilities.put(Capability.SupportedProtocols, "tcp,udp"); + firewallCapabilities.put(Capability.SupportedProtocols, "tcp,udp,icmp"); firewallCapabilities.put(Capability.MultipleIps, "true"); firewallCapabilities.put(Capability.TrafficStatistics, "per public ip"); capabilities.put(Service.Firewall, firewallCapabilities); diff --git a/plugins/network-elements/juniper-srx/src/com/cloud/network/resource/JuniperSrxResource.java b/plugins/network-elements/juniper-srx/src/com/cloud/network/resource/JuniperSrxResource.java index ebb3de6c850..f823ab8af4f 100644 --- a/plugins/network-elements/juniper-srx/src/com/cloud/network/resource/JuniperSrxResource.java +++ b/plugins/network-elements/juniper-srx/src/com/cloud/network/resource/JuniperSrxResource.java @@ -55,6 +55,7 @@ import com.cloud.agent.api.routing.IpAssocAnswer; import com.cloud.agent.api.routing.IpAssocCommand; import com.cloud.agent.api.routing.NetworkElementCommand; import com.cloud.agent.api.routing.RemoteAccessVpnCfgCommand; +import com.cloud.agent.api.routing.SetFirewallRulesCommand; import com.cloud.agent.api.routing.SetPortForwardingRulesCommand; import com.cloud.agent.api.routing.SetStaticNatRulesCommand; import com.cloud.agent.api.routing.VpnUsersCfgCommand; @@ -64,6 +65,7 @@ import com.cloud.agent.api.to.IpAddressTO; import com.cloud.agent.api.to.PortForwardingRuleTO; import com.cloud.agent.api.to.StaticNatRuleTO; import com.cloud.host.Host; +import com.cloud.network.rules.FirewallRule; import com.cloud.network.rules.FirewallRule.Purpose; import com.cloud.resource.ServerResource; import com.cloud.utils.NumbersUtil; @@ -75,7 +77,6 @@ public class JuniperSrxResource implements ServerResource { private String _name; private String _zoneId; - private String _physicalNetworkId; private String _ip; private String _username; private String _password; @@ -89,6 +90,7 @@ public class JuniperSrxResource implements ServerResource { private Integer _timeoutInSeconds; private String _publicZone; private String _privateZone; + private String _publicZoneInputFilterName; private String _publicInterface; private String _usageInterface; private String _privateInterface; @@ -159,6 +161,9 @@ public class JuniperSrxResource implements ServerResource { ACCESS_PROFILE_ADD("access-profile-add.xml"), ACCESS_PROFILE_GETONE("access-profile-getone.xml"), ACCESS_PROFILE_GETALL("access-profile-getall.xml"), + FIREWALL_FILTER_TERM_ADD("firewall-filter-term-add.xml"), + FIREWALL_FILTER_TERM_GETONE("firewall-filter-term-getone.xml"), + TEMPLATE_ENTRY("template-entry.xml"), OPEN_CONFIGURATION("open-configuration.xml"), CLOSE_CONFIGURATION("close-configuration.xml"), COMMIT("commit.xml"), @@ -231,12 +236,74 @@ public class JuniperSrxResource implements ServerResource { } } + public class FirewallFilterTerm { + private String name; + private List sourceCidrs; + private String destIp; + private String portRange; + private String protocol; + private String icmpType; + private String icmpCode; + private String countName; + + private FirewallFilterTerm(String name, List sourceCidrs, String destIp, String protocol, Integer startPort, Integer endPort, + Integer icmpType, Integer icmpCode, String countName) { + this.name = name; + this.sourceCidrs = sourceCidrs; + this.destIp = destIp; + this.protocol = protocol; + + if (protocol.equals("tcp") || protocol.equals("udp")) { + this.portRange = String.valueOf(startPort) + "-" + String.valueOf(endPort); + } else if (protocol.equals("icmp")) { + this.icmpType = String.valueOf(icmpType); + this.icmpCode = String.valueOf(icmpCode); + } else { + assert protocol.equals("any"); + } + this.countName = countName; + + } + + public String getName() { + return name; + } + + public List getSourceCidrs() { + return sourceCidrs; + } + + public String getDestIp() { + return destIp; + } + + public String getPortRange() { + return portRange; + } + + public String getProtocol() { + return protocol; + } + + public String getIcmpType() { + return icmpType; + } + + public String getIcmpCode() { + return icmpCode; + } + + public String getCountName() { + return countName; + } + } + private enum SrxCommand { LOGIN, OPEN_CONFIGURATION, CLOSE_CONFIGURATION, COMMIT, ROLLBACK, CHECK_IF_EXISTS, CHECK_IF_IN_USE, ADD, DELETE, GET_ALL; } private enum Protocol { - tcp, udp, any; + tcp, udp, icmp, any; } private enum RuleMatchCondition { @@ -277,6 +344,8 @@ public class JuniperSrxResource implements ServerResource { return execute((SetStaticNatRulesCommand) cmd); } else if (cmd instanceof SetPortForwardingRulesCommand) { return execute((SetPortForwardingRulesCommand) cmd); + } else if (cmd instanceof SetFirewallRulesCommand) { + return execute((SetFirewallRulesCommand) cmd); } else if (cmd instanceof ExternalNetworkResourceUsageCommand) { return execute((ExternalNetworkResourceUsageCommand) cmd); } else if (cmd instanceof RemoteAccessVpnCfgCommand) { @@ -300,11 +369,6 @@ public class JuniperSrxResource implements ServerResource { throw new ConfigurationException("Unable to find zone"); } - _physicalNetworkId = (String) params.get("physicalNetworkId"); - if (_physicalNetworkId == null) { - throw new ConfigurationException("Unable to find physical network id in the configuration parameters"); - } - _ip = (String) params.get("ip"); if (_ip == null) { throw new ConfigurationException("Unable to find IP"); @@ -325,8 +389,6 @@ public class JuniperSrxResource implements ServerResource { throw new ConfigurationException("Unable to find public interface."); } - _usageInterface = (String) params.get("usageinterface"); - _privateInterface = (String) params.get("privateinterface"); if (_privateInterface == null) { throw new ConfigurationException("Unable to find private interface."); @@ -364,6 +426,8 @@ public class JuniperSrxResource implements ServerResource { throw new ConfigurationException("Unable to open a connection to the SRX."); } + _publicZoneInputFilterName = _publicZone; + _usageFilterVlanInput = new UsageFilter("vlan-input", null, "vlan-input"); _usageFilterVlanOutput = new UsageFilter("vlan-output", null, "vlan-output"); _usageFilterIPInput = new UsageFilter(_publicZone, "destination-address", "-i"); @@ -712,6 +776,50 @@ public class JuniperSrxResource implements ServerResource { s_logger.debug(msg); } + + /* security policies */ + private synchronized Answer execute(SetFirewallRulesCommand cmd) { + refreshSrxConnection(); + return execute(cmd, _numRetries); + } + + private Answer execute(SetFirewallRulesCommand cmd, int numRetries) { + FirewallRuleTO[] rules = cmd.getRules(); + try { + openConfiguration(); + + for (FirewallRuleTO rule : rules) { + int startPort = 0, endPort = 0; + if (rule.getSrcPortRange() != null) { + startPort = rule.getSrcPortRange()[0]; + endPort = rule.getSrcPortRange()[1]; + } + FirewallFilterTerm term = new FirewallFilterTerm(genIpIdentifier(rule.getSrcIp()) + "-" + String.valueOf(rule.getId()), rule.getSourceCidrList(), + rule.getSrcIp(), rule.getProtocol(), startPort, endPort, + rule.getIcmpType(), rule.getIcmpCode(), genIpIdentifier(rule.getSrcIp()) + _usageFilterIPInput.getCounterIdentifier()); + if (!rule.revoked()) { + manageFirewallFilter(SrxCommand.ADD, term, _publicZoneInputFilterName); + } else { + manageFirewallFilter(SrxCommand.DELETE, term, _publicZoneInputFilterName); + } + } + + commitConfiguration(); + return new Answer(cmd); + } catch (ExecutionException e) { + s_logger.error(e); + closeConfiguration(); + + if (numRetries > 0 && refreshSrxConnection()) { + int numRetriesRemaining = numRetries - 1; + s_logger.debug("Retrying SetFirewallRulesCommand. Number of retries remaining: " + numRetriesRemaining); + return execute(cmd, numRetriesRemaining); + } else { + return new Answer(cmd, e); + } + } + } + /* * Static NAT */ @@ -766,7 +874,6 @@ public class JuniperSrxResource implements ServerResource { private void addStaticNatRule(Long publicVlanTag, String publicIp, String privateIp, List rules) throws ExecutionException { manageProxyArp(SrxCommand.ADD, publicVlanTag, publicIp); manageStaticNatRule(SrxCommand.ADD, publicIp, privateIp); - manageUsageFilter(SrxCommand.ADD, _usageFilterIPInput, publicIp, null, genIpFilterTermName(publicIp)); manageAddressBookEntry(SrxCommand.ADD, _privateZone, privateIp, null); // Add a new security policy with the current set of applications @@ -778,7 +885,6 @@ public class JuniperSrxResource implements ServerResource { private void removeStaticNatRule(Long publicVlanTag, String publicIp, String privateIp) throws ExecutionException { manageStaticNatRule(SrxCommand.DELETE, publicIp, privateIp); manageProxyArp(SrxCommand.DELETE, publicVlanTag, publicIp); - manageUsageFilter(SrxCommand.DELETE, _usageFilterIPInput, publicIp, null, genIpFilterTermName(publicIp)); // Remove any existing security policy and clean up applications removeSecurityPolicyAndApplications(SecurityPolicyType.STATIC_NAT, privateIp); @@ -2781,6 +2887,108 @@ public class JuniperSrxResource implements ServerResource { } } + private String genNameValueEntry(String name, String value) { + String xml = SrxXml.TEMPLATE_ENTRY.getXml(); + xml = replaceXmlValue(xml, "name", name); + xml = replaceXmlValue(xml, "value", value); + return xml; + } + + private String genMultipleEntries(String name, List values) { + String result = ""; + for (String value : values) { + result = result + genNameValueEntry(name, value); + } + return result; + } + + private String genPortRangeEntry(String protocol, String portRange) { + String result = ""; + result = result + genNameValueEntry("protocol", protocol); + result = result + genNameValueEntry("destination-port", portRange); + return result; + } + + private String genIcmpEntries(String icmpType, String icmpCode) { + String result = ""; + result = result + genNameValueEntry("protocol", "icmp"); + if (icmpType.equals("-1")) { + result = result + genNameValueEntry("icmp-type", "0-255"); + } else { + result = result + genNameValueEntry("icmp-type", icmpType); + } + if (icmpCode.equals("-1")) { + result = result + genNameValueEntry("icmp-code", "0-255"); + } else { + result = result + genNameValueEntry("icmp-code", icmpCode); + } + return result; + } + + private boolean manageFirewallFilter(SrxCommand command, FirewallFilterTerm term, String filterName) throws ExecutionException { + String xml; + + switch(command) { + + case CHECK_IF_EXISTS: + xml = SrxXml.FIREWALL_FILTER_TERM_GETONE.getXml(); + xml = setDelete(xml, false); + xml = replaceXmlValue(xml, "filter-name", filterName); + xml = replaceXmlValue(xml, "term-name", term.getName()); + return sendRequestAndCheckResponse(command, xml, "name", term.getName()); + + case ADD: + if (manageFirewallFilter(SrxCommand.CHECK_IF_EXISTS, term, filterName)) { + return true; + } + + xml = SrxXml.FIREWALL_FILTER_TERM_ADD.getXml(); + + xml = replaceXmlValue(xml, "filter-name", filterName); + xml = replaceXmlValue(xml, "term-name", term.getName()); + xml = replaceXmlValue(xml, "source-address-entries", genMultipleEntries("source-address", term.getSourceCidrs())); + xml = replaceXmlValue(xml, "dest-ip-address", term.getDestIp()); + + String protocol = term.getProtocol(); + if (protocol.equals("tcp") || protocol.equals("udp")) { + xml = replaceXmlValue(xml, "protocol-options", genPortRangeEntry(protocol, term.getPortRange())); + } else if (protocol.equals("icmp")) { + xml = replaceXmlValue(xml, "protocol-options", genIcmpEntries(term.getIcmpType(), term.getIcmpCode())); + } else { + assert protocol.equals("any"); + xml = replaceXmlValue(xml, "protocol-options", ""); + } + xml = replaceXmlValue(xml, "count-name", term.getCountName()); + + if (!sendRequestAndCheckResponse(command, xml)) { + throw new ExecutionException("Failed to add firewall filter: " + term.getName()); + } else { + return true; + } + + case DELETE: + if (!manageFirewallFilter(SrxCommand.CHECK_IF_EXISTS, term, filterName)) { + return true; + } + + xml = SrxXml.FIREWALL_FILTER_TERM_GETONE.getXml(); + xml = setDelete(xml, true); + xml = replaceXmlValue(xml, "filter-name", filterName); + xml = replaceXmlValue(xml, "term-name", term.getName()); + + if (!sendRequestAndCheckResponse(command, xml)) { + throw new ExecutionException("Failed to delete firewall filter: " + term.getName()); + } else { + return true; + } + + default: + s_logger.debug("Unrecognized command."); + return false; + + } + } + /* * Usage */ @@ -2913,6 +3121,10 @@ public class JuniperSrxResource implements ServerResource { } UsageFilter filter = getUsageFilter(counterName); + if (filter == null) { + s_logger.debug("Failed to parse counter name in usage answer: " + counterName); + return; + } String usageAnswerKey = getUsageAnswerKey(filter, counterName); Map bytesMap = getBytesMap(answer, filter, usageAnswerKey); updateBytesMap(bytesMap, filter, usageAnswerKey, byteCount); @@ -2981,6 +3193,11 @@ public class JuniperSrxResource implements ServerResource { } private boolean checkResponse(String xmlResponse, boolean errorKeyAndValue, String key, String value) { + if (xmlResponse == null) { + s_logger.error("Failed to communicate with SRX!"); + return false; + } + if (!xmlResponse.contains("authentication-response")) { s_logger.debug("Checking response: " + xmlResponse); } else { diff --git a/scripts/network/juniper/firewall-filter-term-add.xml b/scripts/network/juniper/firewall-filter-term-add.xml new file mode 100644 index 00000000000..4f96ed4d16e --- /dev/null +++ b/scripts/network/juniper/firewall-filter-term-add.xml @@ -0,0 +1,25 @@ + + + + + +%filter-name% + +%term-name% + +%source-address-entries% + +%dest-ip-address% + +%protocol-options% + + +%count-name% + + + + + + + + diff --git a/scripts/network/juniper/firewall-filter-term-getone.xml b/scripts/network/juniper/firewall-filter-term-getone.xml new file mode 100644 index 00000000000..782290992c1 --- /dev/null +++ b/scripts/network/juniper/firewall-filter-term-getone.xml @@ -0,0 +1,14 @@ + + + + + +%filter-name% + +%term-name% + + + + + + diff --git a/scripts/network/juniper/template-entry.xml b/scripts/network/juniper/template-entry.xml new file mode 100644 index 00000000000..cf0cb6c37e3 --- /dev/null +++ b/scripts/network/juniper/template-entry.xml @@ -0,0 +1,3 @@ +<%name%> +%value% + diff --git a/server/src/com/cloud/network/ExternalFirewallDeviceManager.java b/server/src/com/cloud/network/ExternalFirewallDeviceManager.java index f6a39d96cea..f758ca1d341 100644 --- a/server/src/com/cloud/network/ExternalFirewallDeviceManager.java +++ b/server/src/com/cloud/network/ExternalFirewallDeviceManager.java @@ -22,6 +22,7 @@ import com.cloud.exception.InsufficientCapacityException; import com.cloud.exception.ResourceUnavailableException; import com.cloud.host.Host; import com.cloud.network.rules.FirewallRule; +import com.cloud.network.rules.PortForwardingRule; import com.cloud.resource.ServerResource; import com.cloud.utils.component.Manager; @@ -94,4 +95,12 @@ public interface ExternalFirewallDeviceManager extends Manager { */ public boolean manageGuestNetworkWithExternalFirewall(boolean add, Network guestConfig) throws ResourceUnavailableException, InsufficientCapacityException; + /** + * applies port forwarding rules + * @param network guest network if + * @param rules load balancer rules + * @return true if successfully applied rules + * @throws ResourceUnavailableException + */ + public boolean applyPortForwardingRules(Network network, List rules) throws ResourceUnavailableException; } diff --git a/server/src/com/cloud/network/ExternalFirewallDeviceManagerImpl.java b/server/src/com/cloud/network/ExternalFirewallDeviceManagerImpl.java index 1629dd5e5f3..4b67840db3a 100644 --- a/server/src/com/cloud/network/ExternalFirewallDeviceManagerImpl.java +++ b/server/src/com/cloud/network/ExternalFirewallDeviceManagerImpl.java @@ -34,9 +34,11 @@ import com.cloud.agent.api.StartupExternalLoadBalancerCommand; import com.cloud.agent.api.routing.IpAssocCommand; import com.cloud.agent.api.routing.NetworkElementCommand; import com.cloud.agent.api.routing.RemoteAccessVpnCfgCommand; +import com.cloud.agent.api.routing.SetFirewallRulesCommand; import com.cloud.agent.api.routing.SetPortForwardingRulesCommand; import com.cloud.agent.api.routing.SetStaticNatRulesCommand; import com.cloud.agent.api.routing.VpnUsersCfgCommand; +import com.cloud.agent.api.to.FirewallRuleTO; import com.cloud.agent.api.to.IpAddressTO; import com.cloud.agent.api.to.PortForwardingRuleTO; import com.cloud.agent.api.to.StaticNatRuleTO; @@ -65,6 +67,7 @@ import com.cloud.network.Network.Capability; import com.cloud.network.Network.Service; import com.cloud.network.Networks.TrafficType; import com.cloud.network.dao.ExternalFirewallDeviceDao; +import com.cloud.network.dao.FirewallRulesDao; import com.cloud.network.dao.IPAddressDao; import com.cloud.network.dao.InlineLoadBalancerNicMapDao; import com.cloud.network.dao.LoadBalancerDao; @@ -78,14 +81,17 @@ import com.cloud.network.dao.VpnUserDao; import com.cloud.network.rules.FirewallRule; import com.cloud.network.rules.FirewallRule.Purpose; import com.cloud.network.rules.PortForwardingRule; +import com.cloud.network.rules.StaticNat; import com.cloud.network.rules.StaticNatRule; import com.cloud.network.rules.dao.PortForwardingRulesDao; import com.cloud.offering.NetworkOffering; import com.cloud.offerings.dao.NetworkOfferingDao; import com.cloud.resource.ResourceManager; +import com.cloud.resource.ResourceState; import com.cloud.resource.ResourceStateAdapter; import com.cloud.resource.ServerResource; import com.cloud.resource.UnableDeleteHostException; +import com.cloud.resource.ResourceStateAdapter.DeleteHostAnswer; import com.cloud.server.api.response.ExternalFirewallResponse; import com.cloud.user.Account; import com.cloud.user.AccountManager; @@ -98,6 +104,7 @@ import com.cloud.utils.db.DB; import com.cloud.utils.db.GlobalLock; import com.cloud.utils.db.Transaction; import com.cloud.utils.exception.CloudRuntimeException; +import com.cloud.utils.net.Ip; import com.cloud.utils.net.NetUtils; import com.cloud.utils.net.UrlUtil; import com.cloud.vm.Nic.ReservationStrategy; @@ -133,6 +140,7 @@ public abstract class ExternalFirewallDeviceManagerImpl extends AdapterBase impl @Inject NetworkExternalFirewallDao _networkExternalFirewallDao; @Inject VpnUserDao _vpnUsersDao; @Inject HostDetailsDao _hostDetailDao; + @Inject FirewallRulesDao _fwRulesDao; private static final org.apache.log4j.Logger s_logger = Logger.getLogger(ExternalFirewallDeviceManagerImpl.class); private long _defaultFwCapacity; @@ -236,14 +244,26 @@ public abstract class ExternalFirewallDeviceManagerImpl extends AdapterBase impl throw new InvalidParameterValueException("Could not find an external firewall with ID: " + hostId); } + DetailVO fwHostDetails = _hostDetailDao.findDetail(hostId, ApiConstants.FIREWALL_DEVICE_ID); + long fwDeviceId = Long.parseLong(fwHostDetails.getValue()); + + // check if any networks are using this balancer device + List networks = _networkExternalFirewallDao.listByFirewallDeviceId(fwDeviceId); + if ((networks != null) && !networks.isEmpty()) { + throw new CloudRuntimeException("Delete can not be done as there are networks using the firewall device "); + } + try { - if (_resourceMgr.maintain(hostId) && _resourceMgr.deleteHost(hostId, false, false)) { - return true; - } else { - return false; - } - } catch (AgentUnavailableException e) { - s_logger.debug(e); + // put the host in maintenance state in order for it to be deleted + externalFirewall.setResourceState(ResourceState.Maintenance); + _hostDao.update(hostId, externalFirewall); + _resourceMgr.deleteHost(hostId, false, false); + + // delete the external load balancer entry + _externalFirewallDeviceDao.remove(fwDeviceId); + return true; + } catch (Exception e) { + s_logger.debug("Failed to delete external firewall device due to " + e.getMessage()); return false; } } @@ -316,6 +336,32 @@ public abstract class ExternalFirewallDeviceManagerImpl extends AdapterBase impl " to implement the network", DataCenter.class, network.getDataCenterId()); } + @DB + protected boolean freeFirewallForNetwork(Network network) { + Transaction txn = Transaction.currentTxn(); + GlobalLock deviceMapLock = GlobalLock.getInternLock("NetworkFirewallDeviceMap"); + try { + if (deviceMapLock.lock(120)) { + try { + NetworkExternalFirewallVO fwDeviceForNetwork = _networkExternalFirewallDao.findByNetworkId(network.getId()); + if (fwDeviceForNetwork != null) { + _networkExternalFirewallDao.remove(fwDeviceForNetwork.getId()); + } + } catch (Exception exception) { + txn.rollback(); + s_logger.error("Failed to release firewall device for the network" + network.getId() + " due to " + exception.getMessage()); + return false; + } finally { + deviceMapLock.unlock(); + } + } + } finally { + deviceMapLock.releaseRef(); + } + txn.commit(); + return true; + } + public String getExternalNetworkResourceGuid(long physicalNetworkId, String deviceName, String ip) { return physicalNetworkId + "-" + deviceName + "-" + ip; } @@ -422,15 +468,21 @@ public abstract class ExternalFirewallDeviceManagerImpl extends AdapterBase impl cmd.setAccessDetail(NetworkElementCommand.GUEST_VLAN_TAG, String.valueOf(guestVlanTag)); Answer answer = _agentMgr.easySend(externalFirewall.getId(), cmd); + List reservedIpAddressesForGuestNetwork = _nicDao.listIpAddressInNetwork(network.getId()); + if (answer == null || !answer.getResult()) { String action = add ? "implement" : "shutdown"; String answerDetails = (answer != null) ? answer.getDetails() : "answer was null"; String msg = "External firewall was unable to " + action + " the guest network on the external firewall in zone " + zone.getName() + " due to " + answerDetails; s_logger.error(msg); + if (!add && (!reservedIpAddressesForGuestNetwork.contains(network.getGateway()))) { + // If we failed the implementation as well, then just return, no complain + s_logger.error("Skip the shutdown of guest network on SRX because it seems we didn't implement it as well"); + return true; + } throw new ResourceUnavailableException(msg, DataCenter.class, zoneId); } - List reservedIpAddressesForGuestNetwork = _nicDao.listIpAddressInNetwork(network.getId()); if (add && (!reservedIpAddressesForGuestNetwork.contains(network.getGateway()))) { // Insert a new NIC for this guest network to reserve the gateway address savePlaceholderNic(network, network.getGateway()); @@ -447,6 +499,19 @@ public abstract class ExternalFirewallDeviceManagerImpl extends AdapterBase impl } } + // on network shutdown, delete placeHolder nics used for the firewall device + if (!add) { + List guestIps = _nicDao.listByNetworkId(network.getId()); + for (NicVO guestIp : guestIps) { + // only external firewall and external load balancer will create NicVO with PlaceHolder reservation strategy + if (guestIp.getReservationStrategy().equals(ReservationStrategy.PlaceHolder) && guestIp.getIp4Address().equals(network.getGateway())) { + _nicDao.remove(guestIp.getId()); + } + } + + freeFirewallForNetwork(network); + } + String action = add ? "implemented" : "shut down"; s_logger.debug("External firewall has " + action + " the guest network for account " + account.getAccountName() + "(id = " + account.getAccountId() + ") with VLAN tag " + guestVlanTag); @@ -456,6 +521,37 @@ public abstract class ExternalFirewallDeviceManagerImpl extends AdapterBase impl @Override public boolean applyFirewallRules(Network network, List rules) throws ResourceUnavailableException { // Find the external firewall in this zone + long zoneId = network.getDataCenterId(); + DataCenterVO zone = _dcDao.findById(zoneId); + ExternalFirewallDeviceVO fwDeviceVO = getExternalFirewallForNetwork(network); + // During destroy, device reference may already been clean up, then we just return true + if (fwDeviceVO == null) { + return true; + } + HostVO externalFirewall = _hostDao.findById(fwDeviceVO.getHostId()); + + assert(externalFirewall != null); + + if (network.getState() == Network.State.Allocated) { + s_logger.debug("External firewall was asked to apply firewall rules for network with ID " + network.getId() + "; this network is not implemented. Skipping backend commands."); + return true; + } + + List rulesTO = new ArrayList(); + + for (FirewallRule rule : rules) { + IpAddress sourceIp = _networkMgr.getIp(rule.getSourceIpAddressId()); + FirewallRuleTO ruleTO = new FirewallRuleTO(rule, null, sourceIp.getAddress().addr()); + rulesTO.add(ruleTO); + } + + //Firewall rules configured for staticNAT/PF + sendFirewallRules(rulesTO, zone, externalFirewall.getId()); + + return true; + } + + public boolean applyStaticNatRules(Network network, List rules) throws ResourceUnavailableException { long zoneId = network.getDataCenterId(); DataCenterVO zone = _dcDao.findById(zoneId); ExternalFirewallDeviceVO fwDeviceVO = getExternalFirewallForNetwork(network); @@ -469,32 +565,34 @@ public abstract class ExternalFirewallDeviceManagerImpl extends AdapterBase impl } List staticNatRules = new ArrayList(); - List portForwardingRules = new ArrayList(); - - for (FirewallRule rule : rules) { + + for (StaticNat rule : rules) { IpAddress sourceIp = _networkMgr.getIp(rule.getSourceIpAddressId()); Vlan vlan = _vlanDao.findById(sourceIp.getVlanId()); - if (rule.getPurpose() == Purpose.StaticNat) { - StaticNatRule staticNatRule = (StaticNatRule) rule; - StaticNatRuleTO ruleTO = new StaticNatRuleTO(staticNatRule, vlan.getVlanTag(), sourceIp.getAddress().addr(), staticNatRule.getDestIpAddress()); - staticNatRules.add(ruleTO); - } else if (rule.getPurpose() == Purpose.PortForwarding) { - PortForwardingRuleTO ruleTO = new PortForwardingRuleTO((PortForwardingRule) rule, vlan.getVlanTag(), sourceIp.getAddress().addr()); - portForwardingRules.add(ruleTO); - } + StaticNatRuleTO ruleTO = new StaticNatRuleTO(0,vlan.getVlanTag(), sourceIp.getAddress().addr(), -1, -1, rule.getDestIpAddress(), -1, -1, "any", rule.isForRevoke(), false); + staticNatRules.add(ruleTO); } - - // Apply static nat rules - applyStaticNatRules(staticNatRules, zone, externalFirewall.getId()); - - // apply port forwarding rules - applyPortForwardingRules(portForwardingRules, zone, externalFirewall.getId()); - + + sendStaticNatRules(staticNatRules, zone, externalFirewall.getId()); + return true; } + + protected void sendFirewallRules(List firewallRules, DataCenter zone, long externalFirewallId) throws ResourceUnavailableException { + if (!firewallRules.isEmpty()) { + SetFirewallRulesCommand cmd = new SetFirewallRulesCommand(firewallRules); + Answer answer = _agentMgr.easySend(externalFirewallId, cmd); + if (answer == null || !answer.getResult()) { + String details = (answer != null) ? answer.getDetails() : "details unavailable"; + String msg = "External firewall was unable to apply static nat rules to the SRX appliance in zone " + zone.getName() + " due to: " + details + "."; + s_logger.error(msg); + throw new ResourceUnavailableException(msg, DataCenter.class, zone.getId()); + } + } + } - protected void applyStaticNatRules(List staticNatRules, DataCenter zone, long externalFirewallId) throws ResourceUnavailableException { + protected void sendStaticNatRules(List staticNatRules, DataCenter zone, long externalFirewallId) throws ResourceUnavailableException { if (!staticNatRules.isEmpty()) { SetStaticNatRulesCommand cmd = new SetStaticNatRulesCommand(staticNatRules, null); Answer answer = _agentMgr.easySend(externalFirewallId, cmd); @@ -507,7 +605,7 @@ public abstract class ExternalFirewallDeviceManagerImpl extends AdapterBase impl } } - protected void applyPortForwardingRules(List portForwardingRules, DataCenter zone, long externalFirewallId) throws ResourceUnavailableException { + protected void sendPortForwardingRules(List portForwardingRules, DataCenter zone, long externalFirewallId) throws ResourceUnavailableException { if (!portForwardingRules.isEmpty()) { SetPortForwardingRulesCommand cmd = new SetPortForwardingRulesCommand(portForwardingRules); Answer answer = _agentMgr.easySend(externalFirewallId, cmd); @@ -648,7 +746,38 @@ public abstract class ExternalFirewallDeviceManagerImpl extends AdapterBase impl @Override public DeleteHostAnswer deleteHost(HostVO host, boolean isForced, boolean isForceDeleteStorage) throws UnableDeleteHostException { - // TODO Auto-generated method stub - return null; + if (host.getType() != com.cloud.host.Host.Type.ExternalFirewall) { + return null; + } + return new DeleteHostAnswer(true); + } + + @Override + public boolean applyPortForwardingRules(Network network, List rules) throws ResourceUnavailableException { + // Find the external firewall in this zone + long zoneId = network.getDataCenterId(); + DataCenterVO zone = _dcDao.findById(zoneId); + ExternalFirewallDeviceVO fwDeviceVO = getExternalFirewallForNetwork(network); + HostVO externalFirewall = _hostDao.findById(fwDeviceVO.getHostId()); + + assert(externalFirewall != null); + + if (network.getState() == Network.State.Allocated) { + s_logger.debug("External firewall was asked to apply firewall rules for network with ID " + network.getId() + "; this network is not implemented. Skipping backend commands."); + return true; + } + + List pfRules = new ArrayList(); + + for (PortForwardingRule rule : rules) { + IpAddress sourceIp = _networkMgr.getIp(rule.getSourceIpAddressId()); + Vlan vlan = _vlanDao.findById(sourceIp.getVlanId()); + + PortForwardingRuleTO ruleTO = new PortForwardingRuleTO(rule, vlan.getVlanTag(), sourceIp.getAddress().addr()); + pfRules.add(ruleTO); + } + + sendPortForwardingRules(pfRules, zone, externalFirewall.getId()); + return true; } } From 177e157cbfa40af82de628cb00876678d7646d2d Mon Sep 17 00:00:00 2001 From: Sheng Yang Date: Fri, 4 Jan 2013 18:56:47 -0800 Subject: [PATCH 266/421] CLOUDSTACK-306: Move inline mode parameter from device to network offering One F5 device can be used as inline and side-by-side at the same time(for different networks). So we can define inline or not on network base. --- .../cloud/agent/api/to/LoadBalancerTO.java | 12 ++- api/src/com/cloud/network/Network.java | 1 + .../com/cloud/offering/NetworkOffering.java | 1 + .../lb/ElasticLoadBalancerManagerImpl.java | 2 +- .../api/response/F5LoadBalancerResponse.java | 7 -- .../F5ExternalLoadBalancerElement.java | 4 +- .../network/resource/F5BigIpResource.java | 87 +++++++++---------- .../NetscalerLoadBalancerResponse.java | 7 -- .../network/element/NetscalerElement.java | 25 +----- .../src/com/cloud/api/ApiResponseHelper.java | 5 ++ .../ConfigurationManagerImpl.java | 23 ++++- ...ExternalLoadBalancerDeviceManagerImpl.java | 17 ++-- .../network/ExternalLoadBalancerDeviceVO.java | 18 +--- .../src/com/cloud/network/NetworkManager.java | 1 + .../com/cloud/network/NetworkManagerImpl.java | 5 ++ .../VirtualNetworkApplianceManagerImpl.java | 4 +- .../cloud/offerings/NetworkOfferingVO.java | 11 ++- .../cloud/server/ConfigurationServerImpl.java | 2 +- .../cloud/network/MockNetworkManagerImpl.java | 6 ++ .../com/cloud/vpc/MockNetworkManagerImpl.java | 5 ++ setup/db/create-schema.sql | 2 +- setup/db/db/schema-40to410.sql | 3 + 22 files changed, 131 insertions(+), 117 deletions(-) diff --git a/api/src/com/cloud/agent/api/to/LoadBalancerTO.java b/api/src/com/cloud/agent/api/to/LoadBalancerTO.java index 2e19af05569..2d166ea1e1e 100644 --- a/api/src/com/cloud/agent/api/to/LoadBalancerTO.java +++ b/api/src/com/cloud/agent/api/to/LoadBalancerTO.java @@ -43,12 +43,13 @@ public class LoadBalancerTO { String algorithm; boolean revoked; boolean alreadyAdded; + boolean inline; DestinationTO[] destinations; private StickinessPolicyTO[] stickinessPolicies; private AutoScaleVmGroupTO autoScaleVmGroupTO; final static int MAX_STICKINESS_POLICIES = 1; - public LoadBalancerTO(String uuid, String srcIp, int srcPort, String protocol, String algorithm, boolean revoked, boolean alreadyAdded, List destinations) { + public LoadBalancerTO(String uuid, String srcIp, int srcPort, String protocol, String algorithm, boolean revoked, boolean alreadyAdded, boolean inline, List destinations) { if (destinations == null) { // for autoscaleconfig destinations will be null; destinations = new ArrayList(); } @@ -59,6 +60,7 @@ public class LoadBalancerTO { this.algorithm = algorithm; this.revoked = revoked; this.alreadyAdded = alreadyAdded; + this.inline = inline; this.destinations = new DestinationTO[destinations.size()]; this.stickinessPolicies = null; int i = 0; @@ -67,8 +69,8 @@ public class LoadBalancerTO { } } - public LoadBalancerTO(String id, String srcIp, int srcPort, String protocol, String algorithm, boolean revoked, boolean alreadyAdded, List arg_destinations, List stickinessPolicies) { - this(id, srcIp, srcPort, protocol, algorithm, revoked, alreadyAdded, arg_destinations); + public LoadBalancerTO(String id, String srcIp, int srcPort, String protocol, String algorithm, boolean revoked, boolean alreadyAdded, boolean inline, List arg_destinations, List stickinessPolicies) { + this(id, srcIp, srcPort, protocol, algorithm, revoked, alreadyAdded, inline, arg_destinations); this.stickinessPolicies = null; if (stickinessPolicies != null && stickinessPolicies.size() > 0) { this.stickinessPolicies = new StickinessPolicyTO[MAX_STICKINESS_POLICIES]; @@ -116,6 +118,10 @@ public class LoadBalancerTO { return alreadyAdded; } + public boolean isInline() { + return inline; + } + public StickinessPolicyTO[] getStickinessPolicies() { return stickinessPolicies; } diff --git a/api/src/com/cloud/network/Network.java b/api/src/com/cloud/network/Network.java index 188ef92e57b..a6cbdd80f0e 100644 --- a/api/src/com/cloud/network/Network.java +++ b/api/src/com/cloud/network/Network.java @@ -171,6 +171,7 @@ public interface Network extends ControlledEntity { public static final Capability AssociatePublicIP = new Capability("AssociatePublicIP"); public static final Capability ElasticLb = new Capability("ElasticLb"); public static final Capability AutoScaleCounters = new Capability("AutoScaleCounters"); + public static final Capability InlineMode = new Capability("InlineMode"); private String name; diff --git a/api/src/com/cloud/offering/NetworkOffering.java b/api/src/com/cloud/offering/NetworkOffering.java index 29828ab6172..8de1d13e372 100644 --- a/api/src/com/cloud/offering/NetworkOffering.java +++ b/api/src/com/cloud/offering/NetworkOffering.java @@ -111,4 +111,5 @@ public interface NetworkOffering { boolean getSpecifyIpRanges(); + boolean isInline(); } diff --git a/plugins/network-elements/elastic-loadbalancer/src/com/cloud/network/lb/ElasticLoadBalancerManagerImpl.java b/plugins/network-elements/elastic-loadbalancer/src/com/cloud/network/lb/ElasticLoadBalancerManagerImpl.java index 366070af21f..0043cac778a 100644 --- a/plugins/network-elements/elastic-loadbalancer/src/com/cloud/network/lb/ElasticLoadBalancerManagerImpl.java +++ b/plugins/network-elements/elastic-loadbalancer/src/com/cloud/network/lb/ElasticLoadBalancerManagerImpl.java @@ -296,7 +296,7 @@ ElasticLoadBalancerManager, Manager, VirtualMachineGuru { int srcPort = rule.getSourcePortStart(); String uuid = rule.getUuid(); List destinations = rule.getDestinations(); - LoadBalancerTO lb = new LoadBalancerTO(uuid, elbIp, srcPort, protocol, algorithm, revoked, false, destinations); + LoadBalancerTO lb = new LoadBalancerTO(uuid, elbIp, srcPort, protocol, algorithm, revoked, false, false, destinations); lbs[i++] = lb; } diff --git a/plugins/network-elements/f5/src/com/cloud/api/response/F5LoadBalancerResponse.java b/plugins/network-elements/f5/src/com/cloud/api/response/F5LoadBalancerResponse.java index dbb962fff03..275fca687ba 100644 --- a/plugins/network-elements/f5/src/com/cloud/api/response/F5LoadBalancerResponse.java +++ b/plugins/network-elements/f5/src/com/cloud/api/response/F5LoadBalancerResponse.java @@ -43,9 +43,6 @@ public class F5LoadBalancerResponse extends BaseResponse { @SerializedName(ApiConstants.LOAD_BALANCER_DEVICE_DEDICATED) @Param(description="true if device is dedicated for an account") private Boolean dedicatedLoadBalancer; - @SerializedName(ApiConstants.INLINE) @Param(description="true if device is inline with firewall device") - private Boolean inlineLoadBalancer; - @SerializedName(ApiConstants.PUBLIC_INTERFACE) @Param(description="the public interface of the load balancer") private String publicInterface; @@ -83,10 +80,6 @@ public class F5LoadBalancerResponse extends BaseResponse { this.dedicatedLoadBalancer = isDedicated; } - public void setInlineMode(boolean inline) { - this.inlineLoadBalancer = inline; - } - public void setPublicInterface(String publicInterface) { this.publicInterface = publicInterface; } diff --git a/plugins/network-elements/f5/src/com/cloud/network/element/F5ExternalLoadBalancerElement.java b/plugins/network-elements/f5/src/com/cloud/network/element/F5ExternalLoadBalancerElement.java index 579a4628c74..63e82751b4d 100644 --- a/plugins/network-elements/f5/src/com/cloud/network/element/F5ExternalLoadBalancerElement.java +++ b/plugins/network-elements/f5/src/com/cloud/network/element/F5ExternalLoadBalancerElement.java @@ -206,6 +206,9 @@ public class F5ExternalLoadBalancerElement extends ExternalLoadBalancerDeviceMan // Specifies that load balancing rules can only be made with public IPs that aren't source NAT IPs lbCapabilities.put(Capability.LoadBalancingSupportedIps, "additional"); + // Support inline mode with firewall + lbCapabilities.put(Capability.InlineMode, "true"); + LbStickinessMethod method; List methodList = new ArrayList(); method = new LbStickinessMethod(StickinessMethodType.LBCookieBased, "This is cookie based sticky method, can be used only for http"); @@ -448,7 +451,6 @@ public class F5ExternalLoadBalancerElement extends ExternalLoadBalancerDeviceMan } else { response.setDeviceCapacity(lbDeviceVO.getCapacity()); } - response.setInlineMode(lbDeviceVO.getIsInLineMode()); response.setDedicatedLoadBalancer(lbDeviceVO.getIsDedicatedDevice()); response.setProvider(lbDeviceVO.getProviderName()); response.setDeviceState(lbDeviceVO.getState().name()); diff --git a/plugins/network-elements/f5/src/com/cloud/network/resource/F5BigIpResource.java b/plugins/network-elements/f5/src/com/cloud/network/resource/F5BigIpResource.java index a45dd92ca98..618cd912e91 100644 --- a/plugins/network-elements/f5/src/com/cloud/network/resource/F5BigIpResource.java +++ b/plugins/network-elements/f5/src/com/cloud/network/resource/F5BigIpResource.java @@ -119,7 +119,6 @@ public class F5BigIpResource implements ServerResource { private String _privateInterface; private Integer _numRetries; private String _guid; - private boolean _inline; private Interfaces _interfaces; private LocalLBVirtualServerBindingStub _virtualServerApi; @@ -180,8 +179,6 @@ public class F5BigIpResource implements ServerResource { throw new ConfigurationException("Unable to find the guid"); } - _inline = Boolean.parseBoolean((String) params.get("inline")); - login(); return true; @@ -292,45 +289,49 @@ public class F5BigIpResource implements ServerResource { } private synchronized Answer execute(IpAssocCommand cmd, int numRetries) { - String[] results = new String[cmd.getIpAddresses().length]; - int i = 0; - try { - IpAddressTO[] ips = cmd.getIpAddresses(); - for (IpAddressTO ip : ips) { - long guestVlanTag = Long.valueOf(ip.getVlanId()); - String vlanSelfIp = _inline ? tagAddressWithRouteDomain(ip.getVlanGateway(), guestVlanTag) : ip.getVlanGateway(); - String vlanNetmask = ip.getVlanNetmask(); - - // Delete any existing guest VLAN with this tag, self IP, and netmask - deleteGuestVlan(guestVlanTag, vlanSelfIp, vlanNetmask); - - if (ip.isAdd()) { - // Add a new guest VLAN - addGuestVlan(guestVlanTag, vlanSelfIp, vlanNetmask); + String[] results = new String[cmd.getIpAddresses().length]; + int i = 0; + try { + IpAddressTO[] ips = cmd.getIpAddresses(); + for (IpAddressTO ip : ips) { + long guestVlanTag = Long.valueOf(ip.getVlanId()); + // It's a hack, using isOneToOneNat field for indicate if it's inline or not + // We'd better have an separate SetupGuestNetwork command later + boolean inline = ip.isOneToOneNat(); + String vlanSelfIp = inline ? tagAddressWithRouteDomain(ip.getVlanGateway(), guestVlanTag) : ip.getVlanGateway(); + String vlanNetmask = ip.getVlanNetmask(); + + // Delete any existing guest VLAN with this tag, self IP, and netmask + deleteGuestVlan(guestVlanTag, vlanSelfIp, vlanNetmask, inline); + + if (ip.isAdd()) { + // Add a new guest VLAN + addGuestVlan(guestVlanTag, vlanSelfIp, vlanNetmask, inline); + } + + saveConfiguration(); + results[i++] = ip.getPublicIp() + " - success"; } - - saveConfiguration(); - results[i++] = ip.getPublicIp() + " - success"; - } - - } catch (ExecutionException e) { - s_logger.error("Failed to execute IPAssocCommand due to " + e); - - if (shouldRetry(numRetries)) { - return retry(cmd, numRetries); - } else { - results[i++] = IpAssocAnswer.errorResult; - } - } - - return new IpAssocAnswer(cmd, results); - } + + } catch (ExecutionException e) { + s_logger.error("Failed to execute IPAssocCommand due to " + e); + + if (shouldRetry(numRetries)) { + return retry(cmd, numRetries); + } else { + results[i++] = IpAssocAnswer.errorResult; + } + } + + return new IpAssocAnswer(cmd, results); + } private synchronized Answer execute(LoadBalancerConfigCommand cmd, int numRetries) { try { long guestVlanTag = Long.parseLong(cmd.getAccessDetail(NetworkElementCommand.GUEST_VLAN_TAG)); LoadBalancerTO[] loadBalancers = cmd.getLoadBalancers(); for (LoadBalancerTO loadBalancer : loadBalancers) { + boolean inline = loadBalancer.isInline(); LbProtocol lbProtocol; try { if (loadBalancer.getProtocol() == null) { @@ -351,7 +352,7 @@ public class F5BigIpResource implements ServerResource { throw new ExecutionException("Got invalid algorithm: " + loadBalancer.getAlgorithm()); } - String srcIp = _inline ? tagAddressWithRouteDomain(loadBalancer.getSrcIp(), guestVlanTag) : loadBalancer.getSrcIp(); + String srcIp = inline ? tagAddressWithRouteDomain(loadBalancer.getSrcIp(), guestVlanTag) : loadBalancer.getSrcIp(); int srcPort = loadBalancer.getSrcPort(); String virtualServerName = genVirtualServerName(lbProtocol, srcIp, srcPort); @@ -371,7 +372,7 @@ public class F5BigIpResource implements ServerResource { List activePoolMembers = new ArrayList(); for (DestinationTO destination : loadBalancer.getDestinations()) { if (!destination.isRevoked()) { - String destIp = _inline ? tagAddressWithRouteDomain(destination.getDestIp(), guestVlanTag) : destination.getDestIp(); + String destIp = inline ? tagAddressWithRouteDomain(destination.getDestIp(), guestVlanTag) : destination.getDestIp(); addPoolMember(virtualServerName, destIp, destination.getDestPort()); activePoolMembers.add(destIp + "-" + destination.getDestPort()); } @@ -421,7 +422,7 @@ public class F5BigIpResource implements ServerResource { } } - private void addGuestVlan(long vlanTag, String vlanSelfIp, String vlanNetmask) throws ExecutionException { + private void addGuestVlan(long vlanTag, String vlanSelfIp, String vlanNetmask, boolean inline) throws ExecutionException { try { String vlanName = genVlanName(vlanTag); List allVlans = getVlans(); @@ -444,7 +445,7 @@ public class F5BigIpResource implements ServerResource { } } - if (_inline) { + if (inline) { List allRouteDomains = getRouteDomains(); if (!allRouteDomains.contains(vlanTag)) { long[] routeDomainIds = genLongArray(vlanTag); @@ -481,7 +482,7 @@ public class F5BigIpResource implements ServerResource { } - private void deleteGuestVlan(long vlanTag, String vlanSelfIp, String vlanNetmask) throws ExecutionException { + private void deleteGuestVlan(long vlanTag, String vlanSelfIp, String vlanNetmask, boolean inline) throws ExecutionException { try { // Delete all virtual servers and pools that use this guest VLAN deleteVirtualServersInGuestVlan(vlanSelfIp, vlanNetmask); @@ -496,7 +497,7 @@ public class F5BigIpResource implements ServerResource { } } - if (_inline) { + if (inline) { List allRouteDomains = getRouteDomains(); if (allRouteDomains.contains(vlanTag)) { s_logger.debug("Deleting route domain " + vlanTag); @@ -969,9 +970,7 @@ public class F5BigIpResource implements ServerResource { for (LocalLBVirtualServerVirtualServerStatisticEntry entry : stats.getStatistics()) { String virtualServerIp = entry.getVirtual_server().getAddress(); - if (_inline) { - virtualServerIp = stripRouteDomainFromAddress(virtualServerIp); - } + virtualServerIp = stripRouteDomainFromAddress(virtualServerIp); long[] bytesSentAndReceived = answer.ipBytes.get(virtualServerIp); diff --git a/plugins/network-elements/netscaler/src/com/cloud/api/response/NetscalerLoadBalancerResponse.java b/plugins/network-elements/netscaler/src/com/cloud/api/response/NetscalerLoadBalancerResponse.java index bbbfca515a1..7bc70dc786f 100644 --- a/plugins/network-elements/netscaler/src/com/cloud/api/response/NetscalerLoadBalancerResponse.java +++ b/plugins/network-elements/netscaler/src/com/cloud/api/response/NetscalerLoadBalancerResponse.java @@ -49,9 +49,6 @@ public class NetscalerLoadBalancerResponse extends BaseResponse { @SerializedName(ApiConstants.LOAD_BALANCER_DEVICE_DEDICATED) @Param(description="true if device is dedicated for an account") private Boolean dedicatedLoadBalancer; - @SerializedName(ApiConstants.INLINE) @Param(description="true if device is inline with firewall device") - private Boolean inlineLoadBalancer; - @SerializedName(ApiConstants.PUBLIC_INTERFACE) @Param(description="the public interface of the load balancer") private String publicInterface; @@ -94,10 +91,6 @@ public class NetscalerLoadBalancerResponse extends BaseResponse { this.deviceState = deviceState; } - public void setInlineMode(boolean inline) { - this.inlineLoadBalancer = inline; - } - public void setPublicInterface(String publicInterface) { this.publicInterface = publicInterface; } diff --git a/plugins/network-elements/netscaler/src/com/cloud/network/element/NetscalerElement.java b/plugins/network-elements/netscaler/src/com/cloud/network/element/NetscalerElement.java index 987e937952d..c4f0ef392ef 100644 --- a/plugins/network-elements/netscaler/src/com/cloud/network/element/NetscalerElement.java +++ b/plugins/network-elements/netscaler/src/com/cloud/network/element/NetscalerElement.java @@ -353,18 +353,17 @@ StaticNatServiceProvider { public ExternalLoadBalancerDeviceVO configureNetscalerLoadBalancer(ConfigureNetscalerLoadBalancerCmd cmd) { Long lbDeviceId = cmd.getLoadBalancerDeviceId(); Boolean dedicatedUse = cmd.getLoadBalancerDedicated(); - Boolean inline = cmd.getLoadBalancerInline(); Long capacity = cmd.getLoadBalancerCapacity(); List podIds = cmd.getPodIds(); try { - return configureNetscalerLoadBalancer(lbDeviceId, capacity, inline, dedicatedUse, podIds); + return configureNetscalerLoadBalancer(lbDeviceId, capacity, dedicatedUse, podIds); } catch (Exception e) { throw new CloudRuntimeException("failed to configure netscaler device due to " + e.getMessage()); } } @DB - private ExternalLoadBalancerDeviceVO configureNetscalerLoadBalancer(long lbDeviceId, Long capacity, Boolean inline, Boolean dedicatedUse, List newPodsConfig) { + private ExternalLoadBalancerDeviceVO configureNetscalerLoadBalancer(long lbDeviceId, Long capacity, Boolean dedicatedUse, List newPodsConfig) { ExternalLoadBalancerDeviceVO lbDeviceVo = _lbDeviceDao.findById(lbDeviceId); Map lbDetails = _detailsDao.findDetails(lbDeviceVo.getHostId()); @@ -404,7 +403,7 @@ StaticNatServiceProvider { } String deviceName = lbDeviceVo.getDeviceName(); - if (dedicatedUse != null || capacity != null || inline != null) { + if (dedicatedUse != null || capacity != null) { if (NetworkDevice.NetscalerSDXLoadBalancer.getName().equalsIgnoreCase(deviceName) || NetworkDevice.NetscalerMPXLoadBalancer.getName().equalsIgnoreCase(deviceName)) { if (dedicatedUse != null && dedicatedUse == true) { @@ -422,13 +421,6 @@ StaticNatServiceProvider { if (dedicatedUse != null && dedicatedUse == true) { throw new CloudRuntimeException("There are networks already using this netscaler device to make device dedicated"); } - - if (inline != null) { - boolean _setInline = Boolean.parseBoolean(lbDetails.get("inline")); - if (inline != _setInline) { - throw new CloudRuntimeException("There are networks already using this netscaler device to change the device inline or side-by-side configuration"); - } - } } } @@ -444,14 +436,6 @@ StaticNatServiceProvider { lbDeviceVo.setIsDedicatedDevice(dedicatedUse); } - if (inline != null && inline == true) { - lbDeviceVo.setIsInlineMode(true); - lbDetails.put("inline", "true"); - } else { - lbDeviceVo.setIsInlineMode(false); - lbDetails.put("inline", "false"); - } - Transaction txn = Transaction.currentTxn(); txn.start(); @@ -552,7 +536,6 @@ StaticNatServiceProvider { } else { response.setDeviceCapacity(lbDeviceVO.getCapacity()); } - response.setInlineMode(lbDeviceVO.getIsInLineMode()); response.setDedicatedLoadBalancer(lbDeviceVO.getIsDedicatedDevice()); response.setProvider(lbDeviceVO.getProviderName()); response.setDeviceState(lbDeviceVO.getState().name()); @@ -690,7 +673,7 @@ StaticNatServiceProvider { List destinations = rule.getDestinations(); if ((destinations != null && !destinations.isEmpty()) || rule.isAutoScaleConfig()) { - LoadBalancerTO loadBalancer = new LoadBalancerTO(lbUuid, srcIp, srcPort, protocol, algorithm, revoked, false, destinations, rule.getStickinessPolicies()); + LoadBalancerTO loadBalancer = new LoadBalancerTO(lbUuid, srcIp, srcPort, protocol, algorithm, revoked, false, false, destinations, rule.getStickinessPolicies()); if (rule.isAutoScaleConfig()) { loadBalancer.setAutoScaleVmGroup(rule.getAutoScaleVmGroup()); } diff --git a/server/src/com/cloud/api/ApiResponseHelper.java b/server/src/com/cloud/api/ApiResponseHelper.java index 8f9837f54a5..e3450e95629 100755 --- a/server/src/com/cloud/api/ApiResponseHelper.java +++ b/server/src/com/cloud/api/ApiResponseHelper.java @@ -3006,6 +3006,11 @@ public class ApiResponseHelper implements ResponseGenerator { eLb.setValue(offering.getElasticLb() ? "true" : "false"); lbCapResponse.add(eLb); + CapabilityResponse inline = new CapabilityResponse(); + inline.setName(Capability.InlineMode.getName()); + inline.setValue(offering.isInline() ? "true" : "false"); + lbCapResponse.add(inline); + svcRsp.setCapabilities(lbCapResponse); } else if (Service.SourceNat == service) { List capabilities = new ArrayList(); diff --git a/server/src/com/cloud/configuration/ConfigurationManagerImpl.java b/server/src/com/cloud/configuration/ConfigurationManagerImpl.java index c7a5d64ac7e..de0931f4728 100755 --- a/server/src/com/cloud/configuration/ConfigurationManagerImpl.java +++ b/server/src/com/cloud/configuration/ConfigurationManagerImpl.java @@ -3099,8 +3099,8 @@ public class ConfigurationManagerImpl implements ConfigurationManager, Configura void validateLoadBalancerServiceCapabilities(Map lbServiceCapabilityMap) { if (lbServiceCapabilityMap != null && !lbServiceCapabilityMap.isEmpty()) { - if (lbServiceCapabilityMap.keySet().size() > 2 || !lbServiceCapabilityMap.containsKey(Capability.SupportedLBIsolation)) { - throw new InvalidParameterValueException("Only " + Capability.SupportedLBIsolation.getName() + " and " + Capability.ElasticLb + " capabilities can be sepcified for LB service"); + if (lbServiceCapabilityMap.keySet().size() > 3 || !lbServiceCapabilityMap.containsKey(Capability.SupportedLBIsolation)) { + throw new InvalidParameterValueException("Only " + Capability.SupportedLBIsolation.getName() + ", " + Capability.ElasticLb.getName() + ", " + Capability.InlineMode.getName() + " capabilities can be sepcified for LB service"); } for (Capability cap : lbServiceCapabilityMap.keySet()) { @@ -3117,8 +3117,14 @@ public class ConfigurationManagerImpl implements ConfigurationManager, Configura if (!enabled && !disabled) { throw new InvalidParameterValueException("Unknown specified value for " + Capability.ElasticLb.getName()); } + } else if (cap == Capability.InlineMode) { + boolean enabled = value.contains("true"); + boolean disabled = value.contains("false"); + if (!enabled && !disabled) { + throw new InvalidParameterValueException("Unknown specified value for " + Capability.InlineMode.getName()); + } } else { - throw new InvalidParameterValueException("Only " + Capability.SupportedLBIsolation.getName() + " and " + Capability.ElasticLb + " capabilities can be sepcified for LB service"); + throw new InvalidParameterValueException("Only " + Capability.SupportedLBIsolation.getName() + ", " + Capability.ElasticLb.getName() + ", " + Capability.InlineMode.getName() + " capabilities can be sepcified for LB service"); } } } @@ -3234,6 +3240,7 @@ public class ConfigurationManagerImpl implements ConfigurationManager, Configura boolean redundantRouter = false; boolean elasticIp = false; boolean associatePublicIp = false; + boolean inline = false; if (serviceCapabilityMap != null && !serviceCapabilityMap.isEmpty()) { Map lbServiceCapabilityMap = serviceCapabilityMap.get(Service.Lb); @@ -3250,6 +3257,14 @@ public class ConfigurationManagerImpl implements ConfigurationManager, Configura if (param != null) { elasticLb = param.contains("true"); } + + String inlineMode = lbServiceCapabilityMap.get(Capability.InlineMode); + if (inlineMode != null) { + _networkMgr.checkCapabilityForProvider(serviceProviderMap.get(Service.Lb), Service.Lb, Capability.InlineMode, inlineMode); + inline = inlineMode.contains("true"); + } else { + inline = false; + } } Map sourceNatServiceCapabilityMap = serviceCapabilityMap.get(Service.SourceNat); @@ -3284,7 +3299,7 @@ public class ConfigurationManagerImpl implements ConfigurationManager, Configura NetworkOfferingVO offering = new NetworkOfferingVO(name, displayText, trafficType, systemOnly, specifyVlan, networkRate, multicastRate, isDefault, availability, tags, type, conserveMode, dedicatedLb, - sharedSourceNat, redundantRouter, elasticIp, elasticLb, associatePublicIp, specifyIpRanges); + sharedSourceNat, redundantRouter, elasticIp, elasticLb, associatePublicIp, specifyIpRanges, inline); if (serviceOfferingId != null) { offering.setServiceOfferingId(serviceOfferingId); diff --git a/server/src/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java b/server/src/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java index 8c69bf6d852..839f8023220 100644 --- a/server/src/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java +++ b/server/src/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java @@ -239,7 +239,6 @@ public abstract class ExternalLoadBalancerDeviceManagerImpl extends AdapterBase if (host != null) { boolean dedicatedUse = (configParams.get(ApiConstants.LOAD_BALANCER_DEVICE_DEDICATED) != null) ? Boolean.parseBoolean(configParams.get(ApiConstants.LOAD_BALANCER_DEVICE_DEDICATED)) : false; - boolean inline = (configParams.get(ApiConstants.INLINE) != null) ? Boolean.parseBoolean(configParams.get(ApiConstants.INLINE)) : false; long capacity = NumbersUtil.parseLong(configParams.get(ApiConstants.LOAD_BALANCER_DEVICE_CAPACITY), 0); if (capacity == 0) { capacity = _defaultLbCapacity; @@ -247,7 +246,7 @@ public abstract class ExternalLoadBalancerDeviceManagerImpl extends AdapterBase txn.start(); ExternalLoadBalancerDeviceVO lbDeviceVO = new ExternalLoadBalancerDeviceVO(host.getId(), pNetwork.getId(), ntwkSvcProvider.getProviderName(), - deviceName, capacity, dedicatedUse, inline); + deviceName, capacity, dedicatedUse); _externalLoadBalancerDeviceDao.persist(lbDeviceVO); DetailVO hostDetail = new DetailVO(host.getId(), ApiConstants.LOAD_BALANCER_DEVICE_ID, String.valueOf(lbDeviceVO.getId())); @@ -708,11 +707,6 @@ public abstract class ExternalLoadBalancerDeviceManagerImpl extends AdapterBase return fwHost; } - private boolean externalLoadBalancerIsInline(HostVO externalLoadBalancer) { - DetailVO detail = _hostDetailDao.findDetail(externalLoadBalancer.getId(), "inline"); - return (detail != null && detail.getValue().equals("true")); - } - private NicVO savePlaceholderNic(Network network, String ipAddress) { NicVO nic = new NicVO(null, null, network.getId(), null); nic.setIp4Address(ipAddress); @@ -786,7 +780,7 @@ public abstract class ExternalLoadBalancerDeviceManagerImpl extends AdapterBase HostVO externalLoadBalancer = _hostDao.findById(lbDeviceVO.getHostId()); - boolean externalLoadBalancerIsInline = externalLoadBalancerIsInline(externalLoadBalancer); + boolean externalLoadBalancerIsInline = _networkMgr.isNetworkInlineMode(network); if (network.getState() == Network.State.Allocated) { s_logger.debug("External load balancer was asked to apply LB rules for network with ID " + network.getId() + "; this network is not implemented. Skipping backend commands."); @@ -867,7 +861,8 @@ public abstract class ExternalLoadBalancerDeviceManagerImpl extends AdapterBase } if ((destinations != null && !destinations.isEmpty()) || rule.isAutoScaleConfig()) { - LoadBalancerTO loadBalancer = new LoadBalancerTO(uuid, srcIp, srcPort, protocol, algorithm, revoked, false, destinations, rule.getStickinessPolicies()); + boolean inline = _networkMgr.isNetworkInlineMode(network); + LoadBalancerTO loadBalancer = new LoadBalancerTO(uuid, srcIp, srcPort, protocol, algorithm, revoked, false, inline, destinations, rule.getStickinessPolicies()); if(rule.isAutoScaleConfig()) { loadBalancer.setAutoScaleVmGroup(rule.getAutoScaleVmGroup()); } @@ -951,7 +946,9 @@ public abstract class ExternalLoadBalancerDeviceManagerImpl extends AdapterBase selfIp = selfipNic.getIp4Address(); } - IpAddressTO ip = new IpAddressTO(guestConfig.getAccountId(), null, add, false, true, String.valueOf(guestVlanTag), selfIp, guestVlanNetmask, null, networkRate, false); + // It's a hack, using isOneToOneNat field for indicate if it's inline or not + boolean inline = _networkMgr.isNetworkInlineMode(guestConfig); + IpAddressTO ip = new IpAddressTO(guestConfig.getAccountId(), null, add, false, true, String.valueOf(guestVlanTag), selfIp, guestVlanNetmask, null, networkRate, inline); IpAddressTO[] ips = new IpAddressTO[1]; ips[0] = ip; IpAssocCommand cmd = new IpAssocCommand(ips); diff --git a/server/src/com/cloud/network/ExternalLoadBalancerDeviceVO.java b/server/src/com/cloud/network/ExternalLoadBalancerDeviceVO.java index 190067b653b..e9414dc3bfb 100644 --- a/server/src/com/cloud/network/ExternalLoadBalancerDeviceVO.java +++ b/server/src/com/cloud/network/ExternalLoadBalancerDeviceVO.java @@ -66,9 +66,6 @@ public class ExternalLoadBalancerDeviceVO { @Column(name="is_managed") private boolean isManagedDevice; - @Column(name="is_inline") - private boolean isInlineMode; - @Column(name="is_dedicated") private boolean isDedicatedDevice; @@ -92,7 +89,7 @@ public class ExternalLoadBalancerDeviceVO { } public ExternalLoadBalancerDeviceVO(long hostId, long physicalNetworkId, String provider_name, String device_name, - long capacity, boolean dedicated, boolean inline) { + long capacity, boolean dedicated) { this.physicalNetworkId = physicalNetworkId; this.providerName = provider_name; this.deviceName = device_name; @@ -101,7 +98,6 @@ public class ExternalLoadBalancerDeviceVO { this.allocationState = LBDeviceAllocationState.Free; this.capacity = capacity; this.isDedicatedDevice = dedicated; - this.isInlineMode = inline; this.isManagedDevice = false; this.state = LBDeviceState.Enabled; this.uuid = UUID.randomUUID().toString(); @@ -112,8 +108,8 @@ public class ExternalLoadBalancerDeviceVO { } public ExternalLoadBalancerDeviceVO(long hostId, long physicalNetworkId, String provider_name, String device_name, - long capacity, boolean dedicated, boolean inline, boolean managed, long parentHostId) { - this(hostId, physicalNetworkId, provider_name, device_name, capacity, dedicated, inline); + long capacity, boolean dedicated, boolean managed, long parentHostId) { + this(hostId, physicalNetworkId, provider_name, device_name, capacity, dedicated); this.isManagedDevice = managed; this.parentHostId = parentHostId; } @@ -182,14 +178,6 @@ public class ExternalLoadBalancerDeviceVO { this.isManagedDevice = managed; } - public boolean getIsInLineMode () { - return isInlineMode; - } - - public void setIsInlineMode(boolean inline) { - this.isInlineMode = inline; - } - public boolean getIsDedicatedDevice() { return isDedicatedDevice; } diff --git a/server/src/com/cloud/network/NetworkManager.java b/server/src/com/cloud/network/NetworkManager.java index 057f473e732..d52e88a45bd 100755 --- a/server/src/com/cloud/network/NetworkManager.java +++ b/server/src/com/cloud/network/NetworkManager.java @@ -483,4 +483,5 @@ public interface NetworkManager extends NetworkService { */ int getNetworkLockTimeout(); + boolean isNetworkInlineMode(Network network); } diff --git a/server/src/com/cloud/network/NetworkManagerImpl.java b/server/src/com/cloud/network/NetworkManagerImpl.java index 3f8b08519ad..f993b2b9b72 100755 --- a/server/src/com/cloud/network/NetworkManagerImpl.java +++ b/server/src/com/cloud/network/NetworkManagerImpl.java @@ -7484,4 +7484,9 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag return _networkLockTimeout; } + @Override + public boolean isNetworkInlineMode(Network network) { + NetworkOfferingVO offering = _networkOfferingDao.findById(network.getNetworkOfferingId()); + return offering.isInline(); + } } diff --git a/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java b/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java index 966c32de6c2..c61e97965f1 100755 --- a/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java +++ b/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java @@ -2835,6 +2835,8 @@ public class VirtualNetworkApplianceManagerImpl implements VirtualNetworkApplian LoadBalancerTO[] lbs = new LoadBalancerTO[rules.size()]; int i = 0; + // We don't support VR to be inline currently + boolean inline = false; for (LoadBalancingRule rule : rules) { boolean revoked = (rule.getState().equals(FirewallRule.State.Revoke)); String protocol = rule.getProtocol(); @@ -2845,7 +2847,7 @@ public class VirtualNetworkApplianceManagerImpl implements VirtualNetworkApplian int srcPort = rule.getSourcePortStart(); List destinations = rule.getDestinations(); List stickinessPolicies = rule.getStickinessPolicies(); - LoadBalancerTO lb = new LoadBalancerTO(uuid, srcIp, srcPort, protocol, algorithm, revoked, false, destinations, stickinessPolicies); + LoadBalancerTO lb = new LoadBalancerTO(uuid, srcIp, srcPort, protocol, algorithm, revoked, false, false, destinations, stickinessPolicies); lbs[i++] = lb; } String routerPublicIp = null; diff --git a/server/src/com/cloud/offerings/NetworkOfferingVO.java b/server/src/com/cloud/offerings/NetworkOfferingVO.java index 2570b70f630..100a52935b8 100755 --- a/server/src/com/cloud/offerings/NetworkOfferingVO.java +++ b/server/src/com/cloud/offerings/NetworkOfferingVO.java @@ -117,6 +117,9 @@ public class NetworkOfferingVO implements NetworkOffering, Identity { @Column(name = "eip_associate_public_ip") boolean eipAssociatePublicIp; + @Column(name = "inline") + boolean inline; + @Override public String getDisplayText() { return displayText; @@ -278,12 +281,13 @@ public class NetworkOfferingVO implements NetworkOffering, Identity { this.elasticIp = false; this.elasticLb = false; this.eipAssociatePublicIp = true; + this.inline = false; this.specifyIpRanges = specifyIpRanges; } public NetworkOfferingVO(String name, String displayText, TrafficType trafficType, boolean systemOnly, boolean specifyVlan, Integer rateMbps, Integer multicastRateMbps, boolean isDefault, Availability availability, String tags, Network.GuestType guestType, boolean conserveMode, boolean dedicatedLb, boolean sharedSourceNat, boolean redundantRouter, boolean elasticIp, boolean elasticLb, - boolean associatePublicIP, boolean specifyIpRanges) { + boolean associatePublicIP, boolean specifyIpRanges, boolean inline) { this(name, displayText, trafficType, systemOnly, specifyVlan, rateMbps, multicastRateMbps, isDefault, availability, tags, guestType, conserveMode, specifyIpRanges); this.dedicatedLB = dedicatedLb; this.sharedSourceNat = sharedSourceNat; @@ -291,6 +295,7 @@ public class NetworkOfferingVO implements NetworkOffering, Identity { this.elasticIp = elasticIp; this.elasticLb = elasticLb; this.eipAssociatePublicIp = associatePublicIP; + this.inline = inline; } public NetworkOfferingVO() { @@ -367,4 +372,8 @@ public class NetworkOfferingVO implements NetworkOffering, Identity { return specifyIpRanges; } + @Override + public boolean isInline() { + return inline; + } } diff --git a/server/src/com/cloud/server/ConfigurationServerImpl.java b/server/src/com/cloud/server/ConfigurationServerImpl.java index c0c29ed8eb8..43a1d99c888 100755 --- a/server/src/com/cloud/server/ConfigurationServerImpl.java +++ b/server/src/com/cloud/server/ConfigurationServerImpl.java @@ -971,7 +971,7 @@ public class ConfigurationServerImpl implements ConfigurationServer { "Offering for Shared networks with Elastic IP and Elastic LB capabilities", TrafficType.Guest, false, true, null, null, true, Availability.Optional, - null, Network.GuestType.Shared, true, false, false, false, true, true, true, true); + null, Network.GuestType.Shared, true, false, false, false, true, true, true, true, false); defaultNetscalerNetworkOffering.setState(NetworkOffering.State.Enabled); defaultNetscalerNetworkOffering = _networkOfferingDao.persistDefaultNetworkOffering(defaultNetscalerNetworkOffering); diff --git a/server/test/com/cloud/network/MockNetworkManagerImpl.java b/server/test/com/cloud/network/MockNetworkManagerImpl.java index 76b911a722e..d8ef9e4cfbe 100755 --- a/server/test/com/cloud/network/MockNetworkManagerImpl.java +++ b/server/test/com/cloud/network/MockNetworkManagerImpl.java @@ -1135,4 +1135,10 @@ public class MockNetworkManagerImpl implements NetworkManager, Manager, NetworkS // TODO Auto-generated method stub return 0; } + + @Override + public boolean isNetworkInlineMode(Network network) { + // TODO Auto-generated method stub + return false; + } } diff --git a/server/test/com/cloud/vpc/MockNetworkManagerImpl.java b/server/test/com/cloud/vpc/MockNetworkManagerImpl.java index 3536d66ea4f..2141c1b0e09 100644 --- a/server/test/com/cloud/vpc/MockNetworkManagerImpl.java +++ b/server/test/com/cloud/vpc/MockNetworkManagerImpl.java @@ -1480,4 +1480,9 @@ public class MockNetworkManagerImpl implements NetworkManager, Manager{ return 0; } + @Override + public boolean isNetworkInlineMode(Network network) { + // TODO Auto-generated method stub + return false; + } } diff --git a/setup/db/create-schema.sql b/setup/db/create-schema.sql index 1b6ee5df112..fb00ed4cd37 100755 --- a/setup/db/create-schema.sql +++ b/setup/db/create-schema.sql @@ -308,6 +308,7 @@ CREATE TABLE `cloud`.`network_offerings` ( `eip_associate_public_ip` int(1) unsigned NOT NULL DEFAULT 0 COMMENT 'true if public IP is associated with user VM creation by default when EIP service is enabled.', `elastic_lb_service` int(1) unsigned NOT NULL DEFAULT 0 COMMENT 'true if the network offering provides elastic lb service', `specify_ip_ranges` int(1) unsigned NOT NULL DEFAULT 0 COMMENT 'true if the network offering provides an ability to define ip ranges', + `inline` int(1) unsigned NOT NULL DEFAULT 0 COMMENT 'Is this network offering LB provider is in inline mode', PRIMARY KEY (`id`), INDEX `i_network_offerings__system_only`(`system_only`), INDEX `i_network_offerings__removed`(`removed`), @@ -2075,7 +2076,6 @@ CREATE TABLE `cloud`.`external_load_balancer_devices` ( `device_state` varchar(32) NOT NULL DEFAULT 'Disabled' COMMENT 'state (enabled/disabled/shutdown) of the device', `allocation_state` varchar(32) NOT NULL DEFAULT 'Free' COMMENT 'Allocation state (Free/Shared/Dedicated/Provider) of the device', `is_dedicated` int(1) unsigned NOT NULL DEFAULT 0 COMMENT '1 if device/appliance is provisioned for dedicated use only', - `is_inline` int(1) unsigned NOT NULL DEFAULT 0 COMMENT '1 if load balancer will be used in in-line configuration with firewall', `is_managed` int(1) unsigned NOT NULL DEFAULT 0 COMMENT '1 if load balancer appliance is provisioned and its life cycle is managed by by cloudstack', `host_id` bigint unsigned NOT NULL COMMENT 'host id coresponding to the external load balancer device', `parent_host_id` bigint unsigned COMMENT 'if the load balancer appliance is cloudstack managed, then host id on which this appliance is provisioned', diff --git a/setup/db/db/schema-40to410.sql b/setup/db/db/schema-40to410.sql index b09ebb94fea..2ce86e0b894 100644 --- a/setup/db/db/schema-40to410.sql +++ b/setup/db/db/schema-40to410.sql @@ -57,6 +57,9 @@ ALTER TABLE `cloud`.`snapshots` ADD COLUMN `s3_id` bigint unsigned COMMENT 'S3 t ALTER TABLE `cloud`.`snapshots` ADD CONSTRAINT `fk_snapshots__s3_id` FOREIGN KEY `fk_snapshots__s3_id` (`s3_id`) REFERENCES `s3` (`id`); ALTER TABLE `cloud`.`network_offerings` ADD COLUMN `eip_associate_public_ip` int(1) unsigned NOT NULL DEFAULT 0 COMMENT 'true if public IP is associated with user VM creation by default when EIP service is enabled.' AFTER `elastic_ip_service`; +ALTER TABLE `cloud`.`network_offerings` ADD COLUMN `inline` int(1) unsigned NOT NULL DEFAULT 0 COMMENT 'Is this network offering LB provider is in inline mode'; + +ALTER TABLE `cloud`.`external_load_balancer_devices` DROP COLUMN `is_inline`; INSERT IGNORE INTO `cloud`.`configuration` VALUES ('Network','DEFAULT','NetworkManager','network.dhcp.nondefaultnetwork.setgateway.guestos','Windows','The guest OS\'s name start with this fields would result in DHCP server response gateway information even when the network it\'s on is not default network. Names are separated by comma.'); From 42c8c73ab6437d86578f7f6d7b48a96a2de29bec Mon Sep 17 00:00:00 2001 From: Sheng Yang Date: Fri, 4 Jan 2013 18:56:47 -0800 Subject: [PATCH 267/421] CLOUDSTACK-306: Introducing IpDeployingRequester and implement inline mode For LB device in inline mode, the ip deployer(the owner of public ip) is the firewall in front of it, not itself. So check if it's inline or not, if it's inline, return the firewall as ip deployer --- .../com/cloud/network/element/IpDeployer.java | 3 + .../network/element/IpDeployingRequester.java | 28 ++ .../element/LoadBalancingServiceProvider.java | 3 +- .../PortForwardingServiceProvider.java | 4 +- .../RemoteAccessVPNServiceProvider.java | 4 +- .../element/SourceNatServiceProvider.java | 5 +- .../element/StaticNatServiceProvider.java | 4 +- .../F5ExternalLoadBalancerElement.java | 12 +- .../network/resource/F5BigIpResource.java | 9 +- .../JuniperSRXExternalFirewallElement.java | 19 +- .../network/element/NetscalerElement.java | 8 + ...ExternalLoadBalancerDeviceManagerImpl.java | 303 +++++++++++------- .../network/InlineLoadBalancerNicMapVO.java | 10 +- .../src/com/cloud/network/NetworkManager.java | 10 + .../com/cloud/network/NetworkManagerImpl.java | 213 +++++++----- .../cloud/network/dao/FirewallRulesDao.java | 4 +- .../network/dao/FirewallRulesDaoImpl.java | 15 + .../lb/LoadBalancingRulesManagerImpl.java | 16 +- .../cloud/network/MockNetworkManagerImpl.java | 29 ++ .../com/cloud/vpc/MockNetworkManagerImpl.java | 28 ++ setup/db/create-schema.sql | 2 - setup/db/db/schema-40to410.sql | 4 + 22 files changed, 508 insertions(+), 225 deletions(-) create mode 100644 api/src/com/cloud/network/element/IpDeployingRequester.java diff --git a/api/src/com/cloud/network/element/IpDeployer.java b/api/src/com/cloud/network/element/IpDeployer.java index 3eebe82cf2e..55b21abe9ab 100644 --- a/api/src/com/cloud/network/element/IpDeployer.java +++ b/api/src/com/cloud/network/element/IpDeployer.java @@ -21,6 +21,7 @@ import java.util.Set; import com.cloud.exception.ResourceUnavailableException; import com.cloud.network.Network; +import com.cloud.network.Network.Provider; import com.cloud.network.Network.Service; import com.cloud.network.PublicIpAddress; @@ -33,4 +34,6 @@ public interface IpDeployer { * @throws ResourceUnavailableException */ boolean applyIps(Network network, List ipAddress, Set services) throws ResourceUnavailableException; + + Provider getProvider(); } diff --git a/api/src/com/cloud/network/element/IpDeployingRequester.java b/api/src/com/cloud/network/element/IpDeployingRequester.java new file mode 100644 index 00000000000..01a11b570c1 --- /dev/null +++ b/api/src/com/cloud/network/element/IpDeployingRequester.java @@ -0,0 +1,28 @@ +// 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.network.element; + +import com.cloud.network.Network; + +public interface IpDeployingRequester { + /** + * Would return the IpDeployer can deploy IP for this element + * @param network + * @return IpDeployer object, or null if there is no deployer for this element + */ + IpDeployer getIpDeployer(Network network); +} diff --git a/api/src/com/cloud/network/element/LoadBalancingServiceProvider.java b/api/src/com/cloud/network/element/LoadBalancingServiceProvider.java index 3c5474642a4..c577c263a8d 100644 --- a/api/src/com/cloud/network/element/LoadBalancingServiceProvider.java +++ b/api/src/com/cloud/network/element/LoadBalancingServiceProvider.java @@ -22,7 +22,7 @@ import com.cloud.exception.ResourceUnavailableException; import com.cloud.network.Network; import com.cloud.network.lb.LoadBalancingRule; -public interface LoadBalancingServiceProvider extends NetworkElement { +public interface LoadBalancingServiceProvider extends NetworkElement, IpDeployingRequester { /** * Apply rules * @param network @@ -32,7 +32,6 @@ public interface LoadBalancingServiceProvider extends NetworkElement { */ boolean applyLBRules(Network network, List rules) throws ResourceUnavailableException; - IpDeployer getIpDeployer(Network network); /** * Validate rules * @param network diff --git a/api/src/com/cloud/network/element/PortForwardingServiceProvider.java b/api/src/com/cloud/network/element/PortForwardingServiceProvider.java index d6589515d2a..e99bc2fd416 100644 --- a/api/src/com/cloud/network/element/PortForwardingServiceProvider.java +++ b/api/src/com/cloud/network/element/PortForwardingServiceProvider.java @@ -22,7 +22,7 @@ import com.cloud.exception.ResourceUnavailableException; import com.cloud.network.Network; import com.cloud.network.rules.PortForwardingRule; -public interface PortForwardingServiceProvider extends NetworkElement { +public interface PortForwardingServiceProvider extends NetworkElement, IpDeployingRequester { /** * Apply rules * @param network @@ -31,6 +31,4 @@ public interface PortForwardingServiceProvider extends NetworkElement { * @throws ResourceUnavailableException */ boolean applyPFRules(Network network, List rules) throws ResourceUnavailableException; - - IpDeployer getIpDeployer(Network network); } diff --git a/api/src/com/cloud/network/element/RemoteAccessVPNServiceProvider.java b/api/src/com/cloud/network/element/RemoteAccessVPNServiceProvider.java index d799b0bf4e3..b4c54cbaa93 100644 --- a/api/src/com/cloud/network/element/RemoteAccessVPNServiceProvider.java +++ b/api/src/com/cloud/network/element/RemoteAccessVPNServiceProvider.java @@ -23,12 +23,10 @@ import com.cloud.network.Network; import com.cloud.network.RemoteAccessVpn; import com.cloud.network.VpnUser; -public interface RemoteAccessVPNServiceProvider extends NetworkElement { +public interface RemoteAccessVPNServiceProvider extends NetworkElement, IpDeployingRequester { String[] applyVpnUsers(RemoteAccessVpn vpn, List users) throws ResourceUnavailableException; boolean startVpn(Network network, RemoteAccessVpn vpn) throws ResourceUnavailableException; boolean stopVpn(Network network, RemoteAccessVpn vpn) throws ResourceUnavailableException; - - IpDeployer getIpDeployer(Network network); } diff --git a/api/src/com/cloud/network/element/SourceNatServiceProvider.java b/api/src/com/cloud/network/element/SourceNatServiceProvider.java index af63c6018b9..eaf43f82edd 100644 --- a/api/src/com/cloud/network/element/SourceNatServiceProvider.java +++ b/api/src/com/cloud/network/element/SourceNatServiceProvider.java @@ -16,8 +16,5 @@ // under the License. package com.cloud.network.element; -import com.cloud.network.Network; - -public interface SourceNatServiceProvider extends NetworkElement { - IpDeployer getIpDeployer(Network network); +public interface SourceNatServiceProvider extends NetworkElement, IpDeployingRequester { } diff --git a/api/src/com/cloud/network/element/StaticNatServiceProvider.java b/api/src/com/cloud/network/element/StaticNatServiceProvider.java index 20174b17251..50f5e204658 100644 --- a/api/src/com/cloud/network/element/StaticNatServiceProvider.java +++ b/api/src/com/cloud/network/element/StaticNatServiceProvider.java @@ -22,7 +22,7 @@ import com.cloud.exception.ResourceUnavailableException; import com.cloud.network.Network; import com.cloud.network.rules.StaticNat; -public interface StaticNatServiceProvider extends NetworkElement { +public interface StaticNatServiceProvider extends NetworkElement, IpDeployingRequester { /** * Creates static nat rule (public IP to private IP mapping) on the network element * @param config @@ -31,6 +31,4 @@ public interface StaticNatServiceProvider extends NetworkElement { * @throws ResourceUnavailableException */ boolean applyStaticNats(Network config, List rules) throws ResourceUnavailableException; - - IpDeployer getIpDeployer(Network network); } diff --git a/plugins/network-elements/f5/src/com/cloud/network/element/F5ExternalLoadBalancerElement.java b/plugins/network-elements/f5/src/com/cloud/network/element/F5ExternalLoadBalancerElement.java index 63e82751b4d..a2d96ef5ace 100644 --- a/plugins/network-elements/f5/src/com/cloud/network/element/F5ExternalLoadBalancerElement.java +++ b/plugins/network-elements/f5/src/com/cloud/network/element/F5ExternalLoadBalancerElement.java @@ -172,7 +172,8 @@ public class F5ExternalLoadBalancerElement extends ExternalLoadBalancerDeviceMan @Override public boolean validateLBRule(Network network, LoadBalancingRule rule) { - return true; + String algo = rule.getAlgorithm(); + return (algo.equals("roundrobin") || algo.equals("leastconn")); } @Override @@ -471,6 +472,15 @@ public class F5ExternalLoadBalancerElement extends ExternalLoadBalancerDeviceMan @Override public IpDeployer getIpDeployer(Network network) { + ExternalLoadBalancerDeviceVO lbDevice = getExternalLoadBalancerForNetwork(network); + if (lbDevice == null) { + s_logger.error("Cannot find external load balanacer for network " + network.getName()); + s_logger.error("Make F5 as dummy ip deployer, since we likely met this when clean up resource after shutdown network"); + return this; + } + if (_networkManager.isNetworkInlineMode(network)) { + return getIpDeployerForInlineMode(network); + } return this; } } diff --git a/plugins/network-elements/f5/src/com/cloud/network/resource/F5BigIpResource.java b/plugins/network-elements/f5/src/com/cloud/network/resource/F5BigIpResource.java index 618cd912e91..c9c3711bfc1 100644 --- a/plugins/network-elements/f5/src/com/cloud/network/resource/F5BigIpResource.java +++ b/plugins/network-elements/f5/src/com/cloud/network/resource/F5BigIpResource.java @@ -296,7 +296,6 @@ public class F5BigIpResource implements ServerResource { for (IpAddressTO ip : ips) { long guestVlanTag = Long.valueOf(ip.getVlanId()); // It's a hack, using isOneToOneNat field for indicate if it's inline or not - // We'd better have an separate SetupGuestNetwork command later boolean inline = ip.isOneToOneNat(); String vlanSelfIp = inline ? tagAddressWithRouteDomain(ip.getVlanGateway(), guestVlanTag) : ip.getVlanGateway(); String vlanNetmask = ip.getVlanNetmask(); @@ -364,6 +363,8 @@ public class F5BigIpResource implements ServerResource { } } + // Delete the virtual server with this protocol, source IP, and source port, along with its default pool and all pool members + deleteVirtualServerAndDefaultPool(virtualServerName); if (!loadBalancer.isRevoked() && destinationsToAdd) { // Add the pool addPool(virtualServerName, lbAlgorithm); @@ -378,14 +379,8 @@ public class F5BigIpResource implements ServerResource { } } - // Delete any pool members that aren't in the current list of destinations - deleteInactivePoolMembers(virtualServerName, activePoolMembers); - // Add the virtual server addVirtualServer(virtualServerName, lbProtocol, srcIp, srcPort, loadBalancer.getStickinessPolicies()); - } else { - // Delete the virtual server with this protocol, source IP, and source port, along with its default pool and all pool members - deleteVirtualServerAndDefaultPool(virtualServerName); } } diff --git a/plugins/network-elements/juniper-srx/src/com/cloud/network/element/JuniperSRXExternalFirewallElement.java b/plugins/network-elements/juniper-srx/src/com/cloud/network/element/JuniperSRXExternalFirewallElement.java index 50c088c2447..ccc60cf14de 100644 --- a/plugins/network-elements/juniper-srx/src/com/cloud/network/element/JuniperSRXExternalFirewallElement.java +++ b/plugins/network-elements/juniper-srx/src/com/cloud/network/element/JuniperSRXExternalFirewallElement.java @@ -76,6 +76,7 @@ import com.cloud.network.dao.PhysicalNetworkDao; import com.cloud.network.resource.JuniperSrxResource; import com.cloud.network.rules.FirewallRule; import com.cloud.network.rules.PortForwardingRule; +import com.cloud.network.rules.StaticNat; import com.cloud.offering.NetworkOffering; import com.cloud.offerings.dao.NetworkOfferingDao; import com.cloud.resource.ServerResource; @@ -90,7 +91,7 @@ import com.cloud.vm.VirtualMachineProfile; @Local(value = NetworkElement.class) public class JuniperSRXExternalFirewallElement extends ExternalFirewallDeviceManagerImpl implements SourceNatServiceProvider, FirewallServiceProvider, - PortForwardingServiceProvider, RemoteAccessVPNServiceProvider, IpDeployer, JuniperSRXFirewallElementService { + PortForwardingServiceProvider, RemoteAccessVPNServiceProvider, IpDeployer, JuniperSRXFirewallElementService, StaticNatServiceProvider { private static final Logger s_logger = Logger.getLogger(JuniperSRXExternalFirewallElement.class); @@ -302,7 +303,7 @@ public class JuniperSRXExternalFirewallElement extends ExternalFirewallDeviceMan return false; } - return applyFirewallRules(network, rules); + return applyPortForwardingRules(network, rules); } @Override @@ -329,7 +330,7 @@ public class JuniperSRXExternalFirewallElement extends ExternalFirewallDeviceMan @Override public boolean canEnableIndividualServices() { - return false; + return true; } @Override @@ -534,6 +535,10 @@ public class JuniperSRXExternalFirewallElement extends ExternalFirewallDeviceMan @Override public boolean verifyServicesCombination(Set services) { + if (!services.contains(Service.Firewall)) { + s_logger.warn("SRX must be used as Firewall Service Provider in the network"); + return false; + } return true; } @@ -547,4 +552,12 @@ public class JuniperSRXExternalFirewallElement extends ExternalFirewallDeviceMan // return true, as IP will be associated as part of static NAT/port forwarding rule configuration return true; } + + @Override + public boolean applyStaticNats(Network config, List rules) throws ResourceUnavailableException { + if (!canHandle(config, Service.StaticNat)) { + return false; + } + return applyStaticNatRules(config, rules); + } } diff --git a/plugins/network-elements/netscaler/src/com/cloud/network/element/NetscalerElement.java b/plugins/network-elements/netscaler/src/com/cloud/network/element/NetscalerElement.java index c4f0ef392ef..6e7d4e5fb84 100644 --- a/plugins/network-elements/netscaler/src/com/cloud/network/element/NetscalerElement.java +++ b/plugins/network-elements/netscaler/src/com/cloud/network/element/NetscalerElement.java @@ -627,6 +627,14 @@ StaticNatServiceProvider { @Override public IpDeployer getIpDeployer(Network network) { + ExternalLoadBalancerDeviceVO lbDevice = getExternalLoadBalancerForNetwork(network); + if (lbDevice == null) { + s_logger.error("Cannot find external load balanacer for network " + network.getName()); + return null; + } + if (_networkMgr.isNetworkInlineMode(network)) { + return getIpDeployerForInlineMode(network); + } return this; } diff --git a/server/src/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java b/server/src/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java index 839f8023220..c37d53f6dbc 100644 --- a/server/src/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java +++ b/server/src/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java @@ -64,6 +64,7 @@ import com.cloud.host.dao.HostDetailsDao; import com.cloud.network.ExternalLoadBalancerDeviceVO.LBDeviceAllocationState; import com.cloud.network.ExternalLoadBalancerDeviceVO.LBDeviceState; import com.cloud.network.ExternalNetworkDeviceManager.NetworkDevice; +import com.cloud.network.Network.Provider; import com.cloud.network.Network.Service; import com.cloud.network.Networks.TrafficType; import com.cloud.network.addr.PublicIp; @@ -79,6 +80,9 @@ import com.cloud.network.dao.NetworkServiceMapDao; import com.cloud.network.dao.PhysicalNetworkDao; import com.cloud.network.dao.PhysicalNetworkServiceProviderDao; import com.cloud.network.dao.PhysicalNetworkServiceProviderVO; +import com.cloud.network.element.IpDeployer; +import com.cloud.network.element.NetworkElement; +import com.cloud.network.element.StaticNatServiceProvider; import com.cloud.network.lb.LoadBalancingRule; import com.cloud.network.lb.LoadBalancingRule.LbDestination; import com.cloud.network.resource.CreateLoadBalancerApplianceAnswer; @@ -86,6 +90,8 @@ import com.cloud.network.resource.DestroyLoadBalancerApplianceAnswer; import com.cloud.network.rules.FirewallRule; import com.cloud.network.rules.FirewallRule.Purpose; import com.cloud.network.rules.FirewallRuleVO; +import com.cloud.network.rules.StaticNat; +import com.cloud.network.rules.StaticNatImpl; import com.cloud.network.rules.StaticNatRule; import com.cloud.network.rules.StaticNatRuleImpl; import com.cloud.network.rules.dao.PortForwardingRulesDao; @@ -688,25 +694,6 @@ public abstract class ExternalLoadBalancerDeviceManagerImpl extends AdapterBase return false; } - HostVO getFirewallProviderForNetwork(Network network) { - HostVO fwHost = null; - - // get the firewall provider (could be either virtual router or external firewall device) for the network - String fwProvider = _ntwkSrvcProviderDao.getProviderForServiceInNetwork(network.getId(), Service.Firewall); - - if (fwProvider.equalsIgnoreCase("VirtualRouter")) { - // FIXME: use network service provider container framework support to implement on virtual router - } else { - NetworkExternalFirewallVO fwDeviceForNetwork = _networkExternalFirewallDao.findByNetworkId(network.getId()); - assert (fwDeviceForNetwork != null) : "Why firewall provider is not ready for the network to apply static nat rules?"; - long fwDeviceId = fwDeviceForNetwork.getExternalFirewallDeviceId(); - ExternalFirewallDeviceVO fwDevice = _externalFirewallDeviceDao.findById(fwDeviceId); - fwHost = _hostDao.findById(fwDevice.getHostId()); - } - - return fwHost; - } - private NicVO savePlaceholderNic(Network network, String ipAddress) { NicVO nic = new NicVO(null, null, network.getId(), null); nic.setIp4Address(ipAddress); @@ -727,31 +714,115 @@ public abstract class ExternalLoadBalancerDeviceManagerImpl extends AdapterBase return null; } - private void applyStaticNatRuleForInlineLBRule(DataCenterVO zone, Network network, HostVO firewallHost, boolean revoked, String publicIp, String privateIp) throws ResourceUnavailableException { - List staticNatRules = new ArrayList(); + private void applyStaticNatRuleForInlineLBRule(DataCenterVO zone, Network network, boolean revoked, String publicIp, String privateIp) throws ResourceUnavailableException { + List staticNats = new ArrayList(); IPAddressVO ipVO = _ipAddressDao.listByDcIdIpAddress(zone.getId(), publicIp).get(0); - VlanVO vlan = _vlanDao.findById(ipVO.getVlanId()); - FirewallRuleVO fwRule = new FirewallRuleVO(null, ipVO.getId(), -1, -1, "any", network.getId(), network.getAccountId(), network.getDomainId(), Purpose.StaticNat, null, null, null, null, null); - FirewallRule.State state = !revoked ? FirewallRule.State.Add : FirewallRule.State.Revoke; - fwRule.setState(state); - StaticNatRule rule = new StaticNatRuleImpl(fwRule, privateIp); - StaticNatRuleTO ruleTO = new StaticNatRuleTO(rule, vlan.getVlanTag(), publicIp, privateIp); - staticNatRules.add(ruleTO); - - applyStaticNatRules(staticNatRules, network, firewallHost.getId()); + StaticNatImpl staticNat = new StaticNatImpl(ipVO.getAllocatedToAccountId(), ipVO.getAllocatedInDomainId(), + network.getId(), ipVO.getId(), privateIp, revoked); + staticNats.add(staticNat); + StaticNatServiceProvider element = _networkMgr.getStaticNatProviderForNetwork(network); + element.applyStaticNats(network, staticNats); } - protected void applyStaticNatRules(List staticNatRules, Network network, long firewallHostId) throws ResourceUnavailableException { - if (!staticNatRules.isEmpty()) { - SetStaticNatRulesCommand cmd = new SetStaticNatRulesCommand(staticNatRules, null); - Answer answer = _agentMgr.easySend(firewallHostId, cmd); - if (answer == null || !answer.getResult()) { - String details = (answer != null) ? answer.getDetails() : "details unavailable"; - String msg = "firewall provider for the network was unable to apply static nat rules due to: " + details + "."; - s_logger.error(msg); - throw new ResourceUnavailableException(msg, Network.class, network.getId()); + private enum MappingState { + Create, + Remove, + Unchanged, + }; + + private class MappingNic { + private NicVO nic; + private MappingState state; + + public NicVO getNic() { + return nic; + } + public void setNic(NicVO nic) { + this.nic = nic; + } + public MappingState getState() { + return state; + } + public void setState(MappingState state) { + this.state = state; + } + }; + + private MappingNic getLoadBalancingIpNic(DataCenterVO zone, Network network, long sourceIpId, boolean revoked, String existedGuestIp) throws ResourceUnavailableException { + String srcIp = _networkMgr.getIp(sourceIpId).getAddress().addr(); + InlineLoadBalancerNicMapVO mapping = _inlineLoadBalancerNicMapDao.findByPublicIpAddress(srcIp); + NicVO loadBalancingIpNic = null; + MappingNic nic = new MappingNic(); + nic.setState(MappingState.Unchanged); + if (!revoked) { + if (mapping == null) { + // Acquire a new guest IP address and save it as the load balancing IP address + String loadBalancingIpAddress = existedGuestIp; + + if (loadBalancingIpAddress == null) { + loadBalancingIpAddress = _networkMgr.acquireGuestIpAddress(network, null); + } + + if (loadBalancingIpAddress == null) { + String msg = "Ran out of guest IP addresses."; + s_logger.error(msg); + throw new ResourceUnavailableException(msg, DataCenter.class, network.getDataCenterId()); + } + + // If a NIC doesn't exist for the load balancing IP address, create one + loadBalancingIpNic = _nicDao.findByIp4AddressAndNetworkId(loadBalancingIpAddress, network.getId()); + if (loadBalancingIpNic == null) { + loadBalancingIpNic = savePlaceholderNic(network, loadBalancingIpAddress); + } + + // Save a mapping between the source IP address and the load balancing IP address NIC + mapping = new InlineLoadBalancerNicMapVO(srcIp, loadBalancingIpNic.getId()); + _inlineLoadBalancerNicMapDao.persist(mapping); + + // On the firewall provider for the network, create a static NAT rule between the source IP + // address and the load balancing IP address + try { + applyStaticNatRuleForInlineLBRule(zone, network, revoked, srcIp, loadBalancingIpNic.getIp4Address()); + } catch (ResourceUnavailableException ex) { + // Rollback db operation + _inlineLoadBalancerNicMapDao.expunge(mapping.getId()); + _nicDao.expunge(loadBalancingIpNic.getId()); + throw ex; + } + + s_logger.debug("Created static nat rule for inline load balancer"); + nic.setState(MappingState.Create); + } else { + loadBalancingIpNic = _nicDao.findById(mapping.getNicId()); + } + } else { + if (mapping != null) { + // Find the NIC that the mapping refers to + loadBalancingIpNic = _nicDao.findById(mapping.getNicId()); + + int count = _networkMgr.getRuleCountForIp(sourceIpId, Purpose.LoadBalancing, FirewallRule.State.Active); + if (count == 0) { + // On the firewall provider for the network, delete the static NAT rule between the source IP + // address and the load balancing IP address + applyStaticNatRuleForInlineLBRule(zone, network, revoked, srcIp, loadBalancingIpNic.getIp4Address()); + + // Delete the mapping between the source IP address and the load balancing IP address + _inlineLoadBalancerNicMapDao.expunge(mapping.getId()); + + // Delete the NIC + _nicDao.expunge(loadBalancingIpNic.getId()); + + s_logger.debug("Revoked static nat rule for inline load balancer"); + nic.setState(MappingState.Remove); + } + } else { + s_logger.debug("Revoking a rule for an inline load balancer that has not been programmed yet."); + return null; } } + + nic.setNic(loadBalancingIpNic); + return nic; } @Override @@ -788,6 +859,7 @@ public abstract class ExternalLoadBalancerDeviceManagerImpl extends AdapterBase } List loadBalancersToApply = new ArrayList(); + List mappingStates = new ArrayList(); for (int i = 0; i < loadBalancingRules.size(); i++) { LoadBalancingRule rule = loadBalancingRules.get(i); @@ -798,62 +870,13 @@ public abstract class ExternalLoadBalancerDeviceManagerImpl extends AdapterBase String srcIp = _networkMgr.getIp(rule.getSourceIpAddressId()).getAddress().addr(); int srcPort = rule.getSourcePortStart(); List destinations = rule.getDestinations(); - List sourceCidrs = rule.getSourceCidrList(); if (externalLoadBalancerIsInline) { - InlineLoadBalancerNicMapVO mapping = _inlineLoadBalancerNicMapDao.findByPublicIpAddress(srcIp); - NicVO loadBalancingIpNic = null; - HostVO firewallProviderHost = null; - - if (externalLoadBalancerIsInline) { - firewallProviderHost = getFirewallProviderForNetwork(network); - } - - if (!revoked) { - if (mapping == null) { - // Acquire a new guest IP address and save it as the load balancing IP address - String loadBalancingIpAddress = _networkMgr.acquireGuestIpAddress(network, null); - - if (loadBalancingIpAddress == null) { - String msg = "Ran out of guest IP addresses."; - s_logger.error(msg); - throw new ResourceUnavailableException(msg, DataCenter.class, network.getDataCenterId()); - } - - // If a NIC doesn't exist for the load balancing IP address, create one - loadBalancingIpNic = _nicDao.findByIp4AddressAndNetworkId(loadBalancingIpAddress, network.getId()); - if (loadBalancingIpNic == null) { - loadBalancingIpNic = savePlaceholderNic(network, loadBalancingIpAddress); - } - - // Save a mapping between the source IP address and the load balancing IP address NIC - mapping = new InlineLoadBalancerNicMapVO(rule.getId(), srcIp, loadBalancingIpNic.getId()); - _inlineLoadBalancerNicMapDao.persist(mapping); - - // On the firewall provider for the network, create a static NAT rule between the source IP -// address and the load balancing IP address - applyStaticNatRuleForInlineLBRule(zone, network, firewallProviderHost, revoked, srcIp, loadBalancingIpNic.getIp4Address()); - } else { - loadBalancingIpNic = _nicDao.findById(mapping.getNicId()); - } - } else { - if (mapping != null) { - // Find the NIC that the mapping refers to - loadBalancingIpNic = _nicDao.findById(mapping.getNicId()); - - // On the firewall provider for the network, delete the static NAT rule between the source IP -// address and the load balancing IP address - applyStaticNatRuleForInlineLBRule(zone, network, firewallProviderHost, revoked, srcIp, loadBalancingIpNic.getIp4Address()); - - // Delete the mapping between the source IP address and the load balancing IP address - _inlineLoadBalancerNicMapDao.expunge(mapping.getId()); - - // Delete the NIC - _nicDao.expunge(loadBalancingIpNic.getId()); - } else { - s_logger.debug("Revoking a rule for an inline load balancer that has not been programmed yet."); - continue; - } + MappingNic nic = getLoadBalancingIpNic(zone, network, rule.getSourceIpAddressId(), revoked, null); + mappingStates.add(nic.getState()); + NicVO loadBalancingIpNic = nic.getNic(); + if (loadBalancingIpNic == null) { + continue; } // Change the source IP address for the load balancing rule to be the load balancing IP address @@ -863,26 +886,48 @@ public abstract class ExternalLoadBalancerDeviceManagerImpl extends AdapterBase if ((destinations != null && !destinations.isEmpty()) || rule.isAutoScaleConfig()) { boolean inline = _networkMgr.isNetworkInlineMode(network); LoadBalancerTO loadBalancer = new LoadBalancerTO(uuid, srcIp, srcPort, protocol, algorithm, revoked, false, inline, destinations, rule.getStickinessPolicies()); - if(rule.isAutoScaleConfig()) { + if (rule.isAutoScaleConfig()) { loadBalancer.setAutoScaleVmGroup(rule.getAutoScaleVmGroup()); } loadBalancersToApply.add(loadBalancer); } } - if (loadBalancersToApply.size() > 0) { - int numLoadBalancersForCommand = loadBalancersToApply.size(); - LoadBalancerTO[] loadBalancersForCommand = loadBalancersToApply.toArray(new LoadBalancerTO[numLoadBalancersForCommand]); - LoadBalancerConfigCommand cmd = new LoadBalancerConfigCommand(loadBalancersForCommand, null); - long guestVlanTag = Integer.parseInt(network.getBroadcastUri().getHost()); - cmd.setAccessDetail(NetworkElementCommand.GUEST_VLAN_TAG, String.valueOf(guestVlanTag)); - Answer answer = _agentMgr.easySend(externalLoadBalancer.getId(), cmd); - if (answer == null || !answer.getResult()) { - String details = (answer != null) ? answer.getDetails() : "details unavailable"; - String msg = "Unable to apply load balancer rules to the external load balancer appliance in zone " + zone.getName() + " due to: " + details + "."; - s_logger.error(msg); - throw new ResourceUnavailableException(msg, DataCenter.class, network.getDataCenterId()); + try { + if (loadBalancersToApply.size() > 0) { + int numLoadBalancersForCommand = loadBalancersToApply.size(); + LoadBalancerTO[] loadBalancersForCommand = loadBalancersToApply.toArray(new LoadBalancerTO[numLoadBalancersForCommand]); + LoadBalancerConfigCommand cmd = new LoadBalancerConfigCommand(loadBalancersForCommand, null); + long guestVlanTag = Integer.parseInt(network.getBroadcastUri().getHost()); + cmd.setAccessDetail(NetworkElementCommand.GUEST_VLAN_TAG, String.valueOf(guestVlanTag)); + Answer answer = _agentMgr.easySend(externalLoadBalancer.getId(), cmd); + if (answer == null || !answer.getResult()) { + String details = (answer != null) ? answer.getDetails() : "details unavailable"; + String msg = "Unable to apply load balancer rules to the external load balancer appliance in zone " + zone.getName() + " due to: " + details + "."; + s_logger.error(msg); + throw new ResourceUnavailableException(msg, DataCenter.class, network.getDataCenterId()); + } } + } catch (Exception ex) { + if (externalLoadBalancerIsInline) { + s_logger.error("Rollbacking static nat operation of inline mode load balancing due to error on applying LB rules!"); + String existedGuestIp = loadBalancersToApply.get(0).getSrcIp(); + // Rollback static NAT operation in current session + for (int i = 0; i < loadBalancingRules.size(); i++) { + LoadBalancingRule rule = loadBalancingRules.get(i); + MappingState state = mappingStates.get(i); + boolean revoke; + if (state == MappingState.Create) { + revoke = true; + } else if (state == MappingState.Remove) { + revoke = false; + } else { + continue; + } + getLoadBalancingIpNic(zone, network, rule.getSourceIpAddressId(), revoke, existedGuestIp); + } + } + throw new ResourceUnavailableException(ex.getMessage(), DataCenter.class, network.getDataCenterId()); } return true; @@ -900,11 +945,17 @@ public abstract class ExternalLoadBalancerDeviceManagerImpl extends AdapterBase HostVO externalLoadBalancer = null; if (add) { - ExternalLoadBalancerDeviceVO lbDeviceVO = allocateLoadBalancerForNetwork(guestConfig); + ExternalLoadBalancerDeviceVO lbDeviceVO = null; + // on restart network, device could have been allocated already, skip allocation if a device is assigned + lbDeviceVO = getExternalLoadBalancerForNetwork(guestConfig); if (lbDeviceVO == null) { - String msg = "failed to alloacate a external load balancer for the network " + guestConfig.getId(); - s_logger.error(msg); - throw new InsufficientNetworkCapacityException(msg, DataCenter.class, guestConfig.getDataCenterId()); + // allocate a load balancer device for the network + lbDeviceVO = allocateLoadBalancerForNetwork(guestConfig); + if (lbDeviceVO == null) { + String msg = "failed to alloacate a external load balancer for the network " + guestConfig.getId(); + s_logger.error(msg); + throw new InsufficientNetworkCapacityException(msg, DataCenter.class, guestConfig.getDataCenterId()); + } } externalLoadBalancer = _hostDao.findById(lbDeviceVO.getHostId()); s_logger.debug("Allocated external load balancer device:" + lbDeviceVO.getId() + " for the network: " + guestConfig.getId()); @@ -928,6 +979,12 @@ public abstract class ExternalLoadBalancerDeviceManagerImpl extends AdapterBase Integer networkRate = _networkMgr.getNetworkRate(guestConfig.getId(), null); if (add) { + // on restart network, network could have already been implemented. If already implemented then return + NicVO selfipNic = getPlaceholderNic(guestConfig); + if (selfipNic != null) { + return true; + } + // Acquire a self-ip address from the guest network IP address range selfIp = _networkMgr.acquireGuestIpAddress(guestConfig, null); if (selfIp == null) { @@ -956,8 +1013,9 @@ public abstract class ExternalLoadBalancerDeviceManagerImpl extends AdapterBase if (answer == null || !answer.getResult()) { String action = add ? "implement" : "shutdown"; - String answerDetails = (answer != null) ? answer.getDetails() : "answer was null"; - String msg = "External load balancer was unable to " + action + " the guest network on the external load balancer in zone " + zone.getName() + " due to " + answerDetails; + String answerDetails = (answer != null) ? answer.getDetails() : null; + answerDetails = (answerDetails != null) ? " due to " + answerDetails : ""; + String msg = "External load balancer was unable to " + action + " the guest network on the external load balancer in zone " + zone.getName() + answerDetails; s_logger.error(msg); throw new ResourceUnavailableException(msg, Network.class, guestConfig.getId()); } @@ -1029,4 +1087,25 @@ public abstract class ExternalLoadBalancerDeviceManagerImpl extends AdapterBase return new DeleteHostAnswer(true); } + protected IpDeployer getIpDeployerForInlineMode(Network network) { + //We won't deploy IP, instead the firewall in front of us would do it + List providers = _networkMgr.getProvidersForServiceInNetwork(network, Service.Firewall); + //Only support one provider now + if (providers == null) { + s_logger.error("Cannot find firewall provider for network " + network.getId()); + return null; + } + if (providers.size() != 1) { + s_logger.error("Found " + providers.size() + " firewall provider for network " + network.getId()); + return null; + } + + NetworkElement element = _networkMgr.getElementImplementingProvider(providers.get(0).getName()); + if (!(element instanceof IpDeployer)) { + s_logger.error("The firewall provider for network " + network.getName() + " don't have ability to deploy IP address!"); + return null; + } + s_logger.info("Let " + element.getName() + " handle ip association for " + getName() + " in network " + network.getId()); + return (IpDeployer)element; + } } diff --git a/server/src/com/cloud/network/InlineLoadBalancerNicMapVO.java b/server/src/com/cloud/network/InlineLoadBalancerNicMapVO.java index ade6dae9bb6..56ac277d419 100644 --- a/server/src/com/cloud/network/InlineLoadBalancerNicMapVO.java +++ b/server/src/com/cloud/network/InlineLoadBalancerNicMapVO.java @@ -31,9 +31,6 @@ public class InlineLoadBalancerNicMapVO { @Column(name="id") private long id; - @Column(name="load_balancer_id") - private long loadBalancerId; - @Column(name="public_ip_address") private String publicIpAddress; @@ -42,8 +39,7 @@ public class InlineLoadBalancerNicMapVO { public InlineLoadBalancerNicMapVO() { } - public InlineLoadBalancerNicMapVO(long loadBalancerId, String publicIpAddress, long nicId) { - this.loadBalancerId = loadBalancerId; + public InlineLoadBalancerNicMapVO(String publicIpAddress, long nicId) { this.publicIpAddress = publicIpAddress; this.nicId = nicId; } @@ -52,10 +48,6 @@ public class InlineLoadBalancerNicMapVO { return id; } - public long getLoadBalancerId() { - return loadBalancerId; - } - public String getPublicIpAddress() { return publicIpAddress; } diff --git a/server/src/com/cloud/network/NetworkManager.java b/server/src/com/cloud/network/NetworkManager.java index d52e88a45bd..ef0d4c599df 100755 --- a/server/src/com/cloud/network/NetworkManager.java +++ b/server/src/com/cloud/network/NetworkManager.java @@ -40,12 +40,15 @@ import com.cloud.network.Network.Provider; import com.cloud.network.Network.Service; import com.cloud.network.Networks.TrafficType; import com.cloud.network.addr.PublicIp; +import com.cloud.network.element.LoadBalancingServiceProvider; import com.cloud.network.element.NetworkElement; import com.cloud.network.element.RemoteAccessVPNServiceProvider; import com.cloud.network.element.Site2SiteVpnServiceProvider; +import com.cloud.network.element.StaticNatServiceProvider; import com.cloud.network.element.UserDataServiceProvider; import com.cloud.network.guru.NetworkGuru; import com.cloud.network.rules.FirewallRule; +import com.cloud.network.rules.FirewallRule.Purpose; import com.cloud.network.rules.StaticNat; import com.cloud.offering.NetworkOffering; import com.cloud.offerings.NetworkOfferingVO; @@ -483,5 +486,12 @@ public interface NetworkManager extends NetworkService { */ int getNetworkLockTimeout(); + List getProvidersForServiceInNetwork(Network network, Service service); + + StaticNatServiceProvider getStaticNatProviderForNetwork(Network network); boolean isNetworkInlineMode(Network network); + + int getRuleCountForIp(Long addressId, FirewallRule.Purpose purpose, FirewallRule.State state); + + LoadBalancingServiceProvider getLoadBalancingProviderForNetwork(Network network); } diff --git a/server/src/com/cloud/network/NetworkManagerImpl.java b/server/src/com/cloud/network/NetworkManagerImpl.java index f993b2b9b72..f7189df472a 100755 --- a/server/src/com/cloud/network/NetworkManagerImpl.java +++ b/server/src/com/cloud/network/NetworkManagerImpl.java @@ -732,6 +732,18 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag public boolean canIpsUseOffering(List publicIps, long offeringId) { Map> ipToServices = getIpToServices(publicIps, false, true); Map> serviceToProviders = getNetworkOfferingServiceProvidersMap(offeringId); + NetworkOfferingVO offering = _networkOfferingDao.findById(offeringId); + //For inline mode checking, using firewall provider for LB instead, because public ip would apply on firewall provider + if (offering.isInline()) { + Provider firewallProvider = null; + if (serviceToProviders.containsKey(Service.Firewall)) { + firewallProvider = (Provider)serviceToProviders.get(Service.Firewall).toArray()[0]; + } + Set p = new HashSet(); + p.add(firewallProvider); + serviceToProviders.remove(Service.Lb); + serviceToProviders.put(Service.Lb, p); + } for (PublicIp ip : ipToServices.keySet()) { Set services = ipToServices.get(ip); Provider provider = null; @@ -777,8 +789,17 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag throw new InvalidParameterException("There is no new provider for IP " + publicIp.getAddress() + " of service " + service.getName() + "!"); } Provider newProvider = (Provider) newProviders.toArray()[0]; - if (!oldProvider.equals(newProvider)) { - throw new InvalidParameterException("There would be multiple providers for IP " + publicIp.getAddress() + "!"); + Network network = _networksDao.findById(networkId); + NetworkElement oldElement = getElementImplementingProvider(oldProvider.getName()); + NetworkElement newElement = getElementImplementingProvider(newProvider.getName()); + if (oldElement instanceof IpDeployingRequester && newElement instanceof IpDeployingRequester) { + IpDeployer oldIpDeployer = ((IpDeployingRequester)oldElement).getIpDeployer(network); + IpDeployer newIpDeployer = ((IpDeployingRequester)newElement).getIpDeployer(network); + if (!oldIpDeployer.getProvider().getName().equals(newIpDeployer.getProvider().getName())) { + throw new InvalidParameterException("There would be multiple providers for IP " + publicIp.getAddress() + "!"); + } + } else { + throw new InvalidParameterException("Ip cannot be applied for new provider!"); } return true; } @@ -850,21 +871,17 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag } IpDeployer deployer = null; NetworkElement element = getElementImplementingProvider(provider.getName()); - if (element instanceof SourceNatServiceProvider) { - deployer = ((SourceNatServiceProvider) element).getIpDeployer(network); - } else if (element instanceof StaticNatServiceProvider) { - deployer = ((StaticNatServiceProvider) element).getIpDeployer(network); - } else if (element instanceof LoadBalancingServiceProvider) { - deployer = ((LoadBalancingServiceProvider) element).getIpDeployer(network); - } else if (element instanceof PortForwardingServiceProvider) { - deployer = ((PortForwardingServiceProvider) element).getIpDeployer(network); - } else if (element instanceof RemoteAccessVPNServiceProvider) { - deployer = ((RemoteAccessVPNServiceProvider) element).getIpDeployer(network); - } else if (element instanceof ConnectivityProvider) { + if (element instanceof ConnectivityProvider) { // Nothing to do s_logger.debug("ConnectivityProvider " + element.getClass().getSimpleName() + " has no ip associations"); continue; - } else { + } + + if (!(element instanceof IpDeployingRequester)) { + throw new CloudRuntimeException("Element " + element + " is not a IpDeployingRequester!"); + } + deployer = ((IpDeployingRequester)element).getIpDeployer(network); + if (deployer == null) { throw new CloudRuntimeException("Fail to get ip deployer for element: " + element); } Set services = new HashSet(); @@ -3697,7 +3714,7 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag } protected boolean deleteVlansInNetwork(long networkId, long userId, Account callerAccount) { - + //cleanup Public vlans List publicVlans = _vlanDao.listVlansByNetworkId(networkId); boolean result = true; @@ -3706,8 +3723,8 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag s_logger.warn("Failed to delete vlan " + vlan.getId() + ");"); result = false; } - } - + } + //cleanup private vlans int privateIpAllocCount = _privateIpDao.countAllocatedByNetworkId(networkId); if (privateIpAllocCount > 0) { @@ -3724,25 +3741,23 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag public boolean validateRule(FirewallRule rule) { Network network = _networksDao.findById(rule.getNetworkId()); Purpose purpose = rule.getPurpose(); - for (NetworkElement ne : _networkElements) { - boolean validated; - switch (purpose) { - case LoadBalancing: - if (!(ne instanceof LoadBalancingServiceProvider)) { - continue; - } - validated = ((LoadBalancingServiceProvider) ne).validateLBRule(network, (LoadBalancingRule) rule); - if (!validated) - return false; - break; - default: - s_logger.debug("Unable to validate network rules for purpose: " + purpose.toString()); - validated = false; + switch (purpose) { + case LoadBalancing: + LoadBalancingServiceProvider ne = getLoadBalancingProviderForNetwork(network); + if (!ne.validateLBRule(network, (LoadBalancingRule) rule)) { + return false; } + break; + default: + s_logger.debug("Unable to validate network rules for purpose: " + purpose.toString()); } return true; } + protected boolean applyLbRules(Network network, List rules, LoadBalancingServiceProvider element) throws ResourceUnavailableException { + return element.applyLBRules(network, rules); + } + @Override /* The rules here is only the same kind of rule, e.g. all load balancing rules or all port forwarding rules */ public boolean applyRules(List rules, boolean continueOnError) throws ResourceUnavailableException { @@ -3769,47 +3784,55 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag // the network so as to ensure IP is associated before applying rules (in add state) applyIpAssociations(network, false, continueOnError, publicIps); - for (NetworkElement ne : _networkElements) { - Provider provider = Network.Provider.getProvider(ne.getName()); - if (provider == null) { - if (ne.getName().equalsIgnoreCase("Ovs") || ne.getName().equalsIgnoreCase("BareMetal") - || ne.getName().equalsIgnoreCase("CiscoNexus1000vVSM")) { - continue; - } - throw new CloudRuntimeException("Unable to identify the provider by name " + ne.getName()); + Service service = null; + switch (purpose) { + case LoadBalancing: + service = Service.Lb; + break; + case PortForwarding: + service = Service.PortForwarding; + break; + case StaticNat: + case Firewall: + service = Service.Firewall; + break; + case NetworkACL: + service = Service.NetworkACL; + break; + default: + break; + } + + if (service != null) { + List providers = getProvidersForServiceInNetwork(network, service); + if (providers == null || providers.size() != 1) { + // FIXME: If there is a service not made available by network offering, then rule should not get created + // in first place. For now error out during the apply rules. + String msg = "Cannot find the " + service.getName() + " provider for network " + network.getId(); + s_logger.error(msg); + throw new CloudRuntimeException(msg); } + NetworkElement ne = getElementImplementingProvider(providers.get(0).getName()); try { boolean handled; switch (purpose) { case LoadBalancing: - boolean isLbProvider = isProviderSupportServiceInNetwork(network.getId(), Service.Lb, provider); - if (!(ne instanceof LoadBalancingServiceProvider && isLbProvider)) { - continue; - } - handled = ((LoadBalancingServiceProvider) ne).applyLBRules(network, (List) rules); + assert ne instanceof LoadBalancingServiceProvider; + handled = applyLbRules(network, (List)rules, (LoadBalancingServiceProvider) ne); break; case PortForwarding: - boolean isPfProvider = isProviderSupportServiceInNetwork(network.getId(), Service.PortForwarding, provider); - if (!(ne instanceof PortForwardingServiceProvider && isPfProvider)) { - continue; - } + assert ne instanceof PortForwardingServiceProvider; handled = ((PortForwardingServiceProvider) ne).applyPFRules(network, (List) rules); break; case StaticNat: /* It's firewall rule for static nat, not static nat rule */ /* Fall through */ case Firewall: - boolean isFirewallProvider = isProviderSupportServiceInNetwork(network.getId(), Service.Firewall, provider); - if (!(ne instanceof FirewallServiceProvider && isFirewallProvider)) { - continue; - } + assert ne instanceof FirewallServiceProvider; handled = ((FirewallServiceProvider) ne).applyFWRules(network, rules); break; case NetworkACL: - boolean isNetworkACLProvider = isProviderSupportServiceInNetwork(network.getId(), Service.NetworkACL, provider); - if (!(ne instanceof NetworkACLServiceProvider && isNetworkACLProvider)) { - continue; - } + assert ne instanceof NetworkACLServiceProvider; handled = ((NetworkACLServiceProvider) ne).applyNetworkACLs(network, rules); break; default: @@ -3824,6 +3847,9 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag s_logger.warn("Problems with " + ne.getName() + " but pushing on", e); success = false; } + } else { + s_logger.debug("Unable to handle network rules for purpose: " + purpose.toString()); + success = false; } // if all the rules configured on public IP are revoked then dis-associate IP with network service provider @@ -4398,6 +4424,7 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag } + @Override public UserDataServiceProvider getPasswordResetProvider(Network network) { String passwordProvider = _ntwkSrvcDao.getProviderForServiceInNetwork(network.getId(), Service.UserData); @@ -4827,6 +4854,9 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag // log assign usage events for new offering List nics = _nicDao.listByNetworkId(networkId); for (NicVO nic : nics) { + if (nic.getReservationStrategy() == Nic.ReservationStrategy.PlaceHolder) { + continue; + } long vmId = nic.getInstanceId(); VMInstanceVO vm = _vmDao.findById(vmId); if (vm == null) { @@ -5043,23 +5073,15 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag applyIpAssociations(network, false, continueOnError, publicIps); // get provider - String staticNatProvider = _ntwkSrvcDao.getProviderForServiceInNetwork(network.getId(), Service.StaticNat); - - for (NetworkElement ne : _networkElements) { - try { - if (!(ne instanceof StaticNatServiceProvider && ne.getName().equalsIgnoreCase(staticNatProvider))) { - continue; - } - - boolean handled = ((StaticNatServiceProvider) ne).applyStaticNats(network, staticNats); - s_logger.debug("Static Nat for network " + network.getId() + " were " + (handled ? "" : " not") + " handled by " + ne.getName()); - } catch (ResourceUnavailableException e) { - if (!continueOnError) { - throw e; - } - s_logger.warn("Problems with " + ne.getName() + " but pushing on", e); - success = false; + StaticNatServiceProvider element = getStaticNatProviderForNetwork(network); + try { + success = element.applyStaticNats(network, staticNats); + } catch (ResourceUnavailableException e) { + if (!continueOnError) { + throw e; } + s_logger.warn("Problems with " + element.getName() + " but pushing on", e); + success = false; } // For revoked static nat IP, set the vm_id to null, indicate it should be revoked @@ -7485,8 +7507,55 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag } @Override + public List getProvidersForServiceInNetwork(Network network, Service service) { + Map> service2ProviderMap = getServiceProvidersMap(network.getId()); + if (service2ProviderMap.get(service) != null) { + List providers = new ArrayList(service2ProviderMap.get(service)); + return providers; + } + return null; + } + + protected NetworkElement getElementForServiceInNetwork(Network network, Service service) { + List providers = getProvidersForServiceInNetwork(network, service); + //Only support one provider now + if (providers == null) { + s_logger.error("Cannot find " + service.getName() + " provider for network " + network.getId()); + return null; + } + if (providers.size() != 1) { + s_logger.error("Found " + providers.size() + " " + service.getName() + " providers for network!" + network.getId()); + return null; + } + NetworkElement element = getElementImplementingProvider(providers.get(0).getName()); + s_logger.info("Let " + element.getName() + " handle " + service.getName() + " in network " + network.getId()); + return element; + } + + @Override + public StaticNatServiceProvider getStaticNatProviderForNetwork(Network network) { + NetworkElement element = getElementForServiceInNetwork(network, Service.StaticNat); + assert element instanceof StaticNatServiceProvider; + return (StaticNatServiceProvider)element; + } + + @Override + public LoadBalancingServiceProvider getLoadBalancingProviderForNetwork(Network network) { + NetworkElement element = getElementForServiceInNetwork(network, Service.Lb); + assert element instanceof LoadBalancingServiceProvider; + return ( LoadBalancingServiceProvider)element; + } public boolean isNetworkInlineMode(Network network) { NetworkOfferingVO offering = _networkOfferingDao.findById(network.getNetworkOfferingId()); return offering.isInline(); } + + @Override + public int getRuleCountForIp(Long addressId, FirewallRule.Purpose purpose, FirewallRule.State state) { + List rules = _firewallDao.listByIpAndPurposeWithState(addressId, purpose, state); + if (rules == null) { + return 0; + } + return rules.size(); + } } diff --git a/server/src/com/cloud/network/dao/FirewallRulesDao.java b/server/src/com/cloud/network/dao/FirewallRulesDao.java index 2a4c200f116..cc184c84fce 100644 --- a/server/src/com/cloud/network/dao/FirewallRulesDao.java +++ b/server/src/com/cloud/network/dao/FirewallRulesDao.java @@ -56,6 +56,6 @@ public interface FirewallRulesDao extends GenericDao { long countRulesByIpId(long sourceIpId); List listByNetworkPurposeTrafficTypeAndNotRevoked(long networkId, FirewallRule.Purpose purpose, FirewallRule.TrafficType trafficType); - - + + List listByIpAndPurposeWithState(Long addressId, FirewallRule.Purpose purpose, FirewallRule.State state); } diff --git a/server/src/com/cloud/network/dao/FirewallRulesDaoImpl.java b/server/src/com/cloud/network/dao/FirewallRulesDaoImpl.java index a2478d8d497..2fff15aff8d 100644 --- a/server/src/com/cloud/network/dao/FirewallRulesDaoImpl.java +++ b/server/src/com/cloud/network/dao/FirewallRulesDaoImpl.java @@ -309,4 +309,19 @@ public class FirewallRulesDaoImpl extends GenericDaoBase i return result; } + @Override + public List listByIpAndPurposeWithState(Long ipId, Purpose purpose, State state) { + SearchCriteria sc = AllFieldsSearch.create(); + sc.setParameters("ipId", ipId); + + if (state != null) { + sc.setParameters("state", state); + } + + if (purpose != null) { + sc.setParameters("purpose", purpose); + } + + return listBy(sc); + } } diff --git a/server/src/com/cloud/network/lb/LoadBalancingRulesManagerImpl.java b/server/src/com/cloud/network/lb/LoadBalancingRulesManagerImpl.java index 6346bc3fd6a..60eb70f9882 100755 --- a/server/src/com/cloud/network/lb/LoadBalancingRulesManagerImpl.java +++ b/server/src/com/cloud/network/lb/LoadBalancingRulesManagerImpl.java @@ -579,8 +579,14 @@ public class LoadBalancingRulesManagerImpl implements LoadBalancingRulesMa private boolean isRollBackAllowedForProvider(LoadBalancerVO loadBalancer) { Network network = _networkDao.findById(loadBalancer.getNetworkId()); - Provider provider = Network.Provider.Netscaler; - return _ntwkSrvcDao.canProviderSupportServiceInNetwork(network.getId(), Service.Lb, provider); + List provider = _networkMgr.getProvidersForServiceInNetwork(network, Service.Lb); + if (provider == null || provider.size() == 0) { + return false; + } + if (provider.get(0) == Provider.Netscaler || provider.get(0) == Provider.F5BigIp) { + return true; + } + return false; } @Override @DB @@ -1056,6 +1062,12 @@ public class LoadBalancingRulesManagerImpl implements LoadBalancingRulesMa LoadBalancerVO newRule = new LoadBalancerVO(lb.getXid(), lb.getName(), lb.getDescription(), lb.getSourceIpAddressId(), lb.getSourcePortEnd(), lb.getDefaultPortStart(), lb.getAlgorithm(), network.getId(), ipAddr.getAllocatedToAccountId(), ipAddr.getAllocatedInDomainId()); + // verify rule is supported by Lb provider of the network + LoadBalancingRule loadBalancing = new LoadBalancingRule(newRule, new ArrayList(), new ArrayList()); + if (!_networkMgr.validateRule(loadBalancing)) { + throw new InvalidParameterValueException("LB service provider cannot support this rule"); + } + newRule = _lbDao.persist(newRule); if (openFirewall) { diff --git a/server/test/com/cloud/network/MockNetworkManagerImpl.java b/server/test/com/cloud/network/MockNetworkManagerImpl.java index d8ef9e4cfbe..0b83f351810 100755 --- a/server/test/com/cloud/network/MockNetworkManagerImpl.java +++ b/server/test/com/cloud/network/MockNetworkManagerImpl.java @@ -35,12 +35,16 @@ import com.cloud.network.Network.Provider; import com.cloud.network.Network.Service; import com.cloud.network.Networks.TrafficType; import com.cloud.network.addr.PublicIp; +import com.cloud.network.element.LoadBalancingServiceProvider; import com.cloud.network.element.NetworkElement; import com.cloud.network.element.RemoteAccessVPNServiceProvider; import com.cloud.network.element.Site2SiteVpnServiceProvider; +import com.cloud.network.element.StaticNatServiceProvider; import com.cloud.network.element.UserDataServiceProvider; import com.cloud.network.guru.NetworkGuru; import com.cloud.network.rules.FirewallRule; +import com.cloud.network.rules.FirewallRule.Purpose; +import com.cloud.network.rules.FirewallRule.State; import com.cloud.network.rules.StaticNat; import com.cloud.offering.NetworkOffering; import com.cloud.offerings.NetworkOfferingVO; @@ -1141,4 +1145,29 @@ public class MockNetworkManagerImpl implements NetworkManager, Manager, NetworkS // TODO Auto-generated method stub return false; } + + @Override + public StaticNatServiceProvider getStaticNatProviderForNetwork(Network network) { + // TODO Auto-generated method stub + return null; + } + + @Override + public List getProvidersForServiceInNetwork(Network network, + Service service) { + // TODO Auto-generated method stub + return null; + } + + @Override + public int getRuleCountForIp(Long addressId, Purpose purpose, State state) { + // TODO Auto-generated method stub + return 0; + } + + @Override + public LoadBalancingServiceProvider getLoadBalancingProviderForNetwork(Network network) { + // TODO Auto-generated method stub + return null; + } } diff --git a/server/test/com/cloud/vpc/MockNetworkManagerImpl.java b/server/test/com/cloud/vpc/MockNetworkManagerImpl.java index 2141c1b0e09..824e40d6b14 100644 --- a/server/test/com/cloud/vpc/MockNetworkManagerImpl.java +++ b/server/test/com/cloud/vpc/MockNetworkManagerImpl.java @@ -37,12 +37,16 @@ import com.cloud.network.Network.Service; import com.cloud.network.Networks.TrafficType; import com.cloud.network.addr.PublicIp; import com.cloud.network.dao.NetworkServiceMapDao; +import com.cloud.network.element.LoadBalancingServiceProvider; import com.cloud.network.element.NetworkElement; import com.cloud.network.element.RemoteAccessVPNServiceProvider; import com.cloud.network.element.Site2SiteVpnServiceProvider; +import com.cloud.network.element.StaticNatServiceProvider; import com.cloud.network.element.UserDataServiceProvider; import com.cloud.network.guru.NetworkGuru; import com.cloud.network.rules.FirewallRule; +import com.cloud.network.rules.FirewallRule.Purpose; +import com.cloud.network.rules.FirewallRule.State; import com.cloud.network.rules.StaticNat; import com.cloud.offering.NetworkOffering; import com.cloud.offerings.NetworkOfferingVO; @@ -1485,4 +1489,28 @@ public class MockNetworkManagerImpl implements NetworkManager, Manager{ // TODO Auto-generated method stub return false; } + + @Override + public List getProvidersForServiceInNetwork(Network network, Service service) { + // TODO Auto-generated method stub + return null; + } + + @Override + public StaticNatServiceProvider getStaticNatProviderForNetwork(Network network) { + // TODO Auto-generated method stub + return null; + } + + @Override + public int getRuleCountForIp(Long addressId, Purpose purpose, State state) { + // TODO Auto-generated method stub + return 0; + } + + @Override + public LoadBalancingServiceProvider getLoadBalancingProviderForNetwork(Network network) { + // TODO Auto-generated method stub + return null; + } } diff --git a/setup/db/create-schema.sql b/setup/db/create-schema.sql index fb00ed4cd37..b37c3f04517 100755 --- a/setup/db/create-schema.sql +++ b/setup/db/create-schema.sql @@ -746,12 +746,10 @@ CREATE TABLE `cloud`.`load_balancer_stickiness_policies` ( CREATE TABLE `cloud`.`inline_load_balancer_nic_map` ( `id` bigint unsigned NOT NULL auto_increment, - `load_balancer_id` bigint unsigned NOT NULL, `public_ip_address` char(40) NOT NULL, `nic_id` bigint unsigned NULL COMMENT 'nic id', PRIMARY KEY (`id`), UNIQUE KEY (`nic_id`), - CONSTRAINT `fk_inline_load_balancer_nic_map__load_balancer_id` FOREIGN KEY(`load_balancer_id`) REFERENCES `load_balancing_rules`(`id`) ON DELETE CASCADE, CONSTRAINT `fk_inline_load_balancer_nic_map__nic_id` FOREIGN KEY(`nic_id`) REFERENCES `nics`(`id`) ON DELETE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8; diff --git a/setup/db/db/schema-40to410.sql b/setup/db/db/schema-40to410.sql index 2ce86e0b894..5245a4939a0 100644 --- a/setup/db/db/schema-40to410.sql +++ b/setup/db/db/schema-40to410.sql @@ -68,3 +68,7 @@ ALTER TABLE `sync_queue` ADD `queue_size` SMALLINT NOT NULL DEFAULT '0' COMMENT ALTER TABLE `sync_queue` ADD `queue_size_limit` SMALLINT NOT NULL DEFAULT '1' COMMENT 'max number of items the queue can process concurrently'; ALTER TABLE `sync_queue_item` ADD `queue_proc_time` DATETIME NOT NULL COMMENT 'when processing started for the item' AFTER `queue_proc_number`; + +ALTER TABLE `cloud`.`inline_load_balancer_nic_map` DROP FOREIGN KEY fk_inline_load_balancer_nic_map__load_balancer_id; + +ALTER TABLE `cloud`.`inline_load_balancer_nic_map` DROP COLUMN load_balancer_id; From 51502e9f0615a048082d408b5b812899fa774b1d Mon Sep 17 00:00:00 2001 From: Sheng Yang Date: Fri, 4 Jan 2013 19:52:21 -0800 Subject: [PATCH 268/421] Fix license issue of new added xml files --- .../juniper/firewall-filter-term-add.xml | 18 ++++++++++++++++++ .../juniper/firewall-filter-term-getone.xml | 18 ++++++++++++++++++ 2 files changed, 36 insertions(+) diff --git a/scripts/network/juniper/firewall-filter-term-add.xml b/scripts/network/juniper/firewall-filter-term-add.xml index 4f96ed4d16e..e7f3a63f8e8 100644 --- a/scripts/network/juniper/firewall-filter-term-add.xml +++ b/scripts/network/juniper/firewall-filter-term-add.xml @@ -1,3 +1,21 @@ + diff --git a/scripts/network/juniper/firewall-filter-term-getone.xml b/scripts/network/juniper/firewall-filter-term-getone.xml index 782290992c1..2c7e10dd354 100644 --- a/scripts/network/juniper/firewall-filter-term-getone.xml +++ b/scripts/network/juniper/firewall-filter-term-getone.xml @@ -1,3 +1,21 @@ + From 3d9dc36463280afeee178cca78ef41560b6e3027 Mon Sep 17 00:00:00 2001 From: Sheng Yang Date: Fri, 4 Jan 2013 20:03:16 -0800 Subject: [PATCH 269/421] The other xml license fix --- scripts/network/juniper/template-entry.xml | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/scripts/network/juniper/template-entry.xml b/scripts/network/juniper/template-entry.xml index cf0cb6c37e3..ab92d6d7d7d 100644 --- a/scripts/network/juniper/template-entry.xml +++ b/scripts/network/juniper/template-entry.xml @@ -1,3 +1,21 @@ + <%name%> %value% From f1c15f0c2eaf11999ce2945ad1b4c7dc8a539a9b Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Sat, 5 Jan 2013 02:11:45 -0800 Subject: [PATCH 270/421] cli: Remove unused method, fix welcome msg, prompt Signed-off-by: Rohit Yadav --- tools/cli/cloudmonkey/cloudmonkey.py | 41 ++++------------------------ 1 file changed, 6 insertions(+), 35 deletions(-) diff --git a/tools/cli/cloudmonkey/cloudmonkey.py b/tools/cli/cloudmonkey/cloudmonkey.py index 3bc87169f63..a573972481d 100644 --- a/tools/cli/cloudmonkey/cloudmonkey.py +++ b/tools/cli/cloudmonkey/cloudmonkey.py @@ -84,6 +84,7 @@ class CloudMonkeyShell(cmd.Cmd, object): config = self.write_config() print "Welcome! Using `set` configure the necessary settings:" print " ".join(sorted(self.config_fields.keys())) + print "Config file:", self.config_file print "For debugging, tail -f", self.log_file, "\n" for key in self.config_fields.keys(): @@ -204,7 +205,7 @@ class CloudMonkeyShell(cmd.Cmd, object): def print_result_as_dict(result, result_filter=None): for key in sorted(result.keys(), - key=lambda x: x!='id' and x!='count' and x): + key=lambda x: x != 'id' and x != 'count' and x): if not (isinstance(result[key], list) or isinstance(result[key], dict)): self.print_shell("%s = %s" % (key, result[key])) @@ -267,8 +268,8 @@ class CloudMonkeyShell(cmd.Cmd, object): requests = {'jobid': jobId} timeout = int(self.timeout) pollperiod = 3 + progress = 1 while timeout > 0: - progress = int((int(self.timeout) - timeout) / pollperiod ) + 1 print '\r' + '.' * progress, sys.stdout.flush() response = process_json(conn.make_request_with_auth(command, @@ -290,6 +291,7 @@ class CloudMonkeyShell(cmd.Cmd, object): return response time.sleep(pollperiod) timeout = timeout - pollperiod + progress += 1 logger.debug("job: %s to timeout in %ds" % (jobId, timeout)) self.print_shell("Error:", "Async query timeout for jobid=", jobId) @@ -363,30 +365,6 @@ class CloudMonkeyShell(cmd.Cmd, object): except Exception as e: self.print_shell("🙈 Error on parsing and printing", e) - def cache_verb_miss(self, verb): - self.print_shell("Oops: Verb %s should have been precached" % verb) - completions_found = filter(lambda x: x.startswith(verb), completions) - self.cache_verbs[verb] = {} - for api_name in completions_found: - api_cmd_str = "%sCmd" % api_name - api_mod = self.get_api_module(api_name, [api_cmd_str]) - if api_mod is None: - continue - try: - api_cmd = getattr(api_mod, api_cmd_str)() - required = api_cmd.required - doc = api_mod.__doc__ - except AttributeError, e: - self.print_shell("Error: API attribute %s not found!" % e) - params = filter(lambda x: '__' not in x and 'required' not in x, - dir(api_cmd)) - if len(required) > 0: - doc += "\nRequired args: %s" % " ".join(required) - doc += "\nArgs: %s" % " ".join(params) - api_name_lower = api_name.replace(verb, '').lower() - self.cache_verbs[verb][api_name_lower] = [api_name, params, doc, - required] - def completedefault(self, text, line, begidx, endidx): partitions = line.partition(" ") verb = partitions[0] @@ -401,9 +379,6 @@ class CloudMonkeyShell(cmd.Cmd, object): autocompletions = [] search_string = "" - if verb not in self.cache_verbs: - self.cache_verb_miss(verb) - if separator != " ": # Complete verb subjects autocompletions = self.cache_verbs[verb].keys() search_string = subject @@ -445,8 +420,8 @@ class CloudMonkeyShell(cmd.Cmd, object): """ args = args.strip().partition(" ") key, value = (args[0], args[2]) - # Note: keys and class attributes should have same names - setattr(self, key, value) + setattr(self, key, value) # keys and attributes should have same names + self.prompt += " " # prompt fix self.write_config() def complete_set(self, text, line, begidx, endidx): @@ -484,8 +459,6 @@ class CloudMonkeyShell(cmd.Cmd, object): else: verb = fields[0] subject = fields[2].partition(" ")[0] - if verb not in self.cache_verbs: - self.cache_verb_miss(verb) if subject in self.cache_verbs[verb]: self.print_shell(self.cache_verbs[verb][subject][2]) @@ -537,8 +510,6 @@ def main(): prog_name = "python " + prog_name self.do_shell("%s %s %s" % (prog_name, rule, args)) return - if not rule in self.cache_verbs: - self.cache_verb_miss(rule) try: args_partition = args.partition(" ") res = self.cache_verbs[rule][args_partition[0]] From f07a98a74097dc29f402f481704334146d0cf36d Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Sat, 5 Jan 2013 15:30:38 -0800 Subject: [PATCH 271/421] api: Refactor and move s3 to api.command.admin.storage Signed-off-by: Rohit Yadav --- .../com/cloud/resource/ResourceService.java | 4 ++-- .../cloudstack/api/ResponseGenerator.java | 2 +- .../api/command/admin/storage}/AddS3Cmd.java | 4 ++-- .../command/admin/storage}/ListS3sCmd.java | 4 ++-- .../cloudstack}/api/response/S3Response.java | 2 +- client/tomcatconf/commands.properties.in | 4 ++-- .../src/com/cloud/api/ApiResponseHelper.java | 24 +------------------ .../cloud/resource/ResourceManagerImpl.java | 4 ++-- .../src/com/cloud/storage/s3/S3Manager.java | 4 ++-- .../com/cloud/storage/s3/S3ManagerImpl.java | 4 ++-- 10 files changed, 17 insertions(+), 39 deletions(-) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/command/admin/storage}/AddS3Cmd.java (98%) rename api/src/{com/cloud/api/commands => org/apache/cloudstack/api/command/admin/storage}/ListS3sCmd.java (95%) rename api/src/{com/cloud => org/apache/cloudstack}/api/response/S3Response.java (99%) diff --git a/api/src/com/cloud/resource/ResourceService.java b/api/src/com/cloud/resource/ResourceService.java index ade10127773..b9db8e734d9 100755 --- a/api/src/com/cloud/resource/ResourceService.java +++ b/api/src/com/cloud/resource/ResourceService.java @@ -21,11 +21,11 @@ import java.util.List; import org.apache.cloudstack.api.command.admin.cluster.AddClusterCmd; import org.apache.cloudstack.api.command.admin.cluster.DeleteClusterCmd; import org.apache.cloudstack.api.command.admin.host.*; +import org.apache.cloudstack.api.command.admin.storage.AddS3Cmd; +import org.apache.cloudstack.api.command.admin.storage.ListS3sCmd; import org.apache.cloudstack.api.command.admin.swift.AddSwiftCmd; import org.apache.cloudstack.api.command.admin.swift.ListSwiftsCmd; import org.apache.cloudstack.api.command.admin.host.PrepareForMaintenanceCmd; -import com.cloud.api.commands.AddS3Cmd; -import com.cloud.api.commands.ListS3sCmd; import com.cloud.exception.DiscoveryException; import com.cloud.exception.InvalidParameterValueException; import com.cloud.exception.ResourceInUseException; diff --git a/api/src/org/apache/cloudstack/api/ResponseGenerator.java b/api/src/org/apache/cloudstack/api/ResponseGenerator.java index 559a7ad0ffb..e9f988ade60 100644 --- a/api/src/org/apache/cloudstack/api/ResponseGenerator.java +++ b/api/src/org/apache/cloudstack/api/ResponseGenerator.java @@ -92,7 +92,7 @@ import org.apache.cloudstack.api.response.VpcResponse; import org.apache.cloudstack.api.response.VpnUsersResponse; import org.apache.cloudstack.api.response.ZoneResponse; -import com.cloud.api.response.S3Response; +import org.apache.cloudstack.api.response.S3Response; import com.cloud.async.AsyncJob; import com.cloud.capacity.Capacity; diff --git a/api/src/com/cloud/api/commands/AddS3Cmd.java b/api/src/org/apache/cloudstack/api/command/admin/storage/AddS3Cmd.java similarity index 98% rename from api/src/com/cloud/api/commands/AddS3Cmd.java rename to api/src/org/apache/cloudstack/api/command/admin/storage/AddS3Cmd.java index 2dfc8ff3044..13f066a6e57 100644 --- a/api/src/com/cloud/api/commands/AddS3Cmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/storage/AddS3Cmd.java @@ -16,7 +16,7 @@ * specific language governing permissions and limitations * under the License. */ -package com.cloud.api.commands; +package org.apache.cloudstack.api.command.admin.storage; import static org.apache.cloudstack.api.ApiConstants.S3_ACCESS_KEY; import static org.apache.cloudstack.api.ApiConstants.S3_CONNECTION_TIMEOUT; @@ -35,7 +35,7 @@ import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; -import com.cloud.api.response.S3Response; +import org.apache.cloudstack.api.response.S3Response; import com.cloud.exception.ConcurrentOperationException; import com.cloud.exception.DiscoveryException; import com.cloud.exception.InsufficientCapacityException; diff --git a/api/src/com/cloud/api/commands/ListS3sCmd.java b/api/src/org/apache/cloudstack/api/command/admin/storage/ListS3sCmd.java similarity index 95% rename from api/src/com/cloud/api/commands/ListS3sCmd.java rename to api/src/org/apache/cloudstack/api/command/admin/storage/ListS3sCmd.java index 89da5151ab5..d0f6d722179 100644 --- a/api/src/com/cloud/api/commands/ListS3sCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/storage/ListS3sCmd.java @@ -16,7 +16,7 @@ * specific language governing permissions and limitations * under the License. */ -package com.cloud.api.commands; +package org.apache.cloudstack.api.command.admin.storage; import java.util.ArrayList; import java.util.List; @@ -25,7 +25,7 @@ import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.BaseListCmd; import org.apache.cloudstack.api.ServerApiException; import org.apache.cloudstack.api.response.ListResponse; -import com.cloud.api.response.S3Response; +import org.apache.cloudstack.api.response.S3Response; import com.cloud.exception.ConcurrentOperationException; import com.cloud.exception.InsufficientCapacityException; import com.cloud.exception.NetworkRuleConflictException; diff --git a/api/src/com/cloud/api/response/S3Response.java b/api/src/org/apache/cloudstack/api/response/S3Response.java similarity index 99% rename from api/src/com/cloud/api/response/S3Response.java rename to api/src/org/apache/cloudstack/api/response/S3Response.java index 0d2cf7e4ea7..5dd0ef0e041 100644 --- a/api/src/com/cloud/api/response/S3Response.java +++ b/api/src/org/apache/cloudstack/api/response/S3Response.java @@ -16,7 +16,7 @@ * specific language governing permissions and limitations * under the License. */ -package com.cloud.api.response; +package org.apache.cloudstack.api.response; import com.cloud.serializer.Param; import com.cloud.utils.IdentityProxy; diff --git a/client/tomcatconf/commands.properties.in b/client/tomcatconf/commands.properties.in index fdd594e72af..72cdb4b520d 100755 --- a/client/tomcatconf/commands.properties.in +++ b/client/tomcatconf/commands.properties.in @@ -229,8 +229,8 @@ addSwift=org.apache.cloudstack.api.command.admin.swift.AddSwiftCmd;1 listSwifts=org.apache.cloudstack.api.command.admin.swift.ListSwiftsCmd;1 #### s3 commands -addS3=com.cloud.api.commands.AddS3Cmd;1 -listS3s=com.cloud.api.commands.ListS3sCmd;1 +addS3=org.apache.cloudstack.api.command.admin.storage.AddS3Cmd;1 +listS3s=org.apache.cloudstack.api.command.admin.storage.ListS3sCmd;1 #### host commands addHost=org.apache.cloudstack.api.command.admin.host.AddHostCmd;3 diff --git a/server/src/com/cloud/api/ApiResponseHelper.java b/server/src/com/cloud/api/ApiResponseHelper.java index 21b2c2e85e3..ebe7abba214 100755 --- a/server/src/com/cloud/api/ApiResponseHelper.java +++ b/server/src/com/cloud/api/ApiResponseHelper.java @@ -21,11 +21,9 @@ import static java.util.Collections.singletonList; import java.text.DecimalFormat; import java.util.ArrayList; -import java.util.Date; import java.util.EnumSet; import java.util.HashMap; import java.util.HashSet; -import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Set; @@ -33,8 +31,6 @@ import java.util.StringTokenizer; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.ResponseGenerator; -import org.apache.cloudstack.api.ResponseObject; -import org.apache.cloudstack.api.ServerApiException; import org.apache.log4j.Logger; import com.cloud.acl.ControlledEntity; @@ -134,14 +130,13 @@ import org.apache.cloudstack.api.response.VpcResponse; import org.apache.cloudstack.api.response.VpnUsersResponse; import org.apache.cloudstack.api.response.ZoneResponse; -import com.cloud.api.response.S3Response; +import org.apache.cloudstack.api.response.S3Response; import com.cloud.async.AsyncJob; import com.cloud.capacity.Capacity; import com.cloud.capacity.CapacityVO; import com.cloud.capacity.dao.CapacityDaoImpl.SummedCapacity; import com.cloud.configuration.Configuration; import com.cloud.configuration.Resource.ResourceOwnerType; -import com.cloud.configuration.Resource.ResourceType; import com.cloud.configuration.ResourceCount; import com.cloud.configuration.ResourceLimit; import com.cloud.dc.ClusterVO; @@ -156,7 +151,6 @@ import com.cloud.dc.VlanVO; import com.cloud.domain.Domain; import com.cloud.event.Event; import com.cloud.host.Host; -import com.cloud.host.HostStats; import com.cloud.host.HostVO; import com.cloud.hypervisor.HypervisorCapabilities; import com.cloud.network.IPAddressVO; @@ -174,23 +168,17 @@ import com.cloud.network.PhysicalNetworkTrafficType; import com.cloud.network.PhysicalNetworkVO; import com.cloud.network.RemoteAccessVpn; import com.cloud.network.Site2SiteCustomerGateway; -import com.cloud.network.Site2SiteCustomerGatewayVO; import com.cloud.network.Site2SiteVpnConnection; import com.cloud.network.Site2SiteVpnGateway; -import com.cloud.network.Site2SiteVpnGatewayVO; import com.cloud.network.VirtualRouterProvider; import com.cloud.network.VpnUser; import com.cloud.network.as.AutoScalePolicy; -import com.cloud.network.as.AutoScalePolicyVO; import com.cloud.network.as.AutoScaleVmGroup; -import com.cloud.network.as.AutoScaleVmGroupVO; import com.cloud.network.as.AutoScaleVmProfile; import com.cloud.network.as.AutoScaleVmProfileVO; import com.cloud.network.as.Condition; import com.cloud.network.as.ConditionVO; import com.cloud.network.as.Counter; -import com.cloud.network.as.CounterVO; -import com.cloud.network.dao.PhysicalNetworkTrafficTypeVO; import com.cloud.network.router.VirtualRouter; import com.cloud.network.rules.FirewallRule; import com.cloud.network.rules.FirewallRuleVO; @@ -203,11 +191,8 @@ import com.cloud.network.security.SecurityRule; import com.cloud.network.security.SecurityRule.SecurityRuleType; import com.cloud.network.vpc.PrivateGateway; import com.cloud.network.vpc.StaticRoute; -import com.cloud.network.vpc.StaticRouteVO; import com.cloud.network.vpc.Vpc; -import com.cloud.network.vpc.VpcGatewayVO; import com.cloud.network.vpc.VpcOffering; -import com.cloud.network.vpc.VpcVO; import com.cloud.offering.DiskOffering; import com.cloud.offering.NetworkOffering; import com.cloud.offering.ServiceOffering; @@ -218,12 +203,10 @@ import com.cloud.projects.ProjectInvitation; import com.cloud.server.Criteria; import com.cloud.server.ResourceTag; import com.cloud.server.ResourceTag.TaggedResourceType; -import com.cloud.storage.DiskOfferingVO; import com.cloud.storage.GuestOS; import com.cloud.storage.GuestOSCategoryVO; import com.cloud.storage.S3; import com.cloud.storage.Snapshot; -import com.cloud.storage.Storage; import com.cloud.storage.Storage.ImageFormat; import com.cloud.storage.Storage.StoragePoolType; import com.cloud.storage.Storage.TemplateType; @@ -242,13 +225,10 @@ import com.cloud.storage.VolumeVO; import com.cloud.storage.snapshot.SnapshotPolicy; import com.cloud.storage.snapshot.SnapshotSchedule; import com.cloud.template.VirtualMachineTemplate; -import com.cloud.test.PodZoneConfig; import com.cloud.user.Account; import com.cloud.user.User; import com.cloud.user.UserAccount; import com.cloud.user.UserContext; -import com.cloud.user.UserStatisticsVO; -import com.cloud.user.UserVO; import com.cloud.uservm.UserVm; import com.cloud.utils.Pair; import com.cloud.utils.StringUtils; @@ -256,9 +236,7 @@ import com.cloud.utils.net.NetUtils; import com.cloud.vm.ConsoleProxyVO; import com.cloud.vm.InstanceGroup; import com.cloud.vm.NicProfile; -import com.cloud.vm.VMInstanceVO; import com.cloud.vm.VirtualMachine; -import com.cloud.vm.VirtualMachine.State; import com.cloud.vm.VirtualMachine.Type; public class ApiResponseHelper implements ResponseGenerator { diff --git a/server/src/com/cloud/resource/ResourceManagerImpl.java b/server/src/com/cloud/resource/ResourceManagerImpl.java index db01c3dd435..ffc09f0effe 100755 --- a/server/src/com/cloud/resource/ResourceManagerImpl.java +++ b/server/src/com/cloud/resource/ResourceManagerImpl.java @@ -31,12 +31,12 @@ import javax.ejb.Local; import javax.naming.ConfigurationException; import org.apache.cloudstack.api.command.admin.cluster.AddClusterCmd; +import org.apache.cloudstack.api.command.admin.storage.ListS3sCmd; import org.apache.cloudstack.api.command.admin.swift.AddSwiftCmd; import org.apache.cloudstack.api.command.admin.cluster.DeleteClusterCmd; import org.apache.cloudstack.api.command.admin.host.*; import org.apache.cloudstack.api.command.admin.swift.ListSwiftsCmd; -import com.cloud.api.commands.AddS3Cmd; -import com.cloud.api.commands.ListS3sCmd; +import org.apache.cloudstack.api.command.admin.storage.AddS3Cmd; import com.cloud.storage.S3; import com.cloud.storage.S3VO; import com.cloud.storage.s3.S3Manager; diff --git a/server/src/com/cloud/storage/s3/S3Manager.java b/server/src/com/cloud/storage/s3/S3Manager.java index 357f2aed463..0e47d7273d6 100644 --- a/server/src/com/cloud/storage/s3/S3Manager.java +++ b/server/src/com/cloud/storage/s3/S3Manager.java @@ -21,8 +21,8 @@ package com.cloud.storage.s3; import java.util.List; import com.cloud.agent.api.to.S3TO; -import com.cloud.api.commands.AddS3Cmd; -import com.cloud.api.commands.ListS3sCmd; +import org.apache.cloudstack.api.command.admin.storage.AddS3Cmd; +import org.apache.cloudstack.api.command.admin.storage.ListS3sCmd; import com.cloud.dc.DataCenterVO; import com.cloud.exception.DiscoveryException; import com.cloud.storage.S3; diff --git a/server/src/com/cloud/storage/s3/S3ManagerImpl.java b/server/src/com/cloud/storage/s3/S3ManagerImpl.java index 0da11ffa590..1db809b07b2 100644 --- a/server/src/com/cloud/storage/s3/S3ManagerImpl.java +++ b/server/src/com/cloud/storage/s3/S3ManagerImpl.java @@ -44,6 +44,7 @@ import java.util.concurrent.Callable; import javax.ejb.Local; import javax.naming.ConfigurationException; +import org.apache.cloudstack.api.command.admin.storage.AddS3Cmd; import org.apache.log4j.Logger; import com.cloud.agent.AgentManager; @@ -52,8 +53,7 @@ import com.cloud.agent.api.DeleteTemplateFromS3Command; import com.cloud.agent.api.DownloadTemplateFromS3ToSecondaryStorageCommand; import com.cloud.agent.api.UploadTemplateToS3FromSecondaryStorageCommand; import com.cloud.agent.api.to.S3TO; -import com.cloud.api.commands.AddS3Cmd; -import com.cloud.api.commands.ListS3sCmd; +import org.apache.cloudstack.api.command.admin.storage.ListS3sCmd; import com.cloud.configuration.Config; import com.cloud.configuration.dao.ConfigurationDao; import com.cloud.dc.DataCenterVO; From 73a0c3e07f41425cbeede88a2784bd9eb54b2f00 Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Sat, 5 Jan 2013 15:32:58 -0800 Subject: [PATCH 272/421] api: Refactor move storagepool apis to storage pkg Signed-off-by: Rohit Yadav --- api/src/com/cloud/server/ManagementService.java | 2 +- api/src/com/cloud/storage/StorageService.java | 10 +++------- .../CancelPrimaryStorageMaintenanceCmd.java | 2 +- .../CreateStoragePoolCmd.java | 2 +- .../{storagepool => storage}/DeletePoolCmd.java | 2 +- .../ListStoragePoolsCmd.java | 2 +- .../PreparePrimaryStorageForMaintenanceCmd.java | 2 +- .../UpdateStoragePoolCmd.java | 2 +- client/tomcatconf/commands.properties.in | 12 ++++++------ .../src/com/cloud/server/ManagementServerImpl.java | 14 +------------- .../src/com/cloud/storage/StorageManagerImpl.java | 12 ++---------- 11 files changed, 19 insertions(+), 43 deletions(-) rename api/src/org/apache/cloudstack/api/command/admin/{storagepool => storage}/CancelPrimaryStorageMaintenanceCmd.java (98%) rename api/src/org/apache/cloudstack/api/command/admin/{storagepool => storage}/CreateStoragePoolCmd.java (98%) rename api/src/org/apache/cloudstack/api/command/admin/{storagepool => storage}/DeletePoolCmd.java (98%) rename api/src/org/apache/cloudstack/api/command/admin/{storagepool => storage}/ListStoragePoolsCmd.java (98%) rename api/src/org/apache/cloudstack/api/command/admin/{storagepool => storage}/PreparePrimaryStorageForMaintenanceCmd.java (98%) rename api/src/org/apache/cloudstack/api/command/admin/{storagepool => storage}/UpdateStoragePoolCmd.java (98%) diff --git a/api/src/com/cloud/server/ManagementService.java b/api/src/com/cloud/server/ManagementService.java index cacf5cf1100..e547954fff3 100755 --- a/api/src/com/cloud/server/ManagementService.java +++ b/api/src/com/cloud/server/ManagementService.java @@ -30,7 +30,7 @@ import org.apache.cloudstack.api.command.admin.pod.ListPodsByCmd; import org.apache.cloudstack.api.command.admin.resource.ListAlertsCmd; import org.apache.cloudstack.api.command.admin.resource.ListCapacityCmd; import org.apache.cloudstack.api.command.admin.domain.UpdateDomainCmd; -import org.apache.cloudstack.api.command.admin.storagepool.ListStoragePoolsCmd; +import org.apache.cloudstack.api.command.admin.storage.ListStoragePoolsCmd; import org.apache.cloudstack.api.command.admin.systemvm.*; import org.apache.cloudstack.api.command.admin.vlan.ListVlanIpRangesCmd; import org.apache.cloudstack.api.command.user.address.ListPublicIpAddressesCmd; diff --git a/api/src/com/cloud/storage/StorageService.java b/api/src/com/cloud/storage/StorageService.java index 1967cba0325..ff8ec13e33b 100644 --- a/api/src/com/cloud/storage/StorageService.java +++ b/api/src/com/cloud/storage/StorageService.java @@ -17,14 +17,11 @@ package com.cloud.storage; import java.net.UnknownHostException; -import java.util.List; -import org.apache.cloudstack.api.command.admin.storagepool.CancelPrimaryStorageMaintenanceCmd; -import org.apache.cloudstack.api.command.admin.storagepool.CreateStoragePoolCmd; -import org.apache.cloudstack.api.command.admin.storagepool.DeletePoolCmd; -import org.apache.cloudstack.api.command.admin.storagepool.UpdateStoragePoolCmd; +import org.apache.cloudstack.api.command.admin.storage.*; +import org.apache.cloudstack.api.command.admin.storage.CancelPrimaryStorageMaintenanceCmd; +import org.apache.cloudstack.api.command.admin.storage.UpdateStoragePoolCmd; import org.apache.cloudstack.api.command.user.volume.CreateVolumeCmd; -import org.apache.cloudstack.api.command.user.volume.ListVolumesCmd; import org.apache.cloudstack.api.command.user.volume.UploadVolumeCmd; import com.cloud.exception.ConcurrentOperationException; import com.cloud.exception.InsufficientCapacityException; @@ -33,7 +30,6 @@ import com.cloud.exception.ResourceAllocationException; import com.cloud.exception.ResourceInUseException; import com.cloud.exception.ResourceUnavailableException; import com.cloud.user.Account; -import com.cloud.utils.Pair; public interface StorageService{ /** diff --git a/api/src/org/apache/cloudstack/api/command/admin/storagepool/CancelPrimaryStorageMaintenanceCmd.java b/api/src/org/apache/cloudstack/api/command/admin/storage/CancelPrimaryStorageMaintenanceCmd.java similarity index 98% rename from api/src/org/apache/cloudstack/api/command/admin/storagepool/CancelPrimaryStorageMaintenanceCmd.java rename to api/src/org/apache/cloudstack/api/command/admin/storage/CancelPrimaryStorageMaintenanceCmd.java index 4d62184f1ba..24ef48be222 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/storagepool/CancelPrimaryStorageMaintenanceCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/storage/CancelPrimaryStorageMaintenanceCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.command.admin.storagepool; +package org.apache.cloudstack.api.command.admin.storage; import org.apache.log4j.Logger; diff --git a/api/src/org/apache/cloudstack/api/command/admin/storagepool/CreateStoragePoolCmd.java b/api/src/org/apache/cloudstack/api/command/admin/storage/CreateStoragePoolCmd.java similarity index 98% rename from api/src/org/apache/cloudstack/api/command/admin/storagepool/CreateStoragePoolCmd.java rename to api/src/org/apache/cloudstack/api/command/admin/storage/CreateStoragePoolCmd.java index 352001778cb..78a142ac449 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/storagepool/CreateStoragePoolCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/storage/CreateStoragePoolCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.command.admin.storagepool; +package org.apache.cloudstack.api.command.admin.storage; import java.net.UnknownHostException; import java.util.Map; diff --git a/api/src/org/apache/cloudstack/api/command/admin/storagepool/DeletePoolCmd.java b/api/src/org/apache/cloudstack/api/command/admin/storage/DeletePoolCmd.java similarity index 98% rename from api/src/org/apache/cloudstack/api/command/admin/storagepool/DeletePoolCmd.java rename to api/src/org/apache/cloudstack/api/command/admin/storage/DeletePoolCmd.java index 6b45e3e0331..1510f7822f7 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/storagepool/DeletePoolCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/storage/DeletePoolCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.command.admin.storagepool; +package org.apache.cloudstack.api.command.admin.storage; import org.apache.cloudstack.api.*; import org.apache.cloudstack.api.response.StoragePoolResponse; diff --git a/api/src/org/apache/cloudstack/api/command/admin/storagepool/ListStoragePoolsCmd.java b/api/src/org/apache/cloudstack/api/command/admin/storage/ListStoragePoolsCmd.java similarity index 98% rename from api/src/org/apache/cloudstack/api/command/admin/storagepool/ListStoragePoolsCmd.java rename to api/src/org/apache/cloudstack/api/command/admin/storage/ListStoragePoolsCmd.java index 2ba3bbbc2d0..3723f8b3996 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/storagepool/ListStoragePoolsCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/storage/ListStoragePoolsCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.command.admin.storagepool; +package org.apache.cloudstack.api.command.admin.storage; import java.util.ArrayList; import java.util.List; diff --git a/api/src/org/apache/cloudstack/api/command/admin/storagepool/PreparePrimaryStorageForMaintenanceCmd.java b/api/src/org/apache/cloudstack/api/command/admin/storage/PreparePrimaryStorageForMaintenanceCmd.java similarity index 98% rename from api/src/org/apache/cloudstack/api/command/admin/storagepool/PreparePrimaryStorageForMaintenanceCmd.java rename to api/src/org/apache/cloudstack/api/command/admin/storage/PreparePrimaryStorageForMaintenanceCmd.java index 602f278fbf8..6a4175516cc 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/storagepool/PreparePrimaryStorageForMaintenanceCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/storage/PreparePrimaryStorageForMaintenanceCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.command.admin.storagepool; +package org.apache.cloudstack.api.command.admin.storage; import org.apache.log4j.Logger; diff --git a/api/src/org/apache/cloudstack/api/command/admin/storagepool/UpdateStoragePoolCmd.java b/api/src/org/apache/cloudstack/api/command/admin/storage/UpdateStoragePoolCmd.java similarity index 98% rename from api/src/org/apache/cloudstack/api/command/admin/storagepool/UpdateStoragePoolCmd.java rename to api/src/org/apache/cloudstack/api/command/admin/storage/UpdateStoragePoolCmd.java index c6796a808c5..806df561397 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/storagepool/UpdateStoragePoolCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/storage/UpdateStoragePoolCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.api.command.admin.storagepool; +package org.apache.cloudstack.api.command.admin.storage; import java.util.List; diff --git a/client/tomcatconf/commands.properties.in b/client/tomcatconf/commands.properties.in index 72cdb4b520d..8348359cc22 100755 --- a/client/tomcatconf/commands.properties.in +++ b/client/tomcatconf/commands.properties.in @@ -268,13 +268,13 @@ queryAsyncJobResult=org.apache.cloudstack.api.command.user.job.QueryAsyncJobResu listAsyncJobs=org.apache.cloudstack.api.command.user.job.ListAsyncJobsCmd;15 #### storage pools commands -listStoragePools=org.apache.cloudstack.api.command.admin.storagepool.ListStoragePoolsCmd;3 -createStoragePool=org.apache.cloudstack.api.command.admin.storagepool.CreateStoragePoolCmd;1 -updateStoragePool=org.apache.cloudstack.api.command.admin.storagepool.UpdateStoragePoolCmd;1 -deleteStoragePool=org.apache.cloudstack.api.command.admin.storagepool.DeletePoolCmd;1 +listStoragePools=org.apache.cloudstack.api.command.admin.storage.ListStoragePoolsCmd;3 +createStoragePool=org.apache.cloudstack.api.command.admin.storage.CreateStoragePoolCmd;1 +updateStoragePool=org.apache.cloudstack.api.command.admin.storage.UpdateStoragePoolCmd;1 +deleteStoragePool=org.apache.cloudstack.api.command.admin.storage.DeletePoolCmd;1 listClusters=org.apache.cloudstack.api.command.admin.cluster.ListClustersCmd;3 -enableStorageMaintenance=org.apache.cloudstack.api.command.admin.storagepool.PreparePrimaryStorageForMaintenanceCmd;1 -cancelStorageMaintenance=org.apache.cloudstack.api.command.admin.storagepool.CancelPrimaryStorageMaintenanceCmd;1 +enableStorageMaintenance=org.apache.cloudstack.api.command.admin.storage.PreparePrimaryStorageForMaintenanceCmd;1 +cancelStorageMaintenance=org.apache.cloudstack.api.command.admin.storage.CancelPrimaryStorageMaintenanceCmd;1 #### security group commands createSecurityGroup=org.apache.cloudstack.api.command.user.securitygroup.CreateSecurityGroupCmd;15 diff --git a/server/src/com/cloud/server/ManagementServerImpl.java b/server/src/com/cloud/server/ManagementServerImpl.java index e5001927191..b08e4a47d4b 100755 --- a/server/src/com/cloud/server/ManagementServerImpl.java +++ b/server/src/com/cloud/server/ManagementServerImpl.java @@ -45,8 +45,7 @@ import javax.crypto.spec.SecretKeySpec; import org.apache.cloudstack.api.command.admin.cluster.ListClustersCmd; import org.apache.cloudstack.api.command.admin.config.ListCfgsByCmd; import org.apache.cloudstack.api.command.admin.resource.ListAlertsCmd; -import org.apache.cloudstack.api.command.admin.router.ListRoutersCmd; -import org.apache.cloudstack.api.command.admin.storagepool.ListStoragePoolsCmd; +import org.apache.cloudstack.api.command.admin.storage.ListStoragePoolsCmd; import org.apache.cloudstack.api.command.admin.systemvm.DestroySystemVmCmd; import org.apache.cloudstack.api.command.admin.systemvm.UpgradeSystemVMCmd; import org.apache.cloudstack.api.command.user.address.ListPublicIpAddressesCmd; @@ -55,7 +54,6 @@ import org.apache.cloudstack.api.command.user.guest.ListGuestOsCategoriesCmd; import org.apache.cloudstack.api.command.user.guest.ListGuestOsCmd; import org.apache.cloudstack.api.command.user.iso.ListIsosCmd; import org.apache.cloudstack.api.command.user.iso.UpdateIsoCmd; -import org.apache.cloudstack.api.command.user.job.ListAsyncJobsCmd; import org.apache.cloudstack.api.command.user.offering.ListDiskOfferingsCmd; import org.apache.cloudstack.api.command.user.offering.ListServiceOfferingsCmd; import org.apache.cloudstack.api.command.user.ssh.ListSSHKeyPairsCmd; @@ -64,7 +62,6 @@ import org.apache.cloudstack.api.command.user.ssh.RegisterSSHKeyPairCmd; import org.apache.cloudstack.api.command.user.template.ListTemplatesCmd; import org.apache.cloudstack.api.command.user.template.UpdateTemplateCmd; import org.apache.cloudstack.api.command.user.vm.GetVMPasswordCmd; -import org.apache.cloudstack.api.command.user.vmgroup.ListVMGroupsCmd; import org.apache.cloudstack.api.command.user.zone.ListZonesByCmd; import org.apache.commons.codec.binary.Base64; import org.apache.log4j.Logger; @@ -85,8 +82,6 @@ import com.cloud.api.ApiDBUtils; import org.apache.cloudstack.api.command.user.ssh.CreateSSHKeyPairCmd; import org.apache.cloudstack.api.command.user.volume.ExtractVolumeCmd; import org.apache.cloudstack.api.command.admin.resource.ListCapacityCmd; -import org.apache.cloudstack.api.command.user.event.ListEventsCmd; -import org.apache.cloudstack.api.command.admin.host.ListHostsCmd; import org.apache.cloudstack.api.command.admin.pod.ListPodsByCmd; import org.apache.cloudstack.api.command.admin.systemvm.ListSystemVMsCmd; import org.apache.cloudstack.api.command.admin.vlan.ListVlanIpRangesCmd; @@ -97,15 +92,11 @@ import org.apache.cloudstack.api.command.admin.host.UpdateHostPasswordCmd; import com.cloud.api.commands.UpdateTemplateOrIsoCmd; import com.cloud.api.query.dao.DomainRouterJoinDao; import com.cloud.api.query.dao.InstanceGroupJoinDao; -import com.cloud.api.query.vo.DomainRouterJoinVO; -import com.cloud.api.query.vo.EventJoinVO; -import com.cloud.api.query.vo.InstanceGroupJoinVO; import org.apache.cloudstack.api.command.user.vmgroup.UpdateVMGroupCmd; import org.apache.cloudstack.api.command.admin.resource.UploadCustomCertificateCmd; import org.apache.cloudstack.api.response.ExtractResponse; -import com.cloud.async.AsyncJob; import com.cloud.async.AsyncJobExecutor; import com.cloud.async.AsyncJobManager; import com.cloud.async.AsyncJobResult; @@ -220,7 +211,6 @@ import com.cloud.tags.dao.ResourceTagDao; import com.cloud.template.VirtualMachineTemplate.TemplateFilter; import com.cloud.user.Account; import com.cloud.user.AccountManager; -import com.cloud.user.AccountVO; import com.cloud.user.SSHKeyPair; import com.cloud.user.SSHKeyPairVO; import com.cloud.user.User; @@ -244,7 +234,6 @@ 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; @@ -254,7 +243,6 @@ import com.cloud.utils.net.NetUtils; import com.cloud.utils.ssh.SSHKeysHelper; import com.cloud.vm.ConsoleProxyVO; import com.cloud.vm.DomainRouterVO; -import com.cloud.vm.InstanceGroup; import com.cloud.vm.InstanceGroupVO; import com.cloud.vm.SecondaryStorageVmVO; import com.cloud.vm.UserVmVO; diff --git a/server/src/com/cloud/storage/StorageManagerImpl.java b/server/src/com/cloud/storage/StorageManagerImpl.java index 21ee9726a59..5f1db66d63d 100755 --- a/server/src/com/cloud/storage/StorageManagerImpl.java +++ b/server/src/com/cloud/storage/StorageManagerImpl.java @@ -44,7 +44,7 @@ import java.util.concurrent.TimeUnit; import javax.ejb.Local; import javax.naming.ConfigurationException; -import org.apache.cloudstack.api.command.admin.storagepool.*; +import org.apache.cloudstack.api.command.admin.storage.*; import org.apache.cloudstack.api.command.user.volume.CreateVolumeCmd; import org.apache.cloudstack.api.command.user.volume.UploadVolumeCmd; import org.apache.log4j.Logger; @@ -74,10 +74,7 @@ import com.cloud.agent.api.to.VolumeTO; import com.cloud.agent.manager.Commands; import com.cloud.alert.AlertManager; import com.cloud.api.ApiDBUtils; -import org.apache.cloudstack.api.command.admin.storagepool.CancelPrimaryStorageMaintenanceCmd; -import org.apache.cloudstack.api.command.admin.storagepool.CreateStoragePoolCmd; -import org.apache.cloudstack.api.command.user.volume.ListVolumesCmd; -import org.apache.cloudstack.api.command.admin.storagepool.UpdateStoragePoolCmd; +import org.apache.cloudstack.api.command.admin.storage.CreateStoragePoolCmd; import com.cloud.async.AsyncJobManager; import com.cloud.capacity.Capacity; import com.cloud.capacity.CapacityManager; @@ -129,11 +126,9 @@ import com.cloud.network.NetworkManager; import com.cloud.offering.ServiceOffering; import com.cloud.org.Grouping; import com.cloud.org.Grouping.AllocationState; -import com.cloud.projects.Project.ListProjectResourcesCriteria; import com.cloud.resource.ResourceManager; import com.cloud.resource.ResourceState; import com.cloud.server.ManagementServer; -import com.cloud.server.ResourceTag.TaggedResourceType; import com.cloud.server.StatsCollector; import com.cloud.service.ServiceOfferingVO; import com.cloud.service.dao.ServiceOfferingDao; @@ -161,7 +156,6 @@ import com.cloud.storage.s3.S3Manager; import com.cloud.storage.secondary.SecondaryStorageVmManager; import com.cloud.storage.snapshot.SnapshotManager; import com.cloud.storage.snapshot.SnapshotScheduler; -import com.cloud.tags.ResourceTagVO; import com.cloud.tags.dao.ResourceTagDao; import com.cloud.template.TemplateManager; import com.cloud.user.Account; @@ -175,7 +169,6 @@ import com.cloud.uservm.UserVm; import com.cloud.utils.EnumUtils; import com.cloud.utils.NumbersUtil; import com.cloud.utils.Pair; -import com.cloud.utils.Ternary; import com.cloud.utils.UriUtils; import com.cloud.utils.component.Adapters; import com.cloud.utils.component.ComponentLocator; @@ -183,7 +176,6 @@ import com.cloud.utils.component.Inject; import com.cloud.utils.component.Manager; import com.cloud.utils.concurrency.NamedThreadFactory; import com.cloud.utils.db.DB; -import com.cloud.utils.db.Filter; import com.cloud.utils.db.GenericSearchBuilder; import com.cloud.utils.db.GlobalLock; import com.cloud.utils.db.JoinBuilder; From c5abc180ab55d521246d280e75ecd08e14f630a2 Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Sat, 5 Jan 2013 15:53:59 -0800 Subject: [PATCH 273/421] CLOUDSTACK-212: Move api/test pkg to org.apache.cloudstack Signed-off-by: Rohit Yadav --- .../cloudstack/api/agent}/test/AgentControlAnswerTest.java | 2 +- .../cloudstack/api/agent}/test/AgentControlCommandTest.java | 2 +- .../apache/cloudstack/api/agent}/test/AnswerTest.java | 2 +- .../apache/cloudstack/api/agent}/test/AttachIsoCommandTest.java | 2 +- .../cloudstack/api/agent}/test/AttachVolumeAnswerTest.java | 2 +- .../cloudstack/api/agent}/test/AttachVolumeCommandTest.java | 2 +- .../cloudstack/api/agent}/test/BackupSnapshotAnswerTest.java | 2 +- .../cloudstack/api/agent}/test/BackupSnapshotCommandTest.java | 2 +- .../cloudstack/api/agent}/test/BumpUpPriorityCommandTest.java | 2 +- .../apache/cloudstack/api/agent}/test/CancelCommandTest.java | 2 +- .../cloudstack/api/agent}/test/ChangeAgentAnswerTest.java | 2 +- .../cloudstack/api/agent}/test/ChangeAgentCommandTest.java | 2 +- .../cloudstack/api/agent}/test/CheckHealthAnswerTest.java | 2 +- .../cloudstack/api/agent}/test/CheckHealthCommandTest.java | 2 +- .../cloudstack/api/agent}/test/CheckNetworkAnswerTest.java | 2 +- .../cloudstack/api/agent}/test/CheckNetworkCommandTest.java | 2 +- .../cloudstack/api/agent}/test/CheckOnHostCommandTest.java | 2 +- .../apache/cloudstack/api/agent}/test/SnapshotCommandTest.java | 2 +- .../cloudstack/api/command}/test/ActivateProjectCmdTest.java | 2 +- .../api/command}/test/AddAccountToProjectCmdTest.java | 2 +- .../apache/cloudstack/api/command}/test/AddClusterCmdTest.java | 2 +- .../apache/cloudstack/api/command}/test/AddHostCmdTest.java | 2 +- .../api/command}/test/AddNetworkServiceProviderCmdTest.java | 2 +- .../api/command}/test/AddSecondaryStorageCmdTest.java | 2 +- .../apache/cloudstack/api/command}/test/AddSwiftCmdTest.java | 2 +- .../apache/cloudstack/api/command}/test/AddVpnUserCmdTest.java | 2 +- 26 files changed, 26 insertions(+), 26 deletions(-) rename api/test/{src/com/cloud/agent/api => org/apache/cloudstack/api/agent}/test/AgentControlAnswerTest.java (96%) rename api/test/{src/com/cloud/agent/api => org/apache/cloudstack/api/agent}/test/AgentControlCommandTest.java (96%) rename api/test/{src/com/cloud/agent/api => org/apache/cloudstack/api/agent}/test/AnswerTest.java (98%) rename api/test/{src/com/cloud/agent/api => org/apache/cloudstack/api/agent}/test/AttachIsoCommandTest.java (98%) rename api/test/{src/com/cloud/agent/api => org/apache/cloudstack/api/agent}/test/AttachVolumeAnswerTest.java (98%) rename api/test/{src/com/cloud/agent/api => org/apache/cloudstack/api/agent}/test/AttachVolumeCommandTest.java (98%) rename api/test/{src/com/cloud/agent/api => org/apache/cloudstack/api/agent}/test/BackupSnapshotAnswerTest.java (98%) rename api/test/{src/com/cloud/agent/api => org/apache/cloudstack/api/agent}/test/BackupSnapshotCommandTest.java (99%) rename api/test/{src/com/cloud/agent/api => org/apache/cloudstack/api/agent}/test/BumpUpPriorityCommandTest.java (98%) rename api/test/{src/com/cloud/agent/api => org/apache/cloudstack/api/agent}/test/CancelCommandTest.java (96%) rename api/test/{src/com/cloud/agent/api => org/apache/cloudstack/api/agent}/test/ChangeAgentAnswerTest.java (96%) rename api/test/{src/com/cloud/agent/api => org/apache/cloudstack/api/agent}/test/ChangeAgentCommandTest.java (97%) rename api/test/{src/com/cloud/agent/api => org/apache/cloudstack/api/agent}/test/CheckHealthAnswerTest.java (97%) rename api/test/{src/com/cloud/agent/api => org/apache/cloudstack/api/agent}/test/CheckHealthCommandTest.java (96%) rename api/test/{src/com/cloud/agent/api => org/apache/cloudstack/api/agent}/test/CheckNetworkAnswerTest.java (97%) rename api/test/{src/com/cloud/agent/api => org/apache/cloudstack/api/agent}/test/CheckNetworkCommandTest.java (97%) rename api/test/{src/com/cloud/agent/api => org/apache/cloudstack/api/agent}/test/CheckOnHostCommandTest.java (99%) rename api/test/{src/com/cloud/agent/api => org/apache/cloudstack/api/agent}/test/SnapshotCommandTest.java (99%) rename api/test/{src/com/cloud/api/commands => org/apache/cloudstack/api/command}/test/ActivateProjectCmdTest.java (98%) rename api/test/{src/com/cloud/api/commands => org/apache/cloudstack/api/command}/test/AddAccountToProjectCmdTest.java (99%) rename api/test/{src/com/cloud/api/commands => org/apache/cloudstack/api/command}/test/AddClusterCmdTest.java (98%) rename api/test/{src/com/cloud/api/commands => org/apache/cloudstack/api/command}/test/AddHostCmdTest.java (99%) rename api/test/{src/com/cloud/api/commands => org/apache/cloudstack/api/command}/test/AddNetworkServiceProviderCmdTest.java (98%) rename api/test/{src/com/cloud/api/commands => org/apache/cloudstack/api/command}/test/AddSecondaryStorageCmdTest.java (98%) rename api/test/{src/com/cloud/api/commands => org/apache/cloudstack/api/command}/test/AddSwiftCmdTest.java (98%) rename api/test/{src/com/cloud/api/commands => org/apache/cloudstack/api/command}/test/AddVpnUserCmdTest.java (98%) diff --git a/api/test/src/com/cloud/agent/api/test/AgentControlAnswerTest.java b/api/test/org/apache/cloudstack/api/agent/test/AgentControlAnswerTest.java similarity index 96% rename from api/test/src/com/cloud/agent/api/test/AgentControlAnswerTest.java rename to api/test/org/apache/cloudstack/api/agent/test/AgentControlAnswerTest.java index f8aaa4b800b..d0e8b4c7337 100644 --- a/api/test/src/com/cloud/agent/api/test/AgentControlAnswerTest.java +++ b/api/test/org/apache/cloudstack/api/agent/test/AgentControlAnswerTest.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package src.com.cloud.agent.api.test; +package org.apache.cloudstack.api.agent.test; import static org.junit.Assert.assertFalse; diff --git a/api/test/src/com/cloud/agent/api/test/AgentControlCommandTest.java b/api/test/org/apache/cloudstack/api/agent/test/AgentControlCommandTest.java similarity index 96% rename from api/test/src/com/cloud/agent/api/test/AgentControlCommandTest.java rename to api/test/org/apache/cloudstack/api/agent/test/AgentControlCommandTest.java index 6df0edfc948..24d0fe587b8 100644 --- a/api/test/src/com/cloud/agent/api/test/AgentControlCommandTest.java +++ b/api/test/org/apache/cloudstack/api/agent/test/AgentControlCommandTest.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package src.com.cloud.agent.api.test; +package org.apache.cloudstack.api.agent.test; import static org.junit.Assert.assertFalse; diff --git a/api/test/src/com/cloud/agent/api/test/AnswerTest.java b/api/test/org/apache/cloudstack/api/agent/test/AnswerTest.java similarity index 98% rename from api/test/src/com/cloud/agent/api/test/AnswerTest.java rename to api/test/org/apache/cloudstack/api/agent/test/AnswerTest.java index c79db564201..343a3ce2a51 100644 --- a/api/test/src/com/cloud/agent/api/test/AnswerTest.java +++ b/api/test/org/apache/cloudstack/api/agent/test/AnswerTest.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package src.com.cloud.agent.api.test; +package org.apache.cloudstack.api.agent.test; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; diff --git a/api/test/src/com/cloud/agent/api/test/AttachIsoCommandTest.java b/api/test/org/apache/cloudstack/api/agent/test/AttachIsoCommandTest.java similarity index 98% rename from api/test/src/com/cloud/agent/api/test/AttachIsoCommandTest.java rename to api/test/org/apache/cloudstack/api/agent/test/AttachIsoCommandTest.java index 7fec7f2172f..d189d9ca858 100644 --- a/api/test/src/com/cloud/agent/api/test/AttachIsoCommandTest.java +++ b/api/test/org/apache/cloudstack/api/agent/test/AttachIsoCommandTest.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package src.com.cloud.agent.api.test; +package org.apache.cloudstack.api.agent.test; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; diff --git a/api/test/src/com/cloud/agent/api/test/AttachVolumeAnswerTest.java b/api/test/org/apache/cloudstack/api/agent/test/AttachVolumeAnswerTest.java similarity index 98% rename from api/test/src/com/cloud/agent/api/test/AttachVolumeAnswerTest.java rename to api/test/org/apache/cloudstack/api/agent/test/AttachVolumeAnswerTest.java index e7ec7d9cbf3..251a6cb917e 100644 --- a/api/test/src/com/cloud/agent/api/test/AttachVolumeAnswerTest.java +++ b/api/test/org/apache/cloudstack/api/agent/test/AttachVolumeAnswerTest.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package src.com.cloud.agent.api.test; +package org.apache.cloudstack.api.agent.test; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; diff --git a/api/test/src/com/cloud/agent/api/test/AttachVolumeCommandTest.java b/api/test/org/apache/cloudstack/api/agent/test/AttachVolumeCommandTest.java similarity index 98% rename from api/test/src/com/cloud/agent/api/test/AttachVolumeCommandTest.java rename to api/test/org/apache/cloudstack/api/agent/test/AttachVolumeCommandTest.java index 6fcd8c11bc7..1ec416a4d02 100644 --- a/api/test/src/com/cloud/agent/api/test/AttachVolumeCommandTest.java +++ b/api/test/org/apache/cloudstack/api/agent/test/AttachVolumeCommandTest.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package src.com.cloud.agent.api.test; +package org.apache.cloudstack.api.agent.test; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; diff --git a/api/test/src/com/cloud/agent/api/test/BackupSnapshotAnswerTest.java b/api/test/org/apache/cloudstack/api/agent/test/BackupSnapshotAnswerTest.java similarity index 98% rename from api/test/src/com/cloud/agent/api/test/BackupSnapshotAnswerTest.java rename to api/test/org/apache/cloudstack/api/agent/test/BackupSnapshotAnswerTest.java index b3f2847cd51..ede86e9d857 100644 --- a/api/test/src/com/cloud/agent/api/test/BackupSnapshotAnswerTest.java +++ b/api/test/org/apache/cloudstack/api/agent/test/BackupSnapshotAnswerTest.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package src.com.cloud.agent.api.test; +package org.apache.cloudstack.api.agent.test; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; diff --git a/api/test/src/com/cloud/agent/api/test/BackupSnapshotCommandTest.java b/api/test/org/apache/cloudstack/api/agent/test/BackupSnapshotCommandTest.java similarity index 99% rename from api/test/src/com/cloud/agent/api/test/BackupSnapshotCommandTest.java rename to api/test/org/apache/cloudstack/api/agent/test/BackupSnapshotCommandTest.java index a6241488943..91573d03c43 100644 --- a/api/test/src/com/cloud/agent/api/test/BackupSnapshotCommandTest.java +++ b/api/test/org/apache/cloudstack/api/agent/test/BackupSnapshotCommandTest.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package src.com.cloud.agent.api.test; +package org.apache.cloudstack.api.agent.test; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; diff --git a/api/test/src/com/cloud/agent/api/test/BumpUpPriorityCommandTest.java b/api/test/org/apache/cloudstack/api/agent/test/BumpUpPriorityCommandTest.java similarity index 98% rename from api/test/src/com/cloud/agent/api/test/BumpUpPriorityCommandTest.java rename to api/test/org/apache/cloudstack/api/agent/test/BumpUpPriorityCommandTest.java index 17afd5dd107..f5f59852ea8 100644 --- a/api/test/src/com/cloud/agent/api/test/BumpUpPriorityCommandTest.java +++ b/api/test/org/apache/cloudstack/api/agent/test/BumpUpPriorityCommandTest.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package src.com.cloud.agent.api.test; +package org.apache.cloudstack.api.agent.test; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; diff --git a/api/test/src/com/cloud/agent/api/test/CancelCommandTest.java b/api/test/org/apache/cloudstack/api/agent/test/CancelCommandTest.java similarity index 96% rename from api/test/src/com/cloud/agent/api/test/CancelCommandTest.java rename to api/test/org/apache/cloudstack/api/agent/test/CancelCommandTest.java index 0f724c430e5..19827fd5753 100644 --- a/api/test/src/com/cloud/agent/api/test/CancelCommandTest.java +++ b/api/test/org/apache/cloudstack/api/agent/test/CancelCommandTest.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package src.com.cloud.agent.api.test; +package org.apache.cloudstack.api.agent.test; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; diff --git a/api/test/src/com/cloud/agent/api/test/ChangeAgentAnswerTest.java b/api/test/org/apache/cloudstack/api/agent/test/ChangeAgentAnswerTest.java similarity index 96% rename from api/test/src/com/cloud/agent/api/test/ChangeAgentAnswerTest.java rename to api/test/org/apache/cloudstack/api/agent/test/ChangeAgentAnswerTest.java index 46ad821cd3a..8933e6e9b27 100644 --- a/api/test/src/com/cloud/agent/api/test/ChangeAgentAnswerTest.java +++ b/api/test/org/apache/cloudstack/api/agent/test/ChangeAgentAnswerTest.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package src.com.cloud.agent.api.test; +package org.apache.cloudstack.api.agent.test; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; diff --git a/api/test/src/com/cloud/agent/api/test/ChangeAgentCommandTest.java b/api/test/org/apache/cloudstack/api/agent/test/ChangeAgentCommandTest.java similarity index 97% rename from api/test/src/com/cloud/agent/api/test/ChangeAgentCommandTest.java rename to api/test/org/apache/cloudstack/api/agent/test/ChangeAgentCommandTest.java index c084fefc68a..d0c2bf8b47b 100644 --- a/api/test/src/com/cloud/agent/api/test/ChangeAgentCommandTest.java +++ b/api/test/org/apache/cloudstack/api/agent/test/ChangeAgentCommandTest.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package src.com.cloud.agent.api.test; +package org.apache.cloudstack.api.agent.test; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; diff --git a/api/test/src/com/cloud/agent/api/test/CheckHealthAnswerTest.java b/api/test/org/apache/cloudstack/api/agent/test/CheckHealthAnswerTest.java similarity index 97% rename from api/test/src/com/cloud/agent/api/test/CheckHealthAnswerTest.java rename to api/test/org/apache/cloudstack/api/agent/test/CheckHealthAnswerTest.java index e07f6f35120..6fa94f9884d 100644 --- a/api/test/src/com/cloud/agent/api/test/CheckHealthAnswerTest.java +++ b/api/test/org/apache/cloudstack/api/agent/test/CheckHealthAnswerTest.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package src.com.cloud.agent.api.test; +package org.apache.cloudstack.api.agent.test; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; diff --git a/api/test/src/com/cloud/agent/api/test/CheckHealthCommandTest.java b/api/test/org/apache/cloudstack/api/agent/test/CheckHealthCommandTest.java similarity index 96% rename from api/test/src/com/cloud/agent/api/test/CheckHealthCommandTest.java rename to api/test/org/apache/cloudstack/api/agent/test/CheckHealthCommandTest.java index 61e985af7a0..1b565a5505b 100644 --- a/api/test/src/com/cloud/agent/api/test/CheckHealthCommandTest.java +++ b/api/test/org/apache/cloudstack/api/agent/test/CheckHealthCommandTest.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package src.com.cloud.agent.api.test; +package org.apache.cloudstack.api.agent.test; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; diff --git a/api/test/src/com/cloud/agent/api/test/CheckNetworkAnswerTest.java b/api/test/org/apache/cloudstack/api/agent/test/CheckNetworkAnswerTest.java similarity index 97% rename from api/test/src/com/cloud/agent/api/test/CheckNetworkAnswerTest.java rename to api/test/org/apache/cloudstack/api/agent/test/CheckNetworkAnswerTest.java index cae921af0e2..1853d3967c9 100644 --- a/api/test/src/com/cloud/agent/api/test/CheckNetworkAnswerTest.java +++ b/api/test/org/apache/cloudstack/api/agent/test/CheckNetworkAnswerTest.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package src.com.cloud.agent.api.test; +package org.apache.cloudstack.api.agent.test; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; diff --git a/api/test/src/com/cloud/agent/api/test/CheckNetworkCommandTest.java b/api/test/org/apache/cloudstack/api/agent/test/CheckNetworkCommandTest.java similarity index 97% rename from api/test/src/com/cloud/agent/api/test/CheckNetworkCommandTest.java rename to api/test/org/apache/cloudstack/api/agent/test/CheckNetworkCommandTest.java index 0fbee4aaec5..0b87b587563 100644 --- a/api/test/src/com/cloud/agent/api/test/CheckNetworkCommandTest.java +++ b/api/test/org/apache/cloudstack/api/agent/test/CheckNetworkCommandTest.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package src.com.cloud.agent.api.test; +package org.apache.cloudstack.api.agent.test; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; diff --git a/api/test/src/com/cloud/agent/api/test/CheckOnHostCommandTest.java b/api/test/org/apache/cloudstack/api/agent/test/CheckOnHostCommandTest.java similarity index 99% rename from api/test/src/com/cloud/agent/api/test/CheckOnHostCommandTest.java rename to api/test/org/apache/cloudstack/api/agent/test/CheckOnHostCommandTest.java index fd948a93f61..1b682761996 100644 --- a/api/test/src/com/cloud/agent/api/test/CheckOnHostCommandTest.java +++ b/api/test/org/apache/cloudstack/api/agent/test/CheckOnHostCommandTest.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package src.com.cloud.agent.api.test; +package org.apache.cloudstack.api.agent.test; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotNull; diff --git a/api/test/src/com/cloud/agent/api/test/SnapshotCommandTest.java b/api/test/org/apache/cloudstack/api/agent/test/SnapshotCommandTest.java similarity index 99% rename from api/test/src/com/cloud/agent/api/test/SnapshotCommandTest.java rename to api/test/org/apache/cloudstack/api/agent/test/SnapshotCommandTest.java index 98cdee2a8bf..a7359134f0a 100644 --- a/api/test/src/com/cloud/agent/api/test/SnapshotCommandTest.java +++ b/api/test/org/apache/cloudstack/api/agent/test/SnapshotCommandTest.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package src.com.cloud.agent.api.test; +package org.apache.cloudstack.api.agent.test; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; diff --git a/api/test/src/com/cloud/api/commands/test/ActivateProjectCmdTest.java b/api/test/org/apache/cloudstack/api/command/test/ActivateProjectCmdTest.java similarity index 98% rename from api/test/src/com/cloud/api/commands/test/ActivateProjectCmdTest.java rename to api/test/org/apache/cloudstack/api/command/test/ActivateProjectCmdTest.java index 073c1aaba57..49b5b0e1a16 100644 --- a/api/test/src/com/cloud/api/commands/test/ActivateProjectCmdTest.java +++ b/api/test/org/apache/cloudstack/api/command/test/ActivateProjectCmdTest.java @@ -14,7 +14,7 @@ // 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; +package org.apache.cloudstack.api.command.test; import junit.framework.Assert; import junit.framework.TestCase; diff --git a/api/test/src/com/cloud/api/commands/test/AddAccountToProjectCmdTest.java b/api/test/org/apache/cloudstack/api/command/test/AddAccountToProjectCmdTest.java similarity index 99% rename from api/test/src/com/cloud/api/commands/test/AddAccountToProjectCmdTest.java rename to api/test/org/apache/cloudstack/api/command/test/AddAccountToProjectCmdTest.java index 736656f4102..4d2000d4249 100644 --- a/api/test/src/com/cloud/api/commands/test/AddAccountToProjectCmdTest.java +++ b/api/test/org/apache/cloudstack/api/command/test/AddAccountToProjectCmdTest.java @@ -14,7 +14,7 @@ // 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; +package org.apache.cloudstack.api.command.test; import junit.framework.Assert; import junit.framework.TestCase; diff --git a/api/test/src/com/cloud/api/commands/test/AddClusterCmdTest.java b/api/test/org/apache/cloudstack/api/command/test/AddClusterCmdTest.java similarity index 98% rename from api/test/src/com/cloud/api/commands/test/AddClusterCmdTest.java rename to api/test/org/apache/cloudstack/api/command/test/AddClusterCmdTest.java index 3b546e3cd29..60fea9e54d2 100644 --- a/api/test/src/com/cloud/api/commands/test/AddClusterCmdTest.java +++ b/api/test/org/apache/cloudstack/api/command/test/AddClusterCmdTest.java @@ -14,7 +14,7 @@ // 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; +package org.apache.cloudstack.api.command.test; import junit.framework.Assert; import junit.framework.TestCase; diff --git a/api/test/src/com/cloud/api/commands/test/AddHostCmdTest.java b/api/test/org/apache/cloudstack/api/command/test/AddHostCmdTest.java similarity index 99% rename from api/test/src/com/cloud/api/commands/test/AddHostCmdTest.java rename to api/test/org/apache/cloudstack/api/command/test/AddHostCmdTest.java index e4bfcdd2f26..4c1b5ee0e0a 100644 --- a/api/test/src/com/cloud/api/commands/test/AddHostCmdTest.java +++ b/api/test/org/apache/cloudstack/api/command/test/AddHostCmdTest.java @@ -14,7 +14,7 @@ // 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; +package org.apache.cloudstack.api.command.test; import junit.framework.Assert; import junit.framework.TestCase; diff --git a/api/test/src/com/cloud/api/commands/test/AddNetworkServiceProviderCmdTest.java b/api/test/org/apache/cloudstack/api/command/test/AddNetworkServiceProviderCmdTest.java similarity index 98% rename from api/test/src/com/cloud/api/commands/test/AddNetworkServiceProviderCmdTest.java rename to api/test/org/apache/cloudstack/api/command/test/AddNetworkServiceProviderCmdTest.java index 1a5ee4346d5..0b5798fbe23 100644 --- a/api/test/src/com/cloud/api/commands/test/AddNetworkServiceProviderCmdTest.java +++ b/api/test/org/apache/cloudstack/api/command/test/AddNetworkServiceProviderCmdTest.java @@ -14,7 +14,7 @@ // 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; +package org.apache.cloudstack.api.command.test; import java.util.ArrayList; import java.util.List; diff --git a/api/test/src/com/cloud/api/commands/test/AddSecondaryStorageCmdTest.java b/api/test/org/apache/cloudstack/api/command/test/AddSecondaryStorageCmdTest.java similarity index 98% rename from api/test/src/com/cloud/api/commands/test/AddSecondaryStorageCmdTest.java rename to api/test/org/apache/cloudstack/api/command/test/AddSecondaryStorageCmdTest.java index 3a613157307..1cdd76fbfe2 100644 --- a/api/test/src/com/cloud/api/commands/test/AddSecondaryStorageCmdTest.java +++ b/api/test/org/apache/cloudstack/api/command/test/AddSecondaryStorageCmdTest.java @@ -14,7 +14,7 @@ // 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; +package org.apache.cloudstack.api.command.test; import junit.framework.Assert; import junit.framework.TestCase; diff --git a/api/test/src/com/cloud/api/commands/test/AddSwiftCmdTest.java b/api/test/org/apache/cloudstack/api/command/test/AddSwiftCmdTest.java similarity index 98% rename from api/test/src/com/cloud/api/commands/test/AddSwiftCmdTest.java rename to api/test/org/apache/cloudstack/api/command/test/AddSwiftCmdTest.java index b5dfa886dbd..34d0baff5ab 100644 --- a/api/test/src/com/cloud/api/commands/test/AddSwiftCmdTest.java +++ b/api/test/org/apache/cloudstack/api/command/test/AddSwiftCmdTest.java @@ -14,7 +14,7 @@ // 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; +package org.apache.cloudstack.api.command.test; import junit.framework.Assert; import junit.framework.TestCase; diff --git a/api/test/src/com/cloud/api/commands/test/AddVpnUserCmdTest.java b/api/test/org/apache/cloudstack/api/command/test/AddVpnUserCmdTest.java similarity index 98% rename from api/test/src/com/cloud/api/commands/test/AddVpnUserCmdTest.java rename to api/test/org/apache/cloudstack/api/command/test/AddVpnUserCmdTest.java index 11ef43e9256..78e9d92fc9b 100644 --- a/api/test/src/com/cloud/api/commands/test/AddVpnUserCmdTest.java +++ b/api/test/org/apache/cloudstack/api/command/test/AddVpnUserCmdTest.java @@ -14,7 +14,7 @@ // 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; +package org.apache.cloudstack.api.command.test; import junit.framework.Assert; import junit.framework.TestCase; From 63481ecb34d60746fadd65d7edc0dc49844cf0e2 Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Sat, 5 Jan 2013 16:27:36 -0800 Subject: [PATCH 274/421] CLOUDSTACK-212: Move api response classes to cloud-api under org.apache.cloudstack Signed-off-by: Rohit Yadav --- .../api/response/ExternalFirewallResponse.java | 2 +- .../api/response/ExternalLoadBalancerResponse.java | 2 +- .../cloudstack}/api/response/TrafficMonitorResponse.java | 2 +- .../cloudstack}/api/response/UsageRecordResponse.java | 2 +- .../cloudstack}/api/response/UsageTypeResponse.java | 2 +- .../cloud/api/commands/AddExternalLoadBalancerCmd.java | 2 +- .../cloud/api/commands/ListExternalLoadBalancersCmd.java | 2 +- .../network/element/F5ExternalLoadBalancerElement.java | 2 +- .../element/F5ExternalLoadBalancerElementService.java | 2 +- .../com/cloud/api/commands/AddExternalFirewallCmd.java | 2 +- .../com/cloud/api/commands/ListExternalFirewallsCmd.java | 2 +- .../element/JuniperSRXExternalFirewallElement.java | 2 +- .../network/element/JuniperSRXFirewallElementService.java | 2 +- .../src/com/cloud/api/commands/AddTrafficMonitorCmd.java | 8 ++++---- server/src/com/cloud/api/commands/GetUsageRecordsCmd.java | 2 +- .../com/cloud/api/commands/ListTrafficMonitorsCmd.java | 4 ++-- server/src/com/cloud/api/commands/ListUsageTypesCmd.java | 2 +- .../cloud/network/ExternalFirewallDeviceManagerImpl.java | 7 +------ .../network/ExternalLoadBalancerDeviceManagerImpl.java | 8 +------- server/src/com/cloud/network/NetworkUsageManager.java | 2 +- server/src/com/cloud/network/NetworkUsageManagerImpl.java | 2 +- server/src/com/cloud/server/ManagementServerExt.java | 2 +- server/src/com/cloud/server/ManagementServerExtImpl.java | 2 +- server/src/com/cloud/usage/UsageTypes.java | 2 +- 24 files changed, 28 insertions(+), 39 deletions(-) rename {server/src/com/cloud/server => api/src/org/apache/cloudstack}/api/response/ExternalFirewallResponse.java (99%) rename {server/src/com/cloud/server => api/src/org/apache/cloudstack}/api/response/ExternalLoadBalancerResponse.java (98%) rename {server/src/com/cloud/server => api/src/org/apache/cloudstack}/api/response/TrafficMonitorResponse.java (98%) rename {server/src/com/cloud/server => api/src/org/apache/cloudstack}/api/response/UsageRecordResponse.java (99%) rename {server/src/com/cloud/server => api/src/org/apache/cloudstack}/api/response/UsageTypeResponse.java (97%) diff --git a/server/src/com/cloud/server/api/response/ExternalFirewallResponse.java b/api/src/org/apache/cloudstack/api/response/ExternalFirewallResponse.java similarity index 99% rename from server/src/com/cloud/server/api/response/ExternalFirewallResponse.java rename to api/src/org/apache/cloudstack/api/response/ExternalFirewallResponse.java index c6c7c4b7172..30fe86f88da 100644 --- a/server/src/com/cloud/server/api/response/ExternalFirewallResponse.java +++ b/api/src/org/apache/cloudstack/api/response/ExternalFirewallResponse.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.server.api.response; +package org.apache.cloudstack.api.response; import org.apache.cloudstack.api.ApiConstants; import com.cloud.serializer.Param; diff --git a/server/src/com/cloud/server/api/response/ExternalLoadBalancerResponse.java b/api/src/org/apache/cloudstack/api/response/ExternalLoadBalancerResponse.java similarity index 98% rename from server/src/com/cloud/server/api/response/ExternalLoadBalancerResponse.java rename to api/src/org/apache/cloudstack/api/response/ExternalLoadBalancerResponse.java index ccda410eeb8..6f80c1084f8 100644 --- a/server/src/com/cloud/server/api/response/ExternalLoadBalancerResponse.java +++ b/api/src/org/apache/cloudstack/api/response/ExternalLoadBalancerResponse.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.server.api.response; +package org.apache.cloudstack.api.response; import org.apache.cloudstack.api.ApiConstants; import com.cloud.serializer.Param; diff --git a/server/src/com/cloud/server/api/response/TrafficMonitorResponse.java b/api/src/org/apache/cloudstack/api/response/TrafficMonitorResponse.java similarity index 98% rename from server/src/com/cloud/server/api/response/TrafficMonitorResponse.java rename to api/src/org/apache/cloudstack/api/response/TrafficMonitorResponse.java index 95ab4453a26..366e5d631b0 100644 --- a/server/src/com/cloud/server/api/response/TrafficMonitorResponse.java +++ b/api/src/org/apache/cloudstack/api/response/TrafficMonitorResponse.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.server.api.response; +package org.apache.cloudstack.api.response; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseResponse; diff --git a/server/src/com/cloud/server/api/response/UsageRecordResponse.java b/api/src/org/apache/cloudstack/api/response/UsageRecordResponse.java similarity index 99% rename from server/src/com/cloud/server/api/response/UsageRecordResponse.java rename to api/src/org/apache/cloudstack/api/response/UsageRecordResponse.java index 29c81a79dc6..9679575c046 100644 --- a/server/src/com/cloud/server/api/response/UsageRecordResponse.java +++ b/api/src/org/apache/cloudstack/api/response/UsageRecordResponse.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.server.api.response; +package org.apache.cloudstack.api.response; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseResponse; diff --git a/server/src/com/cloud/server/api/response/UsageTypeResponse.java b/api/src/org/apache/cloudstack/api/response/UsageTypeResponse.java similarity index 97% rename from server/src/com/cloud/server/api/response/UsageTypeResponse.java rename to api/src/org/apache/cloudstack/api/response/UsageTypeResponse.java index ea834fc3b57..b21d26f3774 100644 --- a/server/src/com/cloud/server/api/response/UsageTypeResponse.java +++ b/api/src/org/apache/cloudstack/api/response/UsageTypeResponse.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.server.api.response; +package org.apache.cloudstack.api.response; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseResponse; diff --git a/plugins/network-elements/f5/src/com/cloud/api/commands/AddExternalLoadBalancerCmd.java b/plugins/network-elements/f5/src/com/cloud/api/commands/AddExternalLoadBalancerCmd.java index 5b931e1b4e7..69a21fc184c 100644 --- a/plugins/network-elements/f5/src/com/cloud/api/commands/AddExternalLoadBalancerCmd.java +++ b/plugins/network-elements/f5/src/com/cloud/api/commands/AddExternalLoadBalancerCmd.java @@ -29,7 +29,7 @@ import org.apache.cloudstack.api.ServerApiException; import com.cloud.exception.InvalidParameterValueException; import com.cloud.host.Host; import com.cloud.network.element.F5ExternalLoadBalancerElementService; -import com.cloud.server.api.response.ExternalLoadBalancerResponse; +import org.apache.cloudstack.api.response.ExternalLoadBalancerResponse; import com.cloud.user.Account; import com.cloud.utils.exception.CloudRuntimeException; diff --git a/plugins/network-elements/f5/src/com/cloud/api/commands/ListExternalLoadBalancersCmd.java b/plugins/network-elements/f5/src/com/cloud/api/commands/ListExternalLoadBalancersCmd.java index 029c502f079..3ee8d4865a5 100644 --- a/plugins/network-elements/f5/src/com/cloud/api/commands/ListExternalLoadBalancersCmd.java +++ b/plugins/network-elements/f5/src/com/cloud/api/commands/ListExternalLoadBalancersCmd.java @@ -28,7 +28,7 @@ import org.apache.cloudstack.api.response.HostResponse; import org.apache.cloudstack.api.response.ListResponse; import com.cloud.host.Host; import com.cloud.network.element.F5ExternalLoadBalancerElementService; -import com.cloud.server.api.response.ExternalLoadBalancerResponse; +import org.apache.cloudstack.api.response.ExternalLoadBalancerResponse; @APICommand(name = "listExternalLoadBalancers", description="Lists F5 external load balancer appliances added in a zone.", responseObject = HostResponse.class) @Deprecated // API supported for backward compatibility. diff --git a/plugins/network-elements/f5/src/com/cloud/network/element/F5ExternalLoadBalancerElement.java b/plugins/network-elements/f5/src/com/cloud/network/element/F5ExternalLoadBalancerElement.java index ef6d197f63e..735814c0fbc 100644 --- a/plugins/network-elements/f5/src/com/cloud/network/element/F5ExternalLoadBalancerElement.java +++ b/plugins/network-elements/f5/src/com/cloud/network/element/F5ExternalLoadBalancerElement.java @@ -80,7 +80,7 @@ import com.cloud.network.rules.LbStickinessMethod; import com.cloud.network.rules.LbStickinessMethod.StickinessMethodType; import com.cloud.offering.NetworkOffering; import com.cloud.resource.ServerResource; -import com.cloud.server.api.response.ExternalLoadBalancerResponse; +import org.apache.cloudstack.api.response.ExternalLoadBalancerResponse; import com.cloud.utils.NumbersUtil; import com.cloud.utils.component.Inject; import com.cloud.utils.exception.CloudRuntimeException; diff --git a/plugins/network-elements/f5/src/com/cloud/network/element/F5ExternalLoadBalancerElementService.java b/plugins/network-elements/f5/src/com/cloud/network/element/F5ExternalLoadBalancerElementService.java index 24c76753b47..951bc3cc3b1 100644 --- a/plugins/network-elements/f5/src/com/cloud/network/element/F5ExternalLoadBalancerElementService.java +++ b/plugins/network-elements/f5/src/com/cloud/network/element/F5ExternalLoadBalancerElementService.java @@ -30,7 +30,7 @@ import com.cloud.api.response.F5LoadBalancerResponse; import com.cloud.host.Host; import com.cloud.network.ExternalLoadBalancerDeviceVO; import com.cloud.network.Network; -import com.cloud.server.api.response.ExternalLoadBalancerResponse; +import org.apache.cloudstack.api.response.ExternalLoadBalancerResponse; import com.cloud.utils.component.PluggableService; @SuppressWarnings("deprecation") diff --git a/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/AddExternalFirewallCmd.java b/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/AddExternalFirewallCmd.java index c2f8f03354a..cda27fb8960 100644 --- a/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/AddExternalFirewallCmd.java +++ b/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/AddExternalFirewallCmd.java @@ -28,7 +28,7 @@ import org.apache.cloudstack.api.ServerApiException; import com.cloud.exception.InvalidParameterValueException; import com.cloud.host.Host; import com.cloud.network.element.JuniperSRXFirewallElementService; -import com.cloud.server.api.response.ExternalFirewallResponse; +import org.apache.cloudstack.api.response.ExternalFirewallResponse; import com.cloud.user.Account; import com.cloud.utils.exception.CloudRuntimeException; diff --git a/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/ListExternalFirewallsCmd.java b/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/ListExternalFirewallsCmd.java index f2c33bcb88e..65aa92ba818 100644 --- a/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/ListExternalFirewallsCmd.java +++ b/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/ListExternalFirewallsCmd.java @@ -31,7 +31,7 @@ import org.apache.cloudstack.api.PlugService; import org.apache.cloudstack.api.response.ListResponse; import com.cloud.host.Host; import com.cloud.network.element.JuniperSRXFirewallElementService; -import com.cloud.server.api.response.ExternalFirewallResponse; +import org.apache.cloudstack.api.response.ExternalFirewallResponse; @APICommand(name = "listExternalFirewalls", description="List external firewall appliances.", responseObject = ExternalFirewallResponse.class) public class ListExternalFirewallsCmd extends BaseListCmd { diff --git a/plugins/network-elements/juniper-srx/src/com/cloud/network/element/JuniperSRXExternalFirewallElement.java b/plugins/network-elements/juniper-srx/src/com/cloud/network/element/JuniperSRXExternalFirewallElement.java index 9853f7ec69e..0479648c099 100644 --- a/plugins/network-elements/juniper-srx/src/com/cloud/network/element/JuniperSRXExternalFirewallElement.java +++ b/plugins/network-elements/juniper-srx/src/com/cloud/network/element/JuniperSRXExternalFirewallElement.java @@ -82,7 +82,7 @@ import com.cloud.network.rules.StaticNat; import com.cloud.offering.NetworkOffering; import com.cloud.offerings.dao.NetworkOfferingDao; import com.cloud.resource.ServerResource; -import com.cloud.server.api.response.ExternalFirewallResponse; +import org.apache.cloudstack.api.response.ExternalFirewallResponse; import com.cloud.utils.NumbersUtil; import com.cloud.utils.component.Inject; import com.cloud.utils.exception.CloudRuntimeException; diff --git a/plugins/network-elements/juniper-srx/src/com/cloud/network/element/JuniperSRXFirewallElementService.java b/plugins/network-elements/juniper-srx/src/com/cloud/network/element/JuniperSRXFirewallElementService.java index 6d07d303128..d5f53843ca1 100644 --- a/plugins/network-elements/juniper-srx/src/com/cloud/network/element/JuniperSRXFirewallElementService.java +++ b/plugins/network-elements/juniper-srx/src/com/cloud/network/element/JuniperSRXFirewallElementService.java @@ -30,7 +30,7 @@ import com.cloud.api.response.SrxFirewallResponse; import com.cloud.host.Host; import com.cloud.network.ExternalFirewallDeviceVO; import com.cloud.network.Network; -import com.cloud.server.api.response.ExternalFirewallResponse; +import org.apache.cloudstack.api.response.ExternalFirewallResponse; import com.cloud.utils.component.PluggableService; public interface JuniperSRXFirewallElementService extends PluggableService { diff --git a/server/src/com/cloud/api/commands/AddTrafficMonitorCmd.java b/server/src/com/cloud/api/commands/AddTrafficMonitorCmd.java index f20e5b98432..98e893ef47d 100644 --- a/server/src/com/cloud/api/commands/AddTrafficMonitorCmd.java +++ b/server/src/com/cloud/api/commands/AddTrafficMonitorCmd.java @@ -25,8 +25,8 @@ import com.cloud.exception.InvalidParameterValueException; import com.cloud.host.Host; import com.cloud.network.NetworkUsageManager; import com.cloud.server.ManagementService; -import com.cloud.server.api.response.ExternalFirewallResponse; -import com.cloud.server.api.response.TrafficMonitorResponse; +import org.apache.cloudstack.api.response.ExternalFirewallResponse; +import org.apache.cloudstack.api.response.TrafficMonitorResponse; import com.cloud.user.Account; import com.cloud.utils.component.ComponentLocator; import com.cloud.utils.exception.CloudRuntimeException; @@ -92,8 +92,8 @@ public class AddTrafficMonitorCmd extends BaseCmd { try { ComponentLocator locator = ComponentLocator.getLocator(ManagementService.Name); NetworkUsageManager networkUsageMgr = locator.getManager(NetworkUsageManager.class); - Host trafficMoinitor = networkUsageMgr.addTrafficMonitor(this); - TrafficMonitorResponse response = networkUsageMgr.getApiResponse(trafficMoinitor); + Host trafficMonitor = networkUsageMgr.addTrafficMonitor(this); + TrafficMonitorResponse response = networkUsageMgr.getApiResponse(trafficMonitor); response.setObjectName("trafficmonitor"); response.setResponseName(getCommandName()); this.setResponseObject(response); diff --git a/server/src/com/cloud/api/commands/GetUsageRecordsCmd.java b/server/src/com/cloud/api/commands/GetUsageRecordsCmd.java index 434d81c4808..60afbd0a8f4 100644 --- a/server/src/com/cloud/api/commands/GetUsageRecordsCmd.java +++ b/server/src/com/cloud/api/commands/GetUsageRecordsCmd.java @@ -39,7 +39,7 @@ import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.response.ListResponse; import com.cloud.projects.Project; import com.cloud.server.ManagementServerExt; -import com.cloud.server.api.response.UsageRecordResponse; +import org.apache.cloudstack.api.response.UsageRecordResponse; import com.cloud.storage.VMTemplateVO; import com.cloud.usage.UsageTypes; import com.cloud.usage.UsageVO; diff --git a/server/src/com/cloud/api/commands/ListTrafficMonitorsCmd.java b/server/src/com/cloud/api/commands/ListTrafficMonitorsCmd.java index aba9ffd83a6..ccbcec95e5e 100644 --- a/server/src/com/cloud/api/commands/ListTrafficMonitorsCmd.java +++ b/server/src/com/cloud/api/commands/ListTrafficMonitorsCmd.java @@ -31,8 +31,8 @@ import org.apache.cloudstack.api.response.ListResponse; import com.cloud.host.Host; import com.cloud.network.NetworkUsageManager; import com.cloud.server.ManagementService; -import com.cloud.server.api.response.ExternalFirewallResponse; -import com.cloud.server.api.response.TrafficMonitorResponse; +import org.apache.cloudstack.api.response.ExternalFirewallResponse; +import org.apache.cloudstack.api.response.TrafficMonitorResponse; import com.cloud.utils.component.ComponentLocator; @APICommand(name = "listTrafficMonitors", description="List traffic monitor Hosts.", responseObject = ExternalFirewallResponse.class) diff --git a/server/src/com/cloud/api/commands/ListUsageTypesCmd.java b/server/src/com/cloud/api/commands/ListUsageTypesCmd.java index 97526fb4067..dfa5dc1bb20 100644 --- a/server/src/com/cloud/api/commands/ListUsageTypesCmd.java +++ b/server/src/com/cloud/api/commands/ListUsageTypesCmd.java @@ -24,7 +24,7 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.response.ListResponse; import com.cloud.server.ManagementServerExt; -import com.cloud.server.api.response.UsageTypeResponse; +import org.apache.cloudstack.api.response.UsageTypeResponse; import com.cloud.user.Account; @APICommand(name = "listUsageTypes", description = "List Usage Types", responseObject = UsageTypeResponse.class) diff --git a/server/src/com/cloud/network/ExternalFirewallDeviceManagerImpl.java b/server/src/com/cloud/network/ExternalFirewallDeviceManagerImpl.java index 1ad5fdc7565..42cdc745605 100644 --- a/server/src/com/cloud/network/ExternalFirewallDeviceManagerImpl.java +++ b/server/src/com/cloud/network/ExternalFirewallDeviceManagerImpl.java @@ -50,7 +50,6 @@ import com.cloud.dc.Vlan; import com.cloud.dc.VlanVO; import com.cloud.dc.dao.DataCenterDao; import com.cloud.dc.dao.VlanDao; -import com.cloud.exception.AgentUnavailableException; import com.cloud.exception.InsufficientCapacityException; import com.cloud.exception.InsufficientNetworkCapacityException; import com.cloud.exception.InvalidParameterValueException; @@ -75,10 +74,8 @@ import com.cloud.network.dao.PhysicalNetworkServiceProviderDao; import com.cloud.network.dao.PhysicalNetworkServiceProviderVO; import com.cloud.network.dao.VpnUserDao; import com.cloud.network.rules.FirewallRule; -import com.cloud.network.rules.FirewallRule.Purpose; import com.cloud.network.rules.PortForwardingRule; import com.cloud.network.rules.StaticNat; -import com.cloud.network.rules.StaticNatRule; import com.cloud.network.rules.dao.PortForwardingRulesDao; import com.cloud.offering.NetworkOffering; import com.cloud.offerings.dao.NetworkOfferingDao; @@ -87,8 +84,7 @@ import com.cloud.resource.ResourceState; import com.cloud.resource.ResourceStateAdapter; import com.cloud.resource.ServerResource; import com.cloud.resource.UnableDeleteHostException; -import com.cloud.resource.ResourceStateAdapter.DeleteHostAnswer; -import com.cloud.server.api.response.ExternalFirewallResponse; +import org.apache.cloudstack.api.response.ExternalFirewallResponse; import com.cloud.user.Account; import com.cloud.user.AccountManager; import com.cloud.user.dao.AccountDao; @@ -100,7 +96,6 @@ import com.cloud.utils.db.DB; import com.cloud.utils.db.GlobalLock; import com.cloud.utils.db.Transaction; import com.cloud.utils.exception.CloudRuntimeException; -import com.cloud.utils.net.Ip; import com.cloud.utils.net.NetUtils; import com.cloud.utils.net.UrlUtil; import com.cloud.vm.Nic.ReservationStrategy; diff --git a/server/src/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java b/server/src/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java index d9c4fd1edb6..4f9404e5e78 100644 --- a/server/src/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java +++ b/server/src/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java @@ -36,10 +36,8 @@ import com.cloud.agent.api.routing.DestroyLoadBalancerApplianceCommand; import com.cloud.agent.api.routing.IpAssocCommand; import com.cloud.agent.api.routing.LoadBalancerConfigCommand; import com.cloud.agent.api.routing.NetworkElementCommand; -import com.cloud.agent.api.routing.SetStaticNatRulesCommand; import com.cloud.agent.api.to.IpAddressTO; import com.cloud.agent.api.to.LoadBalancerTO; -import com.cloud.agent.api.to.StaticNatRuleTO; import org.apache.cloudstack.api.ApiConstants; import com.cloud.configuration.Config; import com.cloud.configuration.dao.ConfigurationDao; @@ -48,7 +46,6 @@ import com.cloud.dc.DataCenterIpAddressVO; import com.cloud.dc.DataCenterVO; import com.cloud.dc.Pod; import com.cloud.dc.Vlan.VlanType; -import com.cloud.dc.VlanVO; import com.cloud.dc.dao.DataCenterDao; import com.cloud.dc.dao.HostPodDao; import com.cloud.dc.dao.VlanDao; @@ -89,11 +86,8 @@ import com.cloud.network.resource.CreateLoadBalancerApplianceAnswer; import com.cloud.network.resource.DestroyLoadBalancerApplianceAnswer; import com.cloud.network.rules.FirewallRule; import com.cloud.network.rules.FirewallRule.Purpose; -import com.cloud.network.rules.FirewallRuleVO; import com.cloud.network.rules.StaticNat; import com.cloud.network.rules.StaticNatImpl; -import com.cloud.network.rules.StaticNatRule; -import com.cloud.network.rules.StaticNatRuleImpl; import com.cloud.network.rules.dao.PortForwardingRulesDao; import com.cloud.offerings.NetworkOfferingVO; import com.cloud.offerings.dao.NetworkOfferingDao; @@ -102,7 +96,7 @@ import com.cloud.resource.ResourceState; import com.cloud.resource.ResourceStateAdapter; import com.cloud.resource.ServerResource; import com.cloud.resource.UnableDeleteHostException; -import com.cloud.server.api.response.ExternalLoadBalancerResponse; +import org.apache.cloudstack.api.response.ExternalLoadBalancerResponse; import com.cloud.user.Account; import com.cloud.user.AccountManager; import com.cloud.user.dao.AccountDao; diff --git a/server/src/com/cloud/network/NetworkUsageManager.java b/server/src/com/cloud/network/NetworkUsageManager.java index 10264b8ba42..3d4577b8199 100644 --- a/server/src/com/cloud/network/NetworkUsageManager.java +++ b/server/src/com/cloud/network/NetworkUsageManager.java @@ -23,7 +23,7 @@ import com.cloud.api.commands.DeleteTrafficMonitorCmd; import com.cloud.api.commands.ListTrafficMonitorsCmd; import com.cloud.host.Host; import com.cloud.host.HostVO; -import com.cloud.server.api.response.TrafficMonitorResponse; +import org.apache.cloudstack.api.response.TrafficMonitorResponse; import com.cloud.utils.component.Manager; public interface NetworkUsageManager extends Manager { diff --git a/server/src/com/cloud/network/NetworkUsageManagerImpl.java b/server/src/com/cloud/network/NetworkUsageManagerImpl.java index b30f1858922..2485a8c966d 100755 --- a/server/src/com/cloud/network/NetworkUsageManagerImpl.java +++ b/server/src/com/cloud/network/NetworkUsageManagerImpl.java @@ -67,7 +67,7 @@ import com.cloud.resource.ResourceManager; import com.cloud.resource.ResourceStateAdapter; import com.cloud.resource.ServerResource; import com.cloud.resource.UnableDeleteHostException; -import com.cloud.server.api.response.TrafficMonitorResponse; +import org.apache.cloudstack.api.response.TrafficMonitorResponse; import com.cloud.usage.UsageIPAddressVO; import com.cloud.user.AccountManager; import com.cloud.user.AccountVO; diff --git a/server/src/com/cloud/server/ManagementServerExt.java b/server/src/com/cloud/server/ManagementServerExt.java index 0804e4fe05f..4e506a3bc4a 100644 --- a/server/src/com/cloud/server/ManagementServerExt.java +++ b/server/src/com/cloud/server/ManagementServerExt.java @@ -21,7 +21,7 @@ import java.util.TimeZone; import com.cloud.api.commands.GenerateUsageRecordsCmd; import com.cloud.api.commands.GetUsageRecordsCmd; -import com.cloud.server.api.response.UsageTypeResponse; +import org.apache.cloudstack.api.response.UsageTypeResponse; import com.cloud.usage.UsageVO; public interface ManagementServerExt extends ManagementServer { /** diff --git a/server/src/com/cloud/server/ManagementServerExtImpl.java b/server/src/com/cloud/server/ManagementServerExtImpl.java index fbd517dc5c2..b7320276341 100644 --- a/server/src/com/cloud/server/ManagementServerExtImpl.java +++ b/server/src/com/cloud/server/ManagementServerExtImpl.java @@ -29,7 +29,7 @@ import com.cloud.domain.dao.DomainDao; import com.cloud.exception.InvalidParameterValueException; import com.cloud.exception.PermissionDeniedException; import com.cloud.projects.Project; -import com.cloud.server.api.response.UsageTypeResponse; +import org.apache.cloudstack.api.response.UsageTypeResponse; import com.cloud.usage.UsageJobVO; import com.cloud.usage.UsageTypes; import com.cloud.usage.UsageVO; diff --git a/server/src/com/cloud/usage/UsageTypes.java b/server/src/com/cloud/usage/UsageTypes.java index af77c323451..e5a48d5c143 100644 --- a/server/src/com/cloud/usage/UsageTypes.java +++ b/server/src/com/cloud/usage/UsageTypes.java @@ -19,7 +19,7 @@ package com.cloud.usage; import java.util.ArrayList; import java.util.List; -import com.cloud.server.api.response.UsageTypeResponse; +import org.apache.cloudstack.api.response.UsageTypeResponse; public class UsageTypes { public static final int RUNNING_VM = 1; From b00ed17f4bf229f0169ef3d99a696f01cc74748c Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Sat, 5 Jan 2013 16:40:59 -0800 Subject: [PATCH 275/421] server: Cosmetic fix for methodname in ApiDispatcher Signed-off-by: Rohit Yadav --- server/src/com/cloud/api/ApiDispatcher.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/server/src/com/cloud/api/ApiDispatcher.java b/server/src/com/cloud/api/ApiDispatcher.java index 9ae048ece3a..251aab94c4b 100755 --- a/server/src/com/cloud/api/ApiDispatcher.java +++ b/server/src/com/cloud/api/ApiDispatcher.java @@ -619,9 +619,9 @@ public class ApiDispatcher { synchronized (format) { Date date = format.parse(paramObj.toString()); if (field.getName().equals("startDate")) { - date = massageDate(date, 0, 0, 0); + date = messageDate(date, 0, 0, 0); } else if (field.getName().equals("endDate")) { - date = massageDate(date, 23, 59, 59); + date = messageDate(date, 23, 59, 59); } field.set(cmdObj, date); } @@ -717,7 +717,7 @@ public class ApiDispatcher { return matcher.matches(); } - private static Date massageDate(Date date, int hourOfDay, int minute, int second) { + private static Date messageDate(Date date, int hourOfDay, int minute, int second) { Calendar cal = Calendar.getInstance(); cal.setTime(date); cal.set(Calendar.HOUR_OF_DAY, hourOfDay); From 6a112bd64c33ede4fa24c01bde59fe0e9bb3a925 Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Sat, 5 Jan 2013 16:52:53 -0800 Subject: [PATCH 276/421] api: Rename Validator to Validate, cosmetic fixes Signed-off-by: Rohit Yadav --- api/src/com/cloud/acl/APIAccessChecker.java | 2 +- .../cloudstack/api/{Validator.java => Validate.java} | 2 +- server/src/com/cloud/api/ApiDispatcher.java | 11 +++++------ 3 files changed, 7 insertions(+), 8 deletions(-) rename api/src/org/apache/cloudstack/api/{Validator.java => Validate.java} (97%) diff --git a/api/src/com/cloud/acl/APIAccessChecker.java b/api/src/com/cloud/acl/APIAccessChecker.java index caa94f5416a..9066e747517 100644 --- a/api/src/com/cloud/acl/APIAccessChecker.java +++ b/api/src/com/cloud/acl/APIAccessChecker.java @@ -27,6 +27,6 @@ import com.cloud.utils.component.Adapter; * APIAccessChecker checks the ownership and access control to API requests */ public interface APIAccessChecker extends Adapter { - // Interface for checking access to an API for a user + // Interface for checking access to an API for an user boolean canAccessAPI(User user, String apiCommandName) throws PermissionDeniedException; } diff --git a/api/src/org/apache/cloudstack/api/Validator.java b/api/src/org/apache/cloudstack/api/Validate.java similarity index 97% rename from api/src/org/apache/cloudstack/api/Validator.java rename to api/src/org/apache/cloudstack/api/Validate.java index 541e01f8e97..deedda62273 100644 --- a/api/src/org/apache/cloudstack/api/Validator.java +++ b/api/src/org/apache/cloudstack/api/Validate.java @@ -24,7 +24,7 @@ import java.lang.annotation.Target; @Retention(RetentionPolicy.RUNTIME) @Target({ FIELD }) -public @interface Validator { +public @interface Validate { Class[] validators() default Object.class; String description() default ""; } diff --git a/server/src/com/cloud/api/ApiDispatcher.java b/server/src/com/cloud/api/ApiDispatcher.java index 251aab94c4b..ed60ba73529 100755 --- a/server/src/com/cloud/api/ApiDispatcher.java +++ b/server/src/com/cloud/api/ApiDispatcher.java @@ -396,20 +396,19 @@ public class ApiDispatcher { } for (Field field : fields) { - //plug Services + PlugService plugServiceAnnotation = field.getAnnotation(PlugService.class); if(plugServiceAnnotation != null){ plugService(field, cmd); } - //APITODO: change the checking here + Parameter parameterAnnotation = field.getAnnotation(Parameter.class); if ((parameterAnnotation == null) || !parameterAnnotation.expose()) { continue; } - //ACL checkAccess = field.getAnnotation(ACL.class); - - Validator validators = field.getAnnotation(Validator.class); + //TODO: Annotate @Validate on API Cmd classes, FIXME how to process Validate + Validate validateAnnotation = field.getAnnotation(Validate.class); Object paramObj = unpackedParams.get(parameterAnnotation.name()); if (paramObj == null) { if (parameterAnnotation.required()) { @@ -530,7 +529,7 @@ public class ApiDispatcher { } - //check access on the entities. + //check access on the enstities. } private static Long translateUuidToInternalId(String uuid, Parameter annotation) From 21d6cd304b9a32a5b09b7e96547903e8337c11cf Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Sat, 5 Jan 2013 17:00:13 -0800 Subject: [PATCH 277/421] server: Reformat DomainChecker Signed-off-by: Rohit Yadav --- server/src/com/cloud/acl/DomainChecker.java | 317 +++++++++----------- 1 file changed, 148 insertions(+), 169 deletions(-) diff --git a/server/src/com/cloud/acl/DomainChecker.java b/server/src/com/cloud/acl/DomainChecker.java index 5ae296ea6bd..290c7bf0faf 100755 --- a/server/src/com/cloud/acl/DomainChecker.java +++ b/server/src/com/cloud/acl/DomainChecker.java @@ -21,7 +21,6 @@ import javax.ejb.Local; import org.apache.cloudstack.api.BaseCmd; import com.cloud.dc.DataCenter; import com.cloud.domain.Domain; -import com.cloud.domain.DomainVO; import com.cloud.domain.dao.DomainDao; import com.cloud.exception.PermissionDeniedException; import com.cloud.network.Network; @@ -39,27 +38,33 @@ import com.cloud.user.dao.AccountDao; import com.cloud.utils.component.AdapterBase; import com.cloud.utils.component.Inject; -@Local(value=SecurityChecker.class) +@Local(value = SecurityChecker.class) public class DomainChecker extends AdapterBase implements SecurityChecker { - - @Inject DomainDao _domainDao; - @Inject AccountDao _accountDao; - @Inject LaunchPermissionDao _launchPermissionDao; - @Inject ProjectManager _projectMgr; - @Inject ProjectAccountDao _projecAccountDao; - @Inject NetworkManager _networkMgr; - + + @Inject + DomainDao _domainDao; + @Inject + AccountDao _accountDao; + @Inject + LaunchPermissionDao _launchPermissionDao; + @Inject + ProjectManager _projectMgr; + @Inject + ProjectAccountDao _projecAccountDao; + @Inject + NetworkManager _networkMgr; + protected DomainChecker() { super(); } - + @Override public boolean checkAccess(Account caller, Domain domain) throws PermissionDeniedException { if (caller.getState() != Account.State.enabled) { throw new PermissionDeniedException(caller + " is disabled."); } long domainId = domain.getId(); - + if (caller.getType() == Account.ACCOUNT_TYPE_NORMAL) { if (caller.getDomainId() != domainId) { throw new PermissionDeniedException(caller + " does not have permission to operate within domain id=" + domain.getId()); @@ -67,7 +72,7 @@ public class DomainChecker extends AdapterBase implements SecurityChecker { } else if (!_domainDao.isChildDomain(caller.getDomainId(), domainId)) { throw new PermissionDeniedException(caller + " does not have permission to operate within domain id=" + domain.getId()); } - + return true; } @@ -83,15 +88,15 @@ public class DomainChecker extends AdapterBase implements SecurityChecker { @Override public boolean checkAccess(Account caller, ControlledEntity entity, AccessType accessType) throws PermissionDeniedException { if (entity instanceof VirtualMachineTemplate) { - - VirtualMachineTemplate template = (VirtualMachineTemplate)entity; + + VirtualMachineTemplate template = (VirtualMachineTemplate) entity; Account owner = _accountDao.findById(template.getAccountId()); // validate that the template is usable by the account if (!template.isPublicTemplate()) { if (BaseCmd.isRootAdmin(caller.getType()) || (owner.getId() == caller.getId())) { return true; } - + // since the current account is not the owner of the template, check the launch permissions table to see if the // account can launch a VM from this template LaunchPermissionVO permission = _launchPermissionDao.findByTemplateAndAccount(template.getId(), caller.getId()); @@ -106,31 +111,31 @@ public class DomainChecker extends AdapterBase implements SecurityChecker { } } } - + return true; } else if (entity instanceof Network && accessType != null && accessType == AccessType.UseNetwork) { - _networkMgr.checkNetworkPermissions(caller, (Network)entity); + _networkMgr.checkNetworkPermissions(caller, (Network) entity); } else { if (caller.getType() == Account.ACCOUNT_TYPE_NORMAL) { Account account = _accountDao.findById(entity.getAccountId()); - + if (account != null && account.getType() == Account.ACCOUNT_TYPE_PROJECT) { //only project owner can delete/modify the project if (accessType != null && accessType == AccessType.ModifyProject) { if (!_projectMgr.canModifyProjectAccount(caller, account.getId())) { throw new PermissionDeniedException(caller + " does not have permission to operate with resource " + entity); } - } else if (!_projectMgr.canAccessProjectAccount(caller, account.getId())){ + } else if (!_projectMgr.canAccessProjectAccount(caller, account.getId())) { throw new PermissionDeniedException(caller + " does not have permission to operate with resource " + entity); } } else { if (caller.getId() != entity.getAccountId()) { throw new PermissionDeniedException(caller + " does not have permission to operate with resource " + entity); } - } + } } } - + return true; } @@ -140,168 +145,142 @@ public class DomainChecker extends AdapterBase implements SecurityChecker { return checkAccess(account, entity, null); } - @Override - public boolean checkAccess(Account account, DiskOffering dof) throws PermissionDeniedException - { - if(account == null || dof.getDomainId() == null) - {//public offering - return true; - } - else - { - //admin has all permissions - if(account.getType() == Account.ACCOUNT_TYPE_ADMIN) - { - return true; - } - //if account is normal user or domain admin - //check if account's domain is a child of zone's domain (Note: This is made consistent with the list command for disk offering) - else if(account.getType() == Account.ACCOUNT_TYPE_NORMAL || account.getType() == Account.ACCOUNT_TYPE_RESOURCE_DOMAIN_ADMIN || account.getType() == Account.ACCOUNT_TYPE_DOMAIN_ADMIN) - { - if(account.getDomainId() == dof.getDomainId()) - { - return true; //disk offering and account at exact node - } - else - { - DomainVO domainRecord = _domainDao.findById(account.getDomainId()); - if(domainRecord != null) - { - while(true) - { - if(domainRecord.getId() == dof.getDomainId()) - { - //found as a child - return true; - } - if(domainRecord.getParent() != null) { + @Override + public boolean checkAccess(Account account, DiskOffering dof) throws PermissionDeniedException { + if (account == null || dof.getDomainId() == null) {//public offering + return true; + } else { + //admin has all permissions + if (account.getType() == Account.ACCOUNT_TYPE_ADMIN) { + return true; + } + //if account is normal user or domain admin + //check if account's domain is a child of zone's domain (Note: This is made consistent with the list command for disk offering) + else if (account.getType() == Account.ACCOUNT_TYPE_NORMAL || account.getType() == Account.ACCOUNT_TYPE_RESOURCE_DOMAIN_ADMIN || account.getType() == Account.ACCOUNT_TYPE_DOMAIN_ADMIN) { + if (account.getDomainId() == dof.getDomainId()) { + return true; //disk offering and account at exact node + } else { + Domain domainRecord = _domainDao.findById(account.getDomainId()); + if (domainRecord != null) { + while (true) { + if (domainRecord.getId() == dof.getDomainId()) { + //found as a child + return true; + } + if (domainRecord.getParent() != null) { domainRecord = _domainDao.findById(domainRecord.getParent()); } else { break; } - } - } - } - } - } - //not found - return false; - } + } + } + } + } + } + //not found + return false; + } - @Override - public boolean checkAccess(Account account, ServiceOffering so) throws PermissionDeniedException - { - if(account == null || so.getDomainId() == null) - {//public offering - return true; - } - else - { - //admin has all permissions - if(account.getType() == Account.ACCOUNT_TYPE_ADMIN) - { - return true; - } - //if account is normal user or domain admin - //check if account's domain is a child of zone's domain (Note: This is made consistent with the list command for service offering) - else if(account.getType() == Account.ACCOUNT_TYPE_NORMAL || account.getType() == Account.ACCOUNT_TYPE_RESOURCE_DOMAIN_ADMIN || account.getType() == Account.ACCOUNT_TYPE_DOMAIN_ADMIN) - { - if(account.getDomainId() == so.getDomainId()) - { - return true; //service offering and account at exact node - } - else - { - DomainVO domainRecord = _domainDao.findById(account.getDomainId()); - if(domainRecord != null) - { - while(true) - { - if(domainRecord.getId() == so.getDomainId()) - { - //found as a child - return true; - } - if(domainRecord.getParent() != null) { + @Override + public boolean checkAccess(Account account, ServiceOffering so) throws PermissionDeniedException { + if (account == null || so.getDomainId() == null) {//public offering + return true; + } else { + //admin has all permissions + if (account.getType() == Account.ACCOUNT_TYPE_ADMIN) { + return true; + } + //if account is normal user or domain admin + //check if account's domain is a child of zone's domain (Note: This is made consistent with the list command for service offering) + else if (account.getType() == Account.ACCOUNT_TYPE_NORMAL || account.getType() == Account.ACCOUNT_TYPE_RESOURCE_DOMAIN_ADMIN || account.getType() == Account.ACCOUNT_TYPE_DOMAIN_ADMIN) { + if (account.getDomainId() == so.getDomainId()) { + return true; //service offering and account at exact node + } else { + Domain domainRecord = _domainDao.findById(account.getDomainId()); + if (domainRecord != null) { + while (true) { + if (domainRecord.getId() == so.getDomainId()) { + //found as a child + return true; + } + if (domainRecord.getParent() != null) { domainRecord = _domainDao.findById(domainRecord.getParent()); } else { break; } - } - } - } - } - } - //not found - return false; - } - - @Override - public boolean checkAccess(Account account, DataCenter zone) throws PermissionDeniedException { - if(account == null || zone.getDomainId() == null){//public zone - return true; - }else{ - //admin has all permissions - if(account.getType() == Account.ACCOUNT_TYPE_ADMIN){ - return true; - } - //if account is normal user - //check if account's domain is a child of zone's domain - else if(account.getType() == Account.ACCOUNT_TYPE_NORMAL || account.getType() == Account.ACCOUNT_TYPE_PROJECT){ - if(account.getDomainId() == zone.getDomainId()){ - return true; //zone and account at exact node - }else{ - DomainVO domainRecord = _domainDao.findById(account.getDomainId()); - if(domainRecord != null) - { - while(true){ - if(domainRecord.getId() == zone.getDomainId()){ - //found as a child - return true; - } - if(domainRecord.getParent() != null) { + } + } + } + } + } + //not found + return false; + } + + @Override + public boolean checkAccess(Account account, DataCenter zone) throws PermissionDeniedException { + if (account == null || zone.getDomainId() == null) {//public zone + return true; + } else { + //admin has all permissions + if (account.getType() == Account.ACCOUNT_TYPE_ADMIN) { + return true; + } + //if account is normal user + //check if account's domain is a child of zone's domain + else if (account.getType() == Account.ACCOUNT_TYPE_NORMAL || account.getType() == Account.ACCOUNT_TYPE_PROJECT) { + if (account.getDomainId() == zone.getDomainId()) { + return true; //zone and account at exact node + } else { + Domain domainRecord = _domainDao.findById(account.getDomainId()); + if (domainRecord != null) { + while (true) { + if (domainRecord.getId() == zone.getDomainId()) { + //found as a child + return true; + } + if (domainRecord.getParent() != null) { domainRecord = _domainDao.findById(domainRecord.getParent()); } else { break; } - } - } - } - //not found - return false; - } - //if account is domain admin - //check if the account's domain is either child of zone's domain, or if zone's domain is child of account's domain - else if(account.getType() == Account.ACCOUNT_TYPE_DOMAIN_ADMIN){ - if(account.getDomainId() == zone.getDomainId()){ - return true; //zone and account at exact node - }else{ - DomainVO zoneDomainRecord = _domainDao.findById(zone.getDomainId()); - DomainVO accountDomainRecord = _domainDao.findById(account.getDomainId()); - if(accountDomainRecord != null) - { - DomainVO localRecord = accountDomainRecord; - while(true){ - if(localRecord.getId() == zone.getDomainId()){ - //found as a child - return true; - } - if(localRecord.getParent() != null) { + } + } + } + //not found + return false; + } + //if account is domain admin + //check if the account's domain is either child of zone's domain, or if zone's domain is child of account's domain + else if (account.getType() == Account.ACCOUNT_TYPE_DOMAIN_ADMIN) { + if (account.getDomainId() == zone.getDomainId()) { + return true; //zone and account at exact node + } else { + Domain zoneDomainRecord = _domainDao.findById(zone.getDomainId()); + Domain accountDomainRecord = _domainDao.findById(account.getDomainId()); + if (accountDomainRecord != null) { + Domain localRecord = accountDomainRecord; + while (true) { + if (localRecord.getId() == zone.getDomainId()) { + //found as a child + return true; + } + if (localRecord.getParent() != null) { localRecord = _domainDao.findById(localRecord.getParent()); } else { break; } - } - } - //didn't find in upper tree - if(zoneDomainRecord.getPath().contains(accountDomainRecord.getPath())){ - return true; - } - } - //not found - return false; - } - } - return false; - } + } + } + //didn't find in upper tree + if (zoneDomainRecord.getPath().contains(accountDomainRecord.getPath())) { + return true; + } + } + //not found + return false; + } + } + return false; + } } From aa9701a10c2ed1aad6edf552e93d6fa792a135f9 Mon Sep 17 00:00:00 2001 From: Sheng Yang Date: Thu, 29 Nov 2012 16:57:11 -0800 Subject: [PATCH 278/421] CLOUDSTACK-799: Redundant router: Speed up RvR status update The basic idea behind this is, deploy a fix sized threadpool for updating RvR status, then using producer/consumer model. There is a global configuration router.check.poolsize(10 by default) to control the pool size. Using pool size 100 for 1000 RvR is tested with simulator and works well. Also we can adjust the global configuration option router.check.interval to e.g. 60s from default 30s to mitigate the issue. --- .../src/com/cloud/configuration/Config.java | 1 + .../src/com/cloud/network/dao/NetworkDao.java | 1 + .../com/cloud/network/dao/NetworkDaoImpl.java | 9 ++ .../VirtualNetworkApplianceManagerImpl.java | 94 +++++++++++++++---- .../com/cloud/vpc/dao/MockNetworkDaoImpl.java | 6 ++ setup/db/db/schema-40to410.sql | 2 + 6 files changed, 97 insertions(+), 16 deletions(-) diff --git a/server/src/com/cloud/configuration/Config.java b/server/src/com/cloud/configuration/Config.java index ea32025ba32..92313ea3b79 100755 --- a/server/src/com/cloud/configuration/Config.java +++ b/server/src/com/cloud/configuration/Config.java @@ -167,6 +167,7 @@ public enum Config { RouterStatsInterval("Advanced", NetworkManager.class, Integer.class, "router.stats.interval", "300", "Interval (in seconds) to report router statistics.", null), ExternalNetworkStatsInterval("Advanced", NetworkManager.class, Integer.class, "external.network.stats.interval", "300", "Interval (in seconds) to report external network statistics.", null), RouterCheckInterval("Advanced", NetworkManager.class, Integer.class, "router.check.interval", "30", "Interval (in seconds) to report redundant router status.", null), + RouterCheckPoolSize("Advanced", NetworkManager.class, Integer.class, "router.check.poolsize", "10", "Numbers of threads using to check redundant router status.", null), RouterTemplateId("Advanced", NetworkManager.class, Long.class, "router.template.id", "1", "Default ID for template.", null), RouterExtraPublicNics("Advanced", NetworkManager.class, Integer.class, "router.extra.public.nics", "2", "specify extra public nics used for virtual router(up to 5)", "0-5"), StartRetry("Advanced", AgentManager.class, Integer.class, "start.retry", "10", "Number of times to retry create and start commands", null), diff --git a/server/src/com/cloud/network/dao/NetworkDao.java b/server/src/com/cloud/network/dao/NetworkDao.java index 4079955c2e9..1fefb75a360 100644 --- a/server/src/com/cloud/network/dao/NetworkDao.java +++ b/server/src/com/cloud/network/dao/NetworkDao.java @@ -110,4 +110,5 @@ public interface NetworkDao extends GenericDao { List listNetworksByAccount(long accountId, long zoneId, Network.GuestType type, boolean isSystem); + List listRedundantNetworks(); } diff --git a/server/src/com/cloud/network/dao/NetworkDaoImpl.java b/server/src/com/cloud/network/dao/NetworkDaoImpl.java index 8228393f93f..27ae3a3c7c6 100644 --- a/server/src/com/cloud/network/dao/NetworkDaoImpl.java +++ b/server/src/com/cloud/network/dao/NetworkDaoImpl.java @@ -103,6 +103,7 @@ public class NetworkDaoImpl extends GenericDaoBase implements N AllFieldsSearch.and("vpcId", AllFieldsSearch.entity().getVpcId(), Op.EQ); SearchBuilder join1 = _ntwkOffDao.createSearchBuilder(); join1.and("isSystem", join1.entity().isSystemOnly(), Op.EQ); + join1.and("isRedundant", join1.entity().getRedundantRouter(), Op.EQ); AllFieldsSearch.join("offerings", join1, AllFieldsSearch.entity().getNetworkOfferingId(), join1.entity().getId(), JoinBuilder.JoinType.INNER); AllFieldsSearch.done(); @@ -574,4 +575,12 @@ public class NetworkDaoImpl extends GenericDaoBase implements N List networks = search(sc, null); return networks; } + + @Override + public List listRedundantNetworks() { + SearchCriteria sc = AllFieldsSearch.create(); + sc.setJoinParameters("offerings", "isRedundant", true); + + return listBy(sc, null); + } } diff --git a/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java b/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java index c61e97965f1..fcba6df2890 100755 --- a/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java +++ b/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java @@ -28,9 +28,14 @@ import java.util.HashSet; import java.util.Iterator; import java.util.List; import java.util.Map; +import java.util.Queue; import java.util.Set; import java.util.TimeZone; +import java.util.concurrent.BlockingQueue; +import java.util.concurrent.ConcurrentLinkedQueue; +import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; +import java.util.concurrent.LinkedBlockingQueue; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.TimeUnit; @@ -339,6 +344,7 @@ public class VirtualNetworkApplianceManagerImpl implements VirtualNetworkApplian int _routerStatsInterval = 300; int _routerCheckInterval = 30; + int _rvrStatusUpdatePoolSize = 10; protected ServiceOfferingVO _offering; private String _dnsBasicZoneUpdates = "all"; private Set _guestOSNeedGatewayOnNonDefaultNetwork = new HashSet(); @@ -353,8 +359,11 @@ public class VirtualNetworkApplianceManagerImpl implements VirtualNetworkApplian ScheduledExecutorService _executor; ScheduledExecutorService _checkExecutor; ScheduledExecutorService _networkStatsUpdateExecutor; + ExecutorService _rvrStatusUpdateExecutor; Account _systemAcct; + + BlockingQueue _vrUpdateQueue = null; @Override public boolean sendSshKeysToHost(Long hostId, String pubKey, String prvKey) { @@ -582,7 +591,7 @@ public class VirtualNetworkApplianceManagerImpl implements VirtualNetworkApplian _executor = Executors.newScheduledThreadPool(1, new NamedThreadFactory("RouterMonitor")); _checkExecutor = Executors.newScheduledThreadPool(1, new NamedThreadFactory("RouterStatusMonitor")); _networkStatsUpdateExecutor = Executors.newScheduledThreadPool(1, new NamedThreadFactory("NetworkStatsUpdater")); - + final ComponentLocator locator = ComponentLocator.getCurrentLocator(); final Map configs = _configDao.getConfiguration("AgentManager", params); @@ -609,7 +618,18 @@ public class VirtualNetworkApplianceManagerImpl implements VirtualNetworkApplian value = configs.get("router.check.interval"); _routerCheckInterval = NumbersUtil.parseInt(value, 30); - + + value = configs.get("router.check.poolsize"); + _rvrStatusUpdatePoolSize = NumbersUtil.parseInt(value, 10); + + /* + * We assume that one thread can handle 20 requests in 1 minute in normal situation, so here we give the queue size up to 50 minutes. + * It's mostly for buffer, since each time CheckRouterTask running, it would add all the redundant networks in the queue immediately + */ + _vrUpdateQueue = new LinkedBlockingQueue(_rvrStatusUpdatePoolSize * 1000); + + _rvrStatusUpdateExecutor = Executors.newFixedThreadPool(_rvrStatusUpdatePoolSize, new NamedThreadFactory("RedundantRouterStatusMonitor")); + _instance = configs.get("instance.name"); if (_instance == null) { _instance = "DEFAULT"; @@ -707,6 +727,9 @@ public class VirtualNetworkApplianceManagerImpl implements VirtualNetworkApplian if (_routerCheckInterval > 0) { _checkExecutor.scheduleAtFixedRate(new CheckRouterTask(), _routerCheckInterval, _routerCheckInterval, TimeUnit.SECONDS); + for (int i = 0; i < _rvrStatusUpdatePoolSize; i++) { + _rvrStatusUpdateExecutor.execute(new RvRStatusUpdateTask()); + } } else { s_logger.debug("router.check.interval - " + _routerCheckInterval+ " so not scheduling the redundant router checking thread"); } @@ -1042,14 +1065,11 @@ public class VirtualNetworkApplianceManagerImpl implements VirtualNetworkApplian if (host == null || host.getStatus() != Status.Up) { router.setRedundantState(RedundantState.UNKNOWN); updated = true; - } else if (host.getManagementServerId() != ManagementServerNode.getManagementServerId()) { - /* Only cover hosts managed by this management server */ - continue; } else if (privateIP != null) { final CheckRouterCommand command = new CheckRouterCommand(); command.setAccessDetail(NetworkElementCommand.ROUTER_IP, getRouterControlIp(router.getId())); command.setAccessDetail(NetworkElementCommand.ROUTER_NAME, router.getInstanceName()); - command.setWait(60); + command.setWait(30); final Answer origAnswer = _agentMgr.easySend(router.getHostId(), command); CheckRouterAnswer answer = null; if (origAnswer instanceof CheckRouterAnswer) { @@ -1131,11 +1151,11 @@ public class VirtualNetworkApplianceManagerImpl implements VirtualNetworkApplian return priority; } - protected class CheckRouterTask implements Runnable { + protected class RvRStatusUpdateTask implements Runnable { - public CheckRouterTask() { + public RvRStatusUpdateTask() { } - + /* * In order to make fail-over works well at any time, we have to ensure: * 1. Backup router's priority = Master's priority - DELTA + 1 @@ -1198,9 +1218,9 @@ public class VirtualNetworkApplianceManagerImpl implements VirtualNetworkApplian String title = "More than one redundant virtual router is in MASTER state! Router " + router.getHostName() + " and router " + dupRouter.getHostName(); String context = "Virtual router (name: " + router.getHostName() + ", id: " + router.getId() + " and router (name: " + dupRouter.getHostName() + ", id: " + router.getId() + ") are both in MASTER state! If the problem persist, restart both of routers. "; - _alertMgr.sendAlert(AlertManager.ALERT_TYPE_DOMAIN_ROUTER, router.getDataCenterIdToDeployIn(), router.getPodIdToDeployIn(), title, context); _alertMgr.sendAlert(AlertManager.ALERT_TYPE_DOMAIN_ROUTER, dupRouter.getDataCenterIdToDeployIn(), dupRouter.getPodIdToDeployIn(), title, context); + s_logger.warn(context); } else { networkRouterMaps.put(routerGuestNtwkId, router); } @@ -1209,19 +1229,61 @@ public class VirtualNetworkApplianceManagerImpl implements VirtualNetworkApplian } } + @Override + public void run() { + while (true) { + try { + Long networkId = _vrUpdateQueue.take(); + List routers = _routerDao.listByNetworkAndRole(networkId, Role.VIRTUAL_ROUTER); + + if (routers.size() != 2) { + continue; + } + /* + * We update the router pair which the lower id router owned by this mgmt server, in order + * to prevent duplicate update of router status from cluster mgmt servers + */ + DomainRouterVO router = routers.get(0); + if (routers.get(1).getId() < router.getId()) { + router = routers.get(1); + } + HostVO host = _hostDao.findById(router.getHostId()); + if (host == null || host.getManagementServerId() == null || + host.getManagementServerId() != ManagementServerNode.getManagementServerId()) { + continue; + } + updateRoutersRedundantState(routers); + checkDuplicateMaster(routers); + checkSanity(routers); + } catch (Exception ex) { + s_logger.error("Fail to complete the RvRStatusUpdateTask! ", ex); + } + } + } + + } + + protected class CheckRouterTask implements Runnable { + + public CheckRouterTask() { + } + @Override public void run() { try { final List routers = _routerDao.listIsolatedByHostId(null); - s_logger.debug("Found " + routers.size() + " routers. "); + s_logger.debug("Found " + routers.size() + " routers to update status. "); - updateRoutersRedundantState(routers); updateSite2SiteVpnConnectionState(routers); - /* FIXME assumed the a pair of redundant routers managed by same mgmt server, - * then the update above can get the latest status */ - checkDuplicateMaster(routers); - checkSanity(routers); + final List networks = _networkDao.listRedundantNetworks(); + s_logger.debug("Found " + networks.size() + " networks to update RvR status. "); + for (NetworkVO network : networks) { + if (!_vrUpdateQueue.offer(network.getId(), 500, TimeUnit.MILLISECONDS)) { + s_logger.warn("Cannot insert into virtual router update queue! Adjustment of router.check.interval and router.check.poolsize maybe needed."); + break; + } + } } catch (Exception ex) { s_logger.error("Fail to complete the CheckRouterTask! ", ex); } diff --git a/server/test/com/cloud/vpc/dao/MockNetworkDaoImpl.java b/server/test/com/cloud/vpc/dao/MockNetworkDaoImpl.java index 509d9c72f73..7c9a5823516 100644 --- a/server/test/com/cloud/vpc/dao/MockNetworkDaoImpl.java +++ b/server/test/com/cloud/vpc/dao/MockNetworkDaoImpl.java @@ -351,4 +351,10 @@ public class MockNetworkDaoImpl extends GenericDaoBase implemen return null; } + @Override + public List listRedundantNetworks() { + // TODO Auto-generated method stub + return null; + } + } diff --git a/setup/db/db/schema-40to410.sql b/setup/db/db/schema-40to410.sql index 5245a4939a0..44559562807 100644 --- a/setup/db/db/schema-40to410.sql +++ b/setup/db/db/schema-40to410.sql @@ -52,6 +52,8 @@ CREATE TABLE `cloud`.`template_s3_ref` ( INSERT IGNORE INTO `cloud`.`configuration` VALUES ('Advanced', 'DEFAULT', 'management-server', 's3.enable', 'false', 'enable s3'); +INSERT IGNORE INTO `cloud`.`configuration` VALUES ('Advanced', 'DEFAULT', 'NetworkManager', 'router.check.poolsize' , '10', 'Numbers of threads using to check redundant router status.'); + ALTER TABLE `cloud`.`snapshots` ADD COLUMN `s3_id` bigint unsigned COMMENT 'S3 to which this snapshot will be stored'; ALTER TABLE `cloud`.`snapshots` ADD CONSTRAINT `fk_snapshots__s3_id` FOREIGN KEY `fk_snapshots__s3_id` (`s3_id`) REFERENCES `s3` (`id`); From 7235ba35ad67ceff94e4993c19fd742e82fb6b93 Mon Sep 17 00:00:00 2001 From: Gavin Lee Date: Mon, 7 Jan 2013 00:34:53 +0800 Subject: [PATCH 279/421] Remove Duplicated Network Devices Commands --- client/tomcatconf/commands.properties.in | 5 ----- 1 file changed, 5 deletions(-) diff --git a/client/tomcatconf/commands.properties.in b/client/tomcatconf/commands.properties.in index 27e0c2fc3cf..1e70c0f9fbb 100755 --- a/client/tomcatconf/commands.properties.in +++ b/client/tomcatconf/commands.properties.in @@ -378,11 +378,6 @@ addNetworkDevice=com.cloud.api.commands.AddNetworkDeviceCmd;1 listNetworkDevice=com.cloud.api.commands.ListNetworkDeviceCmd;1 deleteNetworkDevice=com.cloud.api.commands.DeleteNetworkDeviceCmd;1 -### Network Devices commands -addNetworkDevice=com.cloud.api.commands.AddNetworkDeviceCmd;1 -listNetworkDevice=com.cloud.api.commands.ListNetworkDeviceCmd;1 -deleteNetworkDevice=com.cloud.api.commands.DeleteNetworkDeviceCmd;1 - ### VPC commands createVPC=com.cloud.api.commands.CreateVPCCmd;15 listVPCs=com.cloud.api.commands.ListVPCsCmd;15 From 0df94a8be1bd747b790f1ba36bda84539a128fda Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Sun, 6 Jan 2013 13:56:56 -0800 Subject: [PATCH 280/421] Remove old syntax for commands.properties, apiname=rolemask is enough While the syntax is being fixed, the static role based acl plugin is backward compatible while processing the commands.properties files in either syntax... As per new syntax, you do: apiname=rolemask apiname and cmd class info is couple in the cmd class itself which apiserver creates a mapping of when it starts. Fix old syntax for role based acl: for i in `find . | grep commands.properties.in`; do echo $i; sed 's/[ ]*=[a-zA-Z 0-9\.]*;/=/g' $i > $i-temp; rm $i; mv $i-temp $i; done Signed-off-by: Rohit Yadav --- .../cisconexusvsm_commands.properties.in | 8 +- client/tomcatconf/commands.properties.in | 578 +++++++++--------- .../tomcatconf/f5bigip_commands.properties.in | 16 +- .../junipersrx_commands.properties.in | 16 +- .../tomcatconf/netapp_commands.properties.in | 24 +- ...tscalerloadbalancer_commands.properties.in | 10 +- .../nicira-nvp_commands.properties.in | 10 +- .../simulator_commands.properties.in | 2 +- .../virtualrouter_commands.properties.in | 6 +- 9 files changed, 335 insertions(+), 335 deletions(-) mode change 100755 => 100644 client/tomcatconf/commands.properties.in diff --git a/client/tomcatconf/cisconexusvsm_commands.properties.in b/client/tomcatconf/cisconexusvsm_commands.properties.in index f6db0d9a9f0..0427ba2d212 100644 --- a/client/tomcatconf/cisconexusvsm_commands.properties.in +++ b/client/tomcatconf/cisconexusvsm_commands.properties.in @@ -19,7 +19,7 @@ ### Please standardize naming conventions to camel-case (even for acronyms). #### Cisco Nexus 1000v Virtual Supervisor Module (VSM) commands -deleteCiscoNexusVSM = com.cloud.api.commands.DeleteCiscoNexusVSMCmd;1 -enableCiscoNexusVSM = com.cloud.api.commands.EnableCiscoNexusVSMCmd;1 -disableCiscoNexusVSM = com.cloud.api.commands.DisableCiscoNexusVSMCmd;1 -listCiscoNexusVSMs = com.cloud.api.commands.ListCiscoNexusVSMsCmd;1 +deleteCiscoNexusVSM=1 +enableCiscoNexusVSM=1 +disableCiscoNexusVSM=1 +listCiscoNexusVSMs=1 diff --git a/client/tomcatconf/commands.properties.in b/client/tomcatconf/commands.properties.in old mode 100755 new mode 100644 index 8348359cc22..3872f2a8783 --- a/client/tomcatconf/commands.properties.in +++ b/client/tomcatconf/commands.properties.in @@ -19,408 +19,408 @@ ### Please standardize naming conventions to camel-case (even for acronyms). ### Account commands -createAccount=org.apache.cloudstack.api.command.admin.account.CreateAccountCmd;3 -deleteAccount=org.apache.cloudstack.api.command.admin.account.DeleteAccountCmd;3 -updateAccount=org.apache.cloudstack.api.command.admin.account.UpdateAccountCmd;3 -disableAccount=org.apache.cloudstack.api.command.admin.account.DisableAccountCmd;7 -enableAccount=org.apache.cloudstack.api.command.admin.account.EnableAccountCmd;7 -lockAccount=org.apache.cloudstack.api.command.admin.account.LockAccountCmd;7 -listAccounts=org.apache.cloudstack.api.command.user.account.ListAccountsCmd;15 -markDefaultZoneForAccount=org.apache.cloudstack.api.command.admin.zone.MarkDefaultZoneForAccountCmd;1 +createAccount=3 +deleteAccount=3 +updateAccount=3 +disableAccount=7 +enableAccount=7 +lockAccount=7 +listAccounts=15 +markDefaultZoneForAccount=1 #### User commands -createUser=org.apache.cloudstack.api.command.admin.user.CreateUserCmd;3 -deleteUser=org.apache.cloudstack.api.command.admin.user.DeleteUserCmd;3 -updateUser=org.apache.cloudstack.api.command.admin.user.UpdateUserCmd;15 -listUsers=org.apache.cloudstack.api.command.admin.user.ListUsersCmd;7 -lockUser=org.apache.cloudstack.api.command.admin.user.LockUserCmd;7 -disableUser=org.apache.cloudstack.api.command.admin.user.DisableUserCmd;7 -enableUser=org.apache.cloudstack.api.command.admin.user.EnableUserCmd;7 -getUser=org.apache.cloudstack.api.command.admin.user.GetUserCmd;1 +createUser=3 +deleteUser=3 +updateUser=15 +listUsers=7 +lockUser=7 +disableUser=7 +enableUser=7 +getUser=1 #### Domain commands -createDomain=org.apache.cloudstack.api.command.admin.domain.CreateDomainCmd;1 -updateDomain=org.apache.cloudstack.api.command.admin.domain.UpdateDomainCmd;1 -deleteDomain=org.apache.cloudstack.api.command.admin.domain.DeleteDomainCmd;1 -listDomains=org.apache.cloudstack.api.command.admin.domain.ListDomainsCmd;7 -listDomainChildren=org.apache.cloudstack.api.command.admin.domain.ListDomainChildrenCmd;7 +createDomain=1 +updateDomain=1 +deleteDomain=1 +listDomains=7 +listDomainChildren=7 ####Cloud Identifier commands -getCloudIdentifier=org.apache.cloudstack.api.command.user.resource.GetCloudIdentifierCmd;15 +getCloudIdentifier=15 #### Limit commands -updateResourceLimit=org.apache.cloudstack.api.command.user.resource.UpdateResourceLimitCmd;7 -updateResourceCount=org.apache.cloudstack.api.command.user.resource.UpdateResourceCountCmd;7 -listResourceLimits=org.apache.cloudstack.api.command.user.resource.ListResourceLimitsCmd;15 +updateResourceLimit=7 +updateResourceCount=7 +listResourceLimits=15 #### VM commands -deployVirtualMachine=org.apache.cloudstack.api.command.user.vm.DeployVMCmd;15 -destroyVirtualMachine=org.apache.cloudstack.api.command.user.vm.DestroyVMCmd;15 -rebootVirtualMachine=org.apache.cloudstack.api.command.user.vm.RebootVMCmd;15 -startVirtualMachine=org.apache.cloudstack.api.command.user.vm.StartVMCmd;15 -stopVirtualMachine=org.apache.cloudstack.api.command.user.vm.StopVMCmd;15 -resetPasswordForVirtualMachine=org.apache.cloudstack.api.command.user.vm.ResetVMPasswordCmd;15 -updateVirtualMachine=org.apache.cloudstack.api.command.user.vm.UpdateVMCmd;15 -listVirtualMachines=org.apache.cloudstack.api.command.user.vm.ListVMsCmd;15 -getVMPassword=org.apache.cloudstack.api.command.user.vm.GetVMPasswordCmd;15 -restoreVirtualMachine=org.apache.cloudstack.api.command.user.vm.RestoreVMCmd;15 -changeServiceForVirtualMachine=org.apache.cloudstack.api.command.user.vm.UpgradeVMCmd;15 -assignVirtualMachine=org.apache.cloudstack.api.command.admin.vm.AssignVMCmd;1 -migrateVirtualMachine=org.apache.cloudstack.api.command.admin.vm.MigrateVMCmd;1 -recoverVirtualMachine=org.apache.cloudstack.api.command.admin.vm.RecoverVMCmd;7 +deployVirtualMachine=15 +destroyVirtualMachine=15 +rebootVirtualMachine=15 +startVirtualMachine=15 +stopVirtualMachine=15 +resetPasswordForVirtualMachine=15 +updateVirtualMachine=15 +listVirtualMachines=15 +getVMPassword=15 +restoreVirtualMachine=15 +changeServiceForVirtualMachine=15 +assignVirtualMachine=1 +migrateVirtualMachine=1 +recoverVirtualMachine=7 #### snapshot commands -createSnapshot=org.apache.cloudstack.api.command.user.snapshot.CreateSnapshotCmd;15 -listSnapshots=org.apache.cloudstack.api.command.user.snapshot.ListSnapshotsCmd;15 -deleteSnapshot=org.apache.cloudstack.api.command.user.snapshot.DeleteSnapshotCmd;15 -createSnapshotPolicy=org.apache.cloudstack.api.command.user.snapshot.CreateSnapshotPolicyCmd;15 -deleteSnapshotPolicies=org.apache.cloudstack.api.command.user.snapshot.DeleteSnapshotPoliciesCmd;15 -listSnapshotPolicies=org.apache.cloudstack.api.command.user.snapshot.ListSnapshotPoliciesCmd;15 +createSnapshot=15 +listSnapshots=15 +deleteSnapshot=15 +createSnapshotPolicy=15 +deleteSnapshotPolicies=15 +listSnapshotPolicies=15 #### template commands -createTemplate=org.apache.cloudstack.api.command.user.template.CreateTemplateCmd;15 -registerTemplate=org.apache.cloudstack.api.command.user.template.RegisterTemplateCmd;15 -updateTemplate=org.apache.cloudstack.api.command.user.template.UpdateTemplateCmd;15 -copyTemplate=org.apache.cloudstack.api.command.user.template.CopyTemplateCmd;15 -deleteTemplate=org.apache.cloudstack.api.command.user.template.DeleteTemplateCmd;15 -listTemplates=org.apache.cloudstack.api.command.user.template.ListTemplatesCmd;15 -updateTemplatePermissions=org.apache.cloudstack.api.command.user.template.UpdateTemplatePermissionsCmd;15 -listTemplatePermissions=org.apache.cloudstack.api.command.user.template.ListTemplatePermissionsCmd;15 -extractTemplate=org.apache.cloudstack.api.command.user.template.ExtractTemplateCmd;15 -prepareTemplate=org.apache.cloudstack.api.command.admin.template.PrepareTemplateCmd;1 +createTemplate=15 +registerTemplate=15 +updateTemplate=15 +copyTemplate=15 +deleteTemplate=15 +listTemplates=15 +updateTemplatePermissions=15 +listTemplatePermissions=15 +extractTemplate=15 +prepareTemplate=1 #### iso commands -attachIso=org.apache.cloudstack.api.command.user.iso.AttachIsoCmd;15 -detachIso=org.apache.cloudstack.api.command.user.iso.DetachIsoCmd;15 -listIsos=org.apache.cloudstack.api.command.user.iso.ListIsosCmd;15 -registerIso=org.apache.cloudstack.api.command.user.iso.RegisterIsoCmd;15 -updateIso=org.apache.cloudstack.api.command.user.iso.UpdateIsoCmd;15 -deleteIso=org.apache.cloudstack.api.command.user.iso.DeleteIsoCmd;15 -copyIso=org.apache.cloudstack.api.command.user.template.CopyTemplateCmd;15 -updateIsoPermissions=org.apache.cloudstack.api.command.user.iso.UpdateIsoPermissionsCmd;15 -listIsoPermissions=org.apache.cloudstack.api.command.user.iso.ListIsoPermissionsCmd;15 -extractIso=org.apache.cloudstack.api.command.user.iso.ExtractIsoCmd;15 +attachIso=15 +detachIso=15 +listIsos=15 +registerIso=15 +updateIso=15 +deleteIso=15 +copyIso=15 +updateIsoPermissions=15 +listIsoPermissions=15 +extractIso=15 #### guest OS commands -listOsTypes=org.apache.cloudstack.api.command.user.guest.ListGuestOsCmd;15 -listOsCategories=org.apache.cloudstack.api.command.user.guest.ListGuestOsCategoriesCmd;15 +listOsTypes=15 +listOsCategories=15 #### service offering commands -createServiceOffering=org.apache.cloudstack.api.command.admin.offering.CreateServiceOfferingCmd;1 -deleteServiceOffering=org.apache.cloudstack.api.command.admin.offering.DeleteServiceOfferingCmd;1 -updateServiceOffering=org.apache.cloudstack.api.command.admin.offering.UpdateServiceOfferingCmd;1 -listServiceOfferings=org.apache.cloudstack.api.command.user.offering.ListServiceOfferingsCmd;15 +createServiceOffering=1 +deleteServiceOffering=1 +updateServiceOffering=1 +listServiceOfferings=15 #### disk offering commands -createDiskOffering=org.apache.cloudstack.api.command.admin.offering.CreateDiskOfferingCmd;1 -updateDiskOffering=org.apache.cloudstack.api.command.admin.offering.UpdateDiskOfferingCmd;1 -deleteDiskOffering=org.apache.cloudstack.api.command.admin.offering.DeleteDiskOfferingCmd;1 -listDiskOfferings=org.apache.cloudstack.api.command.user.offering.ListDiskOfferingsCmd;15 +createDiskOffering=1 +updateDiskOffering=1 +deleteDiskOffering=1 +listDiskOfferings=15 #### vlan commands -createVlanIpRange=org.apache.cloudstack.api.command.admin.vlan.CreateVlanIpRangeCmd;1 -deleteVlanIpRange=org.apache.cloudstack.api.command.admin.vlan.DeleteVlanIpRangeCmd;1 -listVlanIpRanges=org.apache.cloudstack.api.command.admin.vlan.ListVlanIpRangesCmd;1 +createVlanIpRange=1 +deleteVlanIpRange=1 +listVlanIpRanges=1 #### address commands -associateIpAddress=org.apache.cloudstack.api.command.user.address.AssociateIPAddrCmd;15 -disassociateIpAddress=org.apache.cloudstack.api.command.user.address.DisassociateIPAddrCmd;15 -listPublicIpAddresses=org.apache.cloudstack.api.command.user.address.ListPublicIpAddressesCmd;15 +associateIpAddress=15 +disassociateIpAddress=15 +listPublicIpAddresses=15 #### firewall commands -listPortForwardingRules=org.apache.cloudstack.api.command.user.firewall.ListPortForwardingRulesCmd;15 -createPortForwardingRule=org.apache.cloudstack.api.command.user.firewall.CreatePortForwardingRuleCmd;15 -deletePortForwardingRule=org.apache.cloudstack.api.command.user.firewall.DeletePortForwardingRuleCmd;15 -updatePortForwardingRule=org.apache.cloudstack.api.command.user.firewall.UpdatePortForwardingRuleCmd;15 +listPortForwardingRules=15 +createPortForwardingRule=15 +deletePortForwardingRule=15 +updatePortForwardingRule=15 #### NAT commands -enableStaticNat=org.apache.cloudstack.api.command.user.nat.EnableStaticNatCmd;15 -createIpForwardingRule=org.apache.cloudstack.api.command.user.nat.CreateIpForwardingRuleCmd;15 -deleteIpForwardingRule=org.apache.cloudstack.api.command.user.nat.DeleteIpForwardingRuleCmd;15 -listIpForwardingRules=org.apache.cloudstack.api.command.user.nat.ListIpForwardingRulesCmd;15 -disableStaticNat=org.apache.cloudstack.api.command.user.nat.DisableStaticNatCmd;15 +enableStaticNat=15 +createIpForwardingRule=15 +deleteIpForwardingRule=15 +listIpForwardingRules=15 +disableStaticNat=15 #### load balancer commands -createLoadBalancerRule=org.apache.cloudstack.api.command.user.loadbalancer.CreateLoadBalancerRuleCmd;15 -deleteLoadBalancerRule=org.apache.cloudstack.api.command.user.loadbalancer.DeleteLoadBalancerRuleCmd;15 -removeFromLoadBalancerRule=org.apache.cloudstack.api.command.user.loadbalancer.RemoveFromLoadBalancerRuleCmd;15 -assignToLoadBalancerRule=org.apache.cloudstack.api.command.user.loadbalancer.AssignToLoadBalancerRuleCmd;15 -createLBStickinessPolicy=org.apache.cloudstack.api.command.user.loadbalancer.CreateLBStickinessPolicyCmd;15 -deleteLBStickinessPolicy=org.apache.cloudstack.api.command.user.loadbalancer.DeleteLBStickinessPolicyCmd;15 -listLoadBalancerRules=org.apache.cloudstack.api.command.user.loadbalancer.ListLoadBalancerRulesCmd;15 -listLBStickinessPolicies=org.apache.cloudstack.api.command.user.loadbalancer.ListLBStickinessPoliciesCmd;15 -listLoadBalancerRuleInstances=org.apache.cloudstack.api.command.user.loadbalancer.ListLoadBalancerRuleInstancesCmd;15 -updateLoadBalancerRule=org.apache.cloudstack.api.command.user.loadbalancer.UpdateLoadBalancerRuleCmd;15 +createLoadBalancerRule=15 +deleteLoadBalancerRule=15 +removeFromLoadBalancerRule=15 +assignToLoadBalancerRule=15 +createLBStickinessPolicy=15 +deleteLBStickinessPolicy=15 +listLoadBalancerRules=15 +listLBStickinessPolicies=15 +listLoadBalancerRuleInstances=15 +updateLoadBalancerRule=15 #### autoscale commands -createCounter = org.apache.cloudstack.api.command.admin.autoscale.CreateCounterCmd;1 -createCondition = org.apache.cloudstack.api.command.user.autoscale.CreateConditionCmd;15 -createAutoScalePolicy=org.apache.cloudstack.api.command.user.autoscale.CreateAutoScalePolicyCmd;15 -createAutoScaleVmProfile=org.apache.cloudstack.api.command.user.autoscale.CreateAutoScaleVmProfileCmd;15 -createAutoScaleVmGroup=org.apache.cloudstack.api.command.user.autoscale.CreateAutoScaleVmGroupCmd;15 -deleteCounter = org.apache.cloudstack.api.command.admin.autoscale.DeleteCounterCmd;1 -deleteCondition = org.apache.cloudstack.api.command.user.autoscale.DeleteConditionCmd;15 -deleteAutoScalePolicy=org.apache.cloudstack.api.command.user.autoscale.DeleteAutoScalePolicyCmd;15 -deleteAutoScaleVmProfile=org.apache.cloudstack.api.command.user.autoscale.DeleteAutoScaleVmProfileCmd;15 -deleteAutoScaleVmGroup=org.apache.cloudstack.api.command.user.autoscale.DeleteAutoScaleVmGroupCmd;15 -listCounters = org.apache.cloudstack.api.command.user.autoscale.ListCountersCmd;15 -listConditions = org.apache.cloudstack.api.command.user.autoscale.ListConditionsCmd;15 -listAutoScalePolicies=org.apache.cloudstack.api.command.user.autoscale.ListAutoScalePoliciesCmd;15 -listAutoScaleVmProfiles=org.apache.cloudstack.api.command.user.autoscale.ListAutoScaleVmProfilesCmd;15 -listAutoScaleVmGroups=org.apache.cloudstack.api.command.user.autoscale.ListAutoScaleVmGroupsCmd;15 -enableAutoScaleVmGroup=org.apache.cloudstack.api.command.user.autoscale.EnableAutoScaleVmGroupCmd;15 -disableAutoScaleVmGroup=org.apache.cloudstack.api.command.user.autoscale.DisableAutoScaleVmGroupCmd;15 -updateAutoScalePolicy=org.apache.cloudstack.api.command.user.autoscale.UpdateAutoScalePolicyCmd;15 -updateAutoScaleVmProfile=org.apache.cloudstack.api.command.user.autoscale.UpdateAutoScaleVmProfileCmd;15 -updateAutoScaleVmGroup=org.apache.cloudstack.api.command.user.autoscale.UpdateAutoScaleVmGroupCmd;15 +createCounter=1 +createCondition=15 +createAutoScalePolicy=15 +createAutoScaleVmProfile=15 +createAutoScaleVmGroup=15 +deleteCounter=1 +deleteCondition=15 +deleteAutoScalePolicy=15 +deleteAutoScaleVmProfile=15 +deleteAutoScaleVmGroup=15 +listCounters=15 +listConditions=15 +listAutoScalePolicies=15 +listAutoScaleVmProfiles=15 +listAutoScaleVmGroups=15 +enableAutoScaleVmGroup=15 +disableAutoScaleVmGroup=15 +updateAutoScalePolicy=15 +updateAutoScaleVmProfile=15 +updateAutoScaleVmGroup=15 #### router commands -startRouter=org.apache.cloudstack.api.command.admin.router.StartRouterCmd;7 -rebootRouter=org.apache.cloudstack.api.command.admin.router.RebootRouterCmd;7 -stopRouter=org.apache.cloudstack.api.command.admin.router.StopRouterCmd;7 -destroyRouter=org.apache.cloudstack.api.command.admin.router.DestroyRouterCmd;7 -changeServiceForRouter=org.apache.cloudstack.api.command.admin.router.UpgradeRouterCmd;7 -listRouters=org.apache.cloudstack.api.command.admin.router.ListRoutersCmd;7 -listVirtualRouterElements=org.apache.cloudstack.api.command.admin.router.ListVirtualRouterElementsCmd;7 -configureVirtualRouterElement=org.apache.cloudstack.api.command.admin.router.ConfigureVirtualRouterElementCmd;7 -createVirtualRouterElement=org.apache.cloudstack.api.command.admin.router.CreateVirtualRouterElementCmd;7 +startRouter=7 +rebootRouter=7 +stopRouter=7 +destroyRouter=7 +changeServiceForRouter=7 +listRouters=7 +listVirtualRouterElements=7 +configureVirtualRouterElement=7 +createVirtualRouterElement=7 #### system vm commands -startSystemVm=org.apache.cloudstack.api.command.admin.systemvm.StartSystemVMCmd;1 -rebootSystemVm=org.apache.cloudstack.api.command.admin.systemvm.RebootSystemVmCmd;1 -stopSystemVm=org.apache.cloudstack.api.command.admin.systemvm.StopSystemVmCmd;1 -destroySystemVm=org.apache.cloudstack.api.command.admin.systemvm.DestroySystemVmCmd;1 -listSystemVms=org.apache.cloudstack.api.command.admin.systemvm.ListSystemVMsCmd;3 -migrateSystemVm=org.apache.cloudstack.api.command.admin.systemvm.MigrateSystemVMCmd;1 -changeServiceForSystemVm=org.apache.cloudstack.api.command.admin.systemvm.UpgradeSystemVMCmd;1 +startSystemVm=1 +rebootSystemVm=1 +stopSystemVm=1 +destroySystemVm=1 +listSystemVms=3 +migrateSystemVm=1 +changeServiceForSystemVm=1 #### configuration commands -updateConfiguration=org.apache.cloudstack.api.command.admin.config.UpdateCfgCmd;1 -listConfigurations=org.apache.cloudstack.api.command.admin.config.ListCfgsByCmd;1 -ldapConfig=org.apache.cloudstack.api.command.admin.ldap.LDAPConfigCmd;1 -ldapRemove=org.apache.cloudstack.api.command.admin.ldap.LDAPRemoveCmd;1 -listCapabilities=org.apache.cloudstack.api.command.user.config.ListCapabilitiesCmd;15 +updateConfiguration=1 +listConfigurations=1 +ldapConfig=1 +ldapRemove=1 +listCapabilities=15 #### pod commands -createPod=org.apache.cloudstack.api.command.admin.pod.CreatePodCmd;1 -updatePod=org.apache.cloudstack.api.command.admin.pod.UpdatePodCmd;1 -deletePod=org.apache.cloudstack.api.command.admin.pod.DeletePodCmd;1 -listPods=org.apache.cloudstack.api.command.admin.pod.ListPodsByCmd;3 +createPod=1 +updatePod=1 +deletePod=1 +listPods=3 #### zone commands -createZone=org.apache.cloudstack.api.command.admin.zone.CreateZoneCmd;1 -updateZone=org.apache.cloudstack.api.command.admin.zone.UpdateZoneCmd;1 -deleteZone=org.apache.cloudstack.api.command.admin.zone.DeleteZoneCmd;1 -listZones=org.apache.cloudstack.api.command.user.zone.ListZonesByCmd;15 +createZone=1 +updateZone=1 +deleteZone=1 +listZones=15 #### events commands -listEvents=org.apache.cloudstack.api.command.user.event.ListEventsCmd;15 -listEventTypes=org.apache.cloudstack.api.command.user.event.ListEventTypesCmd;15 +listEvents=15 +listEventTypes=15 #### alerts commands -listAlerts=org.apache.cloudstack.api.command.admin.resource.ListAlertsCmd;3 +listAlerts=3 #### system capacity commands -listCapacity=org.apache.cloudstack.api.command.admin.resource.ListCapacityCmd;3 +listCapacity=3 #### swift commands -addSwift=org.apache.cloudstack.api.command.admin.swift.AddSwiftCmd;1 -listSwifts=org.apache.cloudstack.api.command.admin.swift.ListSwiftsCmd;1 +addSwift=1 +listSwifts=1 #### s3 commands -addS3=org.apache.cloudstack.api.command.admin.storage.AddS3Cmd;1 -listS3s=org.apache.cloudstack.api.command.admin.storage.ListS3sCmd;1 +addS3=1 +listS3s=1 #### host commands -addHost=org.apache.cloudstack.api.command.admin.host.AddHostCmd;3 -addCluster=org.apache.cloudstack.api.command.admin.cluster.AddClusterCmd;1 -deleteCluster=org.apache.cloudstack.api.command.admin.cluster.DeleteClusterCmd;1 -updateCluster=org.apache.cloudstack.api.command.admin.cluster.UpdateClusterCmd;1 -reconnectHost=org.apache.cloudstack.api.command.admin.host.ReconnectHostCmd;1 -updateHost=org.apache.cloudstack.api.command.admin.host.UpdateHostCmd;1 -deleteHost=org.apache.cloudstack.api.command.admin.host.DeleteHostCmd;3 -prepareHostForMaintenance=org.apache.cloudstack.api.command.admin.host.PrepareForMaintenanceCmd;1 -cancelHostMaintenance=org.apache.cloudstack.api.command.admin.host.CancelMaintenanceCmd;1 -listHosts=org.apache.cloudstack.api.command.admin.host.ListHostsCmd;3 -addSecondaryStorage=org.apache.cloudstack.api.command.admin.host.AddSecondaryStorageCmd;1 -updateHostPassword=org.apache.cloudstack.api.command.admin.host.UpdateHostPasswordCmd;1 +addHost=3 +addCluster=1 +deleteCluster=1 +updateCluster=1 +reconnectHost=1 +updateHost=1 +deleteHost=3 +prepareHostForMaintenance=1 +cancelHostMaintenance=1 +listHosts=3 +addSecondaryStorage=1 +updateHostPassword=1 #### volume commands -attachVolume=org.apache.cloudstack.api.command.user.volume.AttachVolumeCmd;15 -uploadVolume=org.apache.cloudstack.api.command.user.volume.UploadVolumeCmd;15 -detachVolume=org.apache.cloudstack.api.command.user.volume.DetachVolumeCmd;15 -createVolume=org.apache.cloudstack.api.command.user.volume.CreateVolumeCmd;15 -deleteVolume=org.apache.cloudstack.api.command.user.volume.DeleteVolumeCmd;15 -listVolumes=org.apache.cloudstack.api.command.user.volume.ListVolumesCmd;15 -extractVolume=org.apache.cloudstack.api.command.user.volume.ExtractVolumeCmd;15 -migrateVolume=org.apache.cloudstack.api.command.user.volume.MigrateVolumeCmd;15 +attachVolume=15 +uploadVolume=15 +detachVolume=15 +createVolume=15 +deleteVolume=15 +listVolumes=15 +extractVolume=15 +migrateVolume=15 #### registration command: FIXME -- this really should be something in management server that #### generates a new key for the user and they just have to #### use that key...the key is stored in the db associated w/ #### the userId...every request to the developer API should be #### checked against the key -registerUserKeys=org.apache.cloudstack.api.command.admin.user.RegisterCmd;15 +registerUserKeys=15 ### async-query command -queryAsyncJobResult=org.apache.cloudstack.api.command.user.job.QueryAsyncJobResultCmd;15 -listAsyncJobs=org.apache.cloudstack.api.command.user.job.ListAsyncJobsCmd;15 +queryAsyncJobResult=15 +listAsyncJobs=15 #### storage pools commands -listStoragePools=org.apache.cloudstack.api.command.admin.storage.ListStoragePoolsCmd;3 -createStoragePool=org.apache.cloudstack.api.command.admin.storage.CreateStoragePoolCmd;1 -updateStoragePool=org.apache.cloudstack.api.command.admin.storage.UpdateStoragePoolCmd;1 -deleteStoragePool=org.apache.cloudstack.api.command.admin.storage.DeletePoolCmd;1 -listClusters=org.apache.cloudstack.api.command.admin.cluster.ListClustersCmd;3 -enableStorageMaintenance=org.apache.cloudstack.api.command.admin.storage.PreparePrimaryStorageForMaintenanceCmd;1 -cancelStorageMaintenance=org.apache.cloudstack.api.command.admin.storage.CancelPrimaryStorageMaintenanceCmd;1 +listStoragePools=3 +createStoragePool=1 +updateStoragePool=1 +deleteStoragePool=1 +listClusters=3 +enableStorageMaintenance=1 +cancelStorageMaintenance=1 #### security group commands -createSecurityGroup=org.apache.cloudstack.api.command.user.securitygroup.CreateSecurityGroupCmd;15 -deleteSecurityGroup=org.apache.cloudstack.api.command.user.securitygroup.DeleteSecurityGroupCmd;15 -authorizeSecurityGroupIngress=org.apache.cloudstack.api.command.user.securitygroup.AuthorizeSecurityGroupIngressCmd;15 -revokeSecurityGroupIngress=org.apache.cloudstack.api.command.user.securitygroup.RevokeSecurityGroupIngressCmd;15 -authorizeSecurityGroupEgress=org.apache.cloudstack.api.command.user.securitygroup.AuthorizeSecurityGroupEgressCmd;15 -revokeSecurityGroupEgress=org.apache.cloudstack.api.command.user.securitygroup.RevokeSecurityGroupEgressCmd;15 -listSecurityGroups=org.apache.cloudstack.api.command.user.securitygroup.ListSecurityGroupsCmd;15 +createSecurityGroup=15 +deleteSecurityGroup=15 +authorizeSecurityGroupIngress=15 +revokeSecurityGroupIngress=15 +authorizeSecurityGroupEgress=15 +revokeSecurityGroupEgress=15 +listSecurityGroups=15 #### vm group commands -createInstanceGroup=org.apache.cloudstack.api.command.user.vmgroup.CreateVMGroupCmd;15 -deleteInstanceGroup=org.apache.cloudstack.api.command.user.vmgroup.DeleteVMGroupCmd;15 -updateInstanceGroup=org.apache.cloudstack.api.command.user.vmgroup.UpdateVMGroupCmd;15 -listInstanceGroups=org.apache.cloudstack.api.command.user.vmgroup.ListVMGroupsCmd;15 +createInstanceGroup=15 +deleteInstanceGroup=15 +updateInstanceGroup=15 +listInstanceGroups=15 ### Certificate commands -uploadCustomCertificate=org.apache.cloudstack.api.command.admin.resource.UploadCustomCertificateCmd;1 +uploadCustomCertificate=1 ### other commands -listHypervisors=org.apache.cloudstack.api.command.user.resource.ListHypervisorsCmd;15 +listHypervisors=15 ### VPN -createRemoteAccessVpn=org.apache.cloudstack.api.command.user.vpn.CreateRemoteAccessVpnCmd;15 -deleteRemoteAccessVpn=org.apache.cloudstack.api.command.user.vpn.DeleteRemoteAccessVpnCmd;15 -listRemoteAccessVpns=org.apache.cloudstack.api.command.user.vpn.ListRemoteAccessVpnsCmd;15 +createRemoteAccessVpn=15 +deleteRemoteAccessVpn=15 +listRemoteAccessVpns=15 -addVpnUser=org.apache.cloudstack.api.command.user.vpn.AddVpnUserCmd;15 -removeVpnUser=org.apache.cloudstack.api.command.user.vpn.RemoveVpnUserCmd;15 -listVpnUsers=org.apache.cloudstack.api.command.user.vpn.ListVpnUsersCmd;15 +addVpnUser=15 +removeVpnUser=15 +listVpnUsers=15 #### network offering commands -createNetworkOffering=org.apache.cloudstack.api.command.admin.network.CreateNetworkOfferingCmd;1 -updateNetworkOffering=org.apache.cloudstack.api.command.admin.network.UpdateNetworkOfferingCmd;1 -deleteNetworkOffering=org.apache.cloudstack.api.command.admin.network.DeleteNetworkOfferingCmd;1 -listNetworkOfferings=org.apache.cloudstack.api.command.user.network.ListNetworkOfferingsCmd;15 +createNetworkOffering=1 +updateNetworkOffering=1 +deleteNetworkOffering=1 +listNetworkOfferings=15 #### network commands -createNetwork=org.apache.cloudstack.api.command.user.network.CreateNetworkCmd;15 -deleteNetwork=org.apache.cloudstack.api.command.user.network.DeleteNetworkCmd;15 -listNetworks=org.apache.cloudstack.api.command.user.network.ListNetworksCmd;15 -restartNetwork=org.apache.cloudstack.api.command.user.network.RestartNetworkCmd;15 -updateNetwork=org.apache.cloudstack.api.command.user.network.UpdateNetworkCmd;15 +createNetwork=15 +deleteNetwork=15 +listNetworks=15 +restartNetwork=15 +updateNetwork=15 #### SSH key pair commands -registerSSHKeyPair=org.apache.cloudstack.api.command.user.ssh.RegisterSSHKeyPairCmd;15 -createSSHKeyPair=org.apache.cloudstack.api.command.user.ssh.CreateSSHKeyPairCmd;15 -deleteSSHKeyPair=org.apache.cloudstack.api.command.user.ssh.DeleteSSHKeyPairCmd;15 -listSSHKeyPairs=org.apache.cloudstack.api.command.user.ssh.ListSSHKeyPairsCmd;15 +registerSSHKeyPair=15 +createSSHKeyPair=15 +deleteSSHKeyPair=15 +listSSHKeyPairs=15 #### Projects commands -createProject=org.apache.cloudstack.api.command.user.project.CreateProjectCmd;15 -deleteProject=org.apache.cloudstack.api.command.user.project.DeleteProjectCmd;15 -updateProject=org.apache.cloudstack.api.command.user.project.UpdateProjectCmd;15 -activateProject=org.apache.cloudstack.api.command.user.project.ActivateProjectCmd;15 -suspendProject=org.apache.cloudstack.api.command.user.project.SuspendProjectCmd;15 -listProjects=org.apache.cloudstack.api.command.user.project.ListProjectsCmd;15 -addAccountToProject=org.apache.cloudstack.api.command.user.account.AddAccountToProjectCmd;15 -deleteAccountFromProject=org.apache.cloudstack.api.command.user.account.DeleteAccountFromProjectCmd;15 -listProjectAccounts=org.apache.cloudstack.api.command.user.account.ListProjectAccountsCmd;15 -listProjectInvitations=org.apache.cloudstack.api.command.user.project.ListProjectInvitationsCmd;15 -updateProjectInvitation=org.apache.cloudstack.api.command.user.project.UpdateProjectInvitationCmd;15 -deleteProjectInvitation=org.apache.cloudstack.api.command.user.project.DeleteProjectInvitationCmd;15 +createProject=15 +deleteProject=15 +updateProject=15 +activateProject=15 +suspendProject=15 +listProjects=15 +addAccountToProject=15 +deleteAccountFromProject=15 +listProjectAccounts=15 +listProjectInvitations=15 +updateProjectInvitation=15 +deleteProjectInvitation=15 #### -createFirewallRule=org.apache.cloudstack.api.command.user.firewall.CreateFirewallRuleCmd;15 -deleteFirewallRule=org.apache.cloudstack.api.command.user.firewall.DeleteFirewallRuleCmd;15 -listFirewallRules=org.apache.cloudstack.api.command.user.firewall.ListFirewallRulesCmd;15 +createFirewallRule=15 +deleteFirewallRule=15 +listFirewallRules=15 #### hypervisor capabilities commands -updateHypervisorCapabilities=org.apache.cloudstack.api.command.admin.config.UpdateHypervisorCapabilitiesCmd;1 -listHypervisorCapabilities=org.apache.cloudstack.api.command.admin.config.ListHypervisorCapabilitiesCmd;1 +updateHypervisorCapabilities=1 +listHypervisorCapabilities=1 #### Physical Network commands -createPhysicalNetwork=org.apache.cloudstack.api.command.admin.network.CreatePhysicalNetworkCmd;1 -deletePhysicalNetwork=org.apache.cloudstack.api.command.admin.network.DeletePhysicalNetworkCmd;1 -listPhysicalNetworks=org.apache.cloudstack.api.command.admin.network.ListPhysicalNetworksCmd;1 -updatePhysicalNetwork=org.apache.cloudstack.api.command.admin.network.UpdatePhysicalNetworkCmd;1 +createPhysicalNetwork=1 +deletePhysicalNetwork=1 +listPhysicalNetworks=1 +updatePhysicalNetwork=1 #### Physical Network Service Provider commands -listSupportedNetworkServices=org.apache.cloudstack.api.command.admin.network.ListSupportedNetworkServicesCmd;1 -addNetworkServiceProvider=org.apache.cloudstack.api.command.admin.network.AddNetworkServiceProviderCmd;1 -deleteNetworkServiceProvider=org.apache.cloudstack.api.command.admin.network.DeleteNetworkServiceProviderCmd;1 -listNetworkServiceProviders=org.apache.cloudstack.api.command.admin.network.ListNetworkServiceProvidersCmd;1 -updateNetworkServiceProvider=org.apache.cloudstack.api.command.admin.network.UpdateNetworkServiceProviderCmd;1 +listSupportedNetworkServices=1 +addNetworkServiceProvider=1 +deleteNetworkServiceProvider=1 +listNetworkServiceProviders=1 +updateNetworkServiceProvider=1 #### Physical Network Traffic Type commands -addTrafficType=org.apache.cloudstack.api.command.admin.usage.AddTrafficTypeCmd;1 -deleteTrafficType=org.apache.cloudstack.api.command.admin.usage.DeleteTrafficTypeCmd;1 -listTrafficTypes=org.apache.cloudstack.api.command.admin.usage.ListTrafficTypesCmd;1 -updateTrafficType=org.apache.cloudstack.api.command.admin.usage.UpdateTrafficTypeCmd;1 -listTrafficTypeImplementors=org.apache.cloudstack.api.command.admin.usage.ListTrafficTypeImplementorsCmd;1 +addTrafficType=1 +deleteTrafficType=1 +listTrafficTypes=1 +updateTrafficType=1 +listTrafficTypeImplementors=1 #### Storage Network commands -createStorageNetworkIpRange=org.apache.cloudstack.api.command.admin.network.CreateStorageNetworkIpRangeCmd;1 -deleteStorageNetworkIpRange=org.apache.cloudstack.api.command.admin.network.DeleteStorageNetworkIpRangeCmd;1 -listStorageNetworkIpRange=org.apache.cloudstack.api.command.admin.network.ListStorageNetworkIpRangeCmd;1 -updateStorageNetworkIpRange=org.apache.cloudstack.api.command.admin.network.UpdateStorageNetworkIpRangeCmd;1 +createStorageNetworkIpRange=1 +deleteStorageNetworkIpRange=1 +listStorageNetworkIpRange=1 +updateStorageNetworkIpRange=1 ### Network Devices commands -addNetworkDevice=org.apache.cloudstack.api.command.admin.network.AddNetworkDeviceCmd;1 -listNetworkDevice=org.apache.cloudstack.api.command.admin.network.ListNetworkDeviceCmd;1 -deleteNetworkDevice=org.apache.cloudstack.api.command.admin.network.DeleteNetworkDeviceCmd;1 +addNetworkDevice=1 +listNetworkDevice=1 +deleteNetworkDevice=1 ### VPC commands -createVPC=org.apache.cloudstack.api.command.user.vpc.CreateVPCCmd;15 -listVPCs=org.apache.cloudstack.api.command.user.vpc.ListVPCsCmd;15 -deleteVPC=org.apache.cloudstack.api.command.user.vpc.DeleteVPCCmd;15 -updateVPC=org.apache.cloudstack.api.command.user.vpc.UpdateVPCCmd;15 -restartVPC=org.apache.cloudstack.api.command.user.vpc.RestartVPCCmd;15 +createVPC=15 +listVPCs=15 +deleteVPC=15 +updateVPC=15 +restartVPC=15 #### VPC offering commands -createVPCOffering=org.apache.cloudstack.api.command.admin.vpc.CreateVPCOfferingCmd;1 -updateVPCOffering=org.apache.cloudstack.api.command.admin.vpc.UpdateVPCOfferingCmd;1 -deleteVPCOffering=org.apache.cloudstack.api.command.admin.vpc.DeleteVPCOfferingCmd;1 -listVPCOfferings=org.apache.cloudstack.api.command.user.vpc.ListVPCOfferingsCmd;15 +createVPCOffering=1 +updateVPCOffering=1 +deleteVPCOffering=1 +listVPCOfferings=15 #### Private gateway commands -createPrivateGateway=org.apache.cloudstack.api.command.admin.vpc.CreatePrivateGatewayCmd;1 -listPrivateGateways=org.apache.cloudstack.api.command.user.vpc.ListPrivateGatewaysCmd;15 -deletePrivateGateway=org.apache.cloudstack.api.command.admin.vpc.DeletePrivateGatewayCmd;1 +createPrivateGateway=1 +listPrivateGateways=15 +deletePrivateGateway=1 #### Network ACL commands -createNetworkACL=org.apache.cloudstack.api.command.user.network.CreateNetworkACLCmd;15 -deleteNetworkACL=org.apache.cloudstack.api.command.user.network.DeleteNetworkACLCmd;15 -listNetworkACLs=org.apache.cloudstack.api.command.user.network.ListNetworkACLsCmd;15 +createNetworkACL=15 +deleteNetworkACL=15 +listNetworkACLs=15 #### Static route commands -createStaticRoute=org.apache.cloudstack.api.command.user.vpc.CreateStaticRouteCmd;15 -deleteStaticRoute=org.apache.cloudstack.api.command.user.vpc.DeleteStaticRouteCmd;15 -listStaticRoutes=org.apache.cloudstack.api.command.user.vpc.ListStaticRoutesCmd;15 +createStaticRoute=15 +deleteStaticRoute=15 +listStaticRoutes=15 #### Tags commands -createTags=org.apache.cloudstack.api.command.user.tag.CreateTagsCmd;15 -deleteTags=org.apache.cloudstack.api.command.user.tag.DeleteTagsCmd;15 -listTags=org.apache.cloudstack.api.command.user.tag.ListTagsCmd;15 +createTags=15 +deleteTags=15 +listTags=15 ### Site-to-site VPN commands -createVpnCustomerGateway=org.apache.cloudstack.api.command.user.vpn.CreateVpnCustomerGatewayCmd;15 -createVpnGateway=org.apache.cloudstack.api.command.user.vpn.CreateVpnGatewayCmd;15 -createVpnConnection=org.apache.cloudstack.api.command.user.vpn.CreateVpnConnectionCmd;15 -deleteVpnCustomerGateway=org.apache.cloudstack.api.command.user.vpn.DeleteVpnCustomerGatewayCmd;15 -deleteVpnGateway=org.apache.cloudstack.api.command.user.vpn.DeleteVpnGatewayCmd;15 -deleteVpnConnection=org.apache.cloudstack.api.command.user.vpn.DeleteVpnConnectionCmd;15 -updateVpnCustomerGateway=org.apache.cloudstack.api.command.user.vpn.UpdateVpnCustomerGatewayCmd;15 -resetVpnConnection=org.apache.cloudstack.api.command.user.vpn.ResetVpnConnectionCmd;15 -listVpnCustomerGateways=org.apache.cloudstack.api.command.user.vpn.ListVpnCustomerGatewaysCmd;15 -listVpnGateways=org.apache.cloudstack.api.command.user.vpn.ListVpnGatewaysCmd;15 -listVpnConnections=org.apache.cloudstack.api.command.user.vpn.ListVpnConnectionsCmd;15 +createVpnCustomerGateway=15 +createVpnGateway=15 +createVpnConnection=15 +deleteVpnCustomerGateway=15 +deleteVpnGateway=15 +deleteVpnConnection=15 +updateVpnCustomerGateway=15 +resetVpnConnection=15 +listVpnCustomerGateways=15 +listVpnGateways=15 +listVpnConnections=15 diff --git a/client/tomcatconf/f5bigip_commands.properties.in b/client/tomcatconf/f5bigip_commands.properties.in index e48bd482d20..8c3cc2a145a 100644 --- a/client/tomcatconf/f5bigip_commands.properties.in +++ b/client/tomcatconf/f5bigip_commands.properties.in @@ -21,12 +21,12 @@ #### f5 big ip load balancer commands #Deprecated commands -addExternalLoadBalancer = com.cloud.api.commands.AddExternalLoadBalancerCmd;1 -deleteExternalLoadBalancer = com.cloud.api.commands.DeleteExternalLoadBalancerCmd;1 -listExternalLoadBalancers = com.cloud.api.commands.ListExternalLoadBalancersCmd;1 +addExternalLoadBalancer=1 +deleteExternalLoadBalancer=1 +listExternalLoadBalancers=1 -addF5LoadBalancer = com.cloud.api.commands.AddF5LoadBalancerCmd;1 -configureF5LoadBalancer = com.cloud.api.commands.ConfigureF5LoadBalancerCmd;1 -deleteF5LoadBalancer = com.cloud.api.commands.DeleteF5LoadBalancerCmd;1 -listF5LoadBalancers = com.cloud.api.commands.ListF5LoadBalancersCmd;1 -listF5LoadBalancerNetworks = com.cloud.api.commands.ListF5LoadBalancerNetworksCmd;1 +addF5LoadBalancer=1 +configureF5LoadBalancer=1 +deleteF5LoadBalancer=1 +listF5LoadBalancers=1 +listF5LoadBalancerNetworks=1 diff --git a/client/tomcatconf/junipersrx_commands.properties.in b/client/tomcatconf/junipersrx_commands.properties.in index 57fd0893ce0..2cadc62c57e 100644 --- a/client/tomcatconf/junipersrx_commands.properties.in +++ b/client/tomcatconf/junipersrx_commands.properties.in @@ -19,12 +19,12 @@ ### Please standardize naming conventions to camel-case (even for acronyms). #### juniper srx firewall commands -addExternalFirewall = com.cloud.api.commands.AddExternalFirewallCmd;1 -deleteExternalFirewall = com.cloud.api.commands.DeleteExternalFirewallCmd;1 -listExternalFirewalls = com.cloud.api.commands.ListExternalFirewallsCmd;1 +addExternalFirewall=1 +deleteExternalFirewall=1 +listExternalFirewalls=1 -addSrxFirewall = com.cloud.api.commands.AddSrxFirewallCmd;1 -deleteSrxFirewall = com.cloud.api.commands.DeleteSrxFirewallCmd;1 -configureSrxFirewall = com.cloud.api.commands.ConfigureSrxFirewallCmd;1 -listSrxFirewalls = com.cloud.api.commands.ListSrxFirewallsCmd;1 -listSrxFirewallNetworks = com.cloud.api.commands.ListSrxFirewallNetworksCmd;1 +addSrxFirewall=1 +deleteSrxFirewall=1 +configureSrxFirewall=1 +listSrxFirewalls=1 +listSrxFirewallNetworks=1 diff --git a/client/tomcatconf/netapp_commands.properties.in b/client/tomcatconf/netapp_commands.properties.in index 21844035592..ea17ac0560b 100644 --- a/client/tomcatconf/netapp_commands.properties.in +++ b/client/tomcatconf/netapp_commands.properties.in @@ -19,15 +19,15 @@ ### Please standardize naming conventions to camel-case (even for acronyms). ####Netapp integration commands -createVolumeOnFiler=com.cloud.api.commands.netapp.CreateVolumeOnFilerCmd;15 -destroyVolumeOnFiler=com.cloud.api.commands.netapp.DestroyVolumeOnFilerCmd;15 -listVolumesOnFiler=com.cloud.api.commands.netapp.ListVolumesOnFilerCmd;15 -createLunOnFiler=com.cloud.api.commands.netapp.CreateLunCmd;15 -destroyLunOnFiler=com.cloud.api.commands.netapp.DestroyLunCmd;15 -listLunsOnFiler=com.cloud.api.commands.netapp.ListLunsCmd;15 -associateLun=com.cloud.api.commands.netapp.AssociateLunCmd;15 -dissociateLun=com.cloud.api.commands.netapp.DissociateLunCmd;15 -createPool=com.cloud.api.commands.netapp.CreateVolumePoolCmd;15 -deletePool=com.cloud.api.commands.netapp.DeleteVolumePoolCmd;15 -modifyPool=com.cloud.api.commands.netapp.ModifyVolumePoolCmd;15 -listPools=com.cloud.api.commands.netapp.ListVolumePoolsCmd;15 +createVolumeOnFiler=15 +destroyVolumeOnFiler=15 +listVolumesOnFiler=15 +createLunOnFiler=15 +destroyLunOnFiler=15 +listLunsOnFiler=15 +associateLun=15 +dissociateLun=15 +createPool=15 +deletePool=15 +modifyPool=15 +listPools=15 diff --git a/client/tomcatconf/netscalerloadbalancer_commands.properties.in b/client/tomcatconf/netscalerloadbalancer_commands.properties.in index 114e7d37cca..9eeb8da9987 100644 --- a/client/tomcatconf/netscalerloadbalancer_commands.properties.in +++ b/client/tomcatconf/netscalerloadbalancer_commands.properties.in @@ -19,8 +19,8 @@ ### Please standardize naming conventions to camel-case (even for acronyms). #### netscaler load balancer commands -addNetscalerLoadBalancer = com.cloud.api.commands.AddNetscalerLoadBalancerCmd;1 -deleteNetscalerLoadBalancer = com.cloud.api.commands.DeleteNetscalerLoadBalancerCmd;1 -configureNetscalerLoadBalancer = com.cloud.api.commands.ConfigureNetscalerLoadBalancerCmd;1 -listNetscalerLoadBalancers = com.cloud.api.commands.ListNetscalerLoadBalancersCmd;1 -listNetscalerLoadBalancerNetworks = com.cloud.api.commands.ListNetscalerLoadBalancerNetworksCmd;1 +addNetscalerLoadBalancer=1 +deleteNetscalerLoadBalancer=1 +configureNetscalerLoadBalancer=1 +listNetscalerLoadBalancers=1 +listNetscalerLoadBalancerNetworks=1 diff --git a/client/tomcatconf/nicira-nvp_commands.properties.in b/client/tomcatconf/nicira-nvp_commands.properties.in index 3a934adef67..1b2b5253394 100644 --- a/client/tomcatconf/nicira-nvp_commands.properties.in +++ b/client/tomcatconf/nicira-nvp_commands.properties.in @@ -20,10 +20,10 @@ #### nicira nvp commands -addNiciraNvpDevice = com.cloud.api.commands.AddNiciraNvpDeviceCmd;1 -deleteNiciraNvpDevice = com.cloud.api.commands.DeleteNiciraNvpDeviceCmd;1 -listNiciraNvpDevices = com.cloud.api.commands.ListNiciraNvpDevicesCmd;1 -listNiciraNvpDeviceNetworks = com.cloud.api.commands.ListNiciraNvpDeviceNetworksCmd;1 +addNiciraNvpDevice=1 +deleteNiciraNvpDevice=1 +listNiciraNvpDevices=1 +listNiciraNvpDeviceNetworks=1 # Not implemented (yet) -#configureNiciraNvpDevice = com.cloud.api.commands.ConfigureNiciraNvpDeviceCmd;1 +#configureNiciraNvpDevice=1 diff --git a/client/tomcatconf/simulator_commands.properties.in b/client/tomcatconf/simulator_commands.properties.in index d2a46997e6f..b7213a28c05 100644 --- a/client/tomcatconf/simulator_commands.properties.in +++ b/client/tomcatconf/simulator_commands.properties.in @@ -16,4 +16,4 @@ # under the License. -configureSimulator=com.cloud.api.commands.ConfigureSimulator;1 \ No newline at end of file +configureSimulator=1 diff --git a/client/tomcatconf/virtualrouter_commands.properties.in b/client/tomcatconf/virtualrouter_commands.properties.in index e8d7933462e..169496b8f4d 100644 --- a/client/tomcatconf/virtualrouter_commands.properties.in +++ b/client/tomcatconf/virtualrouter_commands.properties.in @@ -19,6 +19,6 @@ ### Please standardize naming conventions to camel-case (even for acronyms). #### router commands -createVirtualRouterElement=org.apache.cloudstack.api.command.admin.router.CreateVirtualRouterElementCmd;7 -configureVirtualRouterElement=org.apache.cloudstack.api.command.admin.router.ConfigureVirtualRouterElementCmd;7 -listVirtualRouterElements=org.apache.cloudstack.api.command.admin.router.ListVirtualRouterElementsCmd;7 +createVirtualRouterElement=7 +configureVirtualRouterElement=7 +listVirtualRouterElements=7 From 8b085d3308cd1a4bc35d3b1439660e2167f7d9e2 Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Sun, 6 Jan 2013 14:46:02 -0800 Subject: [PATCH 281/421] api: Move base template*cmd class to org.apache.cloudstack.api, fix names and annotations --- api/src/com/cloud/template/TemplateService.java | 8 ++++---- .../api/BaseListTemplateOrIsoPermissionsCmd.java} | 11 +++-------- .../cloudstack/api/BaseUpdateTemplateOrIsoCmd.java} | 4 ++-- .../api/BaseUpdateTemplateOrIsoPermissionsCmd.java} | 10 +++------- .../command/user/autoscale/CreateConditionCmd.java | 2 +- .../api/command/user/iso/ListIsoPermissionsCmd.java | 7 +++++-- .../cloudstack/api/command/user/iso/UpdateIsoCmd.java | 4 ++-- .../api/command/user/iso/UpdateIsoPermissionsCmd.java | 4 ++-- .../user/template/ListTemplatePermissionsCmd.java | 7 +++++-- .../api/command/user/template/UpdateTemplateCmd.java | 4 ++-- .../user/template/UpdateTemplatePermissionsCmd.java | 4 ++-- 11 files changed, 31 insertions(+), 34 deletions(-) rename api/src/{com/cloud/api/commands/ListTemplateOrIsoPermissionsCmd.java => org/apache/cloudstack/api/BaseListTemplateOrIsoPermissionsCmd.java} (85%) rename api/src/{com/cloud/api/commands/UpdateTemplateOrIsoCmd.java => org/apache/cloudstack/api/BaseUpdateTemplateOrIsoCmd.java} (97%) rename api/src/{com/cloud/api/commands/UpdateTemplateOrIsoPermissionsCmd.java => org/apache/cloudstack/api/BaseUpdateTemplateOrIsoPermissionsCmd.java} (92%) diff --git a/api/src/com/cloud/template/TemplateService.java b/api/src/com/cloud/template/TemplateService.java index 6fbc840b118..93e8a2576b6 100755 --- a/api/src/com/cloud/template/TemplateService.java +++ b/api/src/com/cloud/template/TemplateService.java @@ -19,15 +19,15 @@ package com.cloud.template; import java.net.URISyntaxException; import java.util.List; +import org.apache.cloudstack.api.BaseListTemplateOrIsoPermissionsCmd; +import org.apache.cloudstack.api.BaseUpdateTemplateOrIsoPermissionsCmd; import org.apache.cloudstack.api.command.user.iso.DeleteIsoCmd; import org.apache.cloudstack.api.command.user.iso.ExtractIsoCmd; import org.apache.cloudstack.api.command.user.iso.RegisterIsoCmd; import org.apache.cloudstack.api.command.user.template.*; import org.apache.cloudstack.api.command.user.template.CopyTemplateCmd; import org.apache.cloudstack.api.command.user.template.ExtractTemplateCmd; -import com.cloud.api.commands.ListTemplateOrIsoPermissionsCmd; import org.apache.cloudstack.api.command.user.template.RegisterTemplateCmd; -import com.cloud.api.commands.UpdateTemplateOrIsoPermissionsCmd; import com.cloud.exception.InternalErrorException; import com.cloud.exception.ResourceAllocationException; import com.cloud.exception.StorageUnavailableException; @@ -83,7 +83,7 @@ public interface TemplateService { VirtualMachineTemplate getTemplate(long templateId); - List listTemplatePermissions(ListTemplateOrIsoPermissionsCmd cmd); + List listTemplatePermissions(BaseListTemplateOrIsoPermissionsCmd cmd); - boolean updateTemplateOrIsoPermissions(UpdateTemplateOrIsoPermissionsCmd cmd); + boolean updateTemplateOrIsoPermissions(BaseUpdateTemplateOrIsoPermissionsCmd cmd); } diff --git a/api/src/com/cloud/api/commands/ListTemplateOrIsoPermissionsCmd.java b/api/src/org/apache/cloudstack/api/BaseListTemplateOrIsoPermissionsCmd.java similarity index 85% rename from api/src/com/cloud/api/commands/ListTemplateOrIsoPermissionsCmd.java rename to api/src/org/apache/cloudstack/api/BaseListTemplateOrIsoPermissionsCmd.java index 54bbace4493..cde2d948686 100644 --- a/api/src/com/cloud/api/commands/ListTemplateOrIsoPermissionsCmd.java +++ b/api/src/org/apache/cloudstack/api/BaseListTemplateOrIsoPermissionsCmd.java @@ -14,23 +14,18 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api; import java.util.List; -import org.apache.cloudstack.api.APICommand; import org.apache.log4j.Logger; -import org.apache.cloudstack.api.ApiConstants; -import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.response.TemplatePermissionsResponse; import com.cloud.template.VirtualMachineTemplate; import com.cloud.user.Account; import com.cloud.user.UserContext; -@APICommand(description="List template visibility and all accounts that have permissions to view this template.", responseObject=TemplatePermissionsResponse.class) -public class ListTemplateOrIsoPermissionsCmd extends BaseCmd { +public class BaseListTemplateOrIsoPermissionsCmd extends BaseCmd { public Logger s_logger = getLogger(); protected String s_name = "listtemplatepermissionsresponse"; @@ -77,7 +72,7 @@ public class ListTemplateOrIsoPermissionsCmd extends BaseCmd { } protected Logger getLogger() { - return Logger.getLogger(UpdateTemplateOrIsoPermissionsCmd.class.getName()); + return Logger.getLogger(BaseUpdateTemplateOrIsoPermissionsCmd.class.getName()); } @Override diff --git a/api/src/com/cloud/api/commands/UpdateTemplateOrIsoCmd.java b/api/src/org/apache/cloudstack/api/BaseUpdateTemplateOrIsoCmd.java similarity index 97% rename from api/src/com/cloud/api/commands/UpdateTemplateOrIsoCmd.java rename to api/src/org/apache/cloudstack/api/BaseUpdateTemplateOrIsoCmd.java index 57e8e551fbb..dd6ae007ab9 100755 --- a/api/src/com/cloud/api/commands/UpdateTemplateOrIsoCmd.java +++ b/api/src/org/apache/cloudstack/api/BaseUpdateTemplateOrIsoCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api; import org.apache.cloudstack.api.command.user.iso.UpdateIsoCmd; import org.apache.cloudstack.api.response.GuestOSResponse; @@ -25,7 +25,7 @@ import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.Parameter; -public abstract class UpdateTemplateOrIsoCmd extends BaseCmd { +public abstract class BaseUpdateTemplateOrIsoCmd extends BaseCmd { public static final Logger s_logger = Logger.getLogger(UpdateIsoCmd.class.getName()); ///////////////////////////////////////////////////// diff --git a/api/src/com/cloud/api/commands/UpdateTemplateOrIsoPermissionsCmd.java b/api/src/org/apache/cloudstack/api/BaseUpdateTemplateOrIsoPermissionsCmd.java similarity index 92% rename from api/src/com/cloud/api/commands/UpdateTemplateOrIsoPermissionsCmd.java rename to api/src/org/apache/cloudstack/api/BaseUpdateTemplateOrIsoPermissionsCmd.java index 5208e1d2f7e..aacc6efa2e0 100755 --- a/api/src/com/cloud/api/commands/UpdateTemplateOrIsoPermissionsCmd.java +++ b/api/src/org/apache/cloudstack/api/BaseUpdateTemplateOrIsoPermissionsCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api; import java.util.List; @@ -22,14 +22,10 @@ import org.apache.cloudstack.api.response.ProjectResponse; import org.apache.cloudstack.api.response.TemplateResponse; import org.apache.log4j.Logger; -import org.apache.cloudstack.api.ApiConstants; -import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.Parameter; -import org.apache.cloudstack.api.ServerApiException; import org.apache.cloudstack.api.response.SuccessResponse; import com.cloud.exception.InvalidParameterValueException; -public abstract class UpdateTemplateOrIsoPermissionsCmd extends BaseCmd { +public abstract class BaseUpdateTemplateOrIsoPermissionsCmd extends BaseCmd { public Logger s_logger = getLogger(); protected String s_name = getResponseName(); @@ -113,7 +109,7 @@ public abstract class UpdateTemplateOrIsoPermissionsCmd extends BaseCmd { } protected Logger getLogger() { - return Logger.getLogger(UpdateTemplateOrIsoPermissionsCmd.class.getName()); + return Logger.getLogger(BaseUpdateTemplateOrIsoPermissionsCmd.class.getName()); } @Override diff --git a/api/src/org/apache/cloudstack/api/command/user/autoscale/CreateConditionCmd.java b/api/src/org/apache/cloudstack/api/command/user/autoscale/CreateConditionCmd.java index 7ef9ef546d8..a9524714ffa 100644 --- a/api/src/org/apache/cloudstack/api/command/user/autoscale/CreateConditionCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/autoscale/CreateConditionCmd.java @@ -34,7 +34,7 @@ import com.cloud.exception.ResourceAllocationException; import com.cloud.network.as.Condition; import com.cloud.user.UserContext; -@APICommand(name = "createCondition ", description = "Creates a condition", responseObject = ConditionResponse.class) +@APICommand(name = "createCondition", description = "Creates a condition", responseObject = ConditionResponse.class) public class CreateConditionCmd extends BaseAsyncCreateCmd { public static final Logger s_logger = Logger.getLogger(CreateConditionCmd.class.getName()); private static final String s_name = "conditionresponse"; diff --git a/api/src/org/apache/cloudstack/api/command/user/iso/ListIsoPermissionsCmd.java b/api/src/org/apache/cloudstack/api/command/user/iso/ListIsoPermissionsCmd.java index 4ab7061a323..0ca711f4664 100644 --- a/api/src/org/apache/cloudstack/api/command/user/iso/ListIsoPermissionsCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/iso/ListIsoPermissionsCmd.java @@ -16,13 +16,16 @@ // under the License. package org.apache.cloudstack.api.command.user.iso; -import com.cloud.api.commands.ListTemplateOrIsoPermissionsCmd; +import org.apache.cloudstack.api.BaseListTemplateOrIsoPermissionsCmd; +import org.apache.cloudstack.api.APICommand; +import org.apache.cloudstack.api.response.TemplatePermissionsResponse; import org.apache.log4j.Logger; import com.cloud.storage.Storage.ImageFormat; import com.cloud.template.VirtualMachineTemplate; -public class ListIsoPermissionsCmd extends ListTemplateOrIsoPermissionsCmd { +@APICommand(name="listIsoPermissions", description="List iso visibility and all accounts that have permissions to view this iso.", responseObject=TemplatePermissionsResponse.class) +public class ListIsoPermissionsCmd extends BaseListTemplateOrIsoPermissionsCmd { protected String getResponseName() { return "listisopermissionsresponse"; } diff --git a/api/src/org/apache/cloudstack/api/command/user/iso/UpdateIsoCmd.java b/api/src/org/apache/cloudstack/api/command/user/iso/UpdateIsoCmd.java index eb368df1909..f54f8a66daa 100644 --- a/api/src/org/apache/cloudstack/api/command/user/iso/UpdateIsoCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/iso/UpdateIsoCmd.java @@ -16,7 +16,7 @@ // under the License. package org.apache.cloudstack.api.command.user.iso; -import com.cloud.api.commands.UpdateTemplateOrIsoCmd; +import org.apache.cloudstack.api.BaseUpdateTemplateOrIsoCmd; import org.apache.log4j.Logger; import org.apache.cloudstack.api.BaseCmd; @@ -27,7 +27,7 @@ import com.cloud.template.VirtualMachineTemplate; import com.cloud.user.Account; @APICommand(name = "updateIso", description="Updates an ISO file.", responseObject=TemplateResponse.class) -public class UpdateIsoCmd extends UpdateTemplateOrIsoCmd { +public class UpdateIsoCmd extends BaseUpdateTemplateOrIsoCmd { public static final Logger s_logger = Logger.getLogger(UpdateIsoCmd.class.getName()); private static final String s_name = "updateisoresponse"; diff --git a/api/src/org/apache/cloudstack/api/command/user/iso/UpdateIsoPermissionsCmd.java b/api/src/org/apache/cloudstack/api/command/user/iso/UpdateIsoPermissionsCmd.java index 4f15659a578..b7a2c5685e0 100644 --- a/api/src/org/apache/cloudstack/api/command/user/iso/UpdateIsoPermissionsCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/iso/UpdateIsoPermissionsCmd.java @@ -16,7 +16,7 @@ // under the License. package org.apache.cloudstack.api.command.user.iso; -import com.cloud.api.commands.UpdateTemplateOrIsoPermissionsCmd; +import org.apache.cloudstack.api.BaseUpdateTemplateOrIsoPermissionsCmd; import org.apache.log4j.Logger; import org.apache.cloudstack.api.APICommand; @@ -25,7 +25,7 @@ import com.cloud.template.VirtualMachineTemplate; import com.cloud.user.Account; @APICommand(name = "updateIsoPermissions", description="Updates iso permissions", responseObject=SuccessResponse.class) -public class UpdateIsoPermissionsCmd extends UpdateTemplateOrIsoPermissionsCmd { +public class UpdateIsoPermissionsCmd extends BaseUpdateTemplateOrIsoPermissionsCmd { protected String getResponseName() { return "updateisopermissionsresponse"; } diff --git a/api/src/org/apache/cloudstack/api/command/user/template/ListTemplatePermissionsCmd.java b/api/src/org/apache/cloudstack/api/command/user/template/ListTemplatePermissionsCmd.java index 7c489b2d6d5..7446195d5fb 100644 --- a/api/src/org/apache/cloudstack/api/command/user/template/ListTemplatePermissionsCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/template/ListTemplatePermissionsCmd.java @@ -16,13 +16,16 @@ // under the License. package org.apache.cloudstack.api.command.user.template; -import com.cloud.api.commands.ListTemplateOrIsoPermissionsCmd; +import org.apache.cloudstack.api.BaseListTemplateOrIsoPermissionsCmd; +import org.apache.cloudstack.api.APICommand; +import org.apache.cloudstack.api.response.TemplatePermissionsResponse; import org.apache.log4j.Logger; import com.cloud.storage.Storage.ImageFormat; import com.cloud.template.VirtualMachineTemplate; -public class ListTemplatePermissionsCmd extends ListTemplateOrIsoPermissionsCmd { +@APICommand(name = "listTemplatePermissions", description="List template visibility and all accounts that have permissions to view this template.", responseObject=TemplatePermissionsResponse.class) +public class ListTemplatePermissionsCmd extends BaseListTemplateOrIsoPermissionsCmd { protected String getResponseName() { return "listtemplatepermissionsresponse"; } diff --git a/api/src/org/apache/cloudstack/api/command/user/template/UpdateTemplateCmd.java b/api/src/org/apache/cloudstack/api/command/user/template/UpdateTemplateCmd.java index 31f375bd41b..01ea200293e 100644 --- a/api/src/org/apache/cloudstack/api/command/user/template/UpdateTemplateCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/template/UpdateTemplateCmd.java @@ -16,7 +16,7 @@ // under the License. package org.apache.cloudstack.api.command.user.template; -import com.cloud.api.commands.UpdateTemplateOrIsoCmd; +import org.apache.cloudstack.api.BaseUpdateTemplateOrIsoCmd; import org.apache.log4j.Logger; import org.apache.cloudstack.api.BaseCmd; @@ -27,7 +27,7 @@ import com.cloud.template.VirtualMachineTemplate; import com.cloud.user.Account; @APICommand(name = "updateTemplate", description="Updates attributes of a template.", responseObject=TemplateResponse.class) -public class UpdateTemplateCmd extends UpdateTemplateOrIsoCmd { +public class UpdateTemplateCmd extends BaseUpdateTemplateOrIsoCmd { public static final Logger s_logger = Logger.getLogger(UpdateTemplateCmd.class.getName()); private static final String s_name = "updatetemplateresponse"; diff --git a/api/src/org/apache/cloudstack/api/command/user/template/UpdateTemplatePermissionsCmd.java b/api/src/org/apache/cloudstack/api/command/user/template/UpdateTemplatePermissionsCmd.java index 184cabe481f..8f3e660bd1a 100644 --- a/api/src/org/apache/cloudstack/api/command/user/template/UpdateTemplatePermissionsCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/template/UpdateTemplatePermissionsCmd.java @@ -16,7 +16,7 @@ // under the License. package org.apache.cloudstack.api.command.user.template; -import com.cloud.api.commands.UpdateTemplateOrIsoPermissionsCmd; +import org.apache.cloudstack.api.BaseUpdateTemplateOrIsoPermissionsCmd; import org.apache.log4j.Logger; import org.apache.cloudstack.api.APICommand; @@ -29,7 +29,7 @@ import com.cloud.user.Account; "A private template is visible only to the owner of the template. " + "A priviledged template is a private template with account permissions added. " + "Only accounts specified under the template permissions are visible to them.") -public class UpdateTemplatePermissionsCmd extends UpdateTemplateOrIsoPermissionsCmd { +public class UpdateTemplatePermissionsCmd extends BaseUpdateTemplateOrIsoPermissionsCmd { protected String getResponseName() { return "updatetemplatepermissionsresponse"; } From e17e68f0af4bdb99f1b6c68ce7945a63aad0bc0d Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Sun, 6 Jan 2013 14:47:00 -0800 Subject: [PATCH 282/421] server: Fix base template*cmd class imports and names Signed-off-by: Rohit Yadav --- server/src/com/cloud/server/ManagementServerImpl.java | 4 ++-- server/src/com/cloud/template/TemplateManagerImpl.java | 8 ++++---- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/server/src/com/cloud/server/ManagementServerImpl.java b/server/src/com/cloud/server/ManagementServerImpl.java index b08e4a47d4b..4c0968b55e7 100755 --- a/server/src/com/cloud/server/ManagementServerImpl.java +++ b/server/src/com/cloud/server/ManagementServerImpl.java @@ -42,6 +42,7 @@ import java.util.concurrent.TimeUnit; import javax.crypto.Mac; import javax.crypto.spec.SecretKeySpec; +import org.apache.cloudstack.api.BaseUpdateTemplateOrIsoCmd; import org.apache.cloudstack.api.command.admin.cluster.ListClustersCmd; import org.apache.cloudstack.api.command.admin.config.ListCfgsByCmd; import org.apache.cloudstack.api.command.admin.resource.ListAlertsCmd; @@ -89,7 +90,6 @@ import org.apache.cloudstack.api.command.admin.systemvm.RebootSystemVmCmd; import org.apache.cloudstack.api.command.admin.systemvm.StopSystemVmCmd; import org.apache.cloudstack.api.command.admin.domain.UpdateDomainCmd; import org.apache.cloudstack.api.command.admin.host.UpdateHostPasswordCmd; -import com.cloud.api.commands.UpdateTemplateOrIsoCmd; import com.cloud.api.query.dao.DomainRouterJoinDao; import com.cloud.api.query.dao.InstanceGroupJoinDao; @@ -1462,7 +1462,7 @@ public class ManagementServerImpl implements ManagementServer { return updateTemplateOrIso(cmd); } - private VMTemplateVO updateTemplateOrIso(UpdateTemplateOrIsoCmd cmd) { + private VMTemplateVO updateTemplateOrIso(BaseUpdateTemplateOrIsoCmd cmd) { Long id = cmd.getId(); String name = cmd.getTemplateName(); String displayText = cmd.getDisplayText(); diff --git a/server/src/com/cloud/template/TemplateManagerImpl.java b/server/src/com/cloud/template/TemplateManagerImpl.java index 8bc122c0c44..d34b0bc3874 100755 --- a/server/src/com/cloud/template/TemplateManagerImpl.java +++ b/server/src/com/cloud/template/TemplateManagerImpl.java @@ -34,6 +34,8 @@ import java.util.concurrent.TimeUnit; import javax.ejb.Local; import javax.naming.ConfigurationException; +import org.apache.cloudstack.api.BaseListTemplateOrIsoPermissionsCmd; +import org.apache.cloudstack.api.BaseUpdateTemplateOrIsoPermissionsCmd; import org.apache.cloudstack.api.command.user.iso.*; import org.apache.cloudstack.api.command.user.template.*; import org.apache.log4j.Logger; @@ -47,10 +49,8 @@ import com.cloud.agent.api.storage.DestroyCommand; import com.cloud.agent.api.storage.PrimaryStorageDownloadAnswer; import com.cloud.agent.api.storage.PrimaryStorageDownloadCommand; import com.cloud.agent.api.to.SwiftTO; -import com.cloud.api.commands.ListTemplateOrIsoPermissionsCmd; import org.apache.cloudstack.api.command.user.iso.RegisterIsoCmd; import org.apache.cloudstack.api.command.user.template.RegisterTemplateCmd; -import com.cloud.api.commands.UpdateTemplateOrIsoPermissionsCmd; import com.cloud.async.AsyncJobManager; import com.cloud.async.AsyncJobVO; import com.cloud.configuration.Config; @@ -1335,7 +1335,7 @@ public class TemplateManagerImpl implements TemplateManager, Manager, TemplateSe } @Override - public List listTemplatePermissions(ListTemplateOrIsoPermissionsCmd cmd) { + public List listTemplatePermissions(BaseListTemplateOrIsoPermissionsCmd cmd) { Account caller = UserContext.current().getCaller(); Long id = cmd.getId(); @@ -1375,7 +1375,7 @@ public class TemplateManagerImpl implements TemplateManager, Manager, TemplateSe @DB @Override - public boolean updateTemplateOrIsoPermissions(UpdateTemplateOrIsoPermissionsCmd cmd) { + public boolean updateTemplateOrIsoPermissions(BaseUpdateTemplateOrIsoPermissionsCmd cmd) { Transaction txn = Transaction.currentTxn(); // Input validation From b246ed7be77e08f87e712e333d0f7a6fc6d80554 Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Sun, 6 Jan 2013 14:56:30 -0800 Subject: [PATCH 283/421] api: Fix name fields for autoscale @APICommand annotation Signed-off-by: Rohit Yadav --- .../api/command/admin/autoscale/CreateCounterCmd.java | 2 +- .../api/command/admin/autoscale/DeleteCounterCmd.java | 2 +- .../api/command/user/autoscale/DeleteConditionCmd.java | 2 +- .../api/command/user/autoscale/ListConditionsCmd.java | 2 +- .../cloudstack/api/command/user/autoscale/ListCountersCmd.java | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/api/src/org/apache/cloudstack/api/command/admin/autoscale/CreateCounterCmd.java b/api/src/org/apache/cloudstack/api/command/admin/autoscale/CreateCounterCmd.java index 7a3f8369065..7369a6f6d08 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/autoscale/CreateCounterCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/autoscale/CreateCounterCmd.java @@ -31,7 +31,7 @@ import com.cloud.event.EventTypes; import com.cloud.network.as.Counter; import com.cloud.user.Account; -@APICommand(name = "createCounter ", description = "Adds metric counter", responseObject = CounterResponse.class) +@APICommand(name = "createCounter", description = "Adds metric counter", responseObject = CounterResponse.class) public class CreateCounterCmd extends BaseAsyncCreateCmd { public static final Logger s_logger = Logger.getLogger(CreateCounterCmd.class.getName()); private static final String s_name = "counterresponse"; diff --git a/api/src/org/apache/cloudstack/api/command/admin/autoscale/DeleteCounterCmd.java b/api/src/org/apache/cloudstack/api/command/admin/autoscale/DeleteCounterCmd.java index 7a28b3c9f24..9304eeb7b93 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/autoscale/DeleteCounterCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/autoscale/DeleteCounterCmd.java @@ -32,7 +32,7 @@ import com.cloud.event.EventTypes; import com.cloud.exception.ResourceInUseException; import com.cloud.user.Account; -@APICommand(name = "deleteCounter ", description = "Deletes a counter", responseObject = SuccessResponse.class) +@APICommand(name = "deleteCounter", description = "Deletes a counter", responseObject = SuccessResponse.class) public class DeleteCounterCmd extends BaseAsyncCmd { public static final Logger s_logger = Logger.getLogger(DeleteCounterCmd.class.getName()); private static final String s_name = "deletecounterresponse"; diff --git a/api/src/org/apache/cloudstack/api/command/user/autoscale/DeleteConditionCmd.java b/api/src/org/apache/cloudstack/api/command/user/autoscale/DeleteConditionCmd.java index 1de64e0d641..a1fba2e3725 100644 --- a/api/src/org/apache/cloudstack/api/command/user/autoscale/DeleteConditionCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/autoscale/DeleteConditionCmd.java @@ -33,7 +33,7 @@ import com.cloud.exception.ResourceInUseException; import com.cloud.network.as.Condition; import com.cloud.user.Account; -@APICommand(name = "deleteCondition ", description = "Removes a condition", responseObject = SuccessResponse.class) +@APICommand(name = "deleteCondition", description = "Removes a condition", responseObject = SuccessResponse.class) public class DeleteConditionCmd extends BaseAsyncCmd { public static final Logger s_logger = Logger.getLogger(DeleteConditionCmd.class.getName()); private static final String s_name = "deleteconditionresponse"; diff --git a/api/src/org/apache/cloudstack/api/command/user/autoscale/ListConditionsCmd.java b/api/src/org/apache/cloudstack/api/command/user/autoscale/ListConditionsCmd.java index 3ed6a3af4b8..0b3ffec040c 100644 --- a/api/src/org/apache/cloudstack/api/command/user/autoscale/ListConditionsCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/autoscale/ListConditionsCmd.java @@ -32,7 +32,7 @@ import org.apache.cloudstack.api.response.CounterResponse; import org.apache.cloudstack.api.response.ListResponse; import com.cloud.network.as.Condition; -@APICommand(name = "listConditions ", description = "List Conditions for the specific user", responseObject = CounterResponse.class) +@APICommand(name = "listConditions", description = "List Conditions for the specific user", responseObject = CounterResponse.class) public class ListConditionsCmd extends BaseListAccountResourcesCmd { public static final Logger s_logger = Logger.getLogger(ListConditionsCmd.class.getName()); private static final String s_name = "listconditionsresponse"; diff --git a/api/src/org/apache/cloudstack/api/command/user/autoscale/ListCountersCmd.java b/api/src/org/apache/cloudstack/api/command/user/autoscale/ListCountersCmd.java index 8f8ceb6d148..66a38f34396 100644 --- a/api/src/org/apache/cloudstack/api/command/user/autoscale/ListCountersCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/autoscale/ListCountersCmd.java @@ -31,7 +31,7 @@ import org.apache.cloudstack.api.response.ListResponse; import com.cloud.network.as.Counter; import com.cloud.user.Account; -@APICommand(name = "listCounters ", description = "List the counters", responseObject = CounterResponse.class) +@APICommand(name = "listCounters", description = "List the counters", responseObject = CounterResponse.class) public class ListCountersCmd extends BaseListCmd { public static final Logger s_logger = Logger.getLogger(ListCountersCmd.class.getName()); private static final String s_name = "counterresponse"; From 6f6ed858399a1b9e44543ccc5d02d7ba3d8b46c4 Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Sun, 6 Jan 2013 15:01:09 -0800 Subject: [PATCH 284/421] ApiXmlDocWriter: Fix apidocs generation based on new commands.properties syntax Makes it backward compatible to old syntax as well Signed-off-by: Rohit Yadav --- .../com/cloud/api/doc/ApiXmlDocWriter.java | 37 ++++++++++++------- 1 file changed, 23 insertions(+), 14 deletions(-) diff --git a/server/src/com/cloud/api/doc/ApiXmlDocWriter.java b/server/src/com/cloud/api/doc/ApiXmlDocWriter.java index a6adcf7f7c4..b493ec4b29c 100644 --- a/server/src/com/cloud/api/doc/ApiXmlDocWriter.java +++ b/server/src/com/cloud/api/doc/ApiXmlDocWriter.java @@ -24,16 +24,7 @@ import java.io.FileWriter; import java.io.IOException; import java.io.ObjectOutputStream; import java.lang.reflect.Field; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collections; -import java.util.Enumeration; -import java.util.Iterator; -import java.util.LinkedHashMap; -import java.util.LinkedList; -import java.util.List; -import java.util.Properties; -import java.util.TreeMap; +import java.util.*; import java.util.zip.ZipEntry; import java.util.zip.ZipOutputStream; @@ -54,12 +45,14 @@ import org.apache.cloudstack.api.response.VolumeResponse; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; import com.thoughtworks.xstream.XStream; +import org.reflections.Reflections; public class ApiXmlDocWriter { public static final Logger s_logger = Logger.getLogger(ApiXmlDocWriter.class.getName()); private static final short DOMAIN_ADMIN_COMMAND = 4; private static final short USER_COMMAND = 8; + private static Map> _apiNameCmdClassMap = new HashMap>(); private static LinkedHashMap all_api_commands = new LinkedHashMap(); private static LinkedHashMap domain_admin_api_commands = new LinkedHashMap(); private static LinkedHashMap regular_user_api_commands = new LinkedHashMap(); @@ -86,6 +79,16 @@ public class ApiXmlDocWriter { } public static void main(String[] args) { + // Populate api name and cmd class mappings + Reflections reflections = new Reflections("org.apache.cloudstack.api"); + Set> cmdClasses = reflections.getTypesAnnotatedWith(APICommand.class); + reflections = new Reflections("com.cloud.api"); + cmdClasses.addAll(reflections.getTypesAnnotatedWith(APICommand.class)); + for(Class cmdClass: cmdClasses) { + String apiName = cmdClass.getAnnotation(APICommand.class).name(); + _apiNameCmdClassMap.put(apiName, cmdClass); + } + LinkedProperties preProcessedCommands = new LinkedProperties(); String[] fileNames = null; @@ -125,13 +128,19 @@ public class ApiXmlDocWriter { while (propertiesIterator.hasNext()) { String key = (String) propertiesIterator.next(); String preProcessedCommand = preProcessedCommands.getProperty(key); - String[] commandParts = preProcessedCommand.split(";"); - String commandName = commandParts[0]; + int splitIndex = preProcessedCommand.lastIndexOf(";"); + String commandRoleMask = preProcessedCommand.substring(splitIndex + 1); + Class cmdClass = _apiNameCmdClassMap.get(key); + if (cmdClass == null) { + System.out.println("Check, Null Value for key: " + key + " preProcessedCommand=" + preProcessedCommand); + continue; + } + String commandName = cmdClass.getName(); all_api_commands.put(key, commandName); short cmdPermissions = 1; - if (commandParts.length > 1 && commandParts[1] != null) { - cmdPermissions = Short.parseShort(commandParts[1]); + if (commandRoleMask != null) { + cmdPermissions = Short.parseShort(commandRoleMask); } if ((cmdPermissions & DOMAIN_ADMIN_COMMAND) != 0) { From ed0637b8c2ef16e353d8a92feed10f18fc701a96 Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Sun, 6 Jan 2013 15:30:58 -0800 Subject: [PATCH 285/421] api: Refactor move acl to org.apache.cloudstack Signed-off-by: Rohit Yadav --- api/src/com/cloud/event/Event.java | 2 +- .../exception/PermissionDeniedException.java | 2 +- api/src/com/cloud/network/IpAddress.java | 2 +- api/src/com/cloud/network/Network.java | 2 +- .../com/cloud/network/PublicIpAddress.java | 2 +- .../com/cloud/network/RemoteAccessVpn.java | 2 +- .../network/Site2SiteCustomerGateway.java | 2 +- .../cloud/network/Site2SiteVpnConnection.java | 2 +- .../cloud/network/Site2SiteVpnGateway.java | 2 +- api/src/com/cloud/network/VpnUser.java | 2 +- .../com/cloud/network/as/AutoScalePolicy.java | 2 +- .../cloud/network/as/AutoScaleVmGroup.java | 2 +- .../cloud/network/as/AutoScaleVmProfile.java | 2 +- api/src/com/cloud/network/as/Condition.java | 2 +- .../com/cloud/network/rules/FirewallRule.java | 2 +- .../cloud/network/security/SecurityGroup.java | 2 +- .../com/cloud/network/vpc/StaticRoute.java | 2 +- api/src/com/cloud/network/vpc/Vpc.java | 2 +- api/src/com/cloud/network/vpc/VpcGateway.java | 2 +- .../com/cloud/projects/ProjectInvitation.java | 2 +- api/src/com/cloud/server/ResourceTag.java | 2 +- api/src/com/cloud/storage/Snapshot.java | 2 +- api/src/com/cloud/storage/Volume.java | 2 +- .../template/VirtualMachineTemplate.java | 2 +- api/src/com/cloud/user/Account.java | 2 +- api/src/com/cloud/user/AccountService.java | 5 ++-- api/src/com/cloud/user/SSHKeyPair.java | 2 +- api/src/com/cloud/uservm/UserVm.java | 2 +- api/src/com/cloud/vm/InstanceGroup.java | 2 +- api/src/com/cloud/vm/VirtualMachine.java | 2 +- .../cloudstack}/acl/APIAccessChecker.java | 2 +- .../cloudstack}/acl/ControlledEntity.java | 2 +- .../apache/cloudstack}/acl/Role.java | 2 +- .../cloudstack}/acl/SecurityChecker.java | 2 +- .../api/command/user/vm/DeployVMCmd.java | 2 +- .../api/command/user/vm/StopVMCmd.java | 1 + client/tomcatconf/components.xml.in | 4 +-- .../acl/StaticRoleBasedAPIAccessChecker.java | 2 +- .../resources/components-example.xml | 2 +- server/src/com/cloud/acl/DomainChecker.java | 2 ++ server/src/com/cloud/api/ApiDispatcher.java | 15 ++++++----- .../src/com/cloud/api/ApiResponseHelper.java | 4 +-- server/src/com/cloud/api/ApiServer.java | 4 +-- .../com/cloud/api/query/QueryManagerImpl.java | 25 ------------------- .../api/query/vo/ControlledViewEntity.java | 2 +- .../response/SecurityGroupResultObject.java | 2 +- .../ConfigurationManagerImpl.java | 2 +- .../src/com/cloud/network/NetworkManager.java | 4 +-- .../com/cloud/network/NetworkManagerImpl.java | 15 ++--------- server/src/com/cloud/network/NetworkVO.java | 4 +-- .../network/as/AutoScaleManagerImpl.java | 2 +- .../com/cloud/network/dao/NetworkDaoImpl.java | 2 +- .../network/vpc/NetworkACLManagerImpl.java | 2 +- .../src/com/cloud/network/vpc/VpcManager.java | 2 +- .../com/cloud/network/vpc/VpcManagerImpl.java | 2 +- .../cloud/projects/ProjectManagerImpl.java | 19 +------------- .../ResourceLimitManagerImpl.java | 2 +- .../cloud/server/ManagementServerImpl.java | 2 +- .../cloud/template/TemplateManagerImpl.java | 2 +- server/src/com/cloud/user/AccountManager.java | 2 +- .../com/cloud/user/AccountManagerImpl.java | 9 +++---- .../src/com/cloud/vm/UserVmManagerImpl.java | 15 ++--------- .../cloud/network/MockNetworkManagerImpl.java | 2 +- .../cloud/user/MockAccountManagerImpl.java | 7 ++---- .../com/cloud/vpc/MockNetworkManagerImpl.java | 11 +++----- .../com/cloud/vpc/MockVpcManagerImpl.java | 4 +-- 66 files changed, 84 insertions(+), 162 deletions(-) rename api/src/{com/cloud => org/apache/cloudstack}/acl/APIAccessChecker.java (97%) rename api/src/{com/cloud => org/apache/cloudstack}/acl/ControlledEntity.java (96%) rename api/src/{com/cloud => org/apache/cloudstack}/acl/Role.java (97%) rename api/src/{com/cloud => org/apache/cloudstack}/acl/SecurityChecker.java (99%) diff --git a/api/src/com/cloud/event/Event.java b/api/src/com/cloud/event/Event.java index f869c472986..1a61636828a 100644 --- a/api/src/com/cloud/event/Event.java +++ b/api/src/com/cloud/event/Event.java @@ -18,7 +18,7 @@ package com.cloud.event; import java.util.Date; -import com.cloud.acl.ControlledEntity; +import org.apache.cloudstack.acl.ControlledEntity; import org.apache.cloudstack.api.Identity; import org.apache.cloudstack.api.InternalIdentity; diff --git a/api/src/com/cloud/exception/PermissionDeniedException.java b/api/src/com/cloud/exception/PermissionDeniedException.java index 4900afcd67a..638b762d4c4 100644 --- a/api/src/com/cloud/exception/PermissionDeniedException.java +++ b/api/src/com/cloud/exception/PermissionDeniedException.java @@ -18,7 +18,7 @@ package com.cloud.exception; import java.util.List; -import com.cloud.acl.ControlledEntity; +import org.apache.cloudstack.acl.ControlledEntity; import com.cloud.user.Account; import com.cloud.utils.SerialVersionUID; import com.cloud.utils.exception.CloudRuntimeException; diff --git a/api/src/com/cloud/network/IpAddress.java b/api/src/com/cloud/network/IpAddress.java index 0d05efbc78c..0ac7f500e2c 100644 --- a/api/src/com/cloud/network/IpAddress.java +++ b/api/src/com/cloud/network/IpAddress.java @@ -18,7 +18,7 @@ package com.cloud.network; import java.util.Date; -import com.cloud.acl.ControlledEntity; +import org.apache.cloudstack.acl.ControlledEntity; import com.cloud.utils.net.Ip; import org.apache.cloudstack.api.Identity; import org.apache.cloudstack.api.InternalIdentity; diff --git a/api/src/com/cloud/network/Network.java b/api/src/com/cloud/network/Network.java index 4801e2af97a..39a0b26c76a 100644 --- a/api/src/com/cloud/network/Network.java +++ b/api/src/com/cloud/network/Network.java @@ -16,7 +16,7 @@ // under the License. package com.cloud.network; -import com.cloud.acl.ControlledEntity; +import org.apache.cloudstack.acl.ControlledEntity; import com.cloud.network.Networks.BroadcastDomainType; import com.cloud.network.Networks.Mode; import com.cloud.network.Networks.TrafficType; diff --git a/api/src/com/cloud/network/PublicIpAddress.java b/api/src/com/cloud/network/PublicIpAddress.java index 381076662c6..21dae54202a 100644 --- a/api/src/com/cloud/network/PublicIpAddress.java +++ b/api/src/com/cloud/network/PublicIpAddress.java @@ -16,7 +16,7 @@ // under the License. package com.cloud.network; -import com.cloud.acl.ControlledEntity; +import org.apache.cloudstack.acl.ControlledEntity; import com.cloud.dc.Vlan; import org.apache.cloudstack.api.InternalIdentity; diff --git a/api/src/com/cloud/network/RemoteAccessVpn.java b/api/src/com/cloud/network/RemoteAccessVpn.java index 1fe53c44b7f..1b463309a5f 100644 --- a/api/src/com/cloud/network/RemoteAccessVpn.java +++ b/api/src/com/cloud/network/RemoteAccessVpn.java @@ -16,7 +16,7 @@ // under the License. package com.cloud.network; -import com.cloud.acl.ControlledEntity; +import org.apache.cloudstack.acl.ControlledEntity; public interface RemoteAccessVpn extends ControlledEntity { enum State { diff --git a/api/src/com/cloud/network/Site2SiteCustomerGateway.java b/api/src/com/cloud/network/Site2SiteCustomerGateway.java index 1d7467ba266..3a5438575d9 100644 --- a/api/src/com/cloud/network/Site2SiteCustomerGateway.java +++ b/api/src/com/cloud/network/Site2SiteCustomerGateway.java @@ -18,7 +18,7 @@ package com.cloud.network; import java.util.Date; -import com.cloud.acl.ControlledEntity; +import org.apache.cloudstack.acl.ControlledEntity; import org.apache.cloudstack.api.Identity; import org.apache.cloudstack.api.InternalIdentity; diff --git a/api/src/com/cloud/network/Site2SiteVpnConnection.java b/api/src/com/cloud/network/Site2SiteVpnConnection.java index 2eb73ff6ab4..810f9992d93 100644 --- a/api/src/com/cloud/network/Site2SiteVpnConnection.java +++ b/api/src/com/cloud/network/Site2SiteVpnConnection.java @@ -18,7 +18,7 @@ package com.cloud.network; import java.util.Date; -import com.cloud.acl.ControlledEntity; +import org.apache.cloudstack.acl.ControlledEntity; import org.apache.cloudstack.api.InternalIdentity; public interface Site2SiteVpnConnection extends ControlledEntity, InternalIdentity { diff --git a/api/src/com/cloud/network/Site2SiteVpnGateway.java b/api/src/com/cloud/network/Site2SiteVpnGateway.java index feb3b94de0d..81379132844 100644 --- a/api/src/com/cloud/network/Site2SiteVpnGateway.java +++ b/api/src/com/cloud/network/Site2SiteVpnGateway.java @@ -18,7 +18,7 @@ package com.cloud.network; import java.util.Date; -import com.cloud.acl.ControlledEntity; +import org.apache.cloudstack.acl.ControlledEntity; import org.apache.cloudstack.api.Identity; import org.apache.cloudstack.api.InternalIdentity; diff --git a/api/src/com/cloud/network/VpnUser.java b/api/src/com/cloud/network/VpnUser.java index 61e6bf3f355..ad84e9178d6 100644 --- a/api/src/com/cloud/network/VpnUser.java +++ b/api/src/com/cloud/network/VpnUser.java @@ -16,7 +16,7 @@ // under the License. package com.cloud.network; -import com.cloud.acl.ControlledEntity; +import org.apache.cloudstack.acl.ControlledEntity; import org.apache.cloudstack.api.Identity; import org.apache.cloudstack.api.InternalIdentity; diff --git a/api/src/com/cloud/network/as/AutoScalePolicy.java b/api/src/com/cloud/network/as/AutoScalePolicy.java index 80190361007..7f94f355921 100644 --- a/api/src/com/cloud/network/as/AutoScalePolicy.java +++ b/api/src/com/cloud/network/as/AutoScalePolicy.java @@ -17,7 +17,7 @@ package com.cloud.network.as; -import com.cloud.acl.ControlledEntity; +import org.apache.cloudstack.acl.ControlledEntity; import org.apache.cloudstack.api.InternalIdentity; public interface AutoScalePolicy extends ControlledEntity, InternalIdentity { diff --git a/api/src/com/cloud/network/as/AutoScaleVmGroup.java b/api/src/com/cloud/network/as/AutoScaleVmGroup.java index 7a32ebe5fb4..faa166d2bae 100644 --- a/api/src/com/cloud/network/as/AutoScaleVmGroup.java +++ b/api/src/com/cloud/network/as/AutoScaleVmGroup.java @@ -17,7 +17,7 @@ package com.cloud.network.as; -import com.cloud.acl.ControlledEntity; +import org.apache.cloudstack.acl.ControlledEntity; import org.apache.cloudstack.api.InternalIdentity; diff --git a/api/src/com/cloud/network/as/AutoScaleVmProfile.java b/api/src/com/cloud/network/as/AutoScaleVmProfile.java index f7dfb7c6436..3be5a3e8124 100644 --- a/api/src/com/cloud/network/as/AutoScaleVmProfile.java +++ b/api/src/com/cloud/network/as/AutoScaleVmProfile.java @@ -19,7 +19,7 @@ package com.cloud.network.as; import java.util.List; -import com.cloud.acl.ControlledEntity; +import org.apache.cloudstack.acl.ControlledEntity; import com.cloud.utils.Pair; import org.apache.cloudstack.api.InternalIdentity; diff --git a/api/src/com/cloud/network/as/Condition.java b/api/src/com/cloud/network/as/Condition.java index 3d36a1086f0..b09dc2e91a8 100644 --- a/api/src/com/cloud/network/as/Condition.java +++ b/api/src/com/cloud/network/as/Condition.java @@ -17,7 +17,7 @@ package com.cloud.network.as; -import com.cloud.acl.ControlledEntity; +import org.apache.cloudstack.acl.ControlledEntity; import org.apache.cloudstack.api.Identity; import org.apache.cloudstack.api.InternalIdentity; diff --git a/api/src/com/cloud/network/rules/FirewallRule.java b/api/src/com/cloud/network/rules/FirewallRule.java index 59f44681962..042665cdcf9 100644 --- a/api/src/com/cloud/network/rules/FirewallRule.java +++ b/api/src/com/cloud/network/rules/FirewallRule.java @@ -18,7 +18,7 @@ package com.cloud.network.rules; import java.util.List; -import com.cloud.acl.ControlledEntity; +import org.apache.cloudstack.acl.ControlledEntity; import org.apache.cloudstack.api.Identity; import org.apache.cloudstack.api.InternalIdentity; diff --git a/api/src/com/cloud/network/security/SecurityGroup.java b/api/src/com/cloud/network/security/SecurityGroup.java index b39ccc4904f..3ac0e7cea62 100644 --- a/api/src/com/cloud/network/security/SecurityGroup.java +++ b/api/src/com/cloud/network/security/SecurityGroup.java @@ -16,7 +16,7 @@ // under the License. package com.cloud.network.security; -import com.cloud.acl.ControlledEntity; +import org.apache.cloudstack.acl.ControlledEntity; import org.apache.cloudstack.api.Identity; import org.apache.cloudstack.api.InternalIdentity; diff --git a/api/src/com/cloud/network/vpc/StaticRoute.java b/api/src/com/cloud/network/vpc/StaticRoute.java index f45691f49ac..ccdbec899b8 100644 --- a/api/src/com/cloud/network/vpc/StaticRoute.java +++ b/api/src/com/cloud/network/vpc/StaticRoute.java @@ -16,7 +16,7 @@ // under the License. package com.cloud.network.vpc; -import com.cloud.acl.ControlledEntity; +import org.apache.cloudstack.acl.ControlledEntity; import org.apache.cloudstack.api.Identity; import org.apache.cloudstack.api.InternalIdentity; diff --git a/api/src/com/cloud/network/vpc/Vpc.java b/api/src/com/cloud/network/vpc/Vpc.java index d37b12e232b..9365e56dd82 100644 --- a/api/src/com/cloud/network/vpc/Vpc.java +++ b/api/src/com/cloud/network/vpc/Vpc.java @@ -16,7 +16,7 @@ // under the License. package com.cloud.network.vpc; -import com.cloud.acl.ControlledEntity; +import org.apache.cloudstack.acl.ControlledEntity; import com.cloud.network.Network; import org.apache.cloudstack.api.Identity; import org.apache.cloudstack.api.InternalIdentity; diff --git a/api/src/com/cloud/network/vpc/VpcGateway.java b/api/src/com/cloud/network/vpc/VpcGateway.java index e78422d6af9..17566160ec3 100644 --- a/api/src/com/cloud/network/vpc/VpcGateway.java +++ b/api/src/com/cloud/network/vpc/VpcGateway.java @@ -16,7 +16,7 @@ // under the License. package com.cloud.network.vpc; -import com.cloud.acl.ControlledEntity; +import org.apache.cloudstack.acl.ControlledEntity; import org.apache.cloudstack.api.Identity; import org.apache.cloudstack.api.InternalIdentity; diff --git a/api/src/com/cloud/projects/ProjectInvitation.java b/api/src/com/cloud/projects/ProjectInvitation.java index bfa35302601..ee282229034 100644 --- a/api/src/com/cloud/projects/ProjectInvitation.java +++ b/api/src/com/cloud/projects/ProjectInvitation.java @@ -18,7 +18,7 @@ package com.cloud.projects; import java.util.Date; -import com.cloud.acl.ControlledEntity; +import org.apache.cloudstack.acl.ControlledEntity; import org.apache.cloudstack.api.Identity; import org.apache.cloudstack.api.InternalIdentity; diff --git a/api/src/com/cloud/server/ResourceTag.java b/api/src/com/cloud/server/ResourceTag.java index 5e82ae43846..5ec9f0171cc 100644 --- a/api/src/com/cloud/server/ResourceTag.java +++ b/api/src/com/cloud/server/ResourceTag.java @@ -16,7 +16,7 @@ // under the License. package com.cloud.server; -import com.cloud.acl.ControlledEntity; +import org.apache.cloudstack.acl.ControlledEntity; import org.apache.cloudstack.api.Identity; import org.apache.cloudstack.api.InternalIdentity; diff --git a/api/src/com/cloud/storage/Snapshot.java b/api/src/com/cloud/storage/Snapshot.java index 5405a24d10d..99bdee6bea9 100644 --- a/api/src/com/cloud/storage/Snapshot.java +++ b/api/src/com/cloud/storage/Snapshot.java @@ -18,7 +18,7 @@ package com.cloud.storage; import java.util.Date; -import com.cloud.acl.ControlledEntity; +import org.apache.cloudstack.acl.ControlledEntity; import com.cloud.hypervisor.Hypervisor.HypervisorType; import org.apache.cloudstack.api.Identity; import org.apache.cloudstack.api.InternalIdentity; diff --git a/api/src/com/cloud/storage/Volume.java b/api/src/com/cloud/storage/Volume.java index 747f06f6e21..bfbd816d911 100755 --- a/api/src/com/cloud/storage/Volume.java +++ b/api/src/com/cloud/storage/Volume.java @@ -18,7 +18,7 @@ package com.cloud.storage; import java.util.Date; -import com.cloud.acl.ControlledEntity; +import org.apache.cloudstack.acl.ControlledEntity; import com.cloud.template.BasedOn; import com.cloud.utils.fsm.StateMachine2; import com.cloud.utils.fsm.StateObject; diff --git a/api/src/com/cloud/template/VirtualMachineTemplate.java b/api/src/com/cloud/template/VirtualMachineTemplate.java index 967429c1fec..274b7b63843 100755 --- a/api/src/com/cloud/template/VirtualMachineTemplate.java +++ b/api/src/com/cloud/template/VirtualMachineTemplate.java @@ -19,7 +19,7 @@ package com.cloud.template; import java.util.Date; import java.util.Map; -import com.cloud.acl.ControlledEntity; +import org.apache.cloudstack.acl.ControlledEntity; import com.cloud.hypervisor.Hypervisor.HypervisorType; import com.cloud.storage.Storage.ImageFormat; import com.cloud.storage.Storage.TemplateType; diff --git a/api/src/com/cloud/user/Account.java b/api/src/com/cloud/user/Account.java index b07883a3a7e..a5b3e87156d 100755 --- a/api/src/com/cloud/user/Account.java +++ b/api/src/com/cloud/user/Account.java @@ -18,7 +18,7 @@ package com.cloud.user; import java.util.Date; -import com.cloud.acl.ControlledEntity; +import org.apache.cloudstack.acl.ControlledEntity; import org.apache.cloudstack.api.Identity; import org.apache.cloudstack.api.InternalIdentity; diff --git a/api/src/com/cloud/user/AccountService.java b/api/src/com/cloud/user/AccountService.java index be4d23bb5fa..ce16f5ee063 100755 --- a/api/src/com/cloud/user/AccountService.java +++ b/api/src/com/cloud/user/AccountService.java @@ -19,14 +19,13 @@ package com.cloud.user; import java.util.List; import java.util.Map; -import com.cloud.acl.ControlledEntity; -import com.cloud.acl.SecurityChecker.AccessType; +import org.apache.cloudstack.acl.ControlledEntity; +import org.apache.cloudstack.acl.SecurityChecker.AccessType; import org.apache.cloudstack.api.command.admin.user.DeleteUserCmd; import org.apache.cloudstack.api.command.admin.user.RegisterCmd; import org.apache.cloudstack.api.command.admin.user.UpdateUserCmd; import org.apache.cloudstack.api.command.admin.account.UpdateAccountCmd; -import org.apache.cloudstack.api.command.user.account.ListAccountsCmd; import com.cloud.domain.Domain; import com.cloud.exception.ConcurrentOperationException; diff --git a/api/src/com/cloud/user/SSHKeyPair.java b/api/src/com/cloud/user/SSHKeyPair.java index 8da58e52dcf..aa20c17eb07 100644 --- a/api/src/com/cloud/user/SSHKeyPair.java +++ b/api/src/com/cloud/user/SSHKeyPair.java @@ -16,7 +16,7 @@ // under the License. package com.cloud.user; -import com.cloud.acl.ControlledEntity; +import org.apache.cloudstack.acl.ControlledEntity; import org.apache.cloudstack.api.InternalIdentity; public interface SSHKeyPair extends ControlledEntity, InternalIdentity { diff --git a/api/src/com/cloud/uservm/UserVm.java b/api/src/com/cloud/uservm/UserVm.java index 866d849748d..a587666bc8b 100755 --- a/api/src/com/cloud/uservm/UserVm.java +++ b/api/src/com/cloud/uservm/UserVm.java @@ -16,7 +16,7 @@ // under the License. package com.cloud.uservm; -import com.cloud.acl.ControlledEntity; +import org.apache.cloudstack.acl.ControlledEntity; import com.cloud.vm.VirtualMachine; /** diff --git a/api/src/com/cloud/vm/InstanceGroup.java b/api/src/com/cloud/vm/InstanceGroup.java index 4a5bc691c27..6560b4afe81 100644 --- a/api/src/com/cloud/vm/InstanceGroup.java +++ b/api/src/com/cloud/vm/InstanceGroup.java @@ -18,7 +18,7 @@ package com.cloud.vm; import java.util.Date; -import com.cloud.acl.ControlledEntity; +import org.apache.cloudstack.acl.ControlledEntity; import org.apache.cloudstack.api.Identity; import org.apache.cloudstack.api.InternalIdentity; diff --git a/api/src/com/cloud/vm/VirtualMachine.java b/api/src/com/cloud/vm/VirtualMachine.java index 6f084efdc81..cd305795478 100755 --- a/api/src/com/cloud/vm/VirtualMachine.java +++ b/api/src/com/cloud/vm/VirtualMachine.java @@ -19,7 +19,7 @@ package com.cloud.vm; import java.util.Date; import java.util.Map; -import com.cloud.acl.ControlledEntity; +import org.apache.cloudstack.acl.ControlledEntity; import org.apache.cloudstack.api.Identity; import com.cloud.hypervisor.Hypervisor.HypervisorType; import com.cloud.utils.fsm.StateMachine2; diff --git a/api/src/com/cloud/acl/APIAccessChecker.java b/api/src/org/apache/cloudstack/acl/APIAccessChecker.java similarity index 97% rename from api/src/com/cloud/acl/APIAccessChecker.java rename to api/src/org/apache/cloudstack/acl/APIAccessChecker.java index 9066e747517..3194bd11d17 100644 --- a/api/src/com/cloud/acl/APIAccessChecker.java +++ b/api/src/org/apache/cloudstack/acl/APIAccessChecker.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.acl; +package org.apache.cloudstack.acl; import java.util.Properties; diff --git a/api/src/com/cloud/acl/ControlledEntity.java b/api/src/org/apache/cloudstack/acl/ControlledEntity.java similarity index 96% rename from api/src/com/cloud/acl/ControlledEntity.java rename to api/src/org/apache/cloudstack/acl/ControlledEntity.java index 5ccd8fb2953..3e0412623e2 100644 --- a/api/src/com/cloud/acl/ControlledEntity.java +++ b/api/src/org/apache/cloudstack/acl/ControlledEntity.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.acl; +package org.apache.cloudstack.acl; import com.cloud.domain.PartOf; import com.cloud.user.OwnedBy; diff --git a/api/src/com/cloud/acl/Role.java b/api/src/org/apache/cloudstack/acl/Role.java similarity index 97% rename from api/src/com/cloud/acl/Role.java rename to api/src/org/apache/cloudstack/acl/Role.java index 801606036da..d039a6f95ff 100644 --- a/api/src/com/cloud/acl/Role.java +++ b/api/src/org/apache/cloudstack/acl/Role.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.acl; +package org.apache.cloudstack.acl; //metadata - consists of default dynamic roles in CS + any custom roles added by user public interface Role { diff --git a/api/src/com/cloud/acl/SecurityChecker.java b/api/src/org/apache/cloudstack/acl/SecurityChecker.java similarity index 99% rename from api/src/com/cloud/acl/SecurityChecker.java rename to api/src/org/apache/cloudstack/acl/SecurityChecker.java index 4559641683d..3a721fe7fcb 100644 --- a/api/src/com/cloud/acl/SecurityChecker.java +++ b/api/src/org/apache/cloudstack/acl/SecurityChecker.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.acl; +package org.apache.cloudstack.acl; import com.cloud.dc.DataCenter; import com.cloud.domain.Domain; diff --git a/api/src/org/apache/cloudstack/api/command/user/vm/DeployVMCmd.java b/api/src/org/apache/cloudstack/api/command/user/vm/DeployVMCmd.java index d08234f8ee3..349f4a12d16 100644 --- a/api/src/org/apache/cloudstack/api/command/user/vm/DeployVMCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vm/DeployVMCmd.java @@ -147,7 +147,7 @@ public class DeployVMCmd extends BaseAsyncCreateCmd { private List securityGroupNameList; @ACL(checkKeyAccess=true) - @Parameter(name = ApiConstants.IP_NETWORK_LIST, type = CommandType.MAP,entityType={Network.class,IpAddress.class}, + @Parameter(name = ApiConstants.IP_NETWORK_LIST, type = CommandType.MAP, entityType={Network.class,IpAddress.class}, description = "ip to network mapping. Can't be specified with networkIds parameter." + " Example: iptonetworklist[0].ip=10.10.10.11&iptonetworklist[0].networkid=204 - requests to" + " use ip 10.10.10.11 in network id=204") diff --git a/api/src/org/apache/cloudstack/api/command/user/vm/StopVMCmd.java b/api/src/org/apache/cloudstack/api/command/user/vm/StopVMCmd.java index af3bbaab7aa..8e589060520 100644 --- a/api/src/org/apache/cloudstack/api/command/user/vm/StopVMCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vm/StopVMCmd.java @@ -39,6 +39,7 @@ public class StopVMCmd extends BaseAsyncCmd { // ////////////// API parameters ///////////////////// // /////////////////////////////////////////////////// + @ACL @Parameter(name = ApiConstants.ID, type = CommandType.UUID, entityType=UserVmResponse.class, required = true, description = "The ID of the virtual machine") private Long id; diff --git a/client/tomcatconf/components.xml.in b/client/tomcatconf/components.xml.in index ef6274edb05..a7378bd9f49 100755 --- a/client/tomcatconf/components.xml.in +++ b/client/tomcatconf/components.xml.in @@ -53,7 +53,7 @@ under the License. true - + @@ -150,7 +150,7 @@ under the License. - + diff --git a/plugins/acl/static-role-based/src/org/apache/cloudstack/acl/StaticRoleBasedAPIAccessChecker.java b/plugins/acl/static-role-based/src/org/apache/cloudstack/acl/StaticRoleBasedAPIAccessChecker.java index aee708deee7..d39f87f1048 100644 --- a/plugins/acl/static-role-based/src/org/apache/cloudstack/acl/StaticRoleBasedAPIAccessChecker.java +++ b/plugins/acl/static-role-based/src/org/apache/cloudstack/acl/StaticRoleBasedAPIAccessChecker.java @@ -26,7 +26,7 @@ import java.util.*; import javax.ejb.Local; import javax.naming.ConfigurationException; -import com.cloud.acl.APIAccessChecker; +import org.apache.cloudstack.acl.APIAccessChecker; import org.apache.log4j.Logger; import com.cloud.exception.PermissionDeniedException; diff --git a/plugins/network-elements/dns-notifier/resources/components-example.xml b/plugins/network-elements/dns-notifier/resources/components-example.xml index 592b01c3d2a..412da0e289e 100755 --- a/plugins/network-elements/dns-notifier/resources/components-example.xml +++ b/plugins/network-elements/dns-notifier/resources/components-example.xml @@ -127,7 +127,7 @@ under the License. - + diff --git a/server/src/com/cloud/acl/DomainChecker.java b/server/src/com/cloud/acl/DomainChecker.java index 290c7bf0faf..9bb1cce8171 100755 --- a/server/src/com/cloud/acl/DomainChecker.java +++ b/server/src/com/cloud/acl/DomainChecker.java @@ -18,6 +18,8 @@ package com.cloud.acl; import javax.ejb.Local; +import org.apache.cloudstack.acl.ControlledEntity; +import org.apache.cloudstack.acl.SecurityChecker; import org.apache.cloudstack.api.BaseCmd; import com.cloud.dc.DataCenter; import com.cloud.domain.Domain; diff --git a/server/src/com/cloud/api/ApiDispatcher.java b/server/src/com/cloud/api/ApiDispatcher.java index ed60ba73529..002d31f80a5 100755 --- a/server/src/com/cloud/api/ApiDispatcher.java +++ b/server/src/com/cloud/api/ApiDispatcher.java @@ -31,11 +31,11 @@ import java.util.StringTokenizer; import java.util.regex.Matcher; import com.cloud.dao.EntityManager; +import org.apache.cloudstack.acl.ControlledEntity; +import org.apache.cloudstack.acl.Role; import org.apache.cloudstack.api.*; import org.apache.log4j.Logger; -import com.cloud.acl.ControlledEntity; -import com.cloud.acl.Role; import org.apache.cloudstack.api.BaseCmd.CommandType; import org.apache.cloudstack.api.command.user.event.ListEventsCmd; import com.cloud.async.AsyncCommandQueued; @@ -396,7 +396,6 @@ public class ApiDispatcher { } for (Field field : fields) { - PlugService plugServiceAnnotation = field.getAnnotation(PlugService.class); if(plugServiceAnnotation != null){ plugService(field, cmd); @@ -459,7 +458,7 @@ public class ApiDispatcher { // find the controlled entity DBid by uuid if (parameterAnnotation.entityType() != null) { - Class[] entityList = parameterAnnotation.entityType(); + Class[] entityList = parameterAnnotation.entityType()[0].getAnnotation(EntityReference.class).value(); for (Class entity : entityList){ if (ControlledEntity.class.isAssignableFrom(entity)) { if (s_logger.isDebugEnabled()) { @@ -529,7 +528,7 @@ public class ApiDispatcher { } - //check access on the enstities. + //check access on the entities. } private static Long translateUuidToInternalId(String uuid, Parameter annotation) @@ -603,9 +602,9 @@ public class ApiDispatcher { field.set(cmdObj, Boolean.valueOf(paramObj.toString())); break; case DATE: - // This piece of code is for maintaining backward compatibility and support both the date formats(Bug -// 9724) - // Do the date massaging for ListEventsCmd only + // This piece of code is for maintaining backward compatibility + // and support both the date formats(Bug 9724) + // Do the date messaging for ListEventsCmd only if (cmdObj instanceof ListEventsCmd) { boolean isObjInNewDateFormat = isObjInNewDateFormat(paramObj.toString()); if (isObjInNewDateFormat) { diff --git a/server/src/com/cloud/api/ApiResponseHelper.java b/server/src/com/cloud/api/ApiResponseHelper.java index ebe7abba214..d5cbb71dd9a 100755 --- a/server/src/com/cloud/api/ApiResponseHelper.java +++ b/server/src/com/cloud/api/ApiResponseHelper.java @@ -33,8 +33,8 @@ import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.ResponseGenerator; import org.apache.log4j.Logger; -import com.cloud.acl.ControlledEntity; -import com.cloud.acl.ControlledEntity.ACLType; +import org.apache.cloudstack.acl.ControlledEntity; +import org.apache.cloudstack.acl.ControlledEntity.ACLType; import org.apache.cloudstack.api.ApiConstants.HostDetails; import org.apache.cloudstack.api.ApiConstants.VMDetails; import org.apache.cloudstack.api.command.user.job.QueryAsyncJobResultCmd; diff --git a/server/src/com/cloud/api/ApiServer.java b/server/src/com/cloud/api/ApiServer.java index 223edcc4f4d..c9d456768ae 100755 --- a/server/src/com/cloud/api/ApiServer.java +++ b/server/src/com/cloud/api/ApiServer.java @@ -50,6 +50,8 @@ import javax.crypto.spec.SecretKeySpec; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; +import org.apache.cloudstack.acl.APIAccessChecker; +import org.apache.cloudstack.acl.ControlledEntity; import org.apache.cloudstack.api.*; import org.apache.cloudstack.api.command.user.account.ListAccountsCmd; import org.apache.cloudstack.api.command.user.account.ListProjectAccountsCmd; @@ -94,7 +96,6 @@ import org.apache.cloudstack.api.command.user.project.ListProjectInvitationsCmd; import org.apache.cloudstack.api.command.user.project.ListProjectsCmd; import org.apache.cloudstack.api.command.user.securitygroup.ListSecurityGroupsCmd; import org.apache.cloudstack.api.command.user.tag.ListTagsCmd; -import com.cloud.acl.ControlledEntity; import com.cloud.api.response.ApiResponseSerializer; import org.apache.cloudstack.api.response.ExceptionResponse; import org.apache.cloudstack.api.response.ListResponse; @@ -129,7 +130,6 @@ import com.cloud.utils.db.SearchCriteria; import com.cloud.utils.db.Transaction; import com.cloud.utils.exception.CSExceptionErrorCode; import com.cloud.uuididentity.dao.IdentityDao; -import com.cloud.acl.APIAccessChecker; import org.reflections.Reflections; diff --git a/server/src/com/cloud/api/query/QueryManagerImpl.java b/server/src/com/cloud/api/query/QueryManagerImpl.java index c47c1ef3375..12aaf16ef45 100644 --- a/server/src/com/cloud/api/query/QueryManagerImpl.java +++ b/server/src/com/cloud/api/query/QueryManagerImpl.java @@ -18,16 +18,12 @@ package com.cloud.api.query; import java.util.ArrayList; import java.util.Date; -import java.util.EnumSet; import java.util.List; import java.util.Map; import javax.ejb.Local; import javax.naming.ConfigurationException; -import org.apache.cloudstack.api.ResponseGenerator; -import org.apache.cloudstack.api.ApiConstants.HostDetails; -import org.apache.cloudstack.api.ApiConstants.VMDetails; import org.apache.cloudstack.api.command.admin.host.ListHostsCmd; import org.apache.cloudstack.api.command.admin.router.ListRoutersCmd; import org.apache.cloudstack.api.command.admin.user.ListUsersCmd; @@ -60,9 +56,6 @@ import org.apache.cloudstack.api.response.VolumeResponse; import org.apache.cloudstack.query.QueryService; import org.apache.log4j.Logger; -import com.cloud.acl.ControlledEntity; -import com.cloud.api.ApiDBUtils; -import com.cloud.api.ApiResponseHelper; import com.cloud.api.query.dao.AccountJoinDao; import com.cloud.api.query.dao.AsyncJobJoinDao; import com.cloud.api.query.dao.DomainRouterJoinDao; @@ -90,8 +83,6 @@ import com.cloud.api.query.vo.SecurityGroupJoinVO; import com.cloud.api.query.vo.UserAccountJoinVO; import com.cloud.api.query.vo.UserVmJoinVO; import com.cloud.api.query.vo.VolumeJoinVO; -import com.cloud.async.AsyncJob; -import com.cloud.async.AsyncJobVO; import com.cloud.domain.Domain; import com.cloud.domain.DomainVO; import com.cloud.domain.dao.DomainDao; @@ -99,34 +90,20 @@ import com.cloud.event.dao.EventJoinDao; import com.cloud.exception.InvalidParameterValueException; import com.cloud.exception.PermissionDeniedException; import com.cloud.ha.HighAvailabilityManager; -import com.cloud.host.Host; -import com.cloud.host.HostTagVO; -import com.cloud.host.HostVO; import com.cloud.hypervisor.Hypervisor.HypervisorType; -import com.cloud.network.IPAddressVO; import com.cloud.network.security.SecurityGroupVMMapVO; import com.cloud.network.security.dao.SecurityGroupVMMapDao; import com.cloud.projects.ProjectInvitation; import com.cloud.projects.Project.ListProjectResourcesCriteria; import com.cloud.projects.Project; -import com.cloud.projects.ProjectInvitationVO; import com.cloud.projects.ProjectManager; -import com.cloud.projects.ProjectService; import com.cloud.projects.dao.ProjectAccountDao; import com.cloud.projects.dao.ProjectDao; import com.cloud.server.Criteria; -import com.cloud.server.ResourceTag.TaggedResourceType; -import com.cloud.storage.DiskOfferingVO; -import com.cloud.storage.Snapshot; import com.cloud.storage.Volume; -import com.cloud.storage.VolumeVO; -import com.cloud.tags.ResourceTagVO; import com.cloud.user.Account; import com.cloud.user.AccountManager; -import com.cloud.user.AccountManagerImpl; -import com.cloud.user.AccountService; import com.cloud.user.AccountVO; -import com.cloud.user.DomainManager; import com.cloud.user.UserContext; import com.cloud.user.dao.AccountDao; import com.cloud.utils.DateUtil; @@ -135,13 +112,11 @@ import com.cloud.utils.Ternary; import com.cloud.utils.component.Inject; import com.cloud.utils.component.Manager; import com.cloud.utils.db.Filter; -import com.cloud.utils.db.JoinBuilder; import com.cloud.utils.db.SearchBuilder; import com.cloud.utils.db.SearchCriteria; import com.cloud.utils.db.SearchCriteria.Func; import com.cloud.utils.db.SearchCriteria.Op; import com.cloud.vm.UserVmVO; -import com.cloud.vm.VMInstanceVO; import com.cloud.vm.VirtualMachine; import com.cloud.vm.dao.UserVmDao; diff --git a/server/src/com/cloud/api/query/vo/ControlledViewEntity.java b/server/src/com/cloud/api/query/vo/ControlledViewEntity.java index b989502a8f3..12557504807 100644 --- a/server/src/com/cloud/api/query/vo/ControlledViewEntity.java +++ b/server/src/com/cloud/api/query/vo/ControlledViewEntity.java @@ -16,7 +16,7 @@ // under the License. package com.cloud.api.query.vo; -import com.cloud.acl.ControlledEntity; +import org.apache.cloudstack.acl.ControlledEntity; import org.apache.cloudstack.api.Identity; import org.apache.cloudstack.api.InternalIdentity; diff --git a/server/src/com/cloud/api/response/SecurityGroupResultObject.java b/server/src/com/cloud/api/response/SecurityGroupResultObject.java index 6fa59b89aa8..aab13cdc529 100644 --- a/server/src/com/cloud/api/response/SecurityGroupResultObject.java +++ b/server/src/com/cloud/api/response/SecurityGroupResultObject.java @@ -21,7 +21,7 @@ import java.util.HashMap; import java.util.List; import java.util.Map; -import com.cloud.acl.ControlledEntity; +import org.apache.cloudstack.acl.ControlledEntity; import com.cloud.api.ApiDBUtils; import com.cloud.network.security.SecurityGroup; import com.cloud.network.security.SecurityGroupRules; diff --git a/server/src/com/cloud/configuration/ConfigurationManagerImpl.java b/server/src/com/cloud/configuration/ConfigurationManagerImpl.java index a751880d510..2e20c134b54 100755 --- a/server/src/com/cloud/configuration/ConfigurationManagerImpl.java +++ b/server/src/com/cloud/configuration/ConfigurationManagerImpl.java @@ -58,7 +58,7 @@ import org.apache.cloudstack.api.command.admin.vlan.DeleteVlanIpRangeCmd; import org.apache.cloudstack.api.command.user.network.ListNetworkOfferingsCmd; import org.apache.log4j.Logger; -import com.cloud.acl.SecurityChecker; +import org.apache.cloudstack.acl.SecurityChecker; import com.cloud.alert.AlertManager; import org.apache.cloudstack.api.ApiConstants.LDAPParams; import com.cloud.api.ApiDBUtils; diff --git a/server/src/com/cloud/network/NetworkManager.java b/server/src/com/cloud/network/NetworkManager.java index ef0d4c599df..0ca28f889ba 100755 --- a/server/src/com/cloud/network/NetworkManager.java +++ b/server/src/com/cloud/network/NetworkManager.java @@ -21,7 +21,7 @@ import java.util.List; import java.util.Map; import java.util.Set; -import com.cloud.acl.ControlledEntity.ACLType; +import org.apache.cloudstack.acl.ControlledEntity.ACLType; import com.cloud.dc.DataCenter; import com.cloud.dc.Vlan; import com.cloud.dc.Vlan.VlanType; @@ -48,12 +48,10 @@ import com.cloud.network.element.StaticNatServiceProvider; import com.cloud.network.element.UserDataServiceProvider; import com.cloud.network.guru.NetworkGuru; import com.cloud.network.rules.FirewallRule; -import com.cloud.network.rules.FirewallRule.Purpose; import com.cloud.network.rules.StaticNat; import com.cloud.offering.NetworkOffering; import com.cloud.offerings.NetworkOfferingVO; import com.cloud.user.Account; -import com.cloud.uservm.UserVm; import com.cloud.utils.Pair; import com.cloud.vm.Nic; import com.cloud.vm.NicProfile; diff --git a/server/src/com/cloud/network/NetworkManagerImpl.java b/server/src/com/cloud/network/NetworkManagerImpl.java index 39f807951ee..c5003760b68 100755 --- a/server/src/com/cloud/network/NetworkManagerImpl.java +++ b/server/src/com/cloud/network/NetworkManagerImpl.java @@ -46,8 +46,8 @@ import org.apache.cloudstack.api.command.user.network.CreateNetworkCmd; import org.apache.cloudstack.api.command.user.network.RestartNetworkCmd; import org.apache.log4j.Logger; -import com.cloud.acl.ControlledEntity.ACLType; -import com.cloud.acl.SecurityChecker.AccessType; +import org.apache.cloudstack.acl.ControlledEntity.ACLType; +import org.apache.cloudstack.acl.SecurityChecker.AccessType; import com.cloud.agent.AgentManager; import com.cloud.agent.Listener; import com.cloud.agent.api.*; @@ -167,19 +167,8 @@ import com.cloud.vm.dao.NicDao; import com.cloud.vm.dao.UserVmDao; import com.cloud.vm.dao.VMInstanceDao; import edu.emory.mathcs.backport.java.util.Collections; -import org.apache.log4j.Logger; -import javax.ejb.Local; -import javax.naming.ConfigurationException; -import java.net.URI; -import java.security.InvalidParameterException; -import java.sql.PreparedStatement; -import java.sql.ResultSet; -import java.sql.SQLException; import java.util.*; -import java.util.concurrent.Executors; -import java.util.concurrent.ScheduledExecutorService; -import java.util.concurrent.TimeUnit; /** * NetworkManagerImpl implements NetworkManager. diff --git a/server/src/com/cloud/network/NetworkVO.java b/server/src/com/cloud/network/NetworkVO.java index 818f44c6462..14b643b29b7 100644 --- a/server/src/com/cloud/network/NetworkVO.java +++ b/server/src/com/cloud/network/NetworkVO.java @@ -29,15 +29,13 @@ import javax.persistence.Table; import javax.persistence.TableGenerator; import javax.persistence.Transient; -import com.cloud.acl.ControlledEntity; -import org.apache.cloudstack.api.Identity; +import org.apache.cloudstack.acl.ControlledEntity; import com.cloud.network.Networks.BroadcastDomainType; import com.cloud.network.Networks.Mode; import com.cloud.network.Networks.TrafficType; import com.cloud.utils.NumbersUtil; import com.cloud.utils.db.GenericDao; import com.cloud.utils.net.NetUtils; -import org.apache.cloudstack.api.InternalIdentity; /** * NetworkConfigurationVO contains information about a specific network. diff --git a/server/src/com/cloud/network/as/AutoScaleManagerImpl.java b/server/src/com/cloud/network/as/AutoScaleManagerImpl.java index d52657ae816..034638d5b64 100644 --- a/server/src/com/cloud/network/as/AutoScaleManagerImpl.java +++ b/server/src/com/cloud/network/as/AutoScaleManagerImpl.java @@ -25,11 +25,11 @@ import java.util.Map; import javax.ejb.Local; import javax.naming.ConfigurationException; +import org.apache.cloudstack.acl.ControlledEntity; import org.apache.cloudstack.api.command.admin.autoscale.CreateCounterCmd; import org.apache.cloudstack.api.command.user.autoscale.*; import org.apache.log4j.Logger; -import com.cloud.acl.ControlledEntity; import org.apache.cloudstack.api.ApiConstants; import com.cloud.api.ApiDBUtils; import com.cloud.api.ApiDispatcher; diff --git a/server/src/com/cloud/network/dao/NetworkDaoImpl.java b/server/src/com/cloud/network/dao/NetworkDaoImpl.java index 27ae3a3c7c6..29e2f818d55 100644 --- a/server/src/com/cloud/network/dao/NetworkDaoImpl.java +++ b/server/src/com/cloud/network/dao/NetworkDaoImpl.java @@ -23,7 +23,7 @@ import java.util.Random; import javax.ejb.Local; import javax.persistence.TableGenerator; -import com.cloud.acl.ControlledEntity.ACLType; +import org.apache.cloudstack.acl.ControlledEntity.ACLType; import com.cloud.network.Network; import com.cloud.network.Network.GuestType; import com.cloud.network.Network.Provider; diff --git a/server/src/com/cloud/network/vpc/NetworkACLManagerImpl.java b/server/src/com/cloud/network/vpc/NetworkACLManagerImpl.java index fcac5b7eb92..4697acb17ac 100644 --- a/server/src/com/cloud/network/vpc/NetworkACLManagerImpl.java +++ b/server/src/com/cloud/network/vpc/NetworkACLManagerImpl.java @@ -26,7 +26,7 @@ import javax.naming.ConfigurationException; import org.apache.cloudstack.api.command.user.network.ListNetworkACLsCmd; import org.apache.log4j.Logger; -import com.cloud.acl.SecurityChecker.AccessType; +import org.apache.cloudstack.acl.SecurityChecker.AccessType; import com.cloud.event.ActionEvent; import com.cloud.event.EventTypes; import com.cloud.exception.InvalidParameterValueException; diff --git a/server/src/com/cloud/network/vpc/VpcManager.java b/server/src/com/cloud/network/vpc/VpcManager.java index 9d7aaa8152b..8d49aa1615c 100644 --- a/server/src/com/cloud/network/vpc/VpcManager.java +++ b/server/src/com/cloud/network/vpc/VpcManager.java @@ -18,7 +18,7 @@ package com.cloud.network.vpc; import java.util.List; -import com.cloud.acl.ControlledEntity.ACLType; +import org.apache.cloudstack.acl.ControlledEntity.ACLType; import com.cloud.exception.ConcurrentOperationException; import com.cloud.exception.InsufficientAddressCapacityException; import com.cloud.exception.InsufficientCapacityException; diff --git a/server/src/com/cloud/network/vpc/VpcManagerImpl.java b/server/src/com/cloud/network/vpc/VpcManagerImpl.java index b24bf3f4f53..7448cc3cadc 100644 --- a/server/src/com/cloud/network/vpc/VpcManagerImpl.java +++ b/server/src/com/cloud/network/vpc/VpcManagerImpl.java @@ -33,7 +33,7 @@ import javax.naming.ConfigurationException; import org.apache.cloudstack.api.command.user.vpc.ListStaticRoutesCmd; import org.apache.log4j.Logger; -import com.cloud.acl.ControlledEntity.ACLType; +import org.apache.cloudstack.acl.ControlledEntity.ACLType; import org.apache.cloudstack.api.command.user.vpc.ListPrivateGatewaysCmd; import com.cloud.configuration.Config; import com.cloud.configuration.ConfigurationManager; diff --git a/server/src/com/cloud/projects/ProjectManagerImpl.java b/server/src/com/cloud/projects/ProjectManagerImpl.java index 4fbbc7d2254..15d36750ee4 100755 --- a/server/src/com/cloud/projects/ProjectManagerImpl.java +++ b/server/src/com/cloud/projects/ProjectManagerImpl.java @@ -17,7 +17,6 @@ package com.cloud.projects; import java.io.UnsupportedEncodingException; -import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.Map; @@ -40,19 +39,14 @@ import javax.naming.ConfigurationException; import org.apache.log4j.Logger; -import com.cloud.acl.SecurityChecker.AccessType; +import org.apache.cloudstack.acl.SecurityChecker.AccessType; import com.cloud.api.query.dao.ProjectAccountJoinDao; import com.cloud.api.query.dao.ProjectInvitationJoinDao; import com.cloud.api.query.dao.ProjectJoinDao; -import com.cloud.api.query.vo.ProjectAccountJoinVO; -import com.cloud.api.query.vo.ProjectInvitationJoinVO; -import com.cloud.api.query.vo.ProjectJoinVO; -import com.cloud.api.query.vo.UserVmJoinVO; import com.cloud.configuration.Config; import com.cloud.configuration.ConfigurationManager; import com.cloud.configuration.Resource.ResourceType; import com.cloud.configuration.dao.ConfigurationDao; -import com.cloud.domain.DomainVO; import com.cloud.domain.dao.DomainDao; import com.cloud.event.ActionEvent; import com.cloud.event.EventTypes; @@ -61,14 +55,11 @@ import com.cloud.exception.InvalidParameterValueException; import com.cloud.exception.PermissionDeniedException; import com.cloud.exception.ResourceAllocationException; import com.cloud.exception.ResourceUnavailableException; -import com.cloud.projects.Project.ListProjectResourcesCriteria; import com.cloud.projects.Project.State; import com.cloud.projects.ProjectAccount.Role; import com.cloud.projects.dao.ProjectAccountDao; import com.cloud.projects.dao.ProjectDao; import com.cloud.projects.dao.ProjectInvitationDao; -import com.cloud.server.ResourceTag.TaggedResourceType; -import com.cloud.tags.ResourceTagVO; import com.cloud.tags.dao.ResourceTagDao; import com.cloud.user.Account; import com.cloud.user.AccountManager; @@ -80,18 +71,10 @@ import com.cloud.user.UserContext; import com.cloud.user.dao.AccountDao; import com.cloud.utils.DateUtil; import com.cloud.utils.NumbersUtil; -import com.cloud.utils.Pair; -import com.cloud.utils.Ternary; import com.cloud.utils.component.Inject; import com.cloud.utils.component.Manager; import com.cloud.utils.concurrency.NamedThreadFactory; import com.cloud.utils.db.DB; -import com.cloud.utils.db.Filter; -import com.cloud.utils.db.JoinBuilder; -import com.cloud.utils.db.SearchBuilder; -import com.cloud.utils.db.SearchCriteria; -import com.cloud.utils.db.SearchCriteria.Func; -import com.cloud.utils.db.SearchCriteria.Op; import com.cloud.utils.db.Transaction; import com.cloud.utils.exception.CloudRuntimeException; import com.sun.mail.smtp.SMTPMessage; diff --git a/server/src/com/cloud/resourcelimit/ResourceLimitManagerImpl.java b/server/src/com/cloud/resourcelimit/ResourceLimitManagerImpl.java index 92be18bae78..c17b0ea83da 100755 --- a/server/src/com/cloud/resourcelimit/ResourceLimitManagerImpl.java +++ b/server/src/com/cloud/resourcelimit/ResourceLimitManagerImpl.java @@ -30,7 +30,7 @@ import javax.naming.ConfigurationException; import org.apache.log4j.Logger; -import com.cloud.acl.SecurityChecker.AccessType; +import org.apache.cloudstack.acl.SecurityChecker.AccessType; import com.cloud.alert.AlertManager; import com.cloud.configuration.Config; import com.cloud.configuration.Resource; diff --git a/server/src/com/cloud/server/ManagementServerImpl.java b/server/src/com/cloud/server/ManagementServerImpl.java index 4c0968b55e7..22ae1799948 100755 --- a/server/src/com/cloud/server/ManagementServerImpl.java +++ b/server/src/com/cloud/server/ManagementServerImpl.java @@ -67,7 +67,7 @@ import org.apache.cloudstack.api.command.user.zone.ListZonesByCmd; import org.apache.commons.codec.binary.Base64; import org.apache.log4j.Logger; -import com.cloud.acl.SecurityChecker.AccessType; +import org.apache.cloudstack.acl.SecurityChecker.AccessType; import com.cloud.agent.AgentManager; import com.cloud.agent.api.GetVncPortAnswer; import com.cloud.agent.api.GetVncPortCommand; diff --git a/server/src/com/cloud/template/TemplateManagerImpl.java b/server/src/com/cloud/template/TemplateManagerImpl.java index d34b0bc3874..1372111eac3 100755 --- a/server/src/com/cloud/template/TemplateManagerImpl.java +++ b/server/src/com/cloud/template/TemplateManagerImpl.java @@ -40,7 +40,7 @@ import org.apache.cloudstack.api.command.user.iso.*; import org.apache.cloudstack.api.command.user.template.*; import org.apache.log4j.Logger; -import com.cloud.acl.SecurityChecker.AccessType; +import org.apache.cloudstack.acl.SecurityChecker.AccessType; import com.cloud.agent.AgentManager; import com.cloud.agent.api.Answer; import com.cloud.agent.api.downloadTemplateFromSwiftToSecondaryStorageCommand; diff --git a/server/src/com/cloud/user/AccountManager.java b/server/src/com/cloud/user/AccountManager.java index 3e5e1764281..9ca4721187c 100755 --- a/server/src/com/cloud/user/AccountManager.java +++ b/server/src/com/cloud/user/AccountManager.java @@ -19,7 +19,7 @@ package com.cloud.user; import java.util.List; import java.util.Map; -import com.cloud.acl.ControlledEntity; +import org.apache.cloudstack.acl.ControlledEntity; import com.cloud.api.query.vo.ControlledViewEntity; import com.cloud.exception.ConcurrentOperationException; import com.cloud.exception.ResourceUnavailableException; diff --git a/server/src/com/cloud/user/AccountManagerImpl.java b/server/src/com/cloud/user/AccountManagerImpl.java index 6a498c20ae8..c6a7d51f08d 100755 --- a/server/src/com/cloud/user/AccountManagerImpl.java +++ b/server/src/com/cloud/user/AccountManagerImpl.java @@ -36,22 +36,20 @@ import javax.crypto.spec.SecretKeySpec; import javax.ejb.Local; import javax.naming.ConfigurationException; +import org.apache.cloudstack.acl.ControlledEntity; +import org.apache.cloudstack.acl.SecurityChecker; import org.apache.cloudstack.api.command.admin.account.UpdateAccountCmd; import org.apache.cloudstack.api.command.admin.user.RegisterCmd; import org.apache.commons.codec.binary.Base64; import org.apache.log4j.Logger; -import com.cloud.acl.ControlledEntity; - -import com.cloud.acl.SecurityChecker; -import com.cloud.acl.SecurityChecker.AccessType; +import org.apache.cloudstack.acl.SecurityChecker.AccessType; import com.cloud.api.ApiDBUtils; import com.cloud.api.query.dao.UserAccountJoinDao; import com.cloud.api.query.vo.ControlledViewEntity; import org.apache.cloudstack.api.command.admin.user.DeleteUserCmd; -import org.apache.cloudstack.api.command.user.account.ListAccountsCmd; import org.apache.cloudstack.api.command.admin.user.UpdateUserCmd; import com.cloud.configuration.Config; import com.cloud.configuration.ConfigurationManager; @@ -121,7 +119,6 @@ import com.cloud.utils.component.Inject; import com.cloud.utils.component.Manager; import com.cloud.utils.concurrency.NamedThreadFactory; import com.cloud.utils.db.DB; -import com.cloud.utils.db.Filter; import com.cloud.utils.db.GlobalLock; import com.cloud.utils.db.JoinBuilder; import com.cloud.utils.db.SearchBuilder; diff --git a/server/src/com/cloud/vm/UserVmManagerImpl.java b/server/src/com/cloud/vm/UserVmManagerImpl.java index 12645fad9b1..dd789f455da 100755 --- a/server/src/com/cloud/vm/UserVmManagerImpl.java +++ b/server/src/com/cloud/vm/UserVmManagerImpl.java @@ -40,8 +40,8 @@ import org.apache.cloudstack.api.command.user.volume.DetachVolumeCmd; import org.apache.commons.codec.binary.Base64; import org.apache.log4j.Logger; -import com.cloud.acl.ControlledEntity.ACLType; -import com.cloud.acl.SecurityChecker.AccessType; +import org.apache.cloudstack.acl.ControlledEntity.ACLType; +import org.apache.cloudstack.acl.SecurityChecker.AccessType; import com.cloud.agent.AgentManager; import com.cloud.agent.api.*; import com.cloud.agent.api.storage.CreatePrivateTemplateAnswer; @@ -58,7 +58,6 @@ import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.command.admin.vm.AssignVMCmd; import org.apache.cloudstack.api.command.user.vm.DeployVMCmd; import org.apache.cloudstack.api.command.user.vm.DestroyVMCmd; -import org.apache.cloudstack.api.command.user.vm.ListVMsCmd; import org.apache.cloudstack.api.command.user.vm.RebootVMCmd; import org.apache.cloudstack.api.command.admin.vm.RecoverVMCmd; import org.apache.cloudstack.api.command.user.vm.ResetVMPasswordCmd; @@ -147,7 +146,6 @@ import com.cloud.uservm.UserVm; import com.cloud.utils.NumbersUtil; import com.cloud.utils.Pair; import com.cloud.utils.PasswordGenerator; -import com.cloud.utils.Ternary; import com.cloud.utils.component.ComponentLocator; import com.cloud.utils.component.Inject; import com.cloud.utils.component.Manager; @@ -166,15 +164,6 @@ import com.cloud.utils.fsm.NoTransitionException; import com.cloud.utils.net.NetUtils; import com.cloud.vm.VirtualMachine.State; import com.cloud.vm.dao.*; -import org.apache.commons.codec.binary.Base64; -import org.apache.log4j.Logger; - -import javax.ejb.Local; -import javax.naming.ConfigurationException; -import java.util.*; -import java.util.concurrent.Executors; -import java.util.concurrent.ScheduledExecutorService; -import java.util.concurrent.TimeUnit; @Local(value = { UserVmManager.class, UserVmService.class }) public class UserVmManagerImpl implements UserVmManager, UserVmService, Manager { diff --git a/server/test/com/cloud/network/MockNetworkManagerImpl.java b/server/test/com/cloud/network/MockNetworkManagerImpl.java index 00fdd9622c5..26a6e60f714 100755 --- a/server/test/com/cloud/network/MockNetworkManagerImpl.java +++ b/server/test/com/cloud/network/MockNetworkManagerImpl.java @@ -16,7 +16,7 @@ // under the License. package com.cloud.network; -import com.cloud.acl.ControlledEntity.ACLType; +import org.apache.cloudstack.acl.ControlledEntity.ACLType; import org.apache.cloudstack.api.command.admin.usage.ListTrafficTypeImplementorsCmd; import org.apache.cloudstack.api.command.user.network.CreateNetworkCmd; import org.apache.cloudstack.api.command.user.network.ListNetworksCmd; diff --git a/server/test/com/cloud/user/MockAccountManagerImpl.java b/server/test/com/cloud/user/MockAccountManagerImpl.java index 4a4196e1c77..ae5d0e5de4b 100644 --- a/server/test/com/cloud/user/MockAccountManagerImpl.java +++ b/server/test/com/cloud/user/MockAccountManagerImpl.java @@ -22,15 +22,12 @@ import java.util.Map; import javax.ejb.Local; import javax.naming.ConfigurationException; -import com.cloud.acl.ControlledEntity; -import com.cloud.acl.SecurityChecker.AccessType; +import org.apache.cloudstack.acl.ControlledEntity; +import org.apache.cloudstack.acl.SecurityChecker.AccessType; import com.cloud.api.query.vo.ControlledViewEntity; -import com.cloud.api.query.vo.UserAccountJoinVO; import org.apache.cloudstack.api.command.admin.user.DeleteUserCmd; -import org.apache.cloudstack.api.command.admin.user.ListUsersCmd; import org.apache.cloudstack.api.command.admin.user.RegisterCmd; -import org.apache.cloudstack.api.command.user.account.ListAccountsCmd; import org.apache.cloudstack.api.command.admin.account.UpdateAccountCmd; import org.apache.cloudstack.api.command.admin.user.UpdateUserCmd; diff --git a/server/test/com/cloud/vpc/MockNetworkManagerImpl.java b/server/test/com/cloud/vpc/MockNetworkManagerImpl.java index c778d4504c9..8cb9dd53948 100644 --- a/server/test/com/cloud/vpc/MockNetworkManagerImpl.java +++ b/server/test/com/cloud/vpc/MockNetworkManagerImpl.java @@ -29,7 +29,7 @@ import org.apache.cloudstack.api.command.admin.usage.ListTrafficTypeImplementors import org.apache.cloudstack.api.command.user.network.ListNetworksCmd; import org.apache.log4j.Logger; -import com.cloud.acl.ControlledEntity.ACLType; +import org.apache.cloudstack.acl.ControlledEntity.ACLType; import org.apache.cloudstack.api.command.user.network.CreateNetworkCmd; import org.apache.cloudstack.api.command.user.network.RestartNetworkCmd; import com.cloud.dc.DataCenter; @@ -70,11 +70,6 @@ import com.cloud.utils.component.Inject; import com.cloud.utils.component.Manager; import com.cloud.vm.*; import com.cloud.vpc.dao.MockVpcVirtualRouterElement; -import org.apache.log4j.Logger; - -import javax.ejb.Local; -import javax.naming.ConfigurationException; -import java.util.*; @Local(value = { NetworkManager.class, NetworkService.class }) public class MockNetworkManagerImpl implements NetworkManager, Manager{ @@ -541,7 +536,7 @@ public class MockNetworkManagerImpl implements NetworkManager, Manager{ } /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#setupNetwork(com.cloud.user.Account, com.cloud.offerings.NetworkOfferingVO, com.cloud.network.Network, com.cloud.deploy.DeploymentPlan, java.lang.String, java.lang.String, boolean, java.lang.Long, com.cloud.acl.ControlledEntity.ACLType, java.lang.Boolean, java.lang.Long) + * @see com.cloud.network.NetworkManager#setupNetwork(com.cloud.user.Account, com.cloud.offerings.NetworkOfferingVO, com.cloud.network.Network, com.cloud.deploy.DeploymentPlan, java.lang.String, java.lang.String, boolean, java.lang.Long, org.apache.cloudstack.acl.ControlledEntity.ACLType, java.lang.Boolean, java.lang.Long) */ @Override public List setupNetwork(Account owner, NetworkOfferingVO offering, Network predefined, DeploymentPlan plan, String name, String displayText, boolean errorIfAlreadySetup, Long domainId, ACLType aclType, @@ -733,7 +728,7 @@ public class MockNetworkManagerImpl implements NetworkManager, Manager{ } /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#createGuestNetwork(long, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, com.cloud.user.Account, java.lang.Long, com.cloud.network.PhysicalNetwork, long, com.cloud.acl.ControlledEntity.ACLType, java.lang.Boolean, java.lang.Long) + * @see com.cloud.network.NetworkManager#createGuestNetwork(long, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, com.cloud.user.Account, java.lang.Long, com.cloud.network.PhysicalNetwork, long, org.apache.cloudstack.acl.ControlledEntity.ACLType, java.lang.Boolean, java.lang.Long) */ @Override public Network createGuestNetwork(long networkOfferingId, String name, String displayText, String gateway, String cidr, String vlanId, String networkDomain, Account owner, Long domainId, diff --git a/server/test/com/cloud/vpc/MockVpcManagerImpl.java b/server/test/com/cloud/vpc/MockVpcManagerImpl.java index 090fc240bc6..25799d19b9e 100644 --- a/server/test/com/cloud/vpc/MockVpcManagerImpl.java +++ b/server/test/com/cloud/vpc/MockVpcManagerImpl.java @@ -23,7 +23,7 @@ import java.util.Set; import javax.ejb.Local; import javax.naming.ConfigurationException; -import com.cloud.acl.ControlledEntity.ACLType; +import org.apache.cloudstack.acl.ControlledEntity.ACLType; import org.apache.cloudstack.api.command.user.vpc.ListPrivateGatewaysCmd; import org.apache.cloudstack.api.command.user.vpc.ListStaticRoutesCmd; import com.cloud.exception.ConcurrentOperationException; @@ -395,7 +395,7 @@ public class MockVpcManagerImpl implements VpcManager, Manager{ } /* (non-Javadoc) - * @see com.cloud.network.vpc.VpcManager#createVpcGuestNetwork(long, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, com.cloud.user.Account, java.lang.Long, com.cloud.network.PhysicalNetwork, long, com.cloud.acl.ControlledEntity.ACLType, java.lang.Boolean, long, com.cloud.user.Account) + * @see com.cloud.network.vpc.VpcManager#createVpcGuestNetwork(long, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, com.cloud.user.Account, java.lang.Long, com.cloud.network.PhysicalNetwork, long, org.apache.cloudstack.acl.ControlledEntity.ACLType, java.lang.Boolean, long, com.cloud.user.Account) */ @Override public Network createVpcGuestNetwork(long ntwkOffId, String name, String displayText, String gateway, String cidr, String vlanId, String networkDomain, Account owner, Long domainId, PhysicalNetwork pNtwk, From e51bc8b161bfd95aeaf06e1c86a82da6a3b29b91 Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Sun, 6 Jan 2013 15:32:40 -0800 Subject: [PATCH 286/421] InfrastructureEntity: New interface contract for classes not associated with any account Signed-off-by: Rohit Yadav --- .../cloudstack/acl/InfrastructureEntity.java | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 api/src/org/apache/cloudstack/acl/InfrastructureEntity.java diff --git a/api/src/org/apache/cloudstack/acl/InfrastructureEntity.java b/api/src/org/apache/cloudstack/acl/InfrastructureEntity.java new file mode 100644 index 00000000000..451c0c89ede --- /dev/null +++ b/api/src/org/apache/cloudstack/acl/InfrastructureEntity.java @@ -0,0 +1,20 @@ +// 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 org.apache.cloudstack.acl; + +public interface InfrastructureEntity { +} From a9ab42d962d2f76119266c367dc4fa26046fcfc7 Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Sun, 6 Jan 2013 15:36:59 -0800 Subject: [PATCH 287/421] api: Extend to infra. interface entities that are not associated with any account Includes, datacenter, pod, sotragenetworkiprange,vlan,diskoffering,networkoffering, serviceoffering. Signed-off-by: Rohit Yadav --- api/src/com/cloud/dc/DataCenter.java | 3 ++- api/src/com/cloud/dc/Pod.java | 3 ++- api/src/com/cloud/dc/StorageNetworkIpRange.java | 3 ++- api/src/com/cloud/dc/Vlan.java | 3 ++- api/src/com/cloud/offering/DiskOffering.java | 3 ++- api/src/com/cloud/offering/NetworkOffering.java | 3 ++- api/src/com/cloud/offering/ServiceOffering.java | 3 ++- 7 files changed, 14 insertions(+), 7 deletions(-) diff --git a/api/src/com/cloud/dc/DataCenter.java b/api/src/com/cloud/dc/DataCenter.java index 081cd55e162..946e9ccb5bd 100644 --- a/api/src/com/cloud/dc/DataCenter.java +++ b/api/src/com/cloud/dc/DataCenter.java @@ -19,13 +19,14 @@ package com.cloud.dc; import java.util.Map; import com.cloud.org.Grouping; +import org.apache.cloudstack.acl.InfrastructureEntity; import org.apache.cloudstack.api.Identity; import org.apache.cloudstack.api.InternalIdentity; /** * */ -public interface DataCenter extends Grouping, Identity, InternalIdentity { +public interface DataCenter extends InfrastructureEntity, Grouping, Identity, InternalIdentity { public enum NetworkType { Basic, Advanced, diff --git a/api/src/com/cloud/dc/Pod.java b/api/src/com/cloud/dc/Pod.java index 8c893163730..9da5b7e7836 100644 --- a/api/src/com/cloud/dc/Pod.java +++ b/api/src/com/cloud/dc/Pod.java @@ -17,6 +17,7 @@ package com.cloud.dc; import com.cloud.org.Grouping; +import org.apache.cloudstack.acl.InfrastructureEntity; import org.apache.cloudstack.api.Identity; import org.apache.cloudstack.api.InternalIdentity; @@ -24,7 +25,7 @@ import org.apache.cloudstack.api.InternalIdentity; * Represents one pod in the cloud stack. * */ -public interface Pod extends Grouping, Identity, InternalIdentity { +public interface Pod extends InfrastructureEntity, Grouping, Identity, InternalIdentity { String getCidrAddress(); diff --git a/api/src/com/cloud/dc/StorageNetworkIpRange.java b/api/src/com/cloud/dc/StorageNetworkIpRange.java index 7f15d6197da..2b50ca1594e 100755 --- a/api/src/com/cloud/dc/StorageNetworkIpRange.java +++ b/api/src/com/cloud/dc/StorageNetworkIpRange.java @@ -16,10 +16,11 @@ // under the License. package com.cloud.dc; +import org.apache.cloudstack.acl.InfrastructureEntity; import org.apache.cloudstack.api.Identity; import org.apache.cloudstack.api.InternalIdentity; -public interface StorageNetworkIpRange extends InternalIdentity, Identity { +public interface StorageNetworkIpRange extends InfrastructureEntity, InternalIdentity, Identity { Integer getVlan(); diff --git a/api/src/com/cloud/dc/Vlan.java b/api/src/com/cloud/dc/Vlan.java index 8d4ae3a9e1b..0f629ef3cbf 100644 --- a/api/src/com/cloud/dc/Vlan.java +++ b/api/src/com/cloud/dc/Vlan.java @@ -16,10 +16,11 @@ // under the License. package com.cloud.dc; +import org.apache.cloudstack.acl.InfrastructureEntity; import org.apache.cloudstack.api.Identity; import org.apache.cloudstack.api.InternalIdentity; -public interface Vlan extends InternalIdentity, Identity { +public interface Vlan extends InfrastructureEntity, InternalIdentity, Identity { public enum VlanType { DirectAttached, VirtualNetwork diff --git a/api/src/com/cloud/offering/DiskOffering.java b/api/src/com/cloud/offering/DiskOffering.java index 8e9b54c0053..9a48f4bb655 100644 --- a/api/src/com/cloud/offering/DiskOffering.java +++ b/api/src/com/cloud/offering/DiskOffering.java @@ -16,6 +16,7 @@ // under the License. package com.cloud.offering; +import org.apache.cloudstack.acl.InfrastructureEntity; import org.apache.cloudstack.api.Identity; import org.apache.cloudstack.api.InternalIdentity; @@ -26,7 +27,7 @@ import java.util.Date; * the disk offering. * */ -public interface DiskOffering extends Identity, InternalIdentity { +public interface DiskOffering extends InfrastructureEntity, Identity, InternalIdentity { String getUniqueName(); diff --git a/api/src/com/cloud/offering/NetworkOffering.java b/api/src/com/cloud/offering/NetworkOffering.java index 5978edcf2b9..b69ad886eaa 100644 --- a/api/src/com/cloud/offering/NetworkOffering.java +++ b/api/src/com/cloud/offering/NetworkOffering.java @@ -18,6 +18,7 @@ package com.cloud.offering; import com.cloud.network.Network.GuestType; import com.cloud.network.Networks.TrafficType; +import org.apache.cloudstack.acl.InfrastructureEntity; import org.apache.cloudstack.api.Identity; import org.apache.cloudstack.api.InternalIdentity; @@ -25,7 +26,7 @@ import org.apache.cloudstack.api.InternalIdentity; * Describes network offering * */ -public interface NetworkOffering extends InternalIdentity, Identity { +public interface NetworkOffering extends InfrastructureEntity, InternalIdentity, Identity { public enum Availability { Required, diff --git a/api/src/com/cloud/offering/ServiceOffering.java b/api/src/com/cloud/offering/ServiceOffering.java index d9393be38cf..b13346cfb83 100755 --- a/api/src/com/cloud/offering/ServiceOffering.java +++ b/api/src/com/cloud/offering/ServiceOffering.java @@ -16,6 +16,7 @@ // under the License. package com.cloud.offering; +import org.apache.cloudstack.acl.InfrastructureEntity; import org.apache.cloudstack.api.Identity; import org.apache.cloudstack.api.InternalIdentity; @@ -24,7 +25,7 @@ import java.util.Date; /** * offered. */ -public interface ServiceOffering extends InternalIdentity, Identity { +public interface ServiceOffering extends InfrastructureEntity, InternalIdentity, Identity { public static final String consoleProxyDefaultOffUniqueName = "Cloud.com-ConsoleProxy"; public static final String ssvmDefaultOffUniqueName = "Cloud.com-SecondaryStorage"; public static final String routerDefaultOffUniqueName = "Cloud.Com-SoftwareRouter"; From 19cf665094f7915d8058cdb7c1cde8da870e9ab2 Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Sun, 6 Jan 2013 16:51:14 -0800 Subject: [PATCH 288/421] ApiServer: Fix debug output for role based user access checking Signed-off-by: Rohit Yadav --- server/src/com/cloud/api/ApiServer.java | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/server/src/com/cloud/api/ApiServer.java b/server/src/com/cloud/api/ApiServer.java index c9d456768ae..ca25d61e9e8 100755 --- a/server/src/com/cloud/api/ApiServer.java +++ b/server/src/com/cloud/api/ApiServer.java @@ -561,15 +561,15 @@ public class ApiServer implements HttpRequestHandler { if (userId != null) { User user = ApiDBUtils.findUserById(userId); if (!isCommandAvailable(user, commandName)) { - s_logger.warn("The given command:" + commandName + " does not exist"); - throw new ServerApiException(BaseCmd.UNSUPPORTED_ACTION_ERROR, "The given command does not exist"); + s_logger.warn("The given command:" + commandName + " does not exist or it is not available for user"); + throw new ServerApiException(BaseCmd.UNSUPPORTED_ACTION_ERROR, "The given command does not exist or it is not available for user"); } return true; } else { // check against every available command to see if the command exists or not if (!isCommandAvailable(null, commandName) && !commandName.equals("login") && !commandName.equals("logout")) { - s_logger.warn("The given command:" + commandName + " does not exist"); - throw new ServerApiException(BaseCmd.UNSUPPORTED_ACTION_ERROR, "The given command does not exist"); + s_logger.warn("The given command:" + commandName + " does not exist or it is not available for user"); + throw new ServerApiException(BaseCmd.UNSUPPORTED_ACTION_ERROR, "The given command does not exist or it is not available for user"); } } @@ -662,8 +662,8 @@ public class ApiServer implements HttpRequestHandler { UserContext.updateContext(user.getId(), account, null); if (!isCommandAvailable(user, commandName)) { - s_logger.warn("The given command:" + commandName + " does not exist"); - throw new ServerApiException(BaseCmd.UNSUPPORTED_ACTION_ERROR, "The given command:" + commandName + " does not exist"); + s_logger.warn("The given command:" + commandName + " does not exist or it is not available for user"); + throw new ServerApiException(BaseCmd.UNSUPPORTED_ACTION_ERROR, "The given command:" + commandName + " does not exist or it is not available for user"); } // verify secret key exists From 96b9164e4bfc372fc07ecaccac7894677926cf03 Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Sun, 6 Jan 2013 17:18:45 -0800 Subject: [PATCH 289/421] Fix ACL processor and methods in ApiDispatcher and their usages Signed-off-by: Rohit Yadav --- .../api/command/user/vm/StopVMCmd.java | 1 - server/src/com/cloud/api/ApiDispatcher.java | 172 +++++++++--------- server/src/com/cloud/api/ApiServer.java | 10 +- .../network/as/AutoScaleManagerImpl.java | 2 +- 4 files changed, 85 insertions(+), 100 deletions(-) diff --git a/api/src/org/apache/cloudstack/api/command/user/vm/StopVMCmd.java b/api/src/org/apache/cloudstack/api/command/user/vm/StopVMCmd.java index 8e589060520..af3bbaab7aa 100644 --- a/api/src/org/apache/cloudstack/api/command/user/vm/StopVMCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vm/StopVMCmd.java @@ -39,7 +39,6 @@ public class StopVMCmd extends BaseAsyncCmd { // ////////////// API parameters ///////////////////// // /////////////////////////////////////////////////// - @ACL @Parameter(name = ApiConstants.ID, type = CommandType.UUID, entityType=UserVmResponse.class, required = true, description = "The ID of the virtual machine") private Long id; diff --git a/server/src/com/cloud/api/ApiDispatcher.java b/server/src/com/cloud/api/ApiDispatcher.java index 002d31f80a5..60d883677cd 100755 --- a/server/src/com/cloud/api/ApiDispatcher.java +++ b/server/src/com/cloud/api/ApiDispatcher.java @@ -32,6 +32,7 @@ import java.util.regex.Matcher; import com.cloud.dao.EntityManager; import org.apache.cloudstack.acl.ControlledEntity; +import org.apache.cloudstack.acl.InfrastructureEntity; import org.apache.cloudstack.acl.Role; import org.apache.cloudstack.api.*; import org.apache.log4j.Logger; @@ -106,10 +107,7 @@ public class ApiDispatcher { } public void dispatchCreateCmd(BaseAsyncCreateCmd cmd, Map params) { - List entitiesToAccess = new ArrayList(); - setupParameters(cmd, params, entitiesToAccess); - - doAccessChecks(cmd, entitiesToAccess); + processParameters(cmd, params); try { UserContext ctx = UserContext.current(); @@ -150,60 +148,54 @@ public class ApiDispatcher { } } - private void doAccessChecks(BaseAsyncCreateCmd cmd, List entitiesToAccess) { + private void checkACLOnCommand(BaseCmd cmd) { + // TODO Auto-generated method stub + //need to write an commandACLChecker adapter framework to check ACL on commands - default one will use the static roles by referring to commands.properties. + //one can write another commandACLChecker to check access via custom roles. + } + + private List determineRole(Account caller) { + // TODO Auto-generated method stub + List effectiveRoles = new ArrayList(); + return effectiveRoles; + + } + + private void doAccessChecks(BaseCmd cmd, List entitiesToAccess) { //owner Account caller = UserContext.current().getCaller(); Account owner = _accountMgr.getActiveAccountById(cmd.getEntityOwnerId()); - List callerRoles = determineRole(caller); - List ownerRoles = determineRole(owner); + // REMOVE ME: + // List callerRoles = determineRole(caller); + // List ownerRoles = determineRole(owner); + // check permission to call this command for the caller + // this needs checking of static roles of the caller + // Role based acl is done in ApiServer before api gets to ApiDispatcher + // checkACLOnCommand(cmd); - //check permission to call this command for the caller - //this needs checking of static roles of the caller - checkACLOnCommand(cmd); - - //check that caller can access the owner account. - _accountMgr.checkAccess(caller, null, true, owner); - - checkACLOnEntities(caller, entitiesToAccess); - } - - - private void checkACLOnCommand(BaseAsyncCreateCmd cmd) { - // TODO Auto-generated method stub - //need to write an commandACLChecker adapter framework to check ACL on commands - default one will use the static roles by referring to commands.properties. - //one can write another commandACLChecker to check access via custom roles. - } - - private List determineRole(Account caller) { - // TODO Auto-generated method stub - List effectiveRoles = new ArrayList(); - return effectiveRoles; - - } - - private void checkACLOnEntities(Account caller, List entitiesToAccess){ - //checkACLOnEntities - if(!entitiesToAccess.isEmpty()){ - for(ControlledEntity entity : entitiesToAccess) - _accountMgr.checkAccess(caller, null, true, entity); - } - } - - public void dispatch(BaseCmd cmd, Map params) { - List entitiesToAccess = new ArrayList(); - setupParameters(cmd, params, entitiesToAccess); - - if(!entitiesToAccess.isEmpty()){ - //owner - Account caller = UserContext.current().getCaller(); - Account owner = s_instance._accountMgr.getActiveAccountById(cmd.getEntityOwnerId()); - s_instance._accountMgr.checkAccess(caller, null, true, owner); - for(ControlledEntity entity : entitiesToAccess) - s_instance._accountMgr.checkAccess(caller, null, true, entity); + if(cmd instanceof BaseAsyncCreateCmd) { + //check that caller can access the owner account. + _accountMgr.checkAccess(caller, null, true, owner); } + if(!entitiesToAccess.isEmpty()){ + //check that caller can access the owner account. + _accountMgr.checkAccess(caller, null, true, owner); + for(Object entity : entitiesToAccess) { + if (entity instanceof ControlledEntity) { + _accountMgr.checkAccess(caller, null, true, (ControlledEntity) entity); + } + else if (entity instanceof InfrastructureEntity) { + //do something here:D + } + } + } + } + + public void dispatch(BaseCmd cmd, Map params) { try { + processParameters(cmd, params); UserContext ctx = UserContext.current(); ctx.setAccountId(cmd.getEntityOwnerId()); if (cmd instanceof BaseAsyncCmd) { @@ -362,7 +354,8 @@ public class ApiDispatcher { } @SuppressWarnings({ "unchecked", "rawtypes" }) - public static void setupParameters(BaseCmd cmd, Map params, List entitiesToAccess) { + public static void processParameters(BaseCmd cmd, Map params) { + List entitiesToAccess = new ArrayList(); Map unpackedParams = cmd.unpackParams(params); if (cmd instanceof BaseListCmd) { @@ -459,58 +452,57 @@ public class ApiDispatcher { // find the controlled entity DBid by uuid if (parameterAnnotation.entityType() != null) { Class[] entityList = parameterAnnotation.entityType()[0].getAnnotation(EntityReference.class).value(); - for (Class entity : entityList){ - if (ControlledEntity.class.isAssignableFrom(entity)) { - if (s_logger.isDebugEnabled()) { - s_logger.debug("entity name is:" + entity.getName()); - } - if (s_instance._daoNameMap.containsKey(entity.getName())) { - Class daoClass = s_instance._daoNameMap.get(entity.getName()); - GenericDao daoClassInstance = s_instance._locator.getDao(daoClass); - - // Check if the parameter type is a single - // Id or list of id's/name's - switch (fieldType) { - case LIST: - CommandType listType = parameterAnnotation.collectionType(); - switch (listType) { + for (Class entity : entityList) { + // Check if the parameter type is a single + // Id or list of id's/name's + switch (fieldType) { + case LIST: + CommandType listType = parameterAnnotation.collectionType(); + switch (listType) { case LONG: + case UUID: List listParam = new ArrayList(); listParam = (List) field.get(cmd); - for (Long entityId : listParam) { - ControlledEntity entityObj = (ControlledEntity) daoClassInstance.findById(entityId); + Object entityObj = s_instance._entityMgr.findById(entity, (Long) field.get(cmd)); entitiesToAccess.add(entityObj); } break; - /* - * case STRING: List listParam = - * new ArrayList(); listParam = - * (List)field.get(cmd); for(String - * entityName: listParam){ - * ControlledEntity entityObj = - * (ControlledEntity - * )daoClassInstance(entityId); - * entitiesToAccess.add(entityObj); } - * break; - */ + /* + * case STRING: List listParam = + * new ArrayList(); listParam = + * (List)field.get(cmd); for(String + * entityName: listParam){ + * ControlledEntity entityObj = + * (ControlledEntity + * )daoClassInstance(entityId); + * entitiesToAccess.add(entityObj); } + * break; + */ default: break; - } - break; - case LONG: - case UUID: - Long entityId = (Long) field.get(cmd); - ControlledEntity entityObj = (ControlledEntity) daoClassInstance.findById(entityId); - entitiesToAccess.add(entityObj); - break; - default: - break; } + break; + case LONG: + case UUID: + Object entityObj = s_instance._entityMgr.findById(entity, (Long) field.get(cmd)); + entitiesToAccess.add(entityObj); + break; + default: + break; + } + if (ControlledEntity.class.isAssignableFrom(entity)) { + if (s_logger.isDebugEnabled()) { + s_logger.debug("ControlledEntity name is:" + entity.getName()); } + } + if (InfrastructureEntity.class.isAssignableFrom(entity)) { + if (s_logger.isDebugEnabled()) { + s_logger.debug("InfrastructureEntity name is:" + entity.getName()); + } } } @@ -529,6 +521,8 @@ public class ApiDispatcher { } //check access on the entities. + s_instance.doAccessChecks(cmd, entitiesToAccess); + } private static Long translateUuidToInternalId(String uuid, Parameter annotation) diff --git a/server/src/com/cloud/api/ApiServer.java b/server/src/com/cloud/api/ApiServer.java index ca25d61e9e8..620917190cc 100755 --- a/server/src/com/cloud/api/ApiServer.java +++ b/server/src/com/cloud/api/ApiServer.java @@ -412,15 +412,7 @@ public class ApiServer implements HttpRequestHandler { objectEntityTable = createCmd.getEntityTable(); params.put("id", objectId.toString()); } else { - List entitiesToAccess = new ArrayList(); - ApiDispatcher.setupParameters(cmdObj, params, entitiesToAccess); - - if(!entitiesToAccess.isEmpty()){ - Account owner = s_instance._accountMgr.getActiveAccountById(cmdObj.getEntityOwnerId()); - s_instance._accountMgr.checkAccess(caller, null, true, owner); - - s_instance._accountMgr.checkAccess(caller, null, true, (ControlledEntity[])entitiesToAccess.toArray()); - } + ApiDispatcher.processParameters(cmdObj, params); } BaseAsyncCmd asyncCmd = (BaseAsyncCmd) cmdObj; diff --git a/server/src/com/cloud/network/as/AutoScaleManagerImpl.java b/server/src/com/cloud/network/as/AutoScaleManagerImpl.java index 034638d5b64..4c49914f11c 100644 --- a/server/src/com/cloud/network/as/AutoScaleManagerImpl.java +++ b/server/src/com/cloud/network/as/AutoScaleManagerImpl.java @@ -349,7 +349,7 @@ public class AutoScaleManagerImpl implements AutoScaleManager, AutoScaleSe * For ex. if projectId is given as a string instead of an long value, this * will be throwing an error. */ - ApiDispatcher.setupParameters(new DeployVMCmd(), deployParams, new ArrayList()); + ApiDispatcher.processParameters(new DeployVMCmd(), deployParams); if (autoscaleUserId == null) { autoscaleUserId = UserContext.current().getCallerUserId(); From 39b829bffef0a21c9886074b1d0c42c3a83ea8b2 Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Sun, 6 Jan 2013 17:19:49 -0800 Subject: [PATCH 290/421] api: ACL annotation and checkAccess removal refactor for StopVMCmd Signed-off-by: Rohit Yadav --- api/src/org/apache/cloudstack/api/command/user/vm/StopVMCmd.java | 1 + server/src/com/cloud/vm/UserVmManagerImpl.java | 1 - 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/api/src/org/apache/cloudstack/api/command/user/vm/StopVMCmd.java b/api/src/org/apache/cloudstack/api/command/user/vm/StopVMCmd.java index af3bbaab7aa..8e589060520 100644 --- a/api/src/org/apache/cloudstack/api/command/user/vm/StopVMCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vm/StopVMCmd.java @@ -39,6 +39,7 @@ public class StopVMCmd extends BaseAsyncCmd { // ////////////// API parameters ///////////////////// // /////////////////////////////////////////////////// + @ACL @Parameter(name = ApiConstants.ID, type = CommandType.UUID, entityType=UserVmResponse.class, required = true, description = "The ID of the virtual machine") private Long id; diff --git a/server/src/com/cloud/vm/UserVmManagerImpl.java b/server/src/com/cloud/vm/UserVmManagerImpl.java index dd789f455da..f3aca68172f 100755 --- a/server/src/com/cloud/vm/UserVmManagerImpl.java +++ b/server/src/com/cloud/vm/UserVmManagerImpl.java @@ -2768,7 +2768,6 @@ public class UserVmManagerImpl implements UserVmManager, UserVmService, Manager throw new InvalidParameterValueException("unable to find a virtual machine with id " + vmId); } - _accountMgr.checkAccess(caller, null, true, vm); UserVO user = _userDao.findById(userId); try { From c13f0199f47d4e6967524fbcb8eb051f390c8726 Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Sun, 6 Jan 2013 17:30:00 -0800 Subject: [PATCH 291/421] cli: Cosmetic fix for prompt of cloudmonkey Signed-off-by: Rohit Yadav --- tools/cli/cloudmonkey/cloudmonkey.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tools/cli/cloudmonkey/cloudmonkey.py b/tools/cli/cloudmonkey/cloudmonkey.py index a573972481d..339a2014522 100644 --- a/tools/cli/cloudmonkey/cloudmonkey.py +++ b/tools/cli/cloudmonkey/cloudmonkey.py @@ -95,7 +95,7 @@ class CloudMonkeyShell(cmd.Cmd, object): print "Please fix `%s` config in %s" % (key, self.config_file) sys.exit() - self.prompt += " " # Cosmetic fix for prompt + self.prompt = self.prompt.strip() + " " # Cosmetic fix for prompt logging.basicConfig(filename=self.log_file, level=logging.DEBUG, format=log_fmt) logger.debug("Loaded config fields:\n%s" % self.config_fields) @@ -421,7 +421,7 @@ class CloudMonkeyShell(cmd.Cmd, object): args = args.strip().partition(" ") key, value = (args[0], args[2]) setattr(self, key, value) # keys and attributes should have same names - self.prompt += " " # prompt fix + self.prompt = self.prompt.strip() + " " # prompt fix self.write_config() def complete_set(self, text, line, begidx, endidx): From 5502f4b20c9063f6272157c8facf8e5b63770061 Mon Sep 17 00:00:00 2001 From: Kishan Kavala Date: Mon, 7 Jan 2013 12:32:24 +0530 Subject: [PATCH 292/421] Corrected response object in Traffic Monitor APIs Implementation annontation as TrafficMonitorResponse --- server/src/com/cloud/api/commands/AddTrafficMonitorCmd.java | 3 +-- server/src/com/cloud/api/commands/ListTrafficMonitorsCmd.java | 3 +-- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/server/src/com/cloud/api/commands/AddTrafficMonitorCmd.java b/server/src/com/cloud/api/commands/AddTrafficMonitorCmd.java index f253b378bc1..df9df82c7e5 100644 --- a/server/src/com/cloud/api/commands/AddTrafficMonitorCmd.java +++ b/server/src/com/cloud/api/commands/AddTrafficMonitorCmd.java @@ -28,13 +28,12 @@ import com.cloud.exception.InvalidParameterValueException; import com.cloud.host.Host; import com.cloud.network.NetworkUsageManager; import com.cloud.server.ManagementService; -import com.cloud.server.api.response.ExternalFirewallResponse; import com.cloud.server.api.response.TrafficMonitorResponse; import com.cloud.user.Account; import com.cloud.utils.component.ComponentLocator; import com.cloud.utils.exception.CloudRuntimeException; -@Implementation(description="Adds Traffic Monitor Host for Direct Network Usage", responseObject = ExternalFirewallResponse.class) +@Implementation(description="Adds Traffic Monitor Host for Direct Network Usage", responseObject = TrafficMonitorResponse.class) public class AddTrafficMonitorCmd extends BaseCmd { public static final Logger s_logger = Logger.getLogger(AddTrafficMonitorCmd.class.getName()); private static final String s_name = "addtrafficmonitorresponse"; diff --git a/server/src/com/cloud/api/commands/ListTrafficMonitorsCmd.java b/server/src/com/cloud/api/commands/ListTrafficMonitorsCmd.java index 78338d86710..8dd0139012c 100644 --- a/server/src/com/cloud/api/commands/ListTrafficMonitorsCmd.java +++ b/server/src/com/cloud/api/commands/ListTrafficMonitorsCmd.java @@ -30,11 +30,10 @@ import com.cloud.api.response.ListResponse; import com.cloud.host.Host; import com.cloud.network.NetworkUsageManager; import com.cloud.server.ManagementService; -import com.cloud.server.api.response.ExternalFirewallResponse; import com.cloud.server.api.response.TrafficMonitorResponse; import com.cloud.utils.component.ComponentLocator; -@Implementation(description="List traffic monitor Hosts.", responseObject = ExternalFirewallResponse.class) +@Implementation(description="List traffic monitor Hosts.", responseObject = TrafficMonitorResponse.class) public class ListTrafficMonitorsCmd extends BaseListCmd { public static final Logger s_logger = Logger.getLogger(ListServiceOfferingsCmd.class.getName()); private static final String s_name = "listtrafficmonitorsresponse"; From 3ffbc4320abc9fd03ad3abd1f8077cc8d8f9ed4c Mon Sep 17 00:00:00 2001 From: Koushik Das Date: Mon, 7 Jan 2013 16:08:04 +0530 Subject: [PATCH 293/421] CLOUDSTACK-595 : Recreate root volume scenarios doesn't work in vmware Issue seen during system vm template upgrade and restoreVM command scenarios for vmware. In these cases CS tries to recreate root disk with same name as the existing one, in case of vmware this results in creation of vmdk file with same name for both existing and new root volume. This results in undesired behavior when storage cleanup thread tries to cleanup old volume. Made the vmdk file name unique by adding the volume id to it. This will ensure that during volume recreation in the scenarios mentioned vmdk will get created with a new name and there will be no undesired side effects of running the storage cleanup thread. --- .../vmware/resource/VmwareResource.java | 45 +++++++++---------- .../com/cloud/storage/StorageManagerImpl.java | 18 +++++--- 2 files changed, 34 insertions(+), 29 deletions(-) diff --git a/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/resource/VmwareResource.java b/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/resource/VmwareResource.java index 0b0f285a960..b1b15bb30ea 100755 --- a/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/resource/VmwareResource.java +++ b/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/resource/VmwareResource.java @@ -3705,10 +3705,12 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa ManagedObjectReference morDatastore = HypervisorHostHelper.findDatastoreWithBackwardsCompatibility(hyperHost, pool.getUuid()); if (morDatastore == null) throw new Exception("Unable to find datastore in vSphere"); - + DatastoreMO dsMo = new DatastoreMO(context, morDatastore); - if (cmd.getDiskCharacteristics().getType() == Volume.Type.ROOT) { + if (dskch.getType() == Volume.Type.ROOT) { + // attach volume id to make the name unique + String vmdkName = dskch.getName() + "-" + dskch.getVolumeId(); if (cmd.getTemplateUrl() == null) { // create a root volume for blank VM String dummyVmName = getWorkerName(context, cmd, 0); @@ -3720,16 +3722,15 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa throw new Exception("Unable to create a dummy VM for volume creation"); } - String volumeDatastorePath = String.format("[%s] %s.vmdk", dsMo.getName(), cmd.getDiskCharacteristics().getName()); + String volumeDatastorePath = String.format("[%s] %s.vmdk", dsMo.getName(), vmdkName); synchronized (this) { s_logger.info("Delete file if exists in datastore to clear the way for creating the volume. file: " + volumeDatastorePath); - VmwareHelper.deleteVolumeVmdkFiles(dsMo, cmd.getDiskCharacteristics().getName(), dcMo); - vmMo.createDisk(volumeDatastorePath, (int) (cmd.getDiskCharacteristics().getSize() / (1024L * 1024L)), morDatastore, -1); + VmwareHelper.deleteVolumeVmdkFiles(dsMo, vmdkName, dcMo); + vmMo.createDisk(volumeDatastorePath, (int) (dskch.getSize() / (1024L * 1024L)), morDatastore, -1); vmMo.detachDisk(volumeDatastorePath, false); } - VolumeTO vol = new VolumeTO(cmd.getVolumeId(), dskch.getType(), pool.getType(), pool.getUuid(), cmd.getDiskCharacteristics().getName(), pool.getPath(), cmd - .getDiskCharacteristics().getName(), cmd.getDiskCharacteristics().getSize(), null); + VolumeTO vol = new VolumeTO(cmd.getVolumeId(), dskch.getType(), pool.getType(), pool.getUuid(), dskch.getName(), pool.getPath(), vmdkName, dskch.getSize(), null); return new CreateAnswer(cmd, vol); } finally { vmMo.detachAllDisks(); @@ -3753,41 +3754,40 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa throw new Exception(msg); } - String name = cmd.getDiskCharacteristics().getName(); - if(dsMo.folderExists(String.format("[%s]", dsMo.getName()), name)) - dsMo.deleteFile(String.format("[%s] %s/", dsMo.getName(), name), dcMo.getMor(), false); + if(dsMo.folderExists(String.format("[%s]", dsMo.getName()), vmdkName)) + dsMo.deleteFile(String.format("[%s] %s/", dsMo.getName(), vmdkName), dcMo.getMor(), false); s_logger.info("create linked clone from template"); - if (!vmTemplate.createLinkedClone(name, morBaseSnapshot, dcMo.getVmFolder(), morPool, morDatastore)) { + if (!vmTemplate.createLinkedClone(vmdkName, morBaseSnapshot, dcMo.getVmFolder(), morPool, morDatastore)) { String msg = "Unable to clone from the template"; s_logger.error(msg); throw new Exception(msg); } - VirtualMachineMO vmMo = new ClusterMO(context, morCluster).findVmOnHyperHost(name); + VirtualMachineMO vmMo = new ClusterMO(context, morCluster).findVmOnHyperHost(vmdkName); assert (vmMo != null); // we can't rely on un-offical API (VirtualMachineMO.moveAllVmDiskFiles() any more, use hard-coded disk names that we know // to move files s_logger.info("Move volume out of volume-wrapper VM "); - dsMo.moveDatastoreFile(String.format("[%s] %s/%s.vmdk", dsMo.getName(), name, name), - dcMo.getMor(), dsMo.getMor(), - String.format("[%s] %s.vmdk", dsMo.getName(), name), dcMo.getMor(), true); + dsMo.moveDatastoreFile(String.format("[%s] %s/%s.vmdk", dsMo.getName(), vmdkName, vmdkName), + dcMo.getMor(), dsMo.getMor(), + String.format("[%s] %s.vmdk", dsMo.getName(), vmdkName), dcMo.getMor(), true); - dsMo.moveDatastoreFile(String.format("[%s] %s/%s-delta.vmdk", dsMo.getName(), name, name), + dsMo.moveDatastoreFile(String.format("[%s] %s/%s-delta.vmdk", dsMo.getName(), vmdkName, vmdkName), dcMo.getMor(), dsMo.getMor(), String.format("[%s] %s-delta.vmdk", dsMo.getName(), name), dcMo.getMor(), true); - s_logger.info("detach disks from volume-wrapper VM " + name); + s_logger.info("detach disks from volume-wrapper VM " + vmdkName); vmMo.detachAllDisks(); - s_logger.info("destroy volume-wrapper VM " + name); + s_logger.info("destroy volume-wrapper VM " + vmdkName); vmMo.destroy(); - String srcFile = String.format("[%s] %s/", dsMo.getName(), name); + String srcFile = String.format("[%s] %s/", dsMo.getName(), vmdkName); dsMo.deleteFile(srcFile, dcMo.getMor(), true); - VolumeTO vol = new VolumeTO(cmd.getVolumeId(), dskch.getType(), pool.getType(), pool.getUuid(), name, pool.getPath(), name, cmd.getDiskCharacteristics().getSize(), null); + VolumeTO vol = new VolumeTO(cmd.getVolumeId(), dskch.getType(), pool.getType(), pool.getUuid(), dskch.getName(), pool.getPath(), name, cmd.getDiskCharacteristics().getSize(), null); return new CreateAnswer(cmd, vol); } } else { @@ -3806,12 +3806,11 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa // s_logger.info("Delete file if exists in datastore to clear the way for creating the volume. file: " + volumeDatastorePath); VmwareHelper.deleteVolumeVmdkFiles(dsMo, volumeUuid.toString(), dcMo); - vmMo.createDisk(volumeDatastorePath, (int) (cmd.getDiskCharacteristics().getSize() / (1024L * 1024L)), morDatastore, vmMo.getScsiDeviceControllerKey()); + vmMo.createDisk(volumeDatastorePath, (int) (dskch.getSize() / (1024L * 1024L)), morDatastore, vmMo.getScsiDeviceControllerKey()); vmMo.detachDisk(volumeDatastorePath, false); } - VolumeTO vol = new VolumeTO(cmd.getVolumeId(), dskch.getType(), pool.getType(), pool.getUuid(), cmd.getDiskCharacteristics().getName(), pool.getPath(), volumeUuid, cmd - .getDiskCharacteristics().getSize(), null); + VolumeTO vol = new VolumeTO(cmd.getVolumeId(), dskch.getType(), pool.getType(), pool.getUuid(), dskch.getName(), pool.getPath(), volumeUuid, dskch.getSize(), null); return new CreateAnswer(cmd, vol); } finally { s_logger.info("Destroy dummy VM after volume creation"); diff --git a/server/src/com/cloud/storage/StorageManagerImpl.java b/server/src/com/cloud/storage/StorageManagerImpl.java index 3e3a67a96c2..54b6dc0c327 100755 --- a/server/src/com/cloud/storage/StorageManagerImpl.java +++ b/server/src/com/cloud/storage/StorageManagerImpl.java @@ -3404,12 +3404,6 @@ public class StorageManagerImpl implements StorageManager, Manager, ClusterManag @DB protected VolumeVO switchVolume(VolumeVO existingVolume, VirtualMachineProfile vm) throws StorageUnavailableException { Transaction txn = Transaction.currentTxn(); - txn.start(); - try { - stateTransitTo(existingVolume, Volume.Event.DestroyRequested); - } catch (NoTransitionException e) { - s_logger.debug("Unable to destroy existing volume: " + e.toString()); - } Long templateIdToUse = null; Long volTemplateId = existingVolume.getTemplateId(); @@ -3420,7 +3414,19 @@ public class StorageManagerImpl implements StorageManager, Manager, ClusterManag } templateIdToUse = vmTemplateId; } + + txn.start(); VolumeVO newVolume = allocateDuplicateVolume(existingVolume, templateIdToUse); + // In case of Vmware if vm reference is not removed then during root disk cleanup + // the vm also gets deleted, so remove the reference + if (vm.getHypervisorType() == HypervisorType.VMware) { + _volsDao.detachVolume(existingVolume.getId()); + } + try { + stateTransitTo(existingVolume, Volume.Event.DestroyRequested); + } catch (NoTransitionException e) { + s_logger.debug("Unable to destroy existing volume: " + e.toString()); + } txn.commit(); return newVolume; From bf6ed9312d529f9c790622f06e9e2363b32339e8 Mon Sep 17 00:00:00 2001 From: Murali Reddy Date: Mon, 7 Jan 2013 16:36:47 +0530 Subject: [PATCH 294/421] Missed portion of the fix for CLOUDSTACK-595 submitted by commit 3ffbc4320abc9fd03ad3abd1f8077cc8d8f9ed4c which caused build break. Fixing the build break and added missing code. --- .../cloud/hypervisor/vmware/resource/VmwareResource.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/resource/VmwareResource.java b/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/resource/VmwareResource.java index b1b15bb30ea..a444cfec197 100755 --- a/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/resource/VmwareResource.java +++ b/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/resource/VmwareResource.java @@ -3775,8 +3775,8 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa String.format("[%s] %s.vmdk", dsMo.getName(), vmdkName), dcMo.getMor(), true); dsMo.moveDatastoreFile(String.format("[%s] %s/%s-delta.vmdk", dsMo.getName(), vmdkName, vmdkName), - dcMo.getMor(), dsMo.getMor(), - String.format("[%s] %s-delta.vmdk", dsMo.getName(), name), dcMo.getMor(), true); + dcMo.getMor(), dsMo.getMor(), + String.format("[%s] %s-delta.vmdk", dsMo.getName(), vmdkName), dcMo.getMor(), true); s_logger.info("detach disks from volume-wrapper VM " + vmdkName); vmMo.detachAllDisks(); @@ -3787,7 +3787,7 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa String srcFile = String.format("[%s] %s/", dsMo.getName(), vmdkName); dsMo.deleteFile(srcFile, dcMo.getMor(), true); - VolumeTO vol = new VolumeTO(cmd.getVolumeId(), dskch.getType(), pool.getType(), pool.getUuid(), dskch.getName(), pool.getPath(), name, cmd.getDiskCharacteristics().getSize(), null); + VolumeTO vol = new VolumeTO(cmd.getVolumeId(), dskch.getType(), pool.getType(), pool.getUuid(), dskch.getName(), pool.getPath(), vmdkName, dskch.getSize(), null); return new CreateAnswer(cmd, vol); } } else { From fd8607d41e55b3d16c3c7b867c84193ea5d1569b Mon Sep 17 00:00:00 2001 From: Sanjay Tripathi Date: Mon, 7 Jan 2013 22:29:28 +0530 Subject: [PATCH 295/421] CLOUDSTACK-819:Changing GET request to POST while creating account/user to hide the passwords in the access logs --- ui/scripts/accounts.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/ui/scripts/accounts.js b/ui/scripts/accounts.js index de8149fe877..59e9d8bbd15 100644 --- a/ui/scripts/accounts.js +++ b/ui/scripts/accounts.js @@ -229,6 +229,7 @@ $.ajax({ url: createURL('createAccount'), + type: "POST", data: data, success: function(json) { var item = json.createaccountresponse.account; @@ -920,6 +921,7 @@ $.ajax({ url: createURL('createUser'), + type: "POST", data: data, success: function(json) { var item = json.createuserresponse.user; From 13de3ca25364bfe0cc18785ac47ec7b2ad6deb0a Mon Sep 17 00:00:00 2001 From: Min Chen Date: Mon, 7 Jan 2013 10:26:33 -0800 Subject: [PATCH 296/421] Enable default sorting for listVirtualMachines and listRouters to keep back compatible. --- server/src/com/cloud/api/query/QueryManagerImpl.java | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/server/src/com/cloud/api/query/QueryManagerImpl.java b/server/src/com/cloud/api/query/QueryManagerImpl.java index 12aaf16ef45..ceec932f942 100644 --- a/server/src/com/cloud/api/query/QueryManagerImpl.java +++ b/server/src/com/cloud/api/query/QueryManagerImpl.java @@ -592,9 +592,8 @@ public class QueryManagerImpl implements QueryService, Manager { Boolean isRecursive = domainIdRecursiveListProject.second(); ListProjectResourcesCriteria listProjectResourcesCriteria = domainIdRecursiveListProject.third(); - // 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()); + Criteria c = new Criteria("id", Boolean.TRUE, cmd.getStartIndex(), cmd.getPageSizeVal()); + //Criteria c = new Criteria(null, Boolean.FALSE, cmd.getStartIndex(), cmd.getPageSizeVal()); //version without default sorting c.addCriteria(Criteria.KEYWORD, cmd.getKeyword()); c.addCriteria(Criteria.ID, cmd.getId()); c.addCriteria(Criteria.NAME, cmd.getInstanceName()); @@ -962,10 +961,8 @@ public class QueryManagerImpl implements QueryService, Manager { Long domainId = domainIdRecursiveListProject.first(); Boolean isRecursive = domainIdRecursiveListProject.second(); ListProjectResourcesCriteria listProjectResourcesCriteria = domainIdRecursiveListProject.third(); - // 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()); + 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 sb = _routerJoinDao.createSearchBuilder(); sb.select(null, Func.DISTINCT, sb.entity().getId()); // select distinct // ids to get From d616dcdd40793e5fb07aab7182a9deac5c03ea37 Mon Sep 17 00:00:00 2001 From: Hugo Trippaers Date: Mon, 7 Jan 2013 22:16:05 +0100 Subject: [PATCH 297/421] Summary: small fix for the classpath loader Add the file separator if the path does not end with one --- utils/src/com/cloud/utils/script/Script.java | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/utils/src/com/cloud/utils/script/Script.java b/utils/src/com/cloud/utils/script/Script.java index a0f9e8e3e88..1444f83f425 100755 --- a/utils/src/com/cloud/utils/script/Script.java +++ b/utils/src/com/cloud/utils/script/Script.java @@ -350,7 +350,12 @@ public class Script implements Callable { * Look in WEB-INF/classes of the webapp * URI workaround the URL encoding of url.getFile */ - url = Script.class.getClassLoader().getResource(path + script); + if (path.endsWith(File.separator)) { + url = Script.class.getClassLoader().getResource(path + script); + } + else { + url = Script.class.getClassLoader().getResource(path + File.separator + script); + } s_logger.debug("Classpath resource: " + url); if (url != null) { try { From 91673b10b82178fea03f267f0f41655b2faac757 Mon Sep 17 00:00:00 2001 From: Hugo Trippaers Date: Mon, 7 Jan 2013 22:17:14 +0100 Subject: [PATCH 298/421] Summary: Get started with packaging cloud-agent Modify the spec file to package the agent files and the scripts Some changes to the poms to put the java dependencies in the right place. Move the agent script to the dedicated os dir in packaging. --- agent/pom.xml | 51 +++++++++++++ packaging/centos63/cloud-agent.rc | 121 ++++++++++++++++++++++++++++++ packaging/centos63/cloud.spec | 36 ++++++++- plugins/hypervisors/kvm/pom.xml | 18 +++++ 4 files changed, 225 insertions(+), 1 deletion(-) create mode 100755 packaging/centos63/cloud-agent.rc diff --git a/agent/pom.xml b/agent/pom.xml index 8aab8dec706..810f33fc572 100644 --- a/agent/pom.xml +++ b/agent/pom.xml @@ -55,6 +55,57 @@ + + maven-antrun-plugin + 1.7 + + + generate-resource + generate-resources + + run + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/packaging/centos63/cloud-agent.rc b/packaging/centos63/cloud-agent.rc new file mode 100755 index 00000000000..084b71543a8 --- /dev/null +++ b/packaging/centos63/cloud-agent.rc @@ -0,0 +1,121 @@ +#!/bin/bash + +# chkconfig: 35 99 10 +# description: Cloud Agent + +# 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. + +# WARNING: if this script is changed, then all other initscripts MUST BE changed to match it as well + +. /etc/rc.d/init.d/functions + +whatami=cloud-agent + +# set environment variables + +SHORTNAME="$whatami" +PIDFILE=/var/run/"$whatami".pid +LOCKFILE=/var/lock/subsys/"$SHORTNAME" +LOGFILE=/var/log/cloud/agent/agent.log +PROGNAME="Cloud Agent" +CLASS="com.cloud.agent.AgentShell" +JSVC=`which jsvc 2>/dev/null`; + +# exit if we don't find jsvc +if [ -z "$JSVC" ]; then + echo no jsvc found in path; + exit 1; +fi + +unset OPTIONS +[ -r /etc/sysconfig/"$SHORTNAME" ] && source /etc/sysconfig/"$SHORTNAME" + +# The first existing directory is used for JAVA_HOME (if JAVA_HOME is not defined in $DEFAULT) +JDK_DIRS="/usr/lib/jvm/jre /usr/lib/jvm/java-6-openjdk /usr/lib/jvm/java-6-openjdk-i386 /usr/lib/jvm/java-6-openjdk-amd64 /usr/lib/jvm/java-6-sun /usr/lib/jvm/java-1.5.0-sun /usr/lib/j2sdk1.5-sun /usr/lib/j2sdk1.5-ibm" + +for jdir in $JDK_DIRS; do + if [ -r "$jdir/bin/java" -a -z "${JAVA_HOME}" ]; then + JAVA_HOME="$jdir" + fi +done +export JAVA_HOME + +SCP="" +DCP="" +ACP=`ls /usr/share/cloud/java/* | tr '\n' ':'` +JCP="/usr/share/java/commons-daemon.jar" + +# We need to append the JSVC daemon JAR to the classpath +# AgentShell implements the JSVC daemon methods +export CLASSPATH="$SCP:$DCP:$ACP:$JCP:/etc/cloud/agent:/usr/lib64/cloud/agent" + +start() { + echo -n $"Starting $PROGNAME: " + if hostname --fqdn >/dev/null 2>&1 ; then + $JSVC -cp "$CLASSPATH" -pidfile "$PIDFILE" $CLASS + RETVAL=$? + echo + else + failure + echo + echo The host name does not resolve properly to an IP address. Cannot start "$PROGNAME". > /dev/stderr + RETVAL=9 + fi + [ $RETVAL = 0 ] && touch ${LOCKFILE} + return $RETVAL +} + +stop() { + echo -n $"Stopping $PROGNAME: " + $JSVC -pidfile "$PIDFILE" -stop $CLASS + RETVAL=$? + echo + [ $RETVAL = 0 ] && rm -f ${LOCKFILE} ${PIDFILE} +} + + +# See how we were called. +case "$1" in + start) + start + ;; + stop) + stop + ;; + status) + status -p ${PIDFILE} $SHORTNAME + RETVAL=$? + ;; + restart) + stop + sleep 3 + start + ;; + condrestart) + if status -p ${PIDFILE} $SHORTNAME >&/dev/null; then + stop + sleep 3 + start + fi + ;; + *) + echo $"Usage: $whatami {start|stop|restart|condrestart|status|help}" + RETVAL=3 +esac + +exit $RETVAL diff --git a/packaging/centos63/cloud.spec b/packaging/centos63/cloud.spec index e6f2ae24ed5..d828e673c97 100644 --- a/packaging/centos63/cloud.spec +++ b/packaging/centos63/cloud.spec @@ -103,6 +103,18 @@ Group: System Environment/Libraries The CloudStack Python library contains a few Python modules that the CloudStack uses. +%package agent +Summary: CloudStack Agent for KVM hypervisors +Requires: java >= 1.6.0 +Requires: %{name}-python = %{_ver} +Requires: libvirt +Requires: bridge-utils +Requires: ebtables +Requires: jsvc +Requires: jna +Group: System Environment/Libraries +%description agent +The CloudStack agent for KVM hypervisors %prep echo Doing CloudStack build @@ -183,8 +195,22 @@ chmod 770 ${RPM_BUILD_ROOT}%{_localstatedir}/cache/%{name}/management/temp chmod 770 ${RPM_BUILD_ROOT}%{_localstatedir}/log/%{name}/management chmod 770 ${RPM_BUILD_ROOT}%{_localstatedir}/log/%{name}/agent chmod -R ugo+x ${RPM_BUILD_ROOT}/usr/share/%{name}/management/webapps/client/WEB-INF/classes/scripts -%clean +mkdir -p ${RPM_BUILD_ROOT}/etc/cloud/agent +mkdir -p ${RPM_BUILD_ROOT}/var/log/cloud/agent +install -D packaging/centos63/cloud-agent.rc ${RPM_BUILD_ROOT}/etc/init.d/%{name}-agent +install -D agent/target/transformed/agent.properties ${RPM_BUILD_ROOT}/etc/cloud/agent/agent.properties +install -D agent/target/transformed/environment.properties ${RPM_BUILD_ROOT}/etc/cloud/agent/environment.properties +install -D agent/target/transformed/log4j-cloud.xml ${RPM_BUILD_ROOT}/etc/cloud/agent/log4j-cloud.xml +install -D agent/target/transformed/cloud-setup-agent ${RPM_BUILD_ROOT}/usr/bin/cloud-setup-agent +install -D agent/target/transformed/cloud-ssh ${RPM_BUILD_ROOT}/usr/bin/cloud-ssh + +install -D plugins/hypervisors/kvm/target/%{name}-plugin-hypervisor-kvm-%{_maventag}.jar ${RPM_BUILD_ROOT}/usr/share/cloud/java/%{name}-plugin-hypervisor-kvm-%{_maventag}.jar +cp plugins/hypervisors/kvm/target/dependencies/* ${RPM_BUILD_ROOT}/usr/share/cloud/java +mkdir -p ${RPM_BUILD_ROOT}/usr/share/cloud/scripts +cp -r scripts/* ${RPM_BUILD_ROOT}/usr/share/cloud/scripts + +%clean [ ${RPM_BUILD_ROOT} != "/" ] && rm -rf ${RPM_BUILD_ROOT} @@ -271,6 +297,14 @@ fi %doc LICENSE %doc NOTICE +%files agent +%attr(0755,root,root) %{_bindir}/%{name}-setup-agent +%attr(0755,root,root) %{_bindir}/%{name}-ssh +%attr(0755,root,root) %{_sysconfdir}/init.d/cloud-agent +%config(noreplace) %{_sysconfdir}/cloud/agent +%dir /var/log/cloud/agent +%attr(0644,root,root) /usr/share/cloud/java/*.jar +%attr(0755,root,root) /usr/share/cloud/scripts %changelog * Fri Oct 03 2012 Hugo Trippaers 4.1.0 diff --git a/plugins/hypervisors/kvm/pom.xml b/plugins/hypervisors/kvm/pom.xml index d3eca911a04..8fc8f739460 100644 --- a/plugins/hypervisors/kvm/pom.xml +++ b/plugins/hypervisors/kvm/pom.xml @@ -94,6 +94,24 @@ + + org.apache.maven.plugins + maven-dependency-plugin + 2.5.1 + + + copy-dependencies + package + + copy-dependencies + + + target/dependencies + runtime + + + + From 0894822651542560afada3648eb4f9f599fa1415 Mon Sep 17 00:00:00 2001 From: Min Chen Date: Mon, 7 Jan 2013 16:40:31 -0800 Subject: [PATCH 299/421] DB view dao cleanup, and introduce global configuration parameter for entity detail batch query size to remove hard-coded VM_DETAILS_BATCH_SIZE. Signed-off-by: Min Chen --- .../cloud/api/query/dao/AccountJoinDao.java | 1 - .../api/query/dao/AccountJoinDaoImpl.java | 42 -------- .../cloud/api/query/dao/AsyncJobJoinDao.java | 1 - .../api/query/dao/AsyncJobJoinDaoImpl.java | 47 -------- .../query/dao/DomainRouterJoinDaoImpl.java | 50 ++++++++- .../cloud/api/query/dao/HostJoinDaoImpl.java | 69 +++++++++--- .../api/query/dao/InstanceGroupJoinDao.java | 3 - .../query/dao/InstanceGroupJoinDaoImpl.java | 15 --- .../api/query/dao/ProjectAccountJoinDao.java | 2 - .../query/dao/ProjectAccountJoinDaoImpl.java | 12 +-- .../dao/ProjectInvitationJoinDaoImpl.java | 12 +-- .../api/query/dao/ProjectJoinDaoImpl.java | 69 +++++++++--- .../api/query/dao/ResourceTagJoinDaoImpl.java | 68 +++++++++--- .../query/dao/SecurityGroupJoinDaoImpl.java | 50 ++++++++- .../api/query/dao/UserAccountJoinDao.java | 2 - .../api/query/dao/UserAccountJoinDaoImpl.java | 15 --- .../api/query/dao/UserVmJoinDaoImpl.java | 97 +++++++++-------- .../api/query/dao/VolumeJoinDaoImpl.java | 52 ++++++++- .../src/com/cloud/configuration/Config.java | 101 +++++++++--------- .../DefaultComponentLibrary.java | 27 ++--- setup/db/db/schema-40to410.sql | 1 + 21 files changed, 434 insertions(+), 302 deletions(-) diff --git a/server/src/com/cloud/api/query/dao/AccountJoinDao.java b/server/src/com/cloud/api/query/dao/AccountJoinDao.java index 037e4447d2e..5485f093d87 100644 --- a/server/src/com/cloud/api/query/dao/AccountJoinDao.java +++ b/server/src/com/cloud/api/query/dao/AccountJoinDao.java @@ -29,5 +29,4 @@ public interface AccountJoinDao extends GenericDao { AccountJoinVO newAccountView(Account vol); - List searchByIds(Long... ids); } diff --git a/server/src/com/cloud/api/query/dao/AccountJoinDaoImpl.java b/server/src/com/cloud/api/query/dao/AccountJoinDaoImpl.java index 2b18a80d844..626872447e7 100644 --- a/server/src/com/cloud/api/query/dao/AccountJoinDaoImpl.java +++ b/server/src/com/cloud/api/query/dao/AccountJoinDaoImpl.java @@ -16,8 +16,6 @@ // under the License. package com.cloud.api.query.dao; -import java.util.ArrayList; -import java.util.Iterator; import java.util.List; import javax.ejb.Local; @@ -25,55 +23,26 @@ import javax.ejb.Local; import org.apache.log4j.Logger; import com.cloud.api.ApiDBUtils; -import com.cloud.api.ApiResponseHelper; import com.cloud.api.query.ViewResponseHelper; import com.cloud.api.query.vo.AccountJoinVO; -import com.cloud.api.query.vo.InstanceGroupJoinVO; -import com.cloud.api.query.vo.ResourceTagJoinVO; import com.cloud.api.query.vo.UserAccountJoinVO; -import com.cloud.api.query.vo.UserVmJoinVO; -import com.cloud.api.query.vo.VolumeJoinVO; import com.cloud.configuration.Resource.ResourceType; -import com.cloud.dc.DataCenter; -import com.cloud.domain.Domain; - -import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.ServerApiException; import org.apache.cloudstack.api.response.AccountResponse; -import org.apache.cloudstack.api.response.ListResponse; import org.apache.cloudstack.api.response.UserResponse; -import org.apache.cloudstack.api.response.VolumeResponse; - -import com.cloud.offering.ServiceOffering; -import com.cloud.server.Criteria; -import com.cloud.storage.Storage; -import com.cloud.storage.VMTemplateHostVO; -import com.cloud.storage.Volume; -import com.cloud.storage.VMTemplateStorageResourceAssoc.Status; import com.cloud.user.Account; -import com.cloud.user.UserContext; -import com.cloud.user.UserStatisticsVO; -import com.cloud.user.UserVO; import com.cloud.utils.db.GenericDaoBase; import com.cloud.utils.db.SearchBuilder; import com.cloud.utils.db.SearchCriteria; -import com.cloud.vm.VirtualMachine.State; @Local(value={AccountJoinDao.class}) public class AccountJoinDaoImpl extends GenericDaoBase implements AccountJoinDao { public static final Logger s_logger = Logger.getLogger(AccountJoinDaoImpl.class); - private SearchBuilder acctSearch; - private SearchBuilder acctIdSearch; protected AccountJoinDaoImpl() { - acctSearch = createSearchBuilder(); - acctSearch.and("idIN", acctSearch.entity().getId(), SearchCriteria.Op.IN); - acctSearch.done(); - acctIdSearch = createSearchBuilder(); acctIdSearch.and("id", acctIdSearch.entity().getId(), SearchCriteria.Op.EQ); acctIdSearch.done(); @@ -213,15 +182,4 @@ public class AccountJoinDaoImpl extends GenericDaoBase impl } - - - @Override - public List searchByIds(Long... ids) { - SearchCriteria sc = acctSearch.create(); - sc.setParameters("idIN", ids); - return searchIncludingRemoved(sc, null, null, false); - } - - - } diff --git a/server/src/com/cloud/api/query/dao/AsyncJobJoinDao.java b/server/src/com/cloud/api/query/dao/AsyncJobJoinDao.java index 59fcc87247a..f7a2c8c0f69 100644 --- a/server/src/com/cloud/api/query/dao/AsyncJobJoinDao.java +++ b/server/src/com/cloud/api/query/dao/AsyncJobJoinDao.java @@ -30,5 +30,4 @@ public interface AsyncJobJoinDao extends GenericDao { AsyncJobJoinVO newAsyncJobView(AsyncJob vol); - List searchByIds(Long... ids); } diff --git a/server/src/com/cloud/api/query/dao/AsyncJobJoinDaoImpl.java b/server/src/com/cloud/api/query/dao/AsyncJobJoinDaoImpl.java index c0c827b124a..bf1d15c4205 100644 --- a/server/src/com/cloud/api/query/dao/AsyncJobJoinDaoImpl.java +++ b/server/src/com/cloud/api/query/dao/AsyncJobJoinDaoImpl.java @@ -16,71 +16,32 @@ // under the License. package com.cloud.api.query.dao; -import java.util.ArrayList; import java.util.Date; -import java.util.Iterator; 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.ApiSerializerHelper; import com.cloud.api.SerializationContext; -import com.cloud.api.query.ViewResponseHelper; -import com.cloud.api.query.vo.AccountJoinVO; import com.cloud.api.query.vo.AsyncJobJoinVO; -import com.cloud.api.query.vo.InstanceGroupJoinVO; -import com.cloud.api.query.vo.ResourceTagJoinVO; -import com.cloud.api.query.vo.UserAccountJoinVO; -import com.cloud.api.query.vo.UserVmJoinVO; -import com.cloud.api.query.vo.VolumeJoinVO; import com.cloud.async.AsyncJob; -import com.cloud.configuration.Resource.ResourceType; -import com.cloud.dc.DataCenter; -import com.cloud.domain.Domain; - -import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.ResponseObject; -import org.apache.cloudstack.api.ServerApiException; -import org.apache.cloudstack.api.response.AccountResponse; import org.apache.cloudstack.api.response.AsyncJobResponse; -import org.apache.cloudstack.api.response.ListResponse; -import org.apache.cloudstack.api.response.UserResponse; -import org.apache.cloudstack.api.response.VolumeResponse; - -import com.cloud.offering.ServiceOffering; -import com.cloud.server.Criteria; -import com.cloud.storage.Storage; -import com.cloud.storage.VMTemplateHostVO; -import com.cloud.storage.Volume; -import com.cloud.storage.VMTemplateStorageResourceAssoc.Status; -import com.cloud.user.Account; -import com.cloud.user.User; -import com.cloud.user.UserContext; -import com.cloud.user.UserStatisticsVO; -import com.cloud.user.UserVO; import com.cloud.utils.db.GenericDaoBase; import com.cloud.utils.db.SearchBuilder; import com.cloud.utils.db.SearchCriteria; -import com.cloud.vm.VirtualMachine.State; @Local(value={AsyncJobJoinDao.class}) public class AsyncJobJoinDaoImpl extends GenericDaoBase implements AsyncJobJoinDao { public static final Logger s_logger = Logger.getLogger(AsyncJobJoinDaoImpl.class); - private SearchBuilder jobSearch; - private SearchBuilder jobIdSearch; protected AsyncJobJoinDaoImpl() { - jobSearch = createSearchBuilder(); - jobSearch.and("idIN", jobSearch.entity().getId(), SearchCriteria.Op.IN); - jobSearch.done(); jobIdSearch = createSearchBuilder(); jobIdSearch.and("id", jobIdSearch.entity().getId(), SearchCriteria.Op.EQ); @@ -149,13 +110,5 @@ public class AsyncJobJoinDaoImpl extends GenericDaoBase im - @Override - public List searchByIds(Long... ids) { - SearchCriteria sc = jobSearch.create(); - sc.setParameters("idIN", ids); - return searchIncludingRemoved(sc, null, null, false); - } - - } diff --git a/server/src/com/cloud/api/query/dao/DomainRouterJoinDaoImpl.java b/server/src/com/cloud/api/query/dao/DomainRouterJoinDaoImpl.java index 9feb131a7a8..94736cd7f90 100644 --- a/server/src/com/cloud/api/query/dao/DomainRouterJoinDaoImpl.java +++ b/server/src/com/cloud/api/query/dao/DomainRouterJoinDaoImpl.java @@ -25,12 +25,14 @@ import org.apache.log4j.Logger; import com.cloud.api.ApiResponseHelper; import com.cloud.api.query.vo.DomainRouterJoinVO; +import com.cloud.configuration.dao.ConfigurationDao; import org.apache.cloudstack.api.response.DomainRouterResponse; import org.apache.cloudstack.api.response.NicResponse; import com.cloud.network.Networks.TrafficType; import com.cloud.network.router.VirtualRouter; import com.cloud.user.Account; +import com.cloud.utils.component.Inject; import com.cloud.utils.db.GenericDaoBase; import com.cloud.utils.db.SearchBuilder; import com.cloud.utils.db.SearchCriteria; @@ -40,6 +42,9 @@ import com.cloud.utils.db.SearchCriteria; public class DomainRouterJoinDaoImpl extends GenericDaoBase implements DomainRouterJoinDao { public static final Logger s_logger = Logger.getLogger(DomainRouterJoinDaoImpl.class); + @Inject + private ConfigurationDao _configDao; + private SearchBuilder vrSearch; private SearchBuilder vrIdSearch; @@ -189,10 +194,47 @@ public class DomainRouterJoinDaoImpl extends GenericDaoBase searchByIds(Long... ids) { - SearchCriteria sc = vrSearch.create(); - sc.setParameters("idIN", ids); - return searchIncludingRemoved(sc, null, null, false); + public List searchByIds(Long... vrIds) { + // set detail batch query size + int DETAILS_BATCH_SIZE = 2000; + String batchCfg = _configDao.getValue("detail.batch.query.size"); + if ( batchCfg != null ){ + DETAILS_BATCH_SIZE = Integer.parseInt(batchCfg); + } + // query details by batches + List uvList = new ArrayList(); + // query details by batches + int curr_index = 0; + if ( vrIds.length > DETAILS_BATCH_SIZE ){ + while ( (curr_index + DETAILS_BATCH_SIZE ) <= vrIds.length ) { + Long[] ids = new Long[DETAILS_BATCH_SIZE]; + for (int k = 0, j = curr_index; j < curr_index + DETAILS_BATCH_SIZE; j++, k++) { + ids[k] = vrIds[j]; + } + SearchCriteria sc = vrSearch.create(); + sc.setParameters("idIN", ids); + List vms = searchIncludingRemoved(sc, null, null, false); + if (vms != null) { + uvList.addAll(vms); + } + curr_index += DETAILS_BATCH_SIZE; + } + } + if (curr_index < vrIds.length) { + int batch_size = (vrIds.length - curr_index); + // set the ids value + Long[] ids = new Long[batch_size]; + for (int k = 0, j = curr_index; j < curr_index + batch_size; j++, k++) { + ids[k] = vrIds[j]; + } + SearchCriteria sc = vrSearch.create(); + sc.setParameters("idIN", ids); + List vms = searchIncludingRemoved(sc, null, null, false); + if (vms != null) { + uvList.addAll(vms); + } + } + return uvList; } diff --git a/server/src/com/cloud/api/query/dao/HostJoinDaoImpl.java b/server/src/com/cloud/api/query/dao/HostJoinDaoImpl.java index 723a01d6d47..e8423836004 100644 --- a/server/src/com/cloud/api/query/dao/HostJoinDaoImpl.java +++ b/server/src/com/cloud/api/query/dao/HostJoinDaoImpl.java @@ -17,6 +17,7 @@ package com.cloud.api.query.dao; import java.text.DecimalFormat; +import java.util.ArrayList; import java.util.Date; import java.util.EnumSet; import java.util.Iterator; @@ -29,12 +30,14 @@ import org.apache.log4j.Logger; import com.cloud.api.ApiDBUtils; import com.cloud.api.query.vo.HostJoinVO; +import com.cloud.configuration.dao.ConfigurationDao; import com.cloud.host.Host; import com.cloud.host.HostStats; import org.apache.cloudstack.api.ApiConstants.HostDetails; import org.apache.cloudstack.api.response.HostResponse; import com.cloud.storage.StorageStats; +import com.cloud.utils.component.Inject; import com.cloud.utils.db.GenericDaoBase; import com.cloud.utils.db.SearchBuilder; import com.cloud.utils.db.SearchCriteria; @@ -44,20 +47,23 @@ import com.cloud.utils.db.SearchCriteria; public class HostJoinDaoImpl extends GenericDaoBase implements HostJoinDao { public static final Logger s_logger = Logger.getLogger(HostJoinDaoImpl.class); - private SearchBuilder vrSearch; + @Inject + private ConfigurationDao _configDao; - private SearchBuilder vrIdSearch; + private SearchBuilder hostSearch; + + private SearchBuilder hostIdSearch; protected HostJoinDaoImpl() { - vrSearch = createSearchBuilder(); - vrSearch.and("idIN", vrSearch.entity().getId(), SearchCriteria.Op.IN); - vrSearch.done(); + hostSearch = createSearchBuilder(); + hostSearch.and("idIN", hostSearch.entity().getId(), SearchCriteria.Op.IN); + hostSearch.done(); - vrIdSearch = createSearchBuilder(); - vrIdSearch.and("id", vrIdSearch.entity().getId(), SearchCriteria.Op.EQ); - vrIdSearch.done(); + hostIdSearch = createSearchBuilder(); + hostIdSearch.and("id", hostIdSearch.entity().getId(), SearchCriteria.Op.EQ); + hostIdSearch.done(); this._count = "select count(distinct id) from host_view WHERE "; } @@ -206,7 +212,7 @@ public class HostJoinDaoImpl extends GenericDaoBase implements @Override public List newHostView(Host host) { - SearchCriteria sc = vrIdSearch.create(); + SearchCriteria sc = hostIdSearch.create(); sc.setParameters("id", host.getId()); return searchIncludingRemoved(sc, null, null, false); @@ -215,10 +221,47 @@ public class HostJoinDaoImpl extends GenericDaoBase implements @Override - public List searchByIds(Long... ids) { - SearchCriteria sc = vrSearch.create(); - sc.setParameters("idIN", ids); - return searchIncludingRemoved(sc, null, null, false); + public List searchByIds(Long... hostIds) { + // set detail batch query size + int DETAILS_BATCH_SIZE = 2000; + String batchCfg = _configDao.getValue("detail.batch.query.size"); + if ( batchCfg != null ){ + DETAILS_BATCH_SIZE = Integer.parseInt(batchCfg); + } + // query details by batches + List uvList = new ArrayList(); + // query details by batches + int curr_index = 0; + if ( hostIds.length > DETAILS_BATCH_SIZE ){ + while ( (curr_index + DETAILS_BATCH_SIZE ) <= hostIds.length ) { + Long[] ids = new Long[DETAILS_BATCH_SIZE]; + for (int k = 0, j = curr_index; j < curr_index + DETAILS_BATCH_SIZE; j++, k++) { + ids[k] = hostIds[j]; + } + SearchCriteria sc = hostSearch.create(); + sc.setParameters("idIN", ids); + List vms = searchIncludingRemoved(sc, null, null, false); + if (vms != null) { + uvList.addAll(vms); + } + curr_index += DETAILS_BATCH_SIZE; + } + } + if (curr_index < hostIds.length) { + int batch_size = (hostIds.length - curr_index); + // set the ids value + Long[] ids = new Long[batch_size]; + for (int k = 0, j = curr_index; j < curr_index + batch_size; j++, k++) { + ids[k] = hostIds[j]; + } + SearchCriteria sc = hostSearch.create(); + sc.setParameters("idIN", ids); + List vms = searchIncludingRemoved(sc, null, null, false); + if (vms != null) { + uvList.addAll(vms); + } + } + return uvList; } diff --git a/server/src/com/cloud/api/query/dao/InstanceGroupJoinDao.java b/server/src/com/cloud/api/query/dao/InstanceGroupJoinDao.java index 79e5728de75..78ceab16c42 100644 --- a/server/src/com/cloud/api/query/dao/InstanceGroupJoinDao.java +++ b/server/src/com/cloud/api/query/dao/InstanceGroupJoinDao.java @@ -16,8 +16,6 @@ // under the License. package com.cloud.api.query.dao; -import java.util.List; - import org.apache.cloudstack.api.response.InstanceGroupResponse; import com.cloud.api.query.vo.InstanceGroupJoinVO; @@ -30,6 +28,5 @@ public interface InstanceGroupJoinDao extends GenericDao searchByIds(Long... ids); } diff --git a/server/src/com/cloud/api/query/dao/InstanceGroupJoinDaoImpl.java b/server/src/com/cloud/api/query/dao/InstanceGroupJoinDaoImpl.java index 83746059c87..f83ef6cd8fd 100644 --- a/server/src/com/cloud/api/query/dao/InstanceGroupJoinDaoImpl.java +++ b/server/src/com/cloud/api/query/dao/InstanceGroupJoinDaoImpl.java @@ -37,17 +37,11 @@ import com.cloud.vm.InstanceGroup; public class InstanceGroupJoinDaoImpl extends GenericDaoBase implements InstanceGroupJoinDao { public static final Logger s_logger = Logger.getLogger(InstanceGroupJoinDaoImpl.class); - private SearchBuilder vrSearch; - private SearchBuilder vrIdSearch; protected InstanceGroupJoinDaoImpl() { - vrSearch = createSearchBuilder(); - vrSearch.and("idIN", vrSearch.entity().getId(), SearchCriteria.Op.IN); - vrSearch.done(); - vrIdSearch = createSearchBuilder(); vrIdSearch.and("id", vrIdSearch.entity().getId(), SearchCriteria.Op.EQ); vrIdSearch.done(); @@ -84,14 +78,5 @@ public class InstanceGroupJoinDaoImpl extends GenericDaoBase searchByIds(Long... ids) { - SearchCriteria sc = vrSearch.create(); - sc.setParameters("idIN", ids); - return searchIncludingRemoved(sc, null, null, false); - } - - - } diff --git a/server/src/com/cloud/api/query/dao/ProjectAccountJoinDao.java b/server/src/com/cloud/api/query/dao/ProjectAccountJoinDao.java index a653ddde238..d8fa0f8acb1 100644 --- a/server/src/com/cloud/api/query/dao/ProjectAccountJoinDao.java +++ b/server/src/com/cloud/api/query/dao/ProjectAccountJoinDao.java @@ -16,8 +16,6 @@ // under the License. package com.cloud.api.query.dao; -import java.util.List; - import org.apache.cloudstack.api.response.ProjectAccountResponse; import com.cloud.api.query.vo.ProjectAccountJoinVO; diff --git a/server/src/com/cloud/api/query/dao/ProjectAccountJoinDaoImpl.java b/server/src/com/cloud/api/query/dao/ProjectAccountJoinDaoImpl.java index 59eeb46bdeb..f808da0c5f1 100644 --- a/server/src/com/cloud/api/query/dao/ProjectAccountJoinDaoImpl.java +++ b/server/src/com/cloud/api/query/dao/ProjectAccountJoinDaoImpl.java @@ -35,14 +35,14 @@ public class ProjectAccountJoinDaoImpl extends GenericDaoBase vrIdSearch; + private SearchBuilder paIdSearch; protected ProjectAccountJoinDaoImpl() { - vrIdSearch = createSearchBuilder(); - vrIdSearch.and("accountId", vrIdSearch.entity().getAccountId(), SearchCriteria.Op.EQ); - vrIdSearch.and("projectId", vrIdSearch.entity().getProjectId(), SearchCriteria.Op.EQ); - vrIdSearch.done(); + paIdSearch = createSearchBuilder(); + paIdSearch.and("accountId", paIdSearch.entity().getAccountId(), SearchCriteria.Op.EQ); + paIdSearch.and("projectId", paIdSearch.entity().getProjectId(), SearchCriteria.Op.EQ); + paIdSearch.done(); this._count = "select count(distinct id) from project_account_view WHERE "; } @@ -74,7 +74,7 @@ public class ProjectAccountJoinDaoImpl extends GenericDaoBase sc = vrIdSearch.create(); + SearchCriteria sc = paIdSearch.create(); sc.setParameters("accountId", proj.getAccountId()); sc.setParameters("projectId", proj.getProjectId()); List grps = searchIncludingRemoved(sc, null, null, false); diff --git a/server/src/com/cloud/api/query/dao/ProjectInvitationJoinDaoImpl.java b/server/src/com/cloud/api/query/dao/ProjectInvitationJoinDaoImpl.java index 41738615141..ebf64d1ce55 100644 --- a/server/src/com/cloud/api/query/dao/ProjectInvitationJoinDaoImpl.java +++ b/server/src/com/cloud/api/query/dao/ProjectInvitationJoinDaoImpl.java @@ -24,10 +24,8 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.response.ProjectInvitationResponse; -import com.cloud.api.ApiDBUtils; import com.cloud.api.query.vo.ProjectInvitationJoinVO; import com.cloud.projects.ProjectInvitation; -import com.cloud.user.Account; import com.cloud.utils.db.GenericDaoBase; import com.cloud.utils.db.SearchBuilder; import com.cloud.utils.db.SearchCriteria; @@ -37,13 +35,13 @@ public class ProjectInvitationJoinDaoImpl extends GenericDaoBase vrIdSearch; + private SearchBuilder piIdSearch; protected ProjectInvitationJoinDaoImpl() { - vrIdSearch = createSearchBuilder(); - vrIdSearch.and("id", vrIdSearch.entity().getId(), SearchCriteria.Op.EQ); - vrIdSearch.done(); + piIdSearch = createSearchBuilder(); + piIdSearch.and("id", piIdSearch.entity().getId(), SearchCriteria.Op.EQ); + piIdSearch.done(); this._count = "select count(distinct id) from project_invitation_view WHERE "; } @@ -75,7 +73,7 @@ public class ProjectInvitationJoinDaoImpl extends GenericDaoBase sc = vrIdSearch.create(); + SearchCriteria sc = piIdSearch.create(); sc.setParameters("id", proj.getId()); List grps = searchIncludingRemoved(sc, null, null, false); assert grps != null && grps.size() == 1 : "No project invitation found for id " + proj.getId(); diff --git a/server/src/com/cloud/api/query/dao/ProjectJoinDaoImpl.java b/server/src/com/cloud/api/query/dao/ProjectJoinDaoImpl.java index 3663e0734ac..15bff3677fe 100644 --- a/server/src/com/cloud/api/query/dao/ProjectJoinDaoImpl.java +++ b/server/src/com/cloud/api/query/dao/ProjectJoinDaoImpl.java @@ -16,6 +16,7 @@ // under the License. package com.cloud.api.query.dao; +import java.util.ArrayList; import java.util.List; import javax.ejb.Local; @@ -25,9 +26,11 @@ import org.apache.log4j.Logger; import com.cloud.api.ApiDBUtils; import com.cloud.api.query.vo.ProjectJoinVO; import com.cloud.api.query.vo.ResourceTagJoinVO; +import com.cloud.configuration.dao.ConfigurationDao; import org.apache.cloudstack.api.response.ProjectResponse; import com.cloud.projects.Project; +import com.cloud.utils.component.Inject; import com.cloud.utils.db.GenericDaoBase; import com.cloud.utils.db.SearchBuilder; import com.cloud.utils.db.SearchCriteria; @@ -36,19 +39,22 @@ import com.cloud.utils.db.SearchCriteria; public class ProjectJoinDaoImpl extends GenericDaoBase implements ProjectJoinDao { public static final Logger s_logger = Logger.getLogger(ProjectJoinDaoImpl.class); - private SearchBuilder vrSearch; + @Inject + private ConfigurationDao _configDao; - private SearchBuilder vrIdSearch; + private SearchBuilder prjSearch; + + private SearchBuilder prjIdSearch; protected ProjectJoinDaoImpl() { - vrSearch = createSearchBuilder(); - vrSearch.and("idIN", vrSearch.entity().getId(), SearchCriteria.Op.IN); - vrSearch.done(); + prjSearch = createSearchBuilder(); + prjSearch.and("idIN", prjSearch.entity().getId(), SearchCriteria.Op.IN); + prjSearch.done(); - vrIdSearch = createSearchBuilder(); - vrIdSearch.and("id", vrIdSearch.entity().getId(), SearchCriteria.Op.EQ); - vrIdSearch.done(); + prjIdSearch = createSearchBuilder(); + prjIdSearch.and("id", prjIdSearch.entity().getId(), SearchCriteria.Op.EQ); + prjIdSearch.done(); this._count = "select count(distinct id) from project_view WHERE "; } @@ -95,16 +101,53 @@ public class ProjectJoinDaoImpl extends GenericDaoBase impl @Override public List newProjectView(Project proj) { - SearchCriteria sc = vrIdSearch.create(); + SearchCriteria sc = prjIdSearch.create(); sc.setParameters("id", proj.getId()); return searchIncludingRemoved(sc, null, null, false); } @Override - public List searchByIds(Long... ids) { - SearchCriteria sc = vrSearch.create(); - sc.setParameters("idIN", ids); - return searchIncludingRemoved(sc, null, null, false); + public List searchByIds(Long... prjIds) { + // set detail batch query size + int DETAILS_BATCH_SIZE = 2000; + String batchCfg = _configDao.getValue("detail.batch.query.size"); + if ( batchCfg != null ){ + DETAILS_BATCH_SIZE = Integer.parseInt(batchCfg); + } + // query details by batches + List uvList = new ArrayList(); + // query details by batches + int curr_index = 0; + if ( prjIds.length > DETAILS_BATCH_SIZE ){ + while ( (curr_index + DETAILS_BATCH_SIZE ) <= prjIds.length ) { + Long[] ids = new Long[DETAILS_BATCH_SIZE]; + for (int k = 0, j = curr_index; j < curr_index + DETAILS_BATCH_SIZE; j++, k++) { + ids[k] = prjIds[j]; + } + SearchCriteria sc = prjSearch.create(); + sc.setParameters("idIN", ids); + List vms = searchIncludingRemoved(sc, null, null, false); + if (vms != null) { + uvList.addAll(vms); + } + curr_index += DETAILS_BATCH_SIZE; + } + } + if (curr_index < prjIds.length) { + int batch_size = (prjIds.length - curr_index); + // set the ids value + Long[] ids = new Long[batch_size]; + for (int k = 0, j = curr_index; j < curr_index + batch_size; j++, k++) { + ids[k] = prjIds[j]; + } + SearchCriteria sc = prjSearch.create(); + sc.setParameters("idIN", ids); + List vms = searchIncludingRemoved(sc, null, null, false); + if (vms != null) { + uvList.addAll(vms); + } + } + return uvList; } } diff --git a/server/src/com/cloud/api/query/dao/ResourceTagJoinDaoImpl.java b/server/src/com/cloud/api/query/dao/ResourceTagJoinDaoImpl.java index badf45758c2..5adee9ee170 100644 --- a/server/src/com/cloud/api/query/dao/ResourceTagJoinDaoImpl.java +++ b/server/src/com/cloud/api/query/dao/ResourceTagJoinDaoImpl.java @@ -25,9 +25,11 @@ import org.apache.log4j.Logger; import com.cloud.api.ApiResponseHelper; import com.cloud.api.query.vo.ResourceTagJoinVO; +import com.cloud.configuration.dao.ConfigurationDao; import org.apache.cloudstack.api.response.ResourceTagResponse; import com.cloud.server.ResourceTag; +import com.cloud.utils.component.Inject; import com.cloud.utils.db.GenericDaoBase; import com.cloud.utils.db.SearchBuilder; import com.cloud.utils.db.SearchCriteria; @@ -37,19 +39,22 @@ import com.cloud.utils.db.SearchCriteria; public class ResourceTagJoinDaoImpl extends GenericDaoBase implements ResourceTagJoinDao { public static final Logger s_logger = Logger.getLogger(ResourceTagJoinDaoImpl.class); - private SearchBuilder vrSearch; + @Inject + private ConfigurationDao _configDao; - private SearchBuilder vrIdSearch; + private SearchBuilder tagSearch; + + private SearchBuilder tagIdSearch; protected ResourceTagJoinDaoImpl() { - vrSearch = createSearchBuilder(); - vrSearch.and("idIN", vrSearch.entity().getId(), SearchCriteria.Op.IN); - vrSearch.done(); + tagSearch = createSearchBuilder(); + tagSearch.and("idIN", tagSearch.entity().getId(), SearchCriteria.Op.IN); + tagSearch.done(); - vrIdSearch = createSearchBuilder(); - vrIdSearch.and("id", vrIdSearch.entity().getId(), SearchCriteria.Op.EQ); - vrIdSearch.done(); + tagIdSearch = createSearchBuilder(); + tagIdSearch.and("id", tagIdSearch.entity().getId(), SearchCriteria.Op.EQ); + tagIdSearch.done(); this._count = "select count(distinct id) from resource_tag_view WHERE "; } @@ -83,17 +88,54 @@ public class ResourceTagJoinDaoImpl extends GenericDaoBase searchByIds(Long... ids) { - SearchCriteria sc = vrSearch.create(); - sc.setParameters("idIN", ids); - return searchIncludingRemoved(sc, null, null, false); + public List searchByIds(Long... tagIds) { + // set detail batch query size + int DETAILS_BATCH_SIZE = 2000; + String batchCfg = _configDao.getValue("detail.batch.query.size"); + if ( batchCfg != null ){ + DETAILS_BATCH_SIZE = Integer.parseInt(batchCfg); + } + // query details by batches + List uvList = new ArrayList(); + // query details by batches + int curr_index = 0; + if ( tagIds.length > DETAILS_BATCH_SIZE ){ + while ( (curr_index + DETAILS_BATCH_SIZE ) <= tagIds.length ) { + Long[] ids = new Long[DETAILS_BATCH_SIZE]; + for (int k = 0, j = curr_index; j < curr_index + DETAILS_BATCH_SIZE; j++, k++) { + ids[k] = tagIds[j]; + } + SearchCriteria sc = tagSearch.create(); + sc.setParameters("idIN", ids); + List vms = searchIncludingRemoved(sc, null, null, false); + if (vms != null) { + uvList.addAll(vms); + } + curr_index += DETAILS_BATCH_SIZE; + } + } + if (curr_index < tagIds.length) { + int batch_size = (tagIds.length - curr_index); + // set the ids value + Long[] ids = new Long[batch_size]; + for (int k = 0, j = curr_index; j < curr_index + batch_size; j++, k++) { + ids[k] = tagIds[j]; + } + SearchCriteria sc = tagSearch.create(); + sc.setParameters("idIN", ids); + List vms = searchIncludingRemoved(sc, null, null, false); + if (vms != null) { + uvList.addAll(vms); + } + } + return uvList; } @Override public ResourceTagJoinVO newResourceTagView(ResourceTag vr) { - SearchCriteria sc = vrIdSearch.create(); + SearchCriteria sc = tagIdSearch.create(); sc.setParameters("id", vr.getId()); List vms = searchIncludingRemoved(sc, null, null, false); assert vms != null && vms.size() == 1 : "No tag found for tag id " + vr.getId(); diff --git a/server/src/com/cloud/api/query/dao/SecurityGroupJoinDaoImpl.java b/server/src/com/cloud/api/query/dao/SecurityGroupJoinDaoImpl.java index 57cbf4732ac..c35c4aae297 100644 --- a/server/src/com/cloud/api/query/dao/SecurityGroupJoinDaoImpl.java +++ b/server/src/com/cloud/api/query/dao/SecurityGroupJoinDaoImpl.java @@ -27,12 +27,14 @@ import com.cloud.api.ApiDBUtils; import com.cloud.api.ApiResponseHelper; import com.cloud.api.query.vo.ResourceTagJoinVO; import com.cloud.api.query.vo.SecurityGroupJoinVO; +import com.cloud.configuration.dao.ConfigurationDao; import org.apache.cloudstack.api.response.SecurityGroupResponse; import org.apache.cloudstack.api.response.SecurityGroupRuleResponse; import com.cloud.network.security.SecurityGroup; import com.cloud.network.security.SecurityRule.SecurityRuleType; import com.cloud.user.Account; +import com.cloud.utils.component.Inject; import com.cloud.utils.db.GenericDaoBase; import com.cloud.utils.db.SearchBuilder; import com.cloud.utils.db.SearchCriteria; @@ -41,6 +43,9 @@ import com.cloud.utils.db.SearchCriteria; public class SecurityGroupJoinDaoImpl extends GenericDaoBase implements SecurityGroupJoinDao { public static final Logger s_logger = Logger.getLogger(SecurityGroupJoinDaoImpl.class); + @Inject + private ConfigurationDao _configDao; + private SearchBuilder sgSearch; private SearchBuilder sgIdSearch; @@ -175,9 +180,46 @@ public class SecurityGroupJoinDaoImpl extends GenericDaoBase searchByIds(Long... ids) { - SearchCriteria sc = sgSearch.create(); - sc.setParameters("idIN", ids); - return searchIncludingRemoved(sc, null, null, false); + public List searchByIds(Long... sgIds) { + // set detail batch query size + int DETAILS_BATCH_SIZE = 2000; + String batchCfg = _configDao.getValue("detail.batch.query.size"); + if ( batchCfg != null ){ + DETAILS_BATCH_SIZE = Integer.parseInt(batchCfg); + } + // query details by batches + List uvList = new ArrayList(); + // query details by batches + int curr_index = 0; + if ( sgIds.length > DETAILS_BATCH_SIZE ){ + while ( (curr_index + DETAILS_BATCH_SIZE ) <= sgIds.length ) { + Long[] ids = new Long[DETAILS_BATCH_SIZE]; + for (int k = 0, j = curr_index; j < curr_index + DETAILS_BATCH_SIZE; j++, k++) { + ids[k] = sgIds[j]; + } + SearchCriteria sc = sgSearch.create(); + sc.setParameters("idIN", ids); + List vms = searchIncludingRemoved(sc, null, null, false); + if (vms != null) { + uvList.addAll(vms); + } + curr_index += DETAILS_BATCH_SIZE; + } + } + if (curr_index < sgIds.length) { + int batch_size = (sgIds.length - curr_index); + // set the ids value + Long[] ids = new Long[batch_size]; + for (int k = 0, j = curr_index; j < curr_index + batch_size; j++, k++) { + ids[k] = sgIds[j]; + } + SearchCriteria sc = sgSearch.create(); + sc.setParameters("idIN", ids); + List vms = searchIncludingRemoved(sc, null, null, false); + if (vms != null) { + uvList.addAll(vms); + } + } + return uvList; } } diff --git a/server/src/com/cloud/api/query/dao/UserAccountJoinDao.java b/server/src/com/cloud/api/query/dao/UserAccountJoinDao.java index 50f221ef055..b48f19272bc 100644 --- a/server/src/com/cloud/api/query/dao/UserAccountJoinDao.java +++ b/server/src/com/cloud/api/query/dao/UserAccountJoinDao.java @@ -33,8 +33,6 @@ public interface UserAccountJoinDao extends GenericDao UserAccountJoinVO newUserView(UserAccount usr); - List searchByIds(Long... ids); - List searchByAccountId(Long accountId); } diff --git a/server/src/com/cloud/api/query/dao/UserAccountJoinDaoImpl.java b/server/src/com/cloud/api/query/dao/UserAccountJoinDaoImpl.java index 767f1901c68..b1f5dcafeb3 100644 --- a/server/src/com/cloud/api/query/dao/UserAccountJoinDaoImpl.java +++ b/server/src/com/cloud/api/query/dao/UserAccountJoinDaoImpl.java @@ -43,7 +43,6 @@ import com.cloud.vm.InstanceGroup; public class UserAccountJoinDaoImpl extends GenericDaoBase implements UserAccountJoinDao { public static final Logger s_logger = Logger.getLogger(UserAccountJoinDaoImpl.class); - private SearchBuilder vrSearch; private SearchBuilder vrIdSearch; @@ -52,10 +51,6 @@ public class UserAccountJoinDaoImpl extends GenericDaoBase searchByIds(Long... ids) { - SearchCriteria sc = vrSearch.create(); - sc.setParameters("idIN", ids); - return searchIncludingRemoved(sc, null, null, false); - } - - - @Override public List searchByAccountId(Long accountId) { SearchCriteria sc = vrAcctIdSearch.create(); diff --git a/server/src/com/cloud/api/query/dao/UserVmJoinDaoImpl.java b/server/src/com/cloud/api/query/dao/UserVmJoinDaoImpl.java index c134284f728..3310518ee79 100644 --- a/server/src/com/cloud/api/query/dao/UserVmJoinDaoImpl.java +++ b/server/src/com/cloud/api/query/dao/UserVmJoinDaoImpl.java @@ -21,6 +21,7 @@ import java.util.ArrayList; import java.util.EnumSet; import java.util.Hashtable; import java.util.List; +import java.util.Set; import javax.ejb.Local; @@ -29,6 +30,7 @@ import org.apache.log4j.Logger; import com.cloud.api.ApiDBUtils; import com.cloud.api.query.vo.ResourceTagJoinVO; import com.cloud.api.query.vo.UserVmJoinVO; +import com.cloud.configuration.dao.ConfigurationDao; import org.apache.cloudstack.api.ApiConstants.VMDetails; import org.apache.cloudstack.api.response.NicResponse; @@ -36,6 +38,8 @@ import org.apache.cloudstack.api.response.SecurityGroupResponse; import org.apache.cloudstack.api.response.UserVmResponse; import com.cloud.user.Account; import com.cloud.uservm.UserVm; +import com.cloud.utils.component.ComponentLocator; +import com.cloud.utils.component.Inject; import com.cloud.utils.db.GenericDaoBase; import com.cloud.utils.db.SearchBuilder; import com.cloud.utils.db.SearchCriteria; @@ -46,7 +50,8 @@ import com.cloud.vm.VmStats; public class UserVmJoinDaoImpl extends GenericDaoBase implements UserVmJoinDao { public static final Logger s_logger = Logger.getLogger(UserVmJoinDaoImpl.class); - private static final int VM_DETAILS_BATCH_SIZE=100; + @Inject + private ConfigurationDao _configDao; private SearchBuilder VmDetailSearch; @@ -57,6 +62,8 @@ public class UserVmJoinDaoImpl extends GenericDaoBase implem VmDetailSearch.done(); this._count = "select count(distinct id) from user_vm_view WHERE "; + + } public UserVmResponse newUserVmResponse(String objectName, UserVmJoinVO userVm, EnumSet details, Account caller) { @@ -265,16 +272,51 @@ public class UserVmJoinDaoImpl extends GenericDaoBase implem @Override public List searchByIds(Long... vmIds) { - SearchCriteria sc = VmDetailSearch.create(); - sc.setParameters("idIN", vmIds); - return searchIncludingRemoved(sc, null, null, false); + // set detail batch query size + int DETAILS_BATCH_SIZE = 2000; + String batchCfg = _configDao.getValue("detail.batch.query.size"); + if ( batchCfg != null ){ + DETAILS_BATCH_SIZE = Integer.parseInt(batchCfg); + } + // query details by batches + List uvList = new ArrayList(); + // query details by batches + int curr_index = 0; + if ( vmIds.length > DETAILS_BATCH_SIZE ){ + while ( (curr_index + DETAILS_BATCH_SIZE ) <= vmIds.length ) { + Long[] ids = new Long[DETAILS_BATCH_SIZE]; + for (int k = 0, j = curr_index; j < curr_index + DETAILS_BATCH_SIZE; j++, k++) { + ids[k] = vmIds[j]; + } + SearchCriteria sc = VmDetailSearch.create(); + sc.setParameters("idIN", ids); + List vms = searchIncludingRemoved(sc, null, null, false); + if (vms != null) { + uvList.addAll(vms); + } + curr_index += DETAILS_BATCH_SIZE; + } + } + if (curr_index < vmIds.length) { + int batch_size = (vmIds.length - curr_index); + // set the ids value + Long[] ids = new Long[batch_size]; + for (int k = 0, j = curr_index; j < curr_index + batch_size; j++, k++) { + ids[k] = vmIds[j]; + } + SearchCriteria sc = VmDetailSearch.create(); + sc.setParameters("idIN", ids); + List vms = searchIncludingRemoved(sc, null, null, false); + if (vms != null) { + uvList.addAll(vms); + } + } + return uvList; } @Override public List newUserVmView(UserVm... userVms) { - int curr_index = 0; - Hashtable userVmDataHash = new Hashtable(); for (UserVm vm : userVms){ if ( !userVmDataHash.containsKey(vm.getId())){ @@ -282,47 +324,8 @@ public class UserVmJoinDaoImpl extends GenericDaoBase implem } } - List uvList = new ArrayList(); - List 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 sc = VmDetailSearch.create(); - sc.setParameters("idIN", vmIds); - List 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 sc = VmDetailSearch.create(); - sc.setParameters("idIN", vmIds); - List 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; - + Set vmIdSet = userVmDataHash.keySet(); + return searchByIds(vmIdSet.toArray(new Long[vmIdSet.size()])); } } diff --git a/server/src/com/cloud/api/query/dao/VolumeJoinDaoImpl.java b/server/src/com/cloud/api/query/dao/VolumeJoinDaoImpl.java index c6bc7b51aa3..35ba2eb4537 100644 --- a/server/src/com/cloud/api/query/dao/VolumeJoinDaoImpl.java +++ b/server/src/com/cloud/api/query/dao/VolumeJoinDaoImpl.java @@ -16,6 +16,7 @@ // under the License. package com.cloud.api.query.dao; +import java.util.ArrayList; import java.util.List; import javax.ejb.Local; @@ -26,6 +27,8 @@ import com.cloud.api.ApiDBUtils; import com.cloud.api.ApiResponseHelper; import com.cloud.api.query.vo.ResourceTagJoinVO; import com.cloud.api.query.vo.VolumeJoinVO; +import com.cloud.configuration.dao.ConfigurationDao; + import org.apache.cloudstack.api.response.VolumeResponse; import com.cloud.offering.ServiceOffering; @@ -35,6 +38,7 @@ import com.cloud.storage.Volume; import com.cloud.storage.VMTemplateStorageResourceAssoc.Status; import com.cloud.user.Account; import com.cloud.user.UserContext; +import com.cloud.utils.component.Inject; import com.cloud.utils.db.GenericDaoBase; import com.cloud.utils.db.SearchBuilder; import com.cloud.utils.db.SearchCriteria; @@ -44,6 +48,9 @@ import com.cloud.utils.db.SearchCriteria; public class VolumeJoinDaoImpl extends GenericDaoBase implements VolumeJoinDao { public static final Logger s_logger = Logger.getLogger(VolumeJoinDaoImpl.class); + @Inject + private ConfigurationDao _configDao; + private SearchBuilder volSearch; private SearchBuilder volIdSearch; @@ -224,10 +231,47 @@ public class VolumeJoinDaoImpl extends GenericDaoBase implem @Override - public List searchByIds(Long... ids) { - SearchCriteria sc = volSearch.create(); - sc.setParameters("idIN", ids); - return searchIncludingRemoved(sc, null, null, false); + public List searchByIds(Long... volIds) { + // set detail batch query size + int DETAILS_BATCH_SIZE = 2000; + String batchCfg = _configDao.getValue("detail.batch.query.size"); + if ( batchCfg != null ){ + DETAILS_BATCH_SIZE = Integer.parseInt(batchCfg); + } + // query details by batches + List uvList = new ArrayList(); + // query details by batches + int curr_index = 0; + if ( volIds.length > DETAILS_BATCH_SIZE ){ + while ( (curr_index + DETAILS_BATCH_SIZE ) <= volIds.length ) { + Long[] ids = new Long[DETAILS_BATCH_SIZE]; + for (int k = 0, j = curr_index; j < curr_index + DETAILS_BATCH_SIZE; j++, k++) { + ids[k] = volIds[j]; + } + SearchCriteria sc = volSearch.create(); + sc.setParameters("idIN", ids); + List vms = searchIncludingRemoved(sc, null, null, false); + if (vms != null) { + uvList.addAll(vms); + } + curr_index += DETAILS_BATCH_SIZE; + } + } + if (curr_index < volIds.length) { + int batch_size = (volIds.length - curr_index); + // set the ids value + Long[] ids = new Long[batch_size]; + for (int k = 0, j = curr_index; j < curr_index + batch_size; j++, k++) { + ids[k] = volIds[j]; + } + SearchCriteria sc = volSearch.create(); + sc.setParameters("idIN", ids); + List vms = searchIncludingRemoved(sc, null, null, false); + if (vms != null) { + uvList.addAll(vms); + } + } + return uvList; } diff --git a/server/src/com/cloud/configuration/Config.java b/server/src/com/cloud/configuration/Config.java index 92313ea3b79..b91fbdd69bf 100755 --- a/server/src/com/cloud/configuration/Config.java +++ b/server/src/com/cloud/configuration/Config.java @@ -5,7 +5,7 @@ // 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, @@ -35,15 +35,15 @@ import com.cloud.template.TemplateManager; import com.cloud.vm.UserVmManager; public enum Config { - + // Alert - + AlertEmailAddresses("Alert", ManagementServer.class, String.class, "alert.email.addresses", null, "Comma separated list of email addresses used for sending alerts.", null), AlertEmailSender("Alert", ManagementServer.class, String.class, "alert.email.sender", null, "Sender of alert email (will be in the From header of the email).", null), AlertSMTPHost("Alert", ManagementServer.class, String.class, "alert.smtp.host", null, "SMTP hostname used for sending out email alerts.", null), AlertSMTPPassword("Secure", ManagementServer.class, String.class, "alert.smtp.password", null, "Password for SMTP authentication (applies only if alert.smtp.useAuth is true).", null), AlertSMTPPort("Alert", ManagementServer.class, Integer.class, "alert.smtp.port", "465", "Port the SMTP server is listening on.", null), - AlertSMTPUseAuth("Alert", ManagementServer.class, String.class, "alert.smtp.useAuth", null, "If true, use SMTP authentication when sending emails.", null), + AlertSMTPUseAuth("Alert", ManagementServer.class, String.class, "alert.smtp.useAuth", null, "If true, use SMTP authentication when sending emails.", null), AlertSMTPUsername("Alert", ManagementServer.class, String.class, "alert.smtp.username", null, "Username for SMTP authentication (applies only if alert.smtp.useAuth is true).", null), AlertWait("Alert", AgentManager.class, Integer.class, "alert.wait", null, "Seconds to wait before alerting on a disconnected agent", null), CapacityCheckPeriod("Alert", ManagementServer.class, Integer.class, "capacity.check.period", "300000", "The interval in milliseconds between capacity checks", null), @@ -62,9 +62,9 @@ public enum Config { CPUCapacityDisableThreshold("Alert", ManagementServer.class, Float.class, "cluster.cpu.allocated.capacity.disablethreshold", "0.85", "Percentage (as a value between 0 and 1) of cpu utilization above which allocators will disable using the cluster for low cpu available. Keep the corresponding notification threshold lower than this to be notified beforehand.", null), MemoryCapacityDisableThreshold("Alert", ManagementServer.class, Float.class, "cluster.memory.allocated.capacity.disablethreshold", "0.85", "Percentage (as a value between 0 and 1) of memory utilization above which allocators will disable using the cluster for low memory available. Keep the corresponding notification threshold lower than this to be notified beforehand.", null), - + // Storage - + StorageOverprovisioningFactor("Storage", StoragePoolAllocator.class, String.class, "storage.overprovisioning.factor", "2", "Used for storage overprovisioning calculation; available storage will be (actualStorageSize * storage.overprovisioning.factor)", null), StorageStatsInterval("Storage", ManagementServer.class, String.class, "storage.stats.interval", "60000", "The interval (in milliseconds) when storage stats (per host) are retrieved from agents.", null), MaxVolumeSize("Storage", ManagementServer.class, Integer.class, "storage.max.volume.size", "2000", "The maximum size for a volume (in GB).", null), @@ -84,9 +84,9 @@ public enum Config { NetworkLBHaproxyStatsVisbility("Network", ManagementServer.class, String.class, "network.loadbalancer.haproxy.stats.visibility", "global", "Load Balancer(haproxy) stats visibilty, the value can be one of the following six parameters : global,guest-network,link-local,disabled,all,default", null), NetworkLBHaproxyStatsUri("Network", ManagementServer.class, String.class, "network.loadbalancer.haproxy.stats.uri","/admin?stats","Load Balancer(haproxy) uri.",null), NetworkLBHaproxyStatsAuth("Secure", ManagementServer.class, String.class, "network.loadbalancer.haproxy.stats.auth","admin1:AdMiN123","Load Balancer(haproxy) authetication string in the format username:password",null), - NetworkLBHaproxyStatsPort("Network", ManagementServer.class, String.class, "network.loadbalancer.haproxy.stats.port","8081","Load Balancer(haproxy) stats port number.",null), + NetworkLBHaproxyStatsPort("Network", ManagementServer.class, String.class, "network.loadbalancer.haproxy.stats.port","8081","Load Balancer(haproxy) stats port number.",null), NetworkRouterRpFilter("Network", ManagementServer.class, Integer.class, "network.disable.rpfilter", "true", "disable rp_filter on Domain Router VM public interfaces.", null), - + GuestVlanBits("Network", ManagementServer.class, Integer.class, "guest.vlan.bits", "12", "The number of bits to reserve for the VLAN identifier in the guest subnet.", null), //MulticastThrottlingRate("Network", ManagementServer.class, Integer.class, "multicast.throttling.rate", "10", "Default multicast rate in megabits per second allowed.", null), NetworkThrottlingRate("Network", ManagementServer.class, Integer.class, "network.throttling.rate", "200", "Default data transfer rate in megabits per second allowed in network.", null), @@ -102,18 +102,18 @@ public enum Config { SecurityGroupWorkerThreads("Network", ManagementServer.class, Integer.class, "network.securitygroups.workers.pool.size", "50", "Number of worker threads processing the security group update work queue", null), SecurityGroupWorkGlobalLockTimeout("Network", ManagementServer.class, Integer.class, "network.securitygroups.work.lock.timeout", "300", "Lock wait timeout (seconds) while updating the security group work queue", null), SecurityGroupWorkPerAgentMaxQueueSize("Network", ManagementServer.class, Integer.class, "network.securitygroups.work.per.agent.queue.size", "100", "The number of outstanding security group work items that can be queued to a host. If exceeded, work items will get dropped to conserve memory. Security Group Sync will take care of ensuring that the host gets updated eventually", null), - + SecurityGroupDefaultAdding("Network", ManagementServer.class, Boolean.class, "network.securitygroups.defaultadding", "true", "If true, the user VM would be added to the default security group by default", null), - + GuestOSNeedGatewayOnNonDefaultNetwork("Network", NetworkManager.class, String.class, "network.dhcp.nondefaultnetwork.setgateway.guestos", "Windows", "The guest OS's name start with this fields would result in DHCP server response gateway information even when the network it's on is not default network. Names are separated by comma.", null), - + //VPN RemoteAccessVpnPskLength("Network", AgentManager.class, Integer.class, "remote.access.vpn.psk.length", "24", "The length of the ipsec preshared key (minimum 8, maximum 256)", null), RemoteAccessVpnClientIpRange("Network", AgentManager.class, String.class, "remote.access.vpn.client.iprange", "10.1.2.1-10.1.2.8", "The range of ips to be allocated to remote access vpn clients. The first ip in the range is used by the VPN server", null), - RemoteAccessVpnUserLimit("Network", AgentManager.class, String.class, "remote.access.vpn.user.limit", "8", "The maximum number of VPN users that can be created per account", null), + RemoteAccessVpnUserLimit("Network", AgentManager.class, String.class, "remote.access.vpn.user.limit", "8", "The maximum number of VPN users that can be created per account", null), Site2SiteVpnConnectionPerVpnGatewayLimit("Network", ManagementServer.class, Integer.class, "site2site.vpn.vpngateway.connection.limit", "4", "The maximum number of VPN connection per VPN gateway", null), Site2SiteVpnSubnetsPerCustomerGatewayLimit("Network", ManagementServer.class, Integer.class, "site2site.vpn.customergateway.subnets.limit", "10", "The maximum number of subnets per customer gateway", null), - + // Console Proxy ConsoleProxyCapacityStandby("Console Proxy", AgentManager.class, String.class, "consoleproxy.capacity.standby", "10", "The minimal number of console proxy viewer sessions that system is able to serve immediately(standby capacity)", null), ConsoleProxyCapacityScanInterval("Console Proxy", AgentManager.class, String.class, "consoleproxy.capacityscan.interval", "30000", "The time interval(in millisecond) to scan whether or not system needs more console proxy to ensure minimal standby capacity", null), @@ -125,11 +125,11 @@ public enum Config { ConsoleProxySessionTimeout("Console Proxy", AgentManager.class, Integer.class, "consoleproxy.session.timeout", "300000", "Timeout(in milliseconds) that console proxy tries to maintain a viewer session before it times out the session for no activity", null), ConsoleProxyDisableRpFilter("Console Proxy", AgentManager.class, Integer.class, "consoleproxy.disable.rpfilter", "true", "disable rp_filter on console proxy VM public interface", null), ConsoleProxyLaunchMax("Console Proxy", AgentManager.class, Integer.class, "consoleproxy.launch.max", "10", "maximum number of console proxy instances per zone can be launched", null), - ConsoleProxyManagementState("Console Proxy", AgentManager.class, String.class, "consoleproxy.management.state", com.cloud.consoleproxy.ConsoleProxyManagementState.Auto.toString(), + ConsoleProxyManagementState("Console Proxy", AgentManager.class, String.class, "consoleproxy.management.state", com.cloud.consoleproxy.ConsoleProxyManagementState.Auto.toString(), "console proxy service management state", null), - ConsoleProxyManagementLastState("Console Proxy", AgentManager.class, String.class, "consoleproxy.management.state.last", com.cloud.consoleproxy.ConsoleProxyManagementState.Auto.toString(), + ConsoleProxyManagementLastState("Console Proxy", AgentManager.class, String.class, "consoleproxy.management.state.last", com.cloud.consoleproxy.ConsoleProxyManagementState.Auto.toString(), "last console proxy service management state", null), - + // Snapshots SnapshotHourlyMax("Snapshots", SnapshotManager.class, Integer.class, "snapshot.max.hourly", "8", "Maximum hourly snapshots for a volume", null), SnapshotDailyMax("Snapshots", SnapshotManager.class, Integer.class, "snapshot.max.daily", "8", "Maximum daily snapshots for a volume", null), @@ -137,7 +137,7 @@ public enum Config { SnapshotMonthlyMax("Snapshots", SnapshotManager.class, Integer.class, "snapshot.max.monthly", "8", "Maximum monthly snapshots for a volume", null), SnapshotPollInterval("Snapshots", SnapshotManager.class, Integer.class, "snapshot.poll.interval", "300", "The time interval in seconds when the management server polls for snapshots to be scheduled.", null), SnapshotDeltaMax("Snapshots", SnapshotManager.class, Integer.class, "snapshot.delta.max", "16", "max delta snapshots between two full snapshots.", null), - + // Advanced JobExpireMinutes("Advanced", ManagementServer.class, String.class, "job.expire.minutes", "1440", "Time (in minutes) for async-jobs to be kept in system", null), JobCancelThresholdMinutes("Advanced", ManagementServer.class, String.class, "job.cancel.threshold.minutes", "60", "Time (in minutes) for async-jobs to be forcely cancelled if it has been in process for long", null), @@ -165,7 +165,7 @@ public enum Config { RouterCpuMHz("Advanced", NetworkManager.class, Integer.class, "router.cpu.mhz", String.valueOf(VpcVirtualNetworkApplianceManager.DEFAULT_ROUTER_CPU_MHZ), "Default CPU speed (MHz) for router VM.", null), RestartRetryInterval("Advanced", HighAvailabilityManager.class, Integer.class, "restart.retry.interval", "600", "Time (in seconds) between retries to restart a vm", null), RouterStatsInterval("Advanced", NetworkManager.class, Integer.class, "router.stats.interval", "300", "Interval (in seconds) to report router statistics.", null), - ExternalNetworkStatsInterval("Advanced", NetworkManager.class, Integer.class, "external.network.stats.interval", "300", "Interval (in seconds) to report external network statistics.", null), + ExternalNetworkStatsInterval("Advanced", NetworkManager.class, Integer.class, "external.network.stats.interval", "300", "Interval (in seconds) to report external network statistics.", null), RouterCheckInterval("Advanced", NetworkManager.class, Integer.class, "router.check.interval", "30", "Interval (in seconds) to report redundant router status.", null), RouterCheckPoolSize("Advanced", NetworkManager.class, Integer.class, "router.check.poolsize", "10", "Numbers of threads using to check redundant router status.", null), RouterTemplateId("Advanced", NetworkManager.class, Long.class, "router.template.id", "1", "Default ID for template.", null), @@ -197,23 +197,23 @@ public enum Config { MaxTemplateAndIsoSize("Advanced", ManagementServer.class, Long.class, "max.template.iso.size", "50", "The maximum size for a downloaded template or ISO (in GB).", null), SecStorageAllowedInternalDownloadSites("Advanced", ManagementServer.class, String.class, "secstorage.allowed.internal.sites", null, "Comma separated list of cidrs internal to the datacenter that can host template download servers, please note 0.0.0.0 is not a valid site", null), SecStorageEncryptCopy("Advanced", ManagementServer.class, Boolean.class, "secstorage.encrypt.copy", "false", "Use SSL method used to encrypt copy traffic between zones", "true,false"), - SecStorageSecureCopyCert("Advanced", ManagementServer.class, String.class, "secstorage.ssl.cert.domain", "realhostip.com", "SSL certificate used to encrypt copy traffic between zones", null), + SecStorageSecureCopyCert("Advanced", ManagementServer.class, String.class, "secstorage.ssl.cert.domain", "realhostip.com", "SSL certificate used to encrypt copy traffic between zones", null), SecStorageCapacityStandby("Advanced", AgentManager.class, Integer.class, "secstorage.capacity.standby", "10", "The minimal number of command execution sessions that system is able to serve immediately(standby capacity)", null), SecStorageSessionMax("Advanced", AgentManager.class, Integer.class, "secstorage.session.max", "50", "The max number of command execution sessions that a SSVM can handle", null), SecStorageCmdExecutionTimeMax("Advanced", AgentManager.class, Integer.class, "secstorage.cmd.execution.time.max", "30", "The max command execution time in minute", null), SecStorageProxy("Advanced", AgentManager.class, String.class, "secstorage.proxy", null, "http proxy used by ssvm, in http://username:password@proxyserver:port format", null), - + DirectAttachNetworkEnabled("Advanced", ManagementServer.class, Boolean.class, "direct.attach.network.externalIpAllocator.enabled", "false", "Direct-attach VMs using external DHCP server", "true,false"), DirectAttachNetworkExternalAPIURL("Advanced", ManagementServer.class, String.class, "direct.attach.network.externalIpAllocator.url", null, "Direct-attach VMs using external DHCP server (API url)", null), CheckPodCIDRs("Advanced", ManagementServer.class, String.class, "check.pod.cidrs", "true", "If true, different pods must belong to different CIDR subnets.", "true,false"), NetworkGcWait("Advanced", ManagementServer.class, Integer.class, "network.gc.wait", "600", "Time (in seconds) to wait before shutting down a network that's not in used", null), - NetworkGcInterval("Advanced", ManagementServer.class, Integer.class, "network.gc.interval", "600", "Seconds to wait before checking for networks to shutdown", null), + NetworkGcInterval("Advanced", ManagementServer.class, Integer.class, "network.gc.interval", "600", "Seconds to wait before checking for networks to shutdown", null), CapacitySkipcountingHours("Advanced", ManagementServer.class, Integer.class, "capacity.skipcounting.hours", "3600", "Time (in seconds) to wait before release VM's cpu and memory when VM in stopped state", null), VmStatsInterval("Advanced", ManagementServer.class, Integer.class, "vm.stats.interval", "60000", "The interval (in milliseconds) when vm stats are retrieved from agents.", null), VmTransitionWaitInterval("Advanced", ManagementServer.class, Integer.class, "vm.tranisition.wait.interval", "3600", "Time (in seconds) to wait before taking over a VM in transition state", null), VmDestroyForcestop("Advanced", ManagementServer.class, Boolean.class, "vm.destroy.forcestop", "false", "On destroy, force-stop takes this value ", null), - + ControlCidr("Advanced", ManagementServer.class, String.class, "control.cidr", "169.254.0.0/16", "Changes the cidr for the control network traffic. Defaults to using link local. Must be unique within pods", null), ControlGateway("Advanced", ManagementServer.class, String.class, "control.gateway", "169.254.0.1", "gateway for the control network traffic", null), HostCapacityTypeToOrderClusters("Advanced", ManagementServer.class, String.class, "host.capacityType.to.order.clusters", "CPU", "The host capacity type (CPU or RAM) is used by deployment planner to order clusters during VM resource allocation", "CPU,RAM"), @@ -236,7 +236,7 @@ public enum Config { OvmPublicNetwork("Hidden", ManagementServer.class, String.class, "ovm.public.network.device", null, "Specify the public bridge on host for public network", null), OvmPrivateNetwork("Hidden", ManagementServer.class, String.class, "ovm.private.network.device", null, "Specify the private bridge on host for private network", null), OvmGuestNetwork("Hidden", ManagementServer.class, String.class, "ovm.guest.network.device", null, "Specify the private bridge on host for private network", null), - + // XenServer XenPublicNetwork("Hidden", ManagementServer.class, String.class, "xen.public.network.device", null, "[ONLY IF THE PUBLIC NETWORK IS ON A DEDICATED NIC]:The network name label of the physical device dedicated to the public network on a XenServer host", null), XenStorageNetwork1("Hidden", ManagementServer.class, String.class, "xen.storage.network.device1", null, "Specify when there are storage networks", null), @@ -247,7 +247,7 @@ public enum Config { XenBondStorageNic("Advanced", ManagementServer.class, String.class, "xen.bond.storage.nics", null, "Attempt to bond the two networks if found", null), XenHeartBeatInterval("Advanced", ManagementServer.class, Integer.class, "xen.heartbeat.interval", "60", "heartbeat to use when implementing XenServer Self Fencing", null), XenGuestNetwork("Hidden", ManagementServer.class, String.class, "xen.guest.network.device", null, "Specify for guest network name label", null), - + // VMware VmwarePrivateNetworkVSwitch("Hidden", ManagementServer.class, String.class, "vmware.private.vswitch", null, "Specify the vSwitch on host for private network", null), VmwarePublicNetworkVSwitch("Hidden", ManagementServer.class, String.class, "vmware.public.vswitch", null, "Specify the vSwitch on host for public network", null), @@ -264,7 +264,7 @@ public enum Config { VmwareRootDiskControllerType("Advanced", ManagementServer.class, String.class, "vmware.root.disk.controller", "ide", "Specify the default disk controller for root volumes, valid values are scsi, ide", null), VmwareSystemVmNicDeviceType("Advanced", ManagementServer.class, String.class, "vmware.systemvm.nic.device.type", "E1000", "Specify the default network device type for system VMs, valid values are E1000, PCNet32, Vmxnet2, Vmxnet3", null), VmwareRecycleHungWorker("Advanced", ManagementServer.class, Boolean.class, "vmware.recycle.hung.wokervm", "false", "Specify whether or not to recycle hung worker VMs", null), - + // KVM KvmPublicNetwork("Hidden", ManagementServer.class, String.class, "kvm.public.network.device", null, "Specify the public bridge on host for public network", null), KvmPrivateNetwork("Hidden", ManagementServer.class, String.class, "kvm.private.network.device", null, "Specify the private bridge on host for private network", null), @@ -279,7 +279,7 @@ public enum Config { UsageAggregationTimezone("Usage", ManagementServer.class, String.class, "usage.aggregation.timezone", "GMT", "The timezone to use for usage stats aggregation", null), TrafficSentinelIncludeZones("Usage", ManagementServer.class, Integer.class, "traffic.sentinel.include.zones", "EXTERNAL", "Traffic going into specified list of zones is metered. For metering all traffic leave this parameter empty", null), TrafficSentinelExcludeZones("Usage", ManagementServer.class, Integer.class, "traffic.sentinel.exclude.zones", "", "Traffic going into specified list of zones is not metered.", null), - + // Hidden UseSecondaryStorageVm("Hidden", ManagementServer.class, Boolean.class, "secondary.storage.vm", "false", "Deploys a VM per zone to manage secondary storage if true, otherwise secondary storage is mounted on management server", null), CreatePoolsInPod("Hidden", ManagementServer.class, Boolean.class, "xen.create.pools.in.pod", "false", "Should we automatically add XenServers into pools that are inside a Pod", null), @@ -295,12 +295,12 @@ public enum Config { VmOpCleanupInterval("Advanced", ManagementServer.class, Long.class, "vm.op.cleanup.interval", "86400", "Interval to run the thread that cleans up the vm operations (in seconds)", "Seconds"), VmOpCleanupWait("Advanced", ManagementServer.class, Long.class, "vm.op.cleanup.wait", "3600", "Time (in seconds) to wait before cleanuping up any vm work items", "Seconds"), VmOpCancelInterval("Advanced", ManagementServer.class, Long.class, "vm.op.cancel.interval", "3600", "Time (in seconds) to wait before cancelling a operation", "Seconds"), - - + + DefaultPageSize("Advanced", ManagementServer.class, Long.class, "default.page.size", "500", "Default page size for API list* commands", null), - + TaskCleanupRetryInterval("Advanced", ManagementServer.class, Integer.class, "task.cleanup.retry.interval", "600", "Time (in seconds) to wait before retrying cleanup of tasks if the cleanup failed previously. 0 means to never retry.", "Seconds"), - + // Account Default Limits DefaultMaxAccountUserVms("Account Defaults", ManagementServer.class, Long.class, "max.account.user.vms", "20", "The default maximum number of user VMs that can be deployed for an account", null), DefaultMaxAccountPublicIPs("Account Defaults", ManagementServer.class, Long.class, "max.account.public.ips", "20", "The default maximum number of public IPs that can be consumed by an account", null), @@ -310,10 +310,10 @@ public enum Config { DefaultMaxAccountNetworks("Account Defaults", ManagementServer.class, Long.class, "max.account.networks", "20", "The default maximum number of networks that can be created for an account", null), DefaultMaxAccountVpcs("Account Defaults", ManagementServer.class, Long.class, "max.account.vpcs", "20", "The default maximum number of vpcs that can be created for an account", null), - + ResourceCountCheckInterval("Advanced", ManagementServer.class, Long.class, "resourcecount.check.interval", "0", "Time (in seconds) to wait before retrying resource count check task. Default is 0 which is to never run the task", "Seconds"), DirectAgentLoadSize("Advanced", ManagementServer.class, Integer.class, "direct.agent.load.size", "16", "The number of direct agents to load each time", null), - + //disabling lb as cluster sync does not work with distributed cluster AgentLbEnable("Advanced", ManagementServer.class, Boolean.class, "agent.lb.enabled", "false", "If agent load balancing enabled in cluster setup", null), SubDomainNetworkAccess("Advanced", NetworkManager.class, Boolean.class, "allow.subdomain.network.access", "true", "Allow subdomains to use networks dedicated to their parent domain(s)", null), @@ -323,9 +323,9 @@ public enum Config { ClusterMessageTimeOutSeconds("Advanced", ManagementServer.class, Integer.class, "cluster.message.timeout.seconds", "300", "Time (in seconds) to wait before a inter-management server message post times out.", null), AgentLoadThreshold("Advanced", ManagementServer.class, Float.class, "agent.load.threshold", "0.7", "Percentage (as a value between 0 and 1) of connected agents after which agent load balancing will start happening", null), - + JavaScriptDefaultContentType("Advanced", ManagementServer.class, String.class, "json.content.type", "text/javascript", "Http response content type for .js files (default is text/javascript)", null), - + DefaultMaxProjectUserVms("Project Defaults", ManagementServer.class, Long.class, "max.project.user.vms", "20", "The default maximum number of user VMs that can be deployed for a project", null), DefaultMaxProjectPublicIPs("Project Defaults", ManagementServer.class, Long.class, "max.project.public.ips", "20", "The default maximum number of public IPs that can be consumed by a project", null), DefaultMaxProjectTemplates("Project Defaults", ManagementServer.class, Long.class, "max.project.templates", "20", "The default maximum number of templates that can be deployed for a project", null), @@ -333,11 +333,11 @@ public enum Config { DefaultMaxProjectVolumes("Project Defaults", ManagementServer.class, Long.class, "max.project.volumes", "20", "The default maximum number of volumes that can be created for a project", null), DefaultMaxProjectNetworks("Project Defaults", ManagementServer.class, Long.class, "max.project.networks", "20", "The default maximum number of networks that can be created for a project", null), DefaultMaxProjectVpcs("Project Defaults", ManagementServer.class, Long.class, "max.project.vpcs", "20", "The default maximum number of vpcs that can be created for a project", null), - + ProjectInviteRequired("Project Defaults", ManagementServer.class, Boolean.class, "project.invite.required", "false", "If invitation confirmation is required when add account to project. Default value is false", null), ProjectInvitationExpirationTime("Project Defaults", ManagementServer.class, Long.class, "project.invite.timeout", "86400", "Invitation expiration time (in seconds). Default is 1 day - 86400 seconds", null), AllowUserToCreateProject("Project Defaults", ManagementServer.class, Long.class, "allow.user.create.projects", "true", "If regular user can create a project; true by default", null), - + ProjectEmailSender("Project Defaults", ManagementServer.class, String.class, "project.email.sender", null, "Sender of project invitation email (will be in the From header of the email)", null), ProjectSMTPHost("Project Defaults", ManagementServer.class, String.class, "project.smtp.host", null, "SMTP hostname used for sending out email project invitations", null), ProjectSMTPPassword("Secure", ManagementServer.class, String.class, "project.smtp.password", null, "Password for SMTP authentication (applies only if project.smtp.useAuth is true)", null), @@ -355,11 +355,12 @@ public enum Config { HaTag("Advanced", ManagementServer.class, String.class, "ha.tag", null, "HA tag defining that the host marked with this tag can be used for HA purposes only", null), VpcCleanupInterval("Advanced", ManagementServer.class, Integer.class, "vpc.cleanup.interval", "3600", "The interval (in seconds) between cleanup for Inactive VPCs", null), VpcMaxNetworks("Advanced", ManagementServer.class, Integer.class, "vpc.max.networks", "3", "Maximum number of networks per vpc", null), - + DetailBatchQuerySize("Advanced", ManagementServer.class, Integer.class, "detail.batch.query.size", "2000", "Default entity detail batch query size for listing", null), + ConcurrentSnapshotsThresholdPerHost("Advanced", ManagementServer.class, Long.class, "concurrent.snapshots.threshold.perhost", null, "Limits number of snapshots that can be handled by the host concurrently; default is NULL - unlimited", null); - - + + private final String _category; private final Class _componentClass; private final Class _type; @@ -384,7 +385,7 @@ public enum Config { _configs.put("Account Defaults", new ArrayList()); _configs.put("Project Defaults", new ArrayList()); _configs.put("Secure", new ArrayList()); - + // Add values into HashMap for (Config c : Config.values()) { String category = c.getCategory(); @@ -393,7 +394,7 @@ public enum Config { _configs.put(category, currentConfigs); } } - + private Config(String category, Class componentClass, Class type, String name, String defaultValue, String description, String range) { _category = category; _componentClass = componentClass; @@ -403,15 +404,15 @@ public enum Config { _description = description; _range = range; } - + public String getCategory() { return _category; } - + public String key() { return _name; } - + public String getDescription() { return _description; } @@ -427,7 +428,7 @@ public enum Config { public Class getComponentClass() { return _componentClass; } - + public String getComponent() { if (_componentClass == ManagementServer.class) { return "management-server"; @@ -453,16 +454,16 @@ public enum Config { public String getRange() { return _range; } - + @Override public String toString() { return _name; } - + public static List getConfigs(String category) { return _configs.get(category); } - + public static Config getConfig(String name) { List categories = getCategories(); for (String category : categories) { @@ -473,10 +474,10 @@ public enum Config { } } } - + return null; } - + public static List getCategories() { Object[] keys = _configs.keySet().toArray(); List categories = new ArrayList(); diff --git a/server/src/com/cloud/configuration/DefaultComponentLibrary.java b/server/src/com/cloud/configuration/DefaultComponentLibrary.java index 2fbe7586ac9..8d8ee9a69a4 100755 --- a/server/src/com/cloud/configuration/DefaultComponentLibrary.java +++ b/server/src/com/cloud/configuration/DefaultComponentLibrary.java @@ -235,19 +235,6 @@ 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); - addDao("SecurityGroupJoinDao", SecurityGroupJoinDaoImpl.class); - addDao("ResourceTagJoinDao", ResourceTagJoinDaoImpl.class); - addDao("EventJoinDao", EventJoinDaoImpl.class); - addDao("UserAccountJoinDao", UserAccountJoinDaoImpl.class); - addDao("ProjectJoinDao", ProjectJoinDaoImpl.class); - addDao("ProjectAccountJoinDao", ProjectAccountJoinDaoImpl.class); - addDao("ProjectInvitationJoinDao", ProjectInvitationJoinDaoImpl.class); - addDao("HostJoinDao", HostJoinDaoImpl.class); - addDao("VolumeJoinDao", VolumeJoinDaoImpl.class); - addDao("AccountJoinDao", AccountJoinDaoImpl.class); - addDao("AsyncJobJoinDao", AsyncJobJoinDaoImpl.class); ComponentInfo> info = addDao("ServiceOfferingDao", ServiceOfferingDaoImpl.class); info.addParameter("cache.size", "50"); info.addParameter("cache.time.to.live", "600"); @@ -387,6 +374,20 @@ public class DefaultComponentLibrary extends ComponentLibraryBase implements Com addDao("Site2SiteVpnGatewayDao", Site2SiteVpnGatewayDaoImpl.class); addDao("Site2SiteCustomerGatewayDao", Site2SiteCustomerGatewayDaoImpl.class); addDao("Site2SiteVpnConnnectionDao", Site2SiteVpnConnectionDaoImpl.class); + + addDao("UserVmJoinDao", UserVmJoinDaoImpl.class); + addDao("DomainRouterJoinDao", DomainRouterJoinDaoImpl.class); + addDao("SecurityGroupJoinDao", SecurityGroupJoinDaoImpl.class); + addDao("ResourceTagJoinDao", ResourceTagJoinDaoImpl.class); + addDao("EventJoinDao", EventJoinDaoImpl.class); + addDao("UserAccountJoinDao", UserAccountJoinDaoImpl.class); + addDao("ProjectJoinDao", ProjectJoinDaoImpl.class); + addDao("ProjectAccountJoinDao", ProjectAccountJoinDaoImpl.class); + addDao("ProjectInvitationJoinDao", ProjectInvitationJoinDaoImpl.class); + addDao("HostJoinDao", HostJoinDaoImpl.class); + addDao("VolumeJoinDao", VolumeJoinDaoImpl.class); + addDao("AccountJoinDao", AccountJoinDaoImpl.class); + addDao("AsyncJobJoinDao", AsyncJobJoinDaoImpl.class); } @Override diff --git a/setup/db/db/schema-40to410.sql b/setup/db/db/schema-40to410.sql index 64370528be3..11423200c86 100644 --- a/setup/db/db/schema-40to410.sql +++ b/setup/db/db/schema-40to410.sql @@ -140,6 +140,7 @@ UPDATE `cloud`.`autoscale_policies` set uuid=id WHERE uuid is NULL; UPDATE `cloud`.`counter` set uuid=id WHERE uuid is NULL; UPDATE `cloud`.`conditions` set uuid=id WHERE uuid is NULL; +INSERT IGNORE INTO `cloud`.`configuration` VALUES ('Advanced', 'DEFAULT', 'management-server', '"detail.batch.query.size"', '2000', 'Default entity detail batch query size for listing'); --- DB views for list api --- DROP VIEW IF EXISTS `cloud`.`user_vm_view`; From c6110a88c53fcaae258377dc3bf8ce7505d5dc37 Mon Sep 17 00:00:00 2001 From: Chip Childers Date: Mon, 7 Jan 2013 22:02:28 -0500 Subject: [PATCH 300/421] Updating copyright year in the LICENSE file to 2013 Signed-off-by: Chip Childers --- LICENSE | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/LICENSE b/LICENSE index afb662a77e2..714f6847ae8 100644 --- a/LICENSE +++ b/LICENSE @@ -1,4 +1,4 @@ -Copyright (c) 2012 The Apache Software Foundation +Copyright (c) 2013 The Apache Software Foundation Apache License From db2033d2e683ea5a2a398291cf2d7728a5be27b0 Mon Sep 17 00:00:00 2001 From: Brian Federle Date: Tue, 8 Jan 2013 11:27:12 -0800 Subject: [PATCH 301/421] List view UI: Disable overflow scrolling --- ui/css/cloudstack3.css | 5 ----- 1 file changed, 5 deletions(-) diff --git a/ui/css/cloudstack3.css b/ui/css/cloudstack3.css index e1c9c86a04f..58563a6711a 100644 --- a/ui/css/cloudstack3.css +++ b/ui/css/cloudstack3.css @@ -452,11 +452,6 @@ div.list-view table tbody td span { white-space: nowrap; } -div.list-view table tbody td span:hover { - overflow: auto; - margin-top: 4px; -} - div.list-view div.toolbar div.section-switcher div.section-select label { margin: 0 9px 0 0; } From 74c15a22a05023d639dc24329f1ea4c4a6c8932f Mon Sep 17 00:00:00 2001 From: Min Chen Date: Tue, 8 Jan 2013 12:33:18 -0800 Subject: [PATCH 302/421] Create DB view for ListStoragePools API performance optimization. Signed-off-by: Min Chen --- .../com/cloud/server/ManagementService.java | 8 - .../admin/storage/ListStoragePoolsCmd.java | 12 +- .../apache/cloudstack/query/QueryService.java | 4 + server/src/com/cloud/api/ApiDBUtils.java | 19 + .../src/com/cloud/api/ApiResponseHelper.java | 46 +-- server/src/com/cloud/api/ApiServer.java | 2 + .../com/cloud/api/query/QueryManagerImpl.java | 100 +++++ .../cloud/api/query/ViewResponseHelper.java | 21 ++ .../api/query/dao/StoragePoolJoinDao.java | 37 ++ .../api/query/dao/StoragePoolJoinDaoImpl.java | 185 ++++++++++ .../com/cloud/api/query/vo/BaseViewVO.java | 2 - .../cloud/api/query/vo/StoragePoolJoinVO.java | 341 ++++++++++++++++++ .../DefaultComponentLibrary.java | 2 + .../cloud/server/ManagementServerImpl.java | 17 - server/test/com/cloud/api/ListPerfTest.java | 17 + setup/db/create-schema-view.sql | 37 ++ setup/db/db/schema-40to410.sql | 40 ++ 17 files changed, 812 insertions(+), 78 deletions(-) create mode 100644 server/src/com/cloud/api/query/dao/StoragePoolJoinDao.java create mode 100644 server/src/com/cloud/api/query/dao/StoragePoolJoinDaoImpl.java create mode 100644 server/src/com/cloud/api/query/vo/StoragePoolJoinVO.java diff --git a/api/src/com/cloud/server/ManagementService.java b/api/src/com/cloud/server/ManagementService.java index e547954fff3..fb8af1a5b4b 100755 --- a/api/src/com/cloud/server/ManagementService.java +++ b/api/src/com/cloud/server/ManagementService.java @@ -243,14 +243,6 @@ public interface ManagementService { */ List searchForDiskOfferings(ListDiskOfferingsCmd cmd); - /** - * List storage pools that match the given criteria - * - * @param cmd - * the command that wraps the search criteria (zone, pod, name, IP address, path, and cluster id) - * @return a list of storage pools that match the given criteria - */ - Pair, Integer> searchForStoragePools(ListStoragePoolsCmd cmd); /** * List system VMs by the given search criteria diff --git a/api/src/org/apache/cloudstack/api/command/admin/storage/ListStoragePoolsCmd.java b/api/src/org/apache/cloudstack/api/command/admin/storage/ListStoragePoolsCmd.java index 3723f8b3996..9c5c584b7cb 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/storage/ListStoragePoolsCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/storage/ListStoragePoolsCmd.java @@ -29,6 +29,7 @@ import org.apache.cloudstack.api.response.ClusterResponse; import org.apache.cloudstack.api.response.ListResponse; import org.apache.cloudstack.api.response.PodResponse; import org.apache.cloudstack.api.response.StoragePoolResponse; +import org.apache.cloudstack.api.response.VolumeResponse; import org.apache.cloudstack.api.response.ZoneResponse; import com.cloud.async.AsyncJob; import com.cloud.storage.StoragePool; @@ -116,16 +117,7 @@ public class ListStoragePoolsCmd extends BaseListCmd { @Override public void execute(){ - Pair, Integer> pools = _mgr.searchForStoragePools(this); - ListResponse response = new ListResponse(); - List poolResponses = new ArrayList(); - for (StoragePool pool : pools.first()) { - StoragePoolResponse poolResponse = _responseGenerator.createStoragePoolResponse(pool); - poolResponse.setObjectName("storagepool"); - poolResponses.add(poolResponse); - } - - response.setResponses(poolResponses, pools.second()); + ListResponse response = _queryService.searchForStoragePools(this); response.setResponseName(getCommandName()); this.setResponseObject(response); } diff --git a/api/src/org/apache/cloudstack/query/QueryService.java b/api/src/org/apache/cloudstack/query/QueryService.java index 480eb316e97..b03a7fc0062 100644 --- a/api/src/org/apache/cloudstack/query/QueryService.java +++ b/api/src/org/apache/cloudstack/query/QueryService.java @@ -20,6 +20,7 @@ import java.util.List; import org.apache.cloudstack.api.command.admin.host.ListHostsCmd; import org.apache.cloudstack.api.command.admin.router.ListRoutersCmd; +import org.apache.cloudstack.api.command.admin.storage.ListStoragePoolsCmd; import org.apache.cloudstack.api.command.admin.user.ListUsersCmd; import org.apache.cloudstack.api.command.user.account.ListAccountsCmd; import org.apache.cloudstack.api.command.user.account.ListProjectAccountsCmd; @@ -44,6 +45,7 @@ import org.apache.cloudstack.api.response.ProjectInvitationResponse; import org.apache.cloudstack.api.response.ProjectResponse; import org.apache.cloudstack.api.response.ResourceTagResponse; import org.apache.cloudstack.api.response.SecurityGroupResponse; +import org.apache.cloudstack.api.response.StoragePoolResponse; import org.apache.cloudstack.api.response.UserResponse; import org.apache.cloudstack.api.response.UserVmResponse; import org.apache.cloudstack.api.response.VolumeResponse; @@ -85,6 +87,8 @@ public interface QueryService { public ListResponse searchForVolumes(ListVolumesCmd cmd); + public ListResponse searchForStoragePools(ListStoragePoolsCmd cmd); + public ListResponse searchForAccounts(ListAccountsCmd cmd); public ListResponse searchForAsyncJobs(ListAsyncJobsCmd cmd); diff --git a/server/src/com/cloud/api/ApiDBUtils.java b/server/src/com/cloud/api/ApiDBUtils.java index 343dad9b67a..5e8a044691d 100755 --- a/server/src/com/cloud/api/ApiDBUtils.java +++ b/server/src/com/cloud/api/ApiDBUtils.java @@ -35,6 +35,7 @@ import org.apache.cloudstack.api.response.ProjectInvitationResponse; import org.apache.cloudstack.api.response.ProjectResponse; import org.apache.cloudstack.api.response.ResourceTagResponse; import org.apache.cloudstack.api.response.SecurityGroupResponse; +import org.apache.cloudstack.api.response.StoragePoolResponse; import org.apache.cloudstack.api.response.UserResponse; import org.apache.cloudstack.api.response.UserVmResponse; import org.apache.cloudstack.api.response.VolumeResponse; @@ -49,6 +50,7 @@ import com.cloud.api.query.dao.ProjectInvitationJoinDao; import com.cloud.api.query.dao.ProjectJoinDao; import com.cloud.api.query.dao.ResourceTagJoinDao; import com.cloud.api.query.dao.SecurityGroupJoinDao; +import com.cloud.api.query.dao.StoragePoolJoinDao; import com.cloud.api.query.dao.UserAccountJoinDao; import com.cloud.api.query.dao.UserVmJoinDao; import com.cloud.api.query.dao.VolumeJoinDao; @@ -63,6 +65,7 @@ import com.cloud.api.query.vo.ProjectInvitationJoinVO; import com.cloud.api.query.vo.ProjectJoinVO; import com.cloud.api.query.vo.ResourceTagJoinVO; import com.cloud.api.query.vo.SecurityGroupJoinVO; +import com.cloud.api.query.vo.StoragePoolJoinVO; import com.cloud.api.query.vo.UserAccountJoinVO; import com.cloud.api.query.vo.UserVmJoinVO; import com.cloud.api.query.vo.VolumeJoinVO; @@ -183,6 +186,7 @@ import com.cloud.storage.Snapshot; import com.cloud.storage.SnapshotVO; import com.cloud.storage.Storage.ImageFormat; import com.cloud.storage.StorageManager; +import com.cloud.storage.StoragePool; import com.cloud.storage.StoragePoolVO; import com.cloud.storage.StorageStats; import com.cloud.storage.UploadVO; @@ -324,6 +328,7 @@ public class ApiDBUtils { private static ProjectInvitationJoinDao _projectInvitationJoinDao; private static HostJoinDao _hostJoinDao; private static VolumeJoinDao _volJoinDao; + private static StoragePoolJoinDao _poolJoinDao; private static AccountJoinDao _accountJoinDao; private static AsyncJobJoinDao _jobJoinDao; @@ -414,6 +419,7 @@ public class ApiDBUtils { _projectInvitationJoinDao = locator.getDao(ProjectInvitationJoinDao.class); _hostJoinDao = locator.getDao(HostJoinDao.class); _volJoinDao = locator.getDao(VolumeJoinDao.class); + _poolJoinDao = locator.getDao(StoragePoolJoinDao.class); _accountJoinDao = locator.getDao(AccountJoinDao.class); _jobJoinDao = locator.getDao(AsyncJobJoinDao.class); @@ -1358,6 +1364,19 @@ public class ApiDBUtils { return _volJoinDao.newVolumeView(vr); } + public static StoragePoolResponse newStoragePoolResponse(StoragePoolJoinVO vr) { + return _poolJoinDao.newStoragePoolResponse(vr); + } + + public static StoragePoolResponse fillStoragePoolDetails(StoragePoolResponse vrData, StoragePoolJoinVO vr){ + return _poolJoinDao.setStoragePoolResponse(vrData, vr); + } + + public static List newStoragePoolView(StoragePool vr){ + return _poolJoinDao.newStoragePoolView(vr); + } + + public static AccountResponse newAccountResponse(AccountJoinVO ve) { return _accountJoinDao.newAccountResponse(ve); } diff --git a/server/src/com/cloud/api/ApiResponseHelper.java b/server/src/com/cloud/api/ApiResponseHelper.java index d5cbb71dd9a..37be83efc5c 100755 --- a/server/src/com/cloud/api/ApiResponseHelper.java +++ b/server/src/com/cloud/api/ApiResponseHelper.java @@ -53,6 +53,7 @@ import com.cloud.api.query.vo.ProjectInvitationJoinVO; import com.cloud.api.query.vo.ProjectJoinVO; import com.cloud.api.query.vo.ResourceTagJoinVO; import com.cloud.api.query.vo.SecurityGroupJoinVO; +import com.cloud.api.query.vo.StoragePoolJoinVO; import com.cloud.api.query.vo.UserAccountJoinVO; import com.cloud.api.query.vo.UserVmJoinVO; import com.cloud.api.query.vo.VolumeJoinVO; @@ -868,49 +869,12 @@ public class ApiResponseHelper implements ResponseGenerator { @Override public StoragePoolResponse createStoragePoolResponse(StoragePool pool) { - StoragePoolResponse poolResponse = new StoragePoolResponse(); - poolResponse.setId(pool.getUuid()); - poolResponse.setName(pool.getName()); - poolResponse.setState(pool.getStatus()); - poolResponse.setPath(pool.getPath()); - poolResponse.setIpAddress(pool.getHostAddress()); - DataCenter zone = ApiDBUtils.findZoneById(pool.getDataCenterId()); - if ( zone != null ){ - poolResponse.setZoneId(zone.getUuid()); - poolResponse.setZoneName(zone.getName()); - } - if (pool.getPoolType() != null) { - poolResponse.setType(pool.getPoolType().toString()); - } - if (pool.getPodId() != null) { - HostPodVO pod = ApiDBUtils.findPodById(pool.getPodId()); - if (pod != null) { - poolResponse.setPodId(pod.getUuid()); - poolResponse.setPodName(pod.getName()); - } - } - if (pool.getCreated() != null) { - poolResponse.setCreated(pool.getCreated()); - } + List viewPools = ApiDBUtils.newStoragePoolView(pool); + List listPools = ViewResponseHelper.createStoragePoolResponse(viewPools.toArray(new StoragePoolJoinVO[viewPools.size()])); + assert listPools != null && listPools.size() == 1 : "There should be one storage pool returned"; + return listPools.get(0); - StorageStats stats = ApiDBUtils.getStoragePoolStatistics(pool.getId()); - long allocatedSize = ApiDBUtils.getStorageCapacitybyPool(pool.getId(), Capacity.CAPACITY_TYPE_STORAGE_ALLOCATED); - poolResponse.setDiskSizeTotal(pool.getCapacityBytes()); - poolResponse.setDiskSizeAllocated(allocatedSize); - if (stats != null) { - Long used = stats.getByteUsed(); - poolResponse.setDiskSizeUsed(used); - } - - if (pool.getClusterId() != null) { - ClusterVO cluster = ApiDBUtils.findClusterById(pool.getClusterId()); - poolResponse.setClusterId(cluster.getUuid()); - poolResponse.setClusterName(cluster.getName()); - } - poolResponse.setTags(ApiDBUtils.getStoragePoolTags(pool.getId())); - poolResponse.setObjectName("storagepool"); - return poolResponse; } @Override diff --git a/server/src/com/cloud/api/ApiServer.java b/server/src/com/cloud/api/ApiServer.java index 620917190cc..e2dc9ce2bbf 100755 --- a/server/src/com/cloud/api/ApiServer.java +++ b/server/src/com/cloud/api/ApiServer.java @@ -91,6 +91,7 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.command.admin.host.ListHostsCmd; import org.apache.cloudstack.api.command.admin.router.ListRoutersCmd; +import org.apache.cloudstack.api.command.admin.storage.ListStoragePoolsCmd; import org.apache.cloudstack.api.command.admin.user.ListUsersCmd; import org.apache.cloudstack.api.command.user.project.ListProjectInvitationsCmd; import org.apache.cloudstack.api.command.user.project.ListProjectsCmd; @@ -476,6 +477,7 @@ public class ApiServer implements HttpRequestHandler { && !(cmdObj instanceof ListVolumesCmd) && !(cmdObj instanceof ListUsersCmd) && !(cmdObj instanceof ListAccountsCmd) + && !(cmdObj instanceof ListStoragePoolsCmd) ) { buildAsyncListResponse((BaseListCmd) cmdObj, caller); } diff --git a/server/src/com/cloud/api/query/QueryManagerImpl.java b/server/src/com/cloud/api/query/QueryManagerImpl.java index ceec932f942..b61f10a1ade 100644 --- a/server/src/com/cloud/api/query/QueryManagerImpl.java +++ b/server/src/com/cloud/api/query/QueryManagerImpl.java @@ -26,6 +26,7 @@ import javax.naming.ConfigurationException; import org.apache.cloudstack.api.command.admin.host.ListHostsCmd; import org.apache.cloudstack.api.command.admin.router.ListRoutersCmd; +import org.apache.cloudstack.api.command.admin.storage.ListStoragePoolsCmd; import org.apache.cloudstack.api.command.admin.user.ListUsersCmd; import org.apache.cloudstack.api.command.user.account.ListAccountsCmd; import org.apache.cloudstack.api.command.user.account.ListProjectAccountsCmd; @@ -50,6 +51,7 @@ import org.apache.cloudstack.api.response.ProjectInvitationResponse; import org.apache.cloudstack.api.response.ProjectResponse; import org.apache.cloudstack.api.response.ResourceTagResponse; import org.apache.cloudstack.api.response.SecurityGroupResponse; +import org.apache.cloudstack.api.response.StoragePoolResponse; import org.apache.cloudstack.api.response.UserResponse; import org.apache.cloudstack.api.response.UserVmResponse; import org.apache.cloudstack.api.response.VolumeResponse; @@ -66,6 +68,7 @@ import com.cloud.api.query.dao.ProjectInvitationJoinDao; import com.cloud.api.query.dao.ProjectJoinDao; import com.cloud.api.query.dao.ResourceTagJoinDao; import com.cloud.api.query.dao.SecurityGroupJoinDao; +import com.cloud.api.query.dao.StoragePoolJoinDao; import com.cloud.api.query.dao.UserAccountJoinDao; import com.cloud.api.query.dao.UserVmJoinDao; import com.cloud.api.query.dao.VolumeJoinDao; @@ -80,6 +83,7 @@ import com.cloud.api.query.vo.ProjectInvitationJoinVO; import com.cloud.api.query.vo.ProjectJoinVO; import com.cloud.api.query.vo.ResourceTagJoinVO; import com.cloud.api.query.vo.SecurityGroupJoinVO; +import com.cloud.api.query.vo.StoragePoolJoinVO; import com.cloud.api.query.vo.UserAccountJoinVO; import com.cloud.api.query.vo.UserVmJoinVO; import com.cloud.api.query.vo.VolumeJoinVO; @@ -100,6 +104,8 @@ import com.cloud.projects.ProjectManager; import com.cloud.projects.dao.ProjectAccountDao; import com.cloud.projects.dao.ProjectDao; import com.cloud.server.Criteria; +import com.cloud.storage.StoragePool; +import com.cloud.storage.StoragePoolVO; import com.cloud.storage.Volume; import com.cloud.user.Account; import com.cloud.user.AccountManager; @@ -199,6 +205,9 @@ public class QueryManagerImpl implements QueryService, Manager { @Inject private AsyncJobJoinDao _jobJoinDao; + @Inject + private StoragePoolJoinDao _poolJoinDao; + @Inject private HighAvailabilityManager _haMgr; @@ -1789,4 +1798,95 @@ public class QueryManagerImpl implements QueryService, Manager { return _jobJoinDao.searchAndCount(sc, searchFilter); } + @Override + public ListResponse searchForStoragePools(ListStoragePoolsCmd cmd) { + Pair, Integer> result = searchForStoragePoolsInternal(cmd); + ListResponse response = new ListResponse(); + + List poolResponses = ViewResponseHelper.createStoragePoolResponse(result.first().toArray(new StoragePoolJoinVO[result.first().size()])); + response.setResponses(poolResponses, result.second()); + return response; + } + + public Pair, Integer> searchForStoragePoolsInternal(ListStoragePoolsCmd cmd) { + + Long zoneId = _accountMgr.checkAccessAndSpecifyAuthority(UserContext.current().getCaller(), cmd.getZoneId()); + Object id = cmd.getId(); + Object name = cmd.getStoragePoolName(); + Object path = cmd.getPath(); + Object pod = cmd.getPodId(); + Object cluster = cmd.getClusterId(); + Object address = cmd.getIpAddress(); + Object keyword = cmd.getKeyword(); + Long startIndex = cmd.getStartIndex(); + Long pageSize = cmd.getPageSizeVal(); + + + Filter searchFilter = new Filter(StoragePoolJoinVO.class, "id", Boolean.TRUE, startIndex, pageSize); + + SearchBuilder sb = _poolJoinDao.createSearchBuilder(); + sb.select(null, Func.DISTINCT, sb.entity().getId()); // select distinct ids + sb.and("id", sb.entity().getId(), SearchCriteria.Op.EQ); + sb.and("name", sb.entity().getName(), SearchCriteria.Op.LIKE); + sb.and("path", sb.entity().getPath(), SearchCriteria.Op.EQ); + sb.and("dataCenterId", sb.entity().getZoneId(), SearchCriteria.Op.EQ); + sb.and("podId", sb.entity().getPodId(), SearchCriteria.Op.EQ); + sb.and("clusterId", sb.entity().getClusterId(), SearchCriteria.Op.EQ); + sb.and("hostAddress", sb.entity().getHostAddress(), SearchCriteria.Op.EQ); + + + SearchCriteria sc = sb.create(); + + + if (keyword != null) { + SearchCriteria ssc = _poolJoinDao.createSearchCriteria(); + ssc.addOr("name", SearchCriteria.Op.LIKE, "%" + keyword + "%"); + ssc.addOr("poolType", SearchCriteria.Op.LIKE, "%" + keyword + "%"); + + sc.addAnd("name", SearchCriteria.Op.SC, ssc); + } + + if (id != null) { + sc.setParameters("id", id); + } + + if (name != null) { + sc.setParameters("name", SearchCriteria.Op.LIKE, "%" + name + "%"); + } + + if (path != null) { + sc.setParameters("path", SearchCriteria.Op.EQ, path); + } + if (zoneId != null) { + sc.setParameters("dataCenterId", SearchCriteria.Op.EQ, zoneId); + } + if (pod != null) { + sc.setParameters("podId", SearchCriteria.Op.EQ, pod); + } + if (address != null) { + sc.setParameters("hostAddress", SearchCriteria.Op.EQ, address); + } + if (cluster != null) { + sc.setParameters("clusterId", SearchCriteria.Op.EQ, cluster); + } + + // search Pool details by ids + Pair, Integer> uniquePoolPair = _poolJoinDao.searchAndCount(sc, searchFilter); + Integer count = uniquePoolPair.second(); + if (count.intValue() == 0) { + // empty result + return uniquePoolPair; + } + List uniquePools = uniquePoolPair.first(); + Long[] vrIds = new Long[uniquePools.size()]; + int i = 0; + for (StoragePoolJoinVO v : uniquePools) { + vrIds[i++] = v.getId(); + } + List vrs = _poolJoinDao.searchByIds(vrIds); + return new Pair, Integer>(vrs, count); + + } + + } diff --git a/server/src/com/cloud/api/query/ViewResponseHelper.java b/server/src/com/cloud/api/query/ViewResponseHelper.java index 08495860b20..39c108eb932 100644 --- a/server/src/com/cloud/api/query/ViewResponseHelper.java +++ b/server/src/com/cloud/api/query/ViewResponseHelper.java @@ -34,6 +34,7 @@ import org.apache.cloudstack.api.response.ProjectInvitationResponse; import org.apache.cloudstack.api.response.ProjectResponse; import org.apache.cloudstack.api.response.ResourceTagResponse; import org.apache.cloudstack.api.response.SecurityGroupResponse; +import org.apache.cloudstack.api.response.StoragePoolResponse; import org.apache.cloudstack.api.response.UserResponse; import org.apache.cloudstack.api.response.UserVmResponse; import org.apache.cloudstack.api.response.VolumeResponse; @@ -51,6 +52,7 @@ import com.cloud.api.query.vo.ProjectInvitationJoinVO; import com.cloud.api.query.vo.ProjectJoinVO; import com.cloud.api.query.vo.ResourceTagJoinVO; import com.cloud.api.query.vo.SecurityGroupJoinVO; +import com.cloud.api.query.vo.StoragePoolJoinVO; import com.cloud.api.query.vo.UserAccountJoinVO; import com.cloud.api.query.vo.UserVmJoinVO; import com.cloud.api.query.vo.VolumeJoinVO; @@ -238,6 +240,25 @@ public class ViewResponseHelper { return new ArrayList(vrDataList.values()); } + public static List createStoragePoolResponse(StoragePoolJoinVO... pools) { + Hashtable vrDataList = new Hashtable(); + // Initialise the vrdatalist with the input data + for (StoragePoolJoinVO vr : pools) { + StoragePoolResponse vrData = vrDataList.get(vr.getId()); + if ( vrData == null ){ + // first time encountering this vm + vrData = ApiDBUtils.newStoragePoolResponse(vr); + } + else{ + // update tags + vrData = ApiDBUtils.fillStoragePoolDetails(vrData, vr); + } + vrDataList.put(vr.getId(), vrData); + } + return new ArrayList(vrDataList.values()); + } + + public static List createAccountResponse(AccountJoinVO... accounts) { List respList = new ArrayList(); for (AccountJoinVO vt : accounts){ diff --git a/server/src/com/cloud/api/query/dao/StoragePoolJoinDao.java b/server/src/com/cloud/api/query/dao/StoragePoolJoinDao.java new file mode 100644 index 00000000000..bbb02428981 --- /dev/null +++ b/server/src/com/cloud/api/query/dao/StoragePoolJoinDao.java @@ -0,0 +1,37 @@ +// 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.query.dao; + +import java.util.List; + +import org.apache.cloudstack.api.response.StoragePoolResponse; + +import com.cloud.api.query.vo.StoragePoolJoinVO; +import com.cloud.storage.StoragePool; +import com.cloud.utils.db.GenericDao; + +public interface StoragePoolJoinDao extends GenericDao { + + StoragePoolResponse newStoragePoolResponse(StoragePoolJoinVO host); + + StoragePoolResponse setStoragePoolResponse(StoragePoolResponse response, StoragePoolJoinVO host); + + List newStoragePoolView(StoragePool group); + + List searchByIds(Long... spIds); + +} diff --git a/server/src/com/cloud/api/query/dao/StoragePoolJoinDaoImpl.java b/server/src/com/cloud/api/query/dao/StoragePoolJoinDaoImpl.java new file mode 100644 index 00000000000..44ed1303af5 --- /dev/null +++ b/server/src/com/cloud/api/query/dao/StoragePoolJoinDaoImpl.java @@ -0,0 +1,185 @@ +// 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.query.dao; + +import java.util.ArrayList; +import java.util.List; +import javax.ejb.Local; + +import org.apache.log4j.Logger; + +import com.cloud.api.ApiDBUtils; +import com.cloud.api.query.vo.StoragePoolJoinVO; +import com.cloud.configuration.dao.ConfigurationDao; +import org.apache.cloudstack.api.response.StoragePoolResponse; + +import com.cloud.storage.StoragePool; +import com.cloud.storage.StorageStats; +import com.cloud.utils.component.Inject; +import com.cloud.utils.db.GenericDaoBase; +import com.cloud.utils.db.SearchBuilder; +import com.cloud.utils.db.SearchCriteria; + + +@Local(value={StoragePoolJoinDao.class}) +public class StoragePoolJoinDaoImpl extends GenericDaoBase implements StoragePoolJoinDao { + public static final Logger s_logger = Logger.getLogger(StoragePoolJoinDaoImpl.class); + + @Inject + private ConfigurationDao _configDao; + + private SearchBuilder spSearch; + + private SearchBuilder spIdSearch; + + + protected StoragePoolJoinDaoImpl() { + + spSearch = createSearchBuilder(); + spSearch.and("idIN", spSearch.entity().getId(), SearchCriteria.Op.IN); + spSearch.done(); + + spIdSearch = createSearchBuilder(); + spIdSearch.and("id", spIdSearch.entity().getId(), SearchCriteria.Op.EQ); + spIdSearch.done(); + + this._count = "select count(distinct id) from storage_pool_view WHERE "; + } + + + + + + @Override + public StoragePoolResponse newStoragePoolResponse(StoragePoolJoinVO pool) { + StoragePoolResponse poolResponse = new StoragePoolResponse(); + poolResponse.setId(pool.getUuid()); + poolResponse.setName(pool.getName()); + poolResponse.setState(pool.getStatus()); + poolResponse.setPath(pool.getPath()); + poolResponse.setIpAddress(pool.getHostAddress()); + poolResponse.setZoneId(pool.getZoneUuid()); + poolResponse.setZoneName(pool.getZoneName()); + if (pool.getPoolType() != null) { + poolResponse.setType(pool.getPoolType().toString()); + } + poolResponse.setPodId(pool.getPodUuid()); + poolResponse.setPodName(pool.getPodName()); + poolResponse.setCreated(pool.getCreated()); + + + long allocatedSize = pool.getUsedCapacity() + pool.getReservedCapacity(); + poolResponse.setDiskSizeTotal(pool.getCapacityBytes()); + poolResponse.setDiskSizeAllocated(allocatedSize); + + //TODO: StatsCollector does not persist data + StorageStats stats = ApiDBUtils.getStoragePoolStatistics(pool.getId()); + if (stats != null) { + Long used = stats.getByteUsed(); + poolResponse.setDiskSizeUsed(used); + } + + poolResponse.setClusterId(pool.getClusterUuid()); + poolResponse.setClusterName(pool.getClusterName()); + poolResponse.setTags(pool.getTag()); + + // set async job + poolResponse.setJobId(pool.getJobUuid()); + poolResponse.setJobStatus(pool.getJobStatus()); + + poolResponse.setObjectName("storagepool"); + return poolResponse; + } + + + + + + @Override + public StoragePoolResponse setStoragePoolResponse(StoragePoolResponse response, StoragePoolJoinVO sp) { + String tag = sp.getTag(); + if (tag != null) { + if ( response.getTags() != null && response.getTags().length() > 0){ + response.setTags(response.getTags() + "," + tag); + } + else{ + response.setTags(tag); + } + } + return response; + } + + + + @Override + public List newStoragePoolView(StoragePool host) { + SearchCriteria sc = spIdSearch.create(); + sc.setParameters("id", host.getId()); + return searchIncludingRemoved(sc, null, null, false); + + } + + + + @Override + public List searchByIds(Long... spIds) { + // set detail batch query size + int DETAILS_BATCH_SIZE = 2000; + String batchCfg = _configDao.getValue("detail.batch.query.size"); + if ( batchCfg != null ){ + DETAILS_BATCH_SIZE = Integer.parseInt(batchCfg); + } + // query details by batches + List uvList = new ArrayList(); + // query details by batches + int curr_index = 0; + if ( spIds.length > DETAILS_BATCH_SIZE ){ + while ( (curr_index + DETAILS_BATCH_SIZE ) <= spIds.length ) { + Long[] ids = new Long[DETAILS_BATCH_SIZE]; + for (int k = 0, j = curr_index; j < curr_index + DETAILS_BATCH_SIZE; j++, k++) { + ids[k] = spIds[j]; + } + SearchCriteria sc = spSearch.create(); + sc.setParameters("idIN", ids); + List vms = searchIncludingRemoved(sc, null, null, false); + if (vms != null) { + uvList.addAll(vms); + } + curr_index += DETAILS_BATCH_SIZE; + } + } + if (curr_index < spIds.length) { + int batch_size = (spIds.length - curr_index); + // set the ids value + Long[] ids = new Long[batch_size]; + for (int k = 0, j = curr_index; j < curr_index + batch_size; j++, k++) { + ids[k] = spIds[j]; + } + SearchCriteria sc = spSearch.create(); + sc.setParameters("idIN", ids); + List vms = searchIncludingRemoved(sc, null, null, false); + if (vms != null) { + uvList.addAll(vms); + } + } + return uvList; + } + + + + +} diff --git a/server/src/com/cloud/api/query/vo/BaseViewVO.java b/server/src/com/cloud/api/query/vo/BaseViewVO.java index 604f4597a0e..6b1ddd6561a 100644 --- a/server/src/com/cloud/api/query/vo/BaseViewVO.java +++ b/server/src/com/cloud/api/query/vo/BaseViewVO.java @@ -16,8 +16,6 @@ // under the License. package com.cloud.api.query.vo; -import javax.persistence.Column; - public abstract class BaseViewVO { public abstract long getId(); diff --git a/server/src/com/cloud/api/query/vo/StoragePoolJoinVO.java b/server/src/com/cloud/api/query/vo/StoragePoolJoinVO.java new file mode 100644 index 00000000000..fd837bd5d88 --- /dev/null +++ b/server/src/com/cloud/api/query/vo/StoragePoolJoinVO.java @@ -0,0 +1,341 @@ +// 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.query.vo; + +import java.util.Date; + +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.EnumType; +import javax.persistence.Enumerated; +import javax.persistence.Id; +import javax.persistence.Table; +import com.cloud.org.Cluster; +import com.cloud.storage.StoragePoolStatus; +import com.cloud.storage.Storage.StoragePoolType; +import com.cloud.utils.db.GenericDao; + +import org.apache.cloudstack.api.Identity; +import org.apache.cloudstack.api.InternalIdentity; + +/** + * Storage Pool DB view. + * @author minc + * + */ +@Entity +@Table(name="storage_pool_view") +public class StoragePoolJoinVO extends BaseViewVO implements InternalIdentity, Identity { + + @Id + @Column(name="id") + private long id; + + @Column(name="uuid") + private String uuid; + + @Column(name="name") + private String name; + + @Column(name="path") + private String path; + + @Column(name="host_address") + private String hostAddress; + + + @Column(name="status") + @Enumerated(value=EnumType.STRING) + private StoragePoolStatus status; + + @Column(name="pool_type") + @Enumerated(value=EnumType.STRING) + private StoragePoolType poolType; + + @Column(name=GenericDao.CREATED_COLUMN) + private Date created; + + @Column(name=GenericDao.REMOVED_COLUMN) + private Date removed; + + @Column(name="capacity_bytes") + private long capacityBytes; + + @Column(name="cluster_id") + private long clusterId; + + @Column(name="cluster_uuid") + private String clusterUuid; + + @Column(name="cluster_name") + private String clusterName; + + @Column(name="cluster_type") + @Enumerated(value=EnumType.STRING) + private Cluster.ClusterType clusterType; + + @Column(name="data_center_id") + private long zoneId; + + @Column(name="data_center_uuid") + private String zoneUuid; + + @Column(name="data_center_name") + private String zoneName; + + @Column(name="pod_id") + private long podId; + + @Column(name="pod_uuid") + private String podUuid; + + @Column(name="pod_name") + private String podName; + + + @Column(name="tag") + private String tag; + + @Column(name="disk_used_capacity") + private long usedCapacity; + + @Column(name="disk_reserved_capacity") + private long reservedCapacity; + + + @Column(name="job_id") + private long jobId; + + @Column(name="job_uuid") + private String jobUuid; + + @Column(name="job_status") + private int jobStatus; + + @Override + public long getId() { + return id; + } + + @Override + public void setId(long id) { + this.id = id; + } + + @Override + public String getUuid() { + return uuid; + } + + public void setUuid(String uuid) { + this.uuid = uuid; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getPath() { + return path; + } + + public void setPath(String path) { + this.path = path; + } + + public String getHostAddress() { + return hostAddress; + } + + public void setHostAddress(String hostAddress) { + this.hostAddress = hostAddress; + } + + public StoragePoolStatus getStatus() { + return status; + } + + public void setStatus(StoragePoolStatus status) { + this.status = status; + } + + public StoragePoolType getPoolType() { + return poolType; + } + + public void setPoolType(StoragePoolType poolType) { + this.poolType = poolType; + } + + 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 long getCapacityBytes() { + return capacityBytes; + } + + public void setCapacityBytes(long capacityBytes) { + this.capacityBytes = capacityBytes; + } + + public long getClusterId() { + return clusterId; + } + + public void setClusterId(long clusterId) { + this.clusterId = clusterId; + } + + public String getClusterUuid() { + return clusterUuid; + } + + public void setClusterUuid(String clusterUuid) { + this.clusterUuid = clusterUuid; + } + + public String getClusterName() { + return clusterName; + } + + public void setClusterName(String clusterName) { + this.clusterName = clusterName; + } + + public Cluster.ClusterType getClusterType() { + return clusterType; + } + + public void setClusterType(Cluster.ClusterType clusterType) { + this.clusterType = clusterType; + } + + public long getZoneId() { + return zoneId; + } + + public void setZoneId(long zoneId) { + this.zoneId = zoneId; + } + + public String getZoneUuid() { + return zoneUuid; + } + + public void setZoneUuid(String zoneUuid) { + this.zoneUuid = zoneUuid; + } + + public String getZoneName() { + return zoneName; + } + + public void setZoneName(String zoneName) { + this.zoneName = zoneName; + } + + public long getPodId() { + return podId; + } + + public void setPodId(long podId) { + this.podId = podId; + } + + public String getPodUuid() { + return podUuid; + } + + public void setPodUuid(String podUuid) { + this.podUuid = podUuid; + } + + public String getPodName() { + return podName; + } + + public void setPodName(String podName) { + this.podName = podName; + } + + public String getTag() { + return tag; + } + + public void setTag(String tag) { + this.tag = tag; + } + + public long getUsedCapacity() { + return usedCapacity; + } + + public void setUsedCapacity(long usedCapacity) { + this.usedCapacity = usedCapacity; + } + + public long getReservedCapacity() { + return reservedCapacity; + } + + public void setReservedCapacity(long reservedCapacity) { + this.reservedCapacity = reservedCapacity; + } + + 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; + } + + +} diff --git a/server/src/com/cloud/configuration/DefaultComponentLibrary.java b/server/src/com/cloud/configuration/DefaultComponentLibrary.java index 8d8ee9a69a4..8c6d35f45e0 100755 --- a/server/src/com/cloud/configuration/DefaultComponentLibrary.java +++ b/server/src/com/cloud/configuration/DefaultComponentLibrary.java @@ -34,6 +34,7 @@ import com.cloud.api.query.dao.ProjectInvitationJoinDaoImpl; import com.cloud.api.query.dao.ProjectJoinDaoImpl; import com.cloud.api.query.dao.ResourceTagJoinDaoImpl; import com.cloud.api.query.dao.SecurityGroupJoinDaoImpl; +import com.cloud.api.query.dao.StoragePoolJoinDaoImpl; import com.cloud.api.query.dao.UserAccountJoinDaoImpl; import com.cloud.api.query.dao.UserVmJoinDaoImpl; import com.cloud.api.query.dao.HostJoinDaoImpl; @@ -388,6 +389,7 @@ public class DefaultComponentLibrary extends ComponentLibraryBase implements Com addDao("VolumeJoinDao", VolumeJoinDaoImpl.class); addDao("AccountJoinDao", AccountJoinDaoImpl.class); addDao("AsyncJobJoinDao", AsyncJobJoinDaoImpl.class); + addDao("StoragePoolJoinDao", StoragePoolJoinDaoImpl.class); } @Override diff --git a/server/src/com/cloud/server/ManagementServerImpl.java b/server/src/com/cloud/server/ManagementServerImpl.java index 22ae1799948..dcecaf40a57 100755 --- a/server/src/com/cloud/server/ManagementServerImpl.java +++ b/server/src/com/cloud/server/ManagementServerImpl.java @@ -2335,23 +2335,6 @@ public class ManagementServerImpl implements ManagementServer { } } - @Override - public Pair, Integer> searchForStoragePools(ListStoragePoolsCmd cmd) { - - Long zoneId = _accountMgr.checkAccessAndSpecifyAuthority(UserContext.current().getCaller(), cmd.getZoneId()); - Criteria c = new Criteria("id", Boolean.TRUE, cmd.getStartIndex(), cmd.getPageSizeVal()); - c.addCriteria(Criteria.ID, cmd.getId()); - c.addCriteria(Criteria.NAME, cmd.getStoragePoolName()); - c.addCriteria(Criteria.CLUSTERID, cmd.getClusterId()); - c.addCriteria(Criteria.ADDRESS, cmd.getIpAddress()); - c.addCriteria(Criteria.KEYWORD, cmd.getKeyword()); - c.addCriteria(Criteria.PATH, cmd.getPath()); - c.addCriteria(Criteria.PODID, cmd.getPodId()); - c.addCriteria(Criteria.DATACENTERID, zoneId); - - Pair, Integer> result = searchForStoragePools(c); - return new Pair, Integer>(result.first(), result.second()); - } @Override public Pair, Integer> searchForStoragePools(Criteria c) { diff --git a/server/test/com/cloud/api/ListPerfTest.java b/server/test/com/cloud/api/ListPerfTest.java index 7402cea711a..eb98d9187fe 100644 --- a/server/test/com/cloud/api/ListPerfTest.java +++ b/server/test/com/cloud/api/ListPerfTest.java @@ -148,4 +148,21 @@ public class ListPerfTest extends APITest { System.out.println("Time taken to list Users: " + (after - before) + " ms"); } + + @Test + public void testListStoragePools(){ + // issue list Storage pool calls + HashMap params = new HashMap(); + params.put("response", "json"); + params.put("listAll", "true"); + params.put("sessionkey", sessionKey); + long before = System.currentTimeMillis(); + String result = this.sendRequest("listStoragePools", params); + long after = System.currentTimeMillis(); + System.out.println("Time taken to list StoragePools: " + (after - before) + " ms"); + + } + + + } diff --git a/setup/db/create-schema-view.sql b/setup/db/create-schema-view.sql index f502c88a90d..bf04c1caa57 100755 --- a/setup/db/create-schema-view.sql +++ b/setup/db/create-schema-view.sql @@ -782,3 +782,40 @@ left join autoscale_policies on async_job.instance_id = autoscale_policies.id left join autoscale_vmprofiles on async_job.instance_id = autoscale_vmprofiles.id left join autoscale_vmgroups on async_job.instance_id = autoscale_vmgroups.id; +DROP VIEW IF EXISTS `cloud`.`storage_pool_view`; +CREATE VIEW storage_pool_view AS +select +storage_pool.id, +storage_pool.uuid, +storage_pool.name, +storage_pool.status, +storage_pool.path, +storage_pool.pool_type, +storage_pool.host_address, +storage_pool.created, +storage_pool.removed, +storage_pool.capacity_bytes, +cluster.id cluster_id, +cluster.uuid cluster_uuid, +cluster.name cluster_name, +cluster.cluster_type, +data_center.id data_center_id, +data_center.uuid data_center_uuid, +data_center.name data_center_name, +host_pod_ref.id pod_id, +host_pod_ref.uuid pod_uuid, +host_pod_ref.name pod_name, +storage_pool_details.name tag, +op_host_capacity.used_capacity disk_used_capacity, +op_host_capacity.reserved_capacity disk_reserved_capacity, +async_job.id job_id, +async_job.uuid job_uuid, +async_job.job_status job_status, +async_job.account_id job_account_id +from storage_pool +left join cluster on storage_pool.cluster_id = cluster.id +left join data_center on storage_pool.data_center_id = data_center.id +left join host_pod_ref on storage_pool.pod_id = host_pod_ref.id +left join storage_pool_details on storage_pool_details.pool_id = storage_pool.id and storage_pool_details.value = 'true' +left join op_host_capacity on storage_pool.id = op_host_capacity.host_id and op_host_capacity.capacity_type = 3 +left join async_job on async_job.instance_id = storage_pool.id and async_job.instance_type = "StoragePool" and async_job.job_status = 0; \ No newline at end of file diff --git a/setup/db/db/schema-40to410.sql b/setup/db/db/schema-40to410.sql index 11423200c86..bf3fb303e5b 100644 --- a/setup/db/db/schema-40to410.sql +++ b/setup/db/db/schema-40to410.sql @@ -143,6 +143,8 @@ UPDATE `cloud`.`conditions` set uuid=id WHERE uuid is NULL; INSERT IGNORE INTO `cloud`.`configuration` VALUES ('Advanced', 'DEFAULT', 'management-server', '"detail.batch.query.size"', '2000', 'Default entity detail batch query size for listing'); --- DB views for list api --- +use cloud; + DROP VIEW IF EXISTS `cloud`.`user_vm_view`; CREATE VIEW `cloud`.`user_vm_view` AS select @@ -905,3 +907,41 @@ left join conditions on async_job.instance_id = conditions.id left join autoscale_policies on async_job.instance_id = autoscale_policies.id left join autoscale_vmprofiles on async_job.instance_id = autoscale_vmprofiles.id left join autoscale_vmgroups on async_job.instance_id = autoscale_vmgroups.id; + +DROP VIEW IF EXISTS `cloud`.`storage_pool_view`; +CREATE VIEW storage_pool_view AS +select +storage_pool.id, +storage_pool.uuid, +storage_pool.name, +storage_pool.status, +storage_pool.path, +storage_pool.pool_type, +storage_pool.host_address, +storage_pool.created, +storage_pool.removed, +storage_pool.capacity_bytes, +cluster.id cluster_id, +cluster.uuid cluster_uuid, +cluster.name cluster_name, +cluster.cluster_type, +data_center.id data_center_id, +data_center.uuid data_center_uuid, +data_center.name data_center_name, +host_pod_ref.id pod_id, +host_pod_ref.uuid pod_uuid, +host_pod_ref.name pod_name, +storage_pool_details.name tag, +op_host_capacity.used_capacity disk_used_capacity, +op_host_capacity.reserved_capacity disk_reserved_capacity, +async_job.id job_id, +async_job.uuid job_uuid, +async_job.job_status job_status, +async_job.account_id job_account_id +from storage_pool +left join cluster on storage_pool.cluster_id = cluster.id +left join data_center on storage_pool.data_center_id = data_center.id +left join host_pod_ref on storage_pool.pod_id = host_pod_ref.id +left join storage_pool_details on storage_pool_details.pool_id = storage_pool.id and storage_pool_details.value = 'true' +left join op_host_capacity on storage_pool.id = op_host_capacity.host_id and op_host_capacity.capacity_type = 3 +left join async_job on async_job.instance_id = storage_pool.id and async_job.instance_type = "StoragePool" and async_job.job_status = 0; From aa9ccf73022412a7edba7bf266bbbc5ef86add53 Mon Sep 17 00:00:00 2001 From: radhikap Date: Wed, 19 Dec 2012 10:05:28 +0530 Subject: [PATCH 303/421] fix for CLOUDSTACK-481 Signed-off-by: radhikap --- docs/en-US/build-deb.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/en-US/build-deb.xml b/docs/en-US/build-deb.xml index deee3ceb1de..37e5a7d7474 100644 --- a/docs/en-US/build-deb.xml +++ b/docs/en-US/build-deb.xml @@ -110,7 +110,7 @@ cloud-utils_4.0.0-incubating_amd64.deb create /etc/apt/sources.list.d/cloudstack.list with this line: - deb http://server.url/cloudstack/repo binary/ + deb http://server.url/cloudstack/repo binary ./ Now that you have the repository info in place, you'll want to run another update so that APT knows where to find the &PRODUCT; packages. From d22229eb9dd4890efd788b07c39b477abb806288 Mon Sep 17 00:00:00 2001 From: Min Chen Date: Tue, 8 Jan 2013 17:12:14 -0800 Subject: [PATCH 304/421] Remove updateUuids code in ConfigurationServerImpl (which is not the right approach to populate uuid column since it will impact upgrade as well), and populate UUID column in seed data sql script. Signed-off-by: Min Chen --- developer/developer-prefill.sql | 20 +- .../cloud/server/ConfigurationServerImpl.java | 31 +- setup/db/create-schema.sql | 8 +- setup/db/server-setup.sql | 2 +- setup/db/templates.kvm.sql | 100 ++--- setup/db/templates.simulator.sql | 8 +- setup/db/templates.sql | 384 +++++++++--------- setup/db/templates.vmware.sql | 146 +++---- setup/db/templates.xenserver.sql | 162 ++++---- 9 files changed, 432 insertions(+), 429 deletions(-) diff --git a/developer/developer-prefill.sql b/developer/developer-prefill.sql index e14ac375e98..6300d35df64 100644 --- a/developer/developer-prefill.sql +++ b/developer/developer-prefill.sql @@ -18,24 +18,24 @@ -- Add a default ROOT domain use cloud; -INSERT INTO `cloud`.`domain` (id, name, parent, path, owner) VALUES - (1, 'ROOT', NULL, '/', 2); +INSERT INTO `cloud`.`domain` (id, uuid, name, parent, path, owner) VALUES + (1, UUID(), 'ROOT', NULL, '/', 2); -- Add system and admin accounts -INSERT INTO `cloud`.`account` (id, account_name, type, domain_id, state) VALUES - (1, 'system', 1, 1, 'enabled'); +INSERT INTO `cloud`.`account` (id, uuid, account_name, type, domain_id, state) VALUES + (1, UUID(), 'system', 1, 1, 'enabled'); -INSERT INTO `cloud`.`account` (id, account_name, type, domain_id, state) VALUES - (2, 'admin', 1, 1, 'enabled'); +INSERT INTO `cloud`.`account` (id, uuid, account_name, type, domain_id, state) VALUES + (2, UUID(), 'admin', 1, 1, 'enabled'); -- Add system user -INSERT INTO `cloud`.`user` (id, username, password, account_id, firstname, - lastname, email, state, created) VALUES (1, 'system', RAND(), +INSERT INTO `cloud`.`user` (id, uuid, username, password, account_id, firstname, + lastname, email, state, created) VALUES (1, UUID(), 'system', RAND(), '1', 'system', 'cloud', NULL, 'enabled', NOW()); -- Add system user with encrypted password=password -INSERT INTO `cloud`.`user` (id, username, password, account_id, firstname, - lastname, email, state, created) VALUES (2, 'admin', '5f4dcc3b5aa765d61d8327deb882cf99', +INSERT INTO `cloud`.`user` (id, uuid, username, password, account_id, firstname, + lastname, email, state, created) VALUES (2, UUID(), 'admin', '5f4dcc3b5aa765d61d8327deb882cf99', '2', 'Admin', 'User', 'admin@mailprovider.com', 'enabled', NOW()); -- Add configurations diff --git a/server/src/com/cloud/server/ConfigurationServerImpl.java b/server/src/com/cloud/server/ConfigurationServerImpl.java index 43a1d99c888..af5989cf003 100755 --- a/server/src/com/cloud/server/ConfigurationServerImpl.java +++ b/server/src/com/cloud/server/ConfigurationServerImpl.java @@ -5,7 +5,7 @@ // 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, @@ -254,12 +254,14 @@ public class ConfigurationServerImpl implements ConfigurationServer { // Update the cloud identifier updateCloudIdentifier(); - updateUuids(); + // We should not update seed data UUID column here since this will be invoked in upgrade case as well. + //updateUuids(); // Set init to true _configDao.update("init", "Hidden", "true"); } + /* private void updateUuids() { _identityDao.initializeDefaultUuid("disk_offering"); _identityDao.initializeDefaultUuid("network_offerings"); @@ -281,6 +283,7 @@ public class ConfigurationServerImpl implements ConfigurationServer { _identityDao.initializeDefaultUuid("user_ip_address"); _identityDao.initializeDefaultUuid("counter"); } + */ private String getMountParent() { return getEnvironmentProperty("mount.parent"); @@ -307,7 +310,7 @@ public class ConfigurationServerImpl implements ConfigurationServer { @DB protected void saveUser() { // insert system account - String insertSql = "INSERT INTO `cloud`.`account` (id, account_name, type, domain_id) VALUES (1, 'system', '1', '1')"; + String insertSql = "INSERT INTO `cloud`.`account` (id, uuid, account_name, type, domain_id) VALUES (1, UUID(), 'system', '1', '1')"; Transaction txn = Transaction.currentTxn(); try { PreparedStatement stmt = txn.prepareAutoCloseStatement(insertSql); @@ -315,8 +318,8 @@ public class ConfigurationServerImpl implements ConfigurationServer { } catch (SQLException ex) { } // insert system user - insertSql = "INSERT INTO `cloud`.`user` (id, username, password, account_id, firstname, lastname, created)" + - " VALUES (1, 'system', RAND(), 1, 'system', 'cloud', now())"; + insertSql = "INSERT INTO `cloud`.`user` (id, uuid, username, password, account_id, firstname, lastname, created)" + + " VALUES (1, UUID(), 'system', RAND(), 1, 'system', 'cloud', now())"; txn = Transaction.currentTxn(); try { PreparedStatement stmt = txn.prepareAutoCloseStatement(insertSql); @@ -332,7 +335,7 @@ public class ConfigurationServerImpl implements ConfigurationServer { String lastname = "cloud"; // create an account for the admin user first - insertSql = "INSERT INTO `cloud`.`account` (id, account_name, type, domain_id) VALUES (" + id + ", '" + username + "', '1', '1')"; + insertSql = "INSERT INTO `cloud`.`account` (id, uuid, account_name, type, domain_id) VALUES (" + id + ", UUID(), '" + username + "', '1', '1')"; txn = Transaction.currentTxn(); try { PreparedStatement stmt = txn.prepareAutoCloseStatement(insertSql); @@ -341,8 +344,8 @@ public class ConfigurationServerImpl implements ConfigurationServer { } // now insert the user - insertSql = "INSERT INTO `cloud`.`user` (id, username, account_id, firstname, lastname, created, state) " + - "VALUES (" + id + ",'" + username + "', 2, '" + firstname + "','" + lastname + "',now(), 'disabled')"; + insertSql = "INSERT INTO `cloud`.`user` (id, uuid, username, account_id, firstname, lastname, created, state) " + + "VALUES (" + id + ", UUID(), '" + username + "', 2, '" + firstname + "','" + lastname + "',now(), 'disabled')"; txn = Transaction.currentTxn(); try { @@ -368,8 +371,8 @@ public class ConfigurationServerImpl implements ConfigurationServer { if (!rs.next()) { // save default security group if (tableName.equals("security_group")) { - insertSql = "INSERT INTO " + tableName + " (name, description, account_id, domain_id) " + - "VALUES ('default', 'Default Security Group', 2, 1)"; + insertSql = "INSERT INTO " + tableName + " (uuid, name, description, account_id, domain_id) " + + "VALUES (UUID(), 'default', 'Default Security Group', 2, 1)"; } else { insertSql = "INSERT INTO " + tableName + " (name, description, account_id, domain_id, account_name) " + "VALUES ('default', 'Default Security Group', 2, 1, 'admin')"; @@ -842,16 +845,16 @@ public class ConfigurationServerImpl implements ConfigurationServer { @DB protected void createDefaultNetworkOfferings() { - NetworkOfferingVO publicNetworkOffering = new NetworkOfferingVO(NetworkOfferingVO.SystemPublicNetwork, + NetworkOfferingVO publicNetworkOffering = new NetworkOfferingVO(NetworkOfferingVO.SystemPublicNetwork, TrafficType.Public, true); publicNetworkOffering = _networkOfferingDao.persistDefaultNetworkOffering(publicNetworkOffering); - NetworkOfferingVO managementNetworkOffering = new NetworkOfferingVO(NetworkOfferingVO.SystemManagementNetwork, + NetworkOfferingVO managementNetworkOffering = new NetworkOfferingVO(NetworkOfferingVO.SystemManagementNetwork, TrafficType.Management, false); managementNetworkOffering = _networkOfferingDao.persistDefaultNetworkOffering(managementNetworkOffering); - NetworkOfferingVO controlNetworkOffering = new NetworkOfferingVO(NetworkOfferingVO.SystemControlNetwork, + NetworkOfferingVO controlNetworkOffering = new NetworkOfferingVO(NetworkOfferingVO.SystemControlNetwork, TrafficType.Control, false); controlNetworkOffering = _networkOfferingDao.persistDefaultNetworkOffering(controlNetworkOffering); - NetworkOfferingVO storageNetworkOffering = new NetworkOfferingVO(NetworkOfferingVO.SystemStorageNetwork, + NetworkOfferingVO storageNetworkOffering = new NetworkOfferingVO(NetworkOfferingVO.SystemStorageNetwork, TrafficType.Storage, true); storageNetworkOffering = _networkOfferingDao.persistDefaultNetworkOffering(storageNetworkOffering); NetworkOfferingVO privateGatewayNetworkOffering = new NetworkOfferingVO(NetworkOfferingVO.SystemPrivateGatewayNetworkOffering, GuestType.Isolated); diff --git a/setup/db/create-schema.sql b/setup/db/create-schema.sql index 0a463631723..37d52539f16 100755 --- a/setup/db/create-schema.sql +++ b/setup/db/create-schema.sql @@ -2539,10 +2539,10 @@ CREATE TABLE `cloud`.`autoscale_vmgroup_policy_map` ( INDEX `i_autoscale_vmgroup_policy_map__vmgroup_id`(`vmgroup_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; -INSERT INTO `cloud`.`counter` (id, source, name, value,created) VALUES (1,'snmp','Linux User CPU - percentage', '1.3.6.1.4.1.2021.11.9.0', now()); -INSERT INTO `cloud`.`counter` (id, source, name, value,created) VALUES (2,'snmp','Linux System CPU - percentage', '1.3.6.1.4.1.2021.11.10.0', now()); -INSERT INTO `cloud`.`counter` (id, source, name, value,created) VALUES (3,'snmp','Linux CPU Idle - percentage', '1.3.6.1.4.1.2021.11.11.0', now()); -INSERT INTO `cloud`.`counter` (id, source, name, value,created) VALUES (100,'netscaler','Response Time - microseconds', 'RESPTIME', now()); +INSERT INTO `cloud`.`counter` (id, uuid, source, name, value,created) VALUES (1, UUID(), 'snmp','Linux User CPU - percentage', '1.3.6.1.4.1.2021.11.9.0', now()); +INSERT INTO `cloud`.`counter` (id, uuid, source, name, value,created) VALUES (2, UUID(), 'snmp','Linux System CPU - percentage', '1.3.6.1.4.1.2021.11.10.0', now()); +INSERT INTO `cloud`.`counter` (id, uuid, source, name, value,created) VALUES (3, UUID(), 'snmp','Linux CPU Idle - percentage', '1.3.6.1.4.1.2021.11.11.0', now()); +INSERT INTO `cloud`.`counter` (id, uuid, source, name, value,created) VALUES (100, UUID(), 'netscaler','Response Time - microseconds', 'RESPTIME', now()); SET foreign_key_checks = 1; diff --git a/setup/db/server-setup.sql b/setup/db/server-setup.sql index 2cbfc162e1f..faab38e33fc 100644 --- a/setup/db/server-setup.sql +++ b/setup/db/server-setup.sql @@ -18,7 +18,7 @@ /* This file specifies default values that go into the database, before the Management Server is run. */ /* Root Domain */ -INSERT INTO `cloud`.`domain` (id, name, parent, path, owner) VALUES (1, 'ROOT', NULL, '/', 2); +INSERT INTO `cloud`.`domain` (id, uuid, name, parent, path, owner) VALUES (1, UUID(), 'ROOT', NULL, '/', 2); /* Configuration Table */ diff --git a/setup/db/templates.kvm.sql b/setup/db/templates.kvm.sql index 7b9502719da..bc275f5285d 100644 --- a/setup/db/templates.kvm.sql +++ b/setup/db/templates.kvm.sql @@ -15,56 +15,56 @@ -- specific language governing permissions and limitations -- under the License. -INSERT INTO `cloud`.`vm_template` (id, unique_name, name, public, created, type, hvm, bits, account_id, url, checksum, display_text, enable_password, format, guest_os_id, featured, cross_zones) - VALUES (1, 'routing', 'DomR Template', 0, now(), 'ext3', 0, 64, 1, 'http://download.cloud.com/templates/builtin/a88232bf-6a18-38e7-aeee-c1702725079f.qcow2.bz2', 'e39c55e93ae96bd43bfd588ca6ee3269', 'DomR Template', 0, 'QCOW2', 21, 0, 1); -INSERT INTO `cloud`.`vm_template` (id, unique_name, name, public, created, type, hvm, bits, account_id, url, checksum, display_text, enable_password, format, guest_os_id, featured, cross_zones) - VALUES (2, 'centos55-x86_64', 'CentOS 5.5(x86_64) no GUI', 1, now(), 'ext3', 0, 64, 1, 'http://download.cloud.com/templates/builtin/eec2209b-9875-3c8d-92be-c001bd8a0faf.qcow2.bz2', '1da20ae69b54f761f3f733dce97adcc0', 'CentOS 5.5(x86_64) no GUI', 0, 'QCOW2', 9, 1, 1); +INSERT INTO `cloud`.`vm_template` (id, uuid, unique_name, name, public, created, type, hvm, bits, account_id, url, checksum, display_text, enable_password, format, guest_os_id, featured, cross_zones) + VALUES (1, UUID(), 'routing', 'DomR Template', 0, now(), 'ext3', 0, 64, 1, 'http://download.cloud.com/templates/builtin/a88232bf-6a18-38e7-aeee-c1702725079f.qcow2.bz2', 'e39c55e93ae96bd43bfd588ca6ee3269', 'DomR Template', 0, 'QCOW2', 21, 0, 1); +INSERT INTO `cloud`.`vm_template` (id, uuid, unique_name, name, public, created, type, hvm, bits, account_id, url, checksum, display_text, enable_password, format, guest_os_id, featured, cross_zones) + VALUES (2, UUID(), 'centos55-x86_64', 'CentOS 5.5(x86_64) no GUI', 1, now(), 'ext3', 0, 64, 1, 'http://download.cloud.com/templates/builtin/eec2209b-9875-3c8d-92be-c001bd8a0faf.qcow2.bz2', '1da20ae69b54f761f3f733dce97adcc0', 'CentOS 5.5(x86_64) no GUI', 0, 'QCOW2', 9, 1, 1); -INSERT INTO `cloud`.`guest_os_category` (id, name) VALUES (1, 'CentOS'); -INSERT INTO `cloud`.`guest_os_category` (id, name) VALUES (2, 'Ubuntu'); -INSERT INTO `cloud`.`guest_os_category` (id, name) VALUES (5, 'RedHat'); -INSERT INTO `cloud`.`guest_os_category` (id, name) VALUES (7, 'Windows'); -INSERT INTO `cloud`.`guest_os_category` (id, name) VALUES (8, 'Other'); +INSERT INTO `cloud`.`guest_os_category` (id, uuid, name) VALUES (1, UUID(), 'CentOS'); +INSERT INTO `cloud`.`guest_os_category` (id, uuid, name) VALUES (2, UUID(), 'Ubuntu'); +INSERT INTO `cloud`.`guest_os_category` (id, uuid, name) VALUES (5, UUID(), 'RedHat'); +INSERT INTO `cloud`.`guest_os_category` (id, uuid, name) VALUES (7, UUID(), 'Windows'); +INSERT INTO `cloud`.`guest_os_category` (id, uuid, name) VALUES (8, UUID(), 'Other'); -INSERT INTO `cloud`.`guest_os` (category_id, name, display_name) VALUES (1, 'CentOS 4.5', 'CentOS 4.5'); -INSERT INTO `cloud`.`guest_os` (category_id, name, display_name) VALUES (1, 'CentOS 4.6', 'CentOS 4.6'); -INSERT INTO `cloud`.`guest_os` (category_id, name, display_name) VALUES (1, 'CentOS 4.7', 'CentOS 4.7'); -INSERT INTO `cloud`.`guest_os` (category_id, name, display_name) VALUES (1, 'CentOS 5.0', 'CentOS 5.0'); -INSERT INTO `cloud`.`guest_os` (category_id, name, display_name) VALUES (1, 'CentOS 5.1', 'CentOS 5.1'); -INSERT INTO `cloud`.`guest_os` (category_id, name, display_name) VALUES (1, 'CentOS 5.2', 'CentOS 5.2'); -INSERT INTO `cloud`.`guest_os` (category_id, name, display_name) VALUES (1, 'CentOS 5.3', 'CentOS 5.3'); -INSERT INTO `cloud`.`guest_os` (category_id, name, display_name) VALUES (1, 'CentOS 5.4', 'CentOS 5.4'); -INSERT INTO `cloud`.`guest_os` (category_id, name, display_name) VALUES (1, 'CentOS 5.5', 'CentOS 5.5'); -INSERT INTO `cloud`.`guest_os` (category_id, name, display_name) VALUES (5, 'Red Hat Enterprise Linux 4.5', 'Red Hat Enterprise Linux 4.5'); -INSERT INTO `cloud`.`guest_os` (category_id, name, display_name) VALUES (5, 'Red Hat Enterprise Linux 4.6', 'Red Hat Enterprise Linux 4.6'); -INSERT INTO `cloud`.`guest_os` (category_id, name, display_name) VALUES (5, 'Red Hat Enterprise Linux 4.7', 'Red Hat Enterprise Linux 4.7'); -INSERT INTO `cloud`.`guest_os` (category_id, name, display_name) VALUES (5, 'Red Hat Enterprise Linux 5.0', 'Red Hat Enterprise Linux 5.0'); -INSERT INTO `cloud`.`guest_os` (category_id, name, display_name) VALUES (5, 'Red Hat Enterprise Linux 5.1', 'Red Hat Enterprise Linux 5.1'); -INSERT INTO `cloud`.`guest_os` (category_id, name, display_name) VALUES (5, 'Red Hat Enterprise Linux 5.2', 'Red Hat Enterprise Linux 5.2'); -INSERT INTO `cloud`.`guest_os` (category_id, name, display_name) VALUES (5, 'Red Hat Enterprise Linux 5.3', 'Red Hat Enterprise Linux 5.3'); -INSERT INTO `cloud`.`guest_os` (category_id, name, display_name) VALUES (5, 'Red Hat Enterprise Linux 5.4', 'Red Hat Enterprise Linux 5.4'); -INSERT INTO `cloud`.`guest_os` (category_id, name, display_name) VALUES (5, 'Red Hat Enterprise Linux 5.5', 'Red Hat Enterprise Linux 5.5'); -INSERT INTO `cloud`.`guest_os` (category_id, name, display_name) VALUES (5, 'Red Hat Enterprise Linux 6', 'Red Hat Enterprise Linux 6'); -INSERT INTO `cloud`.`guest_os` (category_id, name, display_name) VALUES (5, 'Fedora 13', 'Fedora 13'); -INSERT INTO `cloud`.`guest_os` (category_id, name, display_name) VALUES (5, 'Fedora 12', 'Fedora 12'); -INSERT INTO `cloud`.`guest_os` (category_id, name, display_name) VALUES (5, 'Fedora 11', 'Fedora 11'); -INSERT INTO `cloud`.`guest_os` (category_id, name, display_name) VALUES (5, 'Fedora 10', 'Fedora 10'); -INSERT INTO `cloud`.`guest_os` (category_id, name, display_name) VALUES (5, 'Fedora 9', 'Fedora 9'); -INSERT INTO `cloud`.`guest_os` (category_id, name, display_name) VALUES (5, 'Fedora 8', 'Fedora 8'); -INSERT INTO `cloud`.`guest_os` (category_id, name, display_name) VALUES (2, 'Ubuntu 10.04', 'Ubuntu 10.04'); -INSERT INTO `cloud`.`guest_os` (category_id, name, display_name) VALUES (2, 'Ubuntu 9.10', 'Ubuntu 9.10'); -INSERT INTO `cloud`.`guest_os` (category_id, name, display_name) VALUES (2, 'Ubuntu 9.04', 'Ubuntu 9.04'); -INSERT INTO `cloud`.`guest_os` (category_id, name, display_name) VALUES (2, 'Ubuntu 8.10', 'Ubuntu 8.10'); -INSERT INTO `cloud`.`guest_os` (category_id, name, display_name) VALUES (2, 'Ubuntu 8.04', 'Ubuntu 8.04'); -INSERT INTO `cloud`.`guest_os` (category_id, name, display_name) VALUES (2, 'Debian Squeeze', 'Debian Squeeze'); -INSERT INTO `cloud`.`guest_os` (category_id, name, display_name) VALUES (2, 'Debian Lenny', 'Debian Lenny'); -INSERT INTO `cloud`.`guest_os` (category_id, name, display_name) VALUES (2, 'Debian Etch', 'Debian Etch'); -INSERT INTO `cloud`.`guest_os` (category_id, name, display_name) VALUES (7, 'Windows 7', 'Windows 7'); -INSERT INTO `cloud`.`guest_os` (category_id, name, display_name) VALUES (7, 'Windows Server 2003', 'Windows Server 2003'); -INSERT INTO `cloud`.`guest_os` (category_id, name, display_name) VALUES (7, 'Windows Server 2008', 'Windows Server 2008'); -INSERT INTO `cloud`.`guest_os` (category_id, name, display_name) VALUES (7, 'Windows 2000 SP4', 'Windows 2000 SP4'); -INSERT INTO `cloud`.`guest_os` (category_id, name, display_name) VALUES (7, 'Windows Vista', 'Windows Vista'); -INSERT INTO `cloud`.`guest_os` (category_id, name, display_name) VALUES (7, 'Windows XP SP2', 'Windows XP SP2'); -INSERT INTO `cloud`.`guest_os` (category_id, name, display_name) VALUES (7, 'Windows XP SP3', 'Windows XP SP3'); -INSERT INTO `cloud`.`guest_os` (category_id, name, display_name) VALUES (8, 'Other install media', 'Other'); +INSERT INTO `cloud`.`guest_os` (uuid, category_id, name, display_name) VALUES (UUID(), 1, 'CentOS 4.5', 'CentOS 4.5'); +INSERT INTO `cloud`.`guest_os` (uuid, category_id, name, display_name) VALUES (UUID(), 1, 'CentOS 4.6', 'CentOS 4.6'); +INSERT INTO `cloud`.`guest_os` (uuid, category_id, name, display_name) VALUES (UUID(), 1, 'CentOS 4.7', 'CentOS 4.7'); +INSERT INTO `cloud`.`guest_os` (uuid, category_id, name, display_name) VALUES (UUID(), 1, 'CentOS 5.0', 'CentOS 5.0'); +INSERT INTO `cloud`.`guest_os` (uuid, category_id, name, display_name) VALUES (UUID(), 1, 'CentOS 5.1', 'CentOS 5.1'); +INSERT INTO `cloud`.`guest_os` (uuid, category_id, name, display_name) VALUES (UUID(), 1, 'CentOS 5.2', 'CentOS 5.2'); +INSERT INTO `cloud`.`guest_os` (uuid, category_id, name, display_name) VALUES (UUID(), 1, 'CentOS 5.3', 'CentOS 5.3'); +INSERT INTO `cloud`.`guest_os` (uuid, category_id, name, display_name) VALUES (UUID(), 1, 'CentOS 5.4', 'CentOS 5.4'); +INSERT INTO `cloud`.`guest_os` (uuid, category_id, name, display_name) VALUES (UUID(), 1, 'CentOS 5.5', 'CentOS 5.5'); +INSERT INTO `cloud`.`guest_os` (uuid, category_id, name, display_name) VALUES (UUID(), 5, 'Red Hat Enterprise Linux 4.5', 'Red Hat Enterprise Linux 4.5'); +INSERT INTO `cloud`.`guest_os` (uuid, category_id, name, display_name) VALUES (UUID(), 5, 'Red Hat Enterprise Linux 4.6', 'Red Hat Enterprise Linux 4.6'); +INSERT INTO `cloud`.`guest_os` (uuid, category_id, name, display_name) VALUES (UUID(), 5, 'Red Hat Enterprise Linux 4.7', 'Red Hat Enterprise Linux 4.7'); +INSERT INTO `cloud`.`guest_os` (uuid, category_id, name, display_name) VALUES (UUID(), 5, 'Red Hat Enterprise Linux 5.0', 'Red Hat Enterprise Linux 5.0'); +INSERT INTO `cloud`.`guest_os` (uuid, category_id, name, display_name) VALUES (UUID(), 5, 'Red Hat Enterprise Linux 5.1', 'Red Hat Enterprise Linux 5.1'); +INSERT INTO `cloud`.`guest_os` (uuid, category_id, name, display_name) VALUES (UUID(), 5, 'Red Hat Enterprise Linux 5.2', 'Red Hat Enterprise Linux 5.2'); +INSERT INTO `cloud`.`guest_os` (uuid, category_id, name, display_name) VALUES (UUID(), 5, 'Red Hat Enterprise Linux 5.3', 'Red Hat Enterprise Linux 5.3'); +INSERT INTO `cloud`.`guest_os` (uuid, category_id, name, display_name) VALUES (UUID(), 5, 'Red Hat Enterprise Linux 5.4', 'Red Hat Enterprise Linux 5.4'); +INSERT INTO `cloud`.`guest_os` (uuid, category_id, name, display_name) VALUES (UUID(), 5, 'Red Hat Enterprise Linux 5.5', 'Red Hat Enterprise Linux 5.5'); +INSERT INTO `cloud`.`guest_os` (uuid, category_id, name, display_name) VALUES (UUID(), 5, 'Red Hat Enterprise Linux 6', 'Red Hat Enterprise Linux 6'); +INSERT INTO `cloud`.`guest_os` (uuid, category_id, name, display_name) VALUES (UUID(), 5, 'Fedora 13', 'Fedora 13'); +INSERT INTO `cloud`.`guest_os` (uuid, category_id, name, display_name) VALUES (UUID(), 5, 'Fedora 12', 'Fedora 12'); +INSERT INTO `cloud`.`guest_os` (uuid, category_id, name, display_name) VALUES (UUID(), 5, 'Fedora 11', 'Fedora 11'); +INSERT INTO `cloud`.`guest_os` (uuid, category_id, name, display_name) VALUES (UUID(), 5, 'Fedora 10', 'Fedora 10'); +INSERT INTO `cloud`.`guest_os` (uuid, category_id, name, display_name) VALUES (UUID(), 5, 'Fedora 9', 'Fedora 9'); +INSERT INTO `cloud`.`guest_os` (uuid, category_id, name, display_name) VALUES (UUID(), 5, 'Fedora 8', 'Fedora 8'); +INSERT INTO `cloud`.`guest_os` (uuid, category_id, name, display_name) VALUES (UUID(), 2, 'Ubuntu 10.04', 'Ubuntu 10.04'); +INSERT INTO `cloud`.`guest_os` (uuid, category_id, name, display_name) VALUES (UUID(), 2, 'Ubuntu 9.10', 'Ubuntu 9.10'); +INSERT INTO `cloud`.`guest_os` (uuid, category_id, name, display_name) VALUES (UUID(), 2, 'Ubuntu 9.04', 'Ubuntu 9.04'); +INSERT INTO `cloud`.`guest_os` (uuid, category_id, name, display_name) VALUES (UUID(), 2, 'Ubuntu 8.10', 'Ubuntu 8.10'); +INSERT INTO `cloud`.`guest_os` (uuid, category_id, name, display_name) VALUES (UUID(), 2, 'Ubuntu 8.04', 'Ubuntu 8.04'); +INSERT INTO `cloud`.`guest_os` (uuid, category_id, name, display_name) VALUES (UUID(), 2, 'Debian Squeeze', 'Debian Squeeze'); +INSERT INTO `cloud`.`guest_os` (uuid, category_id, name, display_name) VALUES (UUID(), 2, 'Debian Lenny', 'Debian Lenny'); +INSERT INTO `cloud`.`guest_os` (uuid, category_id, name, display_name) VALUES (UUID(), 2, 'Debian Etch', 'Debian Etch'); +INSERT INTO `cloud`.`guest_os` (uuid, category_id, name, display_name) VALUES (UUID(), 7, 'Windows 7', 'Windows 7'); +INSERT INTO `cloud`.`guest_os` (uuid, category_id, name, display_name) VALUES (UUID(), 7, 'Windows Server 2003', 'Windows Server 2003'); +INSERT INTO `cloud`.`guest_os` (uuid, category_id, name, display_name) VALUES (UUID(), 7, 'Windows Server 2008', 'Windows Server 2008'); +INSERT INTO `cloud`.`guest_os` (uuid, category_id, name, display_name) VALUES (UUID(), 7, 'Windows 2000 SP4', 'Windows 2000 SP4'); +INSERT INTO `cloud`.`guest_os` (uuid, category_id, name, display_name) VALUES (UUID(), 7, 'Windows Vista', 'Windows Vista'); +INSERT INTO `cloud`.`guest_os` (uuid, category_id, name, display_name) VALUES (UUID(), 7, 'Windows XP SP2', 'Windows XP SP2'); +INSERT INTO `cloud`.`guest_os` (uuid, category_id, name, display_name) VALUES (UUID(), 7, 'Windows XP SP3', 'Windows XP SP3'); +INSERT INTO `cloud`.`guest_os` (uuid, category_id, name, display_name) VALUES (UUID(), 8, 'Other install media', 'Other'); diff --git a/setup/db/templates.simulator.sql b/setup/db/templates.simulator.sql index 7e712f54177..437e8f5357e 100755 --- a/setup/db/templates.simulator.sql +++ b/setup/db/templates.simulator.sql @@ -16,7 +16,7 @@ -- under the License. -INSERT INTO `cloud`.`vm_template` (id, unique_name, name, public, created, type, hvm, bits, account_id, url, checksum, enable_password, display_text, format, guest_os_id, featured, cross_zones, hypervisor_type) - VALUES (10, 'simulator-domR', 'SystemVM Template (simulator)', 0, now(), 'SYSTEM', 0, 64, 1, 'http://nfs1.lab.vmops.com/templates/routing/debian/latest/systemvm.vhd.bz2', '', 0, 'SystemVM Template (simulator)', 'VHD', 15, 0, 1, 'Simulator'); -INSERT INTO `cloud`.`vm_template` (id, unique_name, name, public, created, type, hvm, bits, account_id, url, checksum, enable_password, display_text, format, guest_os_id, featured, cross_zones, hypervisor_type) - VALUES (11, 'simulator-Centos', 'CentOS 5.3(64-bit) no GUI (Simulator)', 1, now(), 'BUILTIN', 0, 64, 1, 'http://nfs1.lab.vmops.com/templates/centos53-x86_64/latest/f59f18fb-ae94-4f97-afd2-f84755767aca.vhd.bz2', '', 0, 'CentOS 5.3(64-bit) no GUI (Simulator)', 'VHD', 11, 1, 1, 'Simulator'); +INSERT INTO `cloud`.`vm_template` (id, uuid, unique_name, name, public, created, type, hvm, bits, account_id, url, checksum, enable_password, display_text, format, guest_os_id, featured, cross_zones, hypervisor_type) + VALUES (10, UUID(), 'simulator-domR', 'SystemVM Template (simulator)', 0, now(), 'SYSTEM', 0, 64, 1, 'http://nfs1.lab.vmops.com/templates/routing/debian/latest/systemvm.vhd.bz2', '', 0, 'SystemVM Template (simulator)', 'VHD', 15, 0, 1, 'Simulator'); +INSERT INTO `cloud`.`vm_template` (id, uuid, unique_name, name, public, created, type, hvm, bits, account_id, url, checksum, enable_password, display_text, format, guest_os_id, featured, cross_zones, hypervisor_type) + VALUES (11, UUID(), 'simulator-Centos', 'CentOS 5.3(64-bit) no GUI (Simulator)', 1, now(), 'BUILTIN', 0, 64, 1, 'http://nfs1.lab.vmops.com/templates/centos53-x86_64/latest/f59f18fb-ae94-4f97-afd2-f84755767aca.vhd.bz2', '', 0, 'CentOS 5.3(64-bit) no GUI (Simulator)', 'VHD', 11, 1, 1, 'Simulator'); diff --git a/setup/db/templates.sql b/setup/db/templates.sql index 0c85be47a5f..3867d4fe9d2 100755 --- a/setup/db/templates.sql +++ b/setup/db/templates.sql @@ -15,207 +15,207 @@ -- specific language governing permissions and limitations -- under the License. -INSERT INTO `cloud`.`vm_template` (id, unique_name, name, public, created, type, hvm, bits, account_id, url, checksum, enable_password, display_text, format, guest_os_id, featured, cross_zones, hypervisor_type) - VALUES (1, 'routing-1', 'SystemVM Template (XenServer)', 0, now(), 'SYSTEM', 0, 64, 1, 'http://download.cloud.com/templates/acton/acton-systemvm-02062012.vhd.bz2', 'f613f38c96bf039f2e5cbf92fa8ad4f8', 0, 'SystemVM Template (XenServer)', 'VHD', 133, 0, 1, 'XenServer'); -INSERT INTO `cloud`.`vm_template` (id, unique_name, name, public, created, removed, type, hvm, bits, account_id, url, checksum, enable_password, display_text, format, guest_os_id, featured, cross_zones, hypervisor_type, extractable) - VALUES (2, 'centos53-x86_64', 'CentOS 5.3(64-bit) no GUI (XenServer)', 1, now(), now(), 'BUILTIN', 0, 64, 1, 'http://download.cloud.com/templates/builtin/f59f18fb-ae94-4f97-afd2-f84755767aca.vhd.bz2', 'b63d854a9560c013142567bbae8d98cf', 0, 'CentOS 5.3(64-bit) no GUI (XenServer)', 'VHD', 12, 1, 1, 'XenServer', 1); +INSERT INTO `cloud`.`vm_template` (id, uuid, unique_name, name, public, created, type, hvm, bits, account_id, url, checksum, enable_password, display_text, format, guest_os_id, featured, cross_zones, hypervisor_type) + VALUES (1, UUID(), 'routing-1', 'SystemVM Template (XenServer)', 0, now(), 'SYSTEM', 0, 64, 1, 'http://download.cloud.com/templates/acton/acton-systemvm-02062012.vhd.bz2', 'f613f38c96bf039f2e5cbf92fa8ad4f8', 0, 'SystemVM Template (XenServer)', 'VHD', 133, 0, 1, 'XenServer'); +INSERT INTO `cloud`.`vm_template` (id, uuid, unique_name, name, public, created, removed, type, hvm, bits, account_id, url, checksum, enable_password, display_text, format, guest_os_id, featured, cross_zones, hypervisor_type, extractable) + VALUES (2, UUID(), 'centos53-x86_64', 'CentOS 5.3(64-bit) no GUI (XenServer)', 1, now(), now(), 'BUILTIN', 0, 64, 1, 'http://download.cloud.com/templates/builtin/f59f18fb-ae94-4f97-afd2-f84755767aca.vhd.bz2', 'b63d854a9560c013142567bbae8d98cf', 0, 'CentOS 5.3(64-bit) no GUI (XenServer)', 'VHD', 12, 1, 1, 'XenServer', 1); -INSERT INTO `cloud`.`vm_template` (id, unique_name, name, public, created, type, hvm, bits, account_id, url, checksum, enable_password, display_text, format, guest_os_id, featured, cross_zones, hypervisor_type) - VALUES (3, 'routing-3', 'SystemVM Template (KVM)', 0, now(), 'SYSTEM', 0, 64, 1, 'http://download.cloud.com/templates/acton/acton-systemvm-02062012.qcow2.bz2', '2755de1f9ef2ce4d6f2bee2efbb4da92', 0, 'SystemVM Template (KVM)', 'QCOW2', 15, 0, 1, 'KVM'); +INSERT INTO `cloud`.`vm_template` (id, uuid, unique_name, name, public, created, type, hvm, bits, account_id, url, checksum, enable_password, display_text, format, guest_os_id, featured, cross_zones, hypervisor_type) + VALUES (3, UUID(), 'routing-3', 'SystemVM Template (KVM)', 0, now(), 'SYSTEM', 0, 64, 1, 'http://download.cloud.com/templates/acton/acton-systemvm-02062012.qcow2.bz2', '2755de1f9ef2ce4d6f2bee2efbb4da92', 0, 'SystemVM Template (KVM)', 'QCOW2', 15, 0, 1, 'KVM'); -INSERT INTO `cloud`.`vm_template` (id, unique_name, name, public, created, type, hvm, bits, account_id, url, checksum, display_text, enable_password, format, guest_os_id, featured, cross_zones, hypervisor_type, extractable) - VALUES (4, 'centos55-x86_64', 'CentOS 5.5(64-bit) no GUI (KVM)', 1, now(), 'BUILTIN', 0, 64, 1, 'http://download.cloud.com/releases/2.2.0/eec2209b-9875-3c8d-92be-c001bd8a0faf.qcow2.bz2', 'ed0e788280ff2912ea40f7f91ca7a249', 'CentOS 5.5(64-bit) no GUI (KVM)', 0, 'QCOW2', 112, 1, 1, 'KVM', 1); +INSERT INTO `cloud`.`vm_template` (id, uuid, unique_name, name, public, created, type, hvm, bits, account_id, url, checksum, display_text, enable_password, format, guest_os_id, featured, cross_zones, hypervisor_type, extractable) + VALUES (4, UUID(), 'centos55-x86_64', 'CentOS 5.5(64-bit) no GUI (KVM)', 1, now(), 'BUILTIN', 0, 64, 1, 'http://download.cloud.com/releases/2.2.0/eec2209b-9875-3c8d-92be-c001bd8a0faf.qcow2.bz2', 'ed0e788280ff2912ea40f7f91ca7a249', 'CentOS 5.5(64-bit) no GUI (KVM)', 0, 'QCOW2', 112, 1, 1, 'KVM', 1); -INSERT INTO `cloud`.`vm_template` (id, unique_name, name, public, created, type, hvm, bits, account_id, url, checksum, enable_password, display_text, format, guest_os_id, featured, cross_zones, hypervisor_type, extractable) - VALUES (5, 'centos56-x86_64-xen', 'CentOS 5.6(64-bit) no GUI (XenServer)', 1, now(), 'BUILTIN', 0, 64, 1, 'http://download.cloud.com/templates/builtin/centos56-x86_64.vhd.bz2', '905cec879afd9c9d22ecc8036131a180', 0, 'CentOS 5.6(64-bit) no GUI (XenServer)', 'VHD', 12, 1, 1, 'XenServer', 1); +INSERT INTO `cloud`.`vm_template` (id, uuid, unique_name, name, public, created, type, hvm, bits, account_id, url, checksum, enable_password, display_text, format, guest_os_id, featured, cross_zones, hypervisor_type, extractable) + VALUES (5, UUID(), 'centos56-x86_64-xen', 'CentOS 5.6(64-bit) no GUI (XenServer)', 1, now(), 'BUILTIN', 0, 64, 1, 'http://download.cloud.com/templates/builtin/centos56-x86_64.vhd.bz2', '905cec879afd9c9d22ecc8036131a180', 0, 'CentOS 5.6(64-bit) no GUI (XenServer)', 'VHD', 12, 1, 1, 'XenServer', 1); -INSERT INTO `cloud`.`vm_template` (id, unique_name, name, public, created, type, hvm, bits, account_id, url, checksum, enable_password, display_text, format, guest_os_id, featured, cross_zones, hypervisor_type, extractable) - VALUES (7, 'centos53-x64', 'CentOS 5.3(64-bit) no GUI (vSphere)', 1, now(), 'BUILTIN', 0, 64, 1, 'http://download.cloud.com/releases/2.2.0/CentOS5.3-x86_64.ova', 'f6f881b7f2292948d8494db837fe0f47', 0, 'CentOS 5.3(64-bit) no GUI (vSphere)', 'OVA', 12, 1, 1, 'VMware', 1); +INSERT INTO `cloud`.`vm_template` (id, uuid, unique_name, name, public, created, type, hvm, bits, account_id, url, checksum, enable_password, display_text, format, guest_os_id, featured, cross_zones, hypervisor_type, extractable) + VALUES (7, UUID(), 'centos53-x64', 'CentOS 5.3(64-bit) no GUI (vSphere)', 1, now(), 'BUILTIN', 0, 64, 1, 'http://download.cloud.com/releases/2.2.0/CentOS5.3-x86_64.ova', 'f6f881b7f2292948d8494db837fe0f47', 0, 'CentOS 5.3(64-bit) no GUI (vSphere)', 'OVA', 12, 1, 1, 'VMware', 1); -INSERT INTO `cloud`.`vm_template` (id, unique_name, name, public, created, type, hvm, bits, account_id, url, checksum, enable_password, display_text, format, guest_os_id, featured, cross_zones, hypervisor_type) - VALUES (8, 'routing-8', 'SystemVM Template (vSphere)', 0, now(), 'SYSTEM', 0, 32, 1, 'http://download.cloud.com/templates/burbank/burbank-systemvm-08012012.ova', '7137e453f950079ea2ba6feaafd939e8', 0, 'SystemVM Template (vSphere)', 'OVA', 15, 0, 1, 'VMware'); +INSERT INTO `cloud`.`vm_template` (id, uuid, unique_name, name, public, created, type, hvm, bits, account_id, url, checksum, enable_password, display_text, format, guest_os_id, featured, cross_zones, hypervisor_type) + VALUES (8, UUID(), 'routing-8', 'SystemVM Template (vSphere)', 0, now(), 'SYSTEM', 0, 32, 1, 'http://download.cloud.com/templates/burbank/burbank-systemvm-08012012.ova', '7137e453f950079ea2ba6feaafd939e8', 0, 'SystemVM Template (vSphere)', 'OVA', 15, 0, 1, 'VMware'); -INSERT INTO `cloud`.`vm_template` (id, unique_name, name, public, created, type, hvm, bits, account_id, url, checksum, enable_password, display_text, format, guest_os_id, featured, cross_zones, hypervisor_type) - VALUES (9, 'routing-9', 'SystemVM Template (HyperV)', 0, now(), 'SYSTEM', 0, 32, 1, 'http://download.cloud.com/templates/acton/acton-systemvm-02062012.vhd.bz2', 'f613f38c96bf039f2e5cbf92fa8ad4f8', 0, 'SystemVM Template (HyperV)', 'VHD', 15, 0, 1, 'Hyperv'); +INSERT INTO `cloud`.`vm_template` (id, uuid, unique_name, name, public, created, type, hvm, bits, account_id, url, checksum, enable_password, display_text, format, guest_os_id, featured, cross_zones, hypervisor_type) + VALUES (9, UUID(), 'routing-9', 'SystemVM Template (HyperV)', 0, now(), 'SYSTEM', 0, 32, 1, 'http://download.cloud.com/templates/acton/acton-systemvm-02062012.vhd.bz2', 'f613f38c96bf039f2e5cbf92fa8ad4f8', 0, 'SystemVM Template (HyperV)', 'VHD', 15, 0, 1, 'Hyperv'); -INSERT INTO `cloud`.`guest_os_category` (id, name) VALUES (1, 'CentOS'); -INSERT INTO `cloud`.`guest_os_category` (id, name) VALUES (2, 'Debian'); -INSERT INTO `cloud`.`guest_os_category` (id, name) VALUES (3, 'Oracle'); -INSERT INTO `cloud`.`guest_os_category` (id, name) VALUES (4, 'RedHat'); -INSERT INTO `cloud`.`guest_os_category` (id, name) VALUES (5, 'SUSE'); -INSERT INTO `cloud`.`guest_os_category` (id, name) VALUES (6, 'Windows'); -INSERT INTO `cloud`.`guest_os_category` (id, name) VALUES (7, 'Other'); -INSERT INTO `cloud`.`guest_os_category` (id, name) VALUES (8, 'Novel'); -INSERT INTO `cloud`.`guest_os_category` (id, name) VALUES (9, 'Unix'); -INSERT INTO `cloud`.`guest_os_category` (id, name) VALUES (10, 'Ubuntu'); -INSERT INTO `cloud`.`guest_os_category` (id, name) VALUES (11, 'None'); +INSERT INTO `cloud`.`guest_os_category` (id, uuid, name) VALUES (1, UUID(), 'CentOS'); +INSERT INTO `cloud`.`guest_os_category` (id, uuid, name) VALUES (2, UUID(), 'Debian'); +INSERT INTO `cloud`.`guest_os_category` (id, uuid, name) VALUES (3, UUID(), 'Oracle'); +INSERT INTO `cloud`.`guest_os_category` (id, uuid, name) VALUES (4, UUID(), 'RedHat'); +INSERT INTO `cloud`.`guest_os_category` (id, uuid, name) VALUES (5, UUID(), 'SUSE'); +INSERT INTO `cloud`.`guest_os_category` (id, uuid, name) VALUES (6, UUID(), 'Windows'); +INSERT INTO `cloud`.`guest_os_category` (id, uuid, name) VALUES (7, UUID(), 'Other'); +INSERT INTO `cloud`.`guest_os_category` (id, uuid, name) VALUES (8, UUID(), 'Novel'); +INSERT INTO `cloud`.`guest_os_category` (id, uuid, name) VALUES (9, UUID(), 'Unix'); +INSERT INTO `cloud`.`guest_os_category` (id, uuid, name) VALUES (10, UUID(), 'Ubuntu'); +INSERT INTO `cloud`.`guest_os_category` (id, uuid, name) VALUES (11, UUID(), 'None'); -INSERT INTO `cloud`.`guest_os` (id, category_id, display_name) VALUES (1, 1, 'CentOS 4.5 (32-bit)'); -INSERT INTO `cloud`.`guest_os` (id, category_id, display_name) VALUES (2, 1, 'CentOS 4.6 (32-bit)'); -INSERT INTO `cloud`.`guest_os` (id, category_id, display_name) VALUES (3, 1, 'CentOS 4.7 (32-bit)'); -INSERT INTO `cloud`.`guest_os` (id, category_id, display_name) VALUES (4, 1, 'CentOS 4.8 (32-bit)'); -INSERT INTO `cloud`.`guest_os` (id, category_id, display_name) VALUES (5, 1, 'CentOS 5.0 (32-bit)'); -INSERT INTO `cloud`.`guest_os` (id, category_id, display_name) VALUES (6, 1, 'CentOS 5.0 (64-bit)'); -INSERT INTO `cloud`.`guest_os` (id, category_id, display_name) VALUES (7, 1, 'CentOS 5.1 (32-bit)'); -INSERT INTO `cloud`.`guest_os` (id, category_id, display_name) VALUES (8, 1, 'CentOS 5.1 (64-bit)'); -INSERT INTO `cloud`.`guest_os` (id, category_id, display_name) VALUES (9, 1, 'CentOS 5.2 (32-bit)'); -INSERT INTO `cloud`.`guest_os` (id, category_id, display_name) VALUES (10, 1, 'CentOS 5.2 (64-bit)'); -INSERT INTO `cloud`.`guest_os` (id, category_id, display_name) VALUES (11, 1, 'CentOS 5.3 (32-bit)'); -INSERT INTO `cloud`.`guest_os` (id, category_id, display_name) VALUES (12, 1, 'CentOS 5.3 (64-bit)'); -INSERT INTO `cloud`.`guest_os` (id, category_id, display_name) VALUES (13, 1, 'CentOS 5.4 (32-bit)'); -INSERT INTO `cloud`.`guest_os` (id, category_id, display_name) VALUES (14, 1, 'CentOS 5.4 (64-bit)'); -INSERT INTO `cloud`.`guest_os` (id, category_id, display_name) VALUES (15, 2, 'Debian GNU/Linux 5.0 (32-bit)'); -INSERT INTO `cloud`.`guest_os` (id, category_id, display_name) VALUES (16, 3, 'Oracle Enterprise Linux 5.0 (32-bit)'); -INSERT INTO `cloud`.`guest_os` (id, category_id, display_name) VALUES (17, 3, 'Oracle Enterprise Linux 5.0 (64-bit)'); -INSERT INTO `cloud`.`guest_os` (id, category_id, display_name) VALUES (18, 3, 'Oracle Enterprise Linux 5.1 (32-bit)'); -INSERT INTO `cloud`.`guest_os` (id, category_id, display_name) VALUES (19, 3, 'Oracle Enterprise Linux 5.1 (64-bit)'); -INSERT INTO `cloud`.`guest_os` (id, category_id, display_name) VALUES (20, 3, 'Oracle Enterprise Linux 5.2 (32-bit)'); -INSERT INTO `cloud`.`guest_os` (id, category_id, display_name) VALUES (21, 3, 'Oracle Enterprise Linux 5.2 (64-bit)'); -INSERT INTO `cloud`.`guest_os` (id, category_id, display_name) VALUES (22, 3, 'Oracle Enterprise Linux 5.3 (32-bit)'); -INSERT INTO `cloud`.`guest_os` (id, category_id, display_name) VALUES (23, 3, 'Oracle Enterprise Linux 5.3 (64-bit)'); -INSERT INTO `cloud`.`guest_os` (id, category_id, display_name) VALUES (24, 3, 'Oracle Enterprise Linux 5.4 (32-bit)'); -INSERT INTO `cloud`.`guest_os` (id, category_id, display_name) VALUES (25, 3, 'Oracle Enterprise Linux 5.4 (64-bit)'); -INSERT INTO `cloud`.`guest_os` (id, category_id, display_name) VALUES (26, 4, 'Red Hat Enterprise Linux 4.5 (32-bit)'); -INSERT INTO `cloud`.`guest_os` (id, category_id, display_name) VALUES (27, 4, 'Red Hat Enterprise Linux 4.6 (32-bit)'); -INSERT INTO `cloud`.`guest_os` (id, category_id, display_name) VALUES (28, 4, 'Red Hat Enterprise Linux 4.7 (32-bit)'); -INSERT INTO `cloud`.`guest_os` (id, category_id, display_name) VALUES (29, 4, 'Red Hat Enterprise Linux 4.8 (32-bit)'); -INSERT INTO `cloud`.`guest_os` (id, category_id, display_name) VALUES (30, 4, 'Red Hat Enterprise Linux 5.0 (32-bit)'); -INSERT INTO `cloud`.`guest_os` (id, category_id, display_name) VALUES (31, 4, 'Red Hat Enterprise Linux 5.0 (64-bit)'); -INSERT INTO `cloud`.`guest_os` (id, category_id, display_name) VALUES (32, 4, 'Red Hat Enterprise Linux 5.1 (32-bit)'); -INSERT INTO `cloud`.`guest_os` (id, category_id, display_name) VALUES (33, 4, 'Red Hat Enterprise Linux 5.1 (64-bit)'); -INSERT INTO `cloud`.`guest_os` (id, category_id, display_name) VALUES (34, 4, 'Red Hat Enterprise Linux 5.2 (32-bit)'); -INSERT INTO `cloud`.`guest_os` (id, category_id, display_name) VALUES (35, 4, 'Red Hat Enterprise Linux 5.2 (64-bit)'); -INSERT INTO `cloud`.`guest_os` (id, category_id, display_name) VALUES (36, 4, 'Red Hat Enterprise Linux 5.3 (32-bit)'); -INSERT INTO `cloud`.`guest_os` (id, category_id, display_name) VALUES (37, 4, 'Red Hat Enterprise Linux 5.3 (64-bit)'); -INSERT INTO `cloud`.`guest_os` (id, category_id, display_name) VALUES (38, 4, 'Red Hat Enterprise Linux 5.4 (32-bit)'); -INSERT INTO `cloud`.`guest_os` (id, category_id, display_name) VALUES (39, 4, 'Red Hat Enterprise Linux 5.4 (64-bit)'); -INSERT INTO `cloud`.`guest_os` (id, category_id, display_name) VALUES (40, 5, 'SUSE Linux Enterprise Server 9 SP4 (32-bit)'); -INSERT INTO `cloud`.`guest_os` (id, category_id, display_name) VALUES (41, 5, 'SUSE Linux Enterprise Server 10 SP1 (32-bit)'); -INSERT INTO `cloud`.`guest_os` (id, category_id, display_name) VALUES (42, 5, 'SUSE Linux Enterprise Server 10 SP1 (64-bit)'); -INSERT INTO `cloud`.`guest_os` (id, category_id, display_name) VALUES (43, 5, 'SUSE Linux Enterprise Server 10 SP2 (32-bit)'); -INSERT INTO `cloud`.`guest_os` (id, category_id, display_name) VALUES (44, 5, 'SUSE Linux Enterprise Server 10 SP2 (64-bit)'); -INSERT INTO `cloud`.`guest_os` (id, category_id, display_name) VALUES (45, 5, 'SUSE Linux Enterprise Server 10 SP3 (64-bit)'); -INSERT INTO `cloud`.`guest_os` (id, category_id, display_name) VALUES (46, 5, 'SUSE Linux Enterprise Server 11 (32-bit)'); -INSERT INTO `cloud`.`guest_os` (id, category_id, display_name) VALUES (47, 5, 'SUSE Linux Enterprise Server 11 (64-bit)'); -INSERT INTO `cloud`.`guest_os` (id, category_id, display_name) VALUES (48, 6, 'Windows 7 (32-bit)'); -INSERT INTO `cloud`.`guest_os` (id, category_id, display_name) VALUES (49, 6, 'Windows 7 (64-bit)'); -INSERT INTO `cloud`.`guest_os` (id, category_id, display_name) VALUES (50, 6, 'Windows Server 2003 Enterprise Edition(32-bit)'); -INSERT INTO `cloud`.`guest_os` (id, category_id, display_name) VALUES (51, 6, 'Windows Server 2003 Enterprise Edition(64-bit)'); -INSERT INTO `cloud`.`guest_os` (id, category_id, display_name) VALUES (52, 6, 'Windows Server 2008 (32-bit)'); -INSERT INTO `cloud`.`guest_os` (id, category_id, display_name) VALUES (53, 6, 'Windows Server 2008 (64-bit)'); -INSERT INTO `cloud`.`guest_os` (id, category_id, display_name) VALUES (54, 6, 'Windows Server 2008 R2 (64-bit)'); -INSERT INTO `cloud`.`guest_os` (id, category_id, display_name) VALUES (55, 6, 'Windows 2000 Server SP4 (32-bit)'); -INSERT INTO `cloud`.`guest_os` (id, category_id, display_name) VALUES (56, 6, 'Windows Vista (32-bit)'); -INSERT INTO `cloud`.`guest_os` (id, category_id, display_name) VALUES (57, 6, 'Windows XP SP2 (32-bit)'); -INSERT INTO `cloud`.`guest_os` (id, category_id, display_name) VALUES (58, 6, 'Windows XP SP3 (32-bit)'); -INSERT INTO `cloud`.`guest_os` (id, category_id, display_name) VALUES (59, 10, 'Other Ubuntu (32-bit)'); -INSERT INTO `cloud`.`guest_os` (id, category_id, display_name) VALUES (60, 7, 'Other (32-bit)'); -INSERT INTO `cloud`.`guest_os` (id, category_id, display_name) VALUES (61, 6, 'Windows 2000 Server'); -INSERT INTO `cloud`.`guest_os` (id, category_id, display_name) VALUES (62, 6, 'Windows 98'); -INSERT INTO `cloud`.`guest_os` (id, category_id, display_name) VALUES (63, 6, 'Windows 95'); -INSERT INTO `cloud`.`guest_os` (id, category_id, display_name) VALUES (64, 6, 'Windows NT 4'); -INSERT INTO `cloud`.`guest_os` (id, category_id, display_name) VALUES (65, 6, 'Windows 3.1'); -INSERT INTO `cloud`.`guest_os` (id, category_id, display_name) VALUES (66, 4, 'Red Hat Enterprise Linux 3(32-bit)'); -INSERT INTO `cloud`.`guest_os` (id, category_id, display_name) VALUES (67, 4, 'Red Hat Enterprise Linux 3(64-bit)'); -INSERT INTO `cloud`.`guest_os` (id, category_id, display_name) VALUES (68, 7, 'Open Enterprise Server'); -INSERT INTO `cloud`.`guest_os` (id, category_id, display_name) VALUES (69, 7, 'Asianux 3(32-bit)'); -INSERT INTO `cloud`.`guest_os` (id, category_id, display_name) VALUES (70, 7, 'Asianux 3(64-bit)'); -INSERT INTO `cloud`.`guest_os` (id, category_id, display_name) VALUES (72, 2, 'Debian GNU/Linux 5(64-bit)'); -INSERT INTO `cloud`.`guest_os` (id, category_id, display_name) VALUES (73, 2, 'Debian GNU/Linux 4(32-bit)'); -INSERT INTO `cloud`.`guest_os` (id, category_id, display_name) VALUES (74, 2, 'Debian GNU/Linux 4(64-bit)'); -INSERT INTO `cloud`.`guest_os` (id, category_id, display_name) VALUES (75, 7, 'Other 2.6x Linux (32-bit)'); -INSERT INTO `cloud`.`guest_os` (id, category_id, display_name) VALUES (76, 7, 'Other 2.6x Linux (64-bit)'); -INSERT INTO `cloud`.`guest_os` (id, category_id, display_name) VALUES (77, 8, 'Novell Netware 6.x'); -INSERT INTO `cloud`.`guest_os` (id, category_id, display_name) VALUES (78, 8, 'Novell Netware 5.1'); -INSERT INTO `cloud`.`guest_os` (id, category_id, display_name) VALUES (79, 9, 'Sun Solaris 10(32-bit)'); -INSERT INTO `cloud`.`guest_os` (id, category_id, display_name) VALUES (80, 9, 'Sun Solaris 10(64-bit)'); -INSERT INTO `cloud`.`guest_os` (id, category_id, display_name) VALUES (81, 9, 'Sun Solaris 9(Experimental)'); -INSERT INTO `cloud`.`guest_os` (id, category_id, display_name) VALUES (82, 9, 'Sun Solaris 8(Experimental)'); -INSERT INTO `cloud`.`guest_os` (id, category_id, display_name) VALUES (83, 9, 'FreeBSD (32-bit)'); -INSERT INTO `cloud`.`guest_os` (id, category_id, display_name) VALUES (84, 9, 'FreeBSD (64-bit)'); -INSERT INTO `cloud`.`guest_os` (id, category_id, display_name) VALUES (85, 9, 'SCO OpenServer 5'); -INSERT INTO `cloud`.`guest_os` (id, category_id, display_name) VALUES (86, 9, 'SCO UnixWare 7'); -INSERT INTO `cloud`.`guest_os` (id, category_id, display_name) VALUES (87, 6, 'Windows Server 2003 DataCenter Edition(32-bit)'); -INSERT INTO `cloud`.`guest_os` (id, category_id, display_name) VALUES (88, 6, 'Windows Server 2003 DataCenter Edition(64-bit)'); -INSERT INTO `cloud`.`guest_os` (id, category_id, display_name) VALUES (89, 6, 'Windows Server 2003 Standard Edition(32-bit)'); -INSERT INTO `cloud`.`guest_os` (id, category_id, display_name) VALUES (90, 6, 'Windows Server 2003 Standard Edition(64-bit)'); -INSERT INTO `cloud`.`guest_os` (id, category_id, display_name) VALUES (91, 6, 'Windows Server 2003 Web Edition'); -INSERT INTO `cloud`.`guest_os` (id, category_id, display_name) VALUES (92, 6, 'Microsoft Small Bussiness Server 2003'); -INSERT INTO `cloud`.`guest_os` (id, category_id, display_name) VALUES (93, 6, 'Windows XP (32-bit)'); -INSERT INTO `cloud`.`guest_os` (id, category_id, display_name) VALUES (94, 6, 'Windows XP (64-bit)'); -INSERT INTO `cloud`.`guest_os` (id, category_id, display_name) VALUES (95, 6, 'Windows 2000 Advanced Server'); -INSERT INTO `cloud`.`guest_os` (id, category_id, display_name) VALUES (96, 5, 'SUSE Linux Enterprise 8(32-bit)'); -INSERT INTO `cloud`.`guest_os` (id, category_id, display_name) VALUES (97, 5, 'SUSE Linux Enterprise 8(64-bit)'); -INSERT INTO `cloud`.`guest_os` (id, category_id, display_name) VALUES (98, 7, 'Other Linux (32-bit)'); -INSERT INTO `cloud`.`guest_os` (id, category_id, display_name) VALUES (99, 7, 'Other Linux (64-bit)'); -INSERT INTO `cloud`.`guest_os` (id, category_id, display_name) VALUES (100, 10, 'Other Ubuntu (64-bit)'); -INSERT INTO `cloud`.`guest_os` (id, category_id, display_name) VALUES (101, 6, 'Windows Vista (64-bit)'); -INSERT INTO `cloud`.`guest_os` (id, category_id, display_name) VALUES (102, 6, 'DOS'); -INSERT INTO `cloud`.`guest_os` (id, category_id, display_name) VALUES (103, 7, 'Other (64-bit)'); -INSERT INTO `cloud`.`guest_os` (id, category_id, display_name) VALUES (104, 7, 'OS/2'); -INSERT INTO `cloud`.`guest_os` (id, category_id, display_name) VALUES (105, 6, 'Windows 2000 Professional'); -INSERT INTO `cloud`.`guest_os` (id, category_id, display_name) VALUES (106, 4, 'Red Hat Enterprise Linux 4(64-bit)'); -INSERT INTO `cloud`.`guest_os` (id, category_id, display_name) VALUES (107, 5, 'SUSE Linux Enterprise 9(32-bit)'); -INSERT INTO `cloud`.`guest_os` (id, category_id, display_name) VALUES (108, 5, 'SUSE Linux Enterprise 9(64-bit)'); -INSERT INTO `cloud`.`guest_os` (id, category_id, display_name) VALUES (109, 5, 'SUSE Linux Enterprise 10(32-bit)'); -INSERT INTO `cloud`.`guest_os` (id, category_id, display_name) VALUES (110, 5, 'SUSE Linux Enterprise 10(64-bit)'); -INSERT INTO `cloud`.`guest_os` (id, category_id, display_name) VALUES (111, 1, 'CentOS 5.5 (32-bit)'); -INSERT INTO `cloud`.`guest_os` (id, category_id, display_name) VALUES (112, 1, 'CentOS 5.5 (64-bit)'); -INSERT INTO `cloud`.`guest_os` (id, category_id, display_name) VALUES (113, 4, 'Red Hat Enterprise Linux 5.5 (32-bit)'); -INSERT INTO `cloud`.`guest_os` (id, category_id, display_name) VALUES (114, 4, 'Red Hat Enterprise Linux 5.5 (64-bit)'); -INSERT INTO `cloud`.`guest_os` (id, category_id, display_name) VALUES (115, 4, 'Fedora 13'); -INSERT INTO `cloud`.`guest_os` (id, category_id, display_name) VALUES (116, 4, 'Fedora 12'); -INSERT INTO `cloud`.`guest_os` (id, category_id, display_name) VALUES (117, 4, 'Fedora 11'); -INSERT INTO `cloud`.`guest_os` (id, category_id, display_name) VALUES (118, 4, 'Fedora 10'); -INSERT INTO `cloud`.`guest_os` (id, category_id, display_name) VALUES (119, 4, 'Fedora 9'); -INSERT INTO `cloud`.`guest_os` (id, category_id, display_name) VALUES (120, 4, 'Fedora 8'); -INSERT INTO `cloud`.`guest_os` (id, category_id, display_name) VALUES (121, 10, 'Ubuntu 10.04 (32-bit)'); -INSERT INTO `cloud`.`guest_os` (id, category_id, display_name) VALUES (122, 10, 'Ubuntu 9.10 (32-bit)'); -INSERT INTO `cloud`.`guest_os` (id, category_id, display_name) VALUES (123, 10, 'Ubuntu 9.04 (32-bit)'); -INSERT INTO `cloud`.`guest_os` (id, category_id, display_name) VALUES (124, 10, 'Ubuntu 8.10 (32-bit)'); -INSERT INTO `cloud`.`guest_os` (id, category_id, display_name) VALUES (125, 10, 'Ubuntu 8.04 (32-bit)'); -INSERT INTO `cloud`.`guest_os` (id, category_id, display_name) VALUES (126, 10, 'Ubuntu 10.04 (64-bit)'); -INSERT INTO `cloud`.`guest_os` (id, category_id, display_name) VALUES (127, 10, 'Ubuntu 9.10 (64-bit)'); -INSERT INTO `cloud`.`guest_os` (id, category_id, display_name) VALUES (128, 10, 'Ubuntu 9.04 (64-bit)'); -INSERT INTO `cloud`.`guest_os` (id, category_id, display_name) VALUES (129, 10, 'Ubuntu 8.10 (64-bit)'); -INSERT INTO `cloud`.`guest_os` (id, category_id, display_name) VALUES (130, 10, 'Ubuntu 8.04 (64-bit)'); -INSERT INTO `cloud`.`guest_os` (id, category_id, display_name) VALUES (131, 4, 'Red Hat Enterprise Linux 2'); -INSERT INTO `cloud`.`guest_os` (id, category_id, display_name) VALUES (132, 2, 'Debian GNU/Linux 6(32-bit)'); -INSERT INTO `cloud`.`guest_os` (id, category_id, display_name) VALUES (133, 2, 'Debian GNU/Linux 6(64-bit)'); -INSERT INTO `cloud`.`guest_os` (id, category_id, display_name) VALUES (134, 3, 'Oracle Enterprise Linux 5.5 (32-bit)'); -INSERT INTO `cloud`.`guest_os` (id, category_id, display_name) VALUES (135, 3, 'Oracle Enterprise Linux 5.5 (64-bit)'); -INSERT INTO `cloud`.`guest_os` (id, category_id, display_name) VALUES (136, 4, 'Red Hat Enterprise Linux 6.0 (32-bit)'); -INSERT INTO `cloud`.`guest_os` (id, category_id, display_name) VALUES (137, 4, 'Red Hat Enterprise Linux 6.0 (64-bit)'); -INSERT INTO `cloud`.`guest_os` (id, category_id, display_name) VALUES (138, 7, 'None'); -INSERT INTO `cloud`.`guest_os` (id, category_id, display_name) VALUES (139, 7, 'Other PV (32-bit)'); -INSERT INTO `cloud`.`guest_os` (id, category_id, display_name) VALUES (140, 7, 'Other PV (64-bit)'); -INSERT INTO `cloud`.`guest_os` (id, category_id, display_name) VALUES (141, 1, 'CentOS 5.6 (32-bit)'); -INSERT INTO `cloud`.`guest_os` (id, category_id, display_name) VALUES (142, 1, 'CentOS 5.6 (64-bit)'); -INSERT INTO `cloud`.`guest_os` (id, category_id, display_name) VALUES (143, 1, 'CentOS 6.0 (32-bit)'); -INSERT INTO `cloud`.`guest_os` (id, category_id, display_name) VALUES (144, 1, 'CentOS 6.0 (64-bit)'); -INSERT INTO `cloud`.`guest_os` (id, category_id, display_name) VALUES (145, 3, 'Oracle Enterprise Linux 5.6 (32-bit)'); -INSERT INTO `cloud`.`guest_os` (id, category_id, display_name) VALUES (146, 3, 'Oracle Enterprise Linux 5.6 (64-bit)'); -INSERT INTO `cloud`.`guest_os` (id, category_id, display_name) VALUES (147, 3, 'Oracle Enterprise Linux 6.0 (32-bit)'); -INSERT INTO `cloud`.`guest_os` (id, category_id, display_name) VALUES (148, 3, 'Oracle Enterprise Linux 6.0 (64-bit)'); -INSERT INTO `cloud`.`guest_os` (id, category_id, display_name) VALUES (149, 4, 'Red Hat Enterprise Linux 5.6 (32-bit)'); -INSERT INTO `cloud`.`guest_os` (id, category_id, display_name) VALUES (150, 4, 'Red Hat Enterprise Linux 5.6 (64-bit)'); -INSERT INTO `cloud`.`guest_os` (id, category_id, display_name) VALUES (151, 5, 'SUSE Linux Enterprise Server 10 SP3 (32-bit)'); -INSERT INTO `cloud`.`guest_os` (id, category_id, display_name) VALUES (152, 5, 'SUSE Linux Enterprise Server 10 SP4 (64-bit)'); -INSERT INTO `cloud`.`guest_os` (id, category_id, display_name) VALUES (153, 5, 'SUSE Linux Enterprise Server 10 SP4 (32-bit)'); -INSERT INTO `cloud`.`guest_os` (id, category_id, display_name) VALUES (154, 5, 'SUSE Linux Enterprise Server 11 SP1 (64-bit)'); -INSERT INTO `cloud`.`guest_os` (id, category_id, display_name) VALUES (155, 5, 'SUSE Linux Enterprise Server 11 SP1 (32-bit)'); -INSERT INTO `cloud`.`guest_os` (id, category_id, display_name) VALUES (156, 10, 'Ubuntu 10.10 (32-bit)'); -INSERT INTO `cloud`.`guest_os` (id, category_id, display_name) VALUES (157, 10, 'Ubuntu 10.10 (64-bit)'); -INSERT INTO `cloud`.`guest_os` (id, category_id, display_name) VALUES (158, 9, 'Sun Solaris 11 (64-bit)'); -INSERT INTO `cloud`.`guest_os` (id, category_id, display_name) VALUES (159, 9, 'Sun Solaris 11 (32-bit)'); -INSERT INTO `cloud`.`guest_os` (id, category_id, display_name) VALUES (160, 6, 'Windows PV'); -INSERT INTO `cloud`.`guest_os` (id, category_id, display_name) VALUES (161, 1, 'CentOS 5.7 (32-bit)'); -INSERT INTO `cloud`.`guest_os` (id, category_id, display_name) VALUES (162, 1, 'CentOS 5.7 (64-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, display_name) VALUES (1, UUID(), 1, 'CentOS 4.5 (32-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, display_name) VALUES (2, UUID(), 1, 'CentOS 4.6 (32-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, display_name) VALUES (3, UUID(), 1, 'CentOS 4.7 (32-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, display_name) VALUES (4, UUID(), 1, 'CentOS 4.8 (32-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, display_name) VALUES (5, UUID(), 1, 'CentOS 5.0 (32-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, display_name) VALUES (6, UUID(), 1, 'CentOS 5.0 (64-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, display_name) VALUES (7, UUID(), 1, 'CentOS 5.1 (32-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, display_name) VALUES (8, UUID(), 1, 'CentOS 5.1 (64-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, display_name) VALUES (9, UUID(), 1, 'CentOS 5.2 (32-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, display_name) VALUES (10, UUID(), 1, 'CentOS 5.2 (64-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, display_name) VALUES (11, UUID(), 1, 'CentOS 5.3 (32-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, display_name) VALUES (12, UUID(), 1, 'CentOS 5.3 (64-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, display_name) VALUES (13, UUID(), 1, 'CentOS 5.4 (32-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, display_name) VALUES (14, UUID(), 1, 'CentOS 5.4 (64-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, display_name) VALUES (15, UUID(), 2, 'Debian GNU/Linux 5.0 (32-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, display_name) VALUES (16, UUID(), 3, 'Oracle Enterprise Linux 5.0 (32-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, display_name) VALUES (17, UUID(), 3, 'Oracle Enterprise Linux 5.0 (64-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, display_name) VALUES (18, UUID(), 3, 'Oracle Enterprise Linux 5.1 (32-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, display_name) VALUES (19, UUID(), 3, 'Oracle Enterprise Linux 5.1 (64-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, display_name) VALUES (20, UUID(), 3, 'Oracle Enterprise Linux 5.2 (32-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, display_name) VALUES (21, UUID(), 3, 'Oracle Enterprise Linux 5.2 (64-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, display_name) VALUES (22, UUID(), 3, 'Oracle Enterprise Linux 5.3 (32-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, display_name) VALUES (23, UUID(), 3, 'Oracle Enterprise Linux 5.3 (64-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, display_name) VALUES (24, UUID(), 3, 'Oracle Enterprise Linux 5.4 (32-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, display_name) VALUES (25, UUID(), 3, 'Oracle Enterprise Linux 5.4 (64-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, display_name) VALUES (26, UUID(), 4, 'Red Hat Enterprise Linux 4.5 (32-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, display_name) VALUES (27, UUID(), 4, 'Red Hat Enterprise Linux 4.6 (32-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, display_name) VALUES (28, UUID(), 4, 'Red Hat Enterprise Linux 4.7 (32-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, display_name) VALUES (29, UUID(), 4, 'Red Hat Enterprise Linux 4.8 (32-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, display_name) VALUES (30, UUID(), 4, 'Red Hat Enterprise Linux 5.0 (32-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, display_name) VALUES (31, UUID(), 4, 'Red Hat Enterprise Linux 5.0 (64-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, display_name) VALUES (32, UUID(), 4, 'Red Hat Enterprise Linux 5.1 (32-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, display_name) VALUES (33, UUID(), 4, 'Red Hat Enterprise Linux 5.1 (64-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, display_name) VALUES (34, UUID(), 4, 'Red Hat Enterprise Linux 5.2 (32-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, display_name) VALUES (35, UUID(), 4, 'Red Hat Enterprise Linux 5.2 (64-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, display_name) VALUES (36, UUID(), 4, 'Red Hat Enterprise Linux 5.3 (32-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, display_name) VALUES (37, UUID(), 4, 'Red Hat Enterprise Linux 5.3 (64-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, display_name) VALUES (38, UUID(), 4, 'Red Hat Enterprise Linux 5.4 (32-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, display_name) VALUES (39, UUID(), 4, 'Red Hat Enterprise Linux 5.4 (64-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, display_name) VALUES (40, UUID(), 5, 'SUSE Linux Enterprise Server 9 SP4 (32-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, display_name) VALUES (41, UUID(), 5, 'SUSE Linux Enterprise Server 10 SP1 (32-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, display_name) VALUES (42, UUID(), 5, 'SUSE Linux Enterprise Server 10 SP1 (64-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, display_name) VALUES (43, UUID(), 5, 'SUSE Linux Enterprise Server 10 SP2 (32-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, display_name) VALUES (44, UUID(), 5, 'SUSE Linux Enterprise Server 10 SP2 (64-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, display_name) VALUES (45, UUID(), 5, 'SUSE Linux Enterprise Server 10 SP3 (64-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, display_name) VALUES (46, UUID(), 5, 'SUSE Linux Enterprise Server 11 (32-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, display_name) VALUES (47, UUID(), 5, 'SUSE Linux Enterprise Server 11 (64-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, display_name) VALUES (48, UUID(), 6, 'Windows 7 (32-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, display_name) VALUES (49, UUID(), 6, 'Windows 7 (64-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, display_name) VALUES (50, UUID(), 6, 'Windows Server 2003 Enterprise Edition(32-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, display_name) VALUES (51, UUID(), 6, 'Windows Server 2003 Enterprise Edition(64-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, display_name) VALUES (52, UUID(), 6, 'Windows Server 2008 (32-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, display_name) VALUES (53, UUID(), 6, 'Windows Server 2008 (64-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, display_name) VALUES (54, UUID(), 6, 'Windows Server 2008 R2 (64-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, display_name) VALUES (55, UUID(), 6, 'Windows 2000 Server SP4 (32-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, display_name) VALUES (56, UUID(), 6, 'Windows Vista (32-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, display_name) VALUES (57, UUID(), 6, 'Windows XP SP2 (32-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, display_name) VALUES (58, UUID(), 6, 'Windows XP SP3 (32-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, display_name) VALUES (59, UUID(), 10, 'Other Ubuntu (32-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, display_name) VALUES (60, UUID(), 7, 'Other (32-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, display_name) VALUES (61, UUID(), 6, 'Windows 2000 Server'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, display_name) VALUES (62, UUID(), 6, 'Windows 98'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, display_name) VALUES (63, UUID(), 6, 'Windows 95'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, display_name) VALUES (64, UUID(), 6, 'Windows NT 4'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, display_name) VALUES (65, UUID(), 6, 'Windows 3.1'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, display_name) VALUES (66, UUID(), 4, 'Red Hat Enterprise Linux 3(32-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, display_name) VALUES (67, UUID(), 4, 'Red Hat Enterprise Linux 3(64-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, display_name) VALUES (68, UUID(), 7, 'Open Enterprise Server'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, display_name) VALUES (69, UUID(), 7, 'Asianux 3(32-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, display_name) VALUES (70, UUID(), 7, 'Asianux 3(64-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, display_name) VALUES (72, UUID(), 2, 'Debian GNU/Linux 5(64-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, display_name) VALUES (73, UUID(), 2, 'Debian GNU/Linux 4(32-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, display_name) VALUES (74, UUID(), 2, 'Debian GNU/Linux 4(64-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, display_name) VALUES (75, UUID(), 7, 'Other 2.6x Linux (32-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, display_name) VALUES (76, UUID(), 7, 'Other 2.6x Linux (64-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, display_name) VALUES (77, UUID(), 8, 'Novell Netware 6.x'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, display_name) VALUES (78, UUID(), 8, 'Novell Netware 5.1'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, display_name) VALUES (79, UUID(), 9, 'Sun Solaris 10(32-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, display_name) VALUES (80, UUID(), 9, 'Sun Solaris 10(64-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, display_name) VALUES (81, UUID(), 9, 'Sun Solaris 9(Experimental)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, display_name) VALUES (82, UUID(), 9, 'Sun Solaris 8(Experimental)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, display_name) VALUES (83, UUID(), 9, 'FreeBSD (32-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, display_name) VALUES (84, UUID(), 9, 'FreeBSD (64-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, display_name) VALUES (85, UUID(), 9, 'SCO OpenServer 5'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, display_name) VALUES (86, UUID(), 9, 'SCO UnixWare 7'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, display_name) VALUES (87, UUID(), 6, 'Windows Server 2003 DataCenter Edition(32-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, display_name) VALUES (88, UUID(), 6, 'Windows Server 2003 DataCenter Edition(64-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, display_name) VALUES (89, UUID(), 6, 'Windows Server 2003 Standard Edition(32-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, display_name) VALUES (90, UUID(), 6, 'Windows Server 2003 Standard Edition(64-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, display_name) VALUES (91, UUID(), 6, 'Windows Server 2003 Web Edition'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, display_name) VALUES (92, UUID(), 6, 'Microsoft Small Bussiness Server 2003'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, display_name) VALUES (93, UUID(), 6, 'Windows XP (32-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, display_name) VALUES (94, UUID(), 6, 'Windows XP (64-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, display_name) VALUES (95, UUID(), 6, 'Windows 2000 Advanced Server'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, display_name) VALUES (96, UUID(), 5, 'SUSE Linux Enterprise 8(32-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, display_name) VALUES (97, UUID(), 5, 'SUSE Linux Enterprise 8(64-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, display_name) VALUES (98, UUID(), 7, 'Other Linux (32-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, display_name) VALUES (99, UUID(), 7, 'Other Linux (64-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, display_name) VALUES (100, UUID(), 10, 'Other Ubuntu (64-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, display_name) VALUES (101, UUID(), 6, 'Windows Vista (64-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, display_name) VALUES (102, UUID(), 6, 'DOS'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, display_name) VALUES (103, UUID(), 7, 'Other (64-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, display_name) VALUES (104, UUID(), 7, 'OS/2'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, display_name) VALUES (105, UUID(), 6, 'Windows 2000 Professional'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, display_name) VALUES (106, UUID(), 4, 'Red Hat Enterprise Linux 4(64-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, display_name) VALUES (107, UUID(), 5, 'SUSE Linux Enterprise 9(32-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, display_name) VALUES (108, UUID(), 5, 'SUSE Linux Enterprise 9(64-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, display_name) VALUES (109, UUID(), 5, 'SUSE Linux Enterprise 10(32-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, display_name) VALUES (110, UUID(), 5, 'SUSE Linux Enterprise 10(64-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, display_name) VALUES (111, UUID(), 1, 'CentOS 5.5 (32-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, display_name) VALUES (112, UUID(), 1, 'CentOS 5.5 (64-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, display_name) VALUES (113, UUID(), 4, 'Red Hat Enterprise Linux 5.5 (32-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, display_name) VALUES (114, UUID(), 4, 'Red Hat Enterprise Linux 5.5 (64-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, display_name) VALUES (115, UUID(), 4, 'Fedora 13'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, display_name) VALUES (116, UUID(), 4, 'Fedora 12'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, display_name) VALUES (117, UUID(), 4, 'Fedora 11'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, display_name) VALUES (118, UUID(), 4, 'Fedora 10'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, display_name) VALUES (119, UUID(), 4, 'Fedora 9'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, display_name) VALUES (120, UUID(), 4, 'Fedora 8'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, display_name) VALUES (121, UUID(), 10, 'Ubuntu 10.04 (32-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, display_name) VALUES (122, UUID(), 10, 'Ubuntu 9.10 (32-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, display_name) VALUES (123, UUID(), 10, 'Ubuntu 9.04 (32-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, display_name) VALUES (124, UUID(), 10, 'Ubuntu 8.10 (32-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, display_name) VALUES (125, UUID(), 10, 'Ubuntu 8.04 (32-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, display_name) VALUES (126, UUID(), 10, 'Ubuntu 10.04 (64-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, display_name) VALUES (127, UUID(), 10, 'Ubuntu 9.10 (64-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, display_name) VALUES (128, UUID(), 10, 'Ubuntu 9.04 (64-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, display_name) VALUES (129, UUID(), 10, 'Ubuntu 8.10 (64-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, display_name) VALUES (130, UUID(), 10, 'Ubuntu 8.04 (64-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, display_name) VALUES (131, UUID(), 4, 'Red Hat Enterprise Linux 2'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, display_name) VALUES (132, UUID(), 2, 'Debian GNU/Linux 6(32-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, display_name) VALUES (133, UUID(), 2, 'Debian GNU/Linux 6(64-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, display_name) VALUES (134, UUID(), 3, 'Oracle Enterprise Linux 5.5 (32-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, display_name) VALUES (135, UUID(), 3, 'Oracle Enterprise Linux 5.5 (64-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, display_name) VALUES (136, UUID(), 4, 'Red Hat Enterprise Linux 6.0 (32-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, display_name) VALUES (137, UUID(), 4, 'Red Hat Enterprise Linux 6.0 (64-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, display_name) VALUES (138, UUID(), 7, 'None'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, display_name) VALUES (139, UUID(), 7, 'Other PV (32-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, display_name) VALUES (140, UUID(), 7, 'Other PV (64-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, display_name) VALUES (141, UUID(), 1, 'CentOS 5.6 (32-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, display_name) VALUES (142, UUID(), 1, 'CentOS 5.6 (64-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, display_name) VALUES (143, UUID(), 1, 'CentOS 6.0 (32-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, display_name) VALUES (144, UUID(), 1, 'CentOS 6.0 (64-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, display_name) VALUES (145, UUID(), 3, 'Oracle Enterprise Linux 5.6 (32-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, display_name) VALUES (146, UUID(), 3, 'Oracle Enterprise Linux 5.6 (64-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, display_name) VALUES (147, UUID(), 3, 'Oracle Enterprise Linux 6.0 (32-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, display_name) VALUES (148, UUID(), 3, 'Oracle Enterprise Linux 6.0 (64-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, display_name) VALUES (149, UUID(), 4, 'Red Hat Enterprise Linux 5.6 (32-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, display_name) VALUES (150, UUID(), 4, 'Red Hat Enterprise Linux 5.6 (64-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, display_name) VALUES (151, UUID(), 5, 'SUSE Linux Enterprise Server 10 SP3 (32-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, display_name) VALUES (152, UUID(), 5, 'SUSE Linux Enterprise Server 10 SP4 (64-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, display_name) VALUES (153, UUID(), 5, 'SUSE Linux Enterprise Server 10 SP4 (32-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, display_name) VALUES (154, UUID(), 5, 'SUSE Linux Enterprise Server 11 SP1 (64-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, display_name) VALUES (155, UUID(), 5, 'SUSE Linux Enterprise Server 11 SP1 (32-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, display_name) VALUES (156, UUID(), 10, 'Ubuntu 10.10 (32-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, display_name) VALUES (157, UUID(), 10, 'Ubuntu 10.10 (64-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, display_name) VALUES (158, UUID(), 9, 'Sun Solaris 11 (64-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, display_name) VALUES (159, UUID(), 9, 'Sun Solaris 11 (32-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, display_name) VALUES (160, UUID(), 6, 'Windows PV'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, display_name) VALUES (161, UUID(), 1, 'CentOS 5.7 (32-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, display_name) VALUES (162, UUID(), 1, 'CentOS 5.7 (64-bit)'); -INSERT INTO `cloud`.`guest_os` (id, category_id, display_name) VALUES (200, 1, 'Other CentOS (32-bit)'); -INSERT INTO `cloud`.`guest_os` (id, category_id, display_name) VALUES (201, 1, 'Other CentOS (64-bit)'); -INSERT INTO `cloud`.`guest_os` (id, category_id, display_name) VALUES (202, 5, 'Other SUSE Linux(32-bit)'); -INSERT INTO `cloud`.`guest_os` (id, category_id, display_name) VALUES (203, 5, 'Other SUSE Linux(64-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, display_name) VALUES (200, UUID(), 1, 'Other CentOS (32-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, display_name) VALUES (201, UUID(), 1, 'Other CentOS (64-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, display_name) VALUES (202, UUID(), 5, 'Other SUSE Linux(32-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, display_name) VALUES (203, UUID(), 5, 'Other SUSE Linux(64-bit)'); INSERT INTO `cloud`.`guest_os_hypervisor` (hypervisor_type, guest_os_name, guest_os_id) VALUES ("XenServer", 'CentOS 4.5 (32-bit)', 1); INSERT INTO `cloud`.`guest_os_hypervisor` (hypervisor_type, guest_os_name, guest_os_id) VALUES ("XenServer", 'CentOS 4.6 (32-bit)', 2); diff --git a/setup/db/templates.vmware.sql b/setup/db/templates.vmware.sql index 02d72986a50..845a720d1c3 100644 --- a/setup/db/templates.vmware.sql +++ b/setup/db/templates.vmware.sql @@ -15,85 +15,85 @@ -- specific language governing permissions and limitations -- under the License. -INSERT INTO `cloud`.`vm_template` (id, unique_name, name, public, created, type, hvm, bits, account_id, url, checksum, enable_password, display_text, format, guest_os_id, featured, cross_zones) - VALUES (2, 'blank', 'BlankVM', 1, now(), 'ext3', 0, 32, 1, 'http://nfs1.lab.vmops.com/templates/vmware/blankvm.tar.bz2', '3eff7ce3d25cf9433efde8b245c63fcb', 0, 'BlankVM', 'VMDK', 47, 1, 1); -INSERT INTO `cloud`.`vm_template` (id, unique_name, name, public, created, type, hvm, bits, account_id, url, checksum, enable_password, display_text, format, guest_os_id, featured, cross_zones) - VALUES (3, 'winxpsp3', 'WindowsXP-SP3', 1, now(), 'ntfs', 0, 32, 1, 'http://nfs1.lab.vmops.com/templates/vmware/winxpsp3.tar.bz2', '385e67d17a2cb3795bd0b0fb7f88dc5e', 0, 'WindowsXP-SP3', 'VMDK', 16, 1, 1); +INSERT INTO `cloud`.`vm_template` (id, uuid, unique_name, name, public, created, type, hvm, bits, account_id, url, checksum, enable_password, display_text, format, guest_os_id, featured, cross_zones) + VALUES (2, UUID(), 'blank', 'BlankVM', 1, now(), 'ext3', 0, 32, 1, 'http://nfs1.lab.vmops.com/templates/vmware/blankvm.tar.bz2', '3eff7ce3d25cf9433efde8b245c63fcb', 0, 'BlankVM', 'VMDK', 47, 1, 1); +INSERT INTO `cloud`.`vm_template` (id, uuid, unique_name, name, public, created, type, hvm, bits, account_id, url, checksum, enable_password, display_text, format, guest_os_id, featured, cross_zones) + VALUES (3, UUID(), 'winxpsp3', 'WindowsXP-SP3', 1, now(), 'ntfs', 0, 32, 1, 'http://nfs1.lab.vmops.com/templates/vmware/winxpsp3.tar.bz2', '385e67d17a2cb3795bd0b0fb7f88dc5e', 0, 'WindowsXP-SP3', 'VMDK', 16, 1, 1); -INSERT INTO `cloud`.`guest_os_category` (id, name) VALUES (1, 'Windows'); -INSERT INTO `cloud`.`guest_os_category` (id, name) VALUES (2, 'Linux'); -INSERT INTO `cloud`.`guest_os_category` (id, name) VALUES (3, 'Novell Netware'); -INSERT INTO `cloud`.`guest_os_category` (id, name) VALUES (4, 'Solaris'); -INSERT INTO `cloud`.`guest_os_category` (id, name) VALUES (5, 'Other'); +INSERT INTO `cloud`.`guest_os_category` (id, uuid, name) VALUES (1, UUID(), 'Windows'); +INSERT INTO `cloud`.`guest_os_category` (id, uuid, name) VALUES (2, UUID(), 'Linux'); +INSERT INTO `cloud`.`guest_os_category` (id, uuid, name) VALUES (3, UUID(), 'Novell Netware'); +INSERT INTO `cloud`.`guest_os_category` (id, uuid, name) VALUES (4, UUID(), 'Solaris'); +INSERT INTO `cloud`.`guest_os_category` (id, uuid, name) VALUES (5, UUID(), 'Other'); -INSERT INTO `cloud`.`guest_os` (id, category_id, name, display_name) VALUES (1, 1, 'Microsoft Windows 7(32-bit)', 'Microsoft Windows 7(32-bit)'); -INSERT INTO `cloud`.`guest_os` (id, category_id, name, display_name) VALUES (2, 1, 'Microsoft Windows 7(64-bit)', 'Microsoft Windows 7(64-bit)'); -INSERT INTO `cloud`.`guest_os` (id, category_id, name, display_name) VALUES (3, 1, 'Microsoft Windows Server 2008 R2(64-bit)', 'Microsoft Windows Server 2008 R2(64-bit)'); -INSERT INTO `cloud`.`guest_os` (id, category_id, name, display_name) VALUES (4, 1, 'Microsoft Windows Server 2008(32-bit)', 'Microsoft Windows Server 2008(32-bit)'); -INSERT INTO `cloud`.`guest_os` (id, category_id, name, display_name) VALUES (5, 1, 'Microsoft Windows Server 2008(64-bit)', 'Windows Windows Server 2008(64-bit)'); -INSERT INTO `cloud`.`guest_os` (id, category_id, name, display_name) VALUES (6, 1, 'Microsoft Windows Server 2003, Enterprise Edition (32-bit)', 'Microsoft Windows Server 2003, Enterprise Edition (32-bit)'); -INSERT INTO `cloud`.`guest_os` (id, category_id, name, display_name) VALUES (7, 1, 'Microsoft Windows Server 2003, Enterprise Edition (64-bit)', 'Microsoft Windows Server 2003, Enterprise Edition (64-bit)'); -INSERT INTO `cloud`.`guest_os` (id, category_id, name, display_name) VALUES (8, 1, 'Microsoft Windows Server 2003, Datacenter Edition (32-bit)', 'Microsoft Windows Server 2003, Datacenter Edition (32-bit)'); -INSERT INTO `cloud`.`guest_os` (id, category_id, name, display_name) VALUES (9, 1, 'Microsoft Windows Server 2003, Datacenter Edition (64-bit)', 'Microsoft Windows Server 2003, Datacenter Edition (64-bit)'); -INSERT INTO `cloud`.`guest_os` (id, category_id, name, display_name) VALUES (10, 1, 'Microsoft Windows Server 2003, Standard Edition (32-bit)', 'Microsoft Windows Server 2003, Standard Edition (32-bit)'); -INSERT INTO `cloud`.`guest_os` (id, category_id, name, display_name) VALUES (11, 1, 'Microsoft Windows Server 2003, Standard Edition (64-bit)', 'Microsoft Windows Server 2003, Standard Edition (64-bit)'); -INSERT INTO `cloud`.`guest_os` (id, category_id, name, display_name) VALUES (12, 1, 'Microsoft Windows Server 2003, Web Edition', 'Microsoft Windows Server 2003, Web Edition'); -INSERT INTO `cloud`.`guest_os` (id, category_id, name, display_name) VALUES (13, 1, 'Microsoft Small Bussiness Server 2003', 'Microsoft Small Bussiness Server 2003'); -INSERT INTO `cloud`.`guest_os` (id, category_id, name, display_name) VALUES (14, 1, 'Microsoft Windows Vista (32-bit)', 'Microsoft Windows Vista (32-bit)'); -INSERT INTO `cloud`.`guest_os` (id, category_id, name, display_name) VALUES (15, 1, 'Microsoft Windows Vista (64-bit)', 'Microsoft Windows Vista (64-bit)'); -INSERT INTO `cloud`.`guest_os` (id, category_id, name, display_name) VALUES (16, 1, 'Microsoft Windows XP Professional (32-bit)', 'Microsoft Windows XP Professional (32-bit)'); -INSERT INTO `cloud`.`guest_os` (id, category_id, name, display_name) VALUES (17, 1, 'Microsoft Windows XP Professional (64-bit)', 'Microsoft Windows XP Professional (64-bit)'); -INSERT INTO `cloud`.`guest_os` (id, category_id, name, display_name) VALUES (18, 1, 'Microsoft Windows 2000 Advanced Server', 'Microsoft Windows 2000 Advanced Server'); -INSERT INTO `cloud`.`guest_os` (id, category_id, name, display_name) VALUES (19, 1, 'Microsoft Windows 2000 Server', 'Microsoft Windows 2000 Server'); -INSERT INTO `cloud`.`guest_os` (id, category_id, name, display_name) VALUES (20, 1, 'Microsoft Windows 2000 Professional', 'Microsoft Windows 2000 Professional'); -INSERT INTO `cloud`.`guest_os` (id, category_id, name, display_name) VALUES (21, 1, 'Microsoft Windows 98', 'Microsoft Windows 98'); -INSERT INTO `cloud`.`guest_os` (id, category_id, name, display_name) VALUES (22, 1, 'Microsoft Windows 95', 'Microsoft Windows 95'); -INSERT INTO `cloud`.`guest_os` (id, category_id, name, display_name) VALUES (23, 1, 'Microsoft Windows NT 4', 'Microsoft Windows NT 4'); -INSERT INTO `cloud`.`guest_os` (id, category_id, name, display_name) VALUES (24, 1, 'Microsoft Windows 3.1', 'Microsoft Windows 3.1'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, name, display_name) VALUES (1, UUID(), 1, 'Microsoft Windows 7(32-bit)', 'Microsoft Windows 7(32-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, name, display_name) VALUES (2, UUID(), 1, 'Microsoft Windows 7(64-bit)', 'Microsoft Windows 7(64-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, name, display_name) VALUES (3, UUID(), 1, 'Microsoft Windows Server 2008 R2(64-bit)', 'Microsoft Windows Server 2008 R2(64-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, name, display_name) VALUES (4, UUID(), 1, 'Microsoft Windows Server 2008(32-bit)', 'Microsoft Windows Server 2008(32-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, name, display_name) VALUES (5, UUID(), 1, 'Microsoft Windows Server 2008(64-bit)', 'Windows Windows Server 2008(64-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, name, display_name) VALUES (6, UUID(), 1, 'Microsoft Windows Server 2003, Enterprise Edition (32-bit)', 'Microsoft Windows Server 2003, Enterprise Edition (32-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, name, display_name) VALUES (7, UUID(), 1, 'Microsoft Windows Server 2003, Enterprise Edition (64-bit)', 'Microsoft Windows Server 2003, Enterprise Edition (64-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, name, display_name) VALUES (8, UUID(), 1, 'Microsoft Windows Server 2003, Datacenter Edition (32-bit)', 'Microsoft Windows Server 2003, Datacenter Edition (32-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, name, display_name) VALUES (9, UUID(), 1, 'Microsoft Windows Server 2003, Datacenter Edition (64-bit)', 'Microsoft Windows Server 2003, Datacenter Edition (64-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, name, display_name) VALUES (10, UUID(), 1, 'Microsoft Windows Server 2003, Standard Edition (32-bit)', 'Microsoft Windows Server 2003, Standard Edition (32-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, name, display_name) VALUES (11, UUID(), 1, 'Microsoft Windows Server 2003, Standard Edition (64-bit)', 'Microsoft Windows Server 2003, Standard Edition (64-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, name, display_name) VALUES (12, UUID(), 1, 'Microsoft Windows Server 2003, Web Edition', 'Microsoft Windows Server 2003, Web Edition'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, name, display_name) VALUES (13, UUID(), 1, 'Microsoft Small Bussiness Server 2003', 'Microsoft Small Bussiness Server 2003'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, name, display_name) VALUES (14, UUID(), 1, 'Microsoft Windows Vista (32-bit)', 'Microsoft Windows Vista (32-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, name, display_name) VALUES (15, UUID(), 1, 'Microsoft Windows Vista (64-bit)', 'Microsoft Windows Vista (64-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, name, display_name) VALUES (16, UUID(), 1, 'Microsoft Windows XP Professional (32-bit)', 'Microsoft Windows XP Professional (32-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, name, display_name) VALUES (17, UUID(), 1, 'Microsoft Windows XP Professional (64-bit)', 'Microsoft Windows XP Professional (64-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, name, display_name) VALUES (18, UUID(), 1, 'Microsoft Windows 2000 Advanced Server', 'Microsoft Windows 2000 Advanced Server'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, name, display_name) VALUES (19, UUID(), 1, 'Microsoft Windows 2000 Server', 'Microsoft Windows 2000 Server'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, name, display_name) VALUES (20, UUID(), 1, 'Microsoft Windows 2000 Professional', 'Microsoft Windows 2000 Professional'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, name, display_name) VALUES (21, UUID(), 1, 'Microsoft Windows 98', 'Microsoft Windows 98'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, name, display_name) VALUES (22, UUID(), 1, 'Microsoft Windows 95', 'Microsoft Windows 95'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, name, display_name) VALUES (23, UUID(), 1, 'Microsoft Windows NT 4', 'Microsoft Windows NT 4'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, name, display_name) VALUES (24, UUID(), 1, 'Microsoft Windows 3.1', 'Microsoft Windows 3.1'); -INSERT INTO `cloud`.`guest_os` (id, category_id, name, display_name) VALUES (25, 2, 'Red Hat Enterprise Linux 5(32-bit)', 'Red Hat Enterprise Linux 5(32-bit)'); -INSERT INTO `cloud`.`guest_os` (id, category_id, name, display_name) VALUES (26, 2, 'Red Hat Enterprise Linux 5(64-bit)', 'Red Hat Enterprise Linux 5(64-bit)'); -INSERT INTO `cloud`.`guest_os` (id, category_id, name, display_name) VALUES (27, 2, 'Red Hat Enterprise Linux 4(32-bit)', 'Red Hat Enterprise Linux 4(32-bit)'); -INSERT INTO `cloud`.`guest_os` (id, category_id, name, display_name) VALUES (28, 2, 'Red Hat Enterprise Linux 4(64-bit)', 'Red Hat Enterprise Linux 4(64-bit)'); -INSERT INTO `cloud`.`guest_os` (id, category_id, name, display_name) VALUES (29, 2, 'Red Hat Enterprise Linux 3(32-bit)', 'Red Hat Enterprise Linux 3(32-bit)'); -INSERT INTO `cloud`.`guest_os` (id, category_id, name, display_name) VALUES (30, 2, 'Red Hat Enterprise Linux 3(64-bit)', 'Red Hat Enterprise Linux 3(64-bit)'); -INSERT INTO `cloud`.`guest_os` (id, category_id, name, display_name) VALUES (31, 2, 'Red Hat Enterprise Linux 2', 'Red Hat Enterprise Linux 2'); -INSERT INTO `cloud`.`guest_os` (id, category_id, name, display_name) VALUES (32, 2, 'Suse Linux Enterprise 11(32-bit)', 'Suse Linux Enterprise 11(32-bit)'); -INSERT INTO `cloud`.`guest_os` (id, category_id, name, display_name) VALUES (33, 2, 'Suse Linux Enterprise 11(64-bit)', 'Suse Linux Enterprise 11(64-bit)'); -INSERT INTO `cloud`.`guest_os` (id, category_id, name, display_name) VALUES (34, 2, 'Suse Linux Enterprise 10(32-bit)', 'Suse Linux Enterprise 10(32-bit)'); -INSERT INTO `cloud`.`guest_os` (id, category_id, name, display_name) VALUES (35, 2, 'Suse Linux Enterprise 10(64-bit)', 'Suse Linux Enterprise 10(64-bit)'); -INSERT INTO `cloud`.`guest_os` (id, category_id, name, display_name) VALUES (36, 2, 'Suse Linux Enterprise 8/9(32-bit)', 'Suse Linux Enterprise 8/9(32-bit)'); -INSERT INTO `cloud`.`guest_os` (id, category_id, name, display_name) VALUES (37, 2, 'Suse Linux Enterprise 8/9(64-bit)', 'Suse Linux Enterprise 8/9(64-bit)'); -INSERT INTO `cloud`.`guest_os` (id, category_id, name, display_name) VALUES (38, 2, 'Open Enterprise Server', 'Open Enterprise Server'); -INSERT INTO `cloud`.`guest_os` (id, category_id, name, display_name) VALUES (39, 2, 'Asianux 3(32-bit)', 'Asianux 3(32-bit)'); -INSERT INTO `cloud`.`guest_os` (id, category_id, name, display_name) VALUES (40, 2, 'Asianux 3(64-bit)', 'Asianux 3(64-bit)'); -INSERT INTO `cloud`.`guest_os` (id, category_id, name, display_name) VALUES (41, 2, 'Debian GNU/Linux 5(32-bit)', 'Debian GNU/Linux 5(32-bit)'); -INSERT INTO `cloud`.`guest_os` (id, category_id, name, display_name) VALUES (42, 2, 'Debian GNU/Linux 5(64-bit)', 'Debian GNU/Linux 5(64-bit)'); -INSERT INTO `cloud`.`guest_os` (id, category_id, name, display_name) VALUES (43, 2, 'Debian GNU/Linux 4(32-bit)', 'Debian GNU/Linux 4(32-bit)'); -INSERT INTO `cloud`.`guest_os` (id, category_id, name, display_name) VALUES (44, 2, 'Debian GNU/Linux 4(64-bit)', 'Debian GNU/Linux 4(64-bit)'); -INSERT INTO `cloud`.`guest_os` (id, category_id, name, display_name) VALUES (45, 2, 'Ubuntu Linux (32-bit)', 'Ubuntu Linux (32-bit)'); -INSERT INTO `cloud`.`guest_os` (id, category_id, name, display_name) VALUES (46, 2, 'Ubuntu Linux (64-bit)', 'Ubuntu Linux (64-bit)'); -INSERT INTO `cloud`.`guest_os` (id, category_id, name, display_name) VALUES (47, 2, 'Other 2.6x Linux (32-bit)', 'Other 2.6x Linux (32-bit)'); -INSERT INTO `cloud`.`guest_os` (id, category_id, name, display_name) VALUES (48, 2, 'Other 2.6x Linux (64-bit)', 'Other 2.6x Linux (64-bit)'); -INSERT INTO `cloud`.`guest_os` (id, category_id, name, display_name) VALUES (49, 2, 'Other Linux (32-bit)', 'Other Linux (32-bit)'); -INSERT INTO `cloud`.`guest_os` (id, category_id, name, display_name) VALUES (50, 2, 'Other Linux (64-bit)', 'Other Linux (64-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, name, display_name) VALUES (25, UUID(), 2, 'Red Hat Enterprise Linux 5(32-bit)', 'Red Hat Enterprise Linux 5(32-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, name, display_name) VALUES (26, UUID(), 2, 'Red Hat Enterprise Linux 5(64-bit)', 'Red Hat Enterprise Linux 5(64-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, name, display_name) VALUES (27, UUID(), 2, 'Red Hat Enterprise Linux 4(32-bit)', 'Red Hat Enterprise Linux 4(32-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, name, display_name) VALUES (28, UUID(), 2, 'Red Hat Enterprise Linux 4(64-bit)', 'Red Hat Enterprise Linux 4(64-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, name, display_name) VALUES (29, UUID(), 2, 'Red Hat Enterprise Linux 3(32-bit)', 'Red Hat Enterprise Linux 3(32-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, name, display_name) VALUES (30, UUID(), 2, 'Red Hat Enterprise Linux 3(64-bit)', 'Red Hat Enterprise Linux 3(64-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, name, display_name) VALUES (31, UUID(), 2, 'Red Hat Enterprise Linux 2', 'Red Hat Enterprise Linux 2'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, name, display_name) VALUES (32, UUID(), 2, 'Suse Linux Enterprise 11(32-bit)', 'Suse Linux Enterprise 11(32-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, name, display_name) VALUES (33, UUID(), 2, 'Suse Linux Enterprise 11(64-bit)', 'Suse Linux Enterprise 11(64-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, name, display_name) VALUES (34, UUID(), 2, 'Suse Linux Enterprise 10(32-bit)', 'Suse Linux Enterprise 10(32-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, name, display_name) VALUES (35, UUID(), 2, 'Suse Linux Enterprise 10(64-bit)', 'Suse Linux Enterprise 10(64-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, name, display_name) VALUES (36, UUID(), 2, 'Suse Linux Enterprise 8/9(32-bit)', 'Suse Linux Enterprise 8/9(32-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, name, display_name) VALUES (37, UUID(), 2, 'Suse Linux Enterprise 8/9(64-bit)', 'Suse Linux Enterprise 8/9(64-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, name, display_name) VALUES (38, UUID(), 2, 'Open Enterprise Server', 'Open Enterprise Server'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, name, display_name) VALUES (39, UUID(), 2, 'Asianux 3(32-bit)', 'Asianux 3(32-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, name, display_name) VALUES (40, UUID(), 2, 'Asianux 3(64-bit)', 'Asianux 3(64-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, name, display_name) VALUES (41, UUID(), 2, 'Debian GNU/Linux 5(32-bit)', 'Debian GNU/Linux 5(32-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, name, display_name) VALUES (42, UUID(), 2, 'Debian GNU/Linux 5(64-bit)', 'Debian GNU/Linux 5(64-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, name, display_name) VALUES (43, UUID(), 2, 'Debian GNU/Linux 4(32-bit)', 'Debian GNU/Linux 4(32-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, name, display_name) VALUES (44, UUID(), 2, 'Debian GNU/Linux 4(64-bit)', 'Debian GNU/Linux 4(64-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, name, display_name) VALUES (45, UUID(), 2, 'Ubuntu Linux (32-bit)', 'Ubuntu Linux (32-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, name, display_name) VALUES (46, UUID(), 2, 'Ubuntu Linux (64-bit)', 'Ubuntu Linux (64-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, name, display_name) VALUES (47, UUID(), 2, 'Other 2.6x Linux (32-bit)', 'Other 2.6x Linux (32-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, name, display_name) VALUES (48, UUID(), 2, 'Other 2.6x Linux (64-bit)', 'Other 2.6x Linux (64-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, name, display_name) VALUES (49, UUID(), 2, 'Other Linux (32-bit)', 'Other Linux (32-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, name, display_name) VALUES (50, UUID(), 2, 'Other Linux (64-bit)', 'Other Linux (64-bit)'); -INSERT INTO `cloud`.`guest_os` (id, category_id, name, display_name) VALUES (51, 3, 'Novell Netware 6.x', 'Novell Netware 6.x'); -INSERT INTO `cloud`.`guest_os` (id, category_id, name, display_name) VALUES (52, 3, 'Novell Netware 5.1', 'Novell Netware 5.1'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, name, display_name) VALUES (51, UUID(), 3, 'Novell Netware 6.x', 'Novell Netware 6.x'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, name, display_name) VALUES (52, UUID(), 3, 'Novell Netware 5.1', 'Novell Netware 5.1'); -INSERT INTO `cloud`.`guest_os` (id, category_id, name, display_name) VALUES (53, 4, 'Sun Solaris 10(32-bit)', 'Sun Solaris 10(32-bit)'); -INSERT INTO `cloud`.`guest_os` (id, category_id, name, display_name) VALUES (54, 4, 'Sun Solaris 10(64-bit)', 'Sun Solaris 10(64-bit)'); -INSERT INTO `cloud`.`guest_os` (id, category_id, name, display_name) VALUES (55, 4, 'Sun Solaris 9(Experimental)', 'Sun Solaris 9(Experimental)'); -INSERT INTO `cloud`.`guest_os` (id, category_id, name, display_name) VALUES (56, 4, 'Sun Solaris 8(Experimental)', 'Sun Solaris 8(Experimental)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, name, display_name) VALUES (53, UUID(), 4, 'Sun Solaris 10(32-bit)', 'Sun Solaris 10(32-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, name, display_name) VALUES (54, UUID(), 4, 'Sun Solaris 10(64-bit)', 'Sun Solaris 10(64-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, name, display_name) VALUES (55, UUID(), 4, 'Sun Solaris 9(Experimental)', 'Sun Solaris 9(Experimental)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, name, display_name) VALUES (56, UUID(), 4, 'Sun Solaris 8(Experimental)', 'Sun Solaris 8(Experimental)'); -INSERT INTO `cloud`.`guest_os` (id, category_id, name, display_name) VALUES (57, 5, 'FreeBSD (32-bit)', 'FreeBSD (32-bit)'); -INSERT INTO `cloud`.`guest_os` (id, category_id, name, display_name) VALUES (58, 5, 'FreeBSD (64-bit)', 'FreeBSD (64-bit)'); -INSERT INTO `cloud`.`guest_os` (id, category_id, name, display_name) VALUES (59, 5, 'OS/2', 'OS/2'); -INSERT INTO `cloud`.`guest_os` (id, category_id, name, display_name) VALUES (60, 5, 'SCO OpenServer 5', 'SCO OpenServer 5'); -INSERT INTO `cloud`.`guest_os` (id, category_id, name, display_name) VALUES (61, 5, 'SCO UnixWare 7', 'SCO UnixWare 7'); -INSERT INTO `cloud`.`guest_os` (id, category_id, name, display_name) VALUES (62, 5, 'DOS', 'DOS'); -INSERT INTO `cloud`.`guest_os` (id, category_id, name, display_name) VALUES (63, 5, 'Other (32-bit)', 'Other (32-bit)'); -INSERT INTO `cloud`.`guest_os` (id, category_id, name, display_name) VALUES (64, 5, 'Other (64-bit)', 'Other (64-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, name, display_name) VALUES (57, UUID(), 5, 'FreeBSD (32-bit)', 'FreeBSD (32-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, name, display_name) VALUES (58, UUID(), 5, 'FreeBSD (64-bit)', 'FreeBSD (64-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, name, display_name) VALUES (59, UUID(), 5, 'OS/2', 'OS/2'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, name, display_name) VALUES (60, UUID(), 5, 'SCO OpenServer 5', 'SCO OpenServer 5'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, name, display_name) VALUES (61, UUID(), 5, 'SCO UnixWare 7', 'SCO UnixWare 7'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, name, display_name) VALUES (62, UUID(), 5, 'DOS', 'DOS'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, name, display_name) VALUES (63, UUID(), 5, 'Other (32-bit)', 'Other (32-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, name, display_name) VALUES (64, UUID(), 5, 'Other (64-bit)', 'Other (64-bit)'); -- temporarily added for vmware, will be moved when vmware support is fully in-place diff --git a/setup/db/templates.xenserver.sql b/setup/db/templates.xenserver.sql index c8b6d6d3718..a44d42bb19a 100644 --- a/setup/db/templates.xenserver.sql +++ b/setup/db/templates.xenserver.sql @@ -15,91 +15,91 @@ -- specific language governing permissions and limitations -- under the License. -INSERT INTO `cloud`.`vm_template` (id, unique_name, name, public, created, type, hvm, bits, account_id, url, checksum, enable_password, display_text, format, guest_os_id, featured, cross_zones) - VALUES (1, 'routing', 'SystemVM Template', 0, now(), 'ext3', 0, 64, 1, 'http://download.cloud.com/releases/2.2/systemvm.vhd.bz2', 'bcc7f290f4c27ab4d0fe95d1012829ea', 0, 'SystemVM Template', 'VHD', 15, 0, 1); -INSERT INTO `cloud`.`vm_template` (id, unique_name, name, public, created, type, hvm, bits, account_id, url, checksum, enable_password, display_text, format, guest_os_id, featured, cross_zones) - VALUES (2, 'centos53-x86_64', 'CentOS 5.3(x86_64) no GUI(Xenserver)', 1, now(), 'ext3', 0, 64, 1, 'http://download.cloud.com/templates/builtin/f59f18fb-ae94-4f97-afd2-f84755767aca.vhd.bz2', 'b63d854a9560c013142567bbae8d98cf', 0, 'CentOS 5.3(x86_64) no GUI', 'VHD', 12, 1, 1); +INSERT INTO `cloud`.`vm_template` (id, uuid, unique_name, name, public, created, type, hvm, bits, account_id, url, checksum, enable_password, display_text, format, guest_os_id, featured, cross_zones) + VALUES (1, UUID(), 'routing', 'SystemVM Template', 0, now(), 'ext3', 0, 64, 1, 'http://download.cloud.com/releases/2.2/systemvm.vhd.bz2', 'bcc7f290f4c27ab4d0fe95d1012829ea', 0, 'SystemVM Template', 'VHD', 15, 0, 1); +INSERT INTO `cloud`.`vm_template` (id, uuid, unique_name, name, public, created, type, hvm, bits, account_id, url, checksum, enable_password, display_text, format, guest_os_id, featured, cross_zones) + VALUES (2, UUID(), 'centos53-x86_64', 'CentOS 5.3(x86_64) no GUI(Xenserver)', 1, now(), 'ext3', 0, 64, 1, 'http://download.cloud.com/templates/builtin/f59f18fb-ae94-4f97-afd2-f84755767aca.vhd.bz2', 'b63d854a9560c013142567bbae8d98cf', 0, 'CentOS 5.3(x86_64) no GUI', 'VHD', 12, 1, 1); -INSERT INTO `cloud`.`vm_template` (id, unique_name, name, public, created, type, hvm, bits, account_id, url, checksum, display_text, enable_password, format, guest_os_id, featured, cross_zones) - VALUES (3, 'routing', 'DomR Template(KVM)', 0, now(), 'ext3', 0, 64, 1, 'http://download.cloud.com/templates/builtin/a88232bf-6a18-38e7-aeee-c1702725079f.qcow2.bz2', 'e39c55e93ae96bd43bfd588ca6ee3269', 'DomR Template', 0, 'QCOW2', 21, 0, 1); -INSERT INTO `cloud`.`vm_template` (id, unique_name, name, public, created, type, hvm, bits, account_id, url, checksum, display_text, enable_password, format, guest_os_id, featured, cross_zones) - VALUES (4, 'centos55-x86_64', 'CentOS 5.5(x86_64) no GUI(KVM)', 1, now(), 'ext3', 0, 64, 1, 'http://download.cloud.com/templates/builtin/eec2209b-9875-3c8d-92be-c001bd8a0faf.qcow2.bz2', '1da20ae69b54f761f3f733dce97adcc0', 'CentOS 5.5(x86_64) no GUI', 0, 'QCOW2', 9, 1, 1); +INSERT INTO `cloud`.`vm_template` (id, uuid, unique_name, name, public, created, type, hvm, bits, account_id, url, checksum, display_text, enable_password, format, guest_os_id, featured, cross_zones) + VALUES (3, UUID(), 'routing', 'DomR Template(KVM)', 0, now(), 'ext3', 0, 64, 1, 'http://download.cloud.com/templates/builtin/a88232bf-6a18-38e7-aeee-c1702725079f.qcow2.bz2', 'e39c55e93ae96bd43bfd588ca6ee3269', 'DomR Template', 0, 'QCOW2', 21, 0, 1); +INSERT INTO `cloud`.`vm_template` (id, uuid, unique_name, name, public, created, type, hvm, bits, account_id, url, checksum, display_text, enable_password, format, guest_os_id, featured, cross_zones) + VALUES (4, UUID(), 'centos55-x86_64', 'CentOS 5.5(x86_64) no GUI(KVM)', 1, now(), 'ext3', 0, 64, 1, 'http://download.cloud.com/templates/builtin/eec2209b-9875-3c8d-92be-c001bd8a0faf.qcow2.bz2', '1da20ae69b54f761f3f733dce97adcc0', 'CentOS 5.5(x86_64) no GUI', 0, 'QCOW2', 9, 1, 1); -INSERT INTO `cloud`.`vm_template` (id, unique_name, name, public, created, type, hvm, bits, account_id, url, checksum, enable_password, display_text, format, guest_os_id, featured, cross_zones) - VALUES (5, 'blank', 'BlankVM', 1, now(), 'ext3', 0, 32, 1, 'http://nfs1.lab.vmops.com/templates/vmware/blankvm.tar.bz2', '3eff7ce3d25cf9433efde8b245c63fcb', 0, 'BlankVM', 'VMDK', 47, 1, 1); -INSERT INTO `cloud`.`vm_template` (id, unique_name, name, public, created, type, hvm, bits, account_id, url, checksum, enable_password, display_text, format, guest_os_id, featured, cross_zones) - VALUES (6, 'winxpsp3', 'WindowsXP-SP3', 1, now(), 'ntfs', 0, 32, 1, 'http://nfs1.lab.vmops.com/templates/vmware/winxpsp3.tar.bz2', '385e67d17a2cb3795bd0b0fb7f88dc5e', 0, 'WindowsXP-SP3', 'VMDK', 16, 1, 1); +INSERT INTO `cloud`.`vm_template` (id, uuid, unique_name, name, public, created, type, hvm, bits, account_id, url, checksum, enable_password, display_text, format, guest_os_id, featured, cross_zones) + VALUES (5, UUID(), 'blank', 'BlankVM', 1, now(), 'ext3', 0, 32, 1, 'http://nfs1.lab.vmops.com/templates/vmware/blankvm.tar.bz2', '3eff7ce3d25cf9433efde8b245c63fcb', 0, 'BlankVM', 'VMDK', 47, 1, 1); +INSERT INTO `cloud`.`vm_template` (id, uuid, unique_name, name, public, created, type, hvm, bits, account_id, url, checksum, enable_password, display_text, format, guest_os_id, featured, cross_zones) + VALUES (6, UUID(), 'winxpsp3', 'WindowsXP-SP3', 1, now(), 'ntfs', 0, 32, 1, 'http://nfs1.lab.vmops.com/templates/vmware/winxpsp3.tar.bz2', '385e67d17a2cb3795bd0b0fb7f88dc5e', 0, 'WindowsXP-SP3', 'VMDK', 16, 1, 1); -INSERT INTO `cloud`.`guest_os_category` (id, name) VALUES (1, 'CentOS'); -INSERT INTO `cloud`.`guest_os_category` (id, name) VALUES (2, 'Debian'); -INSERT INTO `cloud`.`guest_os_category` (id, name) VALUES (3, 'Oracle'); -INSERT INTO `cloud`.`guest_os_category` (id, name) VALUES (4, 'RedHat'); -INSERT INTO `cloud`.`guest_os_category` (id, name) VALUES (5, 'SUSE'); -INSERT INTO `cloud`.`guest_os_category` (id, name) VALUES (6, 'Windows'); -INSERT INTO `cloud`.`guest_os_category` (id, name) VALUES (7, 'Other'); +INSERT INTO `cloud`.`guest_os_category` (id, uuid, name) VALUES (1, UUID(), 'CentOS'); +INSERT INTO `cloud`.`guest_os_category` (id, uuid, name) VALUES (2, UUID(), 'Debian'); +INSERT INTO `cloud`.`guest_os_category` (id, uuid, name) VALUES (3, UUID(), 'Oracle'); +INSERT INTO `cloud`.`guest_os_category` (id, uuid, name) VALUES (4, UUID(), 'RedHat'); +INSERT INTO `cloud`.`guest_os_category` (id, uuid, name) VALUES (5, UUID(), 'SUSE'); +INSERT INTO `cloud`.`guest_os_category` (id, uuid, name) VALUES (6, UUID(), 'Windows'); +INSERT INTO `cloud`.`guest_os_category` (id, uuid, name) VALUES (7, UUID(), 'Other'); -INSERT INTO `cloud`.`guest_os` (id, category_id, name, display_name) VALUES (1, 1, 'CentOS 4.5 (32-bit)', 'CentOS 4.5 (32-bit)'); -INSERT INTO `cloud`.`guest_os` (id, category_id, name, display_name) VALUES (2, 1, 'CentOS 4.6 (32-bit)', 'CentOS 4.6 (32-bit)'); -INSERT INTO `cloud`.`guest_os` (id, category_id, name, display_name) VALUES (3, 1, 'CentOS 4.7 (32-bit)', 'CentOS 4.7 (32-bit)'); -INSERT INTO `cloud`.`guest_os` (id, category_id, name, display_name) VALUES (4, 1, 'CentOS 4.8 (32-bit)', 'CentOS 4.8 (32-bit)'); -INSERT INTO `cloud`.`guest_os` (id, category_id, name, display_name) VALUES (5, 1, 'CentOS 5.0 (32-bit)', 'CentOS 5.0 (32-bit)'); -INSERT INTO `cloud`.`guest_os` (id, category_id, name, display_name) VALUES (6, 1, 'CentOS 5.0 (64-bit)', 'CentOS 5.0 (64-bit)'); -INSERT INTO `cloud`.`guest_os` (id, category_id, name, display_name) VALUES (7, 1, 'CentOS 5.1 (32-bit)', 'CentOS 5.1 (32-bit)'); -INSERT INTO `cloud`.`guest_os` (id, category_id, name, display_name) VALUES (8, 1, 'CentOS 5.1 (64-bit)', 'CentOS 5.1 (64-bit)'); -INSERT INTO `cloud`.`guest_os` (id, category_id, name, display_name) VALUES (9, 1, 'CentOS 5.2 (32-bit)', 'CentOS 5.2 (32-bit)'); -INSERT INTO `cloud`.`guest_os` (id, category_id, name, display_name) VALUES (10, 1, 'CentOS 5.2 (64-bit)', 'CentOS 5.2 (64-bit)'); -INSERT INTO `cloud`.`guest_os` (id, category_id, name, display_name) VALUES (11, 1, 'CentOS 5.3 (32-bit)', 'CentOS 5.3 (32-bit)'); -INSERT INTO `cloud`.`guest_os` (id, category_id, name, display_name) VALUES (12, 1, 'CentOS 5.3 (64-bit)', 'CentOS 5.3 (64-bit)'); -INSERT INTO `cloud`.`guest_os` (id, category_id, name, display_name) VALUES (13, 1, 'CentOS 5.4 (32-bit)', 'CentOS 5.4 (32-bit)'); -INSERT INTO `cloud`.`guest_os` (id, category_id, name, display_name) VALUES (14, 1, 'CentOS 5.4 (64-bit)', 'CentOS 5.4 (64-bit)'); -INSERT INTO `cloud`.`guest_os` (id, category_id, name, display_name) VALUES (15, 2, 'Debian Lenny 5.0 (32-bit)', 'Debian Lenny 5.0 (32-bit)'); -INSERT INTO `cloud`.`guest_os` (id, category_id, name, display_name) VALUES (16, 3, 'Oracle Enterprise Linux 5.0 (32-bit)', 'Oracle Enterprise Linux 5.0 (32-bit)'); -INSERT INTO `cloud`.`guest_os` (id, category_id, name, display_name) VALUES (17, 3, 'Oracle Enterprise Linux 5.0 (64-bit)', 'Oracle Enterprise Linux 5.0 (64-bit)'); -INSERT INTO `cloud`.`guest_os` (id, category_id, name, display_name) VALUES (18, 3, 'Oracle Enterprise Linux 5.1 (32-bit)', 'Oracle Enterprise Linux 5.1 (32-bit)'); -INSERT INTO `cloud`.`guest_os` (id, category_id, name, display_name) VALUES (19, 3, 'Oracle Enterprise Linux 5.1 (64-bit)', 'Oracle Enterprise Linux 5.1 (64-bit)'); -INSERT INTO `cloud`.`guest_os` (id, category_id, name, display_name) VALUES (20, 3, 'Oracle Enterprise Linux 5.2 (32-bit)', 'Oracle Enterprise Linux 5.2 (32-bit)'); -INSERT INTO `cloud`.`guest_os` (id, category_id, name, display_name) VALUES (21, 3, 'Oracle Enterprise Linux 5.2 (64-bit)', 'Oracle Enterprise Linux 5.2 (64-bit)'); -INSERT INTO `cloud`.`guest_os` (id, category_id, name, display_name) VALUES (22, 3, 'Oracle Enterprise Linux 5.3 (32-bit)', 'Oracle Enterprise Linux 5.3 (32-bit)'); -INSERT INTO `cloud`.`guest_os` (id, category_id, name, display_name) VALUES (23, 3, 'Oracle Enterprise Linux 5.3 (64-bit)', 'Oracle Enterprise Linux 5.3 (64-bit)'); -INSERT INTO `cloud`.`guest_os` (id, category_id, name, display_name) VALUES (24, 3, 'Oracle Enterprise Linux 5.4 (32-bit)', 'Oracle Enterprise Linux 5.4 (32-bit)'); -INSERT INTO `cloud`.`guest_os` (id, category_id, name, display_name) VALUES (25, 3, 'Oracle Enterprise Linux 5.4 (64-bit)', 'Oracle Enterprise Linux 5.4 (64-bit)'); -INSERT INTO `cloud`.`guest_os` (id, category_id, name, display_name) VALUES (26, 4, 'Red Hat Enterprise Linux 4.5 (32-bit)', 'Red Hat Enterprise Linux 4.5 (32-bit)'); -INSERT INTO `cloud`.`guest_os` (id, category_id, name, display_name) VALUES (27, 4, 'Red Hat Enterprise Linux 4.6 (32-bit)', 'Red Hat Enterprise Linux 4.6 (32-bit)'); -INSERT INTO `cloud`.`guest_os` (id, category_id, name, display_name) VALUES (28, 4, 'Red Hat Enterprise Linux 4.7 (32-bit)', 'Red Hat Enterprise Linux 4.7 (32-bit)'); -INSERT INTO `cloud`.`guest_os` (id, category_id, name, display_name) VALUES (29, 4, 'Red Hat Enterprise Linux 4.8 (32-bit)', 'Red Hat Enterprise Linux 4.8 (32-bit)'); -INSERT INTO `cloud`.`guest_os` (id, category_id, name, display_name) VALUES (30, 4, 'Red Hat Enterprise Linux 5.0 (32-bit)', 'Red Hat Enterprise Linux 5.0 (32-bit)'); -INSERT INTO `cloud`.`guest_os` (id, category_id, name, display_name) VALUES (31, 4, 'Red Hat Enterprise Linux 5.0 (64-bit)', 'Red Hat Enterprise Linux 5.0 (64-bit)'); -INSERT INTO `cloud`.`guest_os` (id, category_id, name, display_name) VALUES (32, 4, 'Red Hat Enterprise Linux 5.1 (32-bit)', 'Red Hat Enterprise Linux 5.1 (32-bit)'); -INSERT INTO `cloud`.`guest_os` (id, category_id, name, display_name) VALUES (33, 4, 'Red Hat Enterprise Linux 5.1 (64-bit)', 'Red Hat Enterprise Linux 5.1 (64-bit)'); -INSERT INTO `cloud`.`guest_os` (id, category_id, name, display_name) VALUES (34, 4, 'Red Hat Enterprise Linux 5.2 (32-bit)', 'Red Hat Enterprise Linux 5.2 (32-bit)'); -INSERT INTO `cloud`.`guest_os` (id, category_id, name, display_name) VALUES (35, 4, 'Red Hat Enterprise Linux 5.2 (64-bit)', 'Red Hat Enterprise Linux 5.2 (64-bit)'); -INSERT INTO `cloud`.`guest_os` (id, category_id, name, display_name) VALUES (36, 4, 'Red Hat Enterprise Linux 5.3 (32-bit)', 'Red Hat Enterprise Linux 5.3 (32-bit)'); -INSERT INTO `cloud`.`guest_os` (id, category_id, name, display_name) VALUES (37, 4, 'Red Hat Enterprise Linux 5.3 (64-bit)', 'Red Hat Enterprise Linux 5.3 (64-bit)'); -INSERT INTO `cloud`.`guest_os` (id, category_id, name, display_name) VALUES (38, 4, 'Red Hat Enterprise Linux 5.4 (32-bit)', 'Red Hat Enterprise Linux 5.4 (32-bit)'); -INSERT INTO `cloud`.`guest_os` (id, category_id, name, display_name) VALUES (39, 4, 'Red Hat Enterprise Linux 5.4 (64-bit)', 'Red Hat Enterprise Linux 5.4 (64-bit)'); -INSERT INTO `cloud`.`guest_os` (id, category_id, name, display_name) VALUES (40, 5, 'SUSE Linux Enterprise Server 9 SP4 (32-bit)', 'SUSE Linux Enterprise Server 9 SP4 (32-bit)'); -INSERT INTO `cloud`.`guest_os` (id, category_id, name, display_name) VALUES (41, 5, 'SUSE Linux Enterprise Server 10 SP1 (32-bit)', 'SUSE Linux Enterprise Server 10 SP1 (32-bit)'); -INSERT INTO `cloud`.`guest_os` (id, category_id, name, display_name) VALUES (42, 5, 'SUSE Linux Enterprise Server 10 SP1 (64-bit)', 'SUSE Linux Enterprise Server 10 SP1 (64-bit)'); -INSERT INTO `cloud`.`guest_os` (id, category_id, name, display_name) VALUES (43, 5, 'SUSE Linux Enterprise Server 10 SP2 (32-bit)', 'SUSE Linux Enterprise Server 10 SP2 (32-bit)'); -INSERT INTO `cloud`.`guest_os` (id, category_id, name, display_name) VALUES (44, 5, 'SUSE Linux Enterprise Server 10 SP2 (64-bit)', 'SUSE Linux Enterprise Server 10 SP2 (64-bit)'); -INSERT INTO `cloud`.`guest_os` (id, category_id, name, display_name) VALUES (45, 5, 'SUSE Linux Enterprise Server 10 SP3 (64-bit)', 'SUSE Linux Enterprise Server 10 SP3 (64-bit)'); -INSERT INTO `cloud`.`guest_os` (id, category_id, name, display_name) VALUES (46, 5, 'SUSE Linux Enterprise Server 11 (32-bit)', 'SUSE Linux Enterprise Server 11 (32-bit)'); -INSERT INTO `cloud`.`guest_os` (id, category_id, name, display_name) VALUES (47, 5, 'SUSE Linux Enterprise Server 11 (64-bit)', 'SUSE Linux Enterprise Server 11 (64-bit)'); -INSERT INTO `cloud`.`guest_os` (id, category_id, name, display_name) VALUES (48, 6, 'Windows 7 (32-bit)', 'Windows 7 (32-bit)'); -INSERT INTO `cloud`.`guest_os` (id, category_id, name, display_name) VALUES (49, 6, 'Windows 7 (64-bit)', 'Windows 7 (64-bit)'); -INSERT INTO `cloud`.`guest_os` (id, category_id, name, display_name) VALUES (50, 6, 'Windows Server 2003 (32-bit)', 'Windows Server 2003 (32-bit)'); -INSERT INTO `cloud`.`guest_os` (id, category_id, name, display_name) VALUES (51, 6, 'Windows Server 2003 (64-bit)', 'Windows Server 2003 (64-bit)'); -INSERT INTO `cloud`.`guest_os` (id, category_id, name, display_name) VALUES (52, 6, 'Windows Server 2008 (32-bit)', 'Windows Server 2008 (32-bit)'); -INSERT INTO `cloud`.`guest_os` (id, category_id, name, display_name) VALUES (53, 6, 'Windows Server 2008 (64-bit)', 'Windows Server 2008 (64-bit)'); -INSERT INTO `cloud`.`guest_os` (id, category_id, name, display_name) VALUES (54, 6, 'Windows Server 2008 R2 (64-bit)', 'Windows Server 2008 R2 (64-bit)'); -INSERT INTO `cloud`.`guest_os` (id, category_id, name, display_name) VALUES (55, 6, 'Windows 2000 SP4 (32-bit)', 'Windows 2000 SP4 (32-bit)'); -INSERT INTO `cloud`.`guest_os` (id, category_id, name, display_name) VALUES (56, 6, 'Windows Vista (32-bit)', 'Windows Vista (32-bit)'); -INSERT INTO `cloud`.`guest_os` (id, category_id, name, display_name) VALUES (57, 6, 'Windows XP SP2 (32-bit)', 'Windows XP SP2 (32-bit)'); -INSERT INTO `cloud`.`guest_os` (id, category_id, name, display_name) VALUES (58, 6, 'Windows XP SP3 (32-bit)', 'Windows XP SP3 (32-bit)'); -INSERT INTO `cloud`.`guest_os` (id, category_id, name, display_name) VALUES (59, 7, 'Other install media', 'Ubuntu'); -INSERT INTO `cloud`.`guest_os` (id, category_id, name, display_name) VALUES (60, 7, 'Other install media', 'Other'); -INSERT INTO `cloud`.`guest_os` (id, category_id, name, display_name) VALUES (61, 2, 'Ubuntu 10.04 (64-bit)', 'Ubuntu 10.04 (64-bit)'); -INSERT INTO `cloud`.`guest_os` (id, category_id, name, display_name) VALUES (62, 2, 'Ubuntu 10.04 (32-bit)', 'Ubuntu 10.04 (32-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, name, display_name) VALUES (1, UUID(), 1, 'CentOS 4.5 (32-bit)', 'CentOS 4.5 (32-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, name, display_name) VALUES (2, UUID(), 1, 'CentOS 4.6 (32-bit)', 'CentOS 4.6 (32-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, name, display_name) VALUES (3, UUID(), 1, 'CentOS 4.7 (32-bit)', 'CentOS 4.7 (32-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, name, display_name) VALUES (4, UUID(), 1, 'CentOS 4.8 (32-bit)', 'CentOS 4.8 (32-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, name, display_name) VALUES (5, UUID(), 1, 'CentOS 5.0 (32-bit)', 'CentOS 5.0 (32-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, name, display_name) VALUES (6, UUID(), 1, 'CentOS 5.0 (64-bit)', 'CentOS 5.0 (64-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, name, display_name) VALUES (7, UUID(), 1, 'CentOS 5.1 (32-bit)', 'CentOS 5.1 (32-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, name, display_name) VALUES (8, UUID(), 1, 'CentOS 5.1 (64-bit)', 'CentOS 5.1 (64-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, name, display_name) VALUES (9, UUID(), 1, 'CentOS 5.2 (32-bit)', 'CentOS 5.2 (32-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, name, display_name) VALUES (10, UUID(), 1, 'CentOS 5.2 (64-bit)', 'CentOS 5.2 (64-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, name, display_name) VALUES (11, UUID(), 1, 'CentOS 5.3 (32-bit)', 'CentOS 5.3 (32-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, name, display_name) VALUES (12, UUID(), 1, 'CentOS 5.3 (64-bit)', 'CentOS 5.3 (64-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, name, display_name) VALUES (13, UUID(), 1, 'CentOS 5.4 (32-bit)', 'CentOS 5.4 (32-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, name, display_name) VALUES (14, UUID(), 1, 'CentOS 5.4 (64-bit)', 'CentOS 5.4 (64-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, name, display_name) VALUES (15, UUID(), 2, 'Debian Lenny 5.0 (32-bit)', 'Debian Lenny 5.0 (32-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, name, display_name) VALUES (16, UUID(), 3, 'Oracle Enterprise Linux 5.0 (32-bit)', 'Oracle Enterprise Linux 5.0 (32-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, name, display_name) VALUES (17, UUID(), 3, 'Oracle Enterprise Linux 5.0 (64-bit)', 'Oracle Enterprise Linux 5.0 (64-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, name, display_name) VALUES (18, UUID(), 3, 'Oracle Enterprise Linux 5.1 (32-bit)', 'Oracle Enterprise Linux 5.1 (32-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, name, display_name) VALUES (19, UUID(), 3, 'Oracle Enterprise Linux 5.1 (64-bit)', 'Oracle Enterprise Linux 5.1 (64-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, name, display_name) VALUES (20, UUID(), 3, 'Oracle Enterprise Linux 5.2 (32-bit)', 'Oracle Enterprise Linux 5.2 (32-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, name, display_name) VALUES (21, UUID(), 3, 'Oracle Enterprise Linux 5.2 (64-bit)', 'Oracle Enterprise Linux 5.2 (64-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, name, display_name) VALUES (22, UUID(), 3, 'Oracle Enterprise Linux 5.3 (32-bit)', 'Oracle Enterprise Linux 5.3 (32-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, name, display_name) VALUES (23, UUID(), 3, 'Oracle Enterprise Linux 5.3 (64-bit)', 'Oracle Enterprise Linux 5.3 (64-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, name, display_name) VALUES (24, UUID(), 3, 'Oracle Enterprise Linux 5.4 (32-bit)', 'Oracle Enterprise Linux 5.4 (32-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, name, display_name) VALUES (25, UUID(), 3, 'Oracle Enterprise Linux 5.4 (64-bit)', 'Oracle Enterprise Linux 5.4 (64-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, name, display_name) VALUES (26, UUID(), 4, 'Red Hat Enterprise Linux 4.5 (32-bit)', 'Red Hat Enterprise Linux 4.5 (32-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, name, display_name) VALUES (27, UUID(), 4, 'Red Hat Enterprise Linux 4.6 (32-bit)', 'Red Hat Enterprise Linux 4.6 (32-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, name, display_name) VALUES (28, UUID(), 4, 'Red Hat Enterprise Linux 4.7 (32-bit)', 'Red Hat Enterprise Linux 4.7 (32-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, name, display_name) VALUES (29, UUID(), 4, 'Red Hat Enterprise Linux 4.8 (32-bit)', 'Red Hat Enterprise Linux 4.8 (32-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, name, display_name) VALUES (30, UUID(), 4, 'Red Hat Enterprise Linux 5.0 (32-bit)', 'Red Hat Enterprise Linux 5.0 (32-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, name, display_name) VALUES (31, UUID(), 4, 'Red Hat Enterprise Linux 5.0 (64-bit)', 'Red Hat Enterprise Linux 5.0 (64-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, name, display_name) VALUES (32, UUID(), 4, 'Red Hat Enterprise Linux 5.1 (32-bit)', 'Red Hat Enterprise Linux 5.1 (32-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, name, display_name) VALUES (33, UUID(), 4, 'Red Hat Enterprise Linux 5.1 (64-bit)', 'Red Hat Enterprise Linux 5.1 (64-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, name, display_name) VALUES (34, UUID(), 4, 'Red Hat Enterprise Linux 5.2 (32-bit)', 'Red Hat Enterprise Linux 5.2 (32-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, name, display_name) VALUES (35, UUID(), 4, 'Red Hat Enterprise Linux 5.2 (64-bit)', 'Red Hat Enterprise Linux 5.2 (64-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, name, display_name) VALUES (36, UUID(), 4, 'Red Hat Enterprise Linux 5.3 (32-bit)', 'Red Hat Enterprise Linux 5.3 (32-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, name, display_name) VALUES (37, UUID(), 4, 'Red Hat Enterprise Linux 5.3 (64-bit)', 'Red Hat Enterprise Linux 5.3 (64-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, name, display_name) VALUES (38, UUID(), 4, 'Red Hat Enterprise Linux 5.4 (32-bit)', 'Red Hat Enterprise Linux 5.4 (32-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, name, display_name) VALUES (39, UUID(), 4, 'Red Hat Enterprise Linux 5.4 (64-bit)', 'Red Hat Enterprise Linux 5.4 (64-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, name, display_name) VALUES (40, UUID(), 5, 'SUSE Linux Enterprise Server 9 SP4 (32-bit)', 'SUSE Linux Enterprise Server 9 SP4 (32-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, name, display_name) VALUES (41, UUID(), 5, 'SUSE Linux Enterprise Server 10 SP1 (32-bit)', 'SUSE Linux Enterprise Server 10 SP1 (32-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, name, display_name) VALUES (42, UUID(), 5, 'SUSE Linux Enterprise Server 10 SP1 (64-bit)', 'SUSE Linux Enterprise Server 10 SP1 (64-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, name, display_name) VALUES (43, UUID(), 5, 'SUSE Linux Enterprise Server 10 SP2 (32-bit)', 'SUSE Linux Enterprise Server 10 SP2 (32-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, name, display_name) VALUES (44, UUID(), 5, 'SUSE Linux Enterprise Server 10 SP2 (64-bit)', 'SUSE Linux Enterprise Server 10 SP2 (64-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, name, display_name) VALUES (45, UUID(), 5, 'SUSE Linux Enterprise Server 10 SP3 (64-bit)', 'SUSE Linux Enterprise Server 10 SP3 (64-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, name, display_name) VALUES (46, UUID(), 5, 'SUSE Linux Enterprise Server 11 (32-bit)', 'SUSE Linux Enterprise Server 11 (32-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, name, display_name) VALUES (47, UUID(), 5, 'SUSE Linux Enterprise Server 11 (64-bit)', 'SUSE Linux Enterprise Server 11 (64-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, name, display_name) VALUES (48, UUID(), 6, 'Windows 7 (32-bit)', 'Windows 7 (32-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, name, display_name) VALUES (49, UUID(), 6, 'Windows 7 (64-bit)', 'Windows 7 (64-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, name, display_name) VALUES (50, UUID(), 6, 'Windows Server 2003 (32-bit)', 'Windows Server 2003 (32-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, name, display_name) VALUES (51, UUID(), 6, 'Windows Server 2003 (64-bit)', 'Windows Server 2003 (64-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, name, display_name) VALUES (52, UUID(), 6, 'Windows Server 2008 (32-bit)', 'Windows Server 2008 (32-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, name, display_name) VALUES (53, UUID(), 6, 'Windows Server 2008 (64-bit)', 'Windows Server 2008 (64-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, name, display_name) VALUES (54, UUID(), 6, 'Windows Server 2008 R2 (64-bit)', 'Windows Server 2008 R2 (64-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, name, display_name) VALUES (55, UUID(), 6, 'Windows 2000 SP4 (32-bit)', 'Windows 2000 SP4 (32-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, name, display_name) VALUES (56, UUID(), 6, 'Windows Vista (32-bit)', 'Windows Vista (32-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, name, display_name) VALUES (57, UUID(), 6, 'Windows XP SP2 (32-bit)', 'Windows XP SP2 (32-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, name, display_name) VALUES (58, UUID(), 6, 'Windows XP SP3 (32-bit)', 'Windows XP SP3 (32-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, name, display_name) VALUES (59, UUID(), 7, 'Other install media', 'Ubuntu'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, name, display_name) VALUES (60, UUID(), 7, 'Other install media', 'Other'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, name, display_name) VALUES (61, UUID(), 2, 'Ubuntu 10.04 (64-bit)', 'Ubuntu 10.04 (64-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, name, display_name) VALUES (62, UUID(), 2, 'Ubuntu 10.04 (32-bit)', 'Ubuntu 10.04 (32-bit)'); -- temporarily added for vmware, will be moved when vmware support is fully in-place INSERT INTO `cloud`.`host_master`(`type`, `service_address`, `admin`, `password`) VALUES('VSphere', '192.168.90.238', 'Administrator', 'Suite219'); From db297a338f8a96350c99a4316953cf3631728cd3 Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Tue, 8 Jan 2013 18:36:31 -0800 Subject: [PATCH 305/421] utils: Reflection utilities to get cmd, annotation and fields Signed-off-by: Rohit Yadav --- utils/pom.xml | 5 ++ utils/src/com/cloud/utils/ReflectUtil.java | 63 ++++++++++++++++++++++ 2 files changed, 68 insertions(+) diff --git a/utils/pom.xml b/utils/pom.xml index c91688812f0..87c078a7a61 100644 --- a/utils/pom.xml +++ b/utils/pom.xml @@ -146,6 +146,11 @@ ${cs.commons-io.version} provided + + org.reflections + reflections + ${cs.reflections.version} + install diff --git a/utils/src/com/cloud/utils/ReflectUtil.java b/utils/src/com/cloud/utils/ReflectUtil.java index f1d1409ee7d..09447059fe6 100755 --- a/utils/src/com/cloud/utils/ReflectUtil.java +++ b/utils/src/com/cloud/utils/ReflectUtil.java @@ -16,10 +16,14 @@ // under the License. package com.cloud.utils; +import java.lang.annotation.Annotation; import java.lang.reflect.Field; import java.lang.reflect.Method; +import java.util.HashSet; +import java.util.Set; import com.cloud.utils.exception.CloudRuntimeException; +import org.reflections.Reflections; public class ReflectUtil { public static Pair, Field> getAnyField(Class clazz, String fieldName) { @@ -50,4 +54,63 @@ public class ReflectUtil { return null; } + // Gets all classes with some annotation from a package + public static Set> getClassesWithAnnotation(Class annotation, + String[] packageNames) { + Reflections reflections; + Set> classes = new HashSet>(); + for(String packageName: packageNames) { + reflections = new Reflections(packageName); + classes.addAll(reflections.getTypesAnnotatedWith(annotation)); + } + return classes; + } + + // Checks against posted search classes if cmd is async + public static boolean isCmdClassAsync(Class cmdClass, + Class[] searchClasses) { + boolean isAsync = false; + Class superClass = cmdClass; + + while (superClass != null && superClass != Object.class) { + String superName = superClass.getName(); + for (Class baseClass: searchClasses) { + if (superName.equals(baseClass.getName())) { + isAsync = true; + break; + } + } + if (isAsync) + break; + superClass = superClass.getSuperclass(); + } + return isAsync; + } + + // Returns all fields across the base class for a cmd + public static Field[] getAllFieldsForClass(Class cmdClass, + Class[] searchClasses) { + Field[] fields = cmdClass.getDeclaredFields(); + Class superClass = cmdClass.getSuperclass(); + + while (superClass != null && superClass != Object.class) { + String superName = superClass.getName(); + for (Class baseClass: searchClasses) { + if(!baseClass.isAssignableFrom(superClass)) + continue; + if (!superName.equals(baseClass.getName())) { + Field[] superClassFields = superClass.getDeclaredFields(); + if (superClassFields != null) { + Field[] tmpFields = new Field[fields.length + superClassFields.length]; + System.arraycopy(fields, 0, tmpFields, 0, fields.length); + System.arraycopy(superClassFields, 0, tmpFields, fields.length, superClassFields.length); + fields = tmpFields; + } + } + } + superClass = superClass.getSuperclass(); + } + return fields; + } + } From 539d94b4a68b1a161ac2ea3cf633b50d9299013b Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Tue, 8 Jan 2013 18:37:54 -0800 Subject: [PATCH 306/421] ApiXmlDocWriter: Reuse methods from ReflectUtil Signed-off-by: Rohit Yadav --- .../com/cloud/api/doc/ApiXmlDocWriter.java | 45 +++++++------------ 1 file changed, 15 insertions(+), 30 deletions(-) diff --git a/server/src/com/cloud/api/doc/ApiXmlDocWriter.java b/server/src/com/cloud/api/doc/ApiXmlDocWriter.java index b493ec4b29c..84851c389ad 100644 --- a/server/src/com/cloud/api/doc/ApiXmlDocWriter.java +++ b/server/src/com/cloud/api/doc/ApiXmlDocWriter.java @@ -28,6 +28,7 @@ import java.util.*; import java.util.zip.ZipEntry; import java.util.zip.ZipOutputStream; +import com.cloud.utils.ReflectUtil; import org.apache.cloudstack.api.*; import org.apache.log4j.Logger; @@ -79,13 +80,15 @@ public class ApiXmlDocWriter { } public static void main(String[] args) { - // Populate api name and cmd class mappings - Reflections reflections = new Reflections("org.apache.cloudstack.api"); - Set> cmdClasses = reflections.getTypesAnnotatedWith(APICommand.class); - reflections = new Reflections("com.cloud.api"); - cmdClasses.addAll(reflections.getTypesAnnotatedWith(APICommand.class)); + + Set> cmdClasses = ReflectUtil.getClassesWithAnnotation(APICommand.class, new String[]{"org.apache.cloudstack.api", "com.cloud.api"}); + for(Class cmdClass: cmdClasses) { String apiName = cmdClass.getAnnotation(APICommand.class).name(); + if (_apiNameCmdClassMap.containsKey(apiName)) { + System.out.println("Warning, API Cmd class " + cmdClass.getName() + " has non-unique apiname" + apiName); + continue; + } _apiNameCmdClassMap.put(apiName, cmdClass); } @@ -340,33 +343,15 @@ public class ApiXmlDocWriter { if(!impl.since().isEmpty()){ apiCommand.setSinceVersion(impl.since()); } - - // Set request parameters - Field[] fields = clas.getDeclaredFields(); - // Get fields from superclass - Class superClass = clas.getSuperclass(); - boolean isAsync = false; - while (superClass != null && superClass != Object.class) { - String superName = superClass.getName(); - if (!superName.equals(BaseCmd.class.getName()) && !superName.equals(BaseAsyncCmd.class.getName()) && !superName.equals(BaseAsyncCreateCmd.class.getName())) { - Field[] superClassFields = superClass.getDeclaredFields(); - if (superClassFields != null) { - Field[] tmpFields = new Field[fields.length + superClassFields.length]; - System.arraycopy(fields, 0, tmpFields, 0, fields.length); - System.arraycopy(superClassFields, 0, tmpFields, fields.length, superClassFields.length); - fields = tmpFields; - } - } - superClass = superClass.getSuperclass(); - // Set Async information for the command - if (superName.equals(BaseAsyncCmd.class.getName()) || superName.equals(BaseAsyncCreateCmd.class.getName())) { - isAsync = true; - } - } - + boolean isAsync = ReflectUtil.isCmdClassAsync(clas, + new Class[] {BaseAsyncCmd.class, BaseAsyncCreateCmd.class}); + apiCommand.setAsync(isAsync); - + + Field[] fields = ReflectUtil.getAllFieldsForClass(clas, + new Class[] {BaseCmd.class, BaseAsyncCmd.class, BaseAsyncCreateCmd.class}); + request = setRequestFields(fields); // Get response parameters From d76027194578ab7b12ec33aa8738abec1e9c8fa3 Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Tue, 8 Jan 2013 18:43:45 -0800 Subject: [PATCH 307/421] ApiDispatcher: Get rid of reflections, reuse utils' ReflectUtil Signed-off-by: Rohit Yadav --- server/pom.xml | 5 ----- server/src/com/cloud/api/ApiDispatcher.java | 16 +++------------- 2 files changed, 3 insertions(+), 18 deletions(-) diff --git a/server/pom.xml b/server/pom.xml index 9e6bc68f8f6..64bd2a206da 100644 --- a/server/pom.xml +++ b/server/pom.xml @@ -80,11 +80,6 @@ tests test - - org.reflections - reflections - 0.9.8 - install diff --git a/server/src/com/cloud/api/ApiDispatcher.java b/server/src/com/cloud/api/ApiDispatcher.java index 60d883677cd..fa9114e3ff7 100755 --- a/server/src/com/cloud/api/ApiDispatcher.java +++ b/server/src/com/cloud/api/ApiDispatcher.java @@ -31,6 +31,7 @@ import java.util.StringTokenizer; import java.util.regex.Matcher; import com.cloud.dao.EntityManager; +import com.cloud.utils.ReflectUtil; import org.apache.cloudstack.acl.ControlledEntity; import org.apache.cloudstack.acl.InfrastructureEntity; import org.apache.cloudstack.acl.Role; @@ -374,19 +375,8 @@ public class ApiDispatcher { } } - // Process all the fields of the cmd object using reflection to recursively process super class - Field[] fields = cmd.getClass().getDeclaredFields(); - Class superClass = cmd.getClass().getSuperclass(); - while (BaseCmd.class.isAssignableFrom(superClass)) { - Field[] superClassFields = superClass.getDeclaredFields(); - if (superClassFields != null) { - Field[] tmpFields = new Field[fields.length + superClassFields.length]; - System.arraycopy(fields, 0, tmpFields, 0, fields.length); - System.arraycopy(superClassFields, 0, tmpFields, fields.length, superClassFields.length); - fields = tmpFields; - } - superClass = superClass.getSuperclass(); - } + Field[] fields = ReflectUtil.getAllFieldsForClass(cmd.getClass(), + new Class[] {BaseCmd.class}); for (Field field : fields) { PlugService plugServiceAnnotation = field.getAnnotation(PlugService.class); From 0482734e2fc328e97a376d606338ab630d5759bc Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Tue, 8 Jan 2013 18:44:20 -0800 Subject: [PATCH 308/421] maven: Use reflections 0.9.8 Reflections is compatbile to APL at the time of commit Signed-off-by: Rohit Yadav --- pom.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/pom.xml b/pom.xml index 59e3bac1912..1dcf36fe7ed 100644 --- a/pom.xml +++ b/pom.xml @@ -86,6 +86,7 @@ 1.3.21.1 2.6 1.4 + 0.9.8 From 2c04dad529ff9b67f78d86316a9e1f6e93d503a4 Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Tue, 8 Jan 2013 18:48:18 -0800 Subject: [PATCH 309/421] ApiDiscovery: New plugin to help discover apis on mgmt server - Introduces api/discovery plugin that helps discover apis on the mgmt server - It's a pluggable service, therefore has it's own api-discovery_commands.properties where the discovery api, listApi can be blacklisted (by removing it), or it's role mask can be changed - By default its response has all the apis - Changes in other parts of the code to make it work, viz. components.xml, pom.xml, and in ApiServer where it is used as an adapter to get apiname, cmd mappings The ApiDiscoveryService interface is a contract that the implementing class will provide: 1. A means to get all the apis as a list of response, plugin is free to implement the response class, as long as it extends on the BaseResponse: ListResponse listApis(); 2. Provides a map of apiname as the key and cmd class as the value: Map> getApiNameCmdClassMapping(); Signed-off-by: Rohit Yadav --- .../apache/cloudstack/api/ApiConstants.java | 5 + .../discovery/ApiDiscoveryService.java | 29 ++++ client/pom.xml | 5 + .../api-discovery_commands.properties.in | 23 +++ client/tomcatconf/components.xml.in | 4 + plugins/api/discovery/pom.xml | 44 ++++++ .../command/user/discovery/ListApisCmd.java | 55 +++++++ .../api/response/ApiDiscoveryResponse.java | 75 +++++++++ .../api/response/ApiParameterResponse.java | 70 +++++++++ .../discovery/ApiDiscoveryServiceImpl.java | 144 ++++++++++++++++++ plugins/pom.xml | 1 + server/src/com/cloud/api/ApiServer.java | 18 +-- 12 files changed, 462 insertions(+), 11 deletions(-) create mode 100644 api/src/org/apache/cloudstack/discovery/ApiDiscoveryService.java create mode 100644 client/tomcatconf/api-discovery_commands.properties.in create mode 100644 plugins/api/discovery/pom.xml create mode 100644 plugins/api/discovery/src/org/apache/cloudstack/api/command/user/discovery/ListApisCmd.java create mode 100644 plugins/api/discovery/src/org/apache/cloudstack/api/response/ApiDiscoveryResponse.java create mode 100644 plugins/api/discovery/src/org/apache/cloudstack/api/response/ApiParameterResponse.java create mode 100644 plugins/api/discovery/src/org/apache/cloudstack/discovery/ApiDiscoveryServiceImpl.java diff --git a/api/src/org/apache/cloudstack/api/ApiConstants.java b/api/src/org/apache/cloudstack/api/ApiConstants.java index 6d8400ae6fd..b4ce24c2bc9 100644 --- a/api/src/org/apache/cloudstack/api/ApiConstants.java +++ b/api/src/org/apache/cloudstack/api/ApiConstants.java @@ -91,6 +91,7 @@ public class ApiConstants { public static final String INTERVAL_TYPE = "intervaltype"; public static final String IP_ADDRESS = "ipaddress"; public static final String IP_ADDRESS_ID = "ipaddressid"; + public static final String IS_ASYNC = "isasync"; public static final String IP_AVAILABLE = "ipavailable"; public static final String IP_LIMIT = "iplimit"; public static final String IP_TOTAL = "iptotal"; @@ -106,6 +107,7 @@ public class ApiConstants { public static final String JOB_STATUS = "jobstatus"; public static final String LASTNAME = "lastname"; public static final String LEVEL = "level"; + public static final String LENGTH = "length"; public static final String LIMIT_CPU_USE = "limitcpuuse"; public static final String LOCK = "lock"; public static final String LUN = "lun"; @@ -126,6 +128,7 @@ public class ApiConstants { public static final String OP = "op"; public static final String OS_CATEGORY_ID = "oscategoryid"; public static final String OS_TYPE_ID = "ostypeid"; + public static final String PARAMS = "params"; public static final String PARENT_DOMAIN_ID = "parentdomainid"; public static final String PASSWORD = "password"; public static final String NEW_PASSWORD = "new_password"; @@ -159,6 +162,7 @@ public class ApiConstants { public static final String SCHEDULE = "schedule"; public static final String SCOPE = "scope"; public static final String SECRET_KEY = "usersecretkey"; + public static final String SINCE = "since"; public static final String KEY = "key"; public static final String SEARCH_BASE = "searchbase"; public static final String SECURITY_GROUP_IDS = "securitygroupids"; @@ -324,6 +328,7 @@ public class ApiConstants { public static final String SOURCE_NAT_SUPPORTED = "sourcenatsupported"; public static final String RESOURCE_STATE = "resourcestate"; public static final String PROJECT_INVITE_REQUIRED = "projectinviterequired"; + public static final String REQUIRED = "required"; public static final String RESTART_REQUIRED = "restartrequired"; public static final String ALLOW_USER_CREATE_PROJECTS = "allowusercreateprojects"; public static final String CONSERVE_MODE = "conservemode"; diff --git a/api/src/org/apache/cloudstack/discovery/ApiDiscoveryService.java b/api/src/org/apache/cloudstack/discovery/ApiDiscoveryService.java new file mode 100644 index 00000000000..12206949db3 --- /dev/null +++ b/api/src/org/apache/cloudstack/discovery/ApiDiscoveryService.java @@ -0,0 +1,29 @@ +// 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 org.apache.cloudstack.discovery; + +import com.cloud.utils.component.Adapter; +import com.cloud.utils.component.PluggableService; +import org.apache.cloudstack.api.BaseResponse; +import org.apache.cloudstack.api.response.ListResponse; + +import java.util.Map; + +public interface ApiDiscoveryService extends Adapter, PluggableService { + ListResponse listApis(); + Map> getApiNameCmdClassMapping(); +} diff --git a/client/pom.xml b/client/pom.xml index b703cbe966f..1bbae1f7d08 100644 --- a/client/pom.xml +++ b/client/pom.xml @@ -30,6 +30,11 @@ cloud-plugin-acl-static-role-based ${project.version} + + org.apache.cloudstack + cloud-plugin-api-discovery + ${project.version} + org.apache.cloudstack cloud-plugin-user-authenticator-ldap diff --git a/client/tomcatconf/api-discovery_commands.properties.in b/client/tomcatconf/api-discovery_commands.properties.in new file mode 100644 index 00000000000..49ddfde42d8 --- /dev/null +++ b/client/tomcatconf/api-discovery_commands.properties.in @@ -0,0 +1,23 @@ +# 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. + +# bitmap of permissions at the end of each classname, 1 = ADMIN, 2 = +# RESOURCE_DOMAIN_ADMIN, 4 = DOMAIN_ADMIN, 8 = USER +# Please standardize naming conventions to camel-case (even for acronyms). + +# CloudStack API Discovery service command +listApis=15 diff --git a/client/tomcatconf/components.xml.in b/client/tomcatconf/components.xml.in index a7378bd9f49..b9feed15a88 100755 --- a/client/tomcatconf/components.xml.in +++ b/client/tomcatconf/components.xml.in @@ -56,6 +56,9 @@ under the License. + + + @@ -177,6 +180,7 @@ under the License. + diff --git a/plugins/api/discovery/pom.xml b/plugins/api/discovery/pom.xml new file mode 100644 index 00000000000..a61b275addc --- /dev/null +++ b/plugins/api/discovery/pom.xml @@ -0,0 +1,44 @@ + + + 4.0.0 + cloud-plugin-api-discovery + Apache CloudStack Plugin - API Discovery + + org.apache.cloudstack + cloudstack-plugins + 4.1.0-SNAPSHOT + ../../pom.xml + + + + org.apache.cloudstack + cloud-api + ${project.version} + + + org.apache.cloudstack + cloud-utils + ${project.version} + + + diff --git a/plugins/api/discovery/src/org/apache/cloudstack/api/command/user/discovery/ListApisCmd.java b/plugins/api/discovery/src/org/apache/cloudstack/api/command/user/discovery/ListApisCmd.java new file mode 100644 index 00000000000..a7e60e340b2 --- /dev/null +++ b/plugins/api/discovery/src/org/apache/cloudstack/api/command/user/discovery/ListApisCmd.java @@ -0,0 +1,55 @@ +// 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 org.apache.cloudstack.api.command.user.discovery; + +import org.apache.cloudstack.api.APICommand; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.BaseListCmd; +import org.apache.cloudstack.api.PlugService; +import org.apache.cloudstack.api.ServerApiException; +import org.apache.cloudstack.api.response.ListResponse; +import org.apache.cloudstack.discovery.ApiDiscoveryService; +import org.apache.cloudstack.api.response.ApiDiscoveryResponse; + +import org.apache.log4j.Logger; + +@APICommand(name = "listApis", responseObject = ApiDiscoveryResponse.class, description = "lists all apis available to the user as per their account type", since = "4.1.0") +public class ListApisCmd extends BaseListCmd { + + public static final Logger s_logger = Logger.getLogger(ListApisCmd.class.getName()); + private static final String s_name = "listapisresponse"; + + @PlugService + ApiDiscoveryService _apiDiscoveryService; + + @Override + public void execute() throws ServerApiException { + if (_apiDiscoveryService != null) { + ListResponse response = (ListResponse) _apiDiscoveryService.listApis(); + if (response == null) { + throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Api Discovery plugin was unable to find and process any apis"); + } + response.setResponseName(getCommandName()); + this.setResponseObject(response); + } + } + + @Override + public String getCommandName() { + return s_name; + } +} diff --git a/plugins/api/discovery/src/org/apache/cloudstack/api/response/ApiDiscoveryResponse.java b/plugins/api/discovery/src/org/apache/cloudstack/api/response/ApiDiscoveryResponse.java new file mode 100644 index 00000000000..b6a4f124954 --- /dev/null +++ b/plugins/api/discovery/src/org/apache/cloudstack/api/response/ApiDiscoveryResponse.java @@ -0,0 +1,75 @@ +// 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 org.apache.cloudstack.api.response; + +import com.cloud.user.Account; +import org.apache.cloudstack.api.ApiConstants; +import com.cloud.serializer.Param; +import com.google.gson.annotations.SerializedName; +import org.apache.cloudstack.api.BaseResponse; +import org.apache.cloudstack.api.EntityReference; + +import java.util.HashSet; +import java.util.Set; + +@SuppressWarnings("unused") +@EntityReference(value = Account.class) +public class ApiDiscoveryResponse extends BaseResponse { + @SerializedName(ApiConstants.NAME) @Param(description="the name of the api command") + private String name; + + @SerializedName(ApiConstants.DESCRIPTION) @Param(description="description of the api") + private String description; + + @SerializedName(ApiConstants.SINCE) @Param(description="version of CloudStack the api was introduced in") + private String since; + + @SerializedName(ApiConstants.IS_ASYNC) @Param(description="true if api is asynchronous") + private Boolean isAsync; + + @SerializedName(ApiConstants.PARAMS) @Param(description="the list params the api accepts", responseObject = ApiParameterResponse.class) + private Set params; + + public ApiDiscoveryResponse(){ + params = new HashSet(); + isAsync = false; + } + + public void setName(String name) { + this.name = name; + } + + public void setDescription(String description) { + this.description = description; + } + + public void setSince(String since) { + this.since = since; + } + + public void setAsync(Boolean isAsync) { + this.isAsync = isAsync; + } + + public void setParams(Set params) { + this.params = params; + } + + public void addParam(ApiParameterResponse param) { + this.params.add(param); + } +} \ No newline at end of file diff --git a/plugins/api/discovery/src/org/apache/cloudstack/api/response/ApiParameterResponse.java b/plugins/api/discovery/src/org/apache/cloudstack/api/response/ApiParameterResponse.java new file mode 100644 index 00000000000..9a73bec3dee --- /dev/null +++ b/plugins/api/discovery/src/org/apache/cloudstack/api/response/ApiParameterResponse.java @@ -0,0 +1,70 @@ +// 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 org.apache.cloudstack.api.response; + +import org.apache.cloudstack.api.ApiConstants; +import com.cloud.serializer.Param; +import com.google.gson.annotations.SerializedName; +import org.apache.cloudstack.api.BaseResponse; + +public class ApiParameterResponse extends BaseResponse { + @SerializedName(ApiConstants.NAME) @Param(description="the name of the api parameter") + private String name; + + @SerializedName(ApiConstants.DESCRIPTION) @Param(description="description of the api parameter") + private String description; + + @SerializedName(ApiConstants.TYPE) @Param(description="parameter type") + private String type; + + @SerializedName(ApiConstants.LENGTH) @Param(description="length of the parameter") + private int length; + + @SerializedName(ApiConstants.REQUIRED) @Param(description="version of CloudStack the api was introduced in") + private Boolean required; + + @SerializedName(ApiConstants.SINCE) @Param(description="version of CloudStack the api was introduced in") + private String since; + + public ApiParameterResponse(){ + } + + public void setName(String name) { + this.name = name; + } + + public void setDescription(String description) { + this.description = description; + } + + public void setType(String type) { + this.type = type; + } + + public void setLength(int length) { + this.length = length; + } + + public void setRequired(Boolean required) { + this.required = required; + } + + public void setSince(String since) { + this.since = since; + } + + } \ No newline at end of file diff --git a/plugins/api/discovery/src/org/apache/cloudstack/discovery/ApiDiscoveryServiceImpl.java b/plugins/api/discovery/src/org/apache/cloudstack/discovery/ApiDiscoveryServiceImpl.java new file mode 100644 index 00000000000..ca57df5d314 --- /dev/null +++ b/plugins/api/discovery/src/org/apache/cloudstack/discovery/ApiDiscoveryServiceImpl.java @@ -0,0 +1,144 @@ +// 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 org.apache.cloudstack.discovery; + +import com.cloud.utils.ReflectUtil; +import com.cloud.utils.component.AdapterBase; +import org.apache.cloudstack.api.APICommand; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.BaseAsyncCmd; +import org.apache.cloudstack.api.BaseAsyncCreateCmd; +import org.apache.cloudstack.api.BaseResponse; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.response.ApiDiscoveryResponse; +import org.apache.cloudstack.api.response.ApiParameterResponse; +import org.apache.cloudstack.api.response.ListResponse; +import org.apache.log4j.Logger; + +import javax.ejb.Local; +import javax.naming.ConfigurationException; +import java.lang.reflect.Field; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Set; + +@Local(value = ApiDiscoveryService.class) +public class ApiDiscoveryServiceImpl extends AdapterBase implements ApiDiscoveryService { + + private static final Logger s_logger = Logger.getLogger(ApiDiscoveryServiceImpl.class); + private Map> _apiNameCmdClassMap; + private ListResponse _discoveryResponse; + + protected ApiDiscoveryServiceImpl() { + super(); + } + + private void generateApiNameCmdClassMapping() { + _apiNameCmdClassMap = new HashMap>(); + Set> cmdClasses = ReflectUtil.getClassesWithAnnotation(APICommand.class, new String[]{"org.apache.cloudstack.api", "com.cloud.api"}); + + for(Class cmdClass: cmdClasses) { + String apiName = cmdClass.getAnnotation(APICommand.class).name(); + if (_apiNameCmdClassMap.containsKey(apiName)) { + s_logger.error("API Cmd class " + cmdClass.getName() + " has non-unique apiname" + apiName); + continue; + } + _apiNameCmdClassMap.put(apiName, cmdClass); + } + } + + private void precacheListApiResponse() { + + if(_apiNameCmdClassMap == null) + return; + + _discoveryResponse = new ListResponse(); + + List apiDiscoveryResponses = new ArrayList(); + + for(String key: _apiNameCmdClassMap.keySet()) { + Class cmdClass = _apiNameCmdClassMap.get(key); + APICommand apiCmdAnnotation = cmdClass.getAnnotation(APICommand.class); + if (apiCmdAnnotation == null) + apiCmdAnnotation = cmdClass.getSuperclass().getAnnotation(APICommand.class); + if (apiCmdAnnotation == null + || !apiCmdAnnotation.includeInApiDoc() + || apiCmdAnnotation.name().isEmpty()) + continue; + + ApiDiscoveryResponse response = new ApiDiscoveryResponse(); + response.setName(apiCmdAnnotation.name()); + response.setDescription(apiCmdAnnotation.description()); + response.setSince(apiCmdAnnotation.since()); + + Field[] fields = ReflectUtil.getAllFieldsForClass(cmdClass, + new Class[] {BaseCmd.class, BaseAsyncCmd.class, BaseAsyncCreateCmd.class}); + + boolean isAsync = ReflectUtil.isCmdClassAsync(cmdClass, + new Class[] {BaseAsyncCmd.class, BaseAsyncCreateCmd.class}); + + response.setAsync(isAsync); + + for(Field field: fields) { + Parameter parameterAnnotation = field.getAnnotation(Parameter.class); + if (parameterAnnotation != null + && parameterAnnotation.expose() + && parameterAnnotation.includeInApiDoc()) { + + ApiParameterResponse paramResponse = new ApiParameterResponse(); + paramResponse.setName(parameterAnnotation.name()); + paramResponse.setDescription(parameterAnnotation.description()); + paramResponse.setType(parameterAnnotation.type().toString()); + paramResponse.setLength(parameterAnnotation.length()); + paramResponse.setRequired(parameterAnnotation.required()); + paramResponse.setSince(parameterAnnotation.since()); + response.addParam(paramResponse); + } + } + response.setObjectName("apis"); + apiDiscoveryResponses.add(response); + } + _discoveryResponse.setResponses(apiDiscoveryResponses); + } + + @Override + public boolean configure(String name, Map params) + throws ConfigurationException { + super.configure(name, params); + + generateApiNameCmdClassMapping(); + precacheListApiResponse(); + + return true; + } + + public Map> getApiNameCmdClassMapping() { + return _apiNameCmdClassMap; + } + + @Override + public ListResponse listApis() { + return _discoveryResponse; + } + + @Override + public String[] getPropertiesFiles() { + return new String[]{"api-discovery_commands.properties"}; + } +} \ No newline at end of file diff --git a/plugins/pom.xml b/plugins/pom.xml index f0589a1caaf..a42ae2967b1 100644 --- a/plugins/pom.xml +++ b/plugins/pom.xml @@ -32,6 +32,7 @@ test + api/discovery acl/static-role-based deployment-planners/user-concentrated-pod deployment-planners/user-dispersing diff --git a/server/src/com/cloud/api/ApiServer.java b/server/src/com/cloud/api/ApiServer.java index e2dc9ce2bbf..8d304e0c9b3 100755 --- a/server/src/com/cloud/api/ApiServer.java +++ b/server/src/com/cloud/api/ApiServer.java @@ -50,6 +50,7 @@ import javax.crypto.spec.SecretKeySpec; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; +import com.cloud.utils.ReflectUtil; import org.apache.cloudstack.acl.APIAccessChecker; import org.apache.cloudstack.acl.ControlledEntity; import org.apache.cloudstack.api.*; @@ -59,6 +60,7 @@ import org.apache.cloudstack.api.command.user.event.ListEventsCmd; import org.apache.cloudstack.api.command.user.vm.ListVMsCmd; import org.apache.cloudstack.api.command.user.vmgroup.ListVMGroupsCmd; import org.apache.cloudstack.api.command.user.volume.ListVolumesCmd; +import org.apache.cloudstack.discovery.ApiDiscoveryService; import org.apache.commons.codec.binary.Base64; import org.apache.http.client.utils.URLEncodedUtils; import org.apache.http.ConnectionClosedException; @@ -145,8 +147,11 @@ public class ApiServer implements HttpRequestHandler { @Inject private AccountManager _accountMgr = null; @Inject private DomainManager _domainMgr = null; @Inject private AsyncJobManager _asyncMgr = null; + @Inject(adapter = APIAccessChecker.class) protected Adapters _apiAccessCheckers; + @Inject(adapter = ApiDiscoveryService.class) + protected Adapters _apiDiscoveryServices; private Account _systemAccount = null; private User _systemUser = null; @@ -201,17 +206,8 @@ public class ApiServer implements HttpRequestHandler { } } - // Populate api name and cmd class mappings - Reflections reflections = new Reflections("org.apache.cloudstack.api"); - Set> cmdClasses = reflections.getTypesAnnotatedWith(APICommand.class); - reflections = new Reflections("com.cloud.api"); - cmdClasses.addAll(reflections.getTypesAnnotatedWith(APICommand.class)); - for(Class cmdClass: cmdClasses) { - String apiName = cmdClass.getAnnotation(APICommand.class).name(); - if (_apiNameCmdClassMap.containsKey(apiName)) { - s_logger.error("API Cmd class " + cmdClass.getName() + " has non-unique apiname" + apiName); - } - _apiNameCmdClassMap.put(apiName, cmdClass); + for (ApiDiscoveryService discoveryService: _apiDiscoveryServices) { + _apiNameCmdClassMap.putAll(discoveryService.getApiNameCmdClassMapping()); } encodeApiResponse = Boolean.valueOf(configDao.getValue(Config.EncodeApiResponse.key())); From b59638e5aeea29b4bb92f20ee73f6d722fa0e7fc Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Tue, 8 Jan 2013 19:59:47 -0800 Subject: [PATCH 310/421] apidoc: Fix apidoc building to generate for new plugin as well Signed-off-by: Rohit Yadav --- tools/apidoc/gen_toc.py | 3 ++- tools/apidoc/pom.xml | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/tools/apidoc/gen_toc.py b/tools/apidoc/gen_toc.py index abff8d15980..7739aea633f 100644 --- a/tools/apidoc/gen_toc.py +++ b/tools/apidoc/gen_toc.py @@ -128,7 +128,8 @@ known_categories = { 'NiciraNvpDevice': 'Nicira NVP', 'AutoScale': 'AutoScale', 'Counter': 'AutoScale', - 'Condition': 'AutoScale' + 'Condition': 'AutoScale', + 'Api': 'API Discovery', } diff --git a/tools/apidoc/pom.xml b/tools/apidoc/pom.xml index b75ee826372..e0b02bc5dc6 100644 --- a/tools/apidoc/pom.xml +++ b/tools/apidoc/pom.xml @@ -57,7 +57,7 @@ ${client.config.jars} ./target -f - ${client.config.conf}/commands.properties,${client.config.conf}/commands-ext.properties,${client.config.conf}/virtualrouter_commands.properties,${client.config.conf}/nicira-nvp_commands.properties + ${client.config.conf}/commands.properties,${client.config.conf}/commands-ext.properties,${client.config.conf}/virtualrouter_commands.properties,${client.config.conf}/nicira-nvp_commands.properties,${client.config.conf}/api-discovery_commands.properties From d613c59dcbbca884fd8b31f5a1d58bb3f6d0e67c Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Tue, 8 Jan 2013 20:00:13 -0800 Subject: [PATCH 311/421] plugins: Fix apidiscovery's annotation field values and example plugin's name Signed-off-by: Rohit Yadav --- .../cloudstack/api/command/user/discovery/ListApisCmd.java | 2 +- .../apache/cloudstack/api/response/ApiDiscoveryResponse.java | 2 +- .../apache/cloudstack/api/response/ApiParameterResponse.java | 4 ++-- plugins/network-elements/dns-notifier/pom.xml | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/plugins/api/discovery/src/org/apache/cloudstack/api/command/user/discovery/ListApisCmd.java b/plugins/api/discovery/src/org/apache/cloudstack/api/command/user/discovery/ListApisCmd.java index a7e60e340b2..dcbaec1d160 100644 --- a/plugins/api/discovery/src/org/apache/cloudstack/api/command/user/discovery/ListApisCmd.java +++ b/plugins/api/discovery/src/org/apache/cloudstack/api/command/user/discovery/ListApisCmd.java @@ -27,7 +27,7 @@ import org.apache.cloudstack.api.response.ApiDiscoveryResponse; import org.apache.log4j.Logger; -@APICommand(name = "listApis", responseObject = ApiDiscoveryResponse.class, description = "lists all apis available to the user as per their account type", since = "4.1.0") +@APICommand(name = "listApis", responseObject = ApiDiscoveryResponse.class, description = "lists all available apis on the server, provided by Api Discovery plugin", since = "4.1.0") public class ListApisCmd extends BaseListCmd { public static final Logger s_logger = Logger.getLogger(ListApisCmd.class.getName()); diff --git a/plugins/api/discovery/src/org/apache/cloudstack/api/response/ApiDiscoveryResponse.java b/plugins/api/discovery/src/org/apache/cloudstack/api/response/ApiDiscoveryResponse.java index b6a4f124954..dd1298bfec5 100644 --- a/plugins/api/discovery/src/org/apache/cloudstack/api/response/ApiDiscoveryResponse.java +++ b/plugins/api/discovery/src/org/apache/cloudstack/api/response/ApiDiscoveryResponse.java @@ -72,4 +72,4 @@ public class ApiDiscoveryResponse extends BaseResponse { public void addParam(ApiParameterResponse param) { this.params.add(param); } -} \ No newline at end of file +} diff --git a/plugins/api/discovery/src/org/apache/cloudstack/api/response/ApiParameterResponse.java b/plugins/api/discovery/src/org/apache/cloudstack/api/response/ApiParameterResponse.java index 9a73bec3dee..9138288e102 100644 --- a/plugins/api/discovery/src/org/apache/cloudstack/api/response/ApiParameterResponse.java +++ b/plugins/api/discovery/src/org/apache/cloudstack/api/response/ApiParameterResponse.java @@ -34,7 +34,7 @@ public class ApiParameterResponse extends BaseResponse { @SerializedName(ApiConstants.LENGTH) @Param(description="length of the parameter") private int length; - @SerializedName(ApiConstants.REQUIRED) @Param(description="version of CloudStack the api was introduced in") + @SerializedName(ApiConstants.REQUIRED) @Param(description="true if this parameter is required for the api request") private Boolean required; @SerializedName(ApiConstants.SINCE) @Param(description="version of CloudStack the api was introduced in") @@ -67,4 +67,4 @@ public class ApiParameterResponse extends BaseResponse { this.since = since; } - } \ No newline at end of file + } diff --git a/plugins/network-elements/dns-notifier/pom.xml b/plugins/network-elements/dns-notifier/pom.xml index 0b4c981af98..8c6b485b83c 100644 --- a/plugins/network-elements/dns-notifier/pom.xml +++ b/plugins/network-elements/dns-notifier/pom.xml @@ -28,7 +28,7 @@ org.apache.cloudstack cloud-plugin-example-dns-notifier 4.1.0-SNAPSHOT - CloudStack Dns Notifier Example + Apache CloudStack Plugin - Dns Notifier Example This is sample source code on how to write a plugin for CloudStack install From 4f98d879f69bdddca74e56a21c06df9b033d049a Mon Sep 17 00:00:00 2001 From: Noa Resare Date: Tue, 8 Jan 2013 20:25:58 -0800 Subject: [PATCH 312/421] maven: remove explicit submodule versions from module pom.xml Signed-off-by: Rohit Yadav --- plugins/hypervisors/simulator/pom.xml | 3 +-- plugins/network-elements/dns-notifier/pom.xml | 1 - 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/plugins/hypervisors/simulator/pom.xml b/plugins/hypervisors/simulator/pom.xml index 15b37900590..a1ab9c08639 100644 --- a/plugins/hypervisors/simulator/pom.xml +++ b/plugins/hypervisors/simulator/pom.xml @@ -27,7 +27,6 @@ org.apache.cloudstack cloud-plugin-hypervisor-simulator - 4.1.0-SNAPSHOT Apache CloudStack Plugin - Hypervisor Simulator Simulator Hypervisor for Cloudstack @@ -42,4 +41,4 @@ ${project.version} - \ No newline at end of file + diff --git a/plugins/network-elements/dns-notifier/pom.xml b/plugins/network-elements/dns-notifier/pom.xml index 0b4c981af98..be68e99b9b2 100644 --- a/plugins/network-elements/dns-notifier/pom.xml +++ b/plugins/network-elements/dns-notifier/pom.xml @@ -27,7 +27,6 @@ org.apache.cloudstack cloud-plugin-example-dns-notifier - 4.1.0-SNAPSHOT CloudStack Dns Notifier Example This is sample source code on how to write a plugin for CloudStack From b18c03a006ae308f2f8c8843a0d517b61d17105a Mon Sep 17 00:00:00 2001 From: Prasanna Santhanam Date: Wed, 9 Jan 2013 15:11:05 +0530 Subject: [PATCH 313/421] simulator: formatting changes Signed-off-by: Prasanna Santhanam --- .../agent/manager/SimulatorManagerImpl.java | 65 ++++++++----------- 1 file changed, 27 insertions(+), 38 deletions(-) diff --git a/plugins/hypervisors/simulator/src/com/cloud/agent/manager/SimulatorManagerImpl.java b/plugins/hypervisors/simulator/src/com/cloud/agent/manager/SimulatorManagerImpl.java index 4f70ee5bae7..2bed2efec6a 100644 --- a/plugins/hypervisors/simulator/src/com/cloud/agent/manager/SimulatorManagerImpl.java +++ b/plugins/hypervisors/simulator/src/com/cloud/agent/manager/SimulatorManagerImpl.java @@ -16,27 +16,12 @@ // under the License. package com.cloud.agent.manager; -import java.util.HashMap; -import java.util.Map; - -import javax.ejb.Local; -import javax.naming.ConfigurationException; - import com.cloud.agent.api.*; -import com.cloud.agent.api.storage.*; -import org.apache.log4j.Logger; - import com.cloud.agent.api.check.CheckSshCommand; import com.cloud.agent.api.proxy.CheckConsoleProxyLoadCommand; import com.cloud.agent.api.proxy.WatchConsoleProxyLoadCommand; -import com.cloud.agent.api.routing.DhcpEntryCommand; -import com.cloud.agent.api.routing.IpAssocCommand; -import com.cloud.agent.api.routing.LoadBalancerConfigCommand; -import com.cloud.agent.api.routing.SavePasswordCommand; -import com.cloud.agent.api.routing.SetFirewallRulesCommand; -import com.cloud.agent.api.routing.SetPortForwardingRulesCommand; -import com.cloud.agent.api.routing.SetStaticNatRulesCommand; -import com.cloud.agent.api.routing.VmDataCommand; +import com.cloud.agent.api.routing.*; +import com.cloud.agent.api.storage.*; import com.cloud.simulator.MockConfigurationVO; import com.cloud.simulator.MockHost; import com.cloud.simulator.MockVMVO; @@ -49,6 +34,12 @@ import com.cloud.utils.db.DB; import com.cloud.utils.db.Transaction; import com.cloud.utils.exception.CloudRuntimeException; import com.cloud.vm.VirtualMachine.State; +import org.apache.log4j.Logger; + +import javax.ejb.Local; +import javax.naming.ConfigurationException; +import java.util.HashMap; +import java.util.Map; @Local(value = { SimulatorManager.class }) public class SimulatorManagerImpl implements SimulatorManager { @@ -112,14 +103,12 @@ public class SimulatorManagerImpl implements SimulatorManager { @Override public Answer simulate(Command cmd, String hostGuid) { Transaction txn = Transaction.open(Transaction.SIMULATOR_DB); - // txn.transitToUserManagedConnection(_concierge.conn()); - try { MockHost host = _mockHost.findByGuid(hostGuid); String cmdName = cmd.toString(); int index = cmdName.lastIndexOf("."); if (index != -1) { - cmdName = cmdName.substring(index + 1); + cmdName = cmdName.substring(index + 1); } MockConfigurationVO config = _mockConfigDao.findByNameBottomUP(host.getDataCenterId(), host.getPodId(), host.getClusterId(), host.getId(), cmdName); @@ -129,24 +118,24 @@ public class SimulatorManagerImpl implements SimulatorManager { if (config != null) { Map configParameters = config.getParameters(); for (Map.Entry entry : configParameters.entrySet()) { - if (entry.getKey().equalsIgnoreCase("enabled")) { - info.setEnabled(Boolean.parseBoolean(entry.getValue())); - } else if (entry.getKey().equalsIgnoreCase("timeout")) { - try { - info.setTimeout(Integer.valueOf(entry.getValue())); - } catch (NumberFormatException e) { - s_logger.debug("invalid timeout parameter: " + e.toString()); - } - } else if (entry.getKey().equalsIgnoreCase("wait")) { - try { - int wait = Integer.valueOf(entry.getValue()); - Thread.sleep(wait * 1000); - } catch (NumberFormatException e) { - s_logger.debug("invalid timeout parameter: " + e.toString()); - } catch (InterruptedException e) { - s_logger.debug("thread is interrupted: " + e.toString()); - } - } + if (entry.getKey().equalsIgnoreCase("enabled")) { + info.setEnabled(Boolean.parseBoolean(entry.getValue())); + } else if (entry.getKey().equalsIgnoreCase("timeout")) { + try { + info.setTimeout(Integer.valueOf(entry.getValue())); + } catch (NumberFormatException e) { + s_logger.debug("invalid timeout parameter: " + e.toString()); + } + } else if (entry.getKey().equalsIgnoreCase("wait")) { + try { + int wait = Integer.valueOf(entry.getValue()); + Thread.sleep(wait); + } catch (NumberFormatException e) { + s_logger.debug("invalid timeout parameter: " + e.toString()); + } catch (InterruptedException e) { + s_logger.debug("thread is interrupted: " + e.toString()); + } + } } } From ef89793c4e0265af0c4cc53feddc63544253b1d6 Mon Sep 17 00:00:00 2001 From: Wido den Hollander Date: Wed, 9 Jan 2013 13:11:21 +0100 Subject: [PATCH 314/421] init: Explicitly set the HOME variable to the homedir of the user cloud We have to explicitly set the HOME variable to the homedir from the user "cloud" This is because various scripts run by the management server read the HOME variable and fail when this init script is run manually. For example the injectkeys.sh script reads the HOME variable --- client/distro/ubuntu/SYSCONFDIR/init.d/cloud-management.in | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/client/distro/ubuntu/SYSCONFDIR/init.d/cloud-management.in b/client/distro/ubuntu/SYSCONFDIR/init.d/cloud-management.in index 5ed86c2ceb5..4afa707a9e9 100755 --- a/client/distro/ubuntu/SYSCONFDIR/init.d/cloud-management.in +++ b/client/distro/ubuntu/SYSCONFDIR/init.d/cloud-management.in @@ -38,6 +38,11 @@ CATALINA_HOME=@MSENVIRON@ DEFAULT=@MSCONF@/tomcat6.conf JVM_TMP=/tmp/$NAME-temp +# We have to explicitly set the HOME variable to the homedir from the user "cloud" +# This is because various scripts run by the management server read the HOME variable +# and fail when this init script is run manually. +HOME=$(echo ~cloud) + if [ `id -u` -ne 0 ]; then echo "You need root privileges to run this script" exit 1 From 765504c070919cd8e6ee53e23985a37c9a7ecdf6 Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Wed, 9 Jan 2013 04:15:19 -0800 Subject: [PATCH 315/421] ApiServer: Fix apidiscovery fail case, fix comment Signed-off-by: Rohit Yadav --- server/src/com/cloud/api/ApiServer.java | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/server/src/com/cloud/api/ApiServer.java b/server/src/com/cloud/api/ApiServer.java index 8d304e0c9b3..56cef123e2c 100755 --- a/server/src/com/cloud/api/ApiServer.java +++ b/server/src/com/cloud/api/ApiServer.java @@ -168,9 +168,7 @@ public class ApiServer implements HttpRequestHandler { public static void initApiServer(String[] apiConfig) { if (s_instance == null) { - //Injecting will create ApiServer object with all its - //vars injected as well, no need to do the following: - //s_instance = new ApiServer(); + //Injection will create ApiServer and all its fields which have @Inject s_instance = ComponentLocator.inject(ApiServer.class); s_instance.init(apiConfig); } @@ -178,7 +176,6 @@ public class ApiServer implements HttpRequestHandler { public static ApiServer getInstance() { // Assumption: CloudStartupServlet would initialize ApiServer - // initApiServer(null); if (s_instance == null) { s_logger.fatal("ApiServer instance failed to initialize"); } @@ -210,6 +207,11 @@ public class ApiServer implements HttpRequestHandler { _apiNameCmdClassMap.putAll(discoveryService.getApiNameCmdClassMapping()); } + if (_apiNameCmdClassMap.size() == 0) { + s_logger.fatal("ApiServer failed to generate apiname, cmd class mappings." + + "Please check and enable at least one ApiDiscovery adapter."); + } + encodeApiResponse = Boolean.valueOf(configDao.getValue(Config.EncodeApiResponse.key())); String jsonType = configDao.getValue(Config.JavaScriptDefaultContentType.key()); if (jsonType != null) { From fc92f04c6b3dcde4ae1177309b762ea8bea702c1 Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Wed, 9 Jan 2013 04:17:30 -0800 Subject: [PATCH 316/421] ApiDispatcher: Remove unused methods which were for acl processing Signed-off-by: Rohit Yadav --- server/src/com/cloud/api/ApiDispatcher.java | 33 ++++----------------- 1 file changed, 5 insertions(+), 28 deletions(-) diff --git a/server/src/com/cloud/api/ApiDispatcher.java b/server/src/com/cloud/api/ApiDispatcher.java index fa9114e3ff7..75e361720fe 100755 --- a/server/src/com/cloud/api/ApiDispatcher.java +++ b/server/src/com/cloud/api/ApiDispatcher.java @@ -149,31 +149,9 @@ public class ApiDispatcher { } } - private void checkACLOnCommand(BaseCmd cmd) { - // TODO Auto-generated method stub - //need to write an commandACLChecker adapter framework to check ACL on commands - default one will use the static roles by referring to commands.properties. - //one can write another commandACLChecker to check access via custom roles. - } - - private List determineRole(Account caller) { - // TODO Auto-generated method stub - List effectiveRoles = new ArrayList(); - return effectiveRoles; - - } - private void doAccessChecks(BaseCmd cmd, List entitiesToAccess) { - //owner - Account caller = UserContext.current().getCaller(); - Account owner = _accountMgr.getActiveAccountById(cmd.getEntityOwnerId()); - - // REMOVE ME: - // List callerRoles = determineRole(caller); - // List ownerRoles = determineRole(owner); - // check permission to call this command for the caller - // this needs checking of static roles of the caller - // Role based acl is done in ApiServer before api gets to ApiDispatcher - // checkACLOnCommand(cmd); + Account caller = UserContext.current().getCaller(); + Account owner = _accountMgr.getActiveAccountById(cmd.getEntityOwnerId()); if(cmd instanceof BaseAsyncCreateCmd) { //check that caller can access the owner account. @@ -188,13 +166,13 @@ public class ApiDispatcher { _accountMgr.checkAccess(caller, null, true, (ControlledEntity) entity); } else if (entity instanceof InfrastructureEntity) { - //do something here:D + //FIXME: Move this code in adapter, remove code from Account manager } } } - } + } - public void dispatch(BaseCmd cmd, Map params) { + public void dispatch(BaseCmd cmd, Map params) { try { processParameters(cmd, params); UserContext ctx = UserContext.current(); @@ -524,7 +502,6 @@ public class ApiDispatcher { } Long internalId = null; // If annotation's empty, the cmd existed before 3.x try conversion to long - // FIXME: Fails if someone adds since field for any pre 3.x apis boolean isPre3x = annotation.since().isEmpty(); // Match against Java's UUID regex to check if input is uuid string boolean isUuid = uuid.matches("^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$"); From 0b0752f047c112cfd2de7ba3347887f593890368 Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Wed, 9 Jan 2013 04:47:53 -0800 Subject: [PATCH 317/421] CLOUDSTACK-932: Fix incorrect param that caused casting error while processing api Reported-by: Kishan Kavala Signed-off-by: Rohit Yadav --- server/src/com/cloud/api/ApiDispatcher.java | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/server/src/com/cloud/api/ApiDispatcher.java b/server/src/com/cloud/api/ApiDispatcher.java index 75e361720fe..7bc3271523b 100755 --- a/server/src/com/cloud/api/ApiDispatcher.java +++ b/server/src/com/cloud/api/ApiDispatcher.java @@ -430,10 +430,9 @@ public class ApiDispatcher { switch (listType) { case LONG: case UUID: - List listParam = new ArrayList(); - listParam = (List) field.get(cmd); + List listParam = (List) field.get(cmd); for (Long entityId : listParam) { - Object entityObj = s_instance._entityMgr.findById(entity, (Long) field.get(cmd)); + Object entityObj = s_instance._entityMgr.findById(entity, entityId); entitiesToAccess.add(entityObj); } break; From 2eee2cd999889d105395621eb1f22103ca6f51c5 Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Wed, 9 Jan 2013 04:56:32 -0800 Subject: [PATCH 318/421] plugins: Fix getPropertiesFiles() for pluggable service plugins, CiscoNexusVSMEElement Signed-off-by: Rohit Yadav --- .../apache/cloudstack/discovery/ApiDiscoveryServiceImpl.java | 4 ++-- .../src/com/cloud/network/element/CiscoNexusVSMElement.java | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/plugins/api/discovery/src/org/apache/cloudstack/discovery/ApiDiscoveryServiceImpl.java b/plugins/api/discovery/src/org/apache/cloudstack/discovery/ApiDiscoveryServiceImpl.java index ca57df5d314..5363e559a5f 100644 --- a/plugins/api/discovery/src/org/apache/cloudstack/discovery/ApiDiscoveryServiceImpl.java +++ b/plugins/api/discovery/src/org/apache/cloudstack/discovery/ApiDiscoveryServiceImpl.java @@ -139,6 +139,6 @@ public class ApiDiscoveryServiceImpl extends AdapterBase implements ApiDiscovery @Override public String[] getPropertiesFiles() { - return new String[]{"api-discovery_commands.properties"}; + return new String[] { "api-discovery_commands.properties" }; } -} \ No newline at end of file +} diff --git a/plugins/hypervisors/vmware/src/com/cloud/network/element/CiscoNexusVSMElement.java b/plugins/hypervisors/vmware/src/com/cloud/network/element/CiscoNexusVSMElement.java index b9567dc8475..911078eac50 100644 --- a/plugins/hypervisors/vmware/src/com/cloud/network/element/CiscoNexusVSMElement.java +++ b/plugins/hypervisors/vmware/src/com/cloud/network/element/CiscoNexusVSMElement.java @@ -237,7 +237,7 @@ public class CiscoNexusVSMElement extends CiscoNexusVSMDeviceManagerImpl impleme } @Override - public String getPropertiesFile() { - return "cisconexusvsm_commands.properties"; + public String[] getPropertiesFiles() { + return new String[] { "cisconexusvsm_commands.properties" }; } } From 7c5c3c5dfcc985dfd6dd890c96fa840a2bac3e0e Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Wed, 9 Jan 2013 05:43:41 -0800 Subject: [PATCH 319/421] api: Re-add deleted addProxyObject method on CloudException - This was removed part of the response work - Re-adding as this kind of method definition is available in several other exception classes and is used in a lot of cmd classes and in service layer - TODO: We need to find a way to replace old code and refactor method with the new definition that gets only uuid. - FIXME: Some tables don't have uuid for ex. ClusterVSMMapVO, in this case we should keep the method until we find a way to fix this issue Partially reverting a88ce6bb7f495dddeb954d1fc7826176646b3590 Signed-off-by: Rohit Yadav --- api/src/com/cloud/exception/CloudException.java | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/api/src/com/cloud/exception/CloudException.java b/api/src/com/cloud/exception/CloudException.java index fd839565253..2ec61420cee 100644 --- a/api/src/com/cloud/exception/CloudException.java +++ b/api/src/com/cloud/exception/CloudException.java @@ -56,6 +56,15 @@ public class CloudException extends Exception { return; } + public void addProxyObject(Object voObj, Long id, String idFieldName) { + // Get the VO object's table name. + String tablename = AnnotationHelper.getTableName(voObj); + if (tablename != null) { + addProxyObject(tablename, id, idFieldName); + } + return; + } + public ArrayList getIdProxyList() { return idList; } From 9924b64830a406d08f53c22f7934fa31fb99de9d Mon Sep 17 00:00:00 2001 From: Min Chen Date: Wed, 9 Jan 2013 10:42:44 -0800 Subject: [PATCH 320/421] commit 3a3cb60e85c0254ebceff55d0b210ca1ff5386a6 Author: Likitha Shetty Date: Wed Jan 9 11:54:25 2013 +0530 CLOUDSTACK-614: ListTemplates API is not returning "Enable SSH Key" attribute for any given template. Update the TemplateResponse by adding 'sshkeyenabled' attribute to it. This attribute is set to the value that the user passes as input for parameter 'sshkeyenabled' while registering the template. Signed-off-by: Min Chen --- .../apache/cloudstack/api/response/TemplateResponse.java | 9 +++++++-- server/src/com/cloud/api/ApiResponseHelper.java | 2 ++ 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/api/src/org/apache/cloudstack/api/response/TemplateResponse.java b/api/src/org/apache/cloudstack/api/response/TemplateResponse.java index f6f74dac5b7..033c2e243d5 100644 --- a/api/src/org/apache/cloudstack/api/response/TemplateResponse.java +++ b/api/src/org/apache/cloudstack/api/response/TemplateResponse.java @@ -135,8 +135,8 @@ public class TemplateResponse extends BaseResponse implements ControlledEntityRe @SerializedName(ApiConstants.TAGS) @Param(description="the list of resource tags associated with tempate", responseObject = ResourceTagResponse.class) private List tags; - - + @SerializedName(ApiConstants.SSHKEY_ENABLED) @Param(description="true if template is sshkey enabled, false otherwise") + private Boolean sshKeyEnabled; @Override public String getObjectId() { @@ -290,4 +290,9 @@ public class TemplateResponse extends BaseResponse implements ControlledEntityRe public void setTags(List tags) { this.tags = tags; } + + public void setSshKeyEnabled(boolean sshKeyEnabled) { + this.sshKeyEnabled = sshKeyEnabled; + } + } diff --git a/server/src/com/cloud/api/ApiResponseHelper.java b/server/src/com/cloud/api/ApiResponseHelper.java index 37be83efc5c..47754395e7a 100755 --- a/server/src/com/cloud/api/ApiResponseHelper.java +++ b/server/src/com/cloud/api/ApiResponseHelper.java @@ -1265,6 +1265,7 @@ public class ApiResponseHelper implements ResponseGenerator { templateResponse.setFeatured(template.isFeatured()); templateResponse.setExtractable(template.isExtractable() && !(template.getTemplateType() == TemplateType.SYSTEM)); templateResponse.setPasswordEnabled(template.getEnablePassword()); + templateResponse.setSshKeyEnabled(template.getEnableSshKey()); templateResponse.setCrossZones(template.isCrossZones()); templateResponse.setFormat(template.getFormat()); templateResponse.setDetails(template.getDetails()); @@ -1346,6 +1347,7 @@ public class ApiResponseHelper implements ResponseGenerator { templateResponse.setFeatured(template.isFeatured()); templateResponse.setExtractable(template.isExtractable() && !(template.getTemplateType() == TemplateType.SYSTEM)); templateResponse.setPasswordEnabled(template.getEnablePassword()); + templateResponse.setSshKeyEnabled(template.getEnableSshKey()); templateResponse.setCrossZones(template.isCrossZones()); templateResponse.setFormat(template.getFormat()); if (template.getTemplateType() != null) { From 066edc11052ce5527e7624040a8176256959d151 Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Wed, 9 Jan 2013 11:21:30 -0800 Subject: [PATCH 321/421] plugins: Fix pluggable service getPropertiesFiles() on f5, srx and netscaler Signed-off-by: Rohit Yadav --- .../cloud/network/element/F5ExternalLoadBalancerElement.java | 4 ++-- .../network/element/JuniperSRXExternalFirewallElement.java | 4 ++-- .../src/com/cloud/network/element/NetscalerElement.java | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/plugins/network-elements/f5/src/com/cloud/network/element/F5ExternalLoadBalancerElement.java b/plugins/network-elements/f5/src/com/cloud/network/element/F5ExternalLoadBalancerElement.java index 735814c0fbc..335dc6ecfec 100644 --- a/plugins/network-elements/f5/src/com/cloud/network/element/F5ExternalLoadBalancerElement.java +++ b/plugins/network-elements/f5/src/com/cloud/network/element/F5ExternalLoadBalancerElement.java @@ -260,8 +260,8 @@ public class F5ExternalLoadBalancerElement extends ExternalLoadBalancerDeviceMan } @Override - public String getPropertiesFile() { - return "f5bigip_commands.properties"; + public String[] getPropertiesFiles() { + return new String[] { "f5bigip_commands.properties" }; } @Override diff --git a/plugins/network-elements/juniper-srx/src/com/cloud/network/element/JuniperSRXExternalFirewallElement.java b/plugins/network-elements/juniper-srx/src/com/cloud/network/element/JuniperSRXExternalFirewallElement.java index 0479648c099..f491e66925a 100644 --- a/plugins/network-elements/juniper-srx/src/com/cloud/network/element/JuniperSRXExternalFirewallElement.java +++ b/plugins/network-elements/juniper-srx/src/com/cloud/network/element/JuniperSRXExternalFirewallElement.java @@ -402,8 +402,8 @@ public class JuniperSRXExternalFirewallElement extends ExternalFirewallDeviceMan } @Override - public String getPropertiesFile() { - return "junipersrx_commands.properties"; + public String[] getPropertiesFiles() { + return new String[] { "junipersrx_commands.properties"}; } @Override diff --git a/plugins/network-elements/netscaler/src/com/cloud/network/element/NetscalerElement.java b/plugins/network-elements/netscaler/src/com/cloud/network/element/NetscalerElement.java index be9fc6fddd7..b1fe949632c 100644 --- a/plugins/network-elements/netscaler/src/com/cloud/network/element/NetscalerElement.java +++ b/plugins/network-elements/netscaler/src/com/cloud/network/element/NetscalerElement.java @@ -464,8 +464,8 @@ StaticNatServiceProvider { } @Override - public String getPropertiesFile() { - return "netscalerloadbalancer_commands.properties"; + public String[] getPropertiesFiles() { + return new String[] { "netscalerloadbalancer_commands.properties" }; } @Override From 4e71a5a7b9b6778a59ffb741249b01be4db7c2ad Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Wed, 9 Jan 2013 11:22:35 -0800 Subject: [PATCH 322/421] netapp: Fix String conversion method of long id Signed-off-by: Rohit Yadav --- .../netapp/src/com/cloud/netapp/NetappManagerImpl.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/file-systems/netapp/src/com/cloud/netapp/NetappManagerImpl.java b/plugins/file-systems/netapp/src/com/cloud/netapp/NetappManagerImpl.java index 7dcb9d3d032..1fdd2502694 100644 --- a/plugins/file-systems/netapp/src/com/cloud/netapp/NetappManagerImpl.java +++ b/plugins/file-systems/netapp/src/com/cloud/netapp/NetappManagerImpl.java @@ -660,7 +660,7 @@ public class NetappManagerImpl implements NetappManager lun = _lunDao.persist(lun); //Lun id created: 6 digits right justified eg. 000045 - String lunIdStr = lun.getId().toString(); + String lunIdStr = String.valueOf(lun.getId()); String zeroStr = "000000"; int length = lunIdStr.length(); int offset = 6-length; From 999ecb67dfa69a40085279af1d2e19cf5a5f7509 Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Wed, 9 Jan 2013 11:23:24 -0800 Subject: [PATCH 323/421] plugins: Import and @Parameter fixes Signed-off-by: Rohit Yadav --- .../com/cloud/api/commands/ListExternalLoadBalancersCmd.java | 3 ++- .../com/cloud/api/commands/ListF5LoadBalancerNetworksCmd.java | 1 + .../api/commands/ListNetscalerLoadBalancerNetworksCmd.java | 2 +- 3 files changed, 4 insertions(+), 2 deletions(-) diff --git a/plugins/network-elements/f5/src/com/cloud/api/commands/ListExternalLoadBalancersCmd.java b/plugins/network-elements/f5/src/com/cloud/api/commands/ListExternalLoadBalancersCmd.java index 3ee8d4865a5..72313aa0c0c 100644 --- a/plugins/network-elements/f5/src/com/cloud/api/commands/ListExternalLoadBalancersCmd.java +++ b/plugins/network-elements/f5/src/com/cloud/api/commands/ListExternalLoadBalancersCmd.java @@ -26,6 +26,7 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.response.HostResponse; import org.apache.cloudstack.api.response.ListResponse; +import org.apache.cloudstack.api.response.ZoneResponse; import com.cloud.host.Host; import com.cloud.network.element.F5ExternalLoadBalancerElementService; import org.apache.cloudstack.api.response.ExternalLoadBalancerResponse; @@ -40,7 +41,7 @@ public class ListExternalLoadBalancersCmd extends BaseListCmd { //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - @Parameter(name=ApiConstants.ZONE_ID, type=CommandType.UUID, entityType = ZoneRespones.class, + @Parameter(name=ApiConstants.ZONE_ID, type=CommandType.UUID, entityType = ZoneResponse.class, description="zone Id") private long zoneId; diff --git a/plugins/network-elements/f5/src/com/cloud/api/commands/ListF5LoadBalancerNetworksCmd.java b/plugins/network-elements/f5/src/com/cloud/api/commands/ListF5LoadBalancerNetworksCmd.java index 4ec98f02d58..bf1164b4d05 100644 --- a/plugins/network-elements/f5/src/com/cloud/api/commands/ListF5LoadBalancerNetworksCmd.java +++ b/plugins/network-elements/f5/src/com/cloud/api/commands/ListF5LoadBalancerNetworksCmd.java @@ -31,6 +31,7 @@ import org.apache.cloudstack.api.PlugService; import org.apache.cloudstack.api.ServerApiException; import org.apache.cloudstack.api.response.ListResponse; import org.apache.cloudstack.api.response.NetworkResponse; +import com.cloud.api.response.F5LoadBalancerResponse; import com.cloud.exception.ConcurrentOperationException; import com.cloud.exception.InsufficientCapacityException; import com.cloud.exception.InvalidParameterValueException; diff --git a/plugins/network-elements/netscaler/src/com/cloud/api/commands/ListNetscalerLoadBalancerNetworksCmd.java b/plugins/network-elements/netscaler/src/com/cloud/api/commands/ListNetscalerLoadBalancerNetworksCmd.java index b5935f34fda..52476df8316 100644 --- a/plugins/network-elements/netscaler/src/com/cloud/api/commands/ListNetscalerLoadBalancerNetworksCmd.java +++ b/plugins/network-elements/netscaler/src/com/cloud/api/commands/ListNetscalerLoadBalancerNetworksCmd.java @@ -49,7 +49,7 @@ public class ListNetscalerLoadBalancerNetworksCmd extends BaseListCmd { //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - @Parameter(name=ApiConstants.LOAD_BALANCER_DEVICE_ID, type=CommandType.UUID, entityType = NetscalerLoadBalancerResponse.class, , + @Parameter(name=ApiConstants.LOAD_BALANCER_DEVICE_ID, type=CommandType.UUID, entityType = NetscalerLoadBalancerResponse.class, required = true, description="netscaler load balancer device ID") private Long lbDeviceId; From 09b68ce13fa85702417fbce090379e3e94fecc94 Mon Sep 17 00:00:00 2001 From: Sebastien Goasguen Date: Mon, 17 Dec 2012 16:34:25 +0100 Subject: [PATCH 324/421] Improvements to AWS installation, configuration and use in installation guide --- docs/en-US/aws-api-examples.xml | 145 ++++++++++++++++++ docs/en-US/aws-ec2-configuration.xml | 104 ++++++++++--- docs/en-US/aws-ec2-introduction.xml | 13 +- docs/en-US/aws-ec2-requirements.xml | 9 +- docs/en-US/aws-ec2-supported-commands.xml | 2 +- docs/en-US/aws-ec2-timeouts.xml | 5 +- docs/en-US/aws-ec2-user-setup.xml | 108 +++++++------ docs/en-US/aws-interface-compatibility.xml | 3 +- .../images/compute-service-offerings.png | Bin 0 -> 75482 bytes docs/en-US/images/ec2-s3-configuration.png | 0 10 files changed, 306 insertions(+), 83 deletions(-) create mode 100644 docs/en-US/aws-api-examples.xml create mode 100644 docs/en-US/images/compute-service-offerings.png create mode 100644 docs/en-US/images/ec2-s3-configuration.png diff --git a/docs/en-US/aws-api-examples.xml b/docs/en-US/aws-api-examples.xml new file mode 100644 index 00000000000..ee3b44a5bde --- /dev/null +++ b/docs/en-US/aws-api-examples.xml @@ -0,0 +1,145 @@ + + +%BOOK_ENTITIES; +]> + + + +
+ Examples + There are many tools available to interface with a AWS compatible API. In this section we provide + a few examples that users of &PRODUCT; can build upon. + +
+ Boto Examples + Boto is one of them. It is a Python package available at https://github.com/boto/boto. + In this section we provide two examples of Python scripts that use Boto and have been tested with the + &PRODUCT; AWS API Interface. + First is an EC2 example. Replace the Access and Secret Keys with your own and + update the endpoint. + + + An EC2 Boto example + #!/usr/bin/env python + +import sys +import os +import boto +import boto.ec2 + +region = boto.ec2.regioninfo.RegionInfo(name="ROOT",endpoint="localhost") +apikey='GwNnpUPrO6KgIdZu01z_ZhhZnKjtSdRwuYd4DvpzvFpyxGMvrzno2q05MB0ViBoFYtdqKd' +secretkey='t4eXLEYWw7chBhDlaKf38adCMSHx_wlds6JfSx3z9fSpSOm0AbP9Moj0oGIzy2LSC8iw' + +def main(): + '''Establish connection to EC2 cloud''' + conn =boto.connect_ec2(aws_access_key_id=apikey, + aws_secret_access_key=secretkey, + is_secure=False, + region=region, + port=7080, + path="/awsapi", + api_version="2010-11-15") + + '''Get list of images that I own''' + images = conn.get_all_images() + print images + myimage = images[0] + '''Pick an instance type''' + vm_type='m1.small' + reservation = myimage.run(instance_type=vm_type,security_groups=['default']) + +if __name__ == '__main__': + main() + + + + Second is an S3 example. Replace the Access and Secret keys with your own, + as well as the endpoint of the service. Be sure to also update the file paths to something + that exists on your machine. + + + An S3 Boto Example + #!/usr/bin/env python + +import sys +import os +from boto.s3.key import Key +from boto.s3.connection import S3Connection +from boto.s3.connection import OrdinaryCallingFormat + +apikey='ChOw-pwdcCFy6fpeyv6kUaR0NnhzmG3tE7HLN2z3OB_s-ogF5HjZtN4rnzKnq2UjtnHeg_yLA5gOw' +secretkey='IMY8R7CJQiSGFk4cHwfXXN3DUFXz07cCiU80eM3MCmfLs7kusgyOfm0g9qzXRXhoAPCH-IRxXc3w' + +cf=OrdinaryCallingFormat() + +def main(): + '''Establish connection to S3 service''' + conn =S3Connection(aws_access_key_id=apikey,aws_secret_access_key=secretkey, \ + is_secure=False, \ + host='localhost', \ + port=7080, \ + calling_format=cf, \ + path="/awsapi/rest/AmazonS3") + + try: + bucket=conn.create_bucket('cloudstack') + k = Key(bucket) + k.key = 'test' + try: + k.set_contents_from_filename('/Users/runseb/Desktop/s3cs.py') + except: + print 'could not write file' + pass + except: + bucket = conn.get_bucket('cloudstack') + k = Key(bucket) + k.key = 'test' + try: + k.get_contents_to_filename('/Users/runseb/Desktop/foobar') + except: + print 'Could not get file' + pass + + try: + bucket1=conn.create_bucket('teststring') + k=Key(bucket1) + k.key('foobar') + k.set_contents_from_string('This is my silly test') + except: + bucket1=conn.get_bucket('teststring') + k = Key(bucket1) + k.key='foobar' + k.get_contents_as_string() + +if __name__ == '__main__': + main() + + + + +
+ +
+ JClouds Examples + +
+ +
diff --git a/docs/en-US/aws-ec2-configuration.xml b/docs/en-US/aws-ec2-configuration.xml index d6c4066d1d8..7d26027ba35 100644 --- a/docs/en-US/aws-ec2-configuration.xml +++ b/docs/en-US/aws-ec2-configuration.xml @@ -23,26 +23,88 @@ -->
- Enabling the AWS API Compatible Interface - - The software that provides AWS API compatibility is installed along with &PRODUCT;. However, you must enable the feature and perform some setup steps. - - - Set the global configuration parameter enable.ec2.api to true. See . - Create a set of &PRODUCT; service offerings with names that match the Amazon service offerings. - You can do this through the &PRODUCT; UI as described in the Administration Guide. - Be sure you have included the Amazon default service offering, m1.small. - If you did not already do so when you set the configuration parameter in step 1, restart the Management Server. - # service cloud-management restart - (Optional) The AWS API listens for requests on port 7080. If you prefer AWS API to listen on another port, you can change it as follows: - - Edit the files /etc/cloud/management/server.xml, /etc/cloud/management/server-nonssl.xml, and /etc/cloud/management/server-ssl.xml. - In each file, find the tag <Service name="Catalina7080">. Under this tag, locate <Connector executor="tomcatThreadPool-internal" port= ....<. - Change the port to whatever port you want to use, then save the files. - Restart the Management Server. - If you re-install CloudStack, you will have to make these changes again. + Enabling the EC2 and S3 Compatible Interface + + The software that provides AWS API compatibility is installed along with &PRODUCT;. You must enable the services and perform some setup steps prior to using it. + + + Set the global configuration parameters for each service to true. + See . + Create a set of &PRODUCT; service offerings with names that match the Amazon service offerings. + You can do this through the &PRODUCT; UI as described in the Administration Guide. + Be sure you have included the Amazon default service offering, m1.small. As well as any EC2 instance types that you will use. - - - + If you did not already do so when you set the configuration parameter in step 1, + restart the Management Server. + # service cloud-management restart + + + The following sections provides details to perform these steps + +
+ Enabling the Services + To enable the EC2 and S3 compatible services you need to set the configuration variables enable.ec2.api + and enable.s3.api to true. You do not have to enable both at the same time. Enable the ones you need. + This can be done via the &PRODUCT; GUI by going in Global Settings or via the API. + The snapshot below shows you how to use the GUI to enable these services + + + + + + + + Use the GUI to set the configuration variable to true + + + + + Using the &PRODUCT; API, the easiest is to use the so-called integration port on which you can make + unauthenticated calls. In Global Settings set the port to 8096 and subsequently call the updateConfiguration method. + The following urls shows you how: + + + + http://localhost:8096/client/api?command=updateConfiguration&name=enable.ec2.api&value=true + http://localhost:8096/client/api?command=updateConfiguration&name=enable.ec2.api&value=true + + + + Once you have enabled the services, restart the server. +
+ +
+ Creating EC2 Compatible Service Offerings + You will also need to define compute service offerings with names compatible with the + Amazon EC2 instance types API names (e.g m1.small,m1.large). This can be done via the &PRODUCT; GUI. + Go under Service Offerings select Compute offering and either create + a new compute offering or modify an existing one, ensuring that the name matches an EC2 instance type API name. The snapshot below shows you how: + + + + + + + Use the GUI to set the name of a compute service offering to an EC2 instance + type API name. + + + +
+
+ Modifying the AWS API Port + + (Optional) The AWS API listens for requests on port 7080. If you prefer AWS API to listen on another port, you can change it as follows: + + Edit the files /etc/cloud/management/server.xml, /etc/cloud/management/server-nonssl.xml, + and /etc/cloud/management/server-ssl.xml. + In each file, find the tag <Service name="Catalina7080">. Under this tag, + locate <Connector executor="tomcatThreadPool-internal" port= ....<. + Change the port to whatever port you want to use, then save the files. + Restart the Management Server. + + If you re-install &PRODUCT;, you will have to re-enable the services and if need be update the port. + +
+
diff --git a/docs/en-US/aws-ec2-introduction.xml b/docs/en-US/aws-ec2-introduction.xml index a4df086d465..538c09d5ad1 100644 --- a/docs/en-US/aws-ec2-introduction.xml +++ b/docs/en-US/aws-ec2-introduction.xml @@ -23,16 +23,19 @@ -->
- Amazon Web Services EC2 Compatible Interface + Amazon Web Services Compatible Interface &PRODUCT; can translate Amazon Web Services (AWS) API calls to native &PRODUCT; API calls so that users can continue using existing AWS-compatible tools. This translation service runs as a separate web application in the same tomcat server as the management server of &PRODUCT;, - listening on the same port. This Amazon EC2-compatible API is accessible through a SOAP web - service. + listening on a different port. The Amazon Web Services (AWS) compatible interface provides the + EC2 SOAP and Query APIs as well as the S3 REST API. This service was previously enabled by separate software called CloudBridge. It is now fully integrated with the &PRODUCT; management server. + + The compatible interface for the EC2 Query API and the S3 API are Work In Progress. The S3 compatible API offers a way to store data on the management server file system, it is not an implementation of the S3 backend. + Limitations @@ -42,7 +45,9 @@ Available in fresh installations of &PRODUCT;. Not available through upgrade of previous versions. - If you need to support features such as elastic IP, set up a Citrix NetScaler to provide this service. The commands such as ec2-associate-address will not work without EIP setup. Users running VMs in this zone will be using the NetScaler-enabled network offering (DefaultSharedNetscalerEIP and ELBNetworkOffering). + Features such as Elastic IP (EIP) and Elastic Load Balacing (ELB) are only available in an infrastructure + with a Citrix NetScaler device. Users accessing a Zone with a NetScaler device will need to use a + NetScaler-enabled network offering (DefaultSharedNetscalerEIP and ELBNetworkOffering).
diff --git a/docs/en-US/aws-ec2-requirements.xml b/docs/en-US/aws-ec2-requirements.xml index 59fb5b6f5ab..62e94b1ac9f 100644 --- a/docs/en-US/aws-ec2-requirements.xml +++ b/docs/en-US/aws-ec2-requirements.xml @@ -23,13 +23,14 @@ -->
- System Requirements + Supported API Version - This interface complies with Amazon's WDSL version dated November 15, 2010, available at + The EC2 interface complies with Amazon's WDSL version dated November 15, 2010, available at http://ec2.amazonaws.com/doc/2010-11-15/. - Compatible with the EC2 command-line + The interface is compatible with the EC2 command-line tools EC2 tools v. 1.3.6230, which can be downloaded at http://s3.amazonaws.com/ec2-downloads/ec2-api-tools-1.3-62308.zip. -
\ No newline at end of file + Work is underway to support a more recent version of the EC2 API + diff --git a/docs/en-US/aws-ec2-supported-commands.xml b/docs/en-US/aws-ec2-supported-commands.xml index 9494218cd1c..7cdbcad8095 100644 --- a/docs/en-US/aws-ec2-supported-commands.xml +++ b/docs/en-US/aws-ec2-supported-commands.xml @@ -24,7 +24,7 @@
Supported AWS API Calls - The following Amazon EC2 commands are supported by &PRODUCT; when the AWS API compatibility feature is enabled. + The following Amazon EC2 commands are supported by &PRODUCT; when the AWS API compatible interface is enabled. For a few commands, there are differences between the &PRODUCT; and Amazon EC2 versions, and these differences are noted. The underlying SOAP call for each command is also given, for those who have built tools using those calls. diff --git a/docs/en-US/aws-ec2-timeouts.xml b/docs/en-US/aws-ec2-timeouts.xml index c8b3ec6465f..73d0c16c4df 100644 --- a/docs/en-US/aws-ec2-timeouts.xml +++ b/docs/en-US/aws-ec2-timeouts.xml @@ -24,7 +24,7 @@
Using Timeouts to Ensure AWS API Command Completion - The Amazon EC2 command-line tools have a default connection timeout. When used with &PRODUCT;, a longer timeout might be needed for some commands. If you find that commands are not completing due to timeouts, you can gain more time for commands to finish by overriding the default timeouts on individual commands. You can add the following optional command-line parameters to any &PRODUCT;-supported EC2 command: + The Amazon EC2 command-line tools have a default connection timeout. When used with &PRODUCT;, a longer timeout might be needed for some commands. If you find that commands are not completing due to timeouts, you can specify a custom timeouts. You can add the following optional command-line parameters to any &PRODUCT;-supported EC2 command: @@ -47,4 +47,5 @@ Example: ec2-run-instances 2 –z us-test1 –n 1-3 --connection-timeout 120 --request-timeout 120 -
\ No newline at end of file + The timeouts optional arguments are not specific to &PRODUCT;. + diff --git a/docs/en-US/aws-ec2-user-setup.xml b/docs/en-US/aws-ec2-user-setup.xml index 8607378d88c..edc371ef376 100644 --- a/docs/en-US/aws-ec2-user-setup.xml +++ b/docs/en-US/aws-ec2-user-setup.xml @@ -22,76 +22,84 @@ under the License. -->
- AWS API User Setup Steps + AWS API User Setup In general, users need not be aware that they are using a translation service provided by &PRODUCT;. - They need only send AWS API calls to &PRODUCT;'s endpoint, and it will translate the calls to the native API. - Users of the Amazon EC2 compatible interface will be able to keep their existing EC2 tools + They only need to send AWS API calls to &PRODUCT;'s endpoint, and it will translate the calls to the native &PRODUCT; API. Users of the Amazon EC2 compatible interface will be able to keep their existing EC2 tools and scripts and use them with their &PRODUCT; deployment, by specifying the endpoint of the management server and using the proper user credentials. In order to do this, each user must perform the following configuration steps: - Generate user credentials and register with the service. + Generate user credentials. - Set up the environment variables for the EC2 command-line tools. + Register with the service. - For SOAP access, use the endpoint http://&PRODUCT;-management-server:7080/awsapi. - The &PRODUCT;-management-server can be specified by a fully-qualified domain name or IP address. + For convenience, set up environment variables for the EC2 SOAP command-line tools.
AWS API User Registration - Each user must perform a one-time registration. The user follows these steps: - - - Obtain the following by looking in the &PRODUCT; UI, using the API, or asking the cloud administrator: - - The &PRODUCT; server's publicly available DNS name or IP address - The user account's API key and Secret key - - - - - Generate a private key and a self-signed X.509 certificate. The user substitutes their own desired storage location for /path/to/… below. - - $ openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /path/to/private_key.pem -out /path/to/cert.pem - - - - - Register the mapping from the X.509 certificate to the API/Secret keys. - Download the following script from http://download.cloud.com/releases/3.0.3/cloudstack-aws-api-register and run it. - Substitute the values that were obtained in step 1 in the URL below. - - -$ cloudstack-aws-api-register --apikey=User’s &PRODUCT; API key --secretkey=User’s &PRODUCT; Secret key --cert=/path/to/cert.pem --url=http://&PRODUCT;.server:7080/awsapi - - - + Each user must perform a one-time registration. The user follows these steps: + + + Obtain the following by looking in the &PRODUCT; UI, using the API, or asking the cloud administrator: + + + The &PRODUCT; server's publicly available DNS name or IP address + The user account's Access key and Secret key + + + + Generate a private key and a self-signed X.509 certificate. The user substitutes their own desired storage location for /path/to/… below. + + + $ openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /path/to/private_key.pem -out /path/to/cert.pem + + + + Register the user X.509 certificate and Access/Secret keys with the AWS compatible service. + If you have the source code of &PRODUCT; go to the awsapi-setup/setup directory and use the Python script + cloudstack-aws-api-register. If you do not have the source then download the script using the following command. + + + wget -O cloudstack-aws-api-register "https://git-wip-us.apache.org/repos/asf?p=incubator-cloudstack.git;a=blob_plain;f=awsapi-setup/setup/cloudstack-aws-api-register;hb=HEAD" + + + Then execute it, using the parameter values that were obtained in step 1. An example is shown below. + + $ cloudstack-aws-api-register --apikey=User’s &PRODUCT; API key --secretkey=User’s &PRODUCT; Secret key --cert=/path/to/cert.pem --url=http://&PRODUCT;.server:7080/awsapi + + + - A user with an existing AWS certificate could choose to use the same certificate with &PRODUCT;, but the public key would be uploaded to the &PRODUCT; management server database. + A user with an existing AWS certificate could choose to use the same certificate with &PRODUCT;, but note that the certificate would be uploaded to the &PRODUCT; management server database.
- AWS API Command-Line Tools Setup - To use the EC2 command-line tools, the user must perform these steps: - - Be sure you have the right version of EC2 Tools. - The supported version is available at http://s3.amazonaws.com/ec2-downloads/ec2-api-tools-1.3-62308.zip. - - - Set up the environment variables that will direct the tools to the server. As a best practice, you may wish to place these commands in a script that may be sourced before using the AWS API translation feature. - $ export EC2_CERT=/path/to/cert.pem -$ export EC2_PRIVATE_KEY=/path/to/private_key.pem -$ export EC2_URL=http://&PRODUCT;.server:7080/awsapi -$ export EC2_HOME=/path/to/EC2_tools_directory - - + AWS API Command-Line Tools Setup + To use the EC2 command-line tools, the user must perform these steps: + + + Be sure you have the right version of EC2 Tools. + The supported version is available at http://s3.amazonaws.com/ec2-downloads/ec2-api-tools-1.3-62308.zip. + + + + Set up the EC2 environment variables. This can be done every time you use the service or you can set them up in the proper shell profile. Replace the endpoint (i.e EC2_URL) with the proper address of your &PRODUCT; management server and port. In a bash shell do the following. + + + $ export EC2_CERT=/path/to/cert.pem + $ export EC2_PRIVATE_KEY=/path/to/private_key.pem + $ export EC2_URL=http://localhost:7080/awsapi + $ export EC2_HOME=/path/to/EC2_tools_directory + + +
-
\ No newline at end of file + diff --git a/docs/en-US/aws-interface-compatibility.xml b/docs/en-US/aws-interface-compatibility.xml index a03d447b50d..2c85c24b36a 100644 --- a/docs/en-US/aws-interface-compatibility.xml +++ b/docs/en-US/aws-interface-compatibility.xml @@ -23,11 +23,12 @@ --> - Amazon Web Service Interface Compatibility + Amazon Web Services Compatible Interface + diff --git a/docs/en-US/images/compute-service-offerings.png b/docs/en-US/images/compute-service-offerings.png new file mode 100644 index 0000000000000000000000000000000000000000..88eb6f80597471a66031df83f6eb16fd5e701630 GIT binary patch literal 75482 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 literal 0 HcmV?d00001 diff --git a/docs/en-US/images/ec2-s3-configuration.png b/docs/en-US/images/ec2-s3-configuration.png new file mode 100644 index 00000000000..e69de29bb2d From 3dfd81fd6bcca92edab1f9ea814d0850d3202451 Mon Sep 17 00:00:00 2001 From: Koushik Das Date: Tue, 11 Dec 2012 18:25:05 +0530 Subject: [PATCH 325/421] CLOUDSTACK-605: Host physical CPU is incorrectly calculated for Vmware hosts Fixed logic to compute Vmware host cpu Signed-off-by: Koushik Das --- .../src/com/cloud/hypervisor/vmware/mo/HostMO.java | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/vmware-base/src/com/cloud/hypervisor/vmware/mo/HostMO.java b/vmware-base/src/com/cloud/hypervisor/vmware/mo/HostMO.java index 35570481d41..a765b42fd78 100755 --- a/vmware-base/src/com/cloud/hypervisor/vmware/mo/HostMO.java +++ b/vmware-base/src/com/cloud/hypervisor/vmware/mo/HostMO.java @@ -840,11 +840,9 @@ public class HostMO extends BaseMO implements VmwareHypervisorHost { VmwareHypervisorHostResourceSummary summary = new VmwareHypervisorHostResourceSummary(); - HostConnectInfo hostInfo = _context.getService().queryHostConnectionInfo(_mor); - HostHardwareSummary hardwareSummary = hostInfo.getHost().getHardware(); - + HostHardwareSummary hardwareSummary = getHostHardwareSummary(); // TODO: not sure how hyper-thread is counted in VMware resource pool - summary.setCpuCount(hardwareSummary.getNumCpuCores()*hardwareSummary.getNumCpuPkgs()); + summary.setCpuCount(hardwareSummary.getNumCpuCores()); summary.setMemoryBytes(hardwareSummary.getMemorySize()); summary.setCpuSpeed(hardwareSummary.getCpuMhz()); @@ -922,14 +920,13 @@ public class HostMO extends BaseMO implements VmwareHypervisorHost { ComputeResourceSummary resourceSummary = new ComputeResourceSummary(); // TODO: not sure how hyper-threading is counted in VMware - short totalCores = (short)(hardwareSummary.getNumCpuCores()*hardwareSummary.getNumCpuPkgs()); - resourceSummary.setNumCpuCores(totalCores); + resourceSummary.setNumCpuCores(hardwareSummary.getNumCpuCores()); // Note: memory here is in Byte unit resourceSummary.setTotalMemory(hardwareSummary.getMemorySize()); - // Total CPU is based on socket x core x Mhz - int totalCpu = hardwareSummary.getCpuMhz() * totalCores; + // Total CPU is based on (# of cores) x Mhz + int totalCpu = hardwareSummary.getCpuMhz() * hardwareSummary.getNumCpuCores(); resourceSummary.setTotalCpu(totalCpu); HostListSummaryQuickStats stats = getHostQuickStats(); From dcbb0ecef53644373ea9345959e754cdeb7526a7 Mon Sep 17 00:00:00 2001 From: Min Chen Date: Wed, 9 Jan 2013 13:46:54 -0800 Subject: [PATCH 326/421] Fix CLOUDSTACK-936: fix nonoss build due to CloudException IdentityProxy removal. --- .../com/cloud/exception/CloudException.java | 8 -- .../CiscoNexusVSMDeviceManagerImpl.java | 94 ++++++++++--------- 2 files changed, 48 insertions(+), 54 deletions(-) diff --git a/api/src/com/cloud/exception/CloudException.java b/api/src/com/cloud/exception/CloudException.java index 2ec61420cee..8f1fa37aac6 100644 --- a/api/src/com/cloud/exception/CloudException.java +++ b/api/src/com/cloud/exception/CloudException.java @@ -56,14 +56,6 @@ public class CloudException extends Exception { return; } - public void addProxyObject(Object voObj, Long id, String idFieldName) { - // Get the VO object's table name. - String tablename = AnnotationHelper.getTableName(voObj); - if (tablename != null) { - addProxyObject(tablename, id, idFieldName); - } - return; - } public ArrayList getIdProxyList() { return idList; diff --git a/plugins/hypervisors/vmware/src/com/cloud/network/CiscoNexusVSMDeviceManagerImpl.java b/plugins/hypervisors/vmware/src/com/cloud/network/CiscoNexusVSMDeviceManagerImpl.java index d3dcb772af2..528075ea41a 100644 --- a/plugins/hypervisors/vmware/src/com/cloud/network/CiscoNexusVSMDeviceManagerImpl.java +++ b/plugins/hypervisors/vmware/src/com/cloud/network/CiscoNexusVSMDeviceManagerImpl.java @@ -11,7 +11,7 @@ // 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 +// KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. package com.cloud.network; @@ -48,7 +48,7 @@ import com.cloud.utils.cisco.n1kv.vsm.NetconfHelper; public abstract class CiscoNexusVSMDeviceManagerImpl extends AdapterBase { @Inject - CiscoNexusVSMDeviceDao _ciscoNexusVSMDeviceDao; + CiscoNexusVSMDeviceDao _ciscoNexusVSMDeviceDao; @Inject ClusterDao _clusterDao; @Inject @@ -65,9 +65,9 @@ public abstract class CiscoNexusVSMDeviceManagerImpl extends AdapterBase { PortProfileDao _ppDao; @Inject ConfigurationDao _configDao; - + private static final org.apache.log4j.Logger s_logger = Logger.getLogger(ExternalLoadBalancerDeviceManagerImpl.class); - + @DB //public CiscoNexusVSMDeviceVO addCiscoNexusVSM(long clusterId, String ipaddress, String username, String password, ServerResource resource, String vsmName) { public CiscoNexusVSMDeviceVO addCiscoNexusVSM(long clusterId, String ipaddress, String username, String password, String vCenterIpaddr, String vCenterDcName) { @@ -77,7 +77,7 @@ public abstract class CiscoNexusVSMDeviceManagerImpl extends AdapterBase { // First check if the cluster is of type vmware. If not, // throw an exception. VSMs are tightly integrated with vmware clusters. - + ClusterVO cluster = _clusterDao.findById(clusterId); if (cluster == null) { throw new InvalidParameterValueException("Cluster with specified ID not found!"); @@ -90,21 +90,21 @@ public abstract class CiscoNexusVSMDeviceManagerImpl extends AdapterBase { // Next, check if the cluster already has a VSM associated with it. // If so, throw an exception disallowing this operation. The user must first // delete the current VSM and then only attempt to add the new one. - + if (_clusterVSMDao.findByClusterId(clusterId) != null) { // We can't have two VSMs for the same cluster. Throw exception. throw new InvalidParameterValueException("Cluster with specified id already has a VSM tied to it. Please remove that first and retry the operation."); } // TODO: Confirm whether we should be checking for VSM reachability here. - + // Next, check if this VSM is reachable. Use the XML-RPC VSM API Java bindings to talk to // the VSM. //NetconfHelper (String ip, String username, String password) NetconfHelper netconfClient; try { - netconfClient = new NetconfHelper(ipaddress, username, password); + netconfClient = new NetconfHelper(ipaddress, username, password); } catch(CloudRuntimeException e) { String msg = "Failed to connect to Nexus VSM " + ipaddress + " with credentials of user " + username; s_logger.error(msg); @@ -118,7 +118,7 @@ public abstract class CiscoNexusVSMDeviceManagerImpl extends AdapterBase { // First, check if VSM already exists in the table "virtual_supervisor_module". // If it's not there already, create it. // If it's there already, return success. - + // TODO - Right now, we only check if the ipaddress matches for both requests. // We must really check whether every field of the VSM matches. Anyway, the // advantage of our approach for now is that existing infrastructure using @@ -131,7 +131,7 @@ public abstract class CiscoNexusVSMDeviceManagerImpl extends AdapterBase { throw new CloudRuntimeException(e.getMessage()); } - if (VSMObj == null) { + if (VSMObj == null) { // Create the VSM record. For now, we aren't using the vsmName field. VSMObj = new CiscoNexusVSMDeviceVO(ipaddress, username, password); Transaction txn = Transaction.currentTxn(); @@ -144,7 +144,7 @@ public abstract class CiscoNexusVSMDeviceManagerImpl extends AdapterBase { throw new CloudRuntimeException(e.getMessage()); } } - + // At this stage, we have a VSM record for sure. Connect the VSM to the cluster Id. long vsmId = _ciscoNexusVSMDeviceDao.getVSMbyIpaddress(ipaddress).getId(); ClusterVSMMapVO connectorObj = new ClusterVSMMapVO(clusterId, vsmId); @@ -157,22 +157,22 @@ public abstract class CiscoNexusVSMDeviceManagerImpl extends AdapterBase { txn.rollback(); throw new CloudRuntimeException(e.getMessage()); } - + // Now, get a list of all the ESXi servers in this cluster. // This is effectively a select * from host where cluster_id=clusterId; // All ESXi servers are stored in the host table, and their resource // type is vmwareresource. - + //List hosts = _resourceMgr.listAllHostsInCluster(clusterId); - + //TODO: Activate the code below if we make the Nexus VSM a separate resource. // Iterate through each of the hosts in this list. Each host has a host id. // Given this host id, we can reconfigure the in-memory resource representing // the host via the agent manager. Thus we inject VSM related information // into each host's resource. Also, we first configure each resource's // entries in the database to contain this VSM information before the injection. - - //for (HostVO host : hosts) { + + //for (HostVO host : hosts) { // Create a host details VO object and write it out for this hostid. //Long hostid = new Long(vsmId); //DetailVO vsmDetail = new DetailVO(host.getId(), "vsmId", hostid.toString()); @@ -193,28 +193,28 @@ public abstract class CiscoNexusVSMDeviceManagerImpl extends AdapterBase { //hostDetails.put(ApiConstants.USERNAME, username); //hostDetails.put(ApiConstants.PASSWORD, password); //_agentMrg.send(host.getId(), ) - + return VSMObj; - + } - + @DB - public boolean deleteCiscoNexusVSM(long vsmId) throws ResourceInUseException { + public boolean deleteCiscoNexusVSM(long vsmId) throws ResourceInUseException { CiscoNexusVSMDeviceVO cisconexusvsm = _ciscoNexusVSMDeviceDao.findById(vsmId); if (cisconexusvsm == null) { // This entry is already not present. Return success. return true; } - + // First, check whether this VSM is part of any non-empty cluster. // Search ClusterVSMMap's table for a list of clusters using this vsmId. - + List clusterList = _clusterVSMDao.listByVSMId(vsmId); - - if (clusterList != null) { + + if (clusterList != null) { for (ClusterVSMMapVO record : clusterList) { // If this cluster id has any hosts in it, fail this operation. - Long clusterId = record.getClusterId(); + Long clusterId = record.getClusterId(); List hosts = _resourceMgr.listAllHostsInCluster(clusterId); if (hosts != null && hosts.size() > 0) { for (Host host: hosts) { @@ -222,26 +222,26 @@ public abstract class CiscoNexusVSMDeviceManagerImpl extends AdapterBase { s_logger.info("Non-empty cluster with id" + clusterId + "still has a host that uses this VSM. Please empty the cluster first"); throw new ResourceInUseException("Non-empty cluster with id" + clusterId + "still has a host that uses this VSM. Please empty the cluster first"); } - } + } } } } - + // Iterate through the cluster list again, this time, delete the VSM. Transaction txn = Transaction.currentTxn(); try { txn.start(); - // Remove the VSM entry in CiscoNexusVSMDeviceVO's table. + // Remove the VSM entry in CiscoNexusVSMDeviceVO's table. _ciscoNexusVSMDeviceDao.remove(vsmId); - // Remove the current record as well from ClusterVSMMapVO's table. + // Remove the current record as well from ClusterVSMMapVO's table. _clusterVSMDao.removeByVsmId(vsmId); // There are no hosts at this stage in the cluster, so we don't need - // to notify any resources or remove host details. - txn.commit(); + // to notify any resources or remove host details. + txn.commit(); } catch (Exception e) { - s_logger.info("Caught exception when trying to delete VSM record.." + e.getMessage()); + s_logger.info("Caught exception when trying to delete VSM record.." + e.getMessage()); throw new CloudRuntimeException("Failed to delete VSM"); - } + } return true; } @@ -249,10 +249,10 @@ public abstract class CiscoNexusVSMDeviceManagerImpl extends AdapterBase { public CiscoNexusVSMDeviceVO enableCiscoNexusVSM(long vsmId) { CiscoNexusVSMDeviceVO cisconexusvsm = _ciscoNexusVSMDeviceDao.findById(vsmId); if (cisconexusvsm == null) { - throw new InvalidParameterValueException("Invalid vsm Id specified"); + throw new InvalidParameterValueException("Invalid vsm Id specified"); } // Else, check if this db record shows that this VSM is enabled or not. - if (cisconexusvsm.getvsmDeviceState() == CiscoNexusVSMDeviceVO.VSMDeviceState.Disabled) { + if (cisconexusvsm.getvsmDeviceState() == CiscoNexusVSMDeviceVO.VSMDeviceState.Disabled) { // it's currently disabled. So change it to enabled and write it out to the db. cisconexusvsm.setVsmDeviceState(CiscoNexusVSMDeviceVO.VSMDeviceState.Enabled); Transaction txn = Transaction.currentTxn(); @@ -265,18 +265,18 @@ public abstract class CiscoNexusVSMDeviceManagerImpl extends AdapterBase { throw new CloudRuntimeException(e.getMessage()); } } - + return cisconexusvsm; } - - @DB + + @DB public CiscoNexusVSMDeviceVO disableCiscoNexusVSM(long vsmId) { CiscoNexusVSMDeviceVO cisconexusvsm = _ciscoNexusVSMDeviceDao.findById(vsmId); if (cisconexusvsm == null) { - throw new InvalidParameterValueException("Invalid vsm Id specified"); + throw new InvalidParameterValueException("Invalid vsm Id specified"); } // Else, check if this db record shows that this VSM is enabled or not. - if (cisconexusvsm.getvsmDeviceState() == CiscoNexusVSMDeviceVO.VSMDeviceState.Enabled) { + if (cisconexusvsm.getvsmDeviceState() == CiscoNexusVSMDeviceVO.VSMDeviceState.Enabled) { // it's currently disabled. So change it to enabled and write it out to the db. cisconexusvsm.setVsmDeviceState(CiscoNexusVSMDeviceVO.VSMDeviceState.Disabled); Transaction txn = Transaction.currentTxn(); @@ -289,15 +289,15 @@ public abstract class CiscoNexusVSMDeviceManagerImpl extends AdapterBase { throw new CloudRuntimeException(e.getMessage()); } } - + return cisconexusvsm; } - + @DB public CiscoNexusVSMDeviceVO getCiscoVSMbyVSMId(long vsmId) { return _ciscoNexusVSMDeviceDao.findById(vsmId); } - + @DB public CiscoNexusVSMDeviceVO getCiscoVSMbyClusId(long clusterId) { ClusterVSMMapVO mapVO = _clusterVSMDao.findByClusterId(clusterId); @@ -309,12 +309,12 @@ public abstract class CiscoNexusVSMDeviceManagerImpl extends AdapterBase { CiscoNexusVSMDeviceVO result = _ciscoNexusVSMDeviceDao.findById(mapVO.getVsmId()); return result; } - + public HostVO createHostVOForConnectedAgent(HostVO host, StartupCommand[] cmd) { // TODO Auto-generated method stub return null; } - + @DB public boolean vliadateVsmCluster(String vsmIp, String vsmUser, String vsmPassword, long clusterId, String clusterName) throws ResourceInUseException { // Check if we're associating a Cisco Nexus VSM with a vmware cluster. @@ -342,7 +342,9 @@ public abstract class CiscoNexusVSMDeviceManagerImpl extends AdapterBase { s_logger.error("Failed to add cluster: specified Nexus VSM is already associated with another cluster"); _clusterDao.remove(clusterId); ResourceInUseException ex = new ResourceInUseException("Failed to add cluster: specified Nexus VSM is already associated with another cluster with specified Id"); - ex.addProxyObject("cluster", clusterList.get(0).getClusterId(), "clusterId"); + // get clusterUuid to report error + ClusterVO cluster = _clusterDao.findById(clusterList.get(0).getClusterId()); + ex.addProxyObject(cluster.getUuid()); throw ex; } } From 72693ea382bd064f4e227faab2f61561b7683149 Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Wed, 9 Jan 2013 17:10:36 -0800 Subject: [PATCH 327/421] server: Fix ApiServer init method, we won't use cfg files and it's not used there Signed-off-by: Rohit Yadav --- server/src/com/cloud/api/ApiServer.java | 9 ++++----- server/src/com/cloud/servlet/CloudStartupServlet.java | 2 +- 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/server/src/com/cloud/api/ApiServer.java b/server/src/com/cloud/api/ApiServer.java index 56cef123e2c..dfb47faa011 100755 --- a/server/src/com/cloud/api/ApiServer.java +++ b/server/src/com/cloud/api/ApiServer.java @@ -166,23 +166,22 @@ public class ApiServer implements HttpRequestHandler { super(); } - public static void initApiServer(String[] apiConfig) { + public static void initApiServer() { if (s_instance == null) { //Injection will create ApiServer and all its fields which have @Inject s_instance = ComponentLocator.inject(ApiServer.class); - s_instance.init(apiConfig); + s_instance.init(); } } public static ApiServer getInstance() { - // Assumption: CloudStartupServlet would initialize ApiServer if (s_instance == null) { - s_logger.fatal("ApiServer instance failed to initialize"); + ApiServer.initApiServer(); } return s_instance; } - public void init(String[] apiConfig) { + public void init() { BaseCmd.setComponents(new ApiResponseHelper()); BaseListCmd.configure(); diff --git a/server/src/com/cloud/servlet/CloudStartupServlet.java b/server/src/com/cloud/servlet/CloudStartupServlet.java index 389bd26bc4b..484c7bf56aa 100755 --- a/server/src/com/cloud/servlet/CloudStartupServlet.java +++ b/server/src/com/cloud/servlet/CloudStartupServlet.java @@ -48,7 +48,7 @@ public class CloudStartupServlet extends HttpServlet implements ServletContextLi s_locator = ComponentLocator.getLocator(ManagementServer.Name); ManagementServer ms = (ManagementServer)ComponentLocator.getComponent(ManagementServer.Name); ms.enableAdminUser("password"); - ApiServer.initApiServer(ms.getPropertiesFiles()); + ApiServer.initApiServer(); } catch (InvalidParameterValueException ipve) { s_logger.error("Exception starting management server ", ipve); throw new ServletException (ipve.getMessage()); From 3dc7626ebc80c5bf87e43fbf341039e027237f27 Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Wed, 9 Jan 2013 17:18:06 -0800 Subject: [PATCH 328/421] api: Comment out @APICommand annotation for api cmd classes that are unknown Signed-off-by: Rohit Yadav --- api/src/com/cloud/api/commands/CreatePrivateNetworkCmd.java | 2 +- api/src/com/cloud/api/commands/DestroyConsoleProxyCmd.java | 2 +- .../cloud/api/commands/ListRecurringSnapshotScheduleCmd.java | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/api/src/com/cloud/api/commands/CreatePrivateNetworkCmd.java b/api/src/com/cloud/api/commands/CreatePrivateNetworkCmd.java index 92c7ac58be0..b140ac75ec3 100644 --- a/api/src/com/cloud/api/commands/CreatePrivateNetworkCmd.java +++ b/api/src/com/cloud/api/commands/CreatePrivateNetworkCmd.java @@ -31,7 +31,7 @@ import com.cloud.exception.ResourceAllocationException; import com.cloud.network.Network; import com.cloud.user.UserContext; -@APICommand(description="Creates a private network", responseObject=NetworkResponse.class) +//@APICommand(description="Creates a private network", responseObject=NetworkResponse.class) public class CreatePrivateNetworkCmd extends BaseAsyncCreateCmd { public static final Logger s_logger = Logger.getLogger(CreatePrivateNetworkCmd.class.getName()); diff --git a/api/src/com/cloud/api/commands/DestroyConsoleProxyCmd.java b/api/src/com/cloud/api/commands/DestroyConsoleProxyCmd.java index 17bafb1918d..80269075744 100644 --- a/api/src/com/cloud/api/commands/DestroyConsoleProxyCmd.java +++ b/api/src/com/cloud/api/commands/DestroyConsoleProxyCmd.java @@ -25,7 +25,7 @@ import com.cloud.event.EventTypes; import com.cloud.user.Account; import com.cloud.user.UserContext; -@APICommand(description="Destroys console proxy", responseObject=SuccessResponse.class) +//@APICommand(description="Destroys console proxy", responseObject=SuccessResponse.class) public class DestroyConsoleProxyCmd extends BaseAsyncCmd { public static final Logger s_logger = Logger.getLogger(DestroyConsoleProxyCmd.class.getName()); diff --git a/api/src/com/cloud/api/commands/ListRecurringSnapshotScheduleCmd.java b/api/src/com/cloud/api/commands/ListRecurringSnapshotScheduleCmd.java index 41f28f93110..709da6af30c 100644 --- a/api/src/com/cloud/api/commands/ListRecurringSnapshotScheduleCmd.java +++ b/api/src/com/cloud/api/commands/ListRecurringSnapshotScheduleCmd.java @@ -27,7 +27,7 @@ import org.apache.cloudstack.api.response.ListResponse; import org.apache.cloudstack.api.response.SnapshotScheduleResponse; import com.cloud.storage.snapshot.SnapshotSchedule; -@APICommand(description="Lists recurring snapshot schedule", responseObject=SnapshotScheduleResponse.class) +//@APICommand(description="Lists recurring snapshot schedule", responseObject=SnapshotScheduleResponse.class) public class ListRecurringSnapshotScheduleCmd extends BaseListCmd { private static final String s_name = "listrecurringsnapshotscheduleresponse"; From 657fb6ac0becd99ea7a1e99e0423c12e9657d0ae Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Wed, 9 Jan 2013 17:19:14 -0800 Subject: [PATCH 329/421] ApiServer: Don't depend on plugin for apiname:cmd class mapping Signed-off-by: Rohit Yadav --- server/src/com/cloud/api/ApiServer.java | 22 ++++++++++------------ 1 file changed, 10 insertions(+), 12 deletions(-) diff --git a/server/src/com/cloud/api/ApiServer.java b/server/src/com/cloud/api/ApiServer.java index dfb47faa011..519908daf25 100755 --- a/server/src/com/cloud/api/ApiServer.java +++ b/server/src/com/cloud/api/ApiServer.java @@ -60,7 +60,6 @@ import org.apache.cloudstack.api.command.user.event.ListEventsCmd; import org.apache.cloudstack.api.command.user.vm.ListVMsCmd; import org.apache.cloudstack.api.command.user.vmgroup.ListVMGroupsCmd; import org.apache.cloudstack.api.command.user.volume.ListVolumesCmd; -import org.apache.cloudstack.discovery.ApiDiscoveryService; import org.apache.commons.codec.binary.Base64; import org.apache.http.client.utils.URLEncodedUtils; import org.apache.http.ConnectionClosedException; @@ -134,8 +133,6 @@ import com.cloud.utils.db.Transaction; import com.cloud.utils.exception.CSExceptionErrorCode; import com.cloud.uuididentity.dao.IdentityDao; -import org.reflections.Reflections; - public class ApiServer implements HttpRequestHandler { private static final Logger s_logger = Logger.getLogger(ApiServer.class.getName()); private static final Logger s_accessLogger = Logger.getLogger("apiserver." + ApiServer.class.getName()); @@ -150,15 +147,13 @@ public class ApiServer implements HttpRequestHandler { @Inject(adapter = APIAccessChecker.class) protected Adapters _apiAccessCheckers; - @Inject(adapter = ApiDiscoveryService.class) - protected Adapters _apiDiscoveryServices; private Account _systemAccount = null; private User _systemUser = null; private static int _workerCount = 0; private static ApiServer s_instance = null; private static final DateFormat _dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ"); - private Map> _apiNameCmdClassMap = new HashMap>(); + private static Map> _apiNameCmdClassMap = new HashMap>(); private static ExecutorService _executor = new ThreadPoolExecutor(10, 150, 60, TimeUnit.SECONDS, new LinkedBlockingQueue(), new NamedThreadFactory("ApiServer")); @@ -202,13 +197,16 @@ public class ApiServer implements HttpRequestHandler { } } - for (ApiDiscoveryService discoveryService: _apiDiscoveryServices) { - _apiNameCmdClassMap.putAll(discoveryService.getApiNameCmdClassMapping()); - } + Set> cmdClasses = ReflectUtil.getClassesWithAnnotation(APICommand.class, + new String[]{"org.apache.cloudstack.api", "com.cloud.api"}); - if (_apiNameCmdClassMap.size() == 0) { - s_logger.fatal("ApiServer failed to generate apiname, cmd class mappings." - + "Please check and enable at least one ApiDiscovery adapter."); + for(Class cmdClass: cmdClasses) { + String apiName = cmdClass.getAnnotation(APICommand.class).name(); + if (_apiNameCmdClassMap.containsKey(apiName)) { + s_logger.error("API Cmd class " + cmdClass.getName() + " has non-unique apiname" + apiName); + continue; + } + _apiNameCmdClassMap.put(apiName, cmdClass); } encodeApiResponse = Boolean.valueOf(configDao.getValue(Config.EncodeApiResponse.key())); From d13cc7e7e49a54e2fdd177c4fe4ce45739b4736d Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Wed, 9 Jan 2013 17:19:49 -0800 Subject: [PATCH 330/421] ApiDiscoveryService: Use only as pluggable service Remove usage and impl as adapter. We have duplicate code that generates apiname:cmd class maps which is unavoidable right now as: - Plugin should not depend on ApiServer or any other component - cloud-utils cannot depend on cloud-api for the APICommand annotation - Use java reflect to create a static method in cloud-utils that does the job would be unsafe. Signed-off-by: Rohit Yadav --- .../discovery/ApiDiscoveryService.java | 6 +-- client/tomcatconf/components.xml.in | 3 -- .../discovery/ApiDiscoveryServiceImpl.java | 51 +++++-------------- 3 files changed, 14 insertions(+), 46 deletions(-) diff --git a/api/src/org/apache/cloudstack/discovery/ApiDiscoveryService.java b/api/src/org/apache/cloudstack/discovery/ApiDiscoveryService.java index 12206949db3..96ea3ee4d34 100644 --- a/api/src/org/apache/cloudstack/discovery/ApiDiscoveryService.java +++ b/api/src/org/apache/cloudstack/discovery/ApiDiscoveryService.java @@ -16,14 +16,10 @@ // under the License. package org.apache.cloudstack.discovery; -import com.cloud.utils.component.Adapter; import com.cloud.utils.component.PluggableService; import org.apache.cloudstack.api.BaseResponse; import org.apache.cloudstack.api.response.ListResponse; -import java.util.Map; - -public interface ApiDiscoveryService extends Adapter, PluggableService { +public interface ApiDiscoveryService extends PluggableService { ListResponse listApis(); - Map> getApiNameCmdClassMapping(); } diff --git a/client/tomcatconf/components.xml.in b/client/tomcatconf/components.xml.in index b9feed15a88..b779c860cc2 100755 --- a/client/tomcatconf/components.xml.in +++ b/client/tomcatconf/components.xml.in @@ -56,9 +56,6 @@ under the License. - - - diff --git a/plugins/api/discovery/src/org/apache/cloudstack/discovery/ApiDiscoveryServiceImpl.java b/plugins/api/discovery/src/org/apache/cloudstack/discovery/ApiDiscoveryServiceImpl.java index 5363e559a5f..ea6b206fa44 100644 --- a/plugins/api/discovery/src/org/apache/cloudstack/discovery/ApiDiscoveryServiceImpl.java +++ b/plugins/api/discovery/src/org/apache/cloudstack/discovery/ApiDiscoveryServiceImpl.java @@ -17,7 +17,6 @@ package org.apache.cloudstack.discovery; import com.cloud.utils.ReflectUtil; -import com.cloud.utils.component.AdapterBase; import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.BaseAsyncCmd; @@ -30,7 +29,6 @@ import org.apache.cloudstack.api.response.ListResponse; import org.apache.log4j.Logger; import javax.ejb.Local; -import javax.naming.ConfigurationException; import java.lang.reflect.Field; import java.util.ArrayList; import java.util.HashMap; @@ -39,36 +37,28 @@ import java.util.Map; import java.util.Set; @Local(value = ApiDiscoveryService.class) -public class ApiDiscoveryServiceImpl extends AdapterBase implements ApiDiscoveryService { - +public class ApiDiscoveryServiceImpl implements ApiDiscoveryService { private static final Logger s_logger = Logger.getLogger(ApiDiscoveryServiceImpl.class); - private Map> _apiNameCmdClassMap; - private ListResponse _discoveryResponse; + + private ListResponse _discoveryResponse = new ListResponse(); + + private Map> _apiNameCmdClassMap = new HashMap>(); protected ApiDiscoveryServiceImpl() { super(); + generateApiNameCmdClassMap(); + cacheListApiResponse(); } - private void generateApiNameCmdClassMapping() { - _apiNameCmdClassMap = new HashMap>(); - Set> cmdClasses = ReflectUtil.getClassesWithAnnotation(APICommand.class, new String[]{"org.apache.cloudstack.api", "com.cloud.api"}); + private void generateApiNameCmdClassMap() { + Set> cmdClasses = ReflectUtil.getClassesWithAnnotation(APICommand.class, + new String[]{"org.apache.cloudstack.api", "com.cloud.api"}); - for(Class cmdClass: cmdClasses) { - String apiName = cmdClass.getAnnotation(APICommand.class).name(); - if (_apiNameCmdClassMap.containsKey(apiName)) { - s_logger.error("API Cmd class " + cmdClass.getName() + " has non-unique apiname" + apiName); - continue; - } - _apiNameCmdClassMap.put(apiName, cmdClass); - } + for(Class cmdClass: cmdClasses) + _apiNameCmdClassMap.put(cmdClass.getAnnotation(APICommand.class).name(), cmdClass); } - private void precacheListApiResponse() { - - if(_apiNameCmdClassMap == null) - return; - - _discoveryResponse = new ListResponse(); + private void cacheListApiResponse() { List apiDiscoveryResponses = new ArrayList(); @@ -117,21 +107,6 @@ public class ApiDiscoveryServiceImpl extends AdapterBase implements ApiDiscovery _discoveryResponse.setResponses(apiDiscoveryResponses); } - @Override - public boolean configure(String name, Map params) - throws ConfigurationException { - super.configure(name, params); - - generateApiNameCmdClassMapping(); - precacheListApiResponse(); - - return true; - } - - public Map> getApiNameCmdClassMapping() { - return _apiNameCmdClassMap; - } - @Override public ListResponse listApis() { return _discoveryResponse; From 7f8262d45e9f2cdaa5d8f1aee0df61dab9573dd7 Mon Sep 17 00:00:00 2001 From: Min Chen Date: Wed, 9 Jan 2013 17:40:58 -0800 Subject: [PATCH 331/421] Remove IdentityProxy and IdentityTypeAdapter class. Signed-off-by: Min Chen --- .../api/commands/CreatePrivateNetworkCmd.java | 5 +- .../com/cloud/exception/CloudException.java | 2 - .../cloudstack/api/BaseAsyncCreateCmd.java | 15 +++- .../org/apache/cloudstack/api/BaseCmd.java | 2 - .../apache/cloudstack/api/BaseResponse.java | 6 +- .../admin/autoscale/CreateCounterCmd.java | 6 +- .../network/AddNetworkServiceProviderCmd.java | 5 +- .../network/CreatePhysicalNetworkCmd.java | 5 +- .../router/CreateVirtualRouterElementCmd.java | 6 +- .../admin/usage/AddTrafficTypeCmd.java | 5 +- .../admin/vpc/CreatePrivateGatewayCmd.java | 5 +- .../admin/vpc/CreateVPCOfferingCmd.java | 5 +- .../user/address/AssociateIPAddrCmd.java | 4 +- .../autoscale/CreateAutoScalePolicyCmd.java | 5 +- .../autoscale/CreateAutoScaleVmGroupCmd.java | 5 +- .../CreateAutoScaleVmProfileCmd.java | 6 +- .../user/autoscale/CreateConditionCmd.java | 6 +- .../user/firewall/CreateFirewallRuleCmd.java | 4 +- .../firewall/CreatePortForwardingRuleCmd.java | 4 +- .../CreateLBStickinessPolicyCmd.java | 5 +- .../CreateLoadBalancerRuleCmd.java | 4 +- .../user/nat/CreateIpForwardingRuleCmd.java | 4 +- .../user/network/CreateNetworkACLCmd.java | 5 +- .../user/project/CreateProjectCmd.java | 4 +- .../user/snapshot/CreateSnapshotCmd.java | 4 +- .../user/template/CreateTemplateCmd.java | 7 +- .../api/command/user/vm/DeployVMCmd.java | 4 +- .../command/user/volume/CreateVolumeCmd.java | 4 +- .../user/vpc/CreateStaticRouteCmd.java | 5 +- .../api/command/user/vpc/CreateVPCCmd.java | 6 +- .../api/command/user/vpn/AddVpnUserCmd.java | 4 +- .../user/vpn/CreateRemoteAccessVpnCmd.java | 9 ++- .../user/vpn/CreateVpnConnectionCmd.java | 4 +- .../user/vpn/CreateVpnCustomerGatewayCmd.java | 3 - .../command/user/vpn/CreateVpnGatewayCmd.java | 4 - .../user/vpn/DeleteVpnConnectionCmd.java | 3 - .../user/vpn/DeleteVpnCustomerGatewayCmd.java | 3 - .../command/user/vpn/DeleteVpnGatewayCmd.java | 3 - .../user/vpn/ResetVpnConnectionCmd.java | 3 - .../user/vpn/UpdateVpnCustomerGatewayCmd.java | 6 +- .../api/response/CapacityResponse.java | 1 - .../api/response/CreateCmdResponse.java | 18 ++--- .../api/response/ResourceCountResponse.java | 1 - .../cloudstack/api/response/S3Response.java | 9 +-- server/src/com/cloud/api/ApiGsonHelper.java | 2 - .../com/cloud/api/ApiResponseGsonHelper.java | 4 +- .../src/com/cloud/api/ApiResponseHelper.java | 2 +- server/src/com/cloud/api/ApiServer.java | 9 ++- .../com/cloud/api/IdentityTypeAdapter.java | 80 ------------------- .../api/response/ApiResponseSerializer.java | 46 +++-------- .../cloud/server/ConfigurationServerImpl.java | 2 - utils/src/com/cloud/utils/IdentityProxy.java | 60 -------------- .../exception/RuntimeCloudException.java | 1 - 53 files changed, 84 insertions(+), 346 deletions(-) delete mode 100644 server/src/com/cloud/api/IdentityTypeAdapter.java delete mode 100644 utils/src/com/cloud/utils/IdentityProxy.java diff --git a/api/src/com/cloud/api/commands/CreatePrivateNetworkCmd.java b/api/src/com/cloud/api/commands/CreatePrivateNetworkCmd.java index b140ac75ec3..263f023b3e5 100644 --- a/api/src/com/cloud/api/commands/CreatePrivateNetworkCmd.java +++ b/api/src/com/cloud/api/commands/CreatePrivateNetworkCmd.java @@ -153,6 +153,7 @@ public class CreatePrivateNetworkCmd extends BaseAsyncCreateCmd { if (result != null) { this.setEntityId(result.getId()); + this.setEntityUuid(result.getUuid()); } else { throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to create a Private network"); } @@ -190,8 +191,4 @@ public class CreatePrivateNetworkCmd extends BaseAsyncCreateCmd { } - @Override - public String getEntityTable() { - return "networks"; - } } diff --git a/api/src/com/cloud/exception/CloudException.java b/api/src/com/cloud/exception/CloudException.java index 8f1fa37aac6..036cb1b8adc 100644 --- a/api/src/com/cloud/exception/CloudException.java +++ b/api/src/com/cloud/exception/CloudException.java @@ -16,10 +16,8 @@ // under the License. package com.cloud.exception; -import com.cloud.utils.IdentityProxy; import java.util.ArrayList; import com.cloud.utils.exception.CSExceptionErrorCode; -import com.cloud.utils.AnnotationHelper; /** * by the API response serializer. Any exceptions that are thrown by diff --git a/api/src/org/apache/cloudstack/api/BaseAsyncCreateCmd.java b/api/src/org/apache/cloudstack/api/BaseAsyncCreateCmd.java index ad9f4c6b31f..1f2d3f17beb 100644 --- a/api/src/org/apache/cloudstack/api/BaseAsyncCreateCmd.java +++ b/api/src/org/apache/cloudstack/api/BaseAsyncCreateCmd.java @@ -25,6 +25,8 @@ public abstract class BaseAsyncCreateCmd extends BaseAsyncCmd { @Parameter(name = "id", type = CommandType.LONG) private Long id; + private String uuid; + public abstract void create() throws ResourceAllocationException; public Long getEntityId() { @@ -35,14 +37,19 @@ public abstract class BaseAsyncCreateCmd extends BaseAsyncCmd { this.id = id; } - public abstract String getEntityTable(); + public String getEntityUuid() { + return uuid; + } - public String getResponse(long jobId, long objectId, String objectEntityTable) { + public void setEntityUuid(String uuid) { + this.uuid = uuid; + } + + public String getResponse(long jobId, String objectUuid) { CreateCmdResponse response = new CreateCmdResponse(); AsyncJob job = _entityMgr.findById(AsyncJob.class, jobId); response.setJobId(job.getUuid()); - response.setId(objectId); - response.setIdEntityTable(objectEntityTable); + response.setId(objectUuid); response.setResponseName(getCommandName()); return _responseGenerator.toSerializedString(response, getResponseType()); } diff --git a/api/src/org/apache/cloudstack/api/BaseCmd.java b/api/src/org/apache/cloudstack/api/BaseCmd.java index d964e70b84f..3399784d2a2 100644 --- a/api/src/org/apache/cloudstack/api/BaseCmd.java +++ b/api/src/org/apache/cloudstack/api/BaseCmd.java @@ -19,7 +19,6 @@ package org.apache.cloudstack.api; import java.text.DateFormat; import java.text.SimpleDateFormat; -import java.util.ArrayList; import java.util.Date; import java.util.HashMap; import java.util.List; @@ -64,7 +63,6 @@ import com.cloud.user.Account; import com.cloud.user.AccountService; import com.cloud.user.DomainService; import com.cloud.user.ResourceLimitService; -import com.cloud.utils.IdentityProxy; import com.cloud.utils.Pair; import com.cloud.utils.component.ComponentLocator; import com.cloud.vm.BareMetalVmService; diff --git a/api/src/org/apache/cloudstack/api/BaseResponse.java b/api/src/org/apache/cloudstack/api/BaseResponse.java index 28ca6b8c2de..01f1be3253b 100644 --- a/api/src/org/apache/cloudstack/api/BaseResponse.java +++ b/api/src/org/apache/cloudstack/api/BaseResponse.java @@ -17,7 +17,6 @@ package org.apache.cloudstack.api; import org.apache.cloudstack.api.ApiConstants; -import com.cloud.utils.IdentityProxy; import org.apache.cloudstack.api.ResponseObject; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; @@ -46,6 +45,7 @@ public abstract class BaseResponse implements ResponseObject { this.objectName = objectName; } + @Override public String getObjectId() { return null; } @@ -56,18 +56,22 @@ public abstract class BaseResponse implements ResponseObject { @SerializedName(ApiConstants.JOB_STATUS) @Param(description="the current status of the latest async job acting on this object") private Integer jobStatus; + @Override public String getJobId() { return jobId; } + @Override public void setJobId(String jobId) { this.jobId = jobId; } + @Override public Integer getJobStatus() { return jobStatus; } + @Override public void setJobStatus(Integer jobStatus) { this.jobStatus = jobStatus; } diff --git a/api/src/org/apache/cloudstack/api/command/admin/autoscale/CreateCounterCmd.java b/api/src/org/apache/cloudstack/api/command/admin/autoscale/CreateCounterCmd.java index 7369a6f6d08..a119d0f44bf 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/autoscale/CreateCounterCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/autoscale/CreateCounterCmd.java @@ -81,6 +81,7 @@ public class CreateCounterCmd extends BaseAsyncCreateCmd { if (ctr != null) { this.setEntityId(ctr.getId()); + this.setEntityUuid(ctr.getUuid()); CounterResponse response = _responseGenerator.createCounterResponse(ctr); response.setResponseName(getCommandName()); this.setResponseObject(response); @@ -113,8 +114,5 @@ public class CreateCounterCmd extends BaseAsyncCreateCmd { return Account.ACCOUNT_ID_SYSTEM; } - @Override - public String getEntityTable() { - return "counter"; - } + } diff --git a/api/src/org/apache/cloudstack/api/command/admin/network/AddNetworkServiceProviderCmd.java b/api/src/org/apache/cloudstack/api/command/admin/network/AddNetworkServiceProviderCmd.java index b6518d8eb59..6d4b962d4a1 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/network/AddNetworkServiceProviderCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/network/AddNetworkServiceProviderCmd.java @@ -59,10 +59,6 @@ public class AddNetworkServiceProviderCmd extends BaseAsyncCreateCmd { @Parameter(name=ApiConstants.SERVICE_LIST, type=CommandType.LIST, collectionType = CommandType.STRING, description="the list of services to be enabled for this physical network service provider") private List enabledServices; - @Override - public String getEntityTable() { - return "physical_network_service_providers"; - } ///////////////////////////////////////////////////// /////////////////// Accessors /////////////////////// @@ -116,6 +112,7 @@ public class AddNetworkServiceProviderCmd extends BaseAsyncCreateCmd { PhysicalNetworkServiceProvider result = _networkService.addProviderToPhysicalNetwork(getPhysicalNetworkId(), getProviderName(), getDestinationPhysicalNetworkId(), getEnabledServices()); if (result != null) { setEntityId(result.getId()); + setEntityUuid(result.getUuid()); } else { throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to add service provider entity to physical network"); } diff --git a/api/src/org/apache/cloudstack/api/command/admin/network/CreatePhysicalNetworkCmd.java b/api/src/org/apache/cloudstack/api/command/admin/network/CreatePhysicalNetworkCmd.java index dd3f3231351..f56ae7dbf50 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/network/CreatePhysicalNetworkCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/network/CreatePhysicalNetworkCmd.java @@ -79,10 +79,6 @@ public class CreatePhysicalNetworkCmd extends BaseAsyncCreateCmd { return tags; } - @Override - public String getEntityTable() { - return "physical_network"; - } public Long getZoneId() { return zoneId; @@ -164,6 +160,7 @@ public class CreatePhysicalNetworkCmd extends BaseAsyncCreateCmd { PhysicalNetwork result = _networkService.createPhysicalNetwork(getZoneId(),getVlan(),getNetworkSpeed(), getIsolationMethods(),getBroadcastDomainRange(),getDomainId(), getTags(), getNetworkName()); if (result != null) { setEntityId(result.getId()); + setEntityUuid(result.getUuid()); } else { throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to create physical network entity"); } diff --git a/api/src/org/apache/cloudstack/api/command/admin/router/CreateVirtualRouterElementCmd.java b/api/src/org/apache/cloudstack/api/command/admin/router/CreateVirtualRouterElementCmd.java index 545218f0364..f6a7b744ca3 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/router/CreateVirtualRouterElementCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/router/CreateVirtualRouterElementCmd.java @@ -53,10 +53,7 @@ public class CreateVirtualRouterElementCmd extends BaseAsyncCreateCmd { this.nspId = nspId; } - @Override - public String getEntityTable() { - return "virtual_router_providers"; - } + public Long getNspId() { return nspId; @@ -94,6 +91,7 @@ public class CreateVirtualRouterElementCmd extends BaseAsyncCreateCmd { VirtualRouterProvider result = _service.addElement(getNspId(), VirtualRouterProviderType.VirtualRouter); if (result != null) { setEntityId(result.getId()); + setEntityUuid(result.getUuid()); } else { throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to add Virtual Router entity to physical network"); } diff --git a/api/src/org/apache/cloudstack/api/command/admin/usage/AddTrafficTypeCmd.java b/api/src/org/apache/cloudstack/api/command/admin/usage/AddTrafficTypeCmd.java index 1759ff7e8e6..5dca9d2d4c1 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/usage/AddTrafficTypeCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/usage/AddTrafficTypeCmd.java @@ -66,10 +66,6 @@ public class AddTrafficTypeCmd extends BaseAsyncCreateCmd { /////////////////// Accessors /////////////////////// ///////////////////////////////////////////////////// - @Override - public String getEntityTable() { - return "physical_network_traffic_types"; - } public Long getPhysicalNetworkId() { return physicalNetworkId; @@ -136,6 +132,7 @@ public class AddTrafficTypeCmd extends BaseAsyncCreateCmd { PhysicalNetworkTrafficType result = _networkService.addTrafficTypeToPhysicalNetwork(getPhysicalNetworkId(), getTrafficType(), getXenLabel(), getKvmLabel(), getVmwareLabel(), getSimulatorLabel(), getVlan()); if (result != null) { setEntityId(result.getId()); + setEntityUuid(result.getUuid()); } else { throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to add traffic type to physical network"); } diff --git a/api/src/org/apache/cloudstack/api/command/admin/vpc/CreatePrivateGatewayCmd.java b/api/src/org/apache/cloudstack/api/command/admin/vpc/CreatePrivateGatewayCmd.java index 7950b877cec..5bb76ab034b 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/vpc/CreatePrivateGatewayCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/vpc/CreatePrivateGatewayCmd.java @@ -123,6 +123,7 @@ public class CreatePrivateGatewayCmd extends BaseAsyncCreateCmd { if (result != null) { this.setEntityId(result.getId()); + this.setEntityUuid(result.getUuid()); } else { throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to create private gateway"); } @@ -156,10 +157,6 @@ public class CreatePrivateGatewayCmd extends BaseAsyncCreateCmd { return "creating private gateway"; } - @Override - public String getEntityTable() { - return "vpc_gateways"; - } @Override diff --git a/api/src/org/apache/cloudstack/api/command/admin/vpc/CreateVPCOfferingCmd.java b/api/src/org/apache/cloudstack/api/command/admin/vpc/CreateVPCOfferingCmd.java index a0abe99f826..273f7c05233 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/vpc/CreateVPCOfferingCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/vpc/CreateVPCOfferingCmd.java @@ -70,6 +70,7 @@ public class CreateVPCOfferingCmd extends BaseAsyncCreateCmd{ VpcOffering vpcOff = _vpcService.createVpcOffering(getVpcOfferingName(), getDisplayText(), getSupportedServices()); if (vpcOff != null) { this.setEntityId(vpcOff.getId()); + this.setEntityUuid(vpcOff.getUuid()); } else { throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to create a VPC offering"); } @@ -87,10 +88,6 @@ public class CreateVPCOfferingCmd extends BaseAsyncCreateCmd{ } } - @Override - public String getEntityTable() { - return "vpc_offerings"; - } @Override public String getEventType() { diff --git a/api/src/org/apache/cloudstack/api/command/user/address/AssociateIPAddrCmd.java b/api/src/org/apache/cloudstack/api/command/user/address/AssociateIPAddrCmd.java index 7d4e44bb507..024ba74e8b4 100644 --- a/api/src/org/apache/cloudstack/api/command/user/address/AssociateIPAddrCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/address/AssociateIPAddrCmd.java @@ -87,9 +87,6 @@ public class AssociateIPAddrCmd extends BaseAsyncCreateCmd { /////////////////// Accessors /////////////////////// ///////////////////////////////////////////////////// - public String getEntityTable() { - return "user_ip_address"; - } public String getAccountName() { if (accountName != null) { @@ -220,6 +217,7 @@ public class AssociateIPAddrCmd extends BaseAsyncCreateCmd { if (ip != null) { this.setEntityId(ip.getId()); + this.setEntityUuid(ip.getUuid()); } else { throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to allocate ip address"); } diff --git a/api/src/org/apache/cloudstack/api/command/user/autoscale/CreateAutoScalePolicyCmd.java b/api/src/org/apache/cloudstack/api/command/user/autoscale/CreateAutoScalePolicyCmd.java index db3aaa6dc5d..e92721d77bf 100644 --- a/api/src/org/apache/cloudstack/api/command/user/autoscale/CreateAutoScalePolicyCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/autoscale/CreateAutoScalePolicyCmd.java @@ -62,10 +62,6 @@ public class CreateAutoScalePolicyCmd extends BaseAsyncCreateCmd { private Long conditionDomainId; private Long conditionAccountId; - @Override - public String getEntityTable() { - return "autoscale_policies"; - } public int getDuration() { return duration; @@ -159,6 +155,7 @@ public class CreateAutoScalePolicyCmd extends BaseAsyncCreateCmd { AutoScalePolicy result = _autoScaleService.createAutoScalePolicy(this); if (result != null) { this.setEntityId(result.getId()); + this.setEntityUuid(result.getUuid()); } else { throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to create AutoScale Policy"); } diff --git a/api/src/org/apache/cloudstack/api/command/user/autoscale/CreateAutoScaleVmGroupCmd.java b/api/src/org/apache/cloudstack/api/command/user/autoscale/CreateAutoScaleVmGroupCmd.java index 6297888f5d3..e3d47a09c7d 100644 --- a/api/src/org/apache/cloudstack/api/command/user/autoscale/CreateAutoScaleVmGroupCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/autoscale/CreateAutoScaleVmGroupCmd.java @@ -72,10 +72,6 @@ public class CreateAutoScaleVmGroupCmd extends BaseAsyncCreateCmd { // ///////////////// Accessors /////////////////////// // /////////////////////////////////////////////////// - @Override - public String getEntityTable() { - return "autoscale_vmgroups"; - } public int getMinMembers() { return minMembers; @@ -161,6 +157,7 @@ public class CreateAutoScaleVmGroupCmd extends BaseAsyncCreateCmd { AutoScaleVmGroup result = _autoScaleService.createAutoScaleVmGroup(this); if (result != null) { this.setEntityId(result.getId()); + this.setEntityUuid(result.getUuid()); } else { throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to create Autoscale Vm Group"); } diff --git a/api/src/org/apache/cloudstack/api/command/user/autoscale/CreateAutoScaleVmProfileCmd.java b/api/src/org/apache/cloudstack/api/command/user/autoscale/CreateAutoScaleVmProfileCmd.java index daa48501c53..25bb03b778f 100644 --- a/api/src/org/apache/cloudstack/api/command/user/autoscale/CreateAutoScaleVmProfileCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/autoscale/CreateAutoScaleVmProfileCmd.java @@ -86,10 +86,7 @@ public class CreateAutoScaleVmProfileCmd extends BaseAsyncCreateCmd { private Long domainId; private Long accountId; - @Override - public String getEntityTable() { - return "autoscale_vmprofiles"; - } + public Long getDomainId() { if (domainId == null) { @@ -232,6 +229,7 @@ public class CreateAutoScaleVmProfileCmd extends BaseAsyncCreateCmd { AutoScaleVmProfile result = _autoScaleService.createAutoScaleVmProfile(this); if (result != null) { this.setEntityId(result.getId()); + this.setEntityUuid(result.getUuid()); } else { throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to create Autoscale Vm Profile"); } diff --git a/api/src/org/apache/cloudstack/api/command/user/autoscale/CreateConditionCmd.java b/api/src/org/apache/cloudstack/api/command/user/autoscale/CreateConditionCmd.java index a9524714ffa..58926f2a4ff 100644 --- a/api/src/org/apache/cloudstack/api/command/user/autoscale/CreateConditionCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/autoscale/CreateConditionCmd.java @@ -72,6 +72,7 @@ public class CreateConditionCmd extends BaseAsyncCreateCmd { if (condition != null) { this.setEntityId(condition.getId()); + this.setEntityUuid(condition.getUuid()); } else { throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to create condition."); } @@ -146,8 +147,5 @@ public class CreateConditionCmd extends BaseAsyncCreateCmd { return accountId; } - @Override - public String getEntityTable() { - return "conditions"; - } + } diff --git a/api/src/org/apache/cloudstack/api/command/user/firewall/CreateFirewallRuleCmd.java b/api/src/org/apache/cloudstack/api/command/user/firewall/CreateFirewallRuleCmd.java index 803301febe9..7039b417ced 100644 --- a/api/src/org/apache/cloudstack/api/command/user/firewall/CreateFirewallRuleCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/firewall/CreateFirewallRuleCmd.java @@ -80,9 +80,6 @@ public class CreateFirewallRuleCmd extends BaseAsyncCreateCmd implements Firewal // ///////////////// Accessors /////////////////////// // /////////////////////////////////////////////////// - public String getEntityTable() { - return "firewall_rules"; - } public Long getIpAddressId() { return ipAddressId; @@ -242,6 +239,7 @@ public class CreateFirewallRuleCmd extends BaseAsyncCreateCmd implements Firewal try { FirewallRule result = _firewallService.createFirewallRule(this); setEntityId(result.getId()); + setEntityUuid(result.getUuid()); } catch (NetworkRuleConflictException ex) { s_logger.info("Network rule conflict: " + ex.getMessage()); s_logger.trace("Network Rule Conflict: ", ex); diff --git a/api/src/org/apache/cloudstack/api/command/user/firewall/CreatePortForwardingRuleCmd.java b/api/src/org/apache/cloudstack/api/command/user/firewall/CreatePortForwardingRuleCmd.java index ecccf032ace..1feefde9a1a 100644 --- a/api/src/org/apache/cloudstack/api/command/user/firewall/CreatePortForwardingRuleCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/firewall/CreatePortForwardingRuleCmd.java @@ -94,9 +94,6 @@ public class CreatePortForwardingRuleCmd extends BaseAsyncCreateCmd implements P // ///////////////// Accessors /////////////////////// // /////////////////////////////////////////////////// - public String getEntityTable() { - return "firewall_rules"; - } public Long getIpAddressId() { return ipAddressId; @@ -301,6 +298,7 @@ public class CreatePortForwardingRuleCmd extends BaseAsyncCreateCmd implements P try { PortForwardingRule result = _rulesService.createPortForwardingRule(this, virtualMachineId, getOpenFirewall()); setEntityId(result.getId()); + setEntityUuid(result.getUuid()); } catch (NetworkRuleConflictException ex) { s_logger.info("Network rule conflict: " , ex); s_logger.trace("Network Rule Conflict: ", ex); diff --git a/api/src/org/apache/cloudstack/api/command/user/loadbalancer/CreateLBStickinessPolicyCmd.java b/api/src/org/apache/cloudstack/api/command/user/loadbalancer/CreateLBStickinessPolicyCmd.java index dc80d312769..c01e138c1d1 100644 --- a/api/src/org/apache/cloudstack/api/command/user/loadbalancer/CreateLBStickinessPolicyCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/loadbalancer/CreateLBStickinessPolicyCmd.java @@ -91,9 +91,7 @@ public class CreateLBStickinessPolicyCmd extends BaseAsyncCreateCmd { return paramList; } - public String getEntityTable() { - return "firewall_rules"; - } + // /////////////////////////////////////////////////// // ///////////// API Implementation/////////////////// // /////////////////////////////////////////////////// @@ -141,6 +139,7 @@ public class CreateLBStickinessPolicyCmd extends BaseAsyncCreateCmd { try { StickinessPolicy result = _lbService.createLBStickinessPolicy(this); this.setEntityId(result.getId()); + this.setEntityUuid(result.getUuid()); } catch (NetworkRuleConflictException e) { s_logger.warn("Exception: ", e); throw new ServerApiException(BaseCmd.NETWORK_RULE_CONFLICT_ERROR, e.getMessage()); diff --git a/api/src/org/apache/cloudstack/api/command/user/loadbalancer/CreateLoadBalancerRuleCmd.java b/api/src/org/apache/cloudstack/api/command/user/loadbalancer/CreateLoadBalancerRuleCmd.java index 4aacc8e19b2..4e76a6b676f 100644 --- a/api/src/org/apache/cloudstack/api/command/user/loadbalancer/CreateLoadBalancerRuleCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/loadbalancer/CreateLoadBalancerRuleCmd.java @@ -120,9 +120,6 @@ public class CreateLoadBalancerRuleCmd extends BaseAsyncCreateCmd /*implements return privatePort; } - public String getEntityTable() { - return "firewall_rules"; - } public Long getSourceIpAddressId() { if (publicIpId != null) { @@ -283,6 +280,7 @@ public class CreateLoadBalancerRuleCmd extends BaseAsyncCreateCmd /*implements try { LoadBalancer result = _lbService.createLoadBalancerRule(this, getOpenFirewall()); this.setEntityId(result.getId()); + this.setEntityUuid(result.getUuid()); } catch (NetworkRuleConflictException e) { s_logger.warn("Exception: ", e); throw new ServerApiException(BaseCmd.NETWORK_RULE_CONFLICT_ERROR, e.getMessage()); diff --git a/api/src/org/apache/cloudstack/api/command/user/nat/CreateIpForwardingRuleCmd.java b/api/src/org/apache/cloudstack/api/command/user/nat/CreateIpForwardingRuleCmd.java index e612b84c835..1ce3458dde3 100644 --- a/api/src/org/apache/cloudstack/api/command/user/nat/CreateIpForwardingRuleCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/nat/CreateIpForwardingRuleCmd.java @@ -75,9 +75,6 @@ public class CreateIpForwardingRuleCmd extends BaseAsyncCreateCmd implements Sta /////////////////// Accessors /////////////////////// ///////////////////////////////////////////////////// - public String getEntityTable() { - return "firewall_rules"; - } public Long getIpAddressId() { return ipAddressId; @@ -151,6 +148,7 @@ public class CreateIpForwardingRuleCmd extends BaseAsyncCreateCmd implements Sta try { StaticNatRule rule = _rulesService.createStaticNatRule(this, getOpenFirewall()); this.setEntityId(rule.getId()); + this.setEntityUuid(rule.getUuid()); } catch (NetworkRuleConflictException e) { s_logger.info("Unable to create Static Nat Rule due to ", e); throw new ServerApiException(BaseCmd.NETWORK_RULE_CONFLICT_ERROR, e.getMessage()); diff --git a/api/src/org/apache/cloudstack/api/command/user/network/CreateNetworkACLCmd.java b/api/src/org/apache/cloudstack/api/command/user/network/CreateNetworkACLCmd.java index e2aba5b321e..16843b56d67 100644 --- a/api/src/org/apache/cloudstack/api/command/user/network/CreateNetworkACLCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/network/CreateNetworkACLCmd.java @@ -86,10 +86,6 @@ public class CreateNetworkACLCmd extends BaseAsyncCreateCmd implements FirewallR // ///////////////// Accessors /////////////////////// // /////////////////////////////////////////////////// - public String getEntityTable() { - return "firewall_rules"; - } - public Long getIpAddressId() { return null; } @@ -262,6 +258,7 @@ public class CreateNetworkACLCmd extends BaseAsyncCreateCmd implements FirewallR try { FirewallRule result = _networkACLService.createNetworkACL(this); setEntityId(result.getId()); + setEntityUuid(result.getUuid()); } catch (NetworkRuleConflictException ex) { s_logger.info("Network rule conflict: " + ex.getMessage()); s_logger.trace("Network Rule Conflict: ", ex); diff --git a/api/src/org/apache/cloudstack/api/command/user/project/CreateProjectCmd.java b/api/src/org/apache/cloudstack/api/command/user/project/CreateProjectCmd.java index 9500a972b36..865f7a0aa99 100644 --- a/api/src/org/apache/cloudstack/api/command/user/project/CreateProjectCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/project/CreateProjectCmd.java @@ -56,9 +56,6 @@ public class CreateProjectCmd extends BaseAsyncCreateCmd { // ///////////////// Accessors /////////////////////// // /////////////////////////////////////////////////// - public String getEntityTable() { - return "projects"; - } public String getAccountName() { if (accountName != null) { @@ -127,6 +124,7 @@ public class CreateProjectCmd extends BaseAsyncCreateCmd { Project project = _projectService.createProject(getName(), getDisplayText(), getAccountName(), getDomainId()); if (project != null) { this.setEntityId(project.getId()); + this.setEntityUuid(project.getUuid()); } else { throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to create a project"); } diff --git a/api/src/org/apache/cloudstack/api/command/user/snapshot/CreateSnapshotCmd.java b/api/src/org/apache/cloudstack/api/command/user/snapshot/CreateSnapshotCmd.java index 33469ac4882..14f46540cc3 100644 --- a/api/src/org/apache/cloudstack/api/command/user/snapshot/CreateSnapshotCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/snapshot/CreateSnapshotCmd.java @@ -65,9 +65,6 @@ public class CreateSnapshotCmd extends BaseAsyncCreateCmd { // ///////////////// Accessors /////////////////////// // /////////////////////////////////////////////////// - public String getEntityTable() { - return "snapshots"; - } public String getAccountName() { return accountName; @@ -153,6 +150,7 @@ public class CreateSnapshotCmd extends BaseAsyncCreateCmd { Snapshot snapshot = _snapshotService.allocSnapshot(getVolumeId(), getPolicyId()); if (snapshot != null) { this.setEntityId(snapshot.getId()); + this.setEntityUuid(snapshot.getUuid()); } else { throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to create snapshot"); } diff --git a/api/src/org/apache/cloudstack/api/command/user/template/CreateTemplateCmd.java b/api/src/org/apache/cloudstack/api/command/user/template/CreateTemplateCmd.java index 65cc8b9e9a4..e72b49b4e4d 100644 --- a/api/src/org/apache/cloudstack/api/command/user/template/CreateTemplateCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/template/CreateTemplateCmd.java @@ -102,9 +102,6 @@ import com.cloud.user.UserContext; // ///////////////// Accessors /////////////////////// // /////////////////////////////////////////////////// - public String getEntityTable() { - return "vm_template"; - } public Integer getBits() { return bits; @@ -240,13 +237,15 @@ import com.cloud.user.UserContext; public void create() throws ResourceAllocationException { if (isBareMetal()) { _bareMetalVmService.createPrivateTemplateRecord(this, _accountService.getAccount(getEntityOwnerId())); - /*Baremetal creates template record after taking image proceeded, use vmId as entity id here*/ + /*Baremetal creates template record after taking image proceeded, use vmId as entity id and uuid here*/ this.setEntityId(vmId); + this.setEntityUuid(vmId.toString()); } else { VirtualMachineTemplate template = null; template = _userVmService.createPrivateTemplateRecord(this, _accountService.getAccount(getEntityOwnerId())); if (template != null) { this.setEntityId(template.getId()); + this.setEntityUuid(template.getUuid()); } else { throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to create a template"); diff --git a/api/src/org/apache/cloudstack/api/command/user/vm/DeployVMCmd.java b/api/src/org/apache/cloudstack/api/command/user/vm/DeployVMCmd.java index 349f4a12d16..28bb80f72d3 100644 --- a/api/src/org/apache/cloudstack/api/command/user/vm/DeployVMCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vm/DeployVMCmd.java @@ -171,9 +171,6 @@ public class DeployVMCmd extends BaseAsyncCreateCmd { /////////////////// Accessors /////////////////////// ///////////////////////////////////////////////////// - public String getEntityTable() { - return "vm_instance"; - } public String getAccountName() { if (accountName == null) { @@ -446,6 +443,7 @@ public class DeployVMCmd extends BaseAsyncCreateCmd { if (vm != null) { setEntityId(vm.getId()); + setEntityUuid(vm.getUuid()); } else { throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to deploy vm"); } diff --git a/api/src/org/apache/cloudstack/api/command/user/volume/CreateVolumeCmd.java b/api/src/org/apache/cloudstack/api/command/user/volume/CreateVolumeCmd.java index 512685f77f6..04541b9fda7 100644 --- a/api/src/org/apache/cloudstack/api/command/user/volume/CreateVolumeCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/volume/CreateVolumeCmd.java @@ -76,9 +76,6 @@ public class CreateVolumeCmd extends BaseAsyncCreateCmd { /////////////////// Accessors /////////////////////// ///////////////////////////////////////////////////// - public String getEntityTable() { - return "volumes"; - } public String getAccountName() { return accountName; @@ -154,6 +151,7 @@ public class CreateVolumeCmd extends BaseAsyncCreateCmd { Volume volume = _storageService.allocVolume(this); if (volume != null) { this.setEntityId(volume.getId()); + this.setEntityUuid(volume.getUuid()); } else { throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to create volume"); } diff --git a/api/src/org/apache/cloudstack/api/command/user/vpc/CreateStaticRouteCmd.java b/api/src/org/apache/cloudstack/api/command/user/vpc/CreateStaticRouteCmd.java index 85a0ae45ae8..96de56a5be5 100644 --- a/api/src/org/apache/cloudstack/api/command/user/vpc/CreateStaticRouteCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vpc/CreateStaticRouteCmd.java @@ -67,6 +67,7 @@ public class CreateStaticRouteCmd extends BaseAsyncCreateCmd{ try { StaticRoute result = _vpcService.createStaticRoute(getGatewayId(), getCidr()); setEntityId(result.getId()); + setEntityUuid(result.getUuid()); } catch (NetworkRuleConflictException ex) { s_logger.info("Network rule conflict: " + ex.getMessage()); s_logger.trace("Network rule conflict: ", ex); @@ -74,10 +75,6 @@ public class CreateStaticRouteCmd extends BaseAsyncCreateCmd{ } } - @Override - public String getEntityTable() { - return "static_routes"; - } @Override public String getEventType() { diff --git a/api/src/org/apache/cloudstack/api/command/user/vpc/CreateVPCCmd.java b/api/src/org/apache/cloudstack/api/command/user/vpc/CreateVPCCmd.java index df16c8edc88..8a2e1f641fb 100644 --- a/api/src/org/apache/cloudstack/api/command/user/vpc/CreateVPCCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vpc/CreateVPCCmd.java @@ -124,6 +124,7 @@ public class CreateVPCCmd extends BaseAsyncCreateCmd{ getCidr(), getNetworkDomain()); if (vpc != null) { this.setEntityId(vpc.getId()); + this.setEntityUuid(vpc.getUuid()); } else { throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to create a VPC"); } @@ -157,11 +158,6 @@ public class CreateVPCCmd extends BaseAsyncCreateCmd{ } } - @Override - public String getEntityTable() { - return "vpc"; - } - @Override public String getEventType() { diff --git a/api/src/org/apache/cloudstack/api/command/user/vpn/AddVpnUserCmd.java b/api/src/org/apache/cloudstack/api/command/user/vpn/AddVpnUserCmd.java index 674dc6a5809..f2d19a7cce6 100644 --- a/api/src/org/apache/cloudstack/api/command/user/vpn/AddVpnUserCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vpn/AddVpnUserCmd.java @@ -103,9 +103,6 @@ public class AddVpnUserCmd extends BaseAsyncCreateCmd { return accountId; } - public String getEntityTable() { - return "vpn_users"; - } @Override public String getEventDescription() { @@ -150,5 +147,6 @@ public class AddVpnUserCmd extends BaseAsyncCreateCmd { throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to add vpn user"); } setEntityId(vpnUser.getId()); + setEntityUuid(vpnUser.getUuid()); } } diff --git a/api/src/org/apache/cloudstack/api/command/user/vpn/CreateRemoteAccessVpnCmd.java b/api/src/org/apache/cloudstack/api/command/user/vpn/CreateRemoteAccessVpnCmd.java index 37952f8777a..b517af883c3 100644 --- a/api/src/org/apache/cloudstack/api/command/user/vpn/CreateRemoteAccessVpnCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vpn/CreateRemoteAccessVpnCmd.java @@ -62,10 +62,6 @@ public class CreateRemoteAccessVpnCmd extends BaseAsyncCreateCmd { /////////////////// Accessors /////////////////////// ///////////////////////////////////////////////////// - public String getEntityTable() { - return "user_ip_address"; - } - public Long getPublicIpId() { return publicIpId; } @@ -146,6 +142,11 @@ public class CreateRemoteAccessVpnCmd extends BaseAsyncCreateCmd { RemoteAccessVpn vpn = _ravService.createRemoteAccessVpn(publicIpId, ipRange, getOpenFirewall(), getNetworkId()); if (vpn != null) { this.setEntityId(vpn.getServerAddressId()); + // find uuid for server ip address + IpAddress ipAddr = _entityMgr.findById(IpAddress.class, vpn.getServerAddressId()); + if (ipAddr != null) { + this.setEntityUuid(ipAddr.getUuid()); + } } else { throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to create remote access vpn"); } diff --git a/api/src/org/apache/cloudstack/api/command/user/vpn/CreateVpnConnectionCmd.java b/api/src/org/apache/cloudstack/api/command/user/vpn/CreateVpnConnectionCmd.java index 7f85fb4ebf6..3dc334d0e2a 100644 --- a/api/src/org/apache/cloudstack/api/command/user/vpn/CreateVpnConnectionCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vpn/CreateVpnConnectionCmd.java @@ -51,9 +51,6 @@ public class CreateVpnConnectionCmd extends BaseAsyncCreateCmd { /////////////////// Accessors /////////////////////// ///////////////////////////////////////////////////// - public String getEntityTable() { - return "s2s_vpn_connection"; - } public Long getVpnGatewayId() { return vpnGatewayId; @@ -95,6 +92,7 @@ public class CreateVpnConnectionCmd extends BaseAsyncCreateCmd { Site2SiteVpnConnection conn = _s2sVpnService.createVpnConnection(this); if (conn != null) { this.setEntityId(conn.getId()); + this.setEntityUuid(conn.getUuid()); } else { throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to create site to site vpn connection"); } diff --git a/api/src/org/apache/cloudstack/api/command/user/vpn/CreateVpnCustomerGatewayCmd.java b/api/src/org/apache/cloudstack/api/command/user/vpn/CreateVpnCustomerGatewayCmd.java index 65085182e0c..bde98b0b44b 100644 --- a/api/src/org/apache/cloudstack/api/command/user/vpn/CreateVpnCustomerGatewayCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vpn/CreateVpnCustomerGatewayCmd.java @@ -78,9 +78,6 @@ public class CreateVpnCustomerGatewayCmd extends BaseAsyncCmd { /////////////////// Accessors /////////////////////// ///////////////////////////////////////////////////// - public String getEntityTable() { - return "s2s_customer_gateway"; - } public String getName() { return name; diff --git a/api/src/org/apache/cloudstack/api/command/user/vpn/CreateVpnGatewayCmd.java b/api/src/org/apache/cloudstack/api/command/user/vpn/CreateVpnGatewayCmd.java index 89965bd842c..4b405541a90 100644 --- a/api/src/org/apache/cloudstack/api/command/user/vpn/CreateVpnGatewayCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vpn/CreateVpnGatewayCmd.java @@ -47,10 +47,6 @@ public class CreateVpnGatewayCmd extends BaseAsyncCmd { /////////////////// Accessors /////////////////////// ///////////////////////////////////////////////////// - public String getEntityTable() { - return "s2s_vpn_gateway"; - } - public Long getVpcId() { return vpcId; } diff --git a/api/src/org/apache/cloudstack/api/command/user/vpn/DeleteVpnConnectionCmd.java b/api/src/org/apache/cloudstack/api/command/user/vpn/DeleteVpnConnectionCmd.java index a079e8bcc30..23a7793ef88 100644 --- a/api/src/org/apache/cloudstack/api/command/user/vpn/DeleteVpnConnectionCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vpn/DeleteVpnConnectionCmd.java @@ -44,9 +44,6 @@ public class DeleteVpnConnectionCmd extends BaseAsyncCmd { /////////////////// Accessors /////////////////////// ///////////////////////////////////////////////////// - public String getEntityTable() { - return "s2s_vpn_connection"; - } public Long getId() { return id; diff --git a/api/src/org/apache/cloudstack/api/command/user/vpn/DeleteVpnCustomerGatewayCmd.java b/api/src/org/apache/cloudstack/api/command/user/vpn/DeleteVpnCustomerGatewayCmd.java index ef5ff3db438..181ee3bbc68 100644 --- a/api/src/org/apache/cloudstack/api/command/user/vpn/DeleteVpnCustomerGatewayCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vpn/DeleteVpnCustomerGatewayCmd.java @@ -43,9 +43,6 @@ public class DeleteVpnCustomerGatewayCmd extends BaseAsyncCmd { /////////////////// Accessors /////////////////////// ///////////////////////////////////////////////////// - public String getEntityTable() { - return "s2s_customer_gateway"; - } public Long getId() { return id; diff --git a/api/src/org/apache/cloudstack/api/command/user/vpn/DeleteVpnGatewayCmd.java b/api/src/org/apache/cloudstack/api/command/user/vpn/DeleteVpnGatewayCmd.java index f9b9e35a420..9ac27d07664 100644 --- a/api/src/org/apache/cloudstack/api/command/user/vpn/DeleteVpnGatewayCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vpn/DeleteVpnGatewayCmd.java @@ -43,9 +43,6 @@ public class DeleteVpnGatewayCmd extends BaseAsyncCmd { /////////////////// Accessors /////////////////////// ///////////////////////////////////////////////////// - public String getEntityTable() { - return "s2s_vpn_gateway"; - } public Long getId() { return id; diff --git a/api/src/org/apache/cloudstack/api/command/user/vpn/ResetVpnConnectionCmd.java b/api/src/org/apache/cloudstack/api/command/user/vpn/ResetVpnConnectionCmd.java index 0d7632ac1aa..ed28ea5610f 100644 --- a/api/src/org/apache/cloudstack/api/command/user/vpn/ResetVpnConnectionCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vpn/ResetVpnConnectionCmd.java @@ -53,9 +53,6 @@ public class ResetVpnConnectionCmd extends BaseAsyncCmd { /////////////////// Accessors /////////////////////// ///////////////////////////////////////////////////// - public String getEntityTable() { - return "s2s_vpn_connection"; - } public Long getDomainId() { return domainId; diff --git a/api/src/org/apache/cloudstack/api/command/user/vpn/UpdateVpnCustomerGatewayCmd.java b/api/src/org/apache/cloudstack/api/command/user/vpn/UpdateVpnCustomerGatewayCmd.java index f2778e06103..7564129c38f 100644 --- a/api/src/org/apache/cloudstack/api/command/user/vpn/UpdateVpnCustomerGatewayCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vpn/UpdateVpnCustomerGatewayCmd.java @@ -78,11 +78,7 @@ public class UpdateVpnCustomerGatewayCmd extends BaseAsyncCmd { /////////////////// Accessors /////////////////////// ///////////////////////////////////////////////////// - public String getEntityTable() { - return "s2s_customer_gateway"; - } - - public Long getId() { + public Long getId() { return id; } diff --git a/api/src/org/apache/cloudstack/api/response/CapacityResponse.java b/api/src/org/apache/cloudstack/api/response/CapacityResponse.java index 000705813fb..2c98dc9d6ca 100644 --- a/api/src/org/apache/cloudstack/api/response/CapacityResponse.java +++ b/api/src/org/apache/cloudstack/api/response/CapacityResponse.java @@ -17,7 +17,6 @@ package org.apache.cloudstack.api.response; import org.apache.cloudstack.api.ApiConstants; -import com.cloud.utils.IdentityProxy; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; import org.apache.cloudstack.api.BaseResponse; diff --git a/api/src/org/apache/cloudstack/api/response/CreateCmdResponse.java b/api/src/org/apache/cloudstack/api/response/CreateCmdResponse.java index 3c26324e10b..e4c6c60c5ba 100644 --- a/api/src/org/apache/cloudstack/api/response/CreateCmdResponse.java +++ b/api/src/org/apache/cloudstack/api/response/CreateCmdResponse.java @@ -16,24 +16,16 @@ // under the License. package org.apache.cloudstack.api.response; -import org.apache.cloudstack.api.ApiConstants; -import com.cloud.utils.IdentityProxy; -import com.google.gson.annotations.SerializedName; import org.apache.cloudstack.api.BaseResponse; public class CreateCmdResponse extends BaseResponse { - @SerializedName(ApiConstants.ID) - private IdentityProxy id = new IdentityProxy(); + private String id; - public Long getId() { - return id.getValue(); + public String getId() { + return id; } - public void setId(Long id) { - this.id.setValue(id); - } - - public void setIdEntityTable(String entityTable) { - this.id.setTableName(entityTable); + public void setId(String id) { + this.id = id; } } diff --git a/api/src/org/apache/cloudstack/api/response/ResourceCountResponse.java b/api/src/org/apache/cloudstack/api/response/ResourceCountResponse.java index 9e62f4ff7f5..7a291945f76 100644 --- a/api/src/org/apache/cloudstack/api/response/ResourceCountResponse.java +++ b/api/src/org/apache/cloudstack/api/response/ResourceCountResponse.java @@ -17,7 +17,6 @@ package org.apache.cloudstack.api.response; import org.apache.cloudstack.api.ApiConstants; -import com.cloud.utils.IdentityProxy; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; import org.apache.cloudstack.api.BaseResponse; diff --git a/api/src/org/apache/cloudstack/api/response/S3Response.java b/api/src/org/apache/cloudstack/api/response/S3Response.java index 5dd0ef0e041..4dab2175a3a 100644 --- a/api/src/org/apache/cloudstack/api/response/S3Response.java +++ b/api/src/org/apache/cloudstack/api/response/S3Response.java @@ -19,7 +19,6 @@ package org.apache.cloudstack.api.response; import com.cloud.serializer.Param; -import com.cloud.utils.IdentityProxy; import com.google.gson.annotations.SerializedName; import org.apache.cloudstack.api.BaseResponse; @@ -29,7 +28,7 @@ public class S3Response extends BaseResponse { @SerializedName(ID) @Param(description = "The ID of the S3 configuration") - private IdentityProxy id = new IdentityProxy("s3"); + private String id; @SerializedName(S3_ACCESS_KEY) @Param(description = "The S3 access key") @@ -135,11 +134,11 @@ public class S3Response extends BaseResponse { @Override public String getObjectId() { - return this.id.getValue().toString(); + return this.id; } - public void setObjectId(Long id) { - this.id.setValue(id); + public void setObjectId(String id) { + this.id = id; } public String getAccessKey() { diff --git a/server/src/com/cloud/api/ApiGsonHelper.java b/server/src/com/cloud/api/ApiGsonHelper.java index 6e64f7124e0..6163860f0c8 100644 --- a/server/src/com/cloud/api/ApiGsonHelper.java +++ b/server/src/com/cloud/api/ApiGsonHelper.java @@ -17,7 +17,6 @@ package com.cloud.api; import com.google.gson.GsonBuilder; -import com.cloud.utils.IdentityProxy; import org.apache.cloudstack.api.ResponseObject; import java.util.Map; @@ -28,7 +27,6 @@ public class ApiGsonHelper { s_gBuilder = new GsonBuilder().setDateFormat("yyyy-MM-dd'T'HH:mm:ssZ"); s_gBuilder.setVersion(1.3); s_gBuilder.registerTypeAdapter(ResponseObject.class, new ResponseObjectTypeAdapter()); - s_gBuilder.registerTypeAdapter(IdentityProxy.class, new IdentityTypeAdapter()); s_gBuilder.registerTypeAdapter(Map.class, new StringMapTypeAdapter()); } diff --git a/server/src/com/cloud/api/ApiResponseGsonHelper.java b/server/src/com/cloud/api/ApiResponseGsonHelper.java index c71193e8908..6bccf9a12af 100644 --- a/server/src/com/cloud/api/ApiResponseGsonHelper.java +++ b/server/src/com/cloud/api/ApiResponseGsonHelper.java @@ -17,7 +17,6 @@ package com.cloud.api; import com.google.gson.GsonBuilder; -import com.cloud.utils.IdentityProxy; import org.apache.cloudstack.api.ResponseObject; /** @@ -25,13 +24,12 @@ import org.apache.cloudstack.api.ResponseObject; */ public class ApiResponseGsonHelper { private static final GsonBuilder s_gBuilder; - + static { s_gBuilder = new GsonBuilder().setDateFormat("yyyy-MM-dd'T'HH:mm:ssZ"); s_gBuilder.setVersion(1.3); s_gBuilder.registerTypeAdapter(ResponseObject.class, new ResponseObjectTypeAdapter()); s_gBuilder.registerTypeAdapter(String.class, new EncodedStringTypeAdapter()); - s_gBuilder.registerTypeAdapter(IdentityProxy.class, new IdentityTypeAdapter()); } public static GsonBuilder getBuilder() { diff --git a/server/src/com/cloud/api/ApiResponseHelper.java b/server/src/com/cloud/api/ApiResponseHelper.java index 47754395e7a..edb798b812e 100755 --- a/server/src/com/cloud/api/ApiResponseHelper.java +++ b/server/src/com/cloud/api/ApiResponseHelper.java @@ -482,7 +482,7 @@ public class ApiResponseHelper implements ResponseGenerator { response.setEndPoint(result.getEndPoint()); response.setHttpsFlag(result.getHttpsFlag()); response.setMaxErrorRetry(result.getMaxErrorRetry()); - response.setObjectId(result.getId()); + response.setObjectId(result.getUuid()); response.setSecretKey(result.getSecretKey()); response.setSocketTimeout(result.getSocketTimeout()); response.setTemplateBucketName(result.getBucketName()); diff --git a/server/src/com/cloud/api/ApiServer.java b/server/src/com/cloud/api/ApiServer.java index 519908daf25..17a2b29638b 100755 --- a/server/src/com/cloud/api/ApiServer.java +++ b/server/src/com/cloud/api/ApiServer.java @@ -400,12 +400,12 @@ public class ApiServer implements HttpRequestHandler { // BaseAsyncCmd: cmd is processed and submitted as an AsyncJob, job related info is serialized and returned. if (cmdObj instanceof BaseAsyncCmd) { Long objectId = null; - String objectEntityTable = null; + String objectUuid = null; if (cmdObj instanceof BaseAsyncCreateCmd) { BaseAsyncCreateCmd createCmd = (BaseAsyncCreateCmd) cmdObj; _dispatcher.dispatchCreateCmd(createCmd, params); objectId = createCmd.getEntityId(); - objectEntityTable = createCmd.getEntityTable(); + objectUuid = createCmd.getEntityUuid(); params.put("id", objectId.toString()); } else { ApiDispatcher.processParameters(cmdObj, params); @@ -449,8 +449,8 @@ public class ApiServer implements HttpRequestHandler { } if (objectId != null) { - SerializationContext.current().setUuidTranslation(true); - return ((BaseAsyncCreateCmd) asyncCmd).getResponse(jobId, objectId, objectEntityTable); + String objUuid = (objectUuid == null) ? objectId.toString() : objectUuid; + return ((BaseAsyncCreateCmd) asyncCmd).getResponse(jobId, objUuid); } SerializationContext.current().setUuidTranslation(true); @@ -460,6 +460,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 + // For those listXXXCommand which we have already created DB views, this step is not needed since async job is joined in their db views. if (cmdObj instanceof BaseListCmd && !(cmdObj instanceof ListVMsCmd) && !(cmdObj instanceof ListRoutersCmd) && !(cmdObj instanceof ListSecurityGroupsCmd) && !(cmdObj instanceof ListTagsCmd) diff --git a/server/src/com/cloud/api/IdentityTypeAdapter.java b/server/src/com/cloud/api/IdentityTypeAdapter.java deleted file mode 100644 index 369c2020c24..00000000000 --- a/server/src/com/cloud/api/IdentityTypeAdapter.java +++ /dev/null @@ -1,80 +0,0 @@ -// 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; - -import java.lang.reflect.Type; - -import com.cloud.uuididentity.dao.IdentityDao; -import com.cloud.uuididentity.dao.IdentityDaoImpl; -import com.google.gson.Gson; -import com.google.gson.JsonDeserializationContext; -import com.google.gson.JsonDeserializer; -import com.google.gson.JsonElement; -import com.google.gson.JsonObject; -import com.google.gson.JsonParseException; -import com.google.gson.JsonPrimitive; -import com.google.gson.JsonSerializationContext; -import com.google.gson.JsonSerializer; -import com.cloud.utils.IdentityProxy; - - -public class IdentityTypeAdapter implements JsonSerializer, JsonDeserializer { - - @Override - public JsonElement serialize(IdentityProxy src, Type srcType, JsonSerializationContext context) { - if(SerializationContext.current().getUuidTranslation()) { - assert(src != null); - if(src.getValue() == null) - return context.serialize(null); - - IdentityDao identityDao = new IdentityDaoImpl(); - if(src.getTableName() != null) { - String uuid = identityDao.getIdentityUuid(src.getTableName(), String.valueOf(src.getValue())); - if(uuid == null) - return context.serialize(null); - - // Exceptions set the _idFieldName in the IdentityProxy structure. So if this field is not - // null, prepare a structure of uuid and idFieldName and return the json representation of that. - String idName = src.getidFieldName(); - if (idName != null) { - // Prepare a structure. - JsonObject jsonObj = new JsonObject(); - jsonObj.add("uuid", new JsonPrimitive(uuid)); - jsonObj.add("uuidProperty", new JsonPrimitive(idName)); - return jsonObj; - } - return new JsonPrimitive(uuid); - } else { - return new JsonPrimitive(String.valueOf(src.getValue())); - } - } else { - return new Gson().toJsonTree(src); - } - } - - @Override - public IdentityProxy deserialize(JsonElement src, Type srcType, - JsonDeserializationContext context) throws JsonParseException { - - IdentityProxy obj = new IdentityProxy(); - JsonObject json = src.getAsJsonObject(); - obj.setTableName(json.get("_tableName").getAsString()); - if(json.get("_value") != null) - obj.setValue(json.get("_value").getAsLong()); - return obj; - } -} diff --git a/server/src/com/cloud/api/response/ApiResponseSerializer.java b/server/src/com/cloud/api/response/ApiResponseSerializer.java index 470cc5f9587..11aee3d9390 100644 --- a/server/src/com/cloud/api/response/ApiResponseSerializer.java +++ b/server/src/com/cloud/api/response/ApiResponseSerializer.java @@ -37,7 +37,6 @@ import com.cloud.api.ApiResponseGsonHelper; import com.cloud.api.ApiServer; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.ResponseObject; -import com.cloud.utils.IdentityProxy; import com.cloud.utils.encoding.URLEncoder; import com.cloud.utils.exception.CloudRuntimeException; import com.cloud.uuididentity.dao.IdentityDao; @@ -226,27 +225,17 @@ public class ApiResponseSerializer { subObj.setObjectName(serializedName.value()); } serializeResponseObjXML(sb, subObj); - } else if (value instanceof IdentityProxy) { - // Only exception reponses carry a list of IdentityProxy objects. - IdentityProxy idProxy = (IdentityProxy)value; - String id = (idProxy.getValue() != null ? String.valueOf(idProxy.getValue()) : ""); - if(!id.isEmpty()) { - IdentityDao identityDao = new IdentityDaoImpl(); - id = identityDao.getIdentityUuid(idProxy.getTableName(), id); - } - if(id != null && !id.isEmpty()) { - // If this is the first IdentityProxy field encountered, put in a uuidList tag. - if (!usedUuidList) { - sb.append("<").append(serializedName.value()).append(">"); - usedUuidList = true; - } - sb.append("").append(id).append(""); - } - // Append the new idFieldName property also. - String idFieldName = idProxy.getidFieldName(); - if (idFieldName != null) { - sb.append("").append(idFieldName).append(""); - } + } else { + // Only exception reponses carry a list of uuid + // strings. + // If this is the first IdentityProxy field + // encountered, put in a uuidList tag. + if (!usedUuidList) { + sb.append("<").append(serializedName.value()).append(">"); + usedUuidList = true; + } + sb.append("").append(value).append(""); + // We have removed uuid property field due to removal of IdentityProxy class. } } if (usedUuidList) { @@ -256,19 +245,6 @@ public class ApiResponseSerializer { } else if (fieldValue instanceof Date) { sb.append("<").append(serializedName.value()).append(">").append(BaseCmd.getDateString((Date) fieldValue)). append(""); - } else if (fieldValue instanceof IdentityProxy) { - IdentityProxy idProxy = (IdentityProxy)fieldValue; - String id = (idProxy.getValue() != null ? String.valueOf(idProxy.getValue()) : ""); - if(!id.isEmpty()) { - IdentityDao identityDao = new IdentityDaoImpl(); - if(idProxy.getTableName() != null) { - id = identityDao.getIdentityUuid(idProxy.getTableName(), id); - } else { - s_logger.warn("IdentityProxy sanity check issue, invalid IdentityProxy table name found in class: " + obj.getClass().getName()); - } - } - if(id != null && !id.isEmpty()) - sb.append("<").append(serializedName.value()).append(">").append(id).append(""); } else { String resultString = escapeSpecialXmlChars(fieldValue.toString()); if (!(obj instanceof ExceptionResponse)) { diff --git a/server/src/com/cloud/server/ConfigurationServerImpl.java b/server/src/com/cloud/server/ConfigurationServerImpl.java index af5989cf003..b25c63f6d7f 100755 --- a/server/src/com/cloud/server/ConfigurationServerImpl.java +++ b/server/src/com/cloud/server/ConfigurationServerImpl.java @@ -103,7 +103,6 @@ public class ConfigurationServerImpl implements ConfigurationServer { private final AccountDao _accountDao; private final ResourceCountDao _resourceCountDao; private final NetworkOfferingServiceMapDao _ntwkOfferingServiceMapDao; - private final IdentityDao _identityDao; public ConfigurationServerImpl() { ComponentLocator locator = ComponentLocator.getLocator(Name); @@ -120,7 +119,6 @@ public class ConfigurationServerImpl implements ConfigurationServer { _accountDao = locator.getDao(AccountDao.class); _resourceCountDao = locator.getDao(ResourceCountDao.class); _ntwkOfferingServiceMapDao = locator.getDao(NetworkOfferingServiceMapDao.class); - _identityDao = locator.getDao(IdentityDao.class); } @Override diff --git a/utils/src/com/cloud/utils/IdentityProxy.java b/utils/src/com/cloud/utils/IdentityProxy.java deleted file mode 100644 index 7e385fbf05a..00000000000 --- a/utils/src/com/cloud/utils/IdentityProxy.java +++ /dev/null @@ -1,60 +0,0 @@ -// 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 -// 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.utils; - -public class IdentityProxy { - private String _tableName; - private Long _value; - private String _idFieldName; - - public IdentityProxy() { - } - - public IdentityProxy(String tableName) { - _tableName = tableName; - } - - public IdentityProxy(String tableName, Long id, String fieldName) { - _tableName = tableName; - _value = id; - _idFieldName = fieldName; - } - - public String getTableName() { - return _tableName; - } - - public void setTableName(String tableName) { - _tableName = tableName; - } - - public Long getValue() { - return _value; - } - - public void setValue(Long value) { - _value = value; - } - - public void setidFieldName(String value) { - _idFieldName = value; - } - - public String getidFieldName() { - return _idFieldName; - } -} diff --git a/utils/src/com/cloud/utils/exception/RuntimeCloudException.java b/utils/src/com/cloud/utils/exception/RuntimeCloudException.java index 233469678df..52229800785 100644 --- a/utils/src/com/cloud/utils/exception/RuntimeCloudException.java +++ b/utils/src/com/cloud/utils/exception/RuntimeCloudException.java @@ -17,7 +17,6 @@ package com.cloud.utils.exception; import com.cloud.utils.AnnotationHelper; -import com.cloud.utils.IdentityProxy; import java.util.ArrayList; /** From cd7f7716155c3cd2d29b97d7ea302518d81fdfab Mon Sep 17 00:00:00 2001 From: Kishan Kavala Date: Thu, 10 Jan 2013 14:53:29 +0530 Subject: [PATCH 332/421] CLOUDSTACK-721: Fixed network usage. Send network usage command for isolated guest nic of non VPC VR. Send network usage command for public nic in VPC VR. --- .../VirtualNetworkApplianceManagerImpl.java | 37 ++++++++++--------- 1 file changed, 20 insertions(+), 17 deletions(-) diff --git a/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java b/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java index 1a6eb0982a9..1f74c7174e8 100755 --- a/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java +++ b/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java @@ -823,26 +823,29 @@ public class VirtualNetworkApplianceManagerImpl implements VirtualNetworkApplian String privateIP = router.getPrivateIpAddress(); if (privateIP != null) { + boolean forVpc = router.getVpcId() != null; List routerNics = _nicDao.listByVmId(router.getId()); for (Nic routerNic : routerNics) { Network network = _networkMgr.getNetwork(routerNic.getNetworkId()); - if (network.getTrafficType() == TrafficType.Public) { - boolean forVpc = router.getVpcId() != null; + //Send network usage command for public nic in VPC VR + //Send network usage command for isolated guest nic of non VPC VR + if ((forVpc && network.getTrafficType() == TrafficType.Public) || (!forVpc && network.getTrafficType() == TrafficType.Guest && network.getGuestType() == Network.GuestType.Isolated)) { final NetworkUsageCommand usageCmd = new NetworkUsageCommand(privateIP, router.getHostName(), forVpc, routerNic.getIp4Address()); - UserStatisticsVO previousStats = _statsDao.findBy(router.getAccountId(), - router.getDataCenterIdToDeployIn(), network.getId(), null, router.getId(), router.getType().toString()); + String routerType = router.getType().toString(); + UserStatisticsVO previousStats = _statsDao.findBy(router.getAccountId(), + router.getDataCenterIdToDeployIn(), network.getId(), (forVpc ? routerNic.getIp4Address() : null), router.getId(), routerType); NetworkUsageAnswer answer = null; try { answer = (NetworkUsageAnswer) _agentMgr.easySend(router.getHostId(), usageCmd); } catch (Exception e) { - s_logger.warn("Error while collecting network stats from router: "+router.getInstanceName()+" from host: "+router.getHostId(), e); + s_logger.warn("Error while collecting network stats from router: " + router.getInstanceName() + " from host: " + router.getHostId(), e); continue; } if (answer != null) { if (!answer.getResult()) { - s_logger.warn("Error while collecting network stats from router: "+router.getInstanceName()+" from host: "+router.getHostId() + "; details: " + answer.getDetails()); + s_logger.warn("Error while collecting network stats from router: " + router.getInstanceName() + " from host: " + router.getHostId() + "; details: " + answer.getDetails()); continue; } Transaction txn = Transaction.open(Transaction.CLOUD_DB); @@ -852,27 +855,27 @@ public class VirtualNetworkApplianceManagerImpl implements VirtualNetworkApplian continue; } txn.start(); - UserStatisticsVO stats = _statsDao.lock(router.getAccountId(), - router.getDataCenterIdToDeployIn(), network.getId(), routerNic.getIp4Address(), router.getId(), router.getType().toString()); + UserStatisticsVO stats = _statsDao.lock(router.getAccountId(), + router.getDataCenterIdToDeployIn(), network.getId(), (forVpc ? routerNic.getIp4Address() : null), router.getId(), routerType); if (stats == null) { s_logger.warn("unable to find stats for account: " + router.getAccountId()); continue; } - if(previousStats != null - && ((previousStats.getCurrentBytesReceived() != stats.getCurrentBytesReceived()) - || (previousStats.getCurrentBytesSent() != stats.getCurrentBytesSent()))){ + if (previousStats != null + && ((previousStats.getCurrentBytesReceived() != stats.getCurrentBytesReceived()) + || (previousStats.getCurrentBytesSent() != stats.getCurrentBytesSent()))) { s_logger.debug("Router stats changed from the time NetworkUsageCommand was sent. " + - "Ignoring current answer. Router: "+answer.getRouterName()+" Rcvd: " + - answer.getBytesReceived()+ "Sent: " +answer.getBytesSent()); + "Ignoring current answer. Router: " + answer.getRouterName() + " Rcvd: " + + answer.getBytesReceived() + "Sent: " + answer.getBytesSent()); continue; } if (stats.getCurrentBytesReceived() > answer.getBytesReceived()) { if (s_logger.isDebugEnabled()) { s_logger.debug("Received # of bytes that's less than the last one. " + - "Assuming something went wrong and persisting it. Router: " + - answer.getRouterName()+" Reported: " + answer.getBytesReceived() + "Assuming something went wrong and persisting it. Router: " + + answer.getRouterName() + " Reported: " + answer.getBytesReceived() + " Stored: " + stats.getCurrentBytesReceived()); } stats.setNetBytesReceived(stats.getNetBytesReceived() + stats.getCurrentBytesReceived()); @@ -881,8 +884,8 @@ public class VirtualNetworkApplianceManagerImpl implements VirtualNetworkApplian if (stats.getCurrentBytesSent() > answer.getBytesSent()) { if (s_logger.isDebugEnabled()) { s_logger.debug("Received # of bytes that's less than the last one. " + - "Assuming something went wrong and persisting it. Router: " + - answer.getRouterName()+" Reported: " + answer.getBytesSent() + "Assuming something went wrong and persisting it. Router: " + + answer.getRouterName() + " Reported: " + answer.getBytesSent() + " Stored: " + stats.getCurrentBytesSent()); } stats.setNetBytesSent(stats.getNetBytesSent() + stats.getCurrentBytesSent()); From 1b8e17255f24a3e6aaf2265b1c3f8e27377eca76 Mon Sep 17 00:00:00 2001 From: Prasanna Santhanam Date: Thu, 10 Jan 2013 20:29:12 +0530 Subject: [PATCH 333/421] integration test fix: test iso - obj reference within classmethod --- test/integration/smoke/test_iso.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/test/integration/smoke/test_iso.py b/test/integration/smoke/test_iso.py index 22d424f86cc..8228a278cc9 100644 --- a/test/integration/smoke/test_iso.py +++ b/test/integration/smoke/test_iso.py @@ -219,14 +219,14 @@ class TestISO(cloudstackTestCase): # Finding the OsTypeId from Ostype ostypes = list_os_types( cls.api_client, - description=self.services["ostype"] + description=cls.services["ostype"] ) if not isinstance(ostypes, list): raise unittest.SkipTest("OSTypeId for given description not found") - self.services["iso_1"]["ostypeid"] = ostypes[0].id - self.services["iso_2"]["ostypeid"] = ostypes[0].id - self.services["ostypeid"] = ostypes[0].id + cls.services["iso_1"]["ostypeid"] = ostypes[0].id + cls.services["iso_2"]["ostypeid"] = ostypes[0].id + cls.services["ostypeid"] = ostypes[0].id cls.iso_1 = Iso.create( cls.api_client, From c6d9877d6445d36e2677c7b4ac7deec6a668a053 Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Thu, 10 Jan 2013 10:59:13 -0800 Subject: [PATCH 334/421] ApiDiscoveryService: Move refactor, interface should be in plugins and not in cloud-api Signed-off-by: Rohit Yadav --- .../src/org/apache/cloudstack/discovery/ApiDiscoveryService.java | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename {api => plugins/api/discovery}/src/org/apache/cloudstack/discovery/ApiDiscoveryService.java (100%) diff --git a/api/src/org/apache/cloudstack/discovery/ApiDiscoveryService.java b/plugins/api/discovery/src/org/apache/cloudstack/discovery/ApiDiscoveryService.java similarity index 100% rename from api/src/org/apache/cloudstack/discovery/ApiDiscoveryService.java rename to plugins/api/discovery/src/org/apache/cloudstack/discovery/ApiDiscoveryService.java From 62a42723f995279fcaa4a63d9b0be061d32c66ca Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Thu, 10 Jan 2013 11:49:15 -0800 Subject: [PATCH 335/421] APIAccessChecker: Make it check based on role type and not user Signed-off-by: Rohit Yadav --- .../cloudstack/acl/APIAccessChecker.java | 7 +- .../acl/StaticRoleBasedAPIAccessChecker.java | 84 ++++++++----------- server/src/com/cloud/api/ApiServer.java | 33 +++++++- 3 files changed, 69 insertions(+), 55 deletions(-) diff --git a/api/src/org/apache/cloudstack/acl/APIAccessChecker.java b/api/src/org/apache/cloudstack/acl/APIAccessChecker.java index 3194bd11d17..a5c656d731a 100644 --- a/api/src/org/apache/cloudstack/acl/APIAccessChecker.java +++ b/api/src/org/apache/cloudstack/acl/APIAccessChecker.java @@ -16,11 +16,8 @@ // under the License. package org.apache.cloudstack.acl; -import java.util.Properties; - +import org.apache.cloudstack.acl.RoleType; import com.cloud.exception.PermissionDeniedException; -import com.cloud.user.Account; -import com.cloud.user.User; import com.cloud.utils.component.Adapter; /** @@ -28,5 +25,5 @@ import com.cloud.utils.component.Adapter; */ public interface APIAccessChecker extends Adapter { // Interface for checking access to an API for an user - boolean canAccessAPI(User user, String apiCommandName) throws PermissionDeniedException; + boolean canAccessAPI(RoleType roleType, String apiCommandName) throws PermissionDeniedException; } diff --git a/plugins/acl/static-role-based/src/org/apache/cloudstack/acl/StaticRoleBasedAPIAccessChecker.java b/plugins/acl/static-role-based/src/org/apache/cloudstack/acl/StaticRoleBasedAPIAccessChecker.java index d39f87f1048..43ca403f890 100644 --- a/plugins/acl/static-role-based/src/org/apache/cloudstack/acl/StaticRoleBasedAPIAccessChecker.java +++ b/plugins/acl/static-role-based/src/org/apache/cloudstack/acl/StaticRoleBasedAPIAccessChecker.java @@ -27,80 +27,66 @@ import javax.ejb.Local; import javax.naming.ConfigurationException; import org.apache.cloudstack.acl.APIAccessChecker; +import org.apache.cloudstack.acl.RoleType; +import static org.apache.cloudstack.acl.RoleType.*; import org.apache.log4j.Logger; import com.cloud.exception.PermissionDeniedException; import com.cloud.server.ManagementServer; -import com.cloud.user.Account; -import com.cloud.user.AccountManager; -import com.cloud.user.User; import com.cloud.utils.PropertiesUtil; import com.cloud.utils.component.AdapterBase; import com.cloud.utils.component.ComponentLocator; -import com.cloud.utils.component.Inject; import com.cloud.utils.component.PluggableService; -/* - * This is the default API access checker that grab's the user's account - * based on the account type, access is granted referring to commands in all *.properties files. - */ - +// This is the default API access checker that grab's the user's account +// based on the account type, access is granted @Local(value=APIAccessChecker.class) public class StaticRoleBasedAPIAccessChecker extends AdapterBase implements APIAccessChecker { protected static final Logger s_logger = Logger.getLogger(StaticRoleBasedAPIAccessChecker.class); - public static final short ADMIN_COMMAND = 1; - public static final short DOMAIN_ADMIN_COMMAND = 4; - public static final short RESOURCE_DOMAIN_ADMIN_COMMAND = 2; - public static final short USER_COMMAND = 8; - private static List s_userCommands = null; - private static List s_resellerCommands = null; // AKA domain-admin - private static List s_adminCommands = null; - private static List s_resourceDomainAdminCommands = null; - private static List s_allCommands = null; - - protected @Inject AccountManager _accountMgr; + private static Set s_userCommands = null; + private static Set s_resellerCommands = null; // AKA domain-admin + private static Set s_adminCommands = null; + private static Set s_resourceDomainAdminCommands = null; + private static Set s_allCommands = null; protected StaticRoleBasedAPIAccessChecker() { super(); - s_allCommands = new ArrayList(); - s_userCommands = new ArrayList(); - s_resellerCommands = new ArrayList(); - s_adminCommands = new ArrayList(); - s_resourceDomainAdminCommands = new ArrayList(); + s_allCommands = new HashSet(); + s_userCommands = new HashSet(); + s_resellerCommands = new HashSet(); + s_adminCommands = new HashSet(); + s_resourceDomainAdminCommands = new HashSet(); } @Override - public boolean canAccessAPI(User user, String apiCommandName) + public boolean canAccessAPI(RoleType roleType, String apiCommandName) throws PermissionDeniedException{ boolean commandExists = s_allCommands.contains(apiCommandName); - if(commandExists && user != null){ - Long accountId = user.getAccountId(); - Account userAccount = _accountMgr.getAccount(accountId); - short accountType = userAccount.getType(); - return isCommandAvailableForAccount(accountType, apiCommandName); + if(commandExists) { + return isCommandAvailableForAccount(roleType, apiCommandName); } return commandExists; } - private static boolean isCommandAvailableForAccount(short accountType, String commandName) { + private static boolean isCommandAvailableForAccount(RoleType roleType, String commandName) { boolean isCommandAvailable = false; - switch (accountType) { - case Account.ACCOUNT_TYPE_ADMIN: - isCommandAvailable = s_adminCommands.contains(commandName); - break; - case Account.ACCOUNT_TYPE_DOMAIN_ADMIN: - isCommandAvailable = s_resellerCommands.contains(commandName); - break; - case Account.ACCOUNT_TYPE_RESOURCE_DOMAIN_ADMIN: - isCommandAvailable = s_resourceDomainAdminCommands.contains(commandName); - break; - case Account.ACCOUNT_TYPE_NORMAL: - isCommandAvailable = s_userCommands.contains(commandName); - break; + switch (roleType) { + case Admin: + isCommandAvailable = s_adminCommands.contains(commandName); + break; + case DomainAdmin: + isCommandAvailable = s_resellerCommands.contains(commandName); + break; + case ResourceAdmin: + isCommandAvailable = s_resourceDomainAdminCommands.contains(commandName); + break; + case User: + isCommandAvailable = s_userCommands.contains(commandName); + break; } return isCommandAvailable; } @@ -157,16 +143,16 @@ public class StaticRoleBasedAPIAccessChecker extends AdapterBase implements APIA try { short cmdPermissions = Short.parseShort(mask); - if ((cmdPermissions & ADMIN_COMMAND) != 0) { + if ((cmdPermissions & Admin.getValue()) != 0) { s_adminCommands.add((String) key); } - if ((cmdPermissions & RESOURCE_DOMAIN_ADMIN_COMMAND) != 0) { + if ((cmdPermissions & ResourceAdmin.getValue()) != 0) { s_resourceDomainAdminCommands.add((String) key); } - if ((cmdPermissions & DOMAIN_ADMIN_COMMAND) != 0) { + if ((cmdPermissions & DomainAdmin.getValue()) != 0) { s_resellerCommands.add((String) key); } - if ((cmdPermissions & USER_COMMAND) != 0) { + if ((cmdPermissions & User.getValue()) != 0) { s_userCommands.add((String) key); } s_allCommands.addAll(s_adminCommands); diff --git a/server/src/com/cloud/api/ApiServer.java b/server/src/com/cloud/api/ApiServer.java index 17a2b29638b..1c1e8ca0e96 100755 --- a/server/src/com/cloud/api/ApiServer.java +++ b/server/src/com/cloud/api/ApiServer.java @@ -53,6 +53,7 @@ import javax.servlet.http.HttpSession; import com.cloud.utils.ReflectUtil; import org.apache.cloudstack.acl.APIAccessChecker; import org.apache.cloudstack.acl.ControlledEntity; +import org.apache.cloudstack.acl.RoleType; import org.apache.cloudstack.api.*; import org.apache.cloudstack.api.command.user.account.ListAccountsCmd; import org.apache.cloudstack.api.command.user.account.ListProjectAccountsCmd; @@ -790,9 +791,39 @@ public class ApiServer implements HttpRequestHandler { } private boolean isCommandAvailable(User user, String commandName) { + if (user == null) { + return false; + } + + Account account = _accountMgr.getAccount(user.getAccountId()); + if (account == null) { + return false; + } + + RoleType roleType = RoleType.Unknown; + short accountType = account.getType(); + + // Account type to role type translation + switch (accountType) { + case Account.ACCOUNT_TYPE_ADMIN: + roleType = RoleType.Admin; + break; + case Account.ACCOUNT_TYPE_DOMAIN_ADMIN: + roleType = RoleType.DomainAdmin; + break; + case Account.ACCOUNT_TYPE_RESOURCE_DOMAIN_ADMIN: + roleType = RoleType.ResourceAdmin; + break; + case Account.ACCOUNT_TYPE_NORMAL: + roleType = RoleType.User; + break; + default: + return false; + } + for (APIAccessChecker apiChecker : _apiAccessCheckers) { // Fail the checking if any checker fails to verify - if (!apiChecker.canAccessAPI(user, commandName)) + if (!apiChecker.canAccessAPI(roleType, commandName)) return false; } return true; From 1c59dae7087857858c91fc5497ee7a692833a2a2 Mon Sep 17 00:00:00 2001 From: Marcus Sorensen Date: Thu, 10 Jan 2013 14:13:58 -0700 Subject: [PATCH 336/421] Summary: Add devcloud-kvm files Detail: Working on getting a KVM-based devcloud so that development that requires the KVM hypervisor can be simpler. This adds some setup devcloud files. Signed-off-by: Marcus Sorensen 1357852438 -0700 --- pom.xml | 2 + tools/devcloud-kvm/README.md | 21 +++++ tools/devcloud-kvm/devcloud-kvm.cfg | 97 +++++++++++++++++++ tools/devcloud-kvm/devcloud-kvm.sql | 40 ++++++++ tools/devcloud-kvm/pom.xml | 138 ++++++++++++++++++++++++++++ 5 files changed, 298 insertions(+) create mode 100644 tools/devcloud-kvm/README.md create mode 100644 tools/devcloud-kvm/devcloud-kvm.cfg create mode 100644 tools/devcloud-kvm/devcloud-kvm.sql create mode 100644 tools/devcloud-kvm/pom.xml diff --git a/pom.xml b/pom.xml index 1dcf36fe7ed..aad124b0baf 100644 --- a/pom.xml +++ b/pom.xml @@ -245,6 +245,7 @@ scripts/vm/systemvm/id_rsa.cloud tools/devcloud/basebuild/puppet-devcloudinitial/files/network.conf tools/devcloud/devcloud.cfg + tools/devcloud-kvm/devcloud-kvm.cfg ui/lib/flot/jquery.colorhelpers.js ui/lib/flot/jquery.flot.crosshair.js ui/lib/flot/jquery.flot.fillbetween.js @@ -371,6 +372,7 @@ developer tools/apidoc tools/devcloud + tools/devcloud-kvm tools/marvin tools/cli diff --git a/tools/devcloud-kvm/README.md b/tools/devcloud-kvm/README.md new file mode 100644 index 00000000000..3261fbe4b8e --- /dev/null +++ b/tools/devcloud-kvm/README.md @@ -0,0 +1,21 @@ +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. + +=========================================================== + +This directory hosts configs for setting up the devcloud-kvm +environment. diff --git a/tools/devcloud-kvm/devcloud-kvm.cfg b/tools/devcloud-kvm/devcloud-kvm.cfg new file mode 100644 index 00000000000..47a128fea14 --- /dev/null +++ b/tools/devcloud-kvm/devcloud-kvm.cfg @@ -0,0 +1,97 @@ +{ + "zones": [ + { + "name": "DevCloudKVM0", + "physical_networks": [ + { + "broadcastdomainrange": "Zone", + "name": "test-network", + "traffictypes": [ + { + "typ": "Guest" + }, + { + "typ": "Management" + } + ], + "providers": [ + { + "broadcastdomainrange": "ZONE", + "name": "VirtualRouter" + }, + { + "broadcastdomainrange": "Pod", + "name": "SecurityGroupProvider" + } + ] + } + ], + "dns2": "4.4.4.4", + "dns1": "8.8.8.8", + "securitygroupenabled": "true", + "localstorageenabled": "true", + "networktype": "Basic", + "pods": [ + { + "endip": "192.168.100.250", + "name": "test00", + "startip": "192.168.100.200", + "guestIpRanges": [ + { + "startip": "192.168.100.100", + "endip": "192.168.100.199", + "netmask": "255.255.255.0", + "gateway": "192.168.100.1" + } + ], + "netmask": "255.255.255.0", + "clusters": [ + { + "clustername": "test000", + "hypervisor": "KVM", + "hosts": [ + { + "username": "root", + "url": "http://192.168.100.10/", + "password": "password" + } + ], + "clustertype": "CloudManaged" + } + ], + "gateway": "192.168.100.1" + } + ], + "internaldns1": "192.168.100.10", + "secondaryStorages": [ + { + "url": "nfs://192.168.100.10:/nfs/secondary" + } + ] + } + ], + "logger": [ + { + "name": "TestClient", + "file": "/tmp/testclient.log" + }, + { + "name": "TestCase", + "file": "/tmp/testcase.log" + } + ], + "mgtSvr": [ + { + "mgtSvrIp": "127.0.0.1", + "port": 8096 + } + ], + "dbSvr": + { + "dbSvr": "127.0.0.1", + "port": 3306, + "user": "cloud", + "passwd": "cloud", + "db": "cloud" + } +} diff --git a/tools/devcloud-kvm/devcloud-kvm.sql b/tools/devcloud-kvm/devcloud-kvm.sql new file mode 100644 index 00000000000..eeba64153a3 --- /dev/null +++ b/tools/devcloud-kvm/devcloud-kvm.sql @@ -0,0 +1,40 @@ +-- Licensed to the Apache Software Foundation (ASF) under one +-- or more contributor license agreements. See the NOTICE file +-- distributed with this work for additional information +-- regarding copyright ownership. The ASF licenses this file +-- to you under the Apache License, Version 2.0 (the +-- "License"); you may not use this file except in compliance +-- with the License. You may obtain a copy of the License at +-- +-- http://www.apache.org/licenses/LICENSE-2.0 +-- +-- Unless required by applicable law or agreed to in writing, +-- software distributed under the License is distributed on an +-- "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +-- KIND, either express or implied. See the License for the +-- specific language governing permissions and limitations +-- under the License. + + +INSERT INTO `cloud`.`disk_offering` (id, name, uuid, display_text, created, use_local_storage, type, disk_size) VALUES (17, 'tinyOffering', UUID(), 'tinyOffering', NOW(), 1, 'Service', 0); +INSERT INTO `cloud`.`service_offering` (id, cpu, speed, ram_size) VALUES (17, 1, 100, 100); +INSERT INTO `cloud`.`disk_offering` (id, name, uuid, display_text, created, type, disk_size) VALUES (18, 'tinyDiskOffering', UUID(), 'tinyDiskOffering', NOW(), 'Disk', 1073741824); +INSERT INTO `cloud`.`configuration` (instance, name,value) VALUE('DEFAULT','router.ram.size', '100'); +INSERT INTO `cloud`.`configuration` (instance, name,value) VALUE('DEFAULT','router.cpu.mhz','100'); +INSERT INTO `cloud`.`configuration` (instance, name,value) VALUE('DEFAULT','console.ram.size','100'); +INSERT INTO `cloud`.`configuration` (instance, name,value) VALUE('DEFAULT','console.cpu.mhz', '100'); +INSERT INTO `cloud`.`configuration` (instance, name,value) VALUE('DEFAULT','ssvm.ram.size','100'); +INSERT INTO `cloud`.`configuration` (instance, name,value) VALUE('DEFAULT','ssvm.cpu.mhz','100'); +INSERT INTO `cloud`.`configuration` (instance, name, value) VALUE('DEFAULT', 'system.vm.use.local.storage', 'true'); +INSERT INTO `cloud`.`configuration` (instance, name, value) VALUE('DEFAULT', 'expunge.workers', '3'); +INSERT INTO `cloud`.`configuration` (instance, name, value) VALUE('DEFAULT', 'expunge.delay', '60'); +INSERT INTO `cloud`.`configuration` (instance, name, value) VALUE('DEFAULT', 'expunge.interval', '60'); +INSERT INTO `cloud`.`configuration` (instance, name, value) VALUE('DEFAULT', 'enable.ec2.api', 'true'); +INSERT INTO `cloud`.`configuration` (instance, name, value) VALUE('DEFAULT', 'enable.s3.api', 'true'); +INSERT INTO `cloud`.`configuration` (instance, name, value) VALUE('DEFAULT', 'host', '192.168.100.10'); +INSERT INTO `cloud`.`configuration` (instance, name, value) VALUE('DEFAULT', 'management.network.cidr', '192.168.100.0/24'); +INSERT INTO `cloud`.`configuration` (instance, name, value) VALUE('DEFAULT', 'secstorage.allowed.internal.sites', '192.168.0.0/8'); +UPDATE `cloud`.`configuration` SET value='10' where name = 'storage.overprovisioning.factor'; +UPDATE `cloud`.`configuration` SET value='10' where name = 'cpu.overprovisioning.factor'; +UPDATE `cloud`.`configuration` SET value='10' where name = 'mem.overprovisioning.factor'; +UPDATE `cloud`.`vm_template` SET unique_name="tiny Linux",name="tiny Linux",url="https://dl.dropbox.com/u/678991/cloudstack-extras/ttylinux_pv.qcow2",checksum="81dcf4b4ca05a3b637a040e851568f29",display_text="tiny Linux",format='QCOW2',hypervisor_type='KVM' where id=5; diff --git a/tools/devcloud-kvm/pom.xml b/tools/devcloud-kvm/pom.xml new file mode 100644 index 00000000000..c9af192bee3 --- /dev/null +++ b/tools/devcloud-kvm/pom.xml @@ -0,0 +1,138 @@ + + + 4.0.0 + cloud-devcloud-kvm + Apache CloudStack Developer Tools + pom + + org.apache.cloudstack + cloudstack + 4.1.0-SNAPSHOT + ../../pom.xml + + + + mysql + mysql-connector-java + 5.1.21 + runtime + + + + + install + + + + deploydb + + + deploydb + + + + + + org.codehaus.mojo + properties-maven-plugin + 1.0-alpha-2 + + + initialize + + read-project-properties + + + + ${project.parent.basedir}/utils/conf/db.properties + ${project.parent.basedir}/utils/conf/db.properties.override + + true + + + + + + org.codehaus.mojo + sql-maven-plugin + 1.5 + + + + mysql + mysql-connector-java + ${cs.mysql.version} + + + + org.gjt.mm.mysql.Driver + jdbc:mysql://${db.cloud.host}:${db.cloud.port}/cloud + ${db.cloud.username} + ${db.cloud.password} + + ${maven.test.skip} + true + + + + create-schema + process-test-resources + + execute + + + + ${basedir}/devcloud-kvm.sql + + + + + + + + + + deploysvr + + + deploysvr + + + + + + org.codehaus.mojo + exec-maven-plugin + 1.2.1 + + + package + + exec + + + + + python + + ../marvin/marvin/deployDataCenter.py + -i + devcloud-kvm.cfg + + + + + + + + From ffcc6d781ebbe7985251b9641de959a07a4ae6c8 Mon Sep 17 00:00:00 2001 From: Joe Brockmeier Date: Thu, 10 Jan 2013 16:01:02 -0600 Subject: [PATCH 337/421] CLOUDSTACK-683: Fixed missing image in Accessing VM Section --- docs/en-US/accessing-vms.xml | 2 +- docs/en-US/images/view-console-button.png | Bin 0 -> 59996 bytes 2 files changed, 1 insertion(+), 1 deletion(-) create mode 100644 docs/en-US/images/view-console-button.png diff --git a/docs/en-US/accessing-vms.xml b/docs/en-US/accessing-vms.xml index d69d021471b..c77ad4eee52 100644 --- a/docs/en-US/accessing-vms.xml +++ b/docs/en-US/accessing-vms.xml @@ -29,7 +29,7 @@ Log in to the &PRODUCT; UI as a user or admin. Click Instances, then click the name of a running VM. - Click the View Console button . + Click the View Console button . To access a VM directly over the network: diff --git a/docs/en-US/images/view-console-button.png b/docs/en-US/images/view-console-button.png new file mode 100644 index 0000000000000000000000000000000000000000..b321ceadefee0eb00c7db1de14002c7df81b4b31 GIT binary patch literal 59996 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 Date: Thu, 10 Jan 2013 15:27:15 -0800 Subject: [PATCH 338/421] RoleType: public enum to get presently defined static role in CloudStack Signed-off-by: Rohit Yadav --- .../org/apache/cloudstack/acl/RoleType.java | 37 +++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 api/src/org/apache/cloudstack/acl/RoleType.java diff --git a/api/src/org/apache/cloudstack/acl/RoleType.java b/api/src/org/apache/cloudstack/acl/RoleType.java new file mode 100644 index 00000000000..0d1c4460c1e --- /dev/null +++ b/api/src/org/apache/cloudstack/acl/RoleType.java @@ -0,0 +1,37 @@ +// 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 org.apache.cloudstack.acl; + +// Enum for default roles in CloudStack +public enum RoleType { + + Admin(1), + ResourceAdmin(2), + DomainAdmin(4), + User(8), + Unknown(0); + + private int mask; + + private RoleType(int mask) { + this.mask = mask; + } + + public int getValue() { + return mask; + } +} From f2ae0ae5ae70fbb5f33c004e05e4a17327094651 Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Thu, 10 Jan 2013 15:29:01 -0800 Subject: [PATCH 339/421] PropertiesUtil: Refactor process config file method in utils, return map of key=value Signed-off-by: Rohit Yadav --- utils/src/com/cloud/utils/PropertiesUtil.java | 40 +++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/utils/src/com/cloud/utils/PropertiesUtil.java b/utils/src/com/cloud/utils/PropertiesUtil.java index 3909ca876b6..90f8af8b33f 100755 --- a/utils/src/com/cloud/utils/PropertiesUtil.java +++ b/utils/src/com/cloud/utils/PropertiesUtil.java @@ -17,6 +17,8 @@ package com.cloud.utils; import java.io.File; +import java.io.FileNotFoundException; +import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.net.URL; @@ -28,6 +30,7 @@ import java.util.Set; import org.apache.log4j.Logger; public class PropertiesUtil { + private static final Logger s_logger = Logger.getLogger(PropertiesUtil.class); /** * Searches the class path and local paths to find the config file. * @param path path to find. if it starts with / then it's absolute path. @@ -116,4 +119,41 @@ public class PropertiesUtil { } return null; } + + // Returns key=value pairs by parsing a commands.properties/config file + // with syntax; key=cmd;value (with this syntax cmd is stripped) and key=value + public static Map processConfigFile(String[] configFiles) { + Map configMap = new HashMap(); + Properties preProcessedCommands = new Properties(); + for (String configFile : configFiles) { + File commandsFile = findConfigFile(configFile); + if (commandsFile != null) { + try { + preProcessedCommands.load(new FileInputStream(commandsFile)); + } catch (FileNotFoundException fnfex) { + // in case of a file within a jar in classpath, try to open stream using url + InputStream stream = PropertiesUtil.openStreamFromURL(configFile); + if (stream != null) { + try { + preProcessedCommands.load(stream); + } catch (IOException e) { + s_logger.error("IO Exception, unable to find properties file:", fnfex); + } + } else { + s_logger.error("Unable to find properites file", fnfex); + } + } catch (IOException ioe) { + s_logger.error("IO Exception loading properties file", ioe); + } + } + } + + for (Object key : preProcessedCommands.keySet()) { + String preProcessedCommand = preProcessedCommands.getProperty((String) key); + int splitIndex = preProcessedCommand.lastIndexOf(";"); + String value = preProcessedCommand.substring(splitIndex+1); + configMap.put((String)key, value); + } + return configMap; + } } From 1425736c193c56a51ec59b23e35080bd74926baf Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Thu, 10 Jan 2013 15:31:32 -0800 Subject: [PATCH 340/421] AccountManager: Add method to translate account type to role type Signed-off-by: Rohit Yadav --- api/src/com/cloud/user/AccountService.java | 3 +++ .../com/cloud/user/AccountManagerImpl.java | 26 +++++++++++++++++++ .../cloud/user/MockAccountManagerImpl.java | 6 +++++ 3 files changed, 35 insertions(+) diff --git a/api/src/com/cloud/user/AccountService.java b/api/src/com/cloud/user/AccountService.java index ce16f5ee063..9f5f4d225e0 100755 --- a/api/src/com/cloud/user/AccountService.java +++ b/api/src/com/cloud/user/AccountService.java @@ -20,6 +20,7 @@ import java.util.List; import java.util.Map; import org.apache.cloudstack.acl.ControlledEntity; +import org.apache.cloudstack.acl.RoleType; import org.apache.cloudstack.acl.SecurityChecker.AccessType; import org.apache.cloudstack.api.command.admin.user.DeleteUserCmd; @@ -193,6 +194,8 @@ public interface AccountService { UserAccount getUserByApiKey(String apiKey); + RoleType getRoleType(Account account); + void checkAccess(Account account, Domain domain) throws PermissionDeniedException; void checkAccess(Account account, AccessType accessType, boolean sameOwner, ControlledEntity... entities) throws PermissionDeniedException; diff --git a/server/src/com/cloud/user/AccountManagerImpl.java b/server/src/com/cloud/user/AccountManagerImpl.java index c6a7d51f08d..b910a03f99b 100755 --- a/server/src/com/cloud/user/AccountManagerImpl.java +++ b/server/src/com/cloud/user/AccountManagerImpl.java @@ -37,6 +37,7 @@ import javax.ejb.Local; import javax.naming.ConfigurationException; import org.apache.cloudstack.acl.ControlledEntity; +import org.apache.cloudstack.acl.RoleType; import org.apache.cloudstack.acl.SecurityChecker; import org.apache.cloudstack.api.command.admin.account.UpdateAccountCmd; import org.apache.cloudstack.api.command.admin.user.RegisterCmd; @@ -1542,6 +1543,31 @@ public class AccountManagerImpl implements AccountManager, AccountService, Manag } } + @Override + public RoleType getRoleType(Account account) { + RoleType roleType = RoleType.Unknown; + if (account == null) + return roleType; + short accountType = account.getType(); + + // Account type to role type translation + switch (accountType) { + case Account.ACCOUNT_TYPE_ADMIN: + roleType = RoleType.Admin; + break; + case Account.ACCOUNT_TYPE_DOMAIN_ADMIN: + roleType = RoleType.DomainAdmin; + break; + case Account.ACCOUNT_TYPE_RESOURCE_DOMAIN_ADMIN: + roleType = RoleType.ResourceAdmin; + break; + case Account.ACCOUNT_TYPE_NORMAL: + roleType = RoleType.User; + break; + } + return roleType; + } + @Override public User getActiveUser(long userId) { return _userDao.findById(userId); diff --git a/server/test/com/cloud/user/MockAccountManagerImpl.java b/server/test/com/cloud/user/MockAccountManagerImpl.java index ae5d0e5de4b..550304adfff 100644 --- a/server/test/com/cloud/user/MockAccountManagerImpl.java +++ b/server/test/com/cloud/user/MockAccountManagerImpl.java @@ -23,6 +23,7 @@ import javax.ejb.Local; import javax.naming.ConfigurationException; import org.apache.cloudstack.acl.ControlledEntity; +import org.apache.cloudstack.acl.RoleType; import org.apache.cloudstack.acl.SecurityChecker.AccessType; import com.cloud.api.query.vo.ControlledViewEntity; @@ -344,4 +345,9 @@ public class MockAccountManagerImpl implements Manager, AccountManager, AccountS return null; } + @Override + public RoleType getRoleType(Account account) { + return null; + } + } From a56f355cebc4b409840a3f2c2deea5bd0f91ab49 Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Thu, 10 Jan 2013 15:33:52 -0800 Subject: [PATCH 341/421] ApiServer: get role type from account manager using account Signed-off-by: Rohit Yadav --- server/src/com/cloud/api/ApiServer.java | 29 +++---------------------- 1 file changed, 3 insertions(+), 26 deletions(-) diff --git a/server/src/com/cloud/api/ApiServer.java b/server/src/com/cloud/api/ApiServer.java index 1c1e8ca0e96..73871259504 100755 --- a/server/src/com/cloud/api/ApiServer.java +++ b/server/src/com/cloud/api/ApiServer.java @@ -790,37 +790,14 @@ public class ApiServer implements HttpRequestHandler { return true; } - private boolean isCommandAvailable(User user, String commandName) { + private boolean isCommandAvailable(User user, String commandName) + throws PermissionDeniedException { if (user == null) { return false; } Account account = _accountMgr.getAccount(user.getAccountId()); - if (account == null) { - return false; - } - - RoleType roleType = RoleType.Unknown; - short accountType = account.getType(); - - // Account type to role type translation - switch (accountType) { - case Account.ACCOUNT_TYPE_ADMIN: - roleType = RoleType.Admin; - break; - case Account.ACCOUNT_TYPE_DOMAIN_ADMIN: - roleType = RoleType.DomainAdmin; - break; - case Account.ACCOUNT_TYPE_RESOURCE_DOMAIN_ADMIN: - roleType = RoleType.ResourceAdmin; - break; - case Account.ACCOUNT_TYPE_NORMAL: - roleType = RoleType.User; - break; - default: - return false; - } - + RoleType roleType = _accountMgr.getRoleType(account); for (APIAccessChecker apiChecker : _apiAccessCheckers) { // Fail the checking if any checker fails to verify if (!apiChecker.canAccessAPI(roleType, commandName)) From c4e890c55d4b106934ff3588adfbbf5a12f48d1e Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Thu, 10 Jan 2013 15:43:44 -0800 Subject: [PATCH 342/421] PluggableService: Refactor method to return map of key value pairs - Makes plugins self contained so they decide their properties file format - PluggableService creates the contract that implementing entity will return a properties map which is apiname:rolemask (both are strings) Signed-off-by: Rohit Yadav --- .../server/ManagementServerSimulatorImpl.java | 18 +++++++++--------- .../network/element/CiscoNexusVSMElement.java | 7 +++++-- .../element/F5ExternalLoadBalancerElement.java | 7 +++++-- .../JuniperSRXExternalFirewallElement.java | 7 +++++-- .../network/element/NetscalerElement.java | 6 ++++-- .../network/element/NiciraNvpElement.java | 6 ++++-- .../network/element/VirtualRouterElement.java | 6 ++++-- .../cloud/server/ManagementServerExtImpl.java | 6 ++++-- .../com/cloud/server/ManagementServerImpl.java | 5 +++-- .../utils/component/PluggableService.java | 4 +++- 10 files changed, 46 insertions(+), 26 deletions(-) diff --git a/plugins/hypervisors/simulator/src/com/cloud/server/ManagementServerSimulatorImpl.java b/plugins/hypervisors/simulator/src/com/cloud/server/ManagementServerSimulatorImpl.java index ad42c23380e..44ab26a020a 100644 --- a/plugins/hypervisors/simulator/src/com/cloud/server/ManagementServerSimulatorImpl.java +++ b/plugins/hypervisors/simulator/src/com/cloud/server/ManagementServerSimulatorImpl.java @@ -17,16 +17,16 @@ package com.cloud.server; +import com.cloud.utils.PropertiesUtil; + +import java.util.Map; + public class ManagementServerSimulatorImpl extends ManagementServerExtImpl { @Override - public String[] getPropertiesFiles() { - String[] apis = super.getPropertiesFiles(); - String[] newapis = new String[apis.length + 1]; - for (int i = 0; i < apis.length; i++) { - newapis[i] = apis[i]; - } - - newapis[apis.length] = "commands-simulator.properties"; - return newapis; + public Map getProperties() { + Map apiNameRoleMaskMapping = super.getProperties(); + apiNameRoleMaskMapping.putAll(PropertiesUtil.processConfigFile(new String[] + {"commands-simulator.properties"})); + return apiNameRoleMaskMapping; } } diff --git a/plugins/hypervisors/vmware/src/com/cloud/network/element/CiscoNexusVSMElement.java b/plugins/hypervisors/vmware/src/com/cloud/network/element/CiscoNexusVSMElement.java index 911078eac50..2cf87877859 100644 --- a/plugins/hypervisors/vmware/src/com/cloud/network/element/CiscoNexusVSMElement.java +++ b/plugins/hypervisors/vmware/src/com/cloud/network/element/CiscoNexusVSMElement.java @@ -17,6 +17,7 @@ package com.cloud.network.element; +import java.lang.String; import java.util.List; import java.util.Map; import java.util.ArrayList; @@ -24,6 +25,7 @@ import java.util.Set; import javax.ejb.Local; +import com.cloud.utils.PropertiesUtil; import org.apache.log4j.Logger; import com.cloud.api.commands.DeleteCiscoNexusVSMCmd; @@ -237,7 +239,8 @@ public class CiscoNexusVSMElement extends CiscoNexusVSMDeviceManagerImpl impleme } @Override - public String[] getPropertiesFiles() { - return new String[] { "cisconexusvsm_commands.properties" }; + public Map getProperties() { + return PropertiesUtil.processConfigFile(new String[] + { "cisconexusvsm_commands.properties" }); } } diff --git a/plugins/network-elements/f5/src/com/cloud/network/element/F5ExternalLoadBalancerElement.java b/plugins/network-elements/f5/src/com/cloud/network/element/F5ExternalLoadBalancerElement.java index 335dc6ecfec..438498ff38c 100644 --- a/plugins/network-elements/f5/src/com/cloud/network/element/F5ExternalLoadBalancerElement.java +++ b/plugins/network-elements/f5/src/com/cloud/network/element/F5ExternalLoadBalancerElement.java @@ -16,6 +16,7 @@ // under the License. package com.cloud.network.element; +import java.lang.String; import java.util.ArrayList; import java.util.HashMap; import java.util.List; @@ -24,6 +25,7 @@ import java.util.Set; import javax.ejb.Local; +import com.cloud.utils.PropertiesUtil; import org.apache.log4j.Logger; import com.cloud.api.ApiDBUtils; @@ -260,8 +262,9 @@ public class F5ExternalLoadBalancerElement extends ExternalLoadBalancerDeviceMan } @Override - public String[] getPropertiesFiles() { - return new String[] { "f5bigip_commands.properties" }; + public Map getProperties() { + return PropertiesUtil.processConfigFile(new String[] + { "f5bigip_commands.properties" }); } @Override diff --git a/plugins/network-elements/juniper-srx/src/com/cloud/network/element/JuniperSRXExternalFirewallElement.java b/plugins/network-elements/juniper-srx/src/com/cloud/network/element/JuniperSRXExternalFirewallElement.java index f491e66925a..55722ae23ab 100644 --- a/plugins/network-elements/juniper-srx/src/com/cloud/network/element/JuniperSRXExternalFirewallElement.java +++ b/plugins/network-elements/juniper-srx/src/com/cloud/network/element/JuniperSRXExternalFirewallElement.java @@ -16,6 +16,7 @@ // under the License. package com.cloud.network.element; +import java.lang.String; import java.util.ArrayList; import java.util.HashMap; import java.util.List; @@ -24,6 +25,7 @@ import java.util.Set; import javax.ejb.Local; +import com.cloud.utils.PropertiesUtil; import org.apache.log4j.Logger; import com.cloud.api.ApiDBUtils; @@ -402,8 +404,9 @@ public class JuniperSRXExternalFirewallElement extends ExternalFirewallDeviceMan } @Override - public String[] getPropertiesFiles() { - return new String[] { "junipersrx_commands.properties"}; + public Map getProperties() { + return PropertiesUtil.processConfigFile(new String[] + { "junipersrx_commands.properties"}); } @Override diff --git a/plugins/network-elements/netscaler/src/com/cloud/network/element/NetscalerElement.java b/plugins/network-elements/netscaler/src/com/cloud/network/element/NetscalerElement.java index b1fe949632c..ac1619ef1f8 100644 --- a/plugins/network-elements/netscaler/src/com/cloud/network/element/NetscalerElement.java +++ b/plugins/network-elements/netscaler/src/com/cloud/network/element/NetscalerElement.java @@ -26,6 +26,7 @@ import java.util.Set; import javax.ejb.Local; +import com.cloud.utils.PropertiesUtil; import org.apache.log4j.Logger; import com.cloud.agent.AgentManager; @@ -464,8 +465,9 @@ StaticNatServiceProvider { } @Override - public String[] getPropertiesFiles() { - return new String[] { "netscalerloadbalancer_commands.properties" }; + public Map getProperties() { + return PropertiesUtil.processConfigFile(new String[] + { "netscalerloadbalancer_commands.properties" }); } @Override diff --git a/plugins/network-elements/nicira-nvp/src/com/cloud/network/element/NiciraNvpElement.java b/plugins/network-elements/nicira-nvp/src/com/cloud/network/element/NiciraNvpElement.java index cc53ee1afae..22fab500fdb 100644 --- a/plugins/network-elements/nicira-nvp/src/com/cloud/network/element/NiciraNvpElement.java +++ b/plugins/network-elements/nicira-nvp/src/com/cloud/network/element/NiciraNvpElement.java @@ -27,6 +27,7 @@ import java.util.UUID; import javax.ejb.Local; import javax.naming.ConfigurationException; +import com.cloud.utils.PropertiesUtil; import org.apache.log4j.Logger; import com.cloud.agent.AgentManager; @@ -540,8 +541,9 @@ public class NiciraNvpElement extends AdapterBase implements } @Override - public String[] getPropertiesFiles() { - return new String[] { "nicira-nvp_commands.properties" }; + public Map getProperties() { + return PropertiesUtil.processConfigFile(new String[] + { "nicira-nvp_commands.properties" }); } @Override diff --git a/server/src/com/cloud/network/element/VirtualRouterElement.java b/server/src/com/cloud/network/element/VirtualRouterElement.java index b5b8b1a73cd..823b74f269b 100755 --- a/server/src/com/cloud/network/element/VirtualRouterElement.java +++ b/server/src/com/cloud/network/element/VirtualRouterElement.java @@ -24,6 +24,7 @@ import java.util.Set; import javax.ejb.Local; +import com.cloud.utils.PropertiesUtil; import org.apache.cloudstack.api.command.admin.router.ConfigureVirtualRouterElementCmd; import org.apache.cloudstack.api.command.admin.router.ListVirtualRouterElementsCmd; import org.apache.log4j.Logger; @@ -680,8 +681,9 @@ public class VirtualRouterElement extends AdapterBase implements VirtualRouterEl } @Override - public String[] getPropertiesFiles() { - return new String[] { "virtualrouter_commands.properties" }; + public Map getProperties() { + return PropertiesUtil.processConfigFile(new String[] + { "virtualrouter_commands.properties" }); } @Override diff --git a/server/src/com/cloud/server/ManagementServerExtImpl.java b/server/src/com/cloud/server/ManagementServerExtImpl.java index b7320276341..8a59d2f9c1c 100644 --- a/server/src/com/cloud/server/ManagementServerExtImpl.java +++ b/server/src/com/cloud/server/ManagementServerExtImpl.java @@ -29,6 +29,7 @@ import com.cloud.domain.dao.DomainDao; import com.cloud.exception.InvalidParameterValueException; import com.cloud.exception.PermissionDeniedException; import com.cloud.projects.Project; +import com.cloud.utils.PropertiesUtil; import org.apache.cloudstack.api.response.UsageTypeResponse; import com.cloud.usage.UsageJobVO; import com.cloud.usage.UsageTypes; @@ -206,8 +207,9 @@ public class ManagementServerExtImpl extends ManagementServerImpl implements Man } @Override - public String[] getPropertiesFiles() { - return new String[] { "commands.properties", "commands-ext.properties" }; + public Map getProperties() { + return PropertiesUtil.processConfigFile(new String[] + { "commands.properties", "commands-ext.properties" }); } private Date computeAdjustedTime(Date initialDate, TimeZone targetTZ, boolean adjustToDayStart) { diff --git a/server/src/com/cloud/server/ManagementServerImpl.java b/server/src/com/cloud/server/ManagementServerImpl.java index dcecaf40a57..3e0f6efae7c 100755 --- a/server/src/com/cloud/server/ManagementServerImpl.java +++ b/server/src/com/cloud/server/ManagementServerImpl.java @@ -2297,8 +2297,9 @@ public class ManagementServerImpl implements ManagementServer { } @Override - public String[] getPropertiesFiles() { - return new String[] { "commands.properties" }; + public Map getProperties() { + return PropertiesUtil.processConfigFile(new String[] + { "commands.properties" }); } protected class EventPurgeTask implements Runnable { diff --git a/utils/src/com/cloud/utils/component/PluggableService.java b/utils/src/com/cloud/utils/component/PluggableService.java index d2199394a69..f6f72a904d0 100644 --- a/utils/src/com/cloud/utils/component/PluggableService.java +++ b/utils/src/com/cloud/utils/component/PluggableService.java @@ -16,9 +16,11 @@ // under the License. package com.cloud.utils.component; +import java.util.Map; + // This interface defines methods for pluggable code within the Cloud Stack. public interface PluggableService { // The config command properties filenames that lists allowed API commands // and role masks supported by this pluggable service - String[] getPropertiesFiles(); + Map getProperties(); } From 0b1c2a5981fea3d4455acee6ac77e9fa84c9724b Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Thu, 10 Jan 2013 15:47:59 -0800 Subject: [PATCH 343/421] ApiDiscovery: Fix listApis interface, fix getProperties In case of api discovery, it does not make sense to create a separate properties file If this plugin is enabled in components.xml, a user should be able to discover all the apis accessible to their role. listApis based on role type of caller user Signed-off-by: Rohit Yadav --- .../api/command/user/discovery/ListApisCmd.java | 7 ++++++- .../cloudstack/discovery/ApiDiscoveryService.java | 3 ++- .../cloudstack/discovery/ApiDiscoveryServiceImpl.java | 10 +++++++--- 3 files changed, 15 insertions(+), 5 deletions(-) diff --git a/plugins/api/discovery/src/org/apache/cloudstack/api/command/user/discovery/ListApisCmd.java b/plugins/api/discovery/src/org/apache/cloudstack/api/command/user/discovery/ListApisCmd.java index dcbaec1d160..feab20ac5cf 100644 --- a/plugins/api/discovery/src/org/apache/cloudstack/api/command/user/discovery/ListApisCmd.java +++ b/plugins/api/discovery/src/org/apache/cloudstack/api/command/user/discovery/ListApisCmd.java @@ -16,6 +16,9 @@ // under the License. package org.apache.cloudstack.api.command.user.discovery; +import com.cloud.user.Account; +import com.cloud.user.UserContext; +import org.apache.cloudstack.acl.RoleType; import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.BaseListCmd; @@ -39,7 +42,9 @@ public class ListApisCmd extends BaseListCmd { @Override public void execute() throws ServerApiException { if (_apiDiscoveryService != null) { - ListResponse response = (ListResponse) _apiDiscoveryService.listApis(); + Account caller = UserContext.current().getCaller(); + RoleType roleType = _accountService.getRoleType(UserContext.current().getCaller()); + ListResponse response = (ListResponse) _apiDiscoveryService.listApis(roleType); if (response == null) { throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Api Discovery plugin was unable to find and process any apis"); } diff --git a/plugins/api/discovery/src/org/apache/cloudstack/discovery/ApiDiscoveryService.java b/plugins/api/discovery/src/org/apache/cloudstack/discovery/ApiDiscoveryService.java index 96ea3ee4d34..a1d440e9ccf 100644 --- a/plugins/api/discovery/src/org/apache/cloudstack/discovery/ApiDiscoveryService.java +++ b/plugins/api/discovery/src/org/apache/cloudstack/discovery/ApiDiscoveryService.java @@ -17,9 +17,10 @@ package org.apache.cloudstack.discovery; import com.cloud.utils.component.PluggableService; +import org.apache.cloudstack.acl.RoleType; import org.apache.cloudstack.api.BaseResponse; import org.apache.cloudstack.api.response.ListResponse; public interface ApiDiscoveryService extends PluggableService { - ListResponse listApis(); + ListResponse listApis(RoleType roleType); } diff --git a/plugins/api/discovery/src/org/apache/cloudstack/discovery/ApiDiscoveryServiceImpl.java b/plugins/api/discovery/src/org/apache/cloudstack/discovery/ApiDiscoveryServiceImpl.java index ea6b206fa44..2bc17bdbf4d 100644 --- a/plugins/api/discovery/src/org/apache/cloudstack/discovery/ApiDiscoveryServiceImpl.java +++ b/plugins/api/discovery/src/org/apache/cloudstack/discovery/ApiDiscoveryServiceImpl.java @@ -16,7 +16,9 @@ // under the License. package org.apache.cloudstack.discovery; +import com.cloud.utils.PropertiesUtil; import com.cloud.utils.ReflectUtil; +import org.apache.cloudstack.acl.RoleType; import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.BaseAsyncCmd; @@ -108,12 +110,14 @@ public class ApiDiscoveryServiceImpl implements ApiDiscoveryService { } @Override - public ListResponse listApis() { + public ListResponse listApis(RoleType roleType) { return _discoveryResponse; } @Override - public String[] getPropertiesFiles() { - return new String[] { "api-discovery_commands.properties" }; + public Map getProperties() { + Map apiDiscoveryPropertyMap = new HashMap(); + apiDiscoveryPropertyMap.put("listApis", "15"); + return apiDiscoveryPropertyMap; } } From 8f26e171e64726a726fa146f9c02433e48c0ba60 Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Thu, 10 Jan 2013 15:51:46 -0800 Subject: [PATCH 344/421] ManagementServerImpl: Fix missing import of PropertiesUtil Signed-off-by: Rohit Yadav --- server/src/com/cloud/server/ManagementServerImpl.java | 1 + 1 file changed, 1 insertion(+) diff --git a/server/src/com/cloud/server/ManagementServerImpl.java b/server/src/com/cloud/server/ManagementServerImpl.java index 3e0f6efae7c..79ad759dd0b 100755 --- a/server/src/com/cloud/server/ManagementServerImpl.java +++ b/server/src/com/cloud/server/ManagementServerImpl.java @@ -223,6 +223,7 @@ import com.cloud.utils.EnumUtils; import com.cloud.utils.NumbersUtil; import com.cloud.utils.Pair; import com.cloud.utils.PasswordGenerator; +import com.cloud.utils.PropertiesUtil; import com.cloud.utils.Ternary; import com.cloud.utils.component.Adapters; import com.cloud.utils.component.ComponentLocator; From 345c179e77dce7ba471f6846fac785bd34bda294 Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Thu, 10 Jan 2013 15:53:18 -0800 Subject: [PATCH 345/421] plugins: Check access based on roleType, remove unnecessary properties.in file - Fix StaticRoleBasedAPIAccessChecker to check api access based on roletype - Remove properties file which is not needed now for api discovery plugin Signed-off-by: Rohit Yadav --- .../api-discovery_commands.properties.in | 23 --- .../acl/StaticRoleBasedAPIAccessChecker.java | 136 +++++++----------- 2 files changed, 48 insertions(+), 111 deletions(-) delete mode 100644 client/tomcatconf/api-discovery_commands.properties.in diff --git a/client/tomcatconf/api-discovery_commands.properties.in b/client/tomcatconf/api-discovery_commands.properties.in deleted file mode 100644 index 49ddfde42d8..00000000000 --- a/client/tomcatconf/api-discovery_commands.properties.in +++ /dev/null @@ -1,23 +0,0 @@ -# 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. - -# bitmap of permissions at the end of each classname, 1 = ADMIN, 2 = -# RESOURCE_DOMAIN_ADMIN, 4 = DOMAIN_ADMIN, 8 = USER -# Please standardize naming conventions to camel-case (even for acronyms). - -# CloudStack API Discovery service command -listApis=15 diff --git a/plugins/acl/static-role-based/src/org/apache/cloudstack/acl/StaticRoleBasedAPIAccessChecker.java b/plugins/acl/static-role-based/src/org/apache/cloudstack/acl/StaticRoleBasedAPIAccessChecker.java index 43ca403f890..689540aa291 100644 --- a/plugins/acl/static-role-based/src/org/apache/cloudstack/acl/StaticRoleBasedAPIAccessChecker.java +++ b/plugins/acl/static-role-based/src/org/apache/cloudstack/acl/StaticRoleBasedAPIAccessChecker.java @@ -16,28 +16,23 @@ // under the License. package org.apache.cloudstack.acl; -import java.io.File; -import java.io.FileInputStream; -import java.io.FileNotFoundException; -import java.io.IOException; -import java.io.InputStream; -import java.util.*; - -import javax.ejb.Local; -import javax.naming.ConfigurationException; - -import org.apache.cloudstack.acl.APIAccessChecker; -import org.apache.cloudstack.acl.RoleType; -import static org.apache.cloudstack.acl.RoleType.*; -import org.apache.log4j.Logger; - import com.cloud.exception.PermissionDeniedException; import com.cloud.server.ManagementServer; -import com.cloud.utils.PropertiesUtil; import com.cloud.utils.component.AdapterBase; import com.cloud.utils.component.ComponentLocator; import com.cloud.utils.component.PluggableService; +import javax.ejb.Local; +import javax.naming.ConfigurationException; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import static org.apache.cloudstack.acl.RoleType.*; +import org.apache.log4j.Logger; + // This is the default API access checker that grab's the user's account // based on the account type, access is granted @Local(value=APIAccessChecker.class) @@ -60,35 +55,29 @@ public class StaticRoleBasedAPIAccessChecker extends AdapterBase implements APIA } @Override - public boolean canAccessAPI(RoleType roleType, String apiCommandName) - throws PermissionDeniedException{ + public boolean canAccessAPI(RoleType roleType, String commandName) + throws PermissionDeniedException { - boolean commandExists = s_allCommands.contains(apiCommandName); + boolean commandExists = s_allCommands.contains(commandName); + boolean commandAccessible = false; - if(commandExists) { - return isCommandAvailableForAccount(roleType, apiCommandName); + if (commandExists) { + switch (roleType) { + case Admin: + commandAccessible = s_adminCommands.contains(commandName); + break; + case DomainAdmin: + commandAccessible = s_resellerCommands.contains(commandName); + break; + case ResourceAdmin: + commandAccessible = s_resourceDomainAdminCommands.contains(commandName); + break; + case User: + commandAccessible = s_userCommands.contains(commandName); + break; + } } - - return commandExists; - } - - private static boolean isCommandAvailableForAccount(RoleType roleType, String commandName) { - boolean isCommandAvailable = false; - switch (roleType) { - case Admin: - isCommandAvailable = s_adminCommands.contains(commandName); - break; - case DomainAdmin: - isCommandAvailable = s_resellerCommands.contains(commandName); - break; - case ResourceAdmin: - isCommandAvailable = s_resourceDomainAdminCommands.contains(commandName); - break; - case User: - isCommandAvailable = s_userCommands.contains(commandName); - break; - } - return isCommandAvailable; + return commandExists && commandAccessible; } @Override @@ -100,69 +89,40 @@ public class StaticRoleBasedAPIAccessChecker extends AdapterBase implements APIA List services = locator.getAllPluggableServices(); services.add((PluggableService) ComponentLocator.getComponent(ManagementServer.Name)); - List configFiles = new ArrayList(); + Map configPropertiesMap = new HashMap(); for (PluggableService service : services) { - configFiles.addAll(Arrays.asList(service.getPropertiesFiles())); + configPropertiesMap.putAll(service.getProperties()); } - processConfigFiles(configFiles); + processConfigFiles(configPropertiesMap); return true; } - private void processConfigFiles(List configFiles) { - Properties preProcessedCommands = new Properties(); - - for (String configFile : configFiles) { - File commandsFile = PropertiesUtil.findConfigFile(configFile); - if (commandsFile != null) { - try { - preProcessedCommands.load(new FileInputStream(commandsFile)); - } catch (FileNotFoundException fnfex) { - // in case of a file within a jar in classpath, try to open stream using url - InputStream stream = PropertiesUtil.openStreamFromURL(configFile); - if (stream != null) { - try { - preProcessedCommands.load(stream); - } catch (IOException e) { - s_logger.error("IO Exception, unable to find properties file:", fnfex); - } - } else { - s_logger.error("Unable to find properites file", fnfex); - } - } catch (IOException ioe) { - s_logger.error("IO Exception loading properties file", ioe); - } - } - } - - for (Object key : preProcessedCommands.keySet()) { - String preProcessedCommand = preProcessedCommands.getProperty((String) key); - int splitIndex = preProcessedCommand.lastIndexOf(";"); - // Backward compatible to old style, apiname=pkg;mask - String mask = preProcessedCommand.substring(splitIndex+1); - + private void processConfigFiles(Map config) { + for (Map.Entry entry: config.entrySet()) { + String apiName = entry.getKey(); + String roleMask = entry.getValue(); try { - short cmdPermissions = Short.parseShort(mask); + short cmdPermissions = Short.parseShort(roleMask); if ((cmdPermissions & Admin.getValue()) != 0) { - s_adminCommands.add((String) key); + s_adminCommands.add(apiName); } if ((cmdPermissions & ResourceAdmin.getValue()) != 0) { - s_resourceDomainAdminCommands.add((String) key); + s_resourceDomainAdminCommands.add(apiName); } if ((cmdPermissions & DomainAdmin.getValue()) != 0) { - s_resellerCommands.add((String) key); + s_resellerCommands.add(apiName); } if ((cmdPermissions & User.getValue()) != 0) { - s_userCommands.add((String) key); + s_userCommands.add(apiName); } - s_allCommands.addAll(s_adminCommands); - s_allCommands.addAll(s_resourceDomainAdminCommands); - s_allCommands.addAll(s_userCommands); - s_allCommands.addAll(s_resellerCommands); } catch (NumberFormatException nfe) { - s_logger.info("Malformed command.properties permissions value, key = " + key + ", value = " + preProcessedCommand); + s_logger.info("Malformed commands.properties permissions value, for entry: " + entry.toString()); } } + s_allCommands.addAll(s_adminCommands); + s_allCommands.addAll(s_resourceDomainAdminCommands); + s_allCommands.addAll(s_userCommands); + s_allCommands.addAll(s_resellerCommands); } - } From e63e35250876a4f985a707ac52bdef34465a2470 Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Thu, 10 Jan 2013 16:08:16 -0800 Subject: [PATCH 346/421] ApiServer: Log a better message if api access fails and debug it Signed-off-by: Rohit Yadav --- server/src/com/cloud/api/ApiServer.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/server/src/com/cloud/api/ApiServer.java b/server/src/com/cloud/api/ApiServer.java index 73871259504..be3c08716cc 100755 --- a/server/src/com/cloud/api/ApiServer.java +++ b/server/src/com/cloud/api/ApiServer.java @@ -552,14 +552,14 @@ public class ApiServer implements HttpRequestHandler { if (userId != null) { User user = ApiDBUtils.findUserById(userId); if (!isCommandAvailable(user, commandName)) { - s_logger.warn("The given command:" + commandName + " does not exist or it is not available for user"); + s_logger.debug("The given command:" + commandName + " does not exist or it is not available for user with id:" + userId); throw new ServerApiException(BaseCmd.UNSUPPORTED_ACTION_ERROR, "The given command does not exist or it is not available for user"); } return true; } else { // check against every available command to see if the command exists or not if (!isCommandAvailable(null, commandName) && !commandName.equals("login") && !commandName.equals("logout")) { - s_logger.warn("The given command:" + commandName + " does not exist or it is not available for user"); + s_logger.debug("The given command:" + commandName + " does not exist or it is not available for user with id:" + userId); throw new ServerApiException(BaseCmd.UNSUPPORTED_ACTION_ERROR, "The given command does not exist or it is not available for user"); } } @@ -653,8 +653,8 @@ public class ApiServer implements HttpRequestHandler { UserContext.updateContext(user.getId(), account, null); if (!isCommandAvailable(user, commandName)) { - s_logger.warn("The given command:" + commandName + " does not exist or it is not available for user"); - throw new ServerApiException(BaseCmd.UNSUPPORTED_ACTION_ERROR, "The given command:" + commandName + " does not exist or it is not available for user"); + s_logger.debug("The given command:" + commandName + " does not exist or it is not available for user"); + throw new ServerApiException(BaseCmd.UNSUPPORTED_ACTION_ERROR, "The given command:" + commandName + " does not exist or it is not available for user with id:" + userId); } // verify secret key exists From 18bdc58cebdceb4e078edbc8aa28f2a415729cae Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Thu, 10 Jan 2013 17:21:58 -0800 Subject: [PATCH 347/421] APIAccessChecker: Refactor and simply plugin implementation using better data structures Signed-off-by: Rohit Yadav --- .../cloudstack/acl/APIAccessChecker.java | 3 +- .../acl/StaticRoleBasedAPIAccessChecker.java | 64 ++++--------------- 2 files changed, 14 insertions(+), 53 deletions(-) diff --git a/api/src/org/apache/cloudstack/acl/APIAccessChecker.java b/api/src/org/apache/cloudstack/acl/APIAccessChecker.java index a5c656d731a..1645fa2c832 100644 --- a/api/src/org/apache/cloudstack/acl/APIAccessChecker.java +++ b/api/src/org/apache/cloudstack/acl/APIAccessChecker.java @@ -17,7 +17,6 @@ package org.apache.cloudstack.acl; import org.apache.cloudstack.acl.RoleType; -import com.cloud.exception.PermissionDeniedException; import com.cloud.utils.component.Adapter; /** @@ -25,5 +24,5 @@ import com.cloud.utils.component.Adapter; */ public interface APIAccessChecker extends Adapter { // Interface for checking access to an API for an user - boolean canAccessAPI(RoleType roleType, String apiCommandName) throws PermissionDeniedException; + boolean canAccessAPI(RoleType roleType, String apiCommandName); } diff --git a/plugins/acl/static-role-based/src/org/apache/cloudstack/acl/StaticRoleBasedAPIAccessChecker.java b/plugins/acl/static-role-based/src/org/apache/cloudstack/acl/StaticRoleBasedAPIAccessChecker.java index 689540aa291..d6bf3f63c74 100644 --- a/plugins/acl/static-role-based/src/org/apache/cloudstack/acl/StaticRoleBasedAPIAccessChecker.java +++ b/plugins/acl/static-role-based/src/org/apache/cloudstack/acl/StaticRoleBasedAPIAccessChecker.java @@ -16,7 +16,6 @@ // under the License. package org.apache.cloudstack.acl; -import com.cloud.exception.PermissionDeniedException; import com.cloud.server.ManagementServer; import com.cloud.utils.component.AdapterBase; import com.cloud.utils.component.ComponentLocator; @@ -39,45 +38,20 @@ import org.apache.log4j.Logger; public class StaticRoleBasedAPIAccessChecker extends AdapterBase implements APIAccessChecker { protected static final Logger s_logger = Logger.getLogger(StaticRoleBasedAPIAccessChecker.class); - private static Set s_userCommands = null; - private static Set s_resellerCommands = null; // AKA domain-admin - private static Set s_adminCommands = null; - private static Set s_resourceDomainAdminCommands = null; - private static Set s_allCommands = null; + + private static Map> s_roleBasedApisMap = + new HashMap>(); protected StaticRoleBasedAPIAccessChecker() { super(); - s_allCommands = new HashSet(); - s_userCommands = new HashSet(); - s_resellerCommands = new HashSet(); - s_adminCommands = new HashSet(); - s_resourceDomainAdminCommands = new HashSet(); + for (RoleType roleType: RoleType.values()) { + s_roleBasedApisMap.put(roleType, new HashSet()); + } } @Override - public boolean canAccessAPI(RoleType roleType, String commandName) - throws PermissionDeniedException { - - boolean commandExists = s_allCommands.contains(commandName); - boolean commandAccessible = false; - - if (commandExists) { - switch (roleType) { - case Admin: - commandAccessible = s_adminCommands.contains(commandName); - break; - case DomainAdmin: - commandAccessible = s_resellerCommands.contains(commandName); - break; - case ResourceAdmin: - commandAccessible = s_resourceDomainAdminCommands.contains(commandName); - break; - case User: - commandAccessible = s_userCommands.contains(commandName); - break; - } - } - return commandExists && commandAccessible; + public boolean canAccessAPI(RoleType roleType, String commandName) { + return s_roleBasedApisMap.get(roleType).contains(commandName); } @Override @@ -98,31 +72,19 @@ public class StaticRoleBasedAPIAccessChecker extends AdapterBase implements APIA return true; } - private void processConfigFiles(Map config) { - for (Map.Entry entry: config.entrySet()) { + private void processConfigFiles(Map configMap) { + for (Map.Entry entry: configMap.entrySet()) { String apiName = entry.getKey(); String roleMask = entry.getValue(); try { short cmdPermissions = Short.parseShort(roleMask); - if ((cmdPermissions & Admin.getValue()) != 0) { - s_adminCommands.add(apiName); - } - if ((cmdPermissions & ResourceAdmin.getValue()) != 0) { - s_resourceDomainAdminCommands.add(apiName); - } - if ((cmdPermissions & DomainAdmin.getValue()) != 0) { - s_resellerCommands.add(apiName); - } - if ((cmdPermissions & User.getValue()) != 0) { - s_userCommands.add(apiName); + for (RoleType roleType: RoleType.values()) { + if ((cmdPermissions & roleType.getValue()) != 0) + s_roleBasedApisMap.get(roleType).add(apiName); } } catch (NumberFormatException nfe) { s_logger.info("Malformed commands.properties permissions value, for entry: " + entry.toString()); } } - s_allCommands.addAll(s_adminCommands); - s_allCommands.addAll(s_resourceDomainAdminCommands); - s_allCommands.addAll(s_userCommands); - s_allCommands.addAll(s_resellerCommands); } } From 74bb043c37d28bad586ff8a42d8aa6533cef4aa8 Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Thu, 10 Jan 2013 18:49:18 -0800 Subject: [PATCH 348/421] APIChecker: Rename refactor and add interface checkExistence Signed-off-by: Rohit Yadav --- ...{APIAccessChecker.java => APIChecker.java} | 12 ++++----- client/tomcatconf/components.xml.in | 2 +- .../acl/StaticRoleBasedAPIAccessChecker.java | 16 +++++++++--- server/src/com/cloud/api/ApiServer.java | 25 ++++++++++++------- 4 files changed, 35 insertions(+), 20 deletions(-) rename api/src/org/apache/cloudstack/acl/{APIAccessChecker.java => APIChecker.java} (72%) diff --git a/api/src/org/apache/cloudstack/acl/APIAccessChecker.java b/api/src/org/apache/cloudstack/acl/APIChecker.java similarity index 72% rename from api/src/org/apache/cloudstack/acl/APIAccessChecker.java rename to api/src/org/apache/cloudstack/acl/APIChecker.java index 1645fa2c832..61dd7de75cb 100644 --- a/api/src/org/apache/cloudstack/acl/APIAccessChecker.java +++ b/api/src/org/apache/cloudstack/acl/APIChecker.java @@ -19,10 +19,10 @@ package org.apache.cloudstack.acl; import org.apache.cloudstack.acl.RoleType; import com.cloud.utils.component.Adapter; -/** - * APIAccessChecker checks the ownership and access control to API requests - */ -public interface APIAccessChecker extends Adapter { - // Interface for checking access to an API for an user - boolean canAccessAPI(RoleType roleType, String apiCommandName); +// APIChecker checks the ownership and access control to API requests +public interface APIChecker extends Adapter { + // Interface for checking access for a role using apiname + boolean checkAccess(RoleType roleType, String apiCommandName); + // Interface for checking existence of an api by name + boolean checkExistence(String apiCommandName); } diff --git a/client/tomcatconf/components.xml.in b/client/tomcatconf/components.xml.in index b779c860cc2..bb39839c820 100755 --- a/client/tomcatconf/components.xml.in +++ b/client/tomcatconf/components.xml.in @@ -53,7 +53,7 @@ under the License. true - + diff --git a/plugins/acl/static-role-based/src/org/apache/cloudstack/acl/StaticRoleBasedAPIAccessChecker.java b/plugins/acl/static-role-based/src/org/apache/cloudstack/acl/StaticRoleBasedAPIAccessChecker.java index d6bf3f63c74..740fbbc6456 100644 --- a/plugins/acl/static-role-based/src/org/apache/cloudstack/acl/StaticRoleBasedAPIAccessChecker.java +++ b/plugins/acl/static-role-based/src/org/apache/cloudstack/acl/StaticRoleBasedAPIAccessChecker.java @@ -29,13 +29,12 @@ import java.util.List; import java.util.Map; import java.util.Set; -import static org.apache.cloudstack.acl.RoleType.*; import org.apache.log4j.Logger; // This is the default API access checker that grab's the user's account // based on the account type, access is granted -@Local(value=APIAccessChecker.class) -public class StaticRoleBasedAPIAccessChecker extends AdapterBase implements APIAccessChecker { +@Local(value=APIChecker.class) +public class StaticRoleBasedAPIAccessChecker extends AdapterBase implements APIChecker { protected static final Logger s_logger = Logger.getLogger(StaticRoleBasedAPIAccessChecker.class); @@ -50,10 +49,19 @@ public class StaticRoleBasedAPIAccessChecker extends AdapterBase implements APIA } @Override - public boolean canAccessAPI(RoleType roleType, String commandName) { + public boolean checkAccess(RoleType roleType, String commandName) { return s_roleBasedApisMap.get(roleType).contains(commandName); } + @Override + public boolean checkExistence(String apiName) { + for (RoleType roleType: RoleType.values()) { + if (s_roleBasedApisMap.get(roleType).contains(apiName)) + return true; + } + return false; + } + @Override public boolean configure(String name, Map params) throws ConfigurationException { super.configure(name, params); diff --git a/server/src/com/cloud/api/ApiServer.java b/server/src/com/cloud/api/ApiServer.java index be3c08716cc..7663e8e724a 100755 --- a/server/src/com/cloud/api/ApiServer.java +++ b/server/src/com/cloud/api/ApiServer.java @@ -51,8 +51,7 @@ import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import com.cloud.utils.ReflectUtil; -import org.apache.cloudstack.acl.APIAccessChecker; -import org.apache.cloudstack.acl.ControlledEntity; +import org.apache.cloudstack.acl.APIChecker; import org.apache.cloudstack.acl.RoleType; import org.apache.cloudstack.api.*; import org.apache.cloudstack.api.command.user.account.ListAccountsCmd; @@ -146,8 +145,8 @@ public class ApiServer implements HttpRequestHandler { @Inject private DomainManager _domainMgr = null; @Inject private AsyncJobManager _asyncMgr = null; - @Inject(adapter = APIAccessChecker.class) - protected Adapters _apiAccessCheckers; + @Inject(adapter = APIChecker.class) + protected Adapters _apiAccessCheckers; private Account _systemAccount = null; private User _systemUser = null; @@ -558,7 +557,7 @@ public class ApiServer implements HttpRequestHandler { return true; } else { // check against every available command to see if the command exists or not - if (!isCommandAvailable(null, commandName) && !commandName.equals("login") && !commandName.equals("logout")) { + if (!doesCommandExist(commandName) && !commandName.equals("login") && !commandName.equals("logout")) { s_logger.debug("The given command:" + commandName + " does not exist or it is not available for user with id:" + userId); throw new ServerApiException(BaseCmd.UNSUPPORTED_ACTION_ERROR, "The given command does not exist or it is not available for user"); } @@ -790,17 +789,25 @@ public class ApiServer implements HttpRequestHandler { return true; } - private boolean isCommandAvailable(User user, String commandName) - throws PermissionDeniedException { + private boolean doesCommandExist(String apiName) { + for (APIChecker apiChecker : _apiAccessCheckers) { + // If any checker has api info on the command, return true + if (apiChecker.checkExistence(apiName)) + return true; + } + return false; + } + + private boolean isCommandAvailable(User user, String commandName) { if (user == null) { return false; } Account account = _accountMgr.getAccount(user.getAccountId()); RoleType roleType = _accountMgr.getRoleType(account); - for (APIAccessChecker apiChecker : _apiAccessCheckers) { + for (APIChecker apiChecker : _apiAccessCheckers) { // Fail the checking if any checker fails to verify - if (!apiChecker.canAccessAPI(roleType, commandName)) + if (!apiChecker.checkAccess(roleType, commandName)) return false; } return true; From 3df026bd51da5f82aa4a4b99fd231ebaa31c6bba Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Thu, 10 Jan 2013 18:50:57 -0800 Subject: [PATCH 349/421] ApiDiscoveryServiceImpl: Implement listApis to return response based on role Signed-off-by: Rohit Yadav --- .../discovery/ApiDiscoveryServiceImpl.java | 75 ++++++++++++++----- 1 file changed, 57 insertions(+), 18 deletions(-) diff --git a/plugins/api/discovery/src/org/apache/cloudstack/discovery/ApiDiscoveryServiceImpl.java b/plugins/api/discovery/src/org/apache/cloudstack/discovery/ApiDiscoveryServiceImpl.java index 2bc17bdbf4d..9f4031c4769 100644 --- a/plugins/api/discovery/src/org/apache/cloudstack/discovery/ApiDiscoveryServiceImpl.java +++ b/plugins/api/discovery/src/org/apache/cloudstack/discovery/ApiDiscoveryServiceImpl.java @@ -16,8 +16,13 @@ // under the License. package org.apache.cloudstack.discovery; -import com.cloud.utils.PropertiesUtil; +import com.cloud.server.ManagementServer; import com.cloud.utils.ReflectUtil; +import com.cloud.utils.component.Adapters; +import com.cloud.utils.component.ComponentLocator; +import com.cloud.utils.component.Inject; +import com.cloud.utils.component.PluggableService; +import org.apache.cloudstack.acl.APIChecker; import org.apache.cloudstack.acl.RoleType; import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.BaseCmd; @@ -42,30 +47,50 @@ import java.util.Set; public class ApiDiscoveryServiceImpl implements ApiDiscoveryService { private static final Logger s_logger = Logger.getLogger(ApiDiscoveryServiceImpl.class); - private ListResponse _discoveryResponse = new ListResponse(); + private static Map _apiNameDiscoveryResponseMap = + new HashMap(); - private Map> _apiNameCmdClassMap = new HashMap>(); + private static Map> _roleTypeDiscoveryResponseListMap = + new HashMap>(); + + private static Map> _apiNameRoleTypeListMap = null; protected ApiDiscoveryServiceImpl() { super(); - generateApiNameCmdClassMap(); + for (RoleType roleType: RoleType.values()) + _roleTypeDiscoveryResponseListMap.put(roleType, new ArrayList()); cacheListApiResponse(); } - private void generateApiNameCmdClassMap() { - Set> cmdClasses = ReflectUtil.getClassesWithAnnotation(APICommand.class, - new String[]{"org.apache.cloudstack.api", "com.cloud.api"}); - - for(Class cmdClass: cmdClasses) - _apiNameCmdClassMap.put(cmdClass.getAnnotation(APICommand.class).name(), cmdClass); + private Map> getApiNameRoleTypeListMap() { + Map> apiNameRoleTypeMap = new HashMap>(); + ComponentLocator locator = ComponentLocator.getLocator(ManagementServer.Name); + List services = locator.getAllPluggableServices(); + services.add((PluggableService) ComponentLocator.getComponent(ManagementServer.Name)); + for (PluggableService service : services) { + for (Map.Entry entry: service.getProperties().entrySet()) { + String apiName = entry.getKey(); + String roleMask = entry.getValue(); + try { + short cmdPermissions = Short.parseShort(roleMask); + if (!apiNameRoleTypeMap.containsKey(apiName)) + apiNameRoleTypeMap.put(apiName, new ArrayList()); + for (RoleType roleType: RoleType.values()) { + if ((cmdPermissions & roleType.getValue()) != 0) + apiNameRoleTypeMap.get(apiName).add(roleType); + } + } catch (NumberFormatException nfe) { + } + } + } + return apiNameRoleTypeMap; } private void cacheListApiResponse() { + Set> cmdClasses = ReflectUtil.getClassesWithAnnotation(APICommand.class, + new String[]{"org.apache.cloudstack.api", "com.cloud.api"}); - List apiDiscoveryResponses = new ArrayList(); - - for(String key: _apiNameCmdClassMap.keySet()) { - Class cmdClass = _apiNameCmdClassMap.get(key); + for(Class cmdClass: cmdClasses) { APICommand apiCmdAnnotation = cmdClass.getAnnotation(APICommand.class); if (apiCmdAnnotation == null) apiCmdAnnotation = cmdClass.getSuperclass().getAnnotation(APICommand.class); @@ -74,8 +99,9 @@ public class ApiDiscoveryServiceImpl implements ApiDiscoveryService { || apiCmdAnnotation.name().isEmpty()) continue; + String apiName = apiCmdAnnotation.name(); ApiDiscoveryResponse response = new ApiDiscoveryResponse(); - response.setName(apiCmdAnnotation.name()); + response.setName(apiName); response.setDescription(apiCmdAnnotation.description()); response.setSince(apiCmdAnnotation.since()); @@ -104,14 +130,27 @@ public class ApiDiscoveryServiceImpl implements ApiDiscoveryService { } } response.setObjectName("apis"); - apiDiscoveryResponses.add(response); + _apiNameDiscoveryResponseMap.put(apiName, response); } - _discoveryResponse.setResponses(apiDiscoveryResponses); } @Override public ListResponse listApis(RoleType roleType) { - return _discoveryResponse; + // Creates roles based response list cache the first time listApis is called + // Due to how adapters work, this cannot be done when mgmt loads + if (_apiNameRoleTypeListMap == null) { + _apiNameRoleTypeListMap = getApiNameRoleTypeListMap(); + for (Map.Entry> entry: _apiNameRoleTypeListMap.entrySet()) { + String apiName = entry.getKey(); + for (RoleType roleTypeInList: entry.getValue()) { + _roleTypeDiscoveryResponseListMap.get(roleTypeInList).add( + _apiNameDiscoveryResponseMap.get(apiName)); + } + } + } + ListResponse response = new ListResponse(); + response.setResponses(_roleTypeDiscoveryResponseListMap.get(roleType)); + return response; } @Override From f1700755586f427702391672e4d487b94813521c Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Thu, 10 Jan 2013 22:48:56 -0800 Subject: [PATCH 350/421] ApiDiscovery: Fix response add response class that will hold api response Signed-off-by: Rohit Yadav --- .../api/response/ApiDiscoveryResponse.java | 26 +++++++++-- .../api/response/ApiParameterResponse.java | 11 +++++ .../api/response/ApiResponseResponse.java | 45 +++++++++++++++++++ 3 files changed, 79 insertions(+), 3 deletions(-) create mode 100644 plugins/api/discovery/src/org/apache/cloudstack/api/response/ApiResponseResponse.java diff --git a/plugins/api/discovery/src/org/apache/cloudstack/api/response/ApiDiscoveryResponse.java b/plugins/api/discovery/src/org/apache/cloudstack/api/response/ApiDiscoveryResponse.java index dd1298bfec5..de6a9f93965 100644 --- a/plugins/api/discovery/src/org/apache/cloudstack/api/response/ApiDiscoveryResponse.java +++ b/plugins/api/discovery/src/org/apache/cloudstack/api/response/ApiDiscoveryResponse.java @@ -16,18 +16,15 @@ // under the License. package org.apache.cloudstack.api.response; -import com.cloud.user.Account; import org.apache.cloudstack.api.ApiConstants; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; import org.apache.cloudstack.api.BaseResponse; -import org.apache.cloudstack.api.EntityReference; import java.util.HashSet; import java.util.Set; @SuppressWarnings("unused") -@EntityReference(value = Account.class) public class ApiDiscoveryResponse extends BaseResponse { @SerializedName(ApiConstants.NAME) @Param(description="the name of the api command") private String name; @@ -41,11 +38,18 @@ public class ApiDiscoveryResponse extends BaseResponse { @SerializedName(ApiConstants.IS_ASYNC) @Param(description="true if api is asynchronous") private Boolean isAsync; + @SerializedName("related") @Param(description="comma separated related apis") + private String related; + @SerializedName(ApiConstants.PARAMS) @Param(description="the list params the api accepts", responseObject = ApiParameterResponse.class) private Set params; + @SerializedName(ApiConstants.RESPONSE) @Param(description="api response fields", responseObject = ApiResponseResponse.class) + private Set apiResponse; + public ApiDiscoveryResponse(){ params = new HashSet(); + apiResponse = new HashSet(); isAsync = false; } @@ -65,6 +69,18 @@ public class ApiDiscoveryResponse extends BaseResponse { this.isAsync = isAsync; } + public String getRelated() { + return related; + } + + public void setRelated(String related) { + this.related = related; + } + + public Set getParams() { + return params; + } + public void setParams(Set params) { this.params = params; } @@ -72,4 +88,8 @@ public class ApiDiscoveryResponse extends BaseResponse { public void addParam(ApiParameterResponse param) { this.params.add(param); } + + public void addApiResponse(ApiResponseResponse apiResponse) { + this.apiResponse.add(apiResponse); + } } diff --git a/plugins/api/discovery/src/org/apache/cloudstack/api/response/ApiParameterResponse.java b/plugins/api/discovery/src/org/apache/cloudstack/api/response/ApiParameterResponse.java index 9138288e102..fa6dc1752d2 100644 --- a/plugins/api/discovery/src/org/apache/cloudstack/api/response/ApiParameterResponse.java +++ b/plugins/api/discovery/src/org/apache/cloudstack/api/response/ApiParameterResponse.java @@ -40,6 +40,9 @@ public class ApiParameterResponse extends BaseResponse { @SerializedName(ApiConstants.SINCE) @Param(description="version of CloudStack the api was introduced in") private String since; + @SerializedName("related") @Param(description="comma separated related apis to get the parameter") + private String related; + public ApiParameterResponse(){ } @@ -67,4 +70,12 @@ public class ApiParameterResponse extends BaseResponse { this.since = since; } + public String getRelated() { + return related; + } + + public void setRelated(String related) { + this.related = related; + } + } diff --git a/plugins/api/discovery/src/org/apache/cloudstack/api/response/ApiResponseResponse.java b/plugins/api/discovery/src/org/apache/cloudstack/api/response/ApiResponseResponse.java new file mode 100644 index 00000000000..b96295e1290 --- /dev/null +++ b/plugins/api/discovery/src/org/apache/cloudstack/api/response/ApiResponseResponse.java @@ -0,0 +1,45 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. +package org.apache.cloudstack.api.response; + +import org.apache.cloudstack.api.ApiConstants; +import com.cloud.serializer.Param; +import com.google.gson.annotations.SerializedName; +import org.apache.cloudstack.api.BaseResponse; + +public class ApiResponseResponse extends BaseResponse { + @SerializedName(ApiConstants.NAME) @Param(description="the name of the api response field") + private String name; + + @SerializedName(ApiConstants.DESCRIPTION) @Param(description="description of the api response field") + private String description; + + @SerializedName(ApiConstants.TYPE) @Param(description="response field type") + private String type; + + public void setName(String name) { + this.name = name; + } + + public void setDescription(String description) { + this.description = description; + } + + public void setType(String type) { + this.type = type; + } +} From 86a77e29dc26fee1bb2169a9a1424bdd4e52f65e Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Thu, 10 Jan 2013 22:52:10 -0800 Subject: [PATCH 351/421] ApiDiscovery: Fix listApis to return api response, related apis etc. - Fix method to return listApis per api name basis - Return api response, api related cmd etc. as part of response - Caching and processing all cmd, response classes when plugin starts, made class list, maps static so they are shared by multiple instances in case, takes about 1306ms to do the processsing but only on load time - Cache for first listApi() and return precached data thereon, takes 2.2ms for first call, during runtime and 0ms thereon Signed-off-by: Rohit Yadav --- .../apache/cloudstack/api/ApiConstants.java | 1 + .../command/user/discovery/ListApisCmd.java | 22 ++-- .../discovery/ApiDiscoveryService.java | 2 +- .../discovery/ApiDiscoveryServiceImpl.java | 102 +++++++++++++++--- 4 files changed, 103 insertions(+), 24 deletions(-) diff --git a/api/src/org/apache/cloudstack/api/ApiConstants.java b/api/src/org/apache/cloudstack/api/ApiConstants.java index b4ce24c2bc9..d3bfcd66afc 100644 --- a/api/src/org/apache/cloudstack/api/ApiConstants.java +++ b/api/src/org/apache/cloudstack/api/ApiConstants.java @@ -158,6 +158,7 @@ public class ApiConstants { public static final String RECEIVED_BYTES = "receivedbytes"; public static final String REQUIRES_HVM = "requireshvm"; public static final String RESOURCE_TYPE = "resourcetype"; + public static final String RESPONSE = "response"; public static final String QUERY_FILTER = "queryfilter"; public static final String SCHEDULE = "schedule"; public static final String SCOPE = "scope"; diff --git a/plugins/api/discovery/src/org/apache/cloudstack/api/command/user/discovery/ListApisCmd.java b/plugins/api/discovery/src/org/apache/cloudstack/api/command/user/discovery/ListApisCmd.java index feab20ac5cf..ed3e1751027 100644 --- a/plugins/api/discovery/src/org/apache/cloudstack/api/command/user/discovery/ListApisCmd.java +++ b/plugins/api/discovery/src/org/apache/cloudstack/api/command/user/discovery/ListApisCmd.java @@ -16,12 +16,12 @@ // under the License. package org.apache.cloudstack.api.command.user.discovery; -import com.cloud.user.Account; import com.cloud.user.UserContext; import org.apache.cloudstack.acl.RoleType; import org.apache.cloudstack.api.APICommand; +import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.BaseListCmd; +import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.PlugService; import org.apache.cloudstack.api.ServerApiException; import org.apache.cloudstack.api.response.ListResponse; @@ -30,8 +30,8 @@ import org.apache.cloudstack.api.response.ApiDiscoveryResponse; import org.apache.log4j.Logger; -@APICommand(name = "listApis", responseObject = ApiDiscoveryResponse.class, description = "lists all available apis on the server, provided by Api Discovery plugin", since = "4.1.0") -public class ListApisCmd extends BaseListCmd { +@APICommand(name = "listApis", responseObject = ApiDiscoveryResponse.class, description = "lists all available apis on the server, provided by the Api Discovery plugin", since = "4.1.0") +public class ListApisCmd extends BaseCmd { public static final Logger s_logger = Logger.getLogger(ListApisCmd.class.getName()); private static final String s_name = "listapisresponse"; @@ -39,14 +39,16 @@ public class ListApisCmd extends BaseListCmd { @PlugService ApiDiscoveryService _apiDiscoveryService; + @Parameter(name=ApiConstants.NAME, type=CommandType.STRING, description="API name") + private String name; + @Override public void execute() throws ServerApiException { if (_apiDiscoveryService != null) { - Account caller = UserContext.current().getCaller(); RoleType roleType = _accountService.getRoleType(UserContext.current().getCaller()); - ListResponse response = (ListResponse) _apiDiscoveryService.listApis(roleType); + ListResponse response = (ListResponse) _apiDiscoveryService.listApis(roleType, name); if (response == null) { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Api Discovery plugin was unable to find and process any apis"); + throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Api Discovery plugin was unable to find an api by that name or process any apis"); } response.setResponseName(getCommandName()); this.setResponseObject(response); @@ -57,4 +59,10 @@ public class ListApisCmd extends BaseListCmd { public String getCommandName() { return s_name; } + + @Override + public long getEntityOwnerId() { + // no owner is needed for list command + return 0; + } } diff --git a/plugins/api/discovery/src/org/apache/cloudstack/discovery/ApiDiscoveryService.java b/plugins/api/discovery/src/org/apache/cloudstack/discovery/ApiDiscoveryService.java index a1d440e9ccf..611493bfc08 100644 --- a/plugins/api/discovery/src/org/apache/cloudstack/discovery/ApiDiscoveryService.java +++ b/plugins/api/discovery/src/org/apache/cloudstack/discovery/ApiDiscoveryService.java @@ -22,5 +22,5 @@ import org.apache.cloudstack.api.BaseResponse; import org.apache.cloudstack.api.response.ListResponse; public interface ApiDiscoveryService extends PluggableService { - ListResponse listApis(RoleType roleType); + ListResponse listApis(RoleType roleType, String apiName); } diff --git a/plugins/api/discovery/src/org/apache/cloudstack/discovery/ApiDiscoveryServiceImpl.java b/plugins/api/discovery/src/org/apache/cloudstack/discovery/ApiDiscoveryServiceImpl.java index 9f4031c4769..5f84486ae49 100644 --- a/plugins/api/discovery/src/org/apache/cloudstack/discovery/ApiDiscoveryServiceImpl.java +++ b/plugins/api/discovery/src/org/apache/cloudstack/discovery/ApiDiscoveryServiceImpl.java @@ -16,13 +16,13 @@ // under the License. package org.apache.cloudstack.discovery; +import com.cloud.serializer.Param; import com.cloud.server.ManagementServer; import com.cloud.utils.ReflectUtil; -import com.cloud.utils.component.Adapters; +import com.cloud.utils.StringUtils; import com.cloud.utils.component.ComponentLocator; -import com.cloud.utils.component.Inject; import com.cloud.utils.component.PluggableService; -import org.apache.cloudstack.acl.APIChecker; +import com.google.gson.annotations.SerializedName; import org.apache.cloudstack.acl.RoleType; import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.BaseCmd; @@ -32,6 +32,7 @@ import org.apache.cloudstack.api.BaseResponse; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.response.ApiDiscoveryResponse; import org.apache.cloudstack.api.response.ApiParameterResponse; +import org.apache.cloudstack.api.response.ApiResponseResponse; import org.apache.cloudstack.api.response.ListResponse; import org.apache.log4j.Logger; @@ -39,6 +40,7 @@ import javax.ejb.Local; import java.lang.reflect.Field; import java.util.ArrayList; import java.util.HashMap; +import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Set; @@ -47,19 +49,24 @@ import java.util.Set; public class ApiDiscoveryServiceImpl implements ApiDiscoveryService { private static final Logger s_logger = Logger.getLogger(ApiDiscoveryServiceImpl.class); + private static Map> _roleTypeDiscoveryResponseListMap; + private static Map _apiNameDiscoveryResponseMap = new HashMap(); - private static Map> _roleTypeDiscoveryResponseListMap = - new HashMap>(); - private static Map> _apiNameRoleTypeListMap = null; protected ApiDiscoveryServiceImpl() { super(); - for (RoleType roleType: RoleType.values()) - _roleTypeDiscoveryResponseListMap.put(roleType, new ArrayList()); - cacheListApiResponse(); + if (_roleTypeDiscoveryResponseListMap == null) { + long startTime = System.nanoTime(); + _roleTypeDiscoveryResponseListMap = new HashMap>(); + for (RoleType roleType: RoleType.values()) + _roleTypeDiscoveryResponseListMap.put(roleType, new ArrayList()); + cacheResponseMap(); + long endTime = System.nanoTime(); + s_logger.info("Api Discovery Service: Annotation, docstrings, api relation graph processed in " + (endTime - startTime) / 1000000.0 + " ms"); + } } private Map> getApiNameRoleTypeListMap() { @@ -86,10 +93,12 @@ public class ApiDiscoveryServiceImpl implements ApiDiscoveryService { return apiNameRoleTypeMap; } - private void cacheListApiResponse() { + private void cacheResponseMap() { Set> cmdClasses = ReflectUtil.getClassesWithAnnotation(APICommand.class, new String[]{"org.apache.cloudstack.api", "com.cloud.api"}); + Map> responseApiNameListMap = new HashMap>(); + for(Class cmdClass: cmdClasses) { APICommand apiCmdAnnotation = cmdClass.getAnnotation(APICommand.class); if (apiCmdAnnotation == null) @@ -100,10 +109,32 @@ public class ApiDiscoveryServiceImpl implements ApiDiscoveryService { continue; String apiName = apiCmdAnnotation.name(); + String responseName = apiCmdAnnotation.responseObject().getName(); + if (!responseName.contains("SuccessResponse")) { + if (!responseApiNameListMap.containsKey(responseName)) + responseApiNameListMap.put(responseName, new ArrayList()); + responseApiNameListMap.get(responseName).add(apiName); + } ApiDiscoveryResponse response = new ApiDiscoveryResponse(); response.setName(apiName); response.setDescription(apiCmdAnnotation.description()); - response.setSince(apiCmdAnnotation.since()); + if (!apiCmdAnnotation.since().isEmpty()) + response.setSince(apiCmdAnnotation.since()); + response.setRelated(responseName); + + Field[] responseFields = apiCmdAnnotation.responseObject().getDeclaredFields(); + for(Field responseField: responseFields) { + SerializedName serializedName = responseField.getAnnotation(SerializedName.class); + if(serializedName != null) { + ApiResponseResponse responseResponse = new ApiResponseResponse(); + responseResponse.setName(serializedName.value()); + Param param = responseField.getAnnotation(Param.class); + if (param != null) + responseResponse.setDescription(param.description()); + responseResponse.setType(responseField.getType().getSimpleName().toLowerCase()); + response.addApiResponse(responseResponse); + } + } Field[] fields = ReflectUtil.getAllFieldsForClass(cmdClass, new Class[] {BaseCmd.class, BaseAsyncCmd.class, BaseAsyncCreateCmd.class}); @@ -122,23 +153,50 @@ public class ApiDiscoveryServiceImpl implements ApiDiscoveryService { ApiParameterResponse paramResponse = new ApiParameterResponse(); paramResponse.setName(parameterAnnotation.name()); paramResponse.setDescription(parameterAnnotation.description()); - paramResponse.setType(parameterAnnotation.type().toString()); + paramResponse.setType(parameterAnnotation.type().toString().toLowerCase()); paramResponse.setLength(parameterAnnotation.length()); paramResponse.setRequired(parameterAnnotation.required()); - paramResponse.setSince(parameterAnnotation.since()); + if (!parameterAnnotation.since().isEmpty()) + paramResponse.setSince(parameterAnnotation.since()); + paramResponse.setRelated(parameterAnnotation.entityType()[0].getName()); response.addParam(paramResponse); } } - response.setObjectName("apis"); + response.setObjectName("api"); + _apiNameDiscoveryResponseMap.put(apiName, response); + } + + for (String apiName: _apiNameDiscoveryResponseMap.keySet()) { + ApiDiscoveryResponse response = _apiNameDiscoveryResponseMap.get(apiName); + Set processedParams = new HashSet(); + for (ApiParameterResponse param: response.getParams()) { + if (responseApiNameListMap.containsKey(param.getRelated())) { + List relatedApis = responseApiNameListMap.get(param.getRelated()); + param.setRelated(StringUtils.join(relatedApis, ",")); + } else { + param.setRelated(null); + } + processedParams.add(param); + } + response.setParams(processedParams); + + if (responseApiNameListMap.containsKey(response.getRelated())) { + List relatedApis = responseApiNameListMap.get(response.getRelated()); + relatedApis.remove(apiName); + response.setRelated(StringUtils.join(relatedApis, ",")); + } else { + response.setRelated(null); + } _apiNameDiscoveryResponseMap.put(apiName, response); } } @Override - public ListResponse listApis(RoleType roleType) { + public ListResponse listApis(RoleType roleType, String name) { // Creates roles based response list cache the first time listApis is called // Due to how adapters work, this cannot be done when mgmt loads if (_apiNameRoleTypeListMap == null) { + long startTime = System.nanoTime(); _apiNameRoleTypeListMap = getApiNameRoleTypeListMap(); for (Map.Entry> entry: _apiNameRoleTypeListMap.entrySet()) { String apiName = entry.getKey(); @@ -147,9 +205,21 @@ public class ApiDiscoveryServiceImpl implements ApiDiscoveryService { _apiNameDiscoveryResponseMap.get(apiName)); } } + long endTime = System.nanoTime(); + s_logger.info("Api Discovery Service: List apis cached in " + (endTime - startTime) / 1000000.0 + " ms"); } ListResponse response = new ListResponse(); - response.setResponses(_roleTypeDiscoveryResponseListMap.get(roleType)); + if (name != null) { + if (!_apiNameDiscoveryResponseMap.containsKey(name)) + return null; + + List singleResponse = new ArrayList(); + singleResponse.add(_apiNameDiscoveryResponseMap.get(name)); + response.setResponses(singleResponse); + + } else { + response.setResponses(_roleTypeDiscoveryResponseListMap.get(roleType)); + } return response; } From 2bc3b5cc6f3815be29649741ac62b4c8f6cd7016 Mon Sep 17 00:00:00 2001 From: Jessica Tomechak Date: Fri, 11 Jan 2013 00:50:23 -0800 Subject: [PATCH 352/421] Docs. CLOUDSTACK-959. A sub-heading was inadvertently left out of the System Service Offerings section of documentation. Adding the section "Creating a New System Service Offering". --- docs/en-US/system-service-offerings.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/en-US/system-service-offerings.xml b/docs/en-US/system-service-offerings.xml index c41aa2e293b..84d5f7ae7b5 100644 --- a/docs/en-US/system-service-offerings.xml +++ b/docs/en-US/system-service-offerings.xml @@ -26,4 +26,5 @@ System Service Offerings System service offerings provide a choice of CPU speed, number of CPUs, tags, and RAM size, just as other service offerings do. But rather than being used for virtual machine instances and exposed to users, system service offerings are used to change the default properties of virtual routers, console proxies, and other system VMs. System service offerings are visible only to the &PRODUCT; root administrator. &PRODUCT; provides default system service offerings. The &PRODUCT; root administrator can create additional custom system service offerings. When &PRODUCT; creates a virtual router for a guest network, it uses default settings which are defined in the system service offering associated with the network offering. You can upgrade the capabilities of the virtual router by applying a new network offering that contains a different system service offering. All virtual routers in that network will begin using the settings from the new service offering. + From 5f19c45e0401bd380e15af26d5c9d1e03d77795d Mon Sep 17 00:00:00 2001 From: Sebastien Goasguen Date: Fri, 11 Jan 2013 10:55:37 +0100 Subject: [PATCH 353/421] Added Marvin building docs in developer guide --- docs/en-US/building-marvin.xml | 46 ++++++++++++++++++++++++++++++++++ docs/en-US/marvin.xml | 1 + 2 files changed, 47 insertions(+) create mode 100644 docs/en-US/building-marvin.xml diff --git a/docs/en-US/building-marvin.xml b/docs/en-US/building-marvin.xml new file mode 100644 index 00000000000..3dac9d65d60 --- /dev/null +++ b/docs/en-US/building-marvin.xml @@ -0,0 +1,46 @@ + + +%BOOK_ENTITIES; +]> + + + +
+ Building and Installing Marvin + Marvin is built with Maven and is dependent on APIdoc. To build it do the following in the root tree of &PRODUCT;: + mvn -P developer -l :cloud-apidoc + mvn -P developer -l :cloud-marvin + If successfull the build will have created the cloudstackAPI Python package under tools/marvin/marvin/cloudstackAPI as well as a gziped Marvin package under tools/marvin dist. To install the Python Marvin module do the following in tools/marvin: + sudo python ./setup.py install + The dependencies will be downloaded the Python module installed and you should be able to use Marvin in Python. Check that you can import the module before starting to use it. + $ python +Python 2.7.3 (default, Nov 17 2012, 19:54:34) +[GCC 4.2.1 Compatible Apple Clang 4.1 ((tags/Apple/clang-421.11.66))] on darwin +Type "help", "copyright", "credits" or "license" for more information. +>>> import marvin +>>> from marvin.cloudstackAPI import * +>>> + + You could also install it using pip or easy_install using the local distribution package in tools/marvin/dist : + pip install tools/marvin/dist/Marvin-0.1.0.tar.gz + Or: + easy_install tools/marvin/dist/Marvin-0.1.0.tar.gz + +
diff --git a/docs/en-US/marvin.xml b/docs/en-US/marvin.xml index 062616ac888..8fd2c96fe3f 100644 --- a/docs/en-US/marvin.xml +++ b/docs/en-US/marvin.xml @@ -29,4 +29,5 @@ Marvin's complete documenation is on the wiki at https://cwiki.apache.org/CLOUDSTACK/testing-with-python.html The source code is located at tools/marvin + From 5dd14f322c7332ebb5b9aee22f84209763e891e8 Mon Sep 17 00:00:00 2001 From: Author Name Date: Fri, 11 Jan 2013 15:45:18 +0530 Subject: [PATCH 354/421] --- .../external-guest-firewall-integration.xml | 53 +++--- docs/en-US/external-guest-lb-integration.xml | 4 +- docs/en-US/hardware-firewall.xml | 9 +- docs/en-US/images/add-netscaler.png | Bin 0 -> 22777 bytes docs/en-US/images/parallel-inline-mode.png | Bin 0 -> 145392 bytes docs/en-US/inline-config-lb-fw.xml | 173 ++++++++++++++++++ docs/en-US/lb-services.xml | 25 +++ docs/en-US/management-server-lb.xml | 12 +- docs/en-US/network-setup.xml | 12 +- 9 files changed, 240 insertions(+), 48 deletions(-) create mode 100644 docs/en-US/images/add-netscaler.png create mode 100644 docs/en-US/images/parallel-inline-mode.png create mode 100644 docs/en-US/inline-config-lb-fw.xml create mode 100644 docs/en-US/lb-services.xml diff --git a/docs/en-US/external-guest-firewall-integration.xml b/docs/en-US/external-guest-firewall-integration.xml index 0b34dca1065..bd9ac604970 100644 --- a/docs/en-US/external-guest-firewall-integration.xml +++ b/docs/en-US/external-guest-firewall-integration.xml @@ -21,23 +21,16 @@
External Guest Firewall Integration for Juniper SRX (Optional) - Available only for guests using advanced networking. + Available only for guests using advanced networking, both shared and isolated. &PRODUCT; provides for direct management of the Juniper SRX series of firewalls. This - enables &PRODUCT; to establish static NAT mappings from public IPs to guest VMs, and to use - the Juniper device in place of the virtual router for firewall services. You can have one or - more Juniper SRX per zone. This feature is optional. If Juniper integration is not provisioned, - &PRODUCT; will use the virtual router for these services. + enables &PRODUCT; to establish staticNAT mappings from public IPs to guest VMs, and to use the + Juniper device in place of the virtual router for firewall services. You can have only one + Juniper SRX device per zone. This feature is optional. If Juniper integration is not + provisioned, &PRODUCT; will use the virtual router for these services. The Juniper SRX can optionally be used in conjunction with an external load balancer. - External Network elements can be deployed in a side-by-side or inline configuration. - - - - - - parallel-mode.png: adding a firewall and load balancer in parallel mode. - - + External Network elements can be deployed in a side-by-side or inline configuration. For more + information, see . &PRODUCT; requires the Juniper to be configured as follows: Supported SRX software version is 10.3 or higher. @@ -58,22 +51,22 @@ Record the public and private interface names. If you used a VLAN for the public interface, add a ".[VLAN TAG]" after the interface name. For example, if you are using ge-0/0/3 for your public interface and VLAN tag 301, your public interface name would be - "ge-0/0/3.301". Your private interface name should always be untagged because the - &PRODUCT; software automatically creates tagged logical interfaces. + "ge-0/0/3.301". Your private interface name should always be untagged because the &PRODUCT; + software automatically creates tagged logical interfaces. - Create a public security zone and a private security zone. By default, these will - already exist and will be called "untrust" and "trust". Add the public interface to the - public zone and the private interface to the private zone. Note down the security zone - names. + Create a public security zone and a private security zone. By default, these already + exist and are called "untrust" and "trust" zones. Add the public interface to the public + zone. &PRODUCT;automatically adds the private interface to private zone (trusted zone). Note + down the security zone names. Make sure there is a security policy from the private zone to the public zone that allows all traffic. - Note the username and password of the account you want the &PRODUCT; software to log - in to when it is programming rules. + Note the username and password of the account you want the &PRODUCT; software to log in + to when it is programming rules. Make sure the "ssh" and "xnm-clear-text" system services are enabled. @@ -124,13 +117,13 @@ filter untrust { In the left navigation bar, click Infrastructure. - In Zones, click View More. + In Zones, click View All. Choose the zone you want to work with. - Click the Network tab. + Click the Physical Network tab. In the Network Service Providers node of the diagram, click Configure. (You might have @@ -159,10 +152,6 @@ filter untrust { Private Interface: The name of the private interface on the SRX. For example, ge-0/0/1. - - Usage Interface: (Optional) Typically, the public interface is used to meter - traffic. If you want to use a different interface, specify its name here - Number of Retries: The number of times to attempt a command on the SRX before failing. The default value is 2. @@ -180,12 +169,12 @@ filter untrust { untrust. - Capacity: The number of networks the device can handle + Capacity: The number of networks the device can handle. Dedicated: When marked as dedicated, this device will be dedicated to a single account. When Dedicated is checked, the value in the Capacity field has no significance - implicitly, its value is 1 + implicitly, its value is 1. @@ -194,8 +183,8 @@ filter untrust { Click Global Settings. Set the parameter external.network.stats.interval to indicate how - often you want &PRODUCT; to fetch network usage statistics from the Juniper SRX. If you - are not using the SRX to gather network usage statistics, set to 0. + often you want &PRODUCT; to fetch network usage statistics from the Juniper SRX. If you are + not using the SRX to gather network usage statistics, set to 0.
diff --git a/docs/en-US/external-guest-lb-integration.xml b/docs/en-US/external-guest-lb-integration.xml index 5760f9559e6..acbb514207c 100644 --- a/docs/en-US/external-guest-lb-integration.xml +++ b/docs/en-US/external-guest-lb-integration.xml @@ -20,10 +20,12 @@ -->
External Guest Load Balancer Integration (Optional) + + External load balancer devices are not supported in shared networks. + &PRODUCT; can optionally use a Citrix NetScaler or BigIP F5 load balancer to provide load balancing services to guests. If this is not enabled, &PRODUCT; will use the software load balancer in the virtual router. - To install and enable an external load balancer for &PRODUCT; management: Set up the appliance according to the vendor's directions. diff --git a/docs/en-US/hardware-firewall.xml b/docs/en-US/hardware-firewall.xml index df0568aa2c2..28269cccf31 100644 --- a/docs/en-US/hardware-firewall.xml +++ b/docs/en-US/hardware-firewall.xml @@ -22,8 +22,11 @@ Hardware Firewall All deployments should have a firewall protecting the management server; see Generic Firewall Provisions. Optionally, some deployments may also have a Juniper SRX firewall that will - be the default gateway for the guest networks; see . + be the default gateway for the guest networks; see . - - + + +
diff --git a/docs/en-US/images/add-netscaler.png b/docs/en-US/images/add-netscaler.png new file mode 100644 index 0000000000000000000000000000000000000000..53c1344b9ddd49bebc276af347206ba97948b428 GIT binary patch literal 22777 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 W{~Om+ralt@KQ$%IyX6WNf&T^X{FKQ6 literal 0 HcmV?d00001 diff --git a/docs/en-US/images/parallel-inline-mode.png b/docs/en-US/images/parallel-inline-mode.png new file mode 100644 index 0000000000000000000000000000000000000000..c0c1555365ec7fad20412bbe8d605ea2739c12e0 GIT binary patch literal 145392 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 + +%BOOK_ENTITIES; +]> + +
+ Configuring Network Devices in Inline and Side by Side Modes + The external network elements, such as load balancer and firewall devices, supported in + &PRODUCT; can be deployed in either of the following modes: Side by Side and Inline. Inline mode + was originally supported in &PRODUCT; 2.2.x versions, and is now added back in the 3.0.6 + release. + In Inline mode, one firewall device is placed in front of a load balancing device. The + firewall acts as the gateway for all incoming traffic, then redirect the load balancing traffic + to the load balancer behind it. The load balancer in this case will not have the direct access + to the public network. Deploying network devices in Inline mode ensures that the resources are + protected. + + + + + + parallel-inline-mode.png: external networks in different deployment modes + + + In Side by Side mode, a firewall device is deployed in parallel with the load balancer + device. So the traffic to the load balancer public IP is not routed through the firewall, and + therefore, is exposed to the public network. + + + + + + parallel-mode.png: adding a firewall and load balancer in side by side mode + + + The following table gives you an overview of the supported services and devices for inline + and side by side mode. + + + + + + +
+ + Mode + Firewall + Load Balancer + Supported + + + + + Side by Side + Virtual Router + F5 + Yes + + + Side by Side + Virtual Router + Virtual Router + Yes + + + Side by Side + Virtual Router + NetScaler + Yes + + + Side by Side + Juniper SRX + F5 + Yes + + + Side by Side + Juniper SRX + NetScaler + Yes + + + Inline + Virtual Router + F5 + No + + + Inline + Virtual Router + NetScaler + No + + + Inline + Juniper SRX + F5 + Yes + + + Inline + Juniper SRX + NetScaler + No + + + Inline + Juniper SRX + Virtual Router + No + + + + + To configure SRX and F5 in Inline mode: + + + Configure F5 Big IP and Juniper SRX. + See the respective product documentation for more information. + + + Add SRX and F5 to the same zone in &PRODUCT;. + + Ensure that you select per zone sourceNAT when creating the network offering. When + adding F5 BigIP, do not make it a dedicated device. + + + + Enable both the devices. + + + Create a network offering: + Use SRX as provider for Firewall, Port Forwarding, SourceNAT, and StaticNat. Select F5 + BigIP as the service provider for Load Balancing. Use Virtual Router as the service provider + for DNS, DHCP, user data. + + + Select Inline mode. + For more information, see . + Creating Network Offerings in the Administration Guide. + + + + Start a new VM with this new network offering. + + + Add firewall and load balancing rules. For more information, see + Adding a Load Balancer Rule and . + IP Forwarding and Firewalling in the Administration + Guide. + + + + diff --git a/docs/en-US/lb-services.xml b/docs/en-US/lb-services.xml new file mode 100644 index 00000000000..3bb79dbd335 --- /dev/null +++ b/docs/en-US/lb-services.xml @@ -0,0 +1,25 @@ + + +%BOOK_ENTITIES; +]> + +
+ Load Balancing Services + + +
diff --git a/docs/en-US/management-server-lb.xml b/docs/en-US/management-server-lb.xml index 85a86221c80..f4275786be7 100644 --- a/docs/en-US/management-server-lb.xml +++ b/docs/en-US/management-server-lb.xml @@ -19,12 +19,12 @@ under the License. -->
- Setting Zone VLAN and Running VM Maximums - &PRODUCT; can use a load balancer to provide a virtual IP for multiple Management - Servers. The administrator is responsible for creating the load balancer rules for the - Management Servers. The application requires persistence or stickiness across multiple sessions. - The following chart lists the ports that should be load balanced and whether or not persistence - is required. + Management Server Load Balancing + &PRODUCT; can use a load balancer to provide a virtual IP for multiple Management Servers. + The administrator is responsible for creating the load balancer rules for the Management + Servers. The application requires persistence or stickiness across multiple sessions. The + following chart lists the ports that should be load balanced and whether or not persistence is + required. Even if persistence is not required, enabling it is permitted. diff --git a/docs/en-US/network-setup.xml b/docs/en-US/network-setup.xml index ceee190d4ca..192c8e23d2f 100644 --- a/docs/en-US/network-setup.xml +++ b/docs/en-US/network-setup.xml @@ -20,16 +20,16 @@ --> Network Setup - Achieving the correct networking setup is crucial to a successful &PRODUCT; - installation. This section contains information to help you make decisions and follow the right - procedures to get your network set up correctly. + Achieving the correct networking setup is crucial to a successful &PRODUCT; installation. + This section contains information to help you make decisions and follow the right procedures to + get your network set up correctly. - - + - + From bb59c1e38529ac704eedc0b9ebd759313e60532d Mon Sep 17 00:00:00 2001 From: Pranav Saxena Date: Fri, 11 Jan 2013 15:51:28 +0530 Subject: [PATCH 355/421] Revert "" This reverts commit 5dd14f322c7332ebb5b9aee22f84209763e891e8. --- .../external-guest-firewall-integration.xml | 53 +++--- docs/en-US/external-guest-lb-integration.xml | 4 +- docs/en-US/hardware-firewall.xml | 9 +- docs/en-US/images/add-netscaler.png | Bin 22777 -> 0 bytes docs/en-US/images/parallel-inline-mode.png | Bin 145392 -> 0 bytes docs/en-US/inline-config-lb-fw.xml | 173 ------------------ docs/en-US/lb-services.xml | 25 --- docs/en-US/management-server-lb.xml | 12 +- docs/en-US/network-setup.xml | 12 +- 9 files changed, 48 insertions(+), 240 deletions(-) delete mode 100644 docs/en-US/images/add-netscaler.png delete mode 100644 docs/en-US/images/parallel-inline-mode.png delete mode 100644 docs/en-US/inline-config-lb-fw.xml delete mode 100644 docs/en-US/lb-services.xml diff --git a/docs/en-US/external-guest-firewall-integration.xml b/docs/en-US/external-guest-firewall-integration.xml index bd9ac604970..0b34dca1065 100644 --- a/docs/en-US/external-guest-firewall-integration.xml +++ b/docs/en-US/external-guest-firewall-integration.xml @@ -21,16 +21,23 @@
External Guest Firewall Integration for Juniper SRX (Optional) - Available only for guests using advanced networking, both shared and isolated. + Available only for guests using advanced networking. &PRODUCT; provides for direct management of the Juniper SRX series of firewalls. This - enables &PRODUCT; to establish staticNAT mappings from public IPs to guest VMs, and to use the - Juniper device in place of the virtual router for firewall services. You can have only one - Juniper SRX device per zone. This feature is optional. If Juniper integration is not - provisioned, &PRODUCT; will use the virtual router for these services. + enables &PRODUCT; to establish static NAT mappings from public IPs to guest VMs, and to use + the Juniper device in place of the virtual router for firewall services. You can have one or + more Juniper SRX per zone. This feature is optional. If Juniper integration is not provisioned, + &PRODUCT; will use the virtual router for these services. The Juniper SRX can optionally be used in conjunction with an external load balancer. - External Network elements can be deployed in a side-by-side or inline configuration. For more - information, see . + External Network elements can be deployed in a side-by-side or inline configuration. + + + + + + parallel-mode.png: adding a firewall and load balancer in parallel mode. + + &PRODUCT; requires the Juniper to be configured as follows: Supported SRX software version is 10.3 or higher. @@ -51,22 +58,22 @@ Record the public and private interface names. If you used a VLAN for the public interface, add a ".[VLAN TAG]" after the interface name. For example, if you are using ge-0/0/3 for your public interface and VLAN tag 301, your public interface name would be - "ge-0/0/3.301". Your private interface name should always be untagged because the &PRODUCT; - software automatically creates tagged logical interfaces. + "ge-0/0/3.301". Your private interface name should always be untagged because the + &PRODUCT; software automatically creates tagged logical interfaces. - Create a public security zone and a private security zone. By default, these already - exist and are called "untrust" and "trust" zones. Add the public interface to the public - zone. &PRODUCT;automatically adds the private interface to private zone (trusted zone). Note - down the security zone names. + Create a public security zone and a private security zone. By default, these will + already exist and will be called "untrust" and "trust". Add the public interface to the + public zone and the private interface to the private zone. Note down the security zone + names. Make sure there is a security policy from the private zone to the public zone that allows all traffic. - Note the username and password of the account you want the &PRODUCT; software to log in - to when it is programming rules. + Note the username and password of the account you want the &PRODUCT; software to log + in to when it is programming rules. Make sure the "ssh" and "xnm-clear-text" system services are enabled. @@ -117,13 +124,13 @@ filter untrust { In the left navigation bar, click Infrastructure. - In Zones, click View All. + In Zones, click View More. Choose the zone you want to work with. - Click the Physical Network tab. + Click the Network tab. In the Network Service Providers node of the diagram, click Configure. (You might have @@ -152,6 +159,10 @@ filter untrust { Private Interface: The name of the private interface on the SRX. For example, ge-0/0/1. + + Usage Interface: (Optional) Typically, the public interface is used to meter + traffic. If you want to use a different interface, specify its name here + Number of Retries: The number of times to attempt a command on the SRX before failing. The default value is 2. @@ -169,12 +180,12 @@ filter untrust { untrust. - Capacity: The number of networks the device can handle. + Capacity: The number of networks the device can handle Dedicated: When marked as dedicated, this device will be dedicated to a single account. When Dedicated is checked, the value in the Capacity field has no significance - implicitly, its value is 1. + implicitly, its value is 1 @@ -183,8 +194,8 @@ filter untrust { Click Global Settings. Set the parameter external.network.stats.interval to indicate how - often you want &PRODUCT; to fetch network usage statistics from the Juniper SRX. If you are - not using the SRX to gather network usage statistics, set to 0. + often you want &PRODUCT; to fetch network usage statistics from the Juniper SRX. If you + are not using the SRX to gather network usage statistics, set to 0.
diff --git a/docs/en-US/external-guest-lb-integration.xml b/docs/en-US/external-guest-lb-integration.xml index acbb514207c..5760f9559e6 100644 --- a/docs/en-US/external-guest-lb-integration.xml +++ b/docs/en-US/external-guest-lb-integration.xml @@ -20,12 +20,10 @@ -->
External Guest Load Balancer Integration (Optional) - - External load balancer devices are not supported in shared networks. - &PRODUCT; can optionally use a Citrix NetScaler or BigIP F5 load balancer to provide load balancing services to guests. If this is not enabled, &PRODUCT; will use the software load balancer in the virtual router. + To install and enable an external load balancer for &PRODUCT; management: Set up the appliance according to the vendor's directions. diff --git a/docs/en-US/hardware-firewall.xml b/docs/en-US/hardware-firewall.xml index 28269cccf31..df0568aa2c2 100644 --- a/docs/en-US/hardware-firewall.xml +++ b/docs/en-US/hardware-firewall.xml @@ -22,11 +22,8 @@ Hardware Firewall All deployments should have a firewall protecting the management server; see Generic Firewall Provisions. Optionally, some deployments may also have a Juniper SRX firewall that will - be the default gateway for the guest networks; see . + be the default gateway for the guest networks; see . - - - + +
diff --git a/docs/en-US/images/add-netscaler.png b/docs/en-US/images/add-netscaler.png deleted file mode 100644 index 53c1344b9ddd49bebc276af347206ba97948b428..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22777 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 W{~Om+ralt@KQ$%IyX6WNf&T^X{FKQ6 diff --git a/docs/en-US/images/parallel-inline-mode.png b/docs/en-US/images/parallel-inline-mode.png deleted file mode 100644 index c0c1555365ec7fad20412bbe8d605ea2739c12e0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 145392 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 - -%BOOK_ENTITIES; -]> - -
- Configuring Network Devices in Inline and Side by Side Modes - The external network elements, such as load balancer and firewall devices, supported in - &PRODUCT; can be deployed in either of the following modes: Side by Side and Inline. Inline mode - was originally supported in &PRODUCT; 2.2.x versions, and is now added back in the 3.0.6 - release. - In Inline mode, one firewall device is placed in front of a load balancing device. The - firewall acts as the gateway for all incoming traffic, then redirect the load balancing traffic - to the load balancer behind it. The load balancer in this case will not have the direct access - to the public network. Deploying network devices in Inline mode ensures that the resources are - protected. - - - - - - parallel-inline-mode.png: external networks in different deployment modes - - - In Side by Side mode, a firewall device is deployed in parallel with the load balancer - device. So the traffic to the load balancer public IP is not routed through the firewall, and - therefore, is exposed to the public network. - - - - - - parallel-mode.png: adding a firewall and load balancer in side by side mode - - - The following table gives you an overview of the supported services and devices for inline - and side by side mode. - - - - - - -
- - Mode - Firewall - Load Balancer - Supported - - - - - Side by Side - Virtual Router - F5 - Yes - - - Side by Side - Virtual Router - Virtual Router - Yes - - - Side by Side - Virtual Router - NetScaler - Yes - - - Side by Side - Juniper SRX - F5 - Yes - - - Side by Side - Juniper SRX - NetScaler - Yes - - - Inline - Virtual Router - F5 - No - - - Inline - Virtual Router - NetScaler - No - - - Inline - Juniper SRX - F5 - Yes - - - Inline - Juniper SRX - NetScaler - No - - - Inline - Juniper SRX - Virtual Router - No - - - - - To configure SRX and F5 in Inline mode: - - - Configure F5 Big IP and Juniper SRX. - See the respective product documentation for more information. - - - Add SRX and F5 to the same zone in &PRODUCT;. - - Ensure that you select per zone sourceNAT when creating the network offering. When - adding F5 BigIP, do not make it a dedicated device. - - - - Enable both the devices. - - - Create a network offering: - Use SRX as provider for Firewall, Port Forwarding, SourceNAT, and StaticNat. Select F5 - BigIP as the service provider for Load Balancing. Use Virtual Router as the service provider - for DNS, DHCP, user data. - - - Select Inline mode. - For more information, see . - Creating Network Offerings in the Administration Guide. - - - - Start a new VM with this new network offering. - - - Add firewall and load balancing rules. For more information, see - Adding a Load Balancer Rule and . - IP Forwarding and Firewalling in the Administration - Guide. - - - - diff --git a/docs/en-US/lb-services.xml b/docs/en-US/lb-services.xml deleted file mode 100644 index 3bb79dbd335..00000000000 --- a/docs/en-US/lb-services.xml +++ /dev/null @@ -1,25 +0,0 @@ - - -%BOOK_ENTITIES; -]> - -
- Load Balancing Services - - -
diff --git a/docs/en-US/management-server-lb.xml b/docs/en-US/management-server-lb.xml index f4275786be7..85a86221c80 100644 --- a/docs/en-US/management-server-lb.xml +++ b/docs/en-US/management-server-lb.xml @@ -19,12 +19,12 @@ under the License. -->
- Management Server Load Balancing - &PRODUCT; can use a load balancer to provide a virtual IP for multiple Management Servers. - The administrator is responsible for creating the load balancer rules for the Management - Servers. The application requires persistence or stickiness across multiple sessions. The - following chart lists the ports that should be load balanced and whether or not persistence is - required. + Setting Zone VLAN and Running VM Maximums + &PRODUCT; can use a load balancer to provide a virtual IP for multiple Management + Servers. The administrator is responsible for creating the load balancer rules for the + Management Servers. The application requires persistence or stickiness across multiple sessions. + The following chart lists the ports that should be load balanced and whether or not persistence + is required. Even if persistence is not required, enabling it is permitted. diff --git a/docs/en-US/network-setup.xml b/docs/en-US/network-setup.xml index 192c8e23d2f..ceee190d4ca 100644 --- a/docs/en-US/network-setup.xml +++ b/docs/en-US/network-setup.xml @@ -20,16 +20,16 @@ --> Network Setup - Achieving the correct networking setup is crucial to a successful &PRODUCT; installation. - This section contains information to help you make decisions and follow the right procedures to - get your network set up correctly. + Achieving the correct networking setup is crucial to a successful &PRODUCT; + installation. This section contains information to help you make decisions and follow the right + procedures to get your network set up correctly. + - + - + From 106730ccdde30450e96d080ed6c9791682fb7300 Mon Sep 17 00:00:00 2001 From: Radhika PC Date: Fri, 11 Jan 2013 15:54:00 +0530 Subject: [PATCH 356/421] SRX and f5 inline mode documentation: Reviewed-By: Jessica Tomechak --- .../external-guest-firewall-integration.xml | 53 +++--- docs/en-US/external-guest-lb-integration.xml | 4 +- docs/en-US/hardware-firewall.xml | 9 +- docs/en-US/images/add-netscaler.png | Bin 0 -> 22777 bytes docs/en-US/images/parallel-inline-mode.png | Bin 0 -> 145392 bytes docs/en-US/inline-config-lb-fw.xml | 173 ++++++++++++++++++ docs/en-US/lb-services.xml | 25 +++ docs/en-US/management-server-lb.xml | 12 +- docs/en-US/network-setup.xml | 12 +- 9 files changed, 240 insertions(+), 48 deletions(-) create mode 100644 docs/en-US/images/add-netscaler.png create mode 100644 docs/en-US/images/parallel-inline-mode.png create mode 100644 docs/en-US/inline-config-lb-fw.xml create mode 100644 docs/en-US/lb-services.xml diff --git a/docs/en-US/external-guest-firewall-integration.xml b/docs/en-US/external-guest-firewall-integration.xml index 0b34dca1065..bd9ac604970 100644 --- a/docs/en-US/external-guest-firewall-integration.xml +++ b/docs/en-US/external-guest-firewall-integration.xml @@ -21,23 +21,16 @@
External Guest Firewall Integration for Juniper SRX (Optional) - Available only for guests using advanced networking. + Available only for guests using advanced networking, both shared and isolated. &PRODUCT; provides for direct management of the Juniper SRX series of firewalls. This - enables &PRODUCT; to establish static NAT mappings from public IPs to guest VMs, and to use - the Juniper device in place of the virtual router for firewall services. You can have one or - more Juniper SRX per zone. This feature is optional. If Juniper integration is not provisioned, - &PRODUCT; will use the virtual router for these services. + enables &PRODUCT; to establish staticNAT mappings from public IPs to guest VMs, and to use the + Juniper device in place of the virtual router for firewall services. You can have only one + Juniper SRX device per zone. This feature is optional. If Juniper integration is not + provisioned, &PRODUCT; will use the virtual router for these services. The Juniper SRX can optionally be used in conjunction with an external load balancer. - External Network elements can be deployed in a side-by-side or inline configuration. - - - - - - parallel-mode.png: adding a firewall and load balancer in parallel mode. - - + External Network elements can be deployed in a side-by-side or inline configuration. For more + information, see . &PRODUCT; requires the Juniper to be configured as follows: Supported SRX software version is 10.3 or higher. @@ -58,22 +51,22 @@ Record the public and private interface names. If you used a VLAN for the public interface, add a ".[VLAN TAG]" after the interface name. For example, if you are using ge-0/0/3 for your public interface and VLAN tag 301, your public interface name would be - "ge-0/0/3.301". Your private interface name should always be untagged because the - &PRODUCT; software automatically creates tagged logical interfaces. + "ge-0/0/3.301". Your private interface name should always be untagged because the &PRODUCT; + software automatically creates tagged logical interfaces. - Create a public security zone and a private security zone. By default, these will - already exist and will be called "untrust" and "trust". Add the public interface to the - public zone and the private interface to the private zone. Note down the security zone - names. + Create a public security zone and a private security zone. By default, these already + exist and are called "untrust" and "trust" zones. Add the public interface to the public + zone. &PRODUCT;automatically adds the private interface to private zone (trusted zone). Note + down the security zone names. Make sure there is a security policy from the private zone to the public zone that allows all traffic. - Note the username and password of the account you want the &PRODUCT; software to log - in to when it is programming rules. + Note the username and password of the account you want the &PRODUCT; software to log in + to when it is programming rules. Make sure the "ssh" and "xnm-clear-text" system services are enabled. @@ -124,13 +117,13 @@ filter untrust { In the left navigation bar, click Infrastructure. - In Zones, click View More. + In Zones, click View All. Choose the zone you want to work with. - Click the Network tab. + Click the Physical Network tab. In the Network Service Providers node of the diagram, click Configure. (You might have @@ -159,10 +152,6 @@ filter untrust { Private Interface: The name of the private interface on the SRX. For example, ge-0/0/1. - - Usage Interface: (Optional) Typically, the public interface is used to meter - traffic. If you want to use a different interface, specify its name here - Number of Retries: The number of times to attempt a command on the SRX before failing. The default value is 2. @@ -180,12 +169,12 @@ filter untrust { untrust. - Capacity: The number of networks the device can handle + Capacity: The number of networks the device can handle. Dedicated: When marked as dedicated, this device will be dedicated to a single account. When Dedicated is checked, the value in the Capacity field has no significance - implicitly, its value is 1 + implicitly, its value is 1. @@ -194,8 +183,8 @@ filter untrust { Click Global Settings. Set the parameter external.network.stats.interval to indicate how - often you want &PRODUCT; to fetch network usage statistics from the Juniper SRX. If you - are not using the SRX to gather network usage statistics, set to 0. + often you want &PRODUCT; to fetch network usage statistics from the Juniper SRX. If you are + not using the SRX to gather network usage statistics, set to 0.
diff --git a/docs/en-US/external-guest-lb-integration.xml b/docs/en-US/external-guest-lb-integration.xml index 5760f9559e6..acbb514207c 100644 --- a/docs/en-US/external-guest-lb-integration.xml +++ b/docs/en-US/external-guest-lb-integration.xml @@ -20,10 +20,12 @@ -->
External Guest Load Balancer Integration (Optional) + + External load balancer devices are not supported in shared networks. + &PRODUCT; can optionally use a Citrix NetScaler or BigIP F5 load balancer to provide load balancing services to guests. If this is not enabled, &PRODUCT; will use the software load balancer in the virtual router. - To install and enable an external load balancer for &PRODUCT; management: Set up the appliance according to the vendor's directions. diff --git a/docs/en-US/hardware-firewall.xml b/docs/en-US/hardware-firewall.xml index df0568aa2c2..28269cccf31 100644 --- a/docs/en-US/hardware-firewall.xml +++ b/docs/en-US/hardware-firewall.xml @@ -22,8 +22,11 @@ Hardware Firewall All deployments should have a firewall protecting the management server; see Generic Firewall Provisions. Optionally, some deployments may also have a Juniper SRX firewall that will - be the default gateway for the guest networks; see . + be the default gateway for the guest networks; see . - - + + +
diff --git a/docs/en-US/images/add-netscaler.png b/docs/en-US/images/add-netscaler.png new file mode 100644 index 0000000000000000000000000000000000000000..53c1344b9ddd49bebc276af347206ba97948b428 GIT binary patch literal 22777 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 W{~Om+ralt@KQ$%IyX6WNf&T^X{FKQ6 literal 0 HcmV?d00001 diff --git a/docs/en-US/images/parallel-inline-mode.png b/docs/en-US/images/parallel-inline-mode.png new file mode 100644 index 0000000000000000000000000000000000000000..c0c1555365ec7fad20412bbe8d605ea2739c12e0 GIT binary patch literal 145392 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 + +%BOOK_ENTITIES; +]> + +
+ Configuring Network Devices in Inline and Side by Side Modes + The external network elements, such as load balancer and firewall devices, supported in + &PRODUCT; can be deployed in either of the following modes: Side by Side and Inline. Inline mode + was originally supported in &PRODUCT; 2.2.x versions, and is now added back in the 3.0.6 + release. + In Inline mode, one firewall device is placed in front of a load balancing device. The + firewall acts as the gateway for all incoming traffic, then redirect the load balancing traffic + to the load balancer behind it. The load balancer in this case will not have the direct access + to the public network. Deploying network devices in Inline mode ensures that the resources are + protected. + + + + + + parallel-inline-mode.png: external networks in different deployment modes + + + In Side by Side mode, a firewall device is deployed in parallel with the load balancer + device. So the traffic to the load balancer public IP is not routed through the firewall, and + therefore, is exposed to the public network. + + + + + + parallel-mode.png: adding a firewall and load balancer in side by side mode + + + The following table gives you an overview of the supported services and devices for inline + and side by side mode. + + + + + + +
+ + Mode + Firewall + Load Balancer + Supported + + + + + Side by Side + Virtual Router + F5 + Yes + + + Side by Side + Virtual Router + Virtual Router + Yes + + + Side by Side + Virtual Router + NetScaler + Yes + + + Side by Side + Juniper SRX + F5 + Yes + + + Side by Side + Juniper SRX + NetScaler + Yes + + + Inline + Virtual Router + F5 + No + + + Inline + Virtual Router + NetScaler + No + + + Inline + Juniper SRX + F5 + Yes + + + Inline + Juniper SRX + NetScaler + No + + + Inline + Juniper SRX + Virtual Router + No + + + + + To configure SRX and F5 in Inline mode: + + + Configure F5 Big IP and Juniper SRX. + See the respective product documentation for more information. + + + Add SRX and F5 to the same zone in &PRODUCT;. + + Ensure that you select per zone sourceNAT when creating the network offering. When + adding F5 BigIP, do not make it a dedicated device. + + + + Enable both the devices. + + + Create a network offering: + Use SRX as provider for Firewall, Port Forwarding, SourceNAT, and StaticNat. Select F5 + BigIP as the service provider for Load Balancing. Use Virtual Router as the service provider + for DNS, DHCP, user data. + + + Select Inline mode. + For more information, see . + Creating Network Offerings in the Administration Guide. + + + + Start a new VM with this new network offering. + + + Add firewall and load balancing rules. For more information, see + Adding a Load Balancer Rule and . + IP Forwarding and Firewalling in the Administration + Guide. + + + + diff --git a/docs/en-US/lb-services.xml b/docs/en-US/lb-services.xml new file mode 100644 index 00000000000..3bb79dbd335 --- /dev/null +++ b/docs/en-US/lb-services.xml @@ -0,0 +1,25 @@ + + +%BOOK_ENTITIES; +]> + +
+ Load Balancing Services + + +
diff --git a/docs/en-US/management-server-lb.xml b/docs/en-US/management-server-lb.xml index 85a86221c80..f4275786be7 100644 --- a/docs/en-US/management-server-lb.xml +++ b/docs/en-US/management-server-lb.xml @@ -19,12 +19,12 @@ under the License. -->
- Setting Zone VLAN and Running VM Maximums - &PRODUCT; can use a load balancer to provide a virtual IP for multiple Management - Servers. The administrator is responsible for creating the load balancer rules for the - Management Servers. The application requires persistence or stickiness across multiple sessions. - The following chart lists the ports that should be load balanced and whether or not persistence - is required. + Management Server Load Balancing + &PRODUCT; can use a load balancer to provide a virtual IP for multiple Management Servers. + The administrator is responsible for creating the load balancer rules for the Management + Servers. The application requires persistence or stickiness across multiple sessions. The + following chart lists the ports that should be load balanced and whether or not persistence is + required. Even if persistence is not required, enabling it is permitted. diff --git a/docs/en-US/network-setup.xml b/docs/en-US/network-setup.xml index ceee190d4ca..192c8e23d2f 100644 --- a/docs/en-US/network-setup.xml +++ b/docs/en-US/network-setup.xml @@ -20,16 +20,16 @@ --> Network Setup - Achieving the correct networking setup is crucial to a successful &PRODUCT; - installation. This section contains information to help you make decisions and follow the right - procedures to get your network set up correctly. + Achieving the correct networking setup is crucial to a successful &PRODUCT; installation. + This section contains information to help you make decisions and follow the right procedures to + get your network set up correctly. - - + - + From eb40d2337e0ae10876a27dfbc22575be8e9d593d Mon Sep 17 00:00:00 2001 From: Prasanna Santhanam Date: Fri, 11 Jan 2013 17:03:24 +0530 Subject: [PATCH 357/421] apidoc: fixing the api doc failure remove api-discovery_commands.properties since the plugin returns the listApis call as a map directly. not needed for api doc generation. Signed-off-by: Prasanna Santhanam --- tools/apidoc/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/apidoc/pom.xml b/tools/apidoc/pom.xml index e0b02bc5dc6..bc7411f7013 100644 --- a/tools/apidoc/pom.xml +++ b/tools/apidoc/pom.xml @@ -57,7 +57,7 @@ ${client.config.jars} ./target -f - ${client.config.conf}/commands.properties,${client.config.conf}/commands-ext.properties,${client.config.conf}/virtualrouter_commands.properties,${client.config.conf}/nicira-nvp_commands.properties,${client.config.conf}/api-discovery_commands.properties + ${client.config.conf}/commands.properties,${client.config.conf}/commands-ext.properties,${client.config.conf}/virtualrouter_commands.properties,${client.config.conf}/nicira-nvp_commands.properties From 499c474ed0123865f3f4feca5f6320ac322b6f37 Mon Sep 17 00:00:00 2001 From: Radhika PC Date: Fri, 11 Jan 2013 17:53:09 +0530 Subject: [PATCH 358/421] Autoscale Documentation : Reviewed-By: Jessica Tomechak --- docs/en-US/autoscale.xml | 284 ++++++++++++++++++ docs/en-US/configure-snmp-rhel.xml | 86 ++++++ .../external-firewalls-and-load-balancers.xml | 43 +-- ...ion-of-external-firewalls-loadbalancer.xml | 46 +++ 4 files changed, 440 insertions(+), 19 deletions(-) create mode 100644 docs/en-US/autoscale.xml create mode 100644 docs/en-US/configure-snmp-rhel.xml create mode 100644 docs/en-US/ongoing-configuration-of-external-firewalls-loadbalancer.xml diff --git a/docs/en-US/autoscale.xml b/docs/en-US/autoscale.xml new file mode 100644 index 00000000000..d63281f9e7e --- /dev/null +++ b/docs/en-US/autoscale.xml @@ -0,0 +1,284 @@ + + +%BOOK_ENTITIES; +]> + + +
+ Configuring AutoScale + AutoScaling allows you to scale your back-end services or application VMs up or down + seamlessly and automatically according to the conditions you define. With AutoScaling enabled, + you can ensure that the number of VMs you are using seamlessly scale up when demand increases, + and automatically decreases when demand subsides. Thus it helps you save compute costs by + terminating underused VMs automatically and launching new VMs when you need them, without the + need for manual intervention. + NetScaler AutoScaling is designed to seamlessly launch or terminate VMs based on + user-defined conditions. Conditions for triggering a scaleup or scaledown action can vary from a + simple use case like monitoring the CPU usage of a server to a complex use case of monitoring a + combination of server's responsiveness and its CPU usage. For example, you can configure + AutoScaling to launch an additional VM whenever CPU usage exceeds 80 percent for 15 minutes, or + to remove a VM whenever CPU usage is less than 20 percent for 30 minutes. + &PRODUCT; uses the NetScaler load balancer to monitor all aspects of a system's health and + work in unison with &PRODUCT; to initiate scale-up or scale-down actions. The supported + NetScaler version is 10.0. + + Prerequisites + Before you configure an AutoScale rule, consider the following: + + + + Ensure that the necessary template is prepared before configuring AutoScale. When a VM + is deployed by using a template and when it comes up, the application should be up and + running. + + If the application is not running, the NetScaler device considers the VM as + ineffective and continues provisioning the VMs unconditionally until the resource limit is + exhausted. + + + + Deploy the templates you prepared. Ensure that the applications come up on the first + boot and is ready to take the traffic. Observe the time requires to deploy the template. + Consider this time when you specify the quiet time while configuring AutoScale. + + + The AutoScale feature supports the SNMP counters that can be used to define conditions + for taking scale up or scale down actions. To monitor the SNMP-based counter, ensure that + the SNMP agent is installed in the template used for creating the AutoScale VMs, and the + SNMP operations work with the configured SNMP community and port by using standard SNMP + managers. For example, see to configure SNMP on a RHEL + machine. + + + Ensure that the endpointe.url parameter present in the Global Settings is set to the + Management Server API URL. For example, http://10.102.102.22:8080/client/api. In a + multi-node Management Server deployment, use the virtual IP address configured in the load + balancer for the management server’s cluster. Additionally, ensure that the NetScaler device + has access to this IP address to provide AutoScale support. + If you update the endpointe.url, disable the AutoScale functionality of the load + balancer rules in the system, then enable them back to reflect the changes. For more + information see + + + If the API Key and Secret Key are regenerated for an AutoScale user, ensure that the + AutoScale functionality of the load balancers that the user participates in are disabled and + then enabled to reflect the configuration changes in the NetScaler. + + + In an advanced Zone, ensure that at least one VM should be present before configuring a + load balancer rule with AutoScale. Having one VM in the network ensures that the network is + in implemented state for configuring AutoScale. + + + + Configuration + Specify the following: + + + + + + + autoscaleateconfig.png: Configuring AutoScale + + + + + Template: A template consists of a base OS image and + application. A template is used to provision the new instance of an application on a scaleup + action. When a VM is deployed from a template, the VM can start taking the traffic from the + load balancer without any admin intervention. For example, if the VM is deployed for a Web + service, it should have the Web server running, the database connected, and so on. + + + Compute offering: A predefined set of virtual hardware + attributes, including CPU speed, number of CPUs, and RAM size, that the user can select when + creating a new virtual machine instance. Choose one of the compute offerings to be used + while provisioning a VM instance as part of scaleup action. + + + Min Instance: The minimum number of active VM instances + that is assigned to a load balancing rule. The active VM instances are the application + instances that are up and serving the traffic, and are being load balanced. This parameter + ensures that a load balancing rule has at least the configured number of active VM instances + are available to serve the traffic. + + If an application, such as SAP, running on a VM instance is down for some reason, the + VM is then not counted as part of Min Instance parameter, and the AutoScale feature + initiates a scaleup action if the number of active VM instances is below the configured + value. Similarly, when an application instance comes up from its earlier down state, this + application instance is counted as part of the active instance count and the AutoScale + process initiates a scaledown action when the active instance count breaches the Max + instance value. + + + + Max Instance: Maximum number of active VM instances + that should be assigned to a load balancing rule. This + parameter defines the upper limit of active VM instances that can be assigned to a load + balancing rule. + Specifying a large value for the maximum instance parameter might result in provisioning + large number of VM instances, which in turn leads to a single load balancing rule exhausting + the VM instances limit specified at the account or domain level. + + If an application, such as SAP, running on a VM instance is down for some reason, the + VM is not counted as part of Max Instance parameter. So there may be scenarios where the + number of VMs provisioned for a scaleup action might be more than the configured Max + Instance value. Once the application instances in the VMs are up from an earlier down + state, the AutoScale feature starts aligning to the configured Max Instance value. + + + + Specify the following scale-up and scale-down policies: + + + Duration: The duration, in seconds, for which the + conditions you specify must be true to trigger a scaleup action. The conditions defined + should hold true for the entire duration you specify for an AutoScale action to be invoked. + + + + Counter: The performance counters expose the state of + the monitored instances. By default, &PRODUCT; offers four performance counters: Three SNMP + counters and one NetScaler counter. The SNMP counters are Linux User CPU, Linux System CPU, + and Linux CPU Idle. The NetScaler counter is ResponseTime. The root administrator can add + additional counters into &PRODUCT; by using the &PRODUCT; API. + + + Operator: The following five relational operators are + supported in AutoScale feature: Greater than, Less than, Less than or equal to, Greater than + or equal to, and Equal to. + + + Threshold: Threshold value to be used for the counter. + Once the counter defined above breaches the threshold value, the AutoScale feature initiates + a scaleup or scaledown action. + + + Add: Click Add to add the condition. + + + Additionally, if you want to configure the advanced settings, click Show advanced settings, + and specify the following: + + + Polling interval: Frequency in which the conditions, + combination of counter, operator and threshold, are to be evaluated before taking a scale up + or down action. The default polling interval is 30 seconds. + + + Quiet Time: This is the cool down period after an + AutoScale action is initiated. The time includes the time taken to complete provisioning a + VM instance from its template and the time taken by an application to be ready to serve + traffic. This quiet time allows the fleet to come up to a stable state before any action can + take place. The default is 300 seconds. + + + Destroy VM Grace Period: The duration in seconds, after + a scaledown action is initiated, to wait before the VM is destroyed as part of scaledown + action. This is to ensure graceful close of any pending sessions or transactions being + served by the VM marked for destroy. The default is 120 seconds. + + + Security Groups: Security groups provide a way to + isolate traffic to the VM instances. A security group is a group of VMs that filter their + incoming and outgoing traffic according to a set of rules, called ingress and egress rules. + These rules filter network traffic according to the IP address that is attempting to + communicate with the VM. + + + Disk Offerings: A predefined set of disk size for + primary data storage. + + + SNMP Community: The SNMP community string to be used by + the NetScaler device to query the configured counter value from the provisioned VM + instances. Default is public. + + + SNMP Port: The port number on which the SNMP agent that + run on the provisioned VMs is listening. Default port is 161. + + + User: This is the user that the NetScaler device use to + invoke scaleup and scaledown API calls to the cloud. If no option is specified, the user who + configures AutoScaling is applied. Specify another user name to override. + + + Apply: Click Apply to create the AutoScale + configuration. + + + + Disabling and Enabling an AutoScale Configuration + If you want to perform any maintenance operation on the AutoScale VM instances, disable + the AutoScale configuration. When the AutoScale configuration is disabled, no scaleup or + scaledown action is performed. You can use this downtime for the maintenance activities. To + disable the AutoScale configuration, click the Disable AutoScale + + + + + EnableDisable.png: button to enable or disable AutoScale. + + button. + + The button toggles between enable and disable, depending on whether AutoScale is currently + enabled or not. After the maintenance operations are done, you can enable the AutoScale + configuration back. To enable, open the AutoScale configuration page again, then click the + Enable AutoScale + + + + + EnableDisable.png: button to enable or disable AutoScale. + + button. + + Updating an AutoScale Configuration + You can update the various parameters and add or delete the conditions in a scaleup or + scaledown rule. Before you update an AutoScale configuration, ensure that you disable the + AutoScale load balancer rule by clicking the Disable AutoScale button. + + After you modify the required AutoScale parameters, click Apply. To apply the new AutoScale + policies, open the AutoScale configuration page again, then click the Enable AutoScale + button. + + Runtime Considerations + + + + + An administrator should not assign a VM to a load balancing rule which is configured for + AutoScale. + + + Before a VM provisioning is completed if NetScaler is shutdown or restarted, the + provisioned VM cannot be a part of the load balancing rule though the intent was to assign + it to a load balancing rule. To workaround, rename the AutoScale provisioned VMs based on + the rule name or ID so at any point of time the VMs can be reconciled to its load balancing + rule. + + + Making API calls outside the context of AutoScale, such as destroyVM, on an autoscaled + VM leaves the load balancing configuration in an inconsistent state. Though VM is destroyed + from the load balancer rule, NetScaler continues to show the VM as a service assigned to a + rule. + + +
diff --git a/docs/en-US/configure-snmp-rhel.xml b/docs/en-US/configure-snmp-rhel.xml new file mode 100644 index 00000000000..bd227ff8ed5 --- /dev/null +++ b/docs/en-US/configure-snmp-rhel.xml @@ -0,0 +1,86 @@ + + +%BOOK_ENTITIES; +]> + +
+ Configuring SNMP Community String on a RHEL Server + The SNMP Community string is similar to a user id or password that provides access to a + network device, such as router. This string is sent along with all SNMP requests. If the + community string is correct, the device responds with the requested information. If the + community string is incorrect, the device discards the request and does not respond. + The NetScaler device uses SNMP to communicate with the VMs. You must install SNMP and + configure SNMP Community string for a secure communication between the NetScaler device and the + RHEL machine. + + + Ensure that you installed SNMP on RedHat. If not, run the following command: + yum install net-snmp-utils + + + Edit the /etc/snmp/snmpd.conf file to allow the SNMP polling from the NetScaler + device. + + + Map the community name into a security name (local and mynetwork, depending on where + the request is coming from): + + Use a strong password instead of public when you edit the following table. + + # sec.name source community +com2sec local localhost public +com2sec mynetwork 0.0.0.0 public + + Setting to 0.0.0.0 allows all IPs to poll the NetScaler server. + + + + Map the security names into group names: + # group.name sec.model sec.name +group MyRWGroup v1 local +group MyRWGroup v2c local +group MyROGroup v1 mynetwork +group MyROGroup v2c mynetwork + + + Create a view to allow the groups to have the permission to: + incl/excl subtree mask view all included .1 + + + Grant access with different write permissions to the two groups to the view you + created. + # context sec.model sec.level prefix read write notif + access MyROGroup "" any noauth exact all none none + access MyRWGroup "" any noauth exact all all all + + + + + Unblock SNMP in iptables. + iptables -A INPUT -p udp --dport 161 -j ACCEPT + + + Start the SNMP service: + service snmpd start + + + Ensure that the SNMP service is started automatically during the system startup: + chkconfig snmpd on + + +
diff --git a/docs/en-US/external-firewalls-and-load-balancers.xml b/docs/en-US/external-firewalls-and-load-balancers.xml index 1452804885d..6ca49f0ef03 100644 --- a/docs/en-US/external-firewalls-and-load-balancers.xml +++ b/docs/en-US/external-firewalls-and-load-balancers.xml @@ -3,26 +3,31 @@ %BOOK_ENTITIES; ]> - -
- External Firewalls and Load Balancers - &PRODUCT; is capable of replacing its Virtual Router with an external Juniper SRX device and an optional external NetScaler or F5 load balancer for gateway and load balancing services. In this case, the VMs use the SRX as their gateway. + External Firewalls and Load Balancers + &PRODUCT; is capable of replacing its Virtual Router with an external Juniper SRX device and + an optional external NetScaler or F5 load balancer for gateway and load balancing services. In + this case, the VMs use the SRX as their gateway. + + + + +
diff --git a/docs/en-US/ongoing-configuration-of-external-firewalls-loadbalancer.xml b/docs/en-US/ongoing-configuration-of-external-firewalls-loadbalancer.xml new file mode 100644 index 00000000000..c90c7ada622 --- /dev/null +++ b/docs/en-US/ongoing-configuration-of-external-firewalls-loadbalancer.xml @@ -0,0 +1,46 @@ + + +%BOOK_ENTITIES; +]> + +
+ Ongoing Configuration of External Firewalls and Load Balancers + Additional user actions (e.g. setting a port forward) will cause further programming of the + firewall and load balancer. A user may request additional public IP addresses and forward + traffic received at these IPs to specific VMs. This is accomplished by enabling static NAT for a + public IP address, assigning the IP to a VM, and specifying a set of protocols and port ranges + to open. When a static NAT rule is created, &PRODUCT; programs the zone's external firewall with + the following objects: + + + A static NAT rule that maps the public IP address to the private IP address of a + VM. + + + A security policy that allows traffic within the set of protocols and port ranges that + are specified. + + + A firewall filter counter that measures the number of bytes of incoming traffic to the + public IP. + + + The number of incoming and outgoing bytes through source NAT, static NAT, and load balancing + rules is measured and saved on each external element. This data is collected on a regular basis + and stored in the &PRODUCT; database. +
From 2b3084bba09f631d93c233238b80756b7395f938 Mon Sep 17 00:00:00 2001 From: Chip Childers Date: Fri, 11 Jan 2013 10:19:38 -0500 Subject: [PATCH 359/421] Per my veto vote on the dev list, reverting "SRX and f5 inline mode documentation: Reviewed-By: Jessica Tomechak" This reverts commit 106730ccdde30450e96d080ed6c9791682fb7300. --- .../external-guest-firewall-integration.xml | 53 +++--- docs/en-US/external-guest-lb-integration.xml | 4 +- docs/en-US/hardware-firewall.xml | 9 +- docs/en-US/images/add-netscaler.png | Bin 22777 -> 0 bytes docs/en-US/images/parallel-inline-mode.png | Bin 145392 -> 0 bytes docs/en-US/inline-config-lb-fw.xml | 173 ------------------ docs/en-US/lb-services.xml | 25 --- docs/en-US/management-server-lb.xml | 12 +- docs/en-US/network-setup.xml | 12 +- 9 files changed, 48 insertions(+), 240 deletions(-) delete mode 100644 docs/en-US/images/add-netscaler.png delete mode 100644 docs/en-US/images/parallel-inline-mode.png delete mode 100644 docs/en-US/inline-config-lb-fw.xml delete mode 100644 docs/en-US/lb-services.xml diff --git a/docs/en-US/external-guest-firewall-integration.xml b/docs/en-US/external-guest-firewall-integration.xml index bd9ac604970..0b34dca1065 100644 --- a/docs/en-US/external-guest-firewall-integration.xml +++ b/docs/en-US/external-guest-firewall-integration.xml @@ -21,16 +21,23 @@
External Guest Firewall Integration for Juniper SRX (Optional) - Available only for guests using advanced networking, both shared and isolated. + Available only for guests using advanced networking. &PRODUCT; provides for direct management of the Juniper SRX series of firewalls. This - enables &PRODUCT; to establish staticNAT mappings from public IPs to guest VMs, and to use the - Juniper device in place of the virtual router for firewall services. You can have only one - Juniper SRX device per zone. This feature is optional. If Juniper integration is not - provisioned, &PRODUCT; will use the virtual router for these services. + enables &PRODUCT; to establish static NAT mappings from public IPs to guest VMs, and to use + the Juniper device in place of the virtual router for firewall services. You can have one or + more Juniper SRX per zone. This feature is optional. If Juniper integration is not provisioned, + &PRODUCT; will use the virtual router for these services. The Juniper SRX can optionally be used in conjunction with an external load balancer. - External Network elements can be deployed in a side-by-side or inline configuration. For more - information, see . + External Network elements can be deployed in a side-by-side or inline configuration. + + + + + + parallel-mode.png: adding a firewall and load balancer in parallel mode. + + &PRODUCT; requires the Juniper to be configured as follows: Supported SRX software version is 10.3 or higher. @@ -51,22 +58,22 @@ Record the public and private interface names. If you used a VLAN for the public interface, add a ".[VLAN TAG]" after the interface name. For example, if you are using ge-0/0/3 for your public interface and VLAN tag 301, your public interface name would be - "ge-0/0/3.301". Your private interface name should always be untagged because the &PRODUCT; - software automatically creates tagged logical interfaces. + "ge-0/0/3.301". Your private interface name should always be untagged because the + &PRODUCT; software automatically creates tagged logical interfaces. - Create a public security zone and a private security zone. By default, these already - exist and are called "untrust" and "trust" zones. Add the public interface to the public - zone. &PRODUCT;automatically adds the private interface to private zone (trusted zone). Note - down the security zone names. + Create a public security zone and a private security zone. By default, these will + already exist and will be called "untrust" and "trust". Add the public interface to the + public zone and the private interface to the private zone. Note down the security zone + names. Make sure there is a security policy from the private zone to the public zone that allows all traffic. - Note the username and password of the account you want the &PRODUCT; software to log in - to when it is programming rules. + Note the username and password of the account you want the &PRODUCT; software to log + in to when it is programming rules. Make sure the "ssh" and "xnm-clear-text" system services are enabled. @@ -117,13 +124,13 @@ filter untrust { In the left navigation bar, click Infrastructure. - In Zones, click View All. + In Zones, click View More. Choose the zone you want to work with. - Click the Physical Network tab. + Click the Network tab. In the Network Service Providers node of the diagram, click Configure. (You might have @@ -152,6 +159,10 @@ filter untrust { Private Interface: The name of the private interface on the SRX. For example, ge-0/0/1. + + Usage Interface: (Optional) Typically, the public interface is used to meter + traffic. If you want to use a different interface, specify its name here + Number of Retries: The number of times to attempt a command on the SRX before failing. The default value is 2. @@ -169,12 +180,12 @@ filter untrust { untrust. - Capacity: The number of networks the device can handle. + Capacity: The number of networks the device can handle Dedicated: When marked as dedicated, this device will be dedicated to a single account. When Dedicated is checked, the value in the Capacity field has no significance - implicitly, its value is 1. + implicitly, its value is 1 @@ -183,8 +194,8 @@ filter untrust { Click Global Settings. Set the parameter external.network.stats.interval to indicate how - often you want &PRODUCT; to fetch network usage statistics from the Juniper SRX. If you are - not using the SRX to gather network usage statistics, set to 0. + often you want &PRODUCT; to fetch network usage statistics from the Juniper SRX. If you + are not using the SRX to gather network usage statistics, set to 0.
diff --git a/docs/en-US/external-guest-lb-integration.xml b/docs/en-US/external-guest-lb-integration.xml index acbb514207c..5760f9559e6 100644 --- a/docs/en-US/external-guest-lb-integration.xml +++ b/docs/en-US/external-guest-lb-integration.xml @@ -20,12 +20,10 @@ -->
External Guest Load Balancer Integration (Optional) - - External load balancer devices are not supported in shared networks. - &PRODUCT; can optionally use a Citrix NetScaler or BigIP F5 load balancer to provide load balancing services to guests. If this is not enabled, &PRODUCT; will use the software load balancer in the virtual router. + To install and enable an external load balancer for &PRODUCT; management: Set up the appliance according to the vendor's directions. diff --git a/docs/en-US/hardware-firewall.xml b/docs/en-US/hardware-firewall.xml index 28269cccf31..df0568aa2c2 100644 --- a/docs/en-US/hardware-firewall.xml +++ b/docs/en-US/hardware-firewall.xml @@ -22,11 +22,8 @@ Hardware Firewall All deployments should have a firewall protecting the management server; see Generic Firewall Provisions. Optionally, some deployments may also have a Juniper SRX firewall that will - be the default gateway for the guest networks; see . + be the default gateway for the guest networks; see . - - - + +
diff --git a/docs/en-US/images/add-netscaler.png b/docs/en-US/images/add-netscaler.png deleted file mode 100644 index 53c1344b9ddd49bebc276af347206ba97948b428..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22777 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 W{~Om+ralt@KQ$%IyX6WNf&T^X{FKQ6 diff --git a/docs/en-US/images/parallel-inline-mode.png b/docs/en-US/images/parallel-inline-mode.png deleted file mode 100644 index c0c1555365ec7fad20412bbe8d605ea2739c12e0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 145392 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 - -%BOOK_ENTITIES; -]> - -
- Configuring Network Devices in Inline and Side by Side Modes - The external network elements, such as load balancer and firewall devices, supported in - &PRODUCT; can be deployed in either of the following modes: Side by Side and Inline. Inline mode - was originally supported in &PRODUCT; 2.2.x versions, and is now added back in the 3.0.6 - release. - In Inline mode, one firewall device is placed in front of a load balancing device. The - firewall acts as the gateway for all incoming traffic, then redirect the load balancing traffic - to the load balancer behind it. The load balancer in this case will not have the direct access - to the public network. Deploying network devices in Inline mode ensures that the resources are - protected. - - - - - - parallel-inline-mode.png: external networks in different deployment modes - - - In Side by Side mode, a firewall device is deployed in parallel with the load balancer - device. So the traffic to the load balancer public IP is not routed through the firewall, and - therefore, is exposed to the public network. - - - - - - parallel-mode.png: adding a firewall and load balancer in side by side mode - - - The following table gives you an overview of the supported services and devices for inline - and side by side mode. - - - - - - -
- - Mode - Firewall - Load Balancer - Supported - - - - - Side by Side - Virtual Router - F5 - Yes - - - Side by Side - Virtual Router - Virtual Router - Yes - - - Side by Side - Virtual Router - NetScaler - Yes - - - Side by Side - Juniper SRX - F5 - Yes - - - Side by Side - Juniper SRX - NetScaler - Yes - - - Inline - Virtual Router - F5 - No - - - Inline - Virtual Router - NetScaler - No - - - Inline - Juniper SRX - F5 - Yes - - - Inline - Juniper SRX - NetScaler - No - - - Inline - Juniper SRX - Virtual Router - No - - - - - To configure SRX and F5 in Inline mode: - - - Configure F5 Big IP and Juniper SRX. - See the respective product documentation for more information. - - - Add SRX and F5 to the same zone in &PRODUCT;. - - Ensure that you select per zone sourceNAT when creating the network offering. When - adding F5 BigIP, do not make it a dedicated device. - - - - Enable both the devices. - - - Create a network offering: - Use SRX as provider for Firewall, Port Forwarding, SourceNAT, and StaticNat. Select F5 - BigIP as the service provider for Load Balancing. Use Virtual Router as the service provider - for DNS, DHCP, user data. - - - Select Inline mode. - For more information, see . - Creating Network Offerings in the Administration Guide. - - - - Start a new VM with this new network offering. - - - Add firewall and load balancing rules. For more information, see - Adding a Load Balancer Rule and . - IP Forwarding and Firewalling in the Administration - Guide. - - - - diff --git a/docs/en-US/lb-services.xml b/docs/en-US/lb-services.xml deleted file mode 100644 index 3bb79dbd335..00000000000 --- a/docs/en-US/lb-services.xml +++ /dev/null @@ -1,25 +0,0 @@ - - -%BOOK_ENTITIES; -]> - -
- Load Balancing Services - - -
diff --git a/docs/en-US/management-server-lb.xml b/docs/en-US/management-server-lb.xml index f4275786be7..85a86221c80 100644 --- a/docs/en-US/management-server-lb.xml +++ b/docs/en-US/management-server-lb.xml @@ -19,12 +19,12 @@ under the License. -->
- Management Server Load Balancing - &PRODUCT; can use a load balancer to provide a virtual IP for multiple Management Servers. - The administrator is responsible for creating the load balancer rules for the Management - Servers. The application requires persistence or stickiness across multiple sessions. The - following chart lists the ports that should be load balanced and whether or not persistence is - required. + Setting Zone VLAN and Running VM Maximums + &PRODUCT; can use a load balancer to provide a virtual IP for multiple Management + Servers. The administrator is responsible for creating the load balancer rules for the + Management Servers. The application requires persistence or stickiness across multiple sessions. + The following chart lists the ports that should be load balanced and whether or not persistence + is required. Even if persistence is not required, enabling it is permitted. diff --git a/docs/en-US/network-setup.xml b/docs/en-US/network-setup.xml index 192c8e23d2f..ceee190d4ca 100644 --- a/docs/en-US/network-setup.xml +++ b/docs/en-US/network-setup.xml @@ -20,16 +20,16 @@ --> Network Setup - Achieving the correct networking setup is crucial to a successful &PRODUCT; installation. - This section contains information to help you make decisions and follow the right procedures to - get your network set up correctly. + Achieving the correct networking setup is crucial to a successful &PRODUCT; + installation. This section contains information to help you make decisions and follow the right + procedures to get your network set up correctly. + - + - + From 66514c00efad5c93a2b0996f1e79222cbff9bd48 Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Fri, 11 Jan 2013 09:45:04 -0800 Subject: [PATCH 360/421] apidoc: Remove api discovery from toc Based on eb40d2337e0ae10876a27dfbc22575be8e9d593d Signed-off-by: Rohit Yadav --- tools/apidoc/gen_toc.py | 1 - 1 file changed, 1 deletion(-) diff --git a/tools/apidoc/gen_toc.py b/tools/apidoc/gen_toc.py index 7739aea633f..0b281a29c1d 100644 --- a/tools/apidoc/gen_toc.py +++ b/tools/apidoc/gen_toc.py @@ -129,7 +129,6 @@ known_categories = { 'AutoScale': 'AutoScale', 'Counter': 'AutoScale', 'Condition': 'AutoScale', - 'Api': 'API Discovery', } From d8ebd5e4f9d96e8abb7a64c728ac8d8445aac3a4 Mon Sep 17 00:00:00 2001 From: Marcus Sorensen Date: Fri, 11 Jan 2013 11:52:46 -0700 Subject: [PATCH 361/421] Summary: Change url of tiny linux in devcloud-kvm.sql Signed-off-by: Marcus Sorensen 1357930366 -0700 --- tools/devcloud-kvm/devcloud-kvm.sql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/devcloud-kvm/devcloud-kvm.sql b/tools/devcloud-kvm/devcloud-kvm.sql index eeba64153a3..97478834bf3 100644 --- a/tools/devcloud-kvm/devcloud-kvm.sql +++ b/tools/devcloud-kvm/devcloud-kvm.sql @@ -37,4 +37,4 @@ INSERT INTO `cloud`.`configuration` (instance, name, value) VALUE('DEFAULT', 'se UPDATE `cloud`.`configuration` SET value='10' where name = 'storage.overprovisioning.factor'; UPDATE `cloud`.`configuration` SET value='10' where name = 'cpu.overprovisioning.factor'; UPDATE `cloud`.`configuration` SET value='10' where name = 'mem.overprovisioning.factor'; -UPDATE `cloud`.`vm_template` SET unique_name="tiny Linux",name="tiny Linux",url="https://dl.dropbox.com/u/678991/cloudstack-extras/ttylinux_pv.qcow2",checksum="81dcf4b4ca05a3b637a040e851568f29",display_text="tiny Linux",format='QCOW2',hypervisor_type='KVM' where id=5; +UPDATE `cloud`.`vm_template` SET unique_name="tiny Linux",name="tiny Linux",url="http://marcus.mlsorensen.com/cloudstack-extras/ttylinux_pv.qcow2",checksum="81dcf4b4ca05a3b637a040e851568f29",display_text="tiny Linux",format='QCOW2',hypervisor_type='KVM' where id=5; From 1033200b0b5943cc21d5397d12d3b54b69aa2273 Mon Sep 17 00:00:00 2001 From: Noa Resare Date: Wed, 9 Jan 2013 16:39:10 +0100 Subject: [PATCH 362/421] CLOUDSTACK-933: CglibThrowableRendererTest writing stack traces... Improve CglibThrowableRenderer test case Log to a separate Logger instead of the default one to avoid spurious stack traces in test run output. Actually verify that registering CglibThrowableRenderer with the alternative log hierarchy actually removes call trace lines that contains the string --- .../utils/log/CglibThrowableRendererTest.java | 38 ++++++++++++++++++- 1 file changed, 36 insertions(+), 2 deletions(-) diff --git a/utils/test/com/cloud/utils/log/CglibThrowableRendererTest.java b/utils/test/com/cloud/utils/log/CglibThrowableRendererTest.java index 5a9501dcc9c..c1cd81ef08a 100644 --- a/utils/test/com/cloud/utils/log/CglibThrowableRendererTest.java +++ b/utils/test/com/cloud/utils/log/CglibThrowableRendererTest.java @@ -18,14 +18,21 @@ package com.cloud.utils.log; import junit.framework.TestCase; -import org.apache.log4j.Logger; +import org.apache.log4j.*; import com.cloud.utils.component.ComponentLocator; import com.cloud.utils.db.DB; import com.cloud.utils.exception.CloudRuntimeException; +import org.apache.log4j.spi.RootLogger; +import org.apache.log4j.spi.ThrowableRenderer; + +import java.io.CharArrayWriter; +import java.io.Writer; public class CglibThrowableRendererTest extends TestCase { + static Logger another = Logger.getLogger("TEST"); + private final static Logger s_logger = Logger.getLogger(CglibThrowableRendererTest.class); public static class Test { @DB @@ -48,13 +55,40 @@ public class CglibThrowableRendererTest extends TestCase { } } } + + private Logger getAlternateLogger(Writer writer, ThrowableRenderer renderer) { + Hierarchy hierarchy = new Hierarchy(new RootLogger(Level.INFO)); + if (renderer != null) { + hierarchy.setThrowableRenderer(renderer); + } + Logger alternateRoot = hierarchy.getRootLogger(); + alternateRoot.addAppender(new WriterAppender(new SimpleLayout(), writer)); + return alternateRoot; + } public void testException() { + Writer w = new CharArrayWriter(); + Logger alt = getAlternateLogger(w, null); + Test test = ComponentLocator.inject(Test.class); try { test.exception(); } catch (Exception e) { - s_logger.warn("exception caught", e); + alt.warn("exception caught", e); } + // first check that we actually have some call traces containing "" + assertTrue(w.toString().contains("")); + + w = new CharArrayWriter(); + alt = getAlternateLogger(w, new CglibThrowableRenderer()); + + try { + test.exception(); + } catch (Exception e) { + alt.warn("exception caught", e); + } + // then we check that CglibThrowableRenderer indeed remove those occurrences + assertFalse(w.toString().contains("")); + } } From 7960dd429b2d59382845f664a81c72e4024442b5 Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Fri, 11 Jan 2013 14:03:05 -0800 Subject: [PATCH 363/421] utils: Fix getByUuid to accept string arg, it's not gonna be anything else Due to generic programming, most classes declare Daos with ID as Long, so they get the getUuid(Long) definition, it has to be getUuid(String), uuid is not gonna be anything else. Fix GenericDaoBase and GenericDao. Signed-off-by: Rohit Yadav --- utils/src/com/cloud/utils/db/GenericDao.java | 2 +- utils/src/com/cloud/utils/db/GenericDaoBase.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/utils/src/com/cloud/utils/db/GenericDao.java b/utils/src/com/cloud/utils/db/GenericDao.java index 2fae1afe43d..15d04b76a1c 100755 --- a/utils/src/com/cloud/utils/db/GenericDao.java +++ b/utils/src/com/cloud/utils/db/GenericDao.java @@ -56,7 +56,7 @@ public interface GenericDao { T findById(ID id, boolean fresh); // Finds one unique VO using uuid - T findByUuid(ID uuid); + T findByUuid(String uuid); /** * @return VO object ready to be used for update. It won't have any fields filled in. diff --git a/utils/src/com/cloud/utils/db/GenericDaoBase.java b/utils/src/com/cloud/utils/db/GenericDaoBase.java index 92e9e1c4405..880e9de22a8 100755 --- a/utils/src/com/cloud/utils/db/GenericDaoBase.java +++ b/utils/src/com/cloud/utils/db/GenericDaoBase.java @@ -915,7 +915,7 @@ public abstract class GenericDaoBase implements Gene @Override @DB(txn=false) @SuppressWarnings("unchecked") - public T findByUuid(final ID uuid) { + public T findByUuid(final String uuid) { SearchCriteria sc = createSearchCriteria(); sc.addAnd("uuid", SearchCriteria.Op.EQ, uuid); return findOneBy(sc); From 31dd412626ee3ab0bbdf99d8417d806b6a156582 Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Fri, 11 Jan 2013 14:05:41 -0800 Subject: [PATCH 364/421] DomainService: Fix getDomain by uuid string Signed-off-by: Rohit Yadav --- api/src/com/cloud/user/DomainService.java | 2 ++ server/src/com/cloud/user/DomainManagerImpl.java | 5 +++++ server/test/com/cloud/user/MockDomainManagerImpl.java | 6 ++++++ 3 files changed, 13 insertions(+) diff --git a/api/src/com/cloud/user/DomainService.java b/api/src/com/cloud/user/DomainService.java index 6fbe1b9a8db..cd20060b710 100644 --- a/api/src/com/cloud/user/DomainService.java +++ b/api/src/com/cloud/user/DomainService.java @@ -30,6 +30,8 @@ public interface DomainService { Domain getDomain(long id); + Domain getDomain(String uuid); + /** * Return whether a domain is a child domain of a given domain. * diff --git a/server/src/com/cloud/user/DomainManagerImpl.java b/server/src/com/cloud/user/DomainManagerImpl.java index 123b8951b2e..54ca2ac44bd 100644 --- a/server/src/com/cloud/user/DomainManagerImpl.java +++ b/server/src/com/cloud/user/DomainManagerImpl.java @@ -85,6 +85,11 @@ public class DomainManagerImpl implements DomainManager, DomainService, Manager return _domainDao.findById(domainId); } + @Override + public Domain getDomain(String domainUuid) { + return _domainDao.findByUuid(domainUuid); + } + @Override public String getName() { return _name; diff --git a/server/test/com/cloud/user/MockDomainManagerImpl.java b/server/test/com/cloud/user/MockDomainManagerImpl.java index 6dc4d075b9e..9f49535ce68 100644 --- a/server/test/com/cloud/user/MockDomainManagerImpl.java +++ b/server/test/com/cloud/user/MockDomainManagerImpl.java @@ -46,6 +46,12 @@ public class MockDomainManagerImpl implements Manager, DomainManager { return null; } + @Override + public Domain getDomain(String uuid) { + // TODO Auto-generated method stub + return null; + } + @Override public boolean isChildDomain(Long parentId, Long childId) { // TODO Auto-generated method stub From 24687973a8ea8e2f665945295a6b34a19d93b02b Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Fri, 11 Jan 2013 14:07:27 -0800 Subject: [PATCH 365/421] ApiServer: Get rid of IdentityDao, reuse domain manager to get domain id Signed-off-by: Rohit Yadav --- server/src/com/cloud/api/ApiServer.java | 14 +++----------- 1 file changed, 3 insertions(+), 11 deletions(-) diff --git a/server/src/com/cloud/api/ApiServer.java b/server/src/com/cloud/api/ApiServer.java index 7663e8e724a..d34af67cff4 100755 --- a/server/src/com/cloud/api/ApiServer.java +++ b/server/src/com/cloud/api/ApiServer.java @@ -131,7 +131,6 @@ import com.cloud.utils.concurrency.NamedThreadFactory; import com.cloud.utils.db.SearchCriteria; import com.cloud.utils.db.Transaction; import com.cloud.utils.exception.CSExceptionErrorCode; -import com.cloud.uuididentity.dao.IdentityDao; public class ApiServer implements HttpRequestHandler { private static final Logger s_logger = Logger.getLogger(ApiServer.class.getName()); @@ -680,20 +679,13 @@ public class ApiServer implements HttpRequestHandler { if (ex instanceof ServerApiException && ((ServerApiException) ex).getErrorCode() == BaseCmd.UNSUPPORTED_ACTION_ERROR) { throw (ServerApiException) ex; } - s_logger.error("unable to verifty request signature", ex); + s_logger.error("unable to verify request signature", ex); } return false; } - public Long fetchDomainId(String domainUUID){ - ComponentLocator locator = ComponentLocator.getLocator(ManagementServer.Name); - IdentityDao identityDao = locator.getDao(IdentityDao.class); - try{ - Long domainId = identityDao.getIdentityId("domain", domainUUID); - return domainId; - }catch(InvalidParameterValueException ex){ - return null; - } + public Long fetchDomainId(String domainUUID) { + return _domainMgr.getDomain(domainUUID).getId(); } public void loginUser(HttpSession session, String username, String password, Long domainId, String domainPath, String loginIpAddress ,Map requestParameters) throws CloudAuthenticationException { From 8cdb40a416dba0c8baac6980772c3208127811e7 Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Fri, 11 Jan 2013 15:27:18 -0800 Subject: [PATCH 366/421] NetworkManagerImpl: Add method to getNetwork by uuid Signed-off-by: Rohit Yadav --- server/src/com/cloud/network/NetworkManagerImpl.java | 6 ++++++ server/test/com/cloud/network/MockNetworkManagerImpl.java | 6 ++++++ server/test/com/cloud/vpc/MockNetworkManagerImpl.java | 6 ++++++ 3 files changed, 18 insertions(+) diff --git a/server/src/com/cloud/network/NetworkManagerImpl.java b/server/src/com/cloud/network/NetworkManagerImpl.java index c5003760b68..206392dce49 100755 --- a/server/src/com/cloud/network/NetworkManagerImpl.java +++ b/server/src/com/cloud/network/NetworkManagerImpl.java @@ -2441,6 +2441,12 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag return _networksDao.findById(id); } + @Override + @DB + public Network getNetwork(String uuid) { + return _networksDao.findByUuid(uuid); + } + @Override public List getRemoteAccessVpnElements() { List elements = new ArrayList(); diff --git a/server/test/com/cloud/network/MockNetworkManagerImpl.java b/server/test/com/cloud/network/MockNetworkManagerImpl.java index 26a6e60f714..874e01767a9 100755 --- a/server/test/com/cloud/network/MockNetworkManagerImpl.java +++ b/server/test/com/cloud/network/MockNetworkManagerImpl.java @@ -112,6 +112,12 @@ public class MockNetworkManagerImpl implements NetworkManager, Manager, NetworkS return null; } + @Override + public Network getNetwork(String networkUuid) { + // TODO Auto-generated method stub + return null; + } + @Override public IpAddress getIp(long id) { // TODO Auto-generated method stub diff --git a/server/test/com/cloud/vpc/MockNetworkManagerImpl.java b/server/test/com/cloud/vpc/MockNetworkManagerImpl.java index 8cb9dd53948..bd8d8bc3a69 100644 --- a/server/test/com/cloud/vpc/MockNetworkManagerImpl.java +++ b/server/test/com/cloud/vpc/MockNetworkManagerImpl.java @@ -156,6 +156,12 @@ public class MockNetworkManagerImpl implements NetworkManager, Manager{ return null; } + @Override + public Network getNetwork(String networkUuid) { + // TODO Auto-generated method stub + return null; + } + /* (non-Javadoc) * @see com.cloud.network.NetworkService#getIp(long) */ From 35544f26e57ec6eaffbc6e87e3536fefbc0dbec0 Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Fri, 11 Jan 2013 15:29:15 -0800 Subject: [PATCH 367/421] DeployVmCmd: Remove usage of IdentityDao, use Network to get by id or uuid Signed-off-by: Rohit Yadav --- .../api/command/user/vm/DeployVMCmd.java | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/api/src/org/apache/cloudstack/api/command/user/vm/DeployVMCmd.java b/api/src/org/apache/cloudstack/api/command/user/vm/DeployVMCmd.java index 28bb80f72d3..e675c83dd6f 100644 --- a/api/src/org/apache/cloudstack/api/command/user/vm/DeployVMCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vm/DeployVMCmd.java @@ -147,10 +147,9 @@ public class DeployVMCmd extends BaseAsyncCreateCmd { private List securityGroupNameList; @ACL(checkKeyAccess=true) - @Parameter(name = ApiConstants.IP_NETWORK_LIST, type = CommandType.MAP, entityType={Network.class,IpAddress.class}, + @Parameter(name = ApiConstants.IP_NETWORK_LIST, type = CommandType.MAP, entityType={Network.class, IpAddress.class}, description = "ip to network mapping. Can't be specified with networkIds parameter." + - " Example: iptonetworklist[0].ip=10.10.10.11&iptonetworklist[0].networkid=204 - requests to" + - " use ip 10.10.10.11 in network id=204") + " Example: iptonetworklist[0].ip=10.10.10.11&iptonetworklist[0].networkid=uuid - requests to use ip 10.10.10.11 in network id=uuid") private Map ipToNetworkList; @Parameter(name=ApiConstants.IP_ADDRESS, type=CommandType.STRING, description="the ip address for default vm's network") @@ -284,7 +283,17 @@ public class DeployVMCmd extends BaseAsyncCreateCmd { Iterator iter = ipsCollection.iterator(); while (iter.hasNext()) { HashMap ips = (HashMap) iter.next(); - Long networkId = Long.valueOf(_responseGenerator.getIdentiyId("networks", ips.get("networkid"))); + Long networkId; + Network network = _networkService.getNetwork(ips.get("networkid")); + if (network != null) { + networkId = network.getId(); + } else { + try { + networkId = Long.parseLong(ips.get("networkid")); + } catch(NumberFormatException e) { + throw new InvalidParameterValueException("Unable to translate and find entity with networkId: " + ips.get("networkid")); + } + } String requestedIp = (String) ips.get("ip"); ipToNetworkMap.put(networkId, requestedIp); } From a35db97355470a30e2ea0979560a74afef26291e Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Fri, 11 Jan 2013 15:29:51 -0800 Subject: [PATCH 368/421] NetworkService: Add method to interface to get network by uuid Signed-off-by: Rohit Yadav --- api/src/com/cloud/network/NetworkService.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/api/src/com/cloud/network/NetworkService.java b/api/src/com/cloud/network/NetworkService.java index d5841a4692e..39a746e6776 100755 --- a/api/src/com/cloud/network/NetworkService.java +++ b/api/src/com/cloud/network/NetworkService.java @@ -60,6 +60,8 @@ public interface NetworkService { Network getNetwork(long networkId); + Network getNetwork(String networkUuid); + IpAddress getIp(long id); NetworkProfile convertNetworkToNetworkProfile(long networkId); From 8eba0ee0bbb2dbdb97aee8e672405b5e174b510d Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Fri, 11 Jan 2013 15:31:03 -0800 Subject: [PATCH 369/421] ApiDispatcher: Remove helper method that proxies via ApiResponseHelper to get entity by IdentityDao Signed-off-by: Rohit Yadav --- server/src/com/cloud/api/ApiDispatcher.java | 6 ------ server/src/com/cloud/api/ApiResponseHelper.java | 5 ----- 2 files changed, 11 deletions(-) diff --git a/server/src/com/cloud/api/ApiDispatcher.java b/server/src/com/cloud/api/ApiDispatcher.java index 7bc3271523b..55d7f429ca1 100755 --- a/server/src/com/cloud/api/ApiDispatcher.java +++ b/server/src/com/cloud/api/ApiDispatcher.java @@ -64,7 +64,6 @@ import com.cloud.utils.component.PluggableService; import com.cloud.utils.db.GenericDao; import com.cloud.utils.exception.CSExceptionErrorCode; import com.cloud.utils.exception.CloudRuntimeException; -import com.cloud.uuididentity.dao.IdentityDao; // ApiDispatcher: A class that dispatches API commands to the appropriate manager for execution. public class ApiDispatcher { @@ -75,7 +74,6 @@ public class ApiDispatcher { @Inject private AsyncJobManager _asyncMgr = null; @Inject private AccountManager _accountMgr = null; @Inject EntityManager _entityMgr = null; - @Inject IdentityDao _identityDao = null; Map> _daoNameMap = new HashMap>(); // singleton class @@ -708,8 +706,4 @@ public class ApiDispatcher { throw new CloudRuntimeException("Internal error at plugService for command " + cmd.getCommandName() + " [field " + field.getName() + " is not accessible]"); } } - - public static Long getIdentiyId(String tableName, String token) { - return s_instance._identityDao.getIdentityId(tableName, token); - } } diff --git a/server/src/com/cloud/api/ApiResponseHelper.java b/server/src/com/cloud/api/ApiResponseHelper.java index edb798b812e..c346a6b86f1 100755 --- a/server/src/com/cloud/api/ApiResponseHelper.java +++ b/server/src/com/cloud/api/ApiResponseHelper.java @@ -2791,11 +2791,6 @@ public class ApiResponseHelper implements ResponseGenerator { return response; } - @Override - public Long getIdentiyId(String tableName, String token) { - return ApiDispatcher.getIdentiyId(tableName, token); - } - @Override public ResourceTagResponse createResourceTagResponse(ResourceTag resourceTag, boolean keyValueOnly) { ResourceTagJoinVO rto = ApiDBUtils.newResourceTagView(resourceTag); From 83e7214b02adf1facc8aed0f61206248de698c42 Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Fri, 11 Jan 2013 16:45:35 -0800 Subject: [PATCH 370/421] ConsoleProxyManagerImpl: Get rid of IdentityDao Signed-off-by: Rohit Yadav --- .../consoleproxy/ConsoleProxyManagerImpl.java | 37 ++++++++----------- 1 file changed, 16 insertions(+), 21 deletions(-) diff --git a/server/src/com/cloud/consoleproxy/ConsoleProxyManagerImpl.java b/server/src/com/cloud/consoleproxy/ConsoleProxyManagerImpl.java index 4994f4f526b..5bc5d27ee08 100755 --- a/server/src/com/cloud/consoleproxy/ConsoleProxyManagerImpl.java +++ b/server/src/com/cloud/consoleproxy/ConsoleProxyManagerImpl.java @@ -31,6 +31,8 @@ import javax.ejb.Local; import javax.naming.ConfigurationException; import javax.persistence.Table; +import com.cloud.offering.DiskOffering; +import com.cloud.storage.dao.DiskOfferingDao; import org.apache.log4j.Logger; import com.cloud.agent.AgentManager; @@ -107,7 +109,6 @@ import com.cloud.resource.UnableDeleteHostException; import com.cloud.service.ServiceOfferingVO; import com.cloud.service.dao.ServiceOfferingDao; import com.cloud.servlet.ConsoleProxyServlet; -import com.cloud.storage.DiskOfferingVO; import com.cloud.storage.StorageManager; import com.cloud.storage.StoragePoolStatus; import com.cloud.storage.StoragePoolVO; @@ -138,7 +139,6 @@ import com.cloud.utils.db.Transaction; import com.cloud.utils.events.SubscriptionMgr; import com.cloud.utils.exception.CloudRuntimeException; import com.cloud.utils.net.NetUtils; -import com.cloud.uuididentity.dao.IdentityDao; import com.cloud.vm.ConsoleProxyVO; import com.cloud.vm.NicProfile; import com.cloud.vm.ReservationContext; @@ -216,6 +216,8 @@ public class ConsoleProxyManagerImpl implements ConsoleProxyManager, ConsoleProx @Inject ServiceOfferingDao _offeringDao; @Inject + DiskOfferingDao _diskOfferingDao; + @Inject NetworkOfferingDao _networkOfferingDao; @Inject StoragePoolDao _storagePoolDao; @@ -224,8 +226,6 @@ public class ConsoleProxyManagerImpl implements ConsoleProxyManager, ConsoleProx @Inject ResourceManager _resourceMgr; @Inject - IdentityDao _identityDao; - @Inject NetworkDao _networkDao; @Inject RulesManager _rulesMgr; @@ -928,14 +928,12 @@ public class ConsoleProxyManagerImpl implements ConsoleProxyManager, ConsoleProx return new ConsoleAccessAuthenticationAnswer(cmd, false); } - vmId = _identityDao.getIdentityId("vm_instance", cmd.getVmId()); - if (vmId == null) { - s_logger.error("Invalid vm id " + cmd.getVmId() + " sent from console access authentication"); - return new ConsoleAccessAuthenticationAnswer(cmd, false); - } - - VMInstanceVO vm = _instanceDao.findById(vmId); + VirtualMachine vm = _instanceDao.findByUuid(cmd.getVmId()); if (vm == null) { + vm = _instanceDao.findById(Long.parseLong(cmd.getVmId())); + } + if (vm == null) { + s_logger.error("Invalid vm id " + cmd.getVmId() + " sent from console access authentication"); return new ConsoleAccessAuthenticationAnswer(cmd, false); } @@ -1525,16 +1523,13 @@ public class ConsoleProxyManagerImpl implements ConsoleProxyManager, ConsoleProx //check if there is a default service offering configured String cpvmSrvcOffIdStr = configs.get(Config.ConsoleProxyServiceOffering.key()); if (cpvmSrvcOffIdStr != null) { - - Long cpvmSrvcOffId = null; - try { - cpvmSrvcOffId = _identityDao.getIdentityId(DiskOfferingVO.class.getAnnotation(Table.class).name(),cpvmSrvcOffIdStr); - } catch (Exception e) { - String msg = "Can't find system service offering specified by global config, uuid=" + cpvmSrvcOffIdStr + " for console proxy vm"; - s_logger.warn(msg); - } - if(cpvmSrvcOffId != null){ - _serviceOffering = _offeringDao.findById(cpvmSrvcOffId); + DiskOffering diskOffering = _diskOfferingDao.findByUuid(cpvmSrvcOffIdStr); + if (diskOffering == null) + diskOffering = _diskOfferingDao.findById(Long.parseLong(cpvmSrvcOffIdStr)); + if (diskOffering != null) { + _serviceOffering = _offeringDao.findById(diskOffering.getId()); + } else { + s_logger.warn("Can't find system service offering specified by global config, uuid=" + cpvmSrvcOffIdStr + " for console proxy vm"); } } From 4c80684b1fffb14cea8ffd3880b278bd51dff9fc Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Fri, 11 Jan 2013 16:47:02 -0800 Subject: [PATCH 371/421] StaticRoleBasedAPIAccessChecker: Fix acl cfg processing error messages Signed-off-by: Rohit Yadav --- .../acl/StaticRoleBasedAPIAccessChecker.java | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/plugins/acl/static-role-based/src/org/apache/cloudstack/acl/StaticRoleBasedAPIAccessChecker.java b/plugins/acl/static-role-based/src/org/apache/cloudstack/acl/StaticRoleBasedAPIAccessChecker.java index 740fbbc6456..380b6714517 100644 --- a/plugins/acl/static-role-based/src/org/apache/cloudstack/acl/StaticRoleBasedAPIAccessChecker.java +++ b/plugins/acl/static-role-based/src/org/apache/cloudstack/acl/StaticRoleBasedAPIAccessChecker.java @@ -43,9 +43,8 @@ public class StaticRoleBasedAPIAccessChecker extends AdapterBase implements APIC protected StaticRoleBasedAPIAccessChecker() { super(); - for (RoleType roleType: RoleType.values()) { + for (RoleType roleType: RoleType.values()) s_roleBasedApisMap.put(roleType, new HashSet()); - } } @Override @@ -71,16 +70,14 @@ public class StaticRoleBasedAPIAccessChecker extends AdapterBase implements APIC List services = locator.getAllPluggableServices(); services.add((PluggableService) ComponentLocator.getComponent(ManagementServer.Name)); - Map configPropertiesMap = new HashMap(); for (PluggableService service : services) { - configPropertiesMap.putAll(service.getProperties()); + processConfigFiles(service.getProperties(), service.getClass().toString()); + s_logger.info("Processed role based acl for: " + service.toString()); } - - processConfigFiles(configPropertiesMap); return true; } - private void processConfigFiles(Map configMap) { + private void processConfigFiles(Map configMap, String service) { for (Map.Entry entry: configMap.entrySet()) { String apiName = entry.getKey(); String roleMask = entry.getValue(); @@ -91,7 +88,8 @@ public class StaticRoleBasedAPIAccessChecker extends AdapterBase implements APIC s_roleBasedApisMap.get(roleType).add(apiName); } } catch (NumberFormatException nfe) { - s_logger.info("Malformed commands.properties permissions value, for entry: " + entry.toString()); + s_logger.info("Malformed getProperties() value for service: " + service + + " for entry: " + entry.toString()); } } } From 40779975d33c554ce488a21d84e63e635e95984e Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Fri, 11 Jan 2013 18:39:57 -0800 Subject: [PATCH 372/421] ExtractVolumeCmd: Fix regression, use Zone Id for getting zone Fixes regression introduced in b14b39a69fa295d1d20484170b95b97fe310af28 Signed-off-by: Rohit Yadav --- .../cloudstack/api/command/user/volume/ExtractVolumeCmd.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/api/src/org/apache/cloudstack/api/command/user/volume/ExtractVolumeCmd.java b/api/src/org/apache/cloudstack/api/command/user/volume/ExtractVolumeCmd.java index 7f6cd052470..43b25a83663 100644 --- a/api/src/org/apache/cloudstack/api/command/user/volume/ExtractVolumeCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/volume/ExtractVolumeCmd.java @@ -137,7 +137,7 @@ public class ExtractVolumeCmd extends BaseAsyncCmd { Volume vol = _entityMgr.findById(Volume.class, id); response.setId(vol.getUuid()); response.setName(vol.getName()); - DataCenter zone = _entityMgr.findById(DataCenter.class, id); + DataCenter zone = _entityMgr.findById(DataCenter.class, zoneId); response.setZoneId(zone.getUuid()); response.setZoneName(zone.getName()); response.setMode(mode); From 0dca44efe8f3adee3f18127791edac7b0e5c1f81 Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Fri, 11 Jan 2013 18:43:26 -0800 Subject: [PATCH 373/421] ApiServer: Debug messages, don't spam with info, remove identity helper in ResponseGenerator Signed-off-by: Rohit Yadav --- .../apache/cloudstack/api/ResponseGenerator.java | 7 ------- server/src/com/cloud/api/ApiServer.java | 13 ++++++------- 2 files changed, 6 insertions(+), 14 deletions(-) diff --git a/api/src/org/apache/cloudstack/api/ResponseGenerator.java b/api/src/org/apache/cloudstack/api/ResponseGenerator.java index e9f988ade60..63df4dc5532 100644 --- a/api/src/org/apache/cloudstack/api/ResponseGenerator.java +++ b/api/src/org/apache/cloudstack/api/ResponseGenerator.java @@ -314,13 +314,6 @@ public interface ResponseGenerator { StorageNetworkIpRangeResponse createStorageNetworkIpRangeResponse(StorageNetworkIpRange result); - /** - * @param tableName TODO - * @param token - * @return - */ - Long getIdentiyId(String tableName, String token); - /** * @param resourceTag * @param keyValueOnly TODO diff --git a/server/src/com/cloud/api/ApiServer.java b/server/src/com/cloud/api/ApiServer.java index d34af67cff4..52f2aef56cb 100755 --- a/server/src/com/cloud/api/ApiServer.java +++ b/server/src/com/cloud/api/ApiServer.java @@ -601,30 +601,29 @@ public class ApiServer implements HttpRequestHandler { // if api/secret key are passed to the parameters if ((signature == null) || (apiKey == null)) { - if (s_logger.isDebugEnabled()) { - s_logger.info("expired session, missing signature, or missing apiKey -- ignoring request...sig: " + signature + ", apiKey: " + apiKey); - } + s_logger.debug("Expired session, missing signature, or missing apiKey -- ignoring request. Signature: " + signature + ", apiKey: " + apiKey); return false; // no signature, bad request } Date expiresTS = null; + // FIXME: Hard coded signature, why not have an enum if ("3".equals(signatureVersion)) { // New signature authentication. Check for expire parameter and its validity if (expires == null) { - s_logger.info("missing Expires parameter -- ignoring request...sig: " + signature + ", apiKey: " + apiKey); + s_logger.debug("Missing Expires parameter -- ignoring request. Signature: " + signature + ", apiKey: " + apiKey); return false; } synchronized (_dateFormat) { try { expiresTS = _dateFormat.parse(expires); } catch (ParseException pe) { - s_logger.info("Incorrect date format for Expires parameter", pe); + s_logger.debug("Incorrect date format for Expires parameter", pe); return false; } } Date now = new Date(System.currentTimeMillis()); if (expiresTS.before(now)) { - s_logger.info("Request expired -- ignoring ...sig: " + signature + ", apiKey: " + apiKey); + s_logger.debug("Request expired -- ignoring ...sig: " + signature + ", apiKey: " + apiKey); return false; } } @@ -635,7 +634,7 @@ public class ApiServer implements HttpRequestHandler { // verify there is a user with this api key Pair userAcctPair = _accountMgr.findUserByApiKey(apiKey); if (userAcctPair == null) { - s_logger.info("apiKey does not map to a valid user -- ignoring request, apiKey: " + apiKey); + s_logger.debug("apiKey does not map to a valid user -- ignoring request, apiKey: " + apiKey); return false; } From ad063ed61055ca26b23594b4c47e30a3c22974d7 Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Fri, 11 Jan 2013 19:23:32 -0800 Subject: [PATCH 374/421] StaticRoleBasedAPIAccessChecker: Throw exception on failed check Plugin should not be responsible for existence of checking an API, this was wrong. Throw exception boldly when checkAccess fails. Signed-off-by: Rohit Yadav --- .../org/apache/cloudstack/acl/APIChecker.java | 5 ++--- .../acl/StaticRoleBasedAPIAccessChecker.java | 17 +++++++---------- server/src/com/cloud/api/ApiServer.java | 15 +++------------ 3 files changed, 12 insertions(+), 25 deletions(-) diff --git a/api/src/org/apache/cloudstack/acl/APIChecker.java b/api/src/org/apache/cloudstack/acl/APIChecker.java index 61dd7de75cb..b14dfe101ba 100644 --- a/api/src/org/apache/cloudstack/acl/APIChecker.java +++ b/api/src/org/apache/cloudstack/acl/APIChecker.java @@ -16,13 +16,12 @@ // under the License. package org.apache.cloudstack.acl; +import com.cloud.exception.PermissionDeniedException; import org.apache.cloudstack.acl.RoleType; import com.cloud.utils.component.Adapter; // APIChecker checks the ownership and access control to API requests public interface APIChecker extends Adapter { // Interface for checking access for a role using apiname - boolean checkAccess(RoleType roleType, String apiCommandName); - // Interface for checking existence of an api by name - boolean checkExistence(String apiCommandName); + boolean checkAccess(RoleType roleType, String apiCommandName) throws PermissionDeniedException; } diff --git a/plugins/acl/static-role-based/src/org/apache/cloudstack/acl/StaticRoleBasedAPIAccessChecker.java b/plugins/acl/static-role-based/src/org/apache/cloudstack/acl/StaticRoleBasedAPIAccessChecker.java index 380b6714517..affd69ed89c 100644 --- a/plugins/acl/static-role-based/src/org/apache/cloudstack/acl/StaticRoleBasedAPIAccessChecker.java +++ b/plugins/acl/static-role-based/src/org/apache/cloudstack/acl/StaticRoleBasedAPIAccessChecker.java @@ -16,6 +16,7 @@ // under the License. package org.apache.cloudstack.acl; +import com.cloud.exception.PermissionDeniedException; import com.cloud.server.ManagementServer; import com.cloud.utils.component.AdapterBase; import com.cloud.utils.component.ComponentLocator; @@ -48,17 +49,13 @@ public class StaticRoleBasedAPIAccessChecker extends AdapterBase implements APIC } @Override - public boolean checkAccess(RoleType roleType, String commandName) { - return s_roleBasedApisMap.get(roleType).contains(commandName); - } - - @Override - public boolean checkExistence(String apiName) { - for (RoleType roleType: RoleType.values()) { - if (s_roleBasedApisMap.get(roleType).contains(apiName)) - return true; + public boolean checkAccess(RoleType roleType, String commandName) + throws PermissionDeniedException { + boolean isAllowed = s_roleBasedApisMap.get(roleType).contains(commandName); + if (!isAllowed) { + throw new PermissionDeniedException("The API does not exist or is blacklisted. Role type=" + roleType.toString() + " is not allowed to request the api: " + commandName); } - return false; + return isAllowed; } @Override diff --git a/server/src/com/cloud/api/ApiServer.java b/server/src/com/cloud/api/ApiServer.java index 52f2aef56cb..03462e488ef 100755 --- a/server/src/com/cloud/api/ApiServer.java +++ b/server/src/com/cloud/api/ApiServer.java @@ -556,7 +556,7 @@ public class ApiServer implements HttpRequestHandler { return true; } else { // check against every available command to see if the command exists or not - if (!doesCommandExist(commandName) && !commandName.equals("login") && !commandName.equals("logout")) { + if (!_apiNameCmdClassMap.containsKey(commandName) && !commandName.equals("login") && !commandName.equals("logout")) { s_logger.debug("The given command:" + commandName + " does not exist or it is not available for user with id:" + userId); throw new ServerApiException(BaseCmd.UNSUPPORTED_ACTION_ERROR, "The given command does not exist or it is not available for user"); } @@ -780,18 +780,9 @@ public class ApiServer implements HttpRequestHandler { return true; } - private boolean doesCommandExist(String apiName) { - for (APIChecker apiChecker : _apiAccessCheckers) { - // If any checker has api info on the command, return true - if (apiChecker.checkExistence(apiName)) - return true; - } - return false; - } - - private boolean isCommandAvailable(User user, String commandName) { + private boolean isCommandAvailable(User user, String commandName) throws PermissionDeniedException { if (user == null) { - return false; + throw new PermissionDeniedException("User is null for role based API access check for command" + commandName); } Account account = _accountMgr.getAccount(user.getAccountId()); From 8d3cbc82d80eb0c4ead6f68377157fd477fe2d76 Mon Sep 17 00:00:00 2001 From: Prasanna Santhanam Date: Sat, 12 Jan 2013 14:38:14 +0530 Subject: [PATCH 375/421] marvin: fixes for handling multiple phy. networks zones do not qualify for vlans but phy networks should carry the underlying vlan information. moving the vlan down to physical_network in configGenerator.py. also the sandbox example has been corrected to reflect this change and includes an illustration of using traffic types with labels. Signed-off-by: Prasanna Santhanam Reported-By: Marcus Sorenson --- tools/marvin/marvin/configGenerator.py | 3 +-- tools/marvin/marvin/deployDataCenter.py | 2 +- .../marvin/sandbox/advanced/advanced_env.py | 18 +++++++++++++++--- .../marvin/sandbox/advanced/setup.properties | 16 ++++++++-------- 4 files changed, 25 insertions(+), 14 deletions(-) diff --git a/tools/marvin/marvin/configGenerator.py b/tools/marvin/marvin/configGenerator.py index d494beb6444..e2a6a24d69f 100644 --- a/tools/marvin/marvin/configGenerator.py +++ b/tools/marvin/marvin/configGenerator.py @@ -65,8 +65,6 @@ class zone(): self.internaldns2 = None self.securitygroupenabled = None self.localstorageenabled = None - ''' Guest Vlan range - only advanced zone''' - self.vlan = None '''default public network, in advanced mode''' self.ipranges = [] self.physical_networks = [] @@ -80,6 +78,7 @@ class traffictype(): self.xen = labeldict['xen'] if 'xen' in labeldict.keys() else None self.kvm = labeldict['kvm'] if 'kvm' in labeldict.keys() else None self.vmware = labeldict['vmware'] if 'vmware' in labeldict.keys() else None + self.simulator = labeldict['simulator'] if 'simulator' in labeldict.keys() else None #{ # 'xen' : 'cloud-xen', # 'kvm' : 'cloud-kvm', diff --git a/tools/marvin/marvin/deployDataCenter.py b/tools/marvin/marvin/deployDataCenter.py index 0d5f3bdc659..7f8c0295ad8 100644 --- a/tools/marvin/marvin/deployDataCenter.py +++ b/tools/marvin/marvin/deployDataCenter.py @@ -289,7 +289,7 @@ class deployDataCenters(): for pnet in zone.physical_networks: phynetwrk = self.createPhysicalNetwork(pnet, zoneId) self.configureProviders(phynetwrk, pnet.providers) - self.updatePhysicalNetwork(phynetwrk.id, "Enabled", vlan=zone.vlan) + self.updatePhysicalNetwork(phynetwrk.id, "Enabled", vlan=pnet.vlan) if zone.networktype == "Basic": listnetworkoffering = listNetworkOfferings.listNetworkOfferingsCmd() diff --git a/tools/marvin/marvin/sandbox/advanced/advanced_env.py b/tools/marvin/marvin/sandbox/advanced/advanced_env.py index 1873f31d50f..db78a84b33b 100644 --- a/tools/marvin/marvin/sandbox/advanced/advanced_env.py +++ b/tools/marvin/marvin/sandbox/advanced/advanced_env.py @@ -52,10 +52,22 @@ def describeResources(config): pn = physical_network() pn.name = "Sandbox-pnet" - pn.traffictypes = [traffictype("Guest"), traffictype("Management"), traffictype("Public")] + pn.vlan = config.get('cloudstack', 'pnet.vlan') + pn.tags = ["cloud-simulator-public"] + pn.traffictypes = [traffictype("Guest"), + traffictype("Management", {"simulator" : "cloud-simulator-mgmt"}), + traffictype("Public", {"simulator":"cloud-simulator-public"})] pn.providers.append(vpcprovider) + + pn2 = physical_network() + pn2.name = "Sandbox-pnet2" + pn2.vlan = config.get('cloudstack', 'pnet2.vlan') + pn2.tags = ["cloud-simulator-guest"] + pn2.traffictypes = [traffictype('Guest', {'simulator': 'cloud-simulator-guest'})] + pn2.providers.append(vpcprovider) z.physical_networks.append(pn) + z.physical_networks.append(pn2) p = pod() p.name = 'POD0' @@ -118,11 +130,11 @@ def describeResources(config): ''''add loggers''' testClientLogger = logger() testClientLogger.name = 'TestClient' - testClientLogger.file = '/var/log/testclient.log' + testClientLogger.file = 'testclient.log' testCaseLogger = logger() testCaseLogger.name = 'TestCase' - testCaseLogger.file = '/var/log/testcase.log' + testCaseLogger.file = 'testcase.log' zs.logger.append(testClientLogger) zs.logger.append(testCaseLogger) diff --git a/tools/marvin/marvin/sandbox/advanced/setup.properties b/tools/marvin/marvin/sandbox/advanced/setup.properties index ba44d5146b6..73eacc938d4 100644 --- a/tools/marvin/marvin/sandbox/advanced/setup.properties +++ b/tools/marvin/marvin/sandbox/advanced/setup.properties @@ -24,10 +24,9 @@ storage.cleanup.interval=300 account.cleanup.interval=600 expunge.workers=3 workers=10 -use.user.concentrated.pod.allocation=false vm.allocation.algorithm=random vm.op.wait.interval=5 -guest.domain.suffix=sandbox.kvm +guest.domain.suffix=sandbox.simulator instance.name=QA direct.agent.load.size=1000 default.page.size=10000 @@ -35,15 +34,16 @@ check.pod.cidrs=true secstorage.allowed.internal.sites=10.147.28.0/24 [environment] dns=10.147.28.6 -mshost=10.147.29.111 +mshost=localhost mshost.user=root mshost.passwd=password -mysql.host=10.147.29.111 +mysql.host=localhost mysql.cloud.user=cloud mysql.cloud.passwd=cloud [cloudstack] #guest VLAN -zone.vlan=675-679 +pnet.vlan=675-679 +pnet2.vlan=800-1000 #management network private.gateway=10.147.29.1 private.pod.startip=10.147.29.150 @@ -56,9 +56,9 @@ public.vlan.startip=10.147.31.150 public.vlan.endip=10.147.31.159 public.netmask=255.255.255.0 #hypervisor host information -hypervisor=XenServer -host=10.147.29.58 +hypervisor=Simulator +host=simulator0 host.password=password #storage pools -primary.pool=nfs://10.147.28.6:/export/home/sandbox/kamakura +primary.pool=nfs://10.147.28.6:/export/home/sandbox/primary secondary.pool=nfs://10.147.28.6:/export/home/sandbox/sstor From 5442df2b5eba253f2dc80e08ff97e3f22047bbae Mon Sep 17 00:00:00 2001 From: Prasanna Santhanam Date: Sun, 13 Jan 2013 14:22:56 +0530 Subject: [PATCH 376/421] devcloud-kvm: marvin deployment config generator for devcloud-kvm The devcloud-kvm.py script will take the kvm.properties file to generate an advanced zone configuration with two physical networks with traffic labels for 'guest' and 'public' traffic going on 'eth0' and 'eth1' respectively. To generate config: $ python devcloud-kvm.py -i kvm.properties -o devcloud-kvm-advanced.cfg Signed-off-by: Prasanna Santhanam --- tools/devcloud-kvm/devcloud-kvm-advanced.cfg | 183 +++++++++++++++++++ tools/devcloud-kvm/devcloud-kvm.py | 157 ++++++++++++++++ tools/devcloud-kvm/kvm.properties | 62 +++++++ 3 files changed, 402 insertions(+) create mode 100644 tools/devcloud-kvm/devcloud-kvm-advanced.cfg create mode 100644 tools/devcloud-kvm/devcloud-kvm.py create mode 100644 tools/devcloud-kvm/kvm.properties diff --git a/tools/devcloud-kvm/devcloud-kvm-advanced.cfg b/tools/devcloud-kvm/devcloud-kvm-advanced.cfg new file mode 100644 index 00000000000..b96805ede2a --- /dev/null +++ b/tools/devcloud-kvm/devcloud-kvm-advanced.cfg @@ -0,0 +1,183 @@ +{ + "zones": [ + { + "localstorageenabled": "true", + "name": "Devcloud-KVM", + "guestcidraddress": "10.1.1.0/24", + "dns1": "8.8.8.8", + "physical_networks": [ + { + "name": "eth0", + "providers": [ + { + "broadcastdomainrange": "ZONE", + "name": "VirtualRouter" + }, + { + "broadcastdomainrange": "ZONE", + "name": "VpcVirtualRouter" + } + ], + "broadcastdomainrange": "Zone", + "vlan": "3900-3919", + "traffictypes": [ + { + "kvm": "kvm-guest", + "typ": "Guest" + }, + { + "typ": "Management" + } + ], + "tags": [ + "devcloud-guest" + ] + }, + { + "name": "eth1", + "providers": [ + { + "broadcastdomainrange": "ZONE", + "name": "VirtualRouter" + }, + { + "broadcastdomainrange": "ZONE", + "name": "VpcVirtualRouter" + } + ], + "broadcastdomainrange": "Zone", + "vlan": "3920-3939", + "traffictypes": [ + { + "kvm": "kvm-public", + "typ": "Public" + } + ], + "tags": [ + "devcloud-public" + ] + } + ], + "ipranges": [ + { + "startip": "10.0.3.100", + "endip": "10.0.3.199", + "netmask": "255.255.255.0", + "vlan": "31", + "gateway": "10.0.3.2" + } + ], + "networktype": "Advanced", + "pods": [ + { + "endip": "192.168.56.249", + "name": "POD0", + "startip": "192.168.56.200", + "netmask": "255.255.255.0", + "clusters": [ + { + "clustername": "C0", + "hypervisor": "KVM", + "hosts": [ + { + "username": "root", + "url": "http://192.168.56.10", + "password": "password" + } + ], + "clustertype": "CloudManaged", + "primaryStorages": [ + { + "url": "nfs://192.168.56.10/opt/storage/primary", + "name": "PS0" + } + ] + } + ], + "gateway": "192.168.56.1" + } + ], + "internaldns1": "8.8.8.8", + "secondaryStorages": [ + { + "url": "nfs://192.168.56.10/opt/storage/secondary" + } + ] + } + ], + "dbSvr": { + "dbSvr": "127.0.0.1", + "passwd": "cloud", + "db": "cloud", + "port": 3306, + "user": "cloud" + }, + "logger": [ + { + "name": "TestClient", + "file": "testclient.log" + }, + { + "name": "TestCase", + "file": "testcase.log" + } + ], + "globalConfig": [ + { + "name": "storage.cleanup.interval", + "value": "300" + }, + { + "name": "instance.name", + "value": "vm" + }, + { + "name": "workers", + "value": "10" + }, + { + "name": "vm.op.wait.interval", + "value": "5" + }, + { + "name": "account.cleanup.interval", + "value": "600" + }, + { + "name": "guest.domain.suffix", + "value": "devcloud.kvm" + }, + { + "name": "expunge.delay", + "value": "60" + }, + { + "name": "vm.allocation.algorithm", + "value": "random" + }, + { + "name": "expunge.interval", + "value": "60" + }, + { + "name": "expunge.workers", + "value": "3" + }, + { + "name": "secstorage.allowed.internal.sites", + "value": "10.147.28.0/24" + }, + { + "name": "check.pod.cidrs", + "value": "true" + } + ], + "mgtSvr": [ + { + "mgtSvrIp": "127.0.0.1", + "passwd": "password", + "user": "root", + "port": 8096 + } + ] +} \ No newline at end of file diff --git a/tools/devcloud-kvm/devcloud-kvm.py b/tools/devcloud-kvm/devcloud-kvm.py new file mode 100644 index 00000000000..dd551b58552 --- /dev/null +++ b/tools/devcloud-kvm/devcloud-kvm.py @@ -0,0 +1,157 @@ +#!/usr/bin/env python +# 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. +''' +############################################################ +# Experimental state of scripts +# * Need to be reviewed +# * Only a sandbox +############################################################ +''' +import random +import marvin +from ConfigParser import SafeConfigParser +from optparse import OptionParser +from marvin.configGenerator import * + + +def getGlobalSettings(config): + for k, v in dict(config.items('globals')).iteritems(): + cfg = configuration() + cfg.name = k + cfg.value = v + yield cfg + + +def describeDevcloudKvmResources(config): + zs = cloudstackConfiguration() + + z = zone() + z.dns1 = config.get('environment', 'dns') + z.internaldns1 = config.get('environment', 'dns') + z.name = 'Devcloud-%s'%(config.get('cloudstack', 'hypervisor')) + z.networktype = 'Advanced' + z.guestcidraddress = '10.1.1.0/24' + z.localstorageenabled = 'true' + + vpcprovider = provider() + vpcprovider.name = 'VpcVirtualRouter' + + pn = physical_network() + pn.name = "eth0" + pn.vlan = config.get('cloudstack', 'pnet.vlan') + pn.tags = ["devcloud-guest"] + pn.traffictypes = [traffictype("Guest", {"kvm" :"kvm-guest" }), traffictype("Management")] + pn.providers.append(vpcprovider) + + pn2 = physical_network() + pn2.name = "eth1" + pn2.vlan = config.get('cloudstack', 'pnet2.vlan') + pn2.tags = ["devcloud-public"] + pn2.traffictypes = [traffictype("Public", {"kvm" : "kvm-public"})] + pn2.providers.append(vpcprovider) + + z.physical_networks.append(pn) + z.physical_networks.append(pn2) + + p = pod() + p.name = 'POD0' + p.gateway = config.get('cloudstack', 'private.gateway') + p.startip = config.get('cloudstack', 'private.pod.startip') + p.endip = config.get('cloudstack', 'private.pod.endip') + p.netmask = config.get('cloudstack', 'private.netmask') + + v = iprange() + v.gateway = config.get('cloudstack', 'public.gateway') + v.startip = config.get('cloudstack', 'public.vlan.startip') + v.endip = config.get('cloudstack', 'public.vlan.endip') + v.netmask = config.get('cloudstack', 'public.netmask') + v.vlan = config.get('cloudstack', 'public.vlan') + z.ipranges.append(v) + + c = cluster() + c.clustername = 'C0' + c.hypervisor = config.get('cloudstack', 'hypervisor') + c.clustertype = 'CloudManaged' + + h = host() + h.username = 'root' + h.password = config.get('cloudstack', 'host.password') + h.url = 'http://%s'%(config.get('cloudstack', 'host')) + c.hosts.append(h) + + ps = primaryStorage() + ps.name = 'PS0' + ps.url = config.get('cloudstack', 'primary.pool') + c.primaryStorages.append(ps) + + p.clusters.append(c) + z.pods.append(p) + + secondary = secondaryStorage() + secondary.url = config.get('cloudstack', 'secondary.pool') + z.secondaryStorages.append(secondary) + + '''Add zone''' + zs.zones.append(z) + + '''Add mgt server''' + mgt = managementServer() + mgt.mgtSvrIp = config.get('environment', 'mshost') + mgt.user = config.get('environment', 'mshost.user') + mgt.passwd = config.get('environment', 'mshost.passwd') + zs.mgtSvr.append(mgt) + + '''Add a database''' + db = dbServer() + db.dbSvr = config.get('environment', 'mysql.host') + db.user = config.get('environment', 'mysql.cloud.user') + db.passwd = config.get('environment', 'mysql.cloud.passwd') + zs.dbSvr = db + + '''Add some configuration''' + [zs.globalConfig.append(cfg) for cfg in getGlobalSettings(config)] + + ''''add loggers''' + testClientLogger = logger() + testClientLogger.name = 'TestClient' + testClientLogger.file = 'testclient.log' + + testCaseLogger = logger() + testCaseLogger.name = 'TestCase' + testCaseLogger.file = 'testcase.log' + + zs.logger.append(testClientLogger) + zs.logger.append(testCaseLogger) + return zs + + +if __name__ == '__main__': + parser = OptionParser() + parser.add_option('-i', '--input', action='store', default='setup.properties', \ + dest='input', help='file containing environment setup information') + parser.add_option('-o', '--output', action='store', default='./devcloud-kvm-advanced.cfg', \ + dest='output', help='path where environment json will be generated') + + + (opts, args) = parser.parse_args() + + cfg_parser = SafeConfigParser() + cfg_parser.read(opts.input) + + cfg = describeDevcloudKvmResources(cfg_parser) + generate_setup_config(cfg, opts.output) diff --git a/tools/devcloud-kvm/kvm.properties b/tools/devcloud-kvm/kvm.properties new file mode 100644 index 00000000000..79afcd4a8ea --- /dev/null +++ b/tools/devcloud-kvm/kvm.properties @@ -0,0 +1,62 @@ +# 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. + + +[globals] +#global settings in cloudstack +expunge.delay=60 +expunge.interval=60 +storage.cleanup.interval=300 +account.cleanup.interval=600 +expunge.workers=3 +workers=10 +vm.allocation.algorithm=random +vm.op.wait.interval=5 +guest.domain.suffix=devcloud.kvm +instance.name=vm +check.pod.cidrs=true +secstorage.allowed.internal.sites=10.147.28.0/24 +[environment] +dns=8.8.8.8 +mshost=127.0.0.1 +mshost.user=root +mshost.passwd=password +mysql.host=127.0.0.1 +mysql.cloud.user=cloud +mysql.cloud.passwd=cloud +[cloudstack] +#guest VLAN +pnet.vlan=3900-3919 +pnet2.vlan=3920-3939 +#management network +private.gateway=192.168.56.1 +private.pod.startip=192.168.56.200 +private.pod.endip=192.168.56.249 +private.netmask=255.255.255.0 +#public network +public.gateway=10.0.3.2 +public.vlan=31 +public.vlan.startip=10.0.3.100 +public.vlan.endip=10.0.3.199 +public.netmask=255.255.255.0 +#hypervisor host information +hypervisor=KVM +host=192.168.56.10 +host.password=password +#storage pools +primary.pool=nfs://192.168.56.10/opt/storage/primary +secondary.pool=nfs://192.168.56.10/opt/storage/secondary From 127867cc999a7c772cdf5108b3e7432f91178cfe Mon Sep 17 00:00:00 2001 From: Noa Resare Date: Sat, 12 Jan 2013 19:07:32 +0000 Subject: [PATCH 377/421] Improved handling of unknown OS, Distribution Introduce UnknownSystemExcpetion to indicate that the system is is unknonwn. Catch said exception in cloud-setup-management, print an error and exit. CLOUDSTACK-966: Improve error reporting when running on unknown OS / version Signed-off-by: Prasanna Santhanam --- client/bindir/cloud-setup-management.in | 10 ++++++++-- python/lib/cloudutils/utilities.py | 6 +++++- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/client/bindir/cloud-setup-management.in b/client/bindir/cloud-setup-management.in index 469c9614b41..ca1327ae725 100755 --- a/client/bindir/cloud-setup-management.in +++ b/client/bindir/cloud-setup-management.in @@ -16,8 +16,9 @@ # specific language governing permissions and limitations # under the License. +import sys from cloudutils.syscfg import sysConfigFactory -from cloudutils.utilities import initLoging +from cloudutils.utilities import initLoging, UnknownSystemException from cloudutils.cloudException import CloudRuntimeException, CloudInternalException from cloudutils.globalEnv import globalEnv from cloudutils.serviceConfigServer import cloudManagementConfig @@ -35,7 +36,12 @@ if __name__ == '__main__': glbEnv.mode = "Server" print "Starting to configure CloudStack Management Server:" - syscfg = sysConfigFactory.getSysConfigFactory(glbEnv) + try: + syscfg = sysConfigFactory.getSysConfigFactory(glbEnv) + except UnknownSystemException: + print >>sys.stderr, ("Error: CloudStack failed to detect your " + "operating system. Exiting.") + sys.exit(1) try: syscfg.registerService(cloudManagementConfig) syscfg.config() diff --git a/python/lib/cloudutils/utilities.py b/python/lib/cloudutils/utilities.py index adf81fcbd4c..3f5f2a9dc8b 100755 --- a/python/lib/cloudutils/utilities.py +++ b/python/lib/cloudutils/utilities.py @@ -96,6 +96,10 @@ def writeProgressBar(msg, result): output = "[%-6s]\n"%"Failed" sys.stdout.write(output) sys.stdout.flush() + +class UnknownSystemException(Exception): + "This Excption is raised if the current operating enviornment is unknown" + pass class Distribution: def __init__(self): @@ -120,7 +124,7 @@ class Distribution: self.arch = bash("uname -m").getStdout() else: - self.distro = "Unknown" + raise UnknownSystemException def getVersion(self): return self.distro From c06218d32f3e4b20ec86303639af847cb911ec39 Mon Sep 17 00:00:00 2001 From: Pranav Saxena Date: Mon, 14 Jan 2013 16:49:42 +0530 Subject: [PATCH 378/421] CLOUDSTACK-971:Error Dialog is empty --- ui/scripts/sharedFunctions.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/ui/scripts/sharedFunctions.js b/ui/scripts/sharedFunctions.js index eb78ad15da0..51c4fdb5902 100644 --- a/ui/scripts/sharedFunctions.js +++ b/ui/scripts/sharedFunctions.js @@ -208,12 +208,13 @@ function parseXMLHttpResponse(XMLHttpResponse) { var json = JSON.parse(XMLHttpResponse.responseText); if (json != null) { var property; - for(property in json) {} + for(property in json) { var errorObj = json[property]; if(errorObj.errorcode == 401 && errorObj.errortext == "unable to verify user credentials and/or request signature") return _l('label.session.expired'); else return _s(errorObj.errortext); + } } else { return ""; From 0293d3d665ad41ea2e49a01f9c0fd6cf4547a9bf Mon Sep 17 00:00:00 2001 From: Marcus Sorensen Date: Mon, 14 Jan 2013 10:51:39 -0700 Subject: [PATCH 379/421] Summary: Allow passing 'storagetype' to DiskOffering.create in marvin base.py Signed-off-by: Marcus Sorensen 1358185899 -0700 --- tools/marvin/marvin/integration/lib/base.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/tools/marvin/marvin/integration/lib/base.py b/tools/marvin/marvin/integration/lib/base.py index 0daea5dd579..726a628d070 100644 --- a/tools/marvin/marvin/integration/lib/base.py +++ b/tools/marvin/marvin/integration/lib/base.py @@ -1109,6 +1109,9 @@ class DiskOffering: if domainid: cmd.domainid = domainid + if services["storagetype"]: + cmd.storagetype = services["storagetype"] + return DiskOffering(apiclient.createDiskOffering(cmd).__dict__) def delete(self, apiclient): From 9139949d966c45153899b056aa3b19da55e6931f Mon Sep 17 00:00:00 2001 From: Marcus Sorensen Date: Mon, 14 Jan 2013 12:57:12 -0700 Subject: [PATCH 380/421] Summary: Adding devcloud-advanced.cfg marvin config for advanced network testing Signed-off-by: Marcus Sorensen 1358193432 -0700 --- tools/devcloud/devcloud-advanced.cfg | 105 +++++++++++++++++++++++++++ 1 file changed, 105 insertions(+) create mode 100644 tools/devcloud/devcloud-advanced.cfg diff --git a/tools/devcloud/devcloud-advanced.cfg b/tools/devcloud/devcloud-advanced.cfg new file mode 100644 index 00000000000..54cdd44f95b --- /dev/null +++ b/tools/devcloud/devcloud-advanced.cfg @@ -0,0 +1,105 @@ +{ + "zones": [ + { + "localstorageenabled": "true", + "name": "testzone", + "guestcidraddress": "10.1.1.0/24", + "dns1": "8.8.8.8", + "physical_networks": [ + { + "broadcastdomainrange": "Zone", + "vlan": "3900-4000", + "name": "eth0", + "providers": [ + { + "broadcastdomainrange": "ZONE", + "name": "VirtualRouter" + }, + { + "broadcastdomainrange": "ZONE", + "name": "VpcVirtualRouter" + } + ] + }, + { + "broadcastdomainrange": "Zone", + "name": "eth1", + "traffictypes": [ + { + "xen": "Pool-wide network associated with eth1", + "typ": "Public" + } + ], + "providers": [ + { + "broadcastdomainrange": "ZONE", + "name": "VirtualRouter" + } + ] + } + ], + "ipranges": [ + { + "startip": "10.0.3.100", + "endip": "10.0.3.199", + "netmask": "255.255.255.0", + "vlan": "untagged", + "gateway": "10.0.3.2" + } + ], + "networktype": "Advanced", + "pods": [ + { + "endip": "192.168.56.249", + "name": "testpod", + "startip": "192.168.56.200", + "netmask": "255.255.255.0", + "clusters": [ + { + "clustername": "testcluster", + "hypervisor": "XenServer", + "hosts": [ + { + "username": "root", + "url": "http://192.168.56.10/", + "password": "password" + } + ], + "clustertype": "CloudManaged" + } + ], + "gateway": "192.168.56.1" + } + ], + "internaldns1": "8.8.4.4", + "secondaryStorages": [ + { + "url": "nfs://192.168.56.10:/opt/storage/secondary" + } + ] + } + ], + "dbSvr": { + "dbSvr": "127.0.0.1", + "passwd": "cloud", + "db": "cloud", + "port": 3306, + "user": "cloud" + }, + "logger": [ + { + "name": "TestClient", + "file": "/var/log/testclient.log" + }, + { + "name": "TestCase", + "file": "/var/log/testcase.log" + } + ], + "mgtSvr": [ + { + "mgtSvrIp": "192.168.56.10", + "port": 8096 + } + ] +} From 896e505da6de08e723b339e748064de10d250c8c Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Mon, 14 Jan 2013 15:06:46 -0800 Subject: [PATCH 381/421] APIChecker: Make interface generic, pass user and not just role Signed-off-by: Rohit Yadav --- api/src/org/apache/cloudstack/acl/APIChecker.java | 4 ++-- .../acl/StaticRoleBasedAPIAccessChecker.java | 12 +++++++++++- server/src/com/cloud/api/ApiServer.java | 4 +--- 3 files changed, 14 insertions(+), 6 deletions(-) diff --git a/api/src/org/apache/cloudstack/acl/APIChecker.java b/api/src/org/apache/cloudstack/acl/APIChecker.java index b14dfe101ba..9e5c6c61108 100644 --- a/api/src/org/apache/cloudstack/acl/APIChecker.java +++ b/api/src/org/apache/cloudstack/acl/APIChecker.java @@ -17,11 +17,11 @@ package org.apache.cloudstack.acl; import com.cloud.exception.PermissionDeniedException; -import org.apache.cloudstack.acl.RoleType; +import com.cloud.user.User; import com.cloud.utils.component.Adapter; // APIChecker checks the ownership and access control to API requests public interface APIChecker extends Adapter { // Interface for checking access for a role using apiname - boolean checkAccess(RoleType roleType, String apiCommandName) throws PermissionDeniedException; + boolean checkAccess(User user, String apiCommandName) throws PermissionDeniedException; } diff --git a/plugins/acl/static-role-based/src/org/apache/cloudstack/acl/StaticRoleBasedAPIAccessChecker.java b/plugins/acl/static-role-based/src/org/apache/cloudstack/acl/StaticRoleBasedAPIAccessChecker.java index affd69ed89c..55db2880664 100644 --- a/plugins/acl/static-role-based/src/org/apache/cloudstack/acl/StaticRoleBasedAPIAccessChecker.java +++ b/plugins/acl/static-role-based/src/org/apache/cloudstack/acl/StaticRoleBasedAPIAccessChecker.java @@ -18,6 +18,9 @@ package org.apache.cloudstack.acl; import com.cloud.exception.PermissionDeniedException; import com.cloud.server.ManagementServer; +import com.cloud.user.Account; +import com.cloud.user.AccountService; +import com.cloud.user.User; import com.cloud.utils.component.AdapterBase; import com.cloud.utils.component.ComponentLocator; import com.cloud.utils.component.PluggableService; @@ -42,6 +45,8 @@ public class StaticRoleBasedAPIAccessChecker extends AdapterBase implements APIC private static Map> s_roleBasedApisMap = new HashMap>(); + private static AccountService s_accountService; + protected StaticRoleBasedAPIAccessChecker() { super(); for (RoleType roleType: RoleType.values()) @@ -49,8 +54,10 @@ public class StaticRoleBasedAPIAccessChecker extends AdapterBase implements APIC } @Override - public boolean checkAccess(RoleType roleType, String commandName) + public boolean checkAccess(User user, String commandName) throws PermissionDeniedException { + Account account = s_accountService.getAccount(user.getAccountId()); + RoleType roleType = s_accountService.getRoleType(account); boolean isAllowed = s_roleBasedApisMap.get(roleType).contains(commandName); if (!isAllowed) { throw new PermissionDeniedException("The API does not exist or is blacklisted. Role type=" + roleType.toString() + " is not allowed to request the api: " + commandName); @@ -64,6 +71,9 @@ public class StaticRoleBasedAPIAccessChecker extends AdapterBase implements APIC // Read command properties files to build the static map per role. ComponentLocator locator = ComponentLocator.getLocator(ManagementServer.Name); + + s_accountService = locator.getManager(AccountService.class); + List services = locator.getAllPluggableServices(); services.add((PluggableService) ComponentLocator.getComponent(ManagementServer.Name)); diff --git a/server/src/com/cloud/api/ApiServer.java b/server/src/com/cloud/api/ApiServer.java index 03462e488ef..c8511b2991d 100755 --- a/server/src/com/cloud/api/ApiServer.java +++ b/server/src/com/cloud/api/ApiServer.java @@ -785,11 +785,9 @@ public class ApiServer implements HttpRequestHandler { throw new PermissionDeniedException("User is null for role based API access check for command" + commandName); } - Account account = _accountMgr.getAccount(user.getAccountId()); - RoleType roleType = _accountMgr.getRoleType(account); for (APIChecker apiChecker : _apiAccessCheckers) { // Fail the checking if any checker fails to verify - if (!apiChecker.checkAccess(roleType, commandName)) + if (!apiChecker.checkAccess(user, commandName)) return false; } return true; From e97090a9202452a0ecdff2da55181517cb5b2364 Mon Sep 17 00:00:00 2001 From: Marcus Sorensen Date: Mon, 14 Jan 2013 17:15:22 -0700 Subject: [PATCH 382/421] Summary: Updated devcloud-advanced.cfg and devcloud-kvm-advanced.cfg Signed-off-by: Marcus Sorensen 1358208922 -0700 --- tools/devcloud-kvm/devcloud-kvm-advanced.cfg | 144 +++++-------------- tools/devcloud/devcloud-advanced.cfg | 10 ++ 2 files changed, 48 insertions(+), 106 deletions(-) diff --git a/tools/devcloud-kvm/devcloud-kvm-advanced.cfg b/tools/devcloud-kvm/devcloud-kvm-advanced.cfg index b96805ede2a..1110863d848 100644 --- a/tools/devcloud-kvm/devcloud-kvm-advanced.cfg +++ b/tools/devcloud-kvm/devcloud-kvm-advanced.cfg @@ -2,12 +2,24 @@ "zones": [ { "localstorageenabled": "true", - "name": "Devcloud-KVM", + "name": "testzone", "guestcidraddress": "10.1.1.0/24", "dns1": "8.8.8.8", "physical_networks": [ { - "name": "eth0", + "broadcastdomainrange": "Zone", + "vlan": "3900-4000", + "name": "eth0", + "traffictypes": [ + { + "kvm": "cloudbr0", + "typ": "Management" + }, + { + "kvm": "cloudbr0", + "typ": "Guest" + } + ], "providers": [ { "broadcastdomainrange": "ZONE", @@ -17,90 +29,62 @@ "broadcastdomainrange": "ZONE", "name": "VpcVirtualRouter" } - ], - "broadcastdomainrange": "Zone", - "vlan": "3900-3919", - "traffictypes": [ - { - "kvm": "kvm-guest", - "typ": "Guest" - }, - { - "typ": "Management" - } - ], - "tags": [ - "devcloud-guest" ] }, { + "broadcastdomainrange": "Zone", "name": "eth1", + "traffictypes": [ + { + "kvm": "cloudbr1", + "typ": "Public" + } + ], "providers": [ { "broadcastdomainrange": "ZONE", "name": "VirtualRouter" - }, - { - "broadcastdomainrange": "ZONE", - "name": "VpcVirtualRouter" } - ], - "broadcastdomainrange": "Zone", - "vlan": "3920-3939", - "traffictypes": [ - { - "kvm": "kvm-public", - "typ": "Public" - } - ], - "tags": [ - "devcloud-public" ] } ], "ipranges": [ { - "startip": "10.0.3.100", - "endip": "10.0.3.199", + "startip": "192.168.100.100", + "endip": "192.168.100.199", "netmask": "255.255.255.0", - "vlan": "31", - "gateway": "10.0.3.2" + "vlan": "untagged", + "gateway": "192.168.100.1" } ], "networktype": "Advanced", "pods": [ { - "endip": "192.168.56.249", - "name": "POD0", - "startip": "192.168.56.200", + "endip": "172.17.10.199", + "name": "testpod", + "startip": "172.17.10.100", "netmask": "255.255.255.0", "clusters": [ { - "clustername": "C0", + "clustername": "testcluster", "hypervisor": "KVM", "hosts": [ { "username": "root", - "url": "http://192.168.56.10", + "url": "http://172.17.10.10/", "password": "password" } ], - "clustertype": "CloudManaged", - "primaryStorages": [ - { - "url": "nfs://192.168.56.10/opt/storage/primary", - "name": "PS0" - } - ] + "clustertype": "CloudManaged" } ], - "gateway": "192.168.56.1" + "gateway": "172.17.10.1" } ], - "internaldns1": "8.8.8.8", + "internaldns1": "8.8.4.4", "secondaryStorages": [ { - "url": "nfs://192.168.56.10/opt/storage/secondary" + "url": "nfs://172.17.10.10:/nfs/secondary" } ] } @@ -115,69 +99,17 @@ "logger": [ { "name": "TestClient", - "file": "testclient.log" + "file": "/var/log/testclient.log" }, { "name": "TestCase", - "file": "testcase.log" - } - ], - "globalConfig": [ - { - "name": "storage.cleanup.interval", - "value": "300" - }, - { - "name": "instance.name", - "value": "vm" - }, - { - "name": "workers", - "value": "10" - }, - { - "name": "vm.op.wait.interval", - "value": "5" - }, - { - "name": "account.cleanup.interval", - "value": "600" - }, - { - "name": "guest.domain.suffix", - "value": "devcloud.kvm" - }, - { - "name": "expunge.delay", - "value": "60" - }, - { - "name": "vm.allocation.algorithm", - "value": "random" - }, - { - "name": "expunge.interval", - "value": "60" - }, - { - "name": "expunge.workers", - "value": "3" - }, - { - "name": "secstorage.allowed.internal.sites", - "value": "10.147.28.0/24" - }, - { - "name": "check.pod.cidrs", - "value": "true" + "file": "/var/log/testcase.log" } ], "mgtSvr": [ { - "mgtSvrIp": "127.0.0.1", - "passwd": "password", - "user": "root", + "mgtSvrIp": "172.17.10.10", "port": 8096 } ] -} \ No newline at end of file +} diff --git a/tools/devcloud/devcloud-advanced.cfg b/tools/devcloud/devcloud-advanced.cfg index 54cdd44f95b..ad4cdda1912 100644 --- a/tools/devcloud/devcloud-advanced.cfg +++ b/tools/devcloud/devcloud-advanced.cfg @@ -10,6 +10,16 @@ "broadcastdomainrange": "Zone", "vlan": "3900-4000", "name": "eth0", + "traffictypes": [ + { + "xen": "Pool-wide network associated with eth0", + "typ": "Management" + }, + { + "xen": "Pool-wide network associated with eth0", + "typ": "Guest" + } + ], "providers": [ { "broadcastdomainrange": "ZONE", From 3aba867e1630cf7071fb97b5f925dced1b5439d6 Mon Sep 17 00:00:00 2001 From: anthony Date: Mon, 14 Jan 2013 18:25:32 -0800 Subject: [PATCH 383/421] only basic network is pod based. it has nothing to do with shared SG enabled netwokr --- .../network/router/VirtualNetworkApplianceManagerImpl.java | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java b/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java index 1f74c7174e8..492e1dc20b1 100755 --- a/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java +++ b/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java @@ -1381,9 +1381,7 @@ public class VirtualNetworkApplianceManagerImpl implements VirtualNetworkApplian assert guestNetwork.getTrafficType() == TrafficType.Guest; // 1) Get deployment plan and find out the list of routers - boolean isPodBased = (dest.getDataCenter().getNetworkType() == NetworkType.Basic || - _networkMgr.areServicesSupportedInNetwork(guestNetwork.getId(), Service.SecurityGroup)) - && guestNetwork.getTrafficType() == TrafficType.Guest; + boolean isPodBased = (dest.getDataCenter().getNetworkType() == NetworkType.Basic); // dest has pod=null, for Basic Zone findOrDeployVRs for all Pods List destinations = new ArrayList(); From 0a1e4b8cf95a3e0041e3f306c4dfad09b3b6216a Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Mon, 14 Jan 2013 16:46:12 -0800 Subject: [PATCH 384/421] tomcatconf: Move apiname:mask rules in commands.properties.in, delete others Signed-off-by: Rohit Yadav --- .../cisconexusvsm_commands.properties.in | 25 ------ client/tomcatconf/commands-ext.properties.in | 28 ------- client/tomcatconf/commands.properties.in | 84 +++++++++++++++++++ .../tomcatconf/f5bigip_commands.properties.in | 32 ------- .../junipersrx_commands.properties.in | 30 ------- .../tomcatconf/netapp_commands.properties.in | 33 -------- ...tscalerloadbalancer_commands.properties.in | 26 ------ .../nicira-nvp_commands.properties.in | 29 ------- .../simulator_commands.properties.in | 19 ----- .../virtualrouter_commands.properties.in | 24 ------ 10 files changed, 84 insertions(+), 246 deletions(-) delete mode 100644 client/tomcatconf/cisconexusvsm_commands.properties.in delete mode 100644 client/tomcatconf/commands-ext.properties.in delete mode 100644 client/tomcatconf/f5bigip_commands.properties.in delete mode 100644 client/tomcatconf/junipersrx_commands.properties.in delete mode 100644 client/tomcatconf/netapp_commands.properties.in delete mode 100644 client/tomcatconf/netscalerloadbalancer_commands.properties.in delete mode 100644 client/tomcatconf/nicira-nvp_commands.properties.in delete mode 100644 client/tomcatconf/simulator_commands.properties.in delete mode 100644 client/tomcatconf/virtualrouter_commands.properties.in diff --git a/client/tomcatconf/cisconexusvsm_commands.properties.in b/client/tomcatconf/cisconexusvsm_commands.properties.in deleted file mode 100644 index 0427ba2d212..00000000000 --- a/client/tomcatconf/cisconexusvsm_commands.properties.in +++ /dev/null @@ -1,25 +0,0 @@ -# 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. - -### bitmap of permissions at the end of each classname, 1 = ADMIN, 2 = RESOURCE_DOMAIN_ADMIN, 4 = DOMAIN_ADMIN, 8 = USER -### Please standardize naming conventions to camel-case (even for acronyms). - -#### Cisco Nexus 1000v Virtual Supervisor Module (VSM) commands -deleteCiscoNexusVSM=1 -enableCiscoNexusVSM=1 -disableCiscoNexusVSM=1 -listCiscoNexusVSMs=1 diff --git a/client/tomcatconf/commands-ext.properties.in b/client/tomcatconf/commands-ext.properties.in deleted file mode 100644 index cd1d0eac066..00000000000 --- a/client/tomcatconf/commands-ext.properties.in +++ /dev/null @@ -1,28 +0,0 @@ -# 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. - -#### usage commands -generateUsageRecords=com.cloud.api.commands.GenerateUsageRecordsCmd;1 -listUsageRecords=com.cloud.api.commands.GetUsageRecordsCmd;1 -listUsageTypes=com.cloud.api.commands.ListUsageTypesCmd;1 - -#### traffic monitor commands -addTrafficMonitor=com.cloud.api.commands.AddTrafficMonitorCmd;1 -deleteTrafficMonitor=com.cloud.api.commands.DeleteTrafficMonitorCmd;1 -listTrafficMonitors=com.cloud.api.commands.ListTrafficMonitorsCmd;1 - - diff --git a/client/tomcatconf/commands.properties.in b/client/tomcatconf/commands.properties.in index 3872f2a8783..99cb874a55f 100644 --- a/client/tomcatconf/commands.properties.in +++ b/client/tomcatconf/commands.properties.in @@ -424,3 +424,87 @@ resetVpnConnection=15 listVpnCustomerGateways=15 listVpnGateways=15 listVpnConnections=15 + +#### router commands +createVirtualRouterElement=7 +configureVirtualRouterElement=7 +listVirtualRouterElements=7 + +#### usage commands +generateUsageRecords=1 +listUsageRecords=1 +listUsageTypes=1 + +#### traffic monitor commands +addTrafficMonitor=1 +deleteTrafficMonitor=1 +listTrafficMonitors=1 + +#### Cisco Nexus 1000v Virtual Supervisor Module (VSM) commands +deleteCiscoNexusVSM=1 +enableCiscoNexusVSM=1 +disableCiscoNexusVSM=1 +listCiscoNexusVSMs=1 + +#### f5 big ip load balancer commands + +#Deprecated commands +addExternalLoadBalancer=1 +deleteExternalLoadBalancer=1 +listExternalLoadBalancers=1 + +addF5LoadBalancer=1 +configureF5LoadBalancer=1 +deleteF5LoadBalancer=1 +listF5LoadBalancers=1 +listF5LoadBalancerNetworks=1 + +#### juniper srx firewall commands +addExternalFirewall=1 +deleteExternalFirewall=1 +listExternalFirewalls=1 + +addSrxFirewall=1 +deleteSrxFirewall=1 +configureSrxFirewall=1 +listSrxFirewalls=1 +listSrxFirewallNetworks=1 + +####Netapp integration commands +createVolumeOnFiler=15 +destroyVolumeOnFiler=15 +listVolumesOnFiler=15 +createLunOnFiler=15 +destroyLunOnFiler=15 +listLunsOnFiler=15 +associateLun=15 +dissociateLun=15 +createPool=15 +deletePool=15 +modifyPool=15 +listPools=15 + +#### netscaler load balancer commands +addNetscalerLoadBalancer=1 +deleteNetscalerLoadBalancer=1 +configureNetscalerLoadBalancer=1 +listNetscalerLoadBalancers=1 +listNetscalerLoadBalancerNetworks=1 + +#### nicira nvp commands + +addNiciraNvpDevice=1 +deleteNiciraNvpDevice=1 +listNiciraNvpDevices=1 +listNiciraNvpDeviceNetworks=1 + +# Not implemented (yet) +#configureNiciraNvpDevice=1 + +#### host simulator commands + +configureSimulator=1 + +#### api discovery commands + +listApis=15 diff --git a/client/tomcatconf/f5bigip_commands.properties.in b/client/tomcatconf/f5bigip_commands.properties.in deleted file mode 100644 index 8c3cc2a145a..00000000000 --- a/client/tomcatconf/f5bigip_commands.properties.in +++ /dev/null @@ -1,32 +0,0 @@ -# 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. - -### bitmap of permissions at the end of each classname, 1 = ADMIN, 2 = RESOURCE_DOMAIN_ADMIN, 4 = DOMAIN_ADMIN, 8 = USER -### Please standardize naming conventions to camel-case (even for acronyms). - -#### f5 big ip load balancer commands - -#Deprecated commands -addExternalLoadBalancer=1 -deleteExternalLoadBalancer=1 -listExternalLoadBalancers=1 - -addF5LoadBalancer=1 -configureF5LoadBalancer=1 -deleteF5LoadBalancer=1 -listF5LoadBalancers=1 -listF5LoadBalancerNetworks=1 diff --git a/client/tomcatconf/junipersrx_commands.properties.in b/client/tomcatconf/junipersrx_commands.properties.in deleted file mode 100644 index 2cadc62c57e..00000000000 --- a/client/tomcatconf/junipersrx_commands.properties.in +++ /dev/null @@ -1,30 +0,0 @@ -# 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. - -### bitmap of permissions at the end of each classname, 1 = ADMIN, 2 = RESOURCE_DOMAIN_ADMIN, 4 = DOMAIN_ADMIN, 8 = USER -### Please standardize naming conventions to camel-case (even for acronyms). - -#### juniper srx firewall commands -addExternalFirewall=1 -deleteExternalFirewall=1 -listExternalFirewalls=1 - -addSrxFirewall=1 -deleteSrxFirewall=1 -configureSrxFirewall=1 -listSrxFirewalls=1 -listSrxFirewallNetworks=1 diff --git a/client/tomcatconf/netapp_commands.properties.in b/client/tomcatconf/netapp_commands.properties.in deleted file mode 100644 index ea17ac0560b..00000000000 --- a/client/tomcatconf/netapp_commands.properties.in +++ /dev/null @@ -1,33 +0,0 @@ -# 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. - -### bitmap of permissions at the end of each classname, 1 = ADMIN, 2 = RESOURCE_DOMAIN_ADMIN, 4 = DOMAIN_ADMIN, 8 = USER -### Please standardize naming conventions to camel-case (even for acronyms). - -####Netapp integration commands -createVolumeOnFiler=15 -destroyVolumeOnFiler=15 -listVolumesOnFiler=15 -createLunOnFiler=15 -destroyLunOnFiler=15 -listLunsOnFiler=15 -associateLun=15 -dissociateLun=15 -createPool=15 -deletePool=15 -modifyPool=15 -listPools=15 diff --git a/client/tomcatconf/netscalerloadbalancer_commands.properties.in b/client/tomcatconf/netscalerloadbalancer_commands.properties.in deleted file mode 100644 index 9eeb8da9987..00000000000 --- a/client/tomcatconf/netscalerloadbalancer_commands.properties.in +++ /dev/null @@ -1,26 +0,0 @@ -# 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. - -### bitmap of permissions at the end of each classname, 1 = ADMIN, 2 = RESOURCE_DOMAIN_ADMIN, 4 = DOMAIN_ADMIN, 8 = USER -### Please standardize naming conventions to camel-case (even for acronyms). - -#### netscaler load balancer commands -addNetscalerLoadBalancer=1 -deleteNetscalerLoadBalancer=1 -configureNetscalerLoadBalancer=1 -listNetscalerLoadBalancers=1 -listNetscalerLoadBalancerNetworks=1 diff --git a/client/tomcatconf/nicira-nvp_commands.properties.in b/client/tomcatconf/nicira-nvp_commands.properties.in deleted file mode 100644 index 1b2b5253394..00000000000 --- a/client/tomcatconf/nicira-nvp_commands.properties.in +++ /dev/null @@ -1,29 +0,0 @@ -# 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. - -### bitmap of permissions at the end of each classname, 1 = ADMIN, 2 = RESOURCE_DOMAIN_ADMIN, 4 = DOMAIN_ADMIN, 8 = USER -### Please standardize naming conventions to camel-case (even for acronyms). - -#### nicira nvp commands - -addNiciraNvpDevice=1 -deleteNiciraNvpDevice=1 -listNiciraNvpDevices=1 -listNiciraNvpDeviceNetworks=1 - -# Not implemented (yet) -#configureNiciraNvpDevice=1 diff --git a/client/tomcatconf/simulator_commands.properties.in b/client/tomcatconf/simulator_commands.properties.in deleted file mode 100644 index b7213a28c05..00000000000 --- a/client/tomcatconf/simulator_commands.properties.in +++ /dev/null @@ -1,19 +0,0 @@ -# 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. - - -configureSimulator=1 diff --git a/client/tomcatconf/virtualrouter_commands.properties.in b/client/tomcatconf/virtualrouter_commands.properties.in deleted file mode 100644 index 169496b8f4d..00000000000 --- a/client/tomcatconf/virtualrouter_commands.properties.in +++ /dev/null @@ -1,24 +0,0 @@ -# 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. - -### bitmap of permissions at the end of each classname, 1 = ADMIN, 2 = RESOURCE_DOMAIN_ADMIN, 4 = DOMAIN_ADMIN, 8 = USER -### Please standardize naming conventions to camel-case (even for acronyms). - -#### router commands -createVirtualRouterElement=7 -configureVirtualRouterElement=7 -listVirtualRouterElements=7 From b9c020fa7c80481fa9444dc6affb1beb069a8768 Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Mon, 14 Jan 2013 18:54:26 -0800 Subject: [PATCH 385/421] APIChecker: Fix interface definition to take in User Signed-off-by: Rohit Yadav --- api/src/org/apache/cloudstack/acl/APIChecker.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/api/src/org/apache/cloudstack/acl/APIChecker.java b/api/src/org/apache/cloudstack/acl/APIChecker.java index 9e5c6c61108..0d0dfd1be4e 100644 --- a/api/src/org/apache/cloudstack/acl/APIChecker.java +++ b/api/src/org/apache/cloudstack/acl/APIChecker.java @@ -23,5 +23,8 @@ import com.cloud.utils.component.Adapter; // APIChecker checks the ownership and access control to API requests public interface APIChecker extends Adapter { // Interface for checking access for a role using apiname + // If true, apiChecker has checked the operation + // If false, apiChecker is unable to handle the operation or not implemented + // On exception, checkAccess failed don't allow boolean checkAccess(User user, String apiCommandName) throws PermissionDeniedException; } From 0a31945ee589e2db8886fd8a01bdfaf91e6cfd26 Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Mon, 14 Jan 2013 18:54:58 -0800 Subject: [PATCH 386/421] PluggableService: Fix interface to return list of cmd classes Signed-off-by: Rohit Yadav --- utils/src/com/cloud/utils/component/PluggableService.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/utils/src/com/cloud/utils/component/PluggableService.java b/utils/src/com/cloud/utils/component/PluggableService.java index f6f72a904d0..5e0e4dfff16 100644 --- a/utils/src/com/cloud/utils/component/PluggableService.java +++ b/utils/src/com/cloud/utils/component/PluggableService.java @@ -16,11 +16,12 @@ // under the License. package com.cloud.utils.component; +import java.util.List; import java.util.Map; // This interface defines methods for pluggable code within the Cloud Stack. public interface PluggableService { // The config command properties filenames that lists allowed API commands // and role masks supported by this pluggable service - Map getProperties(); + List> getCommands(); } From 8f27c711e58e447409fb1b496dfeab9cf4cd7d63 Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Mon, 14 Jan 2013 18:56:02 -0800 Subject: [PATCH 387/421] ApiServer: Process through chain of api access checker, on failure it will throw exception Signed-off-by: Rohit Yadav --- server/src/com/cloud/api/ApiServer.java | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/server/src/com/cloud/api/ApiServer.java b/server/src/com/cloud/api/ApiServer.java index c8511b2991d..4d60215b276 100755 --- a/server/src/com/cloud/api/ApiServer.java +++ b/server/src/com/cloud/api/ApiServer.java @@ -786,9 +786,7 @@ public class ApiServer implements HttpRequestHandler { } for (APIChecker apiChecker : _apiAccessCheckers) { - // Fail the checking if any checker fails to verify - if (!apiChecker.checkAccess(user, commandName)) - return false; + apiChecker.checkAccess(user, commandName); } return true; } From c318561d6c69a2a7ac3aa7dd6df99f12637ddb27 Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Mon, 14 Jan 2013 18:57:22 -0800 Subject: [PATCH 388/421] ApiDiscovery: Get rid of redundant code, use apichecker to generate role based maps Signed-off-by: Rohit Yadav --- .../command/user/discovery/ListApisCmd.java | 10 +- .../discovery/ApiDiscoveryService.java | 4 +- .../discovery/ApiDiscoveryServiceImpl.java | 116 ++++++++---------- 3 files changed, 61 insertions(+), 69 deletions(-) diff --git a/plugins/api/discovery/src/org/apache/cloudstack/api/command/user/discovery/ListApisCmd.java b/plugins/api/discovery/src/org/apache/cloudstack/api/command/user/discovery/ListApisCmd.java index ed3e1751027..132416bac05 100644 --- a/plugins/api/discovery/src/org/apache/cloudstack/api/command/user/discovery/ListApisCmd.java +++ b/plugins/api/discovery/src/org/apache/cloudstack/api/command/user/discovery/ListApisCmd.java @@ -16,7 +16,10 @@ // under the License. package org.apache.cloudstack.api.command.user.discovery; +import com.cloud.user.AccountService; +import com.cloud.user.User; import com.cloud.user.UserContext; +import com.cloud.utils.component.Inject; import org.apache.cloudstack.acl.RoleType; import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.ApiConstants; @@ -39,14 +42,17 @@ public class ListApisCmd extends BaseCmd { @PlugService ApiDiscoveryService _apiDiscoveryService; + @Inject + private AccountService _accountService; + @Parameter(name=ApiConstants.NAME, type=CommandType.STRING, description="API name") private String name; @Override public void execute() throws ServerApiException { if (_apiDiscoveryService != null) { - RoleType roleType = _accountService.getRoleType(UserContext.current().getCaller()); - ListResponse response = (ListResponse) _apiDiscoveryService.listApis(roleType, name); + User user = _accountService.getActiveUser(UserContext.current().getCallerUserId()); + ListResponse response = (ListResponse) _apiDiscoveryService.listApis(user, name); if (response == null) { throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Api Discovery plugin was unable to find an api by that name or process any apis"); } diff --git a/plugins/api/discovery/src/org/apache/cloudstack/discovery/ApiDiscoveryService.java b/plugins/api/discovery/src/org/apache/cloudstack/discovery/ApiDiscoveryService.java index 611493bfc08..6458c5619e8 100644 --- a/plugins/api/discovery/src/org/apache/cloudstack/discovery/ApiDiscoveryService.java +++ b/plugins/api/discovery/src/org/apache/cloudstack/discovery/ApiDiscoveryService.java @@ -16,11 +16,11 @@ // under the License. package org.apache.cloudstack.discovery; +import com.cloud.user.User; import com.cloud.utils.component.PluggableService; -import org.apache.cloudstack.acl.RoleType; import org.apache.cloudstack.api.BaseResponse; import org.apache.cloudstack.api.response.ListResponse; public interface ApiDiscoveryService extends PluggableService { - ListResponse listApis(RoleType roleType, String apiName); + ListResponse listApis(User user, String apiName); } diff --git a/plugins/api/discovery/src/org/apache/cloudstack/discovery/ApiDiscoveryServiceImpl.java b/plugins/api/discovery/src/org/apache/cloudstack/discovery/ApiDiscoveryServiceImpl.java index 5f84486ae49..7e2ed17ecdc 100644 --- a/plugins/api/discovery/src/org/apache/cloudstack/discovery/ApiDiscoveryServiceImpl.java +++ b/plugins/api/discovery/src/org/apache/cloudstack/discovery/ApiDiscoveryServiceImpl.java @@ -18,11 +18,15 @@ package org.apache.cloudstack.discovery; import com.cloud.serializer.Param; import com.cloud.server.ManagementServer; +import com.cloud.user.User; import com.cloud.utils.ReflectUtil; import com.cloud.utils.StringUtils; +import com.cloud.utils.component.Adapters; import com.cloud.utils.component.ComponentLocator; +import com.cloud.utils.component.Inject; import com.cloud.utils.component.PluggableService; import com.google.gson.annotations.SerializedName; +import org.apache.cloudstack.acl.APIChecker; import org.apache.cloudstack.acl.RoleType; import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.BaseCmd; @@ -30,6 +34,7 @@ import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseAsyncCreateCmd; import org.apache.cloudstack.api.BaseResponse; import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.command.user.discovery.ListApisCmd; import org.apache.cloudstack.api.response.ApiDiscoveryResponse; import org.apache.cloudstack.api.response.ApiParameterResponse; import org.apache.cloudstack.api.response.ApiResponseResponse; @@ -49,57 +54,31 @@ import java.util.Set; public class ApiDiscoveryServiceImpl implements ApiDiscoveryService { private static final Logger s_logger = Logger.getLogger(ApiDiscoveryServiceImpl.class); - private static Map> _roleTypeDiscoveryResponseListMap; + @Inject(adapter = APIChecker.class) + protected Adapters _apiAccessCheckers; - private static Map _apiNameDiscoveryResponseMap = - new HashMap(); - - private static Map> _apiNameRoleTypeListMap = null; + private static Map _apiNameDiscoveryResponseMap = null; protected ApiDiscoveryServiceImpl() { super(); - if (_roleTypeDiscoveryResponseListMap == null) { + if (_apiNameDiscoveryResponseMap == null) { long startTime = System.nanoTime(); - _roleTypeDiscoveryResponseListMap = new HashMap>(); - for (RoleType roleType: RoleType.values()) - _roleTypeDiscoveryResponseListMap.put(roleType, new ArrayList()); + _apiNameDiscoveryResponseMap = new HashMap(); cacheResponseMap(); long endTime = System.nanoTime(); s_logger.info("Api Discovery Service: Annotation, docstrings, api relation graph processed in " + (endTime - startTime) / 1000000.0 + " ms"); } } - private Map> getApiNameRoleTypeListMap() { - Map> apiNameRoleTypeMap = new HashMap>(); - ComponentLocator locator = ComponentLocator.getLocator(ManagementServer.Name); - List services = locator.getAllPluggableServices(); - services.add((PluggableService) ComponentLocator.getComponent(ManagementServer.Name)); - for (PluggableService service : services) { - for (Map.Entry entry: service.getProperties().entrySet()) { - String apiName = entry.getKey(); - String roleMask = entry.getValue(); - try { - short cmdPermissions = Short.parseShort(roleMask); - if (!apiNameRoleTypeMap.containsKey(apiName)) - apiNameRoleTypeMap.put(apiName, new ArrayList()); - for (RoleType roleType: RoleType.values()) { - if ((cmdPermissions & roleType.getValue()) != 0) - apiNameRoleTypeMap.get(apiName).add(roleType); - } - } catch (NumberFormatException nfe) { - } - } - } - return apiNameRoleTypeMap; - } - private void cacheResponseMap() { Set> cmdClasses = ReflectUtil.getClassesWithAnnotation(APICommand.class, new String[]{"org.apache.cloudstack.api", "com.cloud.api"}); + //TODO: Fix and use PluggableService to get the classes + Map> responseApiNameListMap = new HashMap>(); - for(Class cmdClass: cmdClasses) { + for (Class cmdClass : cmdClasses) { APICommand apiCmdAnnotation = cmdClass.getAnnotation(APICommand.class); if (apiCmdAnnotation == null) apiCmdAnnotation = cmdClass.getSuperclass().getAnnotation(APICommand.class); @@ -123,9 +102,9 @@ public class ApiDiscoveryServiceImpl implements ApiDiscoveryService { response.setRelated(responseName); Field[] responseFields = apiCmdAnnotation.responseObject().getDeclaredFields(); - for(Field responseField: responseFields) { + for (Field responseField : responseFields) { SerializedName serializedName = responseField.getAnnotation(SerializedName.class); - if(serializedName != null) { + if (serializedName != null) { ApiResponseResponse responseResponse = new ApiResponseResponse(); responseResponse.setName(serializedName.value()); Param param = responseField.getAnnotation(Param.class); @@ -137,14 +116,14 @@ public class ApiDiscoveryServiceImpl implements ApiDiscoveryService { } Field[] fields = ReflectUtil.getAllFieldsForClass(cmdClass, - new Class[] {BaseCmd.class, BaseAsyncCmd.class, BaseAsyncCreateCmd.class}); + new Class[]{BaseCmd.class, BaseAsyncCmd.class, BaseAsyncCreateCmd.class}); boolean isAsync = ReflectUtil.isCmdClassAsync(cmdClass, - new Class[] {BaseAsyncCmd.class, BaseAsyncCreateCmd.class}); + new Class[]{BaseAsyncCmd.class, BaseAsyncCreateCmd.class}); response.setAsync(isAsync); - for(Field field: fields) { + for (Field field : fields) { Parameter parameterAnnotation = field.getAnnotation(Parameter.class); if (parameterAnnotation != null && parameterAnnotation.expose() @@ -166,10 +145,10 @@ public class ApiDiscoveryServiceImpl implements ApiDiscoveryService { _apiNameDiscoveryResponseMap.put(apiName, response); } - for (String apiName: _apiNameDiscoveryResponseMap.keySet()) { + for (String apiName : _apiNameDiscoveryResponseMap.keySet()) { ApiDiscoveryResponse response = _apiNameDiscoveryResponseMap.get(apiName); Set processedParams = new HashSet(); - for (ApiParameterResponse param: response.getParams()) { + for (ApiParameterResponse param : response.getParams()) { if (responseApiNameListMap.containsKey(param.getRelated())) { List relatedApis = responseApiNameListMap.get(param.getRelated()); param.setRelated(StringUtils.join(relatedApis, ",")); @@ -192,41 +171,48 @@ public class ApiDiscoveryServiceImpl implements ApiDiscoveryService { } @Override - public ListResponse listApis(RoleType roleType, String name) { - // Creates roles based response list cache the first time listApis is called - // Due to how adapters work, this cannot be done when mgmt loads - if (_apiNameRoleTypeListMap == null) { - long startTime = System.nanoTime(); - _apiNameRoleTypeListMap = getApiNameRoleTypeListMap(); - for (Map.Entry> entry: _apiNameRoleTypeListMap.entrySet()) { - String apiName = entry.getKey(); - for (RoleType roleTypeInList: entry.getValue()) { - _roleTypeDiscoveryResponseListMap.get(roleTypeInList).add( - _apiNameDiscoveryResponseMap.get(apiName)); - } - } - long endTime = System.nanoTime(); - s_logger.info("Api Discovery Service: List apis cached in " + (endTime - startTime) / 1000000.0 + " ms"); - } + public ListResponse listApis(User user, String name) { ListResponse response = new ListResponse(); + List responseList = new ArrayList(); + + if (user == null) + return null; + if (name != null) { if (!_apiNameDiscoveryResponseMap.containsKey(name)) return null; - List singleResponse = new ArrayList(); - singleResponse.add(_apiNameDiscoveryResponseMap.get(name)); - response.setResponses(singleResponse); + for (APIChecker apiChecker : _apiAccessCheckers) { + try { + apiChecker.checkAccess(user, name); + } catch (Exception ex) { + return null; + } + } + responseList.add(_apiNameDiscoveryResponseMap.get(name)); } else { - response.setResponses(_roleTypeDiscoveryResponseListMap.get(roleType)); + for (String apiName : _apiNameDiscoveryResponseMap.keySet()) { + boolean isAllowed = true; + for (APIChecker apiChecker : _apiAccessCheckers) { + try { + apiChecker.checkAccess(user, name); + } catch (Exception ex) { + isAllowed = false; + } + } + if (isAllowed) + responseList.add(_apiNameDiscoveryResponseMap.get(apiName)); + } } + response.setResponses(responseList); return response; } @Override - public Map getProperties() { - Map apiDiscoveryPropertyMap = new HashMap(); - apiDiscoveryPropertyMap.put("listApis", "15"); - return apiDiscoveryPropertyMap; + public List> getCommands() { + List> cmdList = new ArrayList>(); + cmdList.add(ListApisCmd.class); + return cmdList; } } From 3ec985f46f7f251e5fb47cc3f4aa89e57f349454 Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Mon, 14 Jan 2013 18:58:23 -0800 Subject: [PATCH 389/421] StaticRoleBased: commands.properties is actually cfg for this plugin Signed-off-by: Rohit Yadav --- .../acl/StaticRoleBasedAPIAccessChecker.java | 29 +++++++++---------- 1 file changed, 13 insertions(+), 16 deletions(-) diff --git a/plugins/acl/static-role-based/src/org/apache/cloudstack/acl/StaticRoleBasedAPIAccessChecker.java b/plugins/acl/static-role-based/src/org/apache/cloudstack/acl/StaticRoleBasedAPIAccessChecker.java index 55db2880664..16357846cba 100644 --- a/plugins/acl/static-role-based/src/org/apache/cloudstack/acl/StaticRoleBasedAPIAccessChecker.java +++ b/plugins/acl/static-role-based/src/org/apache/cloudstack/acl/StaticRoleBasedAPIAccessChecker.java @@ -21,15 +21,14 @@ import com.cloud.server.ManagementServer; import com.cloud.user.Account; import com.cloud.user.AccountService; import com.cloud.user.User; +import com.cloud.utils.PropertiesUtil; import com.cloud.utils.component.AdapterBase; import com.cloud.utils.component.ComponentLocator; -import com.cloud.utils.component.PluggableService; import javax.ejb.Local; import javax.naming.ConfigurationException; import java.util.HashMap; import java.util.HashSet; -import java.util.List; import java.util.Map; import java.util.Set; @@ -37,7 +36,7 @@ import org.apache.log4j.Logger; // This is the default API access checker that grab's the user's account // based on the account type, access is granted -@Local(value=APIChecker.class) +@Local(value = APIChecker.class) public class StaticRoleBasedAPIAccessChecker extends AdapterBase implements APIChecker { protected static final Logger s_logger = Logger.getLogger(StaticRoleBasedAPIAccessChecker.class); @@ -49,7 +48,7 @@ public class StaticRoleBasedAPIAccessChecker extends AdapterBase implements APIC protected StaticRoleBasedAPIAccessChecker() { super(); - for (RoleType roleType: RoleType.values()) + for (RoleType roleType : RoleType.values()) s_roleBasedApisMap.put(roleType, new HashSet()); } @@ -57,6 +56,10 @@ public class StaticRoleBasedAPIAccessChecker extends AdapterBase implements APIC public boolean checkAccess(User user, String commandName) throws PermissionDeniedException { Account account = s_accountService.getAccount(user.getAccountId()); + if (account == null) { + throw new PermissionDeniedException("The account id=" + user.getAccountId() + "for user id=" + user.getId() + "is null"); + } + RoleType roleType = s_accountService.getRoleType(account); boolean isAllowed = s_roleBasedApisMap.get(roleType).contains(commandName); if (!isAllowed) { @@ -71,32 +74,26 @@ public class StaticRoleBasedAPIAccessChecker extends AdapterBase implements APIC // Read command properties files to build the static map per role. ComponentLocator locator = ComponentLocator.getLocator(ManagementServer.Name); - s_accountService = locator.getManager(AccountService.class); - List services = locator.getAllPluggableServices(); - services.add((PluggableService) ComponentLocator.getComponent(ManagementServer.Name)); + processMapping(PropertiesUtil.processConfigFile(new String[] + {"commands.properties"})); - for (PluggableService service : services) { - processConfigFiles(service.getProperties(), service.getClass().toString()); - s_logger.info("Processed role based acl for: " + service.toString()); - } return true; } - private void processConfigFiles(Map configMap, String service) { - for (Map.Entry entry: configMap.entrySet()) { + private void processMapping(Map configMap) { + for (Map.Entry entry : configMap.entrySet()) { String apiName = entry.getKey(); String roleMask = entry.getValue(); try { short cmdPermissions = Short.parseShort(roleMask); - for (RoleType roleType: RoleType.values()) { + for (RoleType roleType : RoleType.values()) { if ((cmdPermissions & roleType.getValue()) != 0) s_roleBasedApisMap.get(roleType).add(apiName); } } catch (NumberFormatException nfe) { - s_logger.info("Malformed getProperties() value for service: " + service - + " for entry: " + entry.toString()); + s_logger.info("Malformed key=value pair for entry: " + entry.toString()); } } } From bca2c928e87ce81f54dccb918564714189b7d46e Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Mon, 14 Jan 2013 18:59:01 -0800 Subject: [PATCH 390/421] PluggableService: Fix interface definition Signed-off-by: Rohit Yadav --- .../server/ManagementServerSimulatorImpl.java | 11 ++++++----- .../network/element/CiscoNexusVSMElement.java | 11 ++++++++--- .../element/F5ExternalLoadBalancerElement.java | 15 ++++++++++++--- .../JuniperSRXExternalFirewallElement.java | 14 +++++++++++--- .../network/element/MidokuraMidonetElement.java | 9 ++------- .../cloud/network/element/NetscalerElement.java | 12 +++++++++--- .../cloud/network/element/NiciraNvpElement.java | 10 +++++++--- .../network/element/VirtualRouterElement.java | 10 +++++++--- .../com/cloud/server/ManagementServerExtImpl.java | 6 +++--- .../com/cloud/server/ManagementServerImpl.java | 6 +++--- 10 files changed, 68 insertions(+), 36 deletions(-) diff --git a/plugins/hypervisors/simulator/src/com/cloud/server/ManagementServerSimulatorImpl.java b/plugins/hypervisors/simulator/src/com/cloud/server/ManagementServerSimulatorImpl.java index 44ab26a020a..c639a556cb7 100644 --- a/plugins/hypervisors/simulator/src/com/cloud/server/ManagementServerSimulatorImpl.java +++ b/plugins/hypervisors/simulator/src/com/cloud/server/ManagementServerSimulatorImpl.java @@ -17,16 +17,17 @@ package com.cloud.server; +import com.cloud.api.commands.ConfigureSimulator; import com.cloud.utils.PropertiesUtil; +import java.util.List; import java.util.Map; public class ManagementServerSimulatorImpl extends ManagementServerExtImpl { @Override - public Map getProperties() { - Map apiNameRoleMaskMapping = super.getProperties(); - apiNameRoleMaskMapping.putAll(PropertiesUtil.processConfigFile(new String[] - {"commands-simulator.properties"})); - return apiNameRoleMaskMapping; + public List> getCommands() { + List> cmdList = super.getCommands(); + cmdList.add(ConfigureSimulator.class); + return cmdList; } } diff --git a/plugins/hypervisors/vmware/src/com/cloud/network/element/CiscoNexusVSMElement.java b/plugins/hypervisors/vmware/src/com/cloud/network/element/CiscoNexusVSMElement.java index 2cf87877859..68388a6fb18 100644 --- a/plugins/hypervisors/vmware/src/com/cloud/network/element/CiscoNexusVSMElement.java +++ b/plugins/hypervisors/vmware/src/com/cloud/network/element/CiscoNexusVSMElement.java @@ -17,6 +17,7 @@ package com.cloud.network.element; +import java.lang.Class; import java.lang.String; import java.util.List; import java.util.Map; @@ -239,8 +240,12 @@ public class CiscoNexusVSMElement extends CiscoNexusVSMDeviceManagerImpl impleme } @Override - public Map getProperties() { - return PropertiesUtil.processConfigFile(new String[] - { "cisconexusvsm_commands.properties" }); + public List> getCommands() { + List> cmdList = new ArrayList>(); + cmdList.add(ListCiscoNexusVSMsCmd.class); + cmdList.add(EnableCiscoNexusVSMCmd.class); + cmdList.add(DisableCiscoNexusVSMCmd.class); + cmdList.add(DeleteCiscoNexusVSMCmd.class); + return cmdList; } } diff --git a/plugins/network-elements/f5/src/com/cloud/network/element/F5ExternalLoadBalancerElement.java b/plugins/network-elements/f5/src/com/cloud/network/element/F5ExternalLoadBalancerElement.java index 438498ff38c..b9739ec21df 100644 --- a/plugins/network-elements/f5/src/com/cloud/network/element/F5ExternalLoadBalancerElement.java +++ b/plugins/network-elements/f5/src/com/cloud/network/element/F5ExternalLoadBalancerElement.java @@ -16,6 +16,7 @@ // under the License. package com.cloud.network.element; +import java.lang.Class; import java.lang.String; import java.util.ArrayList; import java.util.HashMap; @@ -262,9 +263,17 @@ public class F5ExternalLoadBalancerElement extends ExternalLoadBalancerDeviceMan } @Override - public Map getProperties() { - return PropertiesUtil.processConfigFile(new String[] - { "f5bigip_commands.properties" }); + public List> getCommands() { + List> cmdList = new ArrayList>(); + cmdList.add(AddExternalLoadBalancerCmd.class); + cmdList.add(AddF5LoadBalancerCmd.class); + cmdList.add(ConfigureF5LoadBalancerCmd.class); + cmdList.add(DeleteExternalLoadBalancerCmd.class); + cmdList.add(DeleteF5LoadBalancerCmd.class); + cmdList.add(ListExternalLoadBalancersCmd.class); + cmdList.add(ListF5LoadBalancerNetworksCmd.class); + cmdList.add(ListF5LoadBalancersCmd.class); + return cmdList; } @Override diff --git a/plugins/network-elements/juniper-srx/src/com/cloud/network/element/JuniperSRXExternalFirewallElement.java b/plugins/network-elements/juniper-srx/src/com/cloud/network/element/JuniperSRXExternalFirewallElement.java index 55722ae23ab..6e9d32daa99 100644 --- a/plugins/network-elements/juniper-srx/src/com/cloud/network/element/JuniperSRXExternalFirewallElement.java +++ b/plugins/network-elements/juniper-srx/src/com/cloud/network/element/JuniperSRXExternalFirewallElement.java @@ -404,9 +404,17 @@ public class JuniperSRXExternalFirewallElement extends ExternalFirewallDeviceMan } @Override - public Map getProperties() { - return PropertiesUtil.processConfigFile(new String[] - { "junipersrx_commands.properties"}); + public List> getCommands() { + List> cmdList = new ArrayList>(); + cmdList.add(AddExternalFirewallCmd.class); + cmdList.add(AddSrxFirewallCmd.class); + cmdList.add(ConfigureSrxFirewallCmd.class); + cmdList.add(DeleteExternalFirewallCmd.class); + cmdList.add(DeleteSrxFirewallCmd.class); + cmdList.add(ListExternalFirewallsCmd.class); + cmdList.add(ListSrxFirewallNetworksCmd.class); + cmdList.add(ListSrxFirewallsCmd.class); + return cmdList; } @Override diff --git a/plugins/network-elements/midokura-midonet/src/com/cloud/network/element/MidokuraMidonetElement.java b/plugins/network-elements/midokura-midonet/src/com/cloud/network/element/MidokuraMidonetElement.java index 56734669020..a45c5c0a47c 100644 --- a/plugins/network-elements/midokura-midonet/src/com/cloud/network/element/MidokuraMidonetElement.java +++ b/plugins/network-elements/midokura-midonet/src/com/cloud/network/element/MidokuraMidonetElement.java @@ -38,15 +38,10 @@ import com.cloud.vm.VirtualMachineProfile; import org.apache.log4j.Logger; import javax.ejb.Local; +import java.lang.Class; import java.util.Map; import java.util.Set; -/** - * User: tomoe - * Date: 8/8/12 - * Time: 1:38 PM - */ - @Local(value = NetworkElement.class) public class MidokuraMidonetElement extends AdapterBase implements ConnectivityProvider, PluggableService { private static final Logger s_logger = Logger.getLogger(MidokuraMidonetElement.class); @@ -126,7 +121,7 @@ public class MidokuraMidonetElement extends AdapterBase implements ConnectivityP } @Override - public String getPropertiesFile() { + public List> getCommands() { // TODO: implement this. return null; } diff --git a/plugins/network-elements/netscaler/src/com/cloud/network/element/NetscalerElement.java b/plugins/network-elements/netscaler/src/com/cloud/network/element/NetscalerElement.java index ac1619ef1f8..a1782107e19 100644 --- a/plugins/network-elements/netscaler/src/com/cloud/network/element/NetscalerElement.java +++ b/plugins/network-elements/netscaler/src/com/cloud/network/element/NetscalerElement.java @@ -16,6 +16,7 @@ // under the License. package com.cloud.network.element; +import java.lang.Class; import java.net.URI; import java.util.ArrayList; import java.util.HashMap; @@ -465,9 +466,14 @@ StaticNatServiceProvider { } @Override - public Map getProperties() { - return PropertiesUtil.processConfigFile(new String[] - { "netscalerloadbalancer_commands.properties" }); + public List> getCommands() { + List> cmdList = new ArrayList>(); + cmdList.add(AddNetscalerLoadBalancerCmd.class); + cmdList.add(ConfigureNetscalerLoadBalancerCmd.class); + cmdList.add(DeleteNetscalerLoadBalancerCmd.class); + cmdList.add(ListNetscalerLoadBalancerNetworksCmd.class); + cmdList.add(ListNetscalerLoadBalancersCmd.class); + return cmdList; } @Override diff --git a/plugins/network-elements/nicira-nvp/src/com/cloud/network/element/NiciraNvpElement.java b/plugins/network-elements/nicira-nvp/src/com/cloud/network/element/NiciraNvpElement.java index 22fab500fdb..6bcaeeeb235 100644 --- a/plugins/network-elements/nicira-nvp/src/com/cloud/network/element/NiciraNvpElement.java +++ b/plugins/network-elements/nicira-nvp/src/com/cloud/network/element/NiciraNvpElement.java @@ -541,9 +541,13 @@ public class NiciraNvpElement extends AdapterBase implements } @Override - public Map getProperties() { - return PropertiesUtil.processConfigFile(new String[] - { "nicira-nvp_commands.properties" }); + public List> getCommands() { + List> cmdList = new ArrayList>(); + cmdList.add(AddNiciraNvpDeviceCmd.class); + cmdList.add(DeleteNiciraNvpDeviceCmd.class); + cmdList.add(ListNiciraNvpDeviceNetworksCmd.class); + cmdList.add(ListNiciraNvpDevicesCmd.class); + return cmdList; } @Override diff --git a/server/src/com/cloud/network/element/VirtualRouterElement.java b/server/src/com/cloud/network/element/VirtualRouterElement.java index 823b74f269b..02a239e72d9 100755 --- a/server/src/com/cloud/network/element/VirtualRouterElement.java +++ b/server/src/com/cloud/network/element/VirtualRouterElement.java @@ -26,6 +26,7 @@ import javax.ejb.Local; import com.cloud.utils.PropertiesUtil; import org.apache.cloudstack.api.command.admin.router.ConfigureVirtualRouterElementCmd; +import org.apache.cloudstack.api.command.admin.router.CreateVirtualRouterElementCmd; import org.apache.cloudstack.api.command.admin.router.ListVirtualRouterElementsCmd; import org.apache.log4j.Logger; @@ -681,9 +682,12 @@ public class VirtualRouterElement extends AdapterBase implements VirtualRouterEl } @Override - public Map getProperties() { - return PropertiesUtil.processConfigFile(new String[] - { "virtualrouter_commands.properties" }); + public List> getCommands() { + List> cmdList = new ArrayList>(); + cmdList.add(CreateVirtualRouterElementCmd.class); + cmdList.add(ConfigureVirtualRouterElementCmd.class); + cmdList.add(ListVirtualRouterElementsCmd.class); + return cmdList; } @Override diff --git a/server/src/com/cloud/server/ManagementServerExtImpl.java b/server/src/com/cloud/server/ManagementServerExtImpl.java index 8a59d2f9c1c..c8c188b38ad 100644 --- a/server/src/com/cloud/server/ManagementServerExtImpl.java +++ b/server/src/com/cloud/server/ManagementServerExtImpl.java @@ -207,9 +207,9 @@ public class ManagementServerExtImpl extends ManagementServerImpl implements Man } @Override - public Map getProperties() { - return PropertiesUtil.processConfigFile(new String[] - { "commands.properties", "commands-ext.properties" }); + public List> getCommands() { + //TODO: Add api cmd classes + return null; } private Date computeAdjustedTime(Date initialDate, TimeZone targetTZ, boolean adjustToDayStart) { diff --git a/server/src/com/cloud/server/ManagementServerImpl.java b/server/src/com/cloud/server/ManagementServerImpl.java index 79ad759dd0b..bf105506b23 100755 --- a/server/src/com/cloud/server/ManagementServerImpl.java +++ b/server/src/com/cloud/server/ManagementServerImpl.java @@ -2298,9 +2298,9 @@ public class ManagementServerImpl implements ManagementServer { } @Override - public Map getProperties() { - return PropertiesUtil.processConfigFile(new String[] - { "commands.properties" }); + public List> getCommands() { + //TODO: Add cmd classes + return null; } protected class EventPurgeTask implements Runnable { From c5984278ca95b24e8f0ff9d8bfd8bbde14a42643 Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Mon, 14 Jan 2013 19:00:20 -0800 Subject: [PATCH 391/421] apidoc: Fix apidoc Signed-off-by: Rohit Yadav --- tools/apidoc/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/apidoc/pom.xml b/tools/apidoc/pom.xml index bc7411f7013..6b159ff54eb 100644 --- a/tools/apidoc/pom.xml +++ b/tools/apidoc/pom.xml @@ -57,7 +57,7 @@ ${client.config.jars} ./target -f - ${client.config.conf}/commands.properties,${client.config.conf}/commands-ext.properties,${client.config.conf}/virtualrouter_commands.properties,${client.config.conf}/nicira-nvp_commands.properties + ${client.config.conf}/commands.properties From d8b04507d8285ac5201bcae1409aeacb2de2fb95 Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Mon, 14 Jan 2013 19:36:27 -0800 Subject: [PATCH 392/421] maven: exclude rat license checking for devcloud advanced cfg Signed-off-by: Rohit Yadav --- pom.xml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/pom.xml b/pom.xml index aad124b0baf..f752d266a9d 100644 --- a/pom.xml +++ b/pom.xml @@ -245,7 +245,9 @@ scripts/vm/systemvm/id_rsa.cloud tools/devcloud/basebuild/puppet-devcloudinitial/files/network.conf tools/devcloud/devcloud.cfg + tools/devcloud/devcloud-advanced.cfg tools/devcloud-kvm/devcloud-kvm.cfg + tools/devcloud-kvm/devcloud-kvm-advanced.cfg ui/lib/flot/jquery.colorhelpers.js ui/lib/flot/jquery.flot.crosshair.js ui/lib/flot/jquery.flot.fillbetween.js From 7374056493ab5beccd514d115185f73feeead223 Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Mon, 14 Jan 2013 20:55:13 -0800 Subject: [PATCH 393/421] Revert "apidoc: Remove api discovery from toc" This reverts commit 66514c00efad5c93a2b0996f1e79222cbff9bd48. --- tools/apidoc/gen_toc.py | 1 + 1 file changed, 1 insertion(+) diff --git a/tools/apidoc/gen_toc.py b/tools/apidoc/gen_toc.py index 0b281a29c1d..7739aea633f 100644 --- a/tools/apidoc/gen_toc.py +++ b/tools/apidoc/gen_toc.py @@ -129,6 +129,7 @@ known_categories = { 'AutoScale': 'AutoScale', 'Counter': 'AutoScale', 'Condition': 'AutoScale', + 'Api': 'API Discovery', } From 0412cb8d9225b9c9fcc2ed4cfb94e702a0ea9c70 Mon Sep 17 00:00:00 2001 From: Marcus Sorensen Date: Tue, 15 Jan 2013 02:16:25 +0000 Subject: [PATCH 394/421] Summary: Edit devcloud cfg files for advanced networking, add comments --- tools/devcloud/devcloud-advanced.cfg | 5 +- .../devcloud-advanced_internal-mgt.cfg | 124 ++++++++++++++++++ 2 files changed, 128 insertions(+), 1 deletion(-) create mode 100644 tools/devcloud/devcloud-advanced_internal-mgt.cfg diff --git a/tools/devcloud/devcloud-advanced.cfg b/tools/devcloud/devcloud-advanced.cfg index ad4cdda1912..cfbc815dc69 100644 --- a/tools/devcloud/devcloud-advanced.cfg +++ b/tools/devcloud/devcloud-advanced.cfg @@ -1,3 +1,6 @@ +# This configuration is meant for running advanced networking, with management server on the laptop. +# It requires that the user run a DNS resolver within devcloud via 'apt-get install dnsmasq' + { "zones": [ { @@ -81,7 +84,7 @@ "gateway": "192.168.56.1" } ], - "internaldns1": "8.8.4.4", + "internaldns1": "192.168.56.10", "secondaryStorages": [ { "url": "nfs://192.168.56.10:/opt/storage/secondary" diff --git a/tools/devcloud/devcloud-advanced_internal-mgt.cfg b/tools/devcloud/devcloud-advanced_internal-mgt.cfg new file mode 100644 index 00000000000..e360b6b9e37 --- /dev/null +++ b/tools/devcloud/devcloud-advanced_internal-mgt.cfg @@ -0,0 +1,124 @@ +# This config is designed to run as an advanced network, with management server in devcloud +# It also requires an 'apt-get install dnsmasq' to run a resolver in devcloud for internal dns + +{ + "zones": [ + { + "localstorageenabled": "true", + "name": "testzone", + "guestcidraddress": "10.1.1.0/24", + "dns1": "8.8.8.8", + "physical_networks": [ + { + "broadcastdomainrange": "Zone", + "vlan": "3900-4000", + "name": "eth0", + "traffictypes": [ + { + "xen": "Pool-wide network associated with eth0", + "typ": "Management" + }, + { + "xen": "Pool-wide network associated with eth0", + "typ": "Guest" + } + ], + "providers": [ + { + "broadcastdomainrange": "ZONE", + "name": "VirtualRouter" + }, + { + "broadcastdomainrange": "ZONE", + "name": "VpcVirtualRouter" + } + ] + }, + { + "broadcastdomainrange": "Zone", + "name": "eth1", + "traffictypes": [ + { + "xen": "Pool-wide network associated with eth1", + "typ": "Public" + } + ], + "providers": [ + { + "broadcastdomainrange": "ZONE", + "name": "VirtualRouter" + } + ] + } + ], + "ipranges": [ + { + "startip": "10.0.3.100", + "endip": "10.0.3.199", + "netmask": "255.255.255.0", + "vlan": "untagged", + "gateway": "10.0.3.2" + } + ], + "networktype": "Advanced", + "pods": [ + { + "endip": "192.168.56.249", + "name": "testpod", + "startip": "192.168.56.200", + "netmask": "255.255.255.0", + "clusters": [ + { + "clustername": "testcluster", + "hypervisor": "XenServer", + "hosts": [ + { + "username": "root", + "url": "http://192.168.56.10/", + "password": "password" + } + ], + "clustertype": "CloudManaged" + } + ], + "gateway": "192.168.56.1" + } + ], + "internaldns1": "192.168.56.10", + "secondaryStorages": [ + { + "url": "nfs://192.168.56.10:/opt/storage/secondary" + } + ] + } + ], + "dbSvr": { + "dbSvr": "127.0.0.1", + "passwd": "cloud", + "db": "cloud", + "port": 3306, + "user": "cloud" + }, + "logger": [ + { + "name": "TestClient", + "file": "/var/log/testclient.log" + }, + { + "name": "TestCase", + "file": "/var/log/testcase.log" + } + ], + "mgtSvr": [ + { + "mgtSvrIp": "192.168.56.10", + "port": 8096 + } + ], + "globalConfig": [ + { + "name": "host", + "value": "192.168.56.10" + } + ] +} From 510450b11b611fb0112771ae56586fcbed70ecc6 Mon Sep 17 00:00:00 2001 From: Wido den Hollander Date: Tue, 15 Jan 2013 12:14:57 +0100 Subject: [PATCH 395/421] Remove duplicate systemUse clausule when fetching service offerings. A couple of lines back there is: if (isSystem != null) { sc.addAnd("systemUse", SearchCriteria.Op.EQ, isSystem); } So it was set redundantly, this can be removed. --- server/src/com/cloud/server/ManagementServerImpl.java | 1 - 1 file changed, 1 deletion(-) diff --git a/server/src/com/cloud/server/ManagementServerImpl.java b/server/src/com/cloud/server/ManagementServerImpl.java index bf105506b23..4efae630f36 100755 --- a/server/src/com/cloud/server/ManagementServerImpl.java +++ b/server/src/com/cloud/server/ManagementServerImpl.java @@ -760,7 +760,6 @@ public class ManagementServerImpl implements ManagementServer { sc.addAnd("vm_type", SearchCriteria.Op.EQ, vmTypeStr); } - sc.addAnd("systemUse", SearchCriteria.Op.EQ, isSystem); sc.addAnd("removed", SearchCriteria.Op.NULL); return _offeringsDao.search(sc, searchFilter); From 95222cdb6d07b16c89b9deb7d12eecbc89d8ce94 Mon Sep 17 00:00:00 2001 From: Wido den Hollander Date: Tue, 15 Jan 2013 13:25:48 +0100 Subject: [PATCH 396/421] Templates: Add Ubuntu 12.04 to the templates Although I still think the templates aren't well maintained, I just added 12.04 since this is an LTS and people probably want it in the list of templates. This system should be more generic I think though. --- .../hypervisor/kvm/resource/KVMGuestOsMapper.java | 2 ++ setup/db/templates.kvm.sql | 11 ++++++----- setup/db/templates.sql | 7 +++++++ 3 files changed, 15 insertions(+), 5 deletions(-) diff --git a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/KVMGuestOsMapper.java b/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/KVMGuestOsMapper.java index b4771cacb10..bd1573c9fa9 100644 --- a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/KVMGuestOsMapper.java +++ b/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/KVMGuestOsMapper.java @@ -91,6 +91,8 @@ public class KVMGuestOsMapper { s_mapper.put("Fedora 10", "Fedora 10"); s_mapper.put("Fedora 9", "Fedora 9"); s_mapper.put("Fedora 8", "Fedora 8"); + s_mapper.put("Ubuntu 12.04 (32-bit)", "Ubuntu 12.04"); + s_mapper.put("Ubuntu 12.04 (64-bit)", "Ubuntu 12.04"); s_mapper.put("Ubuntu 10.04 (32-bit)", "Ubuntu 10.04"); s_mapper.put("Ubuntu 10.04 (64-bit)", "Ubuntu 10.04"); s_mapper.put("Ubuntu 10.10 (32-bit)", "Ubuntu 10.10"); diff --git a/setup/db/templates.kvm.sql b/setup/db/templates.kvm.sql index bc275f5285d..8a5582540af 100644 --- a/setup/db/templates.kvm.sql +++ b/setup/db/templates.kvm.sql @@ -51,11 +51,12 @@ INSERT INTO `cloud`.`guest_os` (uuid, category_id, name, display_name) VALUES (U INSERT INTO `cloud`.`guest_os` (uuid, category_id, name, display_name) VALUES (UUID(), 5, 'Fedora 10', 'Fedora 10'); INSERT INTO `cloud`.`guest_os` (uuid, category_id, name, display_name) VALUES (UUID(), 5, 'Fedora 9', 'Fedora 9'); INSERT INTO `cloud`.`guest_os` (uuid, category_id, name, display_name) VALUES (UUID(), 5, 'Fedora 8', 'Fedora 8'); -INSERT INTO `cloud`.`guest_os` (uuid, category_id, name, display_name) VALUES (UUID(), 2, 'Ubuntu 10.04', 'Ubuntu 10.04'); -INSERT INTO `cloud`.`guest_os` (uuid, category_id, name, display_name) VALUES (UUID(), 2, 'Ubuntu 9.10', 'Ubuntu 9.10'); -INSERT INTO `cloud`.`guest_os` (uuid, category_id, name, display_name) VALUES (UUID(), 2, 'Ubuntu 9.04', 'Ubuntu 9.04'); -INSERT INTO `cloud`.`guest_os` (uuid, category_id, name, display_name) VALUES (UUID(), 2, 'Ubuntu 8.10', 'Ubuntu 8.10'); -INSERT INTO `cloud`.`guest_os` (uuid, category_id, name, display_name) VALUES (UUID(), 2, 'Ubuntu 8.04', 'Ubuntu 8.04'); +INSERT INTO `cloud`.`guest_os` (uuid, category_id, name, display_name) VALUES (UUID(), 10, 'Ubuntu 12.04', 'Ubuntu 12.04'); +INSERT INTO `cloud`.`guest_os` (uuid, category_id, name, display_name) VALUES (UUID(), 10, 'Ubuntu 10.04', 'Ubuntu 10.04'); +INSERT INTO `cloud`.`guest_os` (uuid, category_id, name, display_name) VALUES (UUID(), 10, 'Ubuntu 9.10', 'Ubuntu 9.10'); +INSERT INTO `cloud`.`guest_os` (uuid, category_id, name, display_name) VALUES (UUID(), 10, 'Ubuntu 9.04', 'Ubuntu 9.04'); +INSERT INTO `cloud`.`guest_os` (uuid, category_id, name, display_name) VALUES (UUID(), 10, 'Ubuntu 8.10', 'Ubuntu 8.10'); +INSERT INTO `cloud`.`guest_os` (uuid, category_id, name, display_name) VALUES (UUID(), 10, 'Ubuntu 8.04', 'Ubuntu 8.04'); INSERT INTO `cloud`.`guest_os` (uuid, category_id, name, display_name) VALUES (UUID(), 2, 'Debian Squeeze', 'Debian Squeeze'); INSERT INTO `cloud`.`guest_os` (uuid, category_id, name, display_name) VALUES (UUID(), 2, 'Debian Lenny', 'Debian Lenny'); INSERT INTO `cloud`.`guest_os` (uuid, category_id, name, display_name) VALUES (UUID(), 2, 'Debian Etch', 'Debian Etch'); diff --git a/setup/db/templates.sql b/setup/db/templates.sql index 3867d4fe9d2..9980b159630 100755 --- a/setup/db/templates.sql +++ b/setup/db/templates.sql @@ -211,6 +211,8 @@ INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, display_name) VALUES (159 INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, display_name) VALUES (160, UUID(), 6, 'Windows PV'); INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, display_name) VALUES (161, UUID(), 1, 'CentOS 5.7 (32-bit)'); INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, display_name) VALUES (162, UUID(), 1, 'CentOS 5.7 (64-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, display_name) VALUES (163, UUID(), 10, 'Ubuntu 12.04 (32-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, display_name) VALUES (164, UUID(), 10, 'Ubuntu 12.04 (64-bit)'); INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, display_name) VALUES (200, UUID(), 1, 'Other CentOS (32-bit)'); INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, display_name) VALUES (201, UUID(), 1, 'Other CentOS (64-bit)'); @@ -370,11 +372,13 @@ INSERT INTO `cloud`.`guest_os_hypervisor` (hypervisor_type, guest_os_name, guest INSERT INTO `cloud`.`guest_os_hypervisor` (hypervisor_type, guest_os_name, guest_os_id) VALUES ("VmWare", 'Debian GNU/Linux 4(32-bit)', 73); INSERT INTO `cloud`.`guest_os_hypervisor` (hypervisor_type, guest_os_name, guest_os_id) VALUES ("VmWare", 'Debian GNU/Linux 4(64-bit)', 74); +INSERT INTO `cloud`.`guest_os_hypervisor` (hypervisor_type, guest_os_name, guest_os_id) VALUES ("VmWare", 'Ubuntu 12.04 (32-bit)', 162); INSERT INTO `cloud`.`guest_os_hypervisor` (hypervisor_type, guest_os_name, guest_os_id) VALUES ("VmWare", 'Ubuntu 10.04 (32-bit)', 121); INSERT INTO `cloud`.`guest_os_hypervisor` (hypervisor_type, guest_os_name, guest_os_id) VALUES ("VmWare", 'Ubuntu 9.10 (32-bit)', 122); INSERT INTO `cloud`.`guest_os_hypervisor` (hypervisor_type, guest_os_name, guest_os_id) VALUES ("VmWare", 'Ubuntu 9.04 (32-bit)', 123); INSERT INTO `cloud`.`guest_os_hypervisor` (hypervisor_type, guest_os_name, guest_os_id) VALUES ("VmWare", 'Ubuntu 8.10 (32-bit)', 124); INSERT INTO `cloud`.`guest_os_hypervisor` (hypervisor_type, guest_os_name, guest_os_id) VALUES ("VmWare", 'Ubuntu 8.04 (32-bit)', 125); +INSERT INTO `cloud`.`guest_os_hypervisor` (hypervisor_type, guest_os_name, guest_os_id) VALUES ("VmWare", 'Ubuntu 12.04 (64-bit)', 163); INSERT INTO `cloud`.`guest_os_hypervisor` (hypervisor_type, guest_os_name, guest_os_id) VALUES ("VmWare", 'Ubuntu 10.04 (64-bit)', 126); INSERT INTO `cloud`.`guest_os_hypervisor` (hypervisor_type, guest_os_name, guest_os_id) VALUES ("VmWare", 'Ubuntu 9.10 (64-bit)', 127); INSERT INTO `cloud`.`guest_os_hypervisor` (hypervisor_type, guest_os_name, guest_os_id) VALUES ("VmWare", 'Ubuntu 9.04 (64-bit)', 128); @@ -385,6 +389,7 @@ INSERT INTO `cloud`.`guest_os_hypervisor` (hypervisor_type, guest_os_name, guest INSERT INTO `cloud`.`guest_os_hypervisor` (hypervisor_type, guest_os_name, guest_os_id) VALUES ("VmWare", 'Other Ubuntu Linux (32-bit)', 59); INSERT INTO `cloud`.`guest_os_hypervisor` (hypervisor_type, guest_os_name, guest_os_id) VALUES ("VmWare", 'Other Ubuntu (64-bit)', 100); + INSERT INTO `cloud`.`guest_os_hypervisor` (hypervisor_type, guest_os_name, guest_os_id) VALUES ("VmWare", 'Other 2.6x Linux (32-bit)', 75); INSERT INTO `cloud`.`guest_os_hypervisor` (hypervisor_type, guest_os_name, guest_os_id) VALUES ("VmWare", 'Other 2.6x Linux (64-bit)', 76); INSERT INTO `cloud`.`guest_os_hypervisor` (hypervisor_type, guest_os_name, guest_os_id) VALUES ("VmWare", 'Other Linux (32-bit)', 98); @@ -454,6 +459,8 @@ INSERT INTO `cloud`.`guest_os_hypervisor` (hypervisor_type, guest_os_name, guest INSERT INTO `cloud`.`guest_os_hypervisor` (hypervisor_type, guest_os_name, guest_os_id) VALUES ('KVM', 'Fedora 8', 120); INSERT INTO `cloud`.`guest_os_hypervisor` (hypervisor_type, guest_os_name, guest_os_id) VALUES ('KVM', 'Ubuntu 10.04', 121); INSERT INTO `cloud`.`guest_os_hypervisor` (hypervisor_type, guest_os_name, guest_os_id) VALUES ('KVM', 'Ubuntu 10.04', 126); +INSERT INTO `cloud`.`guest_os_hypervisor` (hypervisor_type, guest_os_name, guest_os_id) VALUES ('KVM', 'Ubuntu 10.04', 162); +INSERT INTO `cloud`.`guest_os_hypervisor` (hypervisor_type, guest_os_name, guest_os_id) VALUES ('KVM', 'Ubuntu 10.04', 163); INSERT INTO `cloud`.`guest_os_hypervisor` (hypervisor_type, guest_os_name, guest_os_id) VALUES ('KVM', 'Ubuntu 9.10', 122); INSERT INTO `cloud`.`guest_os_hypervisor` (hypervisor_type, guest_os_name, guest_os_id) VALUES ('KVM', 'Ubuntu 9.10', 127); INSERT INTO `cloud`.`guest_os_hypervisor` (hypervisor_type, guest_os_name, guest_os_id) VALUES ('KVM', 'Ubuntu 9.04', 123); From 04b14ab03f089f333f4dbf7058e951a23c12a28a Mon Sep 17 00:00:00 2001 From: Prasanna Santhanam Date: Tue, 15 Jan 2013 19:27:24 +0530 Subject: [PATCH 397/421] Marvin: physical network label not carried through in the API The label associated with the hypervisor nic to isolate traffic types by Guest/Mgmt/Public/Storage was not passed in the marvin.traffictype object and sent through to mgmt server resulting in traffic types not being applied. Signed-off-by: Prasanna Santhanam --- tools/marvin/marvin/deployDataCenter.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/tools/marvin/marvin/deployDataCenter.py b/tools/marvin/marvin/deployDataCenter.py index 7f8c0295ad8..ff3b6e6d0e0 100644 --- a/tools/marvin/marvin/deployDataCenter.py +++ b/tools/marvin/marvin/deployDataCenter.py @@ -258,10 +258,10 @@ class deployDataCenters(): traffic_type = addTrafficType.addTrafficTypeCmd() traffic_type.physicalnetworkid = physical_network_id traffic_type.traffictype = traffictype.typ - if traffictype.labeldict is not None: - traffic_type.kvmnetworklabel = traffictype.labeldict.kvm - traffic_type.xennetworklabel = traffictype.labeldict.xen - traffic_type.vmwarenetworklabel = traffictype.labeldict.vmware + traffic_type.kvmnetworklabel = traffictype.kvm if traffictype.kvm is not None else None + traffic_type.xennetworklabel = traffictype.xen if traffictype.xen is not None else None + traffictype.vmwarenetworklabel = traffictype.vmware if traffictype.vmware is not None else None + traffictype.simulatorlabel = traffictype.simulator if traffictype.simulator is not None else None return self.apiClient.addTrafficType(traffic_type) def enableZone(self, zoneid, allocation_state="Enabled"): From bfd02c5db39ee2dad30d0edefb205b56a4248594 Mon Sep 17 00:00:00 2001 From: Prasanna Santhanam Date: Tue, 15 Jan 2013 19:36:30 +0530 Subject: [PATCH 398/421] traffic_type not traffictype Signed-off-by: Prasanna Santhanam --- tools/marvin/marvin/deployDataCenter.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tools/marvin/marvin/deployDataCenter.py b/tools/marvin/marvin/deployDataCenter.py index ff3b6e6d0e0..e4f7eace9bd 100644 --- a/tools/marvin/marvin/deployDataCenter.py +++ b/tools/marvin/marvin/deployDataCenter.py @@ -260,8 +260,8 @@ class deployDataCenters(): traffic_type.traffictype = traffictype.typ traffic_type.kvmnetworklabel = traffictype.kvm if traffictype.kvm is not None else None traffic_type.xennetworklabel = traffictype.xen if traffictype.xen is not None else None - traffictype.vmwarenetworklabel = traffictype.vmware if traffictype.vmware is not None else None - traffictype.simulatorlabel = traffictype.simulator if traffictype.simulator is not None else None + traffic_type.vmwarenetworklabel = traffictype.vmware if traffictype.vmware is not None else None + traffic_type.simulatorlabel = traffictype.simulator if traffictype.simulator is not None else None return self.apiClient.addTrafficType(traffic_type) def enableZone(self, zoneid, allocation_state="Enabled"): From 8d0091d7e2e9b01df3af8deec14246f9eac1418e Mon Sep 17 00:00:00 2001 From: Pranav Saxena Date: Tue, 15 Jan 2013 21:12:10 +0530 Subject: [PATCH 399/421] CLOUDSTACK-978:TypeError: instance.displayname is undefined while adding VM's to the LB rule --- ui/scripts/network.js | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/ui/scripts/network.js b/ui/scripts/network.js index 4103c3e2b6e..f3308bb5ba7 100755 --- a/ui/scripts/network.js +++ b/ui/scripts/network.js @@ -1259,12 +1259,16 @@ data.listvirtualmachinesresponse.virtualmachine : [], function(instance) { var nonAutoScale=0; + if(instance.displayname == null) + nonAutoScale = 1; + else{ if( instance.displayname.match(/AutoScale-LB-/)==null) nonAutoScale =1; else { if(instance.displayname.match(/AutoScale-LB-/).length) nonAutoScale =0; } + } var isActiveState= $.inArray(instance.state, ['Destroyed','Expunging']) == -1; return nonAutoScale && isActiveState; } @@ -2623,12 +2627,16 @@ function(instance) { //Hiding the autoScale VMs var nonAutoScale =0; + if(instance.displayname == null) + nonAutoScale = 1 + else { if(instance.displayname.match(/AutoScale-LB-/) == null) nonAutoScale = 1; else { if( instance.displayname.match(/AutoScale-LB-/).length) nonAutoScale =0; - } + } + } var isActiveState = $.inArray(instance.state, ['Destroyed','Expunging']) == -1; var notExisting = !$.grep(itemData, function(item) { return item.id == instance.id; From 101f64410adc944ea2f2b2ad9734c990c4fe0336 Mon Sep 17 00:00:00 2001 From: anthony Date: Tue, 15 Jan 2013 09:17:12 -0800 Subject: [PATCH 400/421] Do not allow add multiple VLANs or subnets into shared network CS allows to add multiple VLANs and subnets to a shared network, but it doesn't really work, for example , vm on second VLAN or subnet cannot get IP through DHCP This patch will not allow to add mulitple VLANS or subnets into shared network CLOUDSTACK-982:Do not allow add multiple VLANs or subnets into shared network --- .../ConfigurationManagerImpl.java | 56 ++++++++++--------- 1 file changed, 31 insertions(+), 25 deletions(-) diff --git a/server/src/com/cloud/configuration/ConfigurationManagerImpl.java b/server/src/com/cloud/configuration/ConfigurationManagerImpl.java index 2e20c134b54..b21c5a38bb7 100755 --- a/server/src/com/cloud/configuration/ConfigurationManagerImpl.java +++ b/server/src/com/cloud/configuration/ConfigurationManagerImpl.java @@ -2071,7 +2071,12 @@ public class ConfigurationManagerImpl implements ConfigurationManager, Configura Long projectId = cmd.getProjectId(); Long domainId = cmd.getDomainId(); Account vlanOwner = null; - + + // if end ip is not specified, default it to startIp + if (endIP == null && startIP != null) { + endIP = startIP; + } + if (projectId != null) { if (accountName != null) { throw new InvalidParameterValueException("Account and projectId are mutually exclusive"); @@ -2176,6 +2181,7 @@ public class ConfigurationManagerImpl implements ConfigurationManager, Configura throw new InvalidParameterValueException("Nework id is required for Direct vlan creation "); } networkId = network.getId(); + zoneId = network.getDataCenterId(); } } else if (network.getGuestType() == null || network.getGuestType() == Network.GuestType.Isolated) { throw new InvalidParameterValueException("Can't create direct vlan for network id=" + networkId + " with type: " + network.getGuestType()); @@ -2192,34 +2198,34 @@ public class ConfigurationManagerImpl implements ConfigurationManager, Configura endIP = startIP; } - if (forVirtualNetwork || zone.getNetworkType() == DataCenter.NetworkType.Basic || zone.isSecurityGroupEnabled()) { - if (vlanGateway == null || vlanNetmask == null || zoneId == null) { - throw new InvalidParameterValueException("Gateway, netmask and zoneId have to be passed in for virtual and direct untagged networks"); - } - } else { - // check if startIp and endIp belong to network Cidr - String networkCidr = network.getCidr(); - String networkGateway = network.getGateway(); - Long networkZoneId = network.getDataCenterId(); - String networkNetmask = NetUtils.getCidrNetmask(networkCidr); - - // Check if ip addresses are in network range - if (!NetUtils.sameSubnet(startIP, networkGateway, networkNetmask)) { - throw new InvalidParameterValueException("Start ip is not in network cidr: " + networkCidr); - } - - if (endIP != null) { - if (!NetUtils.sameSubnet(endIP, networkGateway, networkNetmask)) { - throw new InvalidParameterValueException("End ip is not in network cidr: " + networkCidr); + if ( zone.getNetworkType() == DataCenter.NetworkType.Advanced ) { + if (network.getTrafficType() == TrafficType.Guest) { + if (network.getGuestType() != GuestType.Shared) { + throw new InvalidParameterValueException("Can execute createVLANIpRanges on shared guest network, but type of this guest network " + + network.getId() + " is " + network.getGuestType()); } + List vlans = _vlanDao.listVlansByNetworkId(network.getId()); + if ( vlans != null && vlans.size() > 0 ) { + VlanVO vlan = vlans.get(0); + if ( vlanId == null ) { + vlanId = vlan.getVlanTag(); + } else if ( vlan.getVlanTag() != vlanId ) { + throw new InvalidParameterValueException("there is already one vlan " + vlan.getVlanTag() + " on network :" + + + network.getId() + ", only one vlan is allowed on guest network"); + } + vlanGateway = vlan.getVlanGateway(); + vlanNetmask = vlan.getVlanNetmask(); + } + } else if (network.getTrafficType() == TrafficType.Management) { + throw new InvalidParameterValueException("Cannot execute createVLANIpRanges on management network"); } - - // set gateway, netmask, zone from network object - vlanGateway = networkGateway; - vlanNetmask = networkNetmask; - zoneId = networkZoneId; } + if (vlanGateway == null || vlanNetmask == null || zoneId == null) { + throw new InvalidParameterValueException("Gateway, netmask and zoneId have to be passed in for virtual and direct untagged networks"); + } + + // if it's an account specific range, associate ip address list to the account boolean associateIpRangeToAccount = false; From a6b902763071c70f6e530ea4b3440f5fb030090b Mon Sep 17 00:00:00 2001 From: anthony Date: Tue, 15 Jan 2013 11:15:42 -0800 Subject: [PATCH 401/421] default Security rule doesn't apply to system VMs since nic.getIsolationUri is not set use to.setSecurityGroupEnabled to indicate if securitygroup is enabled on this NIC CLOUDSTACK-983: default Security rule doesn't apply to system VMs --- .../hypervisor/kvm/resource/LibvirtComputingResource.java | 5 ++--- .../cloud/hypervisor/xen/resource/CitrixResourceBase.java | 6 ++++-- server/src/com/cloud/hypervisor/HypervisorGuruBase.java | 1 + 3 files changed, 7 insertions(+), 5 deletions(-) diff --git a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java b/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java index b52e2d8a0b0..6b5f6df3bff 100755 --- a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java +++ b/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java @@ -2901,9 +2901,8 @@ public class LibvirtComputingResource extends ServerResourceBase implements NicTO[] nics = vmSpec.getNics(); for (NicTO nic : nics) { - if (nic.getIsolationUri() != null - && nic.getIsolationUri().getScheme() - .equalsIgnoreCase(IsolationType.Ec2.toString())) { + if (nic.isSecurityGroupEnabled() || ( nic.getIsolationUri() != null + && nic.getIsolationUri().getScheme().equalsIgnoreCase(IsolationType.Ec2.toString()))) { if (vmSpec.getType() != VirtualMachine.Type.User) { default_network_rules_for_systemvm(conn, vmName); break; diff --git a/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/CitrixResourceBase.java b/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/CitrixResourceBase.java index 36a12b1b4fa..66a5918b177 100644 --- a/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/CitrixResourceBase.java +++ b/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/CitrixResourceBase.java @@ -1324,7 +1324,8 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe NicTO[] nics = vmSpec.getNics(); boolean secGrpEnabled = false; for (NicTO nic : nics) { - if (nic.getIsolationUri() != null && nic.getIsolationUri().getScheme().equalsIgnoreCase(IsolationType.Ec2.toString())) { + if (nic.isSecurityGroupEnabled() || (nic.getIsolationUri() != null + && nic.getIsolationUri().getScheme().equalsIgnoreCase(IsolationType.Ec2.toString()))) { secGrpEnabled = true; break; } @@ -1342,7 +1343,8 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe //For user vm, program the rules for each nic if the isolation uri scheme is ec2 NicTO[] nics = vmSpec.getNics(); for (NicTO nic : nics) { - if (nic.getIsolationUri() != null && nic.getIsolationUri().getScheme().equalsIgnoreCase(IsolationType.Ec2.toString())) { + if ( nic.isSecurityGroupEnabled() || nic.getIsolationUri() != null + && nic.getIsolationUri().getScheme().equalsIgnoreCase(IsolationType.Ec2.toString())) { result = callHostPlugin(conn, "vmops", "default_network_rules", "vmName", vmName, "vmIP", nic.getIp(), "vmMAC", nic.getMac(), "vmID", Long.toString(vmSpec.getId())); if (result == null || result.isEmpty() || !Boolean.parseBoolean(result)) { diff --git a/server/src/com/cloud/hypervisor/HypervisorGuruBase.java b/server/src/com/cloud/hypervisor/HypervisorGuruBase.java index 242852fc681..2efe6d35098 100644 --- a/server/src/com/cloud/hypervisor/HypervisorGuruBase.java +++ b/server/src/com/cloud/hypervisor/HypervisorGuruBase.java @@ -62,6 +62,7 @@ public abstract class HypervisorGuruBase extends AdapterBase implements Hypervis to.setIsolationuri(profile.getIsolationUri()); to.setNetworkRateMbps(profile.getNetworkRate()); to.setName(profile.getName()); + to.setSecurityGroupEnabled(profile.isSecurityGroupEnabled()); // Workaround to make sure the TO has the UUID we need for Niciri integration NicVO nicVO = _nicDao.findById(profile.getId()); From 7f1486e2dc9f612af94901ab8804e24c48b8122b Mon Sep 17 00:00:00 2001 From: Min Chen Date: Tue, 15 Jan 2013 11:40:49 -0800 Subject: [PATCH 402/421] We need to catch PermissionDeniedException in checking if command is available to an user. --- server/src/com/cloud/api/ApiServer.java | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/server/src/com/cloud/api/ApiServer.java b/server/src/com/cloud/api/ApiServer.java index 4d60215b276..e106f0322ad 100755 --- a/server/src/com/cloud/api/ApiServer.java +++ b/server/src/com/cloud/api/ApiServer.java @@ -549,7 +549,10 @@ public class ApiServer implements HttpRequestHandler { // if userId not null, that mean that user is logged in if (userId != null) { User user = ApiDBUtils.findUserById(userId); - if (!isCommandAvailable(user, commandName)) { + try{ + checkCommandAvailable(user, commandName); + } + catch (PermissionDeniedException ex){ s_logger.debug("The given command:" + commandName + " does not exist or it is not available for user with id:" + userId); throw new ServerApiException(BaseCmd.UNSUPPORTED_ACTION_ERROR, "The given command does not exist or it is not available for user"); } @@ -649,7 +652,10 @@ public class ApiServer implements HttpRequestHandler { UserContext.updateContext(user.getId(), account, null); - if (!isCommandAvailable(user, commandName)) { + try{ + checkCommandAvailable(user, commandName); + } + catch (PermissionDeniedException ex){ s_logger.debug("The given command:" + commandName + " does not exist or it is not available for user"); throw new ServerApiException(BaseCmd.UNSUPPORTED_ACTION_ERROR, "The given command:" + commandName + " does not exist or it is not available for user with id:" + userId); } @@ -780,7 +786,7 @@ public class ApiServer implements HttpRequestHandler { return true; } - private boolean isCommandAvailable(User user, String commandName) throws PermissionDeniedException { + private void checkCommandAvailable(User user, String commandName) throws PermissionDeniedException { if (user == null) { throw new PermissionDeniedException("User is null for role based API access check for command" + commandName); } @@ -788,7 +794,6 @@ public class ApiServer implements HttpRequestHandler { for (APIChecker apiChecker : _apiAccessCheckers) { apiChecker.checkAccess(user, commandName); } - return true; } private Class getCmdClass(String cmdName) { From 354c56a9887cb1a3bfdfbdfa00ce34bc96ee8037 Mon Sep 17 00:00:00 2001 From: Marcus Sorensen Date: Tue, 15 Jan 2013 14:21:44 -0700 Subject: [PATCH 403/421] Summary: Adding apache license headers to various devcloud configs Signed-off-by: Marcus Sorensen 1358284904 -0700 --- tools/devcloud-kvm/devcloud-kvm-advanced.cfg | 19 ++++++++++++++++++ tools/devcloud-kvm/devcloud-kvm.cfg | 20 +++++++++++++++++++ tools/devcloud/devcloud-advanced.cfg | 17 ++++++++++++++++ .../devcloud-advanced_internal-mgt.cfg | 17 ++++++++++++++++ tools/devcloud/devcloud.cfg | 18 +++++++++++++++++ 5 files changed, 91 insertions(+) diff --git a/tools/devcloud-kvm/devcloud-kvm-advanced.cfg b/tools/devcloud-kvm/devcloud-kvm-advanced.cfg index 1110863d848..10cbce00779 100644 --- a/tools/devcloud-kvm/devcloud-kvm-advanced.cfg +++ b/tools/devcloud-kvm/devcloud-kvm-advanced.cfg @@ -1,3 +1,22 @@ +# 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. +# + + { "zones": [ { diff --git a/tools/devcloud-kvm/devcloud-kvm.cfg b/tools/devcloud-kvm/devcloud-kvm.cfg index 47a128fea14..b3f048aac97 100644 --- a/tools/devcloud-kvm/devcloud-kvm.cfg +++ b/tools/devcloud-kvm/devcloud-kvm.cfg @@ -1,3 +1,23 @@ +# 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. +# +# This is a stock devcloud config converted from the file +# tools/devcloud/devcloud.cfg. + { "zones": [ { diff --git a/tools/devcloud/devcloud-advanced.cfg b/tools/devcloud/devcloud-advanced.cfg index cfbc815dc69..75c3a4f7147 100644 --- a/tools/devcloud/devcloud-advanced.cfg +++ b/tools/devcloud/devcloud-advanced.cfg @@ -1,3 +1,20 @@ +# 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. +# # This configuration is meant for running advanced networking, with management server on the laptop. # It requires that the user run a DNS resolver within devcloud via 'apt-get install dnsmasq' diff --git a/tools/devcloud/devcloud-advanced_internal-mgt.cfg b/tools/devcloud/devcloud-advanced_internal-mgt.cfg index e360b6b9e37..a1a8cb54722 100644 --- a/tools/devcloud/devcloud-advanced_internal-mgt.cfg +++ b/tools/devcloud/devcloud-advanced_internal-mgt.cfg @@ -1,3 +1,20 @@ +# 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. +# # This config is designed to run as an advanced network, with management server in devcloud # It also requires an 'apt-get install dnsmasq' to run a resolver in devcloud for internal dns diff --git a/tools/devcloud/devcloud.cfg b/tools/devcloud/devcloud.cfg index 8d296eb7b98..c41f8bcef58 100644 --- a/tools/devcloud/devcloud.cfg +++ b/tools/devcloud/devcloud.cfg @@ -1,3 +1,21 @@ +# 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. +# + { "zones": [ { From f7b8ad5e8bc97c01db7ece539a490e929b050f70 Mon Sep 17 00:00:00 2001 From: Chip Childers Date: Tue, 15 Jan 2013 16:28:16 -0500 Subject: [PATCH 404/421] Updating the RAT exclude list to no longer exclude devcloud .cfg files Signed-off-by: Chip Childers --- pom.xml | 4 ---- 1 file changed, 4 deletions(-) diff --git a/pom.xml b/pom.xml index f752d266a9d..c440a660322 100644 --- a/pom.xml +++ b/pom.xml @@ -244,10 +244,6 @@ dist/console-proxy/js/jquery.js scripts/vm/systemvm/id_rsa.cloud tools/devcloud/basebuild/puppet-devcloudinitial/files/network.conf - tools/devcloud/devcloud.cfg - tools/devcloud/devcloud-advanced.cfg - tools/devcloud-kvm/devcloud-kvm.cfg - tools/devcloud-kvm/devcloud-kvm-advanced.cfg ui/lib/flot/jquery.colorhelpers.js ui/lib/flot/jquery.flot.crosshair.js ui/lib/flot/jquery.flot.fillbetween.js From 47251b51a7bad37c66c0fa460723ede6a3e7b0a9 Mon Sep 17 00:00:00 2001 From: Marcus Sorensen Date: Tue, 15 Jan 2013 14:26:30 -0700 Subject: [PATCH 405/421] Summary: Allow ssh keypairs to be created if developer flag set and user ! cloud Detail: Previously in the code we allowed the configuration to create ssh keypairs and put them in the configuration table so that systemvms could have ssh key auth and work properly if the user was 'cloud' or if the developer configuration item was set to true. It got changed to requiring both the cloud user and the developer flag (using an || on a negative) somwhere along the way. This changes it back to && on a negative to allow us to run as non-cloud users with the dev flag set, and for cloud to deploy properly without the developer flag. Signed-off-by: Marcus Sorensen 1358285190 -0700 --- server/src/com/cloud/server/ConfigurationServerImpl.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server/src/com/cloud/server/ConfigurationServerImpl.java b/server/src/com/cloud/server/ConfigurationServerImpl.java index b25c63f6d7f..7e5f42445d5 100755 --- a/server/src/com/cloud/server/ConfigurationServerImpl.java +++ b/server/src/com/cloud/server/ConfigurationServerImpl.java @@ -549,7 +549,7 @@ public class ConfigurationServerImpl implements ConfigurationServer { String username = System.getProperty("user.name"); Boolean devel = Boolean.valueOf(_configDao.getValue("developer")); - if (!username.equalsIgnoreCase("cloud") || !devel) { + if (!username.equalsIgnoreCase("cloud") && !devel) { s_logger.warn("Systemvm keypairs could not be set. Management server should be run as cloud user, or in development mode."); return; } From c32dbec468b176d4a6019d9e642eb9adc593bf36 Mon Sep 17 00:00:00 2001 From: Sheng Yang Date: Tue, 15 Jan 2013 14:51:59 -0800 Subject: [PATCH 406/421] CLOUDSTACK-985: Revert "Using different MAC for a pair of redundant routers" The different MAC address for a pair of redundant router have issues when short time network outrage happened. When this happened: 1. BACKUP(r-2) cannot receive the broadcast from MASTER(r-1). 2. Then r-2 would announce it's MASTER after 3 seconds, and send gratuitous ARP to the gateway of public ip(usually a rack router). 3. The gateway of public ip would update it's ARP cache to associate the public ip of the network to the MAC of r-2. 4. In the meantime, r-1 still sending out VRRP broadcast(due to network issue, the broadcast never arrived at r-2), and acting as MASTER. 5. After network outrage, r-2 would receive the higher priority VRRP broadcast from MASTER again, then receded as BACKUP. 6. But the public gateway would still associate public ip with MAC of r-2, thus caused the issue. r-1 would no longer able to receive any packets from public network. And there is no way for r-1 to send gratuitous ARP again, because it's always consider itself as MASTER, no state changed, and no hook existed for receiving lower priority broadcast. So I would revert this change, and introduce another commit to ensure the newly create redundant router would share the same MAC as the first one. This reverts commit 9f257aa60b62f24193bba3f7c902e7779632e01e. --- .../VirtualNetworkApplianceManagerImpl.java | 26 ++++--------------- server/src/com/cloud/vm/dao/NicDao.java | 2 -- server/src/com/cloud/vm/dao/NicDaoImpl.java | 8 ------ 3 files changed, 5 insertions(+), 31 deletions(-) diff --git a/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java b/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java index 492e1dc20b1..c8fd86e821c 100755 --- a/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java +++ b/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java @@ -1469,31 +1469,15 @@ public class VirtualNetworkApplianceManagerImpl implements VirtualNetworkApplian offeringId = _offering.getId(); } + PublicIp sourceNatIp = null; + if (publicNetwork) { + sourceNatIp = _networkMgr.assignSourceNatIpAddressToGuestNetwork(owner, guestNetwork); + } + // 3) deploy virtual router(s) int count = routerCount - routers.size(); DeploymentPlan plan = planAndRouters.first(); for (int i = 0; i < count; i++) { - PublicIp sourceNatIp = null; - if (publicNetwork) { - int failCount = 0; - // Generate different MAC for VR - while (sourceNatIp == null) { - sourceNatIp = _networkMgr.assignSourceNatIpAddressToGuestNetwork(owner, guestNetwork); - NicVO nic = _nicDao.findByMacAddress(sourceNatIp.getMacAddress()); - // We got duplicate MAC here, so regenerate the mac - if (nic != null) { - s_logger.debug("Failed to find a different mac for redundant router. Try again. The current mac is " + sourceNatIp.getMacAddress()); - sourceNatIp = null; - failCount ++; - } - //Prevent infinite loop - if (failCount > 3) { - s_logger.error("Failed to find a different mac for redundant router! Abort operation!"); - throw new InsufficientAddressCapacityException("Failed to find a different mac for redundant router", null, offeringId); - } - } - } - List> networks = createRouterNetworks(owner, isRedundant, plan, guestNetwork, new Pair(publicNetwork, sourceNatIp)); //don't start the router as we are holding the network lock that needs to be released at the end of router allocation diff --git a/server/src/com/cloud/vm/dao/NicDao.java b/server/src/com/cloud/vm/dao/NicDao.java index af3c7b379c1..762048b65bf 100644 --- a/server/src/com/cloud/vm/dao/NicDao.java +++ b/server/src/com/cloud/vm/dao/NicDao.java @@ -58,6 +58,4 @@ public interface NicDao extends GenericDao { NicVO findByNetworkIdInstanceIdAndBroadcastUri(long networkId, long instanceId, String broadcastUri); NicVO findByIp4AddressAndNetworkIdAndInstanceId(long networkId, long instanceId, String ip4Address); - - NicVO findByMacAddress(String macAddress); } diff --git a/server/src/com/cloud/vm/dao/NicDaoImpl.java b/server/src/com/cloud/vm/dao/NicDaoImpl.java index 00da2eb96a4..3cd7fa6b488 100644 --- a/server/src/com/cloud/vm/dao/NicDaoImpl.java +++ b/server/src/com/cloud/vm/dao/NicDaoImpl.java @@ -50,7 +50,6 @@ public class NicDaoImpl extends GenericDaoBase implements NicDao { AllFieldsSearch.and("address", AllFieldsSearch.entity().getIp4Address(), Op.EQ); AllFieldsSearch.and("isDefault", AllFieldsSearch.entity().isDefaultNic(), Op.EQ); AllFieldsSearch.and("broadcastUri", AllFieldsSearch.entity().getBroadcastUri(), Op.EQ); - AllFieldsSearch.and("macAddress", AllFieldsSearch.entity().getMacAddress(), Op.EQ); AllFieldsSearch.done(); IpSearch = createSearchBuilder(String.class); @@ -200,11 +199,4 @@ public class NicDaoImpl extends GenericDaoBase implements NicDao { sc.setParameters("address", ip4Address); return findOneBy(sc); } - - @Override - public NicVO findByMacAddress(String macAddress) { - SearchCriteria sc = AllFieldsSearch.create(); - sc.setParameters("macAddress", macAddress); - return findOneBy(sc); - } } From 4f889bd426ea841918b570bb008cf5e348715730 Mon Sep 17 00:00:00 2001 From: Sheng Yang Date: Tue, 15 Jan 2013 15:22:41 -0800 Subject: [PATCH 407/421] CLOUDSTACK-985: Make sure RvR would always have same MAC address Even with newly created RvR using "restartNetwork&cleanup=false" API. --- .../network/router/VirtualNetworkApplianceManagerImpl.java | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java b/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java index c8fd86e821c..717da054ac5 100755 --- a/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java +++ b/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java @@ -1699,6 +1699,13 @@ public class VirtualNetworkApplianceManagerImpl implements VirtualNetworkApplian } NetworkOfferingVO publicOffering = _networkMgr.getSystemAccountNetworkOfferings(NetworkOfferingVO.SystemPublicNetwork).get(0); List publicNetworks = _networkMgr.setupNetwork(_systemAcct, publicOffering, plan, null, null, false); + String publicIp = defaultNic.getIp4Address(); + // We want to use the identical MAC address for RvR on public interface if possible + NicVO peerNic = _nicDao.findByIp4AddressAndNetworkId(publicIp, publicNetworks.get(0).getId()); + if (peerNic != null) { + s_logger.info("Use same MAC as previous RvR, the MAC is " + peerNic.getMacAddress()); + defaultNic.setMacAddress(peerNic.getMacAddress()); + } networks.add(new Pair(publicNetworks.get(0), defaultNic)); } From f6a8b45de52ad57646adb71dc55ddf3ee9dbd194 Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Tue, 15 Jan 2013 16:06:21 -0800 Subject: [PATCH 408/421] ApiDiscovery: Use UserContext getCallerUser, do a lazy eval to get account service Impl. and use UserContext to get User. CloudStack's @Inject is horrible, it may sometimes fail to inject account service during startup. Do a lazy injection using ComponentLocator when needed. Signed-off-by: Rohit Yadav --- api/src/com/cloud/user/UserContext.java | 4 ++ .../command/user/discovery/ListApisCmd.java | 8 +--- .../discovery/ApiDiscoveryServiceImpl.java | 41 +++++++++---------- 3 files changed, 25 insertions(+), 28 deletions(-) diff --git a/api/src/com/cloud/user/UserContext.java b/api/src/com/cloud/user/UserContext.java index b140728e596..539e11812af 100644 --- a/api/src/com/cloud/user/UserContext.java +++ b/api/src/com/cloud/user/UserContext.java @@ -50,6 +50,10 @@ public class UserContext { return userId; } + public User getCallerUser() { + return _accountMgr.getActiveUser(userId); + } + public void setCallerUserId(long userId) { this.userId = userId; } diff --git a/plugins/api/discovery/src/org/apache/cloudstack/api/command/user/discovery/ListApisCmd.java b/plugins/api/discovery/src/org/apache/cloudstack/api/command/user/discovery/ListApisCmd.java index 132416bac05..bad7ca7b5f6 100644 --- a/plugins/api/discovery/src/org/apache/cloudstack/api/command/user/discovery/ListApisCmd.java +++ b/plugins/api/discovery/src/org/apache/cloudstack/api/command/user/discovery/ListApisCmd.java @@ -16,11 +16,8 @@ // under the License. package org.apache.cloudstack.api.command.user.discovery; -import com.cloud.user.AccountService; import com.cloud.user.User; import com.cloud.user.UserContext; -import com.cloud.utils.component.Inject; -import org.apache.cloudstack.acl.RoleType; import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseCmd; @@ -42,16 +39,13 @@ public class ListApisCmd extends BaseCmd { @PlugService ApiDiscoveryService _apiDiscoveryService; - @Inject - private AccountService _accountService; - @Parameter(name=ApiConstants.NAME, type=CommandType.STRING, description="API name") private String name; @Override public void execute() throws ServerApiException { if (_apiDiscoveryService != null) { - User user = _accountService.getActiveUser(UserContext.current().getCallerUserId()); + User user = UserContext.current().getCallerUser(); ListResponse response = (ListResponse) _apiDiscoveryService.listApis(user, name); if (response == null) { throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Api Discovery plugin was unable to find an api by that name or process any apis"); diff --git a/plugins/api/discovery/src/org/apache/cloudstack/discovery/ApiDiscoveryServiceImpl.java b/plugins/api/discovery/src/org/apache/cloudstack/discovery/ApiDiscoveryServiceImpl.java index 7e2ed17ecdc..f06e2005552 100644 --- a/plugins/api/discovery/src/org/apache/cloudstack/discovery/ApiDiscoveryServiceImpl.java +++ b/plugins/api/discovery/src/org/apache/cloudstack/discovery/ApiDiscoveryServiceImpl.java @@ -17,17 +17,13 @@ package org.apache.cloudstack.discovery; import com.cloud.serializer.Param; -import com.cloud.server.ManagementServer; import com.cloud.user.User; import com.cloud.utils.ReflectUtil; import com.cloud.utils.StringUtils; import com.cloud.utils.component.Adapters; import com.cloud.utils.component.ComponentLocator; -import com.cloud.utils.component.Inject; -import com.cloud.utils.component.PluggableService; import com.google.gson.annotations.SerializedName; import org.apache.cloudstack.acl.APIChecker; -import org.apache.cloudstack.acl.RoleType; import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.BaseAsyncCmd; @@ -54,16 +50,14 @@ import java.util.Set; public class ApiDiscoveryServiceImpl implements ApiDiscoveryService { private static final Logger s_logger = Logger.getLogger(ApiDiscoveryServiceImpl.class); - @Inject(adapter = APIChecker.class) - protected Adapters _apiAccessCheckers; - - private static Map _apiNameDiscoveryResponseMap = null; + protected static Adapters s_apiAccessCheckers = null; + private static Map s_apiNameDiscoveryResponseMap = null; protected ApiDiscoveryServiceImpl() { super(); - if (_apiNameDiscoveryResponseMap == null) { + if (s_apiNameDiscoveryResponseMap == null) { long startTime = System.nanoTime(); - _apiNameDiscoveryResponseMap = new HashMap(); + s_apiNameDiscoveryResponseMap = new HashMap(); cacheResponseMap(); long endTime = System.nanoTime(); s_logger.info("Api Discovery Service: Annotation, docstrings, api relation graph processed in " + (endTime - startTime) / 1000000.0 + " ms"); @@ -142,11 +136,11 @@ public class ApiDiscoveryServiceImpl implements ApiDiscoveryService { } } response.setObjectName("api"); - _apiNameDiscoveryResponseMap.put(apiName, response); + s_apiNameDiscoveryResponseMap.put(apiName, response); } - for (String apiName : _apiNameDiscoveryResponseMap.keySet()) { - ApiDiscoveryResponse response = _apiNameDiscoveryResponseMap.get(apiName); + for (String apiName : s_apiNameDiscoveryResponseMap.keySet()) { + ApiDiscoveryResponse response = s_apiNameDiscoveryResponseMap.get(apiName); Set processedParams = new HashSet(); for (ApiParameterResponse param : response.getParams()) { if (responseApiNameListMap.containsKey(param.getRelated())) { @@ -166,7 +160,7 @@ public class ApiDiscoveryServiceImpl implements ApiDiscoveryService { } else { response.setRelated(null); } - _apiNameDiscoveryResponseMap.put(apiName, response); + s_apiNameDiscoveryResponseMap.put(apiName, response); } } @@ -175,34 +169,39 @@ public class ApiDiscoveryServiceImpl implements ApiDiscoveryService { ListResponse response = new ListResponse(); List responseList = new ArrayList(); + if (s_apiAccessCheckers == null) { + ComponentLocator locator = ComponentLocator.getCurrentLocator(); + s_apiAccessCheckers = locator.getAdapters(APIChecker.class); + } + if (user == null) return null; if (name != null) { - if (!_apiNameDiscoveryResponseMap.containsKey(name)) + if (!s_apiNameDiscoveryResponseMap.containsKey(name)) return null; - for (APIChecker apiChecker : _apiAccessCheckers) { + for (APIChecker apiChecker : s_apiAccessCheckers) { try { apiChecker.checkAccess(user, name); } catch (Exception ex) { return null; } } - responseList.add(_apiNameDiscoveryResponseMap.get(name)); + responseList.add(s_apiNameDiscoveryResponseMap.get(name)); } else { - for (String apiName : _apiNameDiscoveryResponseMap.keySet()) { + for (String apiName : s_apiNameDiscoveryResponseMap.keySet()) { boolean isAllowed = true; - for (APIChecker apiChecker : _apiAccessCheckers) { + for (APIChecker apiChecker : s_apiAccessCheckers) { try { - apiChecker.checkAccess(user, name); + apiChecker.checkAccess(user, apiName); } catch (Exception ex) { isAllowed = false; } } if (isAllowed) - responseList.add(_apiNameDiscoveryResponseMap.get(apiName)); + responseList.add(s_apiNameDiscoveryResponseMap.get(apiName)); } } response.setResponses(responseList); From 8608925216e87691bc49fa4417d3446c2b81a5a7 Mon Sep 17 00:00:00 2001 From: Min Chen Date: Tue, 15 Jan 2013 18:07:08 -0800 Subject: [PATCH 409/421] Consolidate RuntimeCloudException and CloudRuntimeException into one class CloudRuntimeException, and removed RuntimeCloudException to avoid confusion. --- .../CloudAuthenticationException.java | 4 +- .../exception/CloudExecutionException.java | 4 +- .../cloudstack/api/ServerApiException.java | 4 +- .../simulator/SimulatorRuntimeException.java | 4 +- .../com/cloud/async/AsyncCommandQueued.java | 4 +- .../exception/CloudRuntimeException.java | 48 ++++++++++-- .../HypervisorVersionChangedException.java | 4 +- .../exception/RuntimeCloudException.java | 75 ------------------- 8 files changed, 55 insertions(+), 92 deletions(-) delete mode 100644 utils/src/com/cloud/utils/exception/RuntimeCloudException.java diff --git a/api/src/com/cloud/exception/CloudAuthenticationException.java b/api/src/com/cloud/exception/CloudAuthenticationException.java index 2bba79bab1e..0bf114c0394 100644 --- a/api/src/com/cloud/exception/CloudAuthenticationException.java +++ b/api/src/com/cloud/exception/CloudAuthenticationException.java @@ -17,9 +17,9 @@ package com.cloud.exception; import com.cloud.utils.SerialVersionUID; -import com.cloud.utils.exception.RuntimeCloudException; +import com.cloud.utils.exception.CloudRuntimeException; -public class CloudAuthenticationException extends RuntimeCloudException { +public class CloudAuthenticationException extends CloudRuntimeException { private static final long serialVersionUID = SerialVersionUID.CloudAuthenticationException; public CloudAuthenticationException(String message) { diff --git a/api/src/com/cloud/exception/CloudExecutionException.java b/api/src/com/cloud/exception/CloudExecutionException.java index d8d70f8ddb5..c19fc459a8d 100755 --- a/api/src/com/cloud/exception/CloudExecutionException.java +++ b/api/src/com/cloud/exception/CloudExecutionException.java @@ -17,14 +17,14 @@ package com.cloud.exception; import java.util.HashMap; -import com.cloud.utils.exception.RuntimeCloudException; +import com.cloud.utils.exception.CloudRuntimeException; import com.cloud.utils.SerialVersionUID; /** * */ -public class CloudExecutionException extends RuntimeCloudException { +public class CloudExecutionException extends CloudRuntimeException { private final static long serialVersionUID = SerialVersionUID.CloudExecutionException; private final ErrorCode code; diff --git a/api/src/org/apache/cloudstack/api/ServerApiException.java b/api/src/org/apache/cloudstack/api/ServerApiException.java index 70fd34e5cf7..1f57b74745d 100644 --- a/api/src/org/apache/cloudstack/api/ServerApiException.java +++ b/api/src/org/apache/cloudstack/api/ServerApiException.java @@ -15,10 +15,10 @@ // specific language governing permissions and limitations // under the License. package org.apache.cloudstack.api; -import com.cloud.utils.exception.RuntimeCloudException; +import com.cloud.utils.exception.CloudRuntimeException; @SuppressWarnings("serial") -public class ServerApiException extends RuntimeCloudException { +public class ServerApiException extends CloudRuntimeException { private int _errorCode; private String _description; diff --git a/plugins/hypervisors/simulator/src/com/cloud/simulator/SimulatorRuntimeException.java b/plugins/hypervisors/simulator/src/com/cloud/simulator/SimulatorRuntimeException.java index 9891bc82556..9f24bbd0cfc 100644 --- a/plugins/hypervisors/simulator/src/com/cloud/simulator/SimulatorRuntimeException.java +++ b/plugins/hypervisors/simulator/src/com/cloud/simulator/SimulatorRuntimeException.java @@ -18,12 +18,12 @@ package com.cloud.simulator; import com.cloud.utils.SerialVersionUID; -import com.cloud.utils.exception.RuntimeCloudException; +import com.cloud.utils.exception.CloudRuntimeException; /** * wrap exceptions that you know there's no point in dealing with. */ -public class SimulatorRuntimeException extends RuntimeCloudException { +public class SimulatorRuntimeException extends CloudRuntimeException { private static final long serialVersionUID = SerialVersionUID.CloudRuntimeException; diff --git a/server/src/com/cloud/async/AsyncCommandQueued.java b/server/src/com/cloud/async/AsyncCommandQueued.java index 200b40e71b5..f01c214564b 100644 --- a/server/src/com/cloud/async/AsyncCommandQueued.java +++ b/server/src/com/cloud/async/AsyncCommandQueued.java @@ -17,9 +17,9 @@ package com.cloud.async; import com.cloud.utils.SerialVersionUID; -import com.cloud.utils.exception.RuntimeCloudException; +import com.cloud.utils.exception.CloudRuntimeException; -public class AsyncCommandQueued extends RuntimeCloudException { +public class AsyncCommandQueued extends CloudRuntimeException { private static final long serialVersionUID = SerialVersionUID.AsyncCommandQueued; private SyncQueueVO _queue = null; diff --git a/utils/src/com/cloud/utils/exception/CloudRuntimeException.java b/utils/src/com/cloud/utils/exception/CloudRuntimeException.java index 78075947d3f..3862e2223d6 100755 --- a/utils/src/com/cloud/utils/exception/CloudRuntimeException.java +++ b/utils/src/com/cloud/utils/exception/CloudRuntimeException.java @@ -16,24 +16,62 @@ // under the License. package com.cloud.utils.exception; +import java.util.ArrayList; + +import com.cloud.utils.AnnotationHelper; import com.cloud.utils.SerialVersionUID; /** * wrap exceptions that you know there's no point in dealing with. */ -public class CloudRuntimeException extends RuntimeCloudException { +public class CloudRuntimeException extends RuntimeException { private static final long serialVersionUID = SerialVersionUID.CloudRuntimeException; - + + // This holds a list of uuids and their names. Add uuid:fieldname pairs + protected ArrayList idList = new ArrayList(); + + protected int csErrorCode; + + public CloudRuntimeException(String message) { super(message); + setCSErrorCode(CSExceptionErrorCode.getCSErrCode(this.getClass().getName())); } - + public CloudRuntimeException(String message, Throwable th) { super(message, th); + setCSErrorCode(CSExceptionErrorCode.getCSErrCode(this.getClass().getName())); } - - protected CloudRuntimeException() { + + public CloudRuntimeException() { super(); + setCSErrorCode(CSExceptionErrorCode.getCSErrCode(this.getClass().getName())); + } + + public void addProxyObject(String uuid) { + idList.add(uuid); + return; + } + + public void addProxyObject(Object voObj, Long id, String idFieldName) { + // Get the VO object's table name. + String tablename = AnnotationHelper.getTableName(voObj); + if (tablename != null) { + addProxyObject(tablename, id, idFieldName); + } + return; + } + + public ArrayList getIdProxyList() { + return idList; + } + + public void setCSErrorCode(int cserrcode) { + this.csErrorCode = cserrcode; + } + + public int getCSErrorCode() { + return this.csErrorCode; } } diff --git a/utils/src/com/cloud/utils/exception/HypervisorVersionChangedException.java b/utils/src/com/cloud/utils/exception/HypervisorVersionChangedException.java index 4f637cb46be..2c0c1ccd68b 100755 --- a/utils/src/com/cloud/utils/exception/HypervisorVersionChangedException.java +++ b/utils/src/com/cloud/utils/exception/HypervisorVersionChangedException.java @@ -18,10 +18,10 @@ package com.cloud.utils.exception; import com.cloud.utils.SerialVersionUID; -public class HypervisorVersionChangedException extends RuntimeCloudException { +public class HypervisorVersionChangedException extends CloudRuntimeException { private static final long serialVersionUID = SerialVersionUID.CloudRuntimeException; - + public HypervisorVersionChangedException(String message) { super(message); } diff --git a/utils/src/com/cloud/utils/exception/RuntimeCloudException.java b/utils/src/com/cloud/utils/exception/RuntimeCloudException.java deleted file mode 100644 index 52229800785..00000000000 --- a/utils/src/com/cloud/utils/exception/RuntimeCloudException.java +++ /dev/null @@ -1,75 +0,0 @@ -// 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 -// 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.utils.exception; - -import com.cloud.utils.AnnotationHelper; -import java.util.ArrayList; - -/** - * by the API response serializer. Any exceptions that are thrown by - * class, which extends Exception instead of RuntimeException like this - * class does. - */ - -public class RuntimeCloudException extends RuntimeException { - - // This holds a list of uuids and their names. Add uuid:fieldname pairs - protected ArrayList idList = new ArrayList(); - - protected int csErrorCode; - - public void addProxyObject(String uuid) { - idList.add(uuid); - return; - } - - public RuntimeCloudException(String message) { - super(message); - setCSErrorCode(CSExceptionErrorCode.getCSErrCode(this.getClass().getName())); - } - - public RuntimeCloudException(String message, Throwable cause) { - super(message, cause); - setCSErrorCode(CSExceptionErrorCode.getCSErrCode(this.getClass().getName())); - } - - public void addProxyObject(Object voObj, Long id, String idFieldName) { - // Get the VO object's table name. - String tablename = AnnotationHelper.getTableName(voObj); - if (tablename != null) { - addProxyObject(tablename, id, idFieldName); - } - return; - } - - public RuntimeCloudException() { - super(); - setCSErrorCode(CSExceptionErrorCode.getCSErrCode(this.getClass().getName())); - } - - public ArrayList getIdProxyList() { - return idList; - } - - public void setCSErrorCode(int cserrcode) { - this.csErrorCode = cserrcode; - } - - public int getCSErrorCode() { - return this.csErrorCode; - } -} From 939acb0f4c951f8c04de78cf897c8f6a25b1f05d Mon Sep 17 00:00:00 2001 From: Min Chen Date: Tue, 15 Jan 2013 18:17:35 -0800 Subject: [PATCH 410/421] Remove unused CloudExecutionException. --- .../exception/CloudExecutionException.java | 57 ------------------- api/src/com/cloud/exception/ErrorCode.java | 52 ----------------- 2 files changed, 109 deletions(-) delete mode 100755 api/src/com/cloud/exception/CloudExecutionException.java delete mode 100755 api/src/com/cloud/exception/ErrorCode.java diff --git a/api/src/com/cloud/exception/CloudExecutionException.java b/api/src/com/cloud/exception/CloudExecutionException.java deleted file mode 100755 index c19fc459a8d..00000000000 --- a/api/src/com/cloud/exception/CloudExecutionException.java +++ /dev/null @@ -1,57 +0,0 @@ -// 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.exception; - -import java.util.HashMap; - -import com.cloud.utils.exception.CloudRuntimeException; -import com.cloud.utils.SerialVersionUID; - -/** - * - */ -public class CloudExecutionException extends CloudRuntimeException { - private final static long serialVersionUID = SerialVersionUID.CloudExecutionException; - - private final ErrorCode code; - private final HashMap details; - - public CloudExecutionException(ErrorCode code, String message, Throwable cause) { - super(message, cause); - this.code = code; - details = new HashMap(); - } - - public ErrorCode getErrorCode() { - return code; - } - - public String getErrorMessage() { - return new StringBuilder("Error Code=").append(code).append("; Error Message=").append(super.toString()).toString(); - } - - @Override - public String toString() { - StringBuilder buff = new StringBuilder(); - buff.append("Error Code=").append(code); - buff.append("; Error Message=").append(super.toString()); - if (details.size() > 0) { - buff.append("; Error Details=").append(details.toString()); - } - return buff.toString(); - } -} diff --git a/api/src/com/cloud/exception/ErrorCode.java b/api/src/com/cloud/exception/ErrorCode.java deleted file mode 100755 index 8f048b84800..00000000000 --- a/api/src/com/cloud/exception/ErrorCode.java +++ /dev/null @@ -1,52 +0,0 @@ -// 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.exception; - -import java.util.HashSet; - -/** - */ -public class ErrorCode { - String code; - private static HashSet s_codes = new HashSet(); - - public ErrorCode(String code) { - this.code = code; - assert !s_codes.contains(this) : "There is already an error code registered for this code: " + code; - s_codes.add(this); - } - - public String getCode() { - return code; - } - - @Override - public int hashCode() { - return code.hashCode(); - } - - @Override - public boolean equals(Object that) { - if (!(that instanceof ErrorCode)) { - return false; - } - - return this.code.equals(((ErrorCode)that).code); - } - - public final static ErrorCode UnableToReachResource = new ErrorCode("resource.unavailable"); -} From c7840cf91f215988f8e02d2d33f389e461afc49b Mon Sep 17 00:00:00 2001 From: Murali Reddy Date: Wed, 16 Jan 2013 15:10:27 +0530 Subject: [PATCH 411/421] reverting the earlier commit 432ea9c7d4aff3f7e682f2951f49ed3e95778d9f done for bug CLOUDSTACK-265 due to IP clearence issues. --- api/src/com/cloud/network/Network.java | 1 - .../com/cloud/offering/NetworkOffering.java | 2 - .../ConfigurationManagerImpl.java | 34 +++------- .../cloud/network/rules/RulesManagerImpl.java | 35 ++-------- .../cloud/offerings/NetworkOfferingVO.java | 28 +------- .../cloud/server/ConfigurationServerImpl.java | 3 +- .../com/cloud/upgrade/dao/Upgrade40to41.java | 40 +---------- .../src/com/cloud/vm/UserVmManagerImpl.java | 68 ++++++------------- setup/db/create-schema.sql | 1 - setup/db/db/schema-40to410.sql | 1 - 10 files changed, 39 insertions(+), 174 deletions(-) diff --git a/api/src/com/cloud/network/Network.java b/api/src/com/cloud/network/Network.java index 39a0b26c76a..c91f6a9b80d 100644 --- a/api/src/com/cloud/network/Network.java +++ b/api/src/com/cloud/network/Network.java @@ -170,7 +170,6 @@ public interface Network extends ControlledEntity, InternalIdentity, Identity { public static final Capability AllowDnsSuffixModification = new Capability("AllowDnsSuffixModification"); public static final Capability RedundantRouter = new Capability("RedundantRouter"); public static final Capability ElasticIp = new Capability("ElasticIp"); - public static final Capability AssociatePublicIP = new Capability("AssociatePublicIP"); public static final Capability ElasticLb = new Capability("ElasticLb"); public static final Capability AutoScaleCounters = new Capability("AutoScaleCounters"); public static final Capability InlineMode = new Capability("InlineMode"); diff --git a/api/src/com/cloud/offering/NetworkOffering.java b/api/src/com/cloud/offering/NetworkOffering.java index b69ad886eaa..f2c4de520a1 100644 --- a/api/src/com/cloud/offering/NetworkOffering.java +++ b/api/src/com/cloud/offering/NetworkOffering.java @@ -105,8 +105,6 @@ public interface NetworkOffering extends InfrastructureEntity, InternalIdentity, boolean getElasticIp(); - boolean getAssociatePublicIP(); - boolean getElasticLb(); boolean getSpecifyIpRanges(); diff --git a/server/src/com/cloud/configuration/ConfigurationManagerImpl.java b/server/src/com/cloud/configuration/ConfigurationManagerImpl.java index b21c5a38bb7..95262797c0d 100755 --- a/server/src/com/cloud/configuration/ConfigurationManagerImpl.java +++ b/server/src/com/cloud/configuration/ConfigurationManagerImpl.java @@ -3163,33 +3163,20 @@ public class ConfigurationManagerImpl implements ConfigurationManager, Configura void validateStaticNatServiceCapablities(Map staticNatServiceCapabilityMap) { if (staticNatServiceCapabilityMap != null && !staticNatServiceCapabilityMap.isEmpty()) { - if (staticNatServiceCapabilityMap.keySet().size() > 2) { - throw new InvalidParameterValueException("Only " + Capability.ElasticIp.getName() + " and " + Capability.AssociatePublicIP.getName() + " capabilitiy can be sepcified for static nat service"); + if (staticNatServiceCapabilityMap.keySet().size() > 1) { + throw new InvalidParameterValueException("Only " + Capability.ElasticIp.getName() + " capability can be specified for static nat service"); } - boolean eipEnabled = false; - boolean eipDisabled = false; - boolean associatePublicIP = true; + for (Capability capability : staticNatServiceCapabilityMap.keySet()) { String value = staticNatServiceCapabilityMap.get(capability); if (capability == Capability.ElasticIp) { - eipEnabled = value.contains("true"); - eipDisabled = value.contains("false"); - if (!eipEnabled && !eipDisabled) { + boolean enabled = value.contains("true"); + boolean disabled = value.contains("false"); + if (!enabled && !disabled) { throw new InvalidParameterValueException("Unknown specified value for " + Capability.ElasticIp.getName()); } - } else if (capability == Capability.AssociatePublicIP) { - if (value.contains("true")) { - associatePublicIP = true; - } else if (value.contains("false")) { - associatePublicIP = false; - } else { - throw new InvalidParameterValueException("Unknown specified value for " + Capability.AssociatePublicIP.getName()); - } } else { - throw new InvalidParameterValueException("Only " + Capability.ElasticIp.getName() + " and " + Capability.AssociatePublicIP.getName() + " capabilitiy can be sepcified for static nat service"); - } - if (eipDisabled && associatePublicIP) { - throw new InvalidParameterValueException("Capability " + Capability.AssociatePublicIP.getName() + " can only be set when capability " + Capability.ElasticIp.getName() + " is true"); + throw new InvalidParameterValueException("Only " + Capability.ElasticIp.getName() + " capability can be specified for static nat service"); } } } @@ -3243,7 +3230,6 @@ public class ConfigurationManagerImpl implements ConfigurationManager, Configura boolean sharedSourceNat = false; boolean redundantRouter = false; boolean elasticIp = false; - boolean associatePublicIp = false; boolean inline = false; if (serviceCapabilityMap != null && !serviceCapabilityMap.isEmpty()) { Map lbServiceCapabilityMap = serviceCapabilityMap.get(Service.Lb); @@ -3293,17 +3279,13 @@ public class ConfigurationManagerImpl implements ConfigurationManager, Configura String param = staticNatServiceCapabilityMap.get(Capability.ElasticIp); if (param != null) { elasticIp = param.contains("true"); - String associatePublicIP = staticNatServiceCapabilityMap.get(Capability.AssociatePublicIP); - if (associatePublicIP != null) { - associatePublicIp = associatePublicIP.contains("true"); - } } } } NetworkOfferingVO offering = new NetworkOfferingVO(name, displayText, trafficType, systemOnly, specifyVlan, networkRate, multicastRate, isDefault, availability, tags, type, conserveMode, dedicatedLb, - sharedSourceNat, redundantRouter, elasticIp, elasticLb, associatePublicIp, specifyIpRanges, inline); + sharedSourceNat, redundantRouter, elasticIp, elasticLb, specifyIpRanges, inline); if (serviceOfferingId != null) { offering.setServiceOfferingId(serviceOfferingId); diff --git a/server/src/com/cloud/network/rules/RulesManagerImpl.java b/server/src/com/cloud/network/rules/RulesManagerImpl.java index dd091740021..a75aca3a522 100755 --- a/server/src/com/cloud/network/rules/RulesManagerImpl.java +++ b/server/src/com/cloud/network/rules/RulesManagerImpl.java @@ -16,18 +16,6 @@ // under the License. package com.cloud.network.rules; -import java.util.ArrayList; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.Set; - -import javax.ejb.Local; -import javax.naming.ConfigurationException; - -import org.apache.cloudstack.api.command.user.firewall.ListPortForwardingRulesCmd; -import org.apache.log4j.Logger; - import com.cloud.configuration.ConfigurationManager; import com.cloud.domain.dao.DomainDao; import com.cloud.event.ActionEvent; @@ -65,13 +53,8 @@ import com.cloud.utils.Pair; import com.cloud.utils.Ternary; import com.cloud.utils.component.Inject; import com.cloud.utils.component.Manager; -import com.cloud.utils.db.DB; -import com.cloud.utils.db.Filter; -import com.cloud.utils.db.JoinBuilder; -import com.cloud.utils.db.SearchBuilder; -import com.cloud.utils.db.SearchCriteria; +import com.cloud.utils.db.*; import com.cloud.utils.db.SearchCriteria.Op; -import com.cloud.utils.db.Transaction; import com.cloud.utils.exception.CloudRuntimeException; import com.cloud.utils.net.Ip; import com.cloud.vm.Nic; @@ -80,6 +63,7 @@ import com.cloud.vm.VirtualMachine; import com.cloud.vm.VirtualMachine.Type; import com.cloud.vm.dao.NicDao; import com.cloud.vm.dao.UserVmDao; +import org.apache.cloudstack.api.command.user.firewall.ListPortForwardingRulesCmd; import org.apache.log4j.Logger; import javax.ejb.Local; @@ -1189,12 +1173,11 @@ public class RulesManagerImpl implements RulesManager, RulesService, Manager { Network guestNetwork = _networkMgr.getNetwork(ipAddress.getAssociatedWithNetworkId()); NetworkOffering offering = _configMgr.getNetworkOffering(guestNetwork.getNetworkOfferingId()); if (offering.getElasticIp()) { - if (offering.getAssociatePublicIP()) { - getSystemIpAndEnableStaticNatForVm(_vmDao.findById(vmId), true); - return true; - } + getSystemIpAndEnableStaticNatForVm(_vmDao.findById(vmId), true); + return true; + } else { + return disableStaticNat(ipId, caller, ctx.getCallerUserId(), false); } - return disableStaticNat(ipId, caller, ctx.getCallerUserId(), false); } @Override @@ -1380,11 +1363,6 @@ public class RulesManagerImpl implements RulesManager, RulesService, Manager { Network guestNetwork = _networkMgr.getNetwork(nic.getNetworkId()); NetworkOffering offering = _configMgr.getNetworkOffering(guestNetwork.getNetworkOfferingId()); if (offering.getElasticIp()) { - boolean isSystemVM = (vm.getType() == Type.ConsoleProxy || vm.getType() == Type.SecondaryStorageVm); - // for user VM's associate public IP only if offering is marked to associate a public IP by default on start of VM - if (!isSystemVM && !offering.getAssociatePublicIP()) { - continue; - } // check if there is already static nat enabled if (_ipAddressDao.findByAssociatedVmId(vm.getId()) != null && !getNewIp) { s_logger.debug("Vm " + vm + " already has ip associated with it in guest network " + guestNetwork); @@ -1399,6 +1377,7 @@ public class RulesManagerImpl implements RulesManager, RulesService, Manager { s_logger.debug("Allocated system ip " + ip + ", now enabling static nat on it for vm " + vm); + boolean isSystemVM = (vm.getType() == Type.ConsoleProxy || vm.getType() == Type.SecondaryStorageVm); try { success = enableStaticNat(ip.getId(), vm.getId(), guestNetwork.getId(), isSystemVM); } catch (NetworkRuleConflictException ex) { diff --git a/server/src/com/cloud/offerings/NetworkOfferingVO.java b/server/src/com/cloud/offerings/NetworkOfferingVO.java index 8de93d87b54..efaca764020 100755 --- a/server/src/com/cloud/offerings/NetworkOfferingVO.java +++ b/server/src/com/cloud/offerings/NetworkOfferingVO.java @@ -16,26 +16,10 @@ // under the License. package com.cloud.offerings; -import com.cloud.network.Networks; - -import java.util.Date; -import java.util.UUID; - -import javax.persistence.Column; -import javax.persistence.Entity; -import javax.persistence.EnumType; -import javax.persistence.Enumerated; -import javax.persistence.GeneratedValue; -import javax.persistence.GenerationType; -import javax.persistence.Id; -import javax.persistence.Table; - -import org.apache.cloudstack.api.Identity; import com.cloud.network.Network; import com.cloud.network.Networks.TrafficType; import com.cloud.offering.NetworkOffering; import com.cloud.utils.db.GenericDao; -import org.apache.cloudstack.api.InternalIdentity; import javax.persistence.*; import java.util.Date; @@ -129,9 +113,6 @@ public class NetworkOfferingVO implements NetworkOffering { @Column(name = "elastic_lb_service") boolean elasticLb; - @Column(name = "eip_associate_public_ip") - boolean eipAssociatePublicIp; - @Column(name = "inline") boolean inline; @@ -295,21 +276,19 @@ public class NetworkOfferingVO implements NetworkOffering { this.redundantRouter = false; this.elasticIp = false; this.elasticLb = false; - this.eipAssociatePublicIp = true; this.inline = false; this.specifyIpRanges = specifyIpRanges; } public NetworkOfferingVO(String name, String displayText, TrafficType trafficType, boolean systemOnly, boolean specifyVlan, Integer rateMbps, Integer multicastRateMbps, boolean isDefault, Availability availability, String tags, Network.GuestType guestType, boolean conserveMode, boolean dedicatedLb, boolean sharedSourceNat, boolean redundantRouter, boolean elasticIp, boolean elasticLb, - boolean associatePublicIP, boolean specifyIpRanges, boolean inline) { + boolean specifyIpRanges, boolean inline) { this(name, displayText, trafficType, systemOnly, specifyVlan, rateMbps, multicastRateMbps, isDefault, availability, tags, guestType, conserveMode, specifyIpRanges); this.dedicatedLB = dedicatedLb; this.sharedSourceNat = sharedSourceNat; this.redundantRouter = redundantRouter; this.elasticIp = elasticIp; this.elasticLb = elasticLb; - this.eipAssociatePublicIp = associatePublicIP; this.inline = inline; } @@ -372,11 +351,6 @@ public class NetworkOfferingVO implements NetworkOffering { return elasticIp; } - @Override - public boolean getAssociatePublicIP() { - return eipAssociatePublicIp; - } - @Override public boolean getElasticLb() { return elasticLb; diff --git a/server/src/com/cloud/server/ConfigurationServerImpl.java b/server/src/com/cloud/server/ConfigurationServerImpl.java index 7e5f42445d5..5d246281630 100755 --- a/server/src/com/cloud/server/ConfigurationServerImpl.java +++ b/server/src/com/cloud/server/ConfigurationServerImpl.java @@ -70,7 +70,6 @@ import com.cloud.utils.db.Transaction; import com.cloud.utils.exception.CloudRuntimeException; import com.cloud.utils.net.NetUtils; import com.cloud.utils.script.Script; -import com.cloud.uuididentity.dao.IdentityDao; import org.apache.commons.codec.binary.Base64; import org.apache.log4j.Logger; @@ -972,7 +971,7 @@ public class ConfigurationServerImpl implements ConfigurationServer { "Offering for Shared networks with Elastic IP and Elastic LB capabilities", TrafficType.Guest, false, true, null, null, true, Availability.Optional, - null, Network.GuestType.Shared, true, false, false, false, true, true, true, true, false); + null, Network.GuestType.Shared, true, false, false, false, true, true, true, false); defaultNetscalerNetworkOffering.setState(NetworkOffering.State.Enabled); defaultNetscalerNetworkOffering = _networkOfferingDao.persistDefaultNetworkOffering(defaultNetscalerNetworkOffering); diff --git a/server/src/com/cloud/upgrade/dao/Upgrade40to41.java b/server/src/com/cloud/upgrade/dao/Upgrade40to41.java index e23837d49f8..cd9e20c6a46 100644 --- a/server/src/com/cloud/upgrade/dao/Upgrade40to41.java +++ b/server/src/com/cloud/upgrade/dao/Upgrade40to41.java @@ -22,12 +22,6 @@ import com.cloud.utils.script.Script; import java.io.File; import java.sql.Connection; -import java.sql.PreparedStatement; -import java.sql.ResultSet; -import java.sql.SQLException; - -import com.cloud.utils.exception.CloudRuntimeException; -import com.cloud.utils.script.Script; /** * @author htrippaers @@ -84,7 +78,7 @@ public class Upgrade40to41 implements DbUpgrade { */ @Override public void performDataMigration(Connection conn) { - upgradeEIPNetworkOfferings(conn); + } /* (non-Javadoc) @@ -95,36 +89,4 @@ public class Upgrade40to41 implements DbUpgrade { return new File[0]; } - private void upgradeEIPNetworkOfferings(Connection conn) { - PreparedStatement pstmt = null; - ResultSet rs = null; - - try { - pstmt = conn.prepareStatement("select id, elastic_ip_service from `cloud`.`network_offerings` where traffic_type='Guest'"); - rs = pstmt.executeQuery(); - while (rs.next()) { - long id = rs.getLong(1); - // check if elastic IP service is enabled for network offering - if (rs.getLong(2) != 0) { - //update network offering with eip_associate_public_ip set to true - pstmt = conn.prepareStatement("UPDATE `cloud`.`network_offerings` set eip_associate_public_ip=? where id=?"); - pstmt.setBoolean(1, true); - pstmt.setLong(2, id); - pstmt.executeUpdate(); - } - } - } catch (SQLException e) { - throw new CloudRuntimeException("Unable to set elastic_ip_service for network offerings with EIP service enabled.", e); - } finally { - try { - if (rs != null) { - rs.close(); - } - if (pstmt != null) { - pstmt.close(); - } - } catch (SQLException e) { - } - } - } } diff --git a/server/src/com/cloud/vm/UserVmManagerImpl.java b/server/src/com/cloud/vm/UserVmManagerImpl.java index f3aca68172f..a6fbdb17915 100755 --- a/server/src/com/cloud/vm/UserVmManagerImpl.java +++ b/server/src/com/cloud/vm/UserVmManagerImpl.java @@ -16,32 +16,6 @@ // under the License. package com.cloud.vm; -import java.util.ArrayList; -import java.util.Date; -import java.util.HashMap; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.UUID; -import java.util.concurrent.Executors; -import java.util.concurrent.ScheduledExecutorService; -import java.util.concurrent.TimeUnit; - -import javax.ejb.Local; -import javax.naming.ConfigurationException; - -import org.apache.cloudstack.api.command.user.template.CreateTemplateCmd; -import org.apache.cloudstack.api.command.user.vm.*; -import org.apache.cloudstack.api.command.user.vmgroup.CreateVMGroupCmd; -import org.apache.cloudstack.api.command.user.vmgroup.DeleteVMGroupCmd; -import org.apache.cloudstack.api.command.user.volume.AttachVolumeCmd; -import org.apache.cloudstack.api.command.user.volume.DetachVolumeCmd; -import org.apache.commons.codec.binary.Base64; -import org.apache.log4j.Logger; - -import org.apache.cloudstack.acl.ControlledEntity.ACLType; -import org.apache.cloudstack.acl.SecurityChecker.AccessType; import com.cloud.agent.AgentManager; import com.cloud.agent.api.*; import com.cloud.agent.api.storage.CreatePrivateTemplateAnswer; @@ -53,17 +27,6 @@ import com.cloud.alert.AlertManager; import com.cloud.api.ApiDBUtils; import com.cloud.api.query.dao.UserVmJoinDao; import com.cloud.api.query.vo.UserVmJoinVO; - -import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.command.admin.vm.AssignVMCmd; -import org.apache.cloudstack.api.command.user.vm.DeployVMCmd; -import org.apache.cloudstack.api.command.user.vm.DestroyVMCmd; -import org.apache.cloudstack.api.command.user.vm.RebootVMCmd; -import org.apache.cloudstack.api.command.admin.vm.RecoverVMCmd; -import org.apache.cloudstack.api.command.user.vm.ResetVMPasswordCmd; -import org.apache.cloudstack.api.command.user.vm.RestoreVMCmd; -import org.apache.cloudstack.api.command.user.vm.UpdateVMCmd; -import org.apache.cloudstack.api.command.user.vm.UpgradeVMCmd; import com.cloud.async.AsyncJobExecutor; import com.cloud.async.AsyncJobManager; import com.cloud.async.AsyncJobVO; @@ -151,12 +114,7 @@ import com.cloud.utils.component.Inject; import com.cloud.utils.component.Manager; import com.cloud.utils.concurrency.NamedThreadFactory; import com.cloud.utils.crypt.RSAHelper; -import com.cloud.utils.db.DB; -import com.cloud.utils.db.Filter; -import com.cloud.utils.db.GlobalLock; -import com.cloud.utils.db.SearchBuilder; -import com.cloud.utils.db.SearchCriteria; -import com.cloud.utils.db.Transaction; +import com.cloud.utils.db.*; import com.cloud.utils.db.SearchCriteria.Func; import com.cloud.utils.exception.CloudRuntimeException; import com.cloud.utils.exception.ExecutionException; @@ -164,6 +122,26 @@ import com.cloud.utils.fsm.NoTransitionException; import com.cloud.utils.net.NetUtils; import com.cloud.vm.VirtualMachine.State; import com.cloud.vm.dao.*; +import org.apache.cloudstack.acl.ControlledEntity.ACLType; +import org.apache.cloudstack.acl.SecurityChecker.AccessType; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.command.admin.vm.AssignVMCmd; +import org.apache.cloudstack.api.command.admin.vm.RecoverVMCmd; +import org.apache.cloudstack.api.command.user.template.CreateTemplateCmd; +import org.apache.cloudstack.api.command.user.vm.*; +import org.apache.cloudstack.api.command.user.vmgroup.CreateVMGroupCmd; +import org.apache.cloudstack.api.command.user.vmgroup.DeleteVMGroupCmd; +import org.apache.cloudstack.api.command.user.volume.AttachVolumeCmd; +import org.apache.cloudstack.api.command.user.volume.DetachVolumeCmd; +import org.apache.commons.codec.binary.Base64; +import org.apache.log4j.Logger; + +import javax.ejb.Local; +import javax.naming.ConfigurationException; +import java.util.*; +import java.util.concurrent.Executors; +import java.util.concurrent.ScheduledExecutorService; +import java.util.concurrent.TimeUnit; @Local(value = { UserVmManager.class, UserVmService.class }) public class UserVmManagerImpl implements UserVmManager, UserVmService, Manager { @@ -2788,10 +2766,6 @@ public class UserVmManagerImpl implements UserVmManager, UserVmService, Manager if (ip != null && ip.getSystem()) { UserContext ctx = UserContext.current(); try { - long networkId = ip.getAssociatedWithNetworkId(); - Network guestNetwork = _networkMgr.getNetwork(networkId); - NetworkOffering offering = _configMgr.getNetworkOffering(guestNetwork.getNetworkOfferingId()); - assert (offering.getAssociatePublicIP() == true) : "User VM should not have system owned public IP associated with it when offering configured not to associate public IP."; _rulesMgr.disableStaticNat(ip.getId(), ctx.getCaller(), ctx.getCallerUserId(), true); } catch (Exception ex) { s_logger.warn("Failed to disable static nat and release system ip " + ip + " as a part of vm " + profile.getVirtualMachine() + " stop due to exception ", ex); diff --git a/setup/db/create-schema.sql b/setup/db/create-schema.sql index 37d52539f16..174f53cd7ba 100755 --- a/setup/db/create-schema.sql +++ b/setup/db/create-schema.sql @@ -306,7 +306,6 @@ CREATE TABLE `cloud`.`network_offerings` ( `state` char(32) COMMENT 'state of the network offering that has Disabled value by default', `guest_type` char(32) COMMENT 'type of guest network that can be shared or isolated', `elastic_ip_service` int(1) unsigned NOT NULL DEFAULT 0 COMMENT 'true if the network offering provides elastic ip service', - `eip_associate_public_ip` int(1) unsigned NOT NULL DEFAULT 0 COMMENT 'true if public IP is associated with user VM creation by default when EIP service is enabled.', `elastic_lb_service` int(1) unsigned NOT NULL DEFAULT 0 COMMENT 'true if the network offering provides elastic lb service', `specify_ip_ranges` int(1) unsigned NOT NULL DEFAULT 0 COMMENT 'true if the network offering provides an ability to define ip ranges', `inline` int(1) unsigned NOT NULL DEFAULT 0 COMMENT 'Is this network offering LB provider is in inline mode', diff --git a/setup/db/db/schema-40to410.sql b/setup/db/db/schema-40to410.sql index bf3fb303e5b..c115135d006 100644 --- a/setup/db/db/schema-40to410.sql +++ b/setup/db/db/schema-40to410.sql @@ -58,7 +58,6 @@ ALTER TABLE `cloud`.`snapshots` ADD COLUMN `s3_id` bigint unsigned COMMENT 'S3 t ALTER TABLE `cloud`.`snapshots` ADD CONSTRAINT `fk_snapshots__s3_id` FOREIGN KEY `fk_snapshots__s3_id` (`s3_id`) REFERENCES `s3` (`id`); -ALTER TABLE `cloud`.`network_offerings` ADD COLUMN `eip_associate_public_ip` int(1) unsigned NOT NULL DEFAULT 0 COMMENT 'true if public IP is associated with user VM creation by default when EIP service is enabled.' AFTER `elastic_ip_service`; ALTER TABLE `cloud`.`network_offerings` ADD COLUMN `inline` int(1) unsigned NOT NULL DEFAULT 0 COMMENT 'Is this network offering LB provider is in inline mode'; ALTER TABLE `cloud`.`external_load_balancer_devices` DROP COLUMN `is_inline`; From 156ed7a336643963040aa485406da8cd0e0564ed Mon Sep 17 00:00:00 2001 From: Murali Reddy Date: Wed, 16 Jan 2013 15:58:44 +0530 Subject: [PATCH 412/421] Revert "Summary: partical check-in for L4-L7 network services in the shared" Reverting due to IP clearance issued for the commit done as part of CLOUDSTACK-312 This reverts commit d4c604cfd8ec6b385de7abf694a936e89add0f38. --- .../com/cloud/network/NetworkManagerImpl.java | 80 +++++++------------ 1 file changed, 29 insertions(+), 51 deletions(-) diff --git a/server/src/com/cloud/network/NetworkManagerImpl.java b/server/src/com/cloud/network/NetworkManagerImpl.java index 206392dce49..47db4cb82ae 100755 --- a/server/src/com/cloud/network/NetworkManagerImpl.java +++ b/server/src/com/cloud/network/NetworkManagerImpl.java @@ -980,14 +980,14 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag @Override @ActionEvent(eventType = EventTypes.EVENT_NET_IP_ASSIGN, eventDescription = "allocating Ip", create = true) - public IpAddress allocateIP(Account ipOwner, long zoneId, Long networkId) + public IpAddress allocateIP(Account ipOwner, long zoneId, Long networkId) throws ResourceAllocationException, InsufficientAddressCapacityException, ConcurrentOperationException { - if (networkId != null) { Network network = _networksDao.findById(networkId); if (network == null) { throw new InvalidParameterValueException("Invalid network id is given"); } + if (network.getGuestType() == Network.GuestType.Shared) { DataCenter zone = _configMgr.getZone(zoneId); if (zone == null) { @@ -1002,9 +1002,9 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag if (s_logger.isDebugEnabled()) { s_logger.debug("Associate IP address called by the user " + callerUserId + " account " + ipOwner.getId()); } - return allocateIp(ipOwner, false, caller, zone); + return allocateIp(ipOwner, false, caller, callerUserId, zone); } else { - throw new InvalidParameterValueException("Associate IP address can only be called on the shared networks in the advanced zone" + + throw new InvalidParameterValueException("Associate IP address can only called on the shared networks in the advanced zone" + " with Firewall/Source Nat/Static Nat/Port Forwarding/Load balancing services enabled"); } } @@ -1022,11 +1022,11 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag DataCenter zone = _configMgr.getZone(zoneId); - return allocateIp(ipOwner, isSystem, caller, zone); + return allocateIp(ipOwner, isSystem, caller, callerUserId, zone); } @DB - public IpAddress allocateIp(Account ipOwner, boolean isSystem, Account caller, DataCenter zone) + public IpAddress allocateIp(Account ipOwner, boolean isSystem, Account caller, long callerUserId, DataCenter zone) throws ConcurrentOperationException, ResourceAllocationException, InsufficientAddressCapacityException { @@ -1047,7 +1047,7 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag Account accountToLock = null; try { if (s_logger.isDebugEnabled()) { - s_logger.debug("Associate IP address called by the user " + caller.getId()); + s_logger.debug("Associate IP address called by the user " + callerUserId + " account " + ipOwner.getId()); } accountToLock = _accountDao.acquireInLockTable(ipOwner.getId()); if (accountToLock == null) { @@ -1133,13 +1133,8 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag } DataCenter zone = _configMgr.getZone(network.getDataCenterId()); - if (network.getGuestType() == Network.GuestType.Shared && zone.getNetworkType() == NetworkType.Advanced) { - if (isSharedNetworkOfferingWithServices(network.getNetworkOfferingId())) { - _accountMgr.checkAccess(UserContext.current().getCaller(), AccessType.UseNetwork, false, network); - } else { - throw new InvalidParameterValueException("IP can be associated with guest network of 'shared' type only if" + - "network service Source Nat, Static Nat, Port Forwarding, Load balancing, firewall are enabled in the network"); - } + if (network.getGuestType() == Network.GuestType.Shared && zone.getNetworkType() == NetworkType.Advanced && isSharedNetworkOfferingWithServices(network.getNetworkOfferingId())) { + _accountMgr.checkAccess(UserContext.current().getCaller(), AccessType.UseNetwork, false, network); } else { _accountMgr.checkAccess(caller, null, true, ipToAssoc); } @@ -2011,11 +2006,6 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag } } - @Override - public boolean equals(Object o) { - return super.equals(o); //To change body of overridden methods use File | Settings | File Templates. - } - private void implementNetworkElementsAndResources(DeployDestination dest, ReservationContext context, NetworkVO network, NetworkOfferingVO offering) throws ConcurrentOperationException, InsufficientAddressCapacityException, ResourceUnavailableException, InsufficientCapacityException { @@ -2510,36 +2500,17 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag } } - private void checkSharedNetworkCidrOverlap(Long zoneId, long physicalNetworkId, String cidr) { - if (zoneId == null || cidr == null) { + private void checkSharedNetworkCidrOverlap(Long zoneId, String cidr) { + if (zoneId == null) { return; } - DataCenter zone = _dcDao.findById(zoneId); - List networks = _networksDao.listByZone(zoneId); - Map networkToCidr = new HashMap(); - - // check for CIDR overlap with all possible CIDR for isolated guest networks - // in the zone when using external networking - PhysicalNetworkVO pNetwork = _physicalNetworkDao.findById(physicalNetworkId); - if (pNetwork.getVnet() != null) { - String vlanRange[] = pNetwork.getVnet().split("-"); - int lowestVlanTag = Integer.valueOf(vlanRange[0]); - int highestVlanTag = Integer.valueOf(vlanRange[1]); - for (int vlan=lowestVlanTag; vlan <= highestVlanTag; ++vlan) { - int offset = vlan - lowestVlanTag; - String globalVlanBits = _configDao.getValue(Config.GuestVlanBits.key()); - int cidrSize = 8 + Integer.parseInt(globalVlanBits); - String guestNetworkCidr = zone.getGuestNetworkCidr(); - String[] cidrTuple = guestNetworkCidr.split("\\/"); - long newCidrAddress = (NetUtils.ip2Long(cidrTuple[0]) & 0xff000000) | (offset << (32 - cidrSize)); - if (NetUtils.isNetworksOverlap(NetUtils.long2Ip(newCidrAddress), cidr)) { - throw new InvalidParameterValueException("Specified CIDR for shared network conflict with CIDR that is reserved for zone vlan " + vlan); - } - } + if (cidr == null) { + return; } - // check for CIDR overlap with all CIDR's of the shared networks in the zone + List networks = _networksDao.listByZone(zoneId); + Map networkToCidr = new HashMap(); for (NetworkVO network : networks) { if (network.getGuestType() == GuestType.Isolated) { continue; @@ -2548,15 +2519,22 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag networkToCidr.put(network.getId(), network.getCidr()); } } - if (networkToCidr != null && !networkToCidr.isEmpty()) { - for (long networkId : networkToCidr.keySet()) { - String ntwkCidr = networkToCidr.get(networkId); - if (NetUtils.isNetworksOverlap(ntwkCidr, cidr)) { - throw new InvalidParameterValueException("Specified CIDR for shared network conflict with CIDR of a shared network in the zone."); - } + + //TODO: check for CIDR overlap with all possible CIDR for guest networks in the zone + //when using external networking + + if (networkToCidr == null || networkToCidr.isEmpty()) { + return; + } + + for (long networkId : networkToCidr.keySet()) { + String ntwkCidr = networkToCidr.get(networkId); + if (NetUtils.isNetworksOverlap(ntwkCidr, cidr)) { + throw new InvalidParameterValueException("Warning: The specified existing network has conflict CIDR subnets with new network!"); } } } + public void checkVirtualNetworkCidrOverlap(Long zoneId, String cidr) { if (zoneId == null) { return; @@ -2784,7 +2762,7 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag if (ntwkOff.getGuestType() == GuestType.Shared && (zone.getNetworkType() == NetworkType.Advanced) && isSharedNetworkOfferingWithServices(networkOfferingId)) { // validate if CIDR specified overlaps with any of the CIDR's allocated for isolated networks and shared networks in the zone - checkSharedNetworkCidrOverlap(zoneId, pNtwk.getId(), cidr); + checkSharedNetworkCidrOverlap(zoneId, cidr); } else { throw new InvalidParameterValueException("Cannot specify CIDR when using network offering with external devices!"); } From 316c5267ccc182e18c4201a72cdf8ccc739e130a Mon Sep 17 00:00:00 2001 From: Murali Reddy Date: Wed, 16 Jan 2013 16:04:14 +0530 Subject: [PATCH 413/421] Revert " Summary: check-in for L4-L7 network services in the shared network in" This reverts commit 7fcfcdf91e49d64375171c9ae7fe61067aa59b6e. Reverting due to IP clearance issued for the commit done as part of CLOUDSTACK-312 --- .../com/cloud/network/NetworkManagerImpl.java | 17 +++++------------ 1 file changed, 5 insertions(+), 12 deletions(-) diff --git a/server/src/com/cloud/network/NetworkManagerImpl.java b/server/src/com/cloud/network/NetworkManagerImpl.java index 47db4cb82ae..f378aa4fd5a 100755 --- a/server/src/com/cloud/network/NetworkManagerImpl.java +++ b/server/src/com/cloud/network/NetworkManagerImpl.java @@ -2951,11 +2951,10 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag throw new InvalidParameterValueException("Network with vlan " + vlanId + " already exists in zone " + zoneId); } } else { - //don't allow to creating shared network with given Vlan ID, if there already exists a isolated network or - //shared network with same Vlan ID in the zone - if (_networksDao.countByZoneUriAndGuestType(zoneId, uri, GuestType.Isolated) > 0 || - _networksDao.countByZoneUriAndGuestType(zoneId, uri, GuestType.Shared) > 0) { - throw new InvalidParameterValueException("There is a isolated/shared network with vlan id: " + vlanId + " already exists " + "in zone " + zoneId); + //don't allow to create Shared network with Vlan that already exists in the zone for Isolated networks + if (_networksDao.countByZoneUriAndGuestType(zoneId, uri, GuestType.Isolated) > 0) { + throw new InvalidParameterValueException("Isolated network with vlan " + vlanId + " already exists " + + "in zone " + zoneId); } } } @@ -3543,13 +3542,7 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag applyProfileToNetwork(network, profile); - DataCenterVO zone = _dcDao.findById(network.getDataCenterId()); - if (isSharedNetworkOfferingWithServices(network.getNetworkOfferingId()) && (zone.getNetworkType() == NetworkType.Advanced)) { - network.setState(Network.State.Setup); - } else { - network.setState(Network.State.Allocated); - } - + network.setState(Network.State.Allocated); network.setRestartRequired(false); _networksDao.update(network.getId(), network); _networksDao.clearCheckForGc(networkId); From 88a0b5ac488c6ec3b8a501ee1254a6a962db47fe Mon Sep 17 00:00:00 2001 From: Murali Reddy Date: Wed, 16 Jan 2013 16:05:17 +0530 Subject: [PATCH 414/421] Revert "Summary: partical check-in for L4-L7 network services in the shared" This reverts commit 6657246cd44629c30e6ea21cc4bbd43a42788e12. Reverting due to IP clearance issued for the commit done as part of CLOUDSTACK-312 --- .../cloud/network/element/F5ExternalLoadBalancerElement.java | 2 +- .../network/element/JuniperSRXExternalFirewallElement.java | 3 +-- .../src/com/cloud/network/element/NetscalerElement.java | 3 +-- 3 files changed, 3 insertions(+), 5 deletions(-) diff --git a/plugins/network-elements/f5/src/com/cloud/network/element/F5ExternalLoadBalancerElement.java b/plugins/network-elements/f5/src/com/cloud/network/element/F5ExternalLoadBalancerElement.java index b9739ec21df..70faaccc461 100644 --- a/plugins/network-elements/f5/src/com/cloud/network/element/F5ExternalLoadBalancerElement.java +++ b/plugins/network-elements/f5/src/com/cloud/network/element/F5ExternalLoadBalancerElement.java @@ -122,7 +122,7 @@ public class F5ExternalLoadBalancerElement extends ExternalLoadBalancerDeviceMan ConfigurationDao _configDao; private boolean canHandle(Network config) { - if ((config.getGuestType() != Network.GuestType.Isolated && config.getGuestType() != Network.GuestType.Shared) || config.getTrafficType() != TrafficType.Guest) { + if (config.getGuestType() != Network.GuestType.Isolated || config.getTrafficType() != TrafficType.Guest) { s_logger.trace("Not handling network with Type " + config.getGuestType() + " and traffic type " + config.getTrafficType()); return false; } diff --git a/plugins/network-elements/juniper-srx/src/com/cloud/network/element/JuniperSRXExternalFirewallElement.java b/plugins/network-elements/juniper-srx/src/com/cloud/network/element/JuniperSRXExternalFirewallElement.java index 6e9d32daa99..ead2af9396d 100644 --- a/plugins/network-elements/juniper-srx/src/com/cloud/network/element/JuniperSRXExternalFirewallElement.java +++ b/plugins/network-elements/juniper-srx/src/com/cloud/network/element/JuniperSRXExternalFirewallElement.java @@ -130,8 +130,7 @@ public class JuniperSRXExternalFirewallElement extends ExternalFirewallDeviceMan private boolean canHandle(Network network, Service service) { DataCenter zone = _configMgr.getZone(network.getDataCenterId()); - if ((zone.getNetworkType() == NetworkType.Advanced && !(network.getGuestType() == Network.GuestType.Isolated || network.getGuestType() == Network.GuestType.Shared )) - || (zone.getNetworkType() == NetworkType.Basic && network.getGuestType() != Network.GuestType.Shared)) { + if ((zone.getNetworkType() == NetworkType.Advanced && network.getGuestType() != Network.GuestType.Isolated) || (zone.getNetworkType() == NetworkType.Basic && network.getGuestType() != Network.GuestType.Shared)) { s_logger.trace("Element " + getProvider().getName() + "is not handling network type = " + network.getGuestType()); return false; } diff --git a/plugins/network-elements/netscaler/src/com/cloud/network/element/NetscalerElement.java b/plugins/network-elements/netscaler/src/com/cloud/network/element/NetscalerElement.java index a1782107e19..c0f91bb42d2 100644 --- a/plugins/network-elements/netscaler/src/com/cloud/network/element/NetscalerElement.java +++ b/plugins/network-elements/netscaler/src/com/cloud/network/element/NetscalerElement.java @@ -154,8 +154,7 @@ StaticNatServiceProvider { private boolean canHandle(Network config, Service service) { DataCenter zone = _dcDao.findById(config.getDataCenterId()); - boolean handleInAdvanceZone = (zone.getNetworkType() == NetworkType.Advanced && - (config.getGuestType() == Network.GuestType.Isolated || config.getGuestType() == Network.GuestType.Shared) && config.getTrafficType() == TrafficType.Guest); + boolean handleInAdvanceZone = (zone.getNetworkType() == NetworkType.Advanced && config.getGuestType() == Network.GuestType.Isolated && config.getTrafficType() == TrafficType.Guest); boolean handleInBasicZone = (zone.getNetworkType() == NetworkType.Basic && config.getGuestType() == Network.GuestType.Shared && config.getTrafficType() == TrafficType.Guest); if (!(handleInAdvanceZone || handleInBasicZone)) { From 4b67340d8cda021394892d8e4b0adfba493b42dd Mon Sep 17 00:00:00 2001 From: Murali Reddy Date: Wed, 16 Jan 2013 16:43:37 +0530 Subject: [PATCH 415/421] Revert "Summary: partical check-in for L4-L7 network services in the shared" This reverts commits 0de5a145e4f06420a4eb1867309af674c16ace7c, 28bbf6c52798c9bd298952844250fbc3cb92dce0 Reverting due to IP clearance issues for the commits done as part of CLOUDSTACK-312 --- api/src/com/cloud/network/NetworkService.java | 2 +- .../user/address/AssociateIPAddrCmd.java | 2 +- .../com/cloud/network/NetworkManagerImpl.java | 251 +++--------------- .../cloud/network/MockNetworkManagerImpl.java | 2 +- .../com/cloud/vpc/MockNetworkManagerImpl.java | 35 +-- 5 files changed, 51 insertions(+), 241 deletions(-) diff --git a/api/src/com/cloud/network/NetworkService.java b/api/src/com/cloud/network/NetworkService.java index 39a746e6776..b3332a345b3 100755 --- a/api/src/com/cloud/network/NetworkService.java +++ b/api/src/com/cloud/network/NetworkService.java @@ -41,7 +41,7 @@ public interface NetworkService { List getIsolatedNetworksOwnedByAccountInZone(long zoneId, Account owner); - IpAddress allocateIP(Account ipOwner, long zoneId, Long networkId) throws ResourceAllocationException, + IpAddress allocateIP(Account ipOwner, boolean isSystem, long zoneId) throws ResourceAllocationException, InsufficientAddressCapacityException, ConcurrentOperationException; boolean releaseIpAddress(long ipAddressId) throws InsufficientAddressCapacityException; diff --git a/api/src/org/apache/cloudstack/api/command/user/address/AssociateIPAddrCmd.java b/api/src/org/apache/cloudstack/api/command/user/address/AssociateIPAddrCmd.java index 024ba74e8b4..93bb2401d8f 100644 --- a/api/src/org/apache/cloudstack/api/command/user/address/AssociateIPAddrCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/address/AssociateIPAddrCmd.java @@ -213,7 +213,7 @@ public class AssociateIPAddrCmd extends BaseAsyncCreateCmd { @Override public void create() throws ResourceAllocationException{ try { - IpAddress ip = _networkService.allocateIP(_accountService.getAccount(getEntityOwnerId()), getZoneId(), getNetworkId()); + IpAddress ip = _networkService.allocateIP(_accountService.getAccount(getEntityOwnerId()), false, getZoneId()); if (ip != null) { this.setEntityId(ip.getId()); diff --git a/server/src/com/cloud/network/NetworkManagerImpl.java b/server/src/com/cloud/network/NetworkManagerImpl.java index f378aa4fd5a..0a1fcd7e66d 100755 --- a/server/src/com/cloud/network/NetworkManagerImpl.java +++ b/server/src/com/cloud/network/NetworkManagerImpl.java @@ -16,58 +16,19 @@ // under the License. package com.cloud.network; -import java.net.URI; -import java.security.InvalidParameterException; -import java.sql.PreparedStatement; -import java.sql.ResultSet; -import java.sql.SQLException; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Comparator; -import java.util.Date; -import java.util.HashMap; -import java.util.HashSet; -import java.util.Iterator; -import java.util.List; -import java.util.Map; -import java.util.Random; -import java.util.Set; -import java.util.TreeSet; -import java.util.concurrent.Executors; -import java.util.concurrent.ScheduledExecutorService; -import java.util.concurrent.TimeUnit; - -import javax.ejb.Local; -import javax.naming.ConfigurationException; - -import com.cloud.utils.db.*; -import org.apache.cloudstack.api.command.admin.usage.ListTrafficTypeImplementorsCmd; -import org.apache.cloudstack.api.command.user.network.CreateNetworkCmd; -import org.apache.cloudstack.api.command.user.network.RestartNetworkCmd; -import org.apache.log4j.Logger; - -import org.apache.cloudstack.acl.ControlledEntity.ACLType; -import org.apache.cloudstack.acl.SecurityChecker.AccessType; import com.cloud.agent.AgentManager; import com.cloud.agent.Listener; import com.cloud.agent.api.*; import com.cloud.agent.api.to.NicTO; import com.cloud.alert.AlertManager; import com.cloud.api.ApiDBUtils; - -import org.apache.cloudstack.api.command.user.network.ListNetworksCmd; import com.cloud.configuration.Config; import com.cloud.configuration.ConfigurationManager; import com.cloud.configuration.Resource.ResourceType; import com.cloud.configuration.dao.ConfigurationDao; import com.cloud.dc.*; import com.cloud.dc.DataCenter.NetworkType; -import com.cloud.dc.DataCenterVO; -import com.cloud.dc.Pod; -import com.cloud.dc.PodVlanMapVO; -import com.cloud.dc.Vlan; import com.cloud.dc.Vlan.VlanType; -import com.cloud.dc.VlanVO; import com.cloud.dc.dao.AccountVlanMapDao; import com.cloud.dc.dao.DataCenterDao; import com.cloud.dc.dao.PodVlanMapDao; @@ -110,13 +71,6 @@ import com.cloud.network.lb.LoadBalancingRule.LbStickinessPolicy; import com.cloud.network.lb.LoadBalancingRulesManager; import com.cloud.network.rules.*; import com.cloud.network.rules.FirewallRule.Purpose; -import com.cloud.network.rules.FirewallRuleVO; -import com.cloud.network.rules.PortForwardingRule; -import com.cloud.network.rules.PortForwardingRuleVO; -import com.cloud.network.rules.RulesManager; -import com.cloud.network.rules.StaticNat; -import com.cloud.network.rules.StaticNatRule; -import com.cloud.network.rules.StaticNatRuleImpl; import com.cloud.network.rules.dao.PortForwardingRulesDao; import com.cloud.network.vpc.NetworkACLManager; import com.cloud.network.vpc.PrivateIpVO; @@ -145,30 +99,38 @@ import com.cloud.utils.component.Adapters; import com.cloud.utils.component.Inject; import com.cloud.utils.component.Manager; import com.cloud.utils.concurrency.NamedThreadFactory; +import com.cloud.utils.db.*; import com.cloud.utils.db.JoinBuilder.JoinType; import com.cloud.utils.db.SearchCriteria.Op; import com.cloud.utils.exception.CloudRuntimeException; import com.cloud.utils.net.Ip; import com.cloud.utils.net.NetUtils; -import com.cloud.vm.Nic; -import com.cloud.vm.NicProfile; -import com.cloud.vm.NicVO; -import com.cloud.vm.ReservationContext; -import com.cloud.vm.ReservationContextImpl; -import com.cloud.vm.SecondaryStorageVmVO; -import com.cloud.vm.UserVmVO; -import com.cloud.vm.VMInstanceVO; -import com.cloud.vm.VirtualMachine; +import com.cloud.vm.*; import com.cloud.vm.VirtualMachine.Type; -import com.cloud.vm.VirtualMachineProfile; -import com.cloud.vm.VirtualMachineProfileImpl; import com.cloud.vm.dao.DomainRouterDao; import com.cloud.vm.dao.NicDao; import com.cloud.vm.dao.UserVmDao; import com.cloud.vm.dao.VMInstanceDao; import edu.emory.mathcs.backport.java.util.Collections; +import org.apache.cloudstack.acl.ControlledEntity.ACLType; +import org.apache.cloudstack.acl.SecurityChecker.AccessType; +import org.apache.cloudstack.api.command.admin.usage.ListTrafficTypeImplementorsCmd; +import org.apache.cloudstack.api.command.user.network.CreateNetworkCmd; +import org.apache.cloudstack.api.command.user.network.ListNetworksCmd; +import org.apache.cloudstack.api.command.user.network.RestartNetworkCmd; +import org.apache.log4j.Logger; +import javax.ejb.Local; +import javax.naming.ConfigurationException; +import java.net.URI; +import java.security.InvalidParameterException; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; import java.util.*; +import java.util.concurrent.Executors; +import java.util.concurrent.ScheduledExecutorService; +import java.util.concurrent.TimeUnit; /** * NetworkManagerImpl implements NetworkManager. @@ -980,39 +942,6 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag @Override @ActionEvent(eventType = EventTypes.EVENT_NET_IP_ASSIGN, eventDescription = "allocating Ip", create = true) - public IpAddress allocateIP(Account ipOwner, long zoneId, Long networkId) - throws ResourceAllocationException, InsufficientAddressCapacityException, ConcurrentOperationException { - if (networkId != null) { - Network network = _networksDao.findById(networkId); - if (network == null) { - throw new InvalidParameterValueException("Invalid network id is given"); - } - - if (network.getGuestType() == Network.GuestType.Shared) { - DataCenter zone = _configMgr.getZone(zoneId); - if (zone == null) { - throw new InvalidParameterValueException("Invalid zone Id is given"); - } - - // if shared network in the advanced zone, then check the caller against the network for 'AccessType.UseNetwork' - if (isSharedNetworkOfferingWithServices(network.getNetworkOfferingId()) && zone.getNetworkType() == NetworkType.Advanced) { - Account caller = UserContext.current().getCaller(); - long callerUserId = UserContext.current().getCallerUserId(); - _accountMgr.checkAccess(caller, AccessType.UseNetwork, false, network); - if (s_logger.isDebugEnabled()) { - s_logger.debug("Associate IP address called by the user " + callerUserId + " account " + ipOwner.getId()); - } - return allocateIp(ipOwner, false, caller, callerUserId, zone); - } else { - throw new InvalidParameterValueException("Associate IP address can only called on the shared networks in the advanced zone" + - " with Firewall/Source Nat/Static Nat/Port Forwarding/Load balancing services enabled"); - } - } - } - - return allocateIP(ipOwner, false, zoneId); - } - public IpAddress allocateIP(Account ipOwner, boolean isSystem, long zoneId) throws ResourceAllocationException, InsufficientAddressCapacityException, ConcurrentOperationException { Account caller = UserContext.current().getCaller(); @@ -1127,17 +1056,7 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag IPAddressVO ipToAssoc = _ipAddressDao.findById(ipId); if (ipToAssoc != null) { - Network network = _networksDao.findById(networkId); - if (network == null) { - throw new InvalidParameterValueException("Invalid network id is given"); - } - - DataCenter zone = _configMgr.getZone(network.getDataCenterId()); - if (network.getGuestType() == Network.GuestType.Shared && zone.getNetworkType() == NetworkType.Advanced && isSharedNetworkOfferingWithServices(network.getNetworkOfferingId())) { - _accountMgr.checkAccess(UserContext.current().getCaller(), AccessType.UseNetwork, false, network); - } else { - _accountMgr.checkAccess(caller, null, true, ipToAssoc); - } + _accountMgr.checkAccess(caller, null, true, ipToAssoc); owner = _accountMgr.getAccount(ipToAssoc.getAllocatedToAccountId()); } else { s_logger.debug("Unable to find ip address by id: " + ipId); @@ -1164,20 +1083,16 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag throw new InvalidParameterValueException("Ip address can be associated to the network with trafficType " + TrafficType.Guest); } - // Check that network belongs to IP owner - skip this check - // - if zone is basic zone as there is just one guest network, - // - if shared network in Advanced zone - // - and it belongs to the system - if (network.getAccountId() != owner.getId()) { - if (zone.getNetworkType() != NetworkType.Basic && !(zone.getNetworkType() == NetworkType.Advanced && network.getGuestType() == Network.GuestType.Shared)) { - throw new InvalidParameterValueException("The owner of the network is not the same as owner of the IP"); - } + // Check that network belongs to IP owner - skip this check for Basic zone as there is just one guest network, + // and it belongs to the system + if (zone.getNetworkType() != NetworkType.Basic && network.getAccountId() != owner.getId()) { + throw new InvalidParameterValueException("The owner of the network is not the same as owner of the IP"); } - // In Advance zone only allow to do IP assoc - // - for Isolated networks with source nat service enabled - // - for shared networks with source nat service enabled - if (zone.getNetworkType() == NetworkType.Advanced && (!areServicesSupportedInNetwork(network.getId(), Service.SourceNat))) { + // In Advance zone only allow to do IP assoc for Isolated networks with source nat service enabled + if (zone.getNetworkType() == NetworkType.Advanced && + !(network.getGuestType() == GuestType.Isolated && areServicesSupportedInNetwork(network.getId(), + Service.SourceNat))) { throw new InvalidParameterValueException("In zone of type " + NetworkType.Advanced + " ip address can be associated only to the network of guest type " + GuestType.Isolated + " with the " + Service.SourceNat.getName() + " enabled"); @@ -1948,21 +1863,12 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag try { NetworkGuru guru = _networkGurus.get(network.getGuruName()); Network.State state = network.getState(); - if (state == Network.State.Implemented || state == Network.State.Implementing) { + if (state == Network.State.Implemented || state == Network.State.Setup || state == Network.State.Implementing) { s_logger.debug("Network id=" + networkId + " is already implemented"); implemented.set(guru, network); return implemented; } - if (state == Network.State.Setup) { - DataCenterVO zone = _dcDao.findById(network.getDataCenterId()); - if (!isSharedNetworkOfferingWithServices(network.getNetworkOfferingId()) || (zone.getNetworkType() == NetworkType.Basic)) { - s_logger.debug("Network id=" + networkId + " is already implemented"); - implemented.set(guru, network); - return implemented; - } - } - if (s_logger.isDebugEnabled()) { s_logger.debug("Asking " + guru.getName() + " to implement " + network); } @@ -2010,16 +1916,15 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag NetworkVO network, NetworkOfferingVO offering) throws ConcurrentOperationException, InsufficientAddressCapacityException, ResourceUnavailableException, InsufficientCapacityException { - // Associate a source NAT IP (if one isn't already associated with the network) if this is a - // 1) 'Isolated' or 'Shared' guest virtual network in the advance zone - // 2) network has sourceNat service - // 3) network offering does not support a shared source NAT rule + // If this is a 1) guest virtual network 2) network has sourceNat service 3) network offering does not support a + // Shared source NAT rule, + // associate a source NAT IP (if one isn't already associated with the network) boolean sharedSourceNat = offering.getSharedSourceNat(); DataCenter zone = _dcDao.findById(network.getDataCenterId()); - if (!sharedSourceNat && areServicesSupportedInNetwork(network.getId(), Service.SourceNat) - && (network.getGuestType() == Network.GuestType.Isolated || - (network.getGuestType() == Network.GuestType.Shared && zone.getNetworkType() == NetworkType.Advanced))) { + if (network.getGuestType() == Network.GuestType.Isolated + && areServicesSupportedInNetwork(network.getId(), Service.SourceNat) + && !sharedSourceNat) { List ips = null; if (network.getVpcId() != null) { @@ -2500,70 +2405,6 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag } } - private void checkSharedNetworkCidrOverlap(Long zoneId, String cidr) { - if (zoneId == null) { - return; - } - - if (cidr == null) { - return; - } - - List networks = _networksDao.listByZone(zoneId); - Map networkToCidr = new HashMap(); - for (NetworkVO network : networks) { - if (network.getGuestType() == GuestType.Isolated) { - continue; - } - if (network.getCidr() != null) { - networkToCidr.put(network.getId(), network.getCidr()); - } - } - - //TODO: check for CIDR overlap with all possible CIDR for guest networks in the zone - //when using external networking - - if (networkToCidr == null || networkToCidr.isEmpty()) { - return; - } - - for (long networkId : networkToCidr.keySet()) { - String ntwkCidr = networkToCidr.get(networkId); - if (NetUtils.isNetworksOverlap(ntwkCidr, cidr)) { - throw new InvalidParameterValueException("Warning: The specified existing network has conflict CIDR subnets with new network!"); - } - } - } - - public void checkVirtualNetworkCidrOverlap(Long zoneId, String cidr) { - if (zoneId == null) { - return; - } - if (cidr == null) { - return; - } - List networks = _networksDao.listByZone(zoneId); - Map networkToCidr = new HashMap(); - for (NetworkVO network : networks) { - if (network.getGuestType() != GuestType.Isolated) { - continue; - } - if (network.getCidr() != null) { - networkToCidr.put(network.getId(), network.getCidr()); - } - } - if (networkToCidr == null || networkToCidr.isEmpty()) { - return; - } - - for (long networkId : networkToCidr.keySet()) { - String ntwkCidr = networkToCidr.get(networkId); - if (NetUtils.isNetworksOverlap(ntwkCidr, cidr)) { - throw new InvalidParameterValueException("Warning: The specified existing network has conflict CIDR subnets with new network!"); - } - } - } - @Override @DB @ActionEvent(eventType = EventTypes.EVENT_NETWORK_CREATE, eventDescription = "creating network") @@ -2759,16 +2600,9 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag Collection ntwkProviders = finalizeServicesAndProvidersForNetwork(ntwkOff, physicalNetworkId).values(); if (cidr != null && providersConfiguredForExternalNetworking(ntwkProviders)) { - if (ntwkOff.getGuestType() == GuestType.Shared && (zone.getNetworkType() == NetworkType.Advanced) && - isSharedNetworkOfferingWithServices(networkOfferingId)) { - // validate if CIDR specified overlaps with any of the CIDR's allocated for isolated networks and shared networks in the zone - checkSharedNetworkCidrOverlap(zoneId, cidr); - } else { - throw new InvalidParameterValueException("Cannot specify CIDR when using network offering with external devices!"); - } + throw new InvalidParameterValueException("Cannot specify CIDR when using network offering with external devices!"); } - // Vlan is created in 2 cases - works in Advance zone only: // 1) GuestType is Shared // 2) GuestType is Isolated, but SourceNat service is disabled @@ -4488,19 +4322,6 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag return false; } - public boolean isSharedNetworkOfferingWithServices(long networkOfferingId) { - NetworkOfferingVO networkOffering = _networkOfferingDao.findById(networkOfferingId); - if ( (networkOffering.getGuestType() == Network.GuestType.Shared) && ( - areServicesSupportedByNetworkOffering(networkOfferingId, Service.SourceNat) || - areServicesSupportedByNetworkOffering(networkOfferingId, Service.StaticNat) || - areServicesSupportedByNetworkOffering(networkOfferingId, Service.Firewall) || - areServicesSupportedByNetworkOffering(networkOfferingId, Service.PortForwarding) || - areServicesSupportedByNetworkOffering(networkOfferingId, Service.Lb))) { - return true; - } - return false; - } - @Override public boolean areServicesSupportedByNetworkOffering(long networkOfferingId, Service... services) { return (_ntwkOfferingSrvcDao.areServicesSupportedByNetworkOffering(networkOfferingId, services)); diff --git a/server/test/com/cloud/network/MockNetworkManagerImpl.java b/server/test/com/cloud/network/MockNetworkManagerImpl.java index 874e01767a9..28d1a604c44 100755 --- a/server/test/com/cloud/network/MockNetworkManagerImpl.java +++ b/server/test/com/cloud/network/MockNetworkManagerImpl.java @@ -797,7 +797,7 @@ public class MockNetworkManagerImpl implements NetworkManager, Manager, NetworkS * @see com.cloud.network.NetworkService#allocateIP(com.cloud.user.Account, long, Long) */ @Override - public IpAddress allocateIP(Account ipOwner, long zoneId, Long networkId) throws ResourceAllocationException, InsufficientAddressCapacityException, ConcurrentOperationException { + public IpAddress allocateIP(Account ipOwner, boolean isSystem, long zoneId) throws ResourceAllocationException, InsufficientAddressCapacityException, ConcurrentOperationException { // TODO Auto-generated method stub return null; } diff --git a/server/test/com/cloud/vpc/MockNetworkManagerImpl.java b/server/test/com/cloud/vpc/MockNetworkManagerImpl.java index bd8d8bc3a69..642ea10c7ca 100644 --- a/server/test/com/cloud/vpc/MockNetworkManagerImpl.java +++ b/server/test/com/cloud/vpc/MockNetworkManagerImpl.java @@ -16,22 +16,6 @@ // under the License. package com.cloud.vpc; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Set; - -import javax.ejb.Local; -import javax.naming.ConfigurationException; - -import org.apache.cloudstack.api.command.admin.usage.ListTrafficTypeImplementorsCmd; -import org.apache.cloudstack.api.command.user.network.ListNetworksCmd; -import org.apache.log4j.Logger; - -import org.apache.cloudstack.acl.ControlledEntity.ACLType; -import org.apache.cloudstack.api.command.user.network.CreateNetworkCmd; -import org.apache.cloudstack.api.command.user.network.RestartNetworkCmd; import com.cloud.dc.DataCenter; import com.cloud.dc.Vlan; import com.cloud.dc.Vlan.VlanType; @@ -48,12 +32,7 @@ import com.cloud.network.Network.Service; import com.cloud.network.Networks.TrafficType; import com.cloud.network.addr.PublicIp; import com.cloud.network.dao.NetworkServiceMapDao; -import com.cloud.network.element.LoadBalancingServiceProvider; -import com.cloud.network.element.NetworkElement; -import com.cloud.network.element.RemoteAccessVPNServiceProvider; -import com.cloud.network.element.Site2SiteVpnServiceProvider; -import com.cloud.network.element.StaticNatServiceProvider; -import com.cloud.network.element.UserDataServiceProvider; +import com.cloud.network.element.*; import com.cloud.network.guru.NetworkGuru; import com.cloud.network.rules.FirewallRule; import com.cloud.network.rules.FirewallRule.Purpose; @@ -70,6 +49,16 @@ import com.cloud.utils.component.Inject; import com.cloud.utils.component.Manager; import com.cloud.vm.*; import com.cloud.vpc.dao.MockVpcVirtualRouterElement; +import org.apache.cloudstack.acl.ControlledEntity.ACLType; +import org.apache.cloudstack.api.command.admin.usage.ListTrafficTypeImplementorsCmd; +import org.apache.cloudstack.api.command.user.network.CreateNetworkCmd; +import org.apache.cloudstack.api.command.user.network.ListNetworksCmd; +import org.apache.cloudstack.api.command.user.network.RestartNetworkCmd; +import org.apache.log4j.Logger; + +import javax.ejb.Local; +import javax.naming.ConfigurationException; +import java.util.*; @Local(value = { NetworkManager.class, NetworkService.class }) public class MockNetworkManagerImpl implements NetworkManager, Manager{ @@ -1481,7 +1470,7 @@ public class MockNetworkManagerImpl implements NetworkManager, Manager{ * @see com.cloud.network.NetworkService#allocateIP(com.cloud.user.Account, boolean, long) */ @Override - public IpAddress allocateIP(Account ipOwner, long zoneId, Long networkId) throws ResourceAllocationException, InsufficientAddressCapacityException, ConcurrentOperationException { + public IpAddress allocateIP(Account ipOwner, boolean isSystem, long zoneId) throws ResourceAllocationException, InsufficientAddressCapacityException, ConcurrentOperationException { // TODO Auto-generated method stub return null; } From 310d35f88edd6d75499b2089813cfc8b3dd08652 Mon Sep 17 00:00:00 2001 From: Marcus Sorensen Date: Wed, 16 Jan 2013 10:24:14 -0700 Subject: [PATCH 416/421] Summary: Change template details in devcloud-kvm sql file Signed-off-by: Marcus Sorensen 1358357054 -0700 --- tools/devcloud-kvm/devcloud-kvm.sql | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/tools/devcloud-kvm/devcloud-kvm.sql b/tools/devcloud-kvm/devcloud-kvm.sql index 97478834bf3..6d559a9c91a 100644 --- a/tools/devcloud-kvm/devcloud-kvm.sql +++ b/tools/devcloud-kvm/devcloud-kvm.sql @@ -17,7 +17,7 @@ INSERT INTO `cloud`.`disk_offering` (id, name, uuid, display_text, created, use_local_storage, type, disk_size) VALUES (17, 'tinyOffering', UUID(), 'tinyOffering', NOW(), 1, 'Service', 0); -INSERT INTO `cloud`.`service_offering` (id, cpu, speed, ram_size) VALUES (17, 1, 100, 100); +INSERT INTO `cloud`.`service_offering` (id, cpu, speed, ram_size) VALUES (17, 1, 100, 128); INSERT INTO `cloud`.`disk_offering` (id, name, uuid, display_text, created, type, disk_size) VALUES (18, 'tinyDiskOffering', UUID(), 'tinyDiskOffering', NOW(), 'Disk', 1073741824); INSERT INTO `cloud`.`configuration` (instance, name,value) VALUE('DEFAULT','router.ram.size', '100'); INSERT INTO `cloud`.`configuration` (instance, name,value) VALUE('DEFAULT','router.cpu.mhz','100'); @@ -37,4 +37,5 @@ INSERT INTO `cloud`.`configuration` (instance, name, value) VALUE('DEFAULT', 'se UPDATE `cloud`.`configuration` SET value='10' where name = 'storage.overprovisioning.factor'; UPDATE `cloud`.`configuration` SET value='10' where name = 'cpu.overprovisioning.factor'; UPDATE `cloud`.`configuration` SET value='10' where name = 'mem.overprovisioning.factor'; -UPDATE `cloud`.`vm_template` SET unique_name="tiny Linux",name="tiny Linux",url="http://marcus.mlsorensen.com/cloudstack-extras/ttylinux_pv.qcow2",checksum="81dcf4b4ca05a3b637a040e851568f29",display_text="tiny Linux",format='QCOW2',hypervisor_type='KVM' where id=5; +UPDATE `cloud`.`vm_template` SET unique_name="tiny CentOS 6.3",name="tiny CentOS 6.3",url="http://marcus.mlsorensen.com/cloudstack-extras/tiny-centos-63.qcow2",checksum="4bbb806aa8570f4dfac13b4c38ea1603",display_text="tiny CentOS 6.3",format='QCOW2',hypervisor_type='KVM' where id=5; +UPDATE `cloud`.`vm_template` SET url="http://dontdownloadthistemplate" where id=4; From 4f479e2b23cbbc42247531bd8abb005fc1b89591 Mon Sep 17 00:00:00 2001 From: Marcus Sorensen Date: Wed, 16 Jan 2013 10:30:31 -0700 Subject: [PATCH 417/421] Summary: Modifying integration tests to use 128MB service offerings Detail: The default devcloud tiny template is set up via devcloud.sql to have at least 100MB RAM, changing the tests as well. This will also allow the builtin devcloud-kvm tiny template to work for tests as it requires a bit more. Signed-off-by: Marcus Sorensen 1358357431 -0700 --- test/integration/smoke/test_routers.py | 2 +- test/integration/smoke/test_service_offerings.py | 2 +- test/integration/smoke/test_templates.py | 2 +- test/integration/smoke/test_vm_life_cycle.py | 2 +- test/integration/smoke/test_volumes.py | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/test/integration/smoke/test_routers.py b/test/integration/smoke/test_routers.py index 93dc7606ace..435c7e41a43 100644 --- a/test/integration/smoke/test_routers.py +++ b/test/integration/smoke/test_routers.py @@ -41,7 +41,7 @@ class Services: "displaytext": "Tiny Instance", "cpunumber": 1, "cpuspeed": 100, # in MHz - "memory": 64, # In MBs + "memory": 128, # In MBs }, "virtual_machine": { diff --git a/test/integration/smoke/test_service_offerings.py b/test/integration/smoke/test_service_offerings.py index 3a8a9e156b9..7f4d130ee80 100644 --- a/test/integration/smoke/test_service_offerings.py +++ b/test/integration/smoke/test_service_offerings.py @@ -39,7 +39,7 @@ class Services: "displaytext": "Service Offering", "cpunumber": 1, "cpuspeed": 100, # MHz - "memory": 64, # in MBs + "memory": 128, # in MBs }, } diff --git a/test/integration/smoke/test_templates.py b/test/integration/smoke/test_templates.py index d450a5d8122..663b174ed78 100644 --- a/test/integration/smoke/test_templates.py +++ b/test/integration/smoke/test_templates.py @@ -52,7 +52,7 @@ class Services: "displaytext": "Tiny Instance", "cpunumber": 1, "cpuspeed": 100, # in MHz - "memory": 64, # In MBs + "memory": 128, # In MBs }, "disk_offering": { "displaytext": "Small", diff --git a/test/integration/smoke/test_vm_life_cycle.py b/test/integration/smoke/test_vm_life_cycle.py index f6fe4e002a1..0bd4f959bc3 100644 --- a/test/integration/smoke/test_vm_life_cycle.py +++ b/test/integration/smoke/test_vm_life_cycle.py @@ -80,7 +80,7 @@ class Services: "displaytext": "Tiny Instance", "cpunumber": 1, "cpuspeed": 100, # in MHz - "memory": 64, # In MBs + "memory": 128, # In MBs }, "small": { diff --git a/test/integration/smoke/test_volumes.py b/test/integration/smoke/test_volumes.py index 2d0cd491672..3fe68ec5621 100644 --- a/test/integration/smoke/test_volumes.py +++ b/test/integration/smoke/test_volumes.py @@ -53,7 +53,7 @@ class Services: "displaytext": "Tiny Instance", "cpunumber": 1, "cpuspeed": 100, # in MHz - "memory": 64, # In MBs + "memory": 128, # In MBs }, "disk_offering": { "displaytext": "Small", From a69e7f9bf605079968a7e3a7facdede167504aa4 Mon Sep 17 00:00:00 2001 From: Pranav Saxena Date: Thu, 17 Jan 2013 00:02:11 +0530 Subject: [PATCH 418/421] CLOUDSTACK-972:The template will disappear after reordering in template section --- ui/scripts/ui/widgets/listView.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ui/scripts/ui/widgets/listView.js b/ui/scripts/ui/widgets/listView.js index 85523ea5e7a..9e16ec2ae54 100644 --- a/ui/scripts/ui/widgets/listView.js +++ b/ui/scripts/ui/widgets/listView.js @@ -560,8 +560,8 @@ return $(this).index() == index; }); - if ($target.index() > $tr.index()) $target.after($tr); - else $target.before($tr); + // if ($target.index() > $tr.index()) $target.after($tr); + // else $target.before($tr); $tr.closest('.list-view').scrollTop($tr.position().top - $tr.height() * 2); From eeb3f1725d7efa9b297360649707ca31c6ad0ca2 Mon Sep 17 00:00:00 2001 From: Jessica Wang Date: Wed, 16 Jan 2013 15:06:27 -0800 Subject: [PATCH 419/421] CS-17074: cloudstack UI - Advanced SG-enabled zone - Infrastructure menu - create guest network - scope dropdown - add option "All". --- ui/scripts/system.js | 1 + 1 file changed, 1 insertion(+) diff --git a/ui/scripts/system.js b/ui/scripts/system.js index 6733da1e2b9..bd8d3316103 100644 --- a/ui/scripts/system.js +++ b/ui/scripts/system.js @@ -1148,6 +1148,7 @@ var array1 = []; if(args.context.zones[0].networktype == "Advanced" && args.context.zones[0].securitygroupsenabled == true) { array1.push({id: 'account-specific', description: 'Account'}); + array1.push({id: 'zone-wide', description: 'All'}); } else { array1.push({id: 'zone-wide', description: 'All'}); From a22bfd7e7b412793e4a7cbb73f96b7ddfb6db887 Mon Sep 17 00:00:00 2001 From: Jessica Wang Date: Wed, 16 Jan 2013 15:10:24 -0800 Subject: [PATCH 420/421] CLOUDSTACK-537: cloudstack UI - Advanced SG-enabled zone - VM Wizard - API has been chagned. Here is related UI change: not pass networkID to deployVirtualMachine API. --- ui/scripts/instanceWizard.js | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/ui/scripts/instanceWizard.js b/ui/scripts/instanceWizard.js index 89ca1d63361..e4b1f31d427 100644 --- a/ui/scripts/instanceWizard.js +++ b/ui/scripts/instanceWizard.js @@ -545,7 +545,8 @@ if(checkedSecurityGroupIdArray.length > 0) array1.push("&securitygroupids=" + checkedSecurityGroupIdArray.join(",")); - + + /* if(selectedZoneObj.networktype == "Advanced" && selectedZoneObj.securitygroupsenabled == true) { // Advanced SG-enabled zone var networkData = { zoneId: selectedZoneObj.id, @@ -577,6 +578,8 @@ return; } } + */ + } else if (step5ContainerType == 'nothing-to-select') { if(args.context.networks != null) { //from VPC tier From 975021dda1aeee24c8729407e323a5e884e9ad31 Mon Sep 17 00:00:00 2001 From: Marcus Sorensen Date: Wed, 16 Jan 2013 17:43:35 -0700 Subject: [PATCH 421/421] Summary: adding resizeVolume api call Detail: This merges the resizevolume feature branch, which provides the ability to migrate a disk between disk offerings, thereby changing its size, or specifying a new size if current disk offering is custom. BUG-ID: CLOUDSTACK-644 Signed-off-by: Marcus Sorensen 1358358209 -0700 --- .../agent/api/storage/ResizeVolumeAnswer.java | 40 +++ .../api/storage/ResizeVolumeCommand.java | 86 ++++++ api/src/com/cloud/event/EventTypes.java | 1 + .../com/cloud/exception/CloudException.java | 1 - api/src/com/cloud/storage/StorageService.java | 10 + api/src/com/cloud/storage/Volume.java | 9 +- .../apache/cloudstack/api/ApiConstants.java | 1 + .../api/BaseUpdateTemplateOrIsoCmd.java | 0 ...BaseUpdateTemplateOrIsoPermissionsCmd.java | 0 .../command/user/volume/ResizeVolumeCmd.java | 153 +++++++++++ .../api/test/ResizeVolumeCommandTest.java | 199 ++++++++++++++ client/tomcatconf/commands.properties.in | 1 + .../resource/LibvirtComputingResource.java | 77 ++++++ .../xen/resource/CitrixResourceBase.java | 22 ++ scripts/storage/qcow2/resizevolume.sh | 253 ++++++++++++++++++ .../com/cloud/storage/StorageManagerImpl.java | 180 +++++++++++++ setup/db/create-schema-view.sql | 0 test/integration/smoke/test_volumes.py | 125 ++++++++- tools/marvin/marvin/integration/lib/base.py | 6 + 19 files changed, 1157 insertions(+), 7 deletions(-) create mode 100644 api/src/com/cloud/agent/api/storage/ResizeVolumeAnswer.java create mode 100644 api/src/com/cloud/agent/api/storage/ResizeVolumeCommand.java mode change 100755 => 100644 api/src/org/apache/cloudstack/api/BaseUpdateTemplateOrIsoCmd.java mode change 100755 => 100644 api/src/org/apache/cloudstack/api/BaseUpdateTemplateOrIsoPermissionsCmd.java create mode 100644 api/src/org/apache/cloudstack/api/command/user/volume/ResizeVolumeCmd.java create mode 100644 api/test/src/com/cloud/agent/api/test/ResizeVolumeCommandTest.java create mode 100644 scripts/storage/qcow2/resizevolume.sh mode change 100755 => 100644 setup/db/create-schema-view.sql diff --git a/api/src/com/cloud/agent/api/storage/ResizeVolumeAnswer.java b/api/src/com/cloud/agent/api/storage/ResizeVolumeAnswer.java new file mode 100644 index 00000000000..3434b985aaa --- /dev/null +++ b/api/src/com/cloud/agent/api/storage/ResizeVolumeAnswer.java @@ -0,0 +1,40 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. +package com.cloud.agent.api.storage; + +import com.cloud.agent.api.Answer; + +public class ResizeVolumeAnswer extends Answer { + private long newSize; + + protected ResizeVolumeAnswer() { + + } + + public ResizeVolumeAnswer(ResizeVolumeCommand cmd, boolean result, String details, long newSize) { + super(cmd, result, details); + this.newSize = newSize; + } + + public ResizeVolumeAnswer(ResizeVolumeCommand cmd, boolean result, String details) { + super(cmd, result, details); + } + + public long getNewSize() { + return newSize; + } +} diff --git a/api/src/com/cloud/agent/api/storage/ResizeVolumeCommand.java b/api/src/com/cloud/agent/api/storage/ResizeVolumeCommand.java new file mode 100644 index 00000000000..8af23a0ab81 --- /dev/null +++ b/api/src/com/cloud/agent/api/storage/ResizeVolumeCommand.java @@ -0,0 +1,86 @@ +// 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.agent.api.storage; + +import com.cloud.agent.api.Command; +import com.cloud.agent.api.to.StorageFilerTO; +import com.cloud.storage.StoragePool; + +public class ResizeVolumeCommand extends Command { + private String path; + private StorageFilerTO pool; + private String vmInstance; + private Long newSize; + private Long currentSize; + private boolean shrinkOk; + + protected ResizeVolumeCommand() { + + } + + public ResizeVolumeCommand(String path, + StorageFilerTO pool, + Long currentSize, + Long newSize, + boolean shrinkOk, + String vmInstance) + { + this.path = path; + this.pool = pool; + this.vmInstance = vmInstance; + this.currentSize = currentSize; + this.newSize = newSize; + this.shrinkOk = shrinkOk; + } + + public String getPath() { + return path; + } + + public String getPoolUuid() { + return pool.getUuid(); + } + + public StorageFilerTO getPool() { + return pool; + } + + public long getNewSize() { + return newSize; + } + + public long getCurrentSize() { + return currentSize; + } + + public boolean getShrinkOk() { + return shrinkOk; + } + + public String getInstanceName() { + return vmInstance; + } + + /** + * {@inheritDoc} + */ + @Override + public boolean executeInSequence() { + return false; + } + +} diff --git a/api/src/com/cloud/event/EventTypes.java b/api/src/com/cloud/event/EventTypes.java index 8c622252d17..87eddca5a69 100755 --- a/api/src/com/cloud/event/EventTypes.java +++ b/api/src/com/cloud/event/EventTypes.java @@ -108,6 +108,7 @@ public class EventTypes { public static final String EVENT_VOLUME_EXTRACT = "VOLUME.EXTRACT"; public static final String EVENT_VOLUME_UPLOAD = "VOLUME.UPLOAD"; public static final String EVENT_VOLUME_MIGRATE = "VOLUME.MIGRATE"; + public static final String EVENT_VOLUME_RESIZE = "VOLUME.RESIZE"; // Domains public static final String EVENT_DOMAIN_CREATE = "DOMAIN.CREATE"; diff --git a/api/src/com/cloud/exception/CloudException.java b/api/src/com/cloud/exception/CloudException.java index 036cb1b8adc..732670288f1 100644 --- a/api/src/com/cloud/exception/CloudException.java +++ b/api/src/com/cloud/exception/CloudException.java @@ -54,7 +54,6 @@ public class CloudException extends Exception { return; } - public ArrayList getIdProxyList() { return idList; } diff --git a/api/src/com/cloud/storage/StorageService.java b/api/src/com/cloud/storage/StorageService.java index ff8ec13e33b..a06f2138042 100644 --- a/api/src/com/cloud/storage/StorageService.java +++ b/api/src/com/cloud/storage/StorageService.java @@ -23,6 +23,7 @@ import org.apache.cloudstack.api.command.admin.storage.CancelPrimaryStorageMaint import org.apache.cloudstack.api.command.admin.storage.UpdateStoragePoolCmd; import org.apache.cloudstack.api.command.user.volume.CreateVolumeCmd; import org.apache.cloudstack.api.command.user.volume.UploadVolumeCmd; +import org.apache.cloudstack.api.command.user.volume.ResizeVolumeCmd; import com.cloud.exception.ConcurrentOperationException; import com.cloud.exception.InsufficientCapacityException; import com.cloud.exception.PermissionDeniedException; @@ -70,6 +71,15 @@ public interface StorageService{ Volume createVolume(CreateVolumeCmd cmd); + /** + * Resizes the volume based on the given criteria + * + * @param cmd + * the API command wrapping the criteria + * @return the volume object + */ + Volume resizeVolume(ResizeVolumeCmd cmd); + /** * Delete the storage pool * diff --git a/api/src/com/cloud/storage/Volume.java b/api/src/com/cloud/storage/Volume.java index bfbd816d911..38ba2d413e0 100755 --- a/api/src/com/cloud/storage/Volume.java +++ b/api/src/com/cloud/storage/Volume.java @@ -36,6 +36,7 @@ public interface Volume extends ControlledEntity, Identity, InternalIdentity, Ba Ready("The volume is ready to be used."), Migrating("The volume is migrating to other storage pool"), Snapshotting("There is a snapshot created on this volume, not backed up to secondary storage yet"), + Resizing("The volume is being resized"), Expunging("The volume is being expunging"), Destroy("The volume is destroyed, and can't be recovered."), UploadOp ("The volume upload operation is in progress or in short the volume is on secondary storage"); @@ -62,7 +63,10 @@ public interface Volume extends ControlledEntity, Identity, InternalIdentity, Ba s_fsm.addTransition(Creating, Event.OperationFailed, Allocated); s_fsm.addTransition(Creating, Event.OperationSucceeded, Ready); s_fsm.addTransition(Creating, Event.DestroyRequested, Destroy); - s_fsm.addTransition(Creating, Event.CreateRequested, Creating); + s_fsm.addTransition(Creating, Event.CreateRequested, Creating); + s_fsm.addTransition(Ready, Event.ResizeRequested, Resizing); + s_fsm.addTransition(Resizing, Event.OperationSucceeded, Ready); + s_fsm.addTransition(Resizing, Event.OperationFailed, Ready); s_fsm.addTransition(Allocated, Event.UploadRequested, UploadOp); s_fsm.addTransition(UploadOp, Event.CopyRequested, Creating);// CopyRequested for volume from sec to primary storage s_fsm.addTransition(Creating, Event.CopySucceeded, Ready); @@ -92,7 +96,8 @@ public interface Volume extends ControlledEntity, Identity, InternalIdentity, Ba MigrationRequested, SnapshotRequested, DestroyRequested, - ExpungingRequested; + ExpungingRequested, + ResizeRequested; } /** diff --git a/api/src/org/apache/cloudstack/api/ApiConstants.java b/api/src/org/apache/cloudstack/api/ApiConstants.java index d3bfcd66afc..58a78318fae 100644 --- a/api/src/org/apache/cloudstack/api/ApiConstants.java +++ b/api/src/org/apache/cloudstack/api/ApiConstants.java @@ -387,6 +387,7 @@ public class ApiConstants { public static final String ESP_LIFETIME = "esplifetime"; public static final String DPD = "dpd"; public static final String FOR_VPC = "forvpc"; + public static final String SHRINK_OK = "shrinkok"; public static final String NICIRA_NVP_DEVICE_ID = "nvpdeviceid"; public static final String NICIRA_NVP_TRANSPORT_ZONE_UUID = "transportzoneuuid"; public static final String NICIRA_NVP_DEVICE_NAME = "niciradevicename"; diff --git a/api/src/org/apache/cloudstack/api/BaseUpdateTemplateOrIsoCmd.java b/api/src/org/apache/cloudstack/api/BaseUpdateTemplateOrIsoCmd.java old mode 100755 new mode 100644 diff --git a/api/src/org/apache/cloudstack/api/BaseUpdateTemplateOrIsoPermissionsCmd.java b/api/src/org/apache/cloudstack/api/BaseUpdateTemplateOrIsoPermissionsCmd.java old mode 100755 new mode 100644 diff --git a/api/src/org/apache/cloudstack/api/command/user/volume/ResizeVolumeCmd.java b/api/src/org/apache/cloudstack/api/command/user/volume/ResizeVolumeCmd.java new file mode 100644 index 00000000000..e42bf3565cc --- /dev/null +++ b/api/src/org/apache/cloudstack/api/command/user/volume/ResizeVolumeCmd.java @@ -0,0 +1,153 @@ +// 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 org.apache.cloudstack.api.command.user.volume; + +import org.apache.cloudstack.api.response.*; +import org.apache.log4j.Logger; + +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseAsyncCmd; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.BaseListTaggedResourcesCmd; +import org.apache.cloudstack.api.APICommand; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ServerApiException; + +import java.util.ArrayList; +import java.util.List; +import java.util.regex.Pattern; +import java.util.regex.Matcher; + +import com.cloud.exception.InvalidParameterValueException; +import com.cloud.exception.PermissionDeniedException; +import com.cloud.exception.ResourceAllocationException; +import com.cloud.async.AsyncJob; +import com.cloud.event.EventTypes; +import com.cloud.projects.Project; +import com.cloud.storage.Volume; +import com.cloud.user.Account; +import com.cloud.user.UserContext; + + +@APICommand(name="resizeVolume", description="Resizes a volume", responseObject=VolumeResponse.class) +public class ResizeVolumeCmd extends BaseAsyncCmd { + public static final Logger s_logger = Logger.getLogger(ResizeVolumeCmd.class.getName()); + + private static final String s_name = "resizevolumeresponse"; + + ///////////////////////////////////////////////////// + //////////////// API parameters ///////////////////// + ///////////////////////////////////////////////////// + + @Parameter(name=ApiConstants.ID, entityType=VolumeResponse.class, type=CommandType.UUID, description="the ID of the disk volume") + private Long id; + + @Parameter(name=ApiConstants.SIZE, type=CommandType.LONG, required=false, description="New volume size in G") + private Long size; + + @Parameter(name=ApiConstants.SHRINK_OK, type=CommandType.BOOLEAN, required=false, description="Verify OK to Shrink") + private boolean shrinkOk; + + @Parameter(name=ApiConstants.DISK_OFFERING_ID, entityType=DiskOfferingResponse.class, type=CommandType.UUID, required=false, description="new disk offering id") + private Long newDiskOfferingId; + + ///////////////////////////////////////////////////// + /////////////////// Accessors /////////////////////// + ///////////////////////////////////////////////////// + + public Long getEntityId() { + return id; + } + + public Long getSize() { + return size; + } + + public boolean getShrinkOk() { + return shrinkOk; + } + + public Long getNewDiskOfferingId() { + return newDiskOfferingId; + } + + + ///////////////////////////////////////////////////// + /////////////// API Implementation/////////////////// + ///////////////////////////////////////////////////// + + @Override + public String getCommandName() { + return s_name; + } + + @Override + public AsyncJob.Type getInstanceType() { + return AsyncJob.Type.Volume; + } + + public static String getResultObjectName() { + return "volume"; + } + + @Override + public long getEntityOwnerId() { + + Volume volume = _entityMgr.findById(Volume.class, getEntityId()); + if (volume == null) { + throw new InvalidParameterValueException("Unable to find volume by id=" + id); + } + + Account account = _accountService.getAccount(volume.getAccountId()); + //Can resize volumes for enabled projects/accounts only + if (account.getType() == Account.ACCOUNT_TYPE_PROJECT) { + Project project = _projectService.findByProjectAccountId(volume.getAccountId()); + if (project.getState() != Project.State.Active) { + throw new PermissionDeniedException("Can't add resources to project id=" + project.getId() + " in state=" + project.getState() + " as it's no longer active"); + } + } else if (account.getState() == Account.State.disabled) { + throw new PermissionDeniedException("The owner of volume " + id + " is disabled: " + account); + } + + return volume.getAccountId(); + } + + + @Override + public String getEventType() { + return EventTypes.EVENT_VOLUME_RESIZE; + } + + @Override + public String getEventDescription() { + return "Volume Id: " + getEntityId() + " to size " + getSize() + "G" ; + } + + @Override + public void execute(){ + UserContext.current().setEventDetails("Volume Id: " + getEntityId() + " to size " + getSize() + "G"); + Volume volume = _storageService.resizeVolume(this); + if (volume != null) { + VolumeResponse response = _responseGenerator.createVolumeResponse(volume); + //FIXME - have to be moved to ApiResponseHelper + response.setResponseName(getCommandName()); + this.setResponseObject(response); + } else { + throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to resize volume"); + } + } +} diff --git a/api/test/src/com/cloud/agent/api/test/ResizeVolumeCommandTest.java b/api/test/src/com/cloud/agent/api/test/ResizeVolumeCommandTest.java new file mode 100644 index 00000000000..2d248b2f53a --- /dev/null +++ b/api/test/src/com/cloud/agent/api/test/ResizeVolumeCommandTest.java @@ -0,0 +1,199 @@ +// 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.agent.api.test; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; +import static org.junit.Assert.assertFalse; + +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Date; + +import org.junit.Test; + +import com.cloud.agent.api.storage.ResizeVolumeCommand; +import com.cloud.agent.api.to.StorageFilerTO; +import com.cloud.storage.StoragePool; +import com.cloud.storage.Storage.StoragePoolType; +import com.cloud.storage.StoragePoolStatus; + + +public class ResizeVolumeCommandTest { + + public StoragePool dummypool = new StoragePool() { + public long getId() { + return 1L; + }; + + public String getName() { + return "name"; + }; + + public String getUuid() { + return "bed9f83e-cac3-11e1-ac8a-0050568b007e"; + }; + + public StoragePoolType getPoolType() { + return StoragePoolType.Filesystem; + }; + + public Date getCreated() { + Date date = null; + try { + date = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss") + .parse("01/01/1970 12:12:12"); + } catch (ParseException e) { + e.printStackTrace(); + } + return date; + } + + public Date getUpdateTime() { + return new Date(); + }; + + public long getDataCenterId() { + return 0L; + }; + + public long getCapacityBytes() { + return 0L; + }; + + public long getAvailableBytes() { + return 0L; + }; + + public Long getClusterId() { + return 0L; + }; + + public String getHostAddress() { + return "hostAddress"; + }; + + public String getPath() { + return "path"; + }; + + public String getUserInfo() { + return "userInfo"; + }; + + public boolean isShared() { + return false; + }; + + public boolean isLocal() { + return false; + }; + + public StoragePoolStatus getStatus() { + return StoragePoolStatus.Up; + }; + + public int getPort() { + return 25; + }; + + public Long getPodId() { + return 0L; + }; + }; + + Long newSize = 4194304L; + Long currentSize = 1048576L; + + ResizeVolumeCommand rv = new ResizeVolumeCommand("dummydiskpath", + new StorageFilerTO(dummypool), currentSize, newSize, false, + "vmName"); + + @Test + public void testExecuteInSequence() { + boolean b = rv.executeInSequence(); + assertFalse(b); + } + + @Test + public void testGetPath() { + String path = rv.getPath(); + assertTrue(path.equals("dummydiskpath")); + } + + @Test + public void testGetPoolUuid() { + String poolUuid = rv.getPoolUuid(); + assertTrue(poolUuid.equals("bed9f83e-cac3-11e1-ac8a-0050568b007e")); + } + + @Test + public void testGetPool() { + StorageFilerTO pool = rv.getPool(); + + Long id = pool.getId(); + Long expectedL = 1L; + assertEquals(expectedL, id); + + String uuid = pool.getUuid(); + assertTrue(uuid.equals("bed9f83e-cac3-11e1-ac8a-0050568b007e")); + + String host = pool.getHost(); + assertTrue(host.equals("hostAddress")); + + String path = pool.getPath(); + assertTrue(path.equals("path")); + + String userInfo = pool.getUserInfo(); + assertTrue(userInfo.equals("userInfo")); + + Integer port = pool.getPort(); + Integer expectedI = 25; + assertEquals(expectedI, port); + + StoragePoolType type = pool.getType(); + assertEquals(StoragePoolType.Filesystem, type); + + String str = pool.toString(); + assertTrue(str.equals("Pool[" + id.toString() + "|" + host + ":" + + port.toString() + "|" + path + "]")); + } + + @Test + public void testGetNewSize() { + long newSize = rv.getNewSize(); + assertTrue(newSize == 4194304L); + } + + @Test + public void testGetCurrentSize() { + long currentSize = rv.getCurrentSize(); + assertTrue(currentSize == 1048576L); + } + + @Test + public void testGetShrinkOk() { + assertFalse(rv.getShrinkOk()); + } + + @Test + public void testGetInstanceName() { + String vmName = rv.getInstanceName(); + assertTrue(vmName.equals("vmName")); + } + +} diff --git a/client/tomcatconf/commands.properties.in b/client/tomcatconf/commands.properties.in index 99cb874a55f..182cbd8cf3b 100644 --- a/client/tomcatconf/commands.properties.in +++ b/client/tomcatconf/commands.properties.in @@ -255,6 +255,7 @@ deleteVolume=15 listVolumes=15 extractVolume=15 migrateVolume=15 +resizeVolume=15 #### registration command: FIXME -- this really should be something in management server that #### generates a new key for the user and they just have to diff --git a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java b/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java index 6b5f6df3bff..b65b53114bf 100755 --- a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java +++ b/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java @@ -162,6 +162,8 @@ import com.cloud.agent.api.storage.CreatePrivateTemplateAnswer; import com.cloud.agent.api.storage.DestroyCommand; import com.cloud.agent.api.storage.PrimaryStorageDownloadAnswer; import com.cloud.agent.api.storage.PrimaryStorageDownloadCommand; +import com.cloud.agent.api.storage.ResizeVolumeCommand; +import com.cloud.agent.api.storage.ResizeVolumeAnswer; import com.cloud.agent.api.to.IpAddressTO; import com.cloud.agent.api.to.NicTO; import com.cloud.agent.api.to.StorageFilerTO; @@ -255,6 +257,7 @@ public class LibvirtComputingResource extends ServerResourceBase implements private String _patchdomrPath; private String _createvmPath; private String _manageSnapshotPath; + private String _resizeVolumePath; private String _createTmplPath; private String _heartBeatPath; private String _securityGroupPath; @@ -534,6 +537,12 @@ public class LibvirtComputingResource extends ServerResourceBase implements "Unable to find the managesnapshot.sh"); } + _resizeVolumePath = Script.findScript(storageScriptsDir, "resizevolume.sh"); + if (_resizeVolumePath == null) { + throw new ConfigurationException( + "Unable to find the resizevolume.sh"); + } + _createTmplPath = Script .findScript(storageScriptsDir, "createtmplt.sh"); if (_createTmplPath == null) { @@ -1062,6 +1071,8 @@ public class LibvirtComputingResource extends ServerResourceBase implements return execute((CleanupNetworkRulesCmd) cmd); } else if (cmd instanceof CopyVolumeCommand) { return execute((CopyVolumeCommand) cmd); + } else if (cmd instanceof ResizeVolumeCommand) { + return execute((ResizeVolumeCommand) cmd); } else if (cmd instanceof CheckNetworkCommand) { return execute((CheckNetworkCommand) cmd); } else { @@ -1268,6 +1279,72 @@ public class LibvirtComputingResource extends ServerResourceBase implements } } + private String getResizeScriptType (KVMStoragePool pool, KVMPhysicalDisk vol) { + StoragePoolType poolType = pool.getType(); + PhysicalDiskFormat volFormat = vol.getFormat(); + + if(pool.getType() == StoragePoolType.CLVM && volFormat == KVMPhysicalDisk.PhysicalDiskFormat.RAW) { + return "CLVM"; + } else if ((poolType == StoragePoolType.NetworkFilesystem + || poolType == StoragePoolType.SharedMountPoint + || poolType == StoragePoolType.Filesystem) + && volFormat == KVMPhysicalDisk.PhysicalDiskFormat.QCOW2 ) { + return "QCOW2"; + } + return null; + } + + /* uses a local script now, eventually support for virStorageVolResize() will maybe work on + qcow2 and lvm and we can do this in libvirt calls */ + public Answer execute(ResizeVolumeCommand cmd) { + String volid = cmd.getPath(); + long newSize = cmd.getNewSize(); + long currentSize = cmd.getCurrentSize(); + String vmInstanceName = cmd.getInstanceName(); + boolean shrinkOk = cmd.getShrinkOk(); + StorageFilerTO spool = cmd.getPool(); + + try { + KVMStoragePool pool = _storagePoolMgr.getStoragePool(spool.getType(), spool.getUuid()); + KVMPhysicalDisk vol = pool.getPhysicalDisk(volid); + String path = vol.getPath(); + String type = getResizeScriptType(pool, vol); + + if (type == null) { + return new ResizeVolumeAnswer(cmd, false, "Unsupported volume format: pool type '" + + pool.getType() + "' and volume format '" + vol.getFormat() + "'"); + } + + s_logger.debug("got to the stage where we execute the volume resize, params:" + + path + "," + currentSize + "," + newSize + "," + type + "," + vmInstanceName + "," + shrinkOk); + final Script resizecmd = new Script(_resizeVolumePath, + _cmdsTimeout, s_logger); + resizecmd.add("-s",String.valueOf(newSize)); + resizecmd.add("-c",String.valueOf(currentSize)); + resizecmd.add("-p",path); + resizecmd.add("-t",type); + resizecmd.add("-r",String.valueOf(shrinkOk)); + resizecmd.add("-v",vmInstanceName); + String result = resizecmd.execute(); + + if (result == null) { + + /* fetch new size as seen from libvirt, don't want to assume anything */ + pool = _storagePoolMgr.getStoragePool(spool.getType(), spool.getUuid()); + long finalSize = pool.getPhysicalDisk(volid).getVirtualSize(); + s_logger.debug("after resize, size reports as " + finalSize + ", requested " + newSize); + return new ResizeVolumeAnswer(cmd, true, "success", finalSize); + } + + return new ResizeVolumeAnswer(cmd, false, result); + } catch (CloudRuntimeException e) { + String error = "failed to resize volume: " + e; + s_logger.debug(error); + return new ResizeVolumeAnswer(cmd, false, error); + } + + } + public Answer execute(DestroyCommand cmd) { VolumeTO vol = cmd.getVolume(); diff --git a/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/CitrixResourceBase.java b/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/CitrixResourceBase.java index 66a5918b177..065d3be0bdd 100644 --- a/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/CitrixResourceBase.java +++ b/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/CitrixResourceBase.java @@ -182,6 +182,8 @@ import com.cloud.agent.api.storage.CreatePrivateTemplateAnswer; import com.cloud.agent.api.storage.DestroyCommand; import com.cloud.agent.api.storage.PrimaryStorageDownloadAnswer; import com.cloud.agent.api.storage.PrimaryStorageDownloadCommand; +import com.cloud.agent.api.storage.ResizeVolumeCommand; +import com.cloud.agent.api.storage.ResizeVolumeAnswer; import com.cloud.agent.api.to.IpAddressTO; import com.cloud.agent.api.to.NicTO; import com.cloud.agent.api.to.PortForwardingRuleTO; @@ -468,6 +470,8 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe return execute((DeleteStoragePoolCommand) cmd); } else if (clazz == CopyVolumeCommand.class) { return execute((CopyVolumeCommand) cmd); + } else if (clazz == ResizeVolumeCommand.class) { + return execute((ResizeVolumeCommand) cmd); } else if (clazz == AttachVolumeCommand.class) { return execute((AttachVolumeCommand) cmd); } else if (clazz == AttachIsoCommand.class) { @@ -5618,6 +5622,23 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe } } + public Answer execute(ResizeVolumeCommand cmd) { + Connection conn = getConnection(); + StorageFilerTO pool = cmd.getPool(); + String volid = cmd.getPath(); + long newSize = cmd.getNewSize(); + + try { + VDI vdi = getVDIbyUuid(conn, volid); + vdi.resize(conn, newSize); + return new ResizeVolumeAnswer(cmd, true, "success", newSize); + } catch (Exception e) { + s_logger.warn("Unable to resize volume",e); + String error = "failed to resize volume:" +e; + return new ResizeVolumeAnswer(cmd, false, error ); + } + } + protected SR getISOSRbyVmName(Connection conn, String vmName) { try { Set srs = SR.getByNameLabel(conn, vmName + "-ISO"); @@ -7684,4 +7705,5 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe return new SetStaticRouteAnswer(cmd, false, null); } } + } diff --git a/scripts/storage/qcow2/resizevolume.sh b/scripts/storage/qcow2/resizevolume.sh new file mode 100644 index 00000000000..2de1f9ec5ca --- /dev/null +++ b/scripts/storage/qcow2/resizevolume.sh @@ -0,0 +1,253 @@ +#!/usr/bin/env bash +# 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. + + + +# resizevolume.sh -- resize a volume + +usage() { + printf "Usage: %s: -c -s -p -v -t -r \n" $(basename $0) >&2 +} + +getdevmappername() { + local path=$1 + local devmappername=`readlink -f $path |cut -d/ -f3` + if [[ $devmappername =~ "dm-" ]] + then + dmname=$devmappername + return 0 + else + return 1; + fi +} + +getdevmappersize() { + local dm=$1 + if [ ! -e "/sys/block/${dm}/size" ] + then + log "unable to find ${dm} in /sys/block" 1 + exit 1 + fi + actualsize=$((`cat /sys/block/${dm}/size`*512)); + + if [[ -z "$actualsize" ]] + then + log "unable to find actual size of ${dm}" 1 + exit 1 + fi + return 0 +} + +# log "message" 1 <-- prints to stdout as well as log, to pass error up to cloudstack +# log "message" prints only to log file +# variable shouldwelog controls whether we print to log file +log() { + local d=`date` + local msg=${1} + local stdout=${2} + + if [ ! -z "$stdout" ] + then + echo $1 + fi + + if [ $shouldwelog -eq 1 ] + then + echo "$d - $1" >> /var/log/cloud/agent/resizevolume.log + fi +} + +failshrink() { + # if this is a shrink operation, fail if commands will shrink the volume and we haven't signed of on shrinking + if [ $actualsize -gt $newsize ] + then + if [ "$shrink" == "false" ] + then + log "result would shrink the volume from $actualsize to $newsize, but confirmation to shrink wasn't passed. Shrink='$shrink'" 1 + exit 1 + fi + fi +} + +notifyqemu() { + #move this back into cloudstack libvirt calls once the libvirt java bindings support block resize + #we try to inform hypervisor of new size, but don't fail if we can't + if `virsh help 2>/dev/null | grep -q blockresize` + then + if `virsh domstate $vmname >/dev/null 2>&1` + then + sizeinkb=$(($newsize/1024)) + virsh blockresize --domain $vmname --path $path --size $sizeinkb >/dev/null 2>&1 + retval=$? + if [ -z $retval ] || [ $retval -ne 0 ] + then + log "failed to live resize $path to size of $sizeinkb kb" 1 + else + liveresize='true' + fi + fi + fi +} + +resizelvm() { + local dmname='' + local actualsize='' + local liveresize='false' + + ##### sanity checks ##### + if ! `lvresize --version > /dev/null 2>&1` + then + log "unable to resolve executable 'lvresize'" 1 + exit 1 + fi + + if ! `virsh --version > /dev/null 2>&1` + then + log "unable to resolve executable 'virsh'" 1 + exit 1 + fi + ##### end sanity ##### + + if ! getdevmappername $path + then + log "unable to resolve a device mapper dev from $path" 1 + exit 1 + fi + + getdevmappersize $dmname + + if [ $actualsize -ne $currentsize ] + then + log "disk isn't the size we think it is: cloudstack said $currentsize, disk said $actualsize." + fi + + # if this is a shrink operation, fail if commands will shrink the volume and we haven't signed of on shrinking + failshrink + + output=`lvresize -f -L ${newsize}B $path 2>&1` + retval=$? + + if [ -z $retval ] || [ $retval -ne 0 ] + then + log "lvresize failed: $output " 1 + exit 1 + fi + + #move this back into cloudstack libvirt calls once the libvirt java bindings support block resize + #we try to inform hypervisor of new size, but don't fail if we can't + notifyqemu + + log "performed successful resize - dm:$dmname currentsize:$currentsize newsize:$newsize path:$path type:$ptype vmname:$vmname live:$liveresize shrink:$shrink" +} + +resizeqcow2() { + + ##### sanity checks ##### + if [ ! -e "$path" ] + then + log "unable to find file $path" 1 + exit 1 + fi + + if ! `qemu-img info /dev/null > /dev/null 2>&1` + then + log "unable to resolve executable 'qemu-img'" 1 + exit 1 + fi + + if ! `virsh --version > /dev/null 2>&1` + then + log "unable to resolve executable 'virsh'" 1 + exit 1 + fi + ##### end sanity ##### + + $actualsize=`qemu-img info $path | grep "virtual size" | sed -re 's/^.*\(([0-9]+).*$/\1/g'` + + if [ $actualsize -ne $currentsize ] + then + log "disk isn't the size we think it is: cloudstack said $currentsize, disk said $actualsize." + fi + + # if this is a shrink operation, fail if commands will shrink the volume and we haven't signed of on shrinking + failshrink + + output=`qemu-img resize $path $newsize 2>&1` + retval=$? + + if [ -z $retval ] || [ $retval -ne 0 ] + then + log "qemu-img resize failed: $output" 1 + exit 1 + fi + + #move this back into cloudstack libvirt calls once the libvirt java bindings support block resize + #we try to inform hypervisor of new size, but don't fail if we can't + notifyqemu + + log "performed successful resize - currentsize:$currentsize newsize:$newsize path:$path type:$ptype vmname:$vmname live:$liveresize shrink:$shrink" +} + +sflag= +cflag= +pflag= +vflag= +tflag= +rflag= + +while getopts 'c:s:v:p:t:r:' OPTION +do + case $OPTION in + s) sflag=1 + newsize="$OPTARG" + ;; + c) cflag=1 + currentsize="$OPTARG" + ;; + v) vflag=1 + vmname="$OPTARG" + ;; + p) dflag=1 + path="$OPTARG" + ;; + t) tflag=1 + ptype="$OPTARG" + ;; + r) rflag=1 + shrink="$OPTARG" + ;; + ?) usage + exit 2 + ;; + esac +done + +shouldwelog=1 #set this to 1 while debugging to get output in /var/log/cloud/agent/resizevolume.log + +if [ "$ptype" == "CLVM" ] +then + resizelvm +elif [ "$ptype" == "QCOW2" ] +then + resizeqcow2 +else + echo "unsupported type $ptype" + exit 1; +fi + +exit 0 diff --git a/server/src/com/cloud/storage/StorageManagerImpl.java b/server/src/com/cloud/storage/StorageManagerImpl.java index 96f299c02bb..55b1342bbd2 100755 --- a/server/src/com/cloud/storage/StorageManagerImpl.java +++ b/server/src/com/cloud/storage/StorageManagerImpl.java @@ -47,6 +47,7 @@ import javax.naming.ConfigurationException; import org.apache.cloudstack.api.command.admin.storage.*; import org.apache.cloudstack.api.command.user.volume.CreateVolumeCmd; import org.apache.cloudstack.api.command.user.volume.UploadVolumeCmd; +import org.apache.cloudstack.api.command.user.volume.ResizeVolumeCmd; import org.apache.log4j.Logger; import com.cloud.agent.AgentManager; @@ -69,6 +70,8 @@ import com.cloud.agent.api.storage.CreateCommand; import com.cloud.agent.api.storage.DeleteTemplateCommand; import com.cloud.agent.api.storage.DeleteVolumeCommand; import com.cloud.agent.api.storage.DestroyCommand; +import com.cloud.agent.api.storage.ResizeVolumeCommand; +import com.cloud.agent.api.storage.ResizeVolumeAnswer; import com.cloud.agent.api.to.StorageFilerTO; import com.cloud.agent.api.to.VolumeTO; import com.cloud.agent.manager.Commands; @@ -2098,6 +2101,183 @@ public class StorageManagerImpl implements StorageManager, Manager, ClusterManag } } + @Override + @DB + @ActionEvent(eventType = EventTypes.EVENT_VOLUME_RESIZE, eventDescription = "resizing volume", async = true) + public VolumeVO resizeVolume(ResizeVolumeCmd cmd) { + VolumeVO volume = _volsDao.findById(cmd.getEntityId()); + Long newSize = null; + boolean shrinkOk = cmd.getShrinkOk(); + boolean success = false; + DiskOfferingVO diskOffering = _diskOfferingDao.findById(volume.getDiskOfferingId()); + DiskOfferingVO newDiskOffering = null; + + newDiskOffering = _diskOfferingDao.findById(cmd.getNewDiskOfferingId()); + + /* Volumes with no hypervisor have never been assigned, and can be resized by recreating. + perhaps in the future we can just update the db entry for the volume */ + if(_volsDao.getHypervisorType(volume.getId()) == HypervisorType.None){ + throw new InvalidParameterValueException("Can't resize a volume that has never been attached, not sure which hypervisor type. Recreate volume to resize."); + } + + /* Only works for KVM/Xen for now */ + if(_volsDao.getHypervisorType(volume.getId()) != HypervisorType.KVM + && _volsDao.getHypervisorType(volume.getId()) != HypervisorType.XenServer){ + throw new InvalidParameterValueException("Cloudstack currently only supports volumes marked as KVM or XenServer hypervisor for resize"); + } + + if (volume == null) { + throw new InvalidParameterValueException("No such volume"); + } + + if (volume.getState() != Volume.State.Ready) { + throw new InvalidParameterValueException("Volume should be in ready state before attempting a resize"); + } + + if (!volume.getVolumeType().equals(Volume.Type.DATADISK)) { + throw new InvalidParameterValueException("Can only resize DATA volumes"); + } + + /* figure out whether or not a new disk offering or size parameter is required, get the correct size value */ + if (newDiskOffering == null) { + if (diskOffering.isCustomized()) { + newSize = cmd.getSize(); + + if (newSize == null) { + throw new InvalidParameterValueException("new offering is of custom size, need to specify a size"); + } + + newSize = ( newSize << 30 ); + } else { + throw new InvalidParameterValueException("current offering" + volume.getDiskOfferingId() + " cannot be resized, need to specify a disk offering"); + } + } else { + + if (newDiskOffering.getRemoved() != null || !DiskOfferingVO.Type.Disk.equals(newDiskOffering.getType())) { + throw new InvalidParameterValueException("Disk offering ID is missing or invalid"); + } + + if(diskOffering.getTags() != null) { + if(!newDiskOffering.getTags().equals(diskOffering.getTags())){ + throw new InvalidParameterValueException("Tags on new and old disk offerings must match"); + } + } else if (newDiskOffering.getTags() != null ){ + throw new InvalidParameterValueException("There are no tags on current disk offering, new disk offering needs to have no tags"); + } + + if (newDiskOffering.getDomainId() == null) { + // do nothing as offering is public + } else { + _configMgr.checkDiskOfferingAccess(UserContext.current().getCaller(), newDiskOffering); + } + + if (newDiskOffering.isCustomized()) { + newSize = cmd.getSize(); + + if (newSize == null) { + throw new InvalidParameterValueException("new offering is of custom size, need to specify a size"); + } + + newSize = ( newSize << 30 ); + } else { + newSize = newDiskOffering.getDiskSize(); + } + } + + if (newSize == null) { + throw new InvalidParameterValueException("could not detect a size parameter or fetch one from the diskofferingid parameter"); + } + + if (!validateVolumeSizeRange(newSize)) { + throw new InvalidParameterValueException("Requested size out of range"); + } + + /* does the caller have the authority to act on this volume? */ + _accountMgr.checkAccess(UserContext.current().getCaller(), null, true, volume); + + UserVmVO userVm = _userVmDao.findById(volume.getInstanceId()); + + StoragePool pool = _storagePoolDao.findById(volume.getPoolId()); + long currentSize = volume.getSize(); + + /* lets make certain they (think they) know what they're doing if they + want to shrink, by forcing them to provide the shrinkok parameter. This will + be checked again at the hypervisor level where we can see the actual disk size */ + if (currentSize > newSize && !shrinkOk) { + throw new InvalidParameterValueException("Going from existing size of " + currentSize + " to size of " + + newSize + " would shrink the volume, need to sign off by supplying the shrinkok parameter with value of true"); + } + + /* get a list of hosts to send the commands to, try the system the + associated vm is running on first, then the last known place it ran. + If not attached to a userVm, we pass 'none' and resizevolume.sh is + ok with that since it only needs the vm name to live resize */ + long[] hosts = null; + String instanceName = "none"; + if (userVm != null) { + instanceName = userVm.getInstanceName(); + if(userVm.getHostId() != null) { + hosts = new long[] { userVm.getHostId() }; + } else if(userVm.getLastHostId() != null) { + hosts = new long[] { userVm.getLastHostId() }; + } + + /*Xen only works offline, SR does not support VDI.resizeOnline*/ + if(_volsDao.getHypervisorType(volume.getId()) == HypervisorType.XenServer + && ! userVm.getState().equals(State.Stopped)) { + throw new InvalidParameterValueException("VM must be stopped or disk detached in order to resize with the Xen HV"); + } + } + + try { + try { + stateTransitTo(volume, Volume.Event.ResizeRequested); + } catch (NoTransitionException etrans) { + throw new CloudRuntimeException("Unable to change volume state for resize: " + etrans.toString()); + } + + ResizeVolumeCommand resizeCmd = new ResizeVolumeCommand(volume.getPath(), new StorageFilerTO(pool), + currentSize, newSize, shrinkOk, instanceName); + ResizeVolumeAnswer answer = (ResizeVolumeAnswer) sendToPool(pool, hosts, resizeCmd); + + /* need to fetch/store new volume size in database. This value comes from + hypervisor rather than trusting that a success means we have a volume of the + size we requested */ + if (answer != null && answer.getResult()) { + long finalSize = answer.getNewSize(); + s_logger.debug("Resize: volume started at size " + currentSize + " and ended at size " + finalSize); + volume.setSize(finalSize); + if (newDiskOffering != null) { + volume.setDiskOfferingId(cmd.getNewDiskOfferingId()); + } + _volsDao.update(volume.getId(), volume); + + success = true; + return volume; + } else if (answer != null) { + s_logger.debug("Resize: returned '" + answer.getDetails() + "'"); + } + } catch (StorageUnavailableException e) { + s_logger.debug("volume failed to resize: "+e); + return null; + } finally { + if(success) { + try { + stateTransitTo(volume, Volume.Event.OperationSucceeded); + } catch (NoTransitionException etrans) { + throw new CloudRuntimeException("Failed to change volume state: " + etrans.toString()); + } + } else { + try { + stateTransitTo(volume, Volume.Event.OperationFailed); + } catch (NoTransitionException etrans) { + throw new CloudRuntimeException("Failed to change volume state: " + etrans.toString()); + } + } + } + return null; + } + @Override @DB public boolean destroyVolume(VolumeVO volume) throws ConcurrentOperationException { diff --git a/setup/db/create-schema-view.sql b/setup/db/create-schema-view.sql old mode 100755 new mode 100644 diff --git a/test/integration/smoke/test_volumes.py b/test/integration/smoke/test_volumes.py index 3fe68ec5621..36eb5ded263 100644 --- a/test/integration/smoke/test_volumes.py +++ b/test/integration/smoke/test_volumes.py @@ -54,12 +54,20 @@ class Services: "cpunumber": 1, "cpuspeed": 100, # in MHz "memory": 128, # In MBs + "storagetype": "local" }, "disk_offering": { "displaytext": "Small", "name": "Small", + "storagetype": "local", "disksize": 1 }, + 'resized_disk_offering': { + "displaytext": "Resized", + "name": "Resized", + "storagetype": "local", + "disksize": 3 + }, "volume_offerings": { 0: { "diskname": "TestDiskServ", @@ -77,8 +85,8 @@ class Services: "diskdevice": "/dev/xvdb", "ostype": 'CentOS 5.3 (64-bit)', "mode": 'basic', - "sleep": 60, - "timeout": 10, + "sleep": 10, + "timeout": 600, } @@ -237,7 +245,7 @@ class TestCreateVolume(cloudstackTestCase): ssh = self.virtual_machine.get_ssh_client( reconnect=True ) - c = "fdisk -l" + c = "/sbin/fdisk -l" res = ssh.execute(c) except Exception as e: @@ -283,6 +291,16 @@ class TestVolumes(cloudstackTestCase): cls.api_client, cls.services["disk_offering"] ) + cls.resized_disk_offering = DiskOffering.create( + cls.api_client, + cls.services["resized_disk_offering"] + ) + cls.custom_resized_disk_offering = DiskOffering.create( + cls.api_client, + cls.services["resized_disk_offering"], + custom=True + ) + template = get_template( cls.api_client, cls.zone.id, @@ -292,6 +310,8 @@ class TestVolumes(cloudstackTestCase): cls.services["zoneid"] = cls.zone.id cls.services["template"] = template.id cls.services["diskofferingid"] = cls.disk_offering.id + cls.services['resizeddiskofferingid'] = cls.resized_disk_offering.id + cls.services['customresizeddiskofferingid'] = cls.custom_resized_disk_offering.id # Create VMs, VMs etc cls.account = Account.create( @@ -321,6 +341,8 @@ class TestVolumes(cloudstackTestCase): domainid=cls.account.account.domainid ) cls._cleanup = [ + cls.resized_disk_offering, + cls.custom_resized_disk_offering, cls.service_offering, cls.disk_offering, cls.account @@ -500,7 +522,102 @@ class TestVolumes(cloudstackTestCase): ) @attr(tags = ["advanced", "advancedns", "smoke"]) - def test_07_delete_detached_volume(self): + def test_07_resize_fail(self): + """Verify invalid options fail to Resize a volume""" + # Verify the size is the new size is what we wanted it to be. + self.debug("Fail Resize Volume ID: %s" % self.volume.id) + + # first, an invalid id + cmd = resizeVolume.resizeVolumeCmd() + cmd.id = "invalid id" + cmd.diskofferingid = self.services['resizeddiskofferingid'] + success = False + try: + response = self.apiClient.resizeVolume(cmd) + except Exception as ex: + if str(ex) == "HTTP Error 431: 431": + success = True + self.assertEqual(success, True, "ResizeVolume - verify invalid id is handled appropriately") + + # Next, we'll try an invalid disk offering id + cmd.id = self.volume.id + cmd.diskofferingid = "invalid id" + success = False + try: + response = self.apiClient.resizeVolume(cmd) + except Exception as ex: + if "need to specify a disk offering" in str(ex): + success = True + self.assertEqual(success, True, "ResizeVolume - verify disk offering is handled appropriately") + + # Ok, now let's try and resize a volume that is not custom. + cmd.id = self.volume.id + cmd.diskofferingid = self.services['diskofferingid'] + cmd.size = 4 + currentSize = self.volume.size + + self.apiClient.resizeVolume(cmd) + count = 0 + success = True + while count < 10: + list_volume_response = list_volumes( + self.apiClient, + id=self.volume.id, + type='DATADISK' + ) + for vol in list_volume_response: + if vol.id == self.volume.id and vol.size != currentSize: + success = False + if success: + break + else: + time.sleep(1) + count += 1 + + self.assertEqual( + success, + True, + "Verify the volume did not resize" + ) + + + @attr(tags = ["advanced", "advancedns", "smoke"]) + def test_08_resize_volume(self): + """Resize a volume""" + # Verify the size is the new size is what we wanted it to be. + self.debug("Resize Volume ID: %s" % self.volume.id) + + cmd = resizeVolume.resizeVolumeCmd() + cmd.id = self.volume.id + cmd.diskofferingid = self.services['resizeddiskofferingid'] + + self.apiClient.resizeVolume(cmd) + + count = 0 + success = False + while count < 3: + list_volume_response = list_volumes( + self.apiClient, + id=self.volume.id, + type='DATADISK' + ) + for vol in list_volume_response: + if vol.id == self.volume.id and vol.size == 3221225472L: + success = True + if success: + break + else: + time.sleep(10) + count += 1 + + self.assertEqual( + success, + True, + "Check if the volume resized appropriately" + ) + + @attr(tags = ["advanced", "advancedns", "smoke"]) + def test_09_delete_detached_volume(self): """Delete a Volume unattached to an VM """ # Validate the following diff --git a/tools/marvin/marvin/integration/lib/base.py b/tools/marvin/marvin/integration/lib/base.py index 726a628d070..87b0bbb7bbc 100644 --- a/tools/marvin/marvin/integration/lib/base.py +++ b/tools/marvin/marvin/integration/lib/base.py @@ -509,6 +509,12 @@ class Volume: [setattr(cmd, k, v) for k, v in kwargs.items()] return(apiclient.listVolumes(cmd)) + def resize(cls, apiclient, **kwargs): + """Resize a volume""" + cmd = resizeVolume.resizeVolumeCmd() + cmd.id = self.id + [setattr(cmd, k, v) for k, v in kwargs.items()] + return(apiclient.resizeVolume(cmd)) class Snapshot: """Manage Snapshot Lifecycle